ppcfpopcodes: fnabs fix.

fnabs sets the sign bit regardless of nan status.
This commit is contained in:
joevt 2024-11-28 02:21:17 -08:00 committed by dingusdev
parent e231dc4dec
commit 00f38133e9

View File

@ -784,19 +784,11 @@ template <field_rc rec>
void dppc_interpreter::ppc_fnabs() {
ppc_grab_regsfpdb(ppc_cur_instruction);
double ppc_dblresult64_d = abs(GET_FPR(reg_b));
ppc_dblresult64_d = -ppc_dblresult64_d;
uint64_t ppc_result64_d = FPR_INT(reg_b) | 0x8000000000000000U;
if (std::isnan(GET_FPR(reg_b))) {
ppc_dblresult64_d = std::numeric_limits<double>::quiet_NaN();
}
if (snan_single_check(reg_b)) {
uint64_t qnan = 0x7FFC000000000000;
ppc_store_fpresult_int(reg_d, qnan);
} else {
ppc_store_fpresult_flt(reg_d, ppc_dblresult64_d);
}
ppc_store_fpresult_int(reg_d, ppc_result64_d);
snan_single_check(reg_d);
if (rec)
ppc_update_cr1();