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