@samitouri / QOSamiQemu / commits / 7b53f85f8c

fpu: Constify frac{64,128,256}_* inputs

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

Richard Henderson committed Apr 26, 2026 at 10:22 UTC 7b53f85f8c30fc7763e0909b094c3899ae9608c6
1 file changed +31 -22
fpu/softfloat.c
+31 -22
@@ -774,12 +774,14 @@ static float128 QEMU_FLATTEN float128_pack_raw(const FloatParts128 *p)
774 * Helper functions for softfloat-parts.c.inc, per-size operations.
775 */
776
777 -static bool frac64_add(FloatParts64 *r, FloatParts64 *a, FloatParts64 *b)
777 +static bool frac64_add(FloatParts64 *r,
778 + const FloatParts64 *a, const FloatParts64 *b)
779 {
780 return uadd64_overflow(a->frac, b->frac, &r->frac);
781 }
782
782 -static bool frac128_add(FloatParts128 *r, FloatParts128 *a, FloatParts128 *b)
783 +static bool frac128_add(FloatParts128 *r,
784 + const FloatParts128 *a, const FloatParts128 *b)
785 {
786 bool c = 0;
787 r->frac_lo = uadd64_carry(a->frac_lo, b->frac_lo, &c);
@@ -787,7 +789,8 @@ static bool frac128_add(FloatParts128 *r, FloatParts128 *a, FloatParts128 *b)
789 return c;
790 }
791
790 -static bool frac256_add(FloatParts256 *r, FloatParts256 *a, FloatParts256 *b)
792 +static bool frac256_add(FloatParts256 *r,
793 + const FloatParts256 *a, const FloatParts256 *b)
794 {
795 bool c = 0;
796 r->frac_lo = uadd64_carry(a->frac_lo, b->frac_lo, &c);
@@ -797,12 +800,12 @@ static bool frac256_add(FloatParts256 *r, FloatParts256 *a, FloatParts256 *b)
800 return c;
801 }
802
800 -static bool frac64_addi(FloatParts64 *r, FloatParts64 *a, uint64_t c)
803 +static bool frac64_addi(FloatParts64 *r, const FloatParts64 *a, uint64_t c)
804 {
805 return uadd64_overflow(a->frac, c, &r->frac);
806 }
807
805 -static bool frac128_addi(FloatParts128 *r, FloatParts128 *a, uint64_t c)
808 +static bool frac128_addi(FloatParts128 *r, const FloatParts128 *a, uint64_t c)
809 {
810 c = uadd64_overflow(a->frac_lo, c, &r->frac_lo);
811 return uadd64_overflow(a->frac_hi, c, &r->frac_hi);
@@ -818,14 +821,14 @@ static void frac128_allones(FloatParts128 *a)
821 a->frac_hi = a->frac_lo = -1;
822 }
823
821 -static FloatRelation frac64_cmp(FloatParts64 *a, FloatParts64 *b)
824 +static FloatRelation frac64_cmp(const FloatParts64 *a, const FloatParts64 *b)
825 {
826 return (a->frac == b->frac ? float_relation_equal
827 : a->frac < b->frac ? float_relation_less
828 : float_relation_greater);
829 }
830
828 -static FloatRelation frac128_cmp(FloatParts128 *a, FloatParts128 *b)
831 +static FloatRelation frac128_cmp(const FloatParts128 *a, const FloatParts128 *b)
832 {
833 uint64_t ta = a->frac_hi, tb = b->frac_hi;
834 if (ta == tb) {
@@ -847,7 +850,7 @@ static void frac128_clear(FloatParts128 *a)
850 a->frac_hi = a->frac_lo = 0;
851 }
852
850 -static bool frac64_div(FloatParts64 *a, FloatParts64 *b)
853 +static bool frac64_div(FloatParts64 *a, const FloatParts64 *b)
854 {
855 uint64_t n1, n0, r, q;
856 bool ret;
@@ -879,7 +882,7 @@ static bool frac64_div(FloatParts64 *a, FloatParts64 *b)
882 return ret;
883 }
884
882 -static bool frac128_div(FloatParts128 *a, FloatParts128 *b)
885 +static bool frac128_div(FloatParts128 *a, const FloatParts128 *b)
886 {
887 uint64_t q0, q1, a0, a1, b0, b1;
888 uint64_t r0, r1, r2, r3, t0, t1, t2, t3;
@@ -926,22 +929,24 @@ static bool frac128_div(FloatParts128 *a, FloatParts128 *b)
929 return ret;
930 }
931
929 -static bool frac64_eqz(FloatParts64 *a)
932 +static bool frac64_eqz(const FloatParts64 *a)
933 {
934 return a->frac == 0;
935 }
936
934 -static bool frac128_eqz(FloatParts128 *a)
937 +static bool frac128_eqz(const FloatParts128 *a)
938 {
939 return (a->frac_hi | a->frac_lo) == 0;
940 }
941
939 -static void frac64_mulw(FloatParts128 *r, FloatParts64 *a, FloatParts64 *b)
942 +static void frac64_mulw(FloatParts128 *r,
943 + const FloatParts64 *a, const FloatParts64 *b)
944 {
945 mulu64(&r->frac_lo, &r->frac_hi, a->frac, b->frac);
946 }
947
944 -static void frac128_mulw(FloatParts256 *r, FloatParts128 *a, FloatParts128 *b)
948 +static void frac128_mulw(FloatParts256 *r,
949 + const FloatParts128 *a, const FloatParts128 *b)
950 {
951 mul128To256(a->frac_hi, a->frac_lo, b->frac_hi, b->frac_lo,
952 &r->frac_hi, &r->frac_hm, &r->frac_lm, &r->frac_lo);
@@ -1041,7 +1046,8 @@ static int frac256_normalize(FloatParts256 *a)
1046 return ret;
1047 }
1048
1044 -static void frac64_modrem(FloatParts64 *a, FloatParts64 *b, uint64_t *mod_quot)
1049 +static void frac64_modrem(FloatParts64 *a, const FloatParts64 *b,
1050 + uint64_t *mod_quot)
1051 {
1052 uint64_t a0, a1, b0, t0, t1, q, quot;
1053 int exp_diff = a->exp - b->exp;
@@ -1124,7 +1130,7 @@ static void frac64_modrem(FloatParts64 *a, FloatParts64 *b, uint64_t *mod_quot)
1130 a->frac = a0 | (a1 != 0);
1131 }
1132
1127 -static void frac128_modrem(FloatParts128 *a, FloatParts128 *b,
1133 +static void frac128_modrem(FloatParts128 *a, const FloatParts128 *b,
1134 uint64_t *mod_quot)
1135 {
1136 uint64_t a0, a1, a2, b0, b1, t0, t1, t2, q, quot;
@@ -1353,12 +1359,14 @@ static void frac256_shrjam(FloatParts256 *a, int c)
1359 a->frac_hi = a0;
1360 }
1361
1356 -static bool frac64_sub(FloatParts64 *r, FloatParts64 *a, FloatParts64 *b)
1362 +static bool frac64_sub(FloatParts64 *r,
1363 + const FloatParts64 *a, const FloatParts64 *b)
1364 {
1365 return usub64_overflow(a->frac, b->frac, &r->frac);
1366 }
1367
1361 -static bool frac128_sub(FloatParts128 *r, FloatParts128 *a, FloatParts128 *b)
1368 +static bool frac128_sub(FloatParts128 *r,
1369 + const FloatParts128 *a, const FloatParts128 *b)
1370 {
1371 bool c = 0;
1372 r->frac_lo = usub64_borrow(a->frac_lo, b->frac_lo, &c);
@@ -1366,7 +1374,8 @@ static bool frac128_sub(FloatParts128 *r, FloatParts128 *a, FloatParts128 *b)
1374 return c;
1375 }
1376
1369 -static bool frac256_sub(FloatParts256 *r, FloatParts256 *a, FloatParts256 *b)
1377 +static bool frac256_sub(FloatParts256 *r,
1378 + const FloatParts256 *a, const FloatParts256 *b)
1379 {
1380 bool c = 0;
1381 r->frac_lo = usub64_borrow(a->frac_lo, b->frac_lo, &c);
@@ -1376,24 +1385,24 @@ static bool frac256_sub(FloatParts256 *r, FloatParts256 *a, FloatParts256 *b)
1385 return c;
1386 }
1387
1379 -static void frac64_truncjam(FloatParts64 *r, FloatParts128 *a)
1388 +static void frac64_truncjam(FloatParts64 *r, const FloatParts128 *a)
1389 {
1390 r->frac = a->frac_hi | (a->frac_lo != 0);
1391 }
1392
1384 -static void frac128_truncjam(FloatParts128 *r, FloatParts256 *a)
1393 +static void frac128_truncjam(FloatParts128 *r, const FloatParts256 *a)
1394 {
1395 r->frac_hi = a->frac_hi;
1396 r->frac_lo = a->frac_hm | ((a->frac_lm | a->frac_lo) != 0);
1397 }
1398
1390 -static void frac64_widen(FloatParts128 *r, FloatParts64 *a)
1399 +static void frac64_widen(FloatParts128 *r, const FloatParts64 *a)
1400 {
1401 r->frac_hi = a->frac;
1402 r->frac_lo = 0;
1403 }
1404
1396 -static void frac128_widen(FloatParts256 *r, FloatParts128 *a)
1405 +static void frac128_widen(FloatParts256 *r, const FloatParts128 *a)
1406 {
1407 r->frac_hi = a->frac_hi;
1408 r->frac_hm = a->frac_lo;