Cleaning up templating

This commit is contained in:
dingusdev 2024-03-24 14:06:07 -07:00
parent c281b27220
commit 5631485465
4 changed files with 50 additions and 57 deletions

View File

@ -405,8 +405,8 @@ enum field_setting {
LK1 = 1,
AA0 = 0,
AA1 = 1,
LSHFT = 0,
RSHFT = 1,
SHFT0 = 0,
SHFT1 = 1,
RC0 = 0,
RC1 = 1,
OV0 = 0,

View File

@ -134,17 +134,18 @@ public:
/** Opcode lookup tables. */
/** Primary opcode (bits 0...5) lookup table. */
static PPCOpcode OpcodeGrabber[] = {
static PPCOpcode OpcodeGrabber[] = {
ppc_illegalop, ppc_illegalop, ppc_illegalop, ppc_twi,
ppc_illegalop, ppc_illegalop, ppc_illegalop, ppc_mulli,
ppc_subfic, power_dozi, ppc_cmpli, ppc_cmpi,
ppc_addic<false>, ppc_addic<true>,
ppc_addi<false>, ppc_addi<true>,
ppc_opcode16, ppc_sc, ppc_opcode18, ppc_opcode19<false>,
ppc_addic<RC0>, ppc_addic<RC1>,
ppc_addi<SHFT0>, ppc_addi<SHFT1>,
ppc_opcode16, ppc_sc,
ppc_opcode18, ppc_opcode19<NOT601>,
ppc_rlwimi, ppc_rlwinm, power_rlmi, ppc_rlwnm,
ppc_ori<false>, ppc_ori<true>,
ppc_xori<false>, ppc_xori<true>,
ppc_andirc<false>, ppc_andirc<true>,
ppc_ori<SHFT0>, ppc_ori<SHFT1>,
ppc_xori<SHFT0>, ppc_xori<SHFT1>,
ppc_andirc<SHFT0>, ppc_andirc<SHFT1>,
ppc_illegalop, ppc_opcode31,
ppc_lz<uint32_t>, ppc_lzu<uint32_t>,
ppc_lz<uint8_t>, ppc_lzu<uint8_t>,
@ -161,17 +162,17 @@ static PPCOpcode OpcodeGrabber[] = {
};
/** Lookup tables for branch instructions. */
static PPCOpcode SubOpcode16Grabber[] = {
dppc_interpreter::ppc_bc<false, false>, //bc
dppc_interpreter::ppc_bc<true, false>, //bcl
dppc_interpreter::ppc_bc<false, true>, //bca
dppc_interpreter::ppc_bc<true, true>}; //bcla
const static PPCOpcode SubOpcode16Grabber[] = {
dppc_interpreter::ppc_bc<LK0, AA0>, // bc
dppc_interpreter::ppc_bc<LK1, AA0>, // bcl
dppc_interpreter::ppc_bc<LK0, AA1>, // bca
dppc_interpreter::ppc_bc<LK1, AA1>}; // bcla
static PPCOpcode SubOpcode18Grabber[] = {
dppc_interpreter::ppc_b<false, false>, //b
dppc_interpreter::ppc_b<true, false>, //bl
dppc_interpreter::ppc_b<false, true>, //ba
dppc_interpreter::ppc_b<true, true>}; //bla
const static PPCOpcode SubOpcode18Grabber[] = {
dppc_interpreter::ppc_b<LK0, AA0>, // b
dppc_interpreter::ppc_b<LK1, AA0>, // bl
dppc_interpreter::ppc_b<LK0, AA1>, // ba
dppc_interpreter::ppc_b<LK1, AA1>}; // bla
/** Instructions decoding tables for integer,
single floating-point, and double-floating point ops respectively */
@ -690,8 +691,8 @@ void initialize_ppc_opcode_tables() {
SubOpcode31Grabber[620] = ppc_eciwx;
SubOpcode31Grabber[876] = ppc_ecowx;
SubOpcode31Grabber[48] = ppc_shift<LSHFT, RC0>;
SubOpcode31Grabber[49] = ppc_shift<LSHFT, RC1>;
SubOpcode31Grabber[48] = ppc_shift<SHFT1, RC0>;
SubOpcode31Grabber[49] = ppc_shift<SHFT1, RC1>;
SubOpcode31Grabber[56] = ppc_do_bool<bool_and, RC0>;
SubOpcode31Grabber[57] = ppc_do_bool<bool_and, RC1>;
SubOpcode31Grabber[120] = ppc_do_bool<bool_andc, RC0>;
@ -706,8 +707,8 @@ void initialize_ppc_opcode_tables() {
SubOpcode31Grabber[825] = ppc_do_bool<bool_orc, RC1>;
SubOpcode31Grabber[888] = ppc_do_bool<bool_or, RC0>;
SubOpcode31Grabber[889] = ppc_do_bool<bool_or, RC1>;
SubOpcode31Grabber[1072] = ppc_shift<RSHFT, RC0>;
SubOpcode31Grabber[1073] = ppc_shift<RSHFT, RC1>;
SubOpcode31Grabber[1072] = ppc_shift<SHFT0, RC0>;
SubOpcode31Grabber[1073] = ppc_shift<SHFT0, RC1>;
SubOpcode31Grabber[1584] = ppc_sraw<RC0>;
SubOpcode31Grabber[1585] = ppc_sraw<RC1>;
SubOpcode31Grabber[1648] = ppc_srawi<RC0>;

View File

@ -886,8 +886,8 @@ void dppc_interpreter::ppc_fmr() {
ppc_update_cr1();
}
template void dppc_interpreter::ppc_fmr<false>();
template void dppc_interpreter::ppc_fmr<true>();
template void dppc_interpreter::ppc_fmr<RC0>();
template void dppc_interpreter::ppc_fmr<RC1>();
template <bool for601, bool rec>
void dppc_interpreter::ppc_mffs() {
@ -899,10 +899,10 @@ void dppc_interpreter::ppc_mffs() {
ppc_update_cr1();
}
template void dppc_interpreter::ppc_mffs<false, false>();
template void dppc_interpreter::ppc_mffs<false, true>();
template void dppc_interpreter::ppc_mffs<true, false>();
template void dppc_interpreter::ppc_mffs<true, true>();
template void dppc_interpreter::ppc_mffs<NOT601, RC0>();
template void dppc_interpreter::ppc_mffs<NOT601, RC1>();
template void dppc_interpreter::ppc_mffs<IS601, RC0>();
template void dppc_interpreter::ppc_mffs<IS601, RC1>();
template <bool rec>
void dppc_interpreter::ppc_mtfsf() {
@ -934,8 +934,8 @@ void dppc_interpreter::ppc_mtfsf() {
ppc_update_cr1();
}
template void dppc_interpreter::ppc_mtfsf<false>();
template void dppc_interpreter::ppc_mtfsf<true>();
template void dppc_interpreter::ppc_mtfsf<RC0>();
template void dppc_interpreter::ppc_mtfsf<RC1>();
template <bool rec>
void dppc_interpreter::ppc_mtfsfi() {
@ -954,8 +954,8 @@ void dppc_interpreter::ppc_mtfsfi() {
ppc_update_cr1();
}
template void dppc_interpreter::ppc_mtfsfi<false>();
template void dppc_interpreter::ppc_mtfsfi<true>();
template void dppc_interpreter::ppc_mtfsfi<RC0>();
template void dppc_interpreter::ppc_mtfsfi<RC1>();
template <bool rec>
void dppc_interpreter::ppc_mtfsb0() {
@ -968,8 +968,8 @@ void dppc_interpreter::ppc_mtfsb0() {
ppc_update_cr1();
}
template void dppc_interpreter::ppc_mtfsb0<false>();
template void dppc_interpreter::ppc_mtfsb0<true>();
template void dppc_interpreter::ppc_mtfsb0<RC0>();
template void dppc_interpreter::ppc_mtfsb0<RC1>();
template <bool rec>
void dppc_interpreter::ppc_mtfsb1() {
@ -982,8 +982,8 @@ void dppc_interpreter::ppc_mtfsb1() {
ppc_update_cr1();
}
template void dppc_interpreter::ppc_mtfsb1<false>();
template void dppc_interpreter::ppc_mtfsb1<true>();
template void dppc_interpreter::ppc_mtfsb1<RC0>();
template void dppc_interpreter::ppc_mtfsb1<RC1>();
void dppc_interpreter::ppc_mcrfs() {
int crf_d = (ppc_cur_instruction >> 21) & 0x1C;

View File

@ -107,8 +107,8 @@ void dppc_interpreter::ppc_addi() {
ppc_state.gpr[reg_d] = (reg_a == 0) ? simm : (ppc_result_a + simm);
}
template void dppc_interpreter::ppc_addi<LSHFT>();
template void dppc_interpreter::ppc_addi<RSHFT>();
template void dppc_interpreter::ppc_addi<SHFT0>();
template void dppc_interpreter::ppc_addi<SHFT1>();
template <bool rec>
void dppc_interpreter::ppc_addic() {
@ -344,8 +344,8 @@ void dppc_interpreter::ppc_andirc() {
ppc_store_iresult_reg(reg_a, ppc_result_a);
}
template void dppc_interpreter::ppc_andirc<LSHFT>();
template void dppc_interpreter::ppc_andirc<RSHFT>();
template void dppc_interpreter::ppc_andirc<SHFT0>();
template void dppc_interpreter::ppc_andirc<SHFT1>();
template <bool shift>
void dppc_interpreter::ppc_ori() {
@ -354,8 +354,8 @@ void dppc_interpreter::ppc_ori() {
ppc_store_iresult_reg(reg_a, ppc_result_a);
}
template void dppc_interpreter::ppc_ori<LSHFT>();
template void dppc_interpreter::ppc_ori<RSHFT>();
template void dppc_interpreter::ppc_ori<SHFT0>();
template void dppc_interpreter::ppc_ori<SHFT1>();
template <bool shift>
void dppc_interpreter::ppc_xori() {
@ -364,8 +364,8 @@ void dppc_interpreter::ppc_xori() {
ppc_store_iresult_reg(reg_a, ppc_result_a);
}
template void dppc_interpreter::ppc_xori<LSHFT>();
template void dppc_interpreter::ppc_xori<RSHFT>();
template void dppc_interpreter::ppc_xori<SHFT0>();
template void dppc_interpreter::ppc_xori<SHFT1>();
template <int bool_op, bool rec>
void dppc_interpreter::ppc_do_bool() {
@ -612,10 +612,10 @@ void dppc_interpreter::ppc_shift() {
ppc_store_iresult_reg(reg_a, ppc_result_a);
}
template void dppc_interpreter::ppc_shift<LSHFT, RC0>();
template void dppc_interpreter::ppc_shift<LSHFT, RC1>();
template void dppc_interpreter::ppc_shift<RSHFT, RC0>();
template void dppc_interpreter::ppc_shift<RSHFT, RC1>();
template void dppc_interpreter::ppc_shift<SHFT0, RC0>();
template void dppc_interpreter::ppc_shift<SHFT0, RC1>();
template void dppc_interpreter::ppc_shift<SHFT1, RC0>();
template void dppc_interpreter::ppc_shift<SHFT1, RC1>();
template <bool rec>
void dppc_interpreter::ppc_sraw() {
@ -1386,12 +1386,10 @@ void dppc_interpreter::ppc_sync() {
void dppc_interpreter::ppc_icbi() {
/* placeholder */
ppc_illegalop();
}
void dppc_interpreter::ppc_dcbf() {
/* placeholder */
ppc_illegalop();
}
void dppc_interpreter::ppc_dcbi() {
@ -1399,12 +1397,10 @@ void dppc_interpreter::ppc_dcbi() {
num_supervisor_instrs++;
#endif
/* placeholder */
ppc_illegalop();
}
void dppc_interpreter::ppc_dcbst() {
/* placeholder */
ppc_illegalop();
}
void dppc_interpreter::ppc_dcbt() {
@ -1937,7 +1933,6 @@ void dppc_interpreter::ppc_tlbia() {
num_supervisor_instrs++;
#endif
/* placeholder */
ppc_illegalop();
}
void dppc_interpreter::ppc_tlbld() {
@ -1945,7 +1940,6 @@ void dppc_interpreter::ppc_tlbld() {
num_supervisor_instrs++;
#endif
/* placeholder */
ppc_illegalop();
}
void dppc_interpreter::ppc_tlbli() {
@ -1953,7 +1947,6 @@ void dppc_interpreter::ppc_tlbli() {
num_supervisor_instrs++;
#endif
/* placeholder */
ppc_illegalop();
}
void dppc_interpreter::ppc_tlbsync() {
@ -1961,5 +1954,4 @@ void dppc_interpreter::ppc_tlbsync() {
num_supervisor_instrs++;
#endif
/* placeholder */
ppc_illegalop();
}