Index: src/arm/disasm-arm.cc |
=================================================================== |
--- src/arm/disasm-arm.cc (revision 5816) |
+++ src/arm/disasm-arm.cc (working copy) |
@@ -1046,6 +1046,7 @@ |
// Dd = vdiv(Dn, Dm) |
// vcmp(Dd, Dm) |
// vmrs |
+// vmsr |
// Dd = vsqrt(Dm) |
void Decoder::DecodeTypeVFP(Instr* instr) { |
ASSERT((instr->TypeField() == 7) && (instr->Bit(24) == 0x0) ); |
@@ -1111,16 +1112,22 @@ |
if ((instr->VCField() == 0x0) && |
(instr->VAField() == 0x0)) { |
DecodeVMOVBetweenCoreAndSinglePrecisionRegisters(instr); |
- } else if ((instr->VLField() == 0x1) && |
- (instr->VCField() == 0x0) && |
+ } else if ((instr->VCField() == 0x0) && |
(instr->VAField() == 0x7) && |
(instr->Bits(19, 16) == 0x1)) { |
- if (instr->Bits(15, 12) == 0xF) |
- Format(instr, "vmrs'cond APSR, FPSCR"); |
- else |
- Unknown(instr); // Not used by V8. |
- } else { |
- Unknown(instr); // Not used by V8. |
+ if (instr->VLField() == 0) { |
+ if (instr->Bits(15, 12) == 0xF) { |
+ Format(instr, "vmsr'cond FPSCR, APSR"); |
+ } else { |
+ Format(instr, "vmsr'cond FPSCR, 'rt"); |
+ } |
+ } else { |
+ if (instr->Bits(15, 12) == 0xF) { |
+ Format(instr, "vmrs'cond APSR, FPSCR"); |
+ } else { |
+ Format(instr, "vmrs'cond 'rt, FPSCR"); |
+ } |
+ } |
} |
} |
} |