xref: /netbsd-src/crypto/external/bsd/openssl/lib/libcrypto/arch/powerpc/aesp8-ppc.S (revision 7d9ffdb3e9da593a05c5e2169f72fc7bada08bc9)
1cff8db61Sspz.machine	"any"
2cff8db61Sspz
3cff8db61Sspz.text
4cff8db61Sspz
5cff8db61Sspz.align	7
6cff8db61Sspzrcon:
7cff8db61Sspz.byte	0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00
8cff8db61Sspz.byte	0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00
9cff8db61Sspz.byte	0x0d,0x0e,0x0f,0x0c,0x0d,0x0e,0x0f,0x0c,0x0d,0x0e,0x0f,0x0c,0x0d,0x0e,0x0f,0x0c
10cff8db61Sspz.byte	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
11*7d9ffdb3Schristos.long	0x0f102132, 0x43546576, 0x8798a9ba, 0xcbdcedfe
12cff8db61Sspz.Lconsts:
13cff8db61Sspz	mflr	0
14cff8db61Sspz	bcl	20,31,$+4
15cff8db61Sspz	mflr	6
16*7d9ffdb3Schristos	addi	6,6,-0x58
17cff8db61Sspz	mtlr	0
18cff8db61Sspz	blr
19cff8db61Sspz.long	0
20cff8db61Sspz.byte	0,12,0x14,0,0,0,0,0
21e0ea3921Schristos.byte	65,69,83,32,102,111,114,32,80,111,119,101,114,73,83,65,32,50,46,48,55,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
22cff8db61Sspz.align	2
23cff8db61Sspz
24cff8db61Sspz.globl	aes_p8_set_encrypt_key
25cff8db61Sspz.type	aes_p8_set_encrypt_key,@function
26cff8db61Sspz.align	5
27cff8db61Sspzaes_p8_set_encrypt_key:
28cff8db61Sspz.Lset_encrypt_key:
29cff8db61Sspz	mflr	11
30cff8db61Sspz	stw	11,4(1)
31cff8db61Sspz
32cff8db61Sspz	li	6,-1
33cff8db61Sspz	cmplwi	3,0
34cff8db61Sspz	beq-	.Lenc_key_abort
35cff8db61Sspz	cmplwi	5,0
36cff8db61Sspz	beq-	.Lenc_key_abort
37cff8db61Sspz	li	6,-2
38cff8db61Sspz	cmpwi	4,128
39cff8db61Sspz	blt-	.Lenc_key_abort
40cff8db61Sspz	cmpwi	4,256
41cff8db61Sspz	bgt-	.Lenc_key_abort
42cff8db61Sspz	andi.	0,4,0x3f
43cff8db61Sspz	bne-	.Lenc_key_abort
44cff8db61Sspz
45cff8db61Sspz	lis	0,0xfff0
46cff8db61Sspz	mfspr	12,256
47cff8db61Sspz	mtspr	256,0
48cff8db61Sspz
49cff8db61Sspz	bl	.Lconsts
50cff8db61Sspz	mtlr	11
51cff8db61Sspz
52cff8db61Sspz	neg	9,3
53cff8db61Sspz	lvx	1,0,3
54cff8db61Sspz	addi	3,3,15
55cff8db61Sspz	lvsr	3,0,9
56cff8db61Sspz	li	8,0x20
57cff8db61Sspz	cmpwi	4,192
58cff8db61Sspz	lvx	2,0,3
59cff8db61Sspz
60cff8db61Sspz	lvx	4,0,6
61cff8db61Sspz
62cff8db61Sspz	lvx	5,8,6
63cff8db61Sspz	addi	6,6,0x10
64cff8db61Sspz	vperm	1,1,2,3
65cff8db61Sspz	li	7,8
66cff8db61Sspz	vxor	0,0,0
67cff8db61Sspz	mtctr	7
68cff8db61Sspz
69cff8db61Sspz	lvsr	8,0,5
70cff8db61Sspz	vspltisb	9,-1
71cff8db61Sspz	lvx	10,0,5
72cff8db61Sspz	vperm	9,0,9,8
73cff8db61Sspz
74cff8db61Sspz	blt	.Loop128
75cff8db61Sspz	addi	3,3,8
76cff8db61Sspz	beq	.L192
77cff8db61Sspz	addi	3,3,8
78cff8db61Sspz	b	.L256
79cff8db61Sspz
80cff8db61Sspz.align	4
81cff8db61Sspz.Loop128:
82cff8db61Sspz	vperm	3,1,1,5
83cff8db61Sspz	vsldoi	6,0,1,12
84cff8db61Sspz	vperm	11,1,1,8
85cff8db61Sspz	vsel	7,10,11,9
86cff8db61Sspz	vor	10,11,11
87cff8db61Sspz.long	0x10632509
88cff8db61Sspz	stvx	7,0,5
89cff8db61Sspz	addi	5,5,16
90cff8db61Sspz
91cff8db61Sspz	vxor	1,1,6
92cff8db61Sspz	vsldoi	6,0,6,12
93cff8db61Sspz	vxor	1,1,6
94cff8db61Sspz	vsldoi	6,0,6,12
95cff8db61Sspz	vxor	1,1,6
96cff8db61Sspz	vadduwm	4,4,4
97cff8db61Sspz	vxor	1,1,3
98cff8db61Sspz	bc	16,0,.Loop128
99cff8db61Sspz
100cff8db61Sspz	lvx	4,0,6
101cff8db61Sspz
102cff8db61Sspz	vperm	3,1,1,5
103cff8db61Sspz	vsldoi	6,0,1,12
104cff8db61Sspz	vperm	11,1,1,8
105cff8db61Sspz	vsel	7,10,11,9
106cff8db61Sspz	vor	10,11,11
107cff8db61Sspz.long	0x10632509
108cff8db61Sspz	stvx	7,0,5
109cff8db61Sspz	addi	5,5,16
110cff8db61Sspz
111cff8db61Sspz	vxor	1,1,6
112cff8db61Sspz	vsldoi	6,0,6,12
113cff8db61Sspz	vxor	1,1,6
114cff8db61Sspz	vsldoi	6,0,6,12
115cff8db61Sspz	vxor	1,1,6
116cff8db61Sspz	vadduwm	4,4,4
117cff8db61Sspz	vxor	1,1,3
118cff8db61Sspz
119cff8db61Sspz	vperm	3,1,1,5
120cff8db61Sspz	vsldoi	6,0,1,12
121cff8db61Sspz	vperm	11,1,1,8
122cff8db61Sspz	vsel	7,10,11,9
123cff8db61Sspz	vor	10,11,11
124cff8db61Sspz.long	0x10632509
125cff8db61Sspz	stvx	7,0,5
126cff8db61Sspz	addi	5,5,16
127cff8db61Sspz
128cff8db61Sspz	vxor	1,1,6
129cff8db61Sspz	vsldoi	6,0,6,12
130cff8db61Sspz	vxor	1,1,6
131cff8db61Sspz	vsldoi	6,0,6,12
132cff8db61Sspz	vxor	1,1,6
133cff8db61Sspz	vxor	1,1,3
134cff8db61Sspz	vperm	11,1,1,8
135cff8db61Sspz	vsel	7,10,11,9
136cff8db61Sspz	vor	10,11,11
137cff8db61Sspz	stvx	7,0,5
138cff8db61Sspz
139cff8db61Sspz	addi	3,5,15
140cff8db61Sspz	addi	5,5,0x50
141cff8db61Sspz
142cff8db61Sspz	li	8,10
143cff8db61Sspz	b	.Ldone
144cff8db61Sspz
145cff8db61Sspz.align	4
146cff8db61Sspz.L192:
147cff8db61Sspz	lvx	6,0,3
148cff8db61Sspz	li	7,4
149cff8db61Sspz	vperm	11,1,1,8
150cff8db61Sspz	vsel	7,10,11,9
151cff8db61Sspz	vor	10,11,11
152cff8db61Sspz	stvx	7,0,5
153cff8db61Sspz	addi	5,5,16
154cff8db61Sspz	vperm	2,2,6,3
155cff8db61Sspz	vspltisb	3,8
156cff8db61Sspz	mtctr	7
157cff8db61Sspz	vsububm	5,5,3
158cff8db61Sspz
159cff8db61Sspz.Loop192:
160cff8db61Sspz	vperm	3,2,2,5
161cff8db61Sspz	vsldoi	6,0,1,12
162cff8db61Sspz.long	0x10632509
163cff8db61Sspz
164cff8db61Sspz	vxor	1,1,6
165cff8db61Sspz	vsldoi	6,0,6,12
166cff8db61Sspz	vxor	1,1,6
167cff8db61Sspz	vsldoi	6,0,6,12
168cff8db61Sspz	vxor	1,1,6
169cff8db61Sspz
170cff8db61Sspz	vsldoi	7,0,2,8
171cff8db61Sspz	vspltw	6,1,3
172cff8db61Sspz	vxor	6,6,2
173cff8db61Sspz	vsldoi	2,0,2,12
174cff8db61Sspz	vadduwm	4,4,4
175cff8db61Sspz	vxor	2,2,6
176cff8db61Sspz	vxor	1,1,3
177cff8db61Sspz	vxor	2,2,3
178cff8db61Sspz	vsldoi	7,7,1,8
179cff8db61Sspz
180cff8db61Sspz	vperm	3,2,2,5
181cff8db61Sspz	vsldoi	6,0,1,12
182cff8db61Sspz	vperm	11,7,7,8
183cff8db61Sspz	vsel	7,10,11,9
184cff8db61Sspz	vor	10,11,11
185cff8db61Sspz.long	0x10632509
186cff8db61Sspz	stvx	7,0,5
187cff8db61Sspz	addi	5,5,16
188cff8db61Sspz
189cff8db61Sspz	vsldoi	7,1,2,8
190cff8db61Sspz	vxor	1,1,6
191cff8db61Sspz	vsldoi	6,0,6,12
192cff8db61Sspz	vperm	11,7,7,8
193cff8db61Sspz	vsel	7,10,11,9
194cff8db61Sspz	vor	10,11,11
195cff8db61Sspz	vxor	1,1,6
196cff8db61Sspz	vsldoi	6,0,6,12
197cff8db61Sspz	vxor	1,1,6
198cff8db61Sspz	stvx	7,0,5
199cff8db61Sspz	addi	5,5,16
200cff8db61Sspz
201cff8db61Sspz	vspltw	6,1,3
202cff8db61Sspz	vxor	6,6,2
203cff8db61Sspz	vsldoi	2,0,2,12
204cff8db61Sspz	vadduwm	4,4,4
205cff8db61Sspz	vxor	2,2,6
206cff8db61Sspz	vxor	1,1,3
207cff8db61Sspz	vxor	2,2,3
208cff8db61Sspz	vperm	11,1,1,8
209cff8db61Sspz	vsel	7,10,11,9
210cff8db61Sspz	vor	10,11,11
211cff8db61Sspz	stvx	7,0,5
212cff8db61Sspz	addi	3,5,15
213cff8db61Sspz	addi	5,5,16
214cff8db61Sspz	bc	16,0,.Loop192
215cff8db61Sspz
216cff8db61Sspz	li	8,12
217cff8db61Sspz	addi	5,5,0x20
218cff8db61Sspz	b	.Ldone
219cff8db61Sspz
220cff8db61Sspz.align	4
221cff8db61Sspz.L256:
222cff8db61Sspz	lvx	6,0,3
223cff8db61Sspz	li	7,7
224cff8db61Sspz	li	8,14
225cff8db61Sspz	vperm	11,1,1,8
226cff8db61Sspz	vsel	7,10,11,9
227cff8db61Sspz	vor	10,11,11
228cff8db61Sspz	stvx	7,0,5
229cff8db61Sspz	addi	5,5,16
230cff8db61Sspz	vperm	2,2,6,3
231cff8db61Sspz	mtctr	7
232cff8db61Sspz
233cff8db61Sspz.Loop256:
234cff8db61Sspz	vperm	3,2,2,5
235cff8db61Sspz	vsldoi	6,0,1,12
236cff8db61Sspz	vperm	11,2,2,8
237cff8db61Sspz	vsel	7,10,11,9
238cff8db61Sspz	vor	10,11,11
239cff8db61Sspz.long	0x10632509
240cff8db61Sspz	stvx	7,0,5
241cff8db61Sspz	addi	5,5,16
242cff8db61Sspz
243cff8db61Sspz	vxor	1,1,6
244cff8db61Sspz	vsldoi	6,0,6,12
245cff8db61Sspz	vxor	1,1,6
246cff8db61Sspz	vsldoi	6,0,6,12
247cff8db61Sspz	vxor	1,1,6
248cff8db61Sspz	vadduwm	4,4,4
249cff8db61Sspz	vxor	1,1,3
250cff8db61Sspz	vperm	11,1,1,8
251cff8db61Sspz	vsel	7,10,11,9
252cff8db61Sspz	vor	10,11,11
253cff8db61Sspz	stvx	7,0,5
254cff8db61Sspz	addi	3,5,15
255cff8db61Sspz	addi	5,5,16
256cff8db61Sspz	bdz	.Ldone
257cff8db61Sspz
258cff8db61Sspz	vspltw	3,1,3
259cff8db61Sspz	vsldoi	6,0,2,12
260cff8db61Sspz.long	0x106305C8
261cff8db61Sspz
262cff8db61Sspz	vxor	2,2,6
263cff8db61Sspz	vsldoi	6,0,6,12
264cff8db61Sspz	vxor	2,2,6
265cff8db61Sspz	vsldoi	6,0,6,12
266cff8db61Sspz	vxor	2,2,6
267cff8db61Sspz
268cff8db61Sspz	vxor	2,2,3
269cff8db61Sspz	b	.Loop256
270cff8db61Sspz
271cff8db61Sspz.align	4
272cff8db61Sspz.Ldone:
273cff8db61Sspz	lvx	2,0,3
274cff8db61Sspz	vsel	2,10,2,9
275cff8db61Sspz	stvx	2,0,3
276cff8db61Sspz	li	6,0
277cff8db61Sspz	mtspr	256,12
278cff8db61Sspz	stw	8,0(5)
279cff8db61Sspz
280cff8db61Sspz.Lenc_key_abort:
281cff8db61Sspz	mr	3,6
282cff8db61Sspz	blr
283cff8db61Sspz.long	0
284cff8db61Sspz.byte	0,12,0x14,1,0,0,3,0
285cff8db61Sspz.long	0
286cff8db61Sspz
287cff8db61Sspz
288cff8db61Sspz.globl	aes_p8_set_decrypt_key
289cff8db61Sspz.type	aes_p8_set_decrypt_key,@function
290cff8db61Sspz.align	5
291cff8db61Sspzaes_p8_set_decrypt_key:
292cff8db61Sspz	stwu	1,-32(1)
293cff8db61Sspz	mflr	10
294cff8db61Sspz	stw	10,32+4(1)
295cff8db61Sspz	bl	.Lset_encrypt_key
296cff8db61Sspz	mtlr	10
297cff8db61Sspz
298cff8db61Sspz	cmpwi	3,0
299cff8db61Sspz	bne-	.Ldec_key_abort
300cff8db61Sspz
301cff8db61Sspz	slwi	7,8,4
302cff8db61Sspz	subi	3,5,240
303cff8db61Sspz	srwi	8,8,1
304cff8db61Sspz	add	5,3,7
305cff8db61Sspz	mtctr	8
306cff8db61Sspz
307cff8db61Sspz.Ldeckey:
308cff8db61Sspz	lwz	0, 0(3)
309cff8db61Sspz	lwz	6, 4(3)
310cff8db61Sspz	lwz	7, 8(3)
311cff8db61Sspz	lwz	8, 12(3)
312cff8db61Sspz	addi	3,3,16
313cff8db61Sspz	lwz	9, 0(5)
314cff8db61Sspz	lwz	10,4(5)
315cff8db61Sspz	lwz	11,8(5)
316cff8db61Sspz	lwz	12,12(5)
317cff8db61Sspz	stw	0, 0(5)
318cff8db61Sspz	stw	6, 4(5)
319cff8db61Sspz	stw	7, 8(5)
320cff8db61Sspz	stw	8, 12(5)
321cff8db61Sspz	subi	5,5,16
322cff8db61Sspz	stw	9, -16(3)
323cff8db61Sspz	stw	10,-12(3)
324cff8db61Sspz	stw	11,-8(3)
325cff8db61Sspz	stw	12,-4(3)
326cff8db61Sspz	bc	16,0,.Ldeckey
327cff8db61Sspz
328cff8db61Sspz	xor	3,3,3
329cff8db61Sspz.Ldec_key_abort:
330cff8db61Sspz	addi	1,1,32
331cff8db61Sspz	blr
332cff8db61Sspz.long	0
333cff8db61Sspz.byte	0,12,4,1,0x80,0,3,0
334cff8db61Sspz.long	0
335cff8db61Sspz
336cff8db61Sspz.globl	aes_p8_encrypt
337cff8db61Sspz.type	aes_p8_encrypt,@function
338cff8db61Sspz.align	5
339cff8db61Sspzaes_p8_encrypt:
340cff8db61Sspz	lwz	6,240(5)
341cff8db61Sspz	lis	0,0xfc00
342cff8db61Sspz	mfspr	12,256
343cff8db61Sspz	li	7,15
344cff8db61Sspz	mtspr	256,0
345cff8db61Sspz
346cff8db61Sspz	lvx	0,0,3
347cff8db61Sspz	neg	11,4
348cff8db61Sspz	lvx	1,7,3
349cff8db61Sspz	lvsl	2,0,3
350cff8db61Sspz
351cff8db61Sspz	lvsl	3,0,11
352cff8db61Sspz
353cff8db61Sspz	li	7,16
354cff8db61Sspz	vperm	0,0,1,2
355cff8db61Sspz	lvx	1,0,5
356cff8db61Sspz	lvsl	5,0,5
357cff8db61Sspz	srwi	6,6,1
358cff8db61Sspz	lvx	2,7,5
359cff8db61Sspz	addi	7,7,16
360cff8db61Sspz	subi	6,6,1
361cff8db61Sspz	vperm	1,1,2,5
362cff8db61Sspz
363cff8db61Sspz	vxor	0,0,1
364cff8db61Sspz	lvx	1,7,5
365cff8db61Sspz	addi	7,7,16
366cff8db61Sspz	mtctr	6
367cff8db61Sspz
368cff8db61Sspz.Loop_enc:
369cff8db61Sspz	vperm	2,2,1,5
370cff8db61Sspz.long	0x10001508
371cff8db61Sspz	lvx	2,7,5
372cff8db61Sspz	addi	7,7,16
373cff8db61Sspz	vperm	1,1,2,5
374cff8db61Sspz.long	0x10000D08
375cff8db61Sspz	lvx	1,7,5
376cff8db61Sspz	addi	7,7,16
377cff8db61Sspz	bc	16,0,.Loop_enc
378cff8db61Sspz
379cff8db61Sspz	vperm	2,2,1,5
380cff8db61Sspz.long	0x10001508
381cff8db61Sspz	lvx	2,7,5
382cff8db61Sspz	vperm	1,1,2,5
383cff8db61Sspz.long	0x10000D09
384cff8db61Sspz
385cff8db61Sspz	vspltisb	2,-1
386cff8db61Sspz	vxor	1,1,1
387cff8db61Sspz	li	7,15
388cff8db61Sspz	vperm	2,1,2,3
389cff8db61Sspz
390cff8db61Sspz	lvx	1,0,4
391cff8db61Sspz	vperm	0,0,0,3
392cff8db61Sspz	vsel	1,1,0,2
393cff8db61Sspz	lvx	4,7,4
394cff8db61Sspz	stvx	1,0,4
395cff8db61Sspz	vsel	0,0,4,2
396cff8db61Sspz	stvx	0,7,4
397cff8db61Sspz
398cff8db61Sspz	mtspr	256,12
399cff8db61Sspz	blr
400cff8db61Sspz.long	0
401cff8db61Sspz.byte	0,12,0x14,0,0,0,3,0
402cff8db61Sspz.long	0
403cff8db61Sspz
404cff8db61Sspz.globl	aes_p8_decrypt
405cff8db61Sspz.type	aes_p8_decrypt,@function
406cff8db61Sspz.align	5
407cff8db61Sspzaes_p8_decrypt:
408cff8db61Sspz	lwz	6,240(5)
409cff8db61Sspz	lis	0,0xfc00
410cff8db61Sspz	mfspr	12,256
411cff8db61Sspz	li	7,15
412cff8db61Sspz	mtspr	256,0
413cff8db61Sspz
414cff8db61Sspz	lvx	0,0,3
415cff8db61Sspz	neg	11,4
416cff8db61Sspz	lvx	1,7,3
417cff8db61Sspz	lvsl	2,0,3
418cff8db61Sspz
419cff8db61Sspz	lvsl	3,0,11
420cff8db61Sspz
421cff8db61Sspz	li	7,16
422cff8db61Sspz	vperm	0,0,1,2
423cff8db61Sspz	lvx	1,0,5
424cff8db61Sspz	lvsl	5,0,5
425cff8db61Sspz	srwi	6,6,1
426cff8db61Sspz	lvx	2,7,5
427cff8db61Sspz	addi	7,7,16
428cff8db61Sspz	subi	6,6,1
429cff8db61Sspz	vperm	1,1,2,5
430cff8db61Sspz
431cff8db61Sspz	vxor	0,0,1
432cff8db61Sspz	lvx	1,7,5
433cff8db61Sspz	addi	7,7,16
434cff8db61Sspz	mtctr	6
435cff8db61Sspz
436cff8db61Sspz.Loop_dec:
437cff8db61Sspz	vperm	2,2,1,5
438cff8db61Sspz.long	0x10001548
439cff8db61Sspz	lvx	2,7,5
440cff8db61Sspz	addi	7,7,16
441cff8db61Sspz	vperm	1,1,2,5
442cff8db61Sspz.long	0x10000D48
443cff8db61Sspz	lvx	1,7,5
444cff8db61Sspz	addi	7,7,16
445cff8db61Sspz	bc	16,0,.Loop_dec
446cff8db61Sspz
447cff8db61Sspz	vperm	2,2,1,5
448cff8db61Sspz.long	0x10001548
449cff8db61Sspz	lvx	2,7,5
450cff8db61Sspz	vperm	1,1,2,5
451cff8db61Sspz.long	0x10000D49
452cff8db61Sspz
453cff8db61Sspz	vspltisb	2,-1
454cff8db61Sspz	vxor	1,1,1
455cff8db61Sspz	li	7,15
456cff8db61Sspz	vperm	2,1,2,3
457cff8db61Sspz
458cff8db61Sspz	lvx	1,0,4
459cff8db61Sspz	vperm	0,0,0,3
460cff8db61Sspz	vsel	1,1,0,2
461cff8db61Sspz	lvx	4,7,4
462cff8db61Sspz	stvx	1,0,4
463cff8db61Sspz	vsel	0,0,4,2
464cff8db61Sspz	stvx	0,7,4
465cff8db61Sspz
466cff8db61Sspz	mtspr	256,12
467cff8db61Sspz	blr
468cff8db61Sspz.long	0
469cff8db61Sspz.byte	0,12,0x14,0,0,0,3,0
470cff8db61Sspz.long	0
471cff8db61Sspz
472cff8db61Sspz.globl	aes_p8_cbc_encrypt
473cff8db61Sspz.type	aes_p8_cbc_encrypt,@function
474cff8db61Sspz.align	5
475cff8db61Sspzaes_p8_cbc_encrypt:
476cff8db61Sspz	cmplwi	5,16
477cff8db61Sspz	bltlr
478cff8db61Sspz
479cff8db61Sspz	cmpwi	8,0
480cff8db61Sspz	lis	0,0xffe0
481cff8db61Sspz	mfspr	12,256
482cff8db61Sspz	mtspr	256,0
483cff8db61Sspz
484cff8db61Sspz	li	10,15
485cff8db61Sspz	vxor	0,0,0
486cff8db61Sspz
487cff8db61Sspz
488cff8db61Sspz	lvx	4,0,7
489cff8db61Sspz	lvsl	6,0,7
490cff8db61Sspz	lvx	5,10,7
491cff8db61Sspz
492cff8db61Sspz	vperm	4,4,5,6
493cff8db61Sspz
494cff8db61Sspz	neg	11,3
495cff8db61Sspz	lvsl	10,0,6
496cff8db61Sspz	lwz	9,240(6)
497cff8db61Sspz
498cff8db61Sspz	lvsr	6,0,11
499cff8db61Sspz	lvx	5,0,3
500cff8db61Sspz	addi	3,3,15
501cff8db61Sspz
502cff8db61Sspz
503cff8db61Sspz	lvsr	8,0,4
504cff8db61Sspz	vspltisb	9,-1
505cff8db61Sspz	lvx	7,0,4
506cff8db61Sspz	vperm	9,0,9,8
507cff8db61Sspz
508cff8db61Sspz
509cff8db61Sspz	srwi	9,9,1
510cff8db61Sspz	li	10,16
511cff8db61Sspz	subi	9,9,1
512cff8db61Sspz	beq	.Lcbc_dec
513cff8db61Sspz
514cff8db61Sspz.Lcbc_enc:
515cff8db61Sspz	vor	2,5,5
516cff8db61Sspz	lvx	5,0,3
517cff8db61Sspz	addi	3,3,16
518cff8db61Sspz	mtctr	9
519cff8db61Sspz	subi	5,5,16
520cff8db61Sspz
521cff8db61Sspz	lvx	0,0,6
522cff8db61Sspz	vperm	2,2,5,6
523cff8db61Sspz	lvx	1,10,6
524cff8db61Sspz	addi	10,10,16
525cff8db61Sspz	vperm	0,0,1,10
526cff8db61Sspz	vxor	2,2,0
527cff8db61Sspz	lvx	0,10,6
528cff8db61Sspz	addi	10,10,16
529cff8db61Sspz	vxor	2,2,4
530cff8db61Sspz
531cff8db61Sspz.Loop_cbc_enc:
532cff8db61Sspz	vperm	1,1,0,10
533cff8db61Sspz.long	0x10420D08
534cff8db61Sspz	lvx	1,10,6
535cff8db61Sspz	addi	10,10,16
536cff8db61Sspz	vperm	0,0,1,10
537cff8db61Sspz.long	0x10420508
538cff8db61Sspz	lvx	0,10,6
539cff8db61Sspz	addi	10,10,16
540cff8db61Sspz	bc	16,0,.Loop_cbc_enc
541cff8db61Sspz
542cff8db61Sspz	vperm	1,1,0,10
543cff8db61Sspz.long	0x10420D08
544cff8db61Sspz	lvx	1,10,6
545cff8db61Sspz	li	10,16
546cff8db61Sspz	vperm	0,0,1,10
547cff8db61Sspz.long	0x10820509
548cff8db61Sspz	cmplwi	5,16
549cff8db61Sspz
550cff8db61Sspz	vperm	3,4,4,8
551cff8db61Sspz	vsel	2,7,3,9
552cff8db61Sspz	vor	7,3,3
553cff8db61Sspz	stvx	2,0,4
554cff8db61Sspz	addi	4,4,16
555cff8db61Sspz	bge	.Lcbc_enc
556cff8db61Sspz
557cff8db61Sspz	b	.Lcbc_done
558cff8db61Sspz
559cff8db61Sspz.align	4
560cff8db61Sspz.Lcbc_dec:
561cff8db61Sspz	cmplwi	5,128
562cff8db61Sspz	bge	_aesp8_cbc_decrypt8x
563cff8db61Sspz	vor	3,5,5
564cff8db61Sspz	lvx	5,0,3
565cff8db61Sspz	addi	3,3,16
566cff8db61Sspz	mtctr	9
567cff8db61Sspz	subi	5,5,16
568cff8db61Sspz
569cff8db61Sspz	lvx	0,0,6
570cff8db61Sspz	vperm	3,3,5,6
571cff8db61Sspz	lvx	1,10,6
572cff8db61Sspz	addi	10,10,16
573cff8db61Sspz	vperm	0,0,1,10
574cff8db61Sspz	vxor	2,3,0
575cff8db61Sspz	lvx	0,10,6
576cff8db61Sspz	addi	10,10,16
577cff8db61Sspz
578cff8db61Sspz.Loop_cbc_dec:
579cff8db61Sspz	vperm	1,1,0,10
580cff8db61Sspz.long	0x10420D48
581cff8db61Sspz	lvx	1,10,6
582cff8db61Sspz	addi	10,10,16
583cff8db61Sspz	vperm	0,0,1,10
584cff8db61Sspz.long	0x10420548
585cff8db61Sspz	lvx	0,10,6
586cff8db61Sspz	addi	10,10,16
587cff8db61Sspz	bc	16,0,.Loop_cbc_dec
588cff8db61Sspz
589cff8db61Sspz	vperm	1,1,0,10
590cff8db61Sspz.long	0x10420D48
591cff8db61Sspz	lvx	1,10,6
592cff8db61Sspz	li	10,16
593cff8db61Sspz	vperm	0,0,1,10
594cff8db61Sspz.long	0x10420549
595cff8db61Sspz	cmplwi	5,16
596cff8db61Sspz
597cff8db61Sspz	vxor	2,2,4
598cff8db61Sspz	vor	4,3,3
599cff8db61Sspz	vperm	3,2,2,8
600cff8db61Sspz	vsel	2,7,3,9
601cff8db61Sspz	vor	7,3,3
602cff8db61Sspz	stvx	2,0,4
603cff8db61Sspz	addi	4,4,16
604cff8db61Sspz	bge	.Lcbc_dec
605cff8db61Sspz
606cff8db61Sspz.Lcbc_done:
607cff8db61Sspz	addi	4,4,-1
608cff8db61Sspz	lvx	2,0,4
609cff8db61Sspz	vsel	2,7,2,9
610cff8db61Sspz	stvx	2,0,4
611cff8db61Sspz
612cff8db61Sspz	neg	8,7
613cff8db61Sspz	li	10,15
614cff8db61Sspz	vxor	0,0,0
615cff8db61Sspz	vspltisb	9,-1
616cff8db61Sspz
617cff8db61Sspz	lvsl	8,0,8
618cff8db61Sspz	vperm	9,0,9,8
619cff8db61Sspz
620cff8db61Sspz	lvx	7,0,7
621cff8db61Sspz	vperm	4,4,4,8
622cff8db61Sspz	vsel	2,7,4,9
623cff8db61Sspz	lvx	5,10,7
624cff8db61Sspz	stvx	2,0,7
625cff8db61Sspz	vsel	2,4,5,9
626cff8db61Sspz	stvx	2,10,7
627cff8db61Sspz
628cff8db61Sspz	mtspr	256,12
629cff8db61Sspz	blr
630cff8db61Sspz.long	0
631cff8db61Sspz.byte	0,12,0x14,0,0,0,6,0
632cff8db61Sspz.long	0
633cff8db61Sspz.align	5
634cff8db61Sspz_aesp8_cbc_decrypt8x:
635cff8db61Sspz	stwu	1,-392(1)
636cff8db61Sspz	li	10,175
637cff8db61Sspz	li	11,191
638cff8db61Sspz	stvx	20,10,1
639cff8db61Sspz	addi	10,10,32
640cff8db61Sspz	stvx	21,11,1
641cff8db61Sspz	addi	11,11,32
642cff8db61Sspz	stvx	22,10,1
643cff8db61Sspz	addi	10,10,32
644cff8db61Sspz	stvx	23,11,1
645cff8db61Sspz	addi	11,11,32
646cff8db61Sspz	stvx	24,10,1
647cff8db61Sspz	addi	10,10,32
648cff8db61Sspz	stvx	25,11,1
649cff8db61Sspz	addi	11,11,32
650cff8db61Sspz	stvx	26,10,1
651cff8db61Sspz	addi	10,10,32
652cff8db61Sspz	stvx	27,11,1
653cff8db61Sspz	addi	11,11,32
654cff8db61Sspz	stvx	28,10,1
655cff8db61Sspz	addi	10,10,32
656cff8db61Sspz	stvx	29,11,1
657cff8db61Sspz	addi	11,11,32
658cff8db61Sspz	stvx	30,10,1
659cff8db61Sspz	stvx	31,11,1
660cff8db61Sspz	li	0,-1
661cff8db61Sspz	stw	12,364(1)
662cff8db61Sspz	li	8,0x10
663cff8db61Sspz	stw	26,368(1)
664cff8db61Sspz	li	26,0x20
665cff8db61Sspz	stw	27,372(1)
666cff8db61Sspz	li	27,0x30
667cff8db61Sspz	stw	28,376(1)
668cff8db61Sspz	li	28,0x40
669cff8db61Sspz	stw	29,380(1)
670cff8db61Sspz	li	29,0x50
671cff8db61Sspz	stw	30,384(1)
672cff8db61Sspz	li	30,0x60
673cff8db61Sspz	stw	31,388(1)
674cff8db61Sspz	li	31,0x70
675cff8db61Sspz	mtspr	256,0
676cff8db61Sspz
677cff8db61Sspz	subi	9,9,3
678cff8db61Sspz	subi	5,5,128
679cff8db61Sspz
680cff8db61Sspz	lvx	23,0,6
681cff8db61Sspz	lvx	30,8,6
682cff8db61Sspz	addi	6,6,0x20
683cff8db61Sspz	lvx	31,0,6
684cff8db61Sspz	vperm	23,23,30,10
685cff8db61Sspz	addi	11,1,32+15
686cff8db61Sspz	mtctr	9
687cff8db61Sspz
688cff8db61Sspz.Load_cbc_dec_key:
689cff8db61Sspz	vperm	24,30,31,10
690cff8db61Sspz	lvx	30,8,6
691cff8db61Sspz	addi	6,6,0x20
692cff8db61Sspz	stvx	24,0,11
693cff8db61Sspz	vperm	25,31,30,10
694cff8db61Sspz	lvx	31,0,6
695cff8db61Sspz	stvx	25,8,11
696cff8db61Sspz	addi	11,11,0x20
697cff8db61Sspz	bc	16,0,.Load_cbc_dec_key
698cff8db61Sspz
699cff8db61Sspz	lvx	26,8,6
700cff8db61Sspz	vperm	24,30,31,10
701cff8db61Sspz	lvx	27,26,6
702cff8db61Sspz	stvx	24,0,11
703cff8db61Sspz	vperm	25,31,26,10
704cff8db61Sspz	lvx	28,27,6
705cff8db61Sspz	stvx	25,8,11
706cff8db61Sspz	addi	11,1,32+15
707cff8db61Sspz	vperm	26,26,27,10
708cff8db61Sspz	lvx	29,28,6
709cff8db61Sspz	vperm	27,27,28,10
710cff8db61Sspz	lvx	30,29,6
711cff8db61Sspz	vperm	28,28,29,10
712cff8db61Sspz	lvx	31,30,6
713cff8db61Sspz	vperm	29,29,30,10
714cff8db61Sspz	lvx	14,31,6
715cff8db61Sspz	vperm	30,30,31,10
716cff8db61Sspz	lvx	24,0,11
717cff8db61Sspz	vperm	31,31,14,10
718cff8db61Sspz	lvx	25,8,11
719cff8db61Sspz
720cff8db61Sspz
721cff8db61Sspz
722cff8db61Sspz	subi	3,3,15
723cff8db61Sspz
724cff8db61Sspz
725cff8db61Sspz.long	0x7C001E99
726cff8db61Sspz
727cff8db61Sspz
728cff8db61Sspz.long	0x7C281E99
729cff8db61Sspz
730cff8db61Sspz.long	0x7C5A1E99
731cff8db61Sspz
732cff8db61Sspz.long	0x7C7B1E99
733cff8db61Sspz
734cff8db61Sspz.long	0x7D5C1E99
735cff8db61Sspz
736cff8db61Sspz	vxor	14,0,23
737cff8db61Sspz.long	0x7D7D1E99
738cff8db61Sspz
739cff8db61Sspz	vxor	15,1,23
740cff8db61Sspz.long	0x7D9E1E99
741cff8db61Sspz
742cff8db61Sspz	vxor	16,2,23
743cff8db61Sspz.long	0x7DBF1E99
744cff8db61Sspz	addi	3,3,0x80
745cff8db61Sspz
746cff8db61Sspz	vxor	17,3,23
747cff8db61Sspz
748cff8db61Sspz	vxor	18,10,23
749cff8db61Sspz
750cff8db61Sspz	vxor	19,11,23
751cff8db61Sspz	vxor	20,12,23
752cff8db61Sspz	vxor	21,13,23
753cff8db61Sspz
754cff8db61Sspz	mtctr	9
755cff8db61Sspz	b	.Loop_cbc_dec8x
756cff8db61Sspz.align	5
757cff8db61Sspz.Loop_cbc_dec8x:
758cff8db61Sspz.long	0x11CEC548
759cff8db61Sspz.long	0x11EFC548
760cff8db61Sspz.long	0x1210C548
761cff8db61Sspz.long	0x1231C548
762cff8db61Sspz.long	0x1252C548
763cff8db61Sspz.long	0x1273C548
764cff8db61Sspz.long	0x1294C548
765cff8db61Sspz.long	0x12B5C548
766cff8db61Sspz	lvx	24,26,11
767cff8db61Sspz	addi	11,11,0x20
768cff8db61Sspz
769cff8db61Sspz.long	0x11CECD48
770cff8db61Sspz.long	0x11EFCD48
771cff8db61Sspz.long	0x1210CD48
772cff8db61Sspz.long	0x1231CD48
773cff8db61Sspz.long	0x1252CD48
774cff8db61Sspz.long	0x1273CD48
775cff8db61Sspz.long	0x1294CD48
776cff8db61Sspz.long	0x12B5CD48
777cff8db61Sspz	lvx	25,8,11
778cff8db61Sspz	bc	16,0,.Loop_cbc_dec8x
779cff8db61Sspz
780cff8db61Sspz	subic	5,5,128
781cff8db61Sspz.long	0x11CEC548
782cff8db61Sspz.long	0x11EFC548
783cff8db61Sspz.long	0x1210C548
784cff8db61Sspz.long	0x1231C548
785cff8db61Sspz.long	0x1252C548
786cff8db61Sspz.long	0x1273C548
787cff8db61Sspz.long	0x1294C548
788cff8db61Sspz.long	0x12B5C548
789cff8db61Sspz
790cff8db61Sspz	subfe.	0,0,0
791cff8db61Sspz.long	0x11CECD48
792cff8db61Sspz.long	0x11EFCD48
793cff8db61Sspz.long	0x1210CD48
794cff8db61Sspz.long	0x1231CD48
795cff8db61Sspz.long	0x1252CD48
796cff8db61Sspz.long	0x1273CD48
797cff8db61Sspz.long	0x1294CD48
798cff8db61Sspz.long	0x12B5CD48
799cff8db61Sspz
800cff8db61Sspz	and	0,0,5
801cff8db61Sspz.long	0x11CED548
802cff8db61Sspz.long	0x11EFD548
803cff8db61Sspz.long	0x1210D548
804cff8db61Sspz.long	0x1231D548
805cff8db61Sspz.long	0x1252D548
806cff8db61Sspz.long	0x1273D548
807cff8db61Sspz.long	0x1294D548
808cff8db61Sspz.long	0x12B5D548
809cff8db61Sspz
810cff8db61Sspz	add	3,3,0
811cff8db61Sspz
812cff8db61Sspz
813cff8db61Sspz
814cff8db61Sspz.long	0x11CEDD48
815cff8db61Sspz.long	0x11EFDD48
816cff8db61Sspz.long	0x1210DD48
817cff8db61Sspz.long	0x1231DD48
818cff8db61Sspz.long	0x1252DD48
819cff8db61Sspz.long	0x1273DD48
820cff8db61Sspz.long	0x1294DD48
821cff8db61Sspz.long	0x12B5DD48
822cff8db61Sspz
823cff8db61Sspz	addi	11,1,32+15
824cff8db61Sspz.long	0x11CEE548
825cff8db61Sspz.long	0x11EFE548
826cff8db61Sspz.long	0x1210E548
827cff8db61Sspz.long	0x1231E548
828cff8db61Sspz.long	0x1252E548
829cff8db61Sspz.long	0x1273E548
830cff8db61Sspz.long	0x1294E548
831cff8db61Sspz.long	0x12B5E548
832cff8db61Sspz	lvx	24,0,11
833cff8db61Sspz
834cff8db61Sspz.long	0x11CEED48
835cff8db61Sspz.long	0x11EFED48
836cff8db61Sspz.long	0x1210ED48
837cff8db61Sspz.long	0x1231ED48
838cff8db61Sspz.long	0x1252ED48
839cff8db61Sspz.long	0x1273ED48
840cff8db61Sspz.long	0x1294ED48
841cff8db61Sspz.long	0x12B5ED48
842cff8db61Sspz	lvx	25,8,11
843cff8db61Sspz
844cff8db61Sspz.long	0x11CEF548
845cff8db61Sspz	vxor	4,4,31
846cff8db61Sspz.long	0x11EFF548
847cff8db61Sspz	vxor	0,0,31
848cff8db61Sspz.long	0x1210F548
849cff8db61Sspz	vxor	1,1,31
850cff8db61Sspz.long	0x1231F548
851cff8db61Sspz	vxor	2,2,31
852cff8db61Sspz.long	0x1252F548
853cff8db61Sspz	vxor	3,3,31
854cff8db61Sspz.long	0x1273F548
855cff8db61Sspz	vxor	10,10,31
856cff8db61Sspz.long	0x1294F548
857cff8db61Sspz	vxor	11,11,31
858cff8db61Sspz.long	0x12B5F548
859cff8db61Sspz	vxor	12,12,31
860cff8db61Sspz
861cff8db61Sspz.long	0x11CE2549
862cff8db61Sspz.long	0x11EF0549
863cff8db61Sspz.long	0x7C001E99
864cff8db61Sspz.long	0x12100D49
865cff8db61Sspz.long	0x7C281E99
866cff8db61Sspz.long	0x12311549
867cff8db61Sspz
868cff8db61Sspz.long	0x7C5A1E99
869cff8db61Sspz.long	0x12521D49
870cff8db61Sspz
871cff8db61Sspz.long	0x7C7B1E99
872cff8db61Sspz.long	0x12735549
873cff8db61Sspz
874cff8db61Sspz.long	0x7D5C1E99
875cff8db61Sspz.long	0x12945D49
876cff8db61Sspz
877cff8db61Sspz.long	0x7D7D1E99
878cff8db61Sspz.long	0x12B56549
879cff8db61Sspz
880cff8db61Sspz.long	0x7D9E1E99
881cff8db61Sspz	vor	4,13,13
882cff8db61Sspz
883cff8db61Sspz.long	0x7DBF1E99
884cff8db61Sspz	addi	3,3,0x80
885cff8db61Sspz
886cff8db61Sspz
887cff8db61Sspz
888cff8db61Sspz.long	0x7DC02799
889cff8db61Sspz
890cff8db61Sspz	vxor	14,0,23
891cff8db61Sspz
892cff8db61Sspz.long	0x7DE82799
893cff8db61Sspz
894cff8db61Sspz	vxor	15,1,23
895cff8db61Sspz
896cff8db61Sspz.long	0x7E1A2799
897cff8db61Sspz	vxor	16,2,23
898cff8db61Sspz
899cff8db61Sspz.long	0x7E3B2799
900cff8db61Sspz	vxor	17,3,23
901cff8db61Sspz
902cff8db61Sspz.long	0x7E5C2799
903cff8db61Sspz	vxor	18,10,23
904cff8db61Sspz
905cff8db61Sspz.long	0x7E7D2799
906cff8db61Sspz	vxor	19,11,23
907cff8db61Sspz
908cff8db61Sspz.long	0x7E9E2799
909cff8db61Sspz	vxor	20,12,23
910cff8db61Sspz.long	0x7EBF2799
911cff8db61Sspz	addi	4,4,0x80
912cff8db61Sspz	vxor	21,13,23
913cff8db61Sspz
914cff8db61Sspz	mtctr	9
915cff8db61Sspz	beq	.Loop_cbc_dec8x
916cff8db61Sspz
917cff8db61Sspz	addic.	5,5,128
918cff8db61Sspz	beq	.Lcbc_dec8x_done
919cff8db61Sspz	nop
920cff8db61Sspz	nop
921cff8db61Sspz
922cff8db61Sspz.Loop_cbc_dec8x_tail:
923cff8db61Sspz.long	0x11EFC548
924cff8db61Sspz.long	0x1210C548
925cff8db61Sspz.long	0x1231C548
926cff8db61Sspz.long	0x1252C548
927cff8db61Sspz.long	0x1273C548
928cff8db61Sspz.long	0x1294C548
929cff8db61Sspz.long	0x12B5C548
930cff8db61Sspz	lvx	24,26,11
931cff8db61Sspz	addi	11,11,0x20
932cff8db61Sspz
933cff8db61Sspz.long	0x11EFCD48
934cff8db61Sspz.long	0x1210CD48
935cff8db61Sspz.long	0x1231CD48
936cff8db61Sspz.long	0x1252CD48
937cff8db61Sspz.long	0x1273CD48
938cff8db61Sspz.long	0x1294CD48
939cff8db61Sspz.long	0x12B5CD48
940cff8db61Sspz	lvx	25,8,11
941cff8db61Sspz	bc	16,0,.Loop_cbc_dec8x_tail
942cff8db61Sspz
943cff8db61Sspz.long	0x11EFC548
944cff8db61Sspz.long	0x1210C548
945cff8db61Sspz.long	0x1231C548
946cff8db61Sspz.long	0x1252C548
947cff8db61Sspz.long	0x1273C548
948cff8db61Sspz.long	0x1294C548
949cff8db61Sspz.long	0x12B5C548
950cff8db61Sspz
951cff8db61Sspz.long	0x11EFCD48
952cff8db61Sspz.long	0x1210CD48
953cff8db61Sspz.long	0x1231CD48
954cff8db61Sspz.long	0x1252CD48
955cff8db61Sspz.long	0x1273CD48
956cff8db61Sspz.long	0x1294CD48
957cff8db61Sspz.long	0x12B5CD48
958cff8db61Sspz
959cff8db61Sspz.long	0x11EFD548
960cff8db61Sspz.long	0x1210D548
961cff8db61Sspz.long	0x1231D548
962cff8db61Sspz.long	0x1252D548
963cff8db61Sspz.long	0x1273D548
964cff8db61Sspz.long	0x1294D548
965cff8db61Sspz.long	0x12B5D548
966cff8db61Sspz
967cff8db61Sspz.long	0x11EFDD48
968cff8db61Sspz.long	0x1210DD48
969cff8db61Sspz.long	0x1231DD48
970cff8db61Sspz.long	0x1252DD48
971cff8db61Sspz.long	0x1273DD48
972cff8db61Sspz.long	0x1294DD48
973cff8db61Sspz.long	0x12B5DD48
974cff8db61Sspz
975cff8db61Sspz.long	0x11EFE548
976cff8db61Sspz.long	0x1210E548
977cff8db61Sspz.long	0x1231E548
978cff8db61Sspz.long	0x1252E548
979cff8db61Sspz.long	0x1273E548
980cff8db61Sspz.long	0x1294E548
981cff8db61Sspz.long	0x12B5E548
982cff8db61Sspz
983cff8db61Sspz.long	0x11EFED48
984cff8db61Sspz.long	0x1210ED48
985cff8db61Sspz.long	0x1231ED48
986cff8db61Sspz.long	0x1252ED48
987cff8db61Sspz.long	0x1273ED48
988cff8db61Sspz.long	0x1294ED48
989cff8db61Sspz.long	0x12B5ED48
990cff8db61Sspz
991cff8db61Sspz.long	0x11EFF548
992cff8db61Sspz	vxor	4,4,31
993cff8db61Sspz.long	0x1210F548
994cff8db61Sspz	vxor	1,1,31
995cff8db61Sspz.long	0x1231F548
996cff8db61Sspz	vxor	2,2,31
997cff8db61Sspz.long	0x1252F548
998cff8db61Sspz	vxor	3,3,31
999cff8db61Sspz.long	0x1273F548
1000cff8db61Sspz	vxor	10,10,31
1001cff8db61Sspz.long	0x1294F548
1002cff8db61Sspz	vxor	11,11,31
1003cff8db61Sspz.long	0x12B5F548
1004cff8db61Sspz	vxor	12,12,31
1005cff8db61Sspz
1006cff8db61Sspz	cmplwi	5,32
1007cff8db61Sspz	blt	.Lcbc_dec8x_one
1008cff8db61Sspz	nop
1009cff8db61Sspz	beq	.Lcbc_dec8x_two
1010cff8db61Sspz	cmplwi	5,64
1011cff8db61Sspz	blt	.Lcbc_dec8x_three
1012cff8db61Sspz	nop
1013cff8db61Sspz	beq	.Lcbc_dec8x_four
1014cff8db61Sspz	cmplwi	5,96
1015cff8db61Sspz	blt	.Lcbc_dec8x_five
1016cff8db61Sspz	nop
1017cff8db61Sspz	beq	.Lcbc_dec8x_six
1018cff8db61Sspz
1019cff8db61Sspz.Lcbc_dec8x_seven:
1020cff8db61Sspz.long	0x11EF2549
1021cff8db61Sspz.long	0x12100D49
1022cff8db61Sspz.long	0x12311549
1023cff8db61Sspz.long	0x12521D49
1024cff8db61Sspz.long	0x12735549
1025cff8db61Sspz.long	0x12945D49
1026cff8db61Sspz.long	0x12B56549
1027cff8db61Sspz	vor	4,13,13
1028cff8db61Sspz
1029cff8db61Sspz
1030cff8db61Sspz
1031cff8db61Sspz.long	0x7DE02799
1032cff8db61Sspz
1033cff8db61Sspz.long	0x7E082799
1034cff8db61Sspz
1035cff8db61Sspz.long	0x7E3A2799
1036cff8db61Sspz
1037cff8db61Sspz.long	0x7E5B2799
1038cff8db61Sspz
1039cff8db61Sspz.long	0x7E7C2799
1040cff8db61Sspz
1041cff8db61Sspz.long	0x7E9D2799
1042cff8db61Sspz.long	0x7EBE2799
1043cff8db61Sspz	addi	4,4,0x70
1044cff8db61Sspz	b	.Lcbc_dec8x_done
1045cff8db61Sspz
1046cff8db61Sspz.align	5
1047cff8db61Sspz.Lcbc_dec8x_six:
1048cff8db61Sspz.long	0x12102549
1049cff8db61Sspz.long	0x12311549
1050cff8db61Sspz.long	0x12521D49
1051cff8db61Sspz.long	0x12735549
1052cff8db61Sspz.long	0x12945D49
1053cff8db61Sspz.long	0x12B56549
1054cff8db61Sspz	vor	4,13,13
1055cff8db61Sspz
1056cff8db61Sspz
1057cff8db61Sspz
1058cff8db61Sspz.long	0x7E002799
1059cff8db61Sspz
1060cff8db61Sspz.long	0x7E282799
1061cff8db61Sspz
1062cff8db61Sspz.long	0x7E5A2799
1063cff8db61Sspz
1064cff8db61Sspz.long	0x7E7B2799
1065cff8db61Sspz
1066cff8db61Sspz.long	0x7E9C2799
1067cff8db61Sspz.long	0x7EBD2799
1068cff8db61Sspz	addi	4,4,0x60
1069cff8db61Sspz	b	.Lcbc_dec8x_done
1070cff8db61Sspz
1071cff8db61Sspz.align	5
1072cff8db61Sspz.Lcbc_dec8x_five:
1073cff8db61Sspz.long	0x12312549
1074cff8db61Sspz.long	0x12521D49
1075cff8db61Sspz.long	0x12735549
1076cff8db61Sspz.long	0x12945D49
1077cff8db61Sspz.long	0x12B56549
1078cff8db61Sspz	vor	4,13,13
1079cff8db61Sspz
1080cff8db61Sspz
1081cff8db61Sspz
1082cff8db61Sspz.long	0x7E202799
1083cff8db61Sspz
1084cff8db61Sspz.long	0x7E482799
1085cff8db61Sspz
1086cff8db61Sspz.long	0x7E7A2799
1087cff8db61Sspz
1088cff8db61Sspz.long	0x7E9B2799
1089cff8db61Sspz.long	0x7EBC2799
1090cff8db61Sspz	addi	4,4,0x50
1091cff8db61Sspz	b	.Lcbc_dec8x_done
1092cff8db61Sspz
1093cff8db61Sspz.align	5
1094cff8db61Sspz.Lcbc_dec8x_four:
1095cff8db61Sspz.long	0x12522549
1096cff8db61Sspz.long	0x12735549
1097cff8db61Sspz.long	0x12945D49
1098cff8db61Sspz.long	0x12B56549
1099cff8db61Sspz	vor	4,13,13
1100cff8db61Sspz
1101cff8db61Sspz
1102cff8db61Sspz
1103cff8db61Sspz.long	0x7E402799
1104cff8db61Sspz
1105cff8db61Sspz.long	0x7E682799
1106cff8db61Sspz
1107cff8db61Sspz.long	0x7E9A2799
1108cff8db61Sspz.long	0x7EBB2799
1109cff8db61Sspz	addi	4,4,0x40
1110cff8db61Sspz	b	.Lcbc_dec8x_done
1111cff8db61Sspz
1112cff8db61Sspz.align	5
1113cff8db61Sspz.Lcbc_dec8x_three:
1114cff8db61Sspz.long	0x12732549
1115cff8db61Sspz.long	0x12945D49
1116cff8db61Sspz.long	0x12B56549
1117cff8db61Sspz	vor	4,13,13
1118cff8db61Sspz
1119cff8db61Sspz
1120cff8db61Sspz
1121cff8db61Sspz.long	0x7E602799
1122cff8db61Sspz
1123cff8db61Sspz.long	0x7E882799
1124cff8db61Sspz.long	0x7EBA2799
1125cff8db61Sspz	addi	4,4,0x30
1126cff8db61Sspz	b	.Lcbc_dec8x_done
1127cff8db61Sspz
1128cff8db61Sspz.align	5
1129cff8db61Sspz.Lcbc_dec8x_two:
1130cff8db61Sspz.long	0x12942549
1131cff8db61Sspz.long	0x12B56549
1132cff8db61Sspz	vor	4,13,13
1133cff8db61Sspz
1134cff8db61Sspz
1135cff8db61Sspz
1136cff8db61Sspz.long	0x7E802799
1137cff8db61Sspz.long	0x7EA82799
1138cff8db61Sspz	addi	4,4,0x20
1139cff8db61Sspz	b	.Lcbc_dec8x_done
1140cff8db61Sspz
1141cff8db61Sspz.align	5
1142cff8db61Sspz.Lcbc_dec8x_one:
1143cff8db61Sspz.long	0x12B52549
1144cff8db61Sspz	vor	4,13,13
1145cff8db61Sspz
1146cff8db61Sspz
1147cff8db61Sspz.long	0x7EA02799
1148cff8db61Sspz	addi	4,4,0x10
1149cff8db61Sspz
1150cff8db61Sspz.Lcbc_dec8x_done:
1151cff8db61Sspz
1152cff8db61Sspz.long	0x7C803F99
1153cff8db61Sspz
1154cff8db61Sspz	li	10,47
1155cff8db61Sspz	li	11,63
1156cff8db61Sspz	stvx	6,10,1
1157cff8db61Sspz	addi	10,10,32
1158cff8db61Sspz	stvx	6,11,1
1159cff8db61Sspz	addi	11,11,32
1160cff8db61Sspz	stvx	6,10,1
1161cff8db61Sspz	addi	10,10,32
1162cff8db61Sspz	stvx	6,11,1
1163cff8db61Sspz	addi	11,11,32
1164cff8db61Sspz	stvx	6,10,1
1165cff8db61Sspz	addi	10,10,32
1166cff8db61Sspz	stvx	6,11,1
1167cff8db61Sspz	addi	11,11,32
1168cff8db61Sspz	stvx	6,10,1
1169cff8db61Sspz	addi	10,10,32
1170cff8db61Sspz	stvx	6,11,1
1171cff8db61Sspz	addi	11,11,32
1172cff8db61Sspz
1173cff8db61Sspz	mtspr	256,12
1174cff8db61Sspz	lvx	20,10,1
1175cff8db61Sspz	addi	10,10,32
1176cff8db61Sspz	lvx	21,11,1
1177cff8db61Sspz	addi	11,11,32
1178cff8db61Sspz	lvx	22,10,1
1179cff8db61Sspz	addi	10,10,32
1180cff8db61Sspz	lvx	23,11,1
1181cff8db61Sspz	addi	11,11,32
1182cff8db61Sspz	lvx	24,10,1
1183cff8db61Sspz	addi	10,10,32
1184cff8db61Sspz	lvx	25,11,1
1185cff8db61Sspz	addi	11,11,32
1186cff8db61Sspz	lvx	26,10,1
1187cff8db61Sspz	addi	10,10,32
1188cff8db61Sspz	lvx	27,11,1
1189cff8db61Sspz	addi	11,11,32
1190cff8db61Sspz	lvx	28,10,1
1191cff8db61Sspz	addi	10,10,32
1192cff8db61Sspz	lvx	29,11,1
1193cff8db61Sspz	addi	11,11,32
1194cff8db61Sspz	lvx	30,10,1
1195cff8db61Sspz	lvx	31,11,1
1196cff8db61Sspz	lwz	26,368(1)
1197cff8db61Sspz	lwz	27,372(1)
1198cff8db61Sspz	lwz	28,376(1)
1199cff8db61Sspz	lwz	29,380(1)
1200cff8db61Sspz	lwz	30,384(1)
1201cff8db61Sspz	lwz	31,388(1)
1202cff8db61Sspz	addi	1,1,392
1203cff8db61Sspz	blr
1204cff8db61Sspz.long	0
1205cff8db61Sspz.byte	0,12,0x04,0,0x80,6,6,0
1206cff8db61Sspz.long	0
1207cff8db61Sspz
1208cff8db61Sspz.globl	aes_p8_ctr32_encrypt_blocks
1209cff8db61Sspz.type	aes_p8_ctr32_encrypt_blocks,@function
1210cff8db61Sspz.align	5
1211cff8db61Sspzaes_p8_ctr32_encrypt_blocks:
1212cff8db61Sspz	cmplwi	5,1
1213cff8db61Sspz	bltlr
1214cff8db61Sspz
1215cff8db61Sspz	lis	0,0xfff0
1216cff8db61Sspz	mfspr	12,256
1217cff8db61Sspz	mtspr	256,0
1218cff8db61Sspz
1219cff8db61Sspz	li	10,15
1220cff8db61Sspz	vxor	0,0,0
1221cff8db61Sspz
1222cff8db61Sspz
1223cff8db61Sspz	lvx	4,0,7
1224cff8db61Sspz	lvsl	6,0,7
1225cff8db61Sspz	lvx	5,10,7
1226cff8db61Sspz	vspltisb	11,1
1227cff8db61Sspz
1228cff8db61Sspz	vperm	4,4,5,6
1229cff8db61Sspz	vsldoi	11,0,11,1
1230cff8db61Sspz
1231cff8db61Sspz	neg	11,3
1232cff8db61Sspz	lvsl	10,0,6
1233cff8db61Sspz	lwz	9,240(6)
1234cff8db61Sspz
1235cff8db61Sspz	lvsr	6,0,11
1236cff8db61Sspz	lvx	5,0,3
1237cff8db61Sspz	addi	3,3,15
1238cff8db61Sspz
1239cff8db61Sspz
1240cff8db61Sspz	srwi	9,9,1
1241cff8db61Sspz	li	10,16
1242cff8db61Sspz	subi	9,9,1
1243cff8db61Sspz
1244cff8db61Sspz	cmplwi	5,8
1245cff8db61Sspz	bge	_aesp8_ctr32_encrypt8x
1246cff8db61Sspz
1247cff8db61Sspz	lvsr	8,0,4
1248cff8db61Sspz	vspltisb	9,-1
1249cff8db61Sspz	lvx	7,0,4
1250cff8db61Sspz	vperm	9,0,9,8
1251cff8db61Sspz
1252cff8db61Sspz
1253cff8db61Sspz	lvx	0,0,6
1254cff8db61Sspz	mtctr	9
1255cff8db61Sspz	lvx	1,10,6
1256cff8db61Sspz	addi	10,10,16
1257cff8db61Sspz	vperm	0,0,1,10
1258cff8db61Sspz	vxor	2,4,0
1259cff8db61Sspz	lvx	0,10,6
1260cff8db61Sspz	addi	10,10,16
1261cff8db61Sspz	b	.Loop_ctr32_enc
1262cff8db61Sspz
1263cff8db61Sspz.align	5
1264cff8db61Sspz.Loop_ctr32_enc:
1265cff8db61Sspz	vperm	1,1,0,10
1266cff8db61Sspz.long	0x10420D08
1267cff8db61Sspz	lvx	1,10,6
1268cff8db61Sspz	addi	10,10,16
1269cff8db61Sspz	vperm	0,0,1,10
1270cff8db61Sspz.long	0x10420508
1271cff8db61Sspz	lvx	0,10,6
1272cff8db61Sspz	addi	10,10,16
1273cff8db61Sspz	bc	16,0,.Loop_ctr32_enc
1274cff8db61Sspz
1275cff8db61Sspz	vadduwm	4,4,11
1276cff8db61Sspz	vor	3,5,5
1277cff8db61Sspz	lvx	5,0,3
1278cff8db61Sspz	addi	3,3,16
1279cff8db61Sspz	subic.	5,5,1
1280cff8db61Sspz
1281cff8db61Sspz	vperm	1,1,0,10
1282cff8db61Sspz.long	0x10420D08
1283cff8db61Sspz	lvx	1,10,6
1284cff8db61Sspz	vperm	3,3,5,6
1285cff8db61Sspz	li	10,16
1286cff8db61Sspz	vperm	1,0,1,10
1287cff8db61Sspz	lvx	0,0,6
1288cff8db61Sspz	vxor	3,3,1
1289cff8db61Sspz.long	0x10421D09
1290cff8db61Sspz
1291cff8db61Sspz	lvx	1,10,6
1292cff8db61Sspz	addi	10,10,16
1293cff8db61Sspz	vperm	2,2,2,8
1294cff8db61Sspz	vsel	3,7,2,9
1295cff8db61Sspz	mtctr	9
1296cff8db61Sspz	vperm	0,0,1,10
1297cff8db61Sspz	vor	7,2,2
1298cff8db61Sspz	vxor	2,4,0
1299cff8db61Sspz	lvx	0,10,6
1300cff8db61Sspz	addi	10,10,16
1301cff8db61Sspz	stvx	3,0,4
1302cff8db61Sspz	addi	4,4,16
1303cff8db61Sspz	bne	.Loop_ctr32_enc
1304cff8db61Sspz
1305cff8db61Sspz	addi	4,4,-1
1306cff8db61Sspz	lvx	2,0,4
1307cff8db61Sspz	vsel	2,7,2,9
1308cff8db61Sspz	stvx	2,0,4
1309cff8db61Sspz
1310cff8db61Sspz	mtspr	256,12
1311cff8db61Sspz	blr
1312cff8db61Sspz.long	0
1313cff8db61Sspz.byte	0,12,0x14,0,0,0,6,0
1314cff8db61Sspz.long	0
1315cff8db61Sspz.align	5
1316cff8db61Sspz_aesp8_ctr32_encrypt8x:
1317cff8db61Sspz	stwu	1,-392(1)
1318cff8db61Sspz	li	10,175
1319cff8db61Sspz	li	11,191
1320cff8db61Sspz	stvx	20,10,1
1321cff8db61Sspz	addi	10,10,32
1322cff8db61Sspz	stvx	21,11,1
1323cff8db61Sspz	addi	11,11,32
1324cff8db61Sspz	stvx	22,10,1
1325cff8db61Sspz	addi	10,10,32
1326cff8db61Sspz	stvx	23,11,1
1327cff8db61Sspz	addi	11,11,32
1328cff8db61Sspz	stvx	24,10,1
1329cff8db61Sspz	addi	10,10,32
1330cff8db61Sspz	stvx	25,11,1
1331cff8db61Sspz	addi	11,11,32
1332cff8db61Sspz	stvx	26,10,1
1333cff8db61Sspz	addi	10,10,32
1334cff8db61Sspz	stvx	27,11,1
1335cff8db61Sspz	addi	11,11,32
1336cff8db61Sspz	stvx	28,10,1
1337cff8db61Sspz	addi	10,10,32
1338cff8db61Sspz	stvx	29,11,1
1339cff8db61Sspz	addi	11,11,32
1340cff8db61Sspz	stvx	30,10,1
1341cff8db61Sspz	stvx	31,11,1
1342cff8db61Sspz	li	0,-1
1343cff8db61Sspz	stw	12,364(1)
1344cff8db61Sspz	li	8,0x10
1345cff8db61Sspz	stw	26,368(1)
1346cff8db61Sspz	li	26,0x20
1347cff8db61Sspz	stw	27,372(1)
1348cff8db61Sspz	li	27,0x30
1349cff8db61Sspz	stw	28,376(1)
1350cff8db61Sspz	li	28,0x40
1351cff8db61Sspz	stw	29,380(1)
1352cff8db61Sspz	li	29,0x50
1353cff8db61Sspz	stw	30,384(1)
1354cff8db61Sspz	li	30,0x60
1355cff8db61Sspz	stw	31,388(1)
1356cff8db61Sspz	li	31,0x70
1357cff8db61Sspz	mtspr	256,0
1358cff8db61Sspz
1359cff8db61Sspz	subi	9,9,3
1360cff8db61Sspz
1361cff8db61Sspz	lvx	23,0,6
1362cff8db61Sspz	lvx	30,8,6
1363cff8db61Sspz	addi	6,6,0x20
1364cff8db61Sspz	lvx	31,0,6
1365cff8db61Sspz	vperm	23,23,30,10
1366cff8db61Sspz	addi	11,1,32+15
1367cff8db61Sspz	mtctr	9
1368cff8db61Sspz
1369cff8db61Sspz.Load_ctr32_enc_key:
1370cff8db61Sspz	vperm	24,30,31,10
1371cff8db61Sspz	lvx	30,8,6
1372cff8db61Sspz	addi	6,6,0x20
1373cff8db61Sspz	stvx	24,0,11
1374cff8db61Sspz	vperm	25,31,30,10
1375cff8db61Sspz	lvx	31,0,6
1376cff8db61Sspz	stvx	25,8,11
1377cff8db61Sspz	addi	11,11,0x20
1378cff8db61Sspz	bc	16,0,.Load_ctr32_enc_key
1379cff8db61Sspz
1380cff8db61Sspz	lvx	26,8,6
1381cff8db61Sspz	vperm	24,30,31,10
1382cff8db61Sspz	lvx	27,26,6
1383cff8db61Sspz	stvx	24,0,11
1384cff8db61Sspz	vperm	25,31,26,10
1385cff8db61Sspz	lvx	28,27,6
1386cff8db61Sspz	stvx	25,8,11
1387cff8db61Sspz	addi	11,1,32+15
1388cff8db61Sspz	vperm	26,26,27,10
1389cff8db61Sspz	lvx	29,28,6
1390cff8db61Sspz	vperm	27,27,28,10
1391cff8db61Sspz	lvx	30,29,6
1392cff8db61Sspz	vperm	28,28,29,10
1393cff8db61Sspz	lvx	31,30,6
1394cff8db61Sspz	vperm	29,29,30,10
1395cff8db61Sspz	lvx	15,31,6
1396cff8db61Sspz	vperm	30,30,31,10
1397cff8db61Sspz	lvx	24,0,11
1398cff8db61Sspz	vperm	31,31,15,10
1399cff8db61Sspz	lvx	25,8,11
1400cff8db61Sspz
1401cff8db61Sspz	vadduwm	7,11,11
1402cff8db61Sspz	subi	3,3,15
1403cff8db61Sspz	slwi	5,5,4
1404cff8db61Sspz
1405cff8db61Sspz	vadduwm	16,4,11
1406cff8db61Sspz	vadduwm	17,4,7
1407cff8db61Sspz	vxor	15,4,23
1408cff8db61Sspz
1409cff8db61Sspz	vadduwm	18,16,7
1410cff8db61Sspz	vxor	16,16,23
1411cff8db61Sspz
1412cff8db61Sspz	vadduwm	19,17,7
1413cff8db61Sspz	vxor	17,17,23
1414cff8db61Sspz
1415cff8db61Sspz	vadduwm	20,18,7
1416cff8db61Sspz	vxor	18,18,23
1417cff8db61Sspz
1418cff8db61Sspz	vadduwm	21,19,7
1419cff8db61Sspz	vxor	19,19,23
1420cff8db61Sspz	vadduwm	22,20,7
1421cff8db61Sspz	vxor	20,20,23
1422cff8db61Sspz	vadduwm	4,21,7
1423cff8db61Sspz	vxor	21,21,23
1424cff8db61Sspz	vxor	22,22,23
1425cff8db61Sspz
1426cff8db61Sspz	mtctr	9
1427cff8db61Sspz	b	.Loop_ctr32_enc8x
1428cff8db61Sspz.align	5
1429cff8db61Sspz.Loop_ctr32_enc8x:
1430cff8db61Sspz.long	0x11EFC508
1431cff8db61Sspz.long	0x1210C508
1432cff8db61Sspz.long	0x1231C508
1433cff8db61Sspz.long	0x1252C508
1434cff8db61Sspz.long	0x1273C508
1435cff8db61Sspz.long	0x1294C508
1436cff8db61Sspz.long	0x12B5C508
1437cff8db61Sspz.long	0x12D6C508
1438cff8db61Sspz.Loop_ctr32_enc8x_middle:
1439cff8db61Sspz	lvx	24,26,11
1440cff8db61Sspz	addi	11,11,0x20
1441cff8db61Sspz
1442cff8db61Sspz.long	0x11EFCD08
1443cff8db61Sspz.long	0x1210CD08
1444cff8db61Sspz.long	0x1231CD08
1445cff8db61Sspz.long	0x1252CD08
1446cff8db61Sspz.long	0x1273CD08
1447cff8db61Sspz.long	0x1294CD08
1448cff8db61Sspz.long	0x12B5CD08
1449cff8db61Sspz.long	0x12D6CD08
1450cff8db61Sspz	lvx	25,8,11
1451cff8db61Sspz	bc	16,0,.Loop_ctr32_enc8x
1452cff8db61Sspz
1453cff8db61Sspz	subic	11,5,256
1454cff8db61Sspz.long	0x11EFC508
1455cff8db61Sspz.long	0x1210C508
1456cff8db61Sspz.long	0x1231C508
1457cff8db61Sspz.long	0x1252C508
1458cff8db61Sspz.long	0x1273C508
1459cff8db61Sspz.long	0x1294C508
1460cff8db61Sspz.long	0x12B5C508
1461cff8db61Sspz.long	0x12D6C508
1462cff8db61Sspz
1463cff8db61Sspz	subfe	0,0,0
1464cff8db61Sspz.long	0x11EFCD08
1465cff8db61Sspz.long	0x1210CD08
1466cff8db61Sspz.long	0x1231CD08
1467cff8db61Sspz.long	0x1252CD08
1468cff8db61Sspz.long	0x1273CD08
1469cff8db61Sspz.long	0x1294CD08
1470cff8db61Sspz.long	0x12B5CD08
1471cff8db61Sspz.long	0x12D6CD08
1472cff8db61Sspz
1473cff8db61Sspz	and	0,0,11
1474cff8db61Sspz	addi	11,1,32+15
1475cff8db61Sspz.long	0x11EFD508
1476cff8db61Sspz.long	0x1210D508
1477cff8db61Sspz.long	0x1231D508
1478cff8db61Sspz.long	0x1252D508
1479cff8db61Sspz.long	0x1273D508
1480cff8db61Sspz.long	0x1294D508
1481cff8db61Sspz.long	0x12B5D508
1482cff8db61Sspz.long	0x12D6D508
1483cff8db61Sspz	lvx	24,0,11
1484cff8db61Sspz
1485cff8db61Sspz	subic	5,5,129
1486cff8db61Sspz.long	0x11EFDD08
1487cff8db61Sspz	addi	5,5,1
1488cff8db61Sspz.long	0x1210DD08
1489cff8db61Sspz.long	0x1231DD08
1490cff8db61Sspz.long	0x1252DD08
1491cff8db61Sspz.long	0x1273DD08
1492cff8db61Sspz.long	0x1294DD08
1493cff8db61Sspz.long	0x12B5DD08
1494cff8db61Sspz.long	0x12D6DD08
1495cff8db61Sspz	lvx	25,8,11
1496cff8db61Sspz
1497cff8db61Sspz.long	0x11EFE508
1498cff8db61Sspz.long	0x7C001E99
1499cff8db61Sspz.long	0x1210E508
1500cff8db61Sspz.long	0x7C281E99
1501cff8db61Sspz.long	0x1231E508
1502cff8db61Sspz.long	0x7C5A1E99
1503cff8db61Sspz.long	0x1252E508
1504cff8db61Sspz.long	0x7C7B1E99
1505cff8db61Sspz.long	0x1273E508
1506cff8db61Sspz.long	0x7D5C1E99
1507cff8db61Sspz.long	0x1294E508
1508cff8db61Sspz.long	0x7D9D1E99
1509cff8db61Sspz.long	0x12B5E508
1510cff8db61Sspz.long	0x7DBE1E99
1511cff8db61Sspz.long	0x12D6E508
1512cff8db61Sspz.long	0x7DDF1E99
1513cff8db61Sspz	addi	3,3,0x80
1514cff8db61Sspz
1515cff8db61Sspz.long	0x11EFED08
1516cff8db61Sspz
1517cff8db61Sspz.long	0x1210ED08
1518cff8db61Sspz
1519cff8db61Sspz.long	0x1231ED08
1520cff8db61Sspz
1521cff8db61Sspz.long	0x1252ED08
1522cff8db61Sspz
1523cff8db61Sspz.long	0x1273ED08
1524cff8db61Sspz
1525cff8db61Sspz.long	0x1294ED08
1526cff8db61Sspz
1527cff8db61Sspz.long	0x12B5ED08
1528cff8db61Sspz
1529cff8db61Sspz.long	0x12D6ED08
1530cff8db61Sspz
1531cff8db61Sspz
1532cff8db61Sspz	add	3,3,0
1533cff8db61Sspz
1534cff8db61Sspz
1535cff8db61Sspz
1536cff8db61Sspz	subfe.	0,0,0
1537cff8db61Sspz.long	0x11EFF508
1538cff8db61Sspz	vxor	0,0,31
1539cff8db61Sspz.long	0x1210F508
1540cff8db61Sspz	vxor	1,1,31
1541cff8db61Sspz.long	0x1231F508
1542cff8db61Sspz	vxor	2,2,31
1543cff8db61Sspz.long	0x1252F508
1544cff8db61Sspz	vxor	3,3,31
1545cff8db61Sspz.long	0x1273F508
1546cff8db61Sspz	vxor	10,10,31
1547cff8db61Sspz.long	0x1294F508
1548cff8db61Sspz	vxor	12,12,31
1549cff8db61Sspz.long	0x12B5F508
1550cff8db61Sspz	vxor	13,13,31
1551cff8db61Sspz.long	0x12D6F508
1552cff8db61Sspz	vxor	14,14,31
1553cff8db61Sspz
1554cff8db61Sspz	bne	.Lctr32_enc8x_break
1555cff8db61Sspz
1556cff8db61Sspz.long	0x100F0509
1557cff8db61Sspz.long	0x10300D09
1558cff8db61Sspz	vadduwm	16,4,11
1559cff8db61Sspz.long	0x10511509
1560cff8db61Sspz	vadduwm	17,4,7
1561cff8db61Sspz	vxor	15,4,23
1562cff8db61Sspz.long	0x10721D09
1563cff8db61Sspz	vadduwm	18,16,7
1564cff8db61Sspz	vxor	16,16,23
1565cff8db61Sspz.long	0x11535509
1566cff8db61Sspz	vadduwm	19,17,7
1567cff8db61Sspz	vxor	17,17,23
1568cff8db61Sspz.long	0x11946509
1569cff8db61Sspz	vadduwm	20,18,7
1570cff8db61Sspz	vxor	18,18,23
1571cff8db61Sspz.long	0x11B56D09
1572cff8db61Sspz	vadduwm	21,19,7
1573cff8db61Sspz	vxor	19,19,23
1574cff8db61Sspz.long	0x11D67509
1575cff8db61Sspz	vadduwm	22,20,7
1576cff8db61Sspz	vxor	20,20,23
1577cff8db61Sspz
1578cff8db61Sspz	vadduwm	4,21,7
1579cff8db61Sspz	vxor	21,21,23
1580cff8db61Sspz
1581cff8db61Sspz	vxor	22,22,23
1582cff8db61Sspz	mtctr	9
1583cff8db61Sspz
1584cff8db61Sspz.long	0x11EFC508
1585cff8db61Sspz.long	0x7C002799
1586cff8db61Sspz
1587cff8db61Sspz.long	0x1210C508
1588cff8db61Sspz.long	0x7C282799
1589cff8db61Sspz
1590cff8db61Sspz.long	0x1231C508
1591cff8db61Sspz.long	0x7C5A2799
1592cff8db61Sspz
1593cff8db61Sspz.long	0x1252C508
1594cff8db61Sspz.long	0x7C7B2799
1595cff8db61Sspz
1596cff8db61Sspz.long	0x1273C508
1597cff8db61Sspz.long	0x7D5C2799
1598cff8db61Sspz
1599cff8db61Sspz.long	0x1294C508
1600cff8db61Sspz.long	0x7D9D2799
1601cff8db61Sspz
1602cff8db61Sspz.long	0x12B5C508
1603cff8db61Sspz.long	0x7DBE2799
1604cff8db61Sspz.long	0x12D6C508
1605cff8db61Sspz.long	0x7DDF2799
1606cff8db61Sspz	addi	4,4,0x80
1607cff8db61Sspz
1608cff8db61Sspz	b	.Loop_ctr32_enc8x_middle
1609cff8db61Sspz
1610cff8db61Sspz.align	5
1611cff8db61Sspz.Lctr32_enc8x_break:
1612cff8db61Sspz	cmpwi	5,-0x60
1613cff8db61Sspz	blt	.Lctr32_enc8x_one
1614cff8db61Sspz	nop
1615cff8db61Sspz	beq	.Lctr32_enc8x_two
1616cff8db61Sspz	cmpwi	5,-0x40
1617cff8db61Sspz	blt	.Lctr32_enc8x_three
1618cff8db61Sspz	nop
1619cff8db61Sspz	beq	.Lctr32_enc8x_four
1620cff8db61Sspz	cmpwi	5,-0x20
1621cff8db61Sspz	blt	.Lctr32_enc8x_five
1622cff8db61Sspz	nop
1623cff8db61Sspz	beq	.Lctr32_enc8x_six
1624cff8db61Sspz	cmpwi	5,0x00
1625cff8db61Sspz	blt	.Lctr32_enc8x_seven
1626cff8db61Sspz
1627cff8db61Sspz.Lctr32_enc8x_eight:
1628cff8db61Sspz.long	0x11EF0509
1629cff8db61Sspz.long	0x12100D09
1630cff8db61Sspz.long	0x12311509
1631cff8db61Sspz.long	0x12521D09
1632cff8db61Sspz.long	0x12735509
1633cff8db61Sspz.long	0x12946509
1634cff8db61Sspz.long	0x12B56D09
1635cff8db61Sspz.long	0x12D67509
1636cff8db61Sspz
1637cff8db61Sspz
1638cff8db61Sspz
1639cff8db61Sspz.long	0x7DE02799
1640cff8db61Sspz
1641cff8db61Sspz.long	0x7E082799
1642cff8db61Sspz
1643cff8db61Sspz.long	0x7E3A2799
1644cff8db61Sspz
1645cff8db61Sspz.long	0x7E5B2799
1646cff8db61Sspz
1647cff8db61Sspz.long	0x7E7C2799
1648cff8db61Sspz
1649cff8db61Sspz.long	0x7E9D2799
1650cff8db61Sspz
1651cff8db61Sspz.long	0x7EBE2799
1652cff8db61Sspz.long	0x7EDF2799
1653cff8db61Sspz	addi	4,4,0x80
1654cff8db61Sspz	b	.Lctr32_enc8x_done
1655cff8db61Sspz
1656cff8db61Sspz.align	5
1657cff8db61Sspz.Lctr32_enc8x_seven:
1658cff8db61Sspz.long	0x11EF0D09
1659cff8db61Sspz.long	0x12101509
1660cff8db61Sspz.long	0x12311D09
1661cff8db61Sspz.long	0x12525509
1662cff8db61Sspz.long	0x12736509
1663cff8db61Sspz.long	0x12946D09
1664cff8db61Sspz.long	0x12B57509
1665cff8db61Sspz
1666cff8db61Sspz
1667cff8db61Sspz
1668cff8db61Sspz.long	0x7DE02799
1669cff8db61Sspz
1670cff8db61Sspz.long	0x7E082799
1671cff8db61Sspz
1672cff8db61Sspz.long	0x7E3A2799
1673cff8db61Sspz
1674cff8db61Sspz.long	0x7E5B2799
1675cff8db61Sspz
1676cff8db61Sspz.long	0x7E7C2799
1677cff8db61Sspz
1678cff8db61Sspz.long	0x7E9D2799
1679cff8db61Sspz.long	0x7EBE2799
1680cff8db61Sspz	addi	4,4,0x70
1681cff8db61Sspz	b	.Lctr32_enc8x_done
1682cff8db61Sspz
1683cff8db61Sspz.align	5
1684cff8db61Sspz.Lctr32_enc8x_six:
1685cff8db61Sspz.long	0x11EF1509
1686cff8db61Sspz.long	0x12101D09
1687cff8db61Sspz.long	0x12315509
1688cff8db61Sspz.long	0x12526509
1689cff8db61Sspz.long	0x12736D09
1690cff8db61Sspz.long	0x12947509
1691cff8db61Sspz
1692cff8db61Sspz
1693cff8db61Sspz
1694cff8db61Sspz.long	0x7DE02799
1695cff8db61Sspz
1696cff8db61Sspz.long	0x7E082799
1697cff8db61Sspz
1698cff8db61Sspz.long	0x7E3A2799
1699cff8db61Sspz
1700cff8db61Sspz.long	0x7E5B2799
1701cff8db61Sspz
1702cff8db61Sspz.long	0x7E7C2799
1703cff8db61Sspz.long	0x7E9D2799
1704cff8db61Sspz	addi	4,4,0x60
1705cff8db61Sspz	b	.Lctr32_enc8x_done
1706cff8db61Sspz
1707cff8db61Sspz.align	5
1708cff8db61Sspz.Lctr32_enc8x_five:
1709cff8db61Sspz.long	0x11EF1D09
1710cff8db61Sspz.long	0x12105509
1711cff8db61Sspz.long	0x12316509
1712cff8db61Sspz.long	0x12526D09
1713cff8db61Sspz.long	0x12737509
1714cff8db61Sspz
1715cff8db61Sspz
1716cff8db61Sspz
1717cff8db61Sspz.long	0x7DE02799
1718cff8db61Sspz
1719cff8db61Sspz.long	0x7E082799
1720cff8db61Sspz
1721cff8db61Sspz.long	0x7E3A2799
1722cff8db61Sspz
1723cff8db61Sspz.long	0x7E5B2799
1724cff8db61Sspz.long	0x7E7C2799
1725cff8db61Sspz	addi	4,4,0x50
1726cff8db61Sspz	b	.Lctr32_enc8x_done
1727cff8db61Sspz
1728cff8db61Sspz.align	5
1729cff8db61Sspz.Lctr32_enc8x_four:
1730cff8db61Sspz.long	0x11EF5509
1731cff8db61Sspz.long	0x12106509
1732cff8db61Sspz.long	0x12316D09
1733cff8db61Sspz.long	0x12527509
1734cff8db61Sspz
1735cff8db61Sspz
1736cff8db61Sspz
1737cff8db61Sspz.long	0x7DE02799
1738cff8db61Sspz
1739cff8db61Sspz.long	0x7E082799
1740cff8db61Sspz
1741cff8db61Sspz.long	0x7E3A2799
1742cff8db61Sspz.long	0x7E5B2799
1743cff8db61Sspz	addi	4,4,0x40
1744cff8db61Sspz	b	.Lctr32_enc8x_done
1745cff8db61Sspz
1746cff8db61Sspz.align	5
1747cff8db61Sspz.Lctr32_enc8x_three:
1748cff8db61Sspz.long	0x11EF6509
1749cff8db61Sspz.long	0x12106D09
1750cff8db61Sspz.long	0x12317509
1751cff8db61Sspz
1752cff8db61Sspz
1753cff8db61Sspz
1754cff8db61Sspz.long	0x7DE02799
1755cff8db61Sspz
1756cff8db61Sspz.long	0x7E082799
1757cff8db61Sspz.long	0x7E3A2799
1758cff8db61Sspz	addi	4,4,0x30
175952629741Schristos	b	.Lctr32_enc8x_done
1760cff8db61Sspz
1761cff8db61Sspz.align	5
1762cff8db61Sspz.Lctr32_enc8x_two:
1763cff8db61Sspz.long	0x11EF6D09
1764cff8db61Sspz.long	0x12107509
1765cff8db61Sspz
1766cff8db61Sspz
1767cff8db61Sspz
1768cff8db61Sspz.long	0x7DE02799
1769cff8db61Sspz.long	0x7E082799
1770cff8db61Sspz	addi	4,4,0x20
177152629741Schristos	b	.Lctr32_enc8x_done
1772cff8db61Sspz
1773cff8db61Sspz.align	5
1774cff8db61Sspz.Lctr32_enc8x_one:
1775cff8db61Sspz.long	0x11EF7509
1776cff8db61Sspz
1777cff8db61Sspz
1778cff8db61Sspz.long	0x7DE02799
1779cff8db61Sspz	addi	4,4,0x10
1780cff8db61Sspz
1781cff8db61Sspz.Lctr32_enc8x_done:
1782cff8db61Sspz	li	10,47
1783cff8db61Sspz	li	11,63
1784cff8db61Sspz	stvx	6,10,1
1785cff8db61Sspz	addi	10,10,32
1786cff8db61Sspz	stvx	6,11,1
1787cff8db61Sspz	addi	11,11,32
1788cff8db61Sspz	stvx	6,10,1
1789cff8db61Sspz	addi	10,10,32
1790cff8db61Sspz	stvx	6,11,1
1791cff8db61Sspz	addi	11,11,32
1792cff8db61Sspz	stvx	6,10,1
1793cff8db61Sspz	addi	10,10,32
1794cff8db61Sspz	stvx	6,11,1
1795cff8db61Sspz	addi	11,11,32
1796cff8db61Sspz	stvx	6,10,1
1797cff8db61Sspz	addi	10,10,32
1798cff8db61Sspz	stvx	6,11,1
1799cff8db61Sspz	addi	11,11,32
1800cff8db61Sspz
1801cff8db61Sspz	mtspr	256,12
1802cff8db61Sspz	lvx	20,10,1
1803cff8db61Sspz	addi	10,10,32
1804cff8db61Sspz	lvx	21,11,1
1805cff8db61Sspz	addi	11,11,32
1806cff8db61Sspz	lvx	22,10,1
1807cff8db61Sspz	addi	10,10,32
1808cff8db61Sspz	lvx	23,11,1
1809cff8db61Sspz	addi	11,11,32
1810cff8db61Sspz	lvx	24,10,1
1811cff8db61Sspz	addi	10,10,32
1812cff8db61Sspz	lvx	25,11,1
1813cff8db61Sspz	addi	11,11,32
1814cff8db61Sspz	lvx	26,10,1
1815cff8db61Sspz	addi	10,10,32
1816cff8db61Sspz	lvx	27,11,1
1817cff8db61Sspz	addi	11,11,32
1818cff8db61Sspz	lvx	28,10,1
1819cff8db61Sspz	addi	10,10,32
1820cff8db61Sspz	lvx	29,11,1
1821cff8db61Sspz	addi	11,11,32
1822cff8db61Sspz	lvx	30,10,1
1823cff8db61Sspz	lvx	31,11,1
1824cff8db61Sspz	lwz	26,368(1)
1825cff8db61Sspz	lwz	27,372(1)
1826cff8db61Sspz	lwz	28,376(1)
1827cff8db61Sspz	lwz	29,380(1)
1828cff8db61Sspz	lwz	30,384(1)
1829cff8db61Sspz	lwz	31,388(1)
1830cff8db61Sspz	addi	1,1,392
1831cff8db61Sspz	blr
1832cff8db61Sspz.long	0
1833cff8db61Sspz.byte	0,12,0x04,0,0x80,6,6,0
1834cff8db61Sspz.long	0
1835cff8db61Sspz
1836e7039be7Schristos.globl	aes_p8_xts_encrypt
1837e7039be7Schristos.type	aes_p8_xts_encrypt,@function
1838e7039be7Schristos.align	5
1839e7039be7Schristosaes_p8_xts_encrypt:
1840e7039be7Schristos	mr	10,3
1841e7039be7Schristos	li	3,-1
1842e7039be7Schristos	cmplwi	5,16
1843e7039be7Schristos	bltlr
1844e7039be7Schristos
1845e7039be7Schristos	lis	0,0xfff0
1846e7039be7Schristos	mfspr	12,256
1847e7039be7Schristos	li	11,0
1848e7039be7Schristos	mtspr	256,0
1849e7039be7Schristos
1850e7039be7Schristos	vspltisb	9,0x07
1851e7039be7Schristos
1852e7039be7Schristos
1853e7039be7Schristos
1854e7039be7Schristos
1855e7039be7Schristos	li	3,15
1856e7039be7Schristos	lvx	8,0,8
1857e7039be7Schristos	lvsl	5,0,8
1858e7039be7Schristos	lvx	4,3,8
1859e7039be7Schristos
1860e7039be7Schristos	vperm	8,8,4,5
1861e7039be7Schristos
1862e7039be7Schristos	neg	11,10
1863e7039be7Schristos	lvsr	5,0,11
1864e7039be7Schristos	lvx	2,0,10
1865e7039be7Schristos	addi	10,10,15
1866e7039be7Schristos
1867e7039be7Schristos
1868e7039be7Schristos	cmplwi	7,0
1869e7039be7Schristos	beq	.Lxts_enc_no_key2
1870e7039be7Schristos
1871e7039be7Schristos	lvsl	7,0,7
1872e7039be7Schristos	lwz	9,240(7)
1873e7039be7Schristos	srwi	9,9,1
1874e7039be7Schristos	subi	9,9,1
1875e7039be7Schristos	li	3,16
1876e7039be7Schristos
1877e7039be7Schristos	lvx	0,0,7
1878e7039be7Schristos	lvx	1,3,7
1879e7039be7Schristos	addi	3,3,16
1880e7039be7Schristos	vperm	0,0,1,7
1881e7039be7Schristos	vxor	8,8,0
1882e7039be7Schristos	lvx	0,3,7
1883e7039be7Schristos	addi	3,3,16
1884e7039be7Schristos	mtctr	9
1885e7039be7Schristos
1886e7039be7Schristos.Ltweak_xts_enc:
1887e7039be7Schristos	vperm	1,1,0,7
1888e7039be7Schristos.long	0x11080D08
1889e7039be7Schristos	lvx	1,3,7
1890e7039be7Schristos	addi	3,3,16
1891e7039be7Schristos	vperm	0,0,1,7
1892e7039be7Schristos.long	0x11080508
1893e7039be7Schristos	lvx	0,3,7
1894e7039be7Schristos	addi	3,3,16
1895e7039be7Schristos	bc	16,0,.Ltweak_xts_enc
1896e7039be7Schristos
1897e7039be7Schristos	vperm	1,1,0,7
1898e7039be7Schristos.long	0x11080D08
1899e7039be7Schristos	lvx	1,3,7
1900e7039be7Schristos	vperm	0,0,1,7
1901e7039be7Schristos.long	0x11080509
1902e7039be7Schristos
1903e7039be7Schristos	li	8,0
1904e7039be7Schristos	b	.Lxts_enc
1905e7039be7Schristos
1906e7039be7Schristos.Lxts_enc_no_key2:
1907e7039be7Schristos	li	3,-16
1908e7039be7Schristos	and	5,5,3
1909e7039be7Schristos
1910e7039be7Schristos
1911e7039be7Schristos.Lxts_enc:
1912e7039be7Schristos	lvx	4,0,10
1913e7039be7Schristos	addi	10,10,16
1914e7039be7Schristos
1915e7039be7Schristos	lvsl	7,0,6
1916e7039be7Schristos	lwz	9,240(6)
1917e7039be7Schristos	srwi	9,9,1
1918e7039be7Schristos	subi	9,9,1
1919e7039be7Schristos	li	3,16
1920e7039be7Schristos
1921e7039be7Schristos	vslb	10,9,9
1922e7039be7Schristos	vor	10,10,9
1923e7039be7Schristos	vspltisb	11,1
1924e7039be7Schristos	vsldoi	10,10,11,15
1925e7039be7Schristos
1926e7039be7Schristos	cmplwi	5,96
1927e7039be7Schristos	bge	_aesp8_xts_encrypt6x
1928e7039be7Schristos
1929e7039be7Schristos	andi.	7,5,15
1930e7039be7Schristos	subic	0,5,32
1931e7039be7Schristos	subi	7,7,16
1932e7039be7Schristos	subfe	0,0,0
1933e7039be7Schristos	and	0,0,7
1934e7039be7Schristos	add	10,10,0
1935e7039be7Schristos
1936e7039be7Schristos	lvx	0,0,6
1937e7039be7Schristos	lvx	1,3,6
1938e7039be7Schristos	addi	3,3,16
1939e7039be7Schristos	vperm	2,2,4,5
1940e7039be7Schristos	vperm	0,0,1,7
1941e7039be7Schristos	vxor	2,2,8
1942e7039be7Schristos	vxor	2,2,0
1943e7039be7Schristos	lvx	0,3,6
1944e7039be7Schristos	addi	3,3,16
1945e7039be7Schristos	mtctr	9
1946e7039be7Schristos	b	.Loop_xts_enc
1947e7039be7Schristos
1948e7039be7Schristos.align	5
1949e7039be7Schristos.Loop_xts_enc:
1950e7039be7Schristos	vperm	1,1,0,7
1951e7039be7Schristos.long	0x10420D08
1952e7039be7Schristos	lvx	1,3,6
1953e7039be7Schristos	addi	3,3,16
1954e7039be7Schristos	vperm	0,0,1,7
1955e7039be7Schristos.long	0x10420508
1956e7039be7Schristos	lvx	0,3,6
1957e7039be7Schristos	addi	3,3,16
1958e7039be7Schristos	bc	16,0,.Loop_xts_enc
1959e7039be7Schristos
1960e7039be7Schristos	vperm	1,1,0,7
1961e7039be7Schristos.long	0x10420D08
1962e7039be7Schristos	lvx	1,3,6
1963e7039be7Schristos	li	3,16
1964e7039be7Schristos	vperm	0,0,1,7
1965e7039be7Schristos	vxor	0,0,8
1966e7039be7Schristos.long	0x10620509
1967e7039be7Schristos
1968e7039be7Schristos
1969e7039be7Schristos	nop
1970e7039be7Schristos
1971e7039be7Schristos.long	0x7C602799
1972e7039be7Schristos	addi	4,4,16
1973e7039be7Schristos
1974e7039be7Schristos	subic.	5,5,16
1975e7039be7Schristos	beq	.Lxts_enc_done
1976e7039be7Schristos
1977e7039be7Schristos	vor	2,4,4
1978e7039be7Schristos	lvx	4,0,10
1979e7039be7Schristos	addi	10,10,16
1980e7039be7Schristos	lvx	0,0,6
1981e7039be7Schristos	lvx	1,3,6
1982e7039be7Schristos	addi	3,3,16
1983e7039be7Schristos
1984e7039be7Schristos	subic	0,5,32
1985e7039be7Schristos	subfe	0,0,0
1986e7039be7Schristos	and	0,0,7
1987e7039be7Schristos	add	10,10,0
1988e7039be7Schristos
1989e7039be7Schristos	vsrab	11,8,9
1990e7039be7Schristos	vaddubm	8,8,8
1991e7039be7Schristos	vsldoi	11,11,11,15
1992e7039be7Schristos	vand	11,11,10
1993e7039be7Schristos	vxor	8,8,11
1994e7039be7Schristos
1995e7039be7Schristos	vperm	2,2,4,5
1996e7039be7Schristos	vperm	0,0,1,7
1997e7039be7Schristos	vxor	2,2,8
1998e7039be7Schristos	vxor	3,3,0
1999e7039be7Schristos	vxor	2,2,0
2000e7039be7Schristos	lvx	0,3,6
2001e7039be7Schristos	addi	3,3,16
2002e7039be7Schristos
2003e7039be7Schristos	mtctr	9
2004e7039be7Schristos	cmplwi	5,16
2005e7039be7Schristos	bge	.Loop_xts_enc
2006e7039be7Schristos
2007e7039be7Schristos	vxor	3,3,8
2008e7039be7Schristos	lvsr	5,0,5
2009e7039be7Schristos	vxor	4,4,4
2010e7039be7Schristos	vspltisb	11,-1
2011e7039be7Schristos	vperm	4,4,11,5
2012e7039be7Schristos	vsel	2,2,3,4
2013e7039be7Schristos
2014e7039be7Schristos	subi	11,4,17
2015e7039be7Schristos	subi	4,4,16
2016e7039be7Schristos	mtctr	5
2017e7039be7Schristos	li	5,16
2018e7039be7Schristos.Loop_xts_enc_steal:
2019e7039be7Schristos	lbzu	0,1(11)
2020e7039be7Schristos	stb	0,16(11)
2021e7039be7Schristos	bc	16,0,.Loop_xts_enc_steal
2022e7039be7Schristos
2023e7039be7Schristos	mtctr	9
2024e7039be7Schristos	b	.Loop_xts_enc
2025e7039be7Schristos
2026e7039be7Schristos.Lxts_enc_done:
2027e7039be7Schristos	cmplwi	8,0
2028e7039be7Schristos	beq	.Lxts_enc_ret
2029e7039be7Schristos
2030e7039be7Schristos	vsrab	11,8,9
2031e7039be7Schristos	vaddubm	8,8,8
2032e7039be7Schristos	vsldoi	11,11,11,15
2033e7039be7Schristos	vand	11,11,10
2034e7039be7Schristos	vxor	8,8,11
2035e7039be7Schristos
2036e7039be7Schristos
2037e7039be7Schristos.long	0x7D004799
2038e7039be7Schristos
2039e7039be7Schristos.Lxts_enc_ret:
2040e7039be7Schristos	mtspr	256,12
2041e7039be7Schristos	li	3,0
2042e7039be7Schristos	blr
2043e7039be7Schristos.long	0
2044e7039be7Schristos.byte	0,12,0x04,0,0x80,6,6,0
2045e7039be7Schristos.long	0
2046e7039be7Schristos
2047e7039be7Schristos
2048e7039be7Schristos.globl	aes_p8_xts_decrypt
2049e7039be7Schristos.type	aes_p8_xts_decrypt,@function
2050e7039be7Schristos.align	5
2051e7039be7Schristosaes_p8_xts_decrypt:
2052e7039be7Schristos	mr	10,3
2053e7039be7Schristos	li	3,-1
2054e7039be7Schristos	cmplwi	5,16
2055e7039be7Schristos	bltlr
2056e7039be7Schristos
2057e7039be7Schristos	lis	0,0xfff8
2058e7039be7Schristos	mfspr	12,256
2059e7039be7Schristos	li	11,0
2060e7039be7Schristos	mtspr	256,0
2061e7039be7Schristos
2062e7039be7Schristos	andi.	0,5,15
2063e7039be7Schristos	neg	0,0
2064e7039be7Schristos	andi.	0,0,16
2065e7039be7Schristos	sub	5,5,0
2066e7039be7Schristos
2067e7039be7Schristos	vspltisb	9,0x07
2068e7039be7Schristos
2069e7039be7Schristos
2070e7039be7Schristos
2071e7039be7Schristos
2072e7039be7Schristos	li	3,15
2073e7039be7Schristos	lvx	8,0,8
2074e7039be7Schristos	lvsl	5,0,8
2075e7039be7Schristos	lvx	4,3,8
2076e7039be7Schristos
2077e7039be7Schristos	vperm	8,8,4,5
2078e7039be7Schristos
2079e7039be7Schristos	neg	11,10
2080e7039be7Schristos	lvsr	5,0,11
2081e7039be7Schristos	lvx	2,0,10
2082e7039be7Schristos	addi	10,10,15
2083e7039be7Schristos
2084e7039be7Schristos
2085e7039be7Schristos	cmplwi	7,0
2086e7039be7Schristos	beq	.Lxts_dec_no_key2
2087e7039be7Schristos
2088e7039be7Schristos	lvsl	7,0,7
2089e7039be7Schristos	lwz	9,240(7)
2090e7039be7Schristos	srwi	9,9,1
2091e7039be7Schristos	subi	9,9,1
2092e7039be7Schristos	li	3,16
2093e7039be7Schristos
2094e7039be7Schristos	lvx	0,0,7
2095e7039be7Schristos	lvx	1,3,7
2096e7039be7Schristos	addi	3,3,16
2097e7039be7Schristos	vperm	0,0,1,7
2098e7039be7Schristos	vxor	8,8,0
2099e7039be7Schristos	lvx	0,3,7
2100e7039be7Schristos	addi	3,3,16
2101e7039be7Schristos	mtctr	9
2102e7039be7Schristos
2103e7039be7Schristos.Ltweak_xts_dec:
2104e7039be7Schristos	vperm	1,1,0,7
2105e7039be7Schristos.long	0x11080D08
2106e7039be7Schristos	lvx	1,3,7
2107e7039be7Schristos	addi	3,3,16
2108e7039be7Schristos	vperm	0,0,1,7
2109e7039be7Schristos.long	0x11080508
2110e7039be7Schristos	lvx	0,3,7
2111e7039be7Schristos	addi	3,3,16
2112e7039be7Schristos	bc	16,0,.Ltweak_xts_dec
2113e7039be7Schristos
2114e7039be7Schristos	vperm	1,1,0,7
2115e7039be7Schristos.long	0x11080D08
2116e7039be7Schristos	lvx	1,3,7
2117e7039be7Schristos	vperm	0,0,1,7
2118e7039be7Schristos.long	0x11080509
2119e7039be7Schristos
2120e7039be7Schristos	li	8,0
2121e7039be7Schristos	b	.Lxts_dec
2122e7039be7Schristos
2123e7039be7Schristos.Lxts_dec_no_key2:
2124e7039be7Schristos	neg	3,5
2125e7039be7Schristos	andi.	3,3,15
2126e7039be7Schristos	add	5,5,3
2127e7039be7Schristos
2128e7039be7Schristos
2129e7039be7Schristos.Lxts_dec:
2130e7039be7Schristos	lvx	4,0,10
2131e7039be7Schristos	addi	10,10,16
2132e7039be7Schristos
2133e7039be7Schristos	lvsl	7,0,6
2134e7039be7Schristos	lwz	9,240(6)
2135e7039be7Schristos	srwi	9,9,1
2136e7039be7Schristos	subi	9,9,1
2137e7039be7Schristos	li	3,16
2138e7039be7Schristos
2139e7039be7Schristos	vslb	10,9,9
2140e7039be7Schristos	vor	10,10,9
2141e7039be7Schristos	vspltisb	11,1
2142e7039be7Schristos	vsldoi	10,10,11,15
2143e7039be7Schristos
2144e7039be7Schristos	cmplwi	5,96
2145e7039be7Schristos	bge	_aesp8_xts_decrypt6x
2146e7039be7Schristos
2147e7039be7Schristos	lvx	0,0,6
2148e7039be7Schristos	lvx	1,3,6
2149e7039be7Schristos	addi	3,3,16
2150e7039be7Schristos	vperm	2,2,4,5
2151e7039be7Schristos	vperm	0,0,1,7
2152e7039be7Schristos	vxor	2,2,8
2153e7039be7Schristos	vxor	2,2,0
2154e7039be7Schristos	lvx	0,3,6
2155e7039be7Schristos	addi	3,3,16
2156e7039be7Schristos	mtctr	9
2157e7039be7Schristos
2158e7039be7Schristos	cmplwi	5,16
2159e7039be7Schristos	blt	.Ltail_xts_dec
2160e7039be7Schristos	b	.Loop_xts_dec
2161e7039be7Schristos
2162e7039be7Schristos.align	5
2163e7039be7Schristos.Loop_xts_dec:
2164e7039be7Schristos	vperm	1,1,0,7
2165e7039be7Schristos.long	0x10420D48
2166e7039be7Schristos	lvx	1,3,6
2167e7039be7Schristos	addi	3,3,16
2168e7039be7Schristos	vperm	0,0,1,7
2169e7039be7Schristos.long	0x10420548
2170e7039be7Schristos	lvx	0,3,6
2171e7039be7Schristos	addi	3,3,16
2172e7039be7Schristos	bc	16,0,.Loop_xts_dec
2173e7039be7Schristos
2174e7039be7Schristos	vperm	1,1,0,7
2175e7039be7Schristos.long	0x10420D48
2176e7039be7Schristos	lvx	1,3,6
2177e7039be7Schristos	li	3,16
2178e7039be7Schristos	vperm	0,0,1,7
2179e7039be7Schristos	vxor	0,0,8
2180e7039be7Schristos.long	0x10620549
2181e7039be7Schristos
2182e7039be7Schristos
2183e7039be7Schristos	nop
2184e7039be7Schristos
2185e7039be7Schristos.long	0x7C602799
2186e7039be7Schristos	addi	4,4,16
2187e7039be7Schristos
2188e7039be7Schristos	subic.	5,5,16
2189e7039be7Schristos	beq	.Lxts_dec_done
2190e7039be7Schristos
2191e7039be7Schristos	vor	2,4,4
2192e7039be7Schristos	lvx	4,0,10
2193e7039be7Schristos	addi	10,10,16
2194e7039be7Schristos	lvx	0,0,6
2195e7039be7Schristos	lvx	1,3,6
2196e7039be7Schristos	addi	3,3,16
2197e7039be7Schristos
2198e7039be7Schristos	vsrab	11,8,9
2199e7039be7Schristos	vaddubm	8,8,8
2200e7039be7Schristos	vsldoi	11,11,11,15
2201e7039be7Schristos	vand	11,11,10
2202e7039be7Schristos	vxor	8,8,11
2203e7039be7Schristos
2204e7039be7Schristos	vperm	2,2,4,5
2205e7039be7Schristos	vperm	0,0,1,7
2206e7039be7Schristos	vxor	2,2,8
2207e7039be7Schristos	vxor	2,2,0
2208e7039be7Schristos	lvx	0,3,6
2209e7039be7Schristos	addi	3,3,16
2210e7039be7Schristos
2211e7039be7Schristos	mtctr	9
2212e7039be7Schristos	cmplwi	5,16
2213e7039be7Schristos	bge	.Loop_xts_dec
2214e7039be7Schristos
2215e7039be7Schristos.Ltail_xts_dec:
2216e7039be7Schristos	vsrab	11,8,9
2217e7039be7Schristos	vaddubm	12,8,8
2218e7039be7Schristos	vsldoi	11,11,11,15
2219e7039be7Schristos	vand	11,11,10
2220e7039be7Schristos	vxor	12,12,11
2221e7039be7Schristos
2222e7039be7Schristos	subi	10,10,16
2223e7039be7Schristos	add	10,10,5
2224e7039be7Schristos
2225e7039be7Schristos	vxor	2,2,8
2226e7039be7Schristos	vxor	2,2,12
2227e7039be7Schristos
2228e7039be7Schristos.Loop_xts_dec_short:
2229e7039be7Schristos	vperm	1,1,0,7
2230e7039be7Schristos.long	0x10420D48
2231e7039be7Schristos	lvx	1,3,6
2232e7039be7Schristos	addi	3,3,16
2233e7039be7Schristos	vperm	0,0,1,7
2234e7039be7Schristos.long	0x10420548
2235e7039be7Schristos	lvx	0,3,6
2236e7039be7Schristos	addi	3,3,16
2237e7039be7Schristos	bc	16,0,.Loop_xts_dec_short
2238e7039be7Schristos
2239e7039be7Schristos	vperm	1,1,0,7
2240e7039be7Schristos.long	0x10420D48
2241e7039be7Schristos	lvx	1,3,6
2242e7039be7Schristos	li	3,16
2243e7039be7Schristos	vperm	0,0,1,7
2244e7039be7Schristos	vxor	0,0,12
2245e7039be7Schristos.long	0x10620549
2246e7039be7Schristos
2247e7039be7Schristos
2248e7039be7Schristos	nop
2249e7039be7Schristos
2250e7039be7Schristos.long	0x7C602799
2251e7039be7Schristos
2252e7039be7Schristos	vor	2,4,4
2253e7039be7Schristos	lvx	4,0,10
2254e7039be7Schristos
2255e7039be7Schristos	lvx	0,0,6
2256e7039be7Schristos	lvx	1,3,6
2257e7039be7Schristos	addi	3,3,16
2258e7039be7Schristos	vperm	2,2,4,5
2259e7039be7Schristos	vperm	0,0,1,7
2260e7039be7Schristos
2261e7039be7Schristos	lvsr	5,0,5
2262e7039be7Schristos	vxor	4,4,4
2263e7039be7Schristos	vspltisb	11,-1
2264e7039be7Schristos	vperm	4,4,11,5
2265e7039be7Schristos	vsel	2,2,3,4
2266e7039be7Schristos
2267e7039be7Schristos	vxor	0,0,8
2268e7039be7Schristos	vxor	2,2,0
2269e7039be7Schristos	lvx	0,3,6
2270e7039be7Schristos	addi	3,3,16
2271e7039be7Schristos
2272e7039be7Schristos	subi	11,4,1
2273e7039be7Schristos	mtctr	5
2274e7039be7Schristos	li	5,16
2275e7039be7Schristos.Loop_xts_dec_steal:
2276e7039be7Schristos	lbzu	0,1(11)
2277e7039be7Schristos	stb	0,16(11)
2278e7039be7Schristos	bc	16,0,.Loop_xts_dec_steal
2279e7039be7Schristos
2280e7039be7Schristos	mtctr	9
2281e7039be7Schristos	b	.Loop_xts_dec
2282e7039be7Schristos
2283e7039be7Schristos.Lxts_dec_done:
2284e7039be7Schristos	cmplwi	8,0
2285e7039be7Schristos	beq	.Lxts_dec_ret
2286e7039be7Schristos
2287e7039be7Schristos	vsrab	11,8,9
2288e7039be7Schristos	vaddubm	8,8,8
2289e7039be7Schristos	vsldoi	11,11,11,15
2290e7039be7Schristos	vand	11,11,10
2291e7039be7Schristos	vxor	8,8,11
2292e7039be7Schristos
2293e7039be7Schristos
2294e7039be7Schristos.long	0x7D004799
2295e7039be7Schristos
2296e7039be7Schristos.Lxts_dec_ret:
2297e7039be7Schristos	mtspr	256,12
2298e7039be7Schristos	li	3,0
2299e7039be7Schristos	blr
2300e7039be7Schristos.long	0
2301e7039be7Schristos.byte	0,12,0x04,0,0x80,6,6,0
2302e7039be7Schristos.long	0
2303e7039be7Schristos
2304e7039be7Schristos.align	5
2305e7039be7Schristos_aesp8_xts_encrypt6x:
2306e7039be7Schristos	stwu	1,-392(1)
2307e7039be7Schristos	mflr	11
2308e7039be7Schristos	li	7,175
2309e7039be7Schristos	li	3,191
2310e7039be7Schristos	stw	11,396(1)
2311e7039be7Schristos	stvx	20,7,1
2312e7039be7Schristos	addi	7,7,32
2313e7039be7Schristos	stvx	21,3,1
2314e7039be7Schristos	addi	3,3,32
2315e7039be7Schristos	stvx	22,7,1
2316e7039be7Schristos	addi	7,7,32
2317e7039be7Schristos	stvx	23,3,1
2318e7039be7Schristos	addi	3,3,32
2319e7039be7Schristos	stvx	24,7,1
2320e7039be7Schristos	addi	7,7,32
2321e7039be7Schristos	stvx	25,3,1
2322e7039be7Schristos	addi	3,3,32
2323e7039be7Schristos	stvx	26,7,1
2324e7039be7Schristos	addi	7,7,32
2325e7039be7Schristos	stvx	27,3,1
2326e7039be7Schristos	addi	3,3,32
2327e7039be7Schristos	stvx	28,7,1
2328e7039be7Schristos	addi	7,7,32
2329e7039be7Schristos	stvx	29,3,1
2330e7039be7Schristos	addi	3,3,32
2331e7039be7Schristos	stvx	30,7,1
2332e7039be7Schristos	stvx	31,3,1
2333e7039be7Schristos	li	0,-1
2334e7039be7Schristos	stw	12,364(1)
2335e7039be7Schristos	li	3,0x10
2336e7039be7Schristos	stw	26,368(1)
2337e7039be7Schristos	li	26,0x20
2338e7039be7Schristos	stw	27,372(1)
2339e7039be7Schristos	li	27,0x30
2340e7039be7Schristos	stw	28,376(1)
2341e7039be7Schristos	li	28,0x40
2342e7039be7Schristos	stw	29,380(1)
2343e7039be7Schristos	li	29,0x50
2344e7039be7Schristos	stw	30,384(1)
2345e7039be7Schristos	li	30,0x60
2346e7039be7Schristos	stw	31,388(1)
2347e7039be7Schristos	li	31,0x70
2348e7039be7Schristos	mtspr	256,0
2349e7039be7Schristos
2350*7d9ffdb3Schristos
2351*7d9ffdb3Schristos	xxlor	2, 32+10, 32+10
2352*7d9ffdb3Schristos	vsldoi	10,11,10,1
2353*7d9ffdb3Schristos	xxlor	1, 32+10, 32+10
2354*7d9ffdb3Schristos
2355*7d9ffdb3Schristos
2356*7d9ffdb3Schristos	mr	31, 6
2357*7d9ffdb3Schristos	bl	.Lconsts
2358*7d9ffdb3Schristos	lxvw4x	0, 28, 6
2359*7d9ffdb3Schristos	mr	6, 31
2360*7d9ffdb3Schristos	li	31,0x70
2361*7d9ffdb3Schristos
2362e7039be7Schristos	subi	9,9,3
2363e7039be7Schristos
2364e7039be7Schristos	lvx	23,0,6
2365e7039be7Schristos	lvx	30,3,6
2366e7039be7Schristos	addi	6,6,0x20
2367e7039be7Schristos	lvx	31,0,6
2368e7039be7Schristos	vperm	23,23,30,7
2369e7039be7Schristos	addi	7,1,32+15
2370e7039be7Schristos	mtctr	9
2371e7039be7Schristos
2372e7039be7Schristos.Load_xts_enc_key:
2373e7039be7Schristos	vperm	24,30,31,7
2374e7039be7Schristos	lvx	30,3,6
2375e7039be7Schristos	addi	6,6,0x20
2376e7039be7Schristos	stvx	24,0,7
2377e7039be7Schristos	vperm	25,31,30,7
2378e7039be7Schristos	lvx	31,0,6
2379e7039be7Schristos	stvx	25,3,7
2380e7039be7Schristos	addi	7,7,0x20
2381e7039be7Schristos	bc	16,0,.Load_xts_enc_key
2382e7039be7Schristos
2383e7039be7Schristos	lvx	26,3,6
2384e7039be7Schristos	vperm	24,30,31,7
2385e7039be7Schristos	lvx	27,26,6
2386e7039be7Schristos	stvx	24,0,7
2387e7039be7Schristos	vperm	25,31,26,7
2388e7039be7Schristos	lvx	28,27,6
2389e7039be7Schristos	stvx	25,3,7
2390e7039be7Schristos	addi	7,1,32+15
2391e7039be7Schristos	vperm	26,26,27,7
2392e7039be7Schristos	lvx	29,28,6
2393e7039be7Schristos	vperm	27,27,28,7
2394e7039be7Schristos	lvx	30,29,6
2395e7039be7Schristos	vperm	28,28,29,7
2396e7039be7Schristos	lvx	31,30,6
2397e7039be7Schristos	vperm	29,29,30,7
2398e7039be7Schristos	lvx	22,31,6
2399e7039be7Schristos	vperm	30,30,31,7
2400e7039be7Schristos	lvx	24,0,7
2401e7039be7Schristos	vperm	31,31,22,7
2402e7039be7Schristos	lvx	25,3,7
2403e7039be7Schristos
2404*7d9ffdb3Schristos
2405*7d9ffdb3Schristos
2406*7d9ffdb3Schristos
2407*7d9ffdb3Schristos
2408*7d9ffdb3Schristos
2409*7d9ffdb3Schristos
2410*7d9ffdb3Schristos
2411*7d9ffdb3Schristos
2412e7039be7Schristos	vperm	0,2,4,5
2413e7039be7Schristos	subi	10,10,31
2414e7039be7Schristos	vxor	17,8,23
2415e7039be7Schristos	vsrab	11,8,9
2416e7039be7Schristos	vaddubm	8,8,8
2417e7039be7Schristos	vand	11,11,10
2418e7039be7Schristos	vxor	7,0,17
2419*7d9ffdb3Schristos	xxlor	32+1, 0, 0
2420*7d9ffdb3Schristos	vpermxor	8, 8, 11, 1
2421e7039be7Schristos
2422e7039be7Schristos.long	0x7C235699
2423e7039be7Schristos	vxor	18,8,23
2424e7039be7Schristos	vsrab	11,8,9
2425e7039be7Schristos	vaddubm	8,8,8
2426e7039be7Schristos
2427e7039be7Schristos	vand	11,11,10
2428e7039be7Schristos	vxor	12,1,18
2429*7d9ffdb3Schristos	xxlor	32+2, 0, 0
2430*7d9ffdb3Schristos	vpermxor	8, 8, 11, 2
2431e7039be7Schristos
2432e7039be7Schristos.long	0x7C5A5699
2433e7039be7Schristos	andi.	31,5,15
2434e7039be7Schristos	vxor	19,8,23
2435e7039be7Schristos	vsrab	11,8,9
2436e7039be7Schristos	vaddubm	8,8,8
2437e7039be7Schristos
2438e7039be7Schristos	vand	11,11,10
2439e7039be7Schristos	vxor	13,2,19
2440*7d9ffdb3Schristos	xxlor	32+3, 0, 0
2441*7d9ffdb3Schristos	vpermxor	8, 8, 11, 3
2442e7039be7Schristos
2443e7039be7Schristos.long	0x7C7B5699
2444e7039be7Schristos	sub	5,5,31
2445e7039be7Schristos	vxor	20,8,23
2446e7039be7Schristos	vsrab	11,8,9
2447e7039be7Schristos	vaddubm	8,8,8
2448e7039be7Schristos
2449e7039be7Schristos	vand	11,11,10
2450e7039be7Schristos	vxor	14,3,20
2451*7d9ffdb3Schristos	xxlor	32+4, 0, 0
2452*7d9ffdb3Schristos	vpermxor	8, 8, 11, 4
2453e7039be7Schristos
2454e7039be7Schristos.long	0x7C9C5699
2455e7039be7Schristos	subi	5,5,0x60
2456e7039be7Schristos	vxor	21,8,23
2457e7039be7Schristos	vsrab	11,8,9
2458e7039be7Schristos	vaddubm	8,8,8
2459e7039be7Schristos
2460e7039be7Schristos	vand	11,11,10
2461e7039be7Schristos	vxor	15,4,21
2462*7d9ffdb3Schristos	xxlor	32+5, 0, 0
2463*7d9ffdb3Schristos	vpermxor	8, 8, 11, 5
2464e7039be7Schristos
2465e7039be7Schristos.long	0x7CBD5699
2466e7039be7Schristos	addi	10,10,0x60
2467e7039be7Schristos	vxor	22,8,23
2468e7039be7Schristos	vsrab	11,8,9
2469e7039be7Schristos	vaddubm	8,8,8
2470e7039be7Schristos
2471e7039be7Schristos	vand	11,11,10
2472e7039be7Schristos	vxor	16,5,22
2473*7d9ffdb3Schristos	xxlor	32+0, 0, 0
2474*7d9ffdb3Schristos	vpermxor	8, 8, 11, 0
2475e7039be7Schristos
2476e7039be7Schristos	vxor	31,31,23
2477e7039be7Schristos	mtctr	9
2478e7039be7Schristos	b	.Loop_xts_enc6x
2479e7039be7Schristos
2480e7039be7Schristos.align	5
2481e7039be7Schristos.Loop_xts_enc6x:
2482e7039be7Schristos.long	0x10E7C508
2483e7039be7Schristos.long	0x118CC508
2484e7039be7Schristos.long	0x11ADC508
2485e7039be7Schristos.long	0x11CEC508
2486e7039be7Schristos.long	0x11EFC508
2487e7039be7Schristos.long	0x1210C508
2488e7039be7Schristos	lvx	24,26,7
2489e7039be7Schristos	addi	7,7,0x20
2490e7039be7Schristos
2491e7039be7Schristos.long	0x10E7CD08
2492e7039be7Schristos.long	0x118CCD08
2493e7039be7Schristos.long	0x11ADCD08
2494e7039be7Schristos.long	0x11CECD08
2495e7039be7Schristos.long	0x11EFCD08
2496e7039be7Schristos.long	0x1210CD08
2497e7039be7Schristos	lvx	25,3,7
2498e7039be7Schristos	bc	16,0,.Loop_xts_enc6x
2499e7039be7Schristos
2500*7d9ffdb3Schristos	xxlor	32+10, 1, 1
2501*7d9ffdb3Schristos
2502e7039be7Schristos	subic	5,5,96
2503e7039be7Schristos	vxor	0,17,31
2504e7039be7Schristos.long	0x10E7C508
2505e7039be7Schristos.long	0x118CC508
2506e7039be7Schristos	vsrab	11,8,9
2507e7039be7Schristos	vxor	17,8,23
2508e7039be7Schristos	vaddubm	8,8,8
2509e7039be7Schristos.long	0x11ADC508
2510e7039be7Schristos.long	0x11CEC508
2511e7039be7Schristos.long	0x11EFC508
2512e7039be7Schristos.long	0x1210C508
2513e7039be7Schristos
2514e7039be7Schristos	subfe.	0,0,0
2515e7039be7Schristos	vand	11,11,10
2516e7039be7Schristos.long	0x10E7CD08
2517e7039be7Schristos.long	0x118CCD08
2518*7d9ffdb3Schristos	xxlor	32+1, 0, 0
2519*7d9ffdb3Schristos	vpermxor	8, 8, 11, 1
2520e7039be7Schristos.long	0x11ADCD08
2521e7039be7Schristos.long	0x11CECD08
2522e7039be7Schristos	vxor	1,18,31
2523e7039be7Schristos	vsrab	11,8,9
2524e7039be7Schristos	vxor	18,8,23
2525e7039be7Schristos.long	0x11EFCD08
2526e7039be7Schristos.long	0x1210CD08
2527e7039be7Schristos
2528e7039be7Schristos	and	0,0,5
2529e7039be7Schristos	vaddubm	8,8,8
2530e7039be7Schristos.long	0x10E7D508
2531e7039be7Schristos.long	0x118CD508
2532e7039be7Schristos	vand	11,11,10
2533e7039be7Schristos.long	0x11ADD508
2534e7039be7Schristos.long	0x11CED508
2535*7d9ffdb3Schristos	xxlor	32+2, 0, 0
2536*7d9ffdb3Schristos	vpermxor	8, 8, 11, 2
2537e7039be7Schristos.long	0x11EFD508
2538e7039be7Schristos.long	0x1210D508
2539e7039be7Schristos
2540e7039be7Schristos	add	10,10,0
2541e7039be7Schristos
2542e7039be7Schristos
2543e7039be7Schristos
2544e7039be7Schristos	vxor	2,19,31
2545e7039be7Schristos	vsrab	11,8,9
2546e7039be7Schristos	vxor	19,8,23
2547e7039be7Schristos	vaddubm	8,8,8
2548e7039be7Schristos.long	0x10E7DD08
2549e7039be7Schristos.long	0x118CDD08
2550e7039be7Schristos.long	0x11ADDD08
2551e7039be7Schristos.long	0x11CEDD08
2552e7039be7Schristos	vand	11,11,10
2553e7039be7Schristos.long	0x11EFDD08
2554e7039be7Schristos.long	0x1210DD08
2555e7039be7Schristos
2556e7039be7Schristos	addi	7,1,32+15
2557*7d9ffdb3Schristos	xxlor	32+3, 0, 0
2558*7d9ffdb3Schristos	vpermxor	8, 8, 11, 3
2559e7039be7Schristos.long	0x10E7E508
2560e7039be7Schristos.long	0x118CE508
2561e7039be7Schristos	vxor	3,20,31
2562e7039be7Schristos	vsrab	11,8,9
2563e7039be7Schristos	vxor	20,8,23
2564e7039be7Schristos.long	0x11ADE508
2565e7039be7Schristos.long	0x11CEE508
2566e7039be7Schristos	vaddubm	8,8,8
2567e7039be7Schristos.long	0x11EFE508
2568e7039be7Schristos.long	0x1210E508
2569e7039be7Schristos	lvx	24,0,7
2570e7039be7Schristos	vand	11,11,10
2571e7039be7Schristos
2572e7039be7Schristos.long	0x10E7ED08
2573e7039be7Schristos.long	0x118CED08
2574*7d9ffdb3Schristos	xxlor	32+4, 0, 0
2575*7d9ffdb3Schristos	vpermxor	8, 8, 11, 4
2576e7039be7Schristos.long	0x11ADED08
2577e7039be7Schristos.long	0x11CEED08
2578e7039be7Schristos	vxor	4,21,31
2579e7039be7Schristos	vsrab	11,8,9
2580e7039be7Schristos	vxor	21,8,23
2581e7039be7Schristos.long	0x11EFED08
2582e7039be7Schristos.long	0x1210ED08
2583e7039be7Schristos	lvx	25,3,7
2584e7039be7Schristos	vaddubm	8,8,8
2585e7039be7Schristos
2586e7039be7Schristos.long	0x10E7F508
2587e7039be7Schristos.long	0x118CF508
2588e7039be7Schristos	vand	11,11,10
2589e7039be7Schristos.long	0x11ADF508
2590e7039be7Schristos.long	0x11CEF508
2591*7d9ffdb3Schristos	xxlor	32+5, 0, 0
2592*7d9ffdb3Schristos	vpermxor	8, 8, 11, 5
2593e7039be7Schristos.long	0x11EFF508
2594e7039be7Schristos.long	0x1210F508
2595e7039be7Schristos	vxor	5,22,31
2596e7039be7Schristos	vsrab	11,8,9
2597e7039be7Schristos	vxor	22,8,23
2598e7039be7Schristos
2599e7039be7Schristos.long	0x10E70509
2600e7039be7Schristos.long	0x7C005699
2601e7039be7Schristos	vaddubm	8,8,8
2602e7039be7Schristos.long	0x118C0D09
2603e7039be7Schristos.long	0x7C235699
2604e7039be7Schristos.long	0x11AD1509
2605e7039be7Schristos
2606e7039be7Schristos.long	0x7C5A5699
2607e7039be7Schristos	vand	11,11,10
2608e7039be7Schristos.long	0x11CE1D09
2609e7039be7Schristos
2610e7039be7Schristos.long	0x7C7B5699
2611e7039be7Schristos.long	0x11EF2509
2612e7039be7Schristos
2613e7039be7Schristos.long	0x7C9C5699
2614*7d9ffdb3Schristos	xxlor	10, 32+0, 32+0
2615*7d9ffdb3Schristos	xxlor	32+0, 0, 0
2616*7d9ffdb3Schristos	vpermxor	8, 8, 11, 0
2617*7d9ffdb3Schristos	xxlor	32+0, 10, 10
2618e7039be7Schristos.long	0x11702D09
2619e7039be7Schristos
2620e7039be7Schristos
2621e7039be7Schristos.long	0x7CBD5699
2622e7039be7Schristos	addi	10,10,0x60
2623e7039be7Schristos
2624e7039be7Schristos
2625e7039be7Schristos
2626e7039be7Schristos
2627e7039be7Schristos
2628e7039be7Schristos.long	0x7CE02799
2629e7039be7Schristos	vxor	7,0,17
2630e7039be7Schristos
2631e7039be7Schristos.long	0x7D832799
2632e7039be7Schristos	vxor	12,1,18
2633e7039be7Schristos
2634e7039be7Schristos.long	0x7DBA2799
2635e7039be7Schristos	vxor	13,2,19
2636e7039be7Schristos
2637e7039be7Schristos.long	0x7DDB2799
2638e7039be7Schristos	vxor	14,3,20
2639e7039be7Schristos
2640e7039be7Schristos.long	0x7DFC2799
2641e7039be7Schristos	vxor	15,4,21
2642e7039be7Schristos
2643e7039be7Schristos.long	0x7D7D2799
2644e7039be7Schristos	vxor	16,5,22
2645e7039be7Schristos	addi	4,4,0x60
2646e7039be7Schristos
2647e7039be7Schristos	mtctr	9
2648e7039be7Schristos	beq	.Loop_xts_enc6x
2649e7039be7Schristos
2650*7d9ffdb3Schristos	xxlor	32+10, 2, 2
2651*7d9ffdb3Schristos
2652e7039be7Schristos	addic.	5,5,0x60
2653e7039be7Schristos	beq	.Lxts_enc6x_zero
2654e7039be7Schristos	cmpwi	5,0x20
2655e7039be7Schristos	blt	.Lxts_enc6x_one
2656e7039be7Schristos	nop
2657e7039be7Schristos	beq	.Lxts_enc6x_two
2658e7039be7Schristos	cmpwi	5,0x40
2659e7039be7Schristos	blt	.Lxts_enc6x_three
2660e7039be7Schristos	nop
2661e7039be7Schristos	beq	.Lxts_enc6x_four
2662e7039be7Schristos
2663e7039be7Schristos.Lxts_enc6x_five:
2664e7039be7Schristos	vxor	7,1,17
2665e7039be7Schristos	vxor	12,2,18
2666e7039be7Schristos	vxor	13,3,19
2667e7039be7Schristos	vxor	14,4,20
2668e7039be7Schristos	vxor	15,5,21
2669e7039be7Schristos
2670e7039be7Schristos	bl	_aesp8_xts_enc5x
2671e7039be7Schristos
2672e7039be7Schristos
2673e7039be7Schristos	vor	17,22,22
2674e7039be7Schristos
2675e7039be7Schristos.long	0x7CE02799
2676e7039be7Schristos
2677e7039be7Schristos.long	0x7D832799
2678e7039be7Schristos
2679e7039be7Schristos.long	0x7DBA2799
2680e7039be7Schristos	vxor	11,15,22
2681e7039be7Schristos
2682e7039be7Schristos.long	0x7DDB2799
2683e7039be7Schristos.long	0x7DFC2799
2684e7039be7Schristos	addi	4,4,0x50
2685e7039be7Schristos	bne	.Lxts_enc6x_steal
2686e7039be7Schristos	b	.Lxts_enc6x_done
2687e7039be7Schristos
2688e7039be7Schristos.align	4
2689e7039be7Schristos.Lxts_enc6x_four:
2690e7039be7Schristos	vxor	7,2,17
2691e7039be7Schristos	vxor	12,3,18
2692e7039be7Schristos	vxor	13,4,19
2693e7039be7Schristos	vxor	14,5,20
2694e7039be7Schristos	vxor	15,15,15
2695e7039be7Schristos
2696e7039be7Schristos	bl	_aesp8_xts_enc5x
2697e7039be7Schristos
2698e7039be7Schristos
2699e7039be7Schristos	vor	17,21,21
2700e7039be7Schristos
2701e7039be7Schristos.long	0x7CE02799
2702e7039be7Schristos
2703e7039be7Schristos.long	0x7D832799
2704e7039be7Schristos	vxor	11,14,21
2705e7039be7Schristos
2706e7039be7Schristos.long	0x7DBA2799
2707e7039be7Schristos.long	0x7DDB2799
2708e7039be7Schristos	addi	4,4,0x40
2709e7039be7Schristos	bne	.Lxts_enc6x_steal
2710e7039be7Schristos	b	.Lxts_enc6x_done
2711e7039be7Schristos
2712e7039be7Schristos.align	4
2713e7039be7Schristos.Lxts_enc6x_three:
2714e7039be7Schristos	vxor	7,3,17
2715e7039be7Schristos	vxor	12,4,18
2716e7039be7Schristos	vxor	13,5,19
2717e7039be7Schristos	vxor	14,14,14
2718e7039be7Schristos	vxor	15,15,15
2719e7039be7Schristos
2720e7039be7Schristos	bl	_aesp8_xts_enc5x
2721e7039be7Schristos
2722e7039be7Schristos
2723e7039be7Schristos	vor	17,20,20
2724e7039be7Schristos
2725e7039be7Schristos.long	0x7CE02799
2726e7039be7Schristos	vxor	11,13,20
2727e7039be7Schristos
2728e7039be7Schristos.long	0x7D832799
2729e7039be7Schristos.long	0x7DBA2799
2730e7039be7Schristos	addi	4,4,0x30
2731e7039be7Schristos	bne	.Lxts_enc6x_steal
2732e7039be7Schristos	b	.Lxts_enc6x_done
2733e7039be7Schristos
2734e7039be7Schristos.align	4
2735e7039be7Schristos.Lxts_enc6x_two:
2736e7039be7Schristos	vxor	7,4,17
2737e7039be7Schristos	vxor	12,5,18
2738e7039be7Schristos	vxor	13,13,13
2739e7039be7Schristos	vxor	14,14,14
2740e7039be7Schristos	vxor	15,15,15
2741e7039be7Schristos
2742e7039be7Schristos	bl	_aesp8_xts_enc5x
2743e7039be7Schristos
2744e7039be7Schristos
2745e7039be7Schristos	vor	17,19,19
2746e7039be7Schristos	vxor	11,12,19
2747e7039be7Schristos
2748e7039be7Schristos.long	0x7CE02799
2749e7039be7Schristos.long	0x7D832799
2750e7039be7Schristos	addi	4,4,0x20
2751e7039be7Schristos	bne	.Lxts_enc6x_steal
2752e7039be7Schristos	b	.Lxts_enc6x_done
2753e7039be7Schristos
2754e7039be7Schristos.align	4
2755e7039be7Schristos.Lxts_enc6x_one:
2756e7039be7Schristos	vxor	7,5,17
2757e7039be7Schristos	nop
2758e7039be7Schristos.Loop_xts_enc1x:
2759e7039be7Schristos.long	0x10E7C508
2760e7039be7Schristos	lvx	24,26,7
2761e7039be7Schristos	addi	7,7,0x20
2762e7039be7Schristos
2763e7039be7Schristos.long	0x10E7CD08
2764e7039be7Schristos	lvx	25,3,7
2765e7039be7Schristos	bc	16,0,.Loop_xts_enc1x
2766e7039be7Schristos
2767e7039be7Schristos	add	10,10,31
2768e7039be7Schristos	cmpwi	31,0
2769e7039be7Schristos.long	0x10E7C508
2770e7039be7Schristos
2771e7039be7Schristos	subi	10,10,16
2772e7039be7Schristos.long	0x10E7CD08
2773e7039be7Schristos
2774e7039be7Schristos	lvsr	5,0,31
2775e7039be7Schristos.long	0x10E7D508
2776e7039be7Schristos
2777e7039be7Schristos.long	0x7C005699
2778e7039be7Schristos.long	0x10E7DD08
2779e7039be7Schristos
2780e7039be7Schristos	addi	7,1,32+15
2781e7039be7Schristos.long	0x10E7E508
2782e7039be7Schristos	lvx	24,0,7
2783e7039be7Schristos
2784e7039be7Schristos.long	0x10E7ED08
2785e7039be7Schristos	lvx	25,3,7
2786e7039be7Schristos	vxor	17,17,31
2787e7039be7Schristos
2788e7039be7Schristos
2789e7039be7Schristos.long	0x10E7F508
2790e7039be7Schristos
2791e7039be7Schristos	vperm	0,0,0,5
2792e7039be7Schristos.long	0x10E78D09
2793e7039be7Schristos
2794e7039be7Schristos	vor	17,18,18
2795e7039be7Schristos	vxor	11,7,18
2796e7039be7Schristos
2797e7039be7Schristos.long	0x7CE02799
2798e7039be7Schristos	addi	4,4,0x10
2799e7039be7Schristos	bne	.Lxts_enc6x_steal
2800e7039be7Schristos	b	.Lxts_enc6x_done
2801e7039be7Schristos
2802e7039be7Schristos.align	4
2803e7039be7Schristos.Lxts_enc6x_zero:
2804e7039be7Schristos	cmpwi	31,0
2805e7039be7Schristos	beq	.Lxts_enc6x_done
2806e7039be7Schristos
2807e7039be7Schristos	add	10,10,31
2808e7039be7Schristos	subi	10,10,16
2809e7039be7Schristos.long	0x7C005699
2810e7039be7Schristos	lvsr	5,0,31
2811e7039be7Schristos
2812e7039be7Schristos	vperm	0,0,0,5
2813e7039be7Schristos	vxor	11,11,17
2814e7039be7Schristos.Lxts_enc6x_steal:
2815e7039be7Schristos	vxor	0,0,17
2816e7039be7Schristos	vxor	7,7,7
2817e7039be7Schristos	vspltisb	12,-1
2818e7039be7Schristos	vperm	7,7,12,5
2819e7039be7Schristos	vsel	7,0,11,7
2820e7039be7Schristos
2821e7039be7Schristos	subi	30,4,17
2822e7039be7Schristos	subi	4,4,16
2823e7039be7Schristos	mtctr	31
2824e7039be7Schristos.Loop_xts_enc6x_steal:
2825e7039be7Schristos	lbzu	0,1(30)
2826e7039be7Schristos	stb	0,16(30)
2827e7039be7Schristos	bc	16,0,.Loop_xts_enc6x_steal
2828e7039be7Schristos
2829e7039be7Schristos	li	31,0
2830e7039be7Schristos	mtctr	9
2831e7039be7Schristos	b	.Loop_xts_enc1x
2832e7039be7Schristos
2833e7039be7Schristos.align	4
2834e7039be7Schristos.Lxts_enc6x_done:
2835e7039be7Schristos	cmplwi	8,0
2836e7039be7Schristos	beq	.Lxts_enc6x_ret
2837e7039be7Schristos
2838e7039be7Schristos	vxor	8,17,23
2839e7039be7Schristos
2840e7039be7Schristos.long	0x7D004799
2841e7039be7Schristos
2842e7039be7Schristos.Lxts_enc6x_ret:
2843e7039be7Schristos	mtlr	11
2844e7039be7Schristos	li	10,47
2845e7039be7Schristos	li	11,63
2846e7039be7Schristos	stvx	9,10,1
2847e7039be7Schristos	addi	10,10,32
2848e7039be7Schristos	stvx	9,11,1
2849e7039be7Schristos	addi	11,11,32
2850e7039be7Schristos	stvx	9,10,1
2851e7039be7Schristos	addi	10,10,32
2852e7039be7Schristos	stvx	9,11,1
2853e7039be7Schristos	addi	11,11,32
2854e7039be7Schristos	stvx	9,10,1
2855e7039be7Schristos	addi	10,10,32
2856e7039be7Schristos	stvx	9,11,1
2857e7039be7Schristos	addi	11,11,32
2858e7039be7Schristos	stvx	9,10,1
2859e7039be7Schristos	addi	10,10,32
2860e7039be7Schristos	stvx	9,11,1
2861e7039be7Schristos	addi	11,11,32
2862e7039be7Schristos
2863e7039be7Schristos	mtspr	256,12
2864e7039be7Schristos	lvx	20,10,1
2865e7039be7Schristos	addi	10,10,32
2866e7039be7Schristos	lvx	21,11,1
2867e7039be7Schristos	addi	11,11,32
2868e7039be7Schristos	lvx	22,10,1
2869e7039be7Schristos	addi	10,10,32
2870e7039be7Schristos	lvx	23,11,1
2871e7039be7Schristos	addi	11,11,32
2872e7039be7Schristos	lvx	24,10,1
2873e7039be7Schristos	addi	10,10,32
2874e7039be7Schristos	lvx	25,11,1
2875e7039be7Schristos	addi	11,11,32
2876e7039be7Schristos	lvx	26,10,1
2877e7039be7Schristos	addi	10,10,32
2878e7039be7Schristos	lvx	27,11,1
2879e7039be7Schristos	addi	11,11,32
2880e7039be7Schristos	lvx	28,10,1
2881e7039be7Schristos	addi	10,10,32
2882e7039be7Schristos	lvx	29,11,1
2883e7039be7Schristos	addi	11,11,32
2884e7039be7Schristos	lvx	30,10,1
2885e7039be7Schristos	lvx	31,11,1
2886e7039be7Schristos	lwz	26,368(1)
2887e7039be7Schristos	lwz	27,372(1)
2888e7039be7Schristos	lwz	28,376(1)
2889e7039be7Schristos	lwz	29,380(1)
2890e7039be7Schristos	lwz	30,384(1)
2891e7039be7Schristos	lwz	31,388(1)
2892e7039be7Schristos	addi	1,1,392
2893e7039be7Schristos	blr
2894e7039be7Schristos.long	0
2895e7039be7Schristos.byte	0,12,0x04,1,0x80,6,6,0
2896e7039be7Schristos.long	0
2897e7039be7Schristos
2898e7039be7Schristos.align	5
2899e7039be7Schristos_aesp8_xts_enc5x:
2900e7039be7Schristos.long	0x10E7C508
2901e7039be7Schristos.long	0x118CC508
2902e7039be7Schristos.long	0x11ADC508
2903e7039be7Schristos.long	0x11CEC508
2904e7039be7Schristos.long	0x11EFC508
2905e7039be7Schristos	lvx	24,26,7
2906e7039be7Schristos	addi	7,7,0x20
2907e7039be7Schristos
2908e7039be7Schristos.long	0x10E7CD08
2909e7039be7Schristos.long	0x118CCD08
2910e7039be7Schristos.long	0x11ADCD08
2911e7039be7Schristos.long	0x11CECD08
2912e7039be7Schristos.long	0x11EFCD08
2913e7039be7Schristos	lvx	25,3,7
2914e7039be7Schristos	bc	16,0,_aesp8_xts_enc5x
2915e7039be7Schristos
2916e7039be7Schristos	add	10,10,31
2917e7039be7Schristos	cmpwi	31,0
2918e7039be7Schristos.long	0x10E7C508
2919e7039be7Schristos.long	0x118CC508
2920e7039be7Schristos.long	0x11ADC508
2921e7039be7Schristos.long	0x11CEC508
2922e7039be7Schristos.long	0x11EFC508
2923e7039be7Schristos
2924e7039be7Schristos	subi	10,10,16
2925e7039be7Schristos.long	0x10E7CD08
2926e7039be7Schristos.long	0x118CCD08
2927e7039be7Schristos.long	0x11ADCD08
2928e7039be7Schristos.long	0x11CECD08
2929e7039be7Schristos.long	0x11EFCD08
2930e7039be7Schristos	vxor	17,17,31
2931e7039be7Schristos
2932e7039be7Schristos.long	0x10E7D508
2933e7039be7Schristos	lvsr	5,0,31
2934e7039be7Schristos.long	0x118CD508
2935e7039be7Schristos.long	0x11ADD508
2936e7039be7Schristos.long	0x11CED508
2937e7039be7Schristos.long	0x11EFD508
2938e7039be7Schristos	vxor	1,18,31
2939e7039be7Schristos
2940e7039be7Schristos.long	0x10E7DD08
2941e7039be7Schristos.long	0x7C005699
2942e7039be7Schristos.long	0x118CDD08
2943e7039be7Schristos.long	0x11ADDD08
2944e7039be7Schristos.long	0x11CEDD08
2945e7039be7Schristos.long	0x11EFDD08
2946e7039be7Schristos	vxor	2,19,31
2947e7039be7Schristos
2948e7039be7Schristos	addi	7,1,32+15
2949e7039be7Schristos.long	0x10E7E508
2950e7039be7Schristos.long	0x118CE508
2951e7039be7Schristos.long	0x11ADE508
2952e7039be7Schristos.long	0x11CEE508
2953e7039be7Schristos.long	0x11EFE508
2954e7039be7Schristos	lvx	24,0,7
2955e7039be7Schristos	vxor	3,20,31
2956e7039be7Schristos
2957e7039be7Schristos.long	0x10E7ED08
2958e7039be7Schristos
2959e7039be7Schristos.long	0x118CED08
2960e7039be7Schristos.long	0x11ADED08
2961e7039be7Schristos.long	0x11CEED08
2962e7039be7Schristos.long	0x11EFED08
2963e7039be7Schristos	lvx	25,3,7
2964e7039be7Schristos	vxor	4,21,31
2965e7039be7Schristos
2966e7039be7Schristos.long	0x10E7F508
2967e7039be7Schristos	vperm	0,0,0,5
2968e7039be7Schristos.long	0x118CF508
2969e7039be7Schristos.long	0x11ADF508
2970e7039be7Schristos.long	0x11CEF508
2971e7039be7Schristos.long	0x11EFF508
2972e7039be7Schristos
2973e7039be7Schristos.long	0x10E78D09
2974e7039be7Schristos.long	0x118C0D09
2975e7039be7Schristos.long	0x11AD1509
2976e7039be7Schristos.long	0x11CE1D09
2977e7039be7Schristos.long	0x11EF2509
2978e7039be7Schristos	blr
2979e7039be7Schristos.long	0
2980e7039be7Schristos.byte	0,12,0x14,0,0,0,0,0
2981e7039be7Schristos
2982e7039be7Schristos.align	5
2983e7039be7Schristos_aesp8_xts_decrypt6x:
2984e7039be7Schristos	stwu	1,-392(1)
2985e7039be7Schristos	mflr	11
2986e7039be7Schristos	li	7,175
2987e7039be7Schristos	li	3,191
2988e7039be7Schristos	stw	11,396(1)
2989e7039be7Schristos	stvx	20,7,1
2990e7039be7Schristos	addi	7,7,32
2991e7039be7Schristos	stvx	21,3,1
2992e7039be7Schristos	addi	3,3,32
2993e7039be7Schristos	stvx	22,7,1
2994e7039be7Schristos	addi	7,7,32
2995e7039be7Schristos	stvx	23,3,1
2996e7039be7Schristos	addi	3,3,32
2997e7039be7Schristos	stvx	24,7,1
2998e7039be7Schristos	addi	7,7,32
2999e7039be7Schristos	stvx	25,3,1
3000e7039be7Schristos	addi	3,3,32
3001e7039be7Schristos	stvx	26,7,1
3002e7039be7Schristos	addi	7,7,32
3003e7039be7Schristos	stvx	27,3,1
3004e7039be7Schristos	addi	3,3,32
3005e7039be7Schristos	stvx	28,7,1
3006e7039be7Schristos	addi	7,7,32
3007e7039be7Schristos	stvx	29,3,1
3008e7039be7Schristos	addi	3,3,32
3009e7039be7Schristos	stvx	30,7,1
3010e7039be7Schristos	stvx	31,3,1
3011e7039be7Schristos	li	0,-1
3012e7039be7Schristos	stw	12,364(1)
3013e7039be7Schristos	li	3,0x10
3014e7039be7Schristos	stw	26,368(1)
3015e7039be7Schristos	li	26,0x20
3016e7039be7Schristos	stw	27,372(1)
3017e7039be7Schristos	li	27,0x30
3018e7039be7Schristos	stw	28,376(1)
3019e7039be7Schristos	li	28,0x40
3020e7039be7Schristos	stw	29,380(1)
3021e7039be7Schristos	li	29,0x50
3022e7039be7Schristos	stw	30,384(1)
3023e7039be7Schristos	li	30,0x60
3024e7039be7Schristos	stw	31,388(1)
3025e7039be7Schristos	li	31,0x70
3026e7039be7Schristos	mtspr	256,0
3027e7039be7Schristos
3028*7d9ffdb3Schristos
3029*7d9ffdb3Schristos	xxlor	2, 32+10, 32+10
3030*7d9ffdb3Schristos	vsldoi	10,11,10,1
3031*7d9ffdb3Schristos	xxlor	1, 32+10, 32+10
3032*7d9ffdb3Schristos
3033*7d9ffdb3Schristos
3034*7d9ffdb3Schristos	mr	31, 6
3035*7d9ffdb3Schristos	bl	.Lconsts
3036*7d9ffdb3Schristos	lxvw4x	0, 28, 6
3037*7d9ffdb3Schristos	mr	6, 31
3038*7d9ffdb3Schristos	li	31,0x70
3039*7d9ffdb3Schristos
3040e7039be7Schristos	subi	9,9,3
3041e7039be7Schristos
3042e7039be7Schristos	lvx	23,0,6
3043e7039be7Schristos	lvx	30,3,6
3044e7039be7Schristos	addi	6,6,0x20
3045e7039be7Schristos	lvx	31,0,6
3046e7039be7Schristos	vperm	23,23,30,7
3047e7039be7Schristos	addi	7,1,32+15
3048e7039be7Schristos	mtctr	9
3049e7039be7Schristos
3050e7039be7Schristos.Load_xts_dec_key:
3051e7039be7Schristos	vperm	24,30,31,7
3052e7039be7Schristos	lvx	30,3,6
3053e7039be7Schristos	addi	6,6,0x20
3054e7039be7Schristos	stvx	24,0,7
3055e7039be7Schristos	vperm	25,31,30,7
3056e7039be7Schristos	lvx	31,0,6
3057e7039be7Schristos	stvx	25,3,7
3058e7039be7Schristos	addi	7,7,0x20
3059e7039be7Schristos	bc	16,0,.Load_xts_dec_key
3060e7039be7Schristos
3061e7039be7Schristos	lvx	26,3,6
3062e7039be7Schristos	vperm	24,30,31,7
3063e7039be7Schristos	lvx	27,26,6
3064e7039be7Schristos	stvx	24,0,7
3065e7039be7Schristos	vperm	25,31,26,7
3066e7039be7Schristos	lvx	28,27,6
3067e7039be7Schristos	stvx	25,3,7
3068e7039be7Schristos	addi	7,1,32+15
3069e7039be7Schristos	vperm	26,26,27,7
3070e7039be7Schristos	lvx	29,28,6
3071e7039be7Schristos	vperm	27,27,28,7
3072e7039be7Schristos	lvx	30,29,6
3073e7039be7Schristos	vperm	28,28,29,7
3074e7039be7Schristos	lvx	31,30,6
3075e7039be7Schristos	vperm	29,29,30,7
3076e7039be7Schristos	lvx	22,31,6
3077e7039be7Schristos	vperm	30,30,31,7
3078e7039be7Schristos	lvx	24,0,7
3079e7039be7Schristos	vperm	31,31,22,7
3080e7039be7Schristos	lvx	25,3,7
3081e7039be7Schristos
3082e7039be7Schristos	vperm	0,2,4,5
3083e7039be7Schristos	subi	10,10,31
3084e7039be7Schristos	vxor	17,8,23
3085e7039be7Schristos	vsrab	11,8,9
3086e7039be7Schristos	vaddubm	8,8,8
3087e7039be7Schristos	vand	11,11,10
3088e7039be7Schristos	vxor	7,0,17
3089*7d9ffdb3Schristos	xxlor	32+1, 0, 0
3090*7d9ffdb3Schristos	vpermxor	8, 8, 11, 1
3091e7039be7Schristos
3092e7039be7Schristos.long	0x7C235699
3093e7039be7Schristos	vxor	18,8,23
3094e7039be7Schristos	vsrab	11,8,9
3095e7039be7Schristos	vaddubm	8,8,8
3096e7039be7Schristos
3097e7039be7Schristos	vand	11,11,10
3098e7039be7Schristos	vxor	12,1,18
3099*7d9ffdb3Schristos	xxlor	32+2, 0, 0
3100*7d9ffdb3Schristos	vpermxor	8, 8, 11, 2
3101e7039be7Schristos
3102e7039be7Schristos.long	0x7C5A5699
3103e7039be7Schristos	andi.	31,5,15
3104e7039be7Schristos	vxor	19,8,23
3105e7039be7Schristos	vsrab	11,8,9
3106e7039be7Schristos	vaddubm	8,8,8
3107e7039be7Schristos
3108e7039be7Schristos	vand	11,11,10
3109e7039be7Schristos	vxor	13,2,19
3110*7d9ffdb3Schristos	xxlor	32+3, 0, 0
3111*7d9ffdb3Schristos	vpermxor	8, 8, 11, 3
3112e7039be7Schristos
3113e7039be7Schristos.long	0x7C7B5699
3114e7039be7Schristos	sub	5,5,31
3115e7039be7Schristos	vxor	20,8,23
3116e7039be7Schristos	vsrab	11,8,9
3117e7039be7Schristos	vaddubm	8,8,8
3118e7039be7Schristos
3119e7039be7Schristos	vand	11,11,10
3120e7039be7Schristos	vxor	14,3,20
3121*7d9ffdb3Schristos	xxlor	32+4, 0, 0
3122*7d9ffdb3Schristos	vpermxor	8, 8, 11, 4
3123e7039be7Schristos
3124e7039be7Schristos.long	0x7C9C5699
3125e7039be7Schristos	subi	5,5,0x60
3126e7039be7Schristos	vxor	21,8,23
3127e7039be7Schristos	vsrab	11,8,9
3128e7039be7Schristos	vaddubm	8,8,8
3129e7039be7Schristos
3130e7039be7Schristos	vand	11,11,10
3131e7039be7Schristos	vxor	15,4,21
3132*7d9ffdb3Schristos	xxlor	32+5, 0, 0
3133*7d9ffdb3Schristos	vpermxor	8, 8, 11, 5
3134e7039be7Schristos
3135e7039be7Schristos.long	0x7CBD5699
3136e7039be7Schristos	addi	10,10,0x60
3137e7039be7Schristos	vxor	22,8,23
3138e7039be7Schristos	vsrab	11,8,9
3139e7039be7Schristos	vaddubm	8,8,8
3140e7039be7Schristos
3141e7039be7Schristos	vand	11,11,10
3142e7039be7Schristos	vxor	16,5,22
3143*7d9ffdb3Schristos	xxlor	32+0, 0, 0
3144*7d9ffdb3Schristos	vpermxor	8, 8, 11, 0
3145e7039be7Schristos
3146e7039be7Schristos	vxor	31,31,23
3147e7039be7Schristos	mtctr	9
3148e7039be7Schristos	b	.Loop_xts_dec6x
3149e7039be7Schristos
3150e7039be7Schristos.align	5
3151e7039be7Schristos.Loop_xts_dec6x:
3152e7039be7Schristos.long	0x10E7C548
3153e7039be7Schristos.long	0x118CC548
3154e7039be7Schristos.long	0x11ADC548
3155e7039be7Schristos.long	0x11CEC548
3156e7039be7Schristos.long	0x11EFC548
3157e7039be7Schristos.long	0x1210C548
3158e7039be7Schristos	lvx	24,26,7
3159e7039be7Schristos	addi	7,7,0x20
3160e7039be7Schristos
3161e7039be7Schristos.long	0x10E7CD48
3162e7039be7Schristos.long	0x118CCD48
3163e7039be7Schristos.long	0x11ADCD48
3164e7039be7Schristos.long	0x11CECD48
3165e7039be7Schristos.long	0x11EFCD48
3166e7039be7Schristos.long	0x1210CD48
3167e7039be7Schristos	lvx	25,3,7
3168e7039be7Schristos	bc	16,0,.Loop_xts_dec6x
3169e7039be7Schristos
3170*7d9ffdb3Schristos	xxlor	32+10, 1, 1
3171*7d9ffdb3Schristos
3172e7039be7Schristos	subic	5,5,96
3173e7039be7Schristos	vxor	0,17,31
3174e7039be7Schristos.long	0x10E7C548
3175e7039be7Schristos.long	0x118CC548
3176e7039be7Schristos	vsrab	11,8,9
3177e7039be7Schristos	vxor	17,8,23
3178e7039be7Schristos	vaddubm	8,8,8
3179e7039be7Schristos.long	0x11ADC548
3180e7039be7Schristos.long	0x11CEC548
3181e7039be7Schristos.long	0x11EFC548
3182e7039be7Schristos.long	0x1210C548
3183e7039be7Schristos
3184e7039be7Schristos	subfe.	0,0,0
3185e7039be7Schristos	vand	11,11,10
3186e7039be7Schristos.long	0x10E7CD48
3187e7039be7Schristos.long	0x118CCD48
3188*7d9ffdb3Schristos	xxlor	32+1, 0, 0
3189*7d9ffdb3Schristos	vpermxor	8, 8, 11, 1
3190e7039be7Schristos.long	0x11ADCD48
3191e7039be7Schristos.long	0x11CECD48
3192e7039be7Schristos	vxor	1,18,31
3193e7039be7Schristos	vsrab	11,8,9
3194e7039be7Schristos	vxor	18,8,23
3195e7039be7Schristos.long	0x11EFCD48
3196e7039be7Schristos.long	0x1210CD48
3197e7039be7Schristos
3198e7039be7Schristos	and	0,0,5
3199e7039be7Schristos	vaddubm	8,8,8
3200e7039be7Schristos.long	0x10E7D548
3201e7039be7Schristos.long	0x118CD548
3202e7039be7Schristos	vand	11,11,10
3203e7039be7Schristos.long	0x11ADD548
3204e7039be7Schristos.long	0x11CED548
3205*7d9ffdb3Schristos	xxlor	32+2, 0, 0
3206*7d9ffdb3Schristos	vpermxor	8, 8, 11, 2
3207e7039be7Schristos.long	0x11EFD548
3208e7039be7Schristos.long	0x1210D548
3209e7039be7Schristos
3210e7039be7Schristos	add	10,10,0
3211e7039be7Schristos
3212e7039be7Schristos
3213e7039be7Schristos
3214e7039be7Schristos	vxor	2,19,31
3215e7039be7Schristos	vsrab	11,8,9
3216e7039be7Schristos	vxor	19,8,23
3217e7039be7Schristos	vaddubm	8,8,8
3218e7039be7Schristos.long	0x10E7DD48
3219e7039be7Schristos.long	0x118CDD48
3220e7039be7Schristos.long	0x11ADDD48
3221e7039be7Schristos.long	0x11CEDD48
3222e7039be7Schristos	vand	11,11,10
3223e7039be7Schristos.long	0x11EFDD48
3224e7039be7Schristos.long	0x1210DD48
3225e7039be7Schristos
3226e7039be7Schristos	addi	7,1,32+15
3227*7d9ffdb3Schristos	xxlor	32+3, 0, 0
3228*7d9ffdb3Schristos	vpermxor	8, 8, 11, 3
3229e7039be7Schristos.long	0x10E7E548
3230e7039be7Schristos.long	0x118CE548
3231e7039be7Schristos	vxor	3,20,31
3232e7039be7Schristos	vsrab	11,8,9
3233e7039be7Schristos	vxor	20,8,23
3234e7039be7Schristos.long	0x11ADE548
3235e7039be7Schristos.long	0x11CEE548
3236e7039be7Schristos	vaddubm	8,8,8
3237e7039be7Schristos.long	0x11EFE548
3238e7039be7Schristos.long	0x1210E548
3239e7039be7Schristos	lvx	24,0,7
3240e7039be7Schristos	vand	11,11,10
3241e7039be7Schristos
3242e7039be7Schristos.long	0x10E7ED48
3243e7039be7Schristos.long	0x118CED48
3244*7d9ffdb3Schristos	xxlor	32+4, 0, 0
3245*7d9ffdb3Schristos	vpermxor	8, 8, 11, 4
3246e7039be7Schristos.long	0x11ADED48
3247e7039be7Schristos.long	0x11CEED48
3248e7039be7Schristos	vxor	4,21,31
3249e7039be7Schristos	vsrab	11,8,9
3250e7039be7Schristos	vxor	21,8,23
3251e7039be7Schristos.long	0x11EFED48
3252e7039be7Schristos.long	0x1210ED48
3253e7039be7Schristos	lvx	25,3,7
3254e7039be7Schristos	vaddubm	8,8,8
3255e7039be7Schristos
3256e7039be7Schristos.long	0x10E7F548
3257e7039be7Schristos.long	0x118CF548
3258e7039be7Schristos	vand	11,11,10
3259e7039be7Schristos.long	0x11ADF548
3260e7039be7Schristos.long	0x11CEF548
3261*7d9ffdb3Schristos	xxlor	32+5, 0, 0
3262*7d9ffdb3Schristos	vpermxor	8, 8, 11, 5
3263e7039be7Schristos.long	0x11EFF548
3264e7039be7Schristos.long	0x1210F548
3265e7039be7Schristos	vxor	5,22,31
3266e7039be7Schristos	vsrab	11,8,9
3267e7039be7Schristos	vxor	22,8,23
3268e7039be7Schristos
3269e7039be7Schristos.long	0x10E70549
3270e7039be7Schristos.long	0x7C005699
3271e7039be7Schristos	vaddubm	8,8,8
3272e7039be7Schristos.long	0x118C0D49
3273e7039be7Schristos.long	0x7C235699
3274e7039be7Schristos.long	0x11AD1549
3275e7039be7Schristos
3276e7039be7Schristos.long	0x7C5A5699
3277e7039be7Schristos	vand	11,11,10
3278e7039be7Schristos.long	0x11CE1D49
3279e7039be7Schristos
3280e7039be7Schristos.long	0x7C7B5699
3281e7039be7Schristos.long	0x11EF2549
3282e7039be7Schristos
3283e7039be7Schristos.long	0x7C9C5699
3284*7d9ffdb3Schristos	xxlor	10, 32+0, 32+0
3285*7d9ffdb3Schristos	xxlor	32+0, 0, 0
3286*7d9ffdb3Schristos	vpermxor	8, 8, 11, 0
3287*7d9ffdb3Schristos	xxlor	32+0, 10, 10
3288e7039be7Schristos.long	0x12102D49
3289e7039be7Schristos
3290e7039be7Schristos.long	0x7CBD5699
3291e7039be7Schristos	addi	10,10,0x60
3292e7039be7Schristos
3293e7039be7Schristos
3294e7039be7Schristos
3295e7039be7Schristos
3296e7039be7Schristos
3297e7039be7Schristos.long	0x7CE02799
3298e7039be7Schristos	vxor	7,0,17
3299e7039be7Schristos
3300e7039be7Schristos.long	0x7D832799
3301e7039be7Schristos	vxor	12,1,18
3302e7039be7Schristos
3303e7039be7Schristos.long	0x7DBA2799
3304e7039be7Schristos	vxor	13,2,19
3305e7039be7Schristos
3306e7039be7Schristos.long	0x7DDB2799
3307e7039be7Schristos	vxor	14,3,20
3308e7039be7Schristos
3309e7039be7Schristos.long	0x7DFC2799
3310e7039be7Schristos	vxor	15,4,21
3311e7039be7Schristos.long	0x7E1D2799
3312e7039be7Schristos	vxor	16,5,22
3313e7039be7Schristos	addi	4,4,0x60
3314e7039be7Schristos
3315e7039be7Schristos	mtctr	9
3316e7039be7Schristos	beq	.Loop_xts_dec6x
3317e7039be7Schristos
3318*7d9ffdb3Schristos	xxlor	32+10, 2, 2
3319*7d9ffdb3Schristos
3320e7039be7Schristos	addic.	5,5,0x60
3321e7039be7Schristos	beq	.Lxts_dec6x_zero
3322e7039be7Schristos	cmpwi	5,0x20
3323e7039be7Schristos	blt	.Lxts_dec6x_one
3324e7039be7Schristos	nop
3325e7039be7Schristos	beq	.Lxts_dec6x_two
3326e7039be7Schristos	cmpwi	5,0x40
3327e7039be7Schristos	blt	.Lxts_dec6x_three
3328e7039be7Schristos	nop
3329e7039be7Schristos	beq	.Lxts_dec6x_four
3330e7039be7Schristos
3331e7039be7Schristos.Lxts_dec6x_five:
3332e7039be7Schristos	vxor	7,1,17
3333e7039be7Schristos	vxor	12,2,18
3334e7039be7Schristos	vxor	13,3,19
3335e7039be7Schristos	vxor	14,4,20
3336e7039be7Schristos	vxor	15,5,21
3337e7039be7Schristos
3338e7039be7Schristos	bl	_aesp8_xts_dec5x
3339e7039be7Schristos
3340e7039be7Schristos
3341e7039be7Schristos	vor	17,22,22
3342e7039be7Schristos	vxor	18,8,23
3343e7039be7Schristos
3344e7039be7Schristos.long	0x7CE02799
3345e7039be7Schristos	vxor	7,0,18
3346e7039be7Schristos
3347e7039be7Schristos.long	0x7D832799
3348e7039be7Schristos
3349e7039be7Schristos.long	0x7DBA2799
3350e7039be7Schristos
3351e7039be7Schristos.long	0x7DDB2799
3352e7039be7Schristos.long	0x7DFC2799
3353e7039be7Schristos	addi	4,4,0x50
3354e7039be7Schristos	bne	.Lxts_dec6x_steal
3355e7039be7Schristos	b	.Lxts_dec6x_done
3356e7039be7Schristos
3357e7039be7Schristos.align	4
3358e7039be7Schristos.Lxts_dec6x_four:
3359e7039be7Schristos	vxor	7,2,17
3360e7039be7Schristos	vxor	12,3,18
3361e7039be7Schristos	vxor	13,4,19
3362e7039be7Schristos	vxor	14,5,20
3363e7039be7Schristos	vxor	15,15,15
3364e7039be7Schristos
3365e7039be7Schristos	bl	_aesp8_xts_dec5x
3366e7039be7Schristos
3367e7039be7Schristos
3368e7039be7Schristos	vor	17,21,21
3369e7039be7Schristos	vor	18,22,22
3370e7039be7Schristos
3371e7039be7Schristos.long	0x7CE02799
3372e7039be7Schristos	vxor	7,0,22
3373e7039be7Schristos
3374e7039be7Schristos.long	0x7D832799
3375e7039be7Schristos
3376e7039be7Schristos.long	0x7DBA2799
3377e7039be7Schristos.long	0x7DDB2799
3378e7039be7Schristos	addi	4,4,0x40
3379e7039be7Schristos	bne	.Lxts_dec6x_steal
3380e7039be7Schristos	b	.Lxts_dec6x_done
3381e7039be7Schristos
3382e7039be7Schristos.align	4
3383e7039be7Schristos.Lxts_dec6x_three:
3384e7039be7Schristos	vxor	7,3,17
3385e7039be7Schristos	vxor	12,4,18
3386e7039be7Schristos	vxor	13,5,19
3387e7039be7Schristos	vxor	14,14,14
3388e7039be7Schristos	vxor	15,15,15
3389e7039be7Schristos
3390e7039be7Schristos	bl	_aesp8_xts_dec5x
3391e7039be7Schristos
3392e7039be7Schristos
3393e7039be7Schristos	vor	17,20,20
3394e7039be7Schristos	vor	18,21,21
3395e7039be7Schristos
3396e7039be7Schristos.long	0x7CE02799
3397e7039be7Schristos	vxor	7,0,21
3398e7039be7Schristos
3399e7039be7Schristos.long	0x7D832799
3400e7039be7Schristos.long	0x7DBA2799
3401e7039be7Schristos	addi	4,4,0x30
3402e7039be7Schristos	bne	.Lxts_dec6x_steal
3403e7039be7Schristos	b	.Lxts_dec6x_done
3404e7039be7Schristos
3405e7039be7Schristos.align	4
3406e7039be7Schristos.Lxts_dec6x_two:
3407e7039be7Schristos	vxor	7,4,17
3408e7039be7Schristos	vxor	12,5,18
3409e7039be7Schristos	vxor	13,13,13
3410e7039be7Schristos	vxor	14,14,14
3411e7039be7Schristos	vxor	15,15,15
3412e7039be7Schristos
3413e7039be7Schristos	bl	_aesp8_xts_dec5x
3414e7039be7Schristos
3415e7039be7Schristos
3416e7039be7Schristos	vor	17,19,19
3417e7039be7Schristos	vor	18,20,20
3418e7039be7Schristos
3419e7039be7Schristos.long	0x7CE02799
3420e7039be7Schristos	vxor	7,0,20
3421e7039be7Schristos.long	0x7D832799
3422e7039be7Schristos	addi	4,4,0x20
3423e7039be7Schristos	bne	.Lxts_dec6x_steal
3424e7039be7Schristos	b	.Lxts_dec6x_done
3425e7039be7Schristos
3426e7039be7Schristos.align	4
3427e7039be7Schristos.Lxts_dec6x_one:
3428e7039be7Schristos	vxor	7,5,17
3429e7039be7Schristos	nop
3430e7039be7Schristos.Loop_xts_dec1x:
3431e7039be7Schristos.long	0x10E7C548
3432e7039be7Schristos	lvx	24,26,7
3433e7039be7Schristos	addi	7,7,0x20
3434e7039be7Schristos
3435e7039be7Schristos.long	0x10E7CD48
3436e7039be7Schristos	lvx	25,3,7
3437e7039be7Schristos	bc	16,0,.Loop_xts_dec1x
3438e7039be7Schristos
3439e7039be7Schristos	subi	0,31,1
3440e7039be7Schristos.long	0x10E7C548
3441e7039be7Schristos
3442e7039be7Schristos	andi.	0,0,16
3443e7039be7Schristos	cmpwi	31,0
3444e7039be7Schristos.long	0x10E7CD48
3445e7039be7Schristos
3446e7039be7Schristos	sub	10,10,0
3447e7039be7Schristos.long	0x10E7D548
3448e7039be7Schristos
3449e7039be7Schristos.long	0x7C005699
3450e7039be7Schristos.long	0x10E7DD48
3451e7039be7Schristos
3452e7039be7Schristos	addi	7,1,32+15
3453e7039be7Schristos.long	0x10E7E548
3454e7039be7Schristos	lvx	24,0,7
3455e7039be7Schristos
3456e7039be7Schristos.long	0x10E7ED48
3457e7039be7Schristos	lvx	25,3,7
3458e7039be7Schristos	vxor	17,17,31
3459e7039be7Schristos
3460e7039be7Schristos
3461e7039be7Schristos.long	0x10E7F548
3462e7039be7Schristos
3463e7039be7Schristos	mtctr	9
3464e7039be7Schristos.long	0x10E78D49
3465e7039be7Schristos
3466e7039be7Schristos	vor	17,18,18
3467e7039be7Schristos	vor	18,19,19
3468e7039be7Schristos
3469e7039be7Schristos.long	0x7CE02799
3470e7039be7Schristos	addi	4,4,0x10
3471e7039be7Schristos	vxor	7,0,19
3472e7039be7Schristos	bne	.Lxts_dec6x_steal
3473e7039be7Schristos	b	.Lxts_dec6x_done
3474e7039be7Schristos
3475e7039be7Schristos.align	4
3476e7039be7Schristos.Lxts_dec6x_zero:
3477e7039be7Schristos	cmpwi	31,0
3478e7039be7Schristos	beq	.Lxts_dec6x_done
3479e7039be7Schristos
3480e7039be7Schristos.long	0x7C005699
3481e7039be7Schristos
3482e7039be7Schristos	vxor	7,0,18
3483e7039be7Schristos.Lxts_dec6x_steal:
3484e7039be7Schristos.long	0x10E7C548
3485e7039be7Schristos	lvx	24,26,7
3486e7039be7Schristos	addi	7,7,0x20
3487e7039be7Schristos
3488e7039be7Schristos.long	0x10E7CD48
3489e7039be7Schristos	lvx	25,3,7
3490e7039be7Schristos	bc	16,0,.Lxts_dec6x_steal
3491e7039be7Schristos
3492e7039be7Schristos	add	10,10,31
3493e7039be7Schristos.long	0x10E7C548
3494e7039be7Schristos
3495e7039be7Schristos	cmpwi	31,0
3496e7039be7Schristos.long	0x10E7CD48
3497e7039be7Schristos
3498e7039be7Schristos.long	0x7C005699
3499e7039be7Schristos.long	0x10E7D548
3500e7039be7Schristos
3501e7039be7Schristos	lvsr	5,0,31
3502e7039be7Schristos.long	0x10E7DD48
3503e7039be7Schristos
3504e7039be7Schristos	addi	7,1,32+15
3505e7039be7Schristos.long	0x10E7E548
3506e7039be7Schristos	lvx	24,0,7
3507e7039be7Schristos
3508e7039be7Schristos.long	0x10E7ED48
3509e7039be7Schristos	lvx	25,3,7
3510e7039be7Schristos	vxor	18,18,31
3511e7039be7Schristos
3512e7039be7Schristos
3513e7039be7Schristos.long	0x10E7F548
3514e7039be7Schristos
3515e7039be7Schristos	vperm	0,0,0,5
3516e7039be7Schristos.long	0x11679549
3517e7039be7Schristos
3518e7039be7Schristos
3519e7039be7Schristos
3520e7039be7Schristos.long	0x7D602799
3521e7039be7Schristos
3522e7039be7Schristos	vxor	7,7,7
3523e7039be7Schristos	vspltisb	12,-1
3524e7039be7Schristos	vperm	7,7,12,5
3525e7039be7Schristos	vsel	7,0,11,7
3526e7039be7Schristos	vxor	7,7,17
3527e7039be7Schristos
3528e7039be7Schristos	subi	30,4,1
3529e7039be7Schristos	mtctr	31
3530e7039be7Schristos.Loop_xts_dec6x_steal:
3531e7039be7Schristos	lbzu	0,1(30)
3532e7039be7Schristos	stb	0,16(30)
3533e7039be7Schristos	bc	16,0,.Loop_xts_dec6x_steal
3534e7039be7Schristos
3535e7039be7Schristos	li	31,0
3536e7039be7Schristos	mtctr	9
3537e7039be7Schristos	b	.Loop_xts_dec1x
3538e7039be7Schristos
3539e7039be7Schristos.align	4
3540e7039be7Schristos.Lxts_dec6x_done:
3541e7039be7Schristos	cmplwi	8,0
3542e7039be7Schristos	beq	.Lxts_dec6x_ret
3543e7039be7Schristos
3544e7039be7Schristos	vxor	8,17,23
3545e7039be7Schristos
3546e7039be7Schristos.long	0x7D004799
3547e7039be7Schristos
3548e7039be7Schristos.Lxts_dec6x_ret:
3549e7039be7Schristos	mtlr	11
3550e7039be7Schristos	li	10,47
3551e7039be7Schristos	li	11,63
3552e7039be7Schristos	stvx	9,10,1
3553e7039be7Schristos	addi	10,10,32
3554e7039be7Schristos	stvx	9,11,1
3555e7039be7Schristos	addi	11,11,32
3556e7039be7Schristos	stvx	9,10,1
3557e7039be7Schristos	addi	10,10,32
3558e7039be7Schristos	stvx	9,11,1
3559e7039be7Schristos	addi	11,11,32
3560e7039be7Schristos	stvx	9,10,1
3561e7039be7Schristos	addi	10,10,32
3562e7039be7Schristos	stvx	9,11,1
3563e7039be7Schristos	addi	11,11,32
3564e7039be7Schristos	stvx	9,10,1
3565e7039be7Schristos	addi	10,10,32
3566e7039be7Schristos	stvx	9,11,1
3567e7039be7Schristos	addi	11,11,32
3568e7039be7Schristos
3569e7039be7Schristos	mtspr	256,12
3570e7039be7Schristos	lvx	20,10,1
3571e7039be7Schristos	addi	10,10,32
3572e7039be7Schristos	lvx	21,11,1
3573e7039be7Schristos	addi	11,11,32
3574e7039be7Schristos	lvx	22,10,1
3575e7039be7Schristos	addi	10,10,32
3576e7039be7Schristos	lvx	23,11,1
3577e7039be7Schristos	addi	11,11,32
3578e7039be7Schristos	lvx	24,10,1
3579e7039be7Schristos	addi	10,10,32
3580e7039be7Schristos	lvx	25,11,1
3581e7039be7Schristos	addi	11,11,32
3582e7039be7Schristos	lvx	26,10,1
3583e7039be7Schristos	addi	10,10,32
3584e7039be7Schristos	lvx	27,11,1
3585e7039be7Schristos	addi	11,11,32
3586e7039be7Schristos	lvx	28,10,1
3587e7039be7Schristos	addi	10,10,32
3588e7039be7Schristos	lvx	29,11,1
3589e7039be7Schristos	addi	11,11,32
3590e7039be7Schristos	lvx	30,10,1
3591e7039be7Schristos	lvx	31,11,1
3592e7039be7Schristos	lwz	26,368(1)
3593e7039be7Schristos	lwz	27,372(1)
3594e7039be7Schristos	lwz	28,376(1)
3595e7039be7Schristos	lwz	29,380(1)
3596e7039be7Schristos	lwz	30,384(1)
3597e7039be7Schristos	lwz	31,388(1)
3598e7039be7Schristos	addi	1,1,392
3599e7039be7Schristos	blr
3600e7039be7Schristos.long	0
3601e7039be7Schristos.byte	0,12,0x04,1,0x80,6,6,0
3602e7039be7Schristos.long	0
3603e7039be7Schristos
3604e7039be7Schristos.align	5
3605e7039be7Schristos_aesp8_xts_dec5x:
3606e7039be7Schristos.long	0x10E7C548
3607e7039be7Schristos.long	0x118CC548
3608e7039be7Schristos.long	0x11ADC548
3609e7039be7Schristos.long	0x11CEC548
3610e7039be7Schristos.long	0x11EFC548
3611e7039be7Schristos	lvx	24,26,7
3612e7039be7Schristos	addi	7,7,0x20
3613e7039be7Schristos
3614e7039be7Schristos.long	0x10E7CD48
3615e7039be7Schristos.long	0x118CCD48
3616e7039be7Schristos.long	0x11ADCD48
3617e7039be7Schristos.long	0x11CECD48
3618e7039be7Schristos.long	0x11EFCD48
3619e7039be7Schristos	lvx	25,3,7
3620e7039be7Schristos	bc	16,0,_aesp8_xts_dec5x
3621e7039be7Schristos
3622e7039be7Schristos	subi	0,31,1
3623e7039be7Schristos.long	0x10E7C548
3624e7039be7Schristos.long	0x118CC548
3625e7039be7Schristos.long	0x11ADC548
3626e7039be7Schristos.long	0x11CEC548
3627e7039be7Schristos.long	0x11EFC548
3628e7039be7Schristos
3629e7039be7Schristos	andi.	0,0,16
3630e7039be7Schristos	cmpwi	31,0
3631e7039be7Schristos.long	0x10E7CD48
3632e7039be7Schristos.long	0x118CCD48
3633e7039be7Schristos.long	0x11ADCD48
3634e7039be7Schristos.long	0x11CECD48
3635e7039be7Schristos.long	0x11EFCD48
3636e7039be7Schristos	vxor	17,17,31
3637e7039be7Schristos
3638e7039be7Schristos	sub	10,10,0
3639e7039be7Schristos.long	0x10E7D548
3640e7039be7Schristos.long	0x118CD548
3641e7039be7Schristos.long	0x11ADD548
3642e7039be7Schristos.long	0x11CED548
3643e7039be7Schristos.long	0x11EFD548
3644e7039be7Schristos	vxor	1,18,31
3645e7039be7Schristos
3646e7039be7Schristos.long	0x10E7DD48
3647e7039be7Schristos.long	0x7C005699
3648e7039be7Schristos.long	0x118CDD48
3649e7039be7Schristos.long	0x11ADDD48
3650e7039be7Schristos.long	0x11CEDD48
3651e7039be7Schristos.long	0x11EFDD48
3652e7039be7Schristos	vxor	2,19,31
3653e7039be7Schristos
3654e7039be7Schristos	addi	7,1,32+15
3655e7039be7Schristos.long	0x10E7E548
3656e7039be7Schristos.long	0x118CE548
3657e7039be7Schristos.long	0x11ADE548
3658e7039be7Schristos.long	0x11CEE548
3659e7039be7Schristos.long	0x11EFE548
3660e7039be7Schristos	lvx	24,0,7
3661e7039be7Schristos	vxor	3,20,31
3662e7039be7Schristos
3663e7039be7Schristos.long	0x10E7ED48
3664e7039be7Schristos
3665e7039be7Schristos.long	0x118CED48
3666e7039be7Schristos.long	0x11ADED48
3667e7039be7Schristos.long	0x11CEED48
3668e7039be7Schristos.long	0x11EFED48
3669e7039be7Schristos	lvx	25,3,7
3670e7039be7Schristos	vxor	4,21,31
3671e7039be7Schristos
3672e7039be7Schristos.long	0x10E7F548
3673e7039be7Schristos.long	0x118CF548
3674e7039be7Schristos.long	0x11ADF548
3675e7039be7Schristos.long	0x11CEF548
3676e7039be7Schristos.long	0x11EFF548
3677e7039be7Schristos
3678e7039be7Schristos.long	0x10E78D49
3679e7039be7Schristos.long	0x118C0D49
3680e7039be7Schristos.long	0x11AD1549
3681e7039be7Schristos.long	0x11CE1D49
3682e7039be7Schristos.long	0x11EF2549
3683e7039be7Schristos	mtctr	9
3684e7039be7Schristos	blr
3685e7039be7Schristos.long	0
3686e7039be7Schristos.byte	0,12,0x14,0,0,0,0,0
3687