summaryrefslogtreecommitdiff
path: root/libc/string/arm/_memcpy.S
diff options
context:
space:
mode:
Diffstat (limited to 'libc/string/arm/_memcpy.S')
-rw-r--r--libc/string/arm/_memcpy.S19
1 files changed, 14 insertions, 5 deletions
diff --git a/libc/string/arm/_memcpy.S b/libc/string/arm/_memcpy.S
index e8d78af23..3704f96b5 100644
--- a/libc/string/arm/_memcpy.S
+++ b/libc/string/arm/_memcpy.S
@@ -37,7 +37,7 @@
* by Erik Andersen <andersen@codepoet.org>
*/
-
+#include <features.h>
#include <endian.h>
/*
@@ -83,8 +83,11 @@ _memcpy:
bcc .Lmemcpy_backwards
moveq r0, #0 /* Quick abort for len=0 */
- moveq pc, lr
-
+#if defined(__USE_BX__)
+ bxeq lr
+#else
+ moveq pc, lr
+#endif
stmdb sp!, {r0, lr} /* memcpy() returns dest addr */
subs r2, r2, #4
blt .Lmemcpy_fl4 /* less than 4 bytes */
@@ -389,8 +392,11 @@ _memcpy:
.Lmemcpy_bl4:
/* less than 4 bytes to go */
adds r2, r2, #4
+#if defined(__USE_BX__)
+ bxeq lr
+#else
moveq pc, lr /* done */
-
+#endif
/* copy the crud byte at a time */
cmp r2, #2
ldrb r3, [r1, #-1]!
@@ -399,8 +405,11 @@ _memcpy:
strgeb r3, [r0, #-1]!
ldrgtb r3, [r1, #-1]!
strgtb r3, [r0, #-1]!
+#if defined(__USE_BX__)
+ bx lr
+#else
mov pc, lr
-
+#endif
/* erg - unaligned destination */
.Lmemcpy_bdestul:
cmp r12, #2