diff options
| -rw-r--r-- | src/core/arm/dyncom/arm_dyncom_interpreter.cpp | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/src/core/arm/dyncom/arm_dyncom_interpreter.cpp b/src/core/arm/dyncom/arm_dyncom_interpreter.cpp index 459877eae..87b2b715b 100644 --- a/src/core/arm/dyncom/arm_dyncom_interpreter.cpp +++ b/src/core/arm/dyncom/arm_dyncom_interpreter.cpp | |||
| @@ -4696,18 +4696,15 @@ unsigned InterpreterMainLoop(ARMul_State* cpu) { | |||
| 4696 | if (inst_base->cond == ConditionCode::AL || CondPassed(cpu, inst_base->cond)) { | 4696 | if (inst_base->cond == ConditionCode::AL || CondPassed(cpu, inst_base->cond)) { |
| 4697 | mrc_inst* inst_cream = (mrc_inst*)inst_base->component; | 4697 | mrc_inst* inst_cream = (mrc_inst*)inst_base->component; |
| 4698 | 4698 | ||
| 4699 | unsigned int inst = inst_cream->inst; | 4699 | if (inst_cream->cp_num == 15) { |
| 4700 | if (inst_cream->Rd == 15) { | 4700 | const uint32_t value = cpu->ReadCP15Register(CRn, OPCODE_1, CRm, OPCODE_2); |
| 4701 | DEBUG_MSG; | 4701 | |
| 4702 | } | 4702 | if (inst_cream->Rd == 15) { |
| 4703 | if (inst_cream->inst == 0xeef04a10) { | 4703 | cpu->Cpsr = (cpu->Cpsr & ~0xF0000000) | (value & 0xF0000000); |
| 4704 | // Undefined instruction fmrx | 4704 | LOAD_NZCVT; |
| 4705 | RD = 0x20000000; | 4705 | } else { |
| 4706 | CITRA_IGNORE_EXIT(-1); | 4706 | RD = value; |
| 4707 | goto END; | 4707 | } |
| 4708 | } else { | ||
| 4709 | if (inst_cream->cp_num == 15) | ||
| 4710 | RD = cpu->ReadCP15Register(CRn, OPCODE_1, CRm, OPCODE_2); | ||
| 4711 | } | 4708 | } |
| 4712 | } | 4709 | } |
| 4713 | cpu->Reg[15] += cpu->GetInstructionSize(); | 4710 | cpu->Reg[15] += cpu->GetInstructionSize(); |