aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/arm/strlen.S
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>2004-06-11 10:15:39 +0000
committerRoland McGrath <roland@gnu.org>2004-06-11 10:15:39 +0000
commitf1847a84656ed3f8432d1c6d7c804e07b7caa84b (patch)
treee9e8662665fce7ee6f5a5865f167935425210304 /sysdeps/arm/strlen.S
parentb80af23ac6973e69df6cd23d221fa44fffb21e17 (diff)
downloadglibc-f1847a84656ed3f8432d1c6d7c804e07b7caa84b.tar
glibc-f1847a84656ed3f8432d1c6d7c804e07b7caa84b.tar.gz
glibc-f1847a84656ed3f8432d1c6d7c804e07b7caa84b.tar.bz2
glibc-f1847a84656ed3f8432d1c6d7c804e07b7caa84b.zip
* sysdeps/arm/strlen.S [__ARMEB__]: Compute correctly for big-endian.
From Krzysztof Halasa <khc@pm.waw.pl>.
Diffstat (limited to 'sysdeps/arm/strlen.S')
-rw-r--r--sysdeps/arm/strlen.S9
1 files changed, 9 insertions, 0 deletions
diff --git a/sysdeps/arm/strlen.S b/sysdeps/arm/strlen.S
index f29528ada2..a83c41d26a 100644
--- a/sysdeps/arm/strlen.S
+++ b/sysdeps/arm/strlen.S
@@ -53,12 +53,21 @@ Laligned: @ here, we have a word in r2. Does it
ldrne r2, [r1], $4 @ and we continue to the next word
bne Laligned @
Llastword: @ drop through to here once we find a
+#ifdef __ARMEB__
+ tst r2, $0xff000000 @ word that has a zero byte in it
+ addne r0, r0, $1 @
+ tstne r2, $0x00ff0000 @ and add up to 3 bytes on to it
+ addne r0, r0, $1 @
+ tstne r2, $0x0000ff00 @ (if first three all non-zero, 4th
+ addne r0, r0, $1 @ must be zero)
+#else
tst r2, $0x000000ff @ word that has a zero byte in it
addne r0, r0, $1 @
tstne r2, $0x0000ff00 @ and add up to 3 bytes on to it
addne r0, r0, $1 @
tstne r2, $0x00ff0000 @ (if first three all non-zero, 4th
addne r0, r0, $1 @ must be zero)
+#endif
RETINSTR(mov,pc,lr)
END(strlen)
libc_hidden_builtin_def (strlen)