linux/arch/sparc/lib/strncmp.S
Linus Torvalds 1da177e4c3 Linux-2.6.12-rc2
Initial git repository build. I'm not bothering with the full history,
even though we have it. We can create a separate "historical" git
archive of that later if we want to, and in the meantime it's about
3.2GB when imported into git - space that would just make the early
git days unnecessarily complicated, when we don't have a lot of good
infrastructure for it.

Let it rip!
2005-04-16 15:20:36 -07:00

119 lines
1.3 KiB
ArmAsm

/* $Id: strncmp.S,v 1.2 1996/09/09 02:47:20 davem Exp $
* strncmp.S: Hand optimized Sparc assembly of GCC output from GNU libc
* generic strncmp routine.
*/
.text
.align 4
.global __strncmp, strncmp
__strncmp:
strncmp:
mov %o0, %g3
mov 0, %o3
cmp %o2, 3
ble 7f
mov 0, %g2
sra %o2, 2, %o4
ldub [%g3], %o3
0:
ldub [%o1], %g2
add %g3, 1, %g3
and %o3, 0xff, %o0
cmp %o0, 0
be 8f
add %o1, 1, %o1
cmp %o0, %g2
be,a 1f
ldub [%g3], %o3
retl
sub %o0, %g2, %o0
1:
ldub [%o1], %g2
add %g3,1, %g3
and %o3, 0xff, %o0
cmp %o0, 0
be 8f
add %o1, 1, %o1
cmp %o0, %g2
be,a 1f
ldub [%g3], %o3
retl
sub %o0, %g2, %o0
1:
ldub [%o1], %g2
add %g3, 1, %g3
and %o3, 0xff, %o0
cmp %o0, 0
be 8f
add %o1, 1, %o1
cmp %o0, %g2
be,a 1f
ldub [%g3], %o3
retl
sub %o0, %g2, %o0
1:
ldub [%o1], %g2
add %g3, 1, %g3
and %o3, 0xff, %o0
cmp %o0, 0
be 8f
add %o1, 1, %o1
cmp %o0, %g2
be 1f
add %o4, -1, %o4
retl
sub %o0, %g2, %o0
1:
cmp %o4, 0
bg,a 0b
ldub [%g3], %o3
b 7f
and %o2, 3, %o2
9:
ldub [%o1], %g2
add %g3, 1, %g3
and %o3, 0xff, %o0
cmp %o0, 0
be 8f
add %o1, 1, %o1
cmp %o0, %g2
be 7f
add %o2, -1, %o2
8:
retl
sub %o0, %g2, %o0
7:
cmp %o2, 0
bg,a 9b
ldub [%g3], %o3
and %g2, 0xff, %o0
retl
sub %o3, %o0, %o0