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]);