[Builtins] Do not use tailcall for Thumb1
Summary: The `b` instruction in Thumb1 has limited range, which may cause link-time errors if the jump target is far away. This patch guards the tailcalls for non-Thumb1 Reviewers: peter.smith, compnerd, rengolin, eli.friedman Reviewed By: rengolin Subscribers: joerg, dalias, javed.absar, llvm-commits Differential Revision: https://reviews.llvm.org/D39700 llvm-svn: 317814
This commit is contained in:
parent
5d7edca316
commit
e58bb5dc4e
@ -14,7 +14,13 @@
|
||||
.syntax unified
|
||||
.p2align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__aeabi_memcmp)
|
||||
#ifdef USE_THUMB_1
|
||||
push {r7, lr}
|
||||
bl memcmp
|
||||
pop {r7, pc}
|
||||
#else
|
||||
b memcmp
|
||||
#endif
|
||||
END_COMPILERRT_FUNCTION(__aeabi_memcmp)
|
||||
|
||||
DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memcmp4, __aeabi_memcmp)
|
||||
|
||||
@ -14,7 +14,13 @@
|
||||
.syntax unified
|
||||
.p2align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__aeabi_memcpy)
|
||||
#ifdef USE_THUMB_1
|
||||
push {r7, lr}
|
||||
bl memcpy
|
||||
pop {r7, pc}
|
||||
#else
|
||||
b memcpy
|
||||
#endif
|
||||
END_COMPILERRT_FUNCTION(__aeabi_memcpy)
|
||||
|
||||
DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memcpy4, __aeabi_memcpy)
|
||||
|
||||
@ -13,7 +13,13 @@
|
||||
|
||||
.p2align 2
|
||||
DEFINE_COMPILERRT_FUNCTION(__aeabi_memmove)
|
||||
#ifdef USE_THUMB_1
|
||||
push {r7, lr}
|
||||
bl memmove
|
||||
pop {r7, pc}
|
||||
#else
|
||||
b memmove
|
||||
#endif
|
||||
END_COMPILERRT_FUNCTION(__aeabi_memmove)
|
||||
|
||||
DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memmove4, __aeabi_memmove)
|
||||
|
||||
@ -18,7 +18,13 @@ DEFINE_COMPILERRT_FUNCTION(__aeabi_memset)
|
||||
mov r3, r1
|
||||
mov r1, r2
|
||||
mov r2, r3
|
||||
#ifdef USE_THUMB_1
|
||||
push {r7, lr}
|
||||
bl memset
|
||||
pop {r7, pc}
|
||||
#else
|
||||
b memset
|
||||
#endif
|
||||
END_COMPILERRT_FUNCTION(__aeabi_memset)
|
||||
|
||||
DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memset4, __aeabi_memset)
|
||||
@ -28,7 +34,13 @@ DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memset8, __aeabi_memset)
|
||||
DEFINE_COMPILERRT_FUNCTION(__aeabi_memclr)
|
||||
mov r2, r1
|
||||
movs r1, #0
|
||||
#ifdef USE_THUMB_1
|
||||
push {r7, lr}
|
||||
bl memset
|
||||
pop {r7, pc}
|
||||
#else
|
||||
b memset
|
||||
#endif
|
||||
END_COMPILERRT_FUNCTION(__aeabi_memclr)
|
||||
|
||||
DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memclr4, __aeabi_memclr)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user