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