Fix a bug where for t2MOVCCi disassembly, the TIED_TO register operand was not proper...
authorJohnny Chen <johnny.chen@apple.com>
Wed, 13 Apr 2011 17:51:02 +0000 (17:51 +0000)
committerJohnny Chen <johnny.chen@apple.com>
Wed, 13 Apr 2011 17:51:02 +0000 (17:51 +0000)
rdar://problem/9276427

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129456 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/Disassembler/ThumbDisassemblerCore.h
test/MC/Disassembler/ARM/thumb-tests.txt

index 42d7a73bf5f819cf42f76c1476ead81da69c36d4..f80c92a683c608d6d308e92f078fe5ae653ece3e 100644 (file)
@@ -1470,7 +1470,8 @@ static bool DisassembleThumb2DPSoReg(MCInst &MI, unsigned Opcode, uint32_t insn,
 static bool DisassembleThumb2DPModImm(MCInst &MI, unsigned Opcode,
     uint32_t insn, unsigned short NumOps, unsigned &NumOpsAdded, BO B) {
 
-  const TargetOperandInfo *OpInfo = ARMInsts[Opcode].OpInfo;
+  const TargetInstrDesc &TID = ARMInsts[Opcode];
+  const TargetOperandInfo *OpInfo = TID.OpInfo;
   unsigned &OpIdx = NumOpsAdded;
 
   OpIdx = 0;
@@ -1497,8 +1498,15 @@ static bool DisassembleThumb2DPModImm(MCInst &MI, unsigned Opcode,
       DEBUG(errs()<<"Thumb2 encoding error: d==15 for DPModImm 2-reg instr.\n");
       return false;
     }
-    MI.addOperand(MCOperand::CreateReg(getRegisterEnum(B, RnRegClassID,
-                                                       decodeRn(insn))));
+    int Idx;
+    if ((Idx = TID.getOperandConstraint(OpIdx, TOI::TIED_TO)) != -1) {
+      // The reg operand is tied to the first reg operand.
+      MI.addOperand(MI.getOperand(Idx));
+    } else {
+      // Add second reg operand.
+      MI.addOperand(MCOperand::CreateReg(getRegisterEnum(B, RnRegClassID,
+                                                         decodeRn(insn))));
+    }
     ++OpIdx;
   }
 
index ce447b61c7b155013fc2f9aa86dd8facb1848f37..4151e0c40b9ad61548339a6bb888cd8d801f7222 100644 (file)
 
 # CHECK:       rfedb   lr
 0x1e 0xe8 0x00 0xc0
+
+# CHECK:       mov.w   r3, #4294967295
+0x4f 0xf0 0xff 0x33