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