Chromium Code Reviews| Index: src/arm/disasm-arm.cc |
| diff --git a/src/arm/disasm-arm.cc b/src/arm/disasm-arm.cc |
| index 96a7d3ce6b6dfbc1d4c8bdf64e5ee53c9ba709ad..b03207cacbce3df67ecfe155e3259226c03308c1 100644 |
| --- a/src/arm/disasm-arm.cc |
| +++ b/src/arm/disasm-arm.cc |
| @@ -131,6 +131,7 @@ class Decoder { |
| int DecodeType7(Instruction* instr); |
| // For VFP support. |
| void DecodeTypeVFP(Instruction* instr); |
| + void DecodeSpecialCondition(Instruction* instr); |
| void DecodeType6CoprocessorIns(Instruction* instr); |
| void DecodeVMOVBetweenCoreAndSinglePrecisionRegisters(Instruction* instr); |
| @@ -1211,6 +1212,22 @@ void Decoder::DecodeVCMP(Instruction* instr) { |
| } |
| +// Currently supports: |
| +// Dd = vorr(Dn, Dm) |
| +void Decoder::DecodeSpecialCondition(Instruction* instr) { |
| + // See ARM DDI 0406A, A7-12 for how to detect which instruction this is. |
| + if (instr->Bits(11, 8) == 0x1 && |
| + instr->Bit(4) == 0x1 && |
| + instr->Bit(24) == 0x0 && |
| + instr->Opc1Value() == 0x2) { |
|
Erik Corry
2012/08/06 10:44:40
This tests bits 20, 21, 23, 24, but ignores bits 2
Jakob Kummerow
2012/08/06 14:08:43
As discussed, removed vorr completely.
|
| + // vorr |
| + Format(instr, "vorr 'Dd, 'Dn, 'Dm"); |
| + } else { |
| + Unknown(instr); |
| + } |
| +} |
| + |
| + |
| void Decoder::DecodeVCVTBetweenDoubleAndSingle(Instruction* instr) { |
| VERIFY((instr->Bit(4) == 0) && (instr->Opc1Value() == 0x7)); |
| VERIFY((instr->Opc2Value() == 0x7) && (instr->Opc3Value() == 0x3)); |
| @@ -1382,7 +1399,7 @@ int Decoder::InstructionDecode(byte* instr_ptr) { |
| "%08x ", |
| instr->InstructionBits()); |
| if (instr->ConditionField() == kSpecialCondition) { |
| - Unknown(instr); |
| + DecodeSpecialCondition(instr); |
| return Instruction::kInstrSize; |
| } |
| int instruction_bits = *(reinterpret_cast<int*>(instr_ptr)); |