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

           Summary: ARM: Rd and Rm registers should be different in MUL on
                    ARMv5
           Product: libraries
           Version: trunk
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Backend: ARM
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]
                CC: [email protected]


The ARMv6 CPU allows the Rd and Rm registers to be the same in the MUL
instruction, but this isn't allowed on, for example the ARMv5 CPU.  As a
result, GAS will issue complaints about LLVM-generated ARM code.  Here's a
sample:

sample.s: Assembler messages:
sample.s:59: Rd and Rm should be different in mul
sample.s:63: Rd and Rm should be different in mul
sample.s:104: Rd and Rm should be different in mul
sample.s:108: Rd and Rm should be different in mul

These messages came from assembling the following LLVM-generated code:

        .globl  rand_r
        .align  2
rand_r:
        ldr r3, [r0]
        ldr r2, .LCPI3_0
        cmp r3, #0
        moveq r3, r2
        ldr r2, .LCPI3_1
        umull r1, r2, r3, r2
        sub r1, r3, r2
        add r2, r2, r1, lsr #1
        mov r2, r2, lsr #16
        mov r1, #197, 30 @ 788
        orr r1, r1, #2, 22 @ 2048
        mul r1, r2, r1
        ldr r12, .LCPI3_2
        mul r2, r2, r12          ; <------------ Here is line 59.
        sub r3, r3, r2
        mov r2, #167
        orr r2, r2, #65, 24 @ 16640
        mul r3, r3, r2            ; <------------ Here is line 63.
        sub r3, r3, r1
        sub r2, r3, #6, 2 @ -2147483647
        cmp r3, #0
        movge r2, r3
        str r2, [r0]
        bic r0, r2, #2, 2 @ -2147483648
        bx lr
.LBB3_1:
        .LCPI3_0:
        .long   123459876

        .LCPI3_1:
        .long   110892733

        .LCPI3_2:
        .long   127773

Yes, this really is the rand_r() function from the standard C library.

This code is fine for ARMv6, but it doesn't work for the ARMv5 CPU I'm playing
with, so here is the bug report.


-- 
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.
_______________________________________________
LLVMbugs mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs

Reply via email to