diff --git a/cpu/ppc/ppcexec.cpp b/cpu/ppc/ppcexec.cpp index 9704a05..d32f3b7 100644 --- a/cpu/ppc/ppcexec.cpp +++ b/cpu/ppc/ppcexec.cpp @@ -261,23 +261,23 @@ void ppc_opcode19() { break; case 1056: if (for601) - ppc_bcctr(); + ppc_bcctr(); else - ppc_bcctr(); + ppc_bcctr(); break; case 1057: if (for601) - ppc_bcctr(); + ppc_bcctr(); else - ppc_bcctr(); + ppc_bcctr(); break; default: ppc_illegalop(); } } -template void ppc_opcode19(); -template void ppc_opcode19(); +template void ppc_opcode19(); +template void ppc_opcode19(); void ppc_opcode31() { uint16_t subop_grab = ppc_cur_instruction & 0x7FFUL; @@ -603,15 +603,15 @@ void initialize_ppc_opcode_tables() { SubOpcode31Grabber[1040] = ppc_subf; SubOpcode31Grabber[1041] = ppc_subf; SubOpcode31Grabber[1104] = ppc_subf; - SubOpcode31Grabber[1105] = ppc_subf; + SubOpcode31Grabber[1105] = ppc_subf; SubOpcode31Grabber[1232] = ppc_neg; SubOpcode31Grabber[1233] = ppc_neg; SubOpcode31Grabber[1296] = ppc_subfe; SubOpcode31Grabber[1297] = ppc_subfe; SubOpcode31Grabber[1424] = ppc_subfze; SubOpcode31Grabber[1425] = ppc_subfze; - SubOpcode31Grabber[464] = ppc_subfme; - SubOpcode31Grabber[465] = ppc_subfme; + SubOpcode31Grabber[1488] = ppc_subfme; + SubOpcode31Grabber[1489] = ppc_subfme; SubOpcode31Grabber[20] = ppc_add; SubOpcode31Grabber[21] = ppc_add; @@ -650,8 +650,8 @@ void initialize_ppc_opcode_tables() { SubOpcode31Grabber[1495] = ppc_mullw; SubOpcode31Grabber[1942] = ppc_divwu; SubOpcode31Grabber[1943] = ppc_divwu; - SubOpcode31Grabber[2006] = ppc_divw; - SubOpcode31Grabber[2007] = ppc_divw; + SubOpcode31Grabber[2006] = ppc_divw; + SubOpcode31Grabber[2007] = ppc_divw; SubOpcode31Grabber[40] = ppc_lwarx; SubOpcode31Grabber[46] = ppc_lzx; @@ -707,16 +707,18 @@ void initialize_ppc_opcode_tables() { SubOpcode31Grabber[825] = ppc_do_bool; SubOpcode31Grabber[888] = ppc_do_bool; SubOpcode31Grabber[889] = ppc_do_bool; + SubOpcode31Grabber[952] = ppc_do_bool; + SubOpcode31Grabber[953] = ppc_do_bool; SubOpcode31Grabber[1072] = ppc_shift; SubOpcode31Grabber[1073] = ppc_shift; SubOpcode31Grabber[1584] = ppc_sraw; SubOpcode31Grabber[1585] = ppc_sraw; SubOpcode31Grabber[1648] = ppc_srawi; SubOpcode31Grabber[1649] = ppc_srawi; - SubOpcode31Grabber[1844] = ppc_exts; - SubOpcode31Grabber[1845] = ppc_exts; - SubOpcode31Grabber[1908] = ppc_exts; - SubOpcode31Grabber[1909] = ppc_exts; + SubOpcode31Grabber[1844] = ppc_exts; + SubOpcode31Grabber[1845] = ppc_exts; + SubOpcode31Grabber[1908] = ppc_exts; + SubOpcode31Grabber[1909] = ppc_exts; SubOpcode31Grabber[52] = ppc_cntlzw; SubOpcode31Grabber[53] = ppc_cntlzw; @@ -880,7 +882,7 @@ void initialize_ppc_opcode_tables() { SubOpcode63Grabber[i + 46] = ppc_fsel; SubOpcode63Grabber[i + 47] = ppc_fsel; SubOpcode63Grabber[i + 50] = ppc_fmul; - SubOpcode63Grabber[i + 50] = ppc_fmul; + SubOpcode63Grabber[i + 51] = ppc_fmul; SubOpcode63Grabber[i + 56] = ppc_fmsub; SubOpcode63Grabber[i + 57] = ppc_fmsub; SubOpcode63Grabber[i + 58] = ppc_fmadd; diff --git a/cpu/ppc/ppcfpopcodes.cpp b/cpu/ppc/ppcfpopcodes.cpp index 4c2a56f..76a74fc 100644 --- a/cpu/ppc/ppcfpopcodes.cpp +++ b/cpu/ppc/ppcfpopcodes.cpp @@ -30,12 +30,8 @@ along with this program. If not, see . #include #include -// Used for FP calcs - // Storage and register retrieval functions for the floating point functions. -#define GET_FPR(reg) ppc_state.fpr[(reg)].dbl64_r - double fp_return_double(uint32_t reg) { return ppc_state.fpr[reg].dbl64_r; } diff --git a/cpu/ppc/ppcmacros.h b/cpu/ppc/ppcmacros.h index 1630f95..4db787d 100644 --- a/cpu/ppc/ppcmacros.h +++ b/cpu/ppc/ppcmacros.h @@ -112,6 +112,9 @@ along with this program. If not, see . int reg_d = (opcode >> 21) & 31; \ int reg_b = (opcode >> 11) & 31; +#define GET_FPR(reg) \ + ppc_state.fpr[(reg)].dbl64_r + #define ppc_grab_regsfpdiab(opcode) \ int reg_d = (opcode >> 21) & 31; \ int reg_a = (opcode >> 16) & 31; \ diff --git a/cpu/ppc/ppcopcodes.cpp b/cpu/ppc/ppcopcodes.cpp index 1d27906..a1a9093 100644 --- a/cpu/ppc/ppcopcodes.cpp +++ b/cpu/ppc/ppcopcodes.cpp @@ -166,10 +166,10 @@ void dppc_interpreter::ppc_adde() { ppc_store_iresult_reg(reg_d, ppc_result_d); } -template void dppc_interpreter::ppc_adde();; -template void dppc_interpreter::ppc_adde(); -template void dppc_interpreter::ppc_adde(); -template void dppc_interpreter::ppc_adde(); +template void dppc_interpreter::ppc_adde(); +template void dppc_interpreter::ppc_adde(); +template void dppc_interpreter::ppc_adde(); +template void dppc_interpreter::ppc_adde(); template void dppc_interpreter::ppc_addme() { @@ -191,10 +191,10 @@ void dppc_interpreter::ppc_addme() { ppc_store_iresult_reg(reg_d, ppc_result_d); } -template void dppc_interpreter::ppc_addme();; -template void dppc_interpreter::ppc_addme(); -template void dppc_interpreter::ppc_addme(); -template void dppc_interpreter::ppc_addme(); +template void dppc_interpreter::ppc_addme(); +template void dppc_interpreter::ppc_addme(); +template void dppc_interpreter::ppc_addme(); +template void dppc_interpreter::ppc_addme(); template void dppc_interpreter::ppc_addze() { @@ -216,10 +216,10 @@ void dppc_interpreter::ppc_addze() { ppc_store_iresult_reg(reg_d, ppc_result_d); } -template void dppc_interpreter::ppc_addze();; -template void dppc_interpreter::ppc_addze(); -template void dppc_interpreter::ppc_addze(); -template void dppc_interpreter::ppc_addze(); +template void dppc_interpreter::ppc_addze(); +template void dppc_interpreter::ppc_addze(); +template void dppc_interpreter::ppc_addze(); +template void dppc_interpreter::ppc_addze(); void dppc_interpreter::ppc_subfic() { ppc_grab_regsdasimm(ppc_cur_instruction); @@ -246,14 +246,14 @@ void dppc_interpreter::ppc_subf() { ppc_store_iresult_reg(reg_d, ppc_result_d); } -template void dppc_interpreter::ppc_subf(); -template void dppc_interpreter::ppc_subf(); -template void dppc_interpreter::ppc_subf(); -template void dppc_interpreter::ppc_subf(); -template void dppc_interpreter::ppc_subf(); -template void dppc_interpreter::ppc_subf(); -template void dppc_interpreter::ppc_subf(); -template void dppc_interpreter::ppc_subf(); +template void dppc_interpreter::ppc_subf(); +template void dppc_interpreter::ppc_subf(); +template void dppc_interpreter::ppc_subf(); +template void dppc_interpreter::ppc_subf(); +template void dppc_interpreter::ppc_subf(); +template void dppc_interpreter::ppc_subf(); +template void dppc_interpreter::ppc_subf(); +template void dppc_interpreter::ppc_subf(); template void dppc_interpreter::ppc_subfe() { @@ -273,10 +273,10 @@ void dppc_interpreter::ppc_subfe() { ppc_store_iresult_reg(reg_d, ppc_result_d); } -template void dppc_interpreter::ppc_subfe();; -template void dppc_interpreter::ppc_subfe(); -template void dppc_interpreter::ppc_subfe(); -template void dppc_interpreter::ppc_subfe(); +template void dppc_interpreter::ppc_subfe(); +template void dppc_interpreter::ppc_subfe(); +template void dppc_interpreter::ppc_subfe(); +template void dppc_interpreter::ppc_subfe(); template void dppc_interpreter::ppc_subfme() { @@ -302,10 +302,10 @@ void dppc_interpreter::ppc_subfme() { ppc_store_iresult_reg(reg_d, ppc_result_d); } -template void dppc_interpreter::ppc_subfme();; -template void dppc_interpreter::ppc_subfme(); -template void dppc_interpreter::ppc_subfme(); -template void dppc_interpreter::ppc_subfme(); +template void dppc_interpreter::ppc_subfme(); +template void dppc_interpreter::ppc_subfme(); +template void dppc_interpreter::ppc_subfme(); +template void dppc_interpreter::ppc_subfme(); template void dppc_interpreter::ppc_subfze() { @@ -331,10 +331,10 @@ void dppc_interpreter::ppc_subfze() { ppc_store_iresult_reg(reg_d, ppc_result_d); } -template void dppc_interpreter::ppc_subfze();; -template void dppc_interpreter::ppc_subfze(); -template void dppc_interpreter::ppc_subfze(); -template void dppc_interpreter::ppc_subfze(); +template void dppc_interpreter::ppc_subfze(); +template void dppc_interpreter::ppc_subfze(); +template void dppc_interpreter::ppc_subfze(); +template void dppc_interpreter::ppc_subfze(); template void dppc_interpreter::ppc_andirc() { @@ -350,7 +350,7 @@ template void dppc_interpreter::ppc_andirc(); template void dppc_interpreter::ppc_ori() { ppc_grab_regssauimm(ppc_cur_instruction); - ppc_result_a = shift ? (ppc_result_d ^ (uimm << 16)) : (ppc_result_d ^ uimm); + ppc_result_a = shift ? (ppc_result_d | (uimm << 16)) : (ppc_result_d | uimm); ppc_store_iresult_reg(reg_a, ppc_result_a); } @@ -393,22 +393,22 @@ void dppc_interpreter::ppc_do_bool() { ppc_store_iresult_reg(reg_a, ppc_result_a); } -template void dppc_interpreter::ppc_do_bool(); -template void dppc_interpreter::ppc_do_bool(); -template void dppc_interpreter::ppc_do_bool(); -template void dppc_interpreter::ppc_do_bool(); -template void dppc_interpreter::ppc_do_bool(); -template void dppc_interpreter::ppc_do_bool(); -template void dppc_interpreter::ppc_do_bool(); -template void dppc_interpreter::ppc_do_bool(); -template void dppc_interpreter::ppc_do_bool(); -template void dppc_interpreter::ppc_do_bool(); -template void dppc_interpreter::ppc_do_bool(); -template void dppc_interpreter::ppc_do_bool(); -template void dppc_interpreter::ppc_do_bool(); -template void dppc_interpreter::ppc_do_bool(); -template void dppc_interpreter::ppc_do_bool(); -template void dppc_interpreter::ppc_do_bool(); +template void dppc_interpreter::ppc_do_bool(); +template void dppc_interpreter::ppc_do_bool(); +template void dppc_interpreter::ppc_do_bool(); +template void dppc_interpreter::ppc_do_bool(); +template void dppc_interpreter::ppc_do_bool(); +template void dppc_interpreter::ppc_do_bool(); +template void dppc_interpreter::ppc_do_bool(); +template void dppc_interpreter::ppc_do_bool(); +template void dppc_interpreter::ppc_do_bool(); +template void dppc_interpreter::ppc_do_bool(); +template void dppc_interpreter::ppc_do_bool(); +template void dppc_interpreter::ppc_do_bool(); +template void dppc_interpreter::ppc_do_bool(); +template void dppc_interpreter::ppc_do_bool(); +template void dppc_interpreter::ppc_do_bool(); +template void dppc_interpreter::ppc_do_bool(); template void dppc_interpreter::ppc_neg() { @@ -429,9 +429,9 @@ void dppc_interpreter::ppc_neg() { } template void dppc_interpreter::ppc_neg();; -template void dppc_interpreter::ppc_neg(); -template void dppc_interpreter::ppc_neg(); -template void dppc_interpreter::ppc_neg(); +template void dppc_interpreter::ppc_neg(); +template void dppc_interpreter::ppc_neg(); +template void dppc_interpreter::ppc_neg(); template void dppc_interpreter::ppc_cntlzw() { @@ -514,10 +514,10 @@ void dppc_interpreter::ppc_mullw() { ppc_store_iresult_reg(reg_d, ppc_result_d); } -template void dppc_interpreter::ppc_mullw();; -template void dppc_interpreter::ppc_mullw(); -template void dppc_interpreter::ppc_mullw(); -template void dppc_interpreter::ppc_mullw(); +template void dppc_interpreter::ppc_mullw(); +template void dppc_interpreter::ppc_mullw(); +template void dppc_interpreter::ppc_mullw(); +template void dppc_interpreter::ppc_mullw(); void dppc_interpreter::ppc_mulli() { ppc_grab_regsdasimm(ppc_cur_instruction); @@ -558,9 +558,9 @@ void dppc_interpreter::ppc_divw() { } template void dppc_interpreter::ppc_divw();; -template void dppc_interpreter::ppc_divw(); -template void dppc_interpreter::ppc_divw(); -template void dppc_interpreter::ppc_divw(); +template void dppc_interpreter::ppc_divw(); +template void dppc_interpreter::ppc_divw(); +template void dppc_interpreter::ppc_divw(); template void dppc_interpreter::ppc_divwu() { @@ -589,9 +589,9 @@ void dppc_interpreter::ppc_divwu() { } template void dppc_interpreter::ppc_divwu();; -template void dppc_interpreter::ppc_divwu(); -template void dppc_interpreter::ppc_divwu(); -template void dppc_interpreter::ppc_divwu(); +template void dppc_interpreter::ppc_divwu(); +template void dppc_interpreter::ppc_divwu(); +template void dppc_interpreter::ppc_divwu(); // Value shifting @@ -626,7 +626,7 @@ void dppc_interpreter::ppc_sraw() { if (ppc_result_b & 0x20) { // fill rA with the sign bit of rS - uint32_t ppc_result_a = int32_t(ppc_result_d) >> 31; + ppc_result_a = int32_t(ppc_result_d) >> 31; if (ppc_result_a) // if rA is negative ppc_state.spr[SPR::XER] |= XER::CA; } else { @@ -1032,10 +1032,10 @@ void dppc_interpreter::ppc_exts() { ppc_store_iresult_reg(reg_a, ppc_result_a); } -template void dppc_interpreter::ppc_exts(); -template void dppc_interpreter::ppc_exts(); -template void dppc_interpreter::ppc_exts(); -template void dppc_interpreter::ppc_exts(); +template void dppc_interpreter::ppc_exts(); +template void dppc_interpreter::ppc_exts(); +template void dppc_interpreter::ppc_exts(); +template void dppc_interpreter::ppc_exts(); // Branching Instructions