Better error-handling for DisassembleThumb2DPSoReg() where the 3-reg operand

instructions should have Rd (Inst{11-8}) != 0b1111.

Ref: A6.3 32-bit Thumb instruction encoding
     A6.3.11 Data-processing (shifted register)
llvm-svn: 101788
This commit is contained in:
Johnny Chen 2010-04-19 17:16:40 +00:00
parent 47cf5b581a
commit 25df2a75bd
1 changed files with 6 additions and 3 deletions

View File

@ -1340,12 +1340,15 @@ static bool DisassembleThumb2DPSoReg(MCInst &MI, unsigned Opcode, uint32_t insn,
if ((Idx = TID.getOperandConstraint(OpIdx, TOI::TIED_TO)) != -1) {
// Process tied_to operand constraint.
MI.addOperand(MI.getOperand(Idx));
} else {
assert(!NoDstReg && "Internal error");
++OpIdx;
} else if (!NoDstReg) {
MI.addOperand(MCOperand::CreateReg(getRegisterEnum(B, ARM::GPRRegClassID,
decodeRn(insn))));
++OpIdx;
} else {
DEBUG(errs() << "Thumb encoding error: d==15 for three-reg operands.\n");
return false;
}
++OpIdx;
}
MI.addOperand(MCOperand::CreateReg(getRegisterEnum(B, ARM::GPRRegClassID,