@samitouri / QOSamiQemu / commits / df540b566e

fpu: Change parts_float_to_float_widen to parts64_to_parts128

Rename and return FloatParts128 structure. Use switch instead of 2 ifs. Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>

Richard Henderson committed Apr 25, 2026 at 20:08 UTC df540b566ebb97a24c2880397ad277f12f8f4b31
1 file changed +21 -18
fpu/softfloat.c
+21 -18
@@ -2590,20 +2590,27 @@ static FloatParts64 parts128_to_parts64(FloatParts128 *b, float_status *s)
2590 return r;
2591 }
2592
2593 -static void parts_float_to_float_widen(FloatParts128 *a, FloatParts64 *b,
2594 - float_status *s)
2593 +static FloatParts128 parts64_to_parts128(FloatParts64 *b, float_status *s)
2594 {
2596 - a->cls = b->cls;
2597 - a->sign = b->sign;
2598 - a->exp = b->exp;
2599 - frac64_widen(a, b);
2595 + FloatParts128 r = {
2596 + .cls = b->cls,
2597 + .sign = b->sign,
2598 + .exp = b->exp,
2599 + .frac_hi = b->frac,
2600 + };
2601
2601 - if (is_nan(a->cls)) {
2602 - parts128_return_nan(a, s);
2603 - }
2604 - if (a->cls == float_class_denormal) {
2602 + switch (r.cls) {
2603 + case float_class_qnan:
2604 + case float_class_snan:
2605 + parts128_return_nan(&r, s);
2606 + break;
2607 + case float_class_denormal:
2608 float_raise(float_flag_input_denormal_used, s);
2609 + break;
2610 + default:
2611 + break;
2612 }
2613 + return r;
2614 }
2615
2616 float8_e4m3 float4_e2m1_to_float8_e4m3(float4_e2m1 a, float_status *s)
@@ -2791,18 +2798,16 @@ float64 float128_to_float64(float128 a, float_status *s)
2798 float128 float32_to_float128(float32 a, float_status *s)
2799 {
2800 FloatParts64 p64 = float32_unpack_canonical(a, s);
2794 - FloatParts128 p128;
2801 + FloatParts128 p128 = parts64_to_parts128(&p64, s);
2802
2796 - parts_float_to_float_widen(&p128, &p64, s);
2803 return float128_round_pack_canonical(&p128, s);
2804 }
2805
2806 float128 float64_to_float128(float64 a, float_status *s)
2807 {
2808 FloatParts64 p64 = float64_unpack_canonical(a, s);
2803 - FloatParts128 p128;
2809 + FloatParts128 p128 = parts64_to_parts128(&p64, s);
2810
2805 - parts_float_to_float_widen(&p128, &p64, s);
2811 return float128_round_pack_canonical(&p128, s);
2812 }
2813
@@ -2847,18 +2852,16 @@ float128 floatx80_to_float128(floatx80 a, float_status *s)
2852 floatx80 float32_to_floatx80(float32 a, float_status *s)
2853 {
2854 FloatParts64 p64 = float32_unpack_canonical(a, s);
2850 - FloatParts128 p128;
2855 + FloatParts128 p128 = parts64_to_parts128(&p64, s);
2856
2852 - parts_float_to_float_widen(&p128, &p64, s);
2857 return floatx80_round_pack_canonical(&p128, s);
2858 }
2859
2860 floatx80 float64_to_floatx80(float64 a, float_status *s)
2861 {
2862 FloatParts64 p64 = float64_unpack_canonical(a, s);
2859 - FloatParts128 p128;
2863 + FloatParts128 p128 = parts64_to_parts128(&p64, s);
2864
2861 - parts_float_to_float_widen(&p128, &p64, s);
2865 return floatx80_round_pack_canonical(&p128, s);
2866 }
2867