[llvm-commits] [llvm] r138837 - in /llvm/trunk: lib/Target/ARM/MCTargetDesc/ARMMCCodeEmitter.cpp test/MC/ARM/basic-thumb2-instructions.s

Owen Anderson resistor at mac.com
Tue Aug 30 15:15:18 PDT 2011


Author: resistor
Date: Tue Aug 30 17:15:17 2011
New Revision: 138837

URL: http://llvm.org/viewvc/llvm-project?rev=138837&view=rev
Log:
Fix encoding of CBZ/CBNZ Thumb2 instructions with immediate offsets rather than labels.

Modified:
    llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMMCCodeEmitter.cpp
    llvm/trunk/test/MC/ARM/basic-thumb2-instructions.s

Modified: llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMMCCodeEmitter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMMCCodeEmitter.cpp?rev=138837&r1=138836&r2=138837&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMMCCodeEmitter.cpp (original)
+++ llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMMCCodeEmitter.cpp Tue Aug 30 17:15:17 2011
@@ -501,7 +501,10 @@
 uint32_t ARMMCCodeEmitter::
 getThumbCBTargetOpValue(const MCInst &MI, unsigned OpIdx,
                         SmallVectorImpl<MCFixup> &Fixups) const {
-  return ::getBranchTargetOpValue(MI, OpIdx, ARM::fixup_arm_thumb_cb, Fixups);
+  const MCOperand MO = MI.getOperand(OpIdx);
+  if (MO.isExpr())
+    return ::getBranchTargetOpValue(MI, OpIdx, ARM::fixup_arm_thumb_cb, Fixups);
+  return (MO.getImm() >> 1);
 }
 
 /// Return true if this branch has a non-always predication

Modified: llvm/trunk/test/MC/ARM/basic-thumb2-instructions.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/basic-thumb2-instructions.s?rev=138837&r1=138836&r2=138837&view=diff
==============================================================================
--- llvm/trunk/test/MC/ARM/basic-thumb2-instructions.s (original)
+++ llvm/trunk/test/MC/ARM/basic-thumb2-instructions.s Tue Aug 30 17:15:17 2011
@@ -38,6 +38,15 @@
 @ CHECK: adc	r4, r2, #1664           @ encoding: [0x42,0xf5,0xd0,0x64]
 
 @------------------------------------------------------------------------------
+@ CBZ/CBNZ
+ at ------------------------------------------------------------------------------
+        cbnz    r7, #6
+        cbnz    r7, #12
+
+@ CHECK: cbnz    r7, #6                  @ encoding: [0x1f,0xb9]
+@ CHECK: cbnz    r7, #12                 @ encoding: [0x37,0xb9]
+
+ at ------------------------------------------------------------------------------
 @ IT
 @------------------------------------------------------------------------------
 @ Test encodings of a few full IT blocks, not just the IT instruction





More information about the llvm-commits mailing list