path: root/target/arm/vfp_helper.c
diff options
authorPeter Maydell <peter.maydell@linaro.org>2020-08-28 19:33:17 +0100
committerPeter Maydell <peter.maydell@linaro.org>2020-09-01 11:19:32 +0100
commitce2d65a5d191380756cdac7a1fd1ba76bd1621cf (patch)
tree8500244499efa7a7ed32162a935703c71347494e /target/arm/vfp_helper.c
parent009a07335b8ff492d940e1eb229a1b0d302c2512 (diff)
target/arm: Implement VFP fp16 for VABS, VNEG, VSQRT
Implement VFP fp16 for VABS, VNEG and VSQRT. This is all the fp16 insns that use the DO_VFP_2OP macro, because there is no fp16 version of VMOV_reg. Notes: * the gen_helper_vfp_negh already exists as we needed to create it for the fp16 multiply-add insns * as usual we need to use the f16 version of the fp_status; this is only relevant for VSQRT Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20200828183354.27913-9-peter.maydell@linaro.org
Diffstat (limited to 'target/arm/vfp_helper.c')
1 files changed, 10 insertions, 0 deletions
diff --git a/target/arm/vfp_helper.c b/target/arm/vfp_helper.c
index 579ca3832d..cc7fb6ddb6 100644
--- a/target/arm/vfp_helper.c
+++ b/target/arm/vfp_helper.c
@@ -276,6 +276,11 @@ float64 VFP_HELPER(neg, d)(float64 a)
return float64_chs(a);
+dh_ctype_f16 VFP_HELPER(abs, h)(dh_ctype_f16 a)
+ return float16_abs(a);
float32 VFP_HELPER(abs, s)(float32 a)
return float32_abs(a);
@@ -286,6 +291,11 @@ float64 VFP_HELPER(abs, d)(float64 a)
return float64_abs(a);
+dh_ctype_f16 VFP_HELPER(sqrt, h)(dh_ctype_f16 a, CPUARMState *env)
+ return float16_sqrt(a, &env->vfp.fp_status_f16);
float32 VFP_HELPER(sqrt, s)(float32 a, CPUARMState *env)
return float32_sqrt(a, &env->vfp.fp_status);