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
This commit is contained in:
parent
2bf5629c97
commit
d62c734d52
@ -67,8 +67,9 @@ static FloatPartsN *partsN(pick_nan_muladd)(FloatPartsN *a, FloatPartsN *b,
|
|||||||
{
|
{
|
||||||
int which;
|
int which;
|
||||||
bool infzero = (ab_mask == float_cmask_infzero);
|
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);
|
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) {
|
if (s->default_nan_mode) {
|
||||||
which = 3;
|
which = 3;
|
||||||
} else {
|
} 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) {
|
if (which == 3) {
|
||||||
|
@ -473,7 +473,7 @@ static int pickNaN(FloatClass a_cls, FloatClass b_cls,
|
|||||||
| Return values : 0 : a; 1 : b; 2 : c; 3 : default-NaN
|
| Return values : 0 : a; 1 : b; 2 : c; 3 : default-NaN
|
||||||
*----------------------------------------------------------------------------*/
|
*----------------------------------------------------------------------------*/
|
||||||
static int pickNaNMulAdd(FloatClass a_cls, FloatClass b_cls, FloatClass c_cls,
|
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
|
* We guarantee not to require the target to tell us how to
|
||||||
|
Loading…
x
Reference in New Issue
Block a user