target/arm: Set FloatInfZeroNaNRule explicitly

Set the FloatInfZeroNaNRule explicitly for the Arm target,
so we can remove the ifdef from pickNaNMulAdd().

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20241202131347.498124-6-peter.maydell@linaro.org
This commit is contained in:
Peter Maydell 2024-12-11 15:30:53 +00:00
parent 27aedf7d25
commit f7892f9c00
2 changed files with 4 additions and 7 deletions

View file

@ -489,13 +489,7 @@ static int pickNaNMulAdd(FloatClass a_cls, FloatClass b_cls, FloatClass c_cls,
/* /*
* Temporarily fall back to ifdef ladder * Temporarily fall back to ifdef ladder
*/ */
#if defined(TARGET_ARM) #if defined(TARGET_MIPS)
/*
* For ARM, the (inf,zero,qnan) case returns the default NaN,
* but (inf,zero,snan) returns the input NaN.
*/
rule = float_infzeronan_dnan_if_qnan;
#elif defined(TARGET_MIPS)
if (snan_bit_is_one(status)) { if (snan_bit_is_one(status)) {
/* /*
* For MIPS systems that conform to IEEE754-1985, the (inf,zero,nan) * For MIPS systems that conform to IEEE754-1985, the (inf,zero,nan)

View file

@ -173,11 +173,14 @@ void arm_register_el_change_hook(ARMCPU *cpu, ARMELChangeHookFn *hook,
* * tininess-before-rounding * * tininess-before-rounding
* * 2-input NaN propagation prefers SNaN over QNaN, and then * * 2-input NaN propagation prefers SNaN over QNaN, and then
* operand A over operand B (see FPProcessNaNs() pseudocode) * operand A over operand B (see FPProcessNaNs() pseudocode)
* * 0 * Inf + NaN returns the default NaN if the input NaN is quiet,
* and the input NaN if it is signalling
*/ */
static void arm_set_default_fp_behaviours(float_status *s) static void arm_set_default_fp_behaviours(float_status *s)
{ {
set_float_detect_tininess(float_tininess_before_rounding, s); set_float_detect_tininess(float_tininess_before_rounding, s);
set_float_2nan_prop_rule(float_2nan_prop_s_ab, s); set_float_2nan_prop_rule(float_2nan_prop_s_ab, s);
set_float_infzeronan_rule(float_infzeronan_dnan_if_qnan, s);
} }
static void cp_reg_reset(gpointer key, gpointer value, gpointer opaque) static void cp_reg_reset(gpointer key, gpointer value, gpointer opaque)