123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- /*
- * strncmp.S: Hand optimized Sparc assembly of GCC output from GNU libc
- * generic strncmp routine.
- */
- #include <linux/linkage.h>
- .text
- ENTRY(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
- ENDPROC(strncmp)
|