[for-6.2,44/53] softfloat: Remove assertion preventing silencing of NaN in default-NaN mode

Message ID 20210729111512.16541-45-peter.maydell@linaro.org
State Superseded
Headers show
Series
  • target/arm: MVE slices 3 and 4
Related show

Commit Message

Peter Maydell July 29, 2021, 11:15 a.m.
In commit a777d6033447a we added an assertion to parts_silence_nan() that
prohibits calling float*_silence_nan() when in default-NaN mode.
This ties together a property of the output ("do we generate a default
NaN when the result is a NaN?") with an operation on an input ("silence
this input NaN").

It's true that most of the time when in default-NaN mode you won't
need to silence an input NaN, because you can just produce the
default NaN as the result instead.  But some functions like
float*_maxnum() are defined to be able to work with quiet NaNs, so
silencing an input SNaN is still reasonable.  In particular, the
upcoming implementation of MVE VMAXNMV would fall over this assertion
if we didn't delete it.

Delete the assertion.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

---
 fpu/softfloat-specialize.c.inc | 1 -
 1 file changed, 1 deletion(-)

-- 
2.20.1

Comments

Richard Henderson July 30, 2021, 8 p.m. | #1
On 7/29/21 1:15 AM, Peter Maydell wrote:
> In commit a777d6033447a we added an assertion to parts_silence_nan() that

> prohibits calling float*_silence_nan() when in default-NaN mode.

> This ties together a property of the output ("do we generate a default

> NaN when the result is a NaN?") with an operation on an input ("silence

> this input NaN").

> 

> It's true that most of the time when in default-NaN mode you won't

> need to silence an input NaN, because you can just produce the

> default NaN as the result instead.  But some functions like

> float*_maxnum() are defined to be able to work with quiet NaNs, so

> silencing an input SNaN is still reasonable.  In particular, the

> upcoming implementation of MVE VMAXNMV would fall over this assertion

> if we didn't delete it.

> 

> Delete the assertion.

> 

> Signed-off-by: Peter Maydell<peter.maydell@linaro.org>

> ---

>   fpu/softfloat-specialize.c.inc | 1 -

>   1 file changed, 1 deletion(-)


Reviewed-by: Richard Henderson <richard.henderson@linaro.org>


r~

Patch

diff --git a/fpu/softfloat-specialize.c.inc b/fpu/softfloat-specialize.c.inc
index 12467bb9bba..f2ad0f335e6 100644
--- a/fpu/softfloat-specialize.c.inc
+++ b/fpu/softfloat-specialize.c.inc
@@ -198,7 +198,6 @@  static void parts128_default_nan(FloatParts128 *p, float_status *status)
 static uint64_t parts_silence_nan_frac(uint64_t frac, float_status *status)
 {
     g_assert(!no_signaling_nans(status));
-    g_assert(!status->default_nan_mode);
 
     /* The only snan_bit_is_one target without default_nan_mode is HPPA. */
     if (snan_bit_is_one(status)) {