GNU Linux-libre 4.9.296-gnu1
[releases.git] / arch / sparc / lib / strncmp_32.S
1 /*
2  * strncmp.S: Hand optimized Sparc assembly of GCC output from GNU libc
3  *            generic strncmp routine.
4  */
5
6 #include <linux/linkage.h>
7 #include <asm/export.h>
8
9         .text
10 ENTRY(strncmp)
11         mov     %o0, %g3
12         mov     0, %o3
13
14         cmp     %o2, 3
15         ble     7f
16          mov    0, %g2
17
18         sra     %o2, 2, %o4
19         ldub    [%g3], %o3
20
21 0:
22         ldub    [%o1], %g2
23         add     %g3, 1, %g3
24         and     %o3, 0xff, %o0
25
26         cmp     %o0, 0
27         be      8f
28          add    %o1, 1, %o1
29
30         cmp     %o0, %g2
31         be,a    1f
32          ldub   [%g3], %o3
33
34         retl
35          sub    %o0, %g2, %o0
36
37 1:
38         ldub    [%o1], %g2
39         add     %g3,1, %g3
40         and     %o3, 0xff, %o0
41
42         cmp     %o0, 0
43         be      8f
44          add    %o1, 1, %o1
45
46         cmp     %o0, %g2
47         be,a    1f
48          ldub   [%g3], %o3
49
50         retl
51          sub    %o0, %g2, %o0
52
53 1:
54         ldub    [%o1], %g2
55         add     %g3, 1, %g3
56         and     %o3, 0xff, %o0
57
58         cmp     %o0, 0
59         be      8f
60          add    %o1, 1, %o1
61
62         cmp     %o0, %g2
63         be,a    1f
64          ldub   [%g3], %o3
65
66         retl
67          sub    %o0, %g2, %o0
68
69 1:
70         ldub    [%o1], %g2
71         add     %g3, 1, %g3
72         and     %o3, 0xff, %o0
73
74         cmp     %o0, 0
75         be      8f
76          add    %o1, 1, %o1
77
78         cmp     %o0, %g2
79         be      1f
80          add    %o4, -1, %o4
81
82         retl
83          sub    %o0, %g2, %o0
84
85 1:
86
87         cmp     %o4, 0
88         bg,a    0b
89          ldub   [%g3], %o3
90
91         b       7f
92          and    %o2, 3, %o2
93
94 9:
95         ldub    [%o1], %g2
96         add     %g3, 1, %g3
97         and     %o3, 0xff, %o0
98
99         cmp     %o0, 0
100         be      8f
101          add    %o1, 1, %o1
102
103         cmp     %o0, %g2
104         be      7f
105          add    %o2, -1, %o2
106
107 8:
108         retl
109          sub    %o0, %g2, %o0
110
111 7:
112         cmp     %o2, 0
113         bg,a    9b
114          ldub   [%g3], %o3
115
116         and     %g2, 0xff, %o0
117         retl
118          sub    %o3, %o0, %o0
119 ENDPROC(strncmp)
120 EXPORT_SYMBOL(strncmp)