summaryrefslogtreecommitdiff
path: root/sysdeps/arm/armv6t2/memchr.S
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/arm/armv6t2/memchr.S')
-rw-r--r--sysdeps/arm/armv6t2/memchr.S34
1 files changed, 4 insertions, 30 deletions
diff --git a/sysdeps/arm/armv6t2/memchr.S b/sysdeps/arm/armv6t2/memchr.S
index ded52dc21e..1d6eee0a11 100644
--- a/sysdeps/arm/armv6t2/memchr.S
+++ b/sysdeps/arm/armv6t2/memchr.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2016 Free Software Foundation, Inc.
+/* Copyright (C) 2011-2018 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Code contributed by Dave Gilbert <david.gilbert@linaro.org>
@@ -42,12 +42,8 @@
.syntax unified
.text
-#ifdef NO_THUMB
- .arm
-#else
.thumb
.thumb_func
-#endif
.global memchr
.type memchr,%function
ENTRY(memchr)
@@ -65,8 +61,7 @@ ENTRY(memchr)
@ Work up to an aligned point
5:
- sfi_breg r0, \
- ldrb r3, [\B],#1
+ ldrb r3, [r0],#1
subs r2, r2, #1
cmp r3, r1
beq 50f @ If it matches exit found
@@ -91,24 +86,15 @@ ENTRY(memchr)
movs r3, #0
15:
- sfi_breg r0, \
- ldrd r4,r5, [\B],#8
-#ifndef NO_THUMB
+ ldrd r4,r5, [r0],#8
subs r6, r6, #8
-#endif
eor r4,r4, r1 @ Get it so that r4,r5 have 00's where the bytes match the target
eor r5,r5, r1
uadd8 r4, r4, r7 @ Parallel add 0xff - sets the GE bits for anything that wasn't 0
sel r4, r3, r7 @ bytes are 00 for none-00 bytes, or ff for 00 bytes - NOTE INVERSION
uadd8 r5, r5, r7 @ Parallel add 0xff - sets the GE bits for anything that wasn't 0
sel r5, r4, r7 @ chained....bytes are 00 for none-00 bytes, or ff for 00 bytes - NOTE INVERSION
-#ifndef NO_THUMB
cbnz r5, 60f
-#else
- cmp r5, #0
- bne 60f
- subs r6, r6, #8
-#endif
bne 15b @ (Flags from the subs above) If not run out of bytes then go around again
pop {r4,r5,r6,r7}
@@ -122,25 +108,13 @@ ENTRY(memchr)
and r2,r2,#7 @ Leave the count remaining as the number after the double words have been done
20:
-#ifndef NO_THUMB
cbz r2, 40f @ 0 length or hit the end already then not found
-#else
- cmp r2, #0
- beq 40f
-#endif
21: @ Post aligned section, or just a short call
- sfi_breg r0, \
- ldrb r3,[\B],#1
-#ifndef NO_THUMB
+ ldrb r3,[r0],#1
subs r2,r2,#1
eor r3,r3,r1 @ r3 = 0 if match - doesn't break flags from sub
cbz r3, 50f
-#else
- eors r3, r3, r1
- beq 50f
- subs r2, r2, #1
-#endif
bne 21b @ on r2 flags
40: