Correct ARM NOP encoding
authorDavid Sehr <sehr@google.com>
Wed, 5 Dec 2012 21:01:27 +0000 (21:01 +0000)
committerDavid Sehr <sehr@google.com>
Wed, 5 Dec 2012 21:01:27 +0000 (21:01 +0000)
The encoding of NOP in ARMAsmBackend.cpp is missing a trailing zero, which
causes the emission of a coprocessor instruction rather than "mov r0, r0"
as indicated in the comment.  The test also checks for the wrong encoding.

http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20121203/157919.html

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

lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
test/MC/MachO/ARM/nop-armv4-padding.s

index 3fe23bb54ef79963e64bbe277762f89eb0f5f50f..6aab0a0bc5ae80c770119c266f5489add08dc96a 100644 (file)
@@ -220,7 +220,7 @@ void ARMAsmBackend::relaxInstruction(const MCInst &Inst, MCInst &Res) const {
 bool ARMAsmBackend::writeNopData(uint64_t Count, MCObjectWriter *OW) const {
   const uint16_t Thumb1_16bitNopEncoding = 0x46c0; // using MOV r8,r8
   const uint16_t Thumb2_16bitNopEncoding = 0xbf00; // NOP
-  const uint32_t ARMv4_NopEncoding = 0xe1a0000; // using MOV r0,r0
+  const uint32_t ARMv4_NopEncoding = 0xe1a00000; // using MOV r0,r0
   const uint32_t ARMv6T2_NopEncoding = 0xe320f000; // NOP
   if (isThumb()) {
     const uint16_t nopEncoding = hasNOP() ? Thumb2_16bitNopEncoding
index dd0f77c266dc8345a51f197c24f895352c71cfdd..8e03d17a70c9a23bb05b3ee4ce6d331e1e8e3718 100644 (file)
@@ -7,4 +7,4 @@ x:
       .align 4
       add r0, r1, r2
 
-@ CHECK: ('_section_data', '020081e0 00001a0e 00001a0e 00001a0e 020081e0') 
+@ CHECK: ('_section_data', '020081e0 0000a0e1 0000a0e1 0000a0e1 020081e0')