119 lines
1.2 KiB
ArmAsm
119 lines
1.2 KiB
ArmAsm
/*
|
|
* 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
|