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)
122