mirror of
https://github.com/dingusdev/dingusppc.git
synced 2024-09-27 19:54:46 +00:00
ppcexec: Make separate enum for shift instructions.
This commit is contained in:
parent
64df253053
commit
5b4ed01bec
@ -377,6 +377,11 @@ typedef enum {
|
||||
SHFT1,
|
||||
} field_shift;
|
||||
|
||||
typedef enum {
|
||||
RIGHT0,
|
||||
LEFT1,
|
||||
} field_direction;
|
||||
|
||||
typedef enum {
|
||||
RC0,
|
||||
RC1,
|
||||
@ -486,7 +491,7 @@ template <field_rc rec> extern void ppc_mulhwu();
|
||||
template <field_rc rec> extern void ppc_mulhw();
|
||||
template <field_rc rec, field_ov ov> extern void ppc_mullw();
|
||||
template <field_rc rec, field_ov ov> extern void ppc_neg();
|
||||
template <field_shift shift, field_rc rec> extern void ppc_shift();
|
||||
template <field_direction shift, field_rc rec> extern void ppc_shift();
|
||||
template <field_rc rec> extern void ppc_sraw();
|
||||
template <field_rc rec> extern void ppc_srawi();
|
||||
template <class T> extern void ppc_stx();
|
||||
|
@ -695,7 +695,7 @@ void initialize_ppc_opcode_tables() {
|
||||
OP31(310, ppc_eciwx);
|
||||
OP31(438, ppc_ecowx);
|
||||
|
||||
OP31dc(24, ppc_shift, SHFT1);
|
||||
OP31dc(24, ppc_shift, LEFT1); // slw
|
||||
OP31dc(28, ppc_logical, ppc_and);
|
||||
OP31dc(60, ppc_logical, ppc_andc);
|
||||
OP31dc(124, ppc_logical, ppc_nor);
|
||||
@ -704,7 +704,7 @@ void initialize_ppc_opcode_tables() {
|
||||
OP31dc(412, ppc_logical, ppc_orc);
|
||||
OP31dc(444, ppc_logical, ppc_or);
|
||||
OP31dc(476, ppc_logical, ppc_nand);
|
||||
OP31dc(536, ppc_shift, SHFT0);
|
||||
OP31dc(536, ppc_shift, RIGHT0); // srw
|
||||
OP31d(792, ppc_sraw);
|
||||
OP31d(824, ppc_srawi);
|
||||
OP31dc(922, ppc_exts, int16_t);
|
||||
|
@ -595,14 +595,14 @@ template void dppc_interpreter::ppc_divwu<RC1, OV1>();
|
||||
|
||||
// Value shifting
|
||||
|
||||
template <field_shift shift, field_rc rec>
|
||||
template <field_direction isleft, field_rc rec>
|
||||
void dppc_interpreter::ppc_shift() {
|
||||
ppc_grab_regssab(ppc_cur_instruction);
|
||||
if (ppc_result_b & 0x20) {
|
||||
ppc_result_a = 0;
|
||||
}
|
||||
else {
|
||||
ppc_result_a = shift ? (ppc_result_d << (ppc_result_b & 0x1F))
|
||||
ppc_result_a = isleft ? (ppc_result_d << (ppc_result_b & 0x1F))
|
||||
: (ppc_result_d >> (ppc_result_b & 0x1F));
|
||||
}
|
||||
|
||||
@ -612,10 +612,10 @@ void dppc_interpreter::ppc_shift() {
|
||||
ppc_store_iresult_reg(reg_a, ppc_result_a);
|
||||
}
|
||||
|
||||
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 void dppc_interpreter::ppc_shift<RIGHT0, RC0>();
|
||||
template void dppc_interpreter::ppc_shift<RIGHT0, RC1>();
|
||||
template void dppc_interpreter::ppc_shift<LEFT1, RC0>();
|
||||
template void dppc_interpreter::ppc_shift<LEFT1, RC1>();
|
||||
|
||||
template <field_rc rec>
|
||||
void dppc_interpreter::ppc_sraw() {
|
||||
|
Loading…
Reference in New Issue
Block a user