diff --git a/cpu/ppc/ppcfpopcodes.cpp b/cpu/ppc/ppcfpopcodes.cpp index 47331bb..7cbbe90 100644 --- a/cpu/ppc/ppcfpopcodes.cpp +++ b/cpu/ppc/ppcfpopcodes.cpp @@ -236,8 +236,7 @@ void ppc_confirm_inf_nan(int chosen_reg_1, int chosen_reg_2, int chosen_reg_3, b } } -template -void fpresult_update(double set_result, bool confirm_arc) { +static void fpresult_update(double set_result, bool confirm_arc) { if (ppc_state.fpscr & 0x3) ppc_state.cr |= 0x2; @@ -285,8 +284,8 @@ void dppc_interpreter::ppc_fadd() { if (!isnan(ppc_dblresult64_d) || !isinf(ppc_dblresult64_d)) { ppc_store_dfpresult_flt(reg_d); - fpresult_update(ppc_dblresult64_d, rc_flag); - } + fpresult_update(ppc_dblresult64_d, rc_flag); + } else { ppc_confirm_inf_nan(reg_a, reg_b, 0, rc_flag); } @@ -302,7 +301,7 @@ void dppc_interpreter::ppc_fsub() { if (!isnan(ppc_dblresult64_d) || !isinf(ppc_dblresult64_d)) { ppc_store_dfpresult_flt(reg_d); - fpresult_update(ppc_dblresult64_d, rc_flag); + fpresult_update(ppc_dblresult64_d, rc_flag); } else { ppc_confirm_inf_nan(reg_a, reg_b, 0, rc_flag); } @@ -318,7 +317,7 @@ void dppc_interpreter::ppc_fdiv() { if (!isnan(ppc_dblresult64_d) || !isinf(ppc_dblresult64_d)) { ppc_store_dfpresult_flt(reg_d); - fpresult_update(ppc_dblresult64_d, rc_flag); + fpresult_update(ppc_dblresult64_d, rc_flag); } else { ppc_confirm_inf_nan(reg_a, reg_b, 0, rc_flag); } @@ -334,7 +333,7 @@ void dppc_interpreter::ppc_fmul() { if (!isnan(ppc_dblresult64_d) || !isinf(ppc_dblresult64_d)) { ppc_store_dfpresult_flt(reg_d); - fpresult_update(ppc_dblresult64_d, rc_flag); + fpresult_update(ppc_dblresult64_d, rc_flag); } else { ppc_confirm_inf_nan(reg_a, reg_b, 0, rc_flag); } @@ -350,7 +349,7 @@ void dppc_interpreter::ppc_fmadd() { if (!isnan(ppc_dblresult64_d) || !isinf(ppc_dblresult64_d)) { ppc_store_dfpresult_flt(reg_d); - fpresult_update(ppc_dblresult64_d, rc_flag); + fpresult_update(ppc_dblresult64_d, rc_flag); } else { ppc_confirm_inf_nan(reg_a, reg_b, reg_c); } @@ -367,7 +366,7 @@ void dppc_interpreter::ppc_fmsub() { if (!isnan(ppc_dblresult64_d) || !isinf(ppc_dblresult64_d)) { ppc_store_dfpresult_flt(reg_d); - fpresult_update(ppc_dblresult64_d, rc_flag); + fpresult_update(ppc_dblresult64_d, rc_flag); } else { ppc_confirm_inf_nan(reg_a, reg_b, reg_c); } @@ -385,7 +384,7 @@ void dppc_interpreter::ppc_fnmadd() { if (!isnan(ppc_dblresult64_d) || !isinf(ppc_dblresult64_d)) { ppc_store_dfpresult_flt(reg_d); - fpresult_update(ppc_dblresult64_d, rc_flag); + fpresult_update(ppc_dblresult64_d, rc_flag); } else { ppc_confirm_inf_nan(reg_a, reg_b, reg_c); @@ -404,7 +403,7 @@ void dppc_interpreter::ppc_fnmsub() { if (!isnan(ppc_dblresult64_d) || !isinf(ppc_dblresult64_d)) { ppc_store_dfpresult_flt(reg_d); - fpresult_update(ppc_dblresult64_d, rc_flag); + fpresult_update(ppc_dblresult64_d, rc_flag); } else { ppc_confirm_inf_nan(reg_a, reg_b, reg_c); } @@ -420,8 +419,8 @@ void dppc_interpreter::ppc_fadds() { if (!isnan(ppc_dblresult64_d)) { ppc_store_sfpresult_flt(reg_d); - fpresult_update(ppc_dblresult64_d, rc_flag); - } + fpresult_update(ppc_dblresult64_d, rc_flag); + } else { ppc_confirm_inf_nan(reg_a, reg_b, 0); } @@ -437,7 +436,7 @@ void dppc_interpreter::ppc_fsubs() { if (!isnan(ppc_dblresult64_d)) { ppc_store_sfpresult_flt(reg_d); - fpresult_update(ppc_dblresult64_d, rc_flag); + fpresult_update(ppc_dblresult64_d, rc_flag); } else { ppc_confirm_inf_nan(reg_a, reg_b, 0); } @@ -453,7 +452,7 @@ void dppc_interpreter::ppc_fdivs() { if (!isnan(ppc_dblresult64_d)) { ppc_store_sfpresult_flt(reg_d); - fpresult_update(ppc_dblresult64_d, rc_flag); + fpresult_update(ppc_dblresult64_d, rc_flag); } else { ppc_confirm_inf_nan(reg_a, reg_b, 0); } @@ -469,7 +468,7 @@ void dppc_interpreter::ppc_fmuls() { if (!isnan(ppc_dblresult64_d)) { ppc_store_sfpresult_flt(reg_d); - fpresult_update(ppc_dblresult64_d, rc_flag); + fpresult_update(ppc_dblresult64_d, rc_flag); } else { ppc_confirm_inf_nan(reg_a, 0, reg_c); } @@ -486,7 +485,7 @@ void dppc_interpreter::ppc_fmadds() { if (!isnan(ppc_dblresult64_d)) { ppc_store_sfpresult_flt(reg_d); - fpresult_update(ppc_dblresult64_d, rc_flag); + fpresult_update(ppc_dblresult64_d, rc_flag); } else { ppc_confirm_inf_nan(reg_a, reg_b, reg_c); } @@ -504,7 +503,7 @@ void dppc_interpreter::ppc_fmsubs() { if (!isnan(ppc_dblresult64_d)) { ppc_store_sfpresult_flt(reg_d); - fpresult_update(ppc_dblresult64_d, rc_flag); + fpresult_update(ppc_dblresult64_d, rc_flag); } else { ppc_confirm_inf_nan(reg_a, reg_b, reg_c); } @@ -523,7 +522,7 @@ void dppc_interpreter::ppc_fnmadds() { if (!isnan(ppc_dblresult64_d)) { ppc_store_sfpresult_flt(reg_d); - fpresult_update(ppc_dblresult64_d, rc_flag); + fpresult_update(ppc_dblresult64_d, rc_flag); } else { ppc_confirm_inf_nan(reg_a, reg_b, reg_c); } @@ -543,7 +542,7 @@ void dppc_interpreter::ppc_fnmsubs() { if (!isnan(ppc_dblresult64_d)) { ppc_store_sfpresult_flt(reg_d); - fpresult_update(ppc_dblresult64_d, rc_flag); + fpresult_update(ppc_dblresult64_d, rc_flag); } else { ppc_confirm_inf_nan(reg_a, reg_b, reg_c); } @@ -996,10 +995,10 @@ void dppc_interpreter::ppc_fcmpo() { if (std::isnan(db_test_a) || std::isnan(db_test_b)) { cmp_c |= (1 << CRx_bit::CR_SO); } - + if (db_test_a < db_test_b) { cmp_c |= (1 << CRx_bit::CR_LT); - } + } else if (db_test_a > db_test_b) { cmp_c |= (1 << CRx_bit::CR_GT); } @@ -1030,10 +1029,10 @@ void dppc_interpreter::ppc_fcmpu() { if (std::isnan(db_test_a) || std::isnan(db_test_b)) { cmp_c |= (1 << CRx_bit::CR_SO); } - + if (db_test_a < db_test_b) { cmp_c |= (1 << CRx_bit::CR_LT); - } + } else if (db_test_a > db_test_b) { cmp_c |= (1 << CRx_bit::CR_GT); }