xref: /linux/arch/sparc/lib/strncmp_32.S (revision bd628c1bed7902ec1f24ba0fe70758949146abbe)
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
11ENTRY(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
220:
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
381:
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
541:
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
701:
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
861:
87
88	cmp	%o4, 0
89	bg,a	0b
90	 ldub	[%g3], %o3
91
92	b	7f
93	 and	%o2, 3, %o2
94
959:
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
1088:
109	retl
110	 sub	%o0, %g2, %o0
111
1127:
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
120ENDPROC(strncmp)
121EXPORT_SYMBOL(strncmp)
122