softfloat: Handle snan_bit_is_one == 0 in MIPS pickNaNMulAdd()
Only for Mips platform, and only for cases when snan_bit_is_one is 0, correct the order of argument comparisons in pickNaNMulAdd(). For more info, see [1], page 53, section "3.5.3 NaN Propagation". [1] "MIPS Architecture for Programmers Volume IV-j: The MIPS32 SIMD Architecture Module", Imagination Technologies LTD, Revision 1.12, February 3, 2016 Signed-off-by: Aleksandar Markovic <aleksandar.markovic@imgtec.com> Reviewed-by: Leon Alrae <leon.alrae@imgtec.com> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> [leon.alrae@imgtec.com: * reworded the subject of the patch * swapped if/else code blocks to match the commit description] Signed-off-by: Leon Alrae <leon.alrae@imgtec.com>
This commit is contained in:
parent
a7c04d545a
commit
c27644f0e9
@ -571,19 +571,36 @@ static int pickNaNMulAdd(flag aIsQNaN, flag aIsSNaN, flag bIsQNaN, flag bIsSNaN,
|
||||
return 3;
|
||||
}
|
||||
|
||||
/* Prefer sNaN over qNaN, in the a, b, c order. */
|
||||
if (aIsSNaN) {
|
||||
return 0;
|
||||
} else if (bIsSNaN) {
|
||||
return 1;
|
||||
} else if (cIsSNaN) {
|
||||
return 2;
|
||||
} else if (aIsQNaN) {
|
||||
return 0;
|
||||
} else if (bIsQNaN) {
|
||||
return 1;
|
||||
if (status->snan_bit_is_one) {
|
||||
/* Prefer sNaN over qNaN, in the a, b, c order. */
|
||||
if (aIsSNaN) {
|
||||
return 0;
|
||||
} else if (bIsSNaN) {
|
||||
return 1;
|
||||
} else if (cIsSNaN) {
|
||||
return 2;
|
||||
} else if (aIsQNaN) {
|
||||
return 0;
|
||||
} else if (bIsQNaN) {
|
||||
return 1;
|
||||
} else {
|
||||
return 2;
|
||||
}
|
||||
} else {
|
||||
return 2;
|
||||
/* Prefer sNaN over qNaN, in the c, a, b order. */
|
||||
if (cIsSNaN) {
|
||||
return 2;
|
||||
} else if (aIsSNaN) {
|
||||
return 0;
|
||||
} else if (bIsSNaN) {
|
||||
return 1;
|
||||
} else if (cIsQNaN) {
|
||||
return 2;
|
||||
} else if (aIsQNaN) {
|
||||
return 0;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
#elif defined(TARGET_PPC)
|
||||
|
Loading…
Reference in New Issue
Block a user