From: Richard Henderson <[email protected]> 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 <[email protected]> Signed-off-by: Richard Henderson <[email protected]> Message-id: [email protected] Signed-off-by: Peter Maydell <[email protected]> --- target/arm/cpu.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/target/arm/cpu.c b/target/arm/cpu.c index 8771b695d9..10daca0ad6 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -322,6 +322,13 @@ static void cp_reg_check_reset(gpointer key, gpointer value, gpointer opaque) assert(oldvalue == newvalue); } +static void arm_init_fp_status(float_status *s) +{ + memset(s, 0, sizeof(*s)); + arm_set_default_fp_behaviours(s); + /* We want 0 for all other settings. */ +} + static void arm_cpu_reset_hold(Object *obj, ResetType type) { CPUState *cs = CPU(obj); @@ -644,20 +651,16 @@ static void arm_cpu_reset_hold(Object *obj, ResetType type) env->sau.ctrl = 0; } + for (int i = 0; i < FPST_COUNT; i++) { + arm_init_fp_status(&env->vfp.fp_status[i]); + } + set_flush_to_zero(1, &env->vfp.fp_status[FPST_STD]); set_flush_inputs_to_zero(1, &env->vfp.fp_status[FPST_STD]); set_default_nan_mode(1, &env->vfp.fp_status[FPST_STD]); set_default_nan_mode(1, &env->vfp.fp_status[FPST_STD_F16]); set_default_nan_mode(1, &env->vfp.fp_status[FPST_ZA]); set_default_nan_mode(1, &env->vfp.fp_status[FPST_ZA_F16]); - arm_set_default_fp_behaviours(&env->vfp.fp_status[FPST_A32]); - arm_set_default_fp_behaviours(&env->vfp.fp_status[FPST_A64]); - arm_set_default_fp_behaviours(&env->vfp.fp_status[FPST_ZA]); - arm_set_default_fp_behaviours(&env->vfp.fp_status[FPST_STD]); - arm_set_default_fp_behaviours(&env->vfp.fp_status[FPST_A32_F16]); - arm_set_default_fp_behaviours(&env->vfp.fp_status[FPST_A64_F16]); - arm_set_default_fp_behaviours(&env->vfp.fp_status[FPST_ZA_F16]); - arm_set_default_fp_behaviours(&env->vfp.fp_status[FPST_STD_F16]); arm_set_ah_fp_behaviours(&env->vfp.fp_status[FPST_AH]); set_flush_to_zero(1, &env->vfp.fp_status[FPST_AH]); set_flush_inputs_to_zero(1, &env->vfp.fp_status[FPST_AH]); -- 2.43.0
