Merge pull request #467 from lioncash/msr

dyncom: Fix conditional execution of MSR
This commit is contained in:
bunnei 2015-01-11 18:51:03 -05:00
commit 1da04a72a2
1 changed files with 31 additions and 29 deletions

View File

@ -4964,6 +4964,7 @@ unsigned InterpreterMainLoop(ARMul_State* state) {
} }
MSR_INST: MSR_INST:
{ {
if (inst_base->cond == 0xE || CondPassed(cpu, inst_base->cond)) {
msr_inst *inst_cream = (msr_inst *)inst_base->component; msr_inst *inst_cream = (msr_inst *)inst_base->component;
const uint32_t UnallocMask = 0x06f0fc00, UserMask = 0xf80f0200, PrivMask = 0x000001df, StateMask = 0x01000020; const uint32_t UnallocMask = 0x06f0fc00, UserMask = 0xf80f0200, PrivMask = 0x000001df, StateMask = 0x01000020;
unsigned int inst = inst_cream->inst; unsigned int inst = inst_cream->inst;
@ -4999,6 +5000,7 @@ unsigned InterpreterMainLoop(ARMul_State* state) {
cpu->Spsr_copy = (cpu->Spsr_copy & ~mask) | (operand & mask); cpu->Spsr_copy = (cpu->Spsr_copy & ~mask) | (operand & mask);
} }
} }
}
cpu->Reg[15] += GET_INST_SIZE(cpu); cpu->Reg[15] += GET_INST_SIZE(cpu);
INC_PC(sizeof(msr_inst)); INC_PC(sizeof(msr_inst));
FETCH_INST; FETCH_INST;