Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
Signed-off-by: Richard Henderson <[email protected]>
---
fpu/softfloat.c | 10 +++++-----
fpu/softfloat-parts.c.inc | 6 +++---
fpu/softfloat-specialize.c.inc | 20 ++++++++++++++------
3 files changed, 22 insertions(+), 14 deletions(-)
diff --git a/fpu/softfloat.c b/fpu/softfloat.c
index fa8913a288..9c1e6fdce4 100644
--- a/fpu/softfloat.c
+++ b/fpu/softfloat.c
@@ -4634,7 +4634,7 @@ float16 float16_silence_nan(float16 a, float_status
*status)
FloatParts64 p = unpack_raw64(&float16_params, a);
p.frac <<= float16_params.frac_shift;
- parts64_silence_nan(&p, status);
+ p = parts64_silence_nan(&p, status);
p.frac >>= float16_params.frac_shift;
return pack_raw64(&p, &float16_params);
}
@@ -4644,7 +4644,7 @@ float32 float32_silence_nan(float32 a, float_status
*status)
FloatParts64 p = unpack_raw64(&float32_params, a);
p.frac <<= float32_params.frac_shift;
- parts64_silence_nan(&p, status);
+ p = parts64_silence_nan(&p, status);
p.frac >>= float32_params.frac_shift;
return pack_raw64(&p, &float32_params);
}
@@ -4654,7 +4654,7 @@ float64 float64_silence_nan(float64 a, float_status
*status)
FloatParts64 p = unpack_raw64(&float64_params, a);
p.frac <<= float64_params.frac_shift;
- parts64_silence_nan(&p, status);
+ p = parts64_silence_nan(&p, status);
p.frac >>= float64_params.frac_shift;
return pack_raw64(&p, &float64_params);
}
@@ -4664,7 +4664,7 @@ bfloat16 bfloat16_silence_nan(bfloat16 a, float_status
*status)
FloatParts64 p = unpack_raw64(&bfloat16_params, a);
p.frac <<= bfloat16_params.frac_shift;
- parts64_silence_nan(&p, status);
+ p = parts64_silence_nan(&p, status);
p.frac >>= bfloat16_params.frac_shift;
return pack_raw64(&p, &bfloat16_params);
}
@@ -4674,7 +4674,7 @@ float128 float128_silence_nan(float128 a, float_status
*status)
FloatParts128 p = float128_unpack_raw(a);
frac128_shl(&p, float128_params.frac_shift);
- parts128_silence_nan(&p, status);
+ p = parts128_silence_nan(&p, status);
frac128_shr(&p, float128_params.frac_shift);
return float128_pack_raw(&p);
}
diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc
index ed7080d886..4733755f35 100644
--- a/fpu/softfloat-parts.c.inc
+++ b/fpu/softfloat-parts.c.inc
@@ -23,7 +23,7 @@ static void partsN(return_nan)(FloatPartsN *a, float_status
*s)
if (s->default_nan_mode) {
*a = partsN(default_nan)(s);
} else {
- partsN(silence_nan)(a, s);
+ *a = partsN(silence_nan)(a, s);
}
break;
case float_class_qnan:
@@ -109,7 +109,7 @@ static FloatPartsN *partsN(pick_nan)(FloatPartsN *a,
FloatPartsN *b,
}
if (is_snan(ret->cls)) {
- partsN(silence_nan)(ret, s);
+ *ret = partsN(silence_nan)(ret, s);
}
return ret;
}
@@ -179,7 +179,7 @@ static FloatPartsN *partsN(pick_nan_muladd)(FloatPartsN *a,
FloatPartsN *b,
}
if (is_snan(ret->cls)) {
- partsN(silence_nan)(ret, s);
+ *ret = partsN(silence_nan)(ret, s);
}
return ret;
diff --git a/fpu/softfloat-specialize.c.inc b/fpu/softfloat-specialize.c.inc
index dd65432813..2723bf5e61 100644
--- a/fpu/softfloat-specialize.c.inc
+++ b/fpu/softfloat-specialize.c.inc
@@ -179,16 +179,24 @@ static uint64_t parts_silence_nan_frac(uint64_t frac,
float_status *status)
return frac;
}
-static void parts64_silence_nan(FloatParts64 *p, float_status *status)
+static FloatParts64 parts64_silence_nan(const FloatParts64 *p,
+ float_status *status)
{
- p->frac = parts_silence_nan_frac(p->frac, status);
- p->cls = float_class_qnan;
+ FloatParts64 r = *p;
+
+ r.frac = parts_silence_nan_frac(r.frac, status);
+ r.cls = float_class_qnan;
+ return r;
}
-static void parts128_silence_nan(FloatParts128 *p, float_status *status)
+static FloatParts128 parts128_silence_nan(const FloatParts128 *p,
+ float_status *status)
{
- p->frac_hi = parts_silence_nan_frac(p->frac_hi, status);
- p->cls = float_class_qnan;
+ FloatParts128 r = *p;
+
+ r.frac_hi = parts_silence_nan_frac(r.frac_hi, status);
+ r.cls = float_class_qnan;
+ return r;
}
/*----------------------------------------------------------------------------
--
2.43.0