@samitouri / QOSamiQemu / commits / 151193e911

target/arm: Introduce arm_init_fp_status

Create a function to set all default controls for a float_status. Other settings for specific FPST will be set afterward. Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20260609192110.752384-6-richard.henderson@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

Richard Henderson committed Jun 9, 2026 at 12:20 UTC 151193e911c6791ec905ea8a268a23aa5643d380
1 file changed +11 -8
target/arm/cpu.c
+11 -8
@@ -322,6 +322,13 @@ static void cp_reg_check_reset(gpointer key, gpointer value, gpointer opaque)
322 assert(oldvalue == newvalue);
323 }
324
325 +static void arm_init_fp_status(float_status *s)
326 +{
327 + memset(s, 0, sizeof(*s));
328 + arm_set_default_fp_behaviours(s);
329 + /* We want 0 for all other settings. */
330 +}
331 +
332 static void arm_cpu_reset_hold(Object *obj, ResetType type)
333 {
334 CPUState *cs = CPU(obj);
@@ -644,20 +651,16 @@ static void arm_cpu_reset_hold(Object *obj, ResetType type)
651 env->sau.ctrl = 0;
652 }
653
654 + for (int i = 0; i < FPST_COUNT; i++) {
655 + arm_init_fp_status(&env->vfp.fp_status[i]);
656 + }
657 +
658 set_flush_to_zero(1, &env->vfp.fp_status[FPST_STD]);
659 set_flush_inputs_to_zero(1, &env->vfp.fp_status[FPST_STD]);
660 set_default_nan_mode(1, &env->vfp.fp_status[FPST_STD]);
661 set_default_nan_mode(1, &env->vfp.fp_status[FPST_STD_F16]);
662 set_default_nan_mode(1, &env->vfp.fp_status[FPST_ZA]);
663 set_default_nan_mode(1, &env->vfp.fp_status[FPST_ZA_F16]);
653 - arm_set_default_fp_behaviours(&env->vfp.fp_status[FPST_A32]);
654 - arm_set_default_fp_behaviours(&env->vfp.fp_status[FPST_A64]);
655 - arm_set_default_fp_behaviours(&env->vfp.fp_status[FPST_ZA]);
656 - arm_set_default_fp_behaviours(&env->vfp.fp_status[FPST_STD]);
657 - arm_set_default_fp_behaviours(&env->vfp.fp_status[FPST_A32_F16]);
658 - arm_set_default_fp_behaviours(&env->vfp.fp_status[FPST_A64_F16]);
659 - arm_set_default_fp_behaviours(&env->vfp.fp_status[FPST_ZA_F16]);
660 - arm_set_default_fp_behaviours(&env->vfp.fp_status[FPST_STD_F16]);
664 arm_set_ah_fp_behaviours(&env->vfp.fp_status[FPST_AH]);
665 set_flush_to_zero(1, &env->vfp.fp_status[FPST_AH]);
666 set_flush_inputs_to_zero(1, &env->vfp.fp_status[FPST_AH]);