mirror of
https://github.com/dingusdev/dingusppc.git
synced 2024-12-26 09:29:28 +00:00
Cleaning up templating
This commit is contained in:
parent
c281b27220
commit
5631485465
@ -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,
|
||||
|
@ -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>;
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user