mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 01:33:56 -06:00
softfloat: Remove which from parts_pick_nan_muladd
Assign the pointer return value to 'a' directly, rather than going through an intermediary index. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Message-id: 20241203203949.483774-5-richard.henderson@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
e002861876
commit
229416c67e
1 changed files with 10 additions and 22 deletions
|
@ -65,9 +65,9 @@ static FloatPartsN *partsN(pick_nan_muladd)(FloatPartsN *a, FloatPartsN *b,
|
||||||
FloatPartsN *c, float_status *s,
|
FloatPartsN *c, float_status *s,
|
||||||
int ab_mask, int abc_mask)
|
int ab_mask, int abc_mask)
|
||||||
{
|
{
|
||||||
int which;
|
|
||||||
bool infzero = (ab_mask == float_cmask_infzero);
|
bool infzero = (ab_mask == float_cmask_infzero);
|
||||||
bool have_snan = (abc_mask & float_cmask_snan);
|
bool have_snan = (abc_mask & float_cmask_snan);
|
||||||
|
FloatPartsN *ret;
|
||||||
|
|
||||||
if (unlikely(have_snan)) {
|
if (unlikely(have_snan)) {
|
||||||
float_raise(float_flag_invalid | float_flag_invalid_snan, s);
|
float_raise(float_flag_invalid | float_flag_invalid_snan, s);
|
||||||
|
@ -104,42 +104,30 @@ static FloatPartsN *partsN(pick_nan_muladd)(FloatPartsN *a, FloatPartsN *b,
|
||||||
default:
|
default:
|
||||||
g_assert_not_reached();
|
g_assert_not_reached();
|
||||||
}
|
}
|
||||||
which = 2;
|
ret = c;
|
||||||
} else {
|
} else {
|
||||||
FloatClass cls[3] = { a->cls, b->cls, c->cls };
|
FloatPartsN *val[3] = { a, b, c };
|
||||||
Float3NaNPropRule rule = s->float_3nan_prop_rule;
|
Float3NaNPropRule rule = s->float_3nan_prop_rule;
|
||||||
|
|
||||||
assert(rule != float_3nan_prop_none);
|
assert(rule != float_3nan_prop_none);
|
||||||
if (have_snan && (rule & R_3NAN_SNAN_MASK)) {
|
if (have_snan && (rule & R_3NAN_SNAN_MASK)) {
|
||||||
/* We have at least one SNaN input and should prefer it */
|
/* We have at least one SNaN input and should prefer it */
|
||||||
do {
|
do {
|
||||||
which = rule & R_3NAN_1ST_MASK;
|
ret = val[rule & R_3NAN_1ST_MASK];
|
||||||
rule >>= R_3NAN_1ST_LENGTH;
|
rule >>= R_3NAN_1ST_LENGTH;
|
||||||
} while (!is_snan(cls[which]));
|
} while (!is_snan(ret->cls));
|
||||||
} else {
|
} else {
|
||||||
do {
|
do {
|
||||||
which = rule & R_3NAN_1ST_MASK;
|
ret = val[rule & R_3NAN_1ST_MASK];
|
||||||
rule >>= R_3NAN_1ST_LENGTH;
|
rule >>= R_3NAN_1ST_LENGTH;
|
||||||
} while (!is_nan(cls[which]));
|
} while (!is_nan(ret->cls));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (which) {
|
if (is_snan(ret->cls)) {
|
||||||
case 0:
|
parts_silence_nan(ret, s);
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
a = b;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
a = c;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
g_assert_not_reached();
|
|
||||||
}
|
}
|
||||||
if (is_snan(a->cls)) {
|
return ret;
|
||||||
parts_silence_nan(a, s);
|
|
||||||
}
|
|
||||||
return a;
|
|
||||||
|
|
||||||
default_nan:
|
default_nan:
|
||||||
parts_default_nan(a, s);
|
parts_default_nan(a, s);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue