fpu: Use get_floatx80_behaviour everywhere
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Richard Henderson committed
May 1, 2026 at 16:29 UTC
87ab6f0ae86aaf66d2f97565c5782be4b1c06649
4 files changed
+10
-8
fpu/softfloat-parts.c.inc
+2
-2
@@ -213,7 +213,7 @@ static void partsN(canonicalize)(FloatPartsN *p, float_status *status,
213
* how we uncanonicalize results.
214
*/
215
bool has_pseudo_denormals = fmt->has_explicit_bit &&
216
- (status->floatx80_behaviour & floatx80_pseudo_denormal_valid);
216
+ (get_floatx80_behaviour(status) & floatx80_pseudo_denormal_valid);
217
218
if (unlikely(p->exp == 0)) {
219
if (likely(fracN(eqz)(p))) {
@@ -420,7 +420,7 @@ static void partsN(uncanon_normal)(FloatPartsN *p, float_status *s,
420
} else {
421
bool is_tiny = s->tininess_before_rounding || exp < 0;
422
bool has_pseudo_denormals = fmt->has_explicit_bit &&
423
- (s->floatx80_behaviour & floatx80_pseudo_denormal_valid);
423
+ (get_floatx80_behaviour(s) & floatx80_pseudo_denormal_valid);
424
425
if (!is_tiny) {
426
FloatPartsN discard;
fpu/softfloat-specialize.c.inc
+1
-1
@@ -221,7 +221,7 @@ floatx80 floatx80_default_inf(bool zSign, float_status *status)
221
* Whether the Integer bit is set in the default Infinity is
222
* target dependent.
223
*/
224
- bool z = status->floatx80_behaviour & floatx80_default_inf_int_bit_is_zero;
224
+ bool z = get_floatx80_behaviour(status) & floatx80_default_inf_int_bit_is_zero;
225
return packFloatx80(zSign, 0x7fff, z ? 0 : (1ULL << 63));
226
}
227
fpu/softfloat.c
+1
-1
@@ -1578,7 +1578,7 @@ floatx80 floatx80_round_pack_canonical(FloatParts128 *p, float_status *s)
1578
1579
case float_class_inf:
1580
/* x86 and m68k differ in the setting of the integer bit. */
1581
- frac = s->floatx80_behaviour & floatx80_default_inf_int_bit_is_zero ?
1581
+ frac = get_floatx80_behaviour(s) & floatx80_default_inf_int_bit_is_zero ?
1582
0 : (1ULL << 63);
1583
exp = fmt->exp_max;
1584
break;
include/fpu/softfloat.h
+6
-4
@@ -1018,7 +1018,7 @@ static inline bool floatx80_is_infinity(floatx80 a, float_status *status)
1018
bool intbit = a.low >> 63;
1019
1020
if (!intbit &&
1021
- !(status->floatx80_behaviour & floatx80_pseudo_inf_valid)) {
1021
+ !(get_floatx80_behaviour(status) & floatx80_pseudo_inf_valid)) {
1022
return false;
1023
}
1024
return (a.high & 0x7fff) == 0x7fff && !(a.low << 1);
@@ -1112,6 +1112,8 @@ static inline bool floatx80_unordered_quiet(floatx80 a, floatx80 b,
1112
*----------------------------------------------------------------------------*/
1113
static inline bool floatx80_invalid_encoding(floatx80 a, float_status *s)
1114
{
1115
+ FloatX80Behaviour rule = get_floatx80_behaviour(s);
1116
+
1117
if ((a.low >> 63) || (a.high & 0x7fff) == 0) {
1118
/* Anything with the Integer bit set or the exponent 0 is valid */
1119
return false;
@@ -1119,12 +1121,12 @@ static inline bool floatx80_invalid_encoding(floatx80 a, float_status *s)
1121
1122
if ((a.high & 0x7fff) == 0x7fff) {
1123
if (a.low) {
1122
- return !(s->floatx80_behaviour & floatx80_pseudo_nan_valid);
1124
+ return !(rule & floatx80_pseudo_nan_valid);
1125
} else {
1124
- return !(s->floatx80_behaviour & floatx80_pseudo_inf_valid);
1126
+ return !(rule & floatx80_pseudo_inf_valid);
1127
}
1128
} else {
1127
- return !(s->floatx80_behaviour & floatx80_unnormal_valid);
1129
+ return !(rule & floatx80_unnormal_valid);
1130
}
1131
}
1132