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,
|
SHFT1,
|
||||||
} field_shift;
|
} field_shift;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
RIGHT0,
|
||||||
|
LEFT1,
|
||||||
|
} field_direction;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
RC0,
|
RC0,
|
||||||
RC1,
|
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> 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_mullw();
|
||||||
template <field_rc rec, field_ov ov> extern void ppc_neg();
|
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_sraw();
|
||||||
template <field_rc rec> extern void ppc_srawi();
|
template <field_rc rec> extern void ppc_srawi();
|
||||||
template <class T> extern void ppc_stx();
|
template <class T> extern void ppc_stx();
|
||||||
|
@ -695,7 +695,7 @@ void initialize_ppc_opcode_tables() {
|
|||||||
OP31(310, ppc_eciwx);
|
OP31(310, ppc_eciwx);
|
||||||
OP31(438, ppc_ecowx);
|
OP31(438, ppc_ecowx);
|
||||||
|
|
||||||
OP31dc(24, ppc_shift, SHFT1);
|
OP31dc(24, ppc_shift, LEFT1); // slw
|
||||||
OP31dc(28, ppc_logical, ppc_and);
|
OP31dc(28, ppc_logical, ppc_and);
|
||||||
OP31dc(60, ppc_logical, ppc_andc);
|
OP31dc(60, ppc_logical, ppc_andc);
|
||||||
OP31dc(124, ppc_logical, ppc_nor);
|
OP31dc(124, ppc_logical, ppc_nor);
|
||||||
@ -704,7 +704,7 @@ void initialize_ppc_opcode_tables() {
|
|||||||
OP31dc(412, ppc_logical, ppc_orc);
|
OP31dc(412, ppc_logical, ppc_orc);
|
||||||
OP31dc(444, ppc_logical, ppc_or);
|
OP31dc(444, ppc_logical, ppc_or);
|
||||||
OP31dc(476, ppc_logical, ppc_nand);
|
OP31dc(476, ppc_logical, ppc_nand);
|
||||||
OP31dc(536, ppc_shift, SHFT0);
|
OP31dc(536, ppc_shift, RIGHT0); // srw
|
||||||
OP31d(792, ppc_sraw);
|
OP31d(792, ppc_sraw);
|
||||||
OP31d(824, ppc_srawi);
|
OP31d(824, ppc_srawi);
|
||||||
OP31dc(922, ppc_exts, int16_t);
|
OP31dc(922, ppc_exts, int16_t);
|
||||||
|
@ -595,15 +595,15 @@ template void dppc_interpreter::ppc_divwu<RC1, OV1>();
|
|||||||
|
|
||||||
// Value shifting
|
// Value shifting
|
||||||
|
|
||||||
template <field_shift shift, field_rc rec>
|
template <field_direction isleft, field_rc rec>
|
||||||
void dppc_interpreter::ppc_shift() {
|
void dppc_interpreter::ppc_shift() {
|
||||||
ppc_grab_regssab(ppc_cur_instruction);
|
ppc_grab_regssab(ppc_cur_instruction);
|
||||||
if (ppc_result_b & 0x20) {
|
if (ppc_result_b & 0x20) {
|
||||||
ppc_result_a = 0;
|
ppc_result_a = 0;
|
||||||
}
|
}
|
||||||
else {
|
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));
|
: (ppc_result_d >> (ppc_result_b & 0x1F));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rec)
|
if (rec)
|
||||||
@ -612,10 +612,10 @@ void dppc_interpreter::ppc_shift() {
|
|||||||
ppc_store_iresult_reg(reg_a, ppc_result_a);
|
ppc_store_iresult_reg(reg_a, ppc_result_a);
|
||||||
}
|
}
|
||||||
|
|
||||||
template void dppc_interpreter::ppc_shift<SHFT0, RC0>();
|
template void dppc_interpreter::ppc_shift<RIGHT0, RC0>();
|
||||||
template void dppc_interpreter::ppc_shift<SHFT0, RC1>();
|
template void dppc_interpreter::ppc_shift<RIGHT0, RC1>();
|
||||||
template void dppc_interpreter::ppc_shift<SHFT1, RC0>();
|
template void dppc_interpreter::ppc_shift<LEFT1, RC0>();
|
||||||
template void dppc_interpreter::ppc_shift<SHFT1, RC1>();
|
template void dppc_interpreter::ppc_shift<LEFT1, RC1>();
|
||||||
|
|
||||||
template <field_rc rec>
|
template <field_rc rec>
|
||||||
void dppc_interpreter::ppc_sraw() {
|
void dppc_interpreter::ppc_sraw() {
|
||||||
|
Loading…
Reference in New Issue
Block a user