Commit Graph

369 Commits

Author SHA1 Message Date
Richard Henderson
6967da87c6 fpu: Use {get,set}_flush_inputs_to_zero everywhere
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-21 19:18:56 -07:00
Richard Henderson
86686309f1 fpu: Use {get,set}_flush_to_zero everywhere
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-21 19:18:56 -07:00
Richard Henderson
1126ebe189 fpu: Use accessors for tininess_before_rounding
Rename get_float_detect_tininess to get_tininess_before_rounding
and move to softfloat.c, as there are no external users.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-21 19:18:56 -07:00
Richard Henderson
87ab6f0ae8 fpu: Use get_floatx80_behaviour everywhere
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-21 19:18:56 -07:00
Richard Henderson
6ce98c8199 fpu: Use of {get,set}_floatx80_rounding_precision everywhere
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-21 19:18:56 -07:00
Richard Henderson
c26e4876d1 fpu: Use {get,set}_float_rounding_mode everywhere
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-21 19:18:56 -07:00
Richard Henderson
a9717332d7 fpu: Introduce FloatExceptionFlags
We have, in the past, used any of uint8_t, uint16_t or int
to hold the set of exception flags.  Use a typedef instead.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-21 19:18:56 -07:00
Richard Henderson
3ce572aa8d fpu: Introduce exp_scalbn
Avoid exponent overflow as well as checking that we don't lose information with
opposing scaling.  Use it in partsN(scalbn) and partsN(round_to_int_normal).

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-21 19:18:56 -07:00
Richard Henderson
f0eb9fe01b target/s390x: Move float{32,64}_s390_divide_to_integer
Now that we've exposed enough infrastructure, this can be
implemented in the backend that needs it.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Ilya Leoshkevich <iii@linux.ibm.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-21 19:18:56 -07:00
Richard Henderson
fc68abb2a3 fpu: Use parts64_round_to_int in parts_s390_divide_to_integer
We will not expose parts_round_to_int_normal.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-21 19:18:56 -07:00
Richard Henderson
21da8ac79d fpu: Return struct from parts{64,128}_muladd
At the same time, export.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-21 19:18:56 -07:00
Richard Henderson
5f36d09bf6 fpu: Return struct from parts{64,128}_scalbn
At the same time, export.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-21 19:18:45 -07:00
Richard Henderson
a93d477899 fpu: Drop QEMU_FLATTEN from muladd routines
The float16, bfloat16 and float128 paths are not so
important that they require forced optimization.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-09 10:50:01 -05:00
Richard Henderson
24b46e7bb7 fpu: Return struct from parts{64,128}_addsub
At the same time, export.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-07 10:16:56 -05:00
Richard Henderson
e007622768 fpu: Return struct from parts{64,128}_mul
At the same time, export.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-07 09:56:45 -05:00
Richard Henderson
1f5d3cebf0 fpu: Split scalbn from partsN(muladd_scalbn)
Handle the scaling separately with parts64_scalbn.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-07 09:41:38 -05:00
Richard Henderson
333a9d621f fpu: Introduce record_denormals_used
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-07 09:41:38 -05:00
Richard Henderson
3d952d7cb5 fpu: Introduce parts64_round_to_fmt
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-07 09:41:38 -05:00
Richard Henderson
2f0d5f872d fpu: Return struct from parts{64,128}_round_to_int
At the same time, export.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-07 09:41:37 -05:00
Richard Henderson
4d91aa8f77 fpu: Return struct from parts{64,128}_div
At the same time, export.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-07 09:41:37 -05:00
Richard Henderson
bf6efdb944 fpu: Return struct from parts{64,128}_pick_nan
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-07 09:41:37 -05:00
Richard Henderson
558c92ed74 fpu: Sink exp_bias adjustment in float64r32_pack_raw
Share the float32->float64 bias adjustment from both
the normal and denormal paths.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-07 09:41:37 -05:00
Richard Henderson
343b206722 fpu: Return struct from parts{64,128}_return_nan
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-07 09:41:37 -05:00
Richard Henderson
c5c5828f7f fpu: Return struct from parts{64,128}_silence_nan
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-07 09:41:37 -05:00
Richard Henderson
8fb0b7c6e3 fpu: Return struct from parts{64,128}_default_nan
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-07 09:41:37 -05:00
Richard Henderson
5511af9044 fpu: Export unpack_canonical and round_pack_canonical routines
Export the unpacking and repacking into the various formats.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-07 09:41:37 -05:00
Richard Henderson
47f8b74ab1 fpu: Export FloatFmt structures
Export most of the FloatFmt structures.
Skip float16_params_ahp and the floatx80 precisions.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-07 09:41:37 -05:00
Richard Henderson
7a8bb2218a fpu: Split FloatParts{64,128} to softfloat-parts.h
Begin exposing the intermediate representation of softfloat.
Start with just the representation structures.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-07 09:41:37 -05:00
Richard Henderson
744d9e9c19 fpu: Mark pack_raw64 QEMU_ALWAYS_INLINE
This is almost always used with a constant FloatFmt,
so inlining pulls the constants into the shifts.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-07 09:41:37 -05:00
Richard Henderson
1d8c1b44d6 fpu: Mark unpack_raw64 QEMU_ALWAYS_INLINE
This is almost always used with a constant FloatFmt,
so inlining pulls the constants into the shifts.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-07 09:41:37 -05:00
Richard Henderson
ded64df396 fpu: Inline float64_pack_raw into callers
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-07 09:41:37 -05:00
Richard Henderson
14dfa4f8ea fpu: Inline float32_pack_raw into callers
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-07 09:41:37 -05:00
Richard Henderson
d7f83833da fpu: Inline bfloat16_pack_raw into callers
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-07 09:41:37 -05:00
Richard Henderson
1b57b0655d fpu: Inline float16_pack_raw into callers
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-07 09:41:37 -05:00
Richard Henderson
4746196cf8 fpu: Inline float8_e5m2_pack_raw into single caller
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-07 09:41:37 -05:00
Richard Henderson
7a457a2127 fpu: Inline float8_e4m3_pack_raw to single caller
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-05-07 09:41:37 -05:00
Richard Henderson
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>
2026-04-30 08:10:05 +10:00
Richard Henderson
99a7b9b348 fpu: Change parts_float_to_float_narrow to parts128_to_parts64
Rename and return FloatParts64 structure.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-04-30 08:09:10 +10:00
Richard Henderson
6dd088168b fpu: Return struct from float128_unpack_canonical
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-04-30 08:09:05 +10:00
Richard Henderson
845970afdf fpu: Return struct from float128_unpack_raw
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-04-30 08:08:58 +10:00
Richard Henderson
6d22f7e149 fpu: Inline floatx80_unpack_raw into only caller
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-04-30 08:08:58 +10:00
Richard Henderson
5ad853cc5d fpu: Return struct from float{32,64}_unpack_canonical
We must change float32 and float64 at once because
of the DEFINE_S390_DIVIDE_TO_INTEGER macro.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-04-30 08:08:51 +10:00
Richard Henderson
b26f0cc253 fpu: Inline float64_unpack_raw into callers
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-04-30 08:08:51 +10:00
Richard Henderson
da43d9b787 fpu: Inline float32_unpack_raw into callers
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-04-30 08:08:50 +10:00
Richard Henderson
b4bd7b495f fpu: Return struct from bfloat16_unpack_canonical
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-04-30 08:08:44 +10:00
Richard Henderson
2262e3024f fpu: Inline bfloat16_unpack_raw into callers
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-04-30 08:08:44 +10:00
Richard Henderson
b5ac7f6827 fpu: Return struct from float16_unpack_canonical
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-04-30 08:08:38 +10:00
Richard Henderson
f26726c10c fpu: Return struct from float16a_unpack_canonical
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-04-30 08:08:35 +10:00
Richard Henderson
e788efd9af fpu: Inline float16_unpack_raw into callers
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-04-30 08:08:26 +10:00
Richard Henderson
78dd9b70a3 fpu: Return struct from float8_e5m2_unpack_canonical
Inline float8_e5m2_unpack_raw at the same time.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2026-04-30 08:08:17 +10:00