b.liu | e958203 | 2025-04-17 19:18:16 +0800 | [diff] [blame^] | 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/linkage.h> | ||||
8 | #include <asm/export.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) |