diff options
Diffstat (limited to 'src/armv7')
| -rw-r--r-- | src/armv7/display.rs | 1 | ||||
| -rw-r--r-- | src/armv7/thumb.rs | 7 |
2 files changed, 7 insertions, 1 deletions
diff --git a/src/armv7/display.rs b/src/armv7/display.rs index 5a48362..1398ce6 100644 --- a/src/armv7/display.rs +++ b/src/armv7/display.rs @@ -1330,6 +1330,7 @@ impl StatusRegMask { StatusRegMask::CPSR_SC => "cpsr_sc", StatusRegMask::CPSR_SX => "cpsr_sx", StatusRegMask::CPSR_SXC => "cpsr_sxc", + StatusRegMask::APSR_NZCV => "apsr_nzcv", StatusRegMask::APSR_NZCVQ => "apsr_nzcvq", StatusRegMask::CPSR_FC => "cpsr_fc", StatusRegMask::CPSR_FX => "cpsr_fx", diff --git a/src/armv7/thumb.rs b/src/armv7/thumb.rs index d029221..4340e95 100644 --- a/src/armv7/thumb.rs +++ b/src/armv7/thumb.rs @@ -4418,8 +4418,13 @@ fn decode_table_a6_30(decoder: &InstDecoder, inst: &mut Instruction, instr2: Bit } else { // MRC, MRC2 (A8-493) inst.opcode = Opcode::MRC(coproc, opc1, opc2, is_2); + let dest = if CRd == 0b1111 { + Operand::StatusRegMask(StatusRegMask::APSR_NZCV) + } else { + Operand::Reg(Reg::from_u8(CRd)) + }; inst.operands = [ - Operand::Reg(Reg::from_u8(CRd)), + dest, Operand::CReg(CReg::from_u8(CRn)), Operand::CReg(CReg::from_u8(CRm)), Operand::Nothing, |
