Linux 3.16-rc2
[linux/fpc-iii.git] / arch / sparc / lib / strncmp_32.S
blobc0d1b568c1c561f443356678d06ae6b7d4831053
1 /*
2  * strncmp.S: Hand optimized Sparc assembly of GCC output from GNU libc
3  *            generic strncmp routine.
4  */
6 #include <linux/linkage.h>
8         .text
9 ENTRY(strncmp)
10         mov     %o0, %g3
11         mov     0, %o3
13         cmp     %o2, 3
14         ble     7f
15          mov    0, %g2
17         sra     %o2, 2, %o4
18         ldub    [%g3], %o3
21         ldub    [%o1], %g2
22         add     %g3, 1, %g3
23         and     %o3, 0xff, %o0
25         cmp     %o0, 0
26         be      8f
27          add    %o1, 1, %o1
29         cmp     %o0, %g2
30         be,a    1f
31          ldub   [%g3], %o3
33         retl
34          sub    %o0, %g2, %o0
37         ldub    [%o1], %g2
38         add     %g3,1, %g3
39         and     %o3, 0xff, %o0
41         cmp     %o0, 0
42         be      8f
43          add    %o1, 1, %o1
45         cmp     %o0, %g2
46         be,a    1f
47          ldub   [%g3], %o3
49         retl
50          sub    %o0, %g2, %o0
53         ldub    [%o1], %g2
54         add     %g3, 1, %g3
55         and     %o3, 0xff, %o0
57         cmp     %o0, 0
58         be      8f
59          add    %o1, 1, %o1
61         cmp     %o0, %g2
62         be,a    1f
63          ldub   [%g3], %o3
65         retl
66          sub    %o0, %g2, %o0
69         ldub    [%o1], %g2
70         add     %g3, 1, %g3
71         and     %o3, 0xff, %o0
73         cmp     %o0, 0
74         be      8f
75          add    %o1, 1, %o1
77         cmp     %o0, %g2
78         be      1f
79          add    %o4, -1, %o4
81         retl
82          sub    %o0, %g2, %o0
86         cmp     %o4, 0
87         bg,a    0b
88          ldub   [%g3], %o3
90         b       7f
91          and    %o2, 3, %o2
94         ldub    [%o1], %g2
95         add     %g3, 1, %g3
96         and     %o3, 0xff, %o0
98         cmp     %o0, 0
99         be      8f
100          add    %o1, 1, %o1
102         cmp     %o0, %g2
103         be      7f
104          add    %o2, -1, %o2
107         retl
108          sub    %o0, %g2, %o0
111         cmp     %o2, 0
112         bg,a    9b
113          ldub   [%g3], %o3
115         and     %g2, 0xff, %o0
116         retl
117          sub    %o3, %o0, %o0
118 ENDPROC(strncmp)