From: Philippe Mathieu-Daudé Date: Mon, 1 Jul 2019 16:26:21 +0000 (+0100) Subject: target/arm/vfp_helper: Extract vfp_set_fpscr_from_host() X-Git-Tag: v4.1.0-rc0~31^2~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0c6ad94809b37a1f0f1f75d3cd0e4a24fb77e65c;p=thirdparty%2Fqemu.git target/arm/vfp_helper: Extract vfp_set_fpscr_from_host() The vfp_set_fpscr() helper contains code specific to the host floating point implementation (here the SoftFloat library). Extract this code to vfp_set_fpscr_from_host(). Signed-off-by: Philippe Mathieu-Daudé Message-id: 20190701132516.26392-17-philmd@redhat.com Reviewed-by: Peter Maydell Signed-off-by: Peter Maydell --- diff --git a/target/arm/vfp_helper.c b/target/arm/vfp_helper.c index b19a395b67d..838f7d25fd1 100644 --- a/target/arm/vfp_helper.c +++ b/target/arm/vfp_helper.c @@ -81,6 +81,18 @@ static inline int vfp_exceptbits_to_host(int target_bits) return host_bits; } +static uint32_t vfp_get_fpscr_from_host(CPUARMState *env) +{ + uint32_t i; + + i = get_float_exception_flags(&env->vfp.fp_status); + i |= get_float_exception_flags(&env->vfp.standard_fp_status); + /* FZ16 does not generate an input denormal exception. */ + i |= (get_float_exception_flags(&env->vfp.fp_status_f16) + & ~float_flag_input_denormal); + return vfp_exceptbits_from_host(i); +} + static void vfp_set_fpscr_to_host(CPUARMState *env, uint32_t val) { int i; @@ -141,12 +153,7 @@ uint32_t HELPER(vfp_get_fpscr)(CPUARMState *env) | (env->vfp.vec_len << 16) | (env->vfp.vec_stride << 20); - i = get_float_exception_flags(&env->vfp.fp_status); - i |= get_float_exception_flags(&env->vfp.standard_fp_status); - /* FZ16 does not generate an input denormal exception. */ - i |= (get_float_exception_flags(&env->vfp.fp_status_f16) - & ~float_flag_input_denormal); - fpscr |= vfp_exceptbits_from_host(i); + fpscr |= vfp_get_fpscr_from_host(env); i = env->vfp.qc[0] | env->vfp.qc[1] | env->vfp.qc[2] | env->vfp.qc[3]; fpscr |= i ? FPCR_QC : 0;