aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2024-12-11 15:30:57 +0000
committerPeter Maydell <peter.maydell@linaro.org>2024-12-11 15:30:57 +0000
commitd62c734d52147ec312d1ada0e1bc7fa479838575 (patch)
tree1d1e389fbfe47a9354df7de0a6dae9bac3c4e701
parent2bf5629c97af5aa57f8524af92f5459f1d2ceeac (diff)
downloadqemu-d62c734d52147ec312d1ada0e1bc7fa479838575.zip
qemu-d62c734d52147ec312d1ada0e1bc7fa479838575.tar.gz
qemu-d62c734d52147ec312d1ada0e1bc7fa479838575.tar.bz2
softfloat: Pass have_snan to pickNaNMulAdd
The new implementation of pickNaNMulAdd() will find it convenient to know whether at least one of the three arguments to the muladd was a signaling NaN. We already calculate that in the caller, so pass it in as a new bool have_snan. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20241202131347.498124-15-peter.maydell@linaro.org
-rw-r--r--fpu/softfloat-parts.c.inc5
-rw-r--r--fpu/softfloat-specialize.c.inc2
2 files changed, 4 insertions, 3 deletions
diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc
index aac1f9c..655b7d9 100644
--- a/fpu/softfloat-parts.c.inc
+++ b/fpu/softfloat-parts.c.inc
@@ -67,8 +67,9 @@ static FloatPartsN *partsN(pick_nan_muladd)(FloatPartsN *a, FloatPartsN *b,
{
int which;
bool infzero = (ab_mask == float_cmask_infzero);
+ bool have_snan = (abc_mask & float_cmask_snan);
- if (unlikely(abc_mask & float_cmask_snan)) {
+ if (unlikely(have_snan)) {
float_raise(float_flag_invalid | float_flag_invalid_snan, s);
}
@@ -80,7 +81,7 @@ static FloatPartsN *partsN(pick_nan_muladd)(FloatPartsN *a, FloatPartsN *b,
if (s->default_nan_mode) {
which = 3;
} else {
- which = pickNaNMulAdd(a->cls, b->cls, c->cls, infzero, s);
+ which = pickNaNMulAdd(a->cls, b->cls, c->cls, infzero, have_snan, s);
}
if (which == 3) {
diff --git a/fpu/softfloat-specialize.c.inc b/fpu/softfloat-specialize.c.inc
index 3e4ec93..a769c71 100644
--- a/fpu/softfloat-specialize.c.inc
+++ b/fpu/softfloat-specialize.c.inc
@@ -473,7 +473,7 @@ static int pickNaN(FloatClass a_cls, FloatClass b_cls,
| Return values : 0 : a; 1 : b; 2 : c; 3 : default-NaN
*----------------------------------------------------------------------------*/
static int pickNaNMulAdd(FloatClass a_cls, FloatClass b_cls, FloatClass c_cls,
- bool infzero, float_status *status)
+ bool infzero, bool have_snan, float_status *status)
{
/*
* We guarantee not to require the target to tell us how to