diff options
Diffstat (limited to 'src/core/arm/dyncom')
| -rw-r--r-- | src/core/arm/dyncom/arm_dyncom_interpreter.cpp | 39 | 
1 files changed, 19 insertions, 20 deletions
| diff --git a/src/core/arm/dyncom/arm_dyncom_interpreter.cpp b/src/core/arm/dyncom/arm_dyncom_interpreter.cpp index c3dba8882..2f72f5077 100644 --- a/src/core/arm/dyncom/arm_dyncom_interpreter.cpp +++ b/src/core/arm/dyncom/arm_dyncom_interpreter.cpp @@ -4362,6 +4362,8 @@ unsigned InterpreterMainLoop(ARMul_State* state) {                          cpu->Reg[14] = Memory::Read32(addr);                      else                          cpu->Reg_usr[1] = Memory::Read32(addr); + +                    addr += 4;                  }              } else if (!BIT(inst, 22)) {                  for(int i = 0; i < 16; i++ ){ @@ -5974,54 +5976,51 @@ 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++) { -                    if(BIT(inst_cream->inst, i)) { +                for (int i = 0; i < 13; i++) { +                    if (BIT(inst_cream->inst, i)) {                          Memory::Write32(addr, cpu->Reg[i]);                          addr += 4;                      }                  }                  if (BIT(inst_cream->inst, 13)) { -                    if (cpu->Mode == USER32MODE) { -                        Memory::Write32(addr, cpu->Reg[i]); -                        addr += 4; -                    } else { +                    if (cpu->Mode == USER32MODE) +                        Memory::Write32(addr, cpu->Reg[13]); +                    else                          Memory::Write32(addr, cpu->Reg_usr[0]); -                        addr += 4; -                    } + +                    addr += 4;                  }                  if (BIT(inst_cream->inst, 14)) { -                    if (cpu->Mode == USER32MODE) { -                        Memory::Write32(addr, cpu->Reg[i]); -                        addr += 4; -                    } else { +                    if (cpu->Mode == USER32MODE) +                        Memory::Write32(addr, cpu->Reg[14]); +                    else                          Memory::Write32(addr, cpu->Reg_usr[1]); -                        addr += 4; -                    } + +                    addr += 4;                  }                  if (BIT(inst_cream->inst, 15)) {                      Memory::Write32(addr, cpu->Reg_usr[1] + 8);                  }              } else { -                for( i = 0; i < 15; i++ ) { -                    if(BIT(inst_cream->inst, i)) { -                        if(i == Rn) +                for (int i = 0; i < 15; i++) { +                    if (BIT(inst_cream->inst, i)) { +                        if (i == Rn)                              Memory::Write32(addr, old_RN);                          else                              Memory::Write32(addr, cpu->Reg[i]); +                          addr += 4;                      }                  }                  // Check PC reg -                if(BIT(inst_cream->inst, i)) { +                if (BIT(inst_cream->inst, 15))                      Memory::Write32(addr, cpu->Reg_usr[1] + 8); -                }              }          }          cpu->Reg[15] += GET_INST_SIZE(cpu); | 
