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>