mirror of
https://github.com/yuzu-emu/yuzu-android.git
synced 2025-06-10 06:49:41 -05:00
dyncom: Fix an indexing bug in STM
Previously it would write the contents of register 13 for the case where the link register (r14) is supposed to be written.
This commit is contained in:
@ -5976,13 +5976,12 @@ unsigned InterpreterMainLoop(ARMul_State* state) {
|
||||
ldst_inst* inst_cream = (ldst_inst*)inst_base->component;
|
||||
unsigned int inst = inst_cream->inst;
|
||||
|
||||
int i;
|
||||
unsigned int Rn = BITS(inst, 16, 19);
|
||||
unsigned int old_RN = cpu->Reg[Rn];
|
||||
|
||||
inst_cream->get_addr(cpu, inst_cream->inst, addr, 0);
|
||||
if (BIT(inst_cream->inst, 22) == 1) {
|
||||
for (i = 0; i < 13; i++) {
|
||||
for (int i = 0; i < 13; i++) {
|
||||
if (BIT(inst_cream->inst, i)) {
|
||||
Memory::Write32(addr, cpu->Reg[i]);
|
||||
addr += 4;
|
||||
@ -5990,7 +5989,7 @@ unsigned InterpreterMainLoop(ARMul_State* state) {
|
||||
}
|
||||
if (BIT(inst_cream->inst, 13)) {
|
||||
if (cpu->Mode == USER32MODE)
|
||||
Memory::Write32(addr, cpu->Reg[i]);
|
||||
Memory::Write32(addr, cpu->Reg[13]);
|
||||
else
|
||||
Memory::Write32(addr, cpu->Reg_usr[0]);
|
||||
|
||||
@ -5998,7 +5997,7 @@ unsigned InterpreterMainLoop(ARMul_State* state) {
|
||||
}
|
||||
if (BIT(inst_cream->inst, 14)) {
|
||||
if (cpu->Mode == USER32MODE)
|
||||
Memory::Write32(addr, cpu->Reg[i]);
|
||||
Memory::Write32(addr, cpu->Reg[14]);
|
||||
else
|
||||
Memory::Write32(addr, cpu->Reg_usr[1]);
|
||||
|
||||
@ -6008,7 +6007,7 @@ unsigned InterpreterMainLoop(ARMul_State* state) {
|
||||
Memory::Write32(addr, cpu->Reg_usr[1] + 8);
|
||||
}
|
||||
} else {
|
||||
for (i = 0; i < 15; i++) {
|
||||
for (int i = 0; i < 15; i++) {
|
||||
if (BIT(inst_cream->inst, i)) {
|
||||
if (i == Rn)
|
||||
Memory::Write32(addr, old_RN);
|
||||
|
Reference in New Issue
Block a user