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é <phi...@linaro.org>


Reply via email to