Re: [PATCH 12/72] softfloat: fix return_nan vs default_nan_mode
On 08.05.21 03:47, Richard Henderson wrote: Do not call parts_silence_nan when default_nan_mode is in effect. This will avoid an assert in a later patch. Signed-off-by: Richard Henderson --- fpu/softfloat.c | 19 +++ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/fpu/softfloat.c b/fpu/softfloat.c index b694e38522..6589f00b23 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -892,21 +892,16 @@ static float64 float64_round_pack_canonical(FloatParts p, float_status *s) static FloatParts return_nan(FloatParts a, float_status *s) { -switch (a.cls) { -case float_class_snan: +g_assert(is_nan(a.cls)); +if (is_snan(a.cls)) { float_raise(float_flag_invalid, s); -a = parts_silence_nan(a, s); -/* fall through */ -case float_class_qnan: -if (s->default_nan_mode) { -return parts_default_nan(s); +if (!s->default_nan_mode) { +return parts_silence_nan(a, s); } -break; - -default: -g_assert_not_reached(); +} else if (!s->default_nan_mode) { +return a; } -return a; +return parts_default_nan(s); } static FloatParts pick_nan(FloatParts a, FloatParts b, float_status *s) Reviewed-by: David Hildenbrand -- Thanks, David / dhildenb
Re: [PATCH 12/72] softfloat: fix return_nan vs default_nan_mode
Richard Henderson writes: > Do not call parts_silence_nan when default_nan_mode is in > effect. This will avoid an assert in a later patch. > > Signed-off-by: Richard Henderson Reviewed-by: Alex Bennée -- Alex Bennée
[PATCH 12/72] softfloat: fix return_nan vs default_nan_mode
Do not call parts_silence_nan when default_nan_mode is in effect. This will avoid an assert in a later patch. Signed-off-by: Richard Henderson --- fpu/softfloat.c | 19 +++ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/fpu/softfloat.c b/fpu/softfloat.c index b694e38522..6589f00b23 100644 --- a/fpu/softfloat.c +++ b/fpu/softfloat.c @@ -892,21 +892,16 @@ static float64 float64_round_pack_canonical(FloatParts p, float_status *s) static FloatParts return_nan(FloatParts a, float_status *s) { -switch (a.cls) { -case float_class_snan: +g_assert(is_nan(a.cls)); +if (is_snan(a.cls)) { float_raise(float_flag_invalid, s); -a = parts_silence_nan(a, s); -/* fall through */ -case float_class_qnan: -if (s->default_nan_mode) { -return parts_default_nan(s); +if (!s->default_nan_mode) { +return parts_silence_nan(a, s); } -break; - -default: -g_assert_not_reached(); +} else if (!s->default_nan_mode) { +return a; } -return a; +return parts_default_nan(s); } static FloatParts pick_nan(FloatParts a, FloatParts b, float_status *s) -- 2.25.1