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