summaryrefslogtreecommitdiffstats
path: root/arch/sparc/lib/strlen_user.S
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>2000-02-05 06:47:02 +0000
committerRalf Baechle <ralf@linux-mips.org>2000-02-05 06:47:02 +0000
commit99a7e12f34b3661a0d1354eef83a0eef4df5e34c (patch)
tree3560aca9ca86792f9ab7bd87861ea143a1b3c7a3 /arch/sparc/lib/strlen_user.S
parente73a04659c0b8cdee4dd40e58630e2cf63afb316 (diff)
Merge with Linux 2.3.38.
Diffstat (limited to 'arch/sparc/lib/strlen_user.S')
-rw-r--r--arch/sparc/lib/strlen_user.S21
1 files changed, 14 insertions, 7 deletions
diff --git a/arch/sparc/lib/strlen_user.S b/arch/sparc/lib/strlen_user.S
index 6f2328e06..3dc3c3820 100644
--- a/arch/sparc/lib/strlen_user.S
+++ b/arch/sparc/lib/strlen_user.S
@@ -47,8 +47,11 @@
mov 3, %o0
.align 4
- .global C_LABEL(__strlen_user)
+ .global C_LABEL(__strlen_user), C_LABEL(__strnlen_user)
C_LABEL(__strlen_user):
+ sethi %hi(32768), %o1
+C_LABEL(__strnlen_user):
+ mov %o1, %g1
mov %o0, %o1
andcc %o0, 3, %g0
bne 10b
@@ -63,11 +66,16 @@ C_LABEL(__strlen_user):
2:
sub %o5, %o2, %o4
andcc %o4, %o3, %g0
- be 13b
+ bne 82f
add %o0, 4, %o0
+ sub %o0, %o1, %g2
+81: cmp %g2, %g1
+ blu 13b
+ mov %o0, %o4
+ ba,a 1f
/* Check every byte. */
- srl %o5, 24, %g5
+82: srl %o5, 24, %g5
andcc %g5, 0xff, %g0
be 1f
add %o0, -3, %o4
@@ -80,9 +88,9 @@ C_LABEL(__strlen_user):
be 1f
add %o4, 1, %o4
andcc %o5, 0xff, %g0
- bne,a 2b
-14:
- ld [%o0], %o5
+ bne 81b
+ sub %o0, %o1, %g2
+
add %o4, 1, %o4
1:
retl
@@ -101,4 +109,3 @@ C_LABEL(__strlen_user):
.word 11b, 9b
.word 12b, 9b
.word 13b, 9b
- .word 14b, 9b