xref: /freebsd/sys/crypto/openssl/i386/aesni-x86.S (revision cfd6422a5217410fbd66f7a7a8a64d9d85e61229)
1/* $FreeBSD$ */
2/* Do not modify. This file is auto-generated from aesni-x86.pl. */
3#ifdef PIC
4.text
5.globl	aesni_encrypt
6.type	aesni_encrypt,@function
7.align	16
8aesni_encrypt:
9.L_aesni_encrypt_begin:
10	movl	4(%esp),%eax
11	movl	12(%esp),%edx
12	movups	(%eax),%xmm2
13	movl	240(%edx),%ecx
14	movl	8(%esp),%eax
15	movups	(%edx),%xmm0
16	movups	16(%edx),%xmm1
17	leal	32(%edx),%edx
18	xorps	%xmm0,%xmm2
19.L000enc1_loop_1:
20.byte	102,15,56,220,209
21	decl	%ecx
22	movups	(%edx),%xmm1
23	leal	16(%edx),%edx
24	jnz	.L000enc1_loop_1
25.byte	102,15,56,221,209
26	pxor	%xmm0,%xmm0
27	pxor	%xmm1,%xmm1
28	movups	%xmm2,(%eax)
29	pxor	%xmm2,%xmm2
30	ret
31.size	aesni_encrypt,.-.L_aesni_encrypt_begin
32.globl	aesni_decrypt
33.type	aesni_decrypt,@function
34.align	16
35aesni_decrypt:
36.L_aesni_decrypt_begin:
37	movl	4(%esp),%eax
38	movl	12(%esp),%edx
39	movups	(%eax),%xmm2
40	movl	240(%edx),%ecx
41	movl	8(%esp),%eax
42	movups	(%edx),%xmm0
43	movups	16(%edx),%xmm1
44	leal	32(%edx),%edx
45	xorps	%xmm0,%xmm2
46.L001dec1_loop_2:
47.byte	102,15,56,222,209
48	decl	%ecx
49	movups	(%edx),%xmm1
50	leal	16(%edx),%edx
51	jnz	.L001dec1_loop_2
52.byte	102,15,56,223,209
53	pxor	%xmm0,%xmm0
54	pxor	%xmm1,%xmm1
55	movups	%xmm2,(%eax)
56	pxor	%xmm2,%xmm2
57	ret
58.size	aesni_decrypt,.-.L_aesni_decrypt_begin
59.type	_aesni_encrypt2,@function
60.align	16
61_aesni_encrypt2:
62	movups	(%edx),%xmm0
63	shll	$4,%ecx
64	movups	16(%edx),%xmm1
65	xorps	%xmm0,%xmm2
66	pxor	%xmm0,%xmm3
67	movups	32(%edx),%xmm0
68	leal	32(%edx,%ecx,1),%edx
69	negl	%ecx
70	addl	$16,%ecx
71.L002enc2_loop:
72.byte	102,15,56,220,209
73.byte	102,15,56,220,217
74	movups	(%edx,%ecx,1),%xmm1
75	addl	$32,%ecx
76.byte	102,15,56,220,208
77.byte	102,15,56,220,216
78	movups	-16(%edx,%ecx,1),%xmm0
79	jnz	.L002enc2_loop
80.byte	102,15,56,220,209
81.byte	102,15,56,220,217
82.byte	102,15,56,221,208
83.byte	102,15,56,221,216
84	ret
85.size	_aesni_encrypt2,.-_aesni_encrypt2
86.type	_aesni_decrypt2,@function
87.align	16
88_aesni_decrypt2:
89	movups	(%edx),%xmm0
90	shll	$4,%ecx
91	movups	16(%edx),%xmm1
92	xorps	%xmm0,%xmm2
93	pxor	%xmm0,%xmm3
94	movups	32(%edx),%xmm0
95	leal	32(%edx,%ecx,1),%edx
96	negl	%ecx
97	addl	$16,%ecx
98.L003dec2_loop:
99.byte	102,15,56,222,209
100.byte	102,15,56,222,217
101	movups	(%edx,%ecx,1),%xmm1
102	addl	$32,%ecx
103.byte	102,15,56,222,208
104.byte	102,15,56,222,216
105	movups	-16(%edx,%ecx,1),%xmm0
106	jnz	.L003dec2_loop
107.byte	102,15,56,222,209
108.byte	102,15,56,222,217
109.byte	102,15,56,223,208
110.byte	102,15,56,223,216
111	ret
112.size	_aesni_decrypt2,.-_aesni_decrypt2
113.type	_aesni_encrypt3,@function
114.align	16
115_aesni_encrypt3:
116	movups	(%edx),%xmm0
117	shll	$4,%ecx
118	movups	16(%edx),%xmm1
119	xorps	%xmm0,%xmm2
120	pxor	%xmm0,%xmm3
121	pxor	%xmm0,%xmm4
122	movups	32(%edx),%xmm0
123	leal	32(%edx,%ecx,1),%edx
124	negl	%ecx
125	addl	$16,%ecx
126.L004enc3_loop:
127.byte	102,15,56,220,209
128.byte	102,15,56,220,217
129.byte	102,15,56,220,225
130	movups	(%edx,%ecx,1),%xmm1
131	addl	$32,%ecx
132.byte	102,15,56,220,208
133.byte	102,15,56,220,216
134.byte	102,15,56,220,224
135	movups	-16(%edx,%ecx,1),%xmm0
136	jnz	.L004enc3_loop
137.byte	102,15,56,220,209
138.byte	102,15,56,220,217
139.byte	102,15,56,220,225
140.byte	102,15,56,221,208
141.byte	102,15,56,221,216
142.byte	102,15,56,221,224
143	ret
144.size	_aesni_encrypt3,.-_aesni_encrypt3
145.type	_aesni_decrypt3,@function
146.align	16
147_aesni_decrypt3:
148	movups	(%edx),%xmm0
149	shll	$4,%ecx
150	movups	16(%edx),%xmm1
151	xorps	%xmm0,%xmm2
152	pxor	%xmm0,%xmm3
153	pxor	%xmm0,%xmm4
154	movups	32(%edx),%xmm0
155	leal	32(%edx,%ecx,1),%edx
156	negl	%ecx
157	addl	$16,%ecx
158.L005dec3_loop:
159.byte	102,15,56,222,209
160.byte	102,15,56,222,217
161.byte	102,15,56,222,225
162	movups	(%edx,%ecx,1),%xmm1
163	addl	$32,%ecx
164.byte	102,15,56,222,208
165.byte	102,15,56,222,216
166.byte	102,15,56,222,224
167	movups	-16(%edx,%ecx,1),%xmm0
168	jnz	.L005dec3_loop
169.byte	102,15,56,222,209
170.byte	102,15,56,222,217
171.byte	102,15,56,222,225
172.byte	102,15,56,223,208
173.byte	102,15,56,223,216
174.byte	102,15,56,223,224
175	ret
176.size	_aesni_decrypt3,.-_aesni_decrypt3
177.type	_aesni_encrypt4,@function
178.align	16
179_aesni_encrypt4:
180	movups	(%edx),%xmm0
181	movups	16(%edx),%xmm1
182	shll	$4,%ecx
183	xorps	%xmm0,%xmm2
184	pxor	%xmm0,%xmm3
185	pxor	%xmm0,%xmm4
186	pxor	%xmm0,%xmm5
187	movups	32(%edx),%xmm0
188	leal	32(%edx,%ecx,1),%edx
189	negl	%ecx
190.byte	15,31,64,0
191	addl	$16,%ecx
192.L006enc4_loop:
193.byte	102,15,56,220,209
194.byte	102,15,56,220,217
195.byte	102,15,56,220,225
196.byte	102,15,56,220,233
197	movups	(%edx,%ecx,1),%xmm1
198	addl	$32,%ecx
199.byte	102,15,56,220,208
200.byte	102,15,56,220,216
201.byte	102,15,56,220,224
202.byte	102,15,56,220,232
203	movups	-16(%edx,%ecx,1),%xmm0
204	jnz	.L006enc4_loop
205.byte	102,15,56,220,209
206.byte	102,15,56,220,217
207.byte	102,15,56,220,225
208.byte	102,15,56,220,233
209.byte	102,15,56,221,208
210.byte	102,15,56,221,216
211.byte	102,15,56,221,224
212.byte	102,15,56,221,232
213	ret
214.size	_aesni_encrypt4,.-_aesni_encrypt4
215.type	_aesni_decrypt4,@function
216.align	16
217_aesni_decrypt4:
218	movups	(%edx),%xmm0
219	movups	16(%edx),%xmm1
220	shll	$4,%ecx
221	xorps	%xmm0,%xmm2
222	pxor	%xmm0,%xmm3
223	pxor	%xmm0,%xmm4
224	pxor	%xmm0,%xmm5
225	movups	32(%edx),%xmm0
226	leal	32(%edx,%ecx,1),%edx
227	negl	%ecx
228.byte	15,31,64,0
229	addl	$16,%ecx
230.L007dec4_loop:
231.byte	102,15,56,222,209
232.byte	102,15,56,222,217
233.byte	102,15,56,222,225
234.byte	102,15,56,222,233
235	movups	(%edx,%ecx,1),%xmm1
236	addl	$32,%ecx
237.byte	102,15,56,222,208
238.byte	102,15,56,222,216
239.byte	102,15,56,222,224
240.byte	102,15,56,222,232
241	movups	-16(%edx,%ecx,1),%xmm0
242	jnz	.L007dec4_loop
243.byte	102,15,56,222,209
244.byte	102,15,56,222,217
245.byte	102,15,56,222,225
246.byte	102,15,56,222,233
247.byte	102,15,56,223,208
248.byte	102,15,56,223,216
249.byte	102,15,56,223,224
250.byte	102,15,56,223,232
251	ret
252.size	_aesni_decrypt4,.-_aesni_decrypt4
253.type	_aesni_encrypt6,@function
254.align	16
255_aesni_encrypt6:
256	movups	(%edx),%xmm0
257	shll	$4,%ecx
258	movups	16(%edx),%xmm1
259	xorps	%xmm0,%xmm2
260	pxor	%xmm0,%xmm3
261	pxor	%xmm0,%xmm4
262.byte	102,15,56,220,209
263	pxor	%xmm0,%xmm5
264	pxor	%xmm0,%xmm6
265.byte	102,15,56,220,217
266	leal	32(%edx,%ecx,1),%edx
267	negl	%ecx
268.byte	102,15,56,220,225
269	pxor	%xmm0,%xmm7
270	movups	(%edx,%ecx,1),%xmm0
271	addl	$16,%ecx
272	jmp	.L008_aesni_encrypt6_inner
273.align	16
274.L009enc6_loop:
275.byte	102,15,56,220,209
276.byte	102,15,56,220,217
277.byte	102,15,56,220,225
278.L008_aesni_encrypt6_inner:
279.byte	102,15,56,220,233
280.byte	102,15,56,220,241
281.byte	102,15,56,220,249
282.L_aesni_encrypt6_enter:
283	movups	(%edx,%ecx,1),%xmm1
284	addl	$32,%ecx
285.byte	102,15,56,220,208
286.byte	102,15,56,220,216
287.byte	102,15,56,220,224
288.byte	102,15,56,220,232
289.byte	102,15,56,220,240
290.byte	102,15,56,220,248
291	movups	-16(%edx,%ecx,1),%xmm0
292	jnz	.L009enc6_loop
293.byte	102,15,56,220,209
294.byte	102,15,56,220,217
295.byte	102,15,56,220,225
296.byte	102,15,56,220,233
297.byte	102,15,56,220,241
298.byte	102,15,56,220,249
299.byte	102,15,56,221,208
300.byte	102,15,56,221,216
301.byte	102,15,56,221,224
302.byte	102,15,56,221,232
303.byte	102,15,56,221,240
304.byte	102,15,56,221,248
305	ret
306.size	_aesni_encrypt6,.-_aesni_encrypt6
307.type	_aesni_decrypt6,@function
308.align	16
309_aesni_decrypt6:
310	movups	(%edx),%xmm0
311	shll	$4,%ecx
312	movups	16(%edx),%xmm1
313	xorps	%xmm0,%xmm2
314	pxor	%xmm0,%xmm3
315	pxor	%xmm0,%xmm4
316.byte	102,15,56,222,209
317	pxor	%xmm0,%xmm5
318	pxor	%xmm0,%xmm6
319.byte	102,15,56,222,217
320	leal	32(%edx,%ecx,1),%edx
321	negl	%ecx
322.byte	102,15,56,222,225
323	pxor	%xmm0,%xmm7
324	movups	(%edx,%ecx,1),%xmm0
325	addl	$16,%ecx
326	jmp	.L010_aesni_decrypt6_inner
327.align	16
328.L011dec6_loop:
329.byte	102,15,56,222,209
330.byte	102,15,56,222,217
331.byte	102,15,56,222,225
332.L010_aesni_decrypt6_inner:
333.byte	102,15,56,222,233
334.byte	102,15,56,222,241
335.byte	102,15,56,222,249
336.L_aesni_decrypt6_enter:
337	movups	(%edx,%ecx,1),%xmm1
338	addl	$32,%ecx
339.byte	102,15,56,222,208
340.byte	102,15,56,222,216
341.byte	102,15,56,222,224
342.byte	102,15,56,222,232
343.byte	102,15,56,222,240
344.byte	102,15,56,222,248
345	movups	-16(%edx,%ecx,1),%xmm0
346	jnz	.L011dec6_loop
347.byte	102,15,56,222,209
348.byte	102,15,56,222,217
349.byte	102,15,56,222,225
350.byte	102,15,56,222,233
351.byte	102,15,56,222,241
352.byte	102,15,56,222,249
353.byte	102,15,56,223,208
354.byte	102,15,56,223,216
355.byte	102,15,56,223,224
356.byte	102,15,56,223,232
357.byte	102,15,56,223,240
358.byte	102,15,56,223,248
359	ret
360.size	_aesni_decrypt6,.-_aesni_decrypt6
361.globl	aesni_ecb_encrypt
362.type	aesni_ecb_encrypt,@function
363.align	16
364aesni_ecb_encrypt:
365.L_aesni_ecb_encrypt_begin:
366	pushl	%ebp
367	pushl	%ebx
368	pushl	%esi
369	pushl	%edi
370	movl	20(%esp),%esi
371	movl	24(%esp),%edi
372	movl	28(%esp),%eax
373	movl	32(%esp),%edx
374	movl	36(%esp),%ebx
375	andl	$-16,%eax
376	jz	.L012ecb_ret
377	movl	240(%edx),%ecx
378	testl	%ebx,%ebx
379	jz	.L013ecb_decrypt
380	movl	%edx,%ebp
381	movl	%ecx,%ebx
382	cmpl	$96,%eax
383	jb	.L014ecb_enc_tail
384	movdqu	(%esi),%xmm2
385	movdqu	16(%esi),%xmm3
386	movdqu	32(%esi),%xmm4
387	movdqu	48(%esi),%xmm5
388	movdqu	64(%esi),%xmm6
389	movdqu	80(%esi),%xmm7
390	leal	96(%esi),%esi
391	subl	$96,%eax
392	jmp	.L015ecb_enc_loop6_enter
393.align	16
394.L016ecb_enc_loop6:
395	movups	%xmm2,(%edi)
396	movdqu	(%esi),%xmm2
397	movups	%xmm3,16(%edi)
398	movdqu	16(%esi),%xmm3
399	movups	%xmm4,32(%edi)
400	movdqu	32(%esi),%xmm4
401	movups	%xmm5,48(%edi)
402	movdqu	48(%esi),%xmm5
403	movups	%xmm6,64(%edi)
404	movdqu	64(%esi),%xmm6
405	movups	%xmm7,80(%edi)
406	leal	96(%edi),%edi
407	movdqu	80(%esi),%xmm7
408	leal	96(%esi),%esi
409.L015ecb_enc_loop6_enter:
410	call	_aesni_encrypt6
411	movl	%ebp,%edx
412	movl	%ebx,%ecx
413	subl	$96,%eax
414	jnc	.L016ecb_enc_loop6
415	movups	%xmm2,(%edi)
416	movups	%xmm3,16(%edi)
417	movups	%xmm4,32(%edi)
418	movups	%xmm5,48(%edi)
419	movups	%xmm6,64(%edi)
420	movups	%xmm7,80(%edi)
421	leal	96(%edi),%edi
422	addl	$96,%eax
423	jz	.L012ecb_ret
424.L014ecb_enc_tail:
425	movups	(%esi),%xmm2
426	cmpl	$32,%eax
427	jb	.L017ecb_enc_one
428	movups	16(%esi),%xmm3
429	je	.L018ecb_enc_two
430	movups	32(%esi),%xmm4
431	cmpl	$64,%eax
432	jb	.L019ecb_enc_three
433	movups	48(%esi),%xmm5
434	je	.L020ecb_enc_four
435	movups	64(%esi),%xmm6
436	xorps	%xmm7,%xmm7
437	call	_aesni_encrypt6
438	movups	%xmm2,(%edi)
439	movups	%xmm3,16(%edi)
440	movups	%xmm4,32(%edi)
441	movups	%xmm5,48(%edi)
442	movups	%xmm6,64(%edi)
443	jmp	.L012ecb_ret
444.align	16
445.L017ecb_enc_one:
446	movups	(%edx),%xmm0
447	movups	16(%edx),%xmm1
448	leal	32(%edx),%edx
449	xorps	%xmm0,%xmm2
450.L021enc1_loop_3:
451.byte	102,15,56,220,209
452	decl	%ecx
453	movups	(%edx),%xmm1
454	leal	16(%edx),%edx
455	jnz	.L021enc1_loop_3
456.byte	102,15,56,221,209
457	movups	%xmm2,(%edi)
458	jmp	.L012ecb_ret
459.align	16
460.L018ecb_enc_two:
461	call	_aesni_encrypt2
462	movups	%xmm2,(%edi)
463	movups	%xmm3,16(%edi)
464	jmp	.L012ecb_ret
465.align	16
466.L019ecb_enc_three:
467	call	_aesni_encrypt3
468	movups	%xmm2,(%edi)
469	movups	%xmm3,16(%edi)
470	movups	%xmm4,32(%edi)
471	jmp	.L012ecb_ret
472.align	16
473.L020ecb_enc_four:
474	call	_aesni_encrypt4
475	movups	%xmm2,(%edi)
476	movups	%xmm3,16(%edi)
477	movups	%xmm4,32(%edi)
478	movups	%xmm5,48(%edi)
479	jmp	.L012ecb_ret
480.align	16
481.L013ecb_decrypt:
482	movl	%edx,%ebp
483	movl	%ecx,%ebx
484	cmpl	$96,%eax
485	jb	.L022ecb_dec_tail
486	movdqu	(%esi),%xmm2
487	movdqu	16(%esi),%xmm3
488	movdqu	32(%esi),%xmm4
489	movdqu	48(%esi),%xmm5
490	movdqu	64(%esi),%xmm6
491	movdqu	80(%esi),%xmm7
492	leal	96(%esi),%esi
493	subl	$96,%eax
494	jmp	.L023ecb_dec_loop6_enter
495.align	16
496.L024ecb_dec_loop6:
497	movups	%xmm2,(%edi)
498	movdqu	(%esi),%xmm2
499	movups	%xmm3,16(%edi)
500	movdqu	16(%esi),%xmm3
501	movups	%xmm4,32(%edi)
502	movdqu	32(%esi),%xmm4
503	movups	%xmm5,48(%edi)
504	movdqu	48(%esi),%xmm5
505	movups	%xmm6,64(%edi)
506	movdqu	64(%esi),%xmm6
507	movups	%xmm7,80(%edi)
508	leal	96(%edi),%edi
509	movdqu	80(%esi),%xmm7
510	leal	96(%esi),%esi
511.L023ecb_dec_loop6_enter:
512	call	_aesni_decrypt6
513	movl	%ebp,%edx
514	movl	%ebx,%ecx
515	subl	$96,%eax
516	jnc	.L024ecb_dec_loop6
517	movups	%xmm2,(%edi)
518	movups	%xmm3,16(%edi)
519	movups	%xmm4,32(%edi)
520	movups	%xmm5,48(%edi)
521	movups	%xmm6,64(%edi)
522	movups	%xmm7,80(%edi)
523	leal	96(%edi),%edi
524	addl	$96,%eax
525	jz	.L012ecb_ret
526.L022ecb_dec_tail:
527	movups	(%esi),%xmm2
528	cmpl	$32,%eax
529	jb	.L025ecb_dec_one
530	movups	16(%esi),%xmm3
531	je	.L026ecb_dec_two
532	movups	32(%esi),%xmm4
533	cmpl	$64,%eax
534	jb	.L027ecb_dec_three
535	movups	48(%esi),%xmm5
536	je	.L028ecb_dec_four
537	movups	64(%esi),%xmm6
538	xorps	%xmm7,%xmm7
539	call	_aesni_decrypt6
540	movups	%xmm2,(%edi)
541	movups	%xmm3,16(%edi)
542	movups	%xmm4,32(%edi)
543	movups	%xmm5,48(%edi)
544	movups	%xmm6,64(%edi)
545	jmp	.L012ecb_ret
546.align	16
547.L025ecb_dec_one:
548	movups	(%edx),%xmm0
549	movups	16(%edx),%xmm1
550	leal	32(%edx),%edx
551	xorps	%xmm0,%xmm2
552.L029dec1_loop_4:
553.byte	102,15,56,222,209
554	decl	%ecx
555	movups	(%edx),%xmm1
556	leal	16(%edx),%edx
557	jnz	.L029dec1_loop_4
558.byte	102,15,56,223,209
559	movups	%xmm2,(%edi)
560	jmp	.L012ecb_ret
561.align	16
562.L026ecb_dec_two:
563	call	_aesni_decrypt2
564	movups	%xmm2,(%edi)
565	movups	%xmm3,16(%edi)
566	jmp	.L012ecb_ret
567.align	16
568.L027ecb_dec_three:
569	call	_aesni_decrypt3
570	movups	%xmm2,(%edi)
571	movups	%xmm3,16(%edi)
572	movups	%xmm4,32(%edi)
573	jmp	.L012ecb_ret
574.align	16
575.L028ecb_dec_four:
576	call	_aesni_decrypt4
577	movups	%xmm2,(%edi)
578	movups	%xmm3,16(%edi)
579	movups	%xmm4,32(%edi)
580	movups	%xmm5,48(%edi)
581.L012ecb_ret:
582	pxor	%xmm0,%xmm0
583	pxor	%xmm1,%xmm1
584	pxor	%xmm2,%xmm2
585	pxor	%xmm3,%xmm3
586	pxor	%xmm4,%xmm4
587	pxor	%xmm5,%xmm5
588	pxor	%xmm6,%xmm6
589	pxor	%xmm7,%xmm7
590	popl	%edi
591	popl	%esi
592	popl	%ebx
593	popl	%ebp
594	ret
595.size	aesni_ecb_encrypt,.-.L_aesni_ecb_encrypt_begin
596.globl	aesni_ccm64_encrypt_blocks
597.type	aesni_ccm64_encrypt_blocks,@function
598.align	16
599aesni_ccm64_encrypt_blocks:
600.L_aesni_ccm64_encrypt_blocks_begin:
601	pushl	%ebp
602	pushl	%ebx
603	pushl	%esi
604	pushl	%edi
605	movl	20(%esp),%esi
606	movl	24(%esp),%edi
607	movl	28(%esp),%eax
608	movl	32(%esp),%edx
609	movl	36(%esp),%ebx
610	movl	40(%esp),%ecx
611	movl	%esp,%ebp
612	subl	$60,%esp
613	andl	$-16,%esp
614	movl	%ebp,48(%esp)
615	movdqu	(%ebx),%xmm7
616	movdqu	(%ecx),%xmm3
617	movl	240(%edx),%ecx
618	movl	$202182159,(%esp)
619	movl	$134810123,4(%esp)
620	movl	$67438087,8(%esp)
621	movl	$66051,12(%esp)
622	movl	$1,%ebx
623	xorl	%ebp,%ebp
624	movl	%ebx,16(%esp)
625	movl	%ebp,20(%esp)
626	movl	%ebp,24(%esp)
627	movl	%ebp,28(%esp)
628	shll	$4,%ecx
629	movl	$16,%ebx
630	leal	(%edx),%ebp
631	movdqa	(%esp),%xmm5
632	movdqa	%xmm7,%xmm2
633	leal	32(%edx,%ecx,1),%edx
634	subl	%ecx,%ebx
635.byte	102,15,56,0,253
636.L030ccm64_enc_outer:
637	movups	(%ebp),%xmm0
638	movl	%ebx,%ecx
639	movups	(%esi),%xmm6
640	xorps	%xmm0,%xmm2
641	movups	16(%ebp),%xmm1
642	xorps	%xmm6,%xmm0
643	xorps	%xmm0,%xmm3
644	movups	32(%ebp),%xmm0
645.L031ccm64_enc2_loop:
646.byte	102,15,56,220,209
647.byte	102,15,56,220,217
648	movups	(%edx,%ecx,1),%xmm1
649	addl	$32,%ecx
650.byte	102,15,56,220,208
651.byte	102,15,56,220,216
652	movups	-16(%edx,%ecx,1),%xmm0
653	jnz	.L031ccm64_enc2_loop
654.byte	102,15,56,220,209
655.byte	102,15,56,220,217
656	paddq	16(%esp),%xmm7
657	decl	%eax
658.byte	102,15,56,221,208
659.byte	102,15,56,221,216
660	leal	16(%esi),%esi
661	xorps	%xmm2,%xmm6
662	movdqa	%xmm7,%xmm2
663	movups	%xmm6,(%edi)
664.byte	102,15,56,0,213
665	leal	16(%edi),%edi
666	jnz	.L030ccm64_enc_outer
667	movl	48(%esp),%esp
668	movl	40(%esp),%edi
669	movups	%xmm3,(%edi)
670	pxor	%xmm0,%xmm0
671	pxor	%xmm1,%xmm1
672	pxor	%xmm2,%xmm2
673	pxor	%xmm3,%xmm3
674	pxor	%xmm4,%xmm4
675	pxor	%xmm5,%xmm5
676	pxor	%xmm6,%xmm6
677	pxor	%xmm7,%xmm7
678	popl	%edi
679	popl	%esi
680	popl	%ebx
681	popl	%ebp
682	ret
683.size	aesni_ccm64_encrypt_blocks,.-.L_aesni_ccm64_encrypt_blocks_begin
684.globl	aesni_ccm64_decrypt_blocks
685.type	aesni_ccm64_decrypt_blocks,@function
686.align	16
687aesni_ccm64_decrypt_blocks:
688.L_aesni_ccm64_decrypt_blocks_begin:
689	pushl	%ebp
690	pushl	%ebx
691	pushl	%esi
692	pushl	%edi
693	movl	20(%esp),%esi
694	movl	24(%esp),%edi
695	movl	28(%esp),%eax
696	movl	32(%esp),%edx
697	movl	36(%esp),%ebx
698	movl	40(%esp),%ecx
699	movl	%esp,%ebp
700	subl	$60,%esp
701	andl	$-16,%esp
702	movl	%ebp,48(%esp)
703	movdqu	(%ebx),%xmm7
704	movdqu	(%ecx),%xmm3
705	movl	240(%edx),%ecx
706	movl	$202182159,(%esp)
707	movl	$134810123,4(%esp)
708	movl	$67438087,8(%esp)
709	movl	$66051,12(%esp)
710	movl	$1,%ebx
711	xorl	%ebp,%ebp
712	movl	%ebx,16(%esp)
713	movl	%ebp,20(%esp)
714	movl	%ebp,24(%esp)
715	movl	%ebp,28(%esp)
716	movdqa	(%esp),%xmm5
717	movdqa	%xmm7,%xmm2
718	movl	%edx,%ebp
719	movl	%ecx,%ebx
720.byte	102,15,56,0,253
721	movups	(%edx),%xmm0
722	movups	16(%edx),%xmm1
723	leal	32(%edx),%edx
724	xorps	%xmm0,%xmm2
725.L032enc1_loop_5:
726.byte	102,15,56,220,209
727	decl	%ecx
728	movups	(%edx),%xmm1
729	leal	16(%edx),%edx
730	jnz	.L032enc1_loop_5
731.byte	102,15,56,221,209
732	shll	$4,%ebx
733	movl	$16,%ecx
734	movups	(%esi),%xmm6
735	paddq	16(%esp),%xmm7
736	leal	16(%esi),%esi
737	subl	%ebx,%ecx
738	leal	32(%ebp,%ebx,1),%edx
739	movl	%ecx,%ebx
740	jmp	.L033ccm64_dec_outer
741.align	16
742.L033ccm64_dec_outer:
743	xorps	%xmm2,%xmm6
744	movdqa	%xmm7,%xmm2
745	movups	%xmm6,(%edi)
746	leal	16(%edi),%edi
747.byte	102,15,56,0,213
748	subl	$1,%eax
749	jz	.L034ccm64_dec_break
750	movups	(%ebp),%xmm0
751	movl	%ebx,%ecx
752	movups	16(%ebp),%xmm1
753	xorps	%xmm0,%xmm6
754	xorps	%xmm0,%xmm2
755	xorps	%xmm6,%xmm3
756	movups	32(%ebp),%xmm0
757.L035ccm64_dec2_loop:
758.byte	102,15,56,220,209
759.byte	102,15,56,220,217
760	movups	(%edx,%ecx,1),%xmm1
761	addl	$32,%ecx
762.byte	102,15,56,220,208
763.byte	102,15,56,220,216
764	movups	-16(%edx,%ecx,1),%xmm0
765	jnz	.L035ccm64_dec2_loop
766	movups	(%esi),%xmm6
767	paddq	16(%esp),%xmm7
768.byte	102,15,56,220,209
769.byte	102,15,56,220,217
770.byte	102,15,56,221,208
771.byte	102,15,56,221,216
772	leal	16(%esi),%esi
773	jmp	.L033ccm64_dec_outer
774.align	16
775.L034ccm64_dec_break:
776	movl	240(%ebp),%ecx
777	movl	%ebp,%edx
778	movups	(%edx),%xmm0
779	movups	16(%edx),%xmm1
780	xorps	%xmm0,%xmm6
781	leal	32(%edx),%edx
782	xorps	%xmm6,%xmm3
783.L036enc1_loop_6:
784.byte	102,15,56,220,217
785	decl	%ecx
786	movups	(%edx),%xmm1
787	leal	16(%edx),%edx
788	jnz	.L036enc1_loop_6
789.byte	102,15,56,221,217
790	movl	48(%esp),%esp
791	movl	40(%esp),%edi
792	movups	%xmm3,(%edi)
793	pxor	%xmm0,%xmm0
794	pxor	%xmm1,%xmm1
795	pxor	%xmm2,%xmm2
796	pxor	%xmm3,%xmm3
797	pxor	%xmm4,%xmm4
798	pxor	%xmm5,%xmm5
799	pxor	%xmm6,%xmm6
800	pxor	%xmm7,%xmm7
801	popl	%edi
802	popl	%esi
803	popl	%ebx
804	popl	%ebp
805	ret
806.size	aesni_ccm64_decrypt_blocks,.-.L_aesni_ccm64_decrypt_blocks_begin
807.globl	aesni_ctr32_encrypt_blocks
808.type	aesni_ctr32_encrypt_blocks,@function
809.align	16
810aesni_ctr32_encrypt_blocks:
811.L_aesni_ctr32_encrypt_blocks_begin:
812	pushl	%ebp
813	pushl	%ebx
814	pushl	%esi
815	pushl	%edi
816	movl	20(%esp),%esi
817	movl	24(%esp),%edi
818	movl	28(%esp),%eax
819	movl	32(%esp),%edx
820	movl	36(%esp),%ebx
821	movl	%esp,%ebp
822	subl	$88,%esp
823	andl	$-16,%esp
824	movl	%ebp,80(%esp)
825	cmpl	$1,%eax
826	je	.L037ctr32_one_shortcut
827	movdqu	(%ebx),%xmm7
828	movl	$202182159,(%esp)
829	movl	$134810123,4(%esp)
830	movl	$67438087,8(%esp)
831	movl	$66051,12(%esp)
832	movl	$6,%ecx
833	xorl	%ebp,%ebp
834	movl	%ecx,16(%esp)
835	movl	%ecx,20(%esp)
836	movl	%ecx,24(%esp)
837	movl	%ebp,28(%esp)
838.byte	102,15,58,22,251,3
839.byte	102,15,58,34,253,3
840	movl	240(%edx),%ecx
841	bswap	%ebx
842	pxor	%xmm0,%xmm0
843	pxor	%xmm1,%xmm1
844	movdqa	(%esp),%xmm2
845.byte	102,15,58,34,195,0
846	leal	3(%ebx),%ebp
847.byte	102,15,58,34,205,0
848	incl	%ebx
849.byte	102,15,58,34,195,1
850	incl	%ebp
851.byte	102,15,58,34,205,1
852	incl	%ebx
853.byte	102,15,58,34,195,2
854	incl	%ebp
855.byte	102,15,58,34,205,2
856	movdqa	%xmm0,48(%esp)
857.byte	102,15,56,0,194
858	movdqu	(%edx),%xmm6
859	movdqa	%xmm1,64(%esp)
860.byte	102,15,56,0,202
861	pshufd	$192,%xmm0,%xmm2
862	pshufd	$128,%xmm0,%xmm3
863	cmpl	$6,%eax
864	jb	.L038ctr32_tail
865	pxor	%xmm6,%xmm7
866	shll	$4,%ecx
867	movl	$16,%ebx
868	movdqa	%xmm7,32(%esp)
869	movl	%edx,%ebp
870	subl	%ecx,%ebx
871	leal	32(%edx,%ecx,1),%edx
872	subl	$6,%eax
873	jmp	.L039ctr32_loop6
874.align	16
875.L039ctr32_loop6:
876	pshufd	$64,%xmm0,%xmm4
877	movdqa	32(%esp),%xmm0
878	pshufd	$192,%xmm1,%xmm5
879	pxor	%xmm0,%xmm2
880	pshufd	$128,%xmm1,%xmm6
881	pxor	%xmm0,%xmm3
882	pshufd	$64,%xmm1,%xmm7
883	movups	16(%ebp),%xmm1
884	pxor	%xmm0,%xmm4
885	pxor	%xmm0,%xmm5
886.byte	102,15,56,220,209
887	pxor	%xmm0,%xmm6
888	pxor	%xmm0,%xmm7
889.byte	102,15,56,220,217
890	movups	32(%ebp),%xmm0
891	movl	%ebx,%ecx
892.byte	102,15,56,220,225
893.byte	102,15,56,220,233
894.byte	102,15,56,220,241
895.byte	102,15,56,220,249
896	call	.L_aesni_encrypt6_enter
897	movups	(%esi),%xmm1
898	movups	16(%esi),%xmm0
899	xorps	%xmm1,%xmm2
900	movups	32(%esi),%xmm1
901	xorps	%xmm0,%xmm3
902	movups	%xmm2,(%edi)
903	movdqa	16(%esp),%xmm0
904	xorps	%xmm1,%xmm4
905	movdqa	64(%esp),%xmm1
906	movups	%xmm3,16(%edi)
907	movups	%xmm4,32(%edi)
908	paddd	%xmm0,%xmm1
909	paddd	48(%esp),%xmm0
910	movdqa	(%esp),%xmm2
911	movups	48(%esi),%xmm3
912	movups	64(%esi),%xmm4
913	xorps	%xmm3,%xmm5
914	movups	80(%esi),%xmm3
915	leal	96(%esi),%esi
916	movdqa	%xmm0,48(%esp)
917.byte	102,15,56,0,194
918	xorps	%xmm4,%xmm6
919	movups	%xmm5,48(%edi)
920	xorps	%xmm3,%xmm7
921	movdqa	%xmm1,64(%esp)
922.byte	102,15,56,0,202
923	movups	%xmm6,64(%edi)
924	pshufd	$192,%xmm0,%xmm2
925	movups	%xmm7,80(%edi)
926	leal	96(%edi),%edi
927	pshufd	$128,%xmm0,%xmm3
928	subl	$6,%eax
929	jnc	.L039ctr32_loop6
930	addl	$6,%eax
931	jz	.L040ctr32_ret
932	movdqu	(%ebp),%xmm7
933	movl	%ebp,%edx
934	pxor	32(%esp),%xmm7
935	movl	240(%ebp),%ecx
936.L038ctr32_tail:
937	por	%xmm7,%xmm2
938	cmpl	$2,%eax
939	jb	.L041ctr32_one
940	pshufd	$64,%xmm0,%xmm4
941	por	%xmm7,%xmm3
942	je	.L042ctr32_two
943	pshufd	$192,%xmm1,%xmm5
944	por	%xmm7,%xmm4
945	cmpl	$4,%eax
946	jb	.L043ctr32_three
947	pshufd	$128,%xmm1,%xmm6
948	por	%xmm7,%xmm5
949	je	.L044ctr32_four
950	por	%xmm7,%xmm6
951	call	_aesni_encrypt6
952	movups	(%esi),%xmm1
953	movups	16(%esi),%xmm0
954	xorps	%xmm1,%xmm2
955	movups	32(%esi),%xmm1
956	xorps	%xmm0,%xmm3
957	movups	48(%esi),%xmm0
958	xorps	%xmm1,%xmm4
959	movups	64(%esi),%xmm1
960	xorps	%xmm0,%xmm5
961	movups	%xmm2,(%edi)
962	xorps	%xmm1,%xmm6
963	movups	%xmm3,16(%edi)
964	movups	%xmm4,32(%edi)
965	movups	%xmm5,48(%edi)
966	movups	%xmm6,64(%edi)
967	jmp	.L040ctr32_ret
968.align	16
969.L037ctr32_one_shortcut:
970	movups	(%ebx),%xmm2
971	movl	240(%edx),%ecx
972.L041ctr32_one:
973	movups	(%edx),%xmm0
974	movups	16(%edx),%xmm1
975	leal	32(%edx),%edx
976	xorps	%xmm0,%xmm2
977.L045enc1_loop_7:
978.byte	102,15,56,220,209
979	decl	%ecx
980	movups	(%edx),%xmm1
981	leal	16(%edx),%edx
982	jnz	.L045enc1_loop_7
983.byte	102,15,56,221,209
984	movups	(%esi),%xmm6
985	xorps	%xmm2,%xmm6
986	movups	%xmm6,(%edi)
987	jmp	.L040ctr32_ret
988.align	16
989.L042ctr32_two:
990	call	_aesni_encrypt2
991	movups	(%esi),%xmm5
992	movups	16(%esi),%xmm6
993	xorps	%xmm5,%xmm2
994	xorps	%xmm6,%xmm3
995	movups	%xmm2,(%edi)
996	movups	%xmm3,16(%edi)
997	jmp	.L040ctr32_ret
998.align	16
999.L043ctr32_three:
1000	call	_aesni_encrypt3
1001	movups	(%esi),%xmm5
1002	movups	16(%esi),%xmm6
1003	xorps	%xmm5,%xmm2
1004	movups	32(%esi),%xmm7
1005	xorps	%xmm6,%xmm3
1006	movups	%xmm2,(%edi)
1007	xorps	%xmm7,%xmm4
1008	movups	%xmm3,16(%edi)
1009	movups	%xmm4,32(%edi)
1010	jmp	.L040ctr32_ret
1011.align	16
1012.L044ctr32_four:
1013	call	_aesni_encrypt4
1014	movups	(%esi),%xmm6
1015	movups	16(%esi),%xmm7
1016	movups	32(%esi),%xmm1
1017	xorps	%xmm6,%xmm2
1018	movups	48(%esi),%xmm0
1019	xorps	%xmm7,%xmm3
1020	movups	%xmm2,(%edi)
1021	xorps	%xmm1,%xmm4
1022	movups	%xmm3,16(%edi)
1023	xorps	%xmm0,%xmm5
1024	movups	%xmm4,32(%edi)
1025	movups	%xmm5,48(%edi)
1026.L040ctr32_ret:
1027	pxor	%xmm0,%xmm0
1028	pxor	%xmm1,%xmm1
1029	pxor	%xmm2,%xmm2
1030	pxor	%xmm3,%xmm3
1031	pxor	%xmm4,%xmm4
1032	movdqa	%xmm0,32(%esp)
1033	pxor	%xmm5,%xmm5
1034	movdqa	%xmm0,48(%esp)
1035	pxor	%xmm6,%xmm6
1036	movdqa	%xmm0,64(%esp)
1037	pxor	%xmm7,%xmm7
1038	movl	80(%esp),%esp
1039	popl	%edi
1040	popl	%esi
1041	popl	%ebx
1042	popl	%ebp
1043	ret
1044.size	aesni_ctr32_encrypt_blocks,.-.L_aesni_ctr32_encrypt_blocks_begin
1045.globl	aesni_xts_encrypt
1046.type	aesni_xts_encrypt,@function
1047.align	16
1048aesni_xts_encrypt:
1049.L_aesni_xts_encrypt_begin:
1050	pushl	%ebp
1051	pushl	%ebx
1052	pushl	%esi
1053	pushl	%edi
1054	movl	36(%esp),%edx
1055	movl	40(%esp),%esi
1056	movl	240(%edx),%ecx
1057	movups	(%esi),%xmm2
1058	movups	(%edx),%xmm0
1059	movups	16(%edx),%xmm1
1060	leal	32(%edx),%edx
1061	xorps	%xmm0,%xmm2
1062.L046enc1_loop_8:
1063.byte	102,15,56,220,209
1064	decl	%ecx
1065	movups	(%edx),%xmm1
1066	leal	16(%edx),%edx
1067	jnz	.L046enc1_loop_8
1068.byte	102,15,56,221,209
1069	movl	20(%esp),%esi
1070	movl	24(%esp),%edi
1071	movl	28(%esp),%eax
1072	movl	32(%esp),%edx
1073	movl	%esp,%ebp
1074	subl	$120,%esp
1075	movl	240(%edx),%ecx
1076	andl	$-16,%esp
1077	movl	$135,96(%esp)
1078	movl	$0,100(%esp)
1079	movl	$1,104(%esp)
1080	movl	$0,108(%esp)
1081	movl	%eax,112(%esp)
1082	movl	%ebp,116(%esp)
1083	movdqa	%xmm2,%xmm1
1084	pxor	%xmm0,%xmm0
1085	movdqa	96(%esp),%xmm3
1086	pcmpgtd	%xmm1,%xmm0
1087	andl	$-16,%eax
1088	movl	%edx,%ebp
1089	movl	%ecx,%ebx
1090	subl	$96,%eax
1091	jc	.L047xts_enc_short
1092	shll	$4,%ecx
1093	movl	$16,%ebx
1094	subl	%ecx,%ebx
1095	leal	32(%edx,%ecx,1),%edx
1096	jmp	.L048xts_enc_loop6
1097.align	16
1098.L048xts_enc_loop6:
1099	pshufd	$19,%xmm0,%xmm2
1100	pxor	%xmm0,%xmm0
1101	movdqa	%xmm1,(%esp)
1102	paddq	%xmm1,%xmm1
1103	pand	%xmm3,%xmm2
1104	pcmpgtd	%xmm1,%xmm0
1105	pxor	%xmm2,%xmm1
1106	pshufd	$19,%xmm0,%xmm2
1107	pxor	%xmm0,%xmm0
1108	movdqa	%xmm1,16(%esp)
1109	paddq	%xmm1,%xmm1
1110	pand	%xmm3,%xmm2
1111	pcmpgtd	%xmm1,%xmm0
1112	pxor	%xmm2,%xmm1
1113	pshufd	$19,%xmm0,%xmm2
1114	pxor	%xmm0,%xmm0
1115	movdqa	%xmm1,32(%esp)
1116	paddq	%xmm1,%xmm1
1117	pand	%xmm3,%xmm2
1118	pcmpgtd	%xmm1,%xmm0
1119	pxor	%xmm2,%xmm1
1120	pshufd	$19,%xmm0,%xmm2
1121	pxor	%xmm0,%xmm0
1122	movdqa	%xmm1,48(%esp)
1123	paddq	%xmm1,%xmm1
1124	pand	%xmm3,%xmm2
1125	pcmpgtd	%xmm1,%xmm0
1126	pxor	%xmm2,%xmm1
1127	pshufd	$19,%xmm0,%xmm7
1128	movdqa	%xmm1,64(%esp)
1129	paddq	%xmm1,%xmm1
1130	movups	(%ebp),%xmm0
1131	pand	%xmm3,%xmm7
1132	movups	(%esi),%xmm2
1133	pxor	%xmm1,%xmm7
1134	movl	%ebx,%ecx
1135	movdqu	16(%esi),%xmm3
1136	xorps	%xmm0,%xmm2
1137	movdqu	32(%esi),%xmm4
1138	pxor	%xmm0,%xmm3
1139	movdqu	48(%esi),%xmm5
1140	pxor	%xmm0,%xmm4
1141	movdqu	64(%esi),%xmm6
1142	pxor	%xmm0,%xmm5
1143	movdqu	80(%esi),%xmm1
1144	pxor	%xmm0,%xmm6
1145	leal	96(%esi),%esi
1146	pxor	(%esp),%xmm2
1147	movdqa	%xmm7,80(%esp)
1148	pxor	%xmm1,%xmm7
1149	movups	16(%ebp),%xmm1
1150	pxor	16(%esp),%xmm3
1151	pxor	32(%esp),%xmm4
1152.byte	102,15,56,220,209
1153	pxor	48(%esp),%xmm5
1154	pxor	64(%esp),%xmm6
1155.byte	102,15,56,220,217
1156	pxor	%xmm0,%xmm7
1157	movups	32(%ebp),%xmm0
1158.byte	102,15,56,220,225
1159.byte	102,15,56,220,233
1160.byte	102,15,56,220,241
1161.byte	102,15,56,220,249
1162	call	.L_aesni_encrypt6_enter
1163	movdqa	80(%esp),%xmm1
1164	pxor	%xmm0,%xmm0
1165	xorps	(%esp),%xmm2
1166	pcmpgtd	%xmm1,%xmm0
1167	xorps	16(%esp),%xmm3
1168	movups	%xmm2,(%edi)
1169	xorps	32(%esp),%xmm4
1170	movups	%xmm3,16(%edi)
1171	xorps	48(%esp),%xmm5
1172	movups	%xmm4,32(%edi)
1173	xorps	64(%esp),%xmm6
1174	movups	%xmm5,48(%edi)
1175	xorps	%xmm1,%xmm7
1176	movups	%xmm6,64(%edi)
1177	pshufd	$19,%xmm0,%xmm2
1178	movups	%xmm7,80(%edi)
1179	leal	96(%edi),%edi
1180	movdqa	96(%esp),%xmm3
1181	pxor	%xmm0,%xmm0
1182	paddq	%xmm1,%xmm1
1183	pand	%xmm3,%xmm2
1184	pcmpgtd	%xmm1,%xmm0
1185	pxor	%xmm2,%xmm1
1186	subl	$96,%eax
1187	jnc	.L048xts_enc_loop6
1188	movl	240(%ebp),%ecx
1189	movl	%ebp,%edx
1190	movl	%ecx,%ebx
1191.L047xts_enc_short:
1192	addl	$96,%eax
1193	jz	.L049xts_enc_done6x
1194	movdqa	%xmm1,%xmm5
1195	cmpl	$32,%eax
1196	jb	.L050xts_enc_one
1197	pshufd	$19,%xmm0,%xmm2
1198	pxor	%xmm0,%xmm0
1199	paddq	%xmm1,%xmm1
1200	pand	%xmm3,%xmm2
1201	pcmpgtd	%xmm1,%xmm0
1202	pxor	%xmm2,%xmm1
1203	je	.L051xts_enc_two
1204	pshufd	$19,%xmm0,%xmm2
1205	pxor	%xmm0,%xmm0
1206	movdqa	%xmm1,%xmm6
1207	paddq	%xmm1,%xmm1
1208	pand	%xmm3,%xmm2
1209	pcmpgtd	%xmm1,%xmm0
1210	pxor	%xmm2,%xmm1
1211	cmpl	$64,%eax
1212	jb	.L052xts_enc_three
1213	pshufd	$19,%xmm0,%xmm2
1214	pxor	%xmm0,%xmm0
1215	movdqa	%xmm1,%xmm7
1216	paddq	%xmm1,%xmm1
1217	pand	%xmm3,%xmm2
1218	pcmpgtd	%xmm1,%xmm0
1219	pxor	%xmm2,%xmm1
1220	movdqa	%xmm5,(%esp)
1221	movdqa	%xmm6,16(%esp)
1222	je	.L053xts_enc_four
1223	movdqa	%xmm7,32(%esp)
1224	pshufd	$19,%xmm0,%xmm7
1225	movdqa	%xmm1,48(%esp)
1226	paddq	%xmm1,%xmm1
1227	pand	%xmm3,%xmm7
1228	pxor	%xmm1,%xmm7
1229	movdqu	(%esi),%xmm2
1230	movdqu	16(%esi),%xmm3
1231	movdqu	32(%esi),%xmm4
1232	pxor	(%esp),%xmm2
1233	movdqu	48(%esi),%xmm5
1234	pxor	16(%esp),%xmm3
1235	movdqu	64(%esi),%xmm6
1236	pxor	32(%esp),%xmm4
1237	leal	80(%esi),%esi
1238	pxor	48(%esp),%xmm5
1239	movdqa	%xmm7,64(%esp)
1240	pxor	%xmm7,%xmm6
1241	call	_aesni_encrypt6
1242	movaps	64(%esp),%xmm1
1243	xorps	(%esp),%xmm2
1244	xorps	16(%esp),%xmm3
1245	xorps	32(%esp),%xmm4
1246	movups	%xmm2,(%edi)
1247	xorps	48(%esp),%xmm5
1248	movups	%xmm3,16(%edi)
1249	xorps	%xmm1,%xmm6
1250	movups	%xmm4,32(%edi)
1251	movups	%xmm5,48(%edi)
1252	movups	%xmm6,64(%edi)
1253	leal	80(%edi),%edi
1254	jmp	.L054xts_enc_done
1255.align	16
1256.L050xts_enc_one:
1257	movups	(%esi),%xmm2
1258	leal	16(%esi),%esi
1259	xorps	%xmm5,%xmm2
1260	movups	(%edx),%xmm0
1261	movups	16(%edx),%xmm1
1262	leal	32(%edx),%edx
1263	xorps	%xmm0,%xmm2
1264.L055enc1_loop_9:
1265.byte	102,15,56,220,209
1266	decl	%ecx
1267	movups	(%edx),%xmm1
1268	leal	16(%edx),%edx
1269	jnz	.L055enc1_loop_9
1270.byte	102,15,56,221,209
1271	xorps	%xmm5,%xmm2
1272	movups	%xmm2,(%edi)
1273	leal	16(%edi),%edi
1274	movdqa	%xmm5,%xmm1
1275	jmp	.L054xts_enc_done
1276.align	16
1277.L051xts_enc_two:
1278	movaps	%xmm1,%xmm6
1279	movups	(%esi),%xmm2
1280	movups	16(%esi),%xmm3
1281	leal	32(%esi),%esi
1282	xorps	%xmm5,%xmm2
1283	xorps	%xmm6,%xmm3
1284	call	_aesni_encrypt2
1285	xorps	%xmm5,%xmm2
1286	xorps	%xmm6,%xmm3
1287	movups	%xmm2,(%edi)
1288	movups	%xmm3,16(%edi)
1289	leal	32(%edi),%edi
1290	movdqa	%xmm6,%xmm1
1291	jmp	.L054xts_enc_done
1292.align	16
1293.L052xts_enc_three:
1294	movaps	%xmm1,%xmm7
1295	movups	(%esi),%xmm2
1296	movups	16(%esi),%xmm3
1297	movups	32(%esi),%xmm4
1298	leal	48(%esi),%esi
1299	xorps	%xmm5,%xmm2
1300	xorps	%xmm6,%xmm3
1301	xorps	%xmm7,%xmm4
1302	call	_aesni_encrypt3
1303	xorps	%xmm5,%xmm2
1304	xorps	%xmm6,%xmm3
1305	xorps	%xmm7,%xmm4
1306	movups	%xmm2,(%edi)
1307	movups	%xmm3,16(%edi)
1308	movups	%xmm4,32(%edi)
1309	leal	48(%edi),%edi
1310	movdqa	%xmm7,%xmm1
1311	jmp	.L054xts_enc_done
1312.align	16
1313.L053xts_enc_four:
1314	movaps	%xmm1,%xmm6
1315	movups	(%esi),%xmm2
1316	movups	16(%esi),%xmm3
1317	movups	32(%esi),%xmm4
1318	xorps	(%esp),%xmm2
1319	movups	48(%esi),%xmm5
1320	leal	64(%esi),%esi
1321	xorps	16(%esp),%xmm3
1322	xorps	%xmm7,%xmm4
1323	xorps	%xmm6,%xmm5
1324	call	_aesni_encrypt4
1325	xorps	(%esp),%xmm2
1326	xorps	16(%esp),%xmm3
1327	xorps	%xmm7,%xmm4
1328	movups	%xmm2,(%edi)
1329	xorps	%xmm6,%xmm5
1330	movups	%xmm3,16(%edi)
1331	movups	%xmm4,32(%edi)
1332	movups	%xmm5,48(%edi)
1333	leal	64(%edi),%edi
1334	movdqa	%xmm6,%xmm1
1335	jmp	.L054xts_enc_done
1336.align	16
1337.L049xts_enc_done6x:
1338	movl	112(%esp),%eax
1339	andl	$15,%eax
1340	jz	.L056xts_enc_ret
1341	movdqa	%xmm1,%xmm5
1342	movl	%eax,112(%esp)
1343	jmp	.L057xts_enc_steal
1344.align	16
1345.L054xts_enc_done:
1346	movl	112(%esp),%eax
1347	pxor	%xmm0,%xmm0
1348	andl	$15,%eax
1349	jz	.L056xts_enc_ret
1350	pcmpgtd	%xmm1,%xmm0
1351	movl	%eax,112(%esp)
1352	pshufd	$19,%xmm0,%xmm5
1353	paddq	%xmm1,%xmm1
1354	pand	96(%esp),%xmm5
1355	pxor	%xmm1,%xmm5
1356.L057xts_enc_steal:
1357	movzbl	(%esi),%ecx
1358	movzbl	-16(%edi),%edx
1359	leal	1(%esi),%esi
1360	movb	%cl,-16(%edi)
1361	movb	%dl,(%edi)
1362	leal	1(%edi),%edi
1363	subl	$1,%eax
1364	jnz	.L057xts_enc_steal
1365	subl	112(%esp),%edi
1366	movl	%ebp,%edx
1367	movl	%ebx,%ecx
1368	movups	-16(%edi),%xmm2
1369	xorps	%xmm5,%xmm2
1370	movups	(%edx),%xmm0
1371	movups	16(%edx),%xmm1
1372	leal	32(%edx),%edx
1373	xorps	%xmm0,%xmm2
1374.L058enc1_loop_10:
1375.byte	102,15,56,220,209
1376	decl	%ecx
1377	movups	(%edx),%xmm1
1378	leal	16(%edx),%edx
1379	jnz	.L058enc1_loop_10
1380.byte	102,15,56,221,209
1381	xorps	%xmm5,%xmm2
1382	movups	%xmm2,-16(%edi)
1383.L056xts_enc_ret:
1384	pxor	%xmm0,%xmm0
1385	pxor	%xmm1,%xmm1
1386	pxor	%xmm2,%xmm2
1387	movdqa	%xmm0,(%esp)
1388	pxor	%xmm3,%xmm3
1389	movdqa	%xmm0,16(%esp)
1390	pxor	%xmm4,%xmm4
1391	movdqa	%xmm0,32(%esp)
1392	pxor	%xmm5,%xmm5
1393	movdqa	%xmm0,48(%esp)
1394	pxor	%xmm6,%xmm6
1395	movdqa	%xmm0,64(%esp)
1396	pxor	%xmm7,%xmm7
1397	movdqa	%xmm0,80(%esp)
1398	movl	116(%esp),%esp
1399	popl	%edi
1400	popl	%esi
1401	popl	%ebx
1402	popl	%ebp
1403	ret
1404.size	aesni_xts_encrypt,.-.L_aesni_xts_encrypt_begin
1405.globl	aesni_xts_decrypt
1406.type	aesni_xts_decrypt,@function
1407.align	16
1408aesni_xts_decrypt:
1409.L_aesni_xts_decrypt_begin:
1410	pushl	%ebp
1411	pushl	%ebx
1412	pushl	%esi
1413	pushl	%edi
1414	movl	36(%esp),%edx
1415	movl	40(%esp),%esi
1416	movl	240(%edx),%ecx
1417	movups	(%esi),%xmm2
1418	movups	(%edx),%xmm0
1419	movups	16(%edx),%xmm1
1420	leal	32(%edx),%edx
1421	xorps	%xmm0,%xmm2
1422.L059enc1_loop_11:
1423.byte	102,15,56,220,209
1424	decl	%ecx
1425	movups	(%edx),%xmm1
1426	leal	16(%edx),%edx
1427	jnz	.L059enc1_loop_11
1428.byte	102,15,56,221,209
1429	movl	20(%esp),%esi
1430	movl	24(%esp),%edi
1431	movl	28(%esp),%eax
1432	movl	32(%esp),%edx
1433	movl	%esp,%ebp
1434	subl	$120,%esp
1435	andl	$-16,%esp
1436	xorl	%ebx,%ebx
1437	testl	$15,%eax
1438	setnz	%bl
1439	shll	$4,%ebx
1440	subl	%ebx,%eax
1441	movl	$135,96(%esp)
1442	movl	$0,100(%esp)
1443	movl	$1,104(%esp)
1444	movl	$0,108(%esp)
1445	movl	%eax,112(%esp)
1446	movl	%ebp,116(%esp)
1447	movl	240(%edx),%ecx
1448	movl	%edx,%ebp
1449	movl	%ecx,%ebx
1450	movdqa	%xmm2,%xmm1
1451	pxor	%xmm0,%xmm0
1452	movdqa	96(%esp),%xmm3
1453	pcmpgtd	%xmm1,%xmm0
1454	andl	$-16,%eax
1455	subl	$96,%eax
1456	jc	.L060xts_dec_short
1457	shll	$4,%ecx
1458	movl	$16,%ebx
1459	subl	%ecx,%ebx
1460	leal	32(%edx,%ecx,1),%edx
1461	jmp	.L061xts_dec_loop6
1462.align	16
1463.L061xts_dec_loop6:
1464	pshufd	$19,%xmm0,%xmm2
1465	pxor	%xmm0,%xmm0
1466	movdqa	%xmm1,(%esp)
1467	paddq	%xmm1,%xmm1
1468	pand	%xmm3,%xmm2
1469	pcmpgtd	%xmm1,%xmm0
1470	pxor	%xmm2,%xmm1
1471	pshufd	$19,%xmm0,%xmm2
1472	pxor	%xmm0,%xmm0
1473	movdqa	%xmm1,16(%esp)
1474	paddq	%xmm1,%xmm1
1475	pand	%xmm3,%xmm2
1476	pcmpgtd	%xmm1,%xmm0
1477	pxor	%xmm2,%xmm1
1478	pshufd	$19,%xmm0,%xmm2
1479	pxor	%xmm0,%xmm0
1480	movdqa	%xmm1,32(%esp)
1481	paddq	%xmm1,%xmm1
1482	pand	%xmm3,%xmm2
1483	pcmpgtd	%xmm1,%xmm0
1484	pxor	%xmm2,%xmm1
1485	pshufd	$19,%xmm0,%xmm2
1486	pxor	%xmm0,%xmm0
1487	movdqa	%xmm1,48(%esp)
1488	paddq	%xmm1,%xmm1
1489	pand	%xmm3,%xmm2
1490	pcmpgtd	%xmm1,%xmm0
1491	pxor	%xmm2,%xmm1
1492	pshufd	$19,%xmm0,%xmm7
1493	movdqa	%xmm1,64(%esp)
1494	paddq	%xmm1,%xmm1
1495	movups	(%ebp),%xmm0
1496	pand	%xmm3,%xmm7
1497	movups	(%esi),%xmm2
1498	pxor	%xmm1,%xmm7
1499	movl	%ebx,%ecx
1500	movdqu	16(%esi),%xmm3
1501	xorps	%xmm0,%xmm2
1502	movdqu	32(%esi),%xmm4
1503	pxor	%xmm0,%xmm3
1504	movdqu	48(%esi),%xmm5
1505	pxor	%xmm0,%xmm4
1506	movdqu	64(%esi),%xmm6
1507	pxor	%xmm0,%xmm5
1508	movdqu	80(%esi),%xmm1
1509	pxor	%xmm0,%xmm6
1510	leal	96(%esi),%esi
1511	pxor	(%esp),%xmm2
1512	movdqa	%xmm7,80(%esp)
1513	pxor	%xmm1,%xmm7
1514	movups	16(%ebp),%xmm1
1515	pxor	16(%esp),%xmm3
1516	pxor	32(%esp),%xmm4
1517.byte	102,15,56,222,209
1518	pxor	48(%esp),%xmm5
1519	pxor	64(%esp),%xmm6
1520.byte	102,15,56,222,217
1521	pxor	%xmm0,%xmm7
1522	movups	32(%ebp),%xmm0
1523.byte	102,15,56,222,225
1524.byte	102,15,56,222,233
1525.byte	102,15,56,222,241
1526.byte	102,15,56,222,249
1527	call	.L_aesni_decrypt6_enter
1528	movdqa	80(%esp),%xmm1
1529	pxor	%xmm0,%xmm0
1530	xorps	(%esp),%xmm2
1531	pcmpgtd	%xmm1,%xmm0
1532	xorps	16(%esp),%xmm3
1533	movups	%xmm2,(%edi)
1534	xorps	32(%esp),%xmm4
1535	movups	%xmm3,16(%edi)
1536	xorps	48(%esp),%xmm5
1537	movups	%xmm4,32(%edi)
1538	xorps	64(%esp),%xmm6
1539	movups	%xmm5,48(%edi)
1540	xorps	%xmm1,%xmm7
1541	movups	%xmm6,64(%edi)
1542	pshufd	$19,%xmm0,%xmm2
1543	movups	%xmm7,80(%edi)
1544	leal	96(%edi),%edi
1545	movdqa	96(%esp),%xmm3
1546	pxor	%xmm0,%xmm0
1547	paddq	%xmm1,%xmm1
1548	pand	%xmm3,%xmm2
1549	pcmpgtd	%xmm1,%xmm0
1550	pxor	%xmm2,%xmm1
1551	subl	$96,%eax
1552	jnc	.L061xts_dec_loop6
1553	movl	240(%ebp),%ecx
1554	movl	%ebp,%edx
1555	movl	%ecx,%ebx
1556.L060xts_dec_short:
1557	addl	$96,%eax
1558	jz	.L062xts_dec_done6x
1559	movdqa	%xmm1,%xmm5
1560	cmpl	$32,%eax
1561	jb	.L063xts_dec_one
1562	pshufd	$19,%xmm0,%xmm2
1563	pxor	%xmm0,%xmm0
1564	paddq	%xmm1,%xmm1
1565	pand	%xmm3,%xmm2
1566	pcmpgtd	%xmm1,%xmm0
1567	pxor	%xmm2,%xmm1
1568	je	.L064xts_dec_two
1569	pshufd	$19,%xmm0,%xmm2
1570	pxor	%xmm0,%xmm0
1571	movdqa	%xmm1,%xmm6
1572	paddq	%xmm1,%xmm1
1573	pand	%xmm3,%xmm2
1574	pcmpgtd	%xmm1,%xmm0
1575	pxor	%xmm2,%xmm1
1576	cmpl	$64,%eax
1577	jb	.L065xts_dec_three
1578	pshufd	$19,%xmm0,%xmm2
1579	pxor	%xmm0,%xmm0
1580	movdqa	%xmm1,%xmm7
1581	paddq	%xmm1,%xmm1
1582	pand	%xmm3,%xmm2
1583	pcmpgtd	%xmm1,%xmm0
1584	pxor	%xmm2,%xmm1
1585	movdqa	%xmm5,(%esp)
1586	movdqa	%xmm6,16(%esp)
1587	je	.L066xts_dec_four
1588	movdqa	%xmm7,32(%esp)
1589	pshufd	$19,%xmm0,%xmm7
1590	movdqa	%xmm1,48(%esp)
1591	paddq	%xmm1,%xmm1
1592	pand	%xmm3,%xmm7
1593	pxor	%xmm1,%xmm7
1594	movdqu	(%esi),%xmm2
1595	movdqu	16(%esi),%xmm3
1596	movdqu	32(%esi),%xmm4
1597	pxor	(%esp),%xmm2
1598	movdqu	48(%esi),%xmm5
1599	pxor	16(%esp),%xmm3
1600	movdqu	64(%esi),%xmm6
1601	pxor	32(%esp),%xmm4
1602	leal	80(%esi),%esi
1603	pxor	48(%esp),%xmm5
1604	movdqa	%xmm7,64(%esp)
1605	pxor	%xmm7,%xmm6
1606	call	_aesni_decrypt6
1607	movaps	64(%esp),%xmm1
1608	xorps	(%esp),%xmm2
1609	xorps	16(%esp),%xmm3
1610	xorps	32(%esp),%xmm4
1611	movups	%xmm2,(%edi)
1612	xorps	48(%esp),%xmm5
1613	movups	%xmm3,16(%edi)
1614	xorps	%xmm1,%xmm6
1615	movups	%xmm4,32(%edi)
1616	movups	%xmm5,48(%edi)
1617	movups	%xmm6,64(%edi)
1618	leal	80(%edi),%edi
1619	jmp	.L067xts_dec_done
1620.align	16
1621.L063xts_dec_one:
1622	movups	(%esi),%xmm2
1623	leal	16(%esi),%esi
1624	xorps	%xmm5,%xmm2
1625	movups	(%edx),%xmm0
1626	movups	16(%edx),%xmm1
1627	leal	32(%edx),%edx
1628	xorps	%xmm0,%xmm2
1629.L068dec1_loop_12:
1630.byte	102,15,56,222,209
1631	decl	%ecx
1632	movups	(%edx),%xmm1
1633	leal	16(%edx),%edx
1634	jnz	.L068dec1_loop_12
1635.byte	102,15,56,223,209
1636	xorps	%xmm5,%xmm2
1637	movups	%xmm2,(%edi)
1638	leal	16(%edi),%edi
1639	movdqa	%xmm5,%xmm1
1640	jmp	.L067xts_dec_done
1641.align	16
1642.L064xts_dec_two:
1643	movaps	%xmm1,%xmm6
1644	movups	(%esi),%xmm2
1645	movups	16(%esi),%xmm3
1646	leal	32(%esi),%esi
1647	xorps	%xmm5,%xmm2
1648	xorps	%xmm6,%xmm3
1649	call	_aesni_decrypt2
1650	xorps	%xmm5,%xmm2
1651	xorps	%xmm6,%xmm3
1652	movups	%xmm2,(%edi)
1653	movups	%xmm3,16(%edi)
1654	leal	32(%edi),%edi
1655	movdqa	%xmm6,%xmm1
1656	jmp	.L067xts_dec_done
1657.align	16
1658.L065xts_dec_three:
1659	movaps	%xmm1,%xmm7
1660	movups	(%esi),%xmm2
1661	movups	16(%esi),%xmm3
1662	movups	32(%esi),%xmm4
1663	leal	48(%esi),%esi
1664	xorps	%xmm5,%xmm2
1665	xorps	%xmm6,%xmm3
1666	xorps	%xmm7,%xmm4
1667	call	_aesni_decrypt3
1668	xorps	%xmm5,%xmm2
1669	xorps	%xmm6,%xmm3
1670	xorps	%xmm7,%xmm4
1671	movups	%xmm2,(%edi)
1672	movups	%xmm3,16(%edi)
1673	movups	%xmm4,32(%edi)
1674	leal	48(%edi),%edi
1675	movdqa	%xmm7,%xmm1
1676	jmp	.L067xts_dec_done
1677.align	16
1678.L066xts_dec_four:
1679	movaps	%xmm1,%xmm6
1680	movups	(%esi),%xmm2
1681	movups	16(%esi),%xmm3
1682	movups	32(%esi),%xmm4
1683	xorps	(%esp),%xmm2
1684	movups	48(%esi),%xmm5
1685	leal	64(%esi),%esi
1686	xorps	16(%esp),%xmm3
1687	xorps	%xmm7,%xmm4
1688	xorps	%xmm6,%xmm5
1689	call	_aesni_decrypt4
1690	xorps	(%esp),%xmm2
1691	xorps	16(%esp),%xmm3
1692	xorps	%xmm7,%xmm4
1693	movups	%xmm2,(%edi)
1694	xorps	%xmm6,%xmm5
1695	movups	%xmm3,16(%edi)
1696	movups	%xmm4,32(%edi)
1697	movups	%xmm5,48(%edi)
1698	leal	64(%edi),%edi
1699	movdqa	%xmm6,%xmm1
1700	jmp	.L067xts_dec_done
1701.align	16
1702.L062xts_dec_done6x:
1703	movl	112(%esp),%eax
1704	andl	$15,%eax
1705	jz	.L069xts_dec_ret
1706	movl	%eax,112(%esp)
1707	jmp	.L070xts_dec_only_one_more
1708.align	16
1709.L067xts_dec_done:
1710	movl	112(%esp),%eax
1711	pxor	%xmm0,%xmm0
1712	andl	$15,%eax
1713	jz	.L069xts_dec_ret
1714	pcmpgtd	%xmm1,%xmm0
1715	movl	%eax,112(%esp)
1716	pshufd	$19,%xmm0,%xmm2
1717	pxor	%xmm0,%xmm0
1718	movdqa	96(%esp),%xmm3
1719	paddq	%xmm1,%xmm1
1720	pand	%xmm3,%xmm2
1721	pcmpgtd	%xmm1,%xmm0
1722	pxor	%xmm2,%xmm1
1723.L070xts_dec_only_one_more:
1724	pshufd	$19,%xmm0,%xmm5
1725	movdqa	%xmm1,%xmm6
1726	paddq	%xmm1,%xmm1
1727	pand	%xmm3,%xmm5
1728	pxor	%xmm1,%xmm5
1729	movl	%ebp,%edx
1730	movl	%ebx,%ecx
1731	movups	(%esi),%xmm2
1732	xorps	%xmm5,%xmm2
1733	movups	(%edx),%xmm0
1734	movups	16(%edx),%xmm1
1735	leal	32(%edx),%edx
1736	xorps	%xmm0,%xmm2
1737.L071dec1_loop_13:
1738.byte	102,15,56,222,209
1739	decl	%ecx
1740	movups	(%edx),%xmm1
1741	leal	16(%edx),%edx
1742	jnz	.L071dec1_loop_13
1743.byte	102,15,56,223,209
1744	xorps	%xmm5,%xmm2
1745	movups	%xmm2,(%edi)
1746.L072xts_dec_steal:
1747	movzbl	16(%esi),%ecx
1748	movzbl	(%edi),%edx
1749	leal	1(%esi),%esi
1750	movb	%cl,(%edi)
1751	movb	%dl,16(%edi)
1752	leal	1(%edi),%edi
1753	subl	$1,%eax
1754	jnz	.L072xts_dec_steal
1755	subl	112(%esp),%edi
1756	movl	%ebp,%edx
1757	movl	%ebx,%ecx
1758	movups	(%edi),%xmm2
1759	xorps	%xmm6,%xmm2
1760	movups	(%edx),%xmm0
1761	movups	16(%edx),%xmm1
1762	leal	32(%edx),%edx
1763	xorps	%xmm0,%xmm2
1764.L073dec1_loop_14:
1765.byte	102,15,56,222,209
1766	decl	%ecx
1767	movups	(%edx),%xmm1
1768	leal	16(%edx),%edx
1769	jnz	.L073dec1_loop_14
1770.byte	102,15,56,223,209
1771	xorps	%xmm6,%xmm2
1772	movups	%xmm2,(%edi)
1773.L069xts_dec_ret:
1774	pxor	%xmm0,%xmm0
1775	pxor	%xmm1,%xmm1
1776	pxor	%xmm2,%xmm2
1777	movdqa	%xmm0,(%esp)
1778	pxor	%xmm3,%xmm3
1779	movdqa	%xmm0,16(%esp)
1780	pxor	%xmm4,%xmm4
1781	movdqa	%xmm0,32(%esp)
1782	pxor	%xmm5,%xmm5
1783	movdqa	%xmm0,48(%esp)
1784	pxor	%xmm6,%xmm6
1785	movdqa	%xmm0,64(%esp)
1786	pxor	%xmm7,%xmm7
1787	movdqa	%xmm0,80(%esp)
1788	movl	116(%esp),%esp
1789	popl	%edi
1790	popl	%esi
1791	popl	%ebx
1792	popl	%ebp
1793	ret
1794.size	aesni_xts_decrypt,.-.L_aesni_xts_decrypt_begin
1795.globl	aesni_ocb_encrypt
1796.type	aesni_ocb_encrypt,@function
1797.align	16
1798aesni_ocb_encrypt:
1799.L_aesni_ocb_encrypt_begin:
1800	pushl	%ebp
1801	pushl	%ebx
1802	pushl	%esi
1803	pushl	%edi
1804	movl	40(%esp),%ecx
1805	movl	48(%esp),%ebx
1806	movl	20(%esp),%esi
1807	movl	24(%esp),%edi
1808	movl	28(%esp),%eax
1809	movl	32(%esp),%edx
1810	movdqu	(%ecx),%xmm0
1811	movl	36(%esp),%ebp
1812	movdqu	(%ebx),%xmm1
1813	movl	44(%esp),%ebx
1814	movl	%esp,%ecx
1815	subl	$132,%esp
1816	andl	$-16,%esp
1817	subl	%esi,%edi
1818	shll	$4,%eax
1819	leal	-96(%esi,%eax,1),%eax
1820	movl	%edi,120(%esp)
1821	movl	%eax,124(%esp)
1822	movl	%ecx,128(%esp)
1823	movl	240(%edx),%ecx
1824	testl	$1,%ebp
1825	jnz	.L074odd
1826	bsfl	%ebp,%eax
1827	addl	$1,%ebp
1828	shll	$4,%eax
1829	movdqu	(%ebx,%eax,1),%xmm7
1830	movl	%edx,%eax
1831	movdqu	(%esi),%xmm2
1832	leal	16(%esi),%esi
1833	pxor	%xmm0,%xmm7
1834	pxor	%xmm2,%xmm1
1835	pxor	%xmm7,%xmm2
1836	movdqa	%xmm1,%xmm6
1837	movups	(%edx),%xmm0
1838	movups	16(%edx),%xmm1
1839	leal	32(%edx),%edx
1840	xorps	%xmm0,%xmm2
1841.L075enc1_loop_15:
1842.byte	102,15,56,220,209
1843	decl	%ecx
1844	movups	(%edx),%xmm1
1845	leal	16(%edx),%edx
1846	jnz	.L075enc1_loop_15
1847.byte	102,15,56,221,209
1848	xorps	%xmm7,%xmm2
1849	movdqa	%xmm7,%xmm0
1850	movdqa	%xmm6,%xmm1
1851	movups	%xmm2,-16(%edi,%esi,1)
1852	movl	240(%eax),%ecx
1853	movl	%eax,%edx
1854	movl	124(%esp),%eax
1855.L074odd:
1856	shll	$4,%ecx
1857	movl	$16,%edi
1858	subl	%ecx,%edi
1859	movl	%edx,112(%esp)
1860	leal	32(%edx,%ecx,1),%edx
1861	movl	%edi,116(%esp)
1862	cmpl	%eax,%esi
1863	ja	.L076short
1864	jmp	.L077grandloop
1865.align	32
1866.L077grandloop:
1867	leal	1(%ebp),%ecx
1868	leal	3(%ebp),%eax
1869	leal	5(%ebp),%edi
1870	addl	$6,%ebp
1871	bsfl	%ecx,%ecx
1872	bsfl	%eax,%eax
1873	bsfl	%edi,%edi
1874	shll	$4,%ecx
1875	shll	$4,%eax
1876	shll	$4,%edi
1877	movdqu	(%ebx),%xmm2
1878	movdqu	(%ebx,%ecx,1),%xmm3
1879	movl	116(%esp),%ecx
1880	movdqa	%xmm2,%xmm4
1881	movdqu	(%ebx,%eax,1),%xmm5
1882	movdqa	%xmm2,%xmm6
1883	movdqu	(%ebx,%edi,1),%xmm7
1884	pxor	%xmm0,%xmm2
1885	pxor	%xmm2,%xmm3
1886	movdqa	%xmm2,(%esp)
1887	pxor	%xmm3,%xmm4
1888	movdqa	%xmm3,16(%esp)
1889	pxor	%xmm4,%xmm5
1890	movdqa	%xmm4,32(%esp)
1891	pxor	%xmm5,%xmm6
1892	movdqa	%xmm5,48(%esp)
1893	pxor	%xmm6,%xmm7
1894	movdqa	%xmm6,64(%esp)
1895	movdqa	%xmm7,80(%esp)
1896	movups	-48(%edx,%ecx,1),%xmm0
1897	movdqu	(%esi),%xmm2
1898	movdqu	16(%esi),%xmm3
1899	movdqu	32(%esi),%xmm4
1900	movdqu	48(%esi),%xmm5
1901	movdqu	64(%esi),%xmm6
1902	movdqu	80(%esi),%xmm7
1903	leal	96(%esi),%esi
1904	pxor	%xmm2,%xmm1
1905	pxor	%xmm0,%xmm2
1906	pxor	%xmm3,%xmm1
1907	pxor	%xmm0,%xmm3
1908	pxor	%xmm4,%xmm1
1909	pxor	%xmm0,%xmm4
1910	pxor	%xmm5,%xmm1
1911	pxor	%xmm0,%xmm5
1912	pxor	%xmm6,%xmm1
1913	pxor	%xmm0,%xmm6
1914	pxor	%xmm7,%xmm1
1915	pxor	%xmm0,%xmm7
1916	movdqa	%xmm1,96(%esp)
1917	movups	-32(%edx,%ecx,1),%xmm1
1918	pxor	(%esp),%xmm2
1919	pxor	16(%esp),%xmm3
1920	pxor	32(%esp),%xmm4
1921	pxor	48(%esp),%xmm5
1922	pxor	64(%esp),%xmm6
1923	pxor	80(%esp),%xmm7
1924	movups	-16(%edx,%ecx,1),%xmm0
1925.byte	102,15,56,220,209
1926.byte	102,15,56,220,217
1927.byte	102,15,56,220,225
1928.byte	102,15,56,220,233
1929.byte	102,15,56,220,241
1930.byte	102,15,56,220,249
1931	movl	120(%esp),%edi
1932	movl	124(%esp),%eax
1933	call	.L_aesni_encrypt6_enter
1934	movdqa	80(%esp),%xmm0
1935	pxor	(%esp),%xmm2
1936	pxor	16(%esp),%xmm3
1937	pxor	32(%esp),%xmm4
1938	pxor	48(%esp),%xmm5
1939	pxor	64(%esp),%xmm6
1940	pxor	%xmm0,%xmm7
1941	movdqa	96(%esp),%xmm1
1942	movdqu	%xmm2,-96(%edi,%esi,1)
1943	movdqu	%xmm3,-80(%edi,%esi,1)
1944	movdqu	%xmm4,-64(%edi,%esi,1)
1945	movdqu	%xmm5,-48(%edi,%esi,1)
1946	movdqu	%xmm6,-32(%edi,%esi,1)
1947	movdqu	%xmm7,-16(%edi,%esi,1)
1948	cmpl	%eax,%esi
1949	jb	.L077grandloop
1950.L076short:
1951	addl	$96,%eax
1952	subl	%esi,%eax
1953	jz	.L078done
1954	cmpl	$32,%eax
1955	jb	.L079one
1956	je	.L080two
1957	cmpl	$64,%eax
1958	jb	.L081three
1959	je	.L082four
1960	leal	1(%ebp),%ecx
1961	leal	3(%ebp),%eax
1962	bsfl	%ecx,%ecx
1963	bsfl	%eax,%eax
1964	shll	$4,%ecx
1965	shll	$4,%eax
1966	movdqu	(%ebx),%xmm2
1967	movdqu	(%ebx,%ecx,1),%xmm3
1968	movl	116(%esp),%ecx
1969	movdqa	%xmm2,%xmm4
1970	movdqu	(%ebx,%eax,1),%xmm5
1971	movdqa	%xmm2,%xmm6
1972	pxor	%xmm0,%xmm2
1973	pxor	%xmm2,%xmm3
1974	movdqa	%xmm2,(%esp)
1975	pxor	%xmm3,%xmm4
1976	movdqa	%xmm3,16(%esp)
1977	pxor	%xmm4,%xmm5
1978	movdqa	%xmm4,32(%esp)
1979	pxor	%xmm5,%xmm6
1980	movdqa	%xmm5,48(%esp)
1981	pxor	%xmm6,%xmm7
1982	movdqa	%xmm6,64(%esp)
1983	movups	-48(%edx,%ecx,1),%xmm0
1984	movdqu	(%esi),%xmm2
1985	movdqu	16(%esi),%xmm3
1986	movdqu	32(%esi),%xmm4
1987	movdqu	48(%esi),%xmm5
1988	movdqu	64(%esi),%xmm6
1989	pxor	%xmm7,%xmm7
1990	pxor	%xmm2,%xmm1
1991	pxor	%xmm0,%xmm2
1992	pxor	%xmm3,%xmm1
1993	pxor	%xmm0,%xmm3
1994	pxor	%xmm4,%xmm1
1995	pxor	%xmm0,%xmm4
1996	pxor	%xmm5,%xmm1
1997	pxor	%xmm0,%xmm5
1998	pxor	%xmm6,%xmm1
1999	pxor	%xmm0,%xmm6
2000	movdqa	%xmm1,96(%esp)
2001	movups	-32(%edx,%ecx,1),%xmm1
2002	pxor	(%esp),%xmm2
2003	pxor	16(%esp),%xmm3
2004	pxor	32(%esp),%xmm4
2005	pxor	48(%esp),%xmm5
2006	pxor	64(%esp),%xmm6
2007	movups	-16(%edx,%ecx,1),%xmm0
2008.byte	102,15,56,220,209
2009.byte	102,15,56,220,217
2010.byte	102,15,56,220,225
2011.byte	102,15,56,220,233
2012.byte	102,15,56,220,241
2013.byte	102,15,56,220,249
2014	movl	120(%esp),%edi
2015	call	.L_aesni_encrypt6_enter
2016	movdqa	64(%esp),%xmm0
2017	pxor	(%esp),%xmm2
2018	pxor	16(%esp),%xmm3
2019	pxor	32(%esp),%xmm4
2020	pxor	48(%esp),%xmm5
2021	pxor	%xmm0,%xmm6
2022	movdqa	96(%esp),%xmm1
2023	movdqu	%xmm2,(%edi,%esi,1)
2024	movdqu	%xmm3,16(%edi,%esi,1)
2025	movdqu	%xmm4,32(%edi,%esi,1)
2026	movdqu	%xmm5,48(%edi,%esi,1)
2027	movdqu	%xmm6,64(%edi,%esi,1)
2028	jmp	.L078done
2029.align	16
2030.L079one:
2031	movdqu	(%ebx),%xmm7
2032	movl	112(%esp),%edx
2033	movdqu	(%esi),%xmm2
2034	movl	240(%edx),%ecx
2035	pxor	%xmm0,%xmm7
2036	pxor	%xmm2,%xmm1
2037	pxor	%xmm7,%xmm2
2038	movdqa	%xmm1,%xmm6
2039	movl	120(%esp),%edi
2040	movups	(%edx),%xmm0
2041	movups	16(%edx),%xmm1
2042	leal	32(%edx),%edx
2043	xorps	%xmm0,%xmm2
2044.L083enc1_loop_16:
2045.byte	102,15,56,220,209
2046	decl	%ecx
2047	movups	(%edx),%xmm1
2048	leal	16(%edx),%edx
2049	jnz	.L083enc1_loop_16
2050.byte	102,15,56,221,209
2051	xorps	%xmm7,%xmm2
2052	movdqa	%xmm7,%xmm0
2053	movdqa	%xmm6,%xmm1
2054	movups	%xmm2,(%edi,%esi,1)
2055	jmp	.L078done
2056.align	16
2057.L080two:
2058	leal	1(%ebp),%ecx
2059	movl	112(%esp),%edx
2060	bsfl	%ecx,%ecx
2061	shll	$4,%ecx
2062	movdqu	(%ebx),%xmm6
2063	movdqu	(%ebx,%ecx,1),%xmm7
2064	movdqu	(%esi),%xmm2
2065	movdqu	16(%esi),%xmm3
2066	movl	240(%edx),%ecx
2067	pxor	%xmm0,%xmm6
2068	pxor	%xmm6,%xmm7
2069	pxor	%xmm2,%xmm1
2070	pxor	%xmm6,%xmm2
2071	pxor	%xmm3,%xmm1
2072	pxor	%xmm7,%xmm3
2073	movdqa	%xmm1,%xmm5
2074	movl	120(%esp),%edi
2075	call	_aesni_encrypt2
2076	xorps	%xmm6,%xmm2
2077	xorps	%xmm7,%xmm3
2078	movdqa	%xmm7,%xmm0
2079	movdqa	%xmm5,%xmm1
2080	movups	%xmm2,(%edi,%esi,1)
2081	movups	%xmm3,16(%edi,%esi,1)
2082	jmp	.L078done
2083.align	16
2084.L081three:
2085	leal	1(%ebp),%ecx
2086	movl	112(%esp),%edx
2087	bsfl	%ecx,%ecx
2088	shll	$4,%ecx
2089	movdqu	(%ebx),%xmm5
2090	movdqu	(%ebx,%ecx,1),%xmm6
2091	movdqa	%xmm5,%xmm7
2092	movdqu	(%esi),%xmm2
2093	movdqu	16(%esi),%xmm3
2094	movdqu	32(%esi),%xmm4
2095	movl	240(%edx),%ecx
2096	pxor	%xmm0,%xmm5
2097	pxor	%xmm5,%xmm6
2098	pxor	%xmm6,%xmm7
2099	pxor	%xmm2,%xmm1
2100	pxor	%xmm5,%xmm2
2101	pxor	%xmm3,%xmm1
2102	pxor	%xmm6,%xmm3
2103	pxor	%xmm4,%xmm1
2104	pxor	%xmm7,%xmm4
2105	movdqa	%xmm1,96(%esp)
2106	movl	120(%esp),%edi
2107	call	_aesni_encrypt3
2108	xorps	%xmm5,%xmm2
2109	xorps	%xmm6,%xmm3
2110	xorps	%xmm7,%xmm4
2111	movdqa	%xmm7,%xmm0
2112	movdqa	96(%esp),%xmm1
2113	movups	%xmm2,(%edi,%esi,1)
2114	movups	%xmm3,16(%edi,%esi,1)
2115	movups	%xmm4,32(%edi,%esi,1)
2116	jmp	.L078done
2117.align	16
2118.L082four:
2119	leal	1(%ebp),%ecx
2120	leal	3(%ebp),%eax
2121	bsfl	%ecx,%ecx
2122	bsfl	%eax,%eax
2123	movl	112(%esp),%edx
2124	shll	$4,%ecx
2125	shll	$4,%eax
2126	movdqu	(%ebx),%xmm4
2127	movdqu	(%ebx,%ecx,1),%xmm5
2128	movdqa	%xmm4,%xmm6
2129	movdqu	(%ebx,%eax,1),%xmm7
2130	pxor	%xmm0,%xmm4
2131	movdqu	(%esi),%xmm2
2132	pxor	%xmm4,%xmm5
2133	movdqu	16(%esi),%xmm3
2134	pxor	%xmm5,%xmm6
2135	movdqa	%xmm4,(%esp)
2136	pxor	%xmm6,%xmm7
2137	movdqa	%xmm5,16(%esp)
2138	movdqu	32(%esi),%xmm4
2139	movdqu	48(%esi),%xmm5
2140	movl	240(%edx),%ecx
2141	pxor	%xmm2,%xmm1
2142	pxor	(%esp),%xmm2
2143	pxor	%xmm3,%xmm1
2144	pxor	16(%esp),%xmm3
2145	pxor	%xmm4,%xmm1
2146	pxor	%xmm6,%xmm4
2147	pxor	%xmm5,%xmm1
2148	pxor	%xmm7,%xmm5
2149	movdqa	%xmm1,96(%esp)
2150	movl	120(%esp),%edi
2151	call	_aesni_encrypt4
2152	xorps	(%esp),%xmm2
2153	xorps	16(%esp),%xmm3
2154	xorps	%xmm6,%xmm4
2155	movups	%xmm2,(%edi,%esi,1)
2156	xorps	%xmm7,%xmm5
2157	movups	%xmm3,16(%edi,%esi,1)
2158	movdqa	%xmm7,%xmm0
2159	movups	%xmm4,32(%edi,%esi,1)
2160	movdqa	96(%esp),%xmm1
2161	movups	%xmm5,48(%edi,%esi,1)
2162.L078done:
2163	movl	128(%esp),%edx
2164	pxor	%xmm2,%xmm2
2165	pxor	%xmm3,%xmm3
2166	movdqa	%xmm2,(%esp)
2167	pxor	%xmm4,%xmm4
2168	movdqa	%xmm2,16(%esp)
2169	pxor	%xmm5,%xmm5
2170	movdqa	%xmm2,32(%esp)
2171	pxor	%xmm6,%xmm6
2172	movdqa	%xmm2,48(%esp)
2173	pxor	%xmm7,%xmm7
2174	movdqa	%xmm2,64(%esp)
2175	movdqa	%xmm2,80(%esp)
2176	movdqa	%xmm2,96(%esp)
2177	leal	(%edx),%esp
2178	movl	40(%esp),%ecx
2179	movl	48(%esp),%ebx
2180	movdqu	%xmm0,(%ecx)
2181	pxor	%xmm0,%xmm0
2182	movdqu	%xmm1,(%ebx)
2183	pxor	%xmm1,%xmm1
2184	popl	%edi
2185	popl	%esi
2186	popl	%ebx
2187	popl	%ebp
2188	ret
2189.size	aesni_ocb_encrypt,.-.L_aesni_ocb_encrypt_begin
2190.globl	aesni_ocb_decrypt
2191.type	aesni_ocb_decrypt,@function
2192.align	16
2193aesni_ocb_decrypt:
2194.L_aesni_ocb_decrypt_begin:
2195	pushl	%ebp
2196	pushl	%ebx
2197	pushl	%esi
2198	pushl	%edi
2199	movl	40(%esp),%ecx
2200	movl	48(%esp),%ebx
2201	movl	20(%esp),%esi
2202	movl	24(%esp),%edi
2203	movl	28(%esp),%eax
2204	movl	32(%esp),%edx
2205	movdqu	(%ecx),%xmm0
2206	movl	36(%esp),%ebp
2207	movdqu	(%ebx),%xmm1
2208	movl	44(%esp),%ebx
2209	movl	%esp,%ecx
2210	subl	$132,%esp
2211	andl	$-16,%esp
2212	subl	%esi,%edi
2213	shll	$4,%eax
2214	leal	-96(%esi,%eax,1),%eax
2215	movl	%edi,120(%esp)
2216	movl	%eax,124(%esp)
2217	movl	%ecx,128(%esp)
2218	movl	240(%edx),%ecx
2219	testl	$1,%ebp
2220	jnz	.L084odd
2221	bsfl	%ebp,%eax
2222	addl	$1,%ebp
2223	shll	$4,%eax
2224	movdqu	(%ebx,%eax,1),%xmm7
2225	movl	%edx,%eax
2226	movdqu	(%esi),%xmm2
2227	leal	16(%esi),%esi
2228	pxor	%xmm0,%xmm7
2229	pxor	%xmm7,%xmm2
2230	movdqa	%xmm1,%xmm6
2231	movups	(%edx),%xmm0
2232	movups	16(%edx),%xmm1
2233	leal	32(%edx),%edx
2234	xorps	%xmm0,%xmm2
2235.L085dec1_loop_17:
2236.byte	102,15,56,222,209
2237	decl	%ecx
2238	movups	(%edx),%xmm1
2239	leal	16(%edx),%edx
2240	jnz	.L085dec1_loop_17
2241.byte	102,15,56,223,209
2242	xorps	%xmm7,%xmm2
2243	movaps	%xmm6,%xmm1
2244	movdqa	%xmm7,%xmm0
2245	xorps	%xmm2,%xmm1
2246	movups	%xmm2,-16(%edi,%esi,1)
2247	movl	240(%eax),%ecx
2248	movl	%eax,%edx
2249	movl	124(%esp),%eax
2250.L084odd:
2251	shll	$4,%ecx
2252	movl	$16,%edi
2253	subl	%ecx,%edi
2254	movl	%edx,112(%esp)
2255	leal	32(%edx,%ecx,1),%edx
2256	movl	%edi,116(%esp)
2257	cmpl	%eax,%esi
2258	ja	.L086short
2259	jmp	.L087grandloop
2260.align	32
2261.L087grandloop:
2262	leal	1(%ebp),%ecx
2263	leal	3(%ebp),%eax
2264	leal	5(%ebp),%edi
2265	addl	$6,%ebp
2266	bsfl	%ecx,%ecx
2267	bsfl	%eax,%eax
2268	bsfl	%edi,%edi
2269	shll	$4,%ecx
2270	shll	$4,%eax
2271	shll	$4,%edi
2272	movdqu	(%ebx),%xmm2
2273	movdqu	(%ebx,%ecx,1),%xmm3
2274	movl	116(%esp),%ecx
2275	movdqa	%xmm2,%xmm4
2276	movdqu	(%ebx,%eax,1),%xmm5
2277	movdqa	%xmm2,%xmm6
2278	movdqu	(%ebx,%edi,1),%xmm7
2279	pxor	%xmm0,%xmm2
2280	pxor	%xmm2,%xmm3
2281	movdqa	%xmm2,(%esp)
2282	pxor	%xmm3,%xmm4
2283	movdqa	%xmm3,16(%esp)
2284	pxor	%xmm4,%xmm5
2285	movdqa	%xmm4,32(%esp)
2286	pxor	%xmm5,%xmm6
2287	movdqa	%xmm5,48(%esp)
2288	pxor	%xmm6,%xmm7
2289	movdqa	%xmm6,64(%esp)
2290	movdqa	%xmm7,80(%esp)
2291	movups	-48(%edx,%ecx,1),%xmm0
2292	movdqu	(%esi),%xmm2
2293	movdqu	16(%esi),%xmm3
2294	movdqu	32(%esi),%xmm4
2295	movdqu	48(%esi),%xmm5
2296	movdqu	64(%esi),%xmm6
2297	movdqu	80(%esi),%xmm7
2298	leal	96(%esi),%esi
2299	movdqa	%xmm1,96(%esp)
2300	pxor	%xmm0,%xmm2
2301	pxor	%xmm0,%xmm3
2302	pxor	%xmm0,%xmm4
2303	pxor	%xmm0,%xmm5
2304	pxor	%xmm0,%xmm6
2305	pxor	%xmm0,%xmm7
2306	movups	-32(%edx,%ecx,1),%xmm1
2307	pxor	(%esp),%xmm2
2308	pxor	16(%esp),%xmm3
2309	pxor	32(%esp),%xmm4
2310	pxor	48(%esp),%xmm5
2311	pxor	64(%esp),%xmm6
2312	pxor	80(%esp),%xmm7
2313	movups	-16(%edx,%ecx,1),%xmm0
2314.byte	102,15,56,222,209
2315.byte	102,15,56,222,217
2316.byte	102,15,56,222,225
2317.byte	102,15,56,222,233
2318.byte	102,15,56,222,241
2319.byte	102,15,56,222,249
2320	movl	120(%esp),%edi
2321	movl	124(%esp),%eax
2322	call	.L_aesni_decrypt6_enter
2323	movdqa	80(%esp),%xmm0
2324	pxor	(%esp),%xmm2
2325	movdqa	96(%esp),%xmm1
2326	pxor	16(%esp),%xmm3
2327	pxor	32(%esp),%xmm4
2328	pxor	48(%esp),%xmm5
2329	pxor	64(%esp),%xmm6
2330	pxor	%xmm0,%xmm7
2331	pxor	%xmm2,%xmm1
2332	movdqu	%xmm2,-96(%edi,%esi,1)
2333	pxor	%xmm3,%xmm1
2334	movdqu	%xmm3,-80(%edi,%esi,1)
2335	pxor	%xmm4,%xmm1
2336	movdqu	%xmm4,-64(%edi,%esi,1)
2337	pxor	%xmm5,%xmm1
2338	movdqu	%xmm5,-48(%edi,%esi,1)
2339	pxor	%xmm6,%xmm1
2340	movdqu	%xmm6,-32(%edi,%esi,1)
2341	pxor	%xmm7,%xmm1
2342	movdqu	%xmm7,-16(%edi,%esi,1)
2343	cmpl	%eax,%esi
2344	jb	.L087grandloop
2345.L086short:
2346	addl	$96,%eax
2347	subl	%esi,%eax
2348	jz	.L088done
2349	cmpl	$32,%eax
2350	jb	.L089one
2351	je	.L090two
2352	cmpl	$64,%eax
2353	jb	.L091three
2354	je	.L092four
2355	leal	1(%ebp),%ecx
2356	leal	3(%ebp),%eax
2357	bsfl	%ecx,%ecx
2358	bsfl	%eax,%eax
2359	shll	$4,%ecx
2360	shll	$4,%eax
2361	movdqu	(%ebx),%xmm2
2362	movdqu	(%ebx,%ecx,1),%xmm3
2363	movl	116(%esp),%ecx
2364	movdqa	%xmm2,%xmm4
2365	movdqu	(%ebx,%eax,1),%xmm5
2366	movdqa	%xmm2,%xmm6
2367	pxor	%xmm0,%xmm2
2368	pxor	%xmm2,%xmm3
2369	movdqa	%xmm2,(%esp)
2370	pxor	%xmm3,%xmm4
2371	movdqa	%xmm3,16(%esp)
2372	pxor	%xmm4,%xmm5
2373	movdqa	%xmm4,32(%esp)
2374	pxor	%xmm5,%xmm6
2375	movdqa	%xmm5,48(%esp)
2376	pxor	%xmm6,%xmm7
2377	movdqa	%xmm6,64(%esp)
2378	movups	-48(%edx,%ecx,1),%xmm0
2379	movdqu	(%esi),%xmm2
2380	movdqu	16(%esi),%xmm3
2381	movdqu	32(%esi),%xmm4
2382	movdqu	48(%esi),%xmm5
2383	movdqu	64(%esi),%xmm6
2384	pxor	%xmm7,%xmm7
2385	movdqa	%xmm1,96(%esp)
2386	pxor	%xmm0,%xmm2
2387	pxor	%xmm0,%xmm3
2388	pxor	%xmm0,%xmm4
2389	pxor	%xmm0,%xmm5
2390	pxor	%xmm0,%xmm6
2391	movups	-32(%edx,%ecx,1),%xmm1
2392	pxor	(%esp),%xmm2
2393	pxor	16(%esp),%xmm3
2394	pxor	32(%esp),%xmm4
2395	pxor	48(%esp),%xmm5
2396	pxor	64(%esp),%xmm6
2397	movups	-16(%edx,%ecx,1),%xmm0
2398.byte	102,15,56,222,209
2399.byte	102,15,56,222,217
2400.byte	102,15,56,222,225
2401.byte	102,15,56,222,233
2402.byte	102,15,56,222,241
2403.byte	102,15,56,222,249
2404	movl	120(%esp),%edi
2405	call	.L_aesni_decrypt6_enter
2406	movdqa	64(%esp),%xmm0
2407	pxor	(%esp),%xmm2
2408	movdqa	96(%esp),%xmm1
2409	pxor	16(%esp),%xmm3
2410	pxor	32(%esp),%xmm4
2411	pxor	48(%esp),%xmm5
2412	pxor	%xmm0,%xmm6
2413	pxor	%xmm2,%xmm1
2414	movdqu	%xmm2,(%edi,%esi,1)
2415	pxor	%xmm3,%xmm1
2416	movdqu	%xmm3,16(%edi,%esi,1)
2417	pxor	%xmm4,%xmm1
2418	movdqu	%xmm4,32(%edi,%esi,1)
2419	pxor	%xmm5,%xmm1
2420	movdqu	%xmm5,48(%edi,%esi,1)
2421	pxor	%xmm6,%xmm1
2422	movdqu	%xmm6,64(%edi,%esi,1)
2423	jmp	.L088done
2424.align	16
2425.L089one:
2426	movdqu	(%ebx),%xmm7
2427	movl	112(%esp),%edx
2428	movdqu	(%esi),%xmm2
2429	movl	240(%edx),%ecx
2430	pxor	%xmm0,%xmm7
2431	pxor	%xmm7,%xmm2
2432	movdqa	%xmm1,%xmm6
2433	movl	120(%esp),%edi
2434	movups	(%edx),%xmm0
2435	movups	16(%edx),%xmm1
2436	leal	32(%edx),%edx
2437	xorps	%xmm0,%xmm2
2438.L093dec1_loop_18:
2439.byte	102,15,56,222,209
2440	decl	%ecx
2441	movups	(%edx),%xmm1
2442	leal	16(%edx),%edx
2443	jnz	.L093dec1_loop_18
2444.byte	102,15,56,223,209
2445	xorps	%xmm7,%xmm2
2446	movaps	%xmm6,%xmm1
2447	movdqa	%xmm7,%xmm0
2448	xorps	%xmm2,%xmm1
2449	movups	%xmm2,(%edi,%esi,1)
2450	jmp	.L088done
2451.align	16
2452.L090two:
2453	leal	1(%ebp),%ecx
2454	movl	112(%esp),%edx
2455	bsfl	%ecx,%ecx
2456	shll	$4,%ecx
2457	movdqu	(%ebx),%xmm6
2458	movdqu	(%ebx,%ecx,1),%xmm7
2459	movdqu	(%esi),%xmm2
2460	movdqu	16(%esi),%xmm3
2461	movl	240(%edx),%ecx
2462	movdqa	%xmm1,%xmm5
2463	pxor	%xmm0,%xmm6
2464	pxor	%xmm6,%xmm7
2465	pxor	%xmm6,%xmm2
2466	pxor	%xmm7,%xmm3
2467	movl	120(%esp),%edi
2468	call	_aesni_decrypt2
2469	xorps	%xmm6,%xmm2
2470	xorps	%xmm7,%xmm3
2471	movdqa	%xmm7,%xmm0
2472	xorps	%xmm2,%xmm5
2473	movups	%xmm2,(%edi,%esi,1)
2474	xorps	%xmm3,%xmm5
2475	movups	%xmm3,16(%edi,%esi,1)
2476	movaps	%xmm5,%xmm1
2477	jmp	.L088done
2478.align	16
2479.L091three:
2480	leal	1(%ebp),%ecx
2481	movl	112(%esp),%edx
2482	bsfl	%ecx,%ecx
2483	shll	$4,%ecx
2484	movdqu	(%ebx),%xmm5
2485	movdqu	(%ebx,%ecx,1),%xmm6
2486	movdqa	%xmm5,%xmm7
2487	movdqu	(%esi),%xmm2
2488	movdqu	16(%esi),%xmm3
2489	movdqu	32(%esi),%xmm4
2490	movl	240(%edx),%ecx
2491	movdqa	%xmm1,96(%esp)
2492	pxor	%xmm0,%xmm5
2493	pxor	%xmm5,%xmm6
2494	pxor	%xmm6,%xmm7
2495	pxor	%xmm5,%xmm2
2496	pxor	%xmm6,%xmm3
2497	pxor	%xmm7,%xmm4
2498	movl	120(%esp),%edi
2499	call	_aesni_decrypt3
2500	movdqa	96(%esp),%xmm1
2501	xorps	%xmm5,%xmm2
2502	xorps	%xmm6,%xmm3
2503	xorps	%xmm7,%xmm4
2504	movups	%xmm2,(%edi,%esi,1)
2505	pxor	%xmm2,%xmm1
2506	movdqa	%xmm7,%xmm0
2507	movups	%xmm3,16(%edi,%esi,1)
2508	pxor	%xmm3,%xmm1
2509	movups	%xmm4,32(%edi,%esi,1)
2510	pxor	%xmm4,%xmm1
2511	jmp	.L088done
2512.align	16
2513.L092four:
2514	leal	1(%ebp),%ecx
2515	leal	3(%ebp),%eax
2516	bsfl	%ecx,%ecx
2517	bsfl	%eax,%eax
2518	movl	112(%esp),%edx
2519	shll	$4,%ecx
2520	shll	$4,%eax
2521	movdqu	(%ebx),%xmm4
2522	movdqu	(%ebx,%ecx,1),%xmm5
2523	movdqa	%xmm4,%xmm6
2524	movdqu	(%ebx,%eax,1),%xmm7
2525	pxor	%xmm0,%xmm4
2526	movdqu	(%esi),%xmm2
2527	pxor	%xmm4,%xmm5
2528	movdqu	16(%esi),%xmm3
2529	pxor	%xmm5,%xmm6
2530	movdqa	%xmm4,(%esp)
2531	pxor	%xmm6,%xmm7
2532	movdqa	%xmm5,16(%esp)
2533	movdqu	32(%esi),%xmm4
2534	movdqu	48(%esi),%xmm5
2535	movl	240(%edx),%ecx
2536	movdqa	%xmm1,96(%esp)
2537	pxor	(%esp),%xmm2
2538	pxor	16(%esp),%xmm3
2539	pxor	%xmm6,%xmm4
2540	pxor	%xmm7,%xmm5
2541	movl	120(%esp),%edi
2542	call	_aesni_decrypt4
2543	movdqa	96(%esp),%xmm1
2544	xorps	(%esp),%xmm2
2545	xorps	16(%esp),%xmm3
2546	xorps	%xmm6,%xmm4
2547	movups	%xmm2,(%edi,%esi,1)
2548	pxor	%xmm2,%xmm1
2549	xorps	%xmm7,%xmm5
2550	movups	%xmm3,16(%edi,%esi,1)
2551	pxor	%xmm3,%xmm1
2552	movdqa	%xmm7,%xmm0
2553	movups	%xmm4,32(%edi,%esi,1)
2554	pxor	%xmm4,%xmm1
2555	movups	%xmm5,48(%edi,%esi,1)
2556	pxor	%xmm5,%xmm1
2557.L088done:
2558	movl	128(%esp),%edx
2559	pxor	%xmm2,%xmm2
2560	pxor	%xmm3,%xmm3
2561	movdqa	%xmm2,(%esp)
2562	pxor	%xmm4,%xmm4
2563	movdqa	%xmm2,16(%esp)
2564	pxor	%xmm5,%xmm5
2565	movdqa	%xmm2,32(%esp)
2566	pxor	%xmm6,%xmm6
2567	movdqa	%xmm2,48(%esp)
2568	pxor	%xmm7,%xmm7
2569	movdqa	%xmm2,64(%esp)
2570	movdqa	%xmm2,80(%esp)
2571	movdqa	%xmm2,96(%esp)
2572	leal	(%edx),%esp
2573	movl	40(%esp),%ecx
2574	movl	48(%esp),%ebx
2575	movdqu	%xmm0,(%ecx)
2576	pxor	%xmm0,%xmm0
2577	movdqu	%xmm1,(%ebx)
2578	pxor	%xmm1,%xmm1
2579	popl	%edi
2580	popl	%esi
2581	popl	%ebx
2582	popl	%ebp
2583	ret
2584.size	aesni_ocb_decrypt,.-.L_aesni_ocb_decrypt_begin
2585.globl	aesni_cbc_encrypt
2586.type	aesni_cbc_encrypt,@function
2587.align	16
2588aesni_cbc_encrypt:
2589.L_aesni_cbc_encrypt_begin:
2590	pushl	%ebp
2591	pushl	%ebx
2592	pushl	%esi
2593	pushl	%edi
2594	movl	20(%esp),%esi
2595	movl	%esp,%ebx
2596	movl	24(%esp),%edi
2597	subl	$24,%ebx
2598	movl	28(%esp),%eax
2599	andl	$-16,%ebx
2600	movl	32(%esp),%edx
2601	movl	36(%esp),%ebp
2602	testl	%eax,%eax
2603	jz	.L094cbc_abort
2604	cmpl	$0,40(%esp)
2605	xchgl	%esp,%ebx
2606	movups	(%ebp),%xmm7
2607	movl	240(%edx),%ecx
2608	movl	%edx,%ebp
2609	movl	%ebx,16(%esp)
2610	movl	%ecx,%ebx
2611	je	.L095cbc_decrypt
2612	movaps	%xmm7,%xmm2
2613	cmpl	$16,%eax
2614	jb	.L096cbc_enc_tail
2615	subl	$16,%eax
2616	jmp	.L097cbc_enc_loop
2617.align	16
2618.L097cbc_enc_loop:
2619	movups	(%esi),%xmm7
2620	leal	16(%esi),%esi
2621	movups	(%edx),%xmm0
2622	movups	16(%edx),%xmm1
2623	xorps	%xmm0,%xmm7
2624	leal	32(%edx),%edx
2625	xorps	%xmm7,%xmm2
2626.L098enc1_loop_19:
2627.byte	102,15,56,220,209
2628	decl	%ecx
2629	movups	(%edx),%xmm1
2630	leal	16(%edx),%edx
2631	jnz	.L098enc1_loop_19
2632.byte	102,15,56,221,209
2633	movl	%ebx,%ecx
2634	movl	%ebp,%edx
2635	movups	%xmm2,(%edi)
2636	leal	16(%edi),%edi
2637	subl	$16,%eax
2638	jnc	.L097cbc_enc_loop
2639	addl	$16,%eax
2640	jnz	.L096cbc_enc_tail
2641	movaps	%xmm2,%xmm7
2642	pxor	%xmm2,%xmm2
2643	jmp	.L099cbc_ret
2644.L096cbc_enc_tail:
2645	movl	%eax,%ecx
2646.long	2767451785
2647	movl	$16,%ecx
2648	subl	%eax,%ecx
2649	xorl	%eax,%eax
2650.long	2868115081
2651	leal	-16(%edi),%edi
2652	movl	%ebx,%ecx
2653	movl	%edi,%esi
2654	movl	%ebp,%edx
2655	jmp	.L097cbc_enc_loop
2656.align	16
2657.L095cbc_decrypt:
2658	cmpl	$80,%eax
2659	jbe	.L100cbc_dec_tail
2660	movaps	%xmm7,(%esp)
2661	subl	$80,%eax
2662	jmp	.L101cbc_dec_loop6_enter
2663.align	16
2664.L102cbc_dec_loop6:
2665	movaps	%xmm0,(%esp)
2666	movups	%xmm7,(%edi)
2667	leal	16(%edi),%edi
2668.L101cbc_dec_loop6_enter:
2669	movdqu	(%esi),%xmm2
2670	movdqu	16(%esi),%xmm3
2671	movdqu	32(%esi),%xmm4
2672	movdqu	48(%esi),%xmm5
2673	movdqu	64(%esi),%xmm6
2674	movdqu	80(%esi),%xmm7
2675	call	_aesni_decrypt6
2676	movups	(%esi),%xmm1
2677	movups	16(%esi),%xmm0
2678	xorps	(%esp),%xmm2
2679	xorps	%xmm1,%xmm3
2680	movups	32(%esi),%xmm1
2681	xorps	%xmm0,%xmm4
2682	movups	48(%esi),%xmm0
2683	xorps	%xmm1,%xmm5
2684	movups	64(%esi),%xmm1
2685	xorps	%xmm0,%xmm6
2686	movups	80(%esi),%xmm0
2687	xorps	%xmm1,%xmm7
2688	movups	%xmm2,(%edi)
2689	movups	%xmm3,16(%edi)
2690	leal	96(%esi),%esi
2691	movups	%xmm4,32(%edi)
2692	movl	%ebx,%ecx
2693	movups	%xmm5,48(%edi)
2694	movl	%ebp,%edx
2695	movups	%xmm6,64(%edi)
2696	leal	80(%edi),%edi
2697	subl	$96,%eax
2698	ja	.L102cbc_dec_loop6
2699	movaps	%xmm7,%xmm2
2700	movaps	%xmm0,%xmm7
2701	addl	$80,%eax
2702	jle	.L103cbc_dec_clear_tail_collected
2703	movups	%xmm2,(%edi)
2704	leal	16(%edi),%edi
2705.L100cbc_dec_tail:
2706	movups	(%esi),%xmm2
2707	movaps	%xmm2,%xmm6
2708	cmpl	$16,%eax
2709	jbe	.L104cbc_dec_one
2710	movups	16(%esi),%xmm3
2711	movaps	%xmm3,%xmm5
2712	cmpl	$32,%eax
2713	jbe	.L105cbc_dec_two
2714	movups	32(%esi),%xmm4
2715	cmpl	$48,%eax
2716	jbe	.L106cbc_dec_three
2717	movups	48(%esi),%xmm5
2718	cmpl	$64,%eax
2719	jbe	.L107cbc_dec_four
2720	movups	64(%esi),%xmm6
2721	movaps	%xmm7,(%esp)
2722	movups	(%esi),%xmm2
2723	xorps	%xmm7,%xmm7
2724	call	_aesni_decrypt6
2725	movups	(%esi),%xmm1
2726	movups	16(%esi),%xmm0
2727	xorps	(%esp),%xmm2
2728	xorps	%xmm1,%xmm3
2729	movups	32(%esi),%xmm1
2730	xorps	%xmm0,%xmm4
2731	movups	48(%esi),%xmm0
2732	xorps	%xmm1,%xmm5
2733	movups	64(%esi),%xmm7
2734	xorps	%xmm0,%xmm6
2735	movups	%xmm2,(%edi)
2736	movups	%xmm3,16(%edi)
2737	pxor	%xmm3,%xmm3
2738	movups	%xmm4,32(%edi)
2739	pxor	%xmm4,%xmm4
2740	movups	%xmm5,48(%edi)
2741	pxor	%xmm5,%xmm5
2742	leal	64(%edi),%edi
2743	movaps	%xmm6,%xmm2
2744	pxor	%xmm6,%xmm6
2745	subl	$80,%eax
2746	jmp	.L108cbc_dec_tail_collected
2747.align	16
2748.L104cbc_dec_one:
2749	movups	(%edx),%xmm0
2750	movups	16(%edx),%xmm1
2751	leal	32(%edx),%edx
2752	xorps	%xmm0,%xmm2
2753.L109dec1_loop_20:
2754.byte	102,15,56,222,209
2755	decl	%ecx
2756	movups	(%edx),%xmm1
2757	leal	16(%edx),%edx
2758	jnz	.L109dec1_loop_20
2759.byte	102,15,56,223,209
2760	xorps	%xmm7,%xmm2
2761	movaps	%xmm6,%xmm7
2762	subl	$16,%eax
2763	jmp	.L108cbc_dec_tail_collected
2764.align	16
2765.L105cbc_dec_two:
2766	call	_aesni_decrypt2
2767	xorps	%xmm7,%xmm2
2768	xorps	%xmm6,%xmm3
2769	movups	%xmm2,(%edi)
2770	movaps	%xmm3,%xmm2
2771	pxor	%xmm3,%xmm3
2772	leal	16(%edi),%edi
2773	movaps	%xmm5,%xmm7
2774	subl	$32,%eax
2775	jmp	.L108cbc_dec_tail_collected
2776.align	16
2777.L106cbc_dec_three:
2778	call	_aesni_decrypt3
2779	xorps	%xmm7,%xmm2
2780	xorps	%xmm6,%xmm3
2781	xorps	%xmm5,%xmm4
2782	movups	%xmm2,(%edi)
2783	movaps	%xmm4,%xmm2
2784	pxor	%xmm4,%xmm4
2785	movups	%xmm3,16(%edi)
2786	pxor	%xmm3,%xmm3
2787	leal	32(%edi),%edi
2788	movups	32(%esi),%xmm7
2789	subl	$48,%eax
2790	jmp	.L108cbc_dec_tail_collected
2791.align	16
2792.L107cbc_dec_four:
2793	call	_aesni_decrypt4
2794	movups	16(%esi),%xmm1
2795	movups	32(%esi),%xmm0
2796	xorps	%xmm7,%xmm2
2797	movups	48(%esi),%xmm7
2798	xorps	%xmm6,%xmm3
2799	movups	%xmm2,(%edi)
2800	xorps	%xmm1,%xmm4
2801	movups	%xmm3,16(%edi)
2802	pxor	%xmm3,%xmm3
2803	xorps	%xmm0,%xmm5
2804	movups	%xmm4,32(%edi)
2805	pxor	%xmm4,%xmm4
2806	leal	48(%edi),%edi
2807	movaps	%xmm5,%xmm2
2808	pxor	%xmm5,%xmm5
2809	subl	$64,%eax
2810	jmp	.L108cbc_dec_tail_collected
2811.align	16
2812.L103cbc_dec_clear_tail_collected:
2813	pxor	%xmm3,%xmm3
2814	pxor	%xmm4,%xmm4
2815	pxor	%xmm5,%xmm5
2816	pxor	%xmm6,%xmm6
2817.L108cbc_dec_tail_collected:
2818	andl	$15,%eax
2819	jnz	.L110cbc_dec_tail_partial
2820	movups	%xmm2,(%edi)
2821	pxor	%xmm0,%xmm0
2822	jmp	.L099cbc_ret
2823.align	16
2824.L110cbc_dec_tail_partial:
2825	movaps	%xmm2,(%esp)
2826	pxor	%xmm0,%xmm0
2827	movl	$16,%ecx
2828	movl	%esp,%esi
2829	subl	%eax,%ecx
2830.long	2767451785
2831	movdqa	%xmm2,(%esp)
2832.L099cbc_ret:
2833	movl	16(%esp),%esp
2834	movl	36(%esp),%ebp
2835	pxor	%xmm2,%xmm2
2836	pxor	%xmm1,%xmm1
2837	movups	%xmm7,(%ebp)
2838	pxor	%xmm7,%xmm7
2839.L094cbc_abort:
2840	popl	%edi
2841	popl	%esi
2842	popl	%ebx
2843	popl	%ebp
2844	ret
2845.size	aesni_cbc_encrypt,.-.L_aesni_cbc_encrypt_begin
2846.type	_aesni_set_encrypt_key,@function
2847.align	16
2848_aesni_set_encrypt_key:
2849	pushl	%ebp
2850	pushl	%ebx
2851	testl	%eax,%eax
2852	jz	.L111bad_pointer
2853	testl	%edx,%edx
2854	jz	.L111bad_pointer
2855	call	.L112pic
2856.L112pic:
2857	popl	%ebx
2858	leal	.Lkey_const-.L112pic(%ebx),%ebx
2859	leal	OPENSSL_ia32cap_P-.Lkey_const(%ebx),%ebp
2860	movups	(%eax),%xmm0
2861	xorps	%xmm4,%xmm4
2862	movl	4(%ebp),%ebp
2863	leal	16(%edx),%edx
2864	andl	$268437504,%ebp
2865	cmpl	$256,%ecx
2866	je	.L11314rounds
2867	cmpl	$192,%ecx
2868	je	.L11412rounds
2869	cmpl	$128,%ecx
2870	jne	.L115bad_keybits
2871.align	16
2872.L11610rounds:
2873	cmpl	$268435456,%ebp
2874	je	.L11710rounds_alt
2875	movl	$9,%ecx
2876	movups	%xmm0,-16(%edx)
2877.byte	102,15,58,223,200,1
2878	call	.L118key_128_cold
2879.byte	102,15,58,223,200,2
2880	call	.L119key_128
2881.byte	102,15,58,223,200,4
2882	call	.L119key_128
2883.byte	102,15,58,223,200,8
2884	call	.L119key_128
2885.byte	102,15,58,223,200,16
2886	call	.L119key_128
2887.byte	102,15,58,223,200,32
2888	call	.L119key_128
2889.byte	102,15,58,223,200,64
2890	call	.L119key_128
2891.byte	102,15,58,223,200,128
2892	call	.L119key_128
2893.byte	102,15,58,223,200,27
2894	call	.L119key_128
2895.byte	102,15,58,223,200,54
2896	call	.L119key_128
2897	movups	%xmm0,(%edx)
2898	movl	%ecx,80(%edx)
2899	jmp	.L120good_key
2900.align	16
2901.L119key_128:
2902	movups	%xmm0,(%edx)
2903	leal	16(%edx),%edx
2904.L118key_128_cold:
2905	shufps	$16,%xmm0,%xmm4
2906	xorps	%xmm4,%xmm0
2907	shufps	$140,%xmm0,%xmm4
2908	xorps	%xmm4,%xmm0
2909	shufps	$255,%xmm1,%xmm1
2910	xorps	%xmm1,%xmm0
2911	ret
2912.align	16
2913.L11710rounds_alt:
2914	movdqa	(%ebx),%xmm5
2915	movl	$8,%ecx
2916	movdqa	32(%ebx),%xmm4
2917	movdqa	%xmm0,%xmm2
2918	movdqu	%xmm0,-16(%edx)
2919.L121loop_key128:
2920.byte	102,15,56,0,197
2921.byte	102,15,56,221,196
2922	pslld	$1,%xmm4
2923	leal	16(%edx),%edx
2924	movdqa	%xmm2,%xmm3
2925	pslldq	$4,%xmm2
2926	pxor	%xmm2,%xmm3
2927	pslldq	$4,%xmm2
2928	pxor	%xmm2,%xmm3
2929	pslldq	$4,%xmm2
2930	pxor	%xmm3,%xmm2
2931	pxor	%xmm2,%xmm0
2932	movdqu	%xmm0,-16(%edx)
2933	movdqa	%xmm0,%xmm2
2934	decl	%ecx
2935	jnz	.L121loop_key128
2936	movdqa	48(%ebx),%xmm4
2937.byte	102,15,56,0,197
2938.byte	102,15,56,221,196
2939	pslld	$1,%xmm4
2940	movdqa	%xmm2,%xmm3
2941	pslldq	$4,%xmm2
2942	pxor	%xmm2,%xmm3
2943	pslldq	$4,%xmm2
2944	pxor	%xmm2,%xmm3
2945	pslldq	$4,%xmm2
2946	pxor	%xmm3,%xmm2
2947	pxor	%xmm2,%xmm0
2948	movdqu	%xmm0,(%edx)
2949	movdqa	%xmm0,%xmm2
2950.byte	102,15,56,0,197
2951.byte	102,15,56,221,196
2952	movdqa	%xmm2,%xmm3
2953	pslldq	$4,%xmm2
2954	pxor	%xmm2,%xmm3
2955	pslldq	$4,%xmm2
2956	pxor	%xmm2,%xmm3
2957	pslldq	$4,%xmm2
2958	pxor	%xmm3,%xmm2
2959	pxor	%xmm2,%xmm0
2960	movdqu	%xmm0,16(%edx)
2961	movl	$9,%ecx
2962	movl	%ecx,96(%edx)
2963	jmp	.L120good_key
2964.align	16
2965.L11412rounds:
2966	movq	16(%eax),%xmm2
2967	cmpl	$268435456,%ebp
2968	je	.L12212rounds_alt
2969	movl	$11,%ecx
2970	movups	%xmm0,-16(%edx)
2971.byte	102,15,58,223,202,1
2972	call	.L123key_192a_cold
2973.byte	102,15,58,223,202,2
2974	call	.L124key_192b
2975.byte	102,15,58,223,202,4
2976	call	.L125key_192a
2977.byte	102,15,58,223,202,8
2978	call	.L124key_192b
2979.byte	102,15,58,223,202,16
2980	call	.L125key_192a
2981.byte	102,15,58,223,202,32
2982	call	.L124key_192b
2983.byte	102,15,58,223,202,64
2984	call	.L125key_192a
2985.byte	102,15,58,223,202,128
2986	call	.L124key_192b
2987	movups	%xmm0,(%edx)
2988	movl	%ecx,48(%edx)
2989	jmp	.L120good_key
2990.align	16
2991.L125key_192a:
2992	movups	%xmm0,(%edx)
2993	leal	16(%edx),%edx
2994.align	16
2995.L123key_192a_cold:
2996	movaps	%xmm2,%xmm5
2997.L126key_192b_warm:
2998	shufps	$16,%xmm0,%xmm4
2999	movdqa	%xmm2,%xmm3
3000	xorps	%xmm4,%xmm0
3001	shufps	$140,%xmm0,%xmm4
3002	pslldq	$4,%xmm3
3003	xorps	%xmm4,%xmm0
3004	pshufd	$85,%xmm1,%xmm1
3005	pxor	%xmm3,%xmm2
3006	pxor	%xmm1,%xmm0
3007	pshufd	$255,%xmm0,%xmm3
3008	pxor	%xmm3,%xmm2
3009	ret
3010.align	16
3011.L124key_192b:
3012	movaps	%xmm0,%xmm3
3013	shufps	$68,%xmm0,%xmm5
3014	movups	%xmm5,(%edx)
3015	shufps	$78,%xmm2,%xmm3
3016	movups	%xmm3,16(%edx)
3017	leal	32(%edx),%edx
3018	jmp	.L126key_192b_warm
3019.align	16
3020.L12212rounds_alt:
3021	movdqa	16(%ebx),%xmm5
3022	movdqa	32(%ebx),%xmm4
3023	movl	$8,%ecx
3024	movdqu	%xmm0,-16(%edx)
3025.L127loop_key192:
3026	movq	%xmm2,(%edx)
3027	movdqa	%xmm2,%xmm1
3028.byte	102,15,56,0,213
3029.byte	102,15,56,221,212
3030	pslld	$1,%xmm4
3031	leal	24(%edx),%edx
3032	movdqa	%xmm0,%xmm3
3033	pslldq	$4,%xmm0
3034	pxor	%xmm0,%xmm3
3035	pslldq	$4,%xmm0
3036	pxor	%xmm0,%xmm3
3037	pslldq	$4,%xmm0
3038	pxor	%xmm3,%xmm0
3039	pshufd	$255,%xmm0,%xmm3
3040	pxor	%xmm1,%xmm3
3041	pslldq	$4,%xmm1
3042	pxor	%xmm1,%xmm3
3043	pxor	%xmm2,%xmm0
3044	pxor	%xmm3,%xmm2
3045	movdqu	%xmm0,-16(%edx)
3046	decl	%ecx
3047	jnz	.L127loop_key192
3048	movl	$11,%ecx
3049	movl	%ecx,32(%edx)
3050	jmp	.L120good_key
3051.align	16
3052.L11314rounds:
3053	movups	16(%eax),%xmm2
3054	leal	16(%edx),%edx
3055	cmpl	$268435456,%ebp
3056	je	.L12814rounds_alt
3057	movl	$13,%ecx
3058	movups	%xmm0,-32(%edx)
3059	movups	%xmm2,-16(%edx)
3060.byte	102,15,58,223,202,1
3061	call	.L129key_256a_cold
3062.byte	102,15,58,223,200,1
3063	call	.L130key_256b
3064.byte	102,15,58,223,202,2
3065	call	.L131key_256a
3066.byte	102,15,58,223,200,2
3067	call	.L130key_256b
3068.byte	102,15,58,223,202,4
3069	call	.L131key_256a
3070.byte	102,15,58,223,200,4
3071	call	.L130key_256b
3072.byte	102,15,58,223,202,8
3073	call	.L131key_256a
3074.byte	102,15,58,223,200,8
3075	call	.L130key_256b
3076.byte	102,15,58,223,202,16
3077	call	.L131key_256a
3078.byte	102,15,58,223,200,16
3079	call	.L130key_256b
3080.byte	102,15,58,223,202,32
3081	call	.L131key_256a
3082.byte	102,15,58,223,200,32
3083	call	.L130key_256b
3084.byte	102,15,58,223,202,64
3085	call	.L131key_256a
3086	movups	%xmm0,(%edx)
3087	movl	%ecx,16(%edx)
3088	xorl	%eax,%eax
3089	jmp	.L120good_key
3090.align	16
3091.L131key_256a:
3092	movups	%xmm2,(%edx)
3093	leal	16(%edx),%edx
3094.L129key_256a_cold:
3095	shufps	$16,%xmm0,%xmm4
3096	xorps	%xmm4,%xmm0
3097	shufps	$140,%xmm0,%xmm4
3098	xorps	%xmm4,%xmm0
3099	shufps	$255,%xmm1,%xmm1
3100	xorps	%xmm1,%xmm0
3101	ret
3102.align	16
3103.L130key_256b:
3104	movups	%xmm0,(%edx)
3105	leal	16(%edx),%edx
3106	shufps	$16,%xmm2,%xmm4
3107	xorps	%xmm4,%xmm2
3108	shufps	$140,%xmm2,%xmm4
3109	xorps	%xmm4,%xmm2
3110	shufps	$170,%xmm1,%xmm1
3111	xorps	%xmm1,%xmm2
3112	ret
3113.align	16
3114.L12814rounds_alt:
3115	movdqa	(%ebx),%xmm5
3116	movdqa	32(%ebx),%xmm4
3117	movl	$7,%ecx
3118	movdqu	%xmm0,-32(%edx)
3119	movdqa	%xmm2,%xmm1
3120	movdqu	%xmm2,-16(%edx)
3121.L132loop_key256:
3122.byte	102,15,56,0,213
3123.byte	102,15,56,221,212
3124	movdqa	%xmm0,%xmm3
3125	pslldq	$4,%xmm0
3126	pxor	%xmm0,%xmm3
3127	pslldq	$4,%xmm0
3128	pxor	%xmm0,%xmm3
3129	pslldq	$4,%xmm0
3130	pxor	%xmm3,%xmm0
3131	pslld	$1,%xmm4
3132	pxor	%xmm2,%xmm0
3133	movdqu	%xmm0,(%edx)
3134	decl	%ecx
3135	jz	.L133done_key256
3136	pshufd	$255,%xmm0,%xmm2
3137	pxor	%xmm3,%xmm3
3138.byte	102,15,56,221,211
3139	movdqa	%xmm1,%xmm3
3140	pslldq	$4,%xmm1
3141	pxor	%xmm1,%xmm3
3142	pslldq	$4,%xmm1
3143	pxor	%xmm1,%xmm3
3144	pslldq	$4,%xmm1
3145	pxor	%xmm3,%xmm1
3146	pxor	%xmm1,%xmm2
3147	movdqu	%xmm2,16(%edx)
3148	leal	32(%edx),%edx
3149	movdqa	%xmm2,%xmm1
3150	jmp	.L132loop_key256
3151.L133done_key256:
3152	movl	$13,%ecx
3153	movl	%ecx,16(%edx)
3154.L120good_key:
3155	pxor	%xmm0,%xmm0
3156	pxor	%xmm1,%xmm1
3157	pxor	%xmm2,%xmm2
3158	pxor	%xmm3,%xmm3
3159	pxor	%xmm4,%xmm4
3160	pxor	%xmm5,%xmm5
3161	xorl	%eax,%eax
3162	popl	%ebx
3163	popl	%ebp
3164	ret
3165.align	4
3166.L111bad_pointer:
3167	movl	$-1,%eax
3168	popl	%ebx
3169	popl	%ebp
3170	ret
3171.align	4
3172.L115bad_keybits:
3173	pxor	%xmm0,%xmm0
3174	movl	$-2,%eax
3175	popl	%ebx
3176	popl	%ebp
3177	ret
3178.size	_aesni_set_encrypt_key,.-_aesni_set_encrypt_key
3179.globl	aesni_set_encrypt_key
3180.type	aesni_set_encrypt_key,@function
3181.align	16
3182aesni_set_encrypt_key:
3183.L_aesni_set_encrypt_key_begin:
3184	movl	4(%esp),%eax
3185	movl	8(%esp),%ecx
3186	movl	12(%esp),%edx
3187	call	_aesni_set_encrypt_key
3188	ret
3189.size	aesni_set_encrypt_key,.-.L_aesni_set_encrypt_key_begin
3190.globl	aesni_set_decrypt_key
3191.type	aesni_set_decrypt_key,@function
3192.align	16
3193aesni_set_decrypt_key:
3194.L_aesni_set_decrypt_key_begin:
3195	movl	4(%esp),%eax
3196	movl	8(%esp),%ecx
3197	movl	12(%esp),%edx
3198	call	_aesni_set_encrypt_key
3199	movl	12(%esp),%edx
3200	shll	$4,%ecx
3201	testl	%eax,%eax
3202	jnz	.L134dec_key_ret
3203	leal	16(%edx,%ecx,1),%eax
3204	movups	(%edx),%xmm0
3205	movups	(%eax),%xmm1
3206	movups	%xmm0,(%eax)
3207	movups	%xmm1,(%edx)
3208	leal	16(%edx),%edx
3209	leal	-16(%eax),%eax
3210.L135dec_key_inverse:
3211	movups	(%edx),%xmm0
3212	movups	(%eax),%xmm1
3213.byte	102,15,56,219,192
3214.byte	102,15,56,219,201
3215	leal	16(%edx),%edx
3216	leal	-16(%eax),%eax
3217	movups	%xmm0,16(%eax)
3218	movups	%xmm1,-16(%edx)
3219	cmpl	%edx,%eax
3220	ja	.L135dec_key_inverse
3221	movups	(%edx),%xmm0
3222.byte	102,15,56,219,192
3223	movups	%xmm0,(%edx)
3224	pxor	%xmm0,%xmm0
3225	pxor	%xmm1,%xmm1
3226	xorl	%eax,%eax
3227.L134dec_key_ret:
3228	ret
3229.size	aesni_set_decrypt_key,.-.L_aesni_set_decrypt_key_begin
3230.align	64
3231.Lkey_const:
3232.long	202313229,202313229,202313229,202313229
3233.long	67569157,67569157,67569157,67569157
3234.long	1,1,1,1
3235.long	27,27,27,27
3236.byte	65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69
3237.byte	83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83
3238.byte	32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
3239.byte	115,108,46,111,114,103,62,0
3240.comm	OPENSSL_ia32cap_P,16,4
3241#else
3242.text
3243.globl	aesni_encrypt
3244.type	aesni_encrypt,@function
3245.align	16
3246aesni_encrypt:
3247.L_aesni_encrypt_begin:
3248	movl	4(%esp),%eax
3249	movl	12(%esp),%edx
3250	movups	(%eax),%xmm2
3251	movl	240(%edx),%ecx
3252	movl	8(%esp),%eax
3253	movups	(%edx),%xmm0
3254	movups	16(%edx),%xmm1
3255	leal	32(%edx),%edx
3256	xorps	%xmm0,%xmm2
3257.L000enc1_loop_1:
3258.byte	102,15,56,220,209
3259	decl	%ecx
3260	movups	(%edx),%xmm1
3261	leal	16(%edx),%edx
3262	jnz	.L000enc1_loop_1
3263.byte	102,15,56,221,209
3264	pxor	%xmm0,%xmm0
3265	pxor	%xmm1,%xmm1
3266	movups	%xmm2,(%eax)
3267	pxor	%xmm2,%xmm2
3268	ret
3269.size	aesni_encrypt,.-.L_aesni_encrypt_begin
3270.globl	aesni_decrypt
3271.type	aesni_decrypt,@function
3272.align	16
3273aesni_decrypt:
3274.L_aesni_decrypt_begin:
3275	movl	4(%esp),%eax
3276	movl	12(%esp),%edx
3277	movups	(%eax),%xmm2
3278	movl	240(%edx),%ecx
3279	movl	8(%esp),%eax
3280	movups	(%edx),%xmm0
3281	movups	16(%edx),%xmm1
3282	leal	32(%edx),%edx
3283	xorps	%xmm0,%xmm2
3284.L001dec1_loop_2:
3285.byte	102,15,56,222,209
3286	decl	%ecx
3287	movups	(%edx),%xmm1
3288	leal	16(%edx),%edx
3289	jnz	.L001dec1_loop_2
3290.byte	102,15,56,223,209
3291	pxor	%xmm0,%xmm0
3292	pxor	%xmm1,%xmm1
3293	movups	%xmm2,(%eax)
3294	pxor	%xmm2,%xmm2
3295	ret
3296.size	aesni_decrypt,.-.L_aesni_decrypt_begin
3297.type	_aesni_encrypt2,@function
3298.align	16
3299_aesni_encrypt2:
3300	movups	(%edx),%xmm0
3301	shll	$4,%ecx
3302	movups	16(%edx),%xmm1
3303	xorps	%xmm0,%xmm2
3304	pxor	%xmm0,%xmm3
3305	movups	32(%edx),%xmm0
3306	leal	32(%edx,%ecx,1),%edx
3307	negl	%ecx
3308	addl	$16,%ecx
3309.L002enc2_loop:
3310.byte	102,15,56,220,209
3311.byte	102,15,56,220,217
3312	movups	(%edx,%ecx,1),%xmm1
3313	addl	$32,%ecx
3314.byte	102,15,56,220,208
3315.byte	102,15,56,220,216
3316	movups	-16(%edx,%ecx,1),%xmm0
3317	jnz	.L002enc2_loop
3318.byte	102,15,56,220,209
3319.byte	102,15,56,220,217
3320.byte	102,15,56,221,208
3321.byte	102,15,56,221,216
3322	ret
3323.size	_aesni_encrypt2,.-_aesni_encrypt2
3324.type	_aesni_decrypt2,@function
3325.align	16
3326_aesni_decrypt2:
3327	movups	(%edx),%xmm0
3328	shll	$4,%ecx
3329	movups	16(%edx),%xmm1
3330	xorps	%xmm0,%xmm2
3331	pxor	%xmm0,%xmm3
3332	movups	32(%edx),%xmm0
3333	leal	32(%edx,%ecx,1),%edx
3334	negl	%ecx
3335	addl	$16,%ecx
3336.L003dec2_loop:
3337.byte	102,15,56,222,209
3338.byte	102,15,56,222,217
3339	movups	(%edx,%ecx,1),%xmm1
3340	addl	$32,%ecx
3341.byte	102,15,56,222,208
3342.byte	102,15,56,222,216
3343	movups	-16(%edx,%ecx,1),%xmm0
3344	jnz	.L003dec2_loop
3345.byte	102,15,56,222,209
3346.byte	102,15,56,222,217
3347.byte	102,15,56,223,208
3348.byte	102,15,56,223,216
3349	ret
3350.size	_aesni_decrypt2,.-_aesni_decrypt2
3351.type	_aesni_encrypt3,@function
3352.align	16
3353_aesni_encrypt3:
3354	movups	(%edx),%xmm0
3355	shll	$4,%ecx
3356	movups	16(%edx),%xmm1
3357	xorps	%xmm0,%xmm2
3358	pxor	%xmm0,%xmm3
3359	pxor	%xmm0,%xmm4
3360	movups	32(%edx),%xmm0
3361	leal	32(%edx,%ecx,1),%edx
3362	negl	%ecx
3363	addl	$16,%ecx
3364.L004enc3_loop:
3365.byte	102,15,56,220,209
3366.byte	102,15,56,220,217
3367.byte	102,15,56,220,225
3368	movups	(%edx,%ecx,1),%xmm1
3369	addl	$32,%ecx
3370.byte	102,15,56,220,208
3371.byte	102,15,56,220,216
3372.byte	102,15,56,220,224
3373	movups	-16(%edx,%ecx,1),%xmm0
3374	jnz	.L004enc3_loop
3375.byte	102,15,56,220,209
3376.byte	102,15,56,220,217
3377.byte	102,15,56,220,225
3378.byte	102,15,56,221,208
3379.byte	102,15,56,221,216
3380.byte	102,15,56,221,224
3381	ret
3382.size	_aesni_encrypt3,.-_aesni_encrypt3
3383.type	_aesni_decrypt3,@function
3384.align	16
3385_aesni_decrypt3:
3386	movups	(%edx),%xmm0
3387	shll	$4,%ecx
3388	movups	16(%edx),%xmm1
3389	xorps	%xmm0,%xmm2
3390	pxor	%xmm0,%xmm3
3391	pxor	%xmm0,%xmm4
3392	movups	32(%edx),%xmm0
3393	leal	32(%edx,%ecx,1),%edx
3394	negl	%ecx
3395	addl	$16,%ecx
3396.L005dec3_loop:
3397.byte	102,15,56,222,209
3398.byte	102,15,56,222,217
3399.byte	102,15,56,222,225
3400	movups	(%edx,%ecx,1),%xmm1
3401	addl	$32,%ecx
3402.byte	102,15,56,222,208
3403.byte	102,15,56,222,216
3404.byte	102,15,56,222,224
3405	movups	-16(%edx,%ecx,1),%xmm0
3406	jnz	.L005dec3_loop
3407.byte	102,15,56,222,209
3408.byte	102,15,56,222,217
3409.byte	102,15,56,222,225
3410.byte	102,15,56,223,208
3411.byte	102,15,56,223,216
3412.byte	102,15,56,223,224
3413	ret
3414.size	_aesni_decrypt3,.-_aesni_decrypt3
3415.type	_aesni_encrypt4,@function
3416.align	16
3417_aesni_encrypt4:
3418	movups	(%edx),%xmm0
3419	movups	16(%edx),%xmm1
3420	shll	$4,%ecx
3421	xorps	%xmm0,%xmm2
3422	pxor	%xmm0,%xmm3
3423	pxor	%xmm0,%xmm4
3424	pxor	%xmm0,%xmm5
3425	movups	32(%edx),%xmm0
3426	leal	32(%edx,%ecx,1),%edx
3427	negl	%ecx
3428.byte	15,31,64,0
3429	addl	$16,%ecx
3430.L006enc4_loop:
3431.byte	102,15,56,220,209
3432.byte	102,15,56,220,217
3433.byte	102,15,56,220,225
3434.byte	102,15,56,220,233
3435	movups	(%edx,%ecx,1),%xmm1
3436	addl	$32,%ecx
3437.byte	102,15,56,220,208
3438.byte	102,15,56,220,216
3439.byte	102,15,56,220,224
3440.byte	102,15,56,220,232
3441	movups	-16(%edx,%ecx,1),%xmm0
3442	jnz	.L006enc4_loop
3443.byte	102,15,56,220,209
3444.byte	102,15,56,220,217
3445.byte	102,15,56,220,225
3446.byte	102,15,56,220,233
3447.byte	102,15,56,221,208
3448.byte	102,15,56,221,216
3449.byte	102,15,56,221,224
3450.byte	102,15,56,221,232
3451	ret
3452.size	_aesni_encrypt4,.-_aesni_encrypt4
3453.type	_aesni_decrypt4,@function
3454.align	16
3455_aesni_decrypt4:
3456	movups	(%edx),%xmm0
3457	movups	16(%edx),%xmm1
3458	shll	$4,%ecx
3459	xorps	%xmm0,%xmm2
3460	pxor	%xmm0,%xmm3
3461	pxor	%xmm0,%xmm4
3462	pxor	%xmm0,%xmm5
3463	movups	32(%edx),%xmm0
3464	leal	32(%edx,%ecx,1),%edx
3465	negl	%ecx
3466.byte	15,31,64,0
3467	addl	$16,%ecx
3468.L007dec4_loop:
3469.byte	102,15,56,222,209
3470.byte	102,15,56,222,217
3471.byte	102,15,56,222,225
3472.byte	102,15,56,222,233
3473	movups	(%edx,%ecx,1),%xmm1
3474	addl	$32,%ecx
3475.byte	102,15,56,222,208
3476.byte	102,15,56,222,216
3477.byte	102,15,56,222,224
3478.byte	102,15,56,222,232
3479	movups	-16(%edx,%ecx,1),%xmm0
3480	jnz	.L007dec4_loop
3481.byte	102,15,56,222,209
3482.byte	102,15,56,222,217
3483.byte	102,15,56,222,225
3484.byte	102,15,56,222,233
3485.byte	102,15,56,223,208
3486.byte	102,15,56,223,216
3487.byte	102,15,56,223,224
3488.byte	102,15,56,223,232
3489	ret
3490.size	_aesni_decrypt4,.-_aesni_decrypt4
3491.type	_aesni_encrypt6,@function
3492.align	16
3493_aesni_encrypt6:
3494	movups	(%edx),%xmm0
3495	shll	$4,%ecx
3496	movups	16(%edx),%xmm1
3497	xorps	%xmm0,%xmm2
3498	pxor	%xmm0,%xmm3
3499	pxor	%xmm0,%xmm4
3500.byte	102,15,56,220,209
3501	pxor	%xmm0,%xmm5
3502	pxor	%xmm0,%xmm6
3503.byte	102,15,56,220,217
3504	leal	32(%edx,%ecx,1),%edx
3505	negl	%ecx
3506.byte	102,15,56,220,225
3507	pxor	%xmm0,%xmm7
3508	movups	(%edx,%ecx,1),%xmm0
3509	addl	$16,%ecx
3510	jmp	.L008_aesni_encrypt6_inner
3511.align	16
3512.L009enc6_loop:
3513.byte	102,15,56,220,209
3514.byte	102,15,56,220,217
3515.byte	102,15,56,220,225
3516.L008_aesni_encrypt6_inner:
3517.byte	102,15,56,220,233
3518.byte	102,15,56,220,241
3519.byte	102,15,56,220,249
3520.L_aesni_encrypt6_enter:
3521	movups	(%edx,%ecx,1),%xmm1
3522	addl	$32,%ecx
3523.byte	102,15,56,220,208
3524.byte	102,15,56,220,216
3525.byte	102,15,56,220,224
3526.byte	102,15,56,220,232
3527.byte	102,15,56,220,240
3528.byte	102,15,56,220,248
3529	movups	-16(%edx,%ecx,1),%xmm0
3530	jnz	.L009enc6_loop
3531.byte	102,15,56,220,209
3532.byte	102,15,56,220,217
3533.byte	102,15,56,220,225
3534.byte	102,15,56,220,233
3535.byte	102,15,56,220,241
3536.byte	102,15,56,220,249
3537.byte	102,15,56,221,208
3538.byte	102,15,56,221,216
3539.byte	102,15,56,221,224
3540.byte	102,15,56,221,232
3541.byte	102,15,56,221,240
3542.byte	102,15,56,221,248
3543	ret
3544.size	_aesni_encrypt6,.-_aesni_encrypt6
3545.type	_aesni_decrypt6,@function
3546.align	16
3547_aesni_decrypt6:
3548	movups	(%edx),%xmm0
3549	shll	$4,%ecx
3550	movups	16(%edx),%xmm1
3551	xorps	%xmm0,%xmm2
3552	pxor	%xmm0,%xmm3
3553	pxor	%xmm0,%xmm4
3554.byte	102,15,56,222,209
3555	pxor	%xmm0,%xmm5
3556	pxor	%xmm0,%xmm6
3557.byte	102,15,56,222,217
3558	leal	32(%edx,%ecx,1),%edx
3559	negl	%ecx
3560.byte	102,15,56,222,225
3561	pxor	%xmm0,%xmm7
3562	movups	(%edx,%ecx,1),%xmm0
3563	addl	$16,%ecx
3564	jmp	.L010_aesni_decrypt6_inner
3565.align	16
3566.L011dec6_loop:
3567.byte	102,15,56,222,209
3568.byte	102,15,56,222,217
3569.byte	102,15,56,222,225
3570.L010_aesni_decrypt6_inner:
3571.byte	102,15,56,222,233
3572.byte	102,15,56,222,241
3573.byte	102,15,56,222,249
3574.L_aesni_decrypt6_enter:
3575	movups	(%edx,%ecx,1),%xmm1
3576	addl	$32,%ecx
3577.byte	102,15,56,222,208
3578.byte	102,15,56,222,216
3579.byte	102,15,56,222,224
3580.byte	102,15,56,222,232
3581.byte	102,15,56,222,240
3582.byte	102,15,56,222,248
3583	movups	-16(%edx,%ecx,1),%xmm0
3584	jnz	.L011dec6_loop
3585.byte	102,15,56,222,209
3586.byte	102,15,56,222,217
3587.byte	102,15,56,222,225
3588.byte	102,15,56,222,233
3589.byte	102,15,56,222,241
3590.byte	102,15,56,222,249
3591.byte	102,15,56,223,208
3592.byte	102,15,56,223,216
3593.byte	102,15,56,223,224
3594.byte	102,15,56,223,232
3595.byte	102,15,56,223,240
3596.byte	102,15,56,223,248
3597	ret
3598.size	_aesni_decrypt6,.-_aesni_decrypt6
3599.globl	aesni_ecb_encrypt
3600.type	aesni_ecb_encrypt,@function
3601.align	16
3602aesni_ecb_encrypt:
3603.L_aesni_ecb_encrypt_begin:
3604	pushl	%ebp
3605	pushl	%ebx
3606	pushl	%esi
3607	pushl	%edi
3608	movl	20(%esp),%esi
3609	movl	24(%esp),%edi
3610	movl	28(%esp),%eax
3611	movl	32(%esp),%edx
3612	movl	36(%esp),%ebx
3613	andl	$-16,%eax
3614	jz	.L012ecb_ret
3615	movl	240(%edx),%ecx
3616	testl	%ebx,%ebx
3617	jz	.L013ecb_decrypt
3618	movl	%edx,%ebp
3619	movl	%ecx,%ebx
3620	cmpl	$96,%eax
3621	jb	.L014ecb_enc_tail
3622	movdqu	(%esi),%xmm2
3623	movdqu	16(%esi),%xmm3
3624	movdqu	32(%esi),%xmm4
3625	movdqu	48(%esi),%xmm5
3626	movdqu	64(%esi),%xmm6
3627	movdqu	80(%esi),%xmm7
3628	leal	96(%esi),%esi
3629	subl	$96,%eax
3630	jmp	.L015ecb_enc_loop6_enter
3631.align	16
3632.L016ecb_enc_loop6:
3633	movups	%xmm2,(%edi)
3634	movdqu	(%esi),%xmm2
3635	movups	%xmm3,16(%edi)
3636	movdqu	16(%esi),%xmm3
3637	movups	%xmm4,32(%edi)
3638	movdqu	32(%esi),%xmm4
3639	movups	%xmm5,48(%edi)
3640	movdqu	48(%esi),%xmm5
3641	movups	%xmm6,64(%edi)
3642	movdqu	64(%esi),%xmm6
3643	movups	%xmm7,80(%edi)
3644	leal	96(%edi),%edi
3645	movdqu	80(%esi),%xmm7
3646	leal	96(%esi),%esi
3647.L015ecb_enc_loop6_enter:
3648	call	_aesni_encrypt6
3649	movl	%ebp,%edx
3650	movl	%ebx,%ecx
3651	subl	$96,%eax
3652	jnc	.L016ecb_enc_loop6
3653	movups	%xmm2,(%edi)
3654	movups	%xmm3,16(%edi)
3655	movups	%xmm4,32(%edi)
3656	movups	%xmm5,48(%edi)
3657	movups	%xmm6,64(%edi)
3658	movups	%xmm7,80(%edi)
3659	leal	96(%edi),%edi
3660	addl	$96,%eax
3661	jz	.L012ecb_ret
3662.L014ecb_enc_tail:
3663	movups	(%esi),%xmm2
3664	cmpl	$32,%eax
3665	jb	.L017ecb_enc_one
3666	movups	16(%esi),%xmm3
3667	je	.L018ecb_enc_two
3668	movups	32(%esi),%xmm4
3669	cmpl	$64,%eax
3670	jb	.L019ecb_enc_three
3671	movups	48(%esi),%xmm5
3672	je	.L020ecb_enc_four
3673	movups	64(%esi),%xmm6
3674	xorps	%xmm7,%xmm7
3675	call	_aesni_encrypt6
3676	movups	%xmm2,(%edi)
3677	movups	%xmm3,16(%edi)
3678	movups	%xmm4,32(%edi)
3679	movups	%xmm5,48(%edi)
3680	movups	%xmm6,64(%edi)
3681	jmp	.L012ecb_ret
3682.align	16
3683.L017ecb_enc_one:
3684	movups	(%edx),%xmm0
3685	movups	16(%edx),%xmm1
3686	leal	32(%edx),%edx
3687	xorps	%xmm0,%xmm2
3688.L021enc1_loop_3:
3689.byte	102,15,56,220,209
3690	decl	%ecx
3691	movups	(%edx),%xmm1
3692	leal	16(%edx),%edx
3693	jnz	.L021enc1_loop_3
3694.byte	102,15,56,221,209
3695	movups	%xmm2,(%edi)
3696	jmp	.L012ecb_ret
3697.align	16
3698.L018ecb_enc_two:
3699	call	_aesni_encrypt2
3700	movups	%xmm2,(%edi)
3701	movups	%xmm3,16(%edi)
3702	jmp	.L012ecb_ret
3703.align	16
3704.L019ecb_enc_three:
3705	call	_aesni_encrypt3
3706	movups	%xmm2,(%edi)
3707	movups	%xmm3,16(%edi)
3708	movups	%xmm4,32(%edi)
3709	jmp	.L012ecb_ret
3710.align	16
3711.L020ecb_enc_four:
3712	call	_aesni_encrypt4
3713	movups	%xmm2,(%edi)
3714	movups	%xmm3,16(%edi)
3715	movups	%xmm4,32(%edi)
3716	movups	%xmm5,48(%edi)
3717	jmp	.L012ecb_ret
3718.align	16
3719.L013ecb_decrypt:
3720	movl	%edx,%ebp
3721	movl	%ecx,%ebx
3722	cmpl	$96,%eax
3723	jb	.L022ecb_dec_tail
3724	movdqu	(%esi),%xmm2
3725	movdqu	16(%esi),%xmm3
3726	movdqu	32(%esi),%xmm4
3727	movdqu	48(%esi),%xmm5
3728	movdqu	64(%esi),%xmm6
3729	movdqu	80(%esi),%xmm7
3730	leal	96(%esi),%esi
3731	subl	$96,%eax
3732	jmp	.L023ecb_dec_loop6_enter
3733.align	16
3734.L024ecb_dec_loop6:
3735	movups	%xmm2,(%edi)
3736	movdqu	(%esi),%xmm2
3737	movups	%xmm3,16(%edi)
3738	movdqu	16(%esi),%xmm3
3739	movups	%xmm4,32(%edi)
3740	movdqu	32(%esi),%xmm4
3741	movups	%xmm5,48(%edi)
3742	movdqu	48(%esi),%xmm5
3743	movups	%xmm6,64(%edi)
3744	movdqu	64(%esi),%xmm6
3745	movups	%xmm7,80(%edi)
3746	leal	96(%edi),%edi
3747	movdqu	80(%esi),%xmm7
3748	leal	96(%esi),%esi
3749.L023ecb_dec_loop6_enter:
3750	call	_aesni_decrypt6
3751	movl	%ebp,%edx
3752	movl	%ebx,%ecx
3753	subl	$96,%eax
3754	jnc	.L024ecb_dec_loop6
3755	movups	%xmm2,(%edi)
3756	movups	%xmm3,16(%edi)
3757	movups	%xmm4,32(%edi)
3758	movups	%xmm5,48(%edi)
3759	movups	%xmm6,64(%edi)
3760	movups	%xmm7,80(%edi)
3761	leal	96(%edi),%edi
3762	addl	$96,%eax
3763	jz	.L012ecb_ret
3764.L022ecb_dec_tail:
3765	movups	(%esi),%xmm2
3766	cmpl	$32,%eax
3767	jb	.L025ecb_dec_one
3768	movups	16(%esi),%xmm3
3769	je	.L026ecb_dec_two
3770	movups	32(%esi),%xmm4
3771	cmpl	$64,%eax
3772	jb	.L027ecb_dec_three
3773	movups	48(%esi),%xmm5
3774	je	.L028ecb_dec_four
3775	movups	64(%esi),%xmm6
3776	xorps	%xmm7,%xmm7
3777	call	_aesni_decrypt6
3778	movups	%xmm2,(%edi)
3779	movups	%xmm3,16(%edi)
3780	movups	%xmm4,32(%edi)
3781	movups	%xmm5,48(%edi)
3782	movups	%xmm6,64(%edi)
3783	jmp	.L012ecb_ret
3784.align	16
3785.L025ecb_dec_one:
3786	movups	(%edx),%xmm0
3787	movups	16(%edx),%xmm1
3788	leal	32(%edx),%edx
3789	xorps	%xmm0,%xmm2
3790.L029dec1_loop_4:
3791.byte	102,15,56,222,209
3792	decl	%ecx
3793	movups	(%edx),%xmm1
3794	leal	16(%edx),%edx
3795	jnz	.L029dec1_loop_4
3796.byte	102,15,56,223,209
3797	movups	%xmm2,(%edi)
3798	jmp	.L012ecb_ret
3799.align	16
3800.L026ecb_dec_two:
3801	call	_aesni_decrypt2
3802	movups	%xmm2,(%edi)
3803	movups	%xmm3,16(%edi)
3804	jmp	.L012ecb_ret
3805.align	16
3806.L027ecb_dec_three:
3807	call	_aesni_decrypt3
3808	movups	%xmm2,(%edi)
3809	movups	%xmm3,16(%edi)
3810	movups	%xmm4,32(%edi)
3811	jmp	.L012ecb_ret
3812.align	16
3813.L028ecb_dec_four:
3814	call	_aesni_decrypt4
3815	movups	%xmm2,(%edi)
3816	movups	%xmm3,16(%edi)
3817	movups	%xmm4,32(%edi)
3818	movups	%xmm5,48(%edi)
3819.L012ecb_ret:
3820	pxor	%xmm0,%xmm0
3821	pxor	%xmm1,%xmm1
3822	pxor	%xmm2,%xmm2
3823	pxor	%xmm3,%xmm3
3824	pxor	%xmm4,%xmm4
3825	pxor	%xmm5,%xmm5
3826	pxor	%xmm6,%xmm6
3827	pxor	%xmm7,%xmm7
3828	popl	%edi
3829	popl	%esi
3830	popl	%ebx
3831	popl	%ebp
3832	ret
3833.size	aesni_ecb_encrypt,.-.L_aesni_ecb_encrypt_begin
3834.globl	aesni_ccm64_encrypt_blocks
3835.type	aesni_ccm64_encrypt_blocks,@function
3836.align	16
3837aesni_ccm64_encrypt_blocks:
3838.L_aesni_ccm64_encrypt_blocks_begin:
3839	pushl	%ebp
3840	pushl	%ebx
3841	pushl	%esi
3842	pushl	%edi
3843	movl	20(%esp),%esi
3844	movl	24(%esp),%edi
3845	movl	28(%esp),%eax
3846	movl	32(%esp),%edx
3847	movl	36(%esp),%ebx
3848	movl	40(%esp),%ecx
3849	movl	%esp,%ebp
3850	subl	$60,%esp
3851	andl	$-16,%esp
3852	movl	%ebp,48(%esp)
3853	movdqu	(%ebx),%xmm7
3854	movdqu	(%ecx),%xmm3
3855	movl	240(%edx),%ecx
3856	movl	$202182159,(%esp)
3857	movl	$134810123,4(%esp)
3858	movl	$67438087,8(%esp)
3859	movl	$66051,12(%esp)
3860	movl	$1,%ebx
3861	xorl	%ebp,%ebp
3862	movl	%ebx,16(%esp)
3863	movl	%ebp,20(%esp)
3864	movl	%ebp,24(%esp)
3865	movl	%ebp,28(%esp)
3866	shll	$4,%ecx
3867	movl	$16,%ebx
3868	leal	(%edx),%ebp
3869	movdqa	(%esp),%xmm5
3870	movdqa	%xmm7,%xmm2
3871	leal	32(%edx,%ecx,1),%edx
3872	subl	%ecx,%ebx
3873.byte	102,15,56,0,253
3874.L030ccm64_enc_outer:
3875	movups	(%ebp),%xmm0
3876	movl	%ebx,%ecx
3877	movups	(%esi),%xmm6
3878	xorps	%xmm0,%xmm2
3879	movups	16(%ebp),%xmm1
3880	xorps	%xmm6,%xmm0
3881	xorps	%xmm0,%xmm3
3882	movups	32(%ebp),%xmm0
3883.L031ccm64_enc2_loop:
3884.byte	102,15,56,220,209
3885.byte	102,15,56,220,217
3886	movups	(%edx,%ecx,1),%xmm1
3887	addl	$32,%ecx
3888.byte	102,15,56,220,208
3889.byte	102,15,56,220,216
3890	movups	-16(%edx,%ecx,1),%xmm0
3891	jnz	.L031ccm64_enc2_loop
3892.byte	102,15,56,220,209
3893.byte	102,15,56,220,217
3894	paddq	16(%esp),%xmm7
3895	decl	%eax
3896.byte	102,15,56,221,208
3897.byte	102,15,56,221,216
3898	leal	16(%esi),%esi
3899	xorps	%xmm2,%xmm6
3900	movdqa	%xmm7,%xmm2
3901	movups	%xmm6,(%edi)
3902.byte	102,15,56,0,213
3903	leal	16(%edi),%edi
3904	jnz	.L030ccm64_enc_outer
3905	movl	48(%esp),%esp
3906	movl	40(%esp),%edi
3907	movups	%xmm3,(%edi)
3908	pxor	%xmm0,%xmm0
3909	pxor	%xmm1,%xmm1
3910	pxor	%xmm2,%xmm2
3911	pxor	%xmm3,%xmm3
3912	pxor	%xmm4,%xmm4
3913	pxor	%xmm5,%xmm5
3914	pxor	%xmm6,%xmm6
3915	pxor	%xmm7,%xmm7
3916	popl	%edi
3917	popl	%esi
3918	popl	%ebx
3919	popl	%ebp
3920	ret
3921.size	aesni_ccm64_encrypt_blocks,.-.L_aesni_ccm64_encrypt_blocks_begin
3922.globl	aesni_ccm64_decrypt_blocks
3923.type	aesni_ccm64_decrypt_blocks,@function
3924.align	16
3925aesni_ccm64_decrypt_blocks:
3926.L_aesni_ccm64_decrypt_blocks_begin:
3927	pushl	%ebp
3928	pushl	%ebx
3929	pushl	%esi
3930	pushl	%edi
3931	movl	20(%esp),%esi
3932	movl	24(%esp),%edi
3933	movl	28(%esp),%eax
3934	movl	32(%esp),%edx
3935	movl	36(%esp),%ebx
3936	movl	40(%esp),%ecx
3937	movl	%esp,%ebp
3938	subl	$60,%esp
3939	andl	$-16,%esp
3940	movl	%ebp,48(%esp)
3941	movdqu	(%ebx),%xmm7
3942	movdqu	(%ecx),%xmm3
3943	movl	240(%edx),%ecx
3944	movl	$202182159,(%esp)
3945	movl	$134810123,4(%esp)
3946	movl	$67438087,8(%esp)
3947	movl	$66051,12(%esp)
3948	movl	$1,%ebx
3949	xorl	%ebp,%ebp
3950	movl	%ebx,16(%esp)
3951	movl	%ebp,20(%esp)
3952	movl	%ebp,24(%esp)
3953	movl	%ebp,28(%esp)
3954	movdqa	(%esp),%xmm5
3955	movdqa	%xmm7,%xmm2
3956	movl	%edx,%ebp
3957	movl	%ecx,%ebx
3958.byte	102,15,56,0,253
3959	movups	(%edx),%xmm0
3960	movups	16(%edx),%xmm1
3961	leal	32(%edx),%edx
3962	xorps	%xmm0,%xmm2
3963.L032enc1_loop_5:
3964.byte	102,15,56,220,209
3965	decl	%ecx
3966	movups	(%edx),%xmm1
3967	leal	16(%edx),%edx
3968	jnz	.L032enc1_loop_5
3969.byte	102,15,56,221,209
3970	shll	$4,%ebx
3971	movl	$16,%ecx
3972	movups	(%esi),%xmm6
3973	paddq	16(%esp),%xmm7
3974	leal	16(%esi),%esi
3975	subl	%ebx,%ecx
3976	leal	32(%ebp,%ebx,1),%edx
3977	movl	%ecx,%ebx
3978	jmp	.L033ccm64_dec_outer
3979.align	16
3980.L033ccm64_dec_outer:
3981	xorps	%xmm2,%xmm6
3982	movdqa	%xmm7,%xmm2
3983	movups	%xmm6,(%edi)
3984	leal	16(%edi),%edi
3985.byte	102,15,56,0,213
3986	subl	$1,%eax
3987	jz	.L034ccm64_dec_break
3988	movups	(%ebp),%xmm0
3989	movl	%ebx,%ecx
3990	movups	16(%ebp),%xmm1
3991	xorps	%xmm0,%xmm6
3992	xorps	%xmm0,%xmm2
3993	xorps	%xmm6,%xmm3
3994	movups	32(%ebp),%xmm0
3995.L035ccm64_dec2_loop:
3996.byte	102,15,56,220,209
3997.byte	102,15,56,220,217
3998	movups	(%edx,%ecx,1),%xmm1
3999	addl	$32,%ecx
4000.byte	102,15,56,220,208
4001.byte	102,15,56,220,216
4002	movups	-16(%edx,%ecx,1),%xmm0
4003	jnz	.L035ccm64_dec2_loop
4004	movups	(%esi),%xmm6
4005	paddq	16(%esp),%xmm7
4006.byte	102,15,56,220,209
4007.byte	102,15,56,220,217
4008.byte	102,15,56,221,208
4009.byte	102,15,56,221,216
4010	leal	16(%esi),%esi
4011	jmp	.L033ccm64_dec_outer
4012.align	16
4013.L034ccm64_dec_break:
4014	movl	240(%ebp),%ecx
4015	movl	%ebp,%edx
4016	movups	(%edx),%xmm0
4017	movups	16(%edx),%xmm1
4018	xorps	%xmm0,%xmm6
4019	leal	32(%edx),%edx
4020	xorps	%xmm6,%xmm3
4021.L036enc1_loop_6:
4022.byte	102,15,56,220,217
4023	decl	%ecx
4024	movups	(%edx),%xmm1
4025	leal	16(%edx),%edx
4026	jnz	.L036enc1_loop_6
4027.byte	102,15,56,221,217
4028	movl	48(%esp),%esp
4029	movl	40(%esp),%edi
4030	movups	%xmm3,(%edi)
4031	pxor	%xmm0,%xmm0
4032	pxor	%xmm1,%xmm1
4033	pxor	%xmm2,%xmm2
4034	pxor	%xmm3,%xmm3
4035	pxor	%xmm4,%xmm4
4036	pxor	%xmm5,%xmm5
4037	pxor	%xmm6,%xmm6
4038	pxor	%xmm7,%xmm7
4039	popl	%edi
4040	popl	%esi
4041	popl	%ebx
4042	popl	%ebp
4043	ret
4044.size	aesni_ccm64_decrypt_blocks,.-.L_aesni_ccm64_decrypt_blocks_begin
4045.globl	aesni_ctr32_encrypt_blocks
4046.type	aesni_ctr32_encrypt_blocks,@function
4047.align	16
4048aesni_ctr32_encrypt_blocks:
4049.L_aesni_ctr32_encrypt_blocks_begin:
4050	pushl	%ebp
4051	pushl	%ebx
4052	pushl	%esi
4053	pushl	%edi
4054	movl	20(%esp),%esi
4055	movl	24(%esp),%edi
4056	movl	28(%esp),%eax
4057	movl	32(%esp),%edx
4058	movl	36(%esp),%ebx
4059	movl	%esp,%ebp
4060	subl	$88,%esp
4061	andl	$-16,%esp
4062	movl	%ebp,80(%esp)
4063	cmpl	$1,%eax
4064	je	.L037ctr32_one_shortcut
4065	movdqu	(%ebx),%xmm7
4066	movl	$202182159,(%esp)
4067	movl	$134810123,4(%esp)
4068	movl	$67438087,8(%esp)
4069	movl	$66051,12(%esp)
4070	movl	$6,%ecx
4071	xorl	%ebp,%ebp
4072	movl	%ecx,16(%esp)
4073	movl	%ecx,20(%esp)
4074	movl	%ecx,24(%esp)
4075	movl	%ebp,28(%esp)
4076.byte	102,15,58,22,251,3
4077.byte	102,15,58,34,253,3
4078	movl	240(%edx),%ecx
4079	bswap	%ebx
4080	pxor	%xmm0,%xmm0
4081	pxor	%xmm1,%xmm1
4082	movdqa	(%esp),%xmm2
4083.byte	102,15,58,34,195,0
4084	leal	3(%ebx),%ebp
4085.byte	102,15,58,34,205,0
4086	incl	%ebx
4087.byte	102,15,58,34,195,1
4088	incl	%ebp
4089.byte	102,15,58,34,205,1
4090	incl	%ebx
4091.byte	102,15,58,34,195,2
4092	incl	%ebp
4093.byte	102,15,58,34,205,2
4094	movdqa	%xmm0,48(%esp)
4095.byte	102,15,56,0,194
4096	movdqu	(%edx),%xmm6
4097	movdqa	%xmm1,64(%esp)
4098.byte	102,15,56,0,202
4099	pshufd	$192,%xmm0,%xmm2
4100	pshufd	$128,%xmm0,%xmm3
4101	cmpl	$6,%eax
4102	jb	.L038ctr32_tail
4103	pxor	%xmm6,%xmm7
4104	shll	$4,%ecx
4105	movl	$16,%ebx
4106	movdqa	%xmm7,32(%esp)
4107	movl	%edx,%ebp
4108	subl	%ecx,%ebx
4109	leal	32(%edx,%ecx,1),%edx
4110	subl	$6,%eax
4111	jmp	.L039ctr32_loop6
4112.align	16
4113.L039ctr32_loop6:
4114	pshufd	$64,%xmm0,%xmm4
4115	movdqa	32(%esp),%xmm0
4116	pshufd	$192,%xmm1,%xmm5
4117	pxor	%xmm0,%xmm2
4118	pshufd	$128,%xmm1,%xmm6
4119	pxor	%xmm0,%xmm3
4120	pshufd	$64,%xmm1,%xmm7
4121	movups	16(%ebp),%xmm1
4122	pxor	%xmm0,%xmm4
4123	pxor	%xmm0,%xmm5
4124.byte	102,15,56,220,209
4125	pxor	%xmm0,%xmm6
4126	pxor	%xmm0,%xmm7
4127.byte	102,15,56,220,217
4128	movups	32(%ebp),%xmm0
4129	movl	%ebx,%ecx
4130.byte	102,15,56,220,225
4131.byte	102,15,56,220,233
4132.byte	102,15,56,220,241
4133.byte	102,15,56,220,249
4134	call	.L_aesni_encrypt6_enter
4135	movups	(%esi),%xmm1
4136	movups	16(%esi),%xmm0
4137	xorps	%xmm1,%xmm2
4138	movups	32(%esi),%xmm1
4139	xorps	%xmm0,%xmm3
4140	movups	%xmm2,(%edi)
4141	movdqa	16(%esp),%xmm0
4142	xorps	%xmm1,%xmm4
4143	movdqa	64(%esp),%xmm1
4144	movups	%xmm3,16(%edi)
4145	movups	%xmm4,32(%edi)
4146	paddd	%xmm0,%xmm1
4147	paddd	48(%esp),%xmm0
4148	movdqa	(%esp),%xmm2
4149	movups	48(%esi),%xmm3
4150	movups	64(%esi),%xmm4
4151	xorps	%xmm3,%xmm5
4152	movups	80(%esi),%xmm3
4153	leal	96(%esi),%esi
4154	movdqa	%xmm0,48(%esp)
4155.byte	102,15,56,0,194
4156	xorps	%xmm4,%xmm6
4157	movups	%xmm5,48(%edi)
4158	xorps	%xmm3,%xmm7
4159	movdqa	%xmm1,64(%esp)
4160.byte	102,15,56,0,202
4161	movups	%xmm6,64(%edi)
4162	pshufd	$192,%xmm0,%xmm2
4163	movups	%xmm7,80(%edi)
4164	leal	96(%edi),%edi
4165	pshufd	$128,%xmm0,%xmm3
4166	subl	$6,%eax
4167	jnc	.L039ctr32_loop6
4168	addl	$6,%eax
4169	jz	.L040ctr32_ret
4170	movdqu	(%ebp),%xmm7
4171	movl	%ebp,%edx
4172	pxor	32(%esp),%xmm7
4173	movl	240(%ebp),%ecx
4174.L038ctr32_tail:
4175	por	%xmm7,%xmm2
4176	cmpl	$2,%eax
4177	jb	.L041ctr32_one
4178	pshufd	$64,%xmm0,%xmm4
4179	por	%xmm7,%xmm3
4180	je	.L042ctr32_two
4181	pshufd	$192,%xmm1,%xmm5
4182	por	%xmm7,%xmm4
4183	cmpl	$4,%eax
4184	jb	.L043ctr32_three
4185	pshufd	$128,%xmm1,%xmm6
4186	por	%xmm7,%xmm5
4187	je	.L044ctr32_four
4188	por	%xmm7,%xmm6
4189	call	_aesni_encrypt6
4190	movups	(%esi),%xmm1
4191	movups	16(%esi),%xmm0
4192	xorps	%xmm1,%xmm2
4193	movups	32(%esi),%xmm1
4194	xorps	%xmm0,%xmm3
4195	movups	48(%esi),%xmm0
4196	xorps	%xmm1,%xmm4
4197	movups	64(%esi),%xmm1
4198	xorps	%xmm0,%xmm5
4199	movups	%xmm2,(%edi)
4200	xorps	%xmm1,%xmm6
4201	movups	%xmm3,16(%edi)
4202	movups	%xmm4,32(%edi)
4203	movups	%xmm5,48(%edi)
4204	movups	%xmm6,64(%edi)
4205	jmp	.L040ctr32_ret
4206.align	16
4207.L037ctr32_one_shortcut:
4208	movups	(%ebx),%xmm2
4209	movl	240(%edx),%ecx
4210.L041ctr32_one:
4211	movups	(%edx),%xmm0
4212	movups	16(%edx),%xmm1
4213	leal	32(%edx),%edx
4214	xorps	%xmm0,%xmm2
4215.L045enc1_loop_7:
4216.byte	102,15,56,220,209
4217	decl	%ecx
4218	movups	(%edx),%xmm1
4219	leal	16(%edx),%edx
4220	jnz	.L045enc1_loop_7
4221.byte	102,15,56,221,209
4222	movups	(%esi),%xmm6
4223	xorps	%xmm2,%xmm6
4224	movups	%xmm6,(%edi)
4225	jmp	.L040ctr32_ret
4226.align	16
4227.L042ctr32_two:
4228	call	_aesni_encrypt2
4229	movups	(%esi),%xmm5
4230	movups	16(%esi),%xmm6
4231	xorps	%xmm5,%xmm2
4232	xorps	%xmm6,%xmm3
4233	movups	%xmm2,(%edi)
4234	movups	%xmm3,16(%edi)
4235	jmp	.L040ctr32_ret
4236.align	16
4237.L043ctr32_three:
4238	call	_aesni_encrypt3
4239	movups	(%esi),%xmm5
4240	movups	16(%esi),%xmm6
4241	xorps	%xmm5,%xmm2
4242	movups	32(%esi),%xmm7
4243	xorps	%xmm6,%xmm3
4244	movups	%xmm2,(%edi)
4245	xorps	%xmm7,%xmm4
4246	movups	%xmm3,16(%edi)
4247	movups	%xmm4,32(%edi)
4248	jmp	.L040ctr32_ret
4249.align	16
4250.L044ctr32_four:
4251	call	_aesni_encrypt4
4252	movups	(%esi),%xmm6
4253	movups	16(%esi),%xmm7
4254	movups	32(%esi),%xmm1
4255	xorps	%xmm6,%xmm2
4256	movups	48(%esi),%xmm0
4257	xorps	%xmm7,%xmm3
4258	movups	%xmm2,(%edi)
4259	xorps	%xmm1,%xmm4
4260	movups	%xmm3,16(%edi)
4261	xorps	%xmm0,%xmm5
4262	movups	%xmm4,32(%edi)
4263	movups	%xmm5,48(%edi)
4264.L040ctr32_ret:
4265	pxor	%xmm0,%xmm0
4266	pxor	%xmm1,%xmm1
4267	pxor	%xmm2,%xmm2
4268	pxor	%xmm3,%xmm3
4269	pxor	%xmm4,%xmm4
4270	movdqa	%xmm0,32(%esp)
4271	pxor	%xmm5,%xmm5
4272	movdqa	%xmm0,48(%esp)
4273	pxor	%xmm6,%xmm6
4274	movdqa	%xmm0,64(%esp)
4275	pxor	%xmm7,%xmm7
4276	movl	80(%esp),%esp
4277	popl	%edi
4278	popl	%esi
4279	popl	%ebx
4280	popl	%ebp
4281	ret
4282.size	aesni_ctr32_encrypt_blocks,.-.L_aesni_ctr32_encrypt_blocks_begin
4283.globl	aesni_xts_encrypt
4284.type	aesni_xts_encrypt,@function
4285.align	16
4286aesni_xts_encrypt:
4287.L_aesni_xts_encrypt_begin:
4288	pushl	%ebp
4289	pushl	%ebx
4290	pushl	%esi
4291	pushl	%edi
4292	movl	36(%esp),%edx
4293	movl	40(%esp),%esi
4294	movl	240(%edx),%ecx
4295	movups	(%esi),%xmm2
4296	movups	(%edx),%xmm0
4297	movups	16(%edx),%xmm1
4298	leal	32(%edx),%edx
4299	xorps	%xmm0,%xmm2
4300.L046enc1_loop_8:
4301.byte	102,15,56,220,209
4302	decl	%ecx
4303	movups	(%edx),%xmm1
4304	leal	16(%edx),%edx
4305	jnz	.L046enc1_loop_8
4306.byte	102,15,56,221,209
4307	movl	20(%esp),%esi
4308	movl	24(%esp),%edi
4309	movl	28(%esp),%eax
4310	movl	32(%esp),%edx
4311	movl	%esp,%ebp
4312	subl	$120,%esp
4313	movl	240(%edx),%ecx
4314	andl	$-16,%esp
4315	movl	$135,96(%esp)
4316	movl	$0,100(%esp)
4317	movl	$1,104(%esp)
4318	movl	$0,108(%esp)
4319	movl	%eax,112(%esp)
4320	movl	%ebp,116(%esp)
4321	movdqa	%xmm2,%xmm1
4322	pxor	%xmm0,%xmm0
4323	movdqa	96(%esp),%xmm3
4324	pcmpgtd	%xmm1,%xmm0
4325	andl	$-16,%eax
4326	movl	%edx,%ebp
4327	movl	%ecx,%ebx
4328	subl	$96,%eax
4329	jc	.L047xts_enc_short
4330	shll	$4,%ecx
4331	movl	$16,%ebx
4332	subl	%ecx,%ebx
4333	leal	32(%edx,%ecx,1),%edx
4334	jmp	.L048xts_enc_loop6
4335.align	16
4336.L048xts_enc_loop6:
4337	pshufd	$19,%xmm0,%xmm2
4338	pxor	%xmm0,%xmm0
4339	movdqa	%xmm1,(%esp)
4340	paddq	%xmm1,%xmm1
4341	pand	%xmm3,%xmm2
4342	pcmpgtd	%xmm1,%xmm0
4343	pxor	%xmm2,%xmm1
4344	pshufd	$19,%xmm0,%xmm2
4345	pxor	%xmm0,%xmm0
4346	movdqa	%xmm1,16(%esp)
4347	paddq	%xmm1,%xmm1
4348	pand	%xmm3,%xmm2
4349	pcmpgtd	%xmm1,%xmm0
4350	pxor	%xmm2,%xmm1
4351	pshufd	$19,%xmm0,%xmm2
4352	pxor	%xmm0,%xmm0
4353	movdqa	%xmm1,32(%esp)
4354	paddq	%xmm1,%xmm1
4355	pand	%xmm3,%xmm2
4356	pcmpgtd	%xmm1,%xmm0
4357	pxor	%xmm2,%xmm1
4358	pshufd	$19,%xmm0,%xmm2
4359	pxor	%xmm0,%xmm0
4360	movdqa	%xmm1,48(%esp)
4361	paddq	%xmm1,%xmm1
4362	pand	%xmm3,%xmm2
4363	pcmpgtd	%xmm1,%xmm0
4364	pxor	%xmm2,%xmm1
4365	pshufd	$19,%xmm0,%xmm7
4366	movdqa	%xmm1,64(%esp)
4367	paddq	%xmm1,%xmm1
4368	movups	(%ebp),%xmm0
4369	pand	%xmm3,%xmm7
4370	movups	(%esi),%xmm2
4371	pxor	%xmm1,%xmm7
4372	movl	%ebx,%ecx
4373	movdqu	16(%esi),%xmm3
4374	xorps	%xmm0,%xmm2
4375	movdqu	32(%esi),%xmm4
4376	pxor	%xmm0,%xmm3
4377	movdqu	48(%esi),%xmm5
4378	pxor	%xmm0,%xmm4
4379	movdqu	64(%esi),%xmm6
4380	pxor	%xmm0,%xmm5
4381	movdqu	80(%esi),%xmm1
4382	pxor	%xmm0,%xmm6
4383	leal	96(%esi),%esi
4384	pxor	(%esp),%xmm2
4385	movdqa	%xmm7,80(%esp)
4386	pxor	%xmm1,%xmm7
4387	movups	16(%ebp),%xmm1
4388	pxor	16(%esp),%xmm3
4389	pxor	32(%esp),%xmm4
4390.byte	102,15,56,220,209
4391	pxor	48(%esp),%xmm5
4392	pxor	64(%esp),%xmm6
4393.byte	102,15,56,220,217
4394	pxor	%xmm0,%xmm7
4395	movups	32(%ebp),%xmm0
4396.byte	102,15,56,220,225
4397.byte	102,15,56,220,233
4398.byte	102,15,56,220,241
4399.byte	102,15,56,220,249
4400	call	.L_aesni_encrypt6_enter
4401	movdqa	80(%esp),%xmm1
4402	pxor	%xmm0,%xmm0
4403	xorps	(%esp),%xmm2
4404	pcmpgtd	%xmm1,%xmm0
4405	xorps	16(%esp),%xmm3
4406	movups	%xmm2,(%edi)
4407	xorps	32(%esp),%xmm4
4408	movups	%xmm3,16(%edi)
4409	xorps	48(%esp),%xmm5
4410	movups	%xmm4,32(%edi)
4411	xorps	64(%esp),%xmm6
4412	movups	%xmm5,48(%edi)
4413	xorps	%xmm1,%xmm7
4414	movups	%xmm6,64(%edi)
4415	pshufd	$19,%xmm0,%xmm2
4416	movups	%xmm7,80(%edi)
4417	leal	96(%edi),%edi
4418	movdqa	96(%esp),%xmm3
4419	pxor	%xmm0,%xmm0
4420	paddq	%xmm1,%xmm1
4421	pand	%xmm3,%xmm2
4422	pcmpgtd	%xmm1,%xmm0
4423	pxor	%xmm2,%xmm1
4424	subl	$96,%eax
4425	jnc	.L048xts_enc_loop6
4426	movl	240(%ebp),%ecx
4427	movl	%ebp,%edx
4428	movl	%ecx,%ebx
4429.L047xts_enc_short:
4430	addl	$96,%eax
4431	jz	.L049xts_enc_done6x
4432	movdqa	%xmm1,%xmm5
4433	cmpl	$32,%eax
4434	jb	.L050xts_enc_one
4435	pshufd	$19,%xmm0,%xmm2
4436	pxor	%xmm0,%xmm0
4437	paddq	%xmm1,%xmm1
4438	pand	%xmm3,%xmm2
4439	pcmpgtd	%xmm1,%xmm0
4440	pxor	%xmm2,%xmm1
4441	je	.L051xts_enc_two
4442	pshufd	$19,%xmm0,%xmm2
4443	pxor	%xmm0,%xmm0
4444	movdqa	%xmm1,%xmm6
4445	paddq	%xmm1,%xmm1
4446	pand	%xmm3,%xmm2
4447	pcmpgtd	%xmm1,%xmm0
4448	pxor	%xmm2,%xmm1
4449	cmpl	$64,%eax
4450	jb	.L052xts_enc_three
4451	pshufd	$19,%xmm0,%xmm2
4452	pxor	%xmm0,%xmm0
4453	movdqa	%xmm1,%xmm7
4454	paddq	%xmm1,%xmm1
4455	pand	%xmm3,%xmm2
4456	pcmpgtd	%xmm1,%xmm0
4457	pxor	%xmm2,%xmm1
4458	movdqa	%xmm5,(%esp)
4459	movdqa	%xmm6,16(%esp)
4460	je	.L053xts_enc_four
4461	movdqa	%xmm7,32(%esp)
4462	pshufd	$19,%xmm0,%xmm7
4463	movdqa	%xmm1,48(%esp)
4464	paddq	%xmm1,%xmm1
4465	pand	%xmm3,%xmm7
4466	pxor	%xmm1,%xmm7
4467	movdqu	(%esi),%xmm2
4468	movdqu	16(%esi),%xmm3
4469	movdqu	32(%esi),%xmm4
4470	pxor	(%esp),%xmm2
4471	movdqu	48(%esi),%xmm5
4472	pxor	16(%esp),%xmm3
4473	movdqu	64(%esi),%xmm6
4474	pxor	32(%esp),%xmm4
4475	leal	80(%esi),%esi
4476	pxor	48(%esp),%xmm5
4477	movdqa	%xmm7,64(%esp)
4478	pxor	%xmm7,%xmm6
4479	call	_aesni_encrypt6
4480	movaps	64(%esp),%xmm1
4481	xorps	(%esp),%xmm2
4482	xorps	16(%esp),%xmm3
4483	xorps	32(%esp),%xmm4
4484	movups	%xmm2,(%edi)
4485	xorps	48(%esp),%xmm5
4486	movups	%xmm3,16(%edi)
4487	xorps	%xmm1,%xmm6
4488	movups	%xmm4,32(%edi)
4489	movups	%xmm5,48(%edi)
4490	movups	%xmm6,64(%edi)
4491	leal	80(%edi),%edi
4492	jmp	.L054xts_enc_done
4493.align	16
4494.L050xts_enc_one:
4495	movups	(%esi),%xmm2
4496	leal	16(%esi),%esi
4497	xorps	%xmm5,%xmm2
4498	movups	(%edx),%xmm0
4499	movups	16(%edx),%xmm1
4500	leal	32(%edx),%edx
4501	xorps	%xmm0,%xmm2
4502.L055enc1_loop_9:
4503.byte	102,15,56,220,209
4504	decl	%ecx
4505	movups	(%edx),%xmm1
4506	leal	16(%edx),%edx
4507	jnz	.L055enc1_loop_9
4508.byte	102,15,56,221,209
4509	xorps	%xmm5,%xmm2
4510	movups	%xmm2,(%edi)
4511	leal	16(%edi),%edi
4512	movdqa	%xmm5,%xmm1
4513	jmp	.L054xts_enc_done
4514.align	16
4515.L051xts_enc_two:
4516	movaps	%xmm1,%xmm6
4517	movups	(%esi),%xmm2
4518	movups	16(%esi),%xmm3
4519	leal	32(%esi),%esi
4520	xorps	%xmm5,%xmm2
4521	xorps	%xmm6,%xmm3
4522	call	_aesni_encrypt2
4523	xorps	%xmm5,%xmm2
4524	xorps	%xmm6,%xmm3
4525	movups	%xmm2,(%edi)
4526	movups	%xmm3,16(%edi)
4527	leal	32(%edi),%edi
4528	movdqa	%xmm6,%xmm1
4529	jmp	.L054xts_enc_done
4530.align	16
4531.L052xts_enc_three:
4532	movaps	%xmm1,%xmm7
4533	movups	(%esi),%xmm2
4534	movups	16(%esi),%xmm3
4535	movups	32(%esi),%xmm4
4536	leal	48(%esi),%esi
4537	xorps	%xmm5,%xmm2
4538	xorps	%xmm6,%xmm3
4539	xorps	%xmm7,%xmm4
4540	call	_aesni_encrypt3
4541	xorps	%xmm5,%xmm2
4542	xorps	%xmm6,%xmm3
4543	xorps	%xmm7,%xmm4
4544	movups	%xmm2,(%edi)
4545	movups	%xmm3,16(%edi)
4546	movups	%xmm4,32(%edi)
4547	leal	48(%edi),%edi
4548	movdqa	%xmm7,%xmm1
4549	jmp	.L054xts_enc_done
4550.align	16
4551.L053xts_enc_four:
4552	movaps	%xmm1,%xmm6
4553	movups	(%esi),%xmm2
4554	movups	16(%esi),%xmm3
4555	movups	32(%esi),%xmm4
4556	xorps	(%esp),%xmm2
4557	movups	48(%esi),%xmm5
4558	leal	64(%esi),%esi
4559	xorps	16(%esp),%xmm3
4560	xorps	%xmm7,%xmm4
4561	xorps	%xmm6,%xmm5
4562	call	_aesni_encrypt4
4563	xorps	(%esp),%xmm2
4564	xorps	16(%esp),%xmm3
4565	xorps	%xmm7,%xmm4
4566	movups	%xmm2,(%edi)
4567	xorps	%xmm6,%xmm5
4568	movups	%xmm3,16(%edi)
4569	movups	%xmm4,32(%edi)
4570	movups	%xmm5,48(%edi)
4571	leal	64(%edi),%edi
4572	movdqa	%xmm6,%xmm1
4573	jmp	.L054xts_enc_done
4574.align	16
4575.L049xts_enc_done6x:
4576	movl	112(%esp),%eax
4577	andl	$15,%eax
4578	jz	.L056xts_enc_ret
4579	movdqa	%xmm1,%xmm5
4580	movl	%eax,112(%esp)
4581	jmp	.L057xts_enc_steal
4582.align	16
4583.L054xts_enc_done:
4584	movl	112(%esp),%eax
4585	pxor	%xmm0,%xmm0
4586	andl	$15,%eax
4587	jz	.L056xts_enc_ret
4588	pcmpgtd	%xmm1,%xmm0
4589	movl	%eax,112(%esp)
4590	pshufd	$19,%xmm0,%xmm5
4591	paddq	%xmm1,%xmm1
4592	pand	96(%esp),%xmm5
4593	pxor	%xmm1,%xmm5
4594.L057xts_enc_steal:
4595	movzbl	(%esi),%ecx
4596	movzbl	-16(%edi),%edx
4597	leal	1(%esi),%esi
4598	movb	%cl,-16(%edi)
4599	movb	%dl,(%edi)
4600	leal	1(%edi),%edi
4601	subl	$1,%eax
4602	jnz	.L057xts_enc_steal
4603	subl	112(%esp),%edi
4604	movl	%ebp,%edx
4605	movl	%ebx,%ecx
4606	movups	-16(%edi),%xmm2
4607	xorps	%xmm5,%xmm2
4608	movups	(%edx),%xmm0
4609	movups	16(%edx),%xmm1
4610	leal	32(%edx),%edx
4611	xorps	%xmm0,%xmm2
4612.L058enc1_loop_10:
4613.byte	102,15,56,220,209
4614	decl	%ecx
4615	movups	(%edx),%xmm1
4616	leal	16(%edx),%edx
4617	jnz	.L058enc1_loop_10
4618.byte	102,15,56,221,209
4619	xorps	%xmm5,%xmm2
4620	movups	%xmm2,-16(%edi)
4621.L056xts_enc_ret:
4622	pxor	%xmm0,%xmm0
4623	pxor	%xmm1,%xmm1
4624	pxor	%xmm2,%xmm2
4625	movdqa	%xmm0,(%esp)
4626	pxor	%xmm3,%xmm3
4627	movdqa	%xmm0,16(%esp)
4628	pxor	%xmm4,%xmm4
4629	movdqa	%xmm0,32(%esp)
4630	pxor	%xmm5,%xmm5
4631	movdqa	%xmm0,48(%esp)
4632	pxor	%xmm6,%xmm6
4633	movdqa	%xmm0,64(%esp)
4634	pxor	%xmm7,%xmm7
4635	movdqa	%xmm0,80(%esp)
4636	movl	116(%esp),%esp
4637	popl	%edi
4638	popl	%esi
4639	popl	%ebx
4640	popl	%ebp
4641	ret
4642.size	aesni_xts_encrypt,.-.L_aesni_xts_encrypt_begin
4643.globl	aesni_xts_decrypt
4644.type	aesni_xts_decrypt,@function
4645.align	16
4646aesni_xts_decrypt:
4647.L_aesni_xts_decrypt_begin:
4648	pushl	%ebp
4649	pushl	%ebx
4650	pushl	%esi
4651	pushl	%edi
4652	movl	36(%esp),%edx
4653	movl	40(%esp),%esi
4654	movl	240(%edx),%ecx
4655	movups	(%esi),%xmm2
4656	movups	(%edx),%xmm0
4657	movups	16(%edx),%xmm1
4658	leal	32(%edx),%edx
4659	xorps	%xmm0,%xmm2
4660.L059enc1_loop_11:
4661.byte	102,15,56,220,209
4662	decl	%ecx
4663	movups	(%edx),%xmm1
4664	leal	16(%edx),%edx
4665	jnz	.L059enc1_loop_11
4666.byte	102,15,56,221,209
4667	movl	20(%esp),%esi
4668	movl	24(%esp),%edi
4669	movl	28(%esp),%eax
4670	movl	32(%esp),%edx
4671	movl	%esp,%ebp
4672	subl	$120,%esp
4673	andl	$-16,%esp
4674	xorl	%ebx,%ebx
4675	testl	$15,%eax
4676	setnz	%bl
4677	shll	$4,%ebx
4678	subl	%ebx,%eax
4679	movl	$135,96(%esp)
4680	movl	$0,100(%esp)
4681	movl	$1,104(%esp)
4682	movl	$0,108(%esp)
4683	movl	%eax,112(%esp)
4684	movl	%ebp,116(%esp)
4685	movl	240(%edx),%ecx
4686	movl	%edx,%ebp
4687	movl	%ecx,%ebx
4688	movdqa	%xmm2,%xmm1
4689	pxor	%xmm0,%xmm0
4690	movdqa	96(%esp),%xmm3
4691	pcmpgtd	%xmm1,%xmm0
4692	andl	$-16,%eax
4693	subl	$96,%eax
4694	jc	.L060xts_dec_short
4695	shll	$4,%ecx
4696	movl	$16,%ebx
4697	subl	%ecx,%ebx
4698	leal	32(%edx,%ecx,1),%edx
4699	jmp	.L061xts_dec_loop6
4700.align	16
4701.L061xts_dec_loop6:
4702	pshufd	$19,%xmm0,%xmm2
4703	pxor	%xmm0,%xmm0
4704	movdqa	%xmm1,(%esp)
4705	paddq	%xmm1,%xmm1
4706	pand	%xmm3,%xmm2
4707	pcmpgtd	%xmm1,%xmm0
4708	pxor	%xmm2,%xmm1
4709	pshufd	$19,%xmm0,%xmm2
4710	pxor	%xmm0,%xmm0
4711	movdqa	%xmm1,16(%esp)
4712	paddq	%xmm1,%xmm1
4713	pand	%xmm3,%xmm2
4714	pcmpgtd	%xmm1,%xmm0
4715	pxor	%xmm2,%xmm1
4716	pshufd	$19,%xmm0,%xmm2
4717	pxor	%xmm0,%xmm0
4718	movdqa	%xmm1,32(%esp)
4719	paddq	%xmm1,%xmm1
4720	pand	%xmm3,%xmm2
4721	pcmpgtd	%xmm1,%xmm0
4722	pxor	%xmm2,%xmm1
4723	pshufd	$19,%xmm0,%xmm2
4724	pxor	%xmm0,%xmm0
4725	movdqa	%xmm1,48(%esp)
4726	paddq	%xmm1,%xmm1
4727	pand	%xmm3,%xmm2
4728	pcmpgtd	%xmm1,%xmm0
4729	pxor	%xmm2,%xmm1
4730	pshufd	$19,%xmm0,%xmm7
4731	movdqa	%xmm1,64(%esp)
4732	paddq	%xmm1,%xmm1
4733	movups	(%ebp),%xmm0
4734	pand	%xmm3,%xmm7
4735	movups	(%esi),%xmm2
4736	pxor	%xmm1,%xmm7
4737	movl	%ebx,%ecx
4738	movdqu	16(%esi),%xmm3
4739	xorps	%xmm0,%xmm2
4740	movdqu	32(%esi),%xmm4
4741	pxor	%xmm0,%xmm3
4742	movdqu	48(%esi),%xmm5
4743	pxor	%xmm0,%xmm4
4744	movdqu	64(%esi),%xmm6
4745	pxor	%xmm0,%xmm5
4746	movdqu	80(%esi),%xmm1
4747	pxor	%xmm0,%xmm6
4748	leal	96(%esi),%esi
4749	pxor	(%esp),%xmm2
4750	movdqa	%xmm7,80(%esp)
4751	pxor	%xmm1,%xmm7
4752	movups	16(%ebp),%xmm1
4753	pxor	16(%esp),%xmm3
4754	pxor	32(%esp),%xmm4
4755.byte	102,15,56,222,209
4756	pxor	48(%esp),%xmm5
4757	pxor	64(%esp),%xmm6
4758.byte	102,15,56,222,217
4759	pxor	%xmm0,%xmm7
4760	movups	32(%ebp),%xmm0
4761.byte	102,15,56,222,225
4762.byte	102,15,56,222,233
4763.byte	102,15,56,222,241
4764.byte	102,15,56,222,249
4765	call	.L_aesni_decrypt6_enter
4766	movdqa	80(%esp),%xmm1
4767	pxor	%xmm0,%xmm0
4768	xorps	(%esp),%xmm2
4769	pcmpgtd	%xmm1,%xmm0
4770	xorps	16(%esp),%xmm3
4771	movups	%xmm2,(%edi)
4772	xorps	32(%esp),%xmm4
4773	movups	%xmm3,16(%edi)
4774	xorps	48(%esp),%xmm5
4775	movups	%xmm4,32(%edi)
4776	xorps	64(%esp),%xmm6
4777	movups	%xmm5,48(%edi)
4778	xorps	%xmm1,%xmm7
4779	movups	%xmm6,64(%edi)
4780	pshufd	$19,%xmm0,%xmm2
4781	movups	%xmm7,80(%edi)
4782	leal	96(%edi),%edi
4783	movdqa	96(%esp),%xmm3
4784	pxor	%xmm0,%xmm0
4785	paddq	%xmm1,%xmm1
4786	pand	%xmm3,%xmm2
4787	pcmpgtd	%xmm1,%xmm0
4788	pxor	%xmm2,%xmm1
4789	subl	$96,%eax
4790	jnc	.L061xts_dec_loop6
4791	movl	240(%ebp),%ecx
4792	movl	%ebp,%edx
4793	movl	%ecx,%ebx
4794.L060xts_dec_short:
4795	addl	$96,%eax
4796	jz	.L062xts_dec_done6x
4797	movdqa	%xmm1,%xmm5
4798	cmpl	$32,%eax
4799	jb	.L063xts_dec_one
4800	pshufd	$19,%xmm0,%xmm2
4801	pxor	%xmm0,%xmm0
4802	paddq	%xmm1,%xmm1
4803	pand	%xmm3,%xmm2
4804	pcmpgtd	%xmm1,%xmm0
4805	pxor	%xmm2,%xmm1
4806	je	.L064xts_dec_two
4807	pshufd	$19,%xmm0,%xmm2
4808	pxor	%xmm0,%xmm0
4809	movdqa	%xmm1,%xmm6
4810	paddq	%xmm1,%xmm1
4811	pand	%xmm3,%xmm2
4812	pcmpgtd	%xmm1,%xmm0
4813	pxor	%xmm2,%xmm1
4814	cmpl	$64,%eax
4815	jb	.L065xts_dec_three
4816	pshufd	$19,%xmm0,%xmm2
4817	pxor	%xmm0,%xmm0
4818	movdqa	%xmm1,%xmm7
4819	paddq	%xmm1,%xmm1
4820	pand	%xmm3,%xmm2
4821	pcmpgtd	%xmm1,%xmm0
4822	pxor	%xmm2,%xmm1
4823	movdqa	%xmm5,(%esp)
4824	movdqa	%xmm6,16(%esp)
4825	je	.L066xts_dec_four
4826	movdqa	%xmm7,32(%esp)
4827	pshufd	$19,%xmm0,%xmm7
4828	movdqa	%xmm1,48(%esp)
4829	paddq	%xmm1,%xmm1
4830	pand	%xmm3,%xmm7
4831	pxor	%xmm1,%xmm7
4832	movdqu	(%esi),%xmm2
4833	movdqu	16(%esi),%xmm3
4834	movdqu	32(%esi),%xmm4
4835	pxor	(%esp),%xmm2
4836	movdqu	48(%esi),%xmm5
4837	pxor	16(%esp),%xmm3
4838	movdqu	64(%esi),%xmm6
4839	pxor	32(%esp),%xmm4
4840	leal	80(%esi),%esi
4841	pxor	48(%esp),%xmm5
4842	movdqa	%xmm7,64(%esp)
4843	pxor	%xmm7,%xmm6
4844	call	_aesni_decrypt6
4845	movaps	64(%esp),%xmm1
4846	xorps	(%esp),%xmm2
4847	xorps	16(%esp),%xmm3
4848	xorps	32(%esp),%xmm4
4849	movups	%xmm2,(%edi)
4850	xorps	48(%esp),%xmm5
4851	movups	%xmm3,16(%edi)
4852	xorps	%xmm1,%xmm6
4853	movups	%xmm4,32(%edi)
4854	movups	%xmm5,48(%edi)
4855	movups	%xmm6,64(%edi)
4856	leal	80(%edi),%edi
4857	jmp	.L067xts_dec_done
4858.align	16
4859.L063xts_dec_one:
4860	movups	(%esi),%xmm2
4861	leal	16(%esi),%esi
4862	xorps	%xmm5,%xmm2
4863	movups	(%edx),%xmm0
4864	movups	16(%edx),%xmm1
4865	leal	32(%edx),%edx
4866	xorps	%xmm0,%xmm2
4867.L068dec1_loop_12:
4868.byte	102,15,56,222,209
4869	decl	%ecx
4870	movups	(%edx),%xmm1
4871	leal	16(%edx),%edx
4872	jnz	.L068dec1_loop_12
4873.byte	102,15,56,223,209
4874	xorps	%xmm5,%xmm2
4875	movups	%xmm2,(%edi)
4876	leal	16(%edi),%edi
4877	movdqa	%xmm5,%xmm1
4878	jmp	.L067xts_dec_done
4879.align	16
4880.L064xts_dec_two:
4881	movaps	%xmm1,%xmm6
4882	movups	(%esi),%xmm2
4883	movups	16(%esi),%xmm3
4884	leal	32(%esi),%esi
4885	xorps	%xmm5,%xmm2
4886	xorps	%xmm6,%xmm3
4887	call	_aesni_decrypt2
4888	xorps	%xmm5,%xmm2
4889	xorps	%xmm6,%xmm3
4890	movups	%xmm2,(%edi)
4891	movups	%xmm3,16(%edi)
4892	leal	32(%edi),%edi
4893	movdqa	%xmm6,%xmm1
4894	jmp	.L067xts_dec_done
4895.align	16
4896.L065xts_dec_three:
4897	movaps	%xmm1,%xmm7
4898	movups	(%esi),%xmm2
4899	movups	16(%esi),%xmm3
4900	movups	32(%esi),%xmm4
4901	leal	48(%esi),%esi
4902	xorps	%xmm5,%xmm2
4903	xorps	%xmm6,%xmm3
4904	xorps	%xmm7,%xmm4
4905	call	_aesni_decrypt3
4906	xorps	%xmm5,%xmm2
4907	xorps	%xmm6,%xmm3
4908	xorps	%xmm7,%xmm4
4909	movups	%xmm2,(%edi)
4910	movups	%xmm3,16(%edi)
4911	movups	%xmm4,32(%edi)
4912	leal	48(%edi),%edi
4913	movdqa	%xmm7,%xmm1
4914	jmp	.L067xts_dec_done
4915.align	16
4916.L066xts_dec_four:
4917	movaps	%xmm1,%xmm6
4918	movups	(%esi),%xmm2
4919	movups	16(%esi),%xmm3
4920	movups	32(%esi),%xmm4
4921	xorps	(%esp),%xmm2
4922	movups	48(%esi),%xmm5
4923	leal	64(%esi),%esi
4924	xorps	16(%esp),%xmm3
4925	xorps	%xmm7,%xmm4
4926	xorps	%xmm6,%xmm5
4927	call	_aesni_decrypt4
4928	xorps	(%esp),%xmm2
4929	xorps	16(%esp),%xmm3
4930	xorps	%xmm7,%xmm4
4931	movups	%xmm2,(%edi)
4932	xorps	%xmm6,%xmm5
4933	movups	%xmm3,16(%edi)
4934	movups	%xmm4,32(%edi)
4935	movups	%xmm5,48(%edi)
4936	leal	64(%edi),%edi
4937	movdqa	%xmm6,%xmm1
4938	jmp	.L067xts_dec_done
4939.align	16
4940.L062xts_dec_done6x:
4941	movl	112(%esp),%eax
4942	andl	$15,%eax
4943	jz	.L069xts_dec_ret
4944	movl	%eax,112(%esp)
4945	jmp	.L070xts_dec_only_one_more
4946.align	16
4947.L067xts_dec_done:
4948	movl	112(%esp),%eax
4949	pxor	%xmm0,%xmm0
4950	andl	$15,%eax
4951	jz	.L069xts_dec_ret
4952	pcmpgtd	%xmm1,%xmm0
4953	movl	%eax,112(%esp)
4954	pshufd	$19,%xmm0,%xmm2
4955	pxor	%xmm0,%xmm0
4956	movdqa	96(%esp),%xmm3
4957	paddq	%xmm1,%xmm1
4958	pand	%xmm3,%xmm2
4959	pcmpgtd	%xmm1,%xmm0
4960	pxor	%xmm2,%xmm1
4961.L070xts_dec_only_one_more:
4962	pshufd	$19,%xmm0,%xmm5
4963	movdqa	%xmm1,%xmm6
4964	paddq	%xmm1,%xmm1
4965	pand	%xmm3,%xmm5
4966	pxor	%xmm1,%xmm5
4967	movl	%ebp,%edx
4968	movl	%ebx,%ecx
4969	movups	(%esi),%xmm2
4970	xorps	%xmm5,%xmm2
4971	movups	(%edx),%xmm0
4972	movups	16(%edx),%xmm1
4973	leal	32(%edx),%edx
4974	xorps	%xmm0,%xmm2
4975.L071dec1_loop_13:
4976.byte	102,15,56,222,209
4977	decl	%ecx
4978	movups	(%edx),%xmm1
4979	leal	16(%edx),%edx
4980	jnz	.L071dec1_loop_13
4981.byte	102,15,56,223,209
4982	xorps	%xmm5,%xmm2
4983	movups	%xmm2,(%edi)
4984.L072xts_dec_steal:
4985	movzbl	16(%esi),%ecx
4986	movzbl	(%edi),%edx
4987	leal	1(%esi),%esi
4988	movb	%cl,(%edi)
4989	movb	%dl,16(%edi)
4990	leal	1(%edi),%edi
4991	subl	$1,%eax
4992	jnz	.L072xts_dec_steal
4993	subl	112(%esp),%edi
4994	movl	%ebp,%edx
4995	movl	%ebx,%ecx
4996	movups	(%edi),%xmm2
4997	xorps	%xmm6,%xmm2
4998	movups	(%edx),%xmm0
4999	movups	16(%edx),%xmm1
5000	leal	32(%edx),%edx
5001	xorps	%xmm0,%xmm2
5002.L073dec1_loop_14:
5003.byte	102,15,56,222,209
5004	decl	%ecx
5005	movups	(%edx),%xmm1
5006	leal	16(%edx),%edx
5007	jnz	.L073dec1_loop_14
5008.byte	102,15,56,223,209
5009	xorps	%xmm6,%xmm2
5010	movups	%xmm2,(%edi)
5011.L069xts_dec_ret:
5012	pxor	%xmm0,%xmm0
5013	pxor	%xmm1,%xmm1
5014	pxor	%xmm2,%xmm2
5015	movdqa	%xmm0,(%esp)
5016	pxor	%xmm3,%xmm3
5017	movdqa	%xmm0,16(%esp)
5018	pxor	%xmm4,%xmm4
5019	movdqa	%xmm0,32(%esp)
5020	pxor	%xmm5,%xmm5
5021	movdqa	%xmm0,48(%esp)
5022	pxor	%xmm6,%xmm6
5023	movdqa	%xmm0,64(%esp)
5024	pxor	%xmm7,%xmm7
5025	movdqa	%xmm0,80(%esp)
5026	movl	116(%esp),%esp
5027	popl	%edi
5028	popl	%esi
5029	popl	%ebx
5030	popl	%ebp
5031	ret
5032.size	aesni_xts_decrypt,.-.L_aesni_xts_decrypt_begin
5033.globl	aesni_ocb_encrypt
5034.type	aesni_ocb_encrypt,@function
5035.align	16
5036aesni_ocb_encrypt:
5037.L_aesni_ocb_encrypt_begin:
5038	pushl	%ebp
5039	pushl	%ebx
5040	pushl	%esi
5041	pushl	%edi
5042	movl	40(%esp),%ecx
5043	movl	48(%esp),%ebx
5044	movl	20(%esp),%esi
5045	movl	24(%esp),%edi
5046	movl	28(%esp),%eax
5047	movl	32(%esp),%edx
5048	movdqu	(%ecx),%xmm0
5049	movl	36(%esp),%ebp
5050	movdqu	(%ebx),%xmm1
5051	movl	44(%esp),%ebx
5052	movl	%esp,%ecx
5053	subl	$132,%esp
5054	andl	$-16,%esp
5055	subl	%esi,%edi
5056	shll	$4,%eax
5057	leal	-96(%esi,%eax,1),%eax
5058	movl	%edi,120(%esp)
5059	movl	%eax,124(%esp)
5060	movl	%ecx,128(%esp)
5061	movl	240(%edx),%ecx
5062	testl	$1,%ebp
5063	jnz	.L074odd
5064	bsfl	%ebp,%eax
5065	addl	$1,%ebp
5066	shll	$4,%eax
5067	movdqu	(%ebx,%eax,1),%xmm7
5068	movl	%edx,%eax
5069	movdqu	(%esi),%xmm2
5070	leal	16(%esi),%esi
5071	pxor	%xmm0,%xmm7
5072	pxor	%xmm2,%xmm1
5073	pxor	%xmm7,%xmm2
5074	movdqa	%xmm1,%xmm6
5075	movups	(%edx),%xmm0
5076	movups	16(%edx),%xmm1
5077	leal	32(%edx),%edx
5078	xorps	%xmm0,%xmm2
5079.L075enc1_loop_15:
5080.byte	102,15,56,220,209
5081	decl	%ecx
5082	movups	(%edx),%xmm1
5083	leal	16(%edx),%edx
5084	jnz	.L075enc1_loop_15
5085.byte	102,15,56,221,209
5086	xorps	%xmm7,%xmm2
5087	movdqa	%xmm7,%xmm0
5088	movdqa	%xmm6,%xmm1
5089	movups	%xmm2,-16(%edi,%esi,1)
5090	movl	240(%eax),%ecx
5091	movl	%eax,%edx
5092	movl	124(%esp),%eax
5093.L074odd:
5094	shll	$4,%ecx
5095	movl	$16,%edi
5096	subl	%ecx,%edi
5097	movl	%edx,112(%esp)
5098	leal	32(%edx,%ecx,1),%edx
5099	movl	%edi,116(%esp)
5100	cmpl	%eax,%esi
5101	ja	.L076short
5102	jmp	.L077grandloop
5103.align	32
5104.L077grandloop:
5105	leal	1(%ebp),%ecx
5106	leal	3(%ebp),%eax
5107	leal	5(%ebp),%edi
5108	addl	$6,%ebp
5109	bsfl	%ecx,%ecx
5110	bsfl	%eax,%eax
5111	bsfl	%edi,%edi
5112	shll	$4,%ecx
5113	shll	$4,%eax
5114	shll	$4,%edi
5115	movdqu	(%ebx),%xmm2
5116	movdqu	(%ebx,%ecx,1),%xmm3
5117	movl	116(%esp),%ecx
5118	movdqa	%xmm2,%xmm4
5119	movdqu	(%ebx,%eax,1),%xmm5
5120	movdqa	%xmm2,%xmm6
5121	movdqu	(%ebx,%edi,1),%xmm7
5122	pxor	%xmm0,%xmm2
5123	pxor	%xmm2,%xmm3
5124	movdqa	%xmm2,(%esp)
5125	pxor	%xmm3,%xmm4
5126	movdqa	%xmm3,16(%esp)
5127	pxor	%xmm4,%xmm5
5128	movdqa	%xmm4,32(%esp)
5129	pxor	%xmm5,%xmm6
5130	movdqa	%xmm5,48(%esp)
5131	pxor	%xmm6,%xmm7
5132	movdqa	%xmm6,64(%esp)
5133	movdqa	%xmm7,80(%esp)
5134	movups	-48(%edx,%ecx,1),%xmm0
5135	movdqu	(%esi),%xmm2
5136	movdqu	16(%esi),%xmm3
5137	movdqu	32(%esi),%xmm4
5138	movdqu	48(%esi),%xmm5
5139	movdqu	64(%esi),%xmm6
5140	movdqu	80(%esi),%xmm7
5141	leal	96(%esi),%esi
5142	pxor	%xmm2,%xmm1
5143	pxor	%xmm0,%xmm2
5144	pxor	%xmm3,%xmm1
5145	pxor	%xmm0,%xmm3
5146	pxor	%xmm4,%xmm1
5147	pxor	%xmm0,%xmm4
5148	pxor	%xmm5,%xmm1
5149	pxor	%xmm0,%xmm5
5150	pxor	%xmm6,%xmm1
5151	pxor	%xmm0,%xmm6
5152	pxor	%xmm7,%xmm1
5153	pxor	%xmm0,%xmm7
5154	movdqa	%xmm1,96(%esp)
5155	movups	-32(%edx,%ecx,1),%xmm1
5156	pxor	(%esp),%xmm2
5157	pxor	16(%esp),%xmm3
5158	pxor	32(%esp),%xmm4
5159	pxor	48(%esp),%xmm5
5160	pxor	64(%esp),%xmm6
5161	pxor	80(%esp),%xmm7
5162	movups	-16(%edx,%ecx,1),%xmm0
5163.byte	102,15,56,220,209
5164.byte	102,15,56,220,217
5165.byte	102,15,56,220,225
5166.byte	102,15,56,220,233
5167.byte	102,15,56,220,241
5168.byte	102,15,56,220,249
5169	movl	120(%esp),%edi
5170	movl	124(%esp),%eax
5171	call	.L_aesni_encrypt6_enter
5172	movdqa	80(%esp),%xmm0
5173	pxor	(%esp),%xmm2
5174	pxor	16(%esp),%xmm3
5175	pxor	32(%esp),%xmm4
5176	pxor	48(%esp),%xmm5
5177	pxor	64(%esp),%xmm6
5178	pxor	%xmm0,%xmm7
5179	movdqa	96(%esp),%xmm1
5180	movdqu	%xmm2,-96(%edi,%esi,1)
5181	movdqu	%xmm3,-80(%edi,%esi,1)
5182	movdqu	%xmm4,-64(%edi,%esi,1)
5183	movdqu	%xmm5,-48(%edi,%esi,1)
5184	movdqu	%xmm6,-32(%edi,%esi,1)
5185	movdqu	%xmm7,-16(%edi,%esi,1)
5186	cmpl	%eax,%esi
5187	jb	.L077grandloop
5188.L076short:
5189	addl	$96,%eax
5190	subl	%esi,%eax
5191	jz	.L078done
5192	cmpl	$32,%eax
5193	jb	.L079one
5194	je	.L080two
5195	cmpl	$64,%eax
5196	jb	.L081three
5197	je	.L082four
5198	leal	1(%ebp),%ecx
5199	leal	3(%ebp),%eax
5200	bsfl	%ecx,%ecx
5201	bsfl	%eax,%eax
5202	shll	$4,%ecx
5203	shll	$4,%eax
5204	movdqu	(%ebx),%xmm2
5205	movdqu	(%ebx,%ecx,1),%xmm3
5206	movl	116(%esp),%ecx
5207	movdqa	%xmm2,%xmm4
5208	movdqu	(%ebx,%eax,1),%xmm5
5209	movdqa	%xmm2,%xmm6
5210	pxor	%xmm0,%xmm2
5211	pxor	%xmm2,%xmm3
5212	movdqa	%xmm2,(%esp)
5213	pxor	%xmm3,%xmm4
5214	movdqa	%xmm3,16(%esp)
5215	pxor	%xmm4,%xmm5
5216	movdqa	%xmm4,32(%esp)
5217	pxor	%xmm5,%xmm6
5218	movdqa	%xmm5,48(%esp)
5219	pxor	%xmm6,%xmm7
5220	movdqa	%xmm6,64(%esp)
5221	movups	-48(%edx,%ecx,1),%xmm0
5222	movdqu	(%esi),%xmm2
5223	movdqu	16(%esi),%xmm3
5224	movdqu	32(%esi),%xmm4
5225	movdqu	48(%esi),%xmm5
5226	movdqu	64(%esi),%xmm6
5227	pxor	%xmm7,%xmm7
5228	pxor	%xmm2,%xmm1
5229	pxor	%xmm0,%xmm2
5230	pxor	%xmm3,%xmm1
5231	pxor	%xmm0,%xmm3
5232	pxor	%xmm4,%xmm1
5233	pxor	%xmm0,%xmm4
5234	pxor	%xmm5,%xmm1
5235	pxor	%xmm0,%xmm5
5236	pxor	%xmm6,%xmm1
5237	pxor	%xmm0,%xmm6
5238	movdqa	%xmm1,96(%esp)
5239	movups	-32(%edx,%ecx,1),%xmm1
5240	pxor	(%esp),%xmm2
5241	pxor	16(%esp),%xmm3
5242	pxor	32(%esp),%xmm4
5243	pxor	48(%esp),%xmm5
5244	pxor	64(%esp),%xmm6
5245	movups	-16(%edx,%ecx,1),%xmm0
5246.byte	102,15,56,220,209
5247.byte	102,15,56,220,217
5248.byte	102,15,56,220,225
5249.byte	102,15,56,220,233
5250.byte	102,15,56,220,241
5251.byte	102,15,56,220,249
5252	movl	120(%esp),%edi
5253	call	.L_aesni_encrypt6_enter
5254	movdqa	64(%esp),%xmm0
5255	pxor	(%esp),%xmm2
5256	pxor	16(%esp),%xmm3
5257	pxor	32(%esp),%xmm4
5258	pxor	48(%esp),%xmm5
5259	pxor	%xmm0,%xmm6
5260	movdqa	96(%esp),%xmm1
5261	movdqu	%xmm2,(%edi,%esi,1)
5262	movdqu	%xmm3,16(%edi,%esi,1)
5263	movdqu	%xmm4,32(%edi,%esi,1)
5264	movdqu	%xmm5,48(%edi,%esi,1)
5265	movdqu	%xmm6,64(%edi,%esi,1)
5266	jmp	.L078done
5267.align	16
5268.L079one:
5269	movdqu	(%ebx),%xmm7
5270	movl	112(%esp),%edx
5271	movdqu	(%esi),%xmm2
5272	movl	240(%edx),%ecx
5273	pxor	%xmm0,%xmm7
5274	pxor	%xmm2,%xmm1
5275	pxor	%xmm7,%xmm2
5276	movdqa	%xmm1,%xmm6
5277	movl	120(%esp),%edi
5278	movups	(%edx),%xmm0
5279	movups	16(%edx),%xmm1
5280	leal	32(%edx),%edx
5281	xorps	%xmm0,%xmm2
5282.L083enc1_loop_16:
5283.byte	102,15,56,220,209
5284	decl	%ecx
5285	movups	(%edx),%xmm1
5286	leal	16(%edx),%edx
5287	jnz	.L083enc1_loop_16
5288.byte	102,15,56,221,209
5289	xorps	%xmm7,%xmm2
5290	movdqa	%xmm7,%xmm0
5291	movdqa	%xmm6,%xmm1
5292	movups	%xmm2,(%edi,%esi,1)
5293	jmp	.L078done
5294.align	16
5295.L080two:
5296	leal	1(%ebp),%ecx
5297	movl	112(%esp),%edx
5298	bsfl	%ecx,%ecx
5299	shll	$4,%ecx
5300	movdqu	(%ebx),%xmm6
5301	movdqu	(%ebx,%ecx,1),%xmm7
5302	movdqu	(%esi),%xmm2
5303	movdqu	16(%esi),%xmm3
5304	movl	240(%edx),%ecx
5305	pxor	%xmm0,%xmm6
5306	pxor	%xmm6,%xmm7
5307	pxor	%xmm2,%xmm1
5308	pxor	%xmm6,%xmm2
5309	pxor	%xmm3,%xmm1
5310	pxor	%xmm7,%xmm3
5311	movdqa	%xmm1,%xmm5
5312	movl	120(%esp),%edi
5313	call	_aesni_encrypt2
5314	xorps	%xmm6,%xmm2
5315	xorps	%xmm7,%xmm3
5316	movdqa	%xmm7,%xmm0
5317	movdqa	%xmm5,%xmm1
5318	movups	%xmm2,(%edi,%esi,1)
5319	movups	%xmm3,16(%edi,%esi,1)
5320	jmp	.L078done
5321.align	16
5322.L081three:
5323	leal	1(%ebp),%ecx
5324	movl	112(%esp),%edx
5325	bsfl	%ecx,%ecx
5326	shll	$4,%ecx
5327	movdqu	(%ebx),%xmm5
5328	movdqu	(%ebx,%ecx,1),%xmm6
5329	movdqa	%xmm5,%xmm7
5330	movdqu	(%esi),%xmm2
5331	movdqu	16(%esi),%xmm3
5332	movdqu	32(%esi),%xmm4
5333	movl	240(%edx),%ecx
5334	pxor	%xmm0,%xmm5
5335	pxor	%xmm5,%xmm6
5336	pxor	%xmm6,%xmm7
5337	pxor	%xmm2,%xmm1
5338	pxor	%xmm5,%xmm2
5339	pxor	%xmm3,%xmm1
5340	pxor	%xmm6,%xmm3
5341	pxor	%xmm4,%xmm1
5342	pxor	%xmm7,%xmm4
5343	movdqa	%xmm1,96(%esp)
5344	movl	120(%esp),%edi
5345	call	_aesni_encrypt3
5346	xorps	%xmm5,%xmm2
5347	xorps	%xmm6,%xmm3
5348	xorps	%xmm7,%xmm4
5349	movdqa	%xmm7,%xmm0
5350	movdqa	96(%esp),%xmm1
5351	movups	%xmm2,(%edi,%esi,1)
5352	movups	%xmm3,16(%edi,%esi,1)
5353	movups	%xmm4,32(%edi,%esi,1)
5354	jmp	.L078done
5355.align	16
5356.L082four:
5357	leal	1(%ebp),%ecx
5358	leal	3(%ebp),%eax
5359	bsfl	%ecx,%ecx
5360	bsfl	%eax,%eax
5361	movl	112(%esp),%edx
5362	shll	$4,%ecx
5363	shll	$4,%eax
5364	movdqu	(%ebx),%xmm4
5365	movdqu	(%ebx,%ecx,1),%xmm5
5366	movdqa	%xmm4,%xmm6
5367	movdqu	(%ebx,%eax,1),%xmm7
5368	pxor	%xmm0,%xmm4
5369	movdqu	(%esi),%xmm2
5370	pxor	%xmm4,%xmm5
5371	movdqu	16(%esi),%xmm3
5372	pxor	%xmm5,%xmm6
5373	movdqa	%xmm4,(%esp)
5374	pxor	%xmm6,%xmm7
5375	movdqa	%xmm5,16(%esp)
5376	movdqu	32(%esi),%xmm4
5377	movdqu	48(%esi),%xmm5
5378	movl	240(%edx),%ecx
5379	pxor	%xmm2,%xmm1
5380	pxor	(%esp),%xmm2
5381	pxor	%xmm3,%xmm1
5382	pxor	16(%esp),%xmm3
5383	pxor	%xmm4,%xmm1
5384	pxor	%xmm6,%xmm4
5385	pxor	%xmm5,%xmm1
5386	pxor	%xmm7,%xmm5
5387	movdqa	%xmm1,96(%esp)
5388	movl	120(%esp),%edi
5389	call	_aesni_encrypt4
5390	xorps	(%esp),%xmm2
5391	xorps	16(%esp),%xmm3
5392	xorps	%xmm6,%xmm4
5393	movups	%xmm2,(%edi,%esi,1)
5394	xorps	%xmm7,%xmm5
5395	movups	%xmm3,16(%edi,%esi,1)
5396	movdqa	%xmm7,%xmm0
5397	movups	%xmm4,32(%edi,%esi,1)
5398	movdqa	96(%esp),%xmm1
5399	movups	%xmm5,48(%edi,%esi,1)
5400.L078done:
5401	movl	128(%esp),%edx
5402	pxor	%xmm2,%xmm2
5403	pxor	%xmm3,%xmm3
5404	movdqa	%xmm2,(%esp)
5405	pxor	%xmm4,%xmm4
5406	movdqa	%xmm2,16(%esp)
5407	pxor	%xmm5,%xmm5
5408	movdqa	%xmm2,32(%esp)
5409	pxor	%xmm6,%xmm6
5410	movdqa	%xmm2,48(%esp)
5411	pxor	%xmm7,%xmm7
5412	movdqa	%xmm2,64(%esp)
5413	movdqa	%xmm2,80(%esp)
5414	movdqa	%xmm2,96(%esp)
5415	leal	(%edx),%esp
5416	movl	40(%esp),%ecx
5417	movl	48(%esp),%ebx
5418	movdqu	%xmm0,(%ecx)
5419	pxor	%xmm0,%xmm0
5420	movdqu	%xmm1,(%ebx)
5421	pxor	%xmm1,%xmm1
5422	popl	%edi
5423	popl	%esi
5424	popl	%ebx
5425	popl	%ebp
5426	ret
5427.size	aesni_ocb_encrypt,.-.L_aesni_ocb_encrypt_begin
5428.globl	aesni_ocb_decrypt
5429.type	aesni_ocb_decrypt,@function
5430.align	16
5431aesni_ocb_decrypt:
5432.L_aesni_ocb_decrypt_begin:
5433	pushl	%ebp
5434	pushl	%ebx
5435	pushl	%esi
5436	pushl	%edi
5437	movl	40(%esp),%ecx
5438	movl	48(%esp),%ebx
5439	movl	20(%esp),%esi
5440	movl	24(%esp),%edi
5441	movl	28(%esp),%eax
5442	movl	32(%esp),%edx
5443	movdqu	(%ecx),%xmm0
5444	movl	36(%esp),%ebp
5445	movdqu	(%ebx),%xmm1
5446	movl	44(%esp),%ebx
5447	movl	%esp,%ecx
5448	subl	$132,%esp
5449	andl	$-16,%esp
5450	subl	%esi,%edi
5451	shll	$4,%eax
5452	leal	-96(%esi,%eax,1),%eax
5453	movl	%edi,120(%esp)
5454	movl	%eax,124(%esp)
5455	movl	%ecx,128(%esp)
5456	movl	240(%edx),%ecx
5457	testl	$1,%ebp
5458	jnz	.L084odd
5459	bsfl	%ebp,%eax
5460	addl	$1,%ebp
5461	shll	$4,%eax
5462	movdqu	(%ebx,%eax,1),%xmm7
5463	movl	%edx,%eax
5464	movdqu	(%esi),%xmm2
5465	leal	16(%esi),%esi
5466	pxor	%xmm0,%xmm7
5467	pxor	%xmm7,%xmm2
5468	movdqa	%xmm1,%xmm6
5469	movups	(%edx),%xmm0
5470	movups	16(%edx),%xmm1
5471	leal	32(%edx),%edx
5472	xorps	%xmm0,%xmm2
5473.L085dec1_loop_17:
5474.byte	102,15,56,222,209
5475	decl	%ecx
5476	movups	(%edx),%xmm1
5477	leal	16(%edx),%edx
5478	jnz	.L085dec1_loop_17
5479.byte	102,15,56,223,209
5480	xorps	%xmm7,%xmm2
5481	movaps	%xmm6,%xmm1
5482	movdqa	%xmm7,%xmm0
5483	xorps	%xmm2,%xmm1
5484	movups	%xmm2,-16(%edi,%esi,1)
5485	movl	240(%eax),%ecx
5486	movl	%eax,%edx
5487	movl	124(%esp),%eax
5488.L084odd:
5489	shll	$4,%ecx
5490	movl	$16,%edi
5491	subl	%ecx,%edi
5492	movl	%edx,112(%esp)
5493	leal	32(%edx,%ecx,1),%edx
5494	movl	%edi,116(%esp)
5495	cmpl	%eax,%esi
5496	ja	.L086short
5497	jmp	.L087grandloop
5498.align	32
5499.L087grandloop:
5500	leal	1(%ebp),%ecx
5501	leal	3(%ebp),%eax
5502	leal	5(%ebp),%edi
5503	addl	$6,%ebp
5504	bsfl	%ecx,%ecx
5505	bsfl	%eax,%eax
5506	bsfl	%edi,%edi
5507	shll	$4,%ecx
5508	shll	$4,%eax
5509	shll	$4,%edi
5510	movdqu	(%ebx),%xmm2
5511	movdqu	(%ebx,%ecx,1),%xmm3
5512	movl	116(%esp),%ecx
5513	movdqa	%xmm2,%xmm4
5514	movdqu	(%ebx,%eax,1),%xmm5
5515	movdqa	%xmm2,%xmm6
5516	movdqu	(%ebx,%edi,1),%xmm7
5517	pxor	%xmm0,%xmm2
5518	pxor	%xmm2,%xmm3
5519	movdqa	%xmm2,(%esp)
5520	pxor	%xmm3,%xmm4
5521	movdqa	%xmm3,16(%esp)
5522	pxor	%xmm4,%xmm5
5523	movdqa	%xmm4,32(%esp)
5524	pxor	%xmm5,%xmm6
5525	movdqa	%xmm5,48(%esp)
5526	pxor	%xmm6,%xmm7
5527	movdqa	%xmm6,64(%esp)
5528	movdqa	%xmm7,80(%esp)
5529	movups	-48(%edx,%ecx,1),%xmm0
5530	movdqu	(%esi),%xmm2
5531	movdqu	16(%esi),%xmm3
5532	movdqu	32(%esi),%xmm4
5533	movdqu	48(%esi),%xmm5
5534	movdqu	64(%esi),%xmm6
5535	movdqu	80(%esi),%xmm7
5536	leal	96(%esi),%esi
5537	movdqa	%xmm1,96(%esp)
5538	pxor	%xmm0,%xmm2
5539	pxor	%xmm0,%xmm3
5540	pxor	%xmm0,%xmm4
5541	pxor	%xmm0,%xmm5
5542	pxor	%xmm0,%xmm6
5543	pxor	%xmm0,%xmm7
5544	movups	-32(%edx,%ecx,1),%xmm1
5545	pxor	(%esp),%xmm2
5546	pxor	16(%esp),%xmm3
5547	pxor	32(%esp),%xmm4
5548	pxor	48(%esp),%xmm5
5549	pxor	64(%esp),%xmm6
5550	pxor	80(%esp),%xmm7
5551	movups	-16(%edx,%ecx,1),%xmm0
5552.byte	102,15,56,222,209
5553.byte	102,15,56,222,217
5554.byte	102,15,56,222,225
5555.byte	102,15,56,222,233
5556.byte	102,15,56,222,241
5557.byte	102,15,56,222,249
5558	movl	120(%esp),%edi
5559	movl	124(%esp),%eax
5560	call	.L_aesni_decrypt6_enter
5561	movdqa	80(%esp),%xmm0
5562	pxor	(%esp),%xmm2
5563	movdqa	96(%esp),%xmm1
5564	pxor	16(%esp),%xmm3
5565	pxor	32(%esp),%xmm4
5566	pxor	48(%esp),%xmm5
5567	pxor	64(%esp),%xmm6
5568	pxor	%xmm0,%xmm7
5569	pxor	%xmm2,%xmm1
5570	movdqu	%xmm2,-96(%edi,%esi,1)
5571	pxor	%xmm3,%xmm1
5572	movdqu	%xmm3,-80(%edi,%esi,1)
5573	pxor	%xmm4,%xmm1
5574	movdqu	%xmm4,-64(%edi,%esi,1)
5575	pxor	%xmm5,%xmm1
5576	movdqu	%xmm5,-48(%edi,%esi,1)
5577	pxor	%xmm6,%xmm1
5578	movdqu	%xmm6,-32(%edi,%esi,1)
5579	pxor	%xmm7,%xmm1
5580	movdqu	%xmm7,-16(%edi,%esi,1)
5581	cmpl	%eax,%esi
5582	jb	.L087grandloop
5583.L086short:
5584	addl	$96,%eax
5585	subl	%esi,%eax
5586	jz	.L088done
5587	cmpl	$32,%eax
5588	jb	.L089one
5589	je	.L090two
5590	cmpl	$64,%eax
5591	jb	.L091three
5592	je	.L092four
5593	leal	1(%ebp),%ecx
5594	leal	3(%ebp),%eax
5595	bsfl	%ecx,%ecx
5596	bsfl	%eax,%eax
5597	shll	$4,%ecx
5598	shll	$4,%eax
5599	movdqu	(%ebx),%xmm2
5600	movdqu	(%ebx,%ecx,1),%xmm3
5601	movl	116(%esp),%ecx
5602	movdqa	%xmm2,%xmm4
5603	movdqu	(%ebx,%eax,1),%xmm5
5604	movdqa	%xmm2,%xmm6
5605	pxor	%xmm0,%xmm2
5606	pxor	%xmm2,%xmm3
5607	movdqa	%xmm2,(%esp)
5608	pxor	%xmm3,%xmm4
5609	movdqa	%xmm3,16(%esp)
5610	pxor	%xmm4,%xmm5
5611	movdqa	%xmm4,32(%esp)
5612	pxor	%xmm5,%xmm6
5613	movdqa	%xmm5,48(%esp)
5614	pxor	%xmm6,%xmm7
5615	movdqa	%xmm6,64(%esp)
5616	movups	-48(%edx,%ecx,1),%xmm0
5617	movdqu	(%esi),%xmm2
5618	movdqu	16(%esi),%xmm3
5619	movdqu	32(%esi),%xmm4
5620	movdqu	48(%esi),%xmm5
5621	movdqu	64(%esi),%xmm6
5622	pxor	%xmm7,%xmm7
5623	movdqa	%xmm1,96(%esp)
5624	pxor	%xmm0,%xmm2
5625	pxor	%xmm0,%xmm3
5626	pxor	%xmm0,%xmm4
5627	pxor	%xmm0,%xmm5
5628	pxor	%xmm0,%xmm6
5629	movups	-32(%edx,%ecx,1),%xmm1
5630	pxor	(%esp),%xmm2
5631	pxor	16(%esp),%xmm3
5632	pxor	32(%esp),%xmm4
5633	pxor	48(%esp),%xmm5
5634	pxor	64(%esp),%xmm6
5635	movups	-16(%edx,%ecx,1),%xmm0
5636.byte	102,15,56,222,209
5637.byte	102,15,56,222,217
5638.byte	102,15,56,222,225
5639.byte	102,15,56,222,233
5640.byte	102,15,56,222,241
5641.byte	102,15,56,222,249
5642	movl	120(%esp),%edi
5643	call	.L_aesni_decrypt6_enter
5644	movdqa	64(%esp),%xmm0
5645	pxor	(%esp),%xmm2
5646	movdqa	96(%esp),%xmm1
5647	pxor	16(%esp),%xmm3
5648	pxor	32(%esp),%xmm4
5649	pxor	48(%esp),%xmm5
5650	pxor	%xmm0,%xmm6
5651	pxor	%xmm2,%xmm1
5652	movdqu	%xmm2,(%edi,%esi,1)
5653	pxor	%xmm3,%xmm1
5654	movdqu	%xmm3,16(%edi,%esi,1)
5655	pxor	%xmm4,%xmm1
5656	movdqu	%xmm4,32(%edi,%esi,1)
5657	pxor	%xmm5,%xmm1
5658	movdqu	%xmm5,48(%edi,%esi,1)
5659	pxor	%xmm6,%xmm1
5660	movdqu	%xmm6,64(%edi,%esi,1)
5661	jmp	.L088done
5662.align	16
5663.L089one:
5664	movdqu	(%ebx),%xmm7
5665	movl	112(%esp),%edx
5666	movdqu	(%esi),%xmm2
5667	movl	240(%edx),%ecx
5668	pxor	%xmm0,%xmm7
5669	pxor	%xmm7,%xmm2
5670	movdqa	%xmm1,%xmm6
5671	movl	120(%esp),%edi
5672	movups	(%edx),%xmm0
5673	movups	16(%edx),%xmm1
5674	leal	32(%edx),%edx
5675	xorps	%xmm0,%xmm2
5676.L093dec1_loop_18:
5677.byte	102,15,56,222,209
5678	decl	%ecx
5679	movups	(%edx),%xmm1
5680	leal	16(%edx),%edx
5681	jnz	.L093dec1_loop_18
5682.byte	102,15,56,223,209
5683	xorps	%xmm7,%xmm2
5684	movaps	%xmm6,%xmm1
5685	movdqa	%xmm7,%xmm0
5686	xorps	%xmm2,%xmm1
5687	movups	%xmm2,(%edi,%esi,1)
5688	jmp	.L088done
5689.align	16
5690.L090two:
5691	leal	1(%ebp),%ecx
5692	movl	112(%esp),%edx
5693	bsfl	%ecx,%ecx
5694	shll	$4,%ecx
5695	movdqu	(%ebx),%xmm6
5696	movdqu	(%ebx,%ecx,1),%xmm7
5697	movdqu	(%esi),%xmm2
5698	movdqu	16(%esi),%xmm3
5699	movl	240(%edx),%ecx
5700	movdqa	%xmm1,%xmm5
5701	pxor	%xmm0,%xmm6
5702	pxor	%xmm6,%xmm7
5703	pxor	%xmm6,%xmm2
5704	pxor	%xmm7,%xmm3
5705	movl	120(%esp),%edi
5706	call	_aesni_decrypt2
5707	xorps	%xmm6,%xmm2
5708	xorps	%xmm7,%xmm3
5709	movdqa	%xmm7,%xmm0
5710	xorps	%xmm2,%xmm5
5711	movups	%xmm2,(%edi,%esi,1)
5712	xorps	%xmm3,%xmm5
5713	movups	%xmm3,16(%edi,%esi,1)
5714	movaps	%xmm5,%xmm1
5715	jmp	.L088done
5716.align	16
5717.L091three:
5718	leal	1(%ebp),%ecx
5719	movl	112(%esp),%edx
5720	bsfl	%ecx,%ecx
5721	shll	$4,%ecx
5722	movdqu	(%ebx),%xmm5
5723	movdqu	(%ebx,%ecx,1),%xmm6
5724	movdqa	%xmm5,%xmm7
5725	movdqu	(%esi),%xmm2
5726	movdqu	16(%esi),%xmm3
5727	movdqu	32(%esi),%xmm4
5728	movl	240(%edx),%ecx
5729	movdqa	%xmm1,96(%esp)
5730	pxor	%xmm0,%xmm5
5731	pxor	%xmm5,%xmm6
5732	pxor	%xmm6,%xmm7
5733	pxor	%xmm5,%xmm2
5734	pxor	%xmm6,%xmm3
5735	pxor	%xmm7,%xmm4
5736	movl	120(%esp),%edi
5737	call	_aesni_decrypt3
5738	movdqa	96(%esp),%xmm1
5739	xorps	%xmm5,%xmm2
5740	xorps	%xmm6,%xmm3
5741	xorps	%xmm7,%xmm4
5742	movups	%xmm2,(%edi,%esi,1)
5743	pxor	%xmm2,%xmm1
5744	movdqa	%xmm7,%xmm0
5745	movups	%xmm3,16(%edi,%esi,1)
5746	pxor	%xmm3,%xmm1
5747	movups	%xmm4,32(%edi,%esi,1)
5748	pxor	%xmm4,%xmm1
5749	jmp	.L088done
5750.align	16
5751.L092four:
5752	leal	1(%ebp),%ecx
5753	leal	3(%ebp),%eax
5754	bsfl	%ecx,%ecx
5755	bsfl	%eax,%eax
5756	movl	112(%esp),%edx
5757	shll	$4,%ecx
5758	shll	$4,%eax
5759	movdqu	(%ebx),%xmm4
5760	movdqu	(%ebx,%ecx,1),%xmm5
5761	movdqa	%xmm4,%xmm6
5762	movdqu	(%ebx,%eax,1),%xmm7
5763	pxor	%xmm0,%xmm4
5764	movdqu	(%esi),%xmm2
5765	pxor	%xmm4,%xmm5
5766	movdqu	16(%esi),%xmm3
5767	pxor	%xmm5,%xmm6
5768	movdqa	%xmm4,(%esp)
5769	pxor	%xmm6,%xmm7
5770	movdqa	%xmm5,16(%esp)
5771	movdqu	32(%esi),%xmm4
5772	movdqu	48(%esi),%xmm5
5773	movl	240(%edx),%ecx
5774	movdqa	%xmm1,96(%esp)
5775	pxor	(%esp),%xmm2
5776	pxor	16(%esp),%xmm3
5777	pxor	%xmm6,%xmm4
5778	pxor	%xmm7,%xmm5
5779	movl	120(%esp),%edi
5780	call	_aesni_decrypt4
5781	movdqa	96(%esp),%xmm1
5782	xorps	(%esp),%xmm2
5783	xorps	16(%esp),%xmm3
5784	xorps	%xmm6,%xmm4
5785	movups	%xmm2,(%edi,%esi,1)
5786	pxor	%xmm2,%xmm1
5787	xorps	%xmm7,%xmm5
5788	movups	%xmm3,16(%edi,%esi,1)
5789	pxor	%xmm3,%xmm1
5790	movdqa	%xmm7,%xmm0
5791	movups	%xmm4,32(%edi,%esi,1)
5792	pxor	%xmm4,%xmm1
5793	movups	%xmm5,48(%edi,%esi,1)
5794	pxor	%xmm5,%xmm1
5795.L088done:
5796	movl	128(%esp),%edx
5797	pxor	%xmm2,%xmm2
5798	pxor	%xmm3,%xmm3
5799	movdqa	%xmm2,(%esp)
5800	pxor	%xmm4,%xmm4
5801	movdqa	%xmm2,16(%esp)
5802	pxor	%xmm5,%xmm5
5803	movdqa	%xmm2,32(%esp)
5804	pxor	%xmm6,%xmm6
5805	movdqa	%xmm2,48(%esp)
5806	pxor	%xmm7,%xmm7
5807	movdqa	%xmm2,64(%esp)
5808	movdqa	%xmm2,80(%esp)
5809	movdqa	%xmm2,96(%esp)
5810	leal	(%edx),%esp
5811	movl	40(%esp),%ecx
5812	movl	48(%esp),%ebx
5813	movdqu	%xmm0,(%ecx)
5814	pxor	%xmm0,%xmm0
5815	movdqu	%xmm1,(%ebx)
5816	pxor	%xmm1,%xmm1
5817	popl	%edi
5818	popl	%esi
5819	popl	%ebx
5820	popl	%ebp
5821	ret
5822.size	aesni_ocb_decrypt,.-.L_aesni_ocb_decrypt_begin
5823.globl	aesni_cbc_encrypt
5824.type	aesni_cbc_encrypt,@function
5825.align	16
5826aesni_cbc_encrypt:
5827.L_aesni_cbc_encrypt_begin:
5828	pushl	%ebp
5829	pushl	%ebx
5830	pushl	%esi
5831	pushl	%edi
5832	movl	20(%esp),%esi
5833	movl	%esp,%ebx
5834	movl	24(%esp),%edi
5835	subl	$24,%ebx
5836	movl	28(%esp),%eax
5837	andl	$-16,%ebx
5838	movl	32(%esp),%edx
5839	movl	36(%esp),%ebp
5840	testl	%eax,%eax
5841	jz	.L094cbc_abort
5842	cmpl	$0,40(%esp)
5843	xchgl	%esp,%ebx
5844	movups	(%ebp),%xmm7
5845	movl	240(%edx),%ecx
5846	movl	%edx,%ebp
5847	movl	%ebx,16(%esp)
5848	movl	%ecx,%ebx
5849	je	.L095cbc_decrypt
5850	movaps	%xmm7,%xmm2
5851	cmpl	$16,%eax
5852	jb	.L096cbc_enc_tail
5853	subl	$16,%eax
5854	jmp	.L097cbc_enc_loop
5855.align	16
5856.L097cbc_enc_loop:
5857	movups	(%esi),%xmm7
5858	leal	16(%esi),%esi
5859	movups	(%edx),%xmm0
5860	movups	16(%edx),%xmm1
5861	xorps	%xmm0,%xmm7
5862	leal	32(%edx),%edx
5863	xorps	%xmm7,%xmm2
5864.L098enc1_loop_19:
5865.byte	102,15,56,220,209
5866	decl	%ecx
5867	movups	(%edx),%xmm1
5868	leal	16(%edx),%edx
5869	jnz	.L098enc1_loop_19
5870.byte	102,15,56,221,209
5871	movl	%ebx,%ecx
5872	movl	%ebp,%edx
5873	movups	%xmm2,(%edi)
5874	leal	16(%edi),%edi
5875	subl	$16,%eax
5876	jnc	.L097cbc_enc_loop
5877	addl	$16,%eax
5878	jnz	.L096cbc_enc_tail
5879	movaps	%xmm2,%xmm7
5880	pxor	%xmm2,%xmm2
5881	jmp	.L099cbc_ret
5882.L096cbc_enc_tail:
5883	movl	%eax,%ecx
5884.long	2767451785
5885	movl	$16,%ecx
5886	subl	%eax,%ecx
5887	xorl	%eax,%eax
5888.long	2868115081
5889	leal	-16(%edi),%edi
5890	movl	%ebx,%ecx
5891	movl	%edi,%esi
5892	movl	%ebp,%edx
5893	jmp	.L097cbc_enc_loop
5894.align	16
5895.L095cbc_decrypt:
5896	cmpl	$80,%eax
5897	jbe	.L100cbc_dec_tail
5898	movaps	%xmm7,(%esp)
5899	subl	$80,%eax
5900	jmp	.L101cbc_dec_loop6_enter
5901.align	16
5902.L102cbc_dec_loop6:
5903	movaps	%xmm0,(%esp)
5904	movups	%xmm7,(%edi)
5905	leal	16(%edi),%edi
5906.L101cbc_dec_loop6_enter:
5907	movdqu	(%esi),%xmm2
5908	movdqu	16(%esi),%xmm3
5909	movdqu	32(%esi),%xmm4
5910	movdqu	48(%esi),%xmm5
5911	movdqu	64(%esi),%xmm6
5912	movdqu	80(%esi),%xmm7
5913	call	_aesni_decrypt6
5914	movups	(%esi),%xmm1
5915	movups	16(%esi),%xmm0
5916	xorps	(%esp),%xmm2
5917	xorps	%xmm1,%xmm3
5918	movups	32(%esi),%xmm1
5919	xorps	%xmm0,%xmm4
5920	movups	48(%esi),%xmm0
5921	xorps	%xmm1,%xmm5
5922	movups	64(%esi),%xmm1
5923	xorps	%xmm0,%xmm6
5924	movups	80(%esi),%xmm0
5925	xorps	%xmm1,%xmm7
5926	movups	%xmm2,(%edi)
5927	movups	%xmm3,16(%edi)
5928	leal	96(%esi),%esi
5929	movups	%xmm4,32(%edi)
5930	movl	%ebx,%ecx
5931	movups	%xmm5,48(%edi)
5932	movl	%ebp,%edx
5933	movups	%xmm6,64(%edi)
5934	leal	80(%edi),%edi
5935	subl	$96,%eax
5936	ja	.L102cbc_dec_loop6
5937	movaps	%xmm7,%xmm2
5938	movaps	%xmm0,%xmm7
5939	addl	$80,%eax
5940	jle	.L103cbc_dec_clear_tail_collected
5941	movups	%xmm2,(%edi)
5942	leal	16(%edi),%edi
5943.L100cbc_dec_tail:
5944	movups	(%esi),%xmm2
5945	movaps	%xmm2,%xmm6
5946	cmpl	$16,%eax
5947	jbe	.L104cbc_dec_one
5948	movups	16(%esi),%xmm3
5949	movaps	%xmm3,%xmm5
5950	cmpl	$32,%eax
5951	jbe	.L105cbc_dec_two
5952	movups	32(%esi),%xmm4
5953	cmpl	$48,%eax
5954	jbe	.L106cbc_dec_three
5955	movups	48(%esi),%xmm5
5956	cmpl	$64,%eax
5957	jbe	.L107cbc_dec_four
5958	movups	64(%esi),%xmm6
5959	movaps	%xmm7,(%esp)
5960	movups	(%esi),%xmm2
5961	xorps	%xmm7,%xmm7
5962	call	_aesni_decrypt6
5963	movups	(%esi),%xmm1
5964	movups	16(%esi),%xmm0
5965	xorps	(%esp),%xmm2
5966	xorps	%xmm1,%xmm3
5967	movups	32(%esi),%xmm1
5968	xorps	%xmm0,%xmm4
5969	movups	48(%esi),%xmm0
5970	xorps	%xmm1,%xmm5
5971	movups	64(%esi),%xmm7
5972	xorps	%xmm0,%xmm6
5973	movups	%xmm2,(%edi)
5974	movups	%xmm3,16(%edi)
5975	pxor	%xmm3,%xmm3
5976	movups	%xmm4,32(%edi)
5977	pxor	%xmm4,%xmm4
5978	movups	%xmm5,48(%edi)
5979	pxor	%xmm5,%xmm5
5980	leal	64(%edi),%edi
5981	movaps	%xmm6,%xmm2
5982	pxor	%xmm6,%xmm6
5983	subl	$80,%eax
5984	jmp	.L108cbc_dec_tail_collected
5985.align	16
5986.L104cbc_dec_one:
5987	movups	(%edx),%xmm0
5988	movups	16(%edx),%xmm1
5989	leal	32(%edx),%edx
5990	xorps	%xmm0,%xmm2
5991.L109dec1_loop_20:
5992.byte	102,15,56,222,209
5993	decl	%ecx
5994	movups	(%edx),%xmm1
5995	leal	16(%edx),%edx
5996	jnz	.L109dec1_loop_20
5997.byte	102,15,56,223,209
5998	xorps	%xmm7,%xmm2
5999	movaps	%xmm6,%xmm7
6000	subl	$16,%eax
6001	jmp	.L108cbc_dec_tail_collected
6002.align	16
6003.L105cbc_dec_two:
6004	call	_aesni_decrypt2
6005	xorps	%xmm7,%xmm2
6006	xorps	%xmm6,%xmm3
6007	movups	%xmm2,(%edi)
6008	movaps	%xmm3,%xmm2
6009	pxor	%xmm3,%xmm3
6010	leal	16(%edi),%edi
6011	movaps	%xmm5,%xmm7
6012	subl	$32,%eax
6013	jmp	.L108cbc_dec_tail_collected
6014.align	16
6015.L106cbc_dec_three:
6016	call	_aesni_decrypt3
6017	xorps	%xmm7,%xmm2
6018	xorps	%xmm6,%xmm3
6019	xorps	%xmm5,%xmm4
6020	movups	%xmm2,(%edi)
6021	movaps	%xmm4,%xmm2
6022	pxor	%xmm4,%xmm4
6023	movups	%xmm3,16(%edi)
6024	pxor	%xmm3,%xmm3
6025	leal	32(%edi),%edi
6026	movups	32(%esi),%xmm7
6027	subl	$48,%eax
6028	jmp	.L108cbc_dec_tail_collected
6029.align	16
6030.L107cbc_dec_four:
6031	call	_aesni_decrypt4
6032	movups	16(%esi),%xmm1
6033	movups	32(%esi),%xmm0
6034	xorps	%xmm7,%xmm2
6035	movups	48(%esi),%xmm7
6036	xorps	%xmm6,%xmm3
6037	movups	%xmm2,(%edi)
6038	xorps	%xmm1,%xmm4
6039	movups	%xmm3,16(%edi)
6040	pxor	%xmm3,%xmm3
6041	xorps	%xmm0,%xmm5
6042	movups	%xmm4,32(%edi)
6043	pxor	%xmm4,%xmm4
6044	leal	48(%edi),%edi
6045	movaps	%xmm5,%xmm2
6046	pxor	%xmm5,%xmm5
6047	subl	$64,%eax
6048	jmp	.L108cbc_dec_tail_collected
6049.align	16
6050.L103cbc_dec_clear_tail_collected:
6051	pxor	%xmm3,%xmm3
6052	pxor	%xmm4,%xmm4
6053	pxor	%xmm5,%xmm5
6054	pxor	%xmm6,%xmm6
6055.L108cbc_dec_tail_collected:
6056	andl	$15,%eax
6057	jnz	.L110cbc_dec_tail_partial
6058	movups	%xmm2,(%edi)
6059	pxor	%xmm0,%xmm0
6060	jmp	.L099cbc_ret
6061.align	16
6062.L110cbc_dec_tail_partial:
6063	movaps	%xmm2,(%esp)
6064	pxor	%xmm0,%xmm0
6065	movl	$16,%ecx
6066	movl	%esp,%esi
6067	subl	%eax,%ecx
6068.long	2767451785
6069	movdqa	%xmm2,(%esp)
6070.L099cbc_ret:
6071	movl	16(%esp),%esp
6072	movl	36(%esp),%ebp
6073	pxor	%xmm2,%xmm2
6074	pxor	%xmm1,%xmm1
6075	movups	%xmm7,(%ebp)
6076	pxor	%xmm7,%xmm7
6077.L094cbc_abort:
6078	popl	%edi
6079	popl	%esi
6080	popl	%ebx
6081	popl	%ebp
6082	ret
6083.size	aesni_cbc_encrypt,.-.L_aesni_cbc_encrypt_begin
6084.type	_aesni_set_encrypt_key,@function
6085.align	16
6086_aesni_set_encrypt_key:
6087	pushl	%ebp
6088	pushl	%ebx
6089	testl	%eax,%eax
6090	jz	.L111bad_pointer
6091	testl	%edx,%edx
6092	jz	.L111bad_pointer
6093	call	.L112pic
6094.L112pic:
6095	popl	%ebx
6096	leal	.Lkey_const-.L112pic(%ebx),%ebx
6097	leal	OPENSSL_ia32cap_P,%ebp
6098	movups	(%eax),%xmm0
6099	xorps	%xmm4,%xmm4
6100	movl	4(%ebp),%ebp
6101	leal	16(%edx),%edx
6102	andl	$268437504,%ebp
6103	cmpl	$256,%ecx
6104	je	.L11314rounds
6105	cmpl	$192,%ecx
6106	je	.L11412rounds
6107	cmpl	$128,%ecx
6108	jne	.L115bad_keybits
6109.align	16
6110.L11610rounds:
6111	cmpl	$268435456,%ebp
6112	je	.L11710rounds_alt
6113	movl	$9,%ecx
6114	movups	%xmm0,-16(%edx)
6115.byte	102,15,58,223,200,1
6116	call	.L118key_128_cold
6117.byte	102,15,58,223,200,2
6118	call	.L119key_128
6119.byte	102,15,58,223,200,4
6120	call	.L119key_128
6121.byte	102,15,58,223,200,8
6122	call	.L119key_128
6123.byte	102,15,58,223,200,16
6124	call	.L119key_128
6125.byte	102,15,58,223,200,32
6126	call	.L119key_128
6127.byte	102,15,58,223,200,64
6128	call	.L119key_128
6129.byte	102,15,58,223,200,128
6130	call	.L119key_128
6131.byte	102,15,58,223,200,27
6132	call	.L119key_128
6133.byte	102,15,58,223,200,54
6134	call	.L119key_128
6135	movups	%xmm0,(%edx)
6136	movl	%ecx,80(%edx)
6137	jmp	.L120good_key
6138.align	16
6139.L119key_128:
6140	movups	%xmm0,(%edx)
6141	leal	16(%edx),%edx
6142.L118key_128_cold:
6143	shufps	$16,%xmm0,%xmm4
6144	xorps	%xmm4,%xmm0
6145	shufps	$140,%xmm0,%xmm4
6146	xorps	%xmm4,%xmm0
6147	shufps	$255,%xmm1,%xmm1
6148	xorps	%xmm1,%xmm0
6149	ret
6150.align	16
6151.L11710rounds_alt:
6152	movdqa	(%ebx),%xmm5
6153	movl	$8,%ecx
6154	movdqa	32(%ebx),%xmm4
6155	movdqa	%xmm0,%xmm2
6156	movdqu	%xmm0,-16(%edx)
6157.L121loop_key128:
6158.byte	102,15,56,0,197
6159.byte	102,15,56,221,196
6160	pslld	$1,%xmm4
6161	leal	16(%edx),%edx
6162	movdqa	%xmm2,%xmm3
6163	pslldq	$4,%xmm2
6164	pxor	%xmm2,%xmm3
6165	pslldq	$4,%xmm2
6166	pxor	%xmm2,%xmm3
6167	pslldq	$4,%xmm2
6168	pxor	%xmm3,%xmm2
6169	pxor	%xmm2,%xmm0
6170	movdqu	%xmm0,-16(%edx)
6171	movdqa	%xmm0,%xmm2
6172	decl	%ecx
6173	jnz	.L121loop_key128
6174	movdqa	48(%ebx),%xmm4
6175.byte	102,15,56,0,197
6176.byte	102,15,56,221,196
6177	pslld	$1,%xmm4
6178	movdqa	%xmm2,%xmm3
6179	pslldq	$4,%xmm2
6180	pxor	%xmm2,%xmm3
6181	pslldq	$4,%xmm2
6182	pxor	%xmm2,%xmm3
6183	pslldq	$4,%xmm2
6184	pxor	%xmm3,%xmm2
6185	pxor	%xmm2,%xmm0
6186	movdqu	%xmm0,(%edx)
6187	movdqa	%xmm0,%xmm2
6188.byte	102,15,56,0,197
6189.byte	102,15,56,221,196
6190	movdqa	%xmm2,%xmm3
6191	pslldq	$4,%xmm2
6192	pxor	%xmm2,%xmm3
6193	pslldq	$4,%xmm2
6194	pxor	%xmm2,%xmm3
6195	pslldq	$4,%xmm2
6196	pxor	%xmm3,%xmm2
6197	pxor	%xmm2,%xmm0
6198	movdqu	%xmm0,16(%edx)
6199	movl	$9,%ecx
6200	movl	%ecx,96(%edx)
6201	jmp	.L120good_key
6202.align	16
6203.L11412rounds:
6204	movq	16(%eax),%xmm2
6205	cmpl	$268435456,%ebp
6206	je	.L12212rounds_alt
6207	movl	$11,%ecx
6208	movups	%xmm0,-16(%edx)
6209.byte	102,15,58,223,202,1
6210	call	.L123key_192a_cold
6211.byte	102,15,58,223,202,2
6212	call	.L124key_192b
6213.byte	102,15,58,223,202,4
6214	call	.L125key_192a
6215.byte	102,15,58,223,202,8
6216	call	.L124key_192b
6217.byte	102,15,58,223,202,16
6218	call	.L125key_192a
6219.byte	102,15,58,223,202,32
6220	call	.L124key_192b
6221.byte	102,15,58,223,202,64
6222	call	.L125key_192a
6223.byte	102,15,58,223,202,128
6224	call	.L124key_192b
6225	movups	%xmm0,(%edx)
6226	movl	%ecx,48(%edx)
6227	jmp	.L120good_key
6228.align	16
6229.L125key_192a:
6230	movups	%xmm0,(%edx)
6231	leal	16(%edx),%edx
6232.align	16
6233.L123key_192a_cold:
6234	movaps	%xmm2,%xmm5
6235.L126key_192b_warm:
6236	shufps	$16,%xmm0,%xmm4
6237	movdqa	%xmm2,%xmm3
6238	xorps	%xmm4,%xmm0
6239	shufps	$140,%xmm0,%xmm4
6240	pslldq	$4,%xmm3
6241	xorps	%xmm4,%xmm0
6242	pshufd	$85,%xmm1,%xmm1
6243	pxor	%xmm3,%xmm2
6244	pxor	%xmm1,%xmm0
6245	pshufd	$255,%xmm0,%xmm3
6246	pxor	%xmm3,%xmm2
6247	ret
6248.align	16
6249.L124key_192b:
6250	movaps	%xmm0,%xmm3
6251	shufps	$68,%xmm0,%xmm5
6252	movups	%xmm5,(%edx)
6253	shufps	$78,%xmm2,%xmm3
6254	movups	%xmm3,16(%edx)
6255	leal	32(%edx),%edx
6256	jmp	.L126key_192b_warm
6257.align	16
6258.L12212rounds_alt:
6259	movdqa	16(%ebx),%xmm5
6260	movdqa	32(%ebx),%xmm4
6261	movl	$8,%ecx
6262	movdqu	%xmm0,-16(%edx)
6263.L127loop_key192:
6264	movq	%xmm2,(%edx)
6265	movdqa	%xmm2,%xmm1
6266.byte	102,15,56,0,213
6267.byte	102,15,56,221,212
6268	pslld	$1,%xmm4
6269	leal	24(%edx),%edx
6270	movdqa	%xmm0,%xmm3
6271	pslldq	$4,%xmm0
6272	pxor	%xmm0,%xmm3
6273	pslldq	$4,%xmm0
6274	pxor	%xmm0,%xmm3
6275	pslldq	$4,%xmm0
6276	pxor	%xmm3,%xmm0
6277	pshufd	$255,%xmm0,%xmm3
6278	pxor	%xmm1,%xmm3
6279	pslldq	$4,%xmm1
6280	pxor	%xmm1,%xmm3
6281	pxor	%xmm2,%xmm0
6282	pxor	%xmm3,%xmm2
6283	movdqu	%xmm0,-16(%edx)
6284	decl	%ecx
6285	jnz	.L127loop_key192
6286	movl	$11,%ecx
6287	movl	%ecx,32(%edx)
6288	jmp	.L120good_key
6289.align	16
6290.L11314rounds:
6291	movups	16(%eax),%xmm2
6292	leal	16(%edx),%edx
6293	cmpl	$268435456,%ebp
6294	je	.L12814rounds_alt
6295	movl	$13,%ecx
6296	movups	%xmm0,-32(%edx)
6297	movups	%xmm2,-16(%edx)
6298.byte	102,15,58,223,202,1
6299	call	.L129key_256a_cold
6300.byte	102,15,58,223,200,1
6301	call	.L130key_256b
6302.byte	102,15,58,223,202,2
6303	call	.L131key_256a
6304.byte	102,15,58,223,200,2
6305	call	.L130key_256b
6306.byte	102,15,58,223,202,4
6307	call	.L131key_256a
6308.byte	102,15,58,223,200,4
6309	call	.L130key_256b
6310.byte	102,15,58,223,202,8
6311	call	.L131key_256a
6312.byte	102,15,58,223,200,8
6313	call	.L130key_256b
6314.byte	102,15,58,223,202,16
6315	call	.L131key_256a
6316.byte	102,15,58,223,200,16
6317	call	.L130key_256b
6318.byte	102,15,58,223,202,32
6319	call	.L131key_256a
6320.byte	102,15,58,223,200,32
6321	call	.L130key_256b
6322.byte	102,15,58,223,202,64
6323	call	.L131key_256a
6324	movups	%xmm0,(%edx)
6325	movl	%ecx,16(%edx)
6326	xorl	%eax,%eax
6327	jmp	.L120good_key
6328.align	16
6329.L131key_256a:
6330	movups	%xmm2,(%edx)
6331	leal	16(%edx),%edx
6332.L129key_256a_cold:
6333	shufps	$16,%xmm0,%xmm4
6334	xorps	%xmm4,%xmm0
6335	shufps	$140,%xmm0,%xmm4
6336	xorps	%xmm4,%xmm0
6337	shufps	$255,%xmm1,%xmm1
6338	xorps	%xmm1,%xmm0
6339	ret
6340.align	16
6341.L130key_256b:
6342	movups	%xmm0,(%edx)
6343	leal	16(%edx),%edx
6344	shufps	$16,%xmm2,%xmm4
6345	xorps	%xmm4,%xmm2
6346	shufps	$140,%xmm2,%xmm4
6347	xorps	%xmm4,%xmm2
6348	shufps	$170,%xmm1,%xmm1
6349	xorps	%xmm1,%xmm2
6350	ret
6351.align	16
6352.L12814rounds_alt:
6353	movdqa	(%ebx),%xmm5
6354	movdqa	32(%ebx),%xmm4
6355	movl	$7,%ecx
6356	movdqu	%xmm0,-32(%edx)
6357	movdqa	%xmm2,%xmm1
6358	movdqu	%xmm2,-16(%edx)
6359.L132loop_key256:
6360.byte	102,15,56,0,213
6361.byte	102,15,56,221,212
6362	movdqa	%xmm0,%xmm3
6363	pslldq	$4,%xmm0
6364	pxor	%xmm0,%xmm3
6365	pslldq	$4,%xmm0
6366	pxor	%xmm0,%xmm3
6367	pslldq	$4,%xmm0
6368	pxor	%xmm3,%xmm0
6369	pslld	$1,%xmm4
6370	pxor	%xmm2,%xmm0
6371	movdqu	%xmm0,(%edx)
6372	decl	%ecx
6373	jz	.L133done_key256
6374	pshufd	$255,%xmm0,%xmm2
6375	pxor	%xmm3,%xmm3
6376.byte	102,15,56,221,211
6377	movdqa	%xmm1,%xmm3
6378	pslldq	$4,%xmm1
6379	pxor	%xmm1,%xmm3
6380	pslldq	$4,%xmm1
6381	pxor	%xmm1,%xmm3
6382	pslldq	$4,%xmm1
6383	pxor	%xmm3,%xmm1
6384	pxor	%xmm1,%xmm2
6385	movdqu	%xmm2,16(%edx)
6386	leal	32(%edx),%edx
6387	movdqa	%xmm2,%xmm1
6388	jmp	.L132loop_key256
6389.L133done_key256:
6390	movl	$13,%ecx
6391	movl	%ecx,16(%edx)
6392.L120good_key:
6393	pxor	%xmm0,%xmm0
6394	pxor	%xmm1,%xmm1
6395	pxor	%xmm2,%xmm2
6396	pxor	%xmm3,%xmm3
6397	pxor	%xmm4,%xmm4
6398	pxor	%xmm5,%xmm5
6399	xorl	%eax,%eax
6400	popl	%ebx
6401	popl	%ebp
6402	ret
6403.align	4
6404.L111bad_pointer:
6405	movl	$-1,%eax
6406	popl	%ebx
6407	popl	%ebp
6408	ret
6409.align	4
6410.L115bad_keybits:
6411	pxor	%xmm0,%xmm0
6412	movl	$-2,%eax
6413	popl	%ebx
6414	popl	%ebp
6415	ret
6416.size	_aesni_set_encrypt_key,.-_aesni_set_encrypt_key
6417.globl	aesni_set_encrypt_key
6418.type	aesni_set_encrypt_key,@function
6419.align	16
6420aesni_set_encrypt_key:
6421.L_aesni_set_encrypt_key_begin:
6422	movl	4(%esp),%eax
6423	movl	8(%esp),%ecx
6424	movl	12(%esp),%edx
6425	call	_aesni_set_encrypt_key
6426	ret
6427.size	aesni_set_encrypt_key,.-.L_aesni_set_encrypt_key_begin
6428.globl	aesni_set_decrypt_key
6429.type	aesni_set_decrypt_key,@function
6430.align	16
6431aesni_set_decrypt_key:
6432.L_aesni_set_decrypt_key_begin:
6433	movl	4(%esp),%eax
6434	movl	8(%esp),%ecx
6435	movl	12(%esp),%edx
6436	call	_aesni_set_encrypt_key
6437	movl	12(%esp),%edx
6438	shll	$4,%ecx
6439	testl	%eax,%eax
6440	jnz	.L134dec_key_ret
6441	leal	16(%edx,%ecx,1),%eax
6442	movups	(%edx),%xmm0
6443	movups	(%eax),%xmm1
6444	movups	%xmm0,(%eax)
6445	movups	%xmm1,(%edx)
6446	leal	16(%edx),%edx
6447	leal	-16(%eax),%eax
6448.L135dec_key_inverse:
6449	movups	(%edx),%xmm0
6450	movups	(%eax),%xmm1
6451.byte	102,15,56,219,192
6452.byte	102,15,56,219,201
6453	leal	16(%edx),%edx
6454	leal	-16(%eax),%eax
6455	movups	%xmm0,16(%eax)
6456	movups	%xmm1,-16(%edx)
6457	cmpl	%edx,%eax
6458	ja	.L135dec_key_inverse
6459	movups	(%edx),%xmm0
6460.byte	102,15,56,219,192
6461	movups	%xmm0,(%edx)
6462	pxor	%xmm0,%xmm0
6463	pxor	%xmm1,%xmm1
6464	xorl	%eax,%eax
6465.L134dec_key_ret:
6466	ret
6467.size	aesni_set_decrypt_key,.-.L_aesni_set_decrypt_key_begin
6468.align	64
6469.Lkey_const:
6470.long	202313229,202313229,202313229,202313229
6471.long	67569157,67569157,67569157,67569157
6472.long	1,1,1,1
6473.long	27,27,27,27
6474.byte	65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69
6475.byte	83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83
6476.byte	32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
6477.byte	115,108,46,111,114,103,62,0
6478.comm	OPENSSL_ia32cap_P,16,4
6479#endif
6480