softfloat: Remove fallback rule from pickNaN()
Now that all targets have been converted to explicitly set a NaN propagation rule, we can remove the set of target ifdefs (which now list every target) and clean up the references to fallback behaviour for float_2nan_prop_none. The "default" case in the switch will catch any remaining places where status->float_2nan_prop_rule was not set by the target. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20241025141254.2141506-22-peter.maydell@linaro.org
This commit is contained in:
parent
ba6558461c
commit
bc0b360def
@ -390,32 +390,15 @@ bool float32_is_signaling_nan(float32 a_, float_status *status)
|
||||
static int pickNaN(FloatClass a_cls, FloatClass b_cls,
|
||||
bool aIsLargerSignificand, float_status *status)
|
||||
{
|
||||
Float2NaNPropRule rule = status->float_2nan_prop_rule;
|
||||
|
||||
/*
|
||||
* We guarantee not to require the target to tell us how to
|
||||
* pick a NaN if we're always returning the default NaN.
|
||||
* But if we're not in default-NaN mode then the target must
|
||||
* specify via set_float_2nan_prop_rule().
|
||||
*/
|
||||
assert(!status->default_nan_mode);
|
||||
|
||||
if (rule == float_2nan_prop_none) {
|
||||
/* target didn't set the rule: fall back to old ifdef choices */
|
||||
#if defined(TARGET_AVR) || defined(TARGET_HEXAGON) \
|
||||
|| defined(TARGET_RISCV) || defined(TARGET_SH4) \
|
||||
|| defined(TARGET_TRICORE) || defined(TARGET_ARM) || defined(TARGET_MIPS) \
|
||||
|| defined(TARGET_LOONGARCH64) || defined(TARGET_HPPA) \
|
||||
|| defined(TARGET_S390X) || defined(TARGET_PPC) || defined(TARGET_M68K) \
|
||||
|| defined(TARGET_SPARC) || defined(TARGET_XTENSA) \
|
||||
|| defined(TARGET_I386) || defined(TARGET_ALPHA) \
|
||||
|| defined(TARGET_MICROBLAZE) || defined(TARGET_OPENRISC) \
|
||||
|| defined(TARGET_RX)
|
||||
g_assert_not_reached();
|
||||
#else
|
||||
rule = float_2nan_prop_x87;
|
||||
#endif
|
||||
}
|
||||
|
||||
switch (rule) {
|
||||
switch (status->float_2nan_prop_rule) {
|
||||
case float_2nan_prop_s_ab:
|
||||
if (is_snan(a_cls)) {
|
||||
return 0;
|
||||
|
@ -178,13 +178,9 @@ typedef enum __attribute__((__packed__)) {
|
||||
* If default_nan_mode is enabled then it is valid not to set a
|
||||
* NaN propagation rule, because the softfloat code guarantees
|
||||
* not to try to pick a NaN to propagate in default NaN mode.
|
||||
*
|
||||
* For transition, currently the 'none' rule will cause us to
|
||||
* fall back to picking the propagation rule based on the existing
|
||||
* ifdef ladder. When all targets are converted it will be an error
|
||||
* not to set the rule in float_status unless in default_nan_mode,
|
||||
* and we will assert if we need to handle an input NaN and no
|
||||
* rule was selected.
|
||||
* When not in default-NaN mode, it is an error for the target
|
||||
* not to set the rule in float_status, and we will assert if
|
||||
* we need to handle an input NaN and no rule was selected.
|
||||
*/
|
||||
typedef enum __attribute__((__packed__)) {
|
||||
/* No propagation rule specified */
|
||||
|
Loading…
Reference in New Issue
Block a user