aboutsummaryrefslogtreecommitdiff
path: root/target-arm/op_neon.h
diff options
context:
space:
mode:
Diffstat (limited to 'target-arm/op_neon.h')
-rw-r--r--target-arm/op_neon.h56
1 files changed, 23 insertions, 33 deletions
diff --git a/target-arm/op_neon.h b/target-arm/op_neon.h
index e91dcc5278..095165ede5 100644
--- a/target-arm/op_neon.h
+++ b/target-arm/op_neon.h
@@ -14,6 +14,29 @@
#define NFS &env->vfp.fp_status
#define NEON_OP(name) void OPPROTO op_neon_##name (void)
+/* Helper routines to perform bitwise copies between float and int. */
+static inline float32 vfp_itos(uint32_t i)
+{
+ union {
+ uint32_t i;
+ float32 s;
+ } v;
+
+ v.i = i;
+ return v.s;
+}
+
+static inline uint32_t vfp_stoi(float32 s)
+{
+ union {
+ uint32_t i;
+ float32 s;
+ } v;
+
+ v.s = s;
+ return v.i;
+}
+
NEON_OP(getreg_T0)
{
T0 = *(uint32_t *)((char *) env + PARAM1);
@@ -754,18 +777,6 @@ NEON_VOP(qrdmulh_s32, neon_s32, 1)
#undef NEON_FN
#undef NEON_QDMULH32
-NEON_OP(recps_f32)
-{
- T0 = vfp_stoi(helper_recps_f32(vfp_itos(T0), vfp_itos(T1)));
- FORCE_RET();
-}
-
-NEON_OP(rsqrts_f32)
-{
- T0 = vfp_stoi(helper_rsqrts_f32(vfp_itos(T0), vfp_itos(T1)));
- FORCE_RET();
-}
-
/* Floating point comparisons produce an integer result. */
#define NEON_VOP_FCMP(name, cmp) \
NEON_OP(name) \
@@ -1702,27 +1713,6 @@ NEON_OP(zip_u16)
FORCE_RET();
}
-/* Reciprocal/root estimate. */
-NEON_OP(recpe_u32)
-{
- T0 = helper_recpe_u32(T0);
-}
-
-NEON_OP(rsqrte_u32)
-{
- T0 = helper_rsqrte_u32(T0);
-}
-
-NEON_OP(recpe_f32)
-{
- FT0s = helper_recpe_f32(FT0s);
-}
-
-NEON_OP(rsqrte_f32)
-{
- FT0s = helper_rsqrte_f32(FT0s);
-}
-
/* Table lookup. This accessed the register file directly. */
NEON_OP(tbl)
{