summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/arm/dyncom/arm_dyncom_interpreter.cpp21
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();