target/arm: Set default NaN pattern explicitly
Set the default NaN pattern explicitly for the arm target. This includes setting it for the old linux-user nwfpe emulation. For nwfpe, our default doesn't match the real kernel, but we avoid making a behaviour change in this commit. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20241202131347.498124-41-peter.maydell@linaro.org
This commit is contained in:
parent
369cb9cfe0
commit
29fbe4786e
@ -69,6 +69,11 @@ void resetFPA11(void)
|
|||||||
* this late date.
|
* this late date.
|
||||||
*/
|
*/
|
||||||
set_float_2nan_prop_rule(float_2nan_prop_s_ab, &fpa11->fp_status);
|
set_float_2nan_prop_rule(float_2nan_prop_s_ab, &fpa11->fp_status);
|
||||||
|
/*
|
||||||
|
* Use the same default NaN value as Arm VFP. This doesn't match
|
||||||
|
* the Linux kernel's nwfpe emulation, which uses an all-1s value.
|
||||||
|
*/
|
||||||
|
set_float_default_nan_pattern(0b01000000, &fpa11->fp_status);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetRoundingMode(const unsigned int opcode)
|
void SetRoundingMode(const unsigned int opcode)
|
||||||
|
@ -179,6 +179,7 @@ void arm_register_el_change_hook(ARMCPU *cpu, ARMELChangeHookFn *hook,
|
|||||||
* the pseudocode function the arguments are in the order c, a, b.
|
* the pseudocode function the arguments are in the order c, a, b.
|
||||||
* * 0 * Inf + NaN returns the default NaN if the input NaN is quiet,
|
* * 0 * Inf + NaN returns the default NaN if the input NaN is quiet,
|
||||||
* and the input NaN if it is signalling
|
* and the input NaN if it is signalling
|
||||||
|
* * Default NaN has sign bit clear, msb frac bit set
|
||||||
*/
|
*/
|
||||||
static void arm_set_default_fp_behaviours(float_status *s)
|
static void arm_set_default_fp_behaviours(float_status *s)
|
||||||
{
|
{
|
||||||
@ -186,6 +187,7 @@ static void arm_set_default_fp_behaviours(float_status *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_3nan_prop_rule(float_3nan_prop_s_cab, s);
|
set_float_3nan_prop_rule(float_3nan_prop_s_cab, s);
|
||||||
set_float_infzeronan_rule(float_infzeronan_dnan_if_qnan, s);
|
set_float_infzeronan_rule(float_infzeronan_dnan_if_qnan, s);
|
||||||
|
set_float_default_nan_pattern(0b01000000, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cp_reg_reset(gpointer key, gpointer value, gpointer opaque)
|
static void cp_reg_reset(gpointer key, gpointer value, gpointer opaque)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user