xref: /linux/lib/raid/xor/sparc/xor-sparc64.S (revision 440d6635b20037bc9ad46b20817d7b61cef0fc1b)
1*7f963623SChristoph Hellwig/* SPDX-License-Identifier: GPL-2.0 */
2*7f963623SChristoph Hellwig/*
3*7f963623SChristoph Hellwig * High speed xor_block operation for RAID4/5 utilizing the
4*7f963623SChristoph Hellwig * UltraSparc Visual Instruction Set and Niagara store-init/twin-load.
5*7f963623SChristoph Hellwig *
6*7f963623SChristoph Hellwig * Copyright (C) 1997, 1999 Jakub Jelinek (jj@ultra.linux.cz)
7*7f963623SChristoph Hellwig * Copyright (C) 2006 David S. Miller <davem@davemloft.net>
8*7f963623SChristoph Hellwig */
9*7f963623SChristoph Hellwig
10*7f963623SChristoph Hellwig#include <linux/export.h>
11*7f963623SChristoph Hellwig#include <linux/linkage.h>
12*7f963623SChristoph Hellwig#include <asm/visasm.h>
13*7f963623SChristoph Hellwig#include <asm/asi.h>
14*7f963623SChristoph Hellwig#include <asm/dcu.h>
15*7f963623SChristoph Hellwig#include <asm/spitfire.h>
16*7f963623SChristoph Hellwig
17*7f963623SChristoph Hellwig/*
18*7f963623SChristoph Hellwig *	Requirements:
19*7f963623SChristoph Hellwig *	!(((long)dest | (long)sourceN) & (64 - 1)) &&
20*7f963623SChristoph Hellwig *	!(len & 127) && len >= 256
21*7f963623SChristoph Hellwig */
22*7f963623SChristoph Hellwig	.text
23*7f963623SChristoph Hellwig
24*7f963623SChristoph Hellwig	/* VIS versions. */
25*7f963623SChristoph HellwigENTRY(xor_vis_2)
26*7f963623SChristoph Hellwig	rd	%fprs, %o5
27*7f963623SChristoph Hellwig	andcc	%o5, FPRS_FEF|FPRS_DU, %g0
28*7f963623SChristoph Hellwig	be,pt	%icc, 0f
29*7f963623SChristoph Hellwig	 sethi	%hi(VISenter), %g1
30*7f963623SChristoph Hellwig	jmpl	%g1 + %lo(VISenter), %g7
31*7f963623SChristoph Hellwig	 add	%g7, 8, %g7
32*7f963623SChristoph Hellwig0:	wr	%g0, FPRS_FEF, %fprs
33*7f963623SChristoph Hellwig	rd	%asi, %g1
34*7f963623SChristoph Hellwig	wr	%g0, ASI_BLK_P, %asi
35*7f963623SChristoph Hellwig	membar	#LoadStore|#StoreLoad|#StoreStore
36*7f963623SChristoph Hellwig	sub	%o0, 128, %o0
37*7f963623SChristoph Hellwig	ldda	[%o1] %asi, %f0
38*7f963623SChristoph Hellwig	ldda	[%o2] %asi, %f16
39*7f963623SChristoph Hellwig
40*7f963623SChristoph Hellwig2:	ldda	[%o1 + 64] %asi, %f32
41*7f963623SChristoph Hellwig	fxor	%f0, %f16, %f16
42*7f963623SChristoph Hellwig	fxor	%f2, %f18, %f18
43*7f963623SChristoph Hellwig	fxor	%f4, %f20, %f20
44*7f963623SChristoph Hellwig	fxor	%f6, %f22, %f22
45*7f963623SChristoph Hellwig	fxor	%f8, %f24, %f24
46*7f963623SChristoph Hellwig	fxor	%f10, %f26, %f26
47*7f963623SChristoph Hellwig	fxor	%f12, %f28, %f28
48*7f963623SChristoph Hellwig	fxor	%f14, %f30, %f30
49*7f963623SChristoph Hellwig	stda	%f16, [%o1] %asi
50*7f963623SChristoph Hellwig	ldda	[%o2 + 64] %asi, %f48
51*7f963623SChristoph Hellwig	ldda	[%o1 + 128] %asi, %f0
52*7f963623SChristoph Hellwig	fxor	%f32, %f48, %f48
53*7f963623SChristoph Hellwig	fxor	%f34, %f50, %f50
54*7f963623SChristoph Hellwig	add	%o1, 128, %o1
55*7f963623SChristoph Hellwig	fxor	%f36, %f52, %f52
56*7f963623SChristoph Hellwig	add	%o2, 128, %o2
57*7f963623SChristoph Hellwig	fxor	%f38, %f54, %f54
58*7f963623SChristoph Hellwig	subcc	%o0, 128, %o0
59*7f963623SChristoph Hellwig	fxor	%f40, %f56, %f56
60*7f963623SChristoph Hellwig	fxor	%f42, %f58, %f58
61*7f963623SChristoph Hellwig	fxor	%f44, %f60, %f60
62*7f963623SChristoph Hellwig	fxor	%f46, %f62, %f62
63*7f963623SChristoph Hellwig	stda	%f48, [%o1 - 64] %asi
64*7f963623SChristoph Hellwig	bne,pt	%xcc, 2b
65*7f963623SChristoph Hellwig	 ldda	[%o2] %asi, %f16
66*7f963623SChristoph Hellwig
67*7f963623SChristoph Hellwig	ldda	[%o1 + 64] %asi, %f32
68*7f963623SChristoph Hellwig	fxor	%f0, %f16, %f16
69*7f963623SChristoph Hellwig	fxor	%f2, %f18, %f18
70*7f963623SChristoph Hellwig	fxor	%f4, %f20, %f20
71*7f963623SChristoph Hellwig	fxor	%f6, %f22, %f22
72*7f963623SChristoph Hellwig	fxor	%f8, %f24, %f24
73*7f963623SChristoph Hellwig	fxor	%f10, %f26, %f26
74*7f963623SChristoph Hellwig	fxor	%f12, %f28, %f28
75*7f963623SChristoph Hellwig	fxor	%f14, %f30, %f30
76*7f963623SChristoph Hellwig	stda	%f16, [%o1] %asi
77*7f963623SChristoph Hellwig	ldda	[%o2 + 64] %asi, %f48
78*7f963623SChristoph Hellwig	membar	#Sync
79*7f963623SChristoph Hellwig	fxor	%f32, %f48, %f48
80*7f963623SChristoph Hellwig	fxor	%f34, %f50, %f50
81*7f963623SChristoph Hellwig	fxor	%f36, %f52, %f52
82*7f963623SChristoph Hellwig	fxor	%f38, %f54, %f54
83*7f963623SChristoph Hellwig	fxor	%f40, %f56, %f56
84*7f963623SChristoph Hellwig	fxor	%f42, %f58, %f58
85*7f963623SChristoph Hellwig	fxor	%f44, %f60, %f60
86*7f963623SChristoph Hellwig	fxor	%f46, %f62, %f62
87*7f963623SChristoph Hellwig	stda	%f48, [%o1 + 64] %asi
88*7f963623SChristoph Hellwig	membar	#Sync|#StoreStore|#StoreLoad
89*7f963623SChristoph Hellwig	wr	%g1, %g0, %asi
90*7f963623SChristoph Hellwig	retl
91*7f963623SChristoph Hellwig	  wr	%g0, 0, %fprs
92*7f963623SChristoph HellwigENDPROC(xor_vis_2)
93*7f963623SChristoph Hellwig
94*7f963623SChristoph HellwigENTRY(xor_vis_3)
95*7f963623SChristoph Hellwig	rd	%fprs, %o5
96*7f963623SChristoph Hellwig	andcc	%o5, FPRS_FEF|FPRS_DU, %g0
97*7f963623SChristoph Hellwig	be,pt	%icc, 0f
98*7f963623SChristoph Hellwig	 sethi	%hi(VISenter), %g1
99*7f963623SChristoph Hellwig	jmpl	%g1 + %lo(VISenter), %g7
100*7f963623SChristoph Hellwig	 add	%g7, 8, %g7
101*7f963623SChristoph Hellwig0:	wr	%g0, FPRS_FEF, %fprs
102*7f963623SChristoph Hellwig	rd	%asi, %g1
103*7f963623SChristoph Hellwig	wr	%g0, ASI_BLK_P, %asi
104*7f963623SChristoph Hellwig	membar	#LoadStore|#StoreLoad|#StoreStore
105*7f963623SChristoph Hellwig	sub	%o0, 64, %o0
106*7f963623SChristoph Hellwig	ldda	[%o1] %asi, %f0
107*7f963623SChristoph Hellwig	ldda	[%o2] %asi, %f16
108*7f963623SChristoph Hellwig
109*7f963623SChristoph Hellwig3:	ldda	[%o3] %asi, %f32
110*7f963623SChristoph Hellwig	fxor	%f0, %f16, %f48
111*7f963623SChristoph Hellwig	fxor	%f2, %f18, %f50
112*7f963623SChristoph Hellwig	add	%o1, 64, %o1
113*7f963623SChristoph Hellwig	fxor	%f4, %f20, %f52
114*7f963623SChristoph Hellwig	fxor	%f6, %f22, %f54
115*7f963623SChristoph Hellwig	add	%o2, 64, %o2
116*7f963623SChristoph Hellwig	fxor	%f8, %f24, %f56
117*7f963623SChristoph Hellwig	fxor	%f10, %f26, %f58
118*7f963623SChristoph Hellwig	fxor	%f12, %f28, %f60
119*7f963623SChristoph Hellwig	fxor	%f14, %f30, %f62
120*7f963623SChristoph Hellwig	ldda	[%o1] %asi, %f0
121*7f963623SChristoph Hellwig	fxor	%f48, %f32, %f48
122*7f963623SChristoph Hellwig	fxor	%f50, %f34, %f50
123*7f963623SChristoph Hellwig	fxor	%f52, %f36, %f52
124*7f963623SChristoph Hellwig	fxor	%f54, %f38, %f54
125*7f963623SChristoph Hellwig	add	%o3, 64, %o3
126*7f963623SChristoph Hellwig	fxor	%f56, %f40, %f56
127*7f963623SChristoph Hellwig	fxor	%f58, %f42, %f58
128*7f963623SChristoph Hellwig	subcc	%o0, 64, %o0
129*7f963623SChristoph Hellwig	fxor	%f60, %f44, %f60
130*7f963623SChristoph Hellwig	fxor	%f62, %f46, %f62
131*7f963623SChristoph Hellwig	stda	%f48, [%o1 - 64] %asi
132*7f963623SChristoph Hellwig	bne,pt	%xcc, 3b
133*7f963623SChristoph Hellwig	 ldda	[%o2] %asi, %f16
134*7f963623SChristoph Hellwig
135*7f963623SChristoph Hellwig	ldda	[%o3] %asi, %f32
136*7f963623SChristoph Hellwig	fxor	%f0, %f16, %f48
137*7f963623SChristoph Hellwig	fxor	%f2, %f18, %f50
138*7f963623SChristoph Hellwig	fxor	%f4, %f20, %f52
139*7f963623SChristoph Hellwig	fxor	%f6, %f22, %f54
140*7f963623SChristoph Hellwig	fxor	%f8, %f24, %f56
141*7f963623SChristoph Hellwig	fxor	%f10, %f26, %f58
142*7f963623SChristoph Hellwig	fxor	%f12, %f28, %f60
143*7f963623SChristoph Hellwig	fxor	%f14, %f30, %f62
144*7f963623SChristoph Hellwig	membar	#Sync
145*7f963623SChristoph Hellwig	fxor	%f48, %f32, %f48
146*7f963623SChristoph Hellwig	fxor	%f50, %f34, %f50
147*7f963623SChristoph Hellwig	fxor	%f52, %f36, %f52
148*7f963623SChristoph Hellwig	fxor	%f54, %f38, %f54
149*7f963623SChristoph Hellwig	fxor	%f56, %f40, %f56
150*7f963623SChristoph Hellwig	fxor	%f58, %f42, %f58
151*7f963623SChristoph Hellwig	fxor	%f60, %f44, %f60
152*7f963623SChristoph Hellwig	fxor	%f62, %f46, %f62
153*7f963623SChristoph Hellwig	stda	%f48, [%o1] %asi
154*7f963623SChristoph Hellwig	membar	#Sync|#StoreStore|#StoreLoad
155*7f963623SChristoph Hellwig	wr	%g1, %g0, %asi
156*7f963623SChristoph Hellwig	retl
157*7f963623SChristoph Hellwig	 wr	%g0, 0, %fprs
158*7f963623SChristoph HellwigENDPROC(xor_vis_3)
159*7f963623SChristoph Hellwig
160*7f963623SChristoph HellwigENTRY(xor_vis_4)
161*7f963623SChristoph Hellwig	rd	%fprs, %o5
162*7f963623SChristoph Hellwig	andcc	%o5, FPRS_FEF|FPRS_DU, %g0
163*7f963623SChristoph Hellwig	be,pt	%icc, 0f
164*7f963623SChristoph Hellwig	 sethi	%hi(VISenter), %g1
165*7f963623SChristoph Hellwig	jmpl	%g1 + %lo(VISenter), %g7
166*7f963623SChristoph Hellwig	 add	%g7, 8, %g7
167*7f963623SChristoph Hellwig0:	wr	%g0, FPRS_FEF, %fprs
168*7f963623SChristoph Hellwig	rd	%asi, %g1
169*7f963623SChristoph Hellwig	wr	%g0, ASI_BLK_P, %asi
170*7f963623SChristoph Hellwig	membar	#LoadStore|#StoreLoad|#StoreStore
171*7f963623SChristoph Hellwig	sub	%o0, 64, %o0
172*7f963623SChristoph Hellwig	ldda	[%o1] %asi, %f0
173*7f963623SChristoph Hellwig	ldda	[%o2] %asi, %f16
174*7f963623SChristoph Hellwig
175*7f963623SChristoph Hellwig4:	ldda	[%o3] %asi, %f32
176*7f963623SChristoph Hellwig	fxor	%f0, %f16, %f16
177*7f963623SChristoph Hellwig	fxor	%f2, %f18, %f18
178*7f963623SChristoph Hellwig	add	%o1, 64, %o1
179*7f963623SChristoph Hellwig	fxor	%f4, %f20, %f20
180*7f963623SChristoph Hellwig	fxor	%f6, %f22, %f22
181*7f963623SChristoph Hellwig	add	%o2, 64, %o2
182*7f963623SChristoph Hellwig	fxor	%f8, %f24, %f24
183*7f963623SChristoph Hellwig	fxor	%f10, %f26, %f26
184*7f963623SChristoph Hellwig	fxor	%f12, %f28, %f28
185*7f963623SChristoph Hellwig	fxor	%f14, %f30, %f30
186*7f963623SChristoph Hellwig	ldda	[%o4] %asi, %f48
187*7f963623SChristoph Hellwig	fxor	%f16, %f32, %f32
188*7f963623SChristoph Hellwig	fxor	%f18, %f34, %f34
189*7f963623SChristoph Hellwig	fxor	%f20, %f36, %f36
190*7f963623SChristoph Hellwig	fxor	%f22, %f38, %f38
191*7f963623SChristoph Hellwig	add	%o3, 64, %o3
192*7f963623SChristoph Hellwig	fxor	%f24, %f40, %f40
193*7f963623SChristoph Hellwig	fxor	%f26, %f42, %f42
194*7f963623SChristoph Hellwig	fxor	%f28, %f44, %f44
195*7f963623SChristoph Hellwig	fxor	%f30, %f46, %f46
196*7f963623SChristoph Hellwig	ldda	[%o1] %asi, %f0
197*7f963623SChristoph Hellwig	fxor	%f32, %f48, %f48
198*7f963623SChristoph Hellwig	fxor	%f34, %f50, %f50
199*7f963623SChristoph Hellwig	fxor	%f36, %f52, %f52
200*7f963623SChristoph Hellwig	add	%o4, 64, %o4
201*7f963623SChristoph Hellwig	fxor	%f38, %f54, %f54
202*7f963623SChristoph Hellwig	fxor	%f40, %f56, %f56
203*7f963623SChristoph Hellwig	fxor	%f42, %f58, %f58
204*7f963623SChristoph Hellwig	subcc	%o0, 64, %o0
205*7f963623SChristoph Hellwig	fxor	%f44, %f60, %f60
206*7f963623SChristoph Hellwig	fxor	%f46, %f62, %f62
207*7f963623SChristoph Hellwig	stda	%f48, [%o1 - 64] %asi
208*7f963623SChristoph Hellwig	bne,pt	%xcc, 4b
209*7f963623SChristoph Hellwig	 ldda	[%o2] %asi, %f16
210*7f963623SChristoph Hellwig
211*7f963623SChristoph Hellwig	ldda	[%o3] %asi, %f32
212*7f963623SChristoph Hellwig	fxor	%f0, %f16, %f16
213*7f963623SChristoph Hellwig	fxor	%f2, %f18, %f18
214*7f963623SChristoph Hellwig	fxor	%f4, %f20, %f20
215*7f963623SChristoph Hellwig	fxor	%f6, %f22, %f22
216*7f963623SChristoph Hellwig	fxor	%f8, %f24, %f24
217*7f963623SChristoph Hellwig	fxor	%f10, %f26, %f26
218*7f963623SChristoph Hellwig	fxor	%f12, %f28, %f28
219*7f963623SChristoph Hellwig	fxor	%f14, %f30, %f30
220*7f963623SChristoph Hellwig	ldda	[%o4] %asi, %f48
221*7f963623SChristoph Hellwig	fxor	%f16, %f32, %f32
222*7f963623SChristoph Hellwig	fxor	%f18, %f34, %f34
223*7f963623SChristoph Hellwig	fxor	%f20, %f36, %f36
224*7f963623SChristoph Hellwig	fxor	%f22, %f38, %f38
225*7f963623SChristoph Hellwig	fxor	%f24, %f40, %f40
226*7f963623SChristoph Hellwig	fxor	%f26, %f42, %f42
227*7f963623SChristoph Hellwig	fxor	%f28, %f44, %f44
228*7f963623SChristoph Hellwig	fxor	%f30, %f46, %f46
229*7f963623SChristoph Hellwig	membar	#Sync
230*7f963623SChristoph Hellwig	fxor	%f32, %f48, %f48
231*7f963623SChristoph Hellwig	fxor	%f34, %f50, %f50
232*7f963623SChristoph Hellwig	fxor	%f36, %f52, %f52
233*7f963623SChristoph Hellwig	fxor	%f38, %f54, %f54
234*7f963623SChristoph Hellwig	fxor	%f40, %f56, %f56
235*7f963623SChristoph Hellwig	fxor	%f42, %f58, %f58
236*7f963623SChristoph Hellwig	fxor	%f44, %f60, %f60
237*7f963623SChristoph Hellwig	fxor	%f46, %f62, %f62
238*7f963623SChristoph Hellwig	stda	%f48, [%o1] %asi
239*7f963623SChristoph Hellwig	membar	#Sync|#StoreStore|#StoreLoad
240*7f963623SChristoph Hellwig	wr	%g1, %g0, %asi
241*7f963623SChristoph Hellwig	retl
242*7f963623SChristoph Hellwig	 wr	%g0, 0, %fprs
243*7f963623SChristoph HellwigENDPROC(xor_vis_4)
244*7f963623SChristoph Hellwig
245*7f963623SChristoph HellwigENTRY(xor_vis_5)
246*7f963623SChristoph Hellwig	save	%sp, -192, %sp
247*7f963623SChristoph Hellwig	rd	%fprs, %o5
248*7f963623SChristoph Hellwig	andcc	%o5, FPRS_FEF|FPRS_DU, %g0
249*7f963623SChristoph Hellwig	be,pt	%icc, 0f
250*7f963623SChristoph Hellwig	 sethi	%hi(VISenter), %g1
251*7f963623SChristoph Hellwig	jmpl	%g1 + %lo(VISenter), %g7
252*7f963623SChristoph Hellwig	 add	%g7, 8, %g7
253*7f963623SChristoph Hellwig0:	wr	%g0, FPRS_FEF, %fprs
254*7f963623SChristoph Hellwig	rd	%asi, %g1
255*7f963623SChristoph Hellwig	wr	%g0, ASI_BLK_P, %asi
256*7f963623SChristoph Hellwig	membar	#LoadStore|#StoreLoad|#StoreStore
257*7f963623SChristoph Hellwig	sub	%i0, 64, %i0
258*7f963623SChristoph Hellwig	ldda	[%i1] %asi, %f0
259*7f963623SChristoph Hellwig	ldda	[%i2] %asi, %f16
260*7f963623SChristoph Hellwig
261*7f963623SChristoph Hellwig5:	ldda	[%i3] %asi, %f32
262*7f963623SChristoph Hellwig	fxor	%f0, %f16, %f48
263*7f963623SChristoph Hellwig	fxor	%f2, %f18, %f50
264*7f963623SChristoph Hellwig	add	%i1, 64, %i1
265*7f963623SChristoph Hellwig	fxor	%f4, %f20, %f52
266*7f963623SChristoph Hellwig	fxor	%f6, %f22, %f54
267*7f963623SChristoph Hellwig	add	%i2, 64, %i2
268*7f963623SChristoph Hellwig	fxor	%f8, %f24, %f56
269*7f963623SChristoph Hellwig	fxor	%f10, %f26, %f58
270*7f963623SChristoph Hellwig	fxor	%f12, %f28, %f60
271*7f963623SChristoph Hellwig	fxor	%f14, %f30, %f62
272*7f963623SChristoph Hellwig	ldda	[%i4] %asi, %f16
273*7f963623SChristoph Hellwig	fxor	%f48, %f32, %f48
274*7f963623SChristoph Hellwig	fxor	%f50, %f34, %f50
275*7f963623SChristoph Hellwig	fxor	%f52, %f36, %f52
276*7f963623SChristoph Hellwig	fxor	%f54, %f38, %f54
277*7f963623SChristoph Hellwig	add	%i3, 64, %i3
278*7f963623SChristoph Hellwig	fxor	%f56, %f40, %f56
279*7f963623SChristoph Hellwig	fxor	%f58, %f42, %f58
280*7f963623SChristoph Hellwig	fxor	%f60, %f44, %f60
281*7f963623SChristoph Hellwig	fxor	%f62, %f46, %f62
282*7f963623SChristoph Hellwig	ldda	[%i5] %asi, %f32
283*7f963623SChristoph Hellwig	fxor	%f48, %f16, %f48
284*7f963623SChristoph Hellwig	fxor	%f50, %f18, %f50
285*7f963623SChristoph Hellwig	add	%i4, 64, %i4
286*7f963623SChristoph Hellwig	fxor	%f52, %f20, %f52
287*7f963623SChristoph Hellwig	fxor	%f54, %f22, %f54
288*7f963623SChristoph Hellwig	add	%i5, 64, %i5
289*7f963623SChristoph Hellwig	fxor	%f56, %f24, %f56
290*7f963623SChristoph Hellwig	fxor	%f58, %f26, %f58
291*7f963623SChristoph Hellwig	fxor	%f60, %f28, %f60
292*7f963623SChristoph Hellwig	fxor	%f62, %f30, %f62
293*7f963623SChristoph Hellwig	ldda	[%i1] %asi, %f0
294*7f963623SChristoph Hellwig	fxor	%f48, %f32, %f48
295*7f963623SChristoph Hellwig	fxor	%f50, %f34, %f50
296*7f963623SChristoph Hellwig	fxor	%f52, %f36, %f52
297*7f963623SChristoph Hellwig	fxor	%f54, %f38, %f54
298*7f963623SChristoph Hellwig	fxor	%f56, %f40, %f56
299*7f963623SChristoph Hellwig	fxor	%f58, %f42, %f58
300*7f963623SChristoph Hellwig	subcc	%i0, 64, %i0
301*7f963623SChristoph Hellwig	fxor	%f60, %f44, %f60
302*7f963623SChristoph Hellwig	fxor	%f62, %f46, %f62
303*7f963623SChristoph Hellwig	stda	%f48, [%i1 - 64] %asi
304*7f963623SChristoph Hellwig	bne,pt	%xcc, 5b
305*7f963623SChristoph Hellwig	 ldda	[%i2] %asi, %f16
306*7f963623SChristoph Hellwig
307*7f963623SChristoph Hellwig	ldda	[%i3] %asi, %f32
308*7f963623SChristoph Hellwig	fxor	%f0, %f16, %f48
309*7f963623SChristoph Hellwig	fxor	%f2, %f18, %f50
310*7f963623SChristoph Hellwig	fxor	%f4, %f20, %f52
311*7f963623SChristoph Hellwig	fxor	%f6, %f22, %f54
312*7f963623SChristoph Hellwig	fxor	%f8, %f24, %f56
313*7f963623SChristoph Hellwig	fxor	%f10, %f26, %f58
314*7f963623SChristoph Hellwig	fxor	%f12, %f28, %f60
315*7f963623SChristoph Hellwig	fxor	%f14, %f30, %f62
316*7f963623SChristoph Hellwig	ldda	[%i4] %asi, %f16
317*7f963623SChristoph Hellwig	fxor	%f48, %f32, %f48
318*7f963623SChristoph Hellwig	fxor	%f50, %f34, %f50
319*7f963623SChristoph Hellwig	fxor	%f52, %f36, %f52
320*7f963623SChristoph Hellwig	fxor	%f54, %f38, %f54
321*7f963623SChristoph Hellwig	fxor	%f56, %f40, %f56
322*7f963623SChristoph Hellwig	fxor	%f58, %f42, %f58
323*7f963623SChristoph Hellwig	fxor	%f60, %f44, %f60
324*7f963623SChristoph Hellwig	fxor	%f62, %f46, %f62
325*7f963623SChristoph Hellwig	ldda	[%i5] %asi, %f32
326*7f963623SChristoph Hellwig	fxor	%f48, %f16, %f48
327*7f963623SChristoph Hellwig	fxor	%f50, %f18, %f50
328*7f963623SChristoph Hellwig	fxor	%f52, %f20, %f52
329*7f963623SChristoph Hellwig	fxor	%f54, %f22, %f54
330*7f963623SChristoph Hellwig	fxor	%f56, %f24, %f56
331*7f963623SChristoph Hellwig	fxor	%f58, %f26, %f58
332*7f963623SChristoph Hellwig	fxor	%f60, %f28, %f60
333*7f963623SChristoph Hellwig	fxor	%f62, %f30, %f62
334*7f963623SChristoph Hellwig	membar	#Sync
335*7f963623SChristoph Hellwig	fxor	%f48, %f32, %f48
336*7f963623SChristoph Hellwig	fxor	%f50, %f34, %f50
337*7f963623SChristoph Hellwig	fxor	%f52, %f36, %f52
338*7f963623SChristoph Hellwig	fxor	%f54, %f38, %f54
339*7f963623SChristoph Hellwig	fxor	%f56, %f40, %f56
340*7f963623SChristoph Hellwig	fxor	%f58, %f42, %f58
341*7f963623SChristoph Hellwig	fxor	%f60, %f44, %f60
342*7f963623SChristoph Hellwig	fxor	%f62, %f46, %f62
343*7f963623SChristoph Hellwig	stda	%f48, [%i1] %asi
344*7f963623SChristoph Hellwig	membar	#Sync|#StoreStore|#StoreLoad
345*7f963623SChristoph Hellwig	wr	%g1, %g0, %asi
346*7f963623SChristoph Hellwig	wr	%g0, 0, %fprs
347*7f963623SChristoph Hellwig	ret
348*7f963623SChristoph Hellwig	 restore
349*7f963623SChristoph HellwigENDPROC(xor_vis_5)
350*7f963623SChristoph Hellwig
351*7f963623SChristoph Hellwig	/* Niagara versions. */
352*7f963623SChristoph HellwigENTRY(xor_niagara_2) /* %o0=bytes, %o1=dest, %o2=src */
353*7f963623SChristoph Hellwig	save		%sp, -192, %sp
354*7f963623SChristoph Hellwig	prefetch	[%i1], #n_writes
355*7f963623SChristoph Hellwig	prefetch	[%i2], #one_read
356*7f963623SChristoph Hellwig	rd		%asi, %g7
357*7f963623SChristoph Hellwig	wr		%g0, ASI_BLK_INIT_QUAD_LDD_P, %asi
358*7f963623SChristoph Hellwig	srlx		%i0, 6, %g1
359*7f963623SChristoph Hellwig	mov		%i1, %i0
360*7f963623SChristoph Hellwig	mov		%i2, %i1
361*7f963623SChristoph Hellwig1:	ldda		[%i1 + 0x00] %asi, %i2	/* %i2/%i3 = src  + 0x00 */
362*7f963623SChristoph Hellwig	ldda		[%i1 + 0x10] %asi, %i4	/* %i4/%i5 = src  + 0x10 */
363*7f963623SChristoph Hellwig	ldda		[%i1 + 0x20] %asi, %g2	/* %g2/%g3 = src  + 0x20 */
364*7f963623SChristoph Hellwig	ldda		[%i1 + 0x30] %asi, %l0	/* %l0/%l1 = src  + 0x30 */
365*7f963623SChristoph Hellwig	prefetch	[%i1 + 0x40], #one_read
366*7f963623SChristoph Hellwig	ldda		[%i0 + 0x00] %asi, %o0  /* %o0/%o1 = dest + 0x00 */
367*7f963623SChristoph Hellwig	ldda		[%i0 + 0x10] %asi, %o2  /* %o2/%o3 = dest + 0x10 */
368*7f963623SChristoph Hellwig	ldda		[%i0 + 0x20] %asi, %o4  /* %o4/%o5 = dest + 0x20 */
369*7f963623SChristoph Hellwig	ldda		[%i0 + 0x30] %asi, %l2  /* %l2/%l3 = dest + 0x30 */
370*7f963623SChristoph Hellwig	prefetch	[%i0 + 0x40], #n_writes
371*7f963623SChristoph Hellwig	xor		%o0, %i2, %o0
372*7f963623SChristoph Hellwig	xor		%o1, %i3, %o1
373*7f963623SChristoph Hellwig	stxa		%o0, [%i0 + 0x00] %asi
374*7f963623SChristoph Hellwig	stxa		%o1, [%i0 + 0x08] %asi
375*7f963623SChristoph Hellwig	xor		%o2, %i4, %o2
376*7f963623SChristoph Hellwig	xor		%o3, %i5, %o3
377*7f963623SChristoph Hellwig	stxa		%o2, [%i0 + 0x10] %asi
378*7f963623SChristoph Hellwig	stxa		%o3, [%i0 + 0x18] %asi
379*7f963623SChristoph Hellwig	xor		%o4, %g2, %o4
380*7f963623SChristoph Hellwig	xor		%o5, %g3, %o5
381*7f963623SChristoph Hellwig	stxa		%o4, [%i0 + 0x20] %asi
382*7f963623SChristoph Hellwig	stxa		%o5, [%i0 + 0x28] %asi
383*7f963623SChristoph Hellwig	xor		%l2, %l0, %l2
384*7f963623SChristoph Hellwig	xor		%l3, %l1, %l3
385*7f963623SChristoph Hellwig	stxa		%l2, [%i0 + 0x30] %asi
386*7f963623SChristoph Hellwig	stxa		%l3, [%i0 + 0x38] %asi
387*7f963623SChristoph Hellwig	add		%i0, 0x40, %i0
388*7f963623SChristoph Hellwig	subcc		%g1, 1, %g1
389*7f963623SChristoph Hellwig	bne,pt		%xcc, 1b
390*7f963623SChristoph Hellwig	 add		%i1, 0x40, %i1
391*7f963623SChristoph Hellwig	membar		#Sync
392*7f963623SChristoph Hellwig	wr		%g7, 0x0, %asi
393*7f963623SChristoph Hellwig	ret
394*7f963623SChristoph Hellwig	 restore
395*7f963623SChristoph HellwigENDPROC(xor_niagara_2)
396*7f963623SChristoph Hellwig
397*7f963623SChristoph HellwigENTRY(xor_niagara_3) /* %o0=bytes, %o1=dest, %o2=src1, %o3=src2 */
398*7f963623SChristoph Hellwig	save		%sp, -192, %sp
399*7f963623SChristoph Hellwig	prefetch	[%i1], #n_writes
400*7f963623SChristoph Hellwig	prefetch	[%i2], #one_read
401*7f963623SChristoph Hellwig	prefetch	[%i3], #one_read
402*7f963623SChristoph Hellwig	rd		%asi, %g7
403*7f963623SChristoph Hellwig	wr		%g0, ASI_BLK_INIT_QUAD_LDD_P, %asi
404*7f963623SChristoph Hellwig	srlx		%i0, 6, %g1
405*7f963623SChristoph Hellwig	mov		%i1, %i0
406*7f963623SChristoph Hellwig	mov		%i2, %i1
407*7f963623SChristoph Hellwig	mov		%i3, %l7
408*7f963623SChristoph Hellwig1:	ldda		[%i1 + 0x00] %asi, %i2	/* %i2/%i3 = src1 + 0x00 */
409*7f963623SChristoph Hellwig	ldda		[%i1 + 0x10] %asi, %i4	/* %i4/%i5 = src1 + 0x10 */
410*7f963623SChristoph Hellwig	ldda		[%l7 + 0x00] %asi, %g2	/* %g2/%g3 = src2 + 0x00 */
411*7f963623SChristoph Hellwig	ldda		[%l7 + 0x10] %asi, %l0	/* %l0/%l1 = src2 + 0x10 */
412*7f963623SChristoph Hellwig	ldda		[%i0 + 0x00] %asi, %o0  /* %o0/%o1 = dest + 0x00 */
413*7f963623SChristoph Hellwig	ldda		[%i0 + 0x10] %asi, %o2  /* %o2/%o3 = dest + 0x10 */
414*7f963623SChristoph Hellwig	xor		%g2, %i2, %g2
415*7f963623SChristoph Hellwig	xor		%g3, %i3, %g3
416*7f963623SChristoph Hellwig	xor		%o0, %g2, %o0
417*7f963623SChristoph Hellwig	xor		%o1, %g3, %o1
418*7f963623SChristoph Hellwig	stxa		%o0, [%i0 + 0x00] %asi
419*7f963623SChristoph Hellwig	stxa		%o1, [%i0 + 0x08] %asi
420*7f963623SChristoph Hellwig	ldda		[%i1 + 0x20] %asi, %i2	/* %i2/%i3 = src1 + 0x20 */
421*7f963623SChristoph Hellwig	ldda		[%l7 + 0x20] %asi, %g2	/* %g2/%g3 = src2 + 0x20 */
422*7f963623SChristoph Hellwig	ldda		[%i0 + 0x20] %asi, %o0	/* %o0/%o1 = dest + 0x20 */
423*7f963623SChristoph Hellwig	xor		%l0, %i4, %l0
424*7f963623SChristoph Hellwig	xor		%l1, %i5, %l1
425*7f963623SChristoph Hellwig	xor		%o2, %l0, %o2
426*7f963623SChristoph Hellwig	xor		%o3, %l1, %o3
427*7f963623SChristoph Hellwig	stxa		%o2, [%i0 + 0x10] %asi
428*7f963623SChristoph Hellwig	stxa		%o3, [%i0 + 0x18] %asi
429*7f963623SChristoph Hellwig	ldda		[%i1 + 0x30] %asi, %i4	/* %i4/%i5 = src1 + 0x30 */
430*7f963623SChristoph Hellwig	ldda		[%l7 + 0x30] %asi, %l0	/* %l0/%l1 = src2 + 0x30 */
431*7f963623SChristoph Hellwig	ldda		[%i0 + 0x30] %asi, %o2	/* %o2/%o3 = dest + 0x30 */
432*7f963623SChristoph Hellwig	prefetch	[%i1 + 0x40], #one_read
433*7f963623SChristoph Hellwig	prefetch	[%l7 + 0x40], #one_read
434*7f963623SChristoph Hellwig	prefetch	[%i0 + 0x40], #n_writes
435*7f963623SChristoph Hellwig	xor		%g2, %i2, %g2
436*7f963623SChristoph Hellwig	xor		%g3, %i3, %g3
437*7f963623SChristoph Hellwig	xor		%o0, %g2, %o0
438*7f963623SChristoph Hellwig	xor		%o1, %g3, %o1
439*7f963623SChristoph Hellwig	stxa		%o0, [%i0 + 0x20] %asi
440*7f963623SChristoph Hellwig	stxa		%o1, [%i0 + 0x28] %asi
441*7f963623SChristoph Hellwig	xor		%l0, %i4, %l0
442*7f963623SChristoph Hellwig	xor		%l1, %i5, %l1
443*7f963623SChristoph Hellwig	xor		%o2, %l0, %o2
444*7f963623SChristoph Hellwig	xor		%o3, %l1, %o3
445*7f963623SChristoph Hellwig	stxa		%o2, [%i0 + 0x30] %asi
446*7f963623SChristoph Hellwig	stxa		%o3, [%i0 + 0x38] %asi
447*7f963623SChristoph Hellwig	add		%i0, 0x40, %i0
448*7f963623SChristoph Hellwig	add		%i1, 0x40, %i1
449*7f963623SChristoph Hellwig	subcc		%g1, 1, %g1
450*7f963623SChristoph Hellwig	bne,pt		%xcc, 1b
451*7f963623SChristoph Hellwig	 add		%l7, 0x40, %l7
452*7f963623SChristoph Hellwig	membar		#Sync
453*7f963623SChristoph Hellwig	wr		%g7, 0x0, %asi
454*7f963623SChristoph Hellwig	ret
455*7f963623SChristoph Hellwig	 restore
456*7f963623SChristoph HellwigENDPROC(xor_niagara_3)
457*7f963623SChristoph Hellwig
458*7f963623SChristoph HellwigENTRY(xor_niagara_4) /* %o0=bytes, %o1=dest, %o2=src1, %o3=src2, %o4=src3 */
459*7f963623SChristoph Hellwig	save		%sp, -192, %sp
460*7f963623SChristoph Hellwig	prefetch	[%i1], #n_writes
461*7f963623SChristoph Hellwig	prefetch	[%i2], #one_read
462*7f963623SChristoph Hellwig	prefetch	[%i3], #one_read
463*7f963623SChristoph Hellwig	prefetch	[%i4], #one_read
464*7f963623SChristoph Hellwig	rd		%asi, %g7
465*7f963623SChristoph Hellwig	wr		%g0, ASI_BLK_INIT_QUAD_LDD_P, %asi
466*7f963623SChristoph Hellwig	srlx		%i0, 6, %g1
467*7f963623SChristoph Hellwig	mov		%i1, %i0
468*7f963623SChristoph Hellwig	mov		%i2, %i1
469*7f963623SChristoph Hellwig	mov		%i3, %l7
470*7f963623SChristoph Hellwig	mov		%i4, %l6
471*7f963623SChristoph Hellwig1:	ldda		[%i1 + 0x00] %asi, %i2	/* %i2/%i3 = src1 + 0x00 */
472*7f963623SChristoph Hellwig	ldda		[%l7 + 0x00] %asi, %i4	/* %i4/%i5 = src2 + 0x00 */
473*7f963623SChristoph Hellwig	ldda		[%l6 + 0x00] %asi, %g2	/* %g2/%g3 = src3 + 0x00 */
474*7f963623SChristoph Hellwig	ldda		[%i0 + 0x00] %asi, %l0	/* %l0/%l1 = dest + 0x00 */
475*7f963623SChristoph Hellwig	xor		%i4, %i2, %i4
476*7f963623SChristoph Hellwig	xor		%i5, %i3, %i5
477*7f963623SChristoph Hellwig	ldda		[%i1 + 0x10] %asi, %i2	/* %i2/%i3 = src1 + 0x10 */
478*7f963623SChristoph Hellwig	xor		%g2, %i4, %g2
479*7f963623SChristoph Hellwig	xor		%g3, %i5, %g3
480*7f963623SChristoph Hellwig	ldda		[%l7 + 0x10] %asi, %i4	/* %i4/%i5 = src2 + 0x10 */
481*7f963623SChristoph Hellwig	xor		%l0, %g2, %l0
482*7f963623SChristoph Hellwig	xor		%l1, %g3, %l1
483*7f963623SChristoph Hellwig	stxa		%l0, [%i0 + 0x00] %asi
484*7f963623SChristoph Hellwig	stxa		%l1, [%i0 + 0x08] %asi
485*7f963623SChristoph Hellwig	ldda		[%l6 + 0x10] %asi, %g2	/* %g2/%g3 = src3 + 0x10 */
486*7f963623SChristoph Hellwig	ldda		[%i0 + 0x10] %asi, %l0	/* %l0/%l1 = dest + 0x10 */
487*7f963623SChristoph Hellwig
488*7f963623SChristoph Hellwig	xor		%i4, %i2, %i4
489*7f963623SChristoph Hellwig	xor		%i5, %i3, %i5
490*7f963623SChristoph Hellwig	ldda		[%i1 + 0x20] %asi, %i2	/* %i2/%i3 = src1 + 0x20 */
491*7f963623SChristoph Hellwig	xor		%g2, %i4, %g2
492*7f963623SChristoph Hellwig	xor		%g3, %i5, %g3
493*7f963623SChristoph Hellwig	ldda		[%l7 + 0x20] %asi, %i4	/* %i4/%i5 = src2 + 0x20 */
494*7f963623SChristoph Hellwig	xor		%l0, %g2, %l0
495*7f963623SChristoph Hellwig	xor		%l1, %g3, %l1
496*7f963623SChristoph Hellwig	stxa		%l0, [%i0 + 0x10] %asi
497*7f963623SChristoph Hellwig	stxa		%l1, [%i0 + 0x18] %asi
498*7f963623SChristoph Hellwig	ldda		[%l6 + 0x20] %asi, %g2	/* %g2/%g3 = src3 + 0x20 */
499*7f963623SChristoph Hellwig	ldda		[%i0 + 0x20] %asi, %l0	/* %l0/%l1 = dest + 0x20 */
500*7f963623SChristoph Hellwig
501*7f963623SChristoph Hellwig	xor		%i4, %i2, %i4
502*7f963623SChristoph Hellwig	xor		%i5, %i3, %i5
503*7f963623SChristoph Hellwig	ldda		[%i1 + 0x30] %asi, %i2	/* %i2/%i3 = src1 + 0x30 */
504*7f963623SChristoph Hellwig	xor		%g2, %i4, %g2
505*7f963623SChristoph Hellwig	xor		%g3, %i5, %g3
506*7f963623SChristoph Hellwig	ldda		[%l7 + 0x30] %asi, %i4	/* %i4/%i5 = src2 + 0x30 */
507*7f963623SChristoph Hellwig	xor		%l0, %g2, %l0
508*7f963623SChristoph Hellwig	xor		%l1, %g3, %l1
509*7f963623SChristoph Hellwig	stxa		%l0, [%i0 + 0x20] %asi
510*7f963623SChristoph Hellwig	stxa		%l1, [%i0 + 0x28] %asi
511*7f963623SChristoph Hellwig	ldda		[%l6 + 0x30] %asi, %g2	/* %g2/%g3 = src3 + 0x30 */
512*7f963623SChristoph Hellwig	ldda		[%i0 + 0x30] %asi, %l0	/* %l0/%l1 = dest + 0x30 */
513*7f963623SChristoph Hellwig
514*7f963623SChristoph Hellwig	prefetch	[%i1 + 0x40], #one_read
515*7f963623SChristoph Hellwig	prefetch	[%l7 + 0x40], #one_read
516*7f963623SChristoph Hellwig	prefetch	[%l6 + 0x40], #one_read
517*7f963623SChristoph Hellwig	prefetch	[%i0 + 0x40], #n_writes
518*7f963623SChristoph Hellwig
519*7f963623SChristoph Hellwig	xor		%i4, %i2, %i4
520*7f963623SChristoph Hellwig	xor		%i5, %i3, %i5
521*7f963623SChristoph Hellwig	xor		%g2, %i4, %g2
522*7f963623SChristoph Hellwig	xor		%g3, %i5, %g3
523*7f963623SChristoph Hellwig	xor		%l0, %g2, %l0
524*7f963623SChristoph Hellwig	xor		%l1, %g3, %l1
525*7f963623SChristoph Hellwig	stxa		%l0, [%i0 + 0x30] %asi
526*7f963623SChristoph Hellwig	stxa		%l1, [%i0 + 0x38] %asi
527*7f963623SChristoph Hellwig
528*7f963623SChristoph Hellwig	add		%i0, 0x40, %i0
529*7f963623SChristoph Hellwig	add		%i1, 0x40, %i1
530*7f963623SChristoph Hellwig	add		%l7, 0x40, %l7
531*7f963623SChristoph Hellwig	subcc		%g1, 1, %g1
532*7f963623SChristoph Hellwig	bne,pt		%xcc, 1b
533*7f963623SChristoph Hellwig	 add		%l6, 0x40, %l6
534*7f963623SChristoph Hellwig	membar		#Sync
535*7f963623SChristoph Hellwig	wr		%g7, 0x0, %asi
536*7f963623SChristoph Hellwig	ret
537*7f963623SChristoph Hellwig	 restore
538*7f963623SChristoph HellwigENDPROC(xor_niagara_4)
539*7f963623SChristoph Hellwig
540*7f963623SChristoph HellwigENTRY(xor_niagara_5) /* %o0=bytes, %o1=dest, %o2=src1, %o3=src2, %o4=src3, %o5=src4 */
541*7f963623SChristoph Hellwig	save		%sp, -192, %sp
542*7f963623SChristoph Hellwig	prefetch	[%i1], #n_writes
543*7f963623SChristoph Hellwig	prefetch	[%i2], #one_read
544*7f963623SChristoph Hellwig	prefetch	[%i3], #one_read
545*7f963623SChristoph Hellwig	prefetch	[%i4], #one_read
546*7f963623SChristoph Hellwig	prefetch	[%i5], #one_read
547*7f963623SChristoph Hellwig	rd		%asi, %g7
548*7f963623SChristoph Hellwig	wr		%g0, ASI_BLK_INIT_QUAD_LDD_P, %asi
549*7f963623SChristoph Hellwig	srlx		%i0, 6, %g1
550*7f963623SChristoph Hellwig	mov		%i1, %i0
551*7f963623SChristoph Hellwig	mov		%i2, %i1
552*7f963623SChristoph Hellwig	mov		%i3, %l7
553*7f963623SChristoph Hellwig	mov		%i4, %l6
554*7f963623SChristoph Hellwig	mov		%i5, %l5
555*7f963623SChristoph Hellwig1:	ldda		[%i1 + 0x00] %asi, %i2	/* %i2/%i3 = src1 + 0x00 */
556*7f963623SChristoph Hellwig	ldda		[%l7 + 0x00] %asi, %i4	/* %i4/%i5 = src2 + 0x00 */
557*7f963623SChristoph Hellwig	ldda		[%l6 + 0x00] %asi, %g2	/* %g2/%g3 = src3 + 0x00 */
558*7f963623SChristoph Hellwig	ldda		[%l5 + 0x00] %asi, %l0	/* %l0/%l1 = src4 + 0x00 */
559*7f963623SChristoph Hellwig	ldda		[%i0 + 0x00] %asi, %l2	/* %l2/%l3 = dest + 0x00 */
560*7f963623SChristoph Hellwig	xor		%i4, %i2, %i4
561*7f963623SChristoph Hellwig	xor		%i5, %i3, %i5
562*7f963623SChristoph Hellwig	ldda		[%i1 + 0x10] %asi, %i2	/* %i2/%i3 = src1 + 0x10 */
563*7f963623SChristoph Hellwig	xor		%g2, %i4, %g2
564*7f963623SChristoph Hellwig	xor		%g3, %i5, %g3
565*7f963623SChristoph Hellwig	ldda		[%l7 + 0x10] %asi, %i4	/* %i4/%i5 = src2 + 0x10 */
566*7f963623SChristoph Hellwig	xor		%l0, %g2, %l0
567*7f963623SChristoph Hellwig	xor		%l1, %g3, %l1
568*7f963623SChristoph Hellwig	ldda		[%l6 + 0x10] %asi, %g2	/* %g2/%g3 = src3 + 0x10 */
569*7f963623SChristoph Hellwig	xor		%l2, %l0, %l2
570*7f963623SChristoph Hellwig	xor		%l3, %l1, %l3
571*7f963623SChristoph Hellwig	stxa		%l2, [%i0 + 0x00] %asi
572*7f963623SChristoph Hellwig	stxa		%l3, [%i0 + 0x08] %asi
573*7f963623SChristoph Hellwig	ldda		[%l5 + 0x10] %asi, %l0	/* %l0/%l1 = src4 + 0x10 */
574*7f963623SChristoph Hellwig	ldda		[%i0 + 0x10] %asi, %l2	/* %l2/%l3 = dest + 0x10 */
575*7f963623SChristoph Hellwig
576*7f963623SChristoph Hellwig	xor		%i4, %i2, %i4
577*7f963623SChristoph Hellwig	xor		%i5, %i3, %i5
578*7f963623SChristoph Hellwig	ldda		[%i1 + 0x20] %asi, %i2	/* %i2/%i3 = src1 + 0x20 */
579*7f963623SChristoph Hellwig	xor		%g2, %i4, %g2
580*7f963623SChristoph Hellwig	xor		%g3, %i5, %g3
581*7f963623SChristoph Hellwig	ldda		[%l7 + 0x20] %asi, %i4	/* %i4/%i5 = src2 + 0x20 */
582*7f963623SChristoph Hellwig	xor		%l0, %g2, %l0
583*7f963623SChristoph Hellwig	xor		%l1, %g3, %l1
584*7f963623SChristoph Hellwig	ldda		[%l6 + 0x20] %asi, %g2	/* %g2/%g3 = src3 + 0x20 */
585*7f963623SChristoph Hellwig	xor		%l2, %l0, %l2
586*7f963623SChristoph Hellwig	xor		%l3, %l1, %l3
587*7f963623SChristoph Hellwig	stxa		%l2, [%i0 + 0x10] %asi
588*7f963623SChristoph Hellwig	stxa		%l3, [%i0 + 0x18] %asi
589*7f963623SChristoph Hellwig	ldda		[%l5 + 0x20] %asi, %l0	/* %l0/%l1 = src4 + 0x20 */
590*7f963623SChristoph Hellwig	ldda		[%i0 + 0x20] %asi, %l2	/* %l2/%l3 = dest + 0x20 */
591*7f963623SChristoph Hellwig
592*7f963623SChristoph Hellwig	xor		%i4, %i2, %i4
593*7f963623SChristoph Hellwig	xor		%i5, %i3, %i5
594*7f963623SChristoph Hellwig	ldda		[%i1 + 0x30] %asi, %i2	/* %i2/%i3 = src1 + 0x30 */
595*7f963623SChristoph Hellwig	xor		%g2, %i4, %g2
596*7f963623SChristoph Hellwig	xor		%g3, %i5, %g3
597*7f963623SChristoph Hellwig	ldda		[%l7 + 0x30] %asi, %i4	/* %i4/%i5 = src2 + 0x30 */
598*7f963623SChristoph Hellwig	xor		%l0, %g2, %l0
599*7f963623SChristoph Hellwig	xor		%l1, %g3, %l1
600*7f963623SChristoph Hellwig	ldda		[%l6 + 0x30] %asi, %g2	/* %g2/%g3 = src3 + 0x30 */
601*7f963623SChristoph Hellwig	xor		%l2, %l0, %l2
602*7f963623SChristoph Hellwig	xor		%l3, %l1, %l3
603*7f963623SChristoph Hellwig	stxa		%l2, [%i0 + 0x20] %asi
604*7f963623SChristoph Hellwig	stxa		%l3, [%i0 + 0x28] %asi
605*7f963623SChristoph Hellwig	ldda		[%l5 + 0x30] %asi, %l0	/* %l0/%l1 = src4 + 0x30 */
606*7f963623SChristoph Hellwig	ldda		[%i0 + 0x30] %asi, %l2	/* %l2/%l3 = dest + 0x30 */
607*7f963623SChristoph Hellwig
608*7f963623SChristoph Hellwig	prefetch	[%i1 + 0x40], #one_read
609*7f963623SChristoph Hellwig	prefetch	[%l7 + 0x40], #one_read
610*7f963623SChristoph Hellwig	prefetch	[%l6 + 0x40], #one_read
611*7f963623SChristoph Hellwig	prefetch	[%l5 + 0x40], #one_read
612*7f963623SChristoph Hellwig	prefetch	[%i0 + 0x40], #n_writes
613*7f963623SChristoph Hellwig
614*7f963623SChristoph Hellwig	xor		%i4, %i2, %i4
615*7f963623SChristoph Hellwig	xor		%i5, %i3, %i5
616*7f963623SChristoph Hellwig	xor		%g2, %i4, %g2
617*7f963623SChristoph Hellwig	xor		%g3, %i5, %g3
618*7f963623SChristoph Hellwig	xor		%l0, %g2, %l0
619*7f963623SChristoph Hellwig	xor		%l1, %g3, %l1
620*7f963623SChristoph Hellwig	xor		%l2, %l0, %l2
621*7f963623SChristoph Hellwig	xor		%l3, %l1, %l3
622*7f963623SChristoph Hellwig	stxa		%l2, [%i0 + 0x30] %asi
623*7f963623SChristoph Hellwig	stxa		%l3, [%i0 + 0x38] %asi
624*7f963623SChristoph Hellwig
625*7f963623SChristoph Hellwig	add		%i0, 0x40, %i0
626*7f963623SChristoph Hellwig	add		%i1, 0x40, %i1
627*7f963623SChristoph Hellwig	add		%l7, 0x40, %l7
628*7f963623SChristoph Hellwig	add		%l6, 0x40, %l6
629*7f963623SChristoph Hellwig	subcc		%g1, 1, %g1
630*7f963623SChristoph Hellwig	bne,pt		%xcc, 1b
631*7f963623SChristoph Hellwig	 add		%l5, 0x40, %l5
632*7f963623SChristoph Hellwig	membar		#Sync
633*7f963623SChristoph Hellwig	wr		%g7, 0x0, %asi
634*7f963623SChristoph Hellwig	ret
635*7f963623SChristoph Hellwig	 restore
636*7f963623SChristoph HellwigENDPROC(xor_niagara_5)
637