Linux 2.6.31.6
[linux/fpc-iii.git] / arch / sparc / lib / strncmp_32.S
blob494ec664537ab45491a392bc781943d94dc1e9c6
1 /*
2  * strncmp.S: Hand optimized Sparc assembly of GCC output from GNU libc
3  *            generic strncmp routine.
4  */
6         .text
7         .align 4
8         .global __strncmp, strncmp
9 __strncmp:
10 strncmp:
11         mov     %o0, %g3
12         mov     0, %o3
14         cmp     %o2, 3
15         ble     7f
16          mov    0, %g2
18         sra     %o2, 2, %o4
19         ldub    [%g3], %o3
22         ldub    [%o1], %g2
23         add     %g3, 1, %g3
24         and     %o3, 0xff, %o0
26         cmp     %o0, 0
27         be      8f
28          add    %o1, 1, %o1
30         cmp     %o0, %g2
31         be,a    1f
32          ldub   [%g3], %o3
34         retl
35          sub    %o0, %g2, %o0
38         ldub    [%o1], %g2
39         add     %g3,1, %g3
40         and     %o3, 0xff, %o0
42         cmp     %o0, 0
43         be      8f
44          add    %o1, 1, %o1
46         cmp     %o0, %g2
47         be,a    1f
48          ldub   [%g3], %o3
50         retl
51          sub    %o0, %g2, %o0
54         ldub    [%o1], %g2
55         add     %g3, 1, %g3
56         and     %o3, 0xff, %o0
58         cmp     %o0, 0
59         be      8f
60          add    %o1, 1, %o1
62         cmp     %o0, %g2
63         be,a    1f
64          ldub   [%g3], %o3
66         retl
67          sub    %o0, %g2, %o0
70         ldub    [%o1], %g2
71         add     %g3, 1, %g3
72         and     %o3, 0xff, %o0
74         cmp     %o0, 0
75         be      8f
76          add    %o1, 1, %o1
78         cmp     %o0, %g2
79         be      1f
80          add    %o4, -1, %o4
82         retl
83          sub    %o0, %g2, %o0
87         cmp     %o4, 0
88         bg,a    0b
89          ldub   [%g3], %o3
91         b       7f
92          and    %o2, 3, %o2
95         ldub    [%o1], %g2
96         add     %g3, 1, %g3
97         and     %o3, 0xff, %o0
99         cmp     %o0, 0
100         be      8f
101          add    %o1, 1, %o1
103         cmp     %o0, %g2
104         be      7f
105          add    %o2, -1, %o2
108         retl
109          sub    %o0, %g2, %o0
112         cmp     %o2, 0
113         bg,a    9b
114          ldub   [%g3], %o3
116         and     %g2, 0xff, %o0
117         retl
118          sub    %o3, %o0, %o0