aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2024-12-11 15:30:56 +0000
committerPeter Maydell <peter.maydell@linaro.org>2024-12-11 15:30:56 +0000
commit2bf5629c97af5aa57f8524af92f5459f1d2ceeac (patch)
tree163de35a859087421cb445de215226c064700baf
parent0fb7fa29d3c4a21bf5daf7f30c70f916e878935c (diff)
downloadqemu-2bf5629c97af5aa57f8524af92f5459f1d2ceeac.zip
qemu-2bf5629c97af5aa57f8524af92f5459f1d2ceeac.tar.gz
qemu-2bf5629c97af5aa57f8524af92f5459f1d2ceeac.tar.bz2
target/hppa: Set FloatInfZeroNaNRule explicitly
Set the FloatInfZeroNaNRule explicitly for the HPPA target, so we can remove the ifdef from pickNaNMulAdd(). As this is the last target to be converted to explicitly setting the rule, we can remove the fallback code in pickNaNMulAdd() entirely. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20241202131347.498124-14-peter.maydell@linaro.org
-rw-r--r--fpu/softfloat-specialize.c.inc13
-rw-r--r--target/hppa/fpu_helper.c2
2 files changed, 3 insertions, 12 deletions
diff --git a/fpu/softfloat-specialize.c.inc b/fpu/softfloat-specialize.c.inc
index 05dec2f..3e4ec93 100644
--- a/fpu/softfloat-specialize.c.inc
+++ b/fpu/softfloat-specialize.c.inc
@@ -475,8 +475,6 @@ static int pickNaN(FloatClass a_cls, FloatClass b_cls,
static int pickNaNMulAdd(FloatClass a_cls, FloatClass b_cls, FloatClass c_cls,
bool infzero, float_status *status)
{
- FloatInfZeroNaNRule rule = status->float_infzeronan_rule;
-
/*
* We guarantee not to require the target to tell us how to
* pick a NaN if we're always returning the default NaN.
@@ -485,21 +483,12 @@ static int pickNaNMulAdd(FloatClass a_cls, FloatClass b_cls, FloatClass c_cls,
*/
assert(!status->default_nan_mode);
- if (rule == float_infzeronan_none) {
- /*
- * Temporarily fall back to ifdef ladder
- */
-#if defined(TARGET_HPPA)
- rule = float_infzeronan_dnan_never;
-#endif
- }
-
if (infzero) {
/*
* Inf * 0 + NaN -- some implementations return the default NaN here,
* and some return the input NaN.
*/
- switch (rule) {
+ switch (status->float_infzeronan_rule) {
case float_infzeronan_dnan_never:
return 2;
case float_infzeronan_dnan_always:
diff --git a/target/hppa/fpu_helper.c b/target/hppa/fpu_helper.c
index 0e44074..393cae3 100644
--- a/target/hppa/fpu_helper.c
+++ b/target/hppa/fpu_helper.c
@@ -55,6 +55,8 @@ void HELPER(loaded_fr0)(CPUHPPAState *env)
* HPPA does note implement a CPU reset method at all...
*/
set_float_2nan_prop_rule(float_2nan_prop_s_ab, &env->fp_status);
+ /* For inf * 0 + NaN, return the input NaN */
+ set_float_infzeronan_rule(float_infzeronan_dnan_never, &env->fp_status);
}
void cpu_hppa_loaded_fr0(CPUHPPAState *env)