diff --git a/src/arm/isa-arm.c b/src/arm/isa-arm.c index da8dd2cf2..1d5aa124c 100644 --- a/src/arm/isa-arm.c +++ b/src/arm/isa-arm.c @@ -604,8 +604,14 @@ DEFINE_INSTRUCTION_ARM(MSRR, mask &= PSR_USER_MASK | PSR_PRIV_MASK | PSR_STATE_MASK; cpu->spsr.packed = (cpu->spsr.packed & ~mask) | (operand & mask);) -DEFINE_INSTRUCTION_ARM(MRS, ARM_STUB) -DEFINE_INSTRUCTION_ARM(MRSR, ARM_STUB) +DEFINE_INSTRUCTION_ARM(MRS, \ + int rd = (opcode >> 12) & 0xF; \ + cpu->gprs[rd] = cpu->cpsr.packed;) + +DEFINE_INSTRUCTION_ARM(MRSR, \ + int rd = (opcode >> 12) & 0xF; \ + cpu->gprs[rd] = cpu->spsr.packed;) + DEFINE_INSTRUCTION_ARM(MSRI, ARM_STUB) DEFINE_INSTRUCTION_ARM(SWI, ARM_STUB)