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