diff options
Diffstat (limited to 'target-arm/op_neon.h')
-rw-r--r-- | target-arm/op_neon.h | 56 |
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) { |