@samitouri / QOSamiQemu / commits / e63e64b528

fpu: Export default_nan, pick_nan, return_nan routines

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

Richard Henderson committed Apr 25, 2026 at 21:25 UTC e63e64b528a2504979962d0c249496fe1e3eb837
3 files changed +20 -5
fpu/softfloat-parts.c.inc
+3 -3
@@ -15,7 +15,7 @@
15 * indicated otherwise.
16 */
17
18 -static FloatPartsN partsN(return_nan)(const FloatPartsN *a, float_status *s)
18 +FloatPartsN partsN(return_nan)(const FloatPartsN *a, float_status *s)
19 {
20 switch (a->cls) {
21 case float_class_snan:
@@ -37,8 +37,8 @@ static FloatPartsN partsN(return_nan)(const FloatPartsN *a, float_status *s)
37 return *a;
38 }
39
40 -static FloatPartsN partsN(pick_nan)(const FloatPartsN *a, const FloatPartsN *b,
41 - float_status *s)
40 +FloatPartsN partsN(pick_nan)(const FloatPartsN *a, const FloatPartsN *b,
41 + float_status *s)
42 {
43 bool have_snan = false;
44 const FloatPartsN *ret;
fpu/softfloat-specialize.c.inc
+2 -2
@@ -118,7 +118,7 @@ static bool parts_is_snan_frac(uint64_t frac, float_status *status)
118 | The pattern for a default generated deconstructed floating-point NaN.
119 *----------------------------------------------------------------------------*/
120
121 -static FloatParts64 parts64_default_nan(float_status *status)
121 +FloatParts64 parts64_default_nan(float_status *status)
122 {
123 bool sign = 0;
124 uint64_t frac;
@@ -142,7 +142,7 @@ static FloatParts64 parts64_default_nan(float_status *status)
142 };
143 }
144
145 -static FloatParts128 parts128_default_nan(float_status *status)
145 +FloatParts128 parts128_default_nan(float_status *status)
146 {
147 /*
148 * Extrapolate from the choices made by parts64_default_nan to fill
include/fpu/softfloat-parts.h
+15
@@ -163,6 +163,21 @@ float64 float64_round_pack_canonical(FloatParts64 *p, float_status *s);
163 float128 float128_round_pack_canonical(FloatParts128 *p, float_status *s);
164 floatx80 floatx80_round_pack_canonical(FloatParts128 *p, float_status *s);
165
166 +/*
167 + * NaN handling
168 + */
169 +
170 +FloatParts64 parts64_default_nan(float_status *status);
171 +FloatParts128 parts128_default_nan(float_status *status);
172 +
173 +FloatParts64 parts64_pick_nan(const FloatParts64 *, const FloatParts64 *,
174 + float_status *);
175 +FloatParts128 parts128_pick_nan(const FloatParts128 *, const FloatParts128 *,
176 + float_status *);
177 +
178 +FloatParts64 parts64_return_nan(const FloatParts64 *a, float_status *s);
179 +FloatParts128 parts128_return_nan(const FloatParts128 *a, float_status *s);
180 +
181 /*
182 * Operations
183 */