aesni-x86.S revision 299966
1# $FreeBSD: stable/10/secure/lib/libcrypto/i386/aesni-x86.S 299966 2016-05-16 19:30:27Z jkim $
2# Do not modify. This file is auto-generated from aesni-x86.pl.
3#ifdef PIC
4.file	"aesni-x86.S"
5.text
6.globl	aesni_encrypt
7.type	aesni_encrypt,@function
8.align	16
9aesni_encrypt:
10.L_aesni_encrypt_begin:
11	movl	4(%esp),%eax
12	movl	12(%esp),%edx
13	movups	(%eax),%xmm2
14	movl	240(%edx),%ecx
15	movl	8(%esp),%eax
16	movups	(%edx),%xmm0
17	movups	16(%edx),%xmm1
18	leal	32(%edx),%edx
19	xorps	%xmm0,%xmm2
20.L000enc1_loop_1:
21.byte	102,15,56,220,209
22	decl	%ecx
23	movups	(%edx),%xmm1
24	leal	16(%edx),%edx
25	jnz	.L000enc1_loop_1
26.byte	102,15,56,221,209
27	movups	%xmm2,(%eax)
28	ret
29.size	aesni_encrypt,.-.L_aesni_encrypt_begin
30.globl	aesni_decrypt
31.type	aesni_decrypt,@function
32.align	16
33aesni_decrypt:
34.L_aesni_decrypt_begin:
35	movl	4(%esp),%eax
36	movl	12(%esp),%edx
37	movups	(%eax),%xmm2
38	movl	240(%edx),%ecx
39	movl	8(%esp),%eax
40	movups	(%edx),%xmm0
41	movups	16(%edx),%xmm1
42	leal	32(%edx),%edx
43	xorps	%xmm0,%xmm2
44.L001dec1_loop_2:
45.byte	102,15,56,222,209
46	decl	%ecx
47	movups	(%edx),%xmm1
48	leal	16(%edx),%edx
49	jnz	.L001dec1_loop_2
50.byte	102,15,56,223,209
51	movups	%xmm2,(%eax)
52	ret
53.size	aesni_decrypt,.-.L_aesni_decrypt_begin
54.type	_aesni_encrypt3,@function
55.align	16
56_aesni_encrypt3:
57	movups	(%edx),%xmm0
58	shrl	$1,%ecx
59	movups	16(%edx),%xmm1
60	leal	32(%edx),%edx
61	xorps	%xmm0,%xmm2
62	pxor	%xmm0,%xmm3
63	pxor	%xmm0,%xmm4
64	movups	(%edx),%xmm0
65.L002enc3_loop:
66.byte	102,15,56,220,209
67.byte	102,15,56,220,217
68	decl	%ecx
69.byte	102,15,56,220,225
70	movups	16(%edx),%xmm1
71.byte	102,15,56,220,208
72.byte	102,15,56,220,216
73	leal	32(%edx),%edx
74.byte	102,15,56,220,224
75	movups	(%edx),%xmm0
76	jnz	.L002enc3_loop
77.byte	102,15,56,220,209
78.byte	102,15,56,220,217
79.byte	102,15,56,220,225
80.byte	102,15,56,221,208
81.byte	102,15,56,221,216
82.byte	102,15,56,221,224
83	ret
84.size	_aesni_encrypt3,.-_aesni_encrypt3
85.type	_aesni_decrypt3,@function
86.align	16
87_aesni_decrypt3:
88	movups	(%edx),%xmm0
89	shrl	$1,%ecx
90	movups	16(%edx),%xmm1
91	leal	32(%edx),%edx
92	xorps	%xmm0,%xmm2
93	pxor	%xmm0,%xmm3
94	pxor	%xmm0,%xmm4
95	movups	(%edx),%xmm0
96.L003dec3_loop:
97.byte	102,15,56,222,209
98.byte	102,15,56,222,217
99	decl	%ecx
100.byte	102,15,56,222,225
101	movups	16(%edx),%xmm1
102.byte	102,15,56,222,208
103.byte	102,15,56,222,216
104	leal	32(%edx),%edx
105.byte	102,15,56,222,224
106	movups	(%edx),%xmm0
107	jnz	.L003dec3_loop
108.byte	102,15,56,222,209
109.byte	102,15,56,222,217
110.byte	102,15,56,222,225
111.byte	102,15,56,223,208
112.byte	102,15,56,223,216
113.byte	102,15,56,223,224
114	ret
115.size	_aesni_decrypt3,.-_aesni_decrypt3
116.type	_aesni_encrypt4,@function
117.align	16
118_aesni_encrypt4:
119	movups	(%edx),%xmm0
120	movups	16(%edx),%xmm1
121	shrl	$1,%ecx
122	leal	32(%edx),%edx
123	xorps	%xmm0,%xmm2
124	pxor	%xmm0,%xmm3
125	pxor	%xmm0,%xmm4
126	pxor	%xmm0,%xmm5
127	movups	(%edx),%xmm0
128.L004enc4_loop:
129.byte	102,15,56,220,209
130.byte	102,15,56,220,217
131	decl	%ecx
132.byte	102,15,56,220,225
133.byte	102,15,56,220,233
134	movups	16(%edx),%xmm1
135.byte	102,15,56,220,208
136.byte	102,15,56,220,216
137	leal	32(%edx),%edx
138.byte	102,15,56,220,224
139.byte	102,15,56,220,232
140	movups	(%edx),%xmm0
141	jnz	.L004enc4_loop
142.byte	102,15,56,220,209
143.byte	102,15,56,220,217
144.byte	102,15,56,220,225
145.byte	102,15,56,220,233
146.byte	102,15,56,221,208
147.byte	102,15,56,221,216
148.byte	102,15,56,221,224
149.byte	102,15,56,221,232
150	ret
151.size	_aesni_encrypt4,.-_aesni_encrypt4
152.type	_aesni_decrypt4,@function
153.align	16
154_aesni_decrypt4:
155	movups	(%edx),%xmm0
156	movups	16(%edx),%xmm1
157	shrl	$1,%ecx
158	leal	32(%edx),%edx
159	xorps	%xmm0,%xmm2
160	pxor	%xmm0,%xmm3
161	pxor	%xmm0,%xmm4
162	pxor	%xmm0,%xmm5
163	movups	(%edx),%xmm0
164.L005dec4_loop:
165.byte	102,15,56,222,209
166.byte	102,15,56,222,217
167	decl	%ecx
168.byte	102,15,56,222,225
169.byte	102,15,56,222,233
170	movups	16(%edx),%xmm1
171.byte	102,15,56,222,208
172.byte	102,15,56,222,216
173	leal	32(%edx),%edx
174.byte	102,15,56,222,224
175.byte	102,15,56,222,232
176	movups	(%edx),%xmm0
177	jnz	.L005dec4_loop
178.byte	102,15,56,222,209
179.byte	102,15,56,222,217
180.byte	102,15,56,222,225
181.byte	102,15,56,222,233
182.byte	102,15,56,223,208
183.byte	102,15,56,223,216
184.byte	102,15,56,223,224
185.byte	102,15,56,223,232
186	ret
187.size	_aesni_decrypt4,.-_aesni_decrypt4
188.type	_aesni_encrypt6,@function
189.align	16
190_aesni_encrypt6:
191	movups	(%edx),%xmm0
192	shrl	$1,%ecx
193	movups	16(%edx),%xmm1
194	leal	32(%edx),%edx
195	xorps	%xmm0,%xmm2
196	pxor	%xmm0,%xmm3
197.byte	102,15,56,220,209
198	pxor	%xmm0,%xmm4
199.byte	102,15,56,220,217
200	pxor	%xmm0,%xmm5
201	decl	%ecx
202.byte	102,15,56,220,225
203	pxor	%xmm0,%xmm6
204.byte	102,15,56,220,233
205	pxor	%xmm0,%xmm7
206.byte	102,15,56,220,241
207	movups	(%edx),%xmm0
208.byte	102,15,56,220,249
209	jmp	.L_aesni_encrypt6_enter
210.align	16
211.L006enc6_loop:
212.byte	102,15,56,220,209
213.byte	102,15,56,220,217
214	decl	%ecx
215.byte	102,15,56,220,225
216.byte	102,15,56,220,233
217.byte	102,15,56,220,241
218.byte	102,15,56,220,249
219.align	16
220.L_aesni_encrypt6_enter:
221	movups	16(%edx),%xmm1
222.byte	102,15,56,220,208
223.byte	102,15,56,220,216
224	leal	32(%edx),%edx
225.byte	102,15,56,220,224
226.byte	102,15,56,220,232
227.byte	102,15,56,220,240
228.byte	102,15,56,220,248
229	movups	(%edx),%xmm0
230	jnz	.L006enc6_loop
231.byte	102,15,56,220,209
232.byte	102,15,56,220,217
233.byte	102,15,56,220,225
234.byte	102,15,56,220,233
235.byte	102,15,56,220,241
236.byte	102,15,56,220,249
237.byte	102,15,56,221,208
238.byte	102,15,56,221,216
239.byte	102,15,56,221,224
240.byte	102,15,56,221,232
241.byte	102,15,56,221,240
242.byte	102,15,56,221,248
243	ret
244.size	_aesni_encrypt6,.-_aesni_encrypt6
245.type	_aesni_decrypt6,@function
246.align	16
247_aesni_decrypt6:
248	movups	(%edx),%xmm0
249	shrl	$1,%ecx
250	movups	16(%edx),%xmm1
251	leal	32(%edx),%edx
252	xorps	%xmm0,%xmm2
253	pxor	%xmm0,%xmm3
254.byte	102,15,56,222,209
255	pxor	%xmm0,%xmm4
256.byte	102,15,56,222,217
257	pxor	%xmm0,%xmm5
258	decl	%ecx
259.byte	102,15,56,222,225
260	pxor	%xmm0,%xmm6
261.byte	102,15,56,222,233
262	pxor	%xmm0,%xmm7
263.byte	102,15,56,222,241
264	movups	(%edx),%xmm0
265.byte	102,15,56,222,249
266	jmp	.L_aesni_decrypt6_enter
267.align	16
268.L007dec6_loop:
269.byte	102,15,56,222,209
270.byte	102,15,56,222,217
271	decl	%ecx
272.byte	102,15,56,222,225
273.byte	102,15,56,222,233
274.byte	102,15,56,222,241
275.byte	102,15,56,222,249
276.align	16
277.L_aesni_decrypt6_enter:
278	movups	16(%edx),%xmm1
279.byte	102,15,56,222,208
280.byte	102,15,56,222,216
281	leal	32(%edx),%edx
282.byte	102,15,56,222,224
283.byte	102,15,56,222,232
284.byte	102,15,56,222,240
285.byte	102,15,56,222,248
286	movups	(%edx),%xmm0
287	jnz	.L007dec6_loop
288.byte	102,15,56,222,209
289.byte	102,15,56,222,217
290.byte	102,15,56,222,225
291.byte	102,15,56,222,233
292.byte	102,15,56,222,241
293.byte	102,15,56,222,249
294.byte	102,15,56,223,208
295.byte	102,15,56,223,216
296.byte	102,15,56,223,224
297.byte	102,15,56,223,232
298.byte	102,15,56,223,240
299.byte	102,15,56,223,248
300	ret
301.size	_aesni_decrypt6,.-_aesni_decrypt6
302.globl	aesni_ecb_encrypt
303.type	aesni_ecb_encrypt,@function
304.align	16
305aesni_ecb_encrypt:
306.L_aesni_ecb_encrypt_begin:
307	pushl	%ebp
308	pushl	%ebx
309	pushl	%esi
310	pushl	%edi
311	movl	20(%esp),%esi
312	movl	24(%esp),%edi
313	movl	28(%esp),%eax
314	movl	32(%esp),%edx
315	movl	36(%esp),%ebx
316	andl	$-16,%eax
317	jz	.L008ecb_ret
318	movl	240(%edx),%ecx
319	testl	%ebx,%ebx
320	jz	.L009ecb_decrypt
321	movl	%edx,%ebp
322	movl	%ecx,%ebx
323	cmpl	$96,%eax
324	jb	.L010ecb_enc_tail
325	movdqu	(%esi),%xmm2
326	movdqu	16(%esi),%xmm3
327	movdqu	32(%esi),%xmm4
328	movdqu	48(%esi),%xmm5
329	movdqu	64(%esi),%xmm6
330	movdqu	80(%esi),%xmm7
331	leal	96(%esi),%esi
332	subl	$96,%eax
333	jmp	.L011ecb_enc_loop6_enter
334.align	16
335.L012ecb_enc_loop6:
336	movups	%xmm2,(%edi)
337	movdqu	(%esi),%xmm2
338	movups	%xmm3,16(%edi)
339	movdqu	16(%esi),%xmm3
340	movups	%xmm4,32(%edi)
341	movdqu	32(%esi),%xmm4
342	movups	%xmm5,48(%edi)
343	movdqu	48(%esi),%xmm5
344	movups	%xmm6,64(%edi)
345	movdqu	64(%esi),%xmm6
346	movups	%xmm7,80(%edi)
347	leal	96(%edi),%edi
348	movdqu	80(%esi),%xmm7
349	leal	96(%esi),%esi
350.L011ecb_enc_loop6_enter:
351	call	_aesni_encrypt6
352	movl	%ebp,%edx
353	movl	%ebx,%ecx
354	subl	$96,%eax
355	jnc	.L012ecb_enc_loop6
356	movups	%xmm2,(%edi)
357	movups	%xmm3,16(%edi)
358	movups	%xmm4,32(%edi)
359	movups	%xmm5,48(%edi)
360	movups	%xmm6,64(%edi)
361	movups	%xmm7,80(%edi)
362	leal	96(%edi),%edi
363	addl	$96,%eax
364	jz	.L008ecb_ret
365.L010ecb_enc_tail:
366	movups	(%esi),%xmm2
367	cmpl	$32,%eax
368	jb	.L013ecb_enc_one
369	movups	16(%esi),%xmm3
370	je	.L014ecb_enc_two
371	movups	32(%esi),%xmm4
372	cmpl	$64,%eax
373	jb	.L015ecb_enc_three
374	movups	48(%esi),%xmm5
375	je	.L016ecb_enc_four
376	movups	64(%esi),%xmm6
377	xorps	%xmm7,%xmm7
378	call	_aesni_encrypt6
379	movups	%xmm2,(%edi)
380	movups	%xmm3,16(%edi)
381	movups	%xmm4,32(%edi)
382	movups	%xmm5,48(%edi)
383	movups	%xmm6,64(%edi)
384	jmp	.L008ecb_ret
385.align	16
386.L013ecb_enc_one:
387	movups	(%edx),%xmm0
388	movups	16(%edx),%xmm1
389	leal	32(%edx),%edx
390	xorps	%xmm0,%xmm2
391.L017enc1_loop_3:
392.byte	102,15,56,220,209
393	decl	%ecx
394	movups	(%edx),%xmm1
395	leal	16(%edx),%edx
396	jnz	.L017enc1_loop_3
397.byte	102,15,56,221,209
398	movups	%xmm2,(%edi)
399	jmp	.L008ecb_ret
400.align	16
401.L014ecb_enc_two:
402	xorps	%xmm4,%xmm4
403	call	_aesni_encrypt3
404	movups	%xmm2,(%edi)
405	movups	%xmm3,16(%edi)
406	jmp	.L008ecb_ret
407.align	16
408.L015ecb_enc_three:
409	call	_aesni_encrypt3
410	movups	%xmm2,(%edi)
411	movups	%xmm3,16(%edi)
412	movups	%xmm4,32(%edi)
413	jmp	.L008ecb_ret
414.align	16
415.L016ecb_enc_four:
416	call	_aesni_encrypt4
417	movups	%xmm2,(%edi)
418	movups	%xmm3,16(%edi)
419	movups	%xmm4,32(%edi)
420	movups	%xmm5,48(%edi)
421	jmp	.L008ecb_ret
422.align	16
423.L009ecb_decrypt:
424	movl	%edx,%ebp
425	movl	%ecx,%ebx
426	cmpl	$96,%eax
427	jb	.L018ecb_dec_tail
428	movdqu	(%esi),%xmm2
429	movdqu	16(%esi),%xmm3
430	movdqu	32(%esi),%xmm4
431	movdqu	48(%esi),%xmm5
432	movdqu	64(%esi),%xmm6
433	movdqu	80(%esi),%xmm7
434	leal	96(%esi),%esi
435	subl	$96,%eax
436	jmp	.L019ecb_dec_loop6_enter
437.align	16
438.L020ecb_dec_loop6:
439	movups	%xmm2,(%edi)
440	movdqu	(%esi),%xmm2
441	movups	%xmm3,16(%edi)
442	movdqu	16(%esi),%xmm3
443	movups	%xmm4,32(%edi)
444	movdqu	32(%esi),%xmm4
445	movups	%xmm5,48(%edi)
446	movdqu	48(%esi),%xmm5
447	movups	%xmm6,64(%edi)
448	movdqu	64(%esi),%xmm6
449	movups	%xmm7,80(%edi)
450	leal	96(%edi),%edi
451	movdqu	80(%esi),%xmm7
452	leal	96(%esi),%esi
453.L019ecb_dec_loop6_enter:
454	call	_aesni_decrypt6
455	movl	%ebp,%edx
456	movl	%ebx,%ecx
457	subl	$96,%eax
458	jnc	.L020ecb_dec_loop6
459	movups	%xmm2,(%edi)
460	movups	%xmm3,16(%edi)
461	movups	%xmm4,32(%edi)
462	movups	%xmm5,48(%edi)
463	movups	%xmm6,64(%edi)
464	movups	%xmm7,80(%edi)
465	leal	96(%edi),%edi
466	addl	$96,%eax
467	jz	.L008ecb_ret
468.L018ecb_dec_tail:
469	movups	(%esi),%xmm2
470	cmpl	$32,%eax
471	jb	.L021ecb_dec_one
472	movups	16(%esi),%xmm3
473	je	.L022ecb_dec_two
474	movups	32(%esi),%xmm4
475	cmpl	$64,%eax
476	jb	.L023ecb_dec_three
477	movups	48(%esi),%xmm5
478	je	.L024ecb_dec_four
479	movups	64(%esi),%xmm6
480	xorps	%xmm7,%xmm7
481	call	_aesni_decrypt6
482	movups	%xmm2,(%edi)
483	movups	%xmm3,16(%edi)
484	movups	%xmm4,32(%edi)
485	movups	%xmm5,48(%edi)
486	movups	%xmm6,64(%edi)
487	jmp	.L008ecb_ret
488.align	16
489.L021ecb_dec_one:
490	movups	(%edx),%xmm0
491	movups	16(%edx),%xmm1
492	leal	32(%edx),%edx
493	xorps	%xmm0,%xmm2
494.L025dec1_loop_4:
495.byte	102,15,56,222,209
496	decl	%ecx
497	movups	(%edx),%xmm1
498	leal	16(%edx),%edx
499	jnz	.L025dec1_loop_4
500.byte	102,15,56,223,209
501	movups	%xmm2,(%edi)
502	jmp	.L008ecb_ret
503.align	16
504.L022ecb_dec_two:
505	xorps	%xmm4,%xmm4
506	call	_aesni_decrypt3
507	movups	%xmm2,(%edi)
508	movups	%xmm3,16(%edi)
509	jmp	.L008ecb_ret
510.align	16
511.L023ecb_dec_three:
512	call	_aesni_decrypt3
513	movups	%xmm2,(%edi)
514	movups	%xmm3,16(%edi)
515	movups	%xmm4,32(%edi)
516	jmp	.L008ecb_ret
517.align	16
518.L024ecb_dec_four:
519	call	_aesni_decrypt4
520	movups	%xmm2,(%edi)
521	movups	%xmm3,16(%edi)
522	movups	%xmm4,32(%edi)
523	movups	%xmm5,48(%edi)
524.L008ecb_ret:
525	popl	%edi
526	popl	%esi
527	popl	%ebx
528	popl	%ebp
529	ret
530.size	aesni_ecb_encrypt,.-.L_aesni_ecb_encrypt_begin
531.globl	aesni_ccm64_encrypt_blocks
532.type	aesni_ccm64_encrypt_blocks,@function
533.align	16
534aesni_ccm64_encrypt_blocks:
535.L_aesni_ccm64_encrypt_blocks_begin:
536	pushl	%ebp
537	pushl	%ebx
538	pushl	%esi
539	pushl	%edi
540	movl	20(%esp),%esi
541	movl	24(%esp),%edi
542	movl	28(%esp),%eax
543	movl	32(%esp),%edx
544	movl	36(%esp),%ebx
545	movl	40(%esp),%ecx
546	movl	%esp,%ebp
547	subl	$60,%esp
548	andl	$-16,%esp
549	movl	%ebp,48(%esp)
550	movdqu	(%ebx),%xmm7
551	movdqu	(%ecx),%xmm3
552	movl	240(%edx),%ecx
553	movl	$202182159,(%esp)
554	movl	$134810123,4(%esp)
555	movl	$67438087,8(%esp)
556	movl	$66051,12(%esp)
557	movl	$1,%ebx
558	xorl	%ebp,%ebp
559	movl	%ebx,16(%esp)
560	movl	%ebp,20(%esp)
561	movl	%ebp,24(%esp)
562	movl	%ebp,28(%esp)
563	shrl	$1,%ecx
564	leal	(%edx),%ebp
565	movdqa	(%esp),%xmm5
566	movdqa	%xmm7,%xmm2
567	movl	%ecx,%ebx
568.byte	102,15,56,0,253
569.L026ccm64_enc_outer:
570	movups	(%ebp),%xmm0
571	movl	%ebx,%ecx
572	movups	(%esi),%xmm6
573	xorps	%xmm0,%xmm2
574	movups	16(%ebp),%xmm1
575	xorps	%xmm6,%xmm0
576	leal	32(%ebp),%edx
577	xorps	%xmm0,%xmm3
578	movups	(%edx),%xmm0
579.L027ccm64_enc2_loop:
580.byte	102,15,56,220,209
581	decl	%ecx
582.byte	102,15,56,220,217
583	movups	16(%edx),%xmm1
584.byte	102,15,56,220,208
585	leal	32(%edx),%edx
586.byte	102,15,56,220,216
587	movups	(%edx),%xmm0
588	jnz	.L027ccm64_enc2_loop
589.byte	102,15,56,220,209
590.byte	102,15,56,220,217
591	paddq	16(%esp),%xmm7
592.byte	102,15,56,221,208
593.byte	102,15,56,221,216
594	decl	%eax
595	leal	16(%esi),%esi
596	xorps	%xmm2,%xmm6
597	movdqa	%xmm7,%xmm2
598	movups	%xmm6,(%edi)
599	leal	16(%edi),%edi
600.byte	102,15,56,0,213
601	jnz	.L026ccm64_enc_outer
602	movl	48(%esp),%esp
603	movl	40(%esp),%edi
604	movups	%xmm3,(%edi)
605	popl	%edi
606	popl	%esi
607	popl	%ebx
608	popl	%ebp
609	ret
610.size	aesni_ccm64_encrypt_blocks,.-.L_aesni_ccm64_encrypt_blocks_begin
611.globl	aesni_ccm64_decrypt_blocks
612.type	aesni_ccm64_decrypt_blocks,@function
613.align	16
614aesni_ccm64_decrypt_blocks:
615.L_aesni_ccm64_decrypt_blocks_begin:
616	pushl	%ebp
617	pushl	%ebx
618	pushl	%esi
619	pushl	%edi
620	movl	20(%esp),%esi
621	movl	24(%esp),%edi
622	movl	28(%esp),%eax
623	movl	32(%esp),%edx
624	movl	36(%esp),%ebx
625	movl	40(%esp),%ecx
626	movl	%esp,%ebp
627	subl	$60,%esp
628	andl	$-16,%esp
629	movl	%ebp,48(%esp)
630	movdqu	(%ebx),%xmm7
631	movdqu	(%ecx),%xmm3
632	movl	240(%edx),%ecx
633	movl	$202182159,(%esp)
634	movl	$134810123,4(%esp)
635	movl	$67438087,8(%esp)
636	movl	$66051,12(%esp)
637	movl	$1,%ebx
638	xorl	%ebp,%ebp
639	movl	%ebx,16(%esp)
640	movl	%ebp,20(%esp)
641	movl	%ebp,24(%esp)
642	movl	%ebp,28(%esp)
643	movdqa	(%esp),%xmm5
644	movdqa	%xmm7,%xmm2
645	movl	%edx,%ebp
646	movl	%ecx,%ebx
647.byte	102,15,56,0,253
648	movups	(%edx),%xmm0
649	movups	16(%edx),%xmm1
650	leal	32(%edx),%edx
651	xorps	%xmm0,%xmm2
652.L028enc1_loop_5:
653.byte	102,15,56,220,209
654	decl	%ecx
655	movups	(%edx),%xmm1
656	leal	16(%edx),%edx
657	jnz	.L028enc1_loop_5
658.byte	102,15,56,221,209
659	movups	(%esi),%xmm6
660	paddq	16(%esp),%xmm7
661	leal	16(%esi),%esi
662	jmp	.L029ccm64_dec_outer
663.align	16
664.L029ccm64_dec_outer:
665	xorps	%xmm2,%xmm6
666	movdqa	%xmm7,%xmm2
667	movl	%ebx,%ecx
668	movups	%xmm6,(%edi)
669	leal	16(%edi),%edi
670.byte	102,15,56,0,213
671	subl	$1,%eax
672	jz	.L030ccm64_dec_break
673	movups	(%ebp),%xmm0
674	shrl	$1,%ecx
675	movups	16(%ebp),%xmm1
676	xorps	%xmm0,%xmm6
677	leal	32(%ebp),%edx
678	xorps	%xmm0,%xmm2
679	xorps	%xmm6,%xmm3
680	movups	(%edx),%xmm0
681.L031ccm64_dec2_loop:
682.byte	102,15,56,220,209
683	decl	%ecx
684.byte	102,15,56,220,217
685	movups	16(%edx),%xmm1
686.byte	102,15,56,220,208
687	leal	32(%edx),%edx
688.byte	102,15,56,220,216
689	movups	(%edx),%xmm0
690	jnz	.L031ccm64_dec2_loop
691	movups	(%esi),%xmm6
692	paddq	16(%esp),%xmm7
693.byte	102,15,56,220,209
694.byte	102,15,56,220,217
695	leal	16(%esi),%esi
696.byte	102,15,56,221,208
697.byte	102,15,56,221,216
698	jmp	.L029ccm64_dec_outer
699.align	16
700.L030ccm64_dec_break:
701	movl	%ebp,%edx
702	movups	(%edx),%xmm0
703	movups	16(%edx),%xmm1
704	xorps	%xmm0,%xmm6
705	leal	32(%edx),%edx
706	xorps	%xmm6,%xmm3
707.L032enc1_loop_6:
708.byte	102,15,56,220,217
709	decl	%ecx
710	movups	(%edx),%xmm1
711	leal	16(%edx),%edx
712	jnz	.L032enc1_loop_6
713.byte	102,15,56,221,217
714	movl	48(%esp),%esp
715	movl	40(%esp),%edi
716	movups	%xmm3,(%edi)
717	popl	%edi
718	popl	%esi
719	popl	%ebx
720	popl	%ebp
721	ret
722.size	aesni_ccm64_decrypt_blocks,.-.L_aesni_ccm64_decrypt_blocks_begin
723.globl	aesni_ctr32_encrypt_blocks
724.type	aesni_ctr32_encrypt_blocks,@function
725.align	16
726aesni_ctr32_encrypt_blocks:
727.L_aesni_ctr32_encrypt_blocks_begin:
728	pushl	%ebp
729	pushl	%ebx
730	pushl	%esi
731	pushl	%edi
732	movl	20(%esp),%esi
733	movl	24(%esp),%edi
734	movl	28(%esp),%eax
735	movl	32(%esp),%edx
736	movl	36(%esp),%ebx
737	movl	%esp,%ebp
738	subl	$88,%esp
739	andl	$-16,%esp
740	movl	%ebp,80(%esp)
741	cmpl	$1,%eax
742	je	.L033ctr32_one_shortcut
743	movdqu	(%ebx),%xmm7
744	movl	$202182159,(%esp)
745	movl	$134810123,4(%esp)
746	movl	$67438087,8(%esp)
747	movl	$66051,12(%esp)
748	movl	$6,%ecx
749	xorl	%ebp,%ebp
750	movl	%ecx,16(%esp)
751	movl	%ecx,20(%esp)
752	movl	%ecx,24(%esp)
753	movl	%ebp,28(%esp)
754.byte	102,15,58,22,251,3
755.byte	102,15,58,34,253,3
756	movl	240(%edx),%ecx
757	bswap	%ebx
758	pxor	%xmm1,%xmm1
759	pxor	%xmm0,%xmm0
760	movdqa	(%esp),%xmm2
761.byte	102,15,58,34,203,0
762	leal	3(%ebx),%ebp
763.byte	102,15,58,34,197,0
764	incl	%ebx
765.byte	102,15,58,34,203,1
766	incl	%ebp
767.byte	102,15,58,34,197,1
768	incl	%ebx
769.byte	102,15,58,34,203,2
770	incl	%ebp
771.byte	102,15,58,34,197,2
772	movdqa	%xmm1,48(%esp)
773.byte	102,15,56,0,202
774	movdqa	%xmm0,64(%esp)
775.byte	102,15,56,0,194
776	pshufd	$192,%xmm1,%xmm2
777	pshufd	$128,%xmm1,%xmm3
778	cmpl	$6,%eax
779	jb	.L034ctr32_tail
780	movdqa	%xmm7,32(%esp)
781	shrl	$1,%ecx
782	movl	%edx,%ebp
783	movl	%ecx,%ebx
784	subl	$6,%eax
785	jmp	.L035ctr32_loop6
786.align	16
787.L035ctr32_loop6:
788	pshufd	$64,%xmm1,%xmm4
789	movdqa	32(%esp),%xmm1
790	pshufd	$192,%xmm0,%xmm5
791	por	%xmm1,%xmm2
792	pshufd	$128,%xmm0,%xmm6
793	por	%xmm1,%xmm3
794	pshufd	$64,%xmm0,%xmm7
795	por	%xmm1,%xmm4
796	por	%xmm1,%xmm5
797	por	%xmm1,%xmm6
798	por	%xmm1,%xmm7
799	movups	(%ebp),%xmm0
800	movups	16(%ebp),%xmm1
801	leal	32(%ebp),%edx
802	decl	%ecx
803	pxor	%xmm0,%xmm2
804	pxor	%xmm0,%xmm3
805.byte	102,15,56,220,209
806	pxor	%xmm0,%xmm4
807.byte	102,15,56,220,217
808	pxor	%xmm0,%xmm5
809.byte	102,15,56,220,225
810	pxor	%xmm0,%xmm6
811.byte	102,15,56,220,233
812	pxor	%xmm0,%xmm7
813.byte	102,15,56,220,241
814	movups	(%edx),%xmm0
815.byte	102,15,56,220,249
816	call	.L_aesni_encrypt6_enter
817	movups	(%esi),%xmm1
818	movups	16(%esi),%xmm0
819	xorps	%xmm1,%xmm2
820	movups	32(%esi),%xmm1
821	xorps	%xmm0,%xmm3
822	movups	%xmm2,(%edi)
823	movdqa	16(%esp),%xmm0
824	xorps	%xmm1,%xmm4
825	movdqa	48(%esp),%xmm1
826	movups	%xmm3,16(%edi)
827	movups	%xmm4,32(%edi)
828	paddd	%xmm0,%xmm1
829	paddd	64(%esp),%xmm0
830	movdqa	(%esp),%xmm2
831	movups	48(%esi),%xmm3
832	movups	64(%esi),%xmm4
833	xorps	%xmm3,%xmm5
834	movups	80(%esi),%xmm3
835	leal	96(%esi),%esi
836	movdqa	%xmm1,48(%esp)
837.byte	102,15,56,0,202
838	xorps	%xmm4,%xmm6
839	movups	%xmm5,48(%edi)
840	xorps	%xmm3,%xmm7
841	movdqa	%xmm0,64(%esp)
842.byte	102,15,56,0,194
843	movups	%xmm6,64(%edi)
844	pshufd	$192,%xmm1,%xmm2
845	movups	%xmm7,80(%edi)
846	leal	96(%edi),%edi
847	movl	%ebx,%ecx
848	pshufd	$128,%xmm1,%xmm3
849	subl	$6,%eax
850	jnc	.L035ctr32_loop6
851	addl	$6,%eax
852	jz	.L036ctr32_ret
853	movl	%ebp,%edx
854	leal	1(,%ecx,2),%ecx
855	movdqa	32(%esp),%xmm7
856.L034ctr32_tail:
857	por	%xmm7,%xmm2
858	cmpl	$2,%eax
859	jb	.L037ctr32_one
860	pshufd	$64,%xmm1,%xmm4
861	por	%xmm7,%xmm3
862	je	.L038ctr32_two
863	pshufd	$192,%xmm0,%xmm5
864	por	%xmm7,%xmm4
865	cmpl	$4,%eax
866	jb	.L039ctr32_three
867	pshufd	$128,%xmm0,%xmm6
868	por	%xmm7,%xmm5
869	je	.L040ctr32_four
870	por	%xmm7,%xmm6
871	call	_aesni_encrypt6
872	movups	(%esi),%xmm1
873	movups	16(%esi),%xmm0
874	xorps	%xmm1,%xmm2
875	movups	32(%esi),%xmm1
876	xorps	%xmm0,%xmm3
877	movups	48(%esi),%xmm0
878	xorps	%xmm1,%xmm4
879	movups	64(%esi),%xmm1
880	xorps	%xmm0,%xmm5
881	movups	%xmm2,(%edi)
882	xorps	%xmm1,%xmm6
883	movups	%xmm3,16(%edi)
884	movups	%xmm4,32(%edi)
885	movups	%xmm5,48(%edi)
886	movups	%xmm6,64(%edi)
887	jmp	.L036ctr32_ret
888.align	16
889.L033ctr32_one_shortcut:
890	movups	(%ebx),%xmm2
891	movl	240(%edx),%ecx
892.L037ctr32_one:
893	movups	(%edx),%xmm0
894	movups	16(%edx),%xmm1
895	leal	32(%edx),%edx
896	xorps	%xmm0,%xmm2
897.L041enc1_loop_7:
898.byte	102,15,56,220,209
899	decl	%ecx
900	movups	(%edx),%xmm1
901	leal	16(%edx),%edx
902	jnz	.L041enc1_loop_7
903.byte	102,15,56,221,209
904	movups	(%esi),%xmm6
905	xorps	%xmm2,%xmm6
906	movups	%xmm6,(%edi)
907	jmp	.L036ctr32_ret
908.align	16
909.L038ctr32_two:
910	call	_aesni_encrypt3
911	movups	(%esi),%xmm5
912	movups	16(%esi),%xmm6
913	xorps	%xmm5,%xmm2
914	xorps	%xmm6,%xmm3
915	movups	%xmm2,(%edi)
916	movups	%xmm3,16(%edi)
917	jmp	.L036ctr32_ret
918.align	16
919.L039ctr32_three:
920	call	_aesni_encrypt3
921	movups	(%esi),%xmm5
922	movups	16(%esi),%xmm6
923	xorps	%xmm5,%xmm2
924	movups	32(%esi),%xmm7
925	xorps	%xmm6,%xmm3
926	movups	%xmm2,(%edi)
927	xorps	%xmm7,%xmm4
928	movups	%xmm3,16(%edi)
929	movups	%xmm4,32(%edi)
930	jmp	.L036ctr32_ret
931.align	16
932.L040ctr32_four:
933	call	_aesni_encrypt4
934	movups	(%esi),%xmm6
935	movups	16(%esi),%xmm7
936	movups	32(%esi),%xmm1
937	xorps	%xmm6,%xmm2
938	movups	48(%esi),%xmm0
939	xorps	%xmm7,%xmm3
940	movups	%xmm2,(%edi)
941	xorps	%xmm1,%xmm4
942	movups	%xmm3,16(%edi)
943	xorps	%xmm0,%xmm5
944	movups	%xmm4,32(%edi)
945	movups	%xmm5,48(%edi)
946.L036ctr32_ret:
947	movl	80(%esp),%esp
948	popl	%edi
949	popl	%esi
950	popl	%ebx
951	popl	%ebp
952	ret
953.size	aesni_ctr32_encrypt_blocks,.-.L_aesni_ctr32_encrypt_blocks_begin
954.globl	aesni_xts_encrypt
955.type	aesni_xts_encrypt,@function
956.align	16
957aesni_xts_encrypt:
958.L_aesni_xts_encrypt_begin:
959	pushl	%ebp
960	pushl	%ebx
961	pushl	%esi
962	pushl	%edi
963	movl	36(%esp),%edx
964	movl	40(%esp),%esi
965	movl	240(%edx),%ecx
966	movups	(%esi),%xmm2
967	movups	(%edx),%xmm0
968	movups	16(%edx),%xmm1
969	leal	32(%edx),%edx
970	xorps	%xmm0,%xmm2
971.L042enc1_loop_8:
972.byte	102,15,56,220,209
973	decl	%ecx
974	movups	(%edx),%xmm1
975	leal	16(%edx),%edx
976	jnz	.L042enc1_loop_8
977.byte	102,15,56,221,209
978	movl	20(%esp),%esi
979	movl	24(%esp),%edi
980	movl	28(%esp),%eax
981	movl	32(%esp),%edx
982	movl	%esp,%ebp
983	subl	$120,%esp
984	movl	240(%edx),%ecx
985	andl	$-16,%esp
986	movl	$135,96(%esp)
987	movl	$0,100(%esp)
988	movl	$1,104(%esp)
989	movl	$0,108(%esp)
990	movl	%eax,112(%esp)
991	movl	%ebp,116(%esp)
992	movdqa	%xmm2,%xmm1
993	pxor	%xmm0,%xmm0
994	movdqa	96(%esp),%xmm3
995	pcmpgtd	%xmm1,%xmm0
996	andl	$-16,%eax
997	movl	%edx,%ebp
998	movl	%ecx,%ebx
999	subl	$96,%eax
1000	jc	.L043xts_enc_short
1001	shrl	$1,%ecx
1002	movl	%ecx,%ebx
1003	jmp	.L044xts_enc_loop6
1004.align	16
1005.L044xts_enc_loop6:
1006	pshufd	$19,%xmm0,%xmm2
1007	pxor	%xmm0,%xmm0
1008	movdqa	%xmm1,(%esp)
1009	paddq	%xmm1,%xmm1
1010	pand	%xmm3,%xmm2
1011	pcmpgtd	%xmm1,%xmm0
1012	pxor	%xmm2,%xmm1
1013	pshufd	$19,%xmm0,%xmm2
1014	pxor	%xmm0,%xmm0
1015	movdqa	%xmm1,16(%esp)
1016	paddq	%xmm1,%xmm1
1017	pand	%xmm3,%xmm2
1018	pcmpgtd	%xmm1,%xmm0
1019	pxor	%xmm2,%xmm1
1020	pshufd	$19,%xmm0,%xmm2
1021	pxor	%xmm0,%xmm0
1022	movdqa	%xmm1,32(%esp)
1023	paddq	%xmm1,%xmm1
1024	pand	%xmm3,%xmm2
1025	pcmpgtd	%xmm1,%xmm0
1026	pxor	%xmm2,%xmm1
1027	pshufd	$19,%xmm0,%xmm2
1028	pxor	%xmm0,%xmm0
1029	movdqa	%xmm1,48(%esp)
1030	paddq	%xmm1,%xmm1
1031	pand	%xmm3,%xmm2
1032	pcmpgtd	%xmm1,%xmm0
1033	pxor	%xmm2,%xmm1
1034	pshufd	$19,%xmm0,%xmm7
1035	movdqa	%xmm1,64(%esp)
1036	paddq	%xmm1,%xmm1
1037	movups	(%ebp),%xmm0
1038	pand	%xmm3,%xmm7
1039	movups	(%esi),%xmm2
1040	pxor	%xmm1,%xmm7
1041	movdqu	16(%esi),%xmm3
1042	xorps	%xmm0,%xmm2
1043	movdqu	32(%esi),%xmm4
1044	pxor	%xmm0,%xmm3
1045	movdqu	48(%esi),%xmm5
1046	pxor	%xmm0,%xmm4
1047	movdqu	64(%esi),%xmm6
1048	pxor	%xmm0,%xmm5
1049	movdqu	80(%esi),%xmm1
1050	pxor	%xmm0,%xmm6
1051	leal	96(%esi),%esi
1052	pxor	(%esp),%xmm2
1053	movdqa	%xmm7,80(%esp)
1054	pxor	%xmm1,%xmm7
1055	movups	16(%ebp),%xmm1
1056	leal	32(%ebp),%edx
1057	pxor	16(%esp),%xmm3
1058.byte	102,15,56,220,209
1059	pxor	32(%esp),%xmm4
1060.byte	102,15,56,220,217
1061	pxor	48(%esp),%xmm5
1062	decl	%ecx
1063.byte	102,15,56,220,225
1064	pxor	64(%esp),%xmm6
1065.byte	102,15,56,220,233
1066	pxor	%xmm0,%xmm7
1067.byte	102,15,56,220,241
1068	movups	(%edx),%xmm0
1069.byte	102,15,56,220,249
1070	call	.L_aesni_encrypt6_enter
1071	movdqa	80(%esp),%xmm1
1072	pxor	%xmm0,%xmm0
1073	xorps	(%esp),%xmm2
1074	pcmpgtd	%xmm1,%xmm0
1075	xorps	16(%esp),%xmm3
1076	movups	%xmm2,(%edi)
1077	xorps	32(%esp),%xmm4
1078	movups	%xmm3,16(%edi)
1079	xorps	48(%esp),%xmm5
1080	movups	%xmm4,32(%edi)
1081	xorps	64(%esp),%xmm6
1082	movups	%xmm5,48(%edi)
1083	xorps	%xmm1,%xmm7
1084	movups	%xmm6,64(%edi)
1085	pshufd	$19,%xmm0,%xmm2
1086	movups	%xmm7,80(%edi)
1087	leal	96(%edi),%edi
1088	movdqa	96(%esp),%xmm3
1089	pxor	%xmm0,%xmm0
1090	paddq	%xmm1,%xmm1
1091	pand	%xmm3,%xmm2
1092	pcmpgtd	%xmm1,%xmm0
1093	movl	%ebx,%ecx
1094	pxor	%xmm2,%xmm1
1095	subl	$96,%eax
1096	jnc	.L044xts_enc_loop6
1097	leal	1(,%ecx,2),%ecx
1098	movl	%ebp,%edx
1099	movl	%ecx,%ebx
1100.L043xts_enc_short:
1101	addl	$96,%eax
1102	jz	.L045xts_enc_done6x
1103	movdqa	%xmm1,%xmm5
1104	cmpl	$32,%eax
1105	jb	.L046xts_enc_one
1106	pshufd	$19,%xmm0,%xmm2
1107	pxor	%xmm0,%xmm0
1108	paddq	%xmm1,%xmm1
1109	pand	%xmm3,%xmm2
1110	pcmpgtd	%xmm1,%xmm0
1111	pxor	%xmm2,%xmm1
1112	je	.L047xts_enc_two
1113	pshufd	$19,%xmm0,%xmm2
1114	pxor	%xmm0,%xmm0
1115	movdqa	%xmm1,%xmm6
1116	paddq	%xmm1,%xmm1
1117	pand	%xmm3,%xmm2
1118	pcmpgtd	%xmm1,%xmm0
1119	pxor	%xmm2,%xmm1
1120	cmpl	$64,%eax
1121	jb	.L048xts_enc_three
1122	pshufd	$19,%xmm0,%xmm2
1123	pxor	%xmm0,%xmm0
1124	movdqa	%xmm1,%xmm7
1125	paddq	%xmm1,%xmm1
1126	pand	%xmm3,%xmm2
1127	pcmpgtd	%xmm1,%xmm0
1128	pxor	%xmm2,%xmm1
1129	movdqa	%xmm5,(%esp)
1130	movdqa	%xmm6,16(%esp)
1131	je	.L049xts_enc_four
1132	movdqa	%xmm7,32(%esp)
1133	pshufd	$19,%xmm0,%xmm7
1134	movdqa	%xmm1,48(%esp)
1135	paddq	%xmm1,%xmm1
1136	pand	%xmm3,%xmm7
1137	pxor	%xmm1,%xmm7
1138	movdqu	(%esi),%xmm2
1139	movdqu	16(%esi),%xmm3
1140	movdqu	32(%esi),%xmm4
1141	pxor	(%esp),%xmm2
1142	movdqu	48(%esi),%xmm5
1143	pxor	16(%esp),%xmm3
1144	movdqu	64(%esi),%xmm6
1145	pxor	32(%esp),%xmm4
1146	leal	80(%esi),%esi
1147	pxor	48(%esp),%xmm5
1148	movdqa	%xmm7,64(%esp)
1149	pxor	%xmm7,%xmm6
1150	call	_aesni_encrypt6
1151	movaps	64(%esp),%xmm1
1152	xorps	(%esp),%xmm2
1153	xorps	16(%esp),%xmm3
1154	xorps	32(%esp),%xmm4
1155	movups	%xmm2,(%edi)
1156	xorps	48(%esp),%xmm5
1157	movups	%xmm3,16(%edi)
1158	xorps	%xmm1,%xmm6
1159	movups	%xmm4,32(%edi)
1160	movups	%xmm5,48(%edi)
1161	movups	%xmm6,64(%edi)
1162	leal	80(%edi),%edi
1163	jmp	.L050xts_enc_done
1164.align	16
1165.L046xts_enc_one:
1166	movups	(%esi),%xmm2
1167	leal	16(%esi),%esi
1168	xorps	%xmm5,%xmm2
1169	movups	(%edx),%xmm0
1170	movups	16(%edx),%xmm1
1171	leal	32(%edx),%edx
1172	xorps	%xmm0,%xmm2
1173.L051enc1_loop_9:
1174.byte	102,15,56,220,209
1175	decl	%ecx
1176	movups	(%edx),%xmm1
1177	leal	16(%edx),%edx
1178	jnz	.L051enc1_loop_9
1179.byte	102,15,56,221,209
1180	xorps	%xmm5,%xmm2
1181	movups	%xmm2,(%edi)
1182	leal	16(%edi),%edi
1183	movdqa	%xmm5,%xmm1
1184	jmp	.L050xts_enc_done
1185.align	16
1186.L047xts_enc_two:
1187	movaps	%xmm1,%xmm6
1188	movups	(%esi),%xmm2
1189	movups	16(%esi),%xmm3
1190	leal	32(%esi),%esi
1191	xorps	%xmm5,%xmm2
1192	xorps	%xmm6,%xmm3
1193	xorps	%xmm4,%xmm4
1194	call	_aesni_encrypt3
1195	xorps	%xmm5,%xmm2
1196	xorps	%xmm6,%xmm3
1197	movups	%xmm2,(%edi)
1198	movups	%xmm3,16(%edi)
1199	leal	32(%edi),%edi
1200	movdqa	%xmm6,%xmm1
1201	jmp	.L050xts_enc_done
1202.align	16
1203.L048xts_enc_three:
1204	movaps	%xmm1,%xmm7
1205	movups	(%esi),%xmm2
1206	movups	16(%esi),%xmm3
1207	movups	32(%esi),%xmm4
1208	leal	48(%esi),%esi
1209	xorps	%xmm5,%xmm2
1210	xorps	%xmm6,%xmm3
1211	xorps	%xmm7,%xmm4
1212	call	_aesni_encrypt3
1213	xorps	%xmm5,%xmm2
1214	xorps	%xmm6,%xmm3
1215	xorps	%xmm7,%xmm4
1216	movups	%xmm2,(%edi)
1217	movups	%xmm3,16(%edi)
1218	movups	%xmm4,32(%edi)
1219	leal	48(%edi),%edi
1220	movdqa	%xmm7,%xmm1
1221	jmp	.L050xts_enc_done
1222.align	16
1223.L049xts_enc_four:
1224	movaps	%xmm1,%xmm6
1225	movups	(%esi),%xmm2
1226	movups	16(%esi),%xmm3
1227	movups	32(%esi),%xmm4
1228	xorps	(%esp),%xmm2
1229	movups	48(%esi),%xmm5
1230	leal	64(%esi),%esi
1231	xorps	16(%esp),%xmm3
1232	xorps	%xmm7,%xmm4
1233	xorps	%xmm6,%xmm5
1234	call	_aesni_encrypt4
1235	xorps	(%esp),%xmm2
1236	xorps	16(%esp),%xmm3
1237	xorps	%xmm7,%xmm4
1238	movups	%xmm2,(%edi)
1239	xorps	%xmm6,%xmm5
1240	movups	%xmm3,16(%edi)
1241	movups	%xmm4,32(%edi)
1242	movups	%xmm5,48(%edi)
1243	leal	64(%edi),%edi
1244	movdqa	%xmm6,%xmm1
1245	jmp	.L050xts_enc_done
1246.align	16
1247.L045xts_enc_done6x:
1248	movl	112(%esp),%eax
1249	andl	$15,%eax
1250	jz	.L052xts_enc_ret
1251	movdqa	%xmm1,%xmm5
1252	movl	%eax,112(%esp)
1253	jmp	.L053xts_enc_steal
1254.align	16
1255.L050xts_enc_done:
1256	movl	112(%esp),%eax
1257	pxor	%xmm0,%xmm0
1258	andl	$15,%eax
1259	jz	.L052xts_enc_ret
1260	pcmpgtd	%xmm1,%xmm0
1261	movl	%eax,112(%esp)
1262	pshufd	$19,%xmm0,%xmm5
1263	paddq	%xmm1,%xmm1
1264	pand	96(%esp),%xmm5
1265	pxor	%xmm1,%xmm5
1266.L053xts_enc_steal:
1267	movzbl	(%esi),%ecx
1268	movzbl	-16(%edi),%edx
1269	leal	1(%esi),%esi
1270	movb	%cl,-16(%edi)
1271	movb	%dl,(%edi)
1272	leal	1(%edi),%edi
1273	subl	$1,%eax
1274	jnz	.L053xts_enc_steal
1275	subl	112(%esp),%edi
1276	movl	%ebp,%edx
1277	movl	%ebx,%ecx
1278	movups	-16(%edi),%xmm2
1279	xorps	%xmm5,%xmm2
1280	movups	(%edx),%xmm0
1281	movups	16(%edx),%xmm1
1282	leal	32(%edx),%edx
1283	xorps	%xmm0,%xmm2
1284.L054enc1_loop_10:
1285.byte	102,15,56,220,209
1286	decl	%ecx
1287	movups	(%edx),%xmm1
1288	leal	16(%edx),%edx
1289	jnz	.L054enc1_loop_10
1290.byte	102,15,56,221,209
1291	xorps	%xmm5,%xmm2
1292	movups	%xmm2,-16(%edi)
1293.L052xts_enc_ret:
1294	movl	116(%esp),%esp
1295	popl	%edi
1296	popl	%esi
1297	popl	%ebx
1298	popl	%ebp
1299	ret
1300.size	aesni_xts_encrypt,.-.L_aesni_xts_encrypt_begin
1301.globl	aesni_xts_decrypt
1302.type	aesni_xts_decrypt,@function
1303.align	16
1304aesni_xts_decrypt:
1305.L_aesni_xts_decrypt_begin:
1306	pushl	%ebp
1307	pushl	%ebx
1308	pushl	%esi
1309	pushl	%edi
1310	movl	36(%esp),%edx
1311	movl	40(%esp),%esi
1312	movl	240(%edx),%ecx
1313	movups	(%esi),%xmm2
1314	movups	(%edx),%xmm0
1315	movups	16(%edx),%xmm1
1316	leal	32(%edx),%edx
1317	xorps	%xmm0,%xmm2
1318.L055enc1_loop_11:
1319.byte	102,15,56,220,209
1320	decl	%ecx
1321	movups	(%edx),%xmm1
1322	leal	16(%edx),%edx
1323	jnz	.L055enc1_loop_11
1324.byte	102,15,56,221,209
1325	movl	20(%esp),%esi
1326	movl	24(%esp),%edi
1327	movl	28(%esp),%eax
1328	movl	32(%esp),%edx
1329	movl	%esp,%ebp
1330	subl	$120,%esp
1331	andl	$-16,%esp
1332	xorl	%ebx,%ebx
1333	testl	$15,%eax
1334	setnz	%bl
1335	shll	$4,%ebx
1336	subl	%ebx,%eax
1337	movl	$135,96(%esp)
1338	movl	$0,100(%esp)
1339	movl	$1,104(%esp)
1340	movl	$0,108(%esp)
1341	movl	%eax,112(%esp)
1342	movl	%ebp,116(%esp)
1343	movl	240(%edx),%ecx
1344	movl	%edx,%ebp
1345	movl	%ecx,%ebx
1346	movdqa	%xmm2,%xmm1
1347	pxor	%xmm0,%xmm0
1348	movdqa	96(%esp),%xmm3
1349	pcmpgtd	%xmm1,%xmm0
1350	andl	$-16,%eax
1351	subl	$96,%eax
1352	jc	.L056xts_dec_short
1353	shrl	$1,%ecx
1354	movl	%ecx,%ebx
1355	jmp	.L057xts_dec_loop6
1356.align	16
1357.L057xts_dec_loop6:
1358	pshufd	$19,%xmm0,%xmm2
1359	pxor	%xmm0,%xmm0
1360	movdqa	%xmm1,(%esp)
1361	paddq	%xmm1,%xmm1
1362	pand	%xmm3,%xmm2
1363	pcmpgtd	%xmm1,%xmm0
1364	pxor	%xmm2,%xmm1
1365	pshufd	$19,%xmm0,%xmm2
1366	pxor	%xmm0,%xmm0
1367	movdqa	%xmm1,16(%esp)
1368	paddq	%xmm1,%xmm1
1369	pand	%xmm3,%xmm2
1370	pcmpgtd	%xmm1,%xmm0
1371	pxor	%xmm2,%xmm1
1372	pshufd	$19,%xmm0,%xmm2
1373	pxor	%xmm0,%xmm0
1374	movdqa	%xmm1,32(%esp)
1375	paddq	%xmm1,%xmm1
1376	pand	%xmm3,%xmm2
1377	pcmpgtd	%xmm1,%xmm0
1378	pxor	%xmm2,%xmm1
1379	pshufd	$19,%xmm0,%xmm2
1380	pxor	%xmm0,%xmm0
1381	movdqa	%xmm1,48(%esp)
1382	paddq	%xmm1,%xmm1
1383	pand	%xmm3,%xmm2
1384	pcmpgtd	%xmm1,%xmm0
1385	pxor	%xmm2,%xmm1
1386	pshufd	$19,%xmm0,%xmm7
1387	movdqa	%xmm1,64(%esp)
1388	paddq	%xmm1,%xmm1
1389	movups	(%ebp),%xmm0
1390	pand	%xmm3,%xmm7
1391	movups	(%esi),%xmm2
1392	pxor	%xmm1,%xmm7
1393	movdqu	16(%esi),%xmm3
1394	xorps	%xmm0,%xmm2
1395	movdqu	32(%esi),%xmm4
1396	pxor	%xmm0,%xmm3
1397	movdqu	48(%esi),%xmm5
1398	pxor	%xmm0,%xmm4
1399	movdqu	64(%esi),%xmm6
1400	pxor	%xmm0,%xmm5
1401	movdqu	80(%esi),%xmm1
1402	pxor	%xmm0,%xmm6
1403	leal	96(%esi),%esi
1404	pxor	(%esp),%xmm2
1405	movdqa	%xmm7,80(%esp)
1406	pxor	%xmm1,%xmm7
1407	movups	16(%ebp),%xmm1
1408	leal	32(%ebp),%edx
1409	pxor	16(%esp),%xmm3
1410.byte	102,15,56,222,209
1411	pxor	32(%esp),%xmm4
1412.byte	102,15,56,222,217
1413	pxor	48(%esp),%xmm5
1414	decl	%ecx
1415.byte	102,15,56,222,225
1416	pxor	64(%esp),%xmm6
1417.byte	102,15,56,222,233
1418	pxor	%xmm0,%xmm7
1419.byte	102,15,56,222,241
1420	movups	(%edx),%xmm0
1421.byte	102,15,56,222,249
1422	call	.L_aesni_decrypt6_enter
1423	movdqa	80(%esp),%xmm1
1424	pxor	%xmm0,%xmm0
1425	xorps	(%esp),%xmm2
1426	pcmpgtd	%xmm1,%xmm0
1427	xorps	16(%esp),%xmm3
1428	movups	%xmm2,(%edi)
1429	xorps	32(%esp),%xmm4
1430	movups	%xmm3,16(%edi)
1431	xorps	48(%esp),%xmm5
1432	movups	%xmm4,32(%edi)
1433	xorps	64(%esp),%xmm6
1434	movups	%xmm5,48(%edi)
1435	xorps	%xmm1,%xmm7
1436	movups	%xmm6,64(%edi)
1437	pshufd	$19,%xmm0,%xmm2
1438	movups	%xmm7,80(%edi)
1439	leal	96(%edi),%edi
1440	movdqa	96(%esp),%xmm3
1441	pxor	%xmm0,%xmm0
1442	paddq	%xmm1,%xmm1
1443	pand	%xmm3,%xmm2
1444	pcmpgtd	%xmm1,%xmm0
1445	movl	%ebx,%ecx
1446	pxor	%xmm2,%xmm1
1447	subl	$96,%eax
1448	jnc	.L057xts_dec_loop6
1449	leal	1(,%ecx,2),%ecx
1450	movl	%ebp,%edx
1451	movl	%ecx,%ebx
1452.L056xts_dec_short:
1453	addl	$96,%eax
1454	jz	.L058xts_dec_done6x
1455	movdqa	%xmm1,%xmm5
1456	cmpl	$32,%eax
1457	jb	.L059xts_dec_one
1458	pshufd	$19,%xmm0,%xmm2
1459	pxor	%xmm0,%xmm0
1460	paddq	%xmm1,%xmm1
1461	pand	%xmm3,%xmm2
1462	pcmpgtd	%xmm1,%xmm0
1463	pxor	%xmm2,%xmm1
1464	je	.L060xts_dec_two
1465	pshufd	$19,%xmm0,%xmm2
1466	pxor	%xmm0,%xmm0
1467	movdqa	%xmm1,%xmm6
1468	paddq	%xmm1,%xmm1
1469	pand	%xmm3,%xmm2
1470	pcmpgtd	%xmm1,%xmm0
1471	pxor	%xmm2,%xmm1
1472	cmpl	$64,%eax
1473	jb	.L061xts_dec_three
1474	pshufd	$19,%xmm0,%xmm2
1475	pxor	%xmm0,%xmm0
1476	movdqa	%xmm1,%xmm7
1477	paddq	%xmm1,%xmm1
1478	pand	%xmm3,%xmm2
1479	pcmpgtd	%xmm1,%xmm0
1480	pxor	%xmm2,%xmm1
1481	movdqa	%xmm5,(%esp)
1482	movdqa	%xmm6,16(%esp)
1483	je	.L062xts_dec_four
1484	movdqa	%xmm7,32(%esp)
1485	pshufd	$19,%xmm0,%xmm7
1486	movdqa	%xmm1,48(%esp)
1487	paddq	%xmm1,%xmm1
1488	pand	%xmm3,%xmm7
1489	pxor	%xmm1,%xmm7
1490	movdqu	(%esi),%xmm2
1491	movdqu	16(%esi),%xmm3
1492	movdqu	32(%esi),%xmm4
1493	pxor	(%esp),%xmm2
1494	movdqu	48(%esi),%xmm5
1495	pxor	16(%esp),%xmm3
1496	movdqu	64(%esi),%xmm6
1497	pxor	32(%esp),%xmm4
1498	leal	80(%esi),%esi
1499	pxor	48(%esp),%xmm5
1500	movdqa	%xmm7,64(%esp)
1501	pxor	%xmm7,%xmm6
1502	call	_aesni_decrypt6
1503	movaps	64(%esp),%xmm1
1504	xorps	(%esp),%xmm2
1505	xorps	16(%esp),%xmm3
1506	xorps	32(%esp),%xmm4
1507	movups	%xmm2,(%edi)
1508	xorps	48(%esp),%xmm5
1509	movups	%xmm3,16(%edi)
1510	xorps	%xmm1,%xmm6
1511	movups	%xmm4,32(%edi)
1512	movups	%xmm5,48(%edi)
1513	movups	%xmm6,64(%edi)
1514	leal	80(%edi),%edi
1515	jmp	.L063xts_dec_done
1516.align	16
1517.L059xts_dec_one:
1518	movups	(%esi),%xmm2
1519	leal	16(%esi),%esi
1520	xorps	%xmm5,%xmm2
1521	movups	(%edx),%xmm0
1522	movups	16(%edx),%xmm1
1523	leal	32(%edx),%edx
1524	xorps	%xmm0,%xmm2
1525.L064dec1_loop_12:
1526.byte	102,15,56,222,209
1527	decl	%ecx
1528	movups	(%edx),%xmm1
1529	leal	16(%edx),%edx
1530	jnz	.L064dec1_loop_12
1531.byte	102,15,56,223,209
1532	xorps	%xmm5,%xmm2
1533	movups	%xmm2,(%edi)
1534	leal	16(%edi),%edi
1535	movdqa	%xmm5,%xmm1
1536	jmp	.L063xts_dec_done
1537.align	16
1538.L060xts_dec_two:
1539	movaps	%xmm1,%xmm6
1540	movups	(%esi),%xmm2
1541	movups	16(%esi),%xmm3
1542	leal	32(%esi),%esi
1543	xorps	%xmm5,%xmm2
1544	xorps	%xmm6,%xmm3
1545	call	_aesni_decrypt3
1546	xorps	%xmm5,%xmm2
1547	xorps	%xmm6,%xmm3
1548	movups	%xmm2,(%edi)
1549	movups	%xmm3,16(%edi)
1550	leal	32(%edi),%edi
1551	movdqa	%xmm6,%xmm1
1552	jmp	.L063xts_dec_done
1553.align	16
1554.L061xts_dec_three:
1555	movaps	%xmm1,%xmm7
1556	movups	(%esi),%xmm2
1557	movups	16(%esi),%xmm3
1558	movups	32(%esi),%xmm4
1559	leal	48(%esi),%esi
1560	xorps	%xmm5,%xmm2
1561	xorps	%xmm6,%xmm3
1562	xorps	%xmm7,%xmm4
1563	call	_aesni_decrypt3
1564	xorps	%xmm5,%xmm2
1565	xorps	%xmm6,%xmm3
1566	xorps	%xmm7,%xmm4
1567	movups	%xmm2,(%edi)
1568	movups	%xmm3,16(%edi)
1569	movups	%xmm4,32(%edi)
1570	leal	48(%edi),%edi
1571	movdqa	%xmm7,%xmm1
1572	jmp	.L063xts_dec_done
1573.align	16
1574.L062xts_dec_four:
1575	movaps	%xmm1,%xmm6
1576	movups	(%esi),%xmm2
1577	movups	16(%esi),%xmm3
1578	movups	32(%esi),%xmm4
1579	xorps	(%esp),%xmm2
1580	movups	48(%esi),%xmm5
1581	leal	64(%esi),%esi
1582	xorps	16(%esp),%xmm3
1583	xorps	%xmm7,%xmm4
1584	xorps	%xmm6,%xmm5
1585	call	_aesni_decrypt4
1586	xorps	(%esp),%xmm2
1587	xorps	16(%esp),%xmm3
1588	xorps	%xmm7,%xmm4
1589	movups	%xmm2,(%edi)
1590	xorps	%xmm6,%xmm5
1591	movups	%xmm3,16(%edi)
1592	movups	%xmm4,32(%edi)
1593	movups	%xmm5,48(%edi)
1594	leal	64(%edi),%edi
1595	movdqa	%xmm6,%xmm1
1596	jmp	.L063xts_dec_done
1597.align	16
1598.L058xts_dec_done6x:
1599	movl	112(%esp),%eax
1600	andl	$15,%eax
1601	jz	.L065xts_dec_ret
1602	movl	%eax,112(%esp)
1603	jmp	.L066xts_dec_only_one_more
1604.align	16
1605.L063xts_dec_done:
1606	movl	112(%esp),%eax
1607	pxor	%xmm0,%xmm0
1608	andl	$15,%eax
1609	jz	.L065xts_dec_ret
1610	pcmpgtd	%xmm1,%xmm0
1611	movl	%eax,112(%esp)
1612	pshufd	$19,%xmm0,%xmm2
1613	pxor	%xmm0,%xmm0
1614	movdqa	96(%esp),%xmm3
1615	paddq	%xmm1,%xmm1
1616	pand	%xmm3,%xmm2
1617	pcmpgtd	%xmm1,%xmm0
1618	pxor	%xmm2,%xmm1
1619.L066xts_dec_only_one_more:
1620	pshufd	$19,%xmm0,%xmm5
1621	movdqa	%xmm1,%xmm6
1622	paddq	%xmm1,%xmm1
1623	pand	%xmm3,%xmm5
1624	pxor	%xmm1,%xmm5
1625	movl	%ebp,%edx
1626	movl	%ebx,%ecx
1627	movups	(%esi),%xmm2
1628	xorps	%xmm5,%xmm2
1629	movups	(%edx),%xmm0
1630	movups	16(%edx),%xmm1
1631	leal	32(%edx),%edx
1632	xorps	%xmm0,%xmm2
1633.L067dec1_loop_13:
1634.byte	102,15,56,222,209
1635	decl	%ecx
1636	movups	(%edx),%xmm1
1637	leal	16(%edx),%edx
1638	jnz	.L067dec1_loop_13
1639.byte	102,15,56,223,209
1640	xorps	%xmm5,%xmm2
1641	movups	%xmm2,(%edi)
1642.L068xts_dec_steal:
1643	movzbl	16(%esi),%ecx
1644	movzbl	(%edi),%edx
1645	leal	1(%esi),%esi
1646	movb	%cl,(%edi)
1647	movb	%dl,16(%edi)
1648	leal	1(%edi),%edi
1649	subl	$1,%eax
1650	jnz	.L068xts_dec_steal
1651	subl	112(%esp),%edi
1652	movl	%ebp,%edx
1653	movl	%ebx,%ecx
1654	movups	(%edi),%xmm2
1655	xorps	%xmm6,%xmm2
1656	movups	(%edx),%xmm0
1657	movups	16(%edx),%xmm1
1658	leal	32(%edx),%edx
1659	xorps	%xmm0,%xmm2
1660.L069dec1_loop_14:
1661.byte	102,15,56,222,209
1662	decl	%ecx
1663	movups	(%edx),%xmm1
1664	leal	16(%edx),%edx
1665	jnz	.L069dec1_loop_14
1666.byte	102,15,56,223,209
1667	xorps	%xmm6,%xmm2
1668	movups	%xmm2,(%edi)
1669.L065xts_dec_ret:
1670	movl	116(%esp),%esp
1671	popl	%edi
1672	popl	%esi
1673	popl	%ebx
1674	popl	%ebp
1675	ret
1676.size	aesni_xts_decrypt,.-.L_aesni_xts_decrypt_begin
1677.globl	aesni_cbc_encrypt
1678.type	aesni_cbc_encrypt,@function
1679.align	16
1680aesni_cbc_encrypt:
1681.L_aesni_cbc_encrypt_begin:
1682	pushl	%ebp
1683	pushl	%ebx
1684	pushl	%esi
1685	pushl	%edi
1686	movl	20(%esp),%esi
1687	movl	%esp,%ebx
1688	movl	24(%esp),%edi
1689	subl	$24,%ebx
1690	movl	28(%esp),%eax
1691	andl	$-16,%ebx
1692	movl	32(%esp),%edx
1693	movl	36(%esp),%ebp
1694	testl	%eax,%eax
1695	jz	.L070cbc_abort
1696	cmpl	$0,40(%esp)
1697	xchgl	%esp,%ebx
1698	movups	(%ebp),%xmm7
1699	movl	240(%edx),%ecx
1700	movl	%edx,%ebp
1701	movl	%ebx,16(%esp)
1702	movl	%ecx,%ebx
1703	je	.L071cbc_decrypt
1704	movaps	%xmm7,%xmm2
1705	cmpl	$16,%eax
1706	jb	.L072cbc_enc_tail
1707	subl	$16,%eax
1708	jmp	.L073cbc_enc_loop
1709.align	16
1710.L073cbc_enc_loop:
1711	movups	(%esi),%xmm7
1712	leal	16(%esi),%esi
1713	movups	(%edx),%xmm0
1714	movups	16(%edx),%xmm1
1715	xorps	%xmm0,%xmm7
1716	leal	32(%edx),%edx
1717	xorps	%xmm7,%xmm2
1718.L074enc1_loop_15:
1719.byte	102,15,56,220,209
1720	decl	%ecx
1721	movups	(%edx),%xmm1
1722	leal	16(%edx),%edx
1723	jnz	.L074enc1_loop_15
1724.byte	102,15,56,221,209
1725	movl	%ebx,%ecx
1726	movl	%ebp,%edx
1727	movups	%xmm2,(%edi)
1728	leal	16(%edi),%edi
1729	subl	$16,%eax
1730	jnc	.L073cbc_enc_loop
1731	addl	$16,%eax
1732	jnz	.L072cbc_enc_tail
1733	movaps	%xmm2,%xmm7
1734	jmp	.L075cbc_ret
1735.L072cbc_enc_tail:
1736	movl	%eax,%ecx
1737.long	2767451785
1738	movl	$16,%ecx
1739	subl	%eax,%ecx
1740	xorl	%eax,%eax
1741.long	2868115081
1742	leal	-16(%edi),%edi
1743	movl	%ebx,%ecx
1744	movl	%edi,%esi
1745	movl	%ebp,%edx
1746	jmp	.L073cbc_enc_loop
1747.align	16
1748.L071cbc_decrypt:
1749	cmpl	$80,%eax
1750	jbe	.L076cbc_dec_tail
1751	movaps	%xmm7,(%esp)
1752	subl	$80,%eax
1753	jmp	.L077cbc_dec_loop6_enter
1754.align	16
1755.L078cbc_dec_loop6:
1756	movaps	%xmm0,(%esp)
1757	movups	%xmm7,(%edi)
1758	leal	16(%edi),%edi
1759.L077cbc_dec_loop6_enter:
1760	movdqu	(%esi),%xmm2
1761	movdqu	16(%esi),%xmm3
1762	movdqu	32(%esi),%xmm4
1763	movdqu	48(%esi),%xmm5
1764	movdqu	64(%esi),%xmm6
1765	movdqu	80(%esi),%xmm7
1766	call	_aesni_decrypt6
1767	movups	(%esi),%xmm1
1768	movups	16(%esi),%xmm0
1769	xorps	(%esp),%xmm2
1770	xorps	%xmm1,%xmm3
1771	movups	32(%esi),%xmm1
1772	xorps	%xmm0,%xmm4
1773	movups	48(%esi),%xmm0
1774	xorps	%xmm1,%xmm5
1775	movups	64(%esi),%xmm1
1776	xorps	%xmm0,%xmm6
1777	movups	80(%esi),%xmm0
1778	xorps	%xmm1,%xmm7
1779	movups	%xmm2,(%edi)
1780	movups	%xmm3,16(%edi)
1781	leal	96(%esi),%esi
1782	movups	%xmm4,32(%edi)
1783	movl	%ebx,%ecx
1784	movups	%xmm5,48(%edi)
1785	movl	%ebp,%edx
1786	movups	%xmm6,64(%edi)
1787	leal	80(%edi),%edi
1788	subl	$96,%eax
1789	ja	.L078cbc_dec_loop6
1790	movaps	%xmm7,%xmm2
1791	movaps	%xmm0,%xmm7
1792	addl	$80,%eax
1793	jle	.L079cbc_dec_tail_collected
1794	movups	%xmm2,(%edi)
1795	leal	16(%edi),%edi
1796.L076cbc_dec_tail:
1797	movups	(%esi),%xmm2
1798	movaps	%xmm2,%xmm6
1799	cmpl	$16,%eax
1800	jbe	.L080cbc_dec_one
1801	movups	16(%esi),%xmm3
1802	movaps	%xmm3,%xmm5
1803	cmpl	$32,%eax
1804	jbe	.L081cbc_dec_two
1805	movups	32(%esi),%xmm4
1806	cmpl	$48,%eax
1807	jbe	.L082cbc_dec_three
1808	movups	48(%esi),%xmm5
1809	cmpl	$64,%eax
1810	jbe	.L083cbc_dec_four
1811	movups	64(%esi),%xmm6
1812	movaps	%xmm7,(%esp)
1813	movups	(%esi),%xmm2
1814	xorps	%xmm7,%xmm7
1815	call	_aesni_decrypt6
1816	movups	(%esi),%xmm1
1817	movups	16(%esi),%xmm0
1818	xorps	(%esp),%xmm2
1819	xorps	%xmm1,%xmm3
1820	movups	32(%esi),%xmm1
1821	xorps	%xmm0,%xmm4
1822	movups	48(%esi),%xmm0
1823	xorps	%xmm1,%xmm5
1824	movups	64(%esi),%xmm7
1825	xorps	%xmm0,%xmm6
1826	movups	%xmm2,(%edi)
1827	movups	%xmm3,16(%edi)
1828	movups	%xmm4,32(%edi)
1829	movups	%xmm5,48(%edi)
1830	leal	64(%edi),%edi
1831	movaps	%xmm6,%xmm2
1832	subl	$80,%eax
1833	jmp	.L079cbc_dec_tail_collected
1834.align	16
1835.L080cbc_dec_one:
1836	movups	(%edx),%xmm0
1837	movups	16(%edx),%xmm1
1838	leal	32(%edx),%edx
1839	xorps	%xmm0,%xmm2
1840.L084dec1_loop_16:
1841.byte	102,15,56,222,209
1842	decl	%ecx
1843	movups	(%edx),%xmm1
1844	leal	16(%edx),%edx
1845	jnz	.L084dec1_loop_16
1846.byte	102,15,56,223,209
1847	xorps	%xmm7,%xmm2
1848	movaps	%xmm6,%xmm7
1849	subl	$16,%eax
1850	jmp	.L079cbc_dec_tail_collected
1851.align	16
1852.L081cbc_dec_two:
1853	xorps	%xmm4,%xmm4
1854	call	_aesni_decrypt3
1855	xorps	%xmm7,%xmm2
1856	xorps	%xmm6,%xmm3
1857	movups	%xmm2,(%edi)
1858	movaps	%xmm3,%xmm2
1859	leal	16(%edi),%edi
1860	movaps	%xmm5,%xmm7
1861	subl	$32,%eax
1862	jmp	.L079cbc_dec_tail_collected
1863.align	16
1864.L082cbc_dec_three:
1865	call	_aesni_decrypt3
1866	xorps	%xmm7,%xmm2
1867	xorps	%xmm6,%xmm3
1868	xorps	%xmm5,%xmm4
1869	movups	%xmm2,(%edi)
1870	movaps	%xmm4,%xmm2
1871	movups	%xmm3,16(%edi)
1872	leal	32(%edi),%edi
1873	movups	32(%esi),%xmm7
1874	subl	$48,%eax
1875	jmp	.L079cbc_dec_tail_collected
1876.align	16
1877.L083cbc_dec_four:
1878	call	_aesni_decrypt4
1879	movups	16(%esi),%xmm1
1880	movups	32(%esi),%xmm0
1881	xorps	%xmm7,%xmm2
1882	movups	48(%esi),%xmm7
1883	xorps	%xmm6,%xmm3
1884	movups	%xmm2,(%edi)
1885	xorps	%xmm1,%xmm4
1886	movups	%xmm3,16(%edi)
1887	xorps	%xmm0,%xmm5
1888	movups	%xmm4,32(%edi)
1889	leal	48(%edi),%edi
1890	movaps	%xmm5,%xmm2
1891	subl	$64,%eax
1892.L079cbc_dec_tail_collected:
1893	andl	$15,%eax
1894	jnz	.L085cbc_dec_tail_partial
1895	movups	%xmm2,(%edi)
1896	jmp	.L075cbc_ret
1897.align	16
1898.L085cbc_dec_tail_partial:
1899	movaps	%xmm2,(%esp)
1900	movl	$16,%ecx
1901	movl	%esp,%esi
1902	subl	%eax,%ecx
1903.long	2767451785
1904.L075cbc_ret:
1905	movl	16(%esp),%esp
1906	movl	36(%esp),%ebp
1907	movups	%xmm7,(%ebp)
1908.L070cbc_abort:
1909	popl	%edi
1910	popl	%esi
1911	popl	%ebx
1912	popl	%ebp
1913	ret
1914.size	aesni_cbc_encrypt,.-.L_aesni_cbc_encrypt_begin
1915.type	_aesni_set_encrypt_key,@function
1916.align	16
1917_aesni_set_encrypt_key:
1918	testl	%eax,%eax
1919	jz	.L086bad_pointer
1920	testl	%edx,%edx
1921	jz	.L086bad_pointer
1922	movups	(%eax),%xmm0
1923	xorps	%xmm4,%xmm4
1924	leal	16(%edx),%edx
1925	cmpl	$256,%ecx
1926	je	.L08714rounds
1927	cmpl	$192,%ecx
1928	je	.L08812rounds
1929	cmpl	$128,%ecx
1930	jne	.L089bad_keybits
1931.align	16
1932.L09010rounds:
1933	movl	$9,%ecx
1934	movups	%xmm0,-16(%edx)
1935.byte	102,15,58,223,200,1
1936	call	.L091key_128_cold
1937.byte	102,15,58,223,200,2
1938	call	.L092key_128
1939.byte	102,15,58,223,200,4
1940	call	.L092key_128
1941.byte	102,15,58,223,200,8
1942	call	.L092key_128
1943.byte	102,15,58,223,200,16
1944	call	.L092key_128
1945.byte	102,15,58,223,200,32
1946	call	.L092key_128
1947.byte	102,15,58,223,200,64
1948	call	.L092key_128
1949.byte	102,15,58,223,200,128
1950	call	.L092key_128
1951.byte	102,15,58,223,200,27
1952	call	.L092key_128
1953.byte	102,15,58,223,200,54
1954	call	.L092key_128
1955	movups	%xmm0,(%edx)
1956	movl	%ecx,80(%edx)
1957	xorl	%eax,%eax
1958	ret
1959.align	16
1960.L092key_128:
1961	movups	%xmm0,(%edx)
1962	leal	16(%edx),%edx
1963.L091key_128_cold:
1964	shufps	$16,%xmm0,%xmm4
1965	xorps	%xmm4,%xmm0
1966	shufps	$140,%xmm0,%xmm4
1967	xorps	%xmm4,%xmm0
1968	shufps	$255,%xmm1,%xmm1
1969	xorps	%xmm1,%xmm0
1970	ret
1971.align	16
1972.L08812rounds:
1973	movq	16(%eax),%xmm2
1974	movl	$11,%ecx
1975	movups	%xmm0,-16(%edx)
1976.byte	102,15,58,223,202,1
1977	call	.L093key_192a_cold
1978.byte	102,15,58,223,202,2
1979	call	.L094key_192b
1980.byte	102,15,58,223,202,4
1981	call	.L095key_192a
1982.byte	102,15,58,223,202,8
1983	call	.L094key_192b
1984.byte	102,15,58,223,202,16
1985	call	.L095key_192a
1986.byte	102,15,58,223,202,32
1987	call	.L094key_192b
1988.byte	102,15,58,223,202,64
1989	call	.L095key_192a
1990.byte	102,15,58,223,202,128
1991	call	.L094key_192b
1992	movups	%xmm0,(%edx)
1993	movl	%ecx,48(%edx)
1994	xorl	%eax,%eax
1995	ret
1996.align	16
1997.L095key_192a:
1998	movups	%xmm0,(%edx)
1999	leal	16(%edx),%edx
2000.align	16
2001.L093key_192a_cold:
2002	movaps	%xmm2,%xmm5
2003.L096key_192b_warm:
2004	shufps	$16,%xmm0,%xmm4
2005	movdqa	%xmm2,%xmm3
2006	xorps	%xmm4,%xmm0
2007	shufps	$140,%xmm0,%xmm4
2008	pslldq	$4,%xmm3
2009	xorps	%xmm4,%xmm0
2010	pshufd	$85,%xmm1,%xmm1
2011	pxor	%xmm3,%xmm2
2012	pxor	%xmm1,%xmm0
2013	pshufd	$255,%xmm0,%xmm3
2014	pxor	%xmm3,%xmm2
2015	ret
2016.align	16
2017.L094key_192b:
2018	movaps	%xmm0,%xmm3
2019	shufps	$68,%xmm0,%xmm5
2020	movups	%xmm5,(%edx)
2021	shufps	$78,%xmm2,%xmm3
2022	movups	%xmm3,16(%edx)
2023	leal	32(%edx),%edx
2024	jmp	.L096key_192b_warm
2025.align	16
2026.L08714rounds:
2027	movups	16(%eax),%xmm2
2028	movl	$13,%ecx
2029	leal	16(%edx),%edx
2030	movups	%xmm0,-32(%edx)
2031	movups	%xmm2,-16(%edx)
2032.byte	102,15,58,223,202,1
2033	call	.L097key_256a_cold
2034.byte	102,15,58,223,200,1
2035	call	.L098key_256b
2036.byte	102,15,58,223,202,2
2037	call	.L099key_256a
2038.byte	102,15,58,223,200,2
2039	call	.L098key_256b
2040.byte	102,15,58,223,202,4
2041	call	.L099key_256a
2042.byte	102,15,58,223,200,4
2043	call	.L098key_256b
2044.byte	102,15,58,223,202,8
2045	call	.L099key_256a
2046.byte	102,15,58,223,200,8
2047	call	.L098key_256b
2048.byte	102,15,58,223,202,16
2049	call	.L099key_256a
2050.byte	102,15,58,223,200,16
2051	call	.L098key_256b
2052.byte	102,15,58,223,202,32
2053	call	.L099key_256a
2054.byte	102,15,58,223,200,32
2055	call	.L098key_256b
2056.byte	102,15,58,223,202,64
2057	call	.L099key_256a
2058	movups	%xmm0,(%edx)
2059	movl	%ecx,16(%edx)
2060	xorl	%eax,%eax
2061	ret
2062.align	16
2063.L099key_256a:
2064	movups	%xmm2,(%edx)
2065	leal	16(%edx),%edx
2066.L097key_256a_cold:
2067	shufps	$16,%xmm0,%xmm4
2068	xorps	%xmm4,%xmm0
2069	shufps	$140,%xmm0,%xmm4
2070	xorps	%xmm4,%xmm0
2071	shufps	$255,%xmm1,%xmm1
2072	xorps	%xmm1,%xmm0
2073	ret
2074.align	16
2075.L098key_256b:
2076	movups	%xmm0,(%edx)
2077	leal	16(%edx),%edx
2078	shufps	$16,%xmm2,%xmm4
2079	xorps	%xmm4,%xmm2
2080	shufps	$140,%xmm2,%xmm4
2081	xorps	%xmm4,%xmm2
2082	shufps	$170,%xmm1,%xmm1
2083	xorps	%xmm1,%xmm2
2084	ret
2085.align	4
2086.L086bad_pointer:
2087	movl	$-1,%eax
2088	ret
2089.align	4
2090.L089bad_keybits:
2091	movl	$-2,%eax
2092	ret
2093.size	_aesni_set_encrypt_key,.-_aesni_set_encrypt_key
2094.globl	aesni_set_encrypt_key
2095.type	aesni_set_encrypt_key,@function
2096.align	16
2097aesni_set_encrypt_key:
2098.L_aesni_set_encrypt_key_begin:
2099	movl	4(%esp),%eax
2100	movl	8(%esp),%ecx
2101	movl	12(%esp),%edx
2102	call	_aesni_set_encrypt_key
2103	ret
2104.size	aesni_set_encrypt_key,.-.L_aesni_set_encrypt_key_begin
2105.globl	aesni_set_decrypt_key
2106.type	aesni_set_decrypt_key,@function
2107.align	16
2108aesni_set_decrypt_key:
2109.L_aesni_set_decrypt_key_begin:
2110	movl	4(%esp),%eax
2111	movl	8(%esp),%ecx
2112	movl	12(%esp),%edx
2113	call	_aesni_set_encrypt_key
2114	movl	12(%esp),%edx
2115	shll	$4,%ecx
2116	testl	%eax,%eax
2117	jnz	.L100dec_key_ret
2118	leal	16(%edx,%ecx,1),%eax
2119	movups	(%edx),%xmm0
2120	movups	(%eax),%xmm1
2121	movups	%xmm0,(%eax)
2122	movups	%xmm1,(%edx)
2123	leal	16(%edx),%edx
2124	leal	-16(%eax),%eax
2125.L101dec_key_inverse:
2126	movups	(%edx),%xmm0
2127	movups	(%eax),%xmm1
2128.byte	102,15,56,219,192
2129.byte	102,15,56,219,201
2130	leal	16(%edx),%edx
2131	leal	-16(%eax),%eax
2132	movups	%xmm0,16(%eax)
2133	movups	%xmm1,-16(%edx)
2134	cmpl	%edx,%eax
2135	ja	.L101dec_key_inverse
2136	movups	(%edx),%xmm0
2137.byte	102,15,56,219,192
2138	movups	%xmm0,(%edx)
2139	xorl	%eax,%eax
2140.L100dec_key_ret:
2141	ret
2142.size	aesni_set_decrypt_key,.-.L_aesni_set_decrypt_key_begin
2143.byte	65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69
2144.byte	83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83
2145.byte	32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
2146.byte	115,108,46,111,114,103,62,0
2147#else
2148.file	"aesni-x86.S"
2149.text
2150.globl	aesni_encrypt
2151.type	aesni_encrypt,@function
2152.align	16
2153aesni_encrypt:
2154.L_aesni_encrypt_begin:
2155	movl	4(%esp),%eax
2156	movl	12(%esp),%edx
2157	movups	(%eax),%xmm2
2158	movl	240(%edx),%ecx
2159	movl	8(%esp),%eax
2160	movups	(%edx),%xmm0
2161	movups	16(%edx),%xmm1
2162	leal	32(%edx),%edx
2163	xorps	%xmm0,%xmm2
2164.L000enc1_loop_1:
2165.byte	102,15,56,220,209
2166	decl	%ecx
2167	movups	(%edx),%xmm1
2168	leal	16(%edx),%edx
2169	jnz	.L000enc1_loop_1
2170.byte	102,15,56,221,209
2171	movups	%xmm2,(%eax)
2172	ret
2173.size	aesni_encrypt,.-.L_aesni_encrypt_begin
2174.globl	aesni_decrypt
2175.type	aesni_decrypt,@function
2176.align	16
2177aesni_decrypt:
2178.L_aesni_decrypt_begin:
2179	movl	4(%esp),%eax
2180	movl	12(%esp),%edx
2181	movups	(%eax),%xmm2
2182	movl	240(%edx),%ecx
2183	movl	8(%esp),%eax
2184	movups	(%edx),%xmm0
2185	movups	16(%edx),%xmm1
2186	leal	32(%edx),%edx
2187	xorps	%xmm0,%xmm2
2188.L001dec1_loop_2:
2189.byte	102,15,56,222,209
2190	decl	%ecx
2191	movups	(%edx),%xmm1
2192	leal	16(%edx),%edx
2193	jnz	.L001dec1_loop_2
2194.byte	102,15,56,223,209
2195	movups	%xmm2,(%eax)
2196	ret
2197.size	aesni_decrypt,.-.L_aesni_decrypt_begin
2198.type	_aesni_encrypt3,@function
2199.align	16
2200_aesni_encrypt3:
2201	movups	(%edx),%xmm0
2202	shrl	$1,%ecx
2203	movups	16(%edx),%xmm1
2204	leal	32(%edx),%edx
2205	xorps	%xmm0,%xmm2
2206	pxor	%xmm0,%xmm3
2207	pxor	%xmm0,%xmm4
2208	movups	(%edx),%xmm0
2209.L002enc3_loop:
2210.byte	102,15,56,220,209
2211.byte	102,15,56,220,217
2212	decl	%ecx
2213.byte	102,15,56,220,225
2214	movups	16(%edx),%xmm1
2215.byte	102,15,56,220,208
2216.byte	102,15,56,220,216
2217	leal	32(%edx),%edx
2218.byte	102,15,56,220,224
2219	movups	(%edx),%xmm0
2220	jnz	.L002enc3_loop
2221.byte	102,15,56,220,209
2222.byte	102,15,56,220,217
2223.byte	102,15,56,220,225
2224.byte	102,15,56,221,208
2225.byte	102,15,56,221,216
2226.byte	102,15,56,221,224
2227	ret
2228.size	_aesni_encrypt3,.-_aesni_encrypt3
2229.type	_aesni_decrypt3,@function
2230.align	16
2231_aesni_decrypt3:
2232	movups	(%edx),%xmm0
2233	shrl	$1,%ecx
2234	movups	16(%edx),%xmm1
2235	leal	32(%edx),%edx
2236	xorps	%xmm0,%xmm2
2237	pxor	%xmm0,%xmm3
2238	pxor	%xmm0,%xmm4
2239	movups	(%edx),%xmm0
2240.L003dec3_loop:
2241.byte	102,15,56,222,209
2242.byte	102,15,56,222,217
2243	decl	%ecx
2244.byte	102,15,56,222,225
2245	movups	16(%edx),%xmm1
2246.byte	102,15,56,222,208
2247.byte	102,15,56,222,216
2248	leal	32(%edx),%edx
2249.byte	102,15,56,222,224
2250	movups	(%edx),%xmm0
2251	jnz	.L003dec3_loop
2252.byte	102,15,56,222,209
2253.byte	102,15,56,222,217
2254.byte	102,15,56,222,225
2255.byte	102,15,56,223,208
2256.byte	102,15,56,223,216
2257.byte	102,15,56,223,224
2258	ret
2259.size	_aesni_decrypt3,.-_aesni_decrypt3
2260.type	_aesni_encrypt4,@function
2261.align	16
2262_aesni_encrypt4:
2263	movups	(%edx),%xmm0
2264	movups	16(%edx),%xmm1
2265	shrl	$1,%ecx
2266	leal	32(%edx),%edx
2267	xorps	%xmm0,%xmm2
2268	pxor	%xmm0,%xmm3
2269	pxor	%xmm0,%xmm4
2270	pxor	%xmm0,%xmm5
2271	movups	(%edx),%xmm0
2272.L004enc4_loop:
2273.byte	102,15,56,220,209
2274.byte	102,15,56,220,217
2275	decl	%ecx
2276.byte	102,15,56,220,225
2277.byte	102,15,56,220,233
2278	movups	16(%edx),%xmm1
2279.byte	102,15,56,220,208
2280.byte	102,15,56,220,216
2281	leal	32(%edx),%edx
2282.byte	102,15,56,220,224
2283.byte	102,15,56,220,232
2284	movups	(%edx),%xmm0
2285	jnz	.L004enc4_loop
2286.byte	102,15,56,220,209
2287.byte	102,15,56,220,217
2288.byte	102,15,56,220,225
2289.byte	102,15,56,220,233
2290.byte	102,15,56,221,208
2291.byte	102,15,56,221,216
2292.byte	102,15,56,221,224
2293.byte	102,15,56,221,232
2294	ret
2295.size	_aesni_encrypt4,.-_aesni_encrypt4
2296.type	_aesni_decrypt4,@function
2297.align	16
2298_aesni_decrypt4:
2299	movups	(%edx),%xmm0
2300	movups	16(%edx),%xmm1
2301	shrl	$1,%ecx
2302	leal	32(%edx),%edx
2303	xorps	%xmm0,%xmm2
2304	pxor	%xmm0,%xmm3
2305	pxor	%xmm0,%xmm4
2306	pxor	%xmm0,%xmm5
2307	movups	(%edx),%xmm0
2308.L005dec4_loop:
2309.byte	102,15,56,222,209
2310.byte	102,15,56,222,217
2311	decl	%ecx
2312.byte	102,15,56,222,225
2313.byte	102,15,56,222,233
2314	movups	16(%edx),%xmm1
2315.byte	102,15,56,222,208
2316.byte	102,15,56,222,216
2317	leal	32(%edx),%edx
2318.byte	102,15,56,222,224
2319.byte	102,15,56,222,232
2320	movups	(%edx),%xmm0
2321	jnz	.L005dec4_loop
2322.byte	102,15,56,222,209
2323.byte	102,15,56,222,217
2324.byte	102,15,56,222,225
2325.byte	102,15,56,222,233
2326.byte	102,15,56,223,208
2327.byte	102,15,56,223,216
2328.byte	102,15,56,223,224
2329.byte	102,15,56,223,232
2330	ret
2331.size	_aesni_decrypt4,.-_aesni_decrypt4
2332.type	_aesni_encrypt6,@function
2333.align	16
2334_aesni_encrypt6:
2335	movups	(%edx),%xmm0
2336	shrl	$1,%ecx
2337	movups	16(%edx),%xmm1
2338	leal	32(%edx),%edx
2339	xorps	%xmm0,%xmm2
2340	pxor	%xmm0,%xmm3
2341.byte	102,15,56,220,209
2342	pxor	%xmm0,%xmm4
2343.byte	102,15,56,220,217
2344	pxor	%xmm0,%xmm5
2345	decl	%ecx
2346.byte	102,15,56,220,225
2347	pxor	%xmm0,%xmm6
2348.byte	102,15,56,220,233
2349	pxor	%xmm0,%xmm7
2350.byte	102,15,56,220,241
2351	movups	(%edx),%xmm0
2352.byte	102,15,56,220,249
2353	jmp	.L_aesni_encrypt6_enter
2354.align	16
2355.L006enc6_loop:
2356.byte	102,15,56,220,209
2357.byte	102,15,56,220,217
2358	decl	%ecx
2359.byte	102,15,56,220,225
2360.byte	102,15,56,220,233
2361.byte	102,15,56,220,241
2362.byte	102,15,56,220,249
2363.align	16
2364.L_aesni_encrypt6_enter:
2365	movups	16(%edx),%xmm1
2366.byte	102,15,56,220,208
2367.byte	102,15,56,220,216
2368	leal	32(%edx),%edx
2369.byte	102,15,56,220,224
2370.byte	102,15,56,220,232
2371.byte	102,15,56,220,240
2372.byte	102,15,56,220,248
2373	movups	(%edx),%xmm0
2374	jnz	.L006enc6_loop
2375.byte	102,15,56,220,209
2376.byte	102,15,56,220,217
2377.byte	102,15,56,220,225
2378.byte	102,15,56,220,233
2379.byte	102,15,56,220,241
2380.byte	102,15,56,220,249
2381.byte	102,15,56,221,208
2382.byte	102,15,56,221,216
2383.byte	102,15,56,221,224
2384.byte	102,15,56,221,232
2385.byte	102,15,56,221,240
2386.byte	102,15,56,221,248
2387	ret
2388.size	_aesni_encrypt6,.-_aesni_encrypt6
2389.type	_aesni_decrypt6,@function
2390.align	16
2391_aesni_decrypt6:
2392	movups	(%edx),%xmm0
2393	shrl	$1,%ecx
2394	movups	16(%edx),%xmm1
2395	leal	32(%edx),%edx
2396	xorps	%xmm0,%xmm2
2397	pxor	%xmm0,%xmm3
2398.byte	102,15,56,222,209
2399	pxor	%xmm0,%xmm4
2400.byte	102,15,56,222,217
2401	pxor	%xmm0,%xmm5
2402	decl	%ecx
2403.byte	102,15,56,222,225
2404	pxor	%xmm0,%xmm6
2405.byte	102,15,56,222,233
2406	pxor	%xmm0,%xmm7
2407.byte	102,15,56,222,241
2408	movups	(%edx),%xmm0
2409.byte	102,15,56,222,249
2410	jmp	.L_aesni_decrypt6_enter
2411.align	16
2412.L007dec6_loop:
2413.byte	102,15,56,222,209
2414.byte	102,15,56,222,217
2415	decl	%ecx
2416.byte	102,15,56,222,225
2417.byte	102,15,56,222,233
2418.byte	102,15,56,222,241
2419.byte	102,15,56,222,249
2420.align	16
2421.L_aesni_decrypt6_enter:
2422	movups	16(%edx),%xmm1
2423.byte	102,15,56,222,208
2424.byte	102,15,56,222,216
2425	leal	32(%edx),%edx
2426.byte	102,15,56,222,224
2427.byte	102,15,56,222,232
2428.byte	102,15,56,222,240
2429.byte	102,15,56,222,248
2430	movups	(%edx),%xmm0
2431	jnz	.L007dec6_loop
2432.byte	102,15,56,222,209
2433.byte	102,15,56,222,217
2434.byte	102,15,56,222,225
2435.byte	102,15,56,222,233
2436.byte	102,15,56,222,241
2437.byte	102,15,56,222,249
2438.byte	102,15,56,223,208
2439.byte	102,15,56,223,216
2440.byte	102,15,56,223,224
2441.byte	102,15,56,223,232
2442.byte	102,15,56,223,240
2443.byte	102,15,56,223,248
2444	ret
2445.size	_aesni_decrypt6,.-_aesni_decrypt6
2446.globl	aesni_ecb_encrypt
2447.type	aesni_ecb_encrypt,@function
2448.align	16
2449aesni_ecb_encrypt:
2450.L_aesni_ecb_encrypt_begin:
2451	pushl	%ebp
2452	pushl	%ebx
2453	pushl	%esi
2454	pushl	%edi
2455	movl	20(%esp),%esi
2456	movl	24(%esp),%edi
2457	movl	28(%esp),%eax
2458	movl	32(%esp),%edx
2459	movl	36(%esp),%ebx
2460	andl	$-16,%eax
2461	jz	.L008ecb_ret
2462	movl	240(%edx),%ecx
2463	testl	%ebx,%ebx
2464	jz	.L009ecb_decrypt
2465	movl	%edx,%ebp
2466	movl	%ecx,%ebx
2467	cmpl	$96,%eax
2468	jb	.L010ecb_enc_tail
2469	movdqu	(%esi),%xmm2
2470	movdqu	16(%esi),%xmm3
2471	movdqu	32(%esi),%xmm4
2472	movdqu	48(%esi),%xmm5
2473	movdqu	64(%esi),%xmm6
2474	movdqu	80(%esi),%xmm7
2475	leal	96(%esi),%esi
2476	subl	$96,%eax
2477	jmp	.L011ecb_enc_loop6_enter
2478.align	16
2479.L012ecb_enc_loop6:
2480	movups	%xmm2,(%edi)
2481	movdqu	(%esi),%xmm2
2482	movups	%xmm3,16(%edi)
2483	movdqu	16(%esi),%xmm3
2484	movups	%xmm4,32(%edi)
2485	movdqu	32(%esi),%xmm4
2486	movups	%xmm5,48(%edi)
2487	movdqu	48(%esi),%xmm5
2488	movups	%xmm6,64(%edi)
2489	movdqu	64(%esi),%xmm6
2490	movups	%xmm7,80(%edi)
2491	leal	96(%edi),%edi
2492	movdqu	80(%esi),%xmm7
2493	leal	96(%esi),%esi
2494.L011ecb_enc_loop6_enter:
2495	call	_aesni_encrypt6
2496	movl	%ebp,%edx
2497	movl	%ebx,%ecx
2498	subl	$96,%eax
2499	jnc	.L012ecb_enc_loop6
2500	movups	%xmm2,(%edi)
2501	movups	%xmm3,16(%edi)
2502	movups	%xmm4,32(%edi)
2503	movups	%xmm5,48(%edi)
2504	movups	%xmm6,64(%edi)
2505	movups	%xmm7,80(%edi)
2506	leal	96(%edi),%edi
2507	addl	$96,%eax
2508	jz	.L008ecb_ret
2509.L010ecb_enc_tail:
2510	movups	(%esi),%xmm2
2511	cmpl	$32,%eax
2512	jb	.L013ecb_enc_one
2513	movups	16(%esi),%xmm3
2514	je	.L014ecb_enc_two
2515	movups	32(%esi),%xmm4
2516	cmpl	$64,%eax
2517	jb	.L015ecb_enc_three
2518	movups	48(%esi),%xmm5
2519	je	.L016ecb_enc_four
2520	movups	64(%esi),%xmm6
2521	xorps	%xmm7,%xmm7
2522	call	_aesni_encrypt6
2523	movups	%xmm2,(%edi)
2524	movups	%xmm3,16(%edi)
2525	movups	%xmm4,32(%edi)
2526	movups	%xmm5,48(%edi)
2527	movups	%xmm6,64(%edi)
2528	jmp	.L008ecb_ret
2529.align	16
2530.L013ecb_enc_one:
2531	movups	(%edx),%xmm0
2532	movups	16(%edx),%xmm1
2533	leal	32(%edx),%edx
2534	xorps	%xmm0,%xmm2
2535.L017enc1_loop_3:
2536.byte	102,15,56,220,209
2537	decl	%ecx
2538	movups	(%edx),%xmm1
2539	leal	16(%edx),%edx
2540	jnz	.L017enc1_loop_3
2541.byte	102,15,56,221,209
2542	movups	%xmm2,(%edi)
2543	jmp	.L008ecb_ret
2544.align	16
2545.L014ecb_enc_two:
2546	xorps	%xmm4,%xmm4
2547	call	_aesni_encrypt3
2548	movups	%xmm2,(%edi)
2549	movups	%xmm3,16(%edi)
2550	jmp	.L008ecb_ret
2551.align	16
2552.L015ecb_enc_three:
2553	call	_aesni_encrypt3
2554	movups	%xmm2,(%edi)
2555	movups	%xmm3,16(%edi)
2556	movups	%xmm4,32(%edi)
2557	jmp	.L008ecb_ret
2558.align	16
2559.L016ecb_enc_four:
2560	call	_aesni_encrypt4
2561	movups	%xmm2,(%edi)
2562	movups	%xmm3,16(%edi)
2563	movups	%xmm4,32(%edi)
2564	movups	%xmm5,48(%edi)
2565	jmp	.L008ecb_ret
2566.align	16
2567.L009ecb_decrypt:
2568	movl	%edx,%ebp
2569	movl	%ecx,%ebx
2570	cmpl	$96,%eax
2571	jb	.L018ecb_dec_tail
2572	movdqu	(%esi),%xmm2
2573	movdqu	16(%esi),%xmm3
2574	movdqu	32(%esi),%xmm4
2575	movdqu	48(%esi),%xmm5
2576	movdqu	64(%esi),%xmm6
2577	movdqu	80(%esi),%xmm7
2578	leal	96(%esi),%esi
2579	subl	$96,%eax
2580	jmp	.L019ecb_dec_loop6_enter
2581.align	16
2582.L020ecb_dec_loop6:
2583	movups	%xmm2,(%edi)
2584	movdqu	(%esi),%xmm2
2585	movups	%xmm3,16(%edi)
2586	movdqu	16(%esi),%xmm3
2587	movups	%xmm4,32(%edi)
2588	movdqu	32(%esi),%xmm4
2589	movups	%xmm5,48(%edi)
2590	movdqu	48(%esi),%xmm5
2591	movups	%xmm6,64(%edi)
2592	movdqu	64(%esi),%xmm6
2593	movups	%xmm7,80(%edi)
2594	leal	96(%edi),%edi
2595	movdqu	80(%esi),%xmm7
2596	leal	96(%esi),%esi
2597.L019ecb_dec_loop6_enter:
2598	call	_aesni_decrypt6
2599	movl	%ebp,%edx
2600	movl	%ebx,%ecx
2601	subl	$96,%eax
2602	jnc	.L020ecb_dec_loop6
2603	movups	%xmm2,(%edi)
2604	movups	%xmm3,16(%edi)
2605	movups	%xmm4,32(%edi)
2606	movups	%xmm5,48(%edi)
2607	movups	%xmm6,64(%edi)
2608	movups	%xmm7,80(%edi)
2609	leal	96(%edi),%edi
2610	addl	$96,%eax
2611	jz	.L008ecb_ret
2612.L018ecb_dec_tail:
2613	movups	(%esi),%xmm2
2614	cmpl	$32,%eax
2615	jb	.L021ecb_dec_one
2616	movups	16(%esi),%xmm3
2617	je	.L022ecb_dec_two
2618	movups	32(%esi),%xmm4
2619	cmpl	$64,%eax
2620	jb	.L023ecb_dec_three
2621	movups	48(%esi),%xmm5
2622	je	.L024ecb_dec_four
2623	movups	64(%esi),%xmm6
2624	xorps	%xmm7,%xmm7
2625	call	_aesni_decrypt6
2626	movups	%xmm2,(%edi)
2627	movups	%xmm3,16(%edi)
2628	movups	%xmm4,32(%edi)
2629	movups	%xmm5,48(%edi)
2630	movups	%xmm6,64(%edi)
2631	jmp	.L008ecb_ret
2632.align	16
2633.L021ecb_dec_one:
2634	movups	(%edx),%xmm0
2635	movups	16(%edx),%xmm1
2636	leal	32(%edx),%edx
2637	xorps	%xmm0,%xmm2
2638.L025dec1_loop_4:
2639.byte	102,15,56,222,209
2640	decl	%ecx
2641	movups	(%edx),%xmm1
2642	leal	16(%edx),%edx
2643	jnz	.L025dec1_loop_4
2644.byte	102,15,56,223,209
2645	movups	%xmm2,(%edi)
2646	jmp	.L008ecb_ret
2647.align	16
2648.L022ecb_dec_two:
2649	xorps	%xmm4,%xmm4
2650	call	_aesni_decrypt3
2651	movups	%xmm2,(%edi)
2652	movups	%xmm3,16(%edi)
2653	jmp	.L008ecb_ret
2654.align	16
2655.L023ecb_dec_three:
2656	call	_aesni_decrypt3
2657	movups	%xmm2,(%edi)
2658	movups	%xmm3,16(%edi)
2659	movups	%xmm4,32(%edi)
2660	jmp	.L008ecb_ret
2661.align	16
2662.L024ecb_dec_four:
2663	call	_aesni_decrypt4
2664	movups	%xmm2,(%edi)
2665	movups	%xmm3,16(%edi)
2666	movups	%xmm4,32(%edi)
2667	movups	%xmm5,48(%edi)
2668.L008ecb_ret:
2669	popl	%edi
2670	popl	%esi
2671	popl	%ebx
2672	popl	%ebp
2673	ret
2674.size	aesni_ecb_encrypt,.-.L_aesni_ecb_encrypt_begin
2675.globl	aesni_ccm64_encrypt_blocks
2676.type	aesni_ccm64_encrypt_blocks,@function
2677.align	16
2678aesni_ccm64_encrypt_blocks:
2679.L_aesni_ccm64_encrypt_blocks_begin:
2680	pushl	%ebp
2681	pushl	%ebx
2682	pushl	%esi
2683	pushl	%edi
2684	movl	20(%esp),%esi
2685	movl	24(%esp),%edi
2686	movl	28(%esp),%eax
2687	movl	32(%esp),%edx
2688	movl	36(%esp),%ebx
2689	movl	40(%esp),%ecx
2690	movl	%esp,%ebp
2691	subl	$60,%esp
2692	andl	$-16,%esp
2693	movl	%ebp,48(%esp)
2694	movdqu	(%ebx),%xmm7
2695	movdqu	(%ecx),%xmm3
2696	movl	240(%edx),%ecx
2697	movl	$202182159,(%esp)
2698	movl	$134810123,4(%esp)
2699	movl	$67438087,8(%esp)
2700	movl	$66051,12(%esp)
2701	movl	$1,%ebx
2702	xorl	%ebp,%ebp
2703	movl	%ebx,16(%esp)
2704	movl	%ebp,20(%esp)
2705	movl	%ebp,24(%esp)
2706	movl	%ebp,28(%esp)
2707	shrl	$1,%ecx
2708	leal	(%edx),%ebp
2709	movdqa	(%esp),%xmm5
2710	movdqa	%xmm7,%xmm2
2711	movl	%ecx,%ebx
2712.byte	102,15,56,0,253
2713.L026ccm64_enc_outer:
2714	movups	(%ebp),%xmm0
2715	movl	%ebx,%ecx
2716	movups	(%esi),%xmm6
2717	xorps	%xmm0,%xmm2
2718	movups	16(%ebp),%xmm1
2719	xorps	%xmm6,%xmm0
2720	leal	32(%ebp),%edx
2721	xorps	%xmm0,%xmm3
2722	movups	(%edx),%xmm0
2723.L027ccm64_enc2_loop:
2724.byte	102,15,56,220,209
2725	decl	%ecx
2726.byte	102,15,56,220,217
2727	movups	16(%edx),%xmm1
2728.byte	102,15,56,220,208
2729	leal	32(%edx),%edx
2730.byte	102,15,56,220,216
2731	movups	(%edx),%xmm0
2732	jnz	.L027ccm64_enc2_loop
2733.byte	102,15,56,220,209
2734.byte	102,15,56,220,217
2735	paddq	16(%esp),%xmm7
2736.byte	102,15,56,221,208
2737.byte	102,15,56,221,216
2738	decl	%eax
2739	leal	16(%esi),%esi
2740	xorps	%xmm2,%xmm6
2741	movdqa	%xmm7,%xmm2
2742	movups	%xmm6,(%edi)
2743	leal	16(%edi),%edi
2744.byte	102,15,56,0,213
2745	jnz	.L026ccm64_enc_outer
2746	movl	48(%esp),%esp
2747	movl	40(%esp),%edi
2748	movups	%xmm3,(%edi)
2749	popl	%edi
2750	popl	%esi
2751	popl	%ebx
2752	popl	%ebp
2753	ret
2754.size	aesni_ccm64_encrypt_blocks,.-.L_aesni_ccm64_encrypt_blocks_begin
2755.globl	aesni_ccm64_decrypt_blocks
2756.type	aesni_ccm64_decrypt_blocks,@function
2757.align	16
2758aesni_ccm64_decrypt_blocks:
2759.L_aesni_ccm64_decrypt_blocks_begin:
2760	pushl	%ebp
2761	pushl	%ebx
2762	pushl	%esi
2763	pushl	%edi
2764	movl	20(%esp),%esi
2765	movl	24(%esp),%edi
2766	movl	28(%esp),%eax
2767	movl	32(%esp),%edx
2768	movl	36(%esp),%ebx
2769	movl	40(%esp),%ecx
2770	movl	%esp,%ebp
2771	subl	$60,%esp
2772	andl	$-16,%esp
2773	movl	%ebp,48(%esp)
2774	movdqu	(%ebx),%xmm7
2775	movdqu	(%ecx),%xmm3
2776	movl	240(%edx),%ecx
2777	movl	$202182159,(%esp)
2778	movl	$134810123,4(%esp)
2779	movl	$67438087,8(%esp)
2780	movl	$66051,12(%esp)
2781	movl	$1,%ebx
2782	xorl	%ebp,%ebp
2783	movl	%ebx,16(%esp)
2784	movl	%ebp,20(%esp)
2785	movl	%ebp,24(%esp)
2786	movl	%ebp,28(%esp)
2787	movdqa	(%esp),%xmm5
2788	movdqa	%xmm7,%xmm2
2789	movl	%edx,%ebp
2790	movl	%ecx,%ebx
2791.byte	102,15,56,0,253
2792	movups	(%edx),%xmm0
2793	movups	16(%edx),%xmm1
2794	leal	32(%edx),%edx
2795	xorps	%xmm0,%xmm2
2796.L028enc1_loop_5:
2797.byte	102,15,56,220,209
2798	decl	%ecx
2799	movups	(%edx),%xmm1
2800	leal	16(%edx),%edx
2801	jnz	.L028enc1_loop_5
2802.byte	102,15,56,221,209
2803	movups	(%esi),%xmm6
2804	paddq	16(%esp),%xmm7
2805	leal	16(%esi),%esi
2806	jmp	.L029ccm64_dec_outer
2807.align	16
2808.L029ccm64_dec_outer:
2809	xorps	%xmm2,%xmm6
2810	movdqa	%xmm7,%xmm2
2811	movl	%ebx,%ecx
2812	movups	%xmm6,(%edi)
2813	leal	16(%edi),%edi
2814.byte	102,15,56,0,213
2815	subl	$1,%eax
2816	jz	.L030ccm64_dec_break
2817	movups	(%ebp),%xmm0
2818	shrl	$1,%ecx
2819	movups	16(%ebp),%xmm1
2820	xorps	%xmm0,%xmm6
2821	leal	32(%ebp),%edx
2822	xorps	%xmm0,%xmm2
2823	xorps	%xmm6,%xmm3
2824	movups	(%edx),%xmm0
2825.L031ccm64_dec2_loop:
2826.byte	102,15,56,220,209
2827	decl	%ecx
2828.byte	102,15,56,220,217
2829	movups	16(%edx),%xmm1
2830.byte	102,15,56,220,208
2831	leal	32(%edx),%edx
2832.byte	102,15,56,220,216
2833	movups	(%edx),%xmm0
2834	jnz	.L031ccm64_dec2_loop
2835	movups	(%esi),%xmm6
2836	paddq	16(%esp),%xmm7
2837.byte	102,15,56,220,209
2838.byte	102,15,56,220,217
2839	leal	16(%esi),%esi
2840.byte	102,15,56,221,208
2841.byte	102,15,56,221,216
2842	jmp	.L029ccm64_dec_outer
2843.align	16
2844.L030ccm64_dec_break:
2845	movl	%ebp,%edx
2846	movups	(%edx),%xmm0
2847	movups	16(%edx),%xmm1
2848	xorps	%xmm0,%xmm6
2849	leal	32(%edx),%edx
2850	xorps	%xmm6,%xmm3
2851.L032enc1_loop_6:
2852.byte	102,15,56,220,217
2853	decl	%ecx
2854	movups	(%edx),%xmm1
2855	leal	16(%edx),%edx
2856	jnz	.L032enc1_loop_6
2857.byte	102,15,56,221,217
2858	movl	48(%esp),%esp
2859	movl	40(%esp),%edi
2860	movups	%xmm3,(%edi)
2861	popl	%edi
2862	popl	%esi
2863	popl	%ebx
2864	popl	%ebp
2865	ret
2866.size	aesni_ccm64_decrypt_blocks,.-.L_aesni_ccm64_decrypt_blocks_begin
2867.globl	aesni_ctr32_encrypt_blocks
2868.type	aesni_ctr32_encrypt_blocks,@function
2869.align	16
2870aesni_ctr32_encrypt_blocks:
2871.L_aesni_ctr32_encrypt_blocks_begin:
2872	pushl	%ebp
2873	pushl	%ebx
2874	pushl	%esi
2875	pushl	%edi
2876	movl	20(%esp),%esi
2877	movl	24(%esp),%edi
2878	movl	28(%esp),%eax
2879	movl	32(%esp),%edx
2880	movl	36(%esp),%ebx
2881	movl	%esp,%ebp
2882	subl	$88,%esp
2883	andl	$-16,%esp
2884	movl	%ebp,80(%esp)
2885	cmpl	$1,%eax
2886	je	.L033ctr32_one_shortcut
2887	movdqu	(%ebx),%xmm7
2888	movl	$202182159,(%esp)
2889	movl	$134810123,4(%esp)
2890	movl	$67438087,8(%esp)
2891	movl	$66051,12(%esp)
2892	movl	$6,%ecx
2893	xorl	%ebp,%ebp
2894	movl	%ecx,16(%esp)
2895	movl	%ecx,20(%esp)
2896	movl	%ecx,24(%esp)
2897	movl	%ebp,28(%esp)
2898.byte	102,15,58,22,251,3
2899.byte	102,15,58,34,253,3
2900	movl	240(%edx),%ecx
2901	bswap	%ebx
2902	pxor	%xmm1,%xmm1
2903	pxor	%xmm0,%xmm0
2904	movdqa	(%esp),%xmm2
2905.byte	102,15,58,34,203,0
2906	leal	3(%ebx),%ebp
2907.byte	102,15,58,34,197,0
2908	incl	%ebx
2909.byte	102,15,58,34,203,1
2910	incl	%ebp
2911.byte	102,15,58,34,197,1
2912	incl	%ebx
2913.byte	102,15,58,34,203,2
2914	incl	%ebp
2915.byte	102,15,58,34,197,2
2916	movdqa	%xmm1,48(%esp)
2917.byte	102,15,56,0,202
2918	movdqa	%xmm0,64(%esp)
2919.byte	102,15,56,0,194
2920	pshufd	$192,%xmm1,%xmm2
2921	pshufd	$128,%xmm1,%xmm3
2922	cmpl	$6,%eax
2923	jb	.L034ctr32_tail
2924	movdqa	%xmm7,32(%esp)
2925	shrl	$1,%ecx
2926	movl	%edx,%ebp
2927	movl	%ecx,%ebx
2928	subl	$6,%eax
2929	jmp	.L035ctr32_loop6
2930.align	16
2931.L035ctr32_loop6:
2932	pshufd	$64,%xmm1,%xmm4
2933	movdqa	32(%esp),%xmm1
2934	pshufd	$192,%xmm0,%xmm5
2935	por	%xmm1,%xmm2
2936	pshufd	$128,%xmm0,%xmm6
2937	por	%xmm1,%xmm3
2938	pshufd	$64,%xmm0,%xmm7
2939	por	%xmm1,%xmm4
2940	por	%xmm1,%xmm5
2941	por	%xmm1,%xmm6
2942	por	%xmm1,%xmm7
2943	movups	(%ebp),%xmm0
2944	movups	16(%ebp),%xmm1
2945	leal	32(%ebp),%edx
2946	decl	%ecx
2947	pxor	%xmm0,%xmm2
2948	pxor	%xmm0,%xmm3
2949.byte	102,15,56,220,209
2950	pxor	%xmm0,%xmm4
2951.byte	102,15,56,220,217
2952	pxor	%xmm0,%xmm5
2953.byte	102,15,56,220,225
2954	pxor	%xmm0,%xmm6
2955.byte	102,15,56,220,233
2956	pxor	%xmm0,%xmm7
2957.byte	102,15,56,220,241
2958	movups	(%edx),%xmm0
2959.byte	102,15,56,220,249
2960	call	.L_aesni_encrypt6_enter
2961	movups	(%esi),%xmm1
2962	movups	16(%esi),%xmm0
2963	xorps	%xmm1,%xmm2
2964	movups	32(%esi),%xmm1
2965	xorps	%xmm0,%xmm3
2966	movups	%xmm2,(%edi)
2967	movdqa	16(%esp),%xmm0
2968	xorps	%xmm1,%xmm4
2969	movdqa	48(%esp),%xmm1
2970	movups	%xmm3,16(%edi)
2971	movups	%xmm4,32(%edi)
2972	paddd	%xmm0,%xmm1
2973	paddd	64(%esp),%xmm0
2974	movdqa	(%esp),%xmm2
2975	movups	48(%esi),%xmm3
2976	movups	64(%esi),%xmm4
2977	xorps	%xmm3,%xmm5
2978	movups	80(%esi),%xmm3
2979	leal	96(%esi),%esi
2980	movdqa	%xmm1,48(%esp)
2981.byte	102,15,56,0,202
2982	xorps	%xmm4,%xmm6
2983	movups	%xmm5,48(%edi)
2984	xorps	%xmm3,%xmm7
2985	movdqa	%xmm0,64(%esp)
2986.byte	102,15,56,0,194
2987	movups	%xmm6,64(%edi)
2988	pshufd	$192,%xmm1,%xmm2
2989	movups	%xmm7,80(%edi)
2990	leal	96(%edi),%edi
2991	movl	%ebx,%ecx
2992	pshufd	$128,%xmm1,%xmm3
2993	subl	$6,%eax
2994	jnc	.L035ctr32_loop6
2995	addl	$6,%eax
2996	jz	.L036ctr32_ret
2997	movl	%ebp,%edx
2998	leal	1(,%ecx,2),%ecx
2999	movdqa	32(%esp),%xmm7
3000.L034ctr32_tail:
3001	por	%xmm7,%xmm2
3002	cmpl	$2,%eax
3003	jb	.L037ctr32_one
3004	pshufd	$64,%xmm1,%xmm4
3005	por	%xmm7,%xmm3
3006	je	.L038ctr32_two
3007	pshufd	$192,%xmm0,%xmm5
3008	por	%xmm7,%xmm4
3009	cmpl	$4,%eax
3010	jb	.L039ctr32_three
3011	pshufd	$128,%xmm0,%xmm6
3012	por	%xmm7,%xmm5
3013	je	.L040ctr32_four
3014	por	%xmm7,%xmm6
3015	call	_aesni_encrypt6
3016	movups	(%esi),%xmm1
3017	movups	16(%esi),%xmm0
3018	xorps	%xmm1,%xmm2
3019	movups	32(%esi),%xmm1
3020	xorps	%xmm0,%xmm3
3021	movups	48(%esi),%xmm0
3022	xorps	%xmm1,%xmm4
3023	movups	64(%esi),%xmm1
3024	xorps	%xmm0,%xmm5
3025	movups	%xmm2,(%edi)
3026	xorps	%xmm1,%xmm6
3027	movups	%xmm3,16(%edi)
3028	movups	%xmm4,32(%edi)
3029	movups	%xmm5,48(%edi)
3030	movups	%xmm6,64(%edi)
3031	jmp	.L036ctr32_ret
3032.align	16
3033.L033ctr32_one_shortcut:
3034	movups	(%ebx),%xmm2
3035	movl	240(%edx),%ecx
3036.L037ctr32_one:
3037	movups	(%edx),%xmm0
3038	movups	16(%edx),%xmm1
3039	leal	32(%edx),%edx
3040	xorps	%xmm0,%xmm2
3041.L041enc1_loop_7:
3042.byte	102,15,56,220,209
3043	decl	%ecx
3044	movups	(%edx),%xmm1
3045	leal	16(%edx),%edx
3046	jnz	.L041enc1_loop_7
3047.byte	102,15,56,221,209
3048	movups	(%esi),%xmm6
3049	xorps	%xmm2,%xmm6
3050	movups	%xmm6,(%edi)
3051	jmp	.L036ctr32_ret
3052.align	16
3053.L038ctr32_two:
3054	call	_aesni_encrypt3
3055	movups	(%esi),%xmm5
3056	movups	16(%esi),%xmm6
3057	xorps	%xmm5,%xmm2
3058	xorps	%xmm6,%xmm3
3059	movups	%xmm2,(%edi)
3060	movups	%xmm3,16(%edi)
3061	jmp	.L036ctr32_ret
3062.align	16
3063.L039ctr32_three:
3064	call	_aesni_encrypt3
3065	movups	(%esi),%xmm5
3066	movups	16(%esi),%xmm6
3067	xorps	%xmm5,%xmm2
3068	movups	32(%esi),%xmm7
3069	xorps	%xmm6,%xmm3
3070	movups	%xmm2,(%edi)
3071	xorps	%xmm7,%xmm4
3072	movups	%xmm3,16(%edi)
3073	movups	%xmm4,32(%edi)
3074	jmp	.L036ctr32_ret
3075.align	16
3076.L040ctr32_four:
3077	call	_aesni_encrypt4
3078	movups	(%esi),%xmm6
3079	movups	16(%esi),%xmm7
3080	movups	32(%esi),%xmm1
3081	xorps	%xmm6,%xmm2
3082	movups	48(%esi),%xmm0
3083	xorps	%xmm7,%xmm3
3084	movups	%xmm2,(%edi)
3085	xorps	%xmm1,%xmm4
3086	movups	%xmm3,16(%edi)
3087	xorps	%xmm0,%xmm5
3088	movups	%xmm4,32(%edi)
3089	movups	%xmm5,48(%edi)
3090.L036ctr32_ret:
3091	movl	80(%esp),%esp
3092	popl	%edi
3093	popl	%esi
3094	popl	%ebx
3095	popl	%ebp
3096	ret
3097.size	aesni_ctr32_encrypt_blocks,.-.L_aesni_ctr32_encrypt_blocks_begin
3098.globl	aesni_xts_encrypt
3099.type	aesni_xts_encrypt,@function
3100.align	16
3101aesni_xts_encrypt:
3102.L_aesni_xts_encrypt_begin:
3103	pushl	%ebp
3104	pushl	%ebx
3105	pushl	%esi
3106	pushl	%edi
3107	movl	36(%esp),%edx
3108	movl	40(%esp),%esi
3109	movl	240(%edx),%ecx
3110	movups	(%esi),%xmm2
3111	movups	(%edx),%xmm0
3112	movups	16(%edx),%xmm1
3113	leal	32(%edx),%edx
3114	xorps	%xmm0,%xmm2
3115.L042enc1_loop_8:
3116.byte	102,15,56,220,209
3117	decl	%ecx
3118	movups	(%edx),%xmm1
3119	leal	16(%edx),%edx
3120	jnz	.L042enc1_loop_8
3121.byte	102,15,56,221,209
3122	movl	20(%esp),%esi
3123	movl	24(%esp),%edi
3124	movl	28(%esp),%eax
3125	movl	32(%esp),%edx
3126	movl	%esp,%ebp
3127	subl	$120,%esp
3128	movl	240(%edx),%ecx
3129	andl	$-16,%esp
3130	movl	$135,96(%esp)
3131	movl	$0,100(%esp)
3132	movl	$1,104(%esp)
3133	movl	$0,108(%esp)
3134	movl	%eax,112(%esp)
3135	movl	%ebp,116(%esp)
3136	movdqa	%xmm2,%xmm1
3137	pxor	%xmm0,%xmm0
3138	movdqa	96(%esp),%xmm3
3139	pcmpgtd	%xmm1,%xmm0
3140	andl	$-16,%eax
3141	movl	%edx,%ebp
3142	movl	%ecx,%ebx
3143	subl	$96,%eax
3144	jc	.L043xts_enc_short
3145	shrl	$1,%ecx
3146	movl	%ecx,%ebx
3147	jmp	.L044xts_enc_loop6
3148.align	16
3149.L044xts_enc_loop6:
3150	pshufd	$19,%xmm0,%xmm2
3151	pxor	%xmm0,%xmm0
3152	movdqa	%xmm1,(%esp)
3153	paddq	%xmm1,%xmm1
3154	pand	%xmm3,%xmm2
3155	pcmpgtd	%xmm1,%xmm0
3156	pxor	%xmm2,%xmm1
3157	pshufd	$19,%xmm0,%xmm2
3158	pxor	%xmm0,%xmm0
3159	movdqa	%xmm1,16(%esp)
3160	paddq	%xmm1,%xmm1
3161	pand	%xmm3,%xmm2
3162	pcmpgtd	%xmm1,%xmm0
3163	pxor	%xmm2,%xmm1
3164	pshufd	$19,%xmm0,%xmm2
3165	pxor	%xmm0,%xmm0
3166	movdqa	%xmm1,32(%esp)
3167	paddq	%xmm1,%xmm1
3168	pand	%xmm3,%xmm2
3169	pcmpgtd	%xmm1,%xmm0
3170	pxor	%xmm2,%xmm1
3171	pshufd	$19,%xmm0,%xmm2
3172	pxor	%xmm0,%xmm0
3173	movdqa	%xmm1,48(%esp)
3174	paddq	%xmm1,%xmm1
3175	pand	%xmm3,%xmm2
3176	pcmpgtd	%xmm1,%xmm0
3177	pxor	%xmm2,%xmm1
3178	pshufd	$19,%xmm0,%xmm7
3179	movdqa	%xmm1,64(%esp)
3180	paddq	%xmm1,%xmm1
3181	movups	(%ebp),%xmm0
3182	pand	%xmm3,%xmm7
3183	movups	(%esi),%xmm2
3184	pxor	%xmm1,%xmm7
3185	movdqu	16(%esi),%xmm3
3186	xorps	%xmm0,%xmm2
3187	movdqu	32(%esi),%xmm4
3188	pxor	%xmm0,%xmm3
3189	movdqu	48(%esi),%xmm5
3190	pxor	%xmm0,%xmm4
3191	movdqu	64(%esi),%xmm6
3192	pxor	%xmm0,%xmm5
3193	movdqu	80(%esi),%xmm1
3194	pxor	%xmm0,%xmm6
3195	leal	96(%esi),%esi
3196	pxor	(%esp),%xmm2
3197	movdqa	%xmm7,80(%esp)
3198	pxor	%xmm1,%xmm7
3199	movups	16(%ebp),%xmm1
3200	leal	32(%ebp),%edx
3201	pxor	16(%esp),%xmm3
3202.byte	102,15,56,220,209
3203	pxor	32(%esp),%xmm4
3204.byte	102,15,56,220,217
3205	pxor	48(%esp),%xmm5
3206	decl	%ecx
3207.byte	102,15,56,220,225
3208	pxor	64(%esp),%xmm6
3209.byte	102,15,56,220,233
3210	pxor	%xmm0,%xmm7
3211.byte	102,15,56,220,241
3212	movups	(%edx),%xmm0
3213.byte	102,15,56,220,249
3214	call	.L_aesni_encrypt6_enter
3215	movdqa	80(%esp),%xmm1
3216	pxor	%xmm0,%xmm0
3217	xorps	(%esp),%xmm2
3218	pcmpgtd	%xmm1,%xmm0
3219	xorps	16(%esp),%xmm3
3220	movups	%xmm2,(%edi)
3221	xorps	32(%esp),%xmm4
3222	movups	%xmm3,16(%edi)
3223	xorps	48(%esp),%xmm5
3224	movups	%xmm4,32(%edi)
3225	xorps	64(%esp),%xmm6
3226	movups	%xmm5,48(%edi)
3227	xorps	%xmm1,%xmm7
3228	movups	%xmm6,64(%edi)
3229	pshufd	$19,%xmm0,%xmm2
3230	movups	%xmm7,80(%edi)
3231	leal	96(%edi),%edi
3232	movdqa	96(%esp),%xmm3
3233	pxor	%xmm0,%xmm0
3234	paddq	%xmm1,%xmm1
3235	pand	%xmm3,%xmm2
3236	pcmpgtd	%xmm1,%xmm0
3237	movl	%ebx,%ecx
3238	pxor	%xmm2,%xmm1
3239	subl	$96,%eax
3240	jnc	.L044xts_enc_loop6
3241	leal	1(,%ecx,2),%ecx
3242	movl	%ebp,%edx
3243	movl	%ecx,%ebx
3244.L043xts_enc_short:
3245	addl	$96,%eax
3246	jz	.L045xts_enc_done6x
3247	movdqa	%xmm1,%xmm5
3248	cmpl	$32,%eax
3249	jb	.L046xts_enc_one
3250	pshufd	$19,%xmm0,%xmm2
3251	pxor	%xmm0,%xmm0
3252	paddq	%xmm1,%xmm1
3253	pand	%xmm3,%xmm2
3254	pcmpgtd	%xmm1,%xmm0
3255	pxor	%xmm2,%xmm1
3256	je	.L047xts_enc_two
3257	pshufd	$19,%xmm0,%xmm2
3258	pxor	%xmm0,%xmm0
3259	movdqa	%xmm1,%xmm6
3260	paddq	%xmm1,%xmm1
3261	pand	%xmm3,%xmm2
3262	pcmpgtd	%xmm1,%xmm0
3263	pxor	%xmm2,%xmm1
3264	cmpl	$64,%eax
3265	jb	.L048xts_enc_three
3266	pshufd	$19,%xmm0,%xmm2
3267	pxor	%xmm0,%xmm0
3268	movdqa	%xmm1,%xmm7
3269	paddq	%xmm1,%xmm1
3270	pand	%xmm3,%xmm2
3271	pcmpgtd	%xmm1,%xmm0
3272	pxor	%xmm2,%xmm1
3273	movdqa	%xmm5,(%esp)
3274	movdqa	%xmm6,16(%esp)
3275	je	.L049xts_enc_four
3276	movdqa	%xmm7,32(%esp)
3277	pshufd	$19,%xmm0,%xmm7
3278	movdqa	%xmm1,48(%esp)
3279	paddq	%xmm1,%xmm1
3280	pand	%xmm3,%xmm7
3281	pxor	%xmm1,%xmm7
3282	movdqu	(%esi),%xmm2
3283	movdqu	16(%esi),%xmm3
3284	movdqu	32(%esi),%xmm4
3285	pxor	(%esp),%xmm2
3286	movdqu	48(%esi),%xmm5
3287	pxor	16(%esp),%xmm3
3288	movdqu	64(%esi),%xmm6
3289	pxor	32(%esp),%xmm4
3290	leal	80(%esi),%esi
3291	pxor	48(%esp),%xmm5
3292	movdqa	%xmm7,64(%esp)
3293	pxor	%xmm7,%xmm6
3294	call	_aesni_encrypt6
3295	movaps	64(%esp),%xmm1
3296	xorps	(%esp),%xmm2
3297	xorps	16(%esp),%xmm3
3298	xorps	32(%esp),%xmm4
3299	movups	%xmm2,(%edi)
3300	xorps	48(%esp),%xmm5
3301	movups	%xmm3,16(%edi)
3302	xorps	%xmm1,%xmm6
3303	movups	%xmm4,32(%edi)
3304	movups	%xmm5,48(%edi)
3305	movups	%xmm6,64(%edi)
3306	leal	80(%edi),%edi
3307	jmp	.L050xts_enc_done
3308.align	16
3309.L046xts_enc_one:
3310	movups	(%esi),%xmm2
3311	leal	16(%esi),%esi
3312	xorps	%xmm5,%xmm2
3313	movups	(%edx),%xmm0
3314	movups	16(%edx),%xmm1
3315	leal	32(%edx),%edx
3316	xorps	%xmm0,%xmm2
3317.L051enc1_loop_9:
3318.byte	102,15,56,220,209
3319	decl	%ecx
3320	movups	(%edx),%xmm1
3321	leal	16(%edx),%edx
3322	jnz	.L051enc1_loop_9
3323.byte	102,15,56,221,209
3324	xorps	%xmm5,%xmm2
3325	movups	%xmm2,(%edi)
3326	leal	16(%edi),%edi
3327	movdqa	%xmm5,%xmm1
3328	jmp	.L050xts_enc_done
3329.align	16
3330.L047xts_enc_two:
3331	movaps	%xmm1,%xmm6
3332	movups	(%esi),%xmm2
3333	movups	16(%esi),%xmm3
3334	leal	32(%esi),%esi
3335	xorps	%xmm5,%xmm2
3336	xorps	%xmm6,%xmm3
3337	xorps	%xmm4,%xmm4
3338	call	_aesni_encrypt3
3339	xorps	%xmm5,%xmm2
3340	xorps	%xmm6,%xmm3
3341	movups	%xmm2,(%edi)
3342	movups	%xmm3,16(%edi)
3343	leal	32(%edi),%edi
3344	movdqa	%xmm6,%xmm1
3345	jmp	.L050xts_enc_done
3346.align	16
3347.L048xts_enc_three:
3348	movaps	%xmm1,%xmm7
3349	movups	(%esi),%xmm2
3350	movups	16(%esi),%xmm3
3351	movups	32(%esi),%xmm4
3352	leal	48(%esi),%esi
3353	xorps	%xmm5,%xmm2
3354	xorps	%xmm6,%xmm3
3355	xorps	%xmm7,%xmm4
3356	call	_aesni_encrypt3
3357	xorps	%xmm5,%xmm2
3358	xorps	%xmm6,%xmm3
3359	xorps	%xmm7,%xmm4
3360	movups	%xmm2,(%edi)
3361	movups	%xmm3,16(%edi)
3362	movups	%xmm4,32(%edi)
3363	leal	48(%edi),%edi
3364	movdqa	%xmm7,%xmm1
3365	jmp	.L050xts_enc_done
3366.align	16
3367.L049xts_enc_four:
3368	movaps	%xmm1,%xmm6
3369	movups	(%esi),%xmm2
3370	movups	16(%esi),%xmm3
3371	movups	32(%esi),%xmm4
3372	xorps	(%esp),%xmm2
3373	movups	48(%esi),%xmm5
3374	leal	64(%esi),%esi
3375	xorps	16(%esp),%xmm3
3376	xorps	%xmm7,%xmm4
3377	xorps	%xmm6,%xmm5
3378	call	_aesni_encrypt4
3379	xorps	(%esp),%xmm2
3380	xorps	16(%esp),%xmm3
3381	xorps	%xmm7,%xmm4
3382	movups	%xmm2,(%edi)
3383	xorps	%xmm6,%xmm5
3384	movups	%xmm3,16(%edi)
3385	movups	%xmm4,32(%edi)
3386	movups	%xmm5,48(%edi)
3387	leal	64(%edi),%edi
3388	movdqa	%xmm6,%xmm1
3389	jmp	.L050xts_enc_done
3390.align	16
3391.L045xts_enc_done6x:
3392	movl	112(%esp),%eax
3393	andl	$15,%eax
3394	jz	.L052xts_enc_ret
3395	movdqa	%xmm1,%xmm5
3396	movl	%eax,112(%esp)
3397	jmp	.L053xts_enc_steal
3398.align	16
3399.L050xts_enc_done:
3400	movl	112(%esp),%eax
3401	pxor	%xmm0,%xmm0
3402	andl	$15,%eax
3403	jz	.L052xts_enc_ret
3404	pcmpgtd	%xmm1,%xmm0
3405	movl	%eax,112(%esp)
3406	pshufd	$19,%xmm0,%xmm5
3407	paddq	%xmm1,%xmm1
3408	pand	96(%esp),%xmm5
3409	pxor	%xmm1,%xmm5
3410.L053xts_enc_steal:
3411	movzbl	(%esi),%ecx
3412	movzbl	-16(%edi),%edx
3413	leal	1(%esi),%esi
3414	movb	%cl,-16(%edi)
3415	movb	%dl,(%edi)
3416	leal	1(%edi),%edi
3417	subl	$1,%eax
3418	jnz	.L053xts_enc_steal
3419	subl	112(%esp),%edi
3420	movl	%ebp,%edx
3421	movl	%ebx,%ecx
3422	movups	-16(%edi),%xmm2
3423	xorps	%xmm5,%xmm2
3424	movups	(%edx),%xmm0
3425	movups	16(%edx),%xmm1
3426	leal	32(%edx),%edx
3427	xorps	%xmm0,%xmm2
3428.L054enc1_loop_10:
3429.byte	102,15,56,220,209
3430	decl	%ecx
3431	movups	(%edx),%xmm1
3432	leal	16(%edx),%edx
3433	jnz	.L054enc1_loop_10
3434.byte	102,15,56,221,209
3435	xorps	%xmm5,%xmm2
3436	movups	%xmm2,-16(%edi)
3437.L052xts_enc_ret:
3438	movl	116(%esp),%esp
3439	popl	%edi
3440	popl	%esi
3441	popl	%ebx
3442	popl	%ebp
3443	ret
3444.size	aesni_xts_encrypt,.-.L_aesni_xts_encrypt_begin
3445.globl	aesni_xts_decrypt
3446.type	aesni_xts_decrypt,@function
3447.align	16
3448aesni_xts_decrypt:
3449.L_aesni_xts_decrypt_begin:
3450	pushl	%ebp
3451	pushl	%ebx
3452	pushl	%esi
3453	pushl	%edi
3454	movl	36(%esp),%edx
3455	movl	40(%esp),%esi
3456	movl	240(%edx),%ecx
3457	movups	(%esi),%xmm2
3458	movups	(%edx),%xmm0
3459	movups	16(%edx),%xmm1
3460	leal	32(%edx),%edx
3461	xorps	%xmm0,%xmm2
3462.L055enc1_loop_11:
3463.byte	102,15,56,220,209
3464	decl	%ecx
3465	movups	(%edx),%xmm1
3466	leal	16(%edx),%edx
3467	jnz	.L055enc1_loop_11
3468.byte	102,15,56,221,209
3469	movl	20(%esp),%esi
3470	movl	24(%esp),%edi
3471	movl	28(%esp),%eax
3472	movl	32(%esp),%edx
3473	movl	%esp,%ebp
3474	subl	$120,%esp
3475	andl	$-16,%esp
3476	xorl	%ebx,%ebx
3477	testl	$15,%eax
3478	setnz	%bl
3479	shll	$4,%ebx
3480	subl	%ebx,%eax
3481	movl	$135,96(%esp)
3482	movl	$0,100(%esp)
3483	movl	$1,104(%esp)
3484	movl	$0,108(%esp)
3485	movl	%eax,112(%esp)
3486	movl	%ebp,116(%esp)
3487	movl	240(%edx),%ecx
3488	movl	%edx,%ebp
3489	movl	%ecx,%ebx
3490	movdqa	%xmm2,%xmm1
3491	pxor	%xmm0,%xmm0
3492	movdqa	96(%esp),%xmm3
3493	pcmpgtd	%xmm1,%xmm0
3494	andl	$-16,%eax
3495	subl	$96,%eax
3496	jc	.L056xts_dec_short
3497	shrl	$1,%ecx
3498	movl	%ecx,%ebx
3499	jmp	.L057xts_dec_loop6
3500.align	16
3501.L057xts_dec_loop6:
3502	pshufd	$19,%xmm0,%xmm2
3503	pxor	%xmm0,%xmm0
3504	movdqa	%xmm1,(%esp)
3505	paddq	%xmm1,%xmm1
3506	pand	%xmm3,%xmm2
3507	pcmpgtd	%xmm1,%xmm0
3508	pxor	%xmm2,%xmm1
3509	pshufd	$19,%xmm0,%xmm2
3510	pxor	%xmm0,%xmm0
3511	movdqa	%xmm1,16(%esp)
3512	paddq	%xmm1,%xmm1
3513	pand	%xmm3,%xmm2
3514	pcmpgtd	%xmm1,%xmm0
3515	pxor	%xmm2,%xmm1
3516	pshufd	$19,%xmm0,%xmm2
3517	pxor	%xmm0,%xmm0
3518	movdqa	%xmm1,32(%esp)
3519	paddq	%xmm1,%xmm1
3520	pand	%xmm3,%xmm2
3521	pcmpgtd	%xmm1,%xmm0
3522	pxor	%xmm2,%xmm1
3523	pshufd	$19,%xmm0,%xmm2
3524	pxor	%xmm0,%xmm0
3525	movdqa	%xmm1,48(%esp)
3526	paddq	%xmm1,%xmm1
3527	pand	%xmm3,%xmm2
3528	pcmpgtd	%xmm1,%xmm0
3529	pxor	%xmm2,%xmm1
3530	pshufd	$19,%xmm0,%xmm7
3531	movdqa	%xmm1,64(%esp)
3532	paddq	%xmm1,%xmm1
3533	movups	(%ebp),%xmm0
3534	pand	%xmm3,%xmm7
3535	movups	(%esi),%xmm2
3536	pxor	%xmm1,%xmm7
3537	movdqu	16(%esi),%xmm3
3538	xorps	%xmm0,%xmm2
3539	movdqu	32(%esi),%xmm4
3540	pxor	%xmm0,%xmm3
3541	movdqu	48(%esi),%xmm5
3542	pxor	%xmm0,%xmm4
3543	movdqu	64(%esi),%xmm6
3544	pxor	%xmm0,%xmm5
3545	movdqu	80(%esi),%xmm1
3546	pxor	%xmm0,%xmm6
3547	leal	96(%esi),%esi
3548	pxor	(%esp),%xmm2
3549	movdqa	%xmm7,80(%esp)
3550	pxor	%xmm1,%xmm7
3551	movups	16(%ebp),%xmm1
3552	leal	32(%ebp),%edx
3553	pxor	16(%esp),%xmm3
3554.byte	102,15,56,222,209
3555	pxor	32(%esp),%xmm4
3556.byte	102,15,56,222,217
3557	pxor	48(%esp),%xmm5
3558	decl	%ecx
3559.byte	102,15,56,222,225
3560	pxor	64(%esp),%xmm6
3561.byte	102,15,56,222,233
3562	pxor	%xmm0,%xmm7
3563.byte	102,15,56,222,241
3564	movups	(%edx),%xmm0
3565.byte	102,15,56,222,249
3566	call	.L_aesni_decrypt6_enter
3567	movdqa	80(%esp),%xmm1
3568	pxor	%xmm0,%xmm0
3569	xorps	(%esp),%xmm2
3570	pcmpgtd	%xmm1,%xmm0
3571	xorps	16(%esp),%xmm3
3572	movups	%xmm2,(%edi)
3573	xorps	32(%esp),%xmm4
3574	movups	%xmm3,16(%edi)
3575	xorps	48(%esp),%xmm5
3576	movups	%xmm4,32(%edi)
3577	xorps	64(%esp),%xmm6
3578	movups	%xmm5,48(%edi)
3579	xorps	%xmm1,%xmm7
3580	movups	%xmm6,64(%edi)
3581	pshufd	$19,%xmm0,%xmm2
3582	movups	%xmm7,80(%edi)
3583	leal	96(%edi),%edi
3584	movdqa	96(%esp),%xmm3
3585	pxor	%xmm0,%xmm0
3586	paddq	%xmm1,%xmm1
3587	pand	%xmm3,%xmm2
3588	pcmpgtd	%xmm1,%xmm0
3589	movl	%ebx,%ecx
3590	pxor	%xmm2,%xmm1
3591	subl	$96,%eax
3592	jnc	.L057xts_dec_loop6
3593	leal	1(,%ecx,2),%ecx
3594	movl	%ebp,%edx
3595	movl	%ecx,%ebx
3596.L056xts_dec_short:
3597	addl	$96,%eax
3598	jz	.L058xts_dec_done6x
3599	movdqa	%xmm1,%xmm5
3600	cmpl	$32,%eax
3601	jb	.L059xts_dec_one
3602	pshufd	$19,%xmm0,%xmm2
3603	pxor	%xmm0,%xmm0
3604	paddq	%xmm1,%xmm1
3605	pand	%xmm3,%xmm2
3606	pcmpgtd	%xmm1,%xmm0
3607	pxor	%xmm2,%xmm1
3608	je	.L060xts_dec_two
3609	pshufd	$19,%xmm0,%xmm2
3610	pxor	%xmm0,%xmm0
3611	movdqa	%xmm1,%xmm6
3612	paddq	%xmm1,%xmm1
3613	pand	%xmm3,%xmm2
3614	pcmpgtd	%xmm1,%xmm0
3615	pxor	%xmm2,%xmm1
3616	cmpl	$64,%eax
3617	jb	.L061xts_dec_three
3618	pshufd	$19,%xmm0,%xmm2
3619	pxor	%xmm0,%xmm0
3620	movdqa	%xmm1,%xmm7
3621	paddq	%xmm1,%xmm1
3622	pand	%xmm3,%xmm2
3623	pcmpgtd	%xmm1,%xmm0
3624	pxor	%xmm2,%xmm1
3625	movdqa	%xmm5,(%esp)
3626	movdqa	%xmm6,16(%esp)
3627	je	.L062xts_dec_four
3628	movdqa	%xmm7,32(%esp)
3629	pshufd	$19,%xmm0,%xmm7
3630	movdqa	%xmm1,48(%esp)
3631	paddq	%xmm1,%xmm1
3632	pand	%xmm3,%xmm7
3633	pxor	%xmm1,%xmm7
3634	movdqu	(%esi),%xmm2
3635	movdqu	16(%esi),%xmm3
3636	movdqu	32(%esi),%xmm4
3637	pxor	(%esp),%xmm2
3638	movdqu	48(%esi),%xmm5
3639	pxor	16(%esp),%xmm3
3640	movdqu	64(%esi),%xmm6
3641	pxor	32(%esp),%xmm4
3642	leal	80(%esi),%esi
3643	pxor	48(%esp),%xmm5
3644	movdqa	%xmm7,64(%esp)
3645	pxor	%xmm7,%xmm6
3646	call	_aesni_decrypt6
3647	movaps	64(%esp),%xmm1
3648	xorps	(%esp),%xmm2
3649	xorps	16(%esp),%xmm3
3650	xorps	32(%esp),%xmm4
3651	movups	%xmm2,(%edi)
3652	xorps	48(%esp),%xmm5
3653	movups	%xmm3,16(%edi)
3654	xorps	%xmm1,%xmm6
3655	movups	%xmm4,32(%edi)
3656	movups	%xmm5,48(%edi)
3657	movups	%xmm6,64(%edi)
3658	leal	80(%edi),%edi
3659	jmp	.L063xts_dec_done
3660.align	16
3661.L059xts_dec_one:
3662	movups	(%esi),%xmm2
3663	leal	16(%esi),%esi
3664	xorps	%xmm5,%xmm2
3665	movups	(%edx),%xmm0
3666	movups	16(%edx),%xmm1
3667	leal	32(%edx),%edx
3668	xorps	%xmm0,%xmm2
3669.L064dec1_loop_12:
3670.byte	102,15,56,222,209
3671	decl	%ecx
3672	movups	(%edx),%xmm1
3673	leal	16(%edx),%edx
3674	jnz	.L064dec1_loop_12
3675.byte	102,15,56,223,209
3676	xorps	%xmm5,%xmm2
3677	movups	%xmm2,(%edi)
3678	leal	16(%edi),%edi
3679	movdqa	%xmm5,%xmm1
3680	jmp	.L063xts_dec_done
3681.align	16
3682.L060xts_dec_two:
3683	movaps	%xmm1,%xmm6
3684	movups	(%esi),%xmm2
3685	movups	16(%esi),%xmm3
3686	leal	32(%esi),%esi
3687	xorps	%xmm5,%xmm2
3688	xorps	%xmm6,%xmm3
3689	call	_aesni_decrypt3
3690	xorps	%xmm5,%xmm2
3691	xorps	%xmm6,%xmm3
3692	movups	%xmm2,(%edi)
3693	movups	%xmm3,16(%edi)
3694	leal	32(%edi),%edi
3695	movdqa	%xmm6,%xmm1
3696	jmp	.L063xts_dec_done
3697.align	16
3698.L061xts_dec_three:
3699	movaps	%xmm1,%xmm7
3700	movups	(%esi),%xmm2
3701	movups	16(%esi),%xmm3
3702	movups	32(%esi),%xmm4
3703	leal	48(%esi),%esi
3704	xorps	%xmm5,%xmm2
3705	xorps	%xmm6,%xmm3
3706	xorps	%xmm7,%xmm4
3707	call	_aesni_decrypt3
3708	xorps	%xmm5,%xmm2
3709	xorps	%xmm6,%xmm3
3710	xorps	%xmm7,%xmm4
3711	movups	%xmm2,(%edi)
3712	movups	%xmm3,16(%edi)
3713	movups	%xmm4,32(%edi)
3714	leal	48(%edi),%edi
3715	movdqa	%xmm7,%xmm1
3716	jmp	.L063xts_dec_done
3717.align	16
3718.L062xts_dec_four:
3719	movaps	%xmm1,%xmm6
3720	movups	(%esi),%xmm2
3721	movups	16(%esi),%xmm3
3722	movups	32(%esi),%xmm4
3723	xorps	(%esp),%xmm2
3724	movups	48(%esi),%xmm5
3725	leal	64(%esi),%esi
3726	xorps	16(%esp),%xmm3
3727	xorps	%xmm7,%xmm4
3728	xorps	%xmm6,%xmm5
3729	call	_aesni_decrypt4
3730	xorps	(%esp),%xmm2
3731	xorps	16(%esp),%xmm3
3732	xorps	%xmm7,%xmm4
3733	movups	%xmm2,(%edi)
3734	xorps	%xmm6,%xmm5
3735	movups	%xmm3,16(%edi)
3736	movups	%xmm4,32(%edi)
3737	movups	%xmm5,48(%edi)
3738	leal	64(%edi),%edi
3739	movdqa	%xmm6,%xmm1
3740	jmp	.L063xts_dec_done
3741.align	16
3742.L058xts_dec_done6x:
3743	movl	112(%esp),%eax
3744	andl	$15,%eax
3745	jz	.L065xts_dec_ret
3746	movl	%eax,112(%esp)
3747	jmp	.L066xts_dec_only_one_more
3748.align	16
3749.L063xts_dec_done:
3750	movl	112(%esp),%eax
3751	pxor	%xmm0,%xmm0
3752	andl	$15,%eax
3753	jz	.L065xts_dec_ret
3754	pcmpgtd	%xmm1,%xmm0
3755	movl	%eax,112(%esp)
3756	pshufd	$19,%xmm0,%xmm2
3757	pxor	%xmm0,%xmm0
3758	movdqa	96(%esp),%xmm3
3759	paddq	%xmm1,%xmm1
3760	pand	%xmm3,%xmm2
3761	pcmpgtd	%xmm1,%xmm0
3762	pxor	%xmm2,%xmm1
3763.L066xts_dec_only_one_more:
3764	pshufd	$19,%xmm0,%xmm5
3765	movdqa	%xmm1,%xmm6
3766	paddq	%xmm1,%xmm1
3767	pand	%xmm3,%xmm5
3768	pxor	%xmm1,%xmm5
3769	movl	%ebp,%edx
3770	movl	%ebx,%ecx
3771	movups	(%esi),%xmm2
3772	xorps	%xmm5,%xmm2
3773	movups	(%edx),%xmm0
3774	movups	16(%edx),%xmm1
3775	leal	32(%edx),%edx
3776	xorps	%xmm0,%xmm2
3777.L067dec1_loop_13:
3778.byte	102,15,56,222,209
3779	decl	%ecx
3780	movups	(%edx),%xmm1
3781	leal	16(%edx),%edx
3782	jnz	.L067dec1_loop_13
3783.byte	102,15,56,223,209
3784	xorps	%xmm5,%xmm2
3785	movups	%xmm2,(%edi)
3786.L068xts_dec_steal:
3787	movzbl	16(%esi),%ecx
3788	movzbl	(%edi),%edx
3789	leal	1(%esi),%esi
3790	movb	%cl,(%edi)
3791	movb	%dl,16(%edi)
3792	leal	1(%edi),%edi
3793	subl	$1,%eax
3794	jnz	.L068xts_dec_steal
3795	subl	112(%esp),%edi
3796	movl	%ebp,%edx
3797	movl	%ebx,%ecx
3798	movups	(%edi),%xmm2
3799	xorps	%xmm6,%xmm2
3800	movups	(%edx),%xmm0
3801	movups	16(%edx),%xmm1
3802	leal	32(%edx),%edx
3803	xorps	%xmm0,%xmm2
3804.L069dec1_loop_14:
3805.byte	102,15,56,222,209
3806	decl	%ecx
3807	movups	(%edx),%xmm1
3808	leal	16(%edx),%edx
3809	jnz	.L069dec1_loop_14
3810.byte	102,15,56,223,209
3811	xorps	%xmm6,%xmm2
3812	movups	%xmm2,(%edi)
3813.L065xts_dec_ret:
3814	movl	116(%esp),%esp
3815	popl	%edi
3816	popl	%esi
3817	popl	%ebx
3818	popl	%ebp
3819	ret
3820.size	aesni_xts_decrypt,.-.L_aesni_xts_decrypt_begin
3821.globl	aesni_cbc_encrypt
3822.type	aesni_cbc_encrypt,@function
3823.align	16
3824aesni_cbc_encrypt:
3825.L_aesni_cbc_encrypt_begin:
3826	pushl	%ebp
3827	pushl	%ebx
3828	pushl	%esi
3829	pushl	%edi
3830	movl	20(%esp),%esi
3831	movl	%esp,%ebx
3832	movl	24(%esp),%edi
3833	subl	$24,%ebx
3834	movl	28(%esp),%eax
3835	andl	$-16,%ebx
3836	movl	32(%esp),%edx
3837	movl	36(%esp),%ebp
3838	testl	%eax,%eax
3839	jz	.L070cbc_abort
3840	cmpl	$0,40(%esp)
3841	xchgl	%esp,%ebx
3842	movups	(%ebp),%xmm7
3843	movl	240(%edx),%ecx
3844	movl	%edx,%ebp
3845	movl	%ebx,16(%esp)
3846	movl	%ecx,%ebx
3847	je	.L071cbc_decrypt
3848	movaps	%xmm7,%xmm2
3849	cmpl	$16,%eax
3850	jb	.L072cbc_enc_tail
3851	subl	$16,%eax
3852	jmp	.L073cbc_enc_loop
3853.align	16
3854.L073cbc_enc_loop:
3855	movups	(%esi),%xmm7
3856	leal	16(%esi),%esi
3857	movups	(%edx),%xmm0
3858	movups	16(%edx),%xmm1
3859	xorps	%xmm0,%xmm7
3860	leal	32(%edx),%edx
3861	xorps	%xmm7,%xmm2
3862.L074enc1_loop_15:
3863.byte	102,15,56,220,209
3864	decl	%ecx
3865	movups	(%edx),%xmm1
3866	leal	16(%edx),%edx
3867	jnz	.L074enc1_loop_15
3868.byte	102,15,56,221,209
3869	movl	%ebx,%ecx
3870	movl	%ebp,%edx
3871	movups	%xmm2,(%edi)
3872	leal	16(%edi),%edi
3873	subl	$16,%eax
3874	jnc	.L073cbc_enc_loop
3875	addl	$16,%eax
3876	jnz	.L072cbc_enc_tail
3877	movaps	%xmm2,%xmm7
3878	jmp	.L075cbc_ret
3879.L072cbc_enc_tail:
3880	movl	%eax,%ecx
3881.long	2767451785
3882	movl	$16,%ecx
3883	subl	%eax,%ecx
3884	xorl	%eax,%eax
3885.long	2868115081
3886	leal	-16(%edi),%edi
3887	movl	%ebx,%ecx
3888	movl	%edi,%esi
3889	movl	%ebp,%edx
3890	jmp	.L073cbc_enc_loop
3891.align	16
3892.L071cbc_decrypt:
3893	cmpl	$80,%eax
3894	jbe	.L076cbc_dec_tail
3895	movaps	%xmm7,(%esp)
3896	subl	$80,%eax
3897	jmp	.L077cbc_dec_loop6_enter
3898.align	16
3899.L078cbc_dec_loop6:
3900	movaps	%xmm0,(%esp)
3901	movups	%xmm7,(%edi)
3902	leal	16(%edi),%edi
3903.L077cbc_dec_loop6_enter:
3904	movdqu	(%esi),%xmm2
3905	movdqu	16(%esi),%xmm3
3906	movdqu	32(%esi),%xmm4
3907	movdqu	48(%esi),%xmm5
3908	movdqu	64(%esi),%xmm6
3909	movdqu	80(%esi),%xmm7
3910	call	_aesni_decrypt6
3911	movups	(%esi),%xmm1
3912	movups	16(%esi),%xmm0
3913	xorps	(%esp),%xmm2
3914	xorps	%xmm1,%xmm3
3915	movups	32(%esi),%xmm1
3916	xorps	%xmm0,%xmm4
3917	movups	48(%esi),%xmm0
3918	xorps	%xmm1,%xmm5
3919	movups	64(%esi),%xmm1
3920	xorps	%xmm0,%xmm6
3921	movups	80(%esi),%xmm0
3922	xorps	%xmm1,%xmm7
3923	movups	%xmm2,(%edi)
3924	movups	%xmm3,16(%edi)
3925	leal	96(%esi),%esi
3926	movups	%xmm4,32(%edi)
3927	movl	%ebx,%ecx
3928	movups	%xmm5,48(%edi)
3929	movl	%ebp,%edx
3930	movups	%xmm6,64(%edi)
3931	leal	80(%edi),%edi
3932	subl	$96,%eax
3933	ja	.L078cbc_dec_loop6
3934	movaps	%xmm7,%xmm2
3935	movaps	%xmm0,%xmm7
3936	addl	$80,%eax
3937	jle	.L079cbc_dec_tail_collected
3938	movups	%xmm2,(%edi)
3939	leal	16(%edi),%edi
3940.L076cbc_dec_tail:
3941	movups	(%esi),%xmm2
3942	movaps	%xmm2,%xmm6
3943	cmpl	$16,%eax
3944	jbe	.L080cbc_dec_one
3945	movups	16(%esi),%xmm3
3946	movaps	%xmm3,%xmm5
3947	cmpl	$32,%eax
3948	jbe	.L081cbc_dec_two
3949	movups	32(%esi),%xmm4
3950	cmpl	$48,%eax
3951	jbe	.L082cbc_dec_three
3952	movups	48(%esi),%xmm5
3953	cmpl	$64,%eax
3954	jbe	.L083cbc_dec_four
3955	movups	64(%esi),%xmm6
3956	movaps	%xmm7,(%esp)
3957	movups	(%esi),%xmm2
3958	xorps	%xmm7,%xmm7
3959	call	_aesni_decrypt6
3960	movups	(%esi),%xmm1
3961	movups	16(%esi),%xmm0
3962	xorps	(%esp),%xmm2
3963	xorps	%xmm1,%xmm3
3964	movups	32(%esi),%xmm1
3965	xorps	%xmm0,%xmm4
3966	movups	48(%esi),%xmm0
3967	xorps	%xmm1,%xmm5
3968	movups	64(%esi),%xmm7
3969	xorps	%xmm0,%xmm6
3970	movups	%xmm2,(%edi)
3971	movups	%xmm3,16(%edi)
3972	movups	%xmm4,32(%edi)
3973	movups	%xmm5,48(%edi)
3974	leal	64(%edi),%edi
3975	movaps	%xmm6,%xmm2
3976	subl	$80,%eax
3977	jmp	.L079cbc_dec_tail_collected
3978.align	16
3979.L080cbc_dec_one:
3980	movups	(%edx),%xmm0
3981	movups	16(%edx),%xmm1
3982	leal	32(%edx),%edx
3983	xorps	%xmm0,%xmm2
3984.L084dec1_loop_16:
3985.byte	102,15,56,222,209
3986	decl	%ecx
3987	movups	(%edx),%xmm1
3988	leal	16(%edx),%edx
3989	jnz	.L084dec1_loop_16
3990.byte	102,15,56,223,209
3991	xorps	%xmm7,%xmm2
3992	movaps	%xmm6,%xmm7
3993	subl	$16,%eax
3994	jmp	.L079cbc_dec_tail_collected
3995.align	16
3996.L081cbc_dec_two:
3997	xorps	%xmm4,%xmm4
3998	call	_aesni_decrypt3
3999	xorps	%xmm7,%xmm2
4000	xorps	%xmm6,%xmm3
4001	movups	%xmm2,(%edi)
4002	movaps	%xmm3,%xmm2
4003	leal	16(%edi),%edi
4004	movaps	%xmm5,%xmm7
4005	subl	$32,%eax
4006	jmp	.L079cbc_dec_tail_collected
4007.align	16
4008.L082cbc_dec_three:
4009	call	_aesni_decrypt3
4010	xorps	%xmm7,%xmm2
4011	xorps	%xmm6,%xmm3
4012	xorps	%xmm5,%xmm4
4013	movups	%xmm2,(%edi)
4014	movaps	%xmm4,%xmm2
4015	movups	%xmm3,16(%edi)
4016	leal	32(%edi),%edi
4017	movups	32(%esi),%xmm7
4018	subl	$48,%eax
4019	jmp	.L079cbc_dec_tail_collected
4020.align	16
4021.L083cbc_dec_four:
4022	call	_aesni_decrypt4
4023	movups	16(%esi),%xmm1
4024	movups	32(%esi),%xmm0
4025	xorps	%xmm7,%xmm2
4026	movups	48(%esi),%xmm7
4027	xorps	%xmm6,%xmm3
4028	movups	%xmm2,(%edi)
4029	xorps	%xmm1,%xmm4
4030	movups	%xmm3,16(%edi)
4031	xorps	%xmm0,%xmm5
4032	movups	%xmm4,32(%edi)
4033	leal	48(%edi),%edi
4034	movaps	%xmm5,%xmm2
4035	subl	$64,%eax
4036.L079cbc_dec_tail_collected:
4037	andl	$15,%eax
4038	jnz	.L085cbc_dec_tail_partial
4039	movups	%xmm2,(%edi)
4040	jmp	.L075cbc_ret
4041.align	16
4042.L085cbc_dec_tail_partial:
4043	movaps	%xmm2,(%esp)
4044	movl	$16,%ecx
4045	movl	%esp,%esi
4046	subl	%eax,%ecx
4047.long	2767451785
4048.L075cbc_ret:
4049	movl	16(%esp),%esp
4050	movl	36(%esp),%ebp
4051	movups	%xmm7,(%ebp)
4052.L070cbc_abort:
4053	popl	%edi
4054	popl	%esi
4055	popl	%ebx
4056	popl	%ebp
4057	ret
4058.size	aesni_cbc_encrypt,.-.L_aesni_cbc_encrypt_begin
4059.type	_aesni_set_encrypt_key,@function
4060.align	16
4061_aesni_set_encrypt_key:
4062	testl	%eax,%eax
4063	jz	.L086bad_pointer
4064	testl	%edx,%edx
4065	jz	.L086bad_pointer
4066	movups	(%eax),%xmm0
4067	xorps	%xmm4,%xmm4
4068	leal	16(%edx),%edx
4069	cmpl	$256,%ecx
4070	je	.L08714rounds
4071	cmpl	$192,%ecx
4072	je	.L08812rounds
4073	cmpl	$128,%ecx
4074	jne	.L089bad_keybits
4075.align	16
4076.L09010rounds:
4077	movl	$9,%ecx
4078	movups	%xmm0,-16(%edx)
4079.byte	102,15,58,223,200,1
4080	call	.L091key_128_cold
4081.byte	102,15,58,223,200,2
4082	call	.L092key_128
4083.byte	102,15,58,223,200,4
4084	call	.L092key_128
4085.byte	102,15,58,223,200,8
4086	call	.L092key_128
4087.byte	102,15,58,223,200,16
4088	call	.L092key_128
4089.byte	102,15,58,223,200,32
4090	call	.L092key_128
4091.byte	102,15,58,223,200,64
4092	call	.L092key_128
4093.byte	102,15,58,223,200,128
4094	call	.L092key_128
4095.byte	102,15,58,223,200,27
4096	call	.L092key_128
4097.byte	102,15,58,223,200,54
4098	call	.L092key_128
4099	movups	%xmm0,(%edx)
4100	movl	%ecx,80(%edx)
4101	xorl	%eax,%eax
4102	ret
4103.align	16
4104.L092key_128:
4105	movups	%xmm0,(%edx)
4106	leal	16(%edx),%edx
4107.L091key_128_cold:
4108	shufps	$16,%xmm0,%xmm4
4109	xorps	%xmm4,%xmm0
4110	shufps	$140,%xmm0,%xmm4
4111	xorps	%xmm4,%xmm0
4112	shufps	$255,%xmm1,%xmm1
4113	xorps	%xmm1,%xmm0
4114	ret
4115.align	16
4116.L08812rounds:
4117	movq	16(%eax),%xmm2
4118	movl	$11,%ecx
4119	movups	%xmm0,-16(%edx)
4120.byte	102,15,58,223,202,1
4121	call	.L093key_192a_cold
4122.byte	102,15,58,223,202,2
4123	call	.L094key_192b
4124.byte	102,15,58,223,202,4
4125	call	.L095key_192a
4126.byte	102,15,58,223,202,8
4127	call	.L094key_192b
4128.byte	102,15,58,223,202,16
4129	call	.L095key_192a
4130.byte	102,15,58,223,202,32
4131	call	.L094key_192b
4132.byte	102,15,58,223,202,64
4133	call	.L095key_192a
4134.byte	102,15,58,223,202,128
4135	call	.L094key_192b
4136	movups	%xmm0,(%edx)
4137	movl	%ecx,48(%edx)
4138	xorl	%eax,%eax
4139	ret
4140.align	16
4141.L095key_192a:
4142	movups	%xmm0,(%edx)
4143	leal	16(%edx),%edx
4144.align	16
4145.L093key_192a_cold:
4146	movaps	%xmm2,%xmm5
4147.L096key_192b_warm:
4148	shufps	$16,%xmm0,%xmm4
4149	movdqa	%xmm2,%xmm3
4150	xorps	%xmm4,%xmm0
4151	shufps	$140,%xmm0,%xmm4
4152	pslldq	$4,%xmm3
4153	xorps	%xmm4,%xmm0
4154	pshufd	$85,%xmm1,%xmm1
4155	pxor	%xmm3,%xmm2
4156	pxor	%xmm1,%xmm0
4157	pshufd	$255,%xmm0,%xmm3
4158	pxor	%xmm3,%xmm2
4159	ret
4160.align	16
4161.L094key_192b:
4162	movaps	%xmm0,%xmm3
4163	shufps	$68,%xmm0,%xmm5
4164	movups	%xmm5,(%edx)
4165	shufps	$78,%xmm2,%xmm3
4166	movups	%xmm3,16(%edx)
4167	leal	32(%edx),%edx
4168	jmp	.L096key_192b_warm
4169.align	16
4170.L08714rounds:
4171	movups	16(%eax),%xmm2
4172	movl	$13,%ecx
4173	leal	16(%edx),%edx
4174	movups	%xmm0,-32(%edx)
4175	movups	%xmm2,-16(%edx)
4176.byte	102,15,58,223,202,1
4177	call	.L097key_256a_cold
4178.byte	102,15,58,223,200,1
4179	call	.L098key_256b
4180.byte	102,15,58,223,202,2
4181	call	.L099key_256a
4182.byte	102,15,58,223,200,2
4183	call	.L098key_256b
4184.byte	102,15,58,223,202,4
4185	call	.L099key_256a
4186.byte	102,15,58,223,200,4
4187	call	.L098key_256b
4188.byte	102,15,58,223,202,8
4189	call	.L099key_256a
4190.byte	102,15,58,223,200,8
4191	call	.L098key_256b
4192.byte	102,15,58,223,202,16
4193	call	.L099key_256a
4194.byte	102,15,58,223,200,16
4195	call	.L098key_256b
4196.byte	102,15,58,223,202,32
4197	call	.L099key_256a
4198.byte	102,15,58,223,200,32
4199	call	.L098key_256b
4200.byte	102,15,58,223,202,64
4201	call	.L099key_256a
4202	movups	%xmm0,(%edx)
4203	movl	%ecx,16(%edx)
4204	xorl	%eax,%eax
4205	ret
4206.align	16
4207.L099key_256a:
4208	movups	%xmm2,(%edx)
4209	leal	16(%edx),%edx
4210.L097key_256a_cold:
4211	shufps	$16,%xmm0,%xmm4
4212	xorps	%xmm4,%xmm0
4213	shufps	$140,%xmm0,%xmm4
4214	xorps	%xmm4,%xmm0
4215	shufps	$255,%xmm1,%xmm1
4216	xorps	%xmm1,%xmm0
4217	ret
4218.align	16
4219.L098key_256b:
4220	movups	%xmm0,(%edx)
4221	leal	16(%edx),%edx
4222	shufps	$16,%xmm2,%xmm4
4223	xorps	%xmm4,%xmm2
4224	shufps	$140,%xmm2,%xmm4
4225	xorps	%xmm4,%xmm2
4226	shufps	$170,%xmm1,%xmm1
4227	xorps	%xmm1,%xmm2
4228	ret
4229.align	4
4230.L086bad_pointer:
4231	movl	$-1,%eax
4232	ret
4233.align	4
4234.L089bad_keybits:
4235	movl	$-2,%eax
4236	ret
4237.size	_aesni_set_encrypt_key,.-_aesni_set_encrypt_key
4238.globl	aesni_set_encrypt_key
4239.type	aesni_set_encrypt_key,@function
4240.align	16
4241aesni_set_encrypt_key:
4242.L_aesni_set_encrypt_key_begin:
4243	movl	4(%esp),%eax
4244	movl	8(%esp),%ecx
4245	movl	12(%esp),%edx
4246	call	_aesni_set_encrypt_key
4247	ret
4248.size	aesni_set_encrypt_key,.-.L_aesni_set_encrypt_key_begin
4249.globl	aesni_set_decrypt_key
4250.type	aesni_set_decrypt_key,@function
4251.align	16
4252aesni_set_decrypt_key:
4253.L_aesni_set_decrypt_key_begin:
4254	movl	4(%esp),%eax
4255	movl	8(%esp),%ecx
4256	movl	12(%esp),%edx
4257	call	_aesni_set_encrypt_key
4258	movl	12(%esp),%edx
4259	shll	$4,%ecx
4260	testl	%eax,%eax
4261	jnz	.L100dec_key_ret
4262	leal	16(%edx,%ecx,1),%eax
4263	movups	(%edx),%xmm0
4264	movups	(%eax),%xmm1
4265	movups	%xmm0,(%eax)
4266	movups	%xmm1,(%edx)
4267	leal	16(%edx),%edx
4268	leal	-16(%eax),%eax
4269.L101dec_key_inverse:
4270	movups	(%edx),%xmm0
4271	movups	(%eax),%xmm1
4272.byte	102,15,56,219,192
4273.byte	102,15,56,219,201
4274	leal	16(%edx),%edx
4275	leal	-16(%eax),%eax
4276	movups	%xmm0,16(%eax)
4277	movups	%xmm1,-16(%edx)
4278	cmpl	%edx,%eax
4279	ja	.L101dec_key_inverse
4280	movups	(%edx),%xmm0
4281.byte	102,15,56,219,192
4282	movups	%xmm0,(%edx)
4283	xorl	%eax,%eax
4284.L100dec_key_ret:
4285	ret
4286.size	aesni_set_decrypt_key,.-.L_aesni_set_decrypt_key_begin
4287.byte	65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69
4288.byte	83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83
4289.byte	32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
4290.byte	115,108,46,111,114,103,62,0
4291#endif
4292