@samitouri / QOSamiQemu / commits / bf6efdb944

fpu: Return struct from parts{64,128}_pick_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:19 UTC bf6efdb9443665d6deda5212966ff20776b1a0af
2 files changed +20 -16
fpu/softfloat-parts.c.inc
+16 -12
@@ -37,11 +37,11 @@ static FloatPartsN partsN(return_nan)(const FloatPartsN *a, float_status *s)
37 return *a;
38 }
39
40 -static FloatPartsN *partsN(pick_nan)(FloatPartsN *a, FloatPartsN *b,
41 - float_status *s)
40 +static FloatPartsN partsN(pick_nan)(const FloatPartsN *a, const FloatPartsN *b,
41 + float_status *s)
42 {
43 bool have_snan = false;
44 - FloatPartsN *ret;
44 + const FloatPartsN *ret;
45 int cmp;
46
47 if (is_snan(a->cls) || is_snan(b->cls)) {
@@ -50,8 +50,7 @@ static FloatPartsN *partsN(pick_nan)(FloatPartsN *a, FloatPartsN *b,
50 }
51
52 if (s->default_nan_mode) {
53 - *a = partsN(default_nan)(s);
54 - return a;
53 + return partsN(default_nan)(s);
54 }
55
56 switch (s->float_2nan_prop_rule) {
@@ -110,9 +109,9 @@ static FloatPartsN *partsN(pick_nan)(FloatPartsN *a, FloatPartsN *b,
109 }
110
111 if (is_snan(ret->cls)) {
113 - *ret = partsN(silence_nan)(ret, s);
112 + return partsN(silence_nan)(ret, s);
113 }
115 - return ret;
114 + return *ret;
115 }
116
117 static FloatPartsN *partsN(pick_nan_muladd)(FloatPartsN *a, FloatPartsN *b,
@@ -605,7 +604,8 @@ static FloatPartsN *partsN(addsub)(FloatPartsN *a, FloatPartsN *b,
604 return b;
605
606 p_nan:
608 - return partsN(pick_nan)(a, b, s);
607 + *a = partsN(pick_nan)(a, b, s);
608 + return a;
609 }
610
611 /*
@@ -647,7 +647,8 @@ static FloatPartsN *partsN(mul)(FloatPartsN *a, FloatPartsN *b,
647 }
648
649 if (unlikely(ab_mask & float_cmask_anynan)) {
650 - return partsN(pick_nan)(a, b, s);
650 + *a = partsN(pick_nan)(a, b, s);
651 + return a;
652 }
653
654 /* Multiply by 0 or Inf */
@@ -833,7 +834,8 @@ static FloatPartsN *partsN(div)(FloatPartsN *a, FloatPartsN *b,
834
835 /* All the NaN cases */
836 if (unlikely(ab_mask & float_cmask_anynan)) {
836 - return partsN(pick_nan)(a, b, s);
837 + *a = partsN(pick_nan)(a, b, s);
838 + return a;
839 }
840
841 if ((ab_mask & float_cmask_denormal) && b->cls != float_class_zero) {
@@ -891,7 +893,8 @@ static FloatPartsN *partsN(modrem)(FloatPartsN *a, FloatPartsN *b,
893
894 /* All the NaN cases */
895 if (unlikely(ab_mask & float_cmask_anynan)) {
894 - return partsN(pick_nan)(a, b, s);
896 + *a = partsN(pick_nan)(a, b, s);
897 + return a;
898 }
899
900 /* Inf % N; N % 0 */
@@ -1514,7 +1517,8 @@ static FloatPartsN *partsN(minmax)(FloatPartsN *a, FloatPartsN *b,
1517 return is_nan(a->cls) ? b : a;
1518 }
1519
1517 - return partsN(pick_nan)(a, b, s);
1520 + *a = partsN(pick_nan)(a, b, s);
1521 + return a;
1522 }
1523
1524 if (ab_mask & float_cmask_denormal) {
fpu/softfloat.c
+4 -4
@@ -4765,15 +4765,15 @@ void normalizeFloatx80Subnormal(uint64_t aSig, int32_t *zExpPtr,
4765
4766 floatx80 propagateFloatx80NaN(floatx80 a, floatx80 b, float_status *status)
4767 {
4768 - FloatParts128 pa, pb, *pr;
4768 + FloatParts128 pa, pb;
4769
4770 if (!floatx80_unpack_canonical(&pa, a, status) ||
4771 !floatx80_unpack_canonical(&pb, b, status)) {
4772 return floatx80_default_nan(status);
4773 }
4774
4775 - pr = parts128_pick_nan(&pa, &pb, status);
4776 - return floatx80_round_pack_canonical(pr, status);
4775 + pa = parts128_pick_nan(&pa, &pb, status);
4776 + return floatx80_round_pack_canonical(&pa, status);
4777 }
4778
4779 /*----------------------------------------------------------------------------
@@ -5120,7 +5120,7 @@ static void parts_s390_divide_to_integer(FloatParts64 *a, FloatParts64 *b,
5120 {
5121 /* POp table "Results: DIVIDE TO INTEGER (Part 1 of 2)" */
5122 if ((float_cmask(a->cls) | float_cmask(b->cls)) & float_cmask_anynan) {
5123 - *r = *parts64_pick_nan(a, b, status);
5123 + *r = parts64_pick_nan(a, b, status);
5124 *n = *r;
5125 *cc = 1;
5126 } else if (a->cls == float_class_inf || b->cls == float_class_zero) {