[LLVMbugs] [Bug 16387] New: clang doesn't produce ARM EABI-compliant modulo runtime function

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Thu Jun 20 05:53:35 PDT 2013


            Bug ID: 16387
           Summary: clang doesn't produce ARM EABI-compliant modulo
                    runtime function
           Product: libraries
           Version: trunk
          Hardware: PC
                OS: All
            Status: NEW
          Severity: normal
          Priority: P
         Component: Backend: ARM
          Assignee: unassignedbugs at nondot.org
          Reporter: kristof.beyls at arm.com
                CC: llvmbugs at cs.uiuc.edu
    Classification: Unclassified

For the following program:
$ cat divmod.c
int f(int a, int b) {
    int d = a/b;
    int m = a%b;
    int c = b%a;
    return d+m+c;

compiled with the following command line:
clang -O3 -target armv7a-none-none-eabi -mcpu=cortex-a8 divmod.c -S

clang produces code that is not EABI compliant:
        push    {r4, r5, r6, r11, lr}
        add     r11, sp, #12
        sub     sp, sp, #4
        mov     r5, r1
        mov     r4, r0
        bl      __aeabi_idiv
        mov     r6, r0
        mov     r0, r4
        mov     r1, r5
        bl      __modsi3
        add     r6, r0, r6
        mov     r0, r5
        mov     r1, r4
        bl      __modsi3
        add     r0, r6, r0
        sub     sp, r11, #12
        pop     {r4, r5, r6, r11, pc}

The problem is the calls to __modsi3. These are not compliant with the EABI.
Instead, clang should produce calls to __aeabi_idivmod or __aeabi_uidivmod for
modulo operations when producing EABI-compliant code.

You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20130620/b43b8d9e/attachment.html>

More information about the llvm-bugs mailing list