xref: /netbsd-src/crypto/external/bsd/openssl.old/lib/libcrypto/arch/powerpc/chacha-ppc.S (revision 4724848cf0da353df257f730694b7882798e5daf)
1*4724848cSchristos.machine	"any"
2*4724848cSchristos.text
3*4724848cSchristos
4*4724848cSchristos.globl	ChaCha20_ctr32_int
5*4724848cSchristos.type	ChaCha20_ctr32_int,@function
6*4724848cSchristos.align	5
7*4724848cSchristosChaCha20_ctr32_int:
8*4724848cSchristos__ChaCha20_ctr32_int:
9*4724848cSchristos	cmplwi	5,0
10*4724848cSchristos	beqlr
11*4724848cSchristos
12*4724848cSchristos	stwu	1,-160(1)
13*4724848cSchristos	mflr	0
14*4724848cSchristos
15*4724848cSchristos	stw	14,88(1)
16*4724848cSchristos	stw	15,92(1)
17*4724848cSchristos	stw	16,96(1)
18*4724848cSchristos	stw	17,100(1)
19*4724848cSchristos	stw	18,104(1)
20*4724848cSchristos	stw	19,108(1)
21*4724848cSchristos	stw	20,112(1)
22*4724848cSchristos	stw	21,116(1)
23*4724848cSchristos	stw	22,120(1)
24*4724848cSchristos	stw	23,124(1)
25*4724848cSchristos	stw	24,128(1)
26*4724848cSchristos	stw	25,132(1)
27*4724848cSchristos	stw	26,136(1)
28*4724848cSchristos	stw	27,140(1)
29*4724848cSchristos	stw	28,144(1)
30*4724848cSchristos	stw	29,148(1)
31*4724848cSchristos	stw	30,152(1)
32*4724848cSchristos	stw	31,156(1)
33*4724848cSchristos	stw	0,164(1)
34*4724848cSchristos
35*4724848cSchristos	lwz	11,0(7)
36*4724848cSchristos	lwz	12,4(7)
37*4724848cSchristos	lwz	14,8(7)
38*4724848cSchristos	lwz	15,12(7)
39*4724848cSchristos
40*4724848cSchristos	bl	__ChaCha20_1x
41*4724848cSchristos
42*4724848cSchristos	lwz	0,164(1)
43*4724848cSchristos	lwz	14,88(1)
44*4724848cSchristos	lwz	15,92(1)
45*4724848cSchristos	lwz	16,96(1)
46*4724848cSchristos	lwz	17,100(1)
47*4724848cSchristos	lwz	18,104(1)
48*4724848cSchristos	lwz	19,108(1)
49*4724848cSchristos	lwz	20,112(1)
50*4724848cSchristos	lwz	21,116(1)
51*4724848cSchristos	lwz	22,120(1)
52*4724848cSchristos	lwz	23,124(1)
53*4724848cSchristos	lwz	24,128(1)
54*4724848cSchristos	lwz	25,132(1)
55*4724848cSchristos	lwz	26,136(1)
56*4724848cSchristos	lwz	27,140(1)
57*4724848cSchristos	lwz	28,144(1)
58*4724848cSchristos	lwz	29,148(1)
59*4724848cSchristos	lwz	30,152(1)
60*4724848cSchristos	lwz	31,156(1)
61*4724848cSchristos	mtlr	0
62*4724848cSchristos	addi	1,1,160
63*4724848cSchristos	blr
64*4724848cSchristos.long	0
65*4724848cSchristos.byte	0,12,4,1,0x80,18,5,0
66*4724848cSchristos.long	0
67*4724848cSchristos
68*4724848cSchristos
69*4724848cSchristos.align	5
70*4724848cSchristos__ChaCha20_1x:
71*4724848cSchristos.Loop_outer:
72*4724848cSchristos	lis	16,0x6170
73*4724848cSchristos	lis	17,0x3320
74*4724848cSchristos	lis	18,0x7962
75*4724848cSchristos	lis	19,0x6b20
76*4724848cSchristos	ori	16,16,0x7865
77*4724848cSchristos	ori	17,17,0x646e
78*4724848cSchristos	ori	18,18,0x2d32
79*4724848cSchristos	ori	19,19,0x6574
80*4724848cSchristos
81*4724848cSchristos	li	0,10
82*4724848cSchristos	lwz	20,0(6)
83*4724848cSchristos	lwz	21,4(6)
84*4724848cSchristos	lwz	22,8(6)
85*4724848cSchristos	lwz	23,12(6)
86*4724848cSchristos	lwz	24,16(6)
87*4724848cSchristos	mr	28,11
88*4724848cSchristos	lwz	25,20(6)
89*4724848cSchristos	mr	29,12
90*4724848cSchristos	lwz	26,24(6)
91*4724848cSchristos	mr	30,14
92*4724848cSchristos	lwz	27,28(6)
93*4724848cSchristos	mr	31,15
94*4724848cSchristos
95*4724848cSchristos	mr	7,20
96*4724848cSchristos	mr	8,21
97*4724848cSchristos	mr	9,22
98*4724848cSchristos	mr	10,23
99*4724848cSchristos
100*4724848cSchristos	mtctr	0
101*4724848cSchristos.Loop:
102*4724848cSchristos	add	16,16,20
103*4724848cSchristos	add	17,17,21
104*4724848cSchristos	add	18,18,22
105*4724848cSchristos	add	19,19,23
106*4724848cSchristos	xor	28,28,16
107*4724848cSchristos	xor	29,29,17
108*4724848cSchristos	xor	30,30,18
109*4724848cSchristos	xor	31,31,19
110*4724848cSchristos	rotlwi	28,28,16
111*4724848cSchristos	rotlwi	29,29,16
112*4724848cSchristos	rotlwi	30,30,16
113*4724848cSchristos	rotlwi	31,31,16
114*4724848cSchristos	add	24,24,28
115*4724848cSchristos	add	25,25,29
116*4724848cSchristos	add	26,26,30
117*4724848cSchristos	add	27,27,31
118*4724848cSchristos	xor	20,20,24
119*4724848cSchristos	xor	21,21,25
120*4724848cSchristos	xor	22,22,26
121*4724848cSchristos	xor	23,23,27
122*4724848cSchristos	rotlwi	20,20,12
123*4724848cSchristos	rotlwi	21,21,12
124*4724848cSchristos	rotlwi	22,22,12
125*4724848cSchristos	rotlwi	23,23,12
126*4724848cSchristos	add	16,16,20
127*4724848cSchristos	add	17,17,21
128*4724848cSchristos	add	18,18,22
129*4724848cSchristos	add	19,19,23
130*4724848cSchristos	xor	28,28,16
131*4724848cSchristos	xor	29,29,17
132*4724848cSchristos	xor	30,30,18
133*4724848cSchristos	xor	31,31,19
134*4724848cSchristos	rotlwi	28,28,8
135*4724848cSchristos	rotlwi	29,29,8
136*4724848cSchristos	rotlwi	30,30,8
137*4724848cSchristos	rotlwi	31,31,8
138*4724848cSchristos	add	24,24,28
139*4724848cSchristos	add	25,25,29
140*4724848cSchristos	add	26,26,30
141*4724848cSchristos	add	27,27,31
142*4724848cSchristos	xor	20,20,24
143*4724848cSchristos	xor	21,21,25
144*4724848cSchristos	xor	22,22,26
145*4724848cSchristos	xor	23,23,27
146*4724848cSchristos	rotlwi	20,20,7
147*4724848cSchristos	rotlwi	21,21,7
148*4724848cSchristos	rotlwi	22,22,7
149*4724848cSchristos	rotlwi	23,23,7
150*4724848cSchristos	add	16,16,21
151*4724848cSchristos	add	17,17,22
152*4724848cSchristos	add	18,18,23
153*4724848cSchristos	add	19,19,20
154*4724848cSchristos	xor	31,31,16
155*4724848cSchristos	xor	28,28,17
156*4724848cSchristos	xor	29,29,18
157*4724848cSchristos	xor	30,30,19
158*4724848cSchristos	rotlwi	31,31,16
159*4724848cSchristos	rotlwi	28,28,16
160*4724848cSchristos	rotlwi	29,29,16
161*4724848cSchristos	rotlwi	30,30,16
162*4724848cSchristos	add	26,26,31
163*4724848cSchristos	add	27,27,28
164*4724848cSchristos	add	24,24,29
165*4724848cSchristos	add	25,25,30
166*4724848cSchristos	xor	21,21,26
167*4724848cSchristos	xor	22,22,27
168*4724848cSchristos	xor	23,23,24
169*4724848cSchristos	xor	20,20,25
170*4724848cSchristos	rotlwi	21,21,12
171*4724848cSchristos	rotlwi	22,22,12
172*4724848cSchristos	rotlwi	23,23,12
173*4724848cSchristos	rotlwi	20,20,12
174*4724848cSchristos	add	16,16,21
175*4724848cSchristos	add	17,17,22
176*4724848cSchristos	add	18,18,23
177*4724848cSchristos	add	19,19,20
178*4724848cSchristos	xor	31,31,16
179*4724848cSchristos	xor	28,28,17
180*4724848cSchristos	xor	29,29,18
181*4724848cSchristos	xor	30,30,19
182*4724848cSchristos	rotlwi	31,31,8
183*4724848cSchristos	rotlwi	28,28,8
184*4724848cSchristos	rotlwi	29,29,8
185*4724848cSchristos	rotlwi	30,30,8
186*4724848cSchristos	add	26,26,31
187*4724848cSchristos	add	27,27,28
188*4724848cSchristos	add	24,24,29
189*4724848cSchristos	add	25,25,30
190*4724848cSchristos	xor	21,21,26
191*4724848cSchristos	xor	22,22,27
192*4724848cSchristos	xor	23,23,24
193*4724848cSchristos	xor	20,20,25
194*4724848cSchristos	rotlwi	21,21,7
195*4724848cSchristos	rotlwi	22,22,7
196*4724848cSchristos	rotlwi	23,23,7
197*4724848cSchristos	rotlwi	20,20,7
198*4724848cSchristos	bc	16,0,.Loop
199*4724848cSchristos
200*4724848cSchristos	subic	5,5,64
201*4724848cSchristos	addi	16,16,0x7865
202*4724848cSchristos	addi	17,17,0x646e
203*4724848cSchristos	addi	18,18,0x2d32
204*4724848cSchristos	addi	19,19,0x6574
205*4724848cSchristos	addis	16,16,0x6170
206*4724848cSchristos	addis	17,17,0x3320
207*4724848cSchristos	addis	18,18,0x7962
208*4724848cSchristos	addis	19,19,0x6b20
209*4724848cSchristos
210*4724848cSchristos	subfe.	0,0,0
211*4724848cSchristos	add	20,20,7
212*4724848cSchristos	lwz	7,16(6)
213*4724848cSchristos	add	21,21,8
214*4724848cSchristos	lwz	8,20(6)
215*4724848cSchristos	add	22,22,9
216*4724848cSchristos	lwz	9,24(6)
217*4724848cSchristos	add	23,23,10
218*4724848cSchristos	lwz	10,28(6)
219*4724848cSchristos	add	24,24,7
220*4724848cSchristos	add	25,25,8
221*4724848cSchristos	add	26,26,9
222*4724848cSchristos	add	27,27,10
223*4724848cSchristos
224*4724848cSchristos	add	28,28,11
225*4724848cSchristos	add	29,29,12
226*4724848cSchristos	add	30,30,14
227*4724848cSchristos	add	31,31,15
228*4724848cSchristos	addi	11,11,1
229*4724848cSchristos	mr	7,16
230*4724848cSchristos	rotlwi	16,16,8
231*4724848cSchristos	rlwimi	16,7,24,0,7
232*4724848cSchristos	rlwimi	16,7,24,16,23
233*4724848cSchristos	mr	8,17
234*4724848cSchristos	rotlwi	17,17,8
235*4724848cSchristos	rlwimi	17,8,24,0,7
236*4724848cSchristos	rlwimi	17,8,24,16,23
237*4724848cSchristos	mr	9,18
238*4724848cSchristos	rotlwi	18,18,8
239*4724848cSchristos	rlwimi	18,9,24,0,7
240*4724848cSchristos	rlwimi	18,9,24,16,23
241*4724848cSchristos	mr	10,19
242*4724848cSchristos	rotlwi	19,19,8
243*4724848cSchristos	rlwimi	19,10,24,0,7
244*4724848cSchristos	rlwimi	19,10,24,16,23
245*4724848cSchristos	mr	7,20
246*4724848cSchristos	rotlwi	20,20,8
247*4724848cSchristos	rlwimi	20,7,24,0,7
248*4724848cSchristos	rlwimi	20,7,24,16,23
249*4724848cSchristos	mr	8,21
250*4724848cSchristos	rotlwi	21,21,8
251*4724848cSchristos	rlwimi	21,8,24,0,7
252*4724848cSchristos	rlwimi	21,8,24,16,23
253*4724848cSchristos	mr	9,22
254*4724848cSchristos	rotlwi	22,22,8
255*4724848cSchristos	rlwimi	22,9,24,0,7
256*4724848cSchristos	rlwimi	22,9,24,16,23
257*4724848cSchristos	mr	10,23
258*4724848cSchristos	rotlwi	23,23,8
259*4724848cSchristos	rlwimi	23,10,24,0,7
260*4724848cSchristos	rlwimi	23,10,24,16,23
261*4724848cSchristos	mr	7,24
262*4724848cSchristos	rotlwi	24,24,8
263*4724848cSchristos	rlwimi	24,7,24,0,7
264*4724848cSchristos	rlwimi	24,7,24,16,23
265*4724848cSchristos	mr	8,25
266*4724848cSchristos	rotlwi	25,25,8
267*4724848cSchristos	rlwimi	25,8,24,0,7
268*4724848cSchristos	rlwimi	25,8,24,16,23
269*4724848cSchristos	mr	9,26
270*4724848cSchristos	rotlwi	26,26,8
271*4724848cSchristos	rlwimi	26,9,24,0,7
272*4724848cSchristos	rlwimi	26,9,24,16,23
273*4724848cSchristos	mr	10,27
274*4724848cSchristos	rotlwi	27,27,8
275*4724848cSchristos	rlwimi	27,10,24,0,7
276*4724848cSchristos	rlwimi	27,10,24,16,23
277*4724848cSchristos	mr	7,28
278*4724848cSchristos	rotlwi	28,28,8
279*4724848cSchristos	rlwimi	28,7,24,0,7
280*4724848cSchristos	rlwimi	28,7,24,16,23
281*4724848cSchristos	mr	8,29
282*4724848cSchristos	rotlwi	29,29,8
283*4724848cSchristos	rlwimi	29,8,24,0,7
284*4724848cSchristos	rlwimi	29,8,24,16,23
285*4724848cSchristos	mr	9,30
286*4724848cSchristos	rotlwi	30,30,8
287*4724848cSchristos	rlwimi	30,9,24,0,7
288*4724848cSchristos	rlwimi	30,9,24,16,23
289*4724848cSchristos	mr	10,31
290*4724848cSchristos	rotlwi	31,31,8
291*4724848cSchristos	rlwimi	31,10,24,0,7
292*4724848cSchristos	rlwimi	31,10,24,16,23
293*4724848cSchristos	bne	.Ltail
294*4724848cSchristos
295*4724848cSchristos	lwz	7,0(4)
296*4724848cSchristos	lwz	8,4(4)
297*4724848cSchristos	cmplwi	5,0
298*4724848cSchristos	lwz	9,8(4)
299*4724848cSchristos	lwz	10,12(4)
300*4724848cSchristos	xor	16,16,7
301*4724848cSchristos	lwz	7,16(4)
302*4724848cSchristos	xor	17,17,8
303*4724848cSchristos	lwz	8,20(4)
304*4724848cSchristos	xor	18,18,9
305*4724848cSchristos	lwz	9,24(4)
306*4724848cSchristos	xor	19,19,10
307*4724848cSchristos	lwz	10,28(4)
308*4724848cSchristos	xor	20,20,7
309*4724848cSchristos	lwz	7,32(4)
310*4724848cSchristos	xor	21,21,8
311*4724848cSchristos	lwz	8,36(4)
312*4724848cSchristos	xor	22,22,9
313*4724848cSchristos	lwz	9,40(4)
314*4724848cSchristos	xor	23,23,10
315*4724848cSchristos	lwz	10,44(4)
316*4724848cSchristos	xor	24,24,7
317*4724848cSchristos	lwz	7,48(4)
318*4724848cSchristos	xor	25,25,8
319*4724848cSchristos	lwz	8,52(4)
320*4724848cSchristos	xor	26,26,9
321*4724848cSchristos	lwz	9,56(4)
322*4724848cSchristos	xor	27,27,10
323*4724848cSchristos	lwz	10,60(4)
324*4724848cSchristos	xor	28,28,7
325*4724848cSchristos	stw	16,0(3)
326*4724848cSchristos	xor	29,29,8
327*4724848cSchristos	stw	17,4(3)
328*4724848cSchristos	xor	30,30,9
329*4724848cSchristos	stw	18,8(3)
330*4724848cSchristos	xor	31,31,10
331*4724848cSchristos	stw	19,12(3)
332*4724848cSchristos	stw	20,16(3)
333*4724848cSchristos	stw	21,20(3)
334*4724848cSchristos	stw	22,24(3)
335*4724848cSchristos	stw	23,28(3)
336*4724848cSchristos	stw	24,32(3)
337*4724848cSchristos	stw	25,36(3)
338*4724848cSchristos	stw	26,40(3)
339*4724848cSchristos	stw	27,44(3)
340*4724848cSchristos	stw	28,48(3)
341*4724848cSchristos	stw	29,52(3)
342*4724848cSchristos	stw	30,56(3)
343*4724848cSchristos	addi	4,4,64
344*4724848cSchristos	stw	31,60(3)
345*4724848cSchristos	addi	3,3,64
346*4724848cSchristos
347*4724848cSchristos	bne	.Loop_outer
348*4724848cSchristos
349*4724848cSchristos	blr
350*4724848cSchristos
351*4724848cSchristos.align	4
352*4724848cSchristos.Ltail:
353*4724848cSchristos	addi	5,5,64
354*4724848cSchristos	subi	4,4,1
355*4724848cSchristos	subi	3,3,1
356*4724848cSchristos	addi	7,1,24-1
357*4724848cSchristos	mtctr	5
358*4724848cSchristos
359*4724848cSchristos	stw	16,24(1)
360*4724848cSchristos	stw	17,28(1)
361*4724848cSchristos	stw	18,32(1)
362*4724848cSchristos	stw	19,36(1)
363*4724848cSchristos	stw	20,40(1)
364*4724848cSchristos	stw	21,44(1)
365*4724848cSchristos	stw	22,48(1)
366*4724848cSchristos	stw	23,52(1)
367*4724848cSchristos	stw	24,56(1)
368*4724848cSchristos	stw	25,60(1)
369*4724848cSchristos	stw	26,64(1)
370*4724848cSchristos	stw	27,68(1)
371*4724848cSchristos	stw	28,72(1)
372*4724848cSchristos	stw	29,76(1)
373*4724848cSchristos	stw	30,80(1)
374*4724848cSchristos	stw	31,84(1)
375*4724848cSchristos
376*4724848cSchristos.Loop_tail:
377*4724848cSchristos	lbzu	11,1(4)
378*4724848cSchristos	lbzu	16,1(7)
379*4724848cSchristos	xor	12,11,16
380*4724848cSchristos	stbu	12,1(3)
381*4724848cSchristos	bc	16,0,.Loop_tail
382*4724848cSchristos
383*4724848cSchristos	stw	1,24(1)
384*4724848cSchristos	stw	1,28(1)
385*4724848cSchristos	stw	1,32(1)
386*4724848cSchristos	stw	1,36(1)
387*4724848cSchristos	stw	1,40(1)
388*4724848cSchristos	stw	1,44(1)
389*4724848cSchristos	stw	1,48(1)
390*4724848cSchristos	stw	1,52(1)
391*4724848cSchristos	stw	1,56(1)
392*4724848cSchristos	stw	1,60(1)
393*4724848cSchristos	stw	1,64(1)
394*4724848cSchristos	stw	1,68(1)
395*4724848cSchristos	stw	1,72(1)
396*4724848cSchristos	stw	1,76(1)
397*4724848cSchristos	stw	1,80(1)
398*4724848cSchristos	stw	1,84(1)
399*4724848cSchristos
400*4724848cSchristos	blr
401*4724848cSchristos.long	0
402*4724848cSchristos.byte	0,12,0x14,0,0,0,0,0
403*4724848cSchristos
404*4724848cSchristos.globl	ChaCha20_ctr32_vmx
405*4724848cSchristos.type	ChaCha20_ctr32_vmx,@function
406*4724848cSchristos.align	5
407*4724848cSchristosChaCha20_ctr32_vmx:
408*4724848cSchristos	cmplwi	5,256
409*4724848cSchristos	blt	__ChaCha20_ctr32_int
410*4724848cSchristos
411*4724848cSchristos	stwu	1,-320(1)
412*4724848cSchristos	mflr	0
413*4724848cSchristos	li	10,103
414*4724848cSchristos	li	11,119
415*4724848cSchristos	mfspr	12,256
416*4724848cSchristos	stvx	23,10,1
417*4724848cSchristos	addi	10,10,32
418*4724848cSchristos	stvx	24,11,1
419*4724848cSchristos	addi	11,11,32
420*4724848cSchristos	stvx	25,10,1
421*4724848cSchristos	addi	10,10,32
422*4724848cSchristos	stvx	26,11,1
423*4724848cSchristos	addi	11,11,32
424*4724848cSchristos	stvx	27,10,1
425*4724848cSchristos	addi	10,10,32
426*4724848cSchristos	stvx	28,11,1
427*4724848cSchristos	addi	11,11,32
428*4724848cSchristos	stvx	29,10,1
429*4724848cSchristos	addi	10,10,32
430*4724848cSchristos	stvx	30,11,1
431*4724848cSchristos	stvx	31,10,1
432*4724848cSchristos	stw	12,244(1)
433*4724848cSchristos	stw	14,248(1)
434*4724848cSchristos	stw	15,252(1)
435*4724848cSchristos	stw	16,256(1)
436*4724848cSchristos	stw	17,260(1)
437*4724848cSchristos	stw	18,264(1)
438*4724848cSchristos	stw	19,268(1)
439*4724848cSchristos	stw	20,272(1)
440*4724848cSchristos	stw	21,276(1)
441*4724848cSchristos	stw	22,280(1)
442*4724848cSchristos	stw	23,284(1)
443*4724848cSchristos	stw	24,288(1)
444*4724848cSchristos	stw	25,292(1)
445*4724848cSchristos	stw	26,296(1)
446*4724848cSchristos	stw	27,300(1)
447*4724848cSchristos	stw	28,304(1)
448*4724848cSchristos	stw	29,308(1)
449*4724848cSchristos	stw	30,312(1)
450*4724848cSchristos	stw	31,316(1)
451*4724848cSchristos	li	12,-4096+511
452*4724848cSchristos	stw	0, 324(1)
453*4724848cSchristos	mtspr	256,12
454*4724848cSchristos
455*4724848cSchristos	bl	.Lconsts
456*4724848cSchristos	li	16,16
457*4724848cSchristos	li	17,32
458*4724848cSchristos	li	18,48
459*4724848cSchristos	li	19,64
460*4724848cSchristos	li	20,31
461*4724848cSchristos	li	21,15
462*4724848cSchristos
463*4724848cSchristos	lvx	13,0,6
464*4724848cSchristos	lvsl	29,0,6
465*4724848cSchristos	lvx	14,16,6
466*4724848cSchristos	lvx	27,20,6
467*4724848cSchristos
468*4724848cSchristos	lvx	15,0,7
469*4724848cSchristos	lvsl	30,0,7
470*4724848cSchristos	lvx	28,21,7
471*4724848cSchristos
472*4724848cSchristos	lvx	12,0,12
473*4724848cSchristos	lvx	17,16,12
474*4724848cSchristos	lvx	18,17,12
475*4724848cSchristos	lvx	19,18,12
476*4724848cSchristos	lvx	23,19,12
477*4724848cSchristos
478*4724848cSchristos	vperm	13,13,14,29
479*4724848cSchristos	vperm	14,14,27,29
480*4724848cSchristos	vperm	15,15,28,30
481*4724848cSchristos
482*4724848cSchristos	lwz	11,0(7)
483*4724848cSchristos	lwz	12,4(7)
484*4724848cSchristos	vadduwm	15,15,17
485*4724848cSchristos	lwz	14,8(7)
486*4724848cSchristos	vadduwm	16,15,17
487*4724848cSchristos	lwz	15,12(7)
488*4724848cSchristos	vadduwm	17,16,17
489*4724848cSchristos
490*4724848cSchristos	vxor	29,29,29
491*4724848cSchristos	vspltisw	26,-1
492*4724848cSchristos	lvsl	24,0,4
493*4724848cSchristos	lvsr	25,0,3
494*4724848cSchristos	vperm	26,29,26,25
495*4724848cSchristos
496*4724848cSchristos	lvsl	29,0,16
497*4724848cSchristos	vspltisb	30,3
498*4724848cSchristos	vxor	29,29,30
499*4724848cSchristos	vxor	25,25,30
500*4724848cSchristos	vperm	24,24,24,29
501*4724848cSchristos
502*4724848cSchristos	li	0,10
503*4724848cSchristos	b	.Loop_outer_vmx
504*4724848cSchristos
505*4724848cSchristos.align	4
506*4724848cSchristos.Loop_outer_vmx:
507*4724848cSchristos	lis	16,0x6170
508*4724848cSchristos	lis	17,0x3320
509*4724848cSchristos	vor	0,12,12
510*4724848cSchristos	lis	18,0x7962
511*4724848cSchristos	lis	19,0x6b20
512*4724848cSchristos	vor	4,12,12
513*4724848cSchristos	ori	16,16,0x7865
514*4724848cSchristos	ori	17,17,0x646e
515*4724848cSchristos	vor	8,12,12
516*4724848cSchristos	ori	18,18,0x2d32
517*4724848cSchristos	ori	19,19,0x6574
518*4724848cSchristos	vor	1,13,13
519*4724848cSchristos
520*4724848cSchristos	lwz	20,0(6)
521*4724848cSchristos	vor	5,13,13
522*4724848cSchristos	lwz	21,4(6)
523*4724848cSchristos	vor	9,13,13
524*4724848cSchristos	lwz	22,8(6)
525*4724848cSchristos	vor	2,14,14
526*4724848cSchristos	lwz	23,12(6)
527*4724848cSchristos	vor	6,14,14
528*4724848cSchristos	lwz	24,16(6)
529*4724848cSchristos	vor	10,14,14
530*4724848cSchristos	mr	28,11
531*4724848cSchristos	lwz	25,20(6)
532*4724848cSchristos	vor	3,15,15
533*4724848cSchristos	mr	29,12
534*4724848cSchristos	lwz	26,24(6)
535*4724848cSchristos	vor	7,16,16
536*4724848cSchristos	mr	30,14
537*4724848cSchristos	lwz	27,28(6)
538*4724848cSchristos	vor	11,17,17
539*4724848cSchristos	mr	31,15
540*4724848cSchristos
541*4724848cSchristos	mr	7,20
542*4724848cSchristos	mr	8,21
543*4724848cSchristos	mr	9,22
544*4724848cSchristos	mr	10,23
545*4724848cSchristos
546*4724848cSchristos	vspltisw	27,12
547*4724848cSchristos	vspltisw	28,7
548*4724848cSchristos
549*4724848cSchristos	mtctr	0
550*4724848cSchristos	nop
551*4724848cSchristos.Loop_vmx:
552*4724848cSchristos	vadduwm	0,0,1
553*4724848cSchristos	vadduwm	4,4,5
554*4724848cSchristos	vadduwm	8,8,9
555*4724848cSchristos	add	16,16,20
556*4724848cSchristos	add	17,17,21
557*4724848cSchristos	add	18,18,22
558*4724848cSchristos	vxor	3,3,0
559*4724848cSchristos	vxor	7,7,4
560*4724848cSchristos	vxor	11,11,8
561*4724848cSchristos	add	19,19,23
562*4724848cSchristos	xor	28,28,16
563*4724848cSchristos	xor	29,29,17
564*4724848cSchristos	vperm	3,3,3,19
565*4724848cSchristos	vperm	7,7,7,19
566*4724848cSchristos	vperm	11,11,11,19
567*4724848cSchristos	xor	30,30,18
568*4724848cSchristos	xor	31,31,19
569*4724848cSchristos	rotlwi	28,28,16
570*4724848cSchristos	vadduwm	2,2,3
571*4724848cSchristos	vadduwm	6,6,7
572*4724848cSchristos	vadduwm	10,10,11
573*4724848cSchristos	rotlwi	29,29,16
574*4724848cSchristos	rotlwi	30,30,16
575*4724848cSchristos	rotlwi	31,31,16
576*4724848cSchristos	vxor	1,1,2
577*4724848cSchristos	vxor	5,5,6
578*4724848cSchristos	vxor	9,9,10
579*4724848cSchristos	add	24,24,28
580*4724848cSchristos	add	25,25,29
581*4724848cSchristos	add	26,26,30
582*4724848cSchristos	vrlw	1,1,27
583*4724848cSchristos	vrlw	5,5,27
584*4724848cSchristos	vrlw	9,9,27
585*4724848cSchristos	add	27,27,31
586*4724848cSchristos	xor	20,20,24
587*4724848cSchristos	xor	21,21,25
588*4724848cSchristos	vadduwm	0,0,1
589*4724848cSchristos	vadduwm	4,4,5
590*4724848cSchristos	vadduwm	8,8,9
591*4724848cSchristos	xor	22,22,26
592*4724848cSchristos	xor	23,23,27
593*4724848cSchristos	rotlwi	20,20,12
594*4724848cSchristos	vxor	3,3,0
595*4724848cSchristos	vxor	7,7,4
596*4724848cSchristos	vxor	11,11,8
597*4724848cSchristos	rotlwi	21,21,12
598*4724848cSchristos	rotlwi	22,22,12
599*4724848cSchristos	rotlwi	23,23,12
600*4724848cSchristos	vperm	3,3,3,23
601*4724848cSchristos	vperm	7,7,7,23
602*4724848cSchristos	vperm	11,11,11,23
603*4724848cSchristos	add	16,16,20
604*4724848cSchristos	add	17,17,21
605*4724848cSchristos	add	18,18,22
606*4724848cSchristos	vadduwm	2,2,3
607*4724848cSchristos	vadduwm	6,6,7
608*4724848cSchristos	vadduwm	10,10,11
609*4724848cSchristos	add	19,19,23
610*4724848cSchristos	xor	28,28,16
611*4724848cSchristos	xor	29,29,17
612*4724848cSchristos	vxor	1,1,2
613*4724848cSchristos	vxor	5,5,6
614*4724848cSchristos	vxor	9,9,10
615*4724848cSchristos	xor	30,30,18
616*4724848cSchristos	xor	31,31,19
617*4724848cSchristos	rotlwi	28,28,8
618*4724848cSchristos	vrlw	1,1,28
619*4724848cSchristos	vrlw	5,5,28
620*4724848cSchristos	vrlw	9,9,28
621*4724848cSchristos	rotlwi	29,29,8
622*4724848cSchristos	rotlwi	30,30,8
623*4724848cSchristos	rotlwi	31,31,8
624*4724848cSchristos	vsldoi	2,2,2, 16-8
625*4724848cSchristos	vsldoi	6,6,6, 16-8
626*4724848cSchristos	vsldoi	10,10,10, 16-8
627*4724848cSchristos	add	24,24,28
628*4724848cSchristos	add	25,25,29
629*4724848cSchristos	add	26,26,30
630*4724848cSchristos	vsldoi	1,1,1, 16-12
631*4724848cSchristos	vsldoi	5,5,5, 16-12
632*4724848cSchristos	vsldoi	9,9,9, 16-12
633*4724848cSchristos	add	27,27,31
634*4724848cSchristos	xor	20,20,24
635*4724848cSchristos	xor	21,21,25
636*4724848cSchristos	vsldoi	3,3,3, 16-4
637*4724848cSchristos	vsldoi	7,7,7, 16-4
638*4724848cSchristos	vsldoi	11,11,11, 16-4
639*4724848cSchristos	xor	22,22,26
640*4724848cSchristos	xor	23,23,27
641*4724848cSchristos	rotlwi	20,20,7
642*4724848cSchristos	rotlwi	21,21,7
643*4724848cSchristos	rotlwi	22,22,7
644*4724848cSchristos	rotlwi	23,23,7
645*4724848cSchristos	vadduwm	0,0,1
646*4724848cSchristos	vadduwm	4,4,5
647*4724848cSchristos	vadduwm	8,8,9
648*4724848cSchristos	add	16,16,21
649*4724848cSchristos	add	17,17,22
650*4724848cSchristos	add	18,18,23
651*4724848cSchristos	vxor	3,3,0
652*4724848cSchristos	vxor	7,7,4
653*4724848cSchristos	vxor	11,11,8
654*4724848cSchristos	add	19,19,20
655*4724848cSchristos	xor	31,31,16
656*4724848cSchristos	xor	28,28,17
657*4724848cSchristos	vperm	3,3,3,19
658*4724848cSchristos	vperm	7,7,7,19
659*4724848cSchristos	vperm	11,11,11,19
660*4724848cSchristos	xor	29,29,18
661*4724848cSchristos	xor	30,30,19
662*4724848cSchristos	rotlwi	31,31,16
663*4724848cSchristos	vadduwm	2,2,3
664*4724848cSchristos	vadduwm	6,6,7
665*4724848cSchristos	vadduwm	10,10,11
666*4724848cSchristos	rotlwi	28,28,16
667*4724848cSchristos	rotlwi	29,29,16
668*4724848cSchristos	rotlwi	30,30,16
669*4724848cSchristos	vxor	1,1,2
670*4724848cSchristos	vxor	5,5,6
671*4724848cSchristos	vxor	9,9,10
672*4724848cSchristos	add	26,26,31
673*4724848cSchristos	add	27,27,28
674*4724848cSchristos	add	24,24,29
675*4724848cSchristos	vrlw	1,1,27
676*4724848cSchristos	vrlw	5,5,27
677*4724848cSchristos	vrlw	9,9,27
678*4724848cSchristos	add	25,25,30
679*4724848cSchristos	xor	21,21,26
680*4724848cSchristos	xor	22,22,27
681*4724848cSchristos	vadduwm	0,0,1
682*4724848cSchristos	vadduwm	4,4,5
683*4724848cSchristos	vadduwm	8,8,9
684*4724848cSchristos	xor	23,23,24
685*4724848cSchristos	xor	20,20,25
686*4724848cSchristos	rotlwi	21,21,12
687*4724848cSchristos	vxor	3,3,0
688*4724848cSchristos	vxor	7,7,4
689*4724848cSchristos	vxor	11,11,8
690*4724848cSchristos	rotlwi	22,22,12
691*4724848cSchristos	rotlwi	23,23,12
692*4724848cSchristos	rotlwi	20,20,12
693*4724848cSchristos	vperm	3,3,3,23
694*4724848cSchristos	vperm	7,7,7,23
695*4724848cSchristos	vperm	11,11,11,23
696*4724848cSchristos	add	16,16,21
697*4724848cSchristos	add	17,17,22
698*4724848cSchristos	add	18,18,23
699*4724848cSchristos	vadduwm	2,2,3
700*4724848cSchristos	vadduwm	6,6,7
701*4724848cSchristos	vadduwm	10,10,11
702*4724848cSchristos	add	19,19,20
703*4724848cSchristos	xor	31,31,16
704*4724848cSchristos	xor	28,28,17
705*4724848cSchristos	vxor	1,1,2
706*4724848cSchristos	vxor	5,5,6
707*4724848cSchristos	vxor	9,9,10
708*4724848cSchristos	xor	29,29,18
709*4724848cSchristos	xor	30,30,19
710*4724848cSchristos	rotlwi	31,31,8
711*4724848cSchristos	vrlw	1,1,28
712*4724848cSchristos	vrlw	5,5,28
713*4724848cSchristos	vrlw	9,9,28
714*4724848cSchristos	rotlwi	28,28,8
715*4724848cSchristos	rotlwi	29,29,8
716*4724848cSchristos	rotlwi	30,30,8
717*4724848cSchristos	vsldoi	2,2,2, 16-8
718*4724848cSchristos	vsldoi	6,6,6, 16-8
719*4724848cSchristos	vsldoi	10,10,10, 16-8
720*4724848cSchristos	add	26,26,31
721*4724848cSchristos	add	27,27,28
722*4724848cSchristos	add	24,24,29
723*4724848cSchristos	vsldoi	1,1,1, 16-4
724*4724848cSchristos	vsldoi	5,5,5, 16-4
725*4724848cSchristos	vsldoi	9,9,9, 16-4
726*4724848cSchristos	add	25,25,30
727*4724848cSchristos	xor	21,21,26
728*4724848cSchristos	xor	22,22,27
729*4724848cSchristos	vsldoi	3,3,3, 16-12
730*4724848cSchristos	vsldoi	7,7,7, 16-12
731*4724848cSchristos	vsldoi	11,11,11, 16-12
732*4724848cSchristos	xor	23,23,24
733*4724848cSchristos	xor	20,20,25
734*4724848cSchristos	rotlwi	21,21,7
735*4724848cSchristos	rotlwi	22,22,7
736*4724848cSchristos	rotlwi	23,23,7
737*4724848cSchristos	rotlwi	20,20,7
738*4724848cSchristos	bc	16,0,.Loop_vmx
739*4724848cSchristos
740*4724848cSchristos	subi	5,5,256
741*4724848cSchristos	addi	16,16,0x7865
742*4724848cSchristos	addi	17,17,0x646e
743*4724848cSchristos	addi	18,18,0x2d32
744*4724848cSchristos	addi	19,19,0x6574
745*4724848cSchristos	addis	16,16,0x6170
746*4724848cSchristos	addis	17,17,0x3320
747*4724848cSchristos	addis	18,18,0x7962
748*4724848cSchristos	addis	19,19,0x6b20
749*4724848cSchristos	add	20,20,7
750*4724848cSchristos	lwz	7,16(6)
751*4724848cSchristos	add	21,21,8
752*4724848cSchristos	lwz	8,20(6)
753*4724848cSchristos	add	22,22,9
754*4724848cSchristos	lwz	9,24(6)
755*4724848cSchristos	add	23,23,10
756*4724848cSchristos	lwz	10,28(6)
757*4724848cSchristos	add	24,24,7
758*4724848cSchristos	add	25,25,8
759*4724848cSchristos	add	26,26,9
760*4724848cSchristos	add	27,27,10
761*4724848cSchristos	add	28,28,11
762*4724848cSchristos	add	29,29,12
763*4724848cSchristos	add	30,30,14
764*4724848cSchristos	add	31,31,15
765*4724848cSchristos
766*4724848cSchristos	vadduwm	0,0,12
767*4724848cSchristos	vadduwm	4,4,12
768*4724848cSchristos	vadduwm	8,8,12
769*4724848cSchristos	vadduwm	1,1,13
770*4724848cSchristos	vadduwm	5,5,13
771*4724848cSchristos	vadduwm	9,9,13
772*4724848cSchristos	vadduwm	2,2,14
773*4724848cSchristos	vadduwm	6,6,14
774*4724848cSchristos	vadduwm	10,10,14
775*4724848cSchristos	vadduwm	3,3,15
776*4724848cSchristos	vadduwm	7,7,16
777*4724848cSchristos	vadduwm	11,11,17
778*4724848cSchristos
779*4724848cSchristos	addi	11,11,4
780*4724848cSchristos	vadduwm	15,15,18
781*4724848cSchristos	vadduwm	16,16,18
782*4724848cSchristos	vadduwm	17,17,18
783*4724848cSchristos
784*4724848cSchristos	mr	7,16
785*4724848cSchristos	rotlwi	16,16,8
786*4724848cSchristos	rlwimi	16,7,24,0,7
787*4724848cSchristos	rlwimi	16,7,24,16,23
788*4724848cSchristos	mr	8,17
789*4724848cSchristos	rotlwi	17,17,8
790*4724848cSchristos	rlwimi	17,8,24,0,7
791*4724848cSchristos	rlwimi	17,8,24,16,23
792*4724848cSchristos	mr	9,18
793*4724848cSchristos	rotlwi	18,18,8
794*4724848cSchristos	rlwimi	18,9,24,0,7
795*4724848cSchristos	rlwimi	18,9,24,16,23
796*4724848cSchristos	mr	10,19
797*4724848cSchristos	rotlwi	19,19,8
798*4724848cSchristos	rlwimi	19,10,24,0,7
799*4724848cSchristos	rlwimi	19,10,24,16,23
800*4724848cSchristos	mr	7,20
801*4724848cSchristos	rotlwi	20,20,8
802*4724848cSchristos	rlwimi	20,7,24,0,7
803*4724848cSchristos	rlwimi	20,7,24,16,23
804*4724848cSchristos	mr	8,21
805*4724848cSchristos	rotlwi	21,21,8
806*4724848cSchristos	rlwimi	21,8,24,0,7
807*4724848cSchristos	rlwimi	21,8,24,16,23
808*4724848cSchristos	mr	9,22
809*4724848cSchristos	rotlwi	22,22,8
810*4724848cSchristos	rlwimi	22,9,24,0,7
811*4724848cSchristos	rlwimi	22,9,24,16,23
812*4724848cSchristos	mr	10,23
813*4724848cSchristos	rotlwi	23,23,8
814*4724848cSchristos	rlwimi	23,10,24,0,7
815*4724848cSchristos	rlwimi	23,10,24,16,23
816*4724848cSchristos	mr	7,24
817*4724848cSchristos	rotlwi	24,24,8
818*4724848cSchristos	rlwimi	24,7,24,0,7
819*4724848cSchristos	rlwimi	24,7,24,16,23
820*4724848cSchristos	mr	8,25
821*4724848cSchristos	rotlwi	25,25,8
822*4724848cSchristos	rlwimi	25,8,24,0,7
823*4724848cSchristos	rlwimi	25,8,24,16,23
824*4724848cSchristos	mr	9,26
825*4724848cSchristos	rotlwi	26,26,8
826*4724848cSchristos	rlwimi	26,9,24,0,7
827*4724848cSchristos	rlwimi	26,9,24,16,23
828*4724848cSchristos	mr	10,27
829*4724848cSchristos	rotlwi	27,27,8
830*4724848cSchristos	rlwimi	27,10,24,0,7
831*4724848cSchristos	rlwimi	27,10,24,16,23
832*4724848cSchristos	mr	7,28
833*4724848cSchristos	rotlwi	28,28,8
834*4724848cSchristos	rlwimi	28,7,24,0,7
835*4724848cSchristos	rlwimi	28,7,24,16,23
836*4724848cSchristos	mr	8,29
837*4724848cSchristos	rotlwi	29,29,8
838*4724848cSchristos	rlwimi	29,8,24,0,7
839*4724848cSchristos	rlwimi	29,8,24,16,23
840*4724848cSchristos	mr	9,30
841*4724848cSchristos	rotlwi	30,30,8
842*4724848cSchristos	rlwimi	30,9,24,0,7
843*4724848cSchristos	rlwimi	30,9,24,16,23
844*4724848cSchristos	mr	10,31
845*4724848cSchristos	rotlwi	31,31,8
846*4724848cSchristos	rlwimi	31,10,24,0,7
847*4724848cSchristos	rlwimi	31,10,24,16,23
848*4724848cSchristos	lwz	7,0(4)
849*4724848cSchristos	lwz	8,4(4)
850*4724848cSchristos	lwz	9,8(4)
851*4724848cSchristos	lwz	10,12(4)
852*4724848cSchristos	xor	16,16,7
853*4724848cSchristos	lwz	7,16(4)
854*4724848cSchristos	xor	17,17,8
855*4724848cSchristos	lwz	8,20(4)
856*4724848cSchristos	xor	18,18,9
857*4724848cSchristos	lwz	9,24(4)
858*4724848cSchristos	xor	19,19,10
859*4724848cSchristos	lwz	10,28(4)
860*4724848cSchristos	xor	20,20,7
861*4724848cSchristos	lwz	7,32(4)
862*4724848cSchristos	xor	21,21,8
863*4724848cSchristos	lwz	8,36(4)
864*4724848cSchristos	xor	22,22,9
865*4724848cSchristos	lwz	9,40(4)
866*4724848cSchristos	xor	23,23,10
867*4724848cSchristos	lwz	10,44(4)
868*4724848cSchristos	xor	24,24,7
869*4724848cSchristos	lwz	7,48(4)
870*4724848cSchristos	xor	25,25,8
871*4724848cSchristos	lwz	8,52(4)
872*4724848cSchristos	xor	26,26,9
873*4724848cSchristos	lwz	9,56(4)
874*4724848cSchristos	xor	27,27,10
875*4724848cSchristos	lwz	10,60(4)
876*4724848cSchristos	xor	28,28,7
877*4724848cSchristos	stw	16,0(3)
878*4724848cSchristos	xor	29,29,8
879*4724848cSchristos	stw	17,4(3)
880*4724848cSchristos	xor	30,30,9
881*4724848cSchristos	stw	18,8(3)
882*4724848cSchristos	xor	31,31,10
883*4724848cSchristos	stw	19,12(3)
884*4724848cSchristos	addi	4,4,64
885*4724848cSchristos	stw	20,16(3)
886*4724848cSchristos	li	7,16
887*4724848cSchristos	stw	21,20(3)
888*4724848cSchristos	li	8,32
889*4724848cSchristos	stw	22,24(3)
890*4724848cSchristos	li	9,48
891*4724848cSchristos	stw	23,28(3)
892*4724848cSchristos	li	10,64
893*4724848cSchristos	stw	24,32(3)
894*4724848cSchristos	stw	25,36(3)
895*4724848cSchristos	stw	26,40(3)
896*4724848cSchristos	stw	27,44(3)
897*4724848cSchristos	stw	28,48(3)
898*4724848cSchristos	stw	29,52(3)
899*4724848cSchristos	stw	30,56(3)
900*4724848cSchristos	stw	31,60(3)
901*4724848cSchristos	addi	3,3,64
902*4724848cSchristos
903*4724848cSchristos	lvx	27,0,4
904*4724848cSchristos	lvx	28,7,4
905*4724848cSchristos	lvx	29,8,4
906*4724848cSchristos	lvx	30,9,4
907*4724848cSchristos	lvx	31,10,4
908*4724848cSchristos	addi	4,4,64
909*4724848cSchristos
910*4724848cSchristos	vperm	27,27,28,24
911*4724848cSchristos	vperm	28,28,29,24
912*4724848cSchristos	vperm	29,29,30,24
913*4724848cSchristos	vperm	30,30,31,24
914*4724848cSchristos	vxor	0,0,27
915*4724848cSchristos	vxor	1,1,28
916*4724848cSchristos	lvx	28,7,4
917*4724848cSchristos	vxor	2,2,29
918*4724848cSchristos	lvx	29,8,4
919*4724848cSchristos	vxor	3,3,30
920*4724848cSchristos	lvx	30,9,4
921*4724848cSchristos	lvx	27,10,4
922*4724848cSchristos	addi	4,4,64
923*4724848cSchristos	li	10,63
924*4724848cSchristos	vperm	0,0,0,25
925*4724848cSchristos	vperm	1,1,1,25
926*4724848cSchristos	vperm	2,2,2,25
927*4724848cSchristos	vperm	3,3,3,25
928*4724848cSchristos
929*4724848cSchristos	vperm	31,31,28,24
930*4724848cSchristos	vperm	28,28,29,24
931*4724848cSchristos	vperm	29,29,30,24
932*4724848cSchristos	vperm	30,30,27,24
933*4724848cSchristos	vxor	4,4,31
934*4724848cSchristos	vxor	5,5,28
935*4724848cSchristos	lvx	28,7,4
936*4724848cSchristos	vxor	6,6,29
937*4724848cSchristos	lvx	29,8,4
938*4724848cSchristos	vxor	7,7,30
939*4724848cSchristos	lvx	30,9,4
940*4724848cSchristos	lvx	31,10,4
941*4724848cSchristos	addi	4,4,64
942*4724848cSchristos	vperm	4,4,4,25
943*4724848cSchristos	vperm	5,5,5,25
944*4724848cSchristos	vperm	6,6,6,25
945*4724848cSchristos	vperm	7,7,7,25
946*4724848cSchristos
947*4724848cSchristos	vperm	27,27,28,24
948*4724848cSchristos	vperm	28,28,29,24
949*4724848cSchristos	vperm	29,29,30,24
950*4724848cSchristos	vperm	30,30,31,24
951*4724848cSchristos	vxor	8,8,27
952*4724848cSchristos	vxor	9,9,28
953*4724848cSchristos	vxor	10,10,29
954*4724848cSchristos	vxor	11,11,30
955*4724848cSchristos	vperm	8,8,8,25
956*4724848cSchristos	vperm	9,9,9,25
957*4724848cSchristos	vperm	10,10,10,25
958*4724848cSchristos	vperm	11,11,11,25
959*4724848cSchristos
960*4724848cSchristos	andi.	17,3,15
961*4724848cSchristos	mr	16,3
962*4724848cSchristos
963*4724848cSchristos	vsel	27,0,1,26
964*4724848cSchristos	vsel	28,1,2,26
965*4724848cSchristos	vsel	29,2,3,26
966*4724848cSchristos	vsel	30,3,4,26
967*4724848cSchristos	vsel	1,4,5,26
968*4724848cSchristos	vsel	2,5,6,26
969*4724848cSchristos	vsel	3,6,7,26
970*4724848cSchristos	vsel	4,7,8,26
971*4724848cSchristos	vsel	5,8,9,26
972*4724848cSchristos	vsel	6,9,10,26
973*4724848cSchristos	vsel	7,10,11,26
974*4724848cSchristos
975*4724848cSchristos
976*4724848cSchristos	stvx	27,7,3
977*4724848cSchristos	stvx	28,8,3
978*4724848cSchristos	stvx	29,9,3
979*4724848cSchristos	addi	3,3,64
980*4724848cSchristos	stvx	30,0,3
981*4724848cSchristos	stvx	1,7,3
982*4724848cSchristos	stvx	2,8,3
983*4724848cSchristos	stvx	3,9,3
984*4724848cSchristos	addi	3,3,64
985*4724848cSchristos	stvx	4,0,3
986*4724848cSchristos	stvx	5,7,3
987*4724848cSchristos	stvx	6,8,3
988*4724848cSchristos	stvx	7,9,3
989*4724848cSchristos	addi	3,3,64
990*4724848cSchristos
991*4724848cSchristos	beq	.Laligned_vmx
992*4724848cSchristos
993*4724848cSchristos	sub	18,3,17
994*4724848cSchristos	li	19,0
995*4724848cSchristos.Lunaligned_tail_vmx:
996*4724848cSchristos	stvebx	11,19,18
997*4724848cSchristos	addi	19,19,1
998*4724848cSchristos	cmpw	19,17
999*4724848cSchristos	bne	.Lunaligned_tail_vmx
1000*4724848cSchristos
1001*4724848cSchristos	sub	18,16,17
1002*4724848cSchristos.Lunaligned_head_vmx:
1003*4724848cSchristos	stvebx	0,17,18
1004*4724848cSchristos	cmpwi	17,15
1005*4724848cSchristos	addi	17,17,1
1006*4724848cSchristos	bne	.Lunaligned_head_vmx
1007*4724848cSchristos
1008*4724848cSchristos	cmplwi	5,255
1009*4724848cSchristos	bgt	.Loop_outer_vmx
1010*4724848cSchristos
1011*4724848cSchristos	b	.Ldone_vmx
1012*4724848cSchristos
1013*4724848cSchristos.align	4
1014*4724848cSchristos.Laligned_vmx:
1015*4724848cSchristos	stvx	0,0,16
1016*4724848cSchristos
1017*4724848cSchristos	cmplwi	5,255
1018*4724848cSchristos	bgt	.Loop_outer_vmx
1019*4724848cSchristos	nop
1020*4724848cSchristos
1021*4724848cSchristos.Ldone_vmx:
1022*4724848cSchristos	cmplwi	5,0
1023*4724848cSchristos	bnel	__ChaCha20_1x
1024*4724848cSchristos
1025*4724848cSchristos	lwz	12,244(1)
1026*4724848cSchristos	li	10,103
1027*4724848cSchristos	li	11,119
1028*4724848cSchristos	mtspr	256,12
1029*4724848cSchristos	lvx	23,10,1
1030*4724848cSchristos	addi	10,10,32
1031*4724848cSchristos	lvx	24,11,1
1032*4724848cSchristos	addi	11,11,32
1033*4724848cSchristos	lvx	25,10,1
1034*4724848cSchristos	addi	10,10,32
1035*4724848cSchristos	lvx	26,11,1
1036*4724848cSchristos	addi	11,11,32
1037*4724848cSchristos	lvx	27,10,1
1038*4724848cSchristos	addi	10,10,32
1039*4724848cSchristos	lvx	28,11,1
1040*4724848cSchristos	addi	11,11,32
1041*4724848cSchristos	lvx	29,10,1
1042*4724848cSchristos	addi	10,10,32
1043*4724848cSchristos	lvx	30,11,1
1044*4724848cSchristos	lvx	31,10,1
1045*4724848cSchristos	lwz	0, 324(1)
1046*4724848cSchristos	lwz	14,248(1)
1047*4724848cSchristos	lwz	15,252(1)
1048*4724848cSchristos	lwz	16,256(1)
1049*4724848cSchristos	lwz	17,260(1)
1050*4724848cSchristos	lwz	18,264(1)
1051*4724848cSchristos	lwz	19,268(1)
1052*4724848cSchristos	lwz	20,272(1)
1053*4724848cSchristos	lwz	21,276(1)
1054*4724848cSchristos	lwz	22,280(1)
1055*4724848cSchristos	lwz	23,284(1)
1056*4724848cSchristos	lwz	24,288(1)
1057*4724848cSchristos	lwz	25,292(1)
1058*4724848cSchristos	lwz	26,296(1)
1059*4724848cSchristos	lwz	27,300(1)
1060*4724848cSchristos	lwz	28,304(1)
1061*4724848cSchristos	lwz	29,308(1)
1062*4724848cSchristos	lwz	30,312(1)
1063*4724848cSchristos	lwz	31,316(1)
1064*4724848cSchristos	mtlr	0
1065*4724848cSchristos	addi	1,1,320
1066*4724848cSchristos	blr
1067*4724848cSchristos.long	0
1068*4724848cSchristos.byte	0,12,0x04,1,0x80,18,5,0
1069*4724848cSchristos.long	0
1070*4724848cSchristos
1071*4724848cSchristos
1072*4724848cSchristos.globl	ChaCha20_ctr32_vsx
1073*4724848cSchristos.type	ChaCha20_ctr32_vsx,@function
1074*4724848cSchristos.align	5
1075*4724848cSchristosChaCha20_ctr32_vsx:
1076*4724848cSchristos	stwu	1,-200(1)
1077*4724848cSchristos	mflr	0
1078*4724848cSchristos	li	10,103
1079*4724848cSchristos	li	11,119
1080*4724848cSchristos	mfspr	12,256
1081*4724848cSchristos	stvx	26,10,1
1082*4724848cSchristos	addi	10,10,32
1083*4724848cSchristos	stvx	27,11,1
1084*4724848cSchristos	addi	11,11,32
1085*4724848cSchristos	stvx	28,10,1
1086*4724848cSchristos	addi	10,10,32
1087*4724848cSchristos	stvx	29,11,1
1088*4724848cSchristos	addi	11,11,32
1089*4724848cSchristos	stvx	30,10,1
1090*4724848cSchristos	stvx	31,11,1
1091*4724848cSchristos	stw	12,196(1)
1092*4724848cSchristos	li	12,-4096+63
1093*4724848cSchristos	stw	0, 204(1)
1094*4724848cSchristos	mtspr	256,12
1095*4724848cSchristos
1096*4724848cSchristos	bl	.Lconsts
1097*4724848cSchristos.long	0x7E006619
1098*4724848cSchristos	addi	12,12,0x50
1099*4724848cSchristos	li	8,16
1100*4724848cSchristos	li	9,32
1101*4724848cSchristos	li	10,48
1102*4724848cSchristos	li	11,64
1103*4724848cSchristos
1104*4724848cSchristos.long	0x7E203619
1105*4724848cSchristos.long	0x7E483619
1106*4724848cSchristos.long	0x7E603E19
1107*4724848cSchristos
1108*4724848cSchristos	vxor	27,27,27
1109*4724848cSchristos.long	0x7F8B6619
1110*4724848cSchristos	vspltw	26,19,0
1111*4724848cSchristos	vsldoi	19,19,27,4
1112*4724848cSchristos	vsldoi	19,27,19,12
1113*4724848cSchristos	vadduwm	26,26,28
1114*4724848cSchristos
1115*4724848cSchristos	lvsl	31,0,8
1116*4724848cSchristos	vspltisb	27,3
1117*4724848cSchristos	vxor	31,31,27
1118*4724848cSchristos
1119*4724848cSchristos	li	0,10
1120*4724848cSchristos	mtctr	0
1121*4724848cSchristos	b	.Loop_outer_vsx
1122*4724848cSchristos
1123*4724848cSchristos.align	5
1124*4724848cSchristos.Loop_outer_vsx:
1125*4724848cSchristos	lvx	0,0,12
1126*4724848cSchristos	lvx	1,8,12
1127*4724848cSchristos	lvx	2,9,12
1128*4724848cSchristos	lvx	3,10,12
1129*4724848cSchristos
1130*4724848cSchristos	vspltw	4,17,0
1131*4724848cSchristos	vspltw	5,17,1
1132*4724848cSchristos	vspltw	6,17,2
1133*4724848cSchristos	vspltw	7,17,3
1134*4724848cSchristos
1135*4724848cSchristos	vspltw	8,18,0
1136*4724848cSchristos	vspltw	9,18,1
1137*4724848cSchristos	vspltw	10,18,2
1138*4724848cSchristos	vspltw	11,18,3
1139*4724848cSchristos
1140*4724848cSchristos	vor	12,26,26
1141*4724848cSchristos	vspltw	13,19,1
1142*4724848cSchristos	vspltw	14,19,2
1143*4724848cSchristos	vspltw	15,19,3
1144*4724848cSchristos
1145*4724848cSchristos	vspltisw	27,-16
1146*4724848cSchristos	vspltisw	28,12
1147*4724848cSchristos	vspltisw	29,8
1148*4724848cSchristos	vspltisw	30,7
1149*4724848cSchristos
1150*4724848cSchristos.Loop_vsx:
1151*4724848cSchristos	vadduwm	0,0,4
1152*4724848cSchristos	vadduwm	1,1,5
1153*4724848cSchristos	vadduwm	2,2,6
1154*4724848cSchristos	vadduwm	3,3,7
1155*4724848cSchristos	vxor	12,12,0
1156*4724848cSchristos	vxor	13,13,1
1157*4724848cSchristos	vxor	14,14,2
1158*4724848cSchristos	vxor	15,15,3
1159*4724848cSchristos	vrlw	12,12,27
1160*4724848cSchristos	vrlw	13,13,27
1161*4724848cSchristos	vrlw	14,14,27
1162*4724848cSchristos	vrlw	15,15,27
1163*4724848cSchristos	vadduwm	8,8,12
1164*4724848cSchristos	vadduwm	9,9,13
1165*4724848cSchristos	vadduwm	10,10,14
1166*4724848cSchristos	vadduwm	11,11,15
1167*4724848cSchristos	vxor	4,4,8
1168*4724848cSchristos	vxor	5,5,9
1169*4724848cSchristos	vxor	6,6,10
1170*4724848cSchristos	vxor	7,7,11
1171*4724848cSchristos	vrlw	4,4,28
1172*4724848cSchristos	vrlw	5,5,28
1173*4724848cSchristos	vrlw	6,6,28
1174*4724848cSchristos	vrlw	7,7,28
1175*4724848cSchristos	vadduwm	0,0,4
1176*4724848cSchristos	vadduwm	1,1,5
1177*4724848cSchristos	vadduwm	2,2,6
1178*4724848cSchristos	vadduwm	3,3,7
1179*4724848cSchristos	vxor	12,12,0
1180*4724848cSchristos	vxor	13,13,1
1181*4724848cSchristos	vxor	14,14,2
1182*4724848cSchristos	vxor	15,15,3
1183*4724848cSchristos	vrlw	12,12,29
1184*4724848cSchristos	vrlw	13,13,29
1185*4724848cSchristos	vrlw	14,14,29
1186*4724848cSchristos	vrlw	15,15,29
1187*4724848cSchristos	vadduwm	8,8,12
1188*4724848cSchristos	vadduwm	9,9,13
1189*4724848cSchristos	vadduwm	10,10,14
1190*4724848cSchristos	vadduwm	11,11,15
1191*4724848cSchristos	vxor	4,4,8
1192*4724848cSchristos	vxor	5,5,9
1193*4724848cSchristos	vxor	6,6,10
1194*4724848cSchristos	vxor	7,7,11
1195*4724848cSchristos	vrlw	4,4,30
1196*4724848cSchristos	vrlw	5,5,30
1197*4724848cSchristos	vrlw	6,6,30
1198*4724848cSchristos	vrlw	7,7,30
1199*4724848cSchristos	vadduwm	0,0,5
1200*4724848cSchristos	vadduwm	1,1,6
1201*4724848cSchristos	vadduwm	2,2,7
1202*4724848cSchristos	vadduwm	3,3,4
1203*4724848cSchristos	vxor	15,15,0
1204*4724848cSchristos	vxor	12,12,1
1205*4724848cSchristos	vxor	13,13,2
1206*4724848cSchristos	vxor	14,14,3
1207*4724848cSchristos	vrlw	15,15,27
1208*4724848cSchristos	vrlw	12,12,27
1209*4724848cSchristos	vrlw	13,13,27
1210*4724848cSchristos	vrlw	14,14,27
1211*4724848cSchristos	vadduwm	10,10,15
1212*4724848cSchristos	vadduwm	11,11,12
1213*4724848cSchristos	vadduwm	8,8,13
1214*4724848cSchristos	vadduwm	9,9,14
1215*4724848cSchristos	vxor	5,5,10
1216*4724848cSchristos	vxor	6,6,11
1217*4724848cSchristos	vxor	7,7,8
1218*4724848cSchristos	vxor	4,4,9
1219*4724848cSchristos	vrlw	5,5,28
1220*4724848cSchristos	vrlw	6,6,28
1221*4724848cSchristos	vrlw	7,7,28
1222*4724848cSchristos	vrlw	4,4,28
1223*4724848cSchristos	vadduwm	0,0,5
1224*4724848cSchristos	vadduwm	1,1,6
1225*4724848cSchristos	vadduwm	2,2,7
1226*4724848cSchristos	vadduwm	3,3,4
1227*4724848cSchristos	vxor	15,15,0
1228*4724848cSchristos	vxor	12,12,1
1229*4724848cSchristos	vxor	13,13,2
1230*4724848cSchristos	vxor	14,14,3
1231*4724848cSchristos	vrlw	15,15,29
1232*4724848cSchristos	vrlw	12,12,29
1233*4724848cSchristos	vrlw	13,13,29
1234*4724848cSchristos	vrlw	14,14,29
1235*4724848cSchristos	vadduwm	10,10,15
1236*4724848cSchristos	vadduwm	11,11,12
1237*4724848cSchristos	vadduwm	8,8,13
1238*4724848cSchristos	vadduwm	9,9,14
1239*4724848cSchristos	vxor	5,5,10
1240*4724848cSchristos	vxor	6,6,11
1241*4724848cSchristos	vxor	7,7,8
1242*4724848cSchristos	vxor	4,4,9
1243*4724848cSchristos	vrlw	5,5,30
1244*4724848cSchristos	vrlw	6,6,30
1245*4724848cSchristos	vrlw	7,7,30
1246*4724848cSchristos	vrlw	4,4,30
1247*4724848cSchristos	bc	16,0,.Loop_vsx
1248*4724848cSchristos
1249*4724848cSchristos	vadduwm	12,12,26
1250*4724848cSchristos
1251*4724848cSchristos.long	0x13600F8C
1252*4724848cSchristos.long	0x13821F8C
1253*4724848cSchristos.long	0x10000E8C
1254*4724848cSchristos.long	0x10421E8C
1255*4724848cSchristos.long	0x13A42F8C
1256*4724848cSchristos.long	0x13C63F8C
1257*4724848cSchristos.long	0xF0201057
1258*4724848cSchristos.long	0xF0601357
1259*4724848cSchristos.long	0xF01BE057
1260*4724848cSchristos.long	0xF05BE357
1261*4724848cSchristos
1262*4724848cSchristos.long	0x10842E8C
1263*4724848cSchristos.long	0x10C63E8C
1264*4724848cSchristos.long	0x13684F8C
1265*4724848cSchristos.long	0x138A5F8C
1266*4724848cSchristos.long	0xF0A43057
1267*4724848cSchristos.long	0xF0E43357
1268*4724848cSchristos.long	0xF09DF057
1269*4724848cSchristos.long	0xF0DDF357
1270*4724848cSchristos
1271*4724848cSchristos.long	0x11084E8C
1272*4724848cSchristos.long	0x114A5E8C
1273*4724848cSchristos.long	0x13AC6F8C
1274*4724848cSchristos.long	0x13CE7F8C
1275*4724848cSchristos.long	0xF1285057
1276*4724848cSchristos.long	0xF1685357
1277*4724848cSchristos.long	0xF11BE057
1278*4724848cSchristos.long	0xF15BE357
1279*4724848cSchristos
1280*4724848cSchristos.long	0x118C6E8C
1281*4724848cSchristos.long	0x11CE7E8C
1282*4724848cSchristos	vspltisw	27,4
1283*4724848cSchristos	vadduwm	26,26,27
1284*4724848cSchristos.long	0xF1AC7057
1285*4724848cSchristos.long	0xF1EC7357
1286*4724848cSchristos.long	0xF19DF057
1287*4724848cSchristos.long	0xF1DDF357
1288*4724848cSchristos
1289*4724848cSchristos	vadduwm	0,0,16
1290*4724848cSchristos	vadduwm	4,4,17
1291*4724848cSchristos	vadduwm	8,8,18
1292*4724848cSchristos	vadduwm	12,12,19
1293*4724848cSchristos
1294*4724848cSchristos	vperm	0,0,0,31
1295*4724848cSchristos	vperm	4,4,4,31
1296*4724848cSchristos	vperm	8,8,8,31
1297*4724848cSchristos	vperm	12,12,12,31
1298*4724848cSchristos
1299*4724848cSchristos	cmplwi	5,0x40
1300*4724848cSchristos	blt	.Ltail_vsx
1301*4724848cSchristos
1302*4724848cSchristos.long	0x7F602619
1303*4724848cSchristos.long	0x7F882619
1304*4724848cSchristos.long	0x7FA92619
1305*4724848cSchristos.long	0x7FCA2619
1306*4724848cSchristos
1307*4724848cSchristos	vxor	27,27,0
1308*4724848cSchristos	vxor	28,28,4
1309*4724848cSchristos	vxor	29,29,8
1310*4724848cSchristos	vxor	30,30,12
1311*4724848cSchristos
1312*4724848cSchristos.long	0x7F601F19
1313*4724848cSchristos.long	0x7F881F19
1314*4724848cSchristos	addi	4,4,0x40
1315*4724848cSchristos.long	0x7FA91F19
1316*4724848cSchristos	subi	5,5,0x40
1317*4724848cSchristos.long	0x7FCA1F19
1318*4724848cSchristos	addi	3,3,0x40
1319*4724848cSchristos	beq	.Ldone_vsx
1320*4724848cSchristos
1321*4724848cSchristos	vadduwm	0,1,16
1322*4724848cSchristos	vadduwm	4,5,17
1323*4724848cSchristos	vadduwm	8,9,18
1324*4724848cSchristos	vadduwm	12,13,19
1325*4724848cSchristos
1326*4724848cSchristos	vperm	0,0,0,31
1327*4724848cSchristos	vperm	4,4,4,31
1328*4724848cSchristos	vperm	8,8,8,31
1329*4724848cSchristos	vperm	12,12,12,31
1330*4724848cSchristos
1331*4724848cSchristos	cmplwi	5,0x40
1332*4724848cSchristos	blt	.Ltail_vsx
1333*4724848cSchristos
1334*4724848cSchristos.long	0x7F602619
1335*4724848cSchristos.long	0x7F882619
1336*4724848cSchristos.long	0x7FA92619
1337*4724848cSchristos.long	0x7FCA2619
1338*4724848cSchristos
1339*4724848cSchristos	vxor	27,27,0
1340*4724848cSchristos	vxor	28,28,4
1341*4724848cSchristos	vxor	29,29,8
1342*4724848cSchristos	vxor	30,30,12
1343*4724848cSchristos
1344*4724848cSchristos.long	0x7F601F19
1345*4724848cSchristos.long	0x7F881F19
1346*4724848cSchristos	addi	4,4,0x40
1347*4724848cSchristos.long	0x7FA91F19
1348*4724848cSchristos	subi	5,5,0x40
1349*4724848cSchristos.long	0x7FCA1F19
1350*4724848cSchristos	addi	3,3,0x40
1351*4724848cSchristos	beq	.Ldone_vsx
1352*4724848cSchristos
1353*4724848cSchristos	vadduwm	0,2,16
1354*4724848cSchristos	vadduwm	4,6,17
1355*4724848cSchristos	vadduwm	8,10,18
1356*4724848cSchristos	vadduwm	12,14,19
1357*4724848cSchristos
1358*4724848cSchristos	vperm	0,0,0,31
1359*4724848cSchristos	vperm	4,4,4,31
1360*4724848cSchristos	vperm	8,8,8,31
1361*4724848cSchristos	vperm	12,12,12,31
1362*4724848cSchristos
1363*4724848cSchristos	cmplwi	5,0x40
1364*4724848cSchristos	blt	.Ltail_vsx
1365*4724848cSchristos
1366*4724848cSchristos.long	0x7F602619
1367*4724848cSchristos.long	0x7F882619
1368*4724848cSchristos.long	0x7FA92619
1369*4724848cSchristos.long	0x7FCA2619
1370*4724848cSchristos
1371*4724848cSchristos	vxor	27,27,0
1372*4724848cSchristos	vxor	28,28,4
1373*4724848cSchristos	vxor	29,29,8
1374*4724848cSchristos	vxor	30,30,12
1375*4724848cSchristos
1376*4724848cSchristos.long	0x7F601F19
1377*4724848cSchristos.long	0x7F881F19
1378*4724848cSchristos	addi	4,4,0x40
1379*4724848cSchristos.long	0x7FA91F19
1380*4724848cSchristos	subi	5,5,0x40
1381*4724848cSchristos.long	0x7FCA1F19
1382*4724848cSchristos	addi	3,3,0x40
1383*4724848cSchristos	beq	.Ldone_vsx
1384*4724848cSchristos
1385*4724848cSchristos	vadduwm	0,3,16
1386*4724848cSchristos	vadduwm	4,7,17
1387*4724848cSchristos	vadduwm	8,11,18
1388*4724848cSchristos	vadduwm	12,15,19
1389*4724848cSchristos
1390*4724848cSchristos	vperm	0,0,0,31
1391*4724848cSchristos	vperm	4,4,4,31
1392*4724848cSchristos	vperm	8,8,8,31
1393*4724848cSchristos	vperm	12,12,12,31
1394*4724848cSchristos
1395*4724848cSchristos	cmplwi	5,0x40
1396*4724848cSchristos	blt	.Ltail_vsx
1397*4724848cSchristos
1398*4724848cSchristos.long	0x7F602619
1399*4724848cSchristos.long	0x7F882619
1400*4724848cSchristos.long	0x7FA92619
1401*4724848cSchristos.long	0x7FCA2619
1402*4724848cSchristos
1403*4724848cSchristos	vxor	27,27,0
1404*4724848cSchristos	vxor	28,28,4
1405*4724848cSchristos	vxor	29,29,8
1406*4724848cSchristos	vxor	30,30,12
1407*4724848cSchristos
1408*4724848cSchristos.long	0x7F601F19
1409*4724848cSchristos.long	0x7F881F19
1410*4724848cSchristos	addi	4,4,0x40
1411*4724848cSchristos.long	0x7FA91F19
1412*4724848cSchristos	subi	5,5,0x40
1413*4724848cSchristos.long	0x7FCA1F19
1414*4724848cSchristos	addi	3,3,0x40
1415*4724848cSchristos	mtctr	0
1416*4724848cSchristos	bne	.Loop_outer_vsx
1417*4724848cSchristos
1418*4724848cSchristos.Ldone_vsx:
1419*4724848cSchristos	lwz	12,196(1)
1420*4724848cSchristos	li	10,103
1421*4724848cSchristos	li	11,119
1422*4724848cSchristos	lwz	0, 204(1)
1423*4724848cSchristos	mtspr	256,12
1424*4724848cSchristos	lvx	26,10,1
1425*4724848cSchristos	addi	10,10,32
1426*4724848cSchristos	lvx	27,11,1
1427*4724848cSchristos	addi	11,11,32
1428*4724848cSchristos	lvx	28,10,1
1429*4724848cSchristos	addi	10,10,32
1430*4724848cSchristos	lvx	29,11,1
1431*4724848cSchristos	addi	11,11,32
1432*4724848cSchristos	lvx	30,10,1
1433*4724848cSchristos	lvx	31,11,1
1434*4724848cSchristos	mtlr	0
1435*4724848cSchristos	addi	1,1,200
1436*4724848cSchristos	blr
1437*4724848cSchristos
1438*4724848cSchristos.align	4
1439*4724848cSchristos.Ltail_vsx:
1440*4724848cSchristos	addi	11,1,24
1441*4724848cSchristos	mtctr	5
1442*4724848cSchristos.long	0x7C005F19
1443*4724848cSchristos.long	0x7C885F19
1444*4724848cSchristos.long	0x7D095F19
1445*4724848cSchristos.long	0x7D8A5F19
1446*4724848cSchristos	subi	12,11,1
1447*4724848cSchristos	subi	4,4,1
1448*4724848cSchristos	subi	3,3,1
1449*4724848cSchristos
1450*4724848cSchristos.Loop_tail_vsx:
1451*4724848cSchristos	lbzu	6,1(12)
1452*4724848cSchristos	lbzu	7,1(4)
1453*4724848cSchristos	xor	6,6,7
1454*4724848cSchristos	stbu	6,1(3)
1455*4724848cSchristos	bc	16,0,.Loop_tail_vsx
1456*4724848cSchristos
1457*4724848cSchristos.long	0x7E005F19
1458*4724848cSchristos.long	0x7E085F19
1459*4724848cSchristos.long	0x7E095F19
1460*4724848cSchristos.long	0x7E0A5F19
1461*4724848cSchristos
1462*4724848cSchristos	b	.Ldone_vsx
1463*4724848cSchristos.long	0
1464*4724848cSchristos.byte	0,12,0x04,1,0x80,0,5,0
1465*4724848cSchristos.long	0
1466*4724848cSchristos
1467*4724848cSchristos.align	5
1468*4724848cSchristos.Lconsts:
1469*4724848cSchristos	mflr	0
1470*4724848cSchristos	bcl	20,31,$+4
1471*4724848cSchristos	mflr	12
1472*4724848cSchristos	addi	12,12,56
1473*4724848cSchristos	mtlr	0
1474*4724848cSchristos	blr
1475*4724848cSchristos.long	0
1476*4724848cSchristos.byte	0,12,0x14,0,0,0,0,0
1477*4724848cSchristos.space	28
1478*4724848cSchristos.Lsigma:
1479*4724848cSchristos.long	0x61707865,0x3320646e,0x79622d32,0x6b206574
1480*4724848cSchristos.long	1,0,0,0
1481*4724848cSchristos.long	4,0,0,0
1482*4724848cSchristos.long	0x02030001,0x06070405,0x0a0b0809,0x0e0f0c0d
1483*4724848cSchristos.long	0x01020300,0x05060704,0x090a0b08,0x0d0e0f0c
1484*4724848cSchristos.long	0x61707865,0x61707865,0x61707865,0x61707865
1485*4724848cSchristos.long	0x3320646e,0x3320646e,0x3320646e,0x3320646e
1486*4724848cSchristos.long	0x79622d32,0x79622d32,0x79622d32,0x79622d32
1487*4724848cSchristos.long	0x6b206574,0x6b206574,0x6b206574,0x6b206574
1488*4724848cSchristos.long	0,1,2,3
1489*4724848cSchristos.byte	67,104,97,67,104,97,50,48,32,102,111,114,32,80,111,119,101,114,80,67,47,65,108,116,105,86,101,99,44,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
1490*4724848cSchristos.align	2
1491*4724848cSchristos.align	2
1492