[compiler-rt] r310884 - [builtins][ARM] Select correct code fragments when compiling for Thumb1/Thum2/ARM ISA

Zhao, Weiming via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 14 14:38:24 PDT 2017


Sorry. Will fix it soon.


On 8/14/2017 2:25 PM, Evgenii Stepanov wrote:
> I'm 100% sure of this.
> Your patch changed compiler-rt/trunk/lib/builtins/assembly.h.
>
> On Mon, Aug 14, 2017 at 2:21 PM, Zhao, Weiming <weimingz at codeaurora.org> wrote:
>> It's weird. I see the error is from sanitizer:
>>
>> http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-autoconf/builds/12323/steps/build%20fresh%20clang%20%2B%20debug%20compiler-rt/logs/stdio
>>
>> /mnt/b/sanitizer-buildbot4/sanitizer-x86_64-linux-autoconf/build/llvm/projects/compiler-rt/lib/sanitizer_common/sanitizer_linux_x86_64.S:18:109:
>> error: unexpected token in argument list ; .globl internal_sigreturn ; .type
>> internal_sigreturn, at function ; DECLARE_FUNC_ENCODING
>> internal_sigreturn:/mnt/b/sanitizer-buildbot4/sanitizer-x86_64-linux-autoconf/build/llvm/projects/compiler-rt/lib/sanitizer_common/sanitizer_linux_x86_64.S:18:109:
>> error: unexpected token in argument list ; .globl internal_sigreturn ; .type
>> internal_sigreturn, at function ; DECLARE_FUNC_ENCODING internal_sigreturn:
>>
>> My patch didn't touch sanitizer_linux_x86_64.S. Is it possible that other
>> patch caused it?
>>
>>
>> Weiming
>>
>>
>>
>> On 8/14/2017 2:02 PM, Evgenii Stepanov wrote:
>>> Hi, you broke x86:
>>>
>>> http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-autoconf/builds/12323
>>>
>>> On Mon, Aug 14, 2017 at 1:48 PM, Weiming Zhao via llvm-commits
>>> <llvm-commits at lists.llvm.org> wrote:
>>>> Author: weimingz
>>>> Date: Mon Aug 14 13:48:47 2017
>>>> New Revision: 310884
>>>>
>>>> URL: http://llvm.org/viewvc/llvm-project?rev=310884&view=rev
>>>> Log:
>>>> [builtins][ARM] Select correct code fragments when compiling for
>>>> Thumb1/Thum2/ARM ISA
>>>>
>>>> Summary:
>>>> Value of __ARM_ARCH_ISA_THUMB isn't based on the actual compilation
>>>>    mode (-mthumb, -marm), it reflect's capability of given CPU.
>>>>
>>>> Due to this:
>>>> •use tbumb and thumb2 insteand of __ARM_ARCH_ISA_THUMB
>>>> •use '.thumb' directive consistently in all affected files
>>>> •decorate all thumb functions using DEFINE_COMPILERRT_THUMB_FUNCTION()
>>>>
>>>> (This is based off  Michal's patch https://reviews.llvm.org/D30938)
>>>>
>>>> Reviewers: dim, rengolin, compnerd, strejda
>>>>
>>>> Reviewed By: compnerd
>>>>
>>>> Subscribers: peter.smith, kubamracek, mgorny, javed.absar, kristof.beyls,
>>>> jamesduley, aemerson, llvm-commits
>>>>
>>>> Differential Revision: https://reviews.llvm.org/D31220
>>>>
>>>> Modified:
>>>>       compiler-rt/trunk/lib/builtins/arm/aeabi_cdcmp.S
>>>>       compiler-rt/trunk/lib/builtins/arm/aeabi_cfcmp.S
>>>>       compiler-rt/trunk/lib/builtins/arm/aeabi_idivmod.S
>>>>       compiler-rt/trunk/lib/builtins/arm/aeabi_uidivmod.S
>>>>       compiler-rt/trunk/lib/builtins/arm/bswapdi2.S
>>>>       compiler-rt/trunk/lib/builtins/arm/bswapsi2.S
>>>>       compiler-rt/trunk/lib/builtins/arm/clzdi2.S
>>>>       compiler-rt/trunk/lib/builtins/arm/clzsi2.S
>>>>       compiler-rt/trunk/lib/builtins/arm/comparesf2.S
>>>>       compiler-rt/trunk/lib/builtins/arm/divmodsi4.S
>>>>       compiler-rt/trunk/lib/builtins/arm/divsi3.S
>>>>       compiler-rt/trunk/lib/builtins/arm/modsi3.S
>>>>       compiler-rt/trunk/lib/builtins/arm/udivmodsi4.S
>>>>       compiler-rt/trunk/lib/builtins/arm/udivsi3.S
>>>>       compiler-rt/trunk/lib/builtins/arm/umodsi3.S
>>>>       compiler-rt/trunk/lib/builtins/assembly.h
>>>>
>>>> Modified: compiler-rt/trunk/lib/builtins/arm/aeabi_cdcmp.S
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/aeabi_cdcmp.S?rev=310884&r1=310883&r2=310884&view=diff
>>>>
>>>> ==============================================================================
>>>> --- compiler-rt/trunk/lib/builtins/arm/aeabi_cdcmp.S (original)
>>>> +++ compiler-rt/trunk/lib/builtins/arm/aeabi_cdcmp.S Mon Aug 14 13:48:47
>>>> 2017
>>>> @@ -30,7 +30,7 @@ DEFINE_COMPILERRT_FUNCTION(__aeabi_cdcmp
>>>>            push {r0-r3, lr}
>>>>            bl __aeabi_cdcmpeq_check_nan
>>>>            cmp r0, #1
>>>> -#if __ARM_ARCH_ISA_THUMB == 1
>>>> +#if defined(USE_THUMB_1)
>>>>            beq 1f
>>>>            // NaN has been ruled out, so __aeabi_cdcmple can't trap
>>>>            mov r0, sp
>>>> @@ -78,7 +78,7 @@ DEFINE_COMPILERRT_FUNCTION(__aeabi_cdcmp
>>>>
>>>>            bl __aeabi_dcmplt
>>>>            cmp r0, #1
>>>> -#if __ARM_ARCH_ISA_THUMB == 1
>>>> +#if defined(USE_THUMB_1)
>>>>            bne 1f
>>>>            // Z = 0, C = 0
>>>>            movs r0, #1
>>>>
>>>> Modified: compiler-rt/trunk/lib/builtins/arm/aeabi_cfcmp.S
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/aeabi_cfcmp.S?rev=310884&r1=310883&r2=310884&view=diff
>>>>
>>>> ==============================================================================
>>>> --- compiler-rt/trunk/lib/builtins/arm/aeabi_cfcmp.S (original)
>>>> +++ compiler-rt/trunk/lib/builtins/arm/aeabi_cfcmp.S Mon Aug 14 13:48:47
>>>> 2017
>>>> @@ -30,7 +30,7 @@ DEFINE_COMPILERRT_FUNCTION(__aeabi_cfcmp
>>>>            push {r0-r3, lr}
>>>>            bl __aeabi_cfcmpeq_check_nan
>>>>            cmp r0, #1
>>>> -#if __ARM_ARCH_ISA_THUMB == 1
>>>> +#if defined(USE_THUMB_1)
>>>>            beq 1f
>>>>            // NaN has been ruled out, so __aeabi_cfcmple can't trap
>>>>            mov r0, sp
>>>> @@ -78,7 +78,7 @@ DEFINE_COMPILERRT_FUNCTION(__aeabi_cfcmp
>>>>
>>>>            bl __aeabi_fcmplt
>>>>            cmp r0, #1
>>>> -#if __ARM_ARCH_ISA_THUMB == 1
>>>> +#if defined(USE_THUMB_1)
>>>>            bne 1f
>>>>            // Z = 0, C = 0
>>>>            movs r0, #1
>>>>
>>>> Modified: compiler-rt/trunk/lib/builtins/arm/aeabi_idivmod.S
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/aeabi_idivmod.S?rev=310884&r1=310883&r2=310884&view=diff
>>>>
>>>> ==============================================================================
>>>> --- compiler-rt/trunk/lib/builtins/arm/aeabi_idivmod.S (original)
>>>> +++ compiler-rt/trunk/lib/builtins/arm/aeabi_idivmod.S Mon Aug 14
>>>> 13:48:47 2017
>>>> @@ -20,16 +20,18 @@
>>>>    #endif
>>>>
>>>>            .syntax unified
>>>> +        .text
>>>> +        DEFINE_CODE_STATE
>>>>            .p2align 2
>>>>    DEFINE_COMPILERRT_FUNCTION(__aeabi_idivmod)
>>>> -#if __ARM_ARCH_ISA_THUMB == 1
>>>> +#if defined(USE_THUMB_1)
>>>>            push    {r0, r1, lr}
>>>>            bl      SYMBOL_NAME(__divsi3)
>>>>            pop     {r1, r2, r3} // now r0 = quot, r1 = num, r2 = denom
>>>>            muls    r2, r0, r2   // r2 = quot * denom
>>>>            subs    r1, r1, r2
>>>>            JMP     (r3)
>>>> -#else
>>>> +#else  // defined(USE_THUMB_1)
>>>>            push    { lr }
>>>>            sub     sp, sp, #4
>>>>            mov     r2, sp
>>>> @@ -42,7 +44,7 @@ DEFINE_COMPILERRT_FUNCTION(__aeabi_idivm
>>>>            ldr     r1, [sp]
>>>>            add     sp, sp, #4
>>>>            pop     { pc }
>>>> -#endif // __ARM_ARCH_ISA_THUMB == 1
>>>> +#endif //  defined(USE_THUMB_1)
>>>>    END_COMPILERRT_FUNCTION(__aeabi_idivmod)
>>>>
>>>>    NO_EXEC_STACK_DIRECTIVE
>>>>
>>>> Modified: compiler-rt/trunk/lib/builtins/arm/aeabi_uidivmod.S
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/aeabi_uidivmod.S?rev=310884&r1=310883&r2=310884&view=diff
>>>>
>>>> ==============================================================================
>>>> --- compiler-rt/trunk/lib/builtins/arm/aeabi_uidivmod.S (original)
>>>> +++ compiler-rt/trunk/lib/builtins/arm/aeabi_uidivmod.S Mon Aug 14
>>>> 13:48:47 2017
>>>> @@ -21,9 +21,11 @@
>>>>    #endif
>>>>
>>>>            .syntax unified
>>>> +        .text
>>>> +        DEFINE_CODE_STATE
>>>>            .p2align 2
>>>>    DEFINE_COMPILERRT_FUNCTION(__aeabi_uidivmod)
>>>> -#if __ARM_ARCH_ISA_THUMB == 1
>>>> +#if defined(USE_THUMB_1)
>>>>            cmp     r0, r1
>>>>            bcc     LOCAL_LABEL(case_denom_larger)
>>>>            push    {r0, r1, lr}
>>>> @@ -36,7 +38,7 @@ LOCAL_LABEL(case_denom_larger):
>>>>            movs    r1, r0
>>>>            movs    r0, #0
>>>>            JMP     (lr)
>>>> -#else
>>>> +#else // defined(USE_THUMB_1)
>>>>            push    { lr }
>>>>            sub     sp, sp, #4
>>>>            mov     r2, sp
>>>>
>>>> Modified: compiler-rt/trunk/lib/builtins/arm/bswapdi2.S
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/bswapdi2.S?rev=310884&r1=310883&r2=310884&view=diff
>>>>
>>>> ==============================================================================
>>>> --- compiler-rt/trunk/lib/builtins/arm/bswapdi2.S (original)
>>>> +++ compiler-rt/trunk/lib/builtins/arm/bswapdi2.S Mon Aug 14 13:48:47
>>>> 2017
>>>> @@ -11,9 +11,7 @@
>>>>
>>>>           .syntax unified
>>>>           .text
>>>> -#if __ARM_ARCH_ISA_THUMB == 2
>>>> -       .thumb
>>>> -#endif
>>>> +       DEFINE_CODE_STATE
>>>>
>>>>    //
>>>>    // extern uint64_t __bswapdi2(uint64_t);
>>>> @@ -21,11 +19,7 @@
>>>>    // Reverse all the bytes in a 64-bit integer.
>>>>    //
>>>>           .p2align 2
>>>> -#if __ARM_ARCH_ISA_THUMB == 2
>>>> -DEFINE_COMPILERRT_THUMB_FUNCTION(__bswapdi2)
>>>> -#else
>>>>    DEFINE_COMPILERRT_FUNCTION(__bswapdi2)
>>>> -#endif
>>>>    #if __ARM_ARCH < 6
>>>>        // before armv6 does not have "rev" instruction
>>>>        // r2 = rev(r0)
>>>>
>>>> Modified: compiler-rt/trunk/lib/builtins/arm/bswapsi2.S
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/bswapsi2.S?rev=310884&r1=310883&r2=310884&view=diff
>>>>
>>>> ==============================================================================
>>>> --- compiler-rt/trunk/lib/builtins/arm/bswapsi2.S (original)
>>>> +++ compiler-rt/trunk/lib/builtins/arm/bswapsi2.S Mon Aug 14 13:48:47
>>>> 2017
>>>> @@ -11,9 +11,7 @@
>>>>
>>>>           .syntax unified
>>>>           .text
>>>> -#if __ARM_ARCH_ISA_THUMB == 2
>>>> -       .thumb
>>>> -#endif
>>>> +       DEFINE_CODE_STATE
>>>>
>>>>    //
>>>>    // extern uint32_t __bswapsi2(uint32_t);
>>>> @@ -21,11 +19,7 @@
>>>>    // Reverse all the bytes in a 32-bit integer.
>>>>    //
>>>>           .p2align 2
>>>> -#if __ARM_ARCH_ISA_THUMB == 2
>>>> -DEFINE_COMPILERRT_THUMB_FUNCTION(__bswapsi2)
>>>> -#else
>>>>    DEFINE_COMPILERRT_FUNCTION(__bswapsi2)
>>>> -#endif
>>>>    #if __ARM_ARCH < 6
>>>>        // before armv6 does not have "rev" instruction
>>>>           eor     r1, r0, r0, ror #16
>>>>
>>>> Modified: compiler-rt/trunk/lib/builtins/arm/clzdi2.S
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/clzdi2.S?rev=310884&r1=310883&r2=310884&view=diff
>>>>
>>>> ==============================================================================
>>>> --- compiler-rt/trunk/lib/builtins/arm/clzdi2.S (original)
>>>> +++ compiler-rt/trunk/lib/builtins/arm/clzdi2.S Mon Aug 14 13:48:47 2017
>>>> @@ -15,17 +15,10 @@
>>>>
>>>>           .syntax unified
>>>>           .text
>>>> -#if __ARM_ARCH_ISA_THUMB == 2
>>>> -       .thumb
>>>> -#endif
>>>> -
>>>> +       DEFINE_CODE_STATE
>>>>
>>>>           .p2align        2
>>>> -#if __ARM_ARCH_ISA_THUMB == 2
>>>> -DEFINE_COMPILERRT_THUMB_FUNCTION(__clzdi2)
>>>> -#else
>>>>    DEFINE_COMPILERRT_FUNCTION(__clzdi2)
>>>> -#endif
>>>>    #ifdef __ARM_FEATURE_CLZ
>>>>    #ifdef __ARMEB__
>>>>           cmp     r0, 0
>>>>
>>>> Modified: compiler-rt/trunk/lib/builtins/arm/clzsi2.S
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/clzsi2.S?rev=310884&r1=310883&r2=310884&view=diff
>>>>
>>>> ==============================================================================
>>>> --- compiler-rt/trunk/lib/builtins/arm/clzsi2.S (original)
>>>> +++ compiler-rt/trunk/lib/builtins/arm/clzsi2.S Mon Aug 14 13:48:47 2017
>>>> @@ -15,16 +15,10 @@
>>>>
>>>>           .syntax unified
>>>>           .text
>>>> -#if __ARM_ARCH_ISA_THUMB == 2
>>>> -       .thumb
>>>> -#endif
>>>> +       DEFINE_CODE_STATE
>>>>
>>>>           .p2align        2
>>>> -#if __ARM_ARCH_ISA_THUMB == 2
>>>> -DEFINE_COMPILERRT_THUMB_FUNCTION(__clzsi2)
>>>> -#else
>>>>    DEFINE_COMPILERRT_FUNCTION(__clzsi2)
>>>> -#endif
>>>>    #ifdef __ARM_FEATURE_CLZ
>>>>           clz     r0, r0
>>>>           JMP(lr)
>>>>
>>>> Modified: compiler-rt/trunk/lib/builtins/arm/comparesf2.S
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/comparesf2.S?rev=310884&r1=310883&r2=310884&view=diff
>>>>
>>>> ==============================================================================
>>>> --- compiler-rt/trunk/lib/builtins/arm/comparesf2.S (original)
>>>> +++ compiler-rt/trunk/lib/builtins/arm/comparesf2.S Mon Aug 14 13:48:47
>>>> 2017
>>>> @@ -38,10 +38,9 @@
>>>>
>>>> //===----------------------------------------------------------------------===//
>>>>
>>>>    #include "../assembly.h"
>>>> -.syntax unified
>>>> -#if __ARM_ARCH_ISA_THUMB == 2
>>>> -.thumb
>>>> -#endif
>>>> +    .syntax unified
>>>> +    .text
>>>> +    DEFINE_CODE_STATE
>>>>
>>>>    @ int __eqsf2(float a, float b)
>>>>
>>>> @@ -53,7 +52,7 @@ DEFINE_COMPILERRT_FUNCTION(__eqsf2)
>>>>    #endif
>>>>        // Make copies of a and b with the sign bit shifted off the top.
>>>> These will
>>>>        // be used to detect zeros and NaNs.
>>>> -#if __ARM_ARCH_ISA_THUMB == 1
>>>> +#if defined(USE_THUMB_1)
>>>>        push    {r6, lr}
>>>>        lsls    r2,         r0, #1
>>>>        lsls    r3,         r1, #1
>>>> @@ -67,7 +66,7 @@ DEFINE_COMPILERRT_FUNCTION(__eqsf2)
>>>>        // flag if both a and b are zero (of either sign).  The shift of r3
>>>> doesn't
>>>>        // effect this at all, but it *does* make sure that the C flag is
>>>> clear for
>>>>        // the subsequent operations.
>>>> -#if __ARM_ARCH_ISA_THUMB == 1
>>>> +#if defined(USE_THUMB_1)
>>>>        lsrs    r6,     r3, #1
>>>>        orrs    r6,     r2
>>>>    #else
>>>> @@ -75,7 +74,7 @@ DEFINE_COMPILERRT_FUNCTION(__eqsf2)
>>>>    #endif
>>>>        // Next, we check if a and b have the same or different signs.  If
>>>> they have
>>>>        // opposite signs, this eor will set the N flag.
>>>> -#if __ARM_ARCH_ISA_THUMB == 1
>>>> +#if defined(USE_THUMB_1)
>>>>        beq     1f
>>>>        movs    r6,     r0
>>>>        eors    r6,     r1
>>>> @@ -89,7 +88,7 @@ DEFINE_COMPILERRT_FUNCTION(__eqsf2)
>>>>        // ignoring NaNs for now), this subtract will zero out r0.  If they
>>>> have the
>>>>        // same sign, the flags are updated as they would be for a
>>>> comparison of the
>>>>        // absolute values of a and b.
>>>> -#if __ARM_ARCH_ISA_THUMB == 1
>>>> +#if defined(USE_THUMB_1)
>>>>        bmi     1f
>>>>        subs    r0,     r2, r3
>>>>    1:
>>>> @@ -108,7 +107,7 @@ DEFINE_COMPILERRT_FUNCTION(__eqsf2)
>>>>        // still clear from the shift argument in orrs; if a is positive
>>>> and b
>>>>        // negative, this places 0 in r0; if a is negative and b positive,
>>>> -1 is
>>>>        // placed in r0.
>>>> -#if __ARM_ARCH_ISA_THUMB == 1
>>>> +#if defined(USE_THUMB_1)
>>>>        bhs     1f
>>>>        // Here if a and b have the same sign and absA < absB, the result
>>>> is thus
>>>>        // b < 0 ? 1 : -1. Same if a and b have the opposite sign (ignoring
>>>> Nan).
>>>> @@ -127,7 +126,7 @@ DEFINE_COMPILERRT_FUNCTION(__eqsf2)
>>>>        // the sign of b in r0.  Thus, if both are negative and a < b, -1
>>>> is placed
>>>>        // in r0, which is the desired result.  Conversely, if both are
>>>> positive
>>>>        // and a > b, zero is placed in r0.
>>>> -#if __ARM_ARCH_ISA_THUMB == 1
>>>> +#if defined(USE_THUMB_1)
>>>>        bls     1f
>>>>        // Here both have the same sign and absA > absB.
>>>>        movs    r0,         #1
>>>> @@ -145,14 +144,14 @@ DEFINE_COMPILERRT_FUNCTION(__eqsf2)
>>>>        // If a == b, then the Z flag is set, so we can get the correct
>>>> final value
>>>>        // into r0 by simply or'ing with 1 if Z is clear.
>>>>        // For Thumb-1, r0 contains -1 if a < b, 0 if a > b and 0 if a ==
>>>> b.
>>>> -#if __ARM_ARCH_ISA_THUMB != 1
>>>> +#if !defined(USE_THUMB_1)
>>>>        it ne
>>>>        orrne   r0,     r0, #1
>>>>    #endif
>>>>
>>>>        // Finally, we need to deal with NaNs.  If either argument is NaN,
>>>> replace
>>>>        // the value in r0 with 1.
>>>> -#if __ARM_ARCH_ISA_THUMB == 1
>>>> +#if defined(USE_THUMB_1)
>>>>    LOCAL_LABEL(CHECK_NAN):
>>>>        movs    r6,         #0xff
>>>>        lsls    r6,         #24
>>>> @@ -189,7 +188,7 @@ DEFINE_COMPILERRT_FUNCTION(__gtsf2)
>>>>        vmov r0, s0
>>>>        vmov r1, s1
>>>>    #endif
>>>> -#if __ARM_ARCH_ISA_THUMB == 1
>>>> +#if defined(USE_THUMB_1)
>>>>        push    {r6, lr}
>>>>        lsls    r2,        r0, #1
>>>>        lsls    r3,        r1, #1
>>>> @@ -255,6 +254,7 @@ DEFINE_COMPILERRT_FUNCTION_ALIAS(__gesf2
>>>>
>>>>        .p2align 2
>>>>    DEFINE_COMPILERRT_FUNCTION(__unordsf2)
>>>> +
>>>>    #if defined(COMPILER_RT_ARMHF_TARGET)
>>>>        vmov    r0,         s0
>>>>        vmov    r1,         s1
>>>> @@ -263,7 +263,7 @@ DEFINE_COMPILERRT_FUNCTION(__unordsf2)
>>>>        lsls    r2,         r0, #1
>>>>        lsls    r3,         r1, #1
>>>>        movs    r0,         #0
>>>> -#if __ARM_ARCH_ISA_THUMB == 1
>>>> +#if defined(USE_THUMB_1)
>>>>        movs    r1,         #0xff
>>>>        lsls    r1,         #24
>>>>        cmp     r2,         r1
>>>>
>>>> Modified: compiler-rt/trunk/lib/builtins/arm/divmodsi4.S
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/divmodsi4.S?rev=310884&r1=310883&r2=310884&view=diff
>>>>
>>>> ==============================================================================
>>>> --- compiler-rt/trunk/lib/builtins/arm/divmodsi4.S (original)
>>>> +++ compiler-rt/trunk/lib/builtins/arm/divmodsi4.S Mon Aug 14 13:48:47
>>>> 2017
>>>> @@ -23,20 +23,14 @@
>>>>
>>>>           .syntax unified
>>>>           .text
>>>> -#if __ARM_ARCH_ISA_THUMB == 2
>>>> -       .thumb
>>>> -#endif
>>>> +  DEFINE_CODE_STATE
>>>>
>>>>    @ int __divmodsi4(int divident, int divisor, int *remainder)
>>>>    @   Calculate the quotient and remainder of the (signed) division.  The
>>>> return
>>>>    @   value is the quotient, the remainder is placed in the variable.
>>>>
>>>>           .p2align 3
>>>> -#if __ARM_ARCH_ISA_THUMB == 2
>>>> -DEFINE_COMPILERRT_THUMB_FUNCTION(__divmodsi4)
>>>> -#else
>>>>    DEFINE_COMPILERRT_FUNCTION(__divmodsi4)
>>>> -#endif
>>>>    #if __ARM_ARCH_EXT_IDIV__
>>>>           tst     r1, r1
>>>>           beq     LOCAL_LABEL(divzero)
>>>>
>>>> Modified: compiler-rt/trunk/lib/builtins/arm/divsi3.S
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/divsi3.S?rev=310884&r1=310883&r2=310884&view=diff
>>>>
>>>> ==============================================================================
>>>> --- compiler-rt/trunk/lib/builtins/arm/divsi3.S (original)
>>>> +++ compiler-rt/trunk/lib/builtins/arm/divsi3.S Mon Aug 14 13:48:47 2017
>>>> @@ -20,11 +20,9 @@
>>>>    #define CLEAR_FRAME_AND_RETURN \
>>>>        pop    {r4, r7, pc}
>>>>
>>>> -       .syntax unified
>>>> -       .text
>>>> -#if __ARM_ARCH_ISA_THUMB == 2
>>>> -       .thumb
>>>> -#endif
>>>> +   .syntax unified
>>>> +   .text
>>>> +   DEFINE_CODE_STATE
>>>>
>>>>           .p2align 3
>>>>    // Ok, APCS and AAPCS agree on 32 bit args, so it's safe to use the
>>>> same routine.
>>>> @@ -33,11 +31,7 @@ DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_idiv
>>>>    @ int __divsi3(int divident, int divisor)
>>>>    @   Calculate and return the quotient of the (signed) division.
>>>>
>>>> -#if __ARM_ARCH_ISA_THUMB == 2
>>>> -DEFINE_COMPILERRT_THUMB_FUNCTION(__divsi3)
>>>> -#else
>>>>    DEFINE_COMPILERRT_FUNCTION(__divsi3)
>>>> -#endif
>>>>    #if __ARM_ARCH_EXT_IDIV__
>>>>       tst     r1,r1
>>>>       beq     LOCAL_LABEL(divzero)
>>>> @@ -49,14 +43,14 @@ LOCAL_LABEL(divzero):
>>>>    #else
>>>>    ESTABLISH_FRAME
>>>>    //  Set aside the sign of the quotient.
>>>> -#  if __ARM_ARCH_ISA_THUMB == 1
>>>> +#  if defined(USE_THUMB_1)
>>>>        movs    r4,     r0
>>>>        eors    r4,     r1
>>>>    #  else
>>>>        eor     r4,     r0, r1
>>>>    #  endif
>>>>    //  Take absolute value of a and b via abs(x) = (x^(x >> 31)) - (x >>
>>>> 31).
>>>> -#  if   __ARM_ARCH_ISA_THUMB == 1
>>>> +#  if defined(USE_THUMB_1)
>>>>        asrs    r2,     r0, #31
>>>>        asrs    r3,     r1, #31
>>>>        eors    r0,     r2
>>>> @@ -72,7 +66,7 @@ ESTABLISH_FRAME
>>>>    //  abs(a) / abs(b)
>>>>        bl      SYMBOL_NAME(__udivsi3)
>>>>    //  Apply sign of quotient to result and return.
>>>> -#  if __ARM_ARCH_ISA_THUMB == 1
>>>> +#  if defined(USE_THUMB_1)
>>>>        asrs    r4,     #31
>>>>        eors    r0,     r4
>>>>        subs    r0,     r0, r4
>>>>
>>>> Modified: compiler-rt/trunk/lib/builtins/arm/modsi3.S
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/modsi3.S?rev=310884&r1=310883&r2=310884&view=diff
>>>>
>>>> ==============================================================================
>>>> --- compiler-rt/trunk/lib/builtins/arm/modsi3.S (original)
>>>> +++ compiler-rt/trunk/lib/builtins/arm/modsi3.S Mon Aug 14 13:48:47 2017
>>>> @@ -22,19 +22,13 @@
>>>>
>>>>           .syntax unified
>>>>           .text
>>>> -#if __ARM_ARCH_ISA_THUMB == 2
>>>> -       .thumb
>>>> -#endif
>>>> +       DEFINE_CODE_STATE
>>>>
>>>>    @ int __modsi3(int divident, int divisor)
>>>>    @   Calculate and return the remainder of the (signed) division.
>>>>
>>>>           .p2align 3
>>>> -#if __ARM_ARCH_ISA_THUMB == 2
>>>> -DEFINE_COMPILERRT_THUMB_FUNCTION(__modsi3)
>>>> -#else
>>>>    DEFINE_COMPILERRT_FUNCTION(__modsi3)
>>>> -#endif
>>>>    #if __ARM_ARCH_EXT_IDIV__
>>>>           tst     r1, r1
>>>>           beq     LOCAL_LABEL(divzero)
>>>>
>>>> Modified: compiler-rt/trunk/lib/builtins/arm/udivmodsi4.S
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/udivmodsi4.S?rev=310884&r1=310883&r2=310884&view=diff
>>>>
>>>> ==============================================================================
>>>> --- compiler-rt/trunk/lib/builtins/arm/udivmodsi4.S (original)
>>>> +++ compiler-rt/trunk/lib/builtins/arm/udivmodsi4.S Mon Aug 14 13:48:47
>>>> 2017
>>>> @@ -16,10 +16,7 @@
>>>>
>>>>           .syntax unified
>>>>           .text
>>>> -
>>>> -#if __ARM_ARCH_ISA_THUMB == 2
>>>> -       .thumb
>>>> -#endif
>>>> +       DEFINE_CODE_STATE
>>>>
>>>>    @ unsigned int __udivmodsi4(unsigned int divident, unsigned int
>>>> divisor,
>>>>    @                           unsigned int *remainder)
>>>> @@ -27,11 +24,7 @@
>>>>    @   value is the quotient, the remainder is placed in the variable.
>>>>
>>>>           .p2align 2
>>>> -#if __ARM_ARCH_ISA_THUMB == 2
>>>> -DEFINE_COMPILERRT_THUMB_FUNCTION(__udivmodsi4)
>>>> -#else
>>>>    DEFINE_COMPILERRT_FUNCTION(__udivmodsi4)
>>>> -#endif
>>>>    #if __ARM_ARCH_EXT_IDIV__
>>>>           tst     r1, r1
>>>>           beq     LOCAL_LABEL(divby0)
>>>> @@ -67,7 +60,7 @@ DEFINE_COMPILERRT_FUNCTION(__udivmodsi4)
>>>>           clz     r3, r1
>>>>           /* r0 >= r1 implies clz(r0) <= clz(r1), so ip <= r3. */
>>>>           sub     r3, r3, ip
>>>> -#    if __ARM_ARCH_ISA_THUMB == 2
>>>> +#    if defined(USE_THUMB_2)
>>>>           adr     ip, LOCAL_LABEL(div0block) + 1
>>>>           sub     ip, ip, r3, lsl #1
>>>>    #    else
>>>> @@ -78,7 +71,7 @@ DEFINE_COMPILERRT_FUNCTION(__udivmodsi4)
>>>>           mov     r3, #0
>>>>           bx      ip
>>>>    #  else
>>>> -#    if __ARM_ARCH_ISA_THUMB == 2
>>>> +#    if defined(USE_THUMB_2)
>>>>    #    error THUMB mode requires CLZ or UDIV
>>>>    #    endif
>>>>           str     r4, [sp, #-8]!
>>>>
>>>> Modified: compiler-rt/trunk/lib/builtins/arm/udivsi3.S
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/udivsi3.S?rev=310884&r1=310883&r2=310884&view=diff
>>>>
>>>> ==============================================================================
>>>> --- compiler-rt/trunk/lib/builtins/arm/udivsi3.S (original)
>>>> +++ compiler-rt/trunk/lib/builtins/arm/udivsi3.S Mon Aug 14 13:48:47 2017
>>>> @@ -17,9 +17,7 @@
>>>>           .syntax unified
>>>>           .text
>>>>
>>>> -#if __ARM_ARCH_ISA_THUMB == 2
>>>> -       .thumb
>>>> -#endif
>>>> +DEFINE_CODE_STATE
>>>>
>>>>           .p2align 2
>>>>    DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_uidiv, __udivsi3)
>>>> @@ -27,11 +25,7 @@ DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_uidi
>>>>    @ unsigned int __udivsi3(unsigned int divident, unsigned int divisor)
>>>>    @   Calculate and return the quotient of the (unsigned) division.
>>>>
>>>> -#if __ARM_ARCH_ISA_THUMB == 2
>>>> -DEFINE_COMPILERRT_THUMB_FUNCTION(__udivsi3)
>>>> -#else
>>>>    DEFINE_COMPILERRT_FUNCTION(__udivsi3)
>>>> -#endif
>>>>    #if __ARM_ARCH_EXT_IDIV__
>>>>           tst     r1, r1
>>>>           beq     LOCAL_LABEL(divby0)
>>>> @@ -49,7 +43,7 @@ LOCAL_LABEL(divby0):
>>>>    #else /* ! __ARM_ARCH_EXT_IDIV__ */
>>>>           cmp     r1, #1
>>>>           bcc     LOCAL_LABEL(divby0)
>>>> -#if __ARM_ARCH_ISA_THUMB == 1
>>>> +#if defined(USE_THUMB_1)
>>>>           bne LOCAL_LABEL(num_neq_denom)
>>>>           JMP(lr)
>>>>    LOCAL_LABEL(num_neq_denom):
>>>> @@ -58,7 +52,7 @@ LOCAL_LABEL(num_neq_denom):
>>>>           JMPc(lr, eq)
>>>>    #endif
>>>>           cmp     r0, r1
>>>> -#if __ARM_ARCH_ISA_THUMB == 1
>>>> +#if defined(USE_THUMB_1)
>>>>           bhs LOCAL_LABEL(num_ge_denom)
>>>>           movs r0, #0
>>>>           JMP(lr)
>>>> @@ -90,7 +84,7 @@ LOCAL_LABEL(num_ge_denom):
>>>>           clz     r3, r1
>>>>           /* r0 >= r1 implies clz(r0) <= clz(r1), so ip <= r3. */
>>>>           sub     r3, r3, ip
>>>> -#    if __ARM_ARCH_ISA_THUMB == 2
>>>> +#    if defined(USE_THUMB_2)
>>>>           adr     ip, LOCAL_LABEL(div0block) + 1
>>>>           sub     ip, ip, r3, lsl #1
>>>>    #    else
>>>> @@ -101,17 +95,17 @@ LOCAL_LABEL(num_ge_denom):
>>>>           mov     r3, #0
>>>>           bx      ip
>>>>    #  else /* No CLZ Feature */
>>>> -#    if __ARM_ARCH_ISA_THUMB == 2
>>>> +#    if defined(USE_THUMB_2)
>>>>    #    error THUMB mode requires CLZ or UDIV
>>>>    #    endif
>>>> -#    if __ARM_ARCH_ISA_THUMB == 1
>>>> +#    if defined(USE_THUMB_1)
>>>>    #      define BLOCK_SIZE 10
>>>>    #    else
>>>>    #      define BLOCK_SIZE 12
>>>>    #    endif
>>>>
>>>>           mov     r2, r0
>>>> -#    if __ARM_ARCH_ISA_THUMB == 1
>>>> +#    if defined(USE_THUMB_1)
>>>>           mov ip, r0
>>>>           adr r0, LOCAL_LABEL(div0block)
>>>>           adds r0, #1
>>>> @@ -120,7 +114,7 @@ LOCAL_LABEL(num_ge_denom):
>>>>    #    endif
>>>>           lsrs    r3, r2, #16
>>>>           cmp     r3, r1
>>>> -#    if __ARM_ARCH_ISA_THUMB == 1
>>>> +#    if defined(USE_THUMB_1)
>>>>           blo LOCAL_LABEL(skip_16)
>>>>           movs r2, r3
>>>>           subs r0, r0, #(16 * BLOCK_SIZE)
>>>> @@ -132,7 +126,7 @@ LOCAL_LABEL(skip_16):
>>>>
>>>>           lsrs    r3, r2, #8
>>>>           cmp     r3, r1
>>>> -#    if __ARM_ARCH_ISA_THUMB == 1
>>>> +#    if defined(USE_THUMB_1)
>>>>           blo LOCAL_LABEL(skip_8)
>>>>           movs r2, r3
>>>>           subs r0, r0, #(8 * BLOCK_SIZE)
>>>> @@ -144,7 +138,7 @@ LOCAL_LABEL(skip_8):
>>>>
>>>>           lsrs    r3, r2, #4
>>>>           cmp     r3, r1
>>>> -#    if __ARM_ARCH_ISA_THUMB == 1
>>>> +#    if defined(USE_THUMB_1)
>>>>           blo LOCAL_LABEL(skip_4)
>>>>           movs r2, r3
>>>>           subs r0, r0, #(4 * BLOCK_SIZE)
>>>> @@ -156,7 +150,7 @@ LOCAL_LABEL(skip_4):
>>>>
>>>>           lsrs    r3, r2, #2
>>>>           cmp     r3, r1
>>>> -#    if __ARM_ARCH_ISA_THUMB == 1
>>>> +#    if defined(USE_THUMB_1)
>>>>           blo LOCAL_LABEL(skip_2)
>>>>           movs r2, r3
>>>>           subs r0, r0, #(2 * BLOCK_SIZE)
>>>> @@ -167,7 +161,7 @@ LOCAL_LABEL(skip_2):
>>>>    #    endif
>>>>
>>>>           /* Last block, no need to update r2 or r3. */
>>>> -#    if __ARM_ARCH_ISA_THUMB == 1
>>>> +#    if defined(USE_THUMB_1)
>>>>           lsrs r3, r2, #1
>>>>           cmp r3, r1
>>>>           blo LOCAL_LABEL(skip_1)
>>>> @@ -203,7 +197,7 @@ LOCAL_LABEL(divby0):
>>>>    #      endif
>>>>
>>>>
>>>> -#if __ARM_ARCH_ISA_THUMB == 1
>>>> +#if defined(USE_THUMB_1)
>>>>    #define block(shift)
>>>> \
>>>>           lsls r2, r1, IMM shift;
>>>> \
>>>>           cmp r0, r2;
>>>> \
>>>>
>>>> Modified: compiler-rt/trunk/lib/builtins/arm/umodsi3.S
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/umodsi3.S?rev=310884&r1=310883&r2=310884&view=diff
>>>>
>>>> ==============================================================================
>>>> --- compiler-rt/trunk/lib/builtins/arm/umodsi3.S (original)
>>>> +++ compiler-rt/trunk/lib/builtins/arm/umodsi3.S Mon Aug 14 13:48:47 2017
>>>> @@ -16,19 +16,13 @@
>>>>
>>>>           .syntax unified
>>>>           .text
>>>> -#if __ARM_ARCH_ISA_THUMB == 2
>>>> -       .thumb
>>>> -#endif
>>>> +       DEFINE_CODE_STATE
>>>>
>>>>    @ unsigned int __umodsi3(unsigned int divident, unsigned int divisor)
>>>>    @   Calculate and return the remainder of the (unsigned) division.
>>>>
>>>>           .p2align 2
>>>> -#if __ARM_ARCH_ISA_THUMB == 2
>>>> -DEFINE_COMPILERRT_THUMB_FUNCTION(__umodsi3)
>>>> -#else
>>>>    DEFINE_COMPILERRT_FUNCTION(__umodsi3)
>>>> -#endif
>>>>    #if __ARM_ARCH_EXT_IDIV__
>>>>           tst     r1, r1
>>>>           beq     LOCAL_LABEL(divby0)
>>>> @@ -65,7 +59,7 @@ DEFINE_COMPILERRT_FUNCTION(__umodsi3)
>>>>           clz     r3, r1
>>>>           /* r0 >= r1 implies clz(r0) <= clz(r1), so ip <= r3. */
>>>>           sub     r3, r3, ip
>>>> -#    if __ARM_ARCH_ISA_THUMB == 2
>>>> +#    if defined(USE_THUMB_2)
>>>>           adr     ip, LOCAL_LABEL(div0block) + 1
>>>>           sub     ip, ip, r3, lsl #1
>>>>    #    else
>>>> @@ -74,7 +68,7 @@ DEFINE_COMPILERRT_FUNCTION(__umodsi3)
>>>>           sub     ip, ip, r3, lsl #3
>>>>           bx      ip
>>>>    #  else
>>>> -#    if __ARM_ARCH_ISA_THUMB == 2
>>>> +#    if defined(USE_THUMB_2)
>>>>    #    error THUMB mode requires CLZ or UDIV
>>>>    #    endif
>>>>           mov     r2, r0
>>>>
>>>> Modified: compiler-rt/trunk/lib/builtins/assembly.h
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/assembly.h?rev=310884&r1=310883&r2=310884&view=diff
>>>>
>>>> ==============================================================================
>>>> --- compiler-rt/trunk/lib/builtins/assembly.h (original)
>>>> +++ compiler-rt/trunk/lib/builtins/assembly.h Mon Aug 14 13:48:47 2017
>>>> @@ -68,10 +68,42 @@
>>>>    #endif
>>>>
>>>>    #if defined(__arm__)
>>>> +
>>>> +/*
>>>> + * Determine actual [ARM][THUMB[1][2]] ISA using compiler predefined
>>>> macros:
>>>> + * - for '-mthumb -march=armv6' compiler defines '__thumb__'
>>>> + * - for '-mthumb -march=armv7' compiler defines '__thumb__' and
>>>> '__thumb2__'
>>>> + */
>>>> +#if defined(__thumb2__) || defined(__thumb__)
>>>> +#define DEFINE_CODE_STATE .thumb
>>>> +#define DECLARE_FUNC_ENCODING    .thumb_func SEPARATOR
>>>> +#if defined(__thumb2__)
>>>> +#define USE_THUMB_2
>>>> +#define IT(cond)  it cond
>>>> +#define ITT(cond) itt cond
>>>> +#define ITE(cond) ite cond
>>>> +#else
>>>> +#define USE_THUMB_1
>>>> +#define IT(cond)
>>>> +#define ITT(cond)
>>>> +#define ITE(cond)
>>>> +#endif // defined(__thumb__2)
>>>> +#else // !defined(__thumb2__) && !defined(__thumb__)
>>>> +#define DEFINE_CODE_STATE .arm
>>>> +#define DECLARE_FUNC_ENCODING
>>>> +#define IT(cond)
>>>> +#define ITT(cond)
>>>> +#define ITE(cond)
>>>> +#endif
>>>> +
>>>> +#if defined(USE_THUMB_1) && defined(USE_THUMB_2)
>>>> +#error "USE_THUMB_1 and USE_THUMB_2 can't be defined together."
>>>> +#endif
>>>> +
>>>>    #if defined(__ARM_ARCH_4T__) || __ARM_ARCH >= 5
>>>>    #define ARM_HAS_BX
>>>>    #endif
>>>> -#if !defined(__ARM_FEATURE_CLZ) && __ARM_ARCH_ISA_THUMB != 1 &&
>>>> \
>>>> +#if !defined(__ARM_FEATURE_CLZ) && !defined(USE_THUMB_1) &&  \
>>>>        (__ARM_ARCH >= 6 || (__ARM_ARCH == 5 && !defined(__ARM_ARCH_5__)))
>>>>    #define __ARM_FEATURE_CLZ
>>>>    #endif
>>>> @@ -93,17 +125,7 @@
>>>>      JMP(ip)
>>>>    #endif
>>>>
>>>> -#if __ARM_ARCH_ISA_THUMB == 2
>>>> -#define IT(cond)  it cond
>>>> -#define ITT(cond) itt cond
>>>> -#define ITE(cond) ite cond
>>>> -#else
>>>> -#define IT(cond)
>>>> -#define ITT(cond)
>>>> -#define ITE(cond)
>>>> -#endif
>>>> -
>>>> -#if __ARM_ARCH_ISA_THUMB == 2
>>>> +#if defined(USE_THUMB_2)
>>>>    #define WIDE(op) op.w
>>>>    #else
>>>>    #define WIDE(op) op
>>>> @@ -126,6 +148,7 @@
>>>>      .globl SYMBOL_NAME(name) SEPARATOR
>>>> \
>>>>      SYMBOL_IS_FUNC(SYMBOL_NAME(name)) SEPARATOR
>>>> \
>>>>      DECLARE_SYMBOL_VISIBILITY(name)
>>>> \
>>>> +  DECLARE_FUNC_ENCODING
>>>> \
>>>>      SYMBOL_NAME(name):
>>>>
>>>>    #define DEFINE_COMPILERRT_THUMB_FUNCTION(name)
>>>> \
>>>> @@ -141,12 +164,14 @@
>>>>      .globl SYMBOL_NAME(name) SEPARATOR
>>>> \
>>>>      SYMBOL_IS_FUNC(SYMBOL_NAME(name)) SEPARATOR
>>>> \
>>>>      HIDDEN(SYMBOL_NAME(name)) SEPARATOR
>>>> \
>>>> +  DECLARE_FUNC_ENCODING
>>>> \
>>>>      SYMBOL_NAME(name):
>>>>
>>>>    #define DEFINE_COMPILERRT_PRIVATE_FUNCTION_UNMANGLED(name)
>>>> \
>>>>      .globl name SEPARATOR
>>>> \
>>>>      SYMBOL_IS_FUNC(name) SEPARATOR
>>>> \
>>>>      HIDDEN(name) SEPARATOR
>>>> \
>>>> +  DECLARE_FUNC_ENCODING
>>>> \
>>>>      name:
>>>>
>>>>    #define DEFINE_COMPILERRT_FUNCTION_ALIAS(name, target)
>>>> \
>>>>
>>>>
>>>> _______________________________________________
>>>> llvm-commits mailing list
>>>> llvm-commits at lists.llvm.org
>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>
>> --
>> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by
>> The Linux Foundation
>>

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation



More information about the llvm-commits mailing list