[LLVMbugs] [Bug 13240] New: ARM PLD/PLDW (register) with -ve Rm and a right-shift by #32 reencodes as +ve Rm

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Fri Jun 29 09:59:44 PDT 2012


http://llvm.org/bugs/show_bug.cgi?id=13240

             Bug #: 13240
           Summary: ARM PLD/PLDW (register) with -ve Rm and a right-shift
                    by #32 reencodes as +ve Rm
           Product: libraries
           Version: trunk
          Platform: PC
        OS/Version: Windows NT
            Status: NEW
          Severity: normal
          Priority: P
         Component: Backend: ARM
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: apazos at codeaurora.org
                CC: llvmbugs at cs.uiuc.edu
    Classification: Unclassified


Created attachment 8794
  --> http://llvm.org/bugs/attachment.cgi?id=8794
Correct handling imm5 value in getLdStSORegOpValue

In ARM mode PLD/PLDW (register) with -ve Rm and a right-shift by #32 is
re-encoded with Rm +ve.

Reproduce with:

echo 'PLD [r0,-r0,LSR #32]' | .../llvm-mc -triple armv7 -show-encoding
-show-inst
        .section        __TEXT,__text,regular,pure_instructions
        pld     [r0, -r0, lsr #32]      @ encoding: [0x20,0xf0,0xd0,0xf7]
                                        @ <MCInst #287 PLDrs
                                        @  <MCOperand Reg:60>
                                        @  <MCOperand Reg:60>
                                        @  <MCOperand Imm:28704>>

Note the same error happens with memory instructions like LDR.

This happens because getLdStSORegOpValue function is not enforcing imm5
(function defined in lib/Target/ARM/MCTargetDesc/ARMMCCodeEmitter.cpp). The
correct code should be:

-  Binary |= ShImm << 7;
+  Binary |= (ShImm&0x1f) << 7;


Fixed the function and this is the new MC output:

echo pld [r0, -r0, lsr #32] | llvm-mc -show-inst -show-encoding
        .section        __TEXT,__text,regular,pure_instructions
        pld     [r0, -r0, lsr #32]      @ encoding: [0x20,0xf0,0x50,0xf7]
                                        @ <MCInst #287 PLDrs
                                        @  <MCOperand Reg:60>
                                        @  <MCOperand Reg:60>
                                        @  <MCOperand Imm:28704>>

echo 0x20 0xf0 0x50 0xf7 |llvm-mc -show-inst -show-encoding -disassemble
        .section        __TEXT,__text,regular,pure_instructions
        pld     [r0, -r0]               @ encoding: [0x20,0xf0,0x50,0xf7]
                                        @ <MCInst #287 PLDrs
                                        @  <MCOperand Reg:60>
                                        @  <MCOperand Reg:60>
                                        @  <MCOperand Imm:28672>>

-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.



More information about the llvm-bugs mailing list