mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 02:03:56 -06:00
softfloat: Sink frac_cmp in parts_pick_nan until needed
Move the fractional comparison to the end of the float_2nan_prop_x87 case. This is not required for any other 2nan propagation rule. Reorganize the x87 case itself to break out of the switch when the fractional comparison is not required. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Message-id: 20241203203949.483774-11-richard.henderson@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
2da7553f2e
commit
9778115ed7
1 changed files with 9 additions and 10 deletions
|
@ -52,11 +52,6 @@ static FloatPartsN *partsN(pick_nan)(FloatPartsN *a, FloatPartsN *b,
|
|||
return a;
|
||||
}
|
||||
|
||||
cmp = frac_cmp(a, b);
|
||||
if (cmp == 0) {
|
||||
cmp = a->sign < b->sign;
|
||||
}
|
||||
|
||||
switch (s->float_2nan_prop_rule) {
|
||||
case float_2nan_prop_s_ab:
|
||||
if (have_snan) {
|
||||
|
@ -89,20 +84,24 @@ static FloatPartsN *partsN(pick_nan)(FloatPartsN *a, FloatPartsN *b,
|
|||
* return the NaN with the positive sign bit (if any).
|
||||
*/
|
||||
if (is_snan(a->cls)) {
|
||||
if (is_snan(b->cls)) {
|
||||
which = cmp > 0 ? 0 : 1;
|
||||
} else {
|
||||
if (!is_snan(b->cls)) {
|
||||
which = is_qnan(b->cls) ? 1 : 0;
|
||||
break;
|
||||
}
|
||||
} else if (is_qnan(a->cls)) {
|
||||
if (is_snan(b->cls) || !is_qnan(b->cls)) {
|
||||
which = 0;
|
||||
} else {
|
||||
which = cmp > 0 ? 0 : 1;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
which = 1;
|
||||
break;
|
||||
}
|
||||
cmp = frac_cmp(a, b);
|
||||
if (cmp == 0) {
|
||||
cmp = a->sign < b->sign;
|
||||
}
|
||||
which = cmp > 0 ? 0 : 1;
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue