xref: /aosp_15_r20/external/cronet/third_party/boringssl/src/gen/bcm/aesni-x86-linux.S (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1// This file is generated from a similarly-named Perl script in the BoringSSL
2// source tree. Do not edit by hand.
3
4#include <openssl/asm_base.h>
5
6#if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_X86) && defined(__ELF__)
7.text
8#ifdef BORINGSSL_DISPATCH_TEST
9#endif
10.globl	aes_hw_encrypt
11.hidden	aes_hw_encrypt
12.type	aes_hw_encrypt,@function
13.align	16
14aes_hw_encrypt:
15.L_aes_hw_encrypt_begin:
16#ifdef BORINGSSL_DISPATCH_TEST
17	pushl	%ebx
18	pushl	%edx
19	call	.L000pic
20.L000pic:
21	popl	%ebx
22	leal	BORINGSSL_function_hit+1-.L000pic(%ebx),%ebx
23	movl	$1,%edx
24	movb	%dl,(%ebx)
25	popl	%edx
26	popl	%ebx
27#endif
28	movl	4(%esp),%eax
29	movl	12(%esp),%edx
30	movups	(%eax),%xmm2
31	movl	240(%edx),%ecx
32	movl	8(%esp),%eax
33	movups	(%edx),%xmm0
34	movups	16(%edx),%xmm1
35	leal	32(%edx),%edx
36	xorps	%xmm0,%xmm2
37.L001enc1_loop_1:
38.byte	102,15,56,220,209
39	decl	%ecx
40	movups	(%edx),%xmm1
41	leal	16(%edx),%edx
42	jnz	.L001enc1_loop_1
43.byte	102,15,56,221,209
44	pxor	%xmm0,%xmm0
45	pxor	%xmm1,%xmm1
46	movups	%xmm2,(%eax)
47	pxor	%xmm2,%xmm2
48	ret
49.size	aes_hw_encrypt,.-.L_aes_hw_encrypt_begin
50.globl	aes_hw_decrypt
51.hidden	aes_hw_decrypt
52.type	aes_hw_decrypt,@function
53.align	16
54aes_hw_decrypt:
55.L_aes_hw_decrypt_begin:
56	movl	4(%esp),%eax
57	movl	12(%esp),%edx
58	movups	(%eax),%xmm2
59	movl	240(%edx),%ecx
60	movl	8(%esp),%eax
61	movups	(%edx),%xmm0
62	movups	16(%edx),%xmm1
63	leal	32(%edx),%edx
64	xorps	%xmm0,%xmm2
65.L002dec1_loop_2:
66.byte	102,15,56,222,209
67	decl	%ecx
68	movups	(%edx),%xmm1
69	leal	16(%edx),%edx
70	jnz	.L002dec1_loop_2
71.byte	102,15,56,223,209
72	pxor	%xmm0,%xmm0
73	pxor	%xmm1,%xmm1
74	movups	%xmm2,(%eax)
75	pxor	%xmm2,%xmm2
76	ret
77.size	aes_hw_decrypt,.-.L_aes_hw_decrypt_begin
78.hidden	_aesni_encrypt2
79.type	_aesni_encrypt2,@function
80.align	16
81_aesni_encrypt2:
82	movups	(%edx),%xmm0
83	shll	$4,%ecx
84	movups	16(%edx),%xmm1
85	xorps	%xmm0,%xmm2
86	pxor	%xmm0,%xmm3
87	movups	32(%edx),%xmm0
88	leal	32(%edx,%ecx,1),%edx
89	negl	%ecx
90	addl	$16,%ecx
91.L003enc2_loop:
92.byte	102,15,56,220,209
93.byte	102,15,56,220,217
94	movups	(%edx,%ecx,1),%xmm1
95	addl	$32,%ecx
96.byte	102,15,56,220,208
97.byte	102,15,56,220,216
98	movups	-16(%edx,%ecx,1),%xmm0
99	jnz	.L003enc2_loop
100.byte	102,15,56,220,209
101.byte	102,15,56,220,217
102.byte	102,15,56,221,208
103.byte	102,15,56,221,216
104	ret
105.size	_aesni_encrypt2,.-_aesni_encrypt2
106.hidden	_aesni_decrypt2
107.type	_aesni_decrypt2,@function
108.align	16
109_aesni_decrypt2:
110	movups	(%edx),%xmm0
111	shll	$4,%ecx
112	movups	16(%edx),%xmm1
113	xorps	%xmm0,%xmm2
114	pxor	%xmm0,%xmm3
115	movups	32(%edx),%xmm0
116	leal	32(%edx,%ecx,1),%edx
117	negl	%ecx
118	addl	$16,%ecx
119.L004dec2_loop:
120.byte	102,15,56,222,209
121.byte	102,15,56,222,217
122	movups	(%edx,%ecx,1),%xmm1
123	addl	$32,%ecx
124.byte	102,15,56,222,208
125.byte	102,15,56,222,216
126	movups	-16(%edx,%ecx,1),%xmm0
127	jnz	.L004dec2_loop
128.byte	102,15,56,222,209
129.byte	102,15,56,222,217
130.byte	102,15,56,223,208
131.byte	102,15,56,223,216
132	ret
133.size	_aesni_decrypt2,.-_aesni_decrypt2
134.hidden	_aesni_encrypt3
135.type	_aesni_encrypt3,@function
136.align	16
137_aesni_encrypt3:
138	movups	(%edx),%xmm0
139	shll	$4,%ecx
140	movups	16(%edx),%xmm1
141	xorps	%xmm0,%xmm2
142	pxor	%xmm0,%xmm3
143	pxor	%xmm0,%xmm4
144	movups	32(%edx),%xmm0
145	leal	32(%edx,%ecx,1),%edx
146	negl	%ecx
147	addl	$16,%ecx
148.L005enc3_loop:
149.byte	102,15,56,220,209
150.byte	102,15,56,220,217
151.byte	102,15,56,220,225
152	movups	(%edx,%ecx,1),%xmm1
153	addl	$32,%ecx
154.byte	102,15,56,220,208
155.byte	102,15,56,220,216
156.byte	102,15,56,220,224
157	movups	-16(%edx,%ecx,1),%xmm0
158	jnz	.L005enc3_loop
159.byte	102,15,56,220,209
160.byte	102,15,56,220,217
161.byte	102,15,56,220,225
162.byte	102,15,56,221,208
163.byte	102,15,56,221,216
164.byte	102,15,56,221,224
165	ret
166.size	_aesni_encrypt3,.-_aesni_encrypt3
167.hidden	_aesni_decrypt3
168.type	_aesni_decrypt3,@function
169.align	16
170_aesni_decrypt3:
171	movups	(%edx),%xmm0
172	shll	$4,%ecx
173	movups	16(%edx),%xmm1
174	xorps	%xmm0,%xmm2
175	pxor	%xmm0,%xmm3
176	pxor	%xmm0,%xmm4
177	movups	32(%edx),%xmm0
178	leal	32(%edx,%ecx,1),%edx
179	negl	%ecx
180	addl	$16,%ecx
181.L006dec3_loop:
182.byte	102,15,56,222,209
183.byte	102,15,56,222,217
184.byte	102,15,56,222,225
185	movups	(%edx,%ecx,1),%xmm1
186	addl	$32,%ecx
187.byte	102,15,56,222,208
188.byte	102,15,56,222,216
189.byte	102,15,56,222,224
190	movups	-16(%edx,%ecx,1),%xmm0
191	jnz	.L006dec3_loop
192.byte	102,15,56,222,209
193.byte	102,15,56,222,217
194.byte	102,15,56,222,225
195.byte	102,15,56,223,208
196.byte	102,15,56,223,216
197.byte	102,15,56,223,224
198	ret
199.size	_aesni_decrypt3,.-_aesni_decrypt3
200.hidden	_aesni_encrypt4
201.type	_aesni_encrypt4,@function
202.align	16
203_aesni_encrypt4:
204	movups	(%edx),%xmm0
205	movups	16(%edx),%xmm1
206	shll	$4,%ecx
207	xorps	%xmm0,%xmm2
208	pxor	%xmm0,%xmm3
209	pxor	%xmm0,%xmm4
210	pxor	%xmm0,%xmm5
211	movups	32(%edx),%xmm0
212	leal	32(%edx,%ecx,1),%edx
213	negl	%ecx
214.byte	15,31,64,0
215	addl	$16,%ecx
216.L007enc4_loop:
217.byte	102,15,56,220,209
218.byte	102,15,56,220,217
219.byte	102,15,56,220,225
220.byte	102,15,56,220,233
221	movups	(%edx,%ecx,1),%xmm1
222	addl	$32,%ecx
223.byte	102,15,56,220,208
224.byte	102,15,56,220,216
225.byte	102,15,56,220,224
226.byte	102,15,56,220,232
227	movups	-16(%edx,%ecx,1),%xmm0
228	jnz	.L007enc4_loop
229.byte	102,15,56,220,209
230.byte	102,15,56,220,217
231.byte	102,15,56,220,225
232.byte	102,15,56,220,233
233.byte	102,15,56,221,208
234.byte	102,15,56,221,216
235.byte	102,15,56,221,224
236.byte	102,15,56,221,232
237	ret
238.size	_aesni_encrypt4,.-_aesni_encrypt4
239.hidden	_aesni_decrypt4
240.type	_aesni_decrypt4,@function
241.align	16
242_aesni_decrypt4:
243	movups	(%edx),%xmm0
244	movups	16(%edx),%xmm1
245	shll	$4,%ecx
246	xorps	%xmm0,%xmm2
247	pxor	%xmm0,%xmm3
248	pxor	%xmm0,%xmm4
249	pxor	%xmm0,%xmm5
250	movups	32(%edx),%xmm0
251	leal	32(%edx,%ecx,1),%edx
252	negl	%ecx
253.byte	15,31,64,0
254	addl	$16,%ecx
255.L008dec4_loop:
256.byte	102,15,56,222,209
257.byte	102,15,56,222,217
258.byte	102,15,56,222,225
259.byte	102,15,56,222,233
260	movups	(%edx,%ecx,1),%xmm1
261	addl	$32,%ecx
262.byte	102,15,56,222,208
263.byte	102,15,56,222,216
264.byte	102,15,56,222,224
265.byte	102,15,56,222,232
266	movups	-16(%edx,%ecx,1),%xmm0
267	jnz	.L008dec4_loop
268.byte	102,15,56,222,209
269.byte	102,15,56,222,217
270.byte	102,15,56,222,225
271.byte	102,15,56,222,233
272.byte	102,15,56,223,208
273.byte	102,15,56,223,216
274.byte	102,15,56,223,224
275.byte	102,15,56,223,232
276	ret
277.size	_aesni_decrypt4,.-_aesni_decrypt4
278.hidden	_aesni_encrypt6
279.type	_aesni_encrypt6,@function
280.align	16
281_aesni_encrypt6:
282	movups	(%edx),%xmm0
283	shll	$4,%ecx
284	movups	16(%edx),%xmm1
285	xorps	%xmm0,%xmm2
286	pxor	%xmm0,%xmm3
287	pxor	%xmm0,%xmm4
288.byte	102,15,56,220,209
289	pxor	%xmm0,%xmm5
290	pxor	%xmm0,%xmm6
291.byte	102,15,56,220,217
292	leal	32(%edx,%ecx,1),%edx
293	negl	%ecx
294.byte	102,15,56,220,225
295	pxor	%xmm0,%xmm7
296	movups	(%edx,%ecx,1),%xmm0
297	addl	$16,%ecx
298	jmp	.L009_aesni_encrypt6_inner
299.align	16
300.L010enc6_loop:
301.byte	102,15,56,220,209
302.byte	102,15,56,220,217
303.byte	102,15,56,220,225
304.L009_aesni_encrypt6_inner:
305.byte	102,15,56,220,233
306.byte	102,15,56,220,241
307.byte	102,15,56,220,249
308.L_aesni_encrypt6_enter:
309	movups	(%edx,%ecx,1),%xmm1
310	addl	$32,%ecx
311.byte	102,15,56,220,208
312.byte	102,15,56,220,216
313.byte	102,15,56,220,224
314.byte	102,15,56,220,232
315.byte	102,15,56,220,240
316.byte	102,15,56,220,248
317	movups	-16(%edx,%ecx,1),%xmm0
318	jnz	.L010enc6_loop
319.byte	102,15,56,220,209
320.byte	102,15,56,220,217
321.byte	102,15,56,220,225
322.byte	102,15,56,220,233
323.byte	102,15,56,220,241
324.byte	102,15,56,220,249
325.byte	102,15,56,221,208
326.byte	102,15,56,221,216
327.byte	102,15,56,221,224
328.byte	102,15,56,221,232
329.byte	102,15,56,221,240
330.byte	102,15,56,221,248
331	ret
332.size	_aesni_encrypt6,.-_aesni_encrypt6
333.hidden	_aesni_decrypt6
334.type	_aesni_decrypt6,@function
335.align	16
336_aesni_decrypt6:
337	movups	(%edx),%xmm0
338	shll	$4,%ecx
339	movups	16(%edx),%xmm1
340	xorps	%xmm0,%xmm2
341	pxor	%xmm0,%xmm3
342	pxor	%xmm0,%xmm4
343.byte	102,15,56,222,209
344	pxor	%xmm0,%xmm5
345	pxor	%xmm0,%xmm6
346.byte	102,15,56,222,217
347	leal	32(%edx,%ecx,1),%edx
348	negl	%ecx
349.byte	102,15,56,222,225
350	pxor	%xmm0,%xmm7
351	movups	(%edx,%ecx,1),%xmm0
352	addl	$16,%ecx
353	jmp	.L011_aesni_decrypt6_inner
354.align	16
355.L012dec6_loop:
356.byte	102,15,56,222,209
357.byte	102,15,56,222,217
358.byte	102,15,56,222,225
359.L011_aesni_decrypt6_inner:
360.byte	102,15,56,222,233
361.byte	102,15,56,222,241
362.byte	102,15,56,222,249
363.L_aesni_decrypt6_enter:
364	movups	(%edx,%ecx,1),%xmm1
365	addl	$32,%ecx
366.byte	102,15,56,222,208
367.byte	102,15,56,222,216
368.byte	102,15,56,222,224
369.byte	102,15,56,222,232
370.byte	102,15,56,222,240
371.byte	102,15,56,222,248
372	movups	-16(%edx,%ecx,1),%xmm0
373	jnz	.L012dec6_loop
374.byte	102,15,56,222,209
375.byte	102,15,56,222,217
376.byte	102,15,56,222,225
377.byte	102,15,56,222,233
378.byte	102,15,56,222,241
379.byte	102,15,56,222,249
380.byte	102,15,56,223,208
381.byte	102,15,56,223,216
382.byte	102,15,56,223,224
383.byte	102,15,56,223,232
384.byte	102,15,56,223,240
385.byte	102,15,56,223,248
386	ret
387.size	_aesni_decrypt6,.-_aesni_decrypt6
388.globl	aes_hw_ecb_encrypt
389.hidden	aes_hw_ecb_encrypt
390.type	aes_hw_ecb_encrypt,@function
391.align	16
392aes_hw_ecb_encrypt:
393.L_aes_hw_ecb_encrypt_begin:
394	pushl	%ebp
395	pushl	%ebx
396	pushl	%esi
397	pushl	%edi
398	movl	20(%esp),%esi
399	movl	24(%esp),%edi
400	movl	28(%esp),%eax
401	movl	32(%esp),%edx
402	movl	36(%esp),%ebx
403	andl	$-16,%eax
404	jz	.L013ecb_ret
405	movl	240(%edx),%ecx
406	testl	%ebx,%ebx
407	jz	.L014ecb_decrypt
408	movl	%edx,%ebp
409	movl	%ecx,%ebx
410	cmpl	$96,%eax
411	jb	.L015ecb_enc_tail
412	movdqu	(%esi),%xmm2
413	movdqu	16(%esi),%xmm3
414	movdqu	32(%esi),%xmm4
415	movdqu	48(%esi),%xmm5
416	movdqu	64(%esi),%xmm6
417	movdqu	80(%esi),%xmm7
418	leal	96(%esi),%esi
419	subl	$96,%eax
420	jmp	.L016ecb_enc_loop6_enter
421.align	16
422.L017ecb_enc_loop6:
423	movups	%xmm2,(%edi)
424	movdqu	(%esi),%xmm2
425	movups	%xmm3,16(%edi)
426	movdqu	16(%esi),%xmm3
427	movups	%xmm4,32(%edi)
428	movdqu	32(%esi),%xmm4
429	movups	%xmm5,48(%edi)
430	movdqu	48(%esi),%xmm5
431	movups	%xmm6,64(%edi)
432	movdqu	64(%esi),%xmm6
433	movups	%xmm7,80(%edi)
434	leal	96(%edi),%edi
435	movdqu	80(%esi),%xmm7
436	leal	96(%esi),%esi
437.L016ecb_enc_loop6_enter:
438	call	_aesni_encrypt6
439	movl	%ebp,%edx
440	movl	%ebx,%ecx
441	subl	$96,%eax
442	jnc	.L017ecb_enc_loop6
443	movups	%xmm2,(%edi)
444	movups	%xmm3,16(%edi)
445	movups	%xmm4,32(%edi)
446	movups	%xmm5,48(%edi)
447	movups	%xmm6,64(%edi)
448	movups	%xmm7,80(%edi)
449	leal	96(%edi),%edi
450	addl	$96,%eax
451	jz	.L013ecb_ret
452.L015ecb_enc_tail:
453	movups	(%esi),%xmm2
454	cmpl	$32,%eax
455	jb	.L018ecb_enc_one
456	movups	16(%esi),%xmm3
457	je	.L019ecb_enc_two
458	movups	32(%esi),%xmm4
459	cmpl	$64,%eax
460	jb	.L020ecb_enc_three
461	movups	48(%esi),%xmm5
462	je	.L021ecb_enc_four
463	movups	64(%esi),%xmm6
464	xorps	%xmm7,%xmm7
465	call	_aesni_encrypt6
466	movups	%xmm2,(%edi)
467	movups	%xmm3,16(%edi)
468	movups	%xmm4,32(%edi)
469	movups	%xmm5,48(%edi)
470	movups	%xmm6,64(%edi)
471	jmp	.L013ecb_ret
472.align	16
473.L018ecb_enc_one:
474	movups	(%edx),%xmm0
475	movups	16(%edx),%xmm1
476	leal	32(%edx),%edx
477	xorps	%xmm0,%xmm2
478.L022enc1_loop_3:
479.byte	102,15,56,220,209
480	decl	%ecx
481	movups	(%edx),%xmm1
482	leal	16(%edx),%edx
483	jnz	.L022enc1_loop_3
484.byte	102,15,56,221,209
485	movups	%xmm2,(%edi)
486	jmp	.L013ecb_ret
487.align	16
488.L019ecb_enc_two:
489	call	_aesni_encrypt2
490	movups	%xmm2,(%edi)
491	movups	%xmm3,16(%edi)
492	jmp	.L013ecb_ret
493.align	16
494.L020ecb_enc_three:
495	call	_aesni_encrypt3
496	movups	%xmm2,(%edi)
497	movups	%xmm3,16(%edi)
498	movups	%xmm4,32(%edi)
499	jmp	.L013ecb_ret
500.align	16
501.L021ecb_enc_four:
502	call	_aesni_encrypt4
503	movups	%xmm2,(%edi)
504	movups	%xmm3,16(%edi)
505	movups	%xmm4,32(%edi)
506	movups	%xmm5,48(%edi)
507	jmp	.L013ecb_ret
508.align	16
509.L014ecb_decrypt:
510	movl	%edx,%ebp
511	movl	%ecx,%ebx
512	cmpl	$96,%eax
513	jb	.L023ecb_dec_tail
514	movdqu	(%esi),%xmm2
515	movdqu	16(%esi),%xmm3
516	movdqu	32(%esi),%xmm4
517	movdqu	48(%esi),%xmm5
518	movdqu	64(%esi),%xmm6
519	movdqu	80(%esi),%xmm7
520	leal	96(%esi),%esi
521	subl	$96,%eax
522	jmp	.L024ecb_dec_loop6_enter
523.align	16
524.L025ecb_dec_loop6:
525	movups	%xmm2,(%edi)
526	movdqu	(%esi),%xmm2
527	movups	%xmm3,16(%edi)
528	movdqu	16(%esi),%xmm3
529	movups	%xmm4,32(%edi)
530	movdqu	32(%esi),%xmm4
531	movups	%xmm5,48(%edi)
532	movdqu	48(%esi),%xmm5
533	movups	%xmm6,64(%edi)
534	movdqu	64(%esi),%xmm6
535	movups	%xmm7,80(%edi)
536	leal	96(%edi),%edi
537	movdqu	80(%esi),%xmm7
538	leal	96(%esi),%esi
539.L024ecb_dec_loop6_enter:
540	call	_aesni_decrypt6
541	movl	%ebp,%edx
542	movl	%ebx,%ecx
543	subl	$96,%eax
544	jnc	.L025ecb_dec_loop6
545	movups	%xmm2,(%edi)
546	movups	%xmm3,16(%edi)
547	movups	%xmm4,32(%edi)
548	movups	%xmm5,48(%edi)
549	movups	%xmm6,64(%edi)
550	movups	%xmm7,80(%edi)
551	leal	96(%edi),%edi
552	addl	$96,%eax
553	jz	.L013ecb_ret
554.L023ecb_dec_tail:
555	movups	(%esi),%xmm2
556	cmpl	$32,%eax
557	jb	.L026ecb_dec_one
558	movups	16(%esi),%xmm3
559	je	.L027ecb_dec_two
560	movups	32(%esi),%xmm4
561	cmpl	$64,%eax
562	jb	.L028ecb_dec_three
563	movups	48(%esi),%xmm5
564	je	.L029ecb_dec_four
565	movups	64(%esi),%xmm6
566	xorps	%xmm7,%xmm7
567	call	_aesni_decrypt6
568	movups	%xmm2,(%edi)
569	movups	%xmm3,16(%edi)
570	movups	%xmm4,32(%edi)
571	movups	%xmm5,48(%edi)
572	movups	%xmm6,64(%edi)
573	jmp	.L013ecb_ret
574.align	16
575.L026ecb_dec_one:
576	movups	(%edx),%xmm0
577	movups	16(%edx),%xmm1
578	leal	32(%edx),%edx
579	xorps	%xmm0,%xmm2
580.L030dec1_loop_4:
581.byte	102,15,56,222,209
582	decl	%ecx
583	movups	(%edx),%xmm1
584	leal	16(%edx),%edx
585	jnz	.L030dec1_loop_4
586.byte	102,15,56,223,209
587	movups	%xmm2,(%edi)
588	jmp	.L013ecb_ret
589.align	16
590.L027ecb_dec_two:
591	call	_aesni_decrypt2
592	movups	%xmm2,(%edi)
593	movups	%xmm3,16(%edi)
594	jmp	.L013ecb_ret
595.align	16
596.L028ecb_dec_three:
597	call	_aesni_decrypt3
598	movups	%xmm2,(%edi)
599	movups	%xmm3,16(%edi)
600	movups	%xmm4,32(%edi)
601	jmp	.L013ecb_ret
602.align	16
603.L029ecb_dec_four:
604	call	_aesni_decrypt4
605	movups	%xmm2,(%edi)
606	movups	%xmm3,16(%edi)
607	movups	%xmm4,32(%edi)
608	movups	%xmm5,48(%edi)
609.L013ecb_ret:
610	pxor	%xmm0,%xmm0
611	pxor	%xmm1,%xmm1
612	pxor	%xmm2,%xmm2
613	pxor	%xmm3,%xmm3
614	pxor	%xmm4,%xmm4
615	pxor	%xmm5,%xmm5
616	pxor	%xmm6,%xmm6
617	pxor	%xmm7,%xmm7
618	popl	%edi
619	popl	%esi
620	popl	%ebx
621	popl	%ebp
622	ret
623.size	aes_hw_ecb_encrypt,.-.L_aes_hw_ecb_encrypt_begin
624.globl	aes_hw_ccm64_encrypt_blocks
625.hidden	aes_hw_ccm64_encrypt_blocks
626.type	aes_hw_ccm64_encrypt_blocks,@function
627.align	16
628aes_hw_ccm64_encrypt_blocks:
629.L_aes_hw_ccm64_encrypt_blocks_begin:
630	pushl	%ebp
631	pushl	%ebx
632	pushl	%esi
633	pushl	%edi
634	movl	20(%esp),%esi
635	movl	24(%esp),%edi
636	movl	28(%esp),%eax
637	movl	32(%esp),%edx
638	movl	36(%esp),%ebx
639	movl	40(%esp),%ecx
640	movl	%esp,%ebp
641	subl	$60,%esp
642	andl	$-16,%esp
643	movl	%ebp,48(%esp)
644	movdqu	(%ebx),%xmm7
645	movdqu	(%ecx),%xmm3
646	movl	240(%edx),%ecx
647	movl	$202182159,(%esp)
648	movl	$134810123,4(%esp)
649	movl	$67438087,8(%esp)
650	movl	$66051,12(%esp)
651	movl	$1,%ebx
652	xorl	%ebp,%ebp
653	movl	%ebx,16(%esp)
654	movl	%ebp,20(%esp)
655	movl	%ebp,24(%esp)
656	movl	%ebp,28(%esp)
657	shll	$4,%ecx
658	movl	$16,%ebx
659	leal	(%edx),%ebp
660	movdqa	(%esp),%xmm5
661	movdqa	%xmm7,%xmm2
662	leal	32(%edx,%ecx,1),%edx
663	subl	%ecx,%ebx
664.byte	102,15,56,0,253
665.L031ccm64_enc_outer:
666	movups	(%ebp),%xmm0
667	movl	%ebx,%ecx
668	movups	(%esi),%xmm6
669	xorps	%xmm0,%xmm2
670	movups	16(%ebp),%xmm1
671	xorps	%xmm6,%xmm0
672	xorps	%xmm0,%xmm3
673	movups	32(%ebp),%xmm0
674.L032ccm64_enc2_loop:
675.byte	102,15,56,220,209
676.byte	102,15,56,220,217
677	movups	(%edx,%ecx,1),%xmm1
678	addl	$32,%ecx
679.byte	102,15,56,220,208
680.byte	102,15,56,220,216
681	movups	-16(%edx,%ecx,1),%xmm0
682	jnz	.L032ccm64_enc2_loop
683.byte	102,15,56,220,209
684.byte	102,15,56,220,217
685	paddq	16(%esp),%xmm7
686	decl	%eax
687.byte	102,15,56,221,208
688.byte	102,15,56,221,216
689	leal	16(%esi),%esi
690	xorps	%xmm2,%xmm6
691	movdqa	%xmm7,%xmm2
692	movups	%xmm6,(%edi)
693.byte	102,15,56,0,213
694	leal	16(%edi),%edi
695	jnz	.L031ccm64_enc_outer
696	movl	48(%esp),%esp
697	movl	40(%esp),%edi
698	movups	%xmm3,(%edi)
699	pxor	%xmm0,%xmm0
700	pxor	%xmm1,%xmm1
701	pxor	%xmm2,%xmm2
702	pxor	%xmm3,%xmm3
703	pxor	%xmm4,%xmm4
704	pxor	%xmm5,%xmm5
705	pxor	%xmm6,%xmm6
706	pxor	%xmm7,%xmm7
707	popl	%edi
708	popl	%esi
709	popl	%ebx
710	popl	%ebp
711	ret
712.size	aes_hw_ccm64_encrypt_blocks,.-.L_aes_hw_ccm64_encrypt_blocks_begin
713.globl	aes_hw_ccm64_decrypt_blocks
714.hidden	aes_hw_ccm64_decrypt_blocks
715.type	aes_hw_ccm64_decrypt_blocks,@function
716.align	16
717aes_hw_ccm64_decrypt_blocks:
718.L_aes_hw_ccm64_decrypt_blocks_begin:
719	pushl	%ebp
720	pushl	%ebx
721	pushl	%esi
722	pushl	%edi
723	movl	20(%esp),%esi
724	movl	24(%esp),%edi
725	movl	28(%esp),%eax
726	movl	32(%esp),%edx
727	movl	36(%esp),%ebx
728	movl	40(%esp),%ecx
729	movl	%esp,%ebp
730	subl	$60,%esp
731	andl	$-16,%esp
732	movl	%ebp,48(%esp)
733	movdqu	(%ebx),%xmm7
734	movdqu	(%ecx),%xmm3
735	movl	240(%edx),%ecx
736	movl	$202182159,(%esp)
737	movl	$134810123,4(%esp)
738	movl	$67438087,8(%esp)
739	movl	$66051,12(%esp)
740	movl	$1,%ebx
741	xorl	%ebp,%ebp
742	movl	%ebx,16(%esp)
743	movl	%ebp,20(%esp)
744	movl	%ebp,24(%esp)
745	movl	%ebp,28(%esp)
746	movdqa	(%esp),%xmm5
747	movdqa	%xmm7,%xmm2
748	movl	%edx,%ebp
749	movl	%ecx,%ebx
750.byte	102,15,56,0,253
751	movups	(%edx),%xmm0
752	movups	16(%edx),%xmm1
753	leal	32(%edx),%edx
754	xorps	%xmm0,%xmm2
755.L033enc1_loop_5:
756.byte	102,15,56,220,209
757	decl	%ecx
758	movups	(%edx),%xmm1
759	leal	16(%edx),%edx
760	jnz	.L033enc1_loop_5
761.byte	102,15,56,221,209
762	shll	$4,%ebx
763	movl	$16,%ecx
764	movups	(%esi),%xmm6
765	paddq	16(%esp),%xmm7
766	leal	16(%esi),%esi
767	subl	%ebx,%ecx
768	leal	32(%ebp,%ebx,1),%edx
769	movl	%ecx,%ebx
770	jmp	.L034ccm64_dec_outer
771.align	16
772.L034ccm64_dec_outer:
773	xorps	%xmm2,%xmm6
774	movdqa	%xmm7,%xmm2
775	movups	%xmm6,(%edi)
776	leal	16(%edi),%edi
777.byte	102,15,56,0,213
778	subl	$1,%eax
779	jz	.L035ccm64_dec_break
780	movups	(%ebp),%xmm0
781	movl	%ebx,%ecx
782	movups	16(%ebp),%xmm1
783	xorps	%xmm0,%xmm6
784	xorps	%xmm0,%xmm2
785	xorps	%xmm6,%xmm3
786	movups	32(%ebp),%xmm0
787.L036ccm64_dec2_loop:
788.byte	102,15,56,220,209
789.byte	102,15,56,220,217
790	movups	(%edx,%ecx,1),%xmm1
791	addl	$32,%ecx
792.byte	102,15,56,220,208
793.byte	102,15,56,220,216
794	movups	-16(%edx,%ecx,1),%xmm0
795	jnz	.L036ccm64_dec2_loop
796	movups	(%esi),%xmm6
797	paddq	16(%esp),%xmm7
798.byte	102,15,56,220,209
799.byte	102,15,56,220,217
800.byte	102,15,56,221,208
801.byte	102,15,56,221,216
802	leal	16(%esi),%esi
803	jmp	.L034ccm64_dec_outer
804.align	16
805.L035ccm64_dec_break:
806	movl	240(%ebp),%ecx
807	movl	%ebp,%edx
808	movups	(%edx),%xmm0
809	movups	16(%edx),%xmm1
810	xorps	%xmm0,%xmm6
811	leal	32(%edx),%edx
812	xorps	%xmm6,%xmm3
813.L037enc1_loop_6:
814.byte	102,15,56,220,217
815	decl	%ecx
816	movups	(%edx),%xmm1
817	leal	16(%edx),%edx
818	jnz	.L037enc1_loop_6
819.byte	102,15,56,221,217
820	movl	48(%esp),%esp
821	movl	40(%esp),%edi
822	movups	%xmm3,(%edi)
823	pxor	%xmm0,%xmm0
824	pxor	%xmm1,%xmm1
825	pxor	%xmm2,%xmm2
826	pxor	%xmm3,%xmm3
827	pxor	%xmm4,%xmm4
828	pxor	%xmm5,%xmm5
829	pxor	%xmm6,%xmm6
830	pxor	%xmm7,%xmm7
831	popl	%edi
832	popl	%esi
833	popl	%ebx
834	popl	%ebp
835	ret
836.size	aes_hw_ccm64_decrypt_blocks,.-.L_aes_hw_ccm64_decrypt_blocks_begin
837.globl	aes_hw_ctr32_encrypt_blocks
838.hidden	aes_hw_ctr32_encrypt_blocks
839.type	aes_hw_ctr32_encrypt_blocks,@function
840.align	16
841aes_hw_ctr32_encrypt_blocks:
842.L_aes_hw_ctr32_encrypt_blocks_begin:
843	pushl	%ebp
844	pushl	%ebx
845	pushl	%esi
846	pushl	%edi
847#ifdef BORINGSSL_DISPATCH_TEST
848	pushl	%ebx
849	pushl	%edx
850	call	.L038pic
851.L038pic:
852	popl	%ebx
853	leal	BORINGSSL_function_hit+0-.L038pic(%ebx),%ebx
854	movl	$1,%edx
855	movb	%dl,(%ebx)
856	popl	%edx
857	popl	%ebx
858#endif
859	movl	20(%esp),%esi
860	movl	24(%esp),%edi
861	movl	28(%esp),%eax
862	movl	32(%esp),%edx
863	movl	36(%esp),%ebx
864	movl	%esp,%ebp
865	subl	$88,%esp
866	andl	$-16,%esp
867	movl	%ebp,80(%esp)
868	cmpl	$1,%eax
869	je	.L039ctr32_one_shortcut
870	movdqu	(%ebx),%xmm7
871	movl	$202182159,(%esp)
872	movl	$134810123,4(%esp)
873	movl	$67438087,8(%esp)
874	movl	$66051,12(%esp)
875	movl	$6,%ecx
876	xorl	%ebp,%ebp
877	movl	%ecx,16(%esp)
878	movl	%ecx,20(%esp)
879	movl	%ecx,24(%esp)
880	movl	%ebp,28(%esp)
881.byte	102,15,58,22,251,3
882.byte	102,15,58,34,253,3
883	movl	240(%edx),%ecx
884	bswap	%ebx
885	pxor	%xmm0,%xmm0
886	pxor	%xmm1,%xmm1
887	movdqa	(%esp),%xmm2
888.byte	102,15,58,34,195,0
889	leal	3(%ebx),%ebp
890.byte	102,15,58,34,205,0
891	incl	%ebx
892.byte	102,15,58,34,195,1
893	incl	%ebp
894.byte	102,15,58,34,205,1
895	incl	%ebx
896.byte	102,15,58,34,195,2
897	incl	%ebp
898.byte	102,15,58,34,205,2
899	movdqa	%xmm0,48(%esp)
900.byte	102,15,56,0,194
901	movdqu	(%edx),%xmm6
902	movdqa	%xmm1,64(%esp)
903.byte	102,15,56,0,202
904	pshufd	$192,%xmm0,%xmm2
905	pshufd	$128,%xmm0,%xmm3
906	cmpl	$6,%eax
907	jb	.L040ctr32_tail
908	pxor	%xmm6,%xmm7
909	shll	$4,%ecx
910	movl	$16,%ebx
911	movdqa	%xmm7,32(%esp)
912	movl	%edx,%ebp
913	subl	%ecx,%ebx
914	leal	32(%edx,%ecx,1),%edx
915	subl	$6,%eax
916	jmp	.L041ctr32_loop6
917.align	16
918.L041ctr32_loop6:
919	pshufd	$64,%xmm0,%xmm4
920	movdqa	32(%esp),%xmm0
921	pshufd	$192,%xmm1,%xmm5
922	pxor	%xmm0,%xmm2
923	pshufd	$128,%xmm1,%xmm6
924	pxor	%xmm0,%xmm3
925	pshufd	$64,%xmm1,%xmm7
926	movups	16(%ebp),%xmm1
927	pxor	%xmm0,%xmm4
928	pxor	%xmm0,%xmm5
929.byte	102,15,56,220,209
930	pxor	%xmm0,%xmm6
931	pxor	%xmm0,%xmm7
932.byte	102,15,56,220,217
933	movups	32(%ebp),%xmm0
934	movl	%ebx,%ecx
935.byte	102,15,56,220,225
936.byte	102,15,56,220,233
937.byte	102,15,56,220,241
938.byte	102,15,56,220,249
939	call	.L_aesni_encrypt6_enter
940	movups	(%esi),%xmm1
941	movups	16(%esi),%xmm0
942	xorps	%xmm1,%xmm2
943	movups	32(%esi),%xmm1
944	xorps	%xmm0,%xmm3
945	movups	%xmm2,(%edi)
946	movdqa	16(%esp),%xmm0
947	xorps	%xmm1,%xmm4
948	movdqa	64(%esp),%xmm1
949	movups	%xmm3,16(%edi)
950	movups	%xmm4,32(%edi)
951	paddd	%xmm0,%xmm1
952	paddd	48(%esp),%xmm0
953	movdqa	(%esp),%xmm2
954	movups	48(%esi),%xmm3
955	movups	64(%esi),%xmm4
956	xorps	%xmm3,%xmm5
957	movups	80(%esi),%xmm3
958	leal	96(%esi),%esi
959	movdqa	%xmm0,48(%esp)
960.byte	102,15,56,0,194
961	xorps	%xmm4,%xmm6
962	movups	%xmm5,48(%edi)
963	xorps	%xmm3,%xmm7
964	movdqa	%xmm1,64(%esp)
965.byte	102,15,56,0,202
966	movups	%xmm6,64(%edi)
967	pshufd	$192,%xmm0,%xmm2
968	movups	%xmm7,80(%edi)
969	leal	96(%edi),%edi
970	pshufd	$128,%xmm0,%xmm3
971	subl	$6,%eax
972	jnc	.L041ctr32_loop6
973	addl	$6,%eax
974	jz	.L042ctr32_ret
975	movdqu	(%ebp),%xmm7
976	movl	%ebp,%edx
977	pxor	32(%esp),%xmm7
978	movl	240(%ebp),%ecx
979.L040ctr32_tail:
980	por	%xmm7,%xmm2
981	cmpl	$2,%eax
982	jb	.L043ctr32_one
983	pshufd	$64,%xmm0,%xmm4
984	por	%xmm7,%xmm3
985	je	.L044ctr32_two
986	pshufd	$192,%xmm1,%xmm5
987	por	%xmm7,%xmm4
988	cmpl	$4,%eax
989	jb	.L045ctr32_three
990	pshufd	$128,%xmm1,%xmm6
991	por	%xmm7,%xmm5
992	je	.L046ctr32_four
993	por	%xmm7,%xmm6
994	call	_aesni_encrypt6
995	movups	(%esi),%xmm1
996	movups	16(%esi),%xmm0
997	xorps	%xmm1,%xmm2
998	movups	32(%esi),%xmm1
999	xorps	%xmm0,%xmm3
1000	movups	48(%esi),%xmm0
1001	xorps	%xmm1,%xmm4
1002	movups	64(%esi),%xmm1
1003	xorps	%xmm0,%xmm5
1004	movups	%xmm2,(%edi)
1005	xorps	%xmm1,%xmm6
1006	movups	%xmm3,16(%edi)
1007	movups	%xmm4,32(%edi)
1008	movups	%xmm5,48(%edi)
1009	movups	%xmm6,64(%edi)
1010	jmp	.L042ctr32_ret
1011.align	16
1012.L039ctr32_one_shortcut:
1013	movups	(%ebx),%xmm2
1014	movl	240(%edx),%ecx
1015.L043ctr32_one:
1016	movups	(%edx),%xmm0
1017	movups	16(%edx),%xmm1
1018	leal	32(%edx),%edx
1019	xorps	%xmm0,%xmm2
1020.L047enc1_loop_7:
1021.byte	102,15,56,220,209
1022	decl	%ecx
1023	movups	(%edx),%xmm1
1024	leal	16(%edx),%edx
1025	jnz	.L047enc1_loop_7
1026.byte	102,15,56,221,209
1027	movups	(%esi),%xmm6
1028	xorps	%xmm2,%xmm6
1029	movups	%xmm6,(%edi)
1030	jmp	.L042ctr32_ret
1031.align	16
1032.L044ctr32_two:
1033	call	_aesni_encrypt2
1034	movups	(%esi),%xmm5
1035	movups	16(%esi),%xmm6
1036	xorps	%xmm5,%xmm2
1037	xorps	%xmm6,%xmm3
1038	movups	%xmm2,(%edi)
1039	movups	%xmm3,16(%edi)
1040	jmp	.L042ctr32_ret
1041.align	16
1042.L045ctr32_three:
1043	call	_aesni_encrypt3
1044	movups	(%esi),%xmm5
1045	movups	16(%esi),%xmm6
1046	xorps	%xmm5,%xmm2
1047	movups	32(%esi),%xmm7
1048	xorps	%xmm6,%xmm3
1049	movups	%xmm2,(%edi)
1050	xorps	%xmm7,%xmm4
1051	movups	%xmm3,16(%edi)
1052	movups	%xmm4,32(%edi)
1053	jmp	.L042ctr32_ret
1054.align	16
1055.L046ctr32_four:
1056	call	_aesni_encrypt4
1057	movups	(%esi),%xmm6
1058	movups	16(%esi),%xmm7
1059	movups	32(%esi),%xmm1
1060	xorps	%xmm6,%xmm2
1061	movups	48(%esi),%xmm0
1062	xorps	%xmm7,%xmm3
1063	movups	%xmm2,(%edi)
1064	xorps	%xmm1,%xmm4
1065	movups	%xmm3,16(%edi)
1066	xorps	%xmm0,%xmm5
1067	movups	%xmm4,32(%edi)
1068	movups	%xmm5,48(%edi)
1069.L042ctr32_ret:
1070	pxor	%xmm0,%xmm0
1071	pxor	%xmm1,%xmm1
1072	pxor	%xmm2,%xmm2
1073	pxor	%xmm3,%xmm3
1074	pxor	%xmm4,%xmm4
1075	movdqa	%xmm0,32(%esp)
1076	pxor	%xmm5,%xmm5
1077	movdqa	%xmm0,48(%esp)
1078	pxor	%xmm6,%xmm6
1079	movdqa	%xmm0,64(%esp)
1080	pxor	%xmm7,%xmm7
1081	movl	80(%esp),%esp
1082	popl	%edi
1083	popl	%esi
1084	popl	%ebx
1085	popl	%ebp
1086	ret
1087.size	aes_hw_ctr32_encrypt_blocks,.-.L_aes_hw_ctr32_encrypt_blocks_begin
1088.globl	aes_hw_xts_encrypt
1089.hidden	aes_hw_xts_encrypt
1090.type	aes_hw_xts_encrypt,@function
1091.align	16
1092aes_hw_xts_encrypt:
1093.L_aes_hw_xts_encrypt_begin:
1094	pushl	%ebp
1095	pushl	%ebx
1096	pushl	%esi
1097	pushl	%edi
1098	movl	36(%esp),%edx
1099	movl	40(%esp),%esi
1100	movl	240(%edx),%ecx
1101	movups	(%esi),%xmm2
1102	movups	(%edx),%xmm0
1103	movups	16(%edx),%xmm1
1104	leal	32(%edx),%edx
1105	xorps	%xmm0,%xmm2
1106.L048enc1_loop_8:
1107.byte	102,15,56,220,209
1108	decl	%ecx
1109	movups	(%edx),%xmm1
1110	leal	16(%edx),%edx
1111	jnz	.L048enc1_loop_8
1112.byte	102,15,56,221,209
1113	movl	20(%esp),%esi
1114	movl	24(%esp),%edi
1115	movl	28(%esp),%eax
1116	movl	32(%esp),%edx
1117	movl	%esp,%ebp
1118	subl	$120,%esp
1119	movl	240(%edx),%ecx
1120	andl	$-16,%esp
1121	movl	$135,96(%esp)
1122	movl	$0,100(%esp)
1123	movl	$1,104(%esp)
1124	movl	$0,108(%esp)
1125	movl	%eax,112(%esp)
1126	movl	%ebp,116(%esp)
1127	movdqa	%xmm2,%xmm1
1128	pxor	%xmm0,%xmm0
1129	movdqa	96(%esp),%xmm3
1130	pcmpgtd	%xmm1,%xmm0
1131	andl	$-16,%eax
1132	movl	%edx,%ebp
1133	movl	%ecx,%ebx
1134	subl	$96,%eax
1135	jc	.L049xts_enc_short
1136	shll	$4,%ecx
1137	movl	$16,%ebx
1138	subl	%ecx,%ebx
1139	leal	32(%edx,%ecx,1),%edx
1140	jmp	.L050xts_enc_loop6
1141.align	16
1142.L050xts_enc_loop6:
1143	pshufd	$19,%xmm0,%xmm2
1144	pxor	%xmm0,%xmm0
1145	movdqa	%xmm1,(%esp)
1146	paddq	%xmm1,%xmm1
1147	pand	%xmm3,%xmm2
1148	pcmpgtd	%xmm1,%xmm0
1149	pxor	%xmm2,%xmm1
1150	pshufd	$19,%xmm0,%xmm2
1151	pxor	%xmm0,%xmm0
1152	movdqa	%xmm1,16(%esp)
1153	paddq	%xmm1,%xmm1
1154	pand	%xmm3,%xmm2
1155	pcmpgtd	%xmm1,%xmm0
1156	pxor	%xmm2,%xmm1
1157	pshufd	$19,%xmm0,%xmm2
1158	pxor	%xmm0,%xmm0
1159	movdqa	%xmm1,32(%esp)
1160	paddq	%xmm1,%xmm1
1161	pand	%xmm3,%xmm2
1162	pcmpgtd	%xmm1,%xmm0
1163	pxor	%xmm2,%xmm1
1164	pshufd	$19,%xmm0,%xmm2
1165	pxor	%xmm0,%xmm0
1166	movdqa	%xmm1,48(%esp)
1167	paddq	%xmm1,%xmm1
1168	pand	%xmm3,%xmm2
1169	pcmpgtd	%xmm1,%xmm0
1170	pxor	%xmm2,%xmm1
1171	pshufd	$19,%xmm0,%xmm7
1172	movdqa	%xmm1,64(%esp)
1173	paddq	%xmm1,%xmm1
1174	movups	(%ebp),%xmm0
1175	pand	%xmm3,%xmm7
1176	movups	(%esi),%xmm2
1177	pxor	%xmm1,%xmm7
1178	movl	%ebx,%ecx
1179	movdqu	16(%esi),%xmm3
1180	xorps	%xmm0,%xmm2
1181	movdqu	32(%esi),%xmm4
1182	pxor	%xmm0,%xmm3
1183	movdqu	48(%esi),%xmm5
1184	pxor	%xmm0,%xmm4
1185	movdqu	64(%esi),%xmm6
1186	pxor	%xmm0,%xmm5
1187	movdqu	80(%esi),%xmm1
1188	pxor	%xmm0,%xmm6
1189	leal	96(%esi),%esi
1190	pxor	(%esp),%xmm2
1191	movdqa	%xmm7,80(%esp)
1192	pxor	%xmm1,%xmm7
1193	movups	16(%ebp),%xmm1
1194	pxor	16(%esp),%xmm3
1195	pxor	32(%esp),%xmm4
1196.byte	102,15,56,220,209
1197	pxor	48(%esp),%xmm5
1198	pxor	64(%esp),%xmm6
1199.byte	102,15,56,220,217
1200	pxor	%xmm0,%xmm7
1201	movups	32(%ebp),%xmm0
1202.byte	102,15,56,220,225
1203.byte	102,15,56,220,233
1204.byte	102,15,56,220,241
1205.byte	102,15,56,220,249
1206	call	.L_aesni_encrypt6_enter
1207	movdqa	80(%esp),%xmm1
1208	pxor	%xmm0,%xmm0
1209	xorps	(%esp),%xmm2
1210	pcmpgtd	%xmm1,%xmm0
1211	xorps	16(%esp),%xmm3
1212	movups	%xmm2,(%edi)
1213	xorps	32(%esp),%xmm4
1214	movups	%xmm3,16(%edi)
1215	xorps	48(%esp),%xmm5
1216	movups	%xmm4,32(%edi)
1217	xorps	64(%esp),%xmm6
1218	movups	%xmm5,48(%edi)
1219	xorps	%xmm1,%xmm7
1220	movups	%xmm6,64(%edi)
1221	pshufd	$19,%xmm0,%xmm2
1222	movups	%xmm7,80(%edi)
1223	leal	96(%edi),%edi
1224	movdqa	96(%esp),%xmm3
1225	pxor	%xmm0,%xmm0
1226	paddq	%xmm1,%xmm1
1227	pand	%xmm3,%xmm2
1228	pcmpgtd	%xmm1,%xmm0
1229	pxor	%xmm2,%xmm1
1230	subl	$96,%eax
1231	jnc	.L050xts_enc_loop6
1232	movl	240(%ebp),%ecx
1233	movl	%ebp,%edx
1234	movl	%ecx,%ebx
1235.L049xts_enc_short:
1236	addl	$96,%eax
1237	jz	.L051xts_enc_done6x
1238	movdqa	%xmm1,%xmm5
1239	cmpl	$32,%eax
1240	jb	.L052xts_enc_one
1241	pshufd	$19,%xmm0,%xmm2
1242	pxor	%xmm0,%xmm0
1243	paddq	%xmm1,%xmm1
1244	pand	%xmm3,%xmm2
1245	pcmpgtd	%xmm1,%xmm0
1246	pxor	%xmm2,%xmm1
1247	je	.L053xts_enc_two
1248	pshufd	$19,%xmm0,%xmm2
1249	pxor	%xmm0,%xmm0
1250	movdqa	%xmm1,%xmm6
1251	paddq	%xmm1,%xmm1
1252	pand	%xmm3,%xmm2
1253	pcmpgtd	%xmm1,%xmm0
1254	pxor	%xmm2,%xmm1
1255	cmpl	$64,%eax
1256	jb	.L054xts_enc_three
1257	pshufd	$19,%xmm0,%xmm2
1258	pxor	%xmm0,%xmm0
1259	movdqa	%xmm1,%xmm7
1260	paddq	%xmm1,%xmm1
1261	pand	%xmm3,%xmm2
1262	pcmpgtd	%xmm1,%xmm0
1263	pxor	%xmm2,%xmm1
1264	movdqa	%xmm5,(%esp)
1265	movdqa	%xmm6,16(%esp)
1266	je	.L055xts_enc_four
1267	movdqa	%xmm7,32(%esp)
1268	pshufd	$19,%xmm0,%xmm7
1269	movdqa	%xmm1,48(%esp)
1270	paddq	%xmm1,%xmm1
1271	pand	%xmm3,%xmm7
1272	pxor	%xmm1,%xmm7
1273	movdqu	(%esi),%xmm2
1274	movdqu	16(%esi),%xmm3
1275	movdqu	32(%esi),%xmm4
1276	pxor	(%esp),%xmm2
1277	movdqu	48(%esi),%xmm5
1278	pxor	16(%esp),%xmm3
1279	movdqu	64(%esi),%xmm6
1280	pxor	32(%esp),%xmm4
1281	leal	80(%esi),%esi
1282	pxor	48(%esp),%xmm5
1283	movdqa	%xmm7,64(%esp)
1284	pxor	%xmm7,%xmm6
1285	call	_aesni_encrypt6
1286	movaps	64(%esp),%xmm1
1287	xorps	(%esp),%xmm2
1288	xorps	16(%esp),%xmm3
1289	xorps	32(%esp),%xmm4
1290	movups	%xmm2,(%edi)
1291	xorps	48(%esp),%xmm5
1292	movups	%xmm3,16(%edi)
1293	xorps	%xmm1,%xmm6
1294	movups	%xmm4,32(%edi)
1295	movups	%xmm5,48(%edi)
1296	movups	%xmm6,64(%edi)
1297	leal	80(%edi),%edi
1298	jmp	.L056xts_enc_done
1299.align	16
1300.L052xts_enc_one:
1301	movups	(%esi),%xmm2
1302	leal	16(%esi),%esi
1303	xorps	%xmm5,%xmm2
1304	movups	(%edx),%xmm0
1305	movups	16(%edx),%xmm1
1306	leal	32(%edx),%edx
1307	xorps	%xmm0,%xmm2
1308.L057enc1_loop_9:
1309.byte	102,15,56,220,209
1310	decl	%ecx
1311	movups	(%edx),%xmm1
1312	leal	16(%edx),%edx
1313	jnz	.L057enc1_loop_9
1314.byte	102,15,56,221,209
1315	xorps	%xmm5,%xmm2
1316	movups	%xmm2,(%edi)
1317	leal	16(%edi),%edi
1318	movdqa	%xmm5,%xmm1
1319	jmp	.L056xts_enc_done
1320.align	16
1321.L053xts_enc_two:
1322	movaps	%xmm1,%xmm6
1323	movups	(%esi),%xmm2
1324	movups	16(%esi),%xmm3
1325	leal	32(%esi),%esi
1326	xorps	%xmm5,%xmm2
1327	xorps	%xmm6,%xmm3
1328	call	_aesni_encrypt2
1329	xorps	%xmm5,%xmm2
1330	xorps	%xmm6,%xmm3
1331	movups	%xmm2,(%edi)
1332	movups	%xmm3,16(%edi)
1333	leal	32(%edi),%edi
1334	movdqa	%xmm6,%xmm1
1335	jmp	.L056xts_enc_done
1336.align	16
1337.L054xts_enc_three:
1338	movaps	%xmm1,%xmm7
1339	movups	(%esi),%xmm2
1340	movups	16(%esi),%xmm3
1341	movups	32(%esi),%xmm4
1342	leal	48(%esi),%esi
1343	xorps	%xmm5,%xmm2
1344	xorps	%xmm6,%xmm3
1345	xorps	%xmm7,%xmm4
1346	call	_aesni_encrypt3
1347	xorps	%xmm5,%xmm2
1348	xorps	%xmm6,%xmm3
1349	xorps	%xmm7,%xmm4
1350	movups	%xmm2,(%edi)
1351	movups	%xmm3,16(%edi)
1352	movups	%xmm4,32(%edi)
1353	leal	48(%edi),%edi
1354	movdqa	%xmm7,%xmm1
1355	jmp	.L056xts_enc_done
1356.align	16
1357.L055xts_enc_four:
1358	movaps	%xmm1,%xmm6
1359	movups	(%esi),%xmm2
1360	movups	16(%esi),%xmm3
1361	movups	32(%esi),%xmm4
1362	xorps	(%esp),%xmm2
1363	movups	48(%esi),%xmm5
1364	leal	64(%esi),%esi
1365	xorps	16(%esp),%xmm3
1366	xorps	%xmm7,%xmm4
1367	xorps	%xmm6,%xmm5
1368	call	_aesni_encrypt4
1369	xorps	(%esp),%xmm2
1370	xorps	16(%esp),%xmm3
1371	xorps	%xmm7,%xmm4
1372	movups	%xmm2,(%edi)
1373	xorps	%xmm6,%xmm5
1374	movups	%xmm3,16(%edi)
1375	movups	%xmm4,32(%edi)
1376	movups	%xmm5,48(%edi)
1377	leal	64(%edi),%edi
1378	movdqa	%xmm6,%xmm1
1379	jmp	.L056xts_enc_done
1380.align	16
1381.L051xts_enc_done6x:
1382	movl	112(%esp),%eax
1383	andl	$15,%eax
1384	jz	.L058xts_enc_ret
1385	movdqa	%xmm1,%xmm5
1386	movl	%eax,112(%esp)
1387	jmp	.L059xts_enc_steal
1388.align	16
1389.L056xts_enc_done:
1390	movl	112(%esp),%eax
1391	pxor	%xmm0,%xmm0
1392	andl	$15,%eax
1393	jz	.L058xts_enc_ret
1394	pcmpgtd	%xmm1,%xmm0
1395	movl	%eax,112(%esp)
1396	pshufd	$19,%xmm0,%xmm5
1397	paddq	%xmm1,%xmm1
1398	pand	96(%esp),%xmm5
1399	pxor	%xmm1,%xmm5
1400.L059xts_enc_steal:
1401	movzbl	(%esi),%ecx
1402	movzbl	-16(%edi),%edx
1403	leal	1(%esi),%esi
1404	movb	%cl,-16(%edi)
1405	movb	%dl,(%edi)
1406	leal	1(%edi),%edi
1407	subl	$1,%eax
1408	jnz	.L059xts_enc_steal
1409	subl	112(%esp),%edi
1410	movl	%ebp,%edx
1411	movl	%ebx,%ecx
1412	movups	-16(%edi),%xmm2
1413	xorps	%xmm5,%xmm2
1414	movups	(%edx),%xmm0
1415	movups	16(%edx),%xmm1
1416	leal	32(%edx),%edx
1417	xorps	%xmm0,%xmm2
1418.L060enc1_loop_10:
1419.byte	102,15,56,220,209
1420	decl	%ecx
1421	movups	(%edx),%xmm1
1422	leal	16(%edx),%edx
1423	jnz	.L060enc1_loop_10
1424.byte	102,15,56,221,209
1425	xorps	%xmm5,%xmm2
1426	movups	%xmm2,-16(%edi)
1427.L058xts_enc_ret:
1428	pxor	%xmm0,%xmm0
1429	pxor	%xmm1,%xmm1
1430	pxor	%xmm2,%xmm2
1431	movdqa	%xmm0,(%esp)
1432	pxor	%xmm3,%xmm3
1433	movdqa	%xmm0,16(%esp)
1434	pxor	%xmm4,%xmm4
1435	movdqa	%xmm0,32(%esp)
1436	pxor	%xmm5,%xmm5
1437	movdqa	%xmm0,48(%esp)
1438	pxor	%xmm6,%xmm6
1439	movdqa	%xmm0,64(%esp)
1440	pxor	%xmm7,%xmm7
1441	movdqa	%xmm0,80(%esp)
1442	movl	116(%esp),%esp
1443	popl	%edi
1444	popl	%esi
1445	popl	%ebx
1446	popl	%ebp
1447	ret
1448.size	aes_hw_xts_encrypt,.-.L_aes_hw_xts_encrypt_begin
1449.globl	aes_hw_xts_decrypt
1450.hidden	aes_hw_xts_decrypt
1451.type	aes_hw_xts_decrypt,@function
1452.align	16
1453aes_hw_xts_decrypt:
1454.L_aes_hw_xts_decrypt_begin:
1455	pushl	%ebp
1456	pushl	%ebx
1457	pushl	%esi
1458	pushl	%edi
1459	movl	36(%esp),%edx
1460	movl	40(%esp),%esi
1461	movl	240(%edx),%ecx
1462	movups	(%esi),%xmm2
1463	movups	(%edx),%xmm0
1464	movups	16(%edx),%xmm1
1465	leal	32(%edx),%edx
1466	xorps	%xmm0,%xmm2
1467.L061enc1_loop_11:
1468.byte	102,15,56,220,209
1469	decl	%ecx
1470	movups	(%edx),%xmm1
1471	leal	16(%edx),%edx
1472	jnz	.L061enc1_loop_11
1473.byte	102,15,56,221,209
1474	movl	20(%esp),%esi
1475	movl	24(%esp),%edi
1476	movl	28(%esp),%eax
1477	movl	32(%esp),%edx
1478	movl	%esp,%ebp
1479	subl	$120,%esp
1480	andl	$-16,%esp
1481	xorl	%ebx,%ebx
1482	testl	$15,%eax
1483	setnz	%bl
1484	shll	$4,%ebx
1485	subl	%ebx,%eax
1486	movl	$135,96(%esp)
1487	movl	$0,100(%esp)
1488	movl	$1,104(%esp)
1489	movl	$0,108(%esp)
1490	movl	%eax,112(%esp)
1491	movl	%ebp,116(%esp)
1492	movl	240(%edx),%ecx
1493	movl	%edx,%ebp
1494	movl	%ecx,%ebx
1495	movdqa	%xmm2,%xmm1
1496	pxor	%xmm0,%xmm0
1497	movdqa	96(%esp),%xmm3
1498	pcmpgtd	%xmm1,%xmm0
1499	andl	$-16,%eax
1500	subl	$96,%eax
1501	jc	.L062xts_dec_short
1502	shll	$4,%ecx
1503	movl	$16,%ebx
1504	subl	%ecx,%ebx
1505	leal	32(%edx,%ecx,1),%edx
1506	jmp	.L063xts_dec_loop6
1507.align	16
1508.L063xts_dec_loop6:
1509	pshufd	$19,%xmm0,%xmm2
1510	pxor	%xmm0,%xmm0
1511	movdqa	%xmm1,(%esp)
1512	paddq	%xmm1,%xmm1
1513	pand	%xmm3,%xmm2
1514	pcmpgtd	%xmm1,%xmm0
1515	pxor	%xmm2,%xmm1
1516	pshufd	$19,%xmm0,%xmm2
1517	pxor	%xmm0,%xmm0
1518	movdqa	%xmm1,16(%esp)
1519	paddq	%xmm1,%xmm1
1520	pand	%xmm3,%xmm2
1521	pcmpgtd	%xmm1,%xmm0
1522	pxor	%xmm2,%xmm1
1523	pshufd	$19,%xmm0,%xmm2
1524	pxor	%xmm0,%xmm0
1525	movdqa	%xmm1,32(%esp)
1526	paddq	%xmm1,%xmm1
1527	pand	%xmm3,%xmm2
1528	pcmpgtd	%xmm1,%xmm0
1529	pxor	%xmm2,%xmm1
1530	pshufd	$19,%xmm0,%xmm2
1531	pxor	%xmm0,%xmm0
1532	movdqa	%xmm1,48(%esp)
1533	paddq	%xmm1,%xmm1
1534	pand	%xmm3,%xmm2
1535	pcmpgtd	%xmm1,%xmm0
1536	pxor	%xmm2,%xmm1
1537	pshufd	$19,%xmm0,%xmm7
1538	movdqa	%xmm1,64(%esp)
1539	paddq	%xmm1,%xmm1
1540	movups	(%ebp),%xmm0
1541	pand	%xmm3,%xmm7
1542	movups	(%esi),%xmm2
1543	pxor	%xmm1,%xmm7
1544	movl	%ebx,%ecx
1545	movdqu	16(%esi),%xmm3
1546	xorps	%xmm0,%xmm2
1547	movdqu	32(%esi),%xmm4
1548	pxor	%xmm0,%xmm3
1549	movdqu	48(%esi),%xmm5
1550	pxor	%xmm0,%xmm4
1551	movdqu	64(%esi),%xmm6
1552	pxor	%xmm0,%xmm5
1553	movdqu	80(%esi),%xmm1
1554	pxor	%xmm0,%xmm6
1555	leal	96(%esi),%esi
1556	pxor	(%esp),%xmm2
1557	movdqa	%xmm7,80(%esp)
1558	pxor	%xmm1,%xmm7
1559	movups	16(%ebp),%xmm1
1560	pxor	16(%esp),%xmm3
1561	pxor	32(%esp),%xmm4
1562.byte	102,15,56,222,209
1563	pxor	48(%esp),%xmm5
1564	pxor	64(%esp),%xmm6
1565.byte	102,15,56,222,217
1566	pxor	%xmm0,%xmm7
1567	movups	32(%ebp),%xmm0
1568.byte	102,15,56,222,225
1569.byte	102,15,56,222,233
1570.byte	102,15,56,222,241
1571.byte	102,15,56,222,249
1572	call	.L_aesni_decrypt6_enter
1573	movdqa	80(%esp),%xmm1
1574	pxor	%xmm0,%xmm0
1575	xorps	(%esp),%xmm2
1576	pcmpgtd	%xmm1,%xmm0
1577	xorps	16(%esp),%xmm3
1578	movups	%xmm2,(%edi)
1579	xorps	32(%esp),%xmm4
1580	movups	%xmm3,16(%edi)
1581	xorps	48(%esp),%xmm5
1582	movups	%xmm4,32(%edi)
1583	xorps	64(%esp),%xmm6
1584	movups	%xmm5,48(%edi)
1585	xorps	%xmm1,%xmm7
1586	movups	%xmm6,64(%edi)
1587	pshufd	$19,%xmm0,%xmm2
1588	movups	%xmm7,80(%edi)
1589	leal	96(%edi),%edi
1590	movdqa	96(%esp),%xmm3
1591	pxor	%xmm0,%xmm0
1592	paddq	%xmm1,%xmm1
1593	pand	%xmm3,%xmm2
1594	pcmpgtd	%xmm1,%xmm0
1595	pxor	%xmm2,%xmm1
1596	subl	$96,%eax
1597	jnc	.L063xts_dec_loop6
1598	movl	240(%ebp),%ecx
1599	movl	%ebp,%edx
1600	movl	%ecx,%ebx
1601.L062xts_dec_short:
1602	addl	$96,%eax
1603	jz	.L064xts_dec_done6x
1604	movdqa	%xmm1,%xmm5
1605	cmpl	$32,%eax
1606	jb	.L065xts_dec_one
1607	pshufd	$19,%xmm0,%xmm2
1608	pxor	%xmm0,%xmm0
1609	paddq	%xmm1,%xmm1
1610	pand	%xmm3,%xmm2
1611	pcmpgtd	%xmm1,%xmm0
1612	pxor	%xmm2,%xmm1
1613	je	.L066xts_dec_two
1614	pshufd	$19,%xmm0,%xmm2
1615	pxor	%xmm0,%xmm0
1616	movdqa	%xmm1,%xmm6
1617	paddq	%xmm1,%xmm1
1618	pand	%xmm3,%xmm2
1619	pcmpgtd	%xmm1,%xmm0
1620	pxor	%xmm2,%xmm1
1621	cmpl	$64,%eax
1622	jb	.L067xts_dec_three
1623	pshufd	$19,%xmm0,%xmm2
1624	pxor	%xmm0,%xmm0
1625	movdqa	%xmm1,%xmm7
1626	paddq	%xmm1,%xmm1
1627	pand	%xmm3,%xmm2
1628	pcmpgtd	%xmm1,%xmm0
1629	pxor	%xmm2,%xmm1
1630	movdqa	%xmm5,(%esp)
1631	movdqa	%xmm6,16(%esp)
1632	je	.L068xts_dec_four
1633	movdqa	%xmm7,32(%esp)
1634	pshufd	$19,%xmm0,%xmm7
1635	movdqa	%xmm1,48(%esp)
1636	paddq	%xmm1,%xmm1
1637	pand	%xmm3,%xmm7
1638	pxor	%xmm1,%xmm7
1639	movdqu	(%esi),%xmm2
1640	movdqu	16(%esi),%xmm3
1641	movdqu	32(%esi),%xmm4
1642	pxor	(%esp),%xmm2
1643	movdqu	48(%esi),%xmm5
1644	pxor	16(%esp),%xmm3
1645	movdqu	64(%esi),%xmm6
1646	pxor	32(%esp),%xmm4
1647	leal	80(%esi),%esi
1648	pxor	48(%esp),%xmm5
1649	movdqa	%xmm7,64(%esp)
1650	pxor	%xmm7,%xmm6
1651	call	_aesni_decrypt6
1652	movaps	64(%esp),%xmm1
1653	xorps	(%esp),%xmm2
1654	xorps	16(%esp),%xmm3
1655	xorps	32(%esp),%xmm4
1656	movups	%xmm2,(%edi)
1657	xorps	48(%esp),%xmm5
1658	movups	%xmm3,16(%edi)
1659	xorps	%xmm1,%xmm6
1660	movups	%xmm4,32(%edi)
1661	movups	%xmm5,48(%edi)
1662	movups	%xmm6,64(%edi)
1663	leal	80(%edi),%edi
1664	jmp	.L069xts_dec_done
1665.align	16
1666.L065xts_dec_one:
1667	movups	(%esi),%xmm2
1668	leal	16(%esi),%esi
1669	xorps	%xmm5,%xmm2
1670	movups	(%edx),%xmm0
1671	movups	16(%edx),%xmm1
1672	leal	32(%edx),%edx
1673	xorps	%xmm0,%xmm2
1674.L070dec1_loop_12:
1675.byte	102,15,56,222,209
1676	decl	%ecx
1677	movups	(%edx),%xmm1
1678	leal	16(%edx),%edx
1679	jnz	.L070dec1_loop_12
1680.byte	102,15,56,223,209
1681	xorps	%xmm5,%xmm2
1682	movups	%xmm2,(%edi)
1683	leal	16(%edi),%edi
1684	movdqa	%xmm5,%xmm1
1685	jmp	.L069xts_dec_done
1686.align	16
1687.L066xts_dec_two:
1688	movaps	%xmm1,%xmm6
1689	movups	(%esi),%xmm2
1690	movups	16(%esi),%xmm3
1691	leal	32(%esi),%esi
1692	xorps	%xmm5,%xmm2
1693	xorps	%xmm6,%xmm3
1694	call	_aesni_decrypt2
1695	xorps	%xmm5,%xmm2
1696	xorps	%xmm6,%xmm3
1697	movups	%xmm2,(%edi)
1698	movups	%xmm3,16(%edi)
1699	leal	32(%edi),%edi
1700	movdqa	%xmm6,%xmm1
1701	jmp	.L069xts_dec_done
1702.align	16
1703.L067xts_dec_three:
1704	movaps	%xmm1,%xmm7
1705	movups	(%esi),%xmm2
1706	movups	16(%esi),%xmm3
1707	movups	32(%esi),%xmm4
1708	leal	48(%esi),%esi
1709	xorps	%xmm5,%xmm2
1710	xorps	%xmm6,%xmm3
1711	xorps	%xmm7,%xmm4
1712	call	_aesni_decrypt3
1713	xorps	%xmm5,%xmm2
1714	xorps	%xmm6,%xmm3
1715	xorps	%xmm7,%xmm4
1716	movups	%xmm2,(%edi)
1717	movups	%xmm3,16(%edi)
1718	movups	%xmm4,32(%edi)
1719	leal	48(%edi),%edi
1720	movdqa	%xmm7,%xmm1
1721	jmp	.L069xts_dec_done
1722.align	16
1723.L068xts_dec_four:
1724	movaps	%xmm1,%xmm6
1725	movups	(%esi),%xmm2
1726	movups	16(%esi),%xmm3
1727	movups	32(%esi),%xmm4
1728	xorps	(%esp),%xmm2
1729	movups	48(%esi),%xmm5
1730	leal	64(%esi),%esi
1731	xorps	16(%esp),%xmm3
1732	xorps	%xmm7,%xmm4
1733	xorps	%xmm6,%xmm5
1734	call	_aesni_decrypt4
1735	xorps	(%esp),%xmm2
1736	xorps	16(%esp),%xmm3
1737	xorps	%xmm7,%xmm4
1738	movups	%xmm2,(%edi)
1739	xorps	%xmm6,%xmm5
1740	movups	%xmm3,16(%edi)
1741	movups	%xmm4,32(%edi)
1742	movups	%xmm5,48(%edi)
1743	leal	64(%edi),%edi
1744	movdqa	%xmm6,%xmm1
1745	jmp	.L069xts_dec_done
1746.align	16
1747.L064xts_dec_done6x:
1748	movl	112(%esp),%eax
1749	andl	$15,%eax
1750	jz	.L071xts_dec_ret
1751	movl	%eax,112(%esp)
1752	jmp	.L072xts_dec_only_one_more
1753.align	16
1754.L069xts_dec_done:
1755	movl	112(%esp),%eax
1756	pxor	%xmm0,%xmm0
1757	andl	$15,%eax
1758	jz	.L071xts_dec_ret
1759	pcmpgtd	%xmm1,%xmm0
1760	movl	%eax,112(%esp)
1761	pshufd	$19,%xmm0,%xmm2
1762	pxor	%xmm0,%xmm0
1763	movdqa	96(%esp),%xmm3
1764	paddq	%xmm1,%xmm1
1765	pand	%xmm3,%xmm2
1766	pcmpgtd	%xmm1,%xmm0
1767	pxor	%xmm2,%xmm1
1768.L072xts_dec_only_one_more:
1769	pshufd	$19,%xmm0,%xmm5
1770	movdqa	%xmm1,%xmm6
1771	paddq	%xmm1,%xmm1
1772	pand	%xmm3,%xmm5
1773	pxor	%xmm1,%xmm5
1774	movl	%ebp,%edx
1775	movl	%ebx,%ecx
1776	movups	(%esi),%xmm2
1777	xorps	%xmm5,%xmm2
1778	movups	(%edx),%xmm0
1779	movups	16(%edx),%xmm1
1780	leal	32(%edx),%edx
1781	xorps	%xmm0,%xmm2
1782.L073dec1_loop_13:
1783.byte	102,15,56,222,209
1784	decl	%ecx
1785	movups	(%edx),%xmm1
1786	leal	16(%edx),%edx
1787	jnz	.L073dec1_loop_13
1788.byte	102,15,56,223,209
1789	xorps	%xmm5,%xmm2
1790	movups	%xmm2,(%edi)
1791.L074xts_dec_steal:
1792	movzbl	16(%esi),%ecx
1793	movzbl	(%edi),%edx
1794	leal	1(%esi),%esi
1795	movb	%cl,(%edi)
1796	movb	%dl,16(%edi)
1797	leal	1(%edi),%edi
1798	subl	$1,%eax
1799	jnz	.L074xts_dec_steal
1800	subl	112(%esp),%edi
1801	movl	%ebp,%edx
1802	movl	%ebx,%ecx
1803	movups	(%edi),%xmm2
1804	xorps	%xmm6,%xmm2
1805	movups	(%edx),%xmm0
1806	movups	16(%edx),%xmm1
1807	leal	32(%edx),%edx
1808	xorps	%xmm0,%xmm2
1809.L075dec1_loop_14:
1810.byte	102,15,56,222,209
1811	decl	%ecx
1812	movups	(%edx),%xmm1
1813	leal	16(%edx),%edx
1814	jnz	.L075dec1_loop_14
1815.byte	102,15,56,223,209
1816	xorps	%xmm6,%xmm2
1817	movups	%xmm2,(%edi)
1818.L071xts_dec_ret:
1819	pxor	%xmm0,%xmm0
1820	pxor	%xmm1,%xmm1
1821	pxor	%xmm2,%xmm2
1822	movdqa	%xmm0,(%esp)
1823	pxor	%xmm3,%xmm3
1824	movdqa	%xmm0,16(%esp)
1825	pxor	%xmm4,%xmm4
1826	movdqa	%xmm0,32(%esp)
1827	pxor	%xmm5,%xmm5
1828	movdqa	%xmm0,48(%esp)
1829	pxor	%xmm6,%xmm6
1830	movdqa	%xmm0,64(%esp)
1831	pxor	%xmm7,%xmm7
1832	movdqa	%xmm0,80(%esp)
1833	movl	116(%esp),%esp
1834	popl	%edi
1835	popl	%esi
1836	popl	%ebx
1837	popl	%ebp
1838	ret
1839.size	aes_hw_xts_decrypt,.-.L_aes_hw_xts_decrypt_begin
1840.globl	aes_hw_cbc_encrypt
1841.hidden	aes_hw_cbc_encrypt
1842.type	aes_hw_cbc_encrypt,@function
1843.align	16
1844aes_hw_cbc_encrypt:
1845.L_aes_hw_cbc_encrypt_begin:
1846	pushl	%ebp
1847	pushl	%ebx
1848	pushl	%esi
1849	pushl	%edi
1850	movl	20(%esp),%esi
1851	movl	%esp,%ebx
1852	movl	24(%esp),%edi
1853	subl	$24,%ebx
1854	movl	28(%esp),%eax
1855	andl	$-16,%ebx
1856	movl	32(%esp),%edx
1857	movl	36(%esp),%ebp
1858	testl	%eax,%eax
1859	jz	.L076cbc_abort
1860	cmpl	$0,40(%esp)
1861	xchgl	%esp,%ebx
1862	movups	(%ebp),%xmm7
1863	movl	240(%edx),%ecx
1864	movl	%edx,%ebp
1865	movl	%ebx,16(%esp)
1866	movl	%ecx,%ebx
1867	je	.L077cbc_decrypt
1868	movaps	%xmm7,%xmm2
1869	cmpl	$16,%eax
1870	jb	.L078cbc_enc_tail
1871	subl	$16,%eax
1872	jmp	.L079cbc_enc_loop
1873.align	16
1874.L079cbc_enc_loop:
1875	movups	(%esi),%xmm7
1876	leal	16(%esi),%esi
1877	movups	(%edx),%xmm0
1878	movups	16(%edx),%xmm1
1879	xorps	%xmm0,%xmm7
1880	leal	32(%edx),%edx
1881	xorps	%xmm7,%xmm2
1882.L080enc1_loop_15:
1883.byte	102,15,56,220,209
1884	decl	%ecx
1885	movups	(%edx),%xmm1
1886	leal	16(%edx),%edx
1887	jnz	.L080enc1_loop_15
1888.byte	102,15,56,221,209
1889	movl	%ebx,%ecx
1890	movl	%ebp,%edx
1891	movups	%xmm2,(%edi)
1892	leal	16(%edi),%edi
1893	subl	$16,%eax
1894	jnc	.L079cbc_enc_loop
1895	addl	$16,%eax
1896	jnz	.L078cbc_enc_tail
1897	movaps	%xmm2,%xmm7
1898	pxor	%xmm2,%xmm2
1899	jmp	.L081cbc_ret
1900.L078cbc_enc_tail:
1901	movl	%eax,%ecx
1902.long	2767451785
1903	movl	$16,%ecx
1904	subl	%eax,%ecx
1905	xorl	%eax,%eax
1906.long	2868115081
1907	leal	-16(%edi),%edi
1908	movl	%ebx,%ecx
1909	movl	%edi,%esi
1910	movl	%ebp,%edx
1911	jmp	.L079cbc_enc_loop
1912.align	16
1913.L077cbc_decrypt:
1914	cmpl	$80,%eax
1915	jbe	.L082cbc_dec_tail
1916	movaps	%xmm7,(%esp)
1917	subl	$80,%eax
1918	jmp	.L083cbc_dec_loop6_enter
1919.align	16
1920.L084cbc_dec_loop6:
1921	movaps	%xmm0,(%esp)
1922	movups	%xmm7,(%edi)
1923	leal	16(%edi),%edi
1924.L083cbc_dec_loop6_enter:
1925	movdqu	(%esi),%xmm2
1926	movdqu	16(%esi),%xmm3
1927	movdqu	32(%esi),%xmm4
1928	movdqu	48(%esi),%xmm5
1929	movdqu	64(%esi),%xmm6
1930	movdqu	80(%esi),%xmm7
1931	call	_aesni_decrypt6
1932	movups	(%esi),%xmm1
1933	movups	16(%esi),%xmm0
1934	xorps	(%esp),%xmm2
1935	xorps	%xmm1,%xmm3
1936	movups	32(%esi),%xmm1
1937	xorps	%xmm0,%xmm4
1938	movups	48(%esi),%xmm0
1939	xorps	%xmm1,%xmm5
1940	movups	64(%esi),%xmm1
1941	xorps	%xmm0,%xmm6
1942	movups	80(%esi),%xmm0
1943	xorps	%xmm1,%xmm7
1944	movups	%xmm2,(%edi)
1945	movups	%xmm3,16(%edi)
1946	leal	96(%esi),%esi
1947	movups	%xmm4,32(%edi)
1948	movl	%ebx,%ecx
1949	movups	%xmm5,48(%edi)
1950	movl	%ebp,%edx
1951	movups	%xmm6,64(%edi)
1952	leal	80(%edi),%edi
1953	subl	$96,%eax
1954	ja	.L084cbc_dec_loop6
1955	movaps	%xmm7,%xmm2
1956	movaps	%xmm0,%xmm7
1957	addl	$80,%eax
1958	jle	.L085cbc_dec_clear_tail_collected
1959	movups	%xmm2,(%edi)
1960	leal	16(%edi),%edi
1961.L082cbc_dec_tail:
1962	movups	(%esi),%xmm2
1963	movaps	%xmm2,%xmm6
1964	cmpl	$16,%eax
1965	jbe	.L086cbc_dec_one
1966	movups	16(%esi),%xmm3
1967	movaps	%xmm3,%xmm5
1968	cmpl	$32,%eax
1969	jbe	.L087cbc_dec_two
1970	movups	32(%esi),%xmm4
1971	cmpl	$48,%eax
1972	jbe	.L088cbc_dec_three
1973	movups	48(%esi),%xmm5
1974	cmpl	$64,%eax
1975	jbe	.L089cbc_dec_four
1976	movups	64(%esi),%xmm6
1977	movaps	%xmm7,(%esp)
1978	movups	(%esi),%xmm2
1979	xorps	%xmm7,%xmm7
1980	call	_aesni_decrypt6
1981	movups	(%esi),%xmm1
1982	movups	16(%esi),%xmm0
1983	xorps	(%esp),%xmm2
1984	xorps	%xmm1,%xmm3
1985	movups	32(%esi),%xmm1
1986	xorps	%xmm0,%xmm4
1987	movups	48(%esi),%xmm0
1988	xorps	%xmm1,%xmm5
1989	movups	64(%esi),%xmm7
1990	xorps	%xmm0,%xmm6
1991	movups	%xmm2,(%edi)
1992	movups	%xmm3,16(%edi)
1993	pxor	%xmm3,%xmm3
1994	movups	%xmm4,32(%edi)
1995	pxor	%xmm4,%xmm4
1996	movups	%xmm5,48(%edi)
1997	pxor	%xmm5,%xmm5
1998	leal	64(%edi),%edi
1999	movaps	%xmm6,%xmm2
2000	pxor	%xmm6,%xmm6
2001	subl	$80,%eax
2002	jmp	.L090cbc_dec_tail_collected
2003.align	16
2004.L086cbc_dec_one:
2005	movups	(%edx),%xmm0
2006	movups	16(%edx),%xmm1
2007	leal	32(%edx),%edx
2008	xorps	%xmm0,%xmm2
2009.L091dec1_loop_16:
2010.byte	102,15,56,222,209
2011	decl	%ecx
2012	movups	(%edx),%xmm1
2013	leal	16(%edx),%edx
2014	jnz	.L091dec1_loop_16
2015.byte	102,15,56,223,209
2016	xorps	%xmm7,%xmm2
2017	movaps	%xmm6,%xmm7
2018	subl	$16,%eax
2019	jmp	.L090cbc_dec_tail_collected
2020.align	16
2021.L087cbc_dec_two:
2022	call	_aesni_decrypt2
2023	xorps	%xmm7,%xmm2
2024	xorps	%xmm6,%xmm3
2025	movups	%xmm2,(%edi)
2026	movaps	%xmm3,%xmm2
2027	pxor	%xmm3,%xmm3
2028	leal	16(%edi),%edi
2029	movaps	%xmm5,%xmm7
2030	subl	$32,%eax
2031	jmp	.L090cbc_dec_tail_collected
2032.align	16
2033.L088cbc_dec_three:
2034	call	_aesni_decrypt3
2035	xorps	%xmm7,%xmm2
2036	xorps	%xmm6,%xmm3
2037	xorps	%xmm5,%xmm4
2038	movups	%xmm2,(%edi)
2039	movaps	%xmm4,%xmm2
2040	pxor	%xmm4,%xmm4
2041	movups	%xmm3,16(%edi)
2042	pxor	%xmm3,%xmm3
2043	leal	32(%edi),%edi
2044	movups	32(%esi),%xmm7
2045	subl	$48,%eax
2046	jmp	.L090cbc_dec_tail_collected
2047.align	16
2048.L089cbc_dec_four:
2049	call	_aesni_decrypt4
2050	movups	16(%esi),%xmm1
2051	movups	32(%esi),%xmm0
2052	xorps	%xmm7,%xmm2
2053	movups	48(%esi),%xmm7
2054	xorps	%xmm6,%xmm3
2055	movups	%xmm2,(%edi)
2056	xorps	%xmm1,%xmm4
2057	movups	%xmm3,16(%edi)
2058	pxor	%xmm3,%xmm3
2059	xorps	%xmm0,%xmm5
2060	movups	%xmm4,32(%edi)
2061	pxor	%xmm4,%xmm4
2062	leal	48(%edi),%edi
2063	movaps	%xmm5,%xmm2
2064	pxor	%xmm5,%xmm5
2065	subl	$64,%eax
2066	jmp	.L090cbc_dec_tail_collected
2067.align	16
2068.L085cbc_dec_clear_tail_collected:
2069	pxor	%xmm3,%xmm3
2070	pxor	%xmm4,%xmm4
2071	pxor	%xmm5,%xmm5
2072	pxor	%xmm6,%xmm6
2073.L090cbc_dec_tail_collected:
2074	andl	$15,%eax
2075	jnz	.L092cbc_dec_tail_partial
2076	movups	%xmm2,(%edi)
2077	pxor	%xmm0,%xmm0
2078	jmp	.L081cbc_ret
2079.align	16
2080.L092cbc_dec_tail_partial:
2081	movaps	%xmm2,(%esp)
2082	pxor	%xmm0,%xmm0
2083	movl	$16,%ecx
2084	movl	%esp,%esi
2085	subl	%eax,%ecx
2086.long	2767451785
2087	movdqa	%xmm2,(%esp)
2088.L081cbc_ret:
2089	movl	16(%esp),%esp
2090	movl	36(%esp),%ebp
2091	pxor	%xmm2,%xmm2
2092	pxor	%xmm1,%xmm1
2093	movups	%xmm7,(%ebp)
2094	pxor	%xmm7,%xmm7
2095.L076cbc_abort:
2096	popl	%edi
2097	popl	%esi
2098	popl	%ebx
2099	popl	%ebp
2100	ret
2101.size	aes_hw_cbc_encrypt,.-.L_aes_hw_cbc_encrypt_begin
2102.hidden	_aesni_set_encrypt_key
2103.type	_aesni_set_encrypt_key,@function
2104.align	16
2105_aesni_set_encrypt_key:
2106	pushl	%ebp
2107	pushl	%ebx
2108	testl	%eax,%eax
2109	jz	.L093bad_pointer
2110	testl	%edx,%edx
2111	jz	.L093bad_pointer
2112	call	.L094pic
2113.L094pic:
2114	popl	%ebx
2115	leal	.Lkey_const-.L094pic(%ebx),%ebx
2116	leal	OPENSSL_ia32cap_P-.Lkey_const(%ebx),%ebp
2117	movups	(%eax),%xmm0
2118	xorps	%xmm4,%xmm4
2119	movl	4(%ebp),%ebp
2120	leal	16(%edx),%edx
2121	andl	$268437504,%ebp
2122	cmpl	$256,%ecx
2123	je	.L09514rounds
2124	cmpl	$192,%ecx
2125	je	.L09612rounds
2126	cmpl	$128,%ecx
2127	jne	.L097bad_keybits
2128.align	16
2129.L09810rounds:
2130	cmpl	$268435456,%ebp
2131	je	.L09910rounds_alt
2132	movl	$9,%ecx
2133	movups	%xmm0,-16(%edx)
2134.byte	102,15,58,223,200,1
2135	call	.L100key_128_cold
2136.byte	102,15,58,223,200,2
2137	call	.L101key_128
2138.byte	102,15,58,223,200,4
2139	call	.L101key_128
2140.byte	102,15,58,223,200,8
2141	call	.L101key_128
2142.byte	102,15,58,223,200,16
2143	call	.L101key_128
2144.byte	102,15,58,223,200,32
2145	call	.L101key_128
2146.byte	102,15,58,223,200,64
2147	call	.L101key_128
2148.byte	102,15,58,223,200,128
2149	call	.L101key_128
2150.byte	102,15,58,223,200,27
2151	call	.L101key_128
2152.byte	102,15,58,223,200,54
2153	call	.L101key_128
2154	movups	%xmm0,(%edx)
2155	movl	%ecx,80(%edx)
2156	jmp	.L102good_key
2157.align	16
2158.L101key_128:
2159	movups	%xmm0,(%edx)
2160	leal	16(%edx),%edx
2161.L100key_128_cold:
2162	shufps	$16,%xmm0,%xmm4
2163	xorps	%xmm4,%xmm0
2164	shufps	$140,%xmm0,%xmm4
2165	xorps	%xmm4,%xmm0
2166	shufps	$255,%xmm1,%xmm1
2167	xorps	%xmm1,%xmm0
2168	ret
2169.align	16
2170.L09910rounds_alt:
2171	movdqa	(%ebx),%xmm5
2172	movl	$8,%ecx
2173	movdqa	32(%ebx),%xmm4
2174	movdqa	%xmm0,%xmm2
2175	movdqu	%xmm0,-16(%edx)
2176.L103loop_key128:
2177.byte	102,15,56,0,197
2178.byte	102,15,56,221,196
2179	pslld	$1,%xmm4
2180	leal	16(%edx),%edx
2181	movdqa	%xmm2,%xmm3
2182	pslldq	$4,%xmm2
2183	pxor	%xmm2,%xmm3
2184	pslldq	$4,%xmm2
2185	pxor	%xmm2,%xmm3
2186	pslldq	$4,%xmm2
2187	pxor	%xmm3,%xmm2
2188	pxor	%xmm2,%xmm0
2189	movdqu	%xmm0,-16(%edx)
2190	movdqa	%xmm0,%xmm2
2191	decl	%ecx
2192	jnz	.L103loop_key128
2193	movdqa	48(%ebx),%xmm4
2194.byte	102,15,56,0,197
2195.byte	102,15,56,221,196
2196	pslld	$1,%xmm4
2197	movdqa	%xmm2,%xmm3
2198	pslldq	$4,%xmm2
2199	pxor	%xmm2,%xmm3
2200	pslldq	$4,%xmm2
2201	pxor	%xmm2,%xmm3
2202	pslldq	$4,%xmm2
2203	pxor	%xmm3,%xmm2
2204	pxor	%xmm2,%xmm0
2205	movdqu	%xmm0,(%edx)
2206	movdqa	%xmm0,%xmm2
2207.byte	102,15,56,0,197
2208.byte	102,15,56,221,196
2209	movdqa	%xmm2,%xmm3
2210	pslldq	$4,%xmm2
2211	pxor	%xmm2,%xmm3
2212	pslldq	$4,%xmm2
2213	pxor	%xmm2,%xmm3
2214	pslldq	$4,%xmm2
2215	pxor	%xmm3,%xmm2
2216	pxor	%xmm2,%xmm0
2217	movdqu	%xmm0,16(%edx)
2218	movl	$9,%ecx
2219	movl	%ecx,96(%edx)
2220	jmp	.L102good_key
2221.align	16
2222.L09612rounds:
2223	movq	16(%eax),%xmm2
2224	cmpl	$268435456,%ebp
2225	je	.L10412rounds_alt
2226	movl	$11,%ecx
2227	movups	%xmm0,-16(%edx)
2228.byte	102,15,58,223,202,1
2229	call	.L105key_192a_cold
2230.byte	102,15,58,223,202,2
2231	call	.L106key_192b
2232.byte	102,15,58,223,202,4
2233	call	.L107key_192a
2234.byte	102,15,58,223,202,8
2235	call	.L106key_192b
2236.byte	102,15,58,223,202,16
2237	call	.L107key_192a
2238.byte	102,15,58,223,202,32
2239	call	.L106key_192b
2240.byte	102,15,58,223,202,64
2241	call	.L107key_192a
2242.byte	102,15,58,223,202,128
2243	call	.L106key_192b
2244	movups	%xmm0,(%edx)
2245	movl	%ecx,48(%edx)
2246	jmp	.L102good_key
2247.align	16
2248.L107key_192a:
2249	movups	%xmm0,(%edx)
2250	leal	16(%edx),%edx
2251.align	16
2252.L105key_192a_cold:
2253	movaps	%xmm2,%xmm5
2254.L108key_192b_warm:
2255	shufps	$16,%xmm0,%xmm4
2256	movdqa	%xmm2,%xmm3
2257	xorps	%xmm4,%xmm0
2258	shufps	$140,%xmm0,%xmm4
2259	pslldq	$4,%xmm3
2260	xorps	%xmm4,%xmm0
2261	pshufd	$85,%xmm1,%xmm1
2262	pxor	%xmm3,%xmm2
2263	pxor	%xmm1,%xmm0
2264	pshufd	$255,%xmm0,%xmm3
2265	pxor	%xmm3,%xmm2
2266	ret
2267.align	16
2268.L106key_192b:
2269	movaps	%xmm0,%xmm3
2270	shufps	$68,%xmm0,%xmm5
2271	movups	%xmm5,(%edx)
2272	shufps	$78,%xmm2,%xmm3
2273	movups	%xmm3,16(%edx)
2274	leal	32(%edx),%edx
2275	jmp	.L108key_192b_warm
2276.align	16
2277.L10412rounds_alt:
2278	movdqa	16(%ebx),%xmm5
2279	movdqa	32(%ebx),%xmm4
2280	movl	$8,%ecx
2281	movdqu	%xmm0,-16(%edx)
2282.L109loop_key192:
2283	movq	%xmm2,(%edx)
2284	movdqa	%xmm2,%xmm1
2285.byte	102,15,56,0,213
2286.byte	102,15,56,221,212
2287	pslld	$1,%xmm4
2288	leal	24(%edx),%edx
2289	movdqa	%xmm0,%xmm3
2290	pslldq	$4,%xmm0
2291	pxor	%xmm0,%xmm3
2292	pslldq	$4,%xmm0
2293	pxor	%xmm0,%xmm3
2294	pslldq	$4,%xmm0
2295	pxor	%xmm3,%xmm0
2296	pshufd	$255,%xmm0,%xmm3
2297	pxor	%xmm1,%xmm3
2298	pslldq	$4,%xmm1
2299	pxor	%xmm1,%xmm3
2300	pxor	%xmm2,%xmm0
2301	pxor	%xmm3,%xmm2
2302	movdqu	%xmm0,-16(%edx)
2303	decl	%ecx
2304	jnz	.L109loop_key192
2305	movl	$11,%ecx
2306	movl	%ecx,32(%edx)
2307	jmp	.L102good_key
2308.align	16
2309.L09514rounds:
2310	movups	16(%eax),%xmm2
2311	leal	16(%edx),%edx
2312	cmpl	$268435456,%ebp
2313	je	.L11014rounds_alt
2314	movl	$13,%ecx
2315	movups	%xmm0,-32(%edx)
2316	movups	%xmm2,-16(%edx)
2317.byte	102,15,58,223,202,1
2318	call	.L111key_256a_cold
2319.byte	102,15,58,223,200,1
2320	call	.L112key_256b
2321.byte	102,15,58,223,202,2
2322	call	.L113key_256a
2323.byte	102,15,58,223,200,2
2324	call	.L112key_256b
2325.byte	102,15,58,223,202,4
2326	call	.L113key_256a
2327.byte	102,15,58,223,200,4
2328	call	.L112key_256b
2329.byte	102,15,58,223,202,8
2330	call	.L113key_256a
2331.byte	102,15,58,223,200,8
2332	call	.L112key_256b
2333.byte	102,15,58,223,202,16
2334	call	.L113key_256a
2335.byte	102,15,58,223,200,16
2336	call	.L112key_256b
2337.byte	102,15,58,223,202,32
2338	call	.L113key_256a
2339.byte	102,15,58,223,200,32
2340	call	.L112key_256b
2341.byte	102,15,58,223,202,64
2342	call	.L113key_256a
2343	movups	%xmm0,(%edx)
2344	movl	%ecx,16(%edx)
2345	xorl	%eax,%eax
2346	jmp	.L102good_key
2347.align	16
2348.L113key_256a:
2349	movups	%xmm2,(%edx)
2350	leal	16(%edx),%edx
2351.L111key_256a_cold:
2352	shufps	$16,%xmm0,%xmm4
2353	xorps	%xmm4,%xmm0
2354	shufps	$140,%xmm0,%xmm4
2355	xorps	%xmm4,%xmm0
2356	shufps	$255,%xmm1,%xmm1
2357	xorps	%xmm1,%xmm0
2358	ret
2359.align	16
2360.L112key_256b:
2361	movups	%xmm0,(%edx)
2362	leal	16(%edx),%edx
2363	shufps	$16,%xmm2,%xmm4
2364	xorps	%xmm4,%xmm2
2365	shufps	$140,%xmm2,%xmm4
2366	xorps	%xmm4,%xmm2
2367	shufps	$170,%xmm1,%xmm1
2368	xorps	%xmm1,%xmm2
2369	ret
2370.align	16
2371.L11014rounds_alt:
2372	movdqa	(%ebx),%xmm5
2373	movdqa	32(%ebx),%xmm4
2374	movl	$7,%ecx
2375	movdqu	%xmm0,-32(%edx)
2376	movdqa	%xmm2,%xmm1
2377	movdqu	%xmm2,-16(%edx)
2378.L114loop_key256:
2379.byte	102,15,56,0,213
2380.byte	102,15,56,221,212
2381	movdqa	%xmm0,%xmm3
2382	pslldq	$4,%xmm0
2383	pxor	%xmm0,%xmm3
2384	pslldq	$4,%xmm0
2385	pxor	%xmm0,%xmm3
2386	pslldq	$4,%xmm0
2387	pxor	%xmm3,%xmm0
2388	pslld	$1,%xmm4
2389	pxor	%xmm2,%xmm0
2390	movdqu	%xmm0,(%edx)
2391	decl	%ecx
2392	jz	.L115done_key256
2393	pshufd	$255,%xmm0,%xmm2
2394	pxor	%xmm3,%xmm3
2395.byte	102,15,56,221,211
2396	movdqa	%xmm1,%xmm3
2397	pslldq	$4,%xmm1
2398	pxor	%xmm1,%xmm3
2399	pslldq	$4,%xmm1
2400	pxor	%xmm1,%xmm3
2401	pslldq	$4,%xmm1
2402	pxor	%xmm3,%xmm1
2403	pxor	%xmm1,%xmm2
2404	movdqu	%xmm2,16(%edx)
2405	leal	32(%edx),%edx
2406	movdqa	%xmm2,%xmm1
2407	jmp	.L114loop_key256
2408.L115done_key256:
2409	movl	$13,%ecx
2410	movl	%ecx,16(%edx)
2411.L102good_key:
2412	pxor	%xmm0,%xmm0
2413	pxor	%xmm1,%xmm1
2414	pxor	%xmm2,%xmm2
2415	pxor	%xmm3,%xmm3
2416	pxor	%xmm4,%xmm4
2417	pxor	%xmm5,%xmm5
2418	xorl	%eax,%eax
2419	popl	%ebx
2420	popl	%ebp
2421	ret
2422.align	4
2423.L093bad_pointer:
2424	movl	$-1,%eax
2425	popl	%ebx
2426	popl	%ebp
2427	ret
2428.align	4
2429.L097bad_keybits:
2430	pxor	%xmm0,%xmm0
2431	movl	$-2,%eax
2432	popl	%ebx
2433	popl	%ebp
2434	ret
2435.size	_aesni_set_encrypt_key,.-_aesni_set_encrypt_key
2436.globl	aes_hw_set_encrypt_key
2437.hidden	aes_hw_set_encrypt_key
2438.type	aes_hw_set_encrypt_key,@function
2439.align	16
2440aes_hw_set_encrypt_key:
2441.L_aes_hw_set_encrypt_key_begin:
2442#ifdef BORINGSSL_DISPATCH_TEST
2443	pushl	%ebx
2444	pushl	%edx
2445	call	.L116pic
2446.L116pic:
2447	popl	%ebx
2448	leal	BORINGSSL_function_hit+3-.L116pic(%ebx),%ebx
2449	movl	$1,%edx
2450	movb	%dl,(%ebx)
2451	popl	%edx
2452	popl	%ebx
2453#endif
2454	movl	4(%esp),%eax
2455	movl	8(%esp),%ecx
2456	movl	12(%esp),%edx
2457	call	_aesni_set_encrypt_key
2458	ret
2459.size	aes_hw_set_encrypt_key,.-.L_aes_hw_set_encrypt_key_begin
2460.globl	aes_hw_set_decrypt_key
2461.hidden	aes_hw_set_decrypt_key
2462.type	aes_hw_set_decrypt_key,@function
2463.align	16
2464aes_hw_set_decrypt_key:
2465.L_aes_hw_set_decrypt_key_begin:
2466	movl	4(%esp),%eax
2467	movl	8(%esp),%ecx
2468	movl	12(%esp),%edx
2469	call	_aesni_set_encrypt_key
2470	movl	12(%esp),%edx
2471	shll	$4,%ecx
2472	testl	%eax,%eax
2473	jnz	.L117dec_key_ret
2474	leal	16(%edx,%ecx,1),%eax
2475	movups	(%edx),%xmm0
2476	movups	(%eax),%xmm1
2477	movups	%xmm0,(%eax)
2478	movups	%xmm1,(%edx)
2479	leal	16(%edx),%edx
2480	leal	-16(%eax),%eax
2481.L118dec_key_inverse:
2482	movups	(%edx),%xmm0
2483	movups	(%eax),%xmm1
2484.byte	102,15,56,219,192
2485.byte	102,15,56,219,201
2486	leal	16(%edx),%edx
2487	leal	-16(%eax),%eax
2488	movups	%xmm0,16(%eax)
2489	movups	%xmm1,-16(%edx)
2490	cmpl	%edx,%eax
2491	ja	.L118dec_key_inverse
2492	movups	(%edx),%xmm0
2493.byte	102,15,56,219,192
2494	movups	%xmm0,(%edx)
2495	pxor	%xmm0,%xmm0
2496	pxor	%xmm1,%xmm1
2497	xorl	%eax,%eax
2498.L117dec_key_ret:
2499	ret
2500.size	aes_hw_set_decrypt_key,.-.L_aes_hw_set_decrypt_key_begin
2501.align	64
2502.Lkey_const:
2503.long	202313229,202313229,202313229,202313229
2504.long	67569157,67569157,67569157,67569157
2505.long	1,1,1,1
2506.long	27,27,27,27
2507.byte	65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69
2508.byte	83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83
2509.byte	32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
2510.byte	115,108,46,111,114,103,62,0
2511#endif  // !defined(OPENSSL_NO_ASM) && defined(OPENSSL_X86) && defined(__ELF__)
2512