[compiler-rt] r317814 - [Builtins] Do not use tailcall for Thumb1
Weiming Zhao via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 9 09:32:57 PST 2017
Author: weimingz
Date: Thu Nov 9 09:32:57 2017
New Revision: 317814
URL: http://llvm.org/viewvc/llvm-project?rev=317814&view=rev
Log:
[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
Modified:
compiler-rt/trunk/lib/builtins/arm/aeabi_memcmp.S
compiler-rt/trunk/lib/builtins/arm/aeabi_memcpy.S
compiler-rt/trunk/lib/builtins/arm/aeabi_memmove.S
compiler-rt/trunk/lib/builtins/arm/aeabi_memset.S
Modified: compiler-rt/trunk/lib/builtins/arm/aeabi_memcmp.S
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/aeabi_memcmp.S?rev=317814&r1=317813&r2=317814&view=diff
==============================================================================
--- compiler-rt/trunk/lib/builtins/arm/aeabi_memcmp.S (original)
+++ compiler-rt/trunk/lib/builtins/arm/aeabi_memcmp.S Thu Nov 9 09:32:57 2017
@@ -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)
Modified: compiler-rt/trunk/lib/builtins/arm/aeabi_memcpy.S
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/aeabi_memcpy.S?rev=317814&r1=317813&r2=317814&view=diff
==============================================================================
--- compiler-rt/trunk/lib/builtins/arm/aeabi_memcpy.S (original)
+++ compiler-rt/trunk/lib/builtins/arm/aeabi_memcpy.S Thu Nov 9 09:32:57 2017
@@ -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)
Modified: compiler-rt/trunk/lib/builtins/arm/aeabi_memmove.S
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/aeabi_memmove.S?rev=317814&r1=317813&r2=317814&view=diff
==============================================================================
--- compiler-rt/trunk/lib/builtins/arm/aeabi_memmove.S (original)
+++ compiler-rt/trunk/lib/builtins/arm/aeabi_memmove.S Thu Nov 9 09:32:57 2017
@@ -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)
Modified: compiler-rt/trunk/lib/builtins/arm/aeabi_memset.S
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/aeabi_memset.S?rev=317814&r1=317813&r2=317814&view=diff
==============================================================================
--- compiler-rt/trunk/lib/builtins/arm/aeabi_memset.S (original)
+++ compiler-rt/trunk/lib/builtins/arm/aeabi_memset.S Thu Nov 9 09:32:57 2017
@@ -18,7 +18,13 @@ DEFINE_COMPILERRT_FUNCTION(__aeabi_memse
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_mems
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)
More information about the llvm-commits
mailing list