mirror of
https://github.com/dingusdev/dingusppc.git
synced 2025-01-21 07:31:34 +00:00
More fixes
This commit is contained in:
parent
cb39be991f
commit
de61c26484
@ -44,7 +44,7 @@ POWEROPCODEOVREC (abs,
|
||||
} else {
|
||||
ppc_result_d = (int32_t(ppc_result_a) < 0) ? -ppc_result_a : ppc_result_a;
|
||||
if (ov)
|
||||
ppc_unset_xer(XER::SO | XER::OV);
|
||||
ppc_unset_xer(XER::OV);
|
||||
}
|
||||
|
||||
if (rec)
|
||||
@ -114,7 +114,7 @@ POWEROPCODEOVREC (div,
|
||||
if (((quotient >> 31) + 1) & ~1) {
|
||||
ppc_set_xer(XER::SO | XER::OV);
|
||||
} else {
|
||||
ppc_unset_xer(XER::SO | XER::OV);
|
||||
ppc_unset_xer(XER::OV);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -150,7 +150,7 @@ POWEROPCODEOVREC (divs,
|
||||
ppc_result_d = int32_t(ppc_result_a) / int32_t(ppc_result_b);
|
||||
remainder = (int32_t(ppc_result_a) % int32_t(ppc_result_b));
|
||||
if (ov)
|
||||
ppc_unset_xer(XER::SO | XER::OV);
|
||||
ppc_unset_xer(XER::OV);
|
||||
}
|
||||
if (rec)
|
||||
ppc_changecrf0(remainder);
|
||||
@ -173,7 +173,7 @@ POWEROPCODEOVREC (doz,
|
||||
if (int32_t(ppc_result_d) < 0) {
|
||||
ppc_set_xer(XER::SO | XER::OV);
|
||||
} else {
|
||||
ppc_unset_xer(XER::SO | XER::OV);
|
||||
ppc_unset_xer(XER::OV);
|
||||
}
|
||||
}
|
||||
if (rec)
|
||||
@ -301,7 +301,7 @@ POWEROPCODEOVREC (mul,
|
||||
if (uint64_t(product >> 31) + 1 & ~1) {
|
||||
ppc_set_xer(XER::SO | XER::OV);
|
||||
} else {
|
||||
ppc_unset_xer(XER::SO | XER::OV);
|
||||
ppc_unset_xer(XER::OV);
|
||||
}
|
||||
}
|
||||
if (rec)
|
||||
@ -319,7 +319,7 @@ POWEROPCODEOVREC (nabs,
|
||||
uint32_t ppc_result_d = (int32_t(ppc_result_a) < 0) ? ppc_result_a : -ppc_result_a;
|
||||
|
||||
if (ov)
|
||||
ppc_unset_xer(XER::SO | XER::OV);
|
||||
ppc_unset_xer(XER::OV);
|
||||
if (rec)
|
||||
ppc_changecrf0(ppc_result_d);
|
||||
|
||||
|
@ -633,110 +633,94 @@ template <field_rc rec> void power_srq(uint32_t instr);
|
||||
|
||||
// G5+ instructions
|
||||
|
||||
#undef OPCODE
|
||||
#define OPCODE(op, ...) \
|
||||
void dppc_interpreter::ppc_##op(uint32_t instr) { \
|
||||
##__VA_ARGS__ \
|
||||
}
|
||||
|
||||
#undef POWEROPCODE
|
||||
#define POWEROPCODE(op, ...) \
|
||||
void dppc_interpreter::power_##op(uint32_t instr) { \
|
||||
##__VA_ARGS__ \
|
||||
}
|
||||
|
||||
#undef OPCODESHIFT
|
||||
#define OPCODESHIFT(op, ...) \
|
||||
template <field_shift shift> \
|
||||
void dppc_interpreter::ppc_##op(uint32_t instr) { \
|
||||
__VA_ARGS__ \
|
||||
}
|
||||
|
||||
#undef OPCODESHIFTREC
|
||||
#define OPCODESHIFTREC(op, ...) \
|
||||
template <field_direction isleft, field_rc rec > \
|
||||
void dppc_interpreter::ppc_##op(uint32_t instr) { \
|
||||
__VA_ARGS__ \
|
||||
}
|
||||
|
||||
#undef OPCODECARRY
|
||||
#define OPCODECARRY(op, ...) \
|
||||
template <field_carry carry, field_rc rec, field_ov ov> \
|
||||
void dppc_interpreter::ppc_##op(uint32_t instr) { \
|
||||
__VA_ARGS__ \
|
||||
}
|
||||
|
||||
#undef OPCODEOVREC
|
||||
#define OPCODEOVREC(op, ...) \
|
||||
template <field_rc rec, field_ov ov> \
|
||||
void dppc_interpreter::ppc_##op(uint32_t instr) { \
|
||||
__VA_ARGS__ \
|
||||
}
|
||||
|
||||
#undef OPCODEEXTSIGN
|
||||
#define OPCODEEXTSIGN(op, ...)\
|
||||
template <class T, field_rc rec>\
|
||||
void dppc_interpreter::ppc_##op(uint32_t instr) {\
|
||||
__VA_ARGS__ \
|
||||
}
|
||||
|
||||
#undef POWEROPCODEOVREC
|
||||
#define POWEROPCODEOVREC(op, ...) \
|
||||
template <field_rc rec, field_ov ov> \
|
||||
void dppc_interpreter::power_##op(uint32_t instr) { \
|
||||
__VA_ARGS__ \
|
||||
}
|
||||
|
||||
#undef OPCODEREC
|
||||
#define OPCODEREC(op, ...) \
|
||||
template <field_rc rec> \
|
||||
void dppc_interpreter::ppc_##op(uint32_t instr) { \
|
||||
__VA_ARGS__ \
|
||||
}
|
||||
|
||||
#undef POWEROPCODEREC
|
||||
#define POWEROPCODEREC(op, ...) \
|
||||
template <field_rc rec> \
|
||||
void dppc_interpreter::power_##op(uint32_t instr) { \
|
||||
__VA_ARGS__ \
|
||||
}
|
||||
|
||||
#undef OPCODELOGIC
|
||||
#define OPCODELOGIC(op, ...) \
|
||||
template <logical_fun logical_op, field_rc rec> \
|
||||
void dppc_interpreter::ppc_##op(uint32_t instr) { \
|
||||
__VA_ARGS__ \
|
||||
}
|
||||
|
||||
#undef OPCODELKAA
|
||||
#define OPCODELKAA(op, ...) \
|
||||
template <field_lk l, field_aa a> \
|
||||
void dppc_interpreter::ppc_##op(uint32_t instr) { \
|
||||
__VA_ARGS__ \
|
||||
}
|
||||
|
||||
#undef OPCODEMEM
|
||||
#define OPCODEMEM(op, ...) \
|
||||
template <class T> \
|
||||
void dppc_interpreter::ppc_##op(uint32_t instr) { \
|
||||
__VA_ARGS__ \
|
||||
}
|
||||
|
||||
#undef OPCODE601REC
|
||||
#define OPCODE601REC(op, ...) \
|
||||
template <field_601 for601, field_rc rec> \
|
||||
void dppc_interpreter::ppc_##op(uint32_t instr) { \
|
||||
__VA_ARGS__ \
|
||||
}
|
||||
|
||||
#undef OPCODE601L
|
||||
#define OPCODE601L(op, ...) \
|
||||
template <field_lk l, field_601 for601, field_rc rec> \
|
||||
void dppc_interpreter::ppc_##op(uint32_t instr) { \
|
||||
__VA_ARGS__ \
|
||||
}
|
||||
|
||||
#undef OPCODEL
|
||||
#define OPCODEL(op, ...) \
|
||||
template <field_lk l, field_601 for601, field_rc rec> \
|
||||
void dppc_interpreter::ppc_##op(uint32_t instr) { \
|
||||
|
Loading…
x
Reference in New Issue
Block a user