On 17/2/25 13:50, Peter Maydell wrote:
The work I needed to do to make various softfloat emulation behaviours
runtime-selectable for Arm FEAT_AFP has left the fpu code with very
few remaning target ifdefs. So this series turns the last remaning
ones into runtime behaviour choices and switches the fpu code into
"build once" rather than "build per target". The main driver of this
is that we're going to want to do this for the "multiple targets in
one binary" work.
Indeed the following 332 symbols are now removed for each target:
bfloat16_add
bfloat16_compare
bfloat16_compare_quiet
bfloat16_default_nan
bfloat16_div
bfloat16_is_quiet_nan
bfloat16_is_signaling_nan
bfloat16_max
bfloat16_maximum_number
bfloat16_maxnum
bfloat16_maxnummag
bfloat16_min
bfloat16_minimum_number
bfloat16_minnum
bfloat16_minnummag
bfloat16_mul
bfloat16_muladd
bfloat16_round_to_int
bfloat16_scalbn
bfloat16_silence_nan
bfloat16_sqrt
bfloat16_squash_input_denormal
bfloat16_sub
bfloat16_to_float32
bfloat16_to_float64
bfloat16_to_int16
bfloat16_to_int16_round_to_zero
bfloat16_to_int16_scalbn
bfloat16_to_int32
bfloat16_to_int32_round_to_zero
bfloat16_to_int32_scalbn
bfloat16_to_int64
bfloat16_to_int64_round_to_zero
bfloat16_to_int64_scalbn
bfloat16_to_int8
bfloat16_to_int8_round_to_zero
bfloat16_to_int8_scalbn
bfloat16_to_uint16
bfloat16_to_uint16_round_to_zero
bfloat16_to_uint16_scalbn
bfloat16_to_uint32
bfloat16_to_uint32_round_to_zero
bfloat16_to_uint32_scalbn
bfloat16_to_uint64
bfloat16_to_uint64_round_to_zero
bfloat16_to_uint64_scalbn
bfloat16_to_uint8
bfloat16_to_uint8_round_to_zero
bfloat16_to_uint8_scalbn
float128_add
float128_compare
float128_compare_quiet
float128_default_nan
float128_div
float128_is_quiet_nan
float128_is_signaling_nan
float128_max
float128_maximum_number
float128_maxnum
float128_maxnummag
float128_min
float128_minimum_number
float128_minnum
float128_minnummag
float128_mul
float128_muladd
float128_rem
float128_round_to_int
float128_scalbn
float128_silence_nan
float128_sqrt
float128_sub
float128_to_float32
float128_to_float64
float128_to_floatx80
float128_to_int128
float128_to_int128_round_to_zero
float128_to_int32
float128_to_int32_round_to_zero
float128_to_int64
float128_to_int64_round_to_zero
float128_to_uint128
float128_to_uint128_round_to_zero
float128_to_uint32
float128_to_uint32_round_to_zero
float128_to_uint64
float128_to_uint64_round_to_zero
float16_add
float16_compare
float16_compare_quiet
float16_default_nan
float16_div
float16_is_quiet_nan
float16_is_signaling_nan
float16_max
float16_maximum_number
float16_maxnum
float16_maxnummag
float16_min
float16_minimum_number
float16_minnum
float16_minnummag
float16_mul
float16_muladd
float16_muladd_scalbn
float16_round_to_int
float16_scalbn
float16_silence_nan
float16_sqrt
float16_squash_input_denormal
float16_sub
float16_to_float32
float16_to_float64
float16_to_int16
float16_to_int16_round_to_zero
float16_to_int16_scalbn
float16_to_int32
float16_to_int32_round_to_zero
float16_to_int32_scalbn
float16_to_int64
float16_to_int64_round_to_zero
float16_to_int64_scalbn
float16_to_int8
float16_to_int8_scalbn
float16_to_uint16
float16_to_uint16_round_to_zero
float16_to_uint16_scalbn
float16_to_uint32
float16_to_uint32_round_to_zero
float16_to_uint32_scalbn
float16_to_uint64
float16_to_uint64_round_to_zero
float16_to_uint64_scalbn
float16_to_uint8
float16_to_uint8_scalbn
float32_add
float32_compare
float32_compare_quiet
float32_default_nan
float32_div
float32_exp2
float32_is_quiet_nan
float32_is_signaling_nan
float32_log2
float32_max
float32_maximum_number
float32_maxnum
float32_maxnummag
float32_min
float32_minimum_number
float32_minnum
float32_minnummag
float32_mul
float32_muladd
float32_muladd_scalbn
float32_rem
float32_round_to_int
float32_scalbn
float32_silence_nan
float32_sqrt
float32_squash_input_denormal
float32_sub
float32_to_bfloat16
float32_to_float128
float32_to_float16
float32_to_float64
float32_to_floatx80
float32_to_int16
float32_to_int16_round_to_zero
float32_to_int16_scalbn
float32_to_int32
float32_to_int32_round_to_zero
float32_to_int32_scalbn
float32_to_int64
float32_to_int64_round_to_zero
float32_to_int64_scalbn
float32_to_uint16
float32_to_uint16_round_to_zero
float32_to_uint16_scalbn
float32_to_uint32
float32_to_uint32_round_to_zero
float32_to_uint32_scalbn
float32_to_uint64
float32_to_uint64_round_to_zero
float32_to_uint64_scalbn
float64_add
float64_compare
float64_compare_quiet
float64_default_nan
float64_div
float64_is_quiet_nan
float64_is_signaling_nan
float64_log2
float64_max
float64_maximum_number
float64_maxnum
float64_maxnummag
float64_min
float64_minimum_number
float64_minnum
float64_minnummag
float64_mul
float64_muladd
float64_muladd_scalbn
float64_rem
float64_round_to_int
float64_scalbn
float64_silence_nan
float64_sqrt
float64_squash_input_denormal
float64_sub
float64_to_bfloat16
float64_to_float128
float64_to_float16
float64_to_float32
float64_to_floatx80
float64_to_int16
float64_to_int16_round_to_zero
float64_to_int16_scalbn
float64_to_int32
float64_to_int32_modulo
float64_to_int32_round_to_zero
float64_to_int32_scalbn
float64_to_int64
float64_to_int64_modulo
float64_to_int64_round_to_zero
float64_to_int64_scalbn
float64_to_uint16
float64_to_uint16_round_to_zero
float64_to_uint16_scalbn
float64_to_uint32
float64_to_uint32_round_to_zero
float64_to_uint32_scalbn
float64_to_uint64
float64_to_uint64_round_to_zero
float64_to_uint64_scalbn
float64r32_add
float64r32_div
float64r32_mul
float64r32_muladd
float64r32_sqrt
float64r32_sub
floatx80_add
floatx80_compare
floatx80_compare_quiet
floatx80_default_nan
floatx80_div
floatx80_infinity
floatx80_is_quiet_nan
floatx80_is_signaling_nan
floatx80_mod
floatx80_modrem
floatx80_mul
floatx80_rem
floatx80_round
floatx80_round_to_int
floatx80_scalbn
floatx80_silence_nan
floatx80_sqrt
floatx80_sub
floatx80_to_float128
floatx80_to_float32
floatx80_to_float64
floatx80_to_int32
floatx80_to_int32_round_to_zero
floatx80_to_int64
floatx80_to_int64_round_to_zero
int128_to_float128
int16_to_bfloat16
int16_to_bfloat16_scalbn
int16_to_float16
int16_to_float16_scalbn
int16_to_float32
int16_to_float32_scalbn
int16_to_float64
int16_to_float64_scalbn
int32_to_bfloat16
int32_to_bfloat16_scalbn
int32_to_float128
int32_to_float16
int32_to_float16_scalbn
int32_to_float32
int32_to_float32_scalbn
int32_to_float64
int32_to_float64_scalbn
int32_to_floatx80
int64_to_bfloat16
int64_to_bfloat16_scalbn
int64_to_float128
int64_to_float16
int64_to_float16_scalbn
int64_to_float32
int64_to_float32_scalbn
int64_to_float64
int64_to_float64_scalbn
int64_to_floatx80
int8_to_bfloat16
int8_to_bfloat16_scalbn
int8_to_float16
normalizeFloatx80Subnormal
normalizeRoundAndPackFloatx80
propagateFloatx80NaN
roundAndPackFloatx80
uint128_to_float128
uint16_to_bfloat16
uint16_to_bfloat16_scalbn
uint16_to_float16
uint16_to_float16_scalbn
uint16_to_float32
uint16_to_float32_scalbn
uint16_to_float64
uint16_to_float64_scalbn
uint32_to_bfloat16
uint32_to_bfloat16_scalbn
uint32_to_float16
uint32_to_float16_scalbn
uint32_to_float32
uint32_to_float32_scalbn
uint32_to_float64
uint32_to_float64_scalbn
uint64_to_bfloat16
uint64_to_bfloat16_scalbn
uint64_to_float128
uint64_to_float16
uint64_to_float16_scalbn
uint64_to_float32
uint64_to_float32_scalbn
uint64_to_float64
uint64_to_float64_scalbn
uint8_to_bfloat16
uint8_to_bfloat16_scalbn
uint8_to_float16
and my single binary duplicate symbols list drastically reduced:
-ld: 1759 duplicate symbols
+ld: 1427 duplicate symbols
Thank you a lot for this huge help! :)
FWIW:
Tested-by: Philippe Mathieu-Daudé <[email protected]>