@samitouri / QOSamiQemu / commits / c5c5828f7f

fpu: Return struct from parts{64,128}_silence_nan

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>

Richard Henderson committed Apr 25, 2026 at 23:00 UTC c5c5828f7f1497f3a7b8acef7707fd149489bbac
3 files changed +22 -14
fpu/softfloat-parts.c.inc
+3 -3
@@ -23,7 +23,7 @@ static void partsN(return_nan)(FloatPartsN *a, float_status *s)
23 if (s->default_nan_mode) {
24 *a = partsN(default_nan)(s);
25 } else {
26 - partsN(silence_nan)(a, s);
26 + *a = partsN(silence_nan)(a, s);
27 }
28 break;
29 case float_class_qnan:
@@ -109,7 +109,7 @@ static FloatPartsN *partsN(pick_nan)(FloatPartsN *a, FloatPartsN *b,
109 }
110
111 if (is_snan(ret->cls)) {
112 - partsN(silence_nan)(ret, s);
112 + *ret = partsN(silence_nan)(ret, s);
113 }
114 return ret;
115 }
@@ -179,7 +179,7 @@ static FloatPartsN *partsN(pick_nan_muladd)(FloatPartsN *a, FloatPartsN *b,
179 }
180
181 if (is_snan(ret->cls)) {
182 - partsN(silence_nan)(ret, s);
182 + *ret = partsN(silence_nan)(ret, s);
183 }
184 return ret;
185
fpu/softfloat-specialize.c.inc
+14 -6
@@ -179,16 +179,24 @@ static uint64_t parts_silence_nan_frac(uint64_t frac, float_status *status)
179 return frac;
180 }
181
182 -static void parts64_silence_nan(FloatParts64 *p, float_status *status)
182 +static FloatParts64 parts64_silence_nan(const FloatParts64 *p,
183 + float_status *status)
184 {
184 - p->frac = parts_silence_nan_frac(p->frac, status);
185 - p->cls = float_class_qnan;
185 + FloatParts64 r = *p;
186 +
187 + r.frac = parts_silence_nan_frac(r.frac, status);
188 + r.cls = float_class_qnan;
189 + return r;
190 }
191
188 -static void parts128_silence_nan(FloatParts128 *p, float_status *status)
192 +static FloatParts128 parts128_silence_nan(const FloatParts128 *p,
193 + float_status *status)
194 {
190 - p->frac_hi = parts_silence_nan_frac(p->frac_hi, status);
191 - p->cls = float_class_qnan;
195 + FloatParts128 r = *p;
196 +
197 + r.frac_hi = parts_silence_nan_frac(r.frac_hi, status);
198 + r.cls = float_class_qnan;
199 + return r;
200 }
201
202 /*----------------------------------------------------------------------------
fpu/softfloat.c
+5 -5
@@ -4634,7 +4634,7 @@ float16 float16_silence_nan(float16 a, float_status *status)
4634 FloatParts64 p = unpack_raw64(&float16_params, a);
4635
4636 p.frac <<= float16_params.frac_shift;
4637 - parts64_silence_nan(&p, status);
4637 + p = parts64_silence_nan(&p, status);
4638 p.frac >>= float16_params.frac_shift;
4639 return pack_raw64(&p, &float16_params);
4640 }
@@ -4644,7 +4644,7 @@ float32 float32_silence_nan(float32 a, float_status *status)
4644 FloatParts64 p = unpack_raw64(&float32_params, a);
4645
4646 p.frac <<= float32_params.frac_shift;
4647 - parts64_silence_nan(&p, status);
4647 + p = parts64_silence_nan(&p, status);
4648 p.frac >>= float32_params.frac_shift;
4649 return pack_raw64(&p, &float32_params);
4650 }
@@ -4654,7 +4654,7 @@ float64 float64_silence_nan(float64 a, float_status *status)
4654 FloatParts64 p = unpack_raw64(&float64_params, a);
4655
4656 p.frac <<= float64_params.frac_shift;
4657 - parts64_silence_nan(&p, status);
4657 + p = parts64_silence_nan(&p, status);
4658 p.frac >>= float64_params.frac_shift;
4659 return pack_raw64(&p, &float64_params);
4660 }
@@ -4664,7 +4664,7 @@ bfloat16 bfloat16_silence_nan(bfloat16 a, float_status *status)
4664 FloatParts64 p = unpack_raw64(&bfloat16_params, a);
4665
4666 p.frac <<= bfloat16_params.frac_shift;
4667 - parts64_silence_nan(&p, status);
4667 + p = parts64_silence_nan(&p, status);
4668 p.frac >>= bfloat16_params.frac_shift;
4669 return pack_raw64(&p, &bfloat16_params);
4670 }
@@ -4674,7 +4674,7 @@ float128 float128_silence_nan(float128 a, float_status *status)
4674 FloatParts128 p = float128_unpack_raw(a);
4675
4676 frac128_shl(&p, float128_params.frac_shift);
4677 - parts128_silence_nan(&p, status);
4677 + p = parts128_silence_nan(&p, status);
4678 frac128_shr(&p, float128_params.frac_shift);
4679 return float128_pack_raw(&p);
4680 }