xref: /openbmc/linux/arch/sparc/lib/memcmp.S (revision 1da177e4)
1	.text
2	.align 4
3	.global __memcmp, memcmp
4__memcmp:
5memcmp:
6#if 1
7	cmp	%o2, 0
8	ble	L3
9	 mov	0, %g3
10L5:
11	ldub	[%o0], %g2
12	ldub	[%o1], %g3
13	sub	%g2, %g3, %g2
14	mov	%g2, %g3
15	sll	%g2, 24, %g2
16
17	cmp	%g2, 0
18	bne	L3
19	 add	%o0, 1, %o0
20
21	add	%o2, -1, %o2
22
23	cmp	%o2, 0
24	bg	L5
25	 add	%o1, 1, %o1
26L3:
27	sll	%g3, 24, %o0
28	sra	%o0, 24, %o0
29
30	retl
31	 nop
32#else
33	save	%sp, -104, %sp
34	mov	%i2, %o4
35	mov	%i0, %o0
36
37	cmp	%o4, 15
38	ble	L72
39	 mov	%i1, %i2
40
41	andcc	%i2, 3, %g0
42	be	L161
43	 andcc	%o0, 3, %g2
44L75:
45	ldub	[%o0], %g3
46	ldub	[%i2], %g2
47	add	%o0,1, %o0
48
49	subcc	%g3, %g2, %i0
50	bne	L156
51	 add	%i2, 1, %i2
52
53	andcc	%i2, 3, %g0
54	bne	L75
55	 add	%o4, -1, %o4
56
57	andcc	%o0, 3, %g2
58L161:
59	bne,a	L78
60	 mov	%i2, %i1
61
62	mov	%o0, %i5
63	mov	%i2, %i3
64	srl	%o4, 2, %i4
65
66	cmp	%i4, 0
67	bge	L93
68	 mov	%i4, %g2
69
70	add %i4, 3, %g2
71L93:
72	sra	%g2, 2, %g2
73	sll	%g2, 2, %g2
74	sub	%i4, %g2, %g2
75
76	cmp	%g2, 1
77	be,a	L88
78	 add	%o0, 4, %i5
79
80	bg	L94
81	 cmp	%g2, 2
82
83	cmp	%g2, 0
84	be,a	L86
85	 ld	[%o0], %g3
86
87	b	L162
88	 ld	[%i5], %g3
89L94:
90	be	L81
91	 cmp	%g2, 3
92
93	be,a	L83
94	 add	%o0, -4, %i5
95
96	b	L162
97	 ld	[%i5], %g3
98L81:
99	add	%o0, -8, %i5
100	ld	[%o0], %g3
101	add	%i2, -8, %i3
102	ld	[%i2], %g2
103
104	b	L82
105	 add	%i4, 2, %i4
106L83:
107	ld	[%o0], %g4
108	add	%i2, -4, %i3
109	ld	[%i2], %g1
110
111	b	L84
112	 add	%i4, 1, %i4
113L86:
114	b	L87
115	 ld	[%i2], %g2
116L88:
117	add	%i2, 4, %i3
118	ld	[%o0], %g4
119	add	%i4, -1, %i4
120	ld	[%i2], %g1
121L95:
122	ld	[%i5], %g3
123L162:
124	cmp	%g4, %g1
125	be	L87
126	 ld	[%i3], %g2
127
128	cmp	%g4, %g1
129L163:
130	bleu	L114
131	 mov	-1, %i0
132
133	b	L114
134	 mov	1, %i0
135L87:
136	ld	[%i5 + 4], %g4
137	cmp	%g3, %g2
138	bne	L163
139	 ld	[%i3 + 4], %g1
140L84:
141	ld	[%i5 + 8], %g3
142
143	cmp	%g4, %g1
144	bne	L163
145	 ld	[%i3 + 8], %g2
146L82:
147	ld	[%i5 + 12], %g4
148	cmp	%g3, %g2
149	bne	L163
150	 ld	[%i3 + 12], %g1
151
152	add	%i5, 16, %i5
153
154	addcc	%i4, -4, %i4
155	bne	L95
156	 add	%i3, 16, %i3
157
158	cmp	%g4, %g1
159	bne	L163
160	 nop
161
162	b	L114
163	 mov	0, %i0
164L78:
165	srl	%o4, 2, %i0
166	and	%o0, -4, %i3
167	orcc	%i0, %g0, %g3
168	sll	%g2, 3, %o7
169	mov	32, %g2
170
171	bge	L129
172	 sub	%g2, %o7, %o1
173
174	add	%i0, 3, %g3
175L129:
176	sra	%g3, 2, %g2
177	sll	%g2, 2, %g2
178	sub	%i0, %g2, %g2
179
180	cmp	%g2, 1
181	be,a	L124
182	 ld	[%i3], %o3
183
184	bg	L130
185	 cmp	%g2, 2
186
187	cmp	%g2, 0
188	be,a	L122
189	 ld	[%i3], %o2
190
191	b	L164
192	sll	%o3, %o7, %g3
193L130:
194	be	L117
195	 cmp	%g2, 3
196
197	be,a	L119
198	 ld	[%i3], %g1
199
200	b	L164
201	 sll	%o3, %o7, %g3
202L117:
203	ld	[%i3], %g4
204	add	%i2, -8, %i1
205	ld	[%i3 + 4], %o3
206	add	%i0, 2, %i0
207	ld	[%i2], %i4
208
209	b	L118
210	 add	%i3, -4, %i3
211L119:
212	ld	[%i3 + 4], %g4
213	add	%i2, -4, %i1
214	ld	[%i2], %i5
215
216	b	L120
217	 add	%i0, 1, %i0
218L122:
219	ld	[%i3 + 4], %g1
220	ld	[%i2], %i4
221
222	b	L123
223	 add	%i3, 4, %i3
224L124:
225	add	%i2, 4, %i1
226	ld	[%i3 + 4], %o2
227	add	%i0, -1, %i0
228	ld	[%i2], %i5
229	add	%i3, 8, %i3
230L131:
231	sll	%o3, %o7, %g3
232L164:
233	srl	%o2, %o1, %g2
234	ld	[%i3], %g1
235	or	%g3, %g2, %g3
236
237	cmp	%g3, %i5
238	bne	L163
239	 ld	[%i1], %i4
240L123:
241	sll	%o2, %o7, %g3
242	srl	%g1, %o1, %g2
243	ld	[%i3 + 4], %g4
244	or	%g3, %g2, %g3
245
246	cmp	%g3, %i4
247	bne	L163
248	 ld	[%i1 + 4], %i5
249L120:
250	sll	%g1, %o7, %g3
251	srl	%g4, %o1, %g2
252	ld	[%i3 + 8], %o3
253	or	%g3, %g2, %g3
254
255	cmp	%g3, %i5
256	bne	L163
257	 ld	[%i1 + 8], %i4
258L118:
259	sll	%g4, %o7, %g3
260	srl	%o3, %o1, %g2
261	ld	[%i3 + 12], %o2
262	or	%g3, %g2, %g3
263
264	cmp	%g3, %i4
265	bne	L163
266	 ld	[%i1 + 12], %i5
267
268	add	%i3, 16, %i3
269	addcc	%i0, -4, %i0
270	bne	L131
271	 add	%i1, 16, %i1
272
273	sll	%o3, %o7, %g3
274	srl	%o2, %o1, %g2
275	or	%g3, %g2, %g3
276
277	cmp	%g3, %i5
278	be,a	L114
279	 mov	0, %i0
280
281	b,a L163
282L114:
283	cmp	%i0, 0
284	bne	L156
285	 and	%o4, -4, %g2
286
287	add	%o0, %g2, %o0
288	add	%i2, %g2, %i2
289	and	%o4, 3, %o4
290L72:
291	cmp	%o4, 0
292	be	L156
293	 mov	0, %i0
294
295	ldub	[%o0], %g3
296L165:
297	ldub	[%i2], %g2
298	add	%o0, 1, %o0
299
300	subcc	%g3, %g2, %i0
301	bne	L156
302	 add	%i2, 1, %i2
303
304	addcc	%o4, -1, %o4
305	bne,a	L165
306	 ldub	[%o0], %g3
307
308	mov	0, %i0
309L156:
310	ret
311	restore
312#endif
313