mirror of
https://github.com/dingusdev/dingusppc.git
synced 2024-06-08 00:29:42 +00:00
poweropcodes: Fix sreq.
Including bits of rot_sh in the rA and MQ calculations is nonsensical since it is a rotation count and not a source of bits to be extracted or rotated. The mask is not complicated, so we don't need to use power_rot_mask.
This commit is contained in:
parent
24bce16c4d
commit
bce816139b
|
@ -588,10 +588,10 @@ template <field_rc rec>
|
||||||
void dppc_interpreter::power_sreq() {
|
void dppc_interpreter::power_sreq() {
|
||||||
ppc_grab_regssab(ppc_cur_instruction);
|
ppc_grab_regssab(ppc_cur_instruction);
|
||||||
unsigned rot_sh = ppc_result_b & 0x1F;
|
unsigned rot_sh = ppc_result_b & 0x1F;
|
||||||
unsigned mask = power_rot_mask(rot_sh, 31);
|
uint32_t mask = -1U >> rot_sh;
|
||||||
|
|
||||||
ppc_result_a = ((rot_sh & mask) | (ppc_state.spr[SPR::MQ] & ~mask));
|
ppc_result_a = (ppc_result_d >> rot_sh) | (ppc_state.spr[SPR::MQ] & ~mask);
|
||||||
ppc_state.spr[SPR::MQ] = rot_sh;
|
ppc_state.spr[SPR::MQ] = (ppc_result_d >> rot_sh) | (ppc_result_d << (32 - rot_sh));
|
||||||
|
|
||||||
if (rec)
|
if (rec)
|
||||||
ppc_changecrf0(ppc_result_a);
|
ppc_changecrf0(ppc_result_a);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user