Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
Signed-off-by: Richard Henderson <[email protected]>
---
fpu/softfloat.c | 14 +++++++-------
fpu/softfloat-parts.c.inc | 15 ++++++++-------
2 files changed, 15 insertions(+), 14 deletions(-)
diff --git a/fpu/softfloat.c b/fpu/softfloat.c
index 9c1e6fdce4..7d67e25c17 100644
--- a/fpu/softfloat.c
+++ b/fpu/softfloat.c
@@ -2378,7 +2378,7 @@ static void parts_float_to_e5m2(FloatParts64 *a,
float_status *s, bool saturate)
switch (a->cls) {
case float_class_snan:
case float_class_qnan:
- parts64_return_nan(a, s);
+ *a = parts64_return_nan(a, s);
break;
case float_class_inf:
@@ -2405,7 +2405,7 @@ static void parts_float_to_e5m2(FloatParts64 *a,
float_status *s, bool saturate)
static void parts64_float_to_float(FloatParts64 *a, float_status *s)
{
if (is_nan(a->cls)) {
- parts64_return_nan(a, s);
+ *a = parts64_return_nan(a, s);
}
if (a->cls == float_class_denormal) {
float_raise(float_flag_input_denormal_used, s);
@@ -2415,7 +2415,7 @@ static void parts64_float_to_float(FloatParts64 *a,
float_status *s)
static void parts128_float_to_float(FloatParts128 *a, float_status *s)
{
if (is_nan(a->cls)) {
- parts128_return_nan(a, s);
+ *a = parts128_return_nan(a, s);
}
if (a->cls == float_class_denormal) {
float_raise(float_flag_input_denormal_used, s);
@@ -2441,7 +2441,7 @@ static FloatParts64 parts128_to_parts64(FloatParts128 *b,
float_status *s)
case float_class_qnan:
/* Discard the low bits of the NaN. */
r.frac = b->frac_hi;
- parts64_return_nan(&r, s);
+ r = parts64_return_nan(&r, s);
break;
default:
break;
@@ -2461,7 +2461,7 @@ static FloatParts128 parts64_to_parts128(FloatParts64 *b,
float_status *s)
switch (r.cls) {
case float_class_qnan:
case float_class_snan:
- parts128_return_nan(&r, s);
+ r = parts128_return_nan(&r, s);
break;
case float_class_denormal:
float_raise(float_flag_input_denormal_used, s);
@@ -4458,7 +4458,7 @@ static void parts64_log2(FloatParts64 *a, float_status
*s, const FloatFmt *fmt)
break;
case float_class_snan:
case float_class_qnan:
- parts64_return_nan(a, s);
+ *a = parts64_return_nan(a, s);
return;
case float_class_zero:
float_raise(float_flag_divbyzero, s);
@@ -5067,7 +5067,7 @@ float32 float32_exp2(float32 a, float_status *status)
break;
case float_class_snan:
case float_class_qnan:
- parts64_return_nan(&xp, status);
+ xp = parts64_return_nan(&xp, status);
return float32_round_pack_canonical(&xp, status);
case float_class_inf:
return xp.sign ? float32_zero : a;
diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc
index 4733755f35..ef46dd740c 100644
--- a/fpu/softfloat-parts.c.inc
+++ b/fpu/softfloat-parts.c.inc
@@ -15,25 +15,26 @@
* indicated otherwise.
*/
-static void partsN(return_nan)(FloatPartsN *a, float_status *s)
+static FloatPartsN partsN(return_nan)(const FloatPartsN *a, float_status *s)
{
switch (a->cls) {
case float_class_snan:
float_raise(float_flag_invalid | float_flag_invalid_snan, s);
if (s->default_nan_mode) {
- *a = partsN(default_nan)(s);
+ return partsN(default_nan)(s);
} else {
- *a = partsN(silence_nan)(a, s);
+ return partsN(silence_nan)(a, s);
}
break;
case float_class_qnan:
if (s->default_nan_mode) {
- *a = partsN(default_nan)(s);
+ return partsN(default_nan)(s);
}
break;
default:
g_assert_not_reached();
}
+ return *a;
}
static FloatPartsN *partsN(pick_nan)(FloatPartsN *a, FloatPartsN *b,
@@ -941,7 +942,7 @@ static void partsN(sqrt)(FloatPartsN *a, float_status
*status,
break;
case float_class_snan:
case float_class_qnan:
- partsN(return_nan)(a, status);
+ *a = partsN(return_nan)(a, status);
return;
case float_class_zero:
return;
@@ -1263,7 +1264,7 @@ static void partsN(round_to_int)(FloatPartsN *a,
FloatRoundMode rmode,
switch (a->cls) {
case float_class_qnan:
case float_class_snan:
- partsN(return_nan)(a, s);
+ *a = partsN(return_nan)(a, s);
break;
case float_class_zero:
case float_class_inf:
@@ -1656,7 +1657,7 @@ static void partsN(scalbn)(FloatPartsN *a, int n,
float_status *s)
switch (a->cls) {
case float_class_snan:
case float_class_qnan:
- partsN(return_nan)(a, s);
+ *a = partsN(return_nan)(a, s);
break;
case float_class_zero:
case float_class_inf:
--
2.43.0