]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - secure/lib/libcrypto/i386/aesni-x86.s
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / secure / lib / libcrypto / i386 / aesni-x86.s
1         # $FreeBSD$
2 .file   "aesni-x86.s"
3 .text
4 .globl  aesni_encrypt
5 .type   aesni_encrypt,@function
6 .align  16
7 aesni_encrypt:
8 .L_aesni_encrypt_begin:
9         movl    4(%esp),%eax
10         movl    12(%esp),%edx
11         movups  (%eax),%xmm2
12         movl    240(%edx),%ecx
13         movl    8(%esp),%eax
14         movups  (%edx),%xmm0
15         movups  16(%edx),%xmm1
16         leal    32(%edx),%edx
17         xorps   %xmm0,%xmm2
18 .L000enc1_loop_1:
19 .byte   102,15,56,220,209
20         decl    %ecx
21         movups  (%edx),%xmm1
22         leal    16(%edx),%edx
23         jnz     .L000enc1_loop_1
24 .byte   102,15,56,221,209
25         movups  %xmm2,(%eax)
26         ret
27 .size   aesni_encrypt,.-.L_aesni_encrypt_begin
28 .globl  aesni_decrypt
29 .type   aesni_decrypt,@function
30 .align  16
31 aesni_decrypt:
32 .L_aesni_decrypt_begin:
33         movl    4(%esp),%eax
34         movl    12(%esp),%edx
35         movups  (%eax),%xmm2
36         movl    240(%edx),%ecx
37         movl    8(%esp),%eax
38         movups  (%edx),%xmm0
39         movups  16(%edx),%xmm1
40         leal    32(%edx),%edx
41         xorps   %xmm0,%xmm2
42 .L001dec1_loop_2:
43 .byte   102,15,56,222,209
44         decl    %ecx
45         movups  (%edx),%xmm1
46         leal    16(%edx),%edx
47         jnz     .L001dec1_loop_2
48 .byte   102,15,56,223,209
49         movups  %xmm2,(%eax)
50         ret
51 .size   aesni_decrypt,.-.L_aesni_decrypt_begin
52 .type   _aesni_encrypt3,@function
53 .align  16
54 _aesni_encrypt3:
55         movups  (%edx),%xmm0
56         shrl    $1,%ecx
57         movups  16(%edx),%xmm1
58         leal    32(%edx),%edx
59         xorps   %xmm0,%xmm2
60         pxor    %xmm0,%xmm3
61         pxor    %xmm0,%xmm4
62         movups  (%edx),%xmm0
63 .L002enc3_loop:
64 .byte   102,15,56,220,209
65 .byte   102,15,56,220,217
66         decl    %ecx
67 .byte   102,15,56,220,225
68         movups  16(%edx),%xmm1
69 .byte   102,15,56,220,208
70 .byte   102,15,56,220,216
71         leal    32(%edx),%edx
72 .byte   102,15,56,220,224
73         movups  (%edx),%xmm0
74         jnz     .L002enc3_loop
75 .byte   102,15,56,220,209
76 .byte   102,15,56,220,217
77 .byte   102,15,56,220,225
78 .byte   102,15,56,221,208
79 .byte   102,15,56,221,216
80 .byte   102,15,56,221,224
81         ret
82 .size   _aesni_encrypt3,.-_aesni_encrypt3
83 .type   _aesni_decrypt3,@function
84 .align  16
85 _aesni_decrypt3:
86         movups  (%edx),%xmm0
87         shrl    $1,%ecx
88         movups  16(%edx),%xmm1
89         leal    32(%edx),%edx
90         xorps   %xmm0,%xmm2
91         pxor    %xmm0,%xmm3
92         pxor    %xmm0,%xmm4
93         movups  (%edx),%xmm0
94 .L003dec3_loop:
95 .byte   102,15,56,222,209
96 .byte   102,15,56,222,217
97         decl    %ecx
98 .byte   102,15,56,222,225
99         movups  16(%edx),%xmm1
100 .byte   102,15,56,222,208
101 .byte   102,15,56,222,216
102         leal    32(%edx),%edx
103 .byte   102,15,56,222,224
104         movups  (%edx),%xmm0
105         jnz     .L003dec3_loop
106 .byte   102,15,56,222,209
107 .byte   102,15,56,222,217
108 .byte   102,15,56,222,225
109 .byte   102,15,56,223,208
110 .byte   102,15,56,223,216
111 .byte   102,15,56,223,224
112         ret
113 .size   _aesni_decrypt3,.-_aesni_decrypt3
114 .type   _aesni_encrypt4,@function
115 .align  16
116 _aesni_encrypt4:
117         movups  (%edx),%xmm0
118         movups  16(%edx),%xmm1
119         shrl    $1,%ecx
120         leal    32(%edx),%edx
121         xorps   %xmm0,%xmm2
122         pxor    %xmm0,%xmm3
123         pxor    %xmm0,%xmm4
124         pxor    %xmm0,%xmm5
125         movups  (%edx),%xmm0
126 .L004enc4_loop:
127 .byte   102,15,56,220,209
128 .byte   102,15,56,220,217
129         decl    %ecx
130 .byte   102,15,56,220,225
131 .byte   102,15,56,220,233
132         movups  16(%edx),%xmm1
133 .byte   102,15,56,220,208
134 .byte   102,15,56,220,216
135         leal    32(%edx),%edx
136 .byte   102,15,56,220,224
137 .byte   102,15,56,220,232
138         movups  (%edx),%xmm0
139         jnz     .L004enc4_loop
140 .byte   102,15,56,220,209
141 .byte   102,15,56,220,217
142 .byte   102,15,56,220,225
143 .byte   102,15,56,220,233
144 .byte   102,15,56,221,208
145 .byte   102,15,56,221,216
146 .byte   102,15,56,221,224
147 .byte   102,15,56,221,232
148         ret
149 .size   _aesni_encrypt4,.-_aesni_encrypt4
150 .type   _aesni_decrypt4,@function
151 .align  16
152 _aesni_decrypt4:
153         movups  (%edx),%xmm0
154         movups  16(%edx),%xmm1
155         shrl    $1,%ecx
156         leal    32(%edx),%edx
157         xorps   %xmm0,%xmm2
158         pxor    %xmm0,%xmm3
159         pxor    %xmm0,%xmm4
160         pxor    %xmm0,%xmm5
161         movups  (%edx),%xmm0
162 .L005dec4_loop:
163 .byte   102,15,56,222,209
164 .byte   102,15,56,222,217
165         decl    %ecx
166 .byte   102,15,56,222,225
167 .byte   102,15,56,222,233
168         movups  16(%edx),%xmm1
169 .byte   102,15,56,222,208
170 .byte   102,15,56,222,216
171         leal    32(%edx),%edx
172 .byte   102,15,56,222,224
173 .byte   102,15,56,222,232
174         movups  (%edx),%xmm0
175         jnz     .L005dec4_loop
176 .byte   102,15,56,222,209
177 .byte   102,15,56,222,217
178 .byte   102,15,56,222,225
179 .byte   102,15,56,222,233
180 .byte   102,15,56,223,208
181 .byte   102,15,56,223,216
182 .byte   102,15,56,223,224
183 .byte   102,15,56,223,232
184         ret
185 .size   _aesni_decrypt4,.-_aesni_decrypt4
186 .type   _aesni_encrypt6,@function
187 .align  16
188 _aesni_encrypt6:
189         movups  (%edx),%xmm0
190         shrl    $1,%ecx
191         movups  16(%edx),%xmm1
192         leal    32(%edx),%edx
193         xorps   %xmm0,%xmm2
194         pxor    %xmm0,%xmm3
195 .byte   102,15,56,220,209
196         pxor    %xmm0,%xmm4
197 .byte   102,15,56,220,217
198         pxor    %xmm0,%xmm5
199         decl    %ecx
200 .byte   102,15,56,220,225
201         pxor    %xmm0,%xmm6
202 .byte   102,15,56,220,233
203         pxor    %xmm0,%xmm7
204 .byte   102,15,56,220,241
205         movups  (%edx),%xmm0
206 .byte   102,15,56,220,249
207         jmp     .L_aesni_encrypt6_enter
208 .align  16
209 .L006enc6_loop:
210 .byte   102,15,56,220,209
211 .byte   102,15,56,220,217
212         decl    %ecx
213 .byte   102,15,56,220,225
214 .byte   102,15,56,220,233
215 .byte   102,15,56,220,241
216 .byte   102,15,56,220,249
217 .align  16
218 .L_aesni_encrypt6_enter:
219         movups  16(%edx),%xmm1
220 .byte   102,15,56,220,208
221 .byte   102,15,56,220,216
222         leal    32(%edx),%edx
223 .byte   102,15,56,220,224
224 .byte   102,15,56,220,232
225 .byte   102,15,56,220,240
226 .byte   102,15,56,220,248
227         movups  (%edx),%xmm0
228         jnz     .L006enc6_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,220,241
234 .byte   102,15,56,220,249
235 .byte   102,15,56,221,208
236 .byte   102,15,56,221,216
237 .byte   102,15,56,221,224
238 .byte   102,15,56,221,232
239 .byte   102,15,56,221,240
240 .byte   102,15,56,221,248
241         ret
242 .size   _aesni_encrypt6,.-_aesni_encrypt6
243 .type   _aesni_decrypt6,@function
244 .align  16
245 _aesni_decrypt6:
246         movups  (%edx),%xmm0
247         shrl    $1,%ecx
248         movups  16(%edx),%xmm1
249         leal    32(%edx),%edx
250         xorps   %xmm0,%xmm2
251         pxor    %xmm0,%xmm3
252 .byte   102,15,56,222,209
253         pxor    %xmm0,%xmm4
254 .byte   102,15,56,222,217
255         pxor    %xmm0,%xmm5
256         decl    %ecx
257 .byte   102,15,56,222,225
258         pxor    %xmm0,%xmm6
259 .byte   102,15,56,222,233
260         pxor    %xmm0,%xmm7
261 .byte   102,15,56,222,241
262         movups  (%edx),%xmm0
263 .byte   102,15,56,222,249
264         jmp     .L_aesni_decrypt6_enter
265 .align  16
266 .L007dec6_loop:
267 .byte   102,15,56,222,209
268 .byte   102,15,56,222,217
269         decl    %ecx
270 .byte   102,15,56,222,225
271 .byte   102,15,56,222,233
272 .byte   102,15,56,222,241
273 .byte   102,15,56,222,249
274 .align  16
275 .L_aesni_decrypt6_enter:
276         movups  16(%edx),%xmm1
277 .byte   102,15,56,222,208
278 .byte   102,15,56,222,216
279         leal    32(%edx),%edx
280 .byte   102,15,56,222,224
281 .byte   102,15,56,222,232
282 .byte   102,15,56,222,240
283 .byte   102,15,56,222,248
284         movups  (%edx),%xmm0
285         jnz     .L007dec6_loop
286 .byte   102,15,56,222,209
287 .byte   102,15,56,222,217
288 .byte   102,15,56,222,225
289 .byte   102,15,56,222,233
290 .byte   102,15,56,222,241
291 .byte   102,15,56,222,249
292 .byte   102,15,56,223,208
293 .byte   102,15,56,223,216
294 .byte   102,15,56,223,224
295 .byte   102,15,56,223,232
296 .byte   102,15,56,223,240
297 .byte   102,15,56,223,248
298         ret
299 .size   _aesni_decrypt6,.-_aesni_decrypt6
300 .globl  aesni_ecb_encrypt
301 .type   aesni_ecb_encrypt,@function
302 .align  16
303 aesni_ecb_encrypt:
304 .L_aesni_ecb_encrypt_begin:
305         pushl   %ebp
306         pushl   %ebx
307         pushl   %esi
308         pushl   %edi
309         movl    20(%esp),%esi
310         movl    24(%esp),%edi
311         movl    28(%esp),%eax
312         movl    32(%esp),%edx
313         movl    36(%esp),%ebx
314         andl    $-16,%eax
315         jz      .L008ecb_ret
316         movl    240(%edx),%ecx
317         testl   %ebx,%ebx
318         jz      .L009ecb_decrypt
319         movl    %edx,%ebp
320         movl    %ecx,%ebx
321         cmpl    $96,%eax
322         jb      .L010ecb_enc_tail
323         movdqu  (%esi),%xmm2
324         movdqu  16(%esi),%xmm3
325         movdqu  32(%esi),%xmm4
326         movdqu  48(%esi),%xmm5
327         movdqu  64(%esi),%xmm6
328         movdqu  80(%esi),%xmm7
329         leal    96(%esi),%esi
330         subl    $96,%eax
331         jmp     .L011ecb_enc_loop6_enter
332 .align  16
333 .L012ecb_enc_loop6:
334         movups  %xmm2,(%edi)
335         movdqu  (%esi),%xmm2
336         movups  %xmm3,16(%edi)
337         movdqu  16(%esi),%xmm3
338         movups  %xmm4,32(%edi)
339         movdqu  32(%esi),%xmm4
340         movups  %xmm5,48(%edi)
341         movdqu  48(%esi),%xmm5
342         movups  %xmm6,64(%edi)
343         movdqu  64(%esi),%xmm6
344         movups  %xmm7,80(%edi)
345         leal    96(%edi),%edi
346         movdqu  80(%esi),%xmm7
347         leal    96(%esi),%esi
348 .L011ecb_enc_loop6_enter:
349         call    _aesni_encrypt6
350         movl    %ebp,%edx
351         movl    %ebx,%ecx
352         subl    $96,%eax
353         jnc     .L012ecb_enc_loop6
354         movups  %xmm2,(%edi)
355         movups  %xmm3,16(%edi)
356         movups  %xmm4,32(%edi)
357         movups  %xmm5,48(%edi)
358         movups  %xmm6,64(%edi)
359         movups  %xmm7,80(%edi)
360         leal    96(%edi),%edi
361         addl    $96,%eax
362         jz      .L008ecb_ret
363 .L010ecb_enc_tail:
364         movups  (%esi),%xmm2
365         cmpl    $32,%eax
366         jb      .L013ecb_enc_one
367         movups  16(%esi),%xmm3
368         je      .L014ecb_enc_two
369         movups  32(%esi),%xmm4
370         cmpl    $64,%eax
371         jb      .L015ecb_enc_three
372         movups  48(%esi),%xmm5
373         je      .L016ecb_enc_four
374         movups  64(%esi),%xmm6
375         xorps   %xmm7,%xmm7
376         call    _aesni_encrypt6
377         movups  %xmm2,(%edi)
378         movups  %xmm3,16(%edi)
379         movups  %xmm4,32(%edi)
380         movups  %xmm5,48(%edi)
381         movups  %xmm6,64(%edi)
382         jmp     .L008ecb_ret
383 .align  16
384 .L013ecb_enc_one:
385         movups  (%edx),%xmm0
386         movups  16(%edx),%xmm1
387         leal    32(%edx),%edx
388         xorps   %xmm0,%xmm2
389 .L017enc1_loop_3:
390 .byte   102,15,56,220,209
391         decl    %ecx
392         movups  (%edx),%xmm1
393         leal    16(%edx),%edx
394         jnz     .L017enc1_loop_3
395 .byte   102,15,56,221,209
396         movups  %xmm2,(%edi)
397         jmp     .L008ecb_ret
398 .align  16
399 .L014ecb_enc_two:
400         xorps   %xmm4,%xmm4
401         call    _aesni_encrypt3
402         movups  %xmm2,(%edi)
403         movups  %xmm3,16(%edi)
404         jmp     .L008ecb_ret
405 .align  16
406 .L015ecb_enc_three:
407         call    _aesni_encrypt3
408         movups  %xmm2,(%edi)
409         movups  %xmm3,16(%edi)
410         movups  %xmm4,32(%edi)
411         jmp     .L008ecb_ret
412 .align  16
413 .L016ecb_enc_four:
414         call    _aesni_encrypt4
415         movups  %xmm2,(%edi)
416         movups  %xmm3,16(%edi)
417         movups  %xmm4,32(%edi)
418         movups  %xmm5,48(%edi)
419         jmp     .L008ecb_ret
420 .align  16
421 .L009ecb_decrypt:
422         movl    %edx,%ebp
423         movl    %ecx,%ebx
424         cmpl    $96,%eax
425         jb      .L018ecb_dec_tail
426         movdqu  (%esi),%xmm2
427         movdqu  16(%esi),%xmm3
428         movdqu  32(%esi),%xmm4
429         movdqu  48(%esi),%xmm5
430         movdqu  64(%esi),%xmm6
431         movdqu  80(%esi),%xmm7
432         leal    96(%esi),%esi
433         subl    $96,%eax
434         jmp     .L019ecb_dec_loop6_enter
435 .align  16
436 .L020ecb_dec_loop6:
437         movups  %xmm2,(%edi)
438         movdqu  (%esi),%xmm2
439         movups  %xmm3,16(%edi)
440         movdqu  16(%esi),%xmm3
441         movups  %xmm4,32(%edi)
442         movdqu  32(%esi),%xmm4
443         movups  %xmm5,48(%edi)
444         movdqu  48(%esi),%xmm5
445         movups  %xmm6,64(%edi)
446         movdqu  64(%esi),%xmm6
447         movups  %xmm7,80(%edi)
448         leal    96(%edi),%edi
449         movdqu  80(%esi),%xmm7
450         leal    96(%esi),%esi
451 .L019ecb_dec_loop6_enter:
452         call    _aesni_decrypt6
453         movl    %ebp,%edx
454         movl    %ebx,%ecx
455         subl    $96,%eax
456         jnc     .L020ecb_dec_loop6
457         movups  %xmm2,(%edi)
458         movups  %xmm3,16(%edi)
459         movups  %xmm4,32(%edi)
460         movups  %xmm5,48(%edi)
461         movups  %xmm6,64(%edi)
462         movups  %xmm7,80(%edi)
463         leal    96(%edi),%edi
464         addl    $96,%eax
465         jz      .L008ecb_ret
466 .L018ecb_dec_tail:
467         movups  (%esi),%xmm2
468         cmpl    $32,%eax
469         jb      .L021ecb_dec_one
470         movups  16(%esi),%xmm3
471         je      .L022ecb_dec_two
472         movups  32(%esi),%xmm4
473         cmpl    $64,%eax
474         jb      .L023ecb_dec_three
475         movups  48(%esi),%xmm5
476         je      .L024ecb_dec_four
477         movups  64(%esi),%xmm6
478         xorps   %xmm7,%xmm7
479         call    _aesni_decrypt6
480         movups  %xmm2,(%edi)
481         movups  %xmm3,16(%edi)
482         movups  %xmm4,32(%edi)
483         movups  %xmm5,48(%edi)
484         movups  %xmm6,64(%edi)
485         jmp     .L008ecb_ret
486 .align  16
487 .L021ecb_dec_one:
488         movups  (%edx),%xmm0
489         movups  16(%edx),%xmm1
490         leal    32(%edx),%edx
491         xorps   %xmm0,%xmm2
492 .L025dec1_loop_4:
493 .byte   102,15,56,222,209
494         decl    %ecx
495         movups  (%edx),%xmm1
496         leal    16(%edx),%edx
497         jnz     .L025dec1_loop_4
498 .byte   102,15,56,223,209
499         movups  %xmm2,(%edi)
500         jmp     .L008ecb_ret
501 .align  16
502 .L022ecb_dec_two:
503         xorps   %xmm4,%xmm4
504         call    _aesni_decrypt3
505         movups  %xmm2,(%edi)
506         movups  %xmm3,16(%edi)
507         jmp     .L008ecb_ret
508 .align  16
509 .L023ecb_dec_three:
510         call    _aesni_decrypt3
511         movups  %xmm2,(%edi)
512         movups  %xmm3,16(%edi)
513         movups  %xmm4,32(%edi)
514         jmp     .L008ecb_ret
515 .align  16
516 .L024ecb_dec_four:
517         call    _aesni_decrypt4
518         movups  %xmm2,(%edi)
519         movups  %xmm3,16(%edi)
520         movups  %xmm4,32(%edi)
521         movups  %xmm5,48(%edi)
522 .L008ecb_ret:
523         popl    %edi
524         popl    %esi
525         popl    %ebx
526         popl    %ebp
527         ret
528 .size   aesni_ecb_encrypt,.-.L_aesni_ecb_encrypt_begin
529 .globl  aesni_ccm64_encrypt_blocks
530 .type   aesni_ccm64_encrypt_blocks,@function
531 .align  16
532 aesni_ccm64_encrypt_blocks:
533 .L_aesni_ccm64_encrypt_blocks_begin:
534         pushl   %ebp
535         pushl   %ebx
536         pushl   %esi
537         pushl   %edi
538         movl    20(%esp),%esi
539         movl    24(%esp),%edi
540         movl    28(%esp),%eax
541         movl    32(%esp),%edx
542         movl    36(%esp),%ebx
543         movl    40(%esp),%ecx
544         movl    %esp,%ebp
545         subl    $60,%esp
546         andl    $-16,%esp
547         movl    %ebp,48(%esp)
548         movdqu  (%ebx),%xmm7
549         movdqu  (%ecx),%xmm3
550         movl    240(%edx),%ecx
551         movl    $202182159,(%esp)
552         movl    $134810123,4(%esp)
553         movl    $67438087,8(%esp)
554         movl    $66051,12(%esp)
555         movl    $1,%ebx
556         xorl    %ebp,%ebp
557         movl    %ebx,16(%esp)
558         movl    %ebp,20(%esp)
559         movl    %ebp,24(%esp)
560         movl    %ebp,28(%esp)
561         shrl    $1,%ecx
562         leal    (%edx),%ebp
563         movdqa  (%esp),%xmm5
564         movdqa  %xmm7,%xmm2
565         movl    %ecx,%ebx
566 .byte   102,15,56,0,253
567 .L026ccm64_enc_outer:
568         movups  (%ebp),%xmm0
569         movl    %ebx,%ecx
570         movups  (%esi),%xmm6
571         xorps   %xmm0,%xmm2
572         movups  16(%ebp),%xmm1
573         xorps   %xmm6,%xmm0
574         leal    32(%ebp),%edx
575         xorps   %xmm0,%xmm3
576         movups  (%edx),%xmm0
577 .L027ccm64_enc2_loop:
578 .byte   102,15,56,220,209
579         decl    %ecx
580 .byte   102,15,56,220,217
581         movups  16(%edx),%xmm1
582 .byte   102,15,56,220,208
583         leal    32(%edx),%edx
584 .byte   102,15,56,220,216
585         movups  (%edx),%xmm0
586         jnz     .L027ccm64_enc2_loop
587 .byte   102,15,56,220,209
588 .byte   102,15,56,220,217
589         paddq   16(%esp),%xmm7
590 .byte   102,15,56,221,208
591 .byte   102,15,56,221,216
592         decl    %eax
593         leal    16(%esi),%esi
594         xorps   %xmm2,%xmm6
595         movdqa  %xmm7,%xmm2
596         movups  %xmm6,(%edi)
597         leal    16(%edi),%edi
598 .byte   102,15,56,0,213
599         jnz     .L026ccm64_enc_outer
600         movl    48(%esp),%esp
601         movl    40(%esp),%edi
602         movups  %xmm3,(%edi)
603         popl    %edi
604         popl    %esi
605         popl    %ebx
606         popl    %ebp
607         ret
608 .size   aesni_ccm64_encrypt_blocks,.-.L_aesni_ccm64_encrypt_blocks_begin
609 .globl  aesni_ccm64_decrypt_blocks
610 .type   aesni_ccm64_decrypt_blocks,@function
611 .align  16
612 aesni_ccm64_decrypt_blocks:
613 .L_aesni_ccm64_decrypt_blocks_begin:
614         pushl   %ebp
615         pushl   %ebx
616         pushl   %esi
617         pushl   %edi
618         movl    20(%esp),%esi
619         movl    24(%esp),%edi
620         movl    28(%esp),%eax
621         movl    32(%esp),%edx
622         movl    36(%esp),%ebx
623         movl    40(%esp),%ecx
624         movl    %esp,%ebp
625         subl    $60,%esp
626         andl    $-16,%esp
627         movl    %ebp,48(%esp)
628         movdqu  (%ebx),%xmm7
629         movdqu  (%ecx),%xmm3
630         movl    240(%edx),%ecx
631         movl    $202182159,(%esp)
632         movl    $134810123,4(%esp)
633         movl    $67438087,8(%esp)
634         movl    $66051,12(%esp)
635         movl    $1,%ebx
636         xorl    %ebp,%ebp
637         movl    %ebx,16(%esp)
638         movl    %ebp,20(%esp)
639         movl    %ebp,24(%esp)
640         movl    %ebp,28(%esp)
641         movdqa  (%esp),%xmm5
642         movdqa  %xmm7,%xmm2
643         movl    %edx,%ebp
644         movl    %ecx,%ebx
645 .byte   102,15,56,0,253
646         movups  (%edx),%xmm0
647         movups  16(%edx),%xmm1
648         leal    32(%edx),%edx
649         xorps   %xmm0,%xmm2
650 .L028enc1_loop_5:
651 .byte   102,15,56,220,209
652         decl    %ecx
653         movups  (%edx),%xmm1
654         leal    16(%edx),%edx
655         jnz     .L028enc1_loop_5
656 .byte   102,15,56,221,209
657         movups  (%esi),%xmm6
658         paddq   16(%esp),%xmm7
659         leal    16(%esi),%esi
660         jmp     .L029ccm64_dec_outer
661 .align  16
662 .L029ccm64_dec_outer:
663         xorps   %xmm2,%xmm6
664         movdqa  %xmm7,%xmm2
665         movl    %ebx,%ecx
666         movups  %xmm6,(%edi)
667         leal    16(%edi),%edi
668 .byte   102,15,56,0,213
669         subl    $1,%eax
670         jz      .L030ccm64_dec_break
671         movups  (%ebp),%xmm0
672         shrl    $1,%ecx
673         movups  16(%ebp),%xmm1
674         xorps   %xmm0,%xmm6
675         leal    32(%ebp),%edx
676         xorps   %xmm0,%xmm2
677         xorps   %xmm6,%xmm3
678         movups  (%edx),%xmm0
679 .L031ccm64_dec2_loop:
680 .byte   102,15,56,220,209
681         decl    %ecx
682 .byte   102,15,56,220,217
683         movups  16(%edx),%xmm1
684 .byte   102,15,56,220,208
685         leal    32(%edx),%edx
686 .byte   102,15,56,220,216
687         movups  (%edx),%xmm0
688         jnz     .L031ccm64_dec2_loop
689         movups  (%esi),%xmm6
690         paddq   16(%esp),%xmm7
691 .byte   102,15,56,220,209
692 .byte   102,15,56,220,217
693         leal    16(%esi),%esi
694 .byte   102,15,56,221,208
695 .byte   102,15,56,221,216
696         jmp     .L029ccm64_dec_outer
697 .align  16
698 .L030ccm64_dec_break:
699         movl    %ebp,%edx
700         movups  (%edx),%xmm0
701         movups  16(%edx),%xmm1
702         xorps   %xmm0,%xmm6
703         leal    32(%edx),%edx
704         xorps   %xmm6,%xmm3
705 .L032enc1_loop_6:
706 .byte   102,15,56,220,217
707         decl    %ecx
708         movups  (%edx),%xmm1
709         leal    16(%edx),%edx
710         jnz     .L032enc1_loop_6
711 .byte   102,15,56,221,217
712         movl    48(%esp),%esp
713         movl    40(%esp),%edi
714         movups  %xmm3,(%edi)
715         popl    %edi
716         popl    %esi
717         popl    %ebx
718         popl    %ebp
719         ret
720 .size   aesni_ccm64_decrypt_blocks,.-.L_aesni_ccm64_decrypt_blocks_begin
721 .globl  aesni_ctr32_encrypt_blocks
722 .type   aesni_ctr32_encrypt_blocks,@function
723 .align  16
724 aesni_ctr32_encrypt_blocks:
725 .L_aesni_ctr32_encrypt_blocks_begin:
726         pushl   %ebp
727         pushl   %ebx
728         pushl   %esi
729         pushl   %edi
730         movl    20(%esp),%esi
731         movl    24(%esp),%edi
732         movl    28(%esp),%eax
733         movl    32(%esp),%edx
734         movl    36(%esp),%ebx
735         movl    %esp,%ebp
736         subl    $88,%esp
737         andl    $-16,%esp
738         movl    %ebp,80(%esp)
739         cmpl    $1,%eax
740         je      .L033ctr32_one_shortcut
741         movdqu  (%ebx),%xmm7
742         movl    $202182159,(%esp)
743         movl    $134810123,4(%esp)
744         movl    $67438087,8(%esp)
745         movl    $66051,12(%esp)
746         movl    $6,%ecx
747         xorl    %ebp,%ebp
748         movl    %ecx,16(%esp)
749         movl    %ecx,20(%esp)
750         movl    %ecx,24(%esp)
751         movl    %ebp,28(%esp)
752 .byte   102,15,58,22,251,3
753 .byte   102,15,58,34,253,3
754         movl    240(%edx),%ecx
755         bswap   %ebx
756         pxor    %xmm1,%xmm1
757         pxor    %xmm0,%xmm0
758         movdqa  (%esp),%xmm2
759 .byte   102,15,58,34,203,0
760         leal    3(%ebx),%ebp
761 .byte   102,15,58,34,197,0
762         incl    %ebx
763 .byte   102,15,58,34,203,1
764         incl    %ebp
765 .byte   102,15,58,34,197,1
766         incl    %ebx
767 .byte   102,15,58,34,203,2
768         incl    %ebp
769 .byte   102,15,58,34,197,2
770         movdqa  %xmm1,48(%esp)
771 .byte   102,15,56,0,202
772         movdqa  %xmm0,64(%esp)
773 .byte   102,15,56,0,194
774         pshufd  $192,%xmm1,%xmm2
775         pshufd  $128,%xmm1,%xmm3
776         cmpl    $6,%eax
777         jb      .L034ctr32_tail
778         movdqa  %xmm7,32(%esp)
779         shrl    $1,%ecx
780         movl    %edx,%ebp
781         movl    %ecx,%ebx
782         subl    $6,%eax
783         jmp     .L035ctr32_loop6
784 .align  16
785 .L035ctr32_loop6:
786         pshufd  $64,%xmm1,%xmm4
787         movdqa  32(%esp),%xmm1
788         pshufd  $192,%xmm0,%xmm5
789         por     %xmm1,%xmm2
790         pshufd  $128,%xmm0,%xmm6
791         por     %xmm1,%xmm3
792         pshufd  $64,%xmm0,%xmm7
793         por     %xmm1,%xmm4
794         por     %xmm1,%xmm5
795         por     %xmm1,%xmm6
796         por     %xmm1,%xmm7
797         movups  (%ebp),%xmm0
798         movups  16(%ebp),%xmm1
799         leal    32(%ebp),%edx
800         decl    %ecx
801         pxor    %xmm0,%xmm2
802         pxor    %xmm0,%xmm3
803 .byte   102,15,56,220,209
804         pxor    %xmm0,%xmm4
805 .byte   102,15,56,220,217
806         pxor    %xmm0,%xmm5
807 .byte   102,15,56,220,225
808         pxor    %xmm0,%xmm6
809 .byte   102,15,56,220,233
810         pxor    %xmm0,%xmm7
811 .byte   102,15,56,220,241
812         movups  (%edx),%xmm0
813 .byte   102,15,56,220,249
814         call    .L_aesni_encrypt6_enter
815         movups  (%esi),%xmm1
816         movups  16(%esi),%xmm0
817         xorps   %xmm1,%xmm2
818         movups  32(%esi),%xmm1
819         xorps   %xmm0,%xmm3
820         movups  %xmm2,(%edi)
821         movdqa  16(%esp),%xmm0
822         xorps   %xmm1,%xmm4
823         movdqa  48(%esp),%xmm1
824         movups  %xmm3,16(%edi)
825         movups  %xmm4,32(%edi)
826         paddd   %xmm0,%xmm1
827         paddd   64(%esp),%xmm0
828         movdqa  (%esp),%xmm2
829         movups  48(%esi),%xmm3
830         movups  64(%esi),%xmm4
831         xorps   %xmm3,%xmm5
832         movups  80(%esi),%xmm3
833         leal    96(%esi),%esi
834         movdqa  %xmm1,48(%esp)
835 .byte   102,15,56,0,202
836         xorps   %xmm4,%xmm6
837         movups  %xmm5,48(%edi)
838         xorps   %xmm3,%xmm7
839         movdqa  %xmm0,64(%esp)
840 .byte   102,15,56,0,194
841         movups  %xmm6,64(%edi)
842         pshufd  $192,%xmm1,%xmm2
843         movups  %xmm7,80(%edi)
844         leal    96(%edi),%edi
845         movl    %ebx,%ecx
846         pshufd  $128,%xmm1,%xmm3
847         subl    $6,%eax
848         jnc     .L035ctr32_loop6
849         addl    $6,%eax
850         jz      .L036ctr32_ret
851         movl    %ebp,%edx
852         leal    1(,%ecx,2),%ecx
853         movdqa  32(%esp),%xmm7
854 .L034ctr32_tail:
855         por     %xmm7,%xmm2
856         cmpl    $2,%eax
857         jb      .L037ctr32_one
858         pshufd  $64,%xmm1,%xmm4
859         por     %xmm7,%xmm3
860         je      .L038ctr32_two
861         pshufd  $192,%xmm0,%xmm5
862         por     %xmm7,%xmm4
863         cmpl    $4,%eax
864         jb      .L039ctr32_three
865         pshufd  $128,%xmm0,%xmm6
866         por     %xmm7,%xmm5
867         je      .L040ctr32_four
868         por     %xmm7,%xmm6
869         call    _aesni_encrypt6
870         movups  (%esi),%xmm1
871         movups  16(%esi),%xmm0
872         xorps   %xmm1,%xmm2
873         movups  32(%esi),%xmm1
874         xorps   %xmm0,%xmm3
875         movups  48(%esi),%xmm0
876         xorps   %xmm1,%xmm4
877         movups  64(%esi),%xmm1
878         xorps   %xmm0,%xmm5
879         movups  %xmm2,(%edi)
880         xorps   %xmm1,%xmm6
881         movups  %xmm3,16(%edi)
882         movups  %xmm4,32(%edi)
883         movups  %xmm5,48(%edi)
884         movups  %xmm6,64(%edi)
885         jmp     .L036ctr32_ret
886 .align  16
887 .L033ctr32_one_shortcut:
888         movups  (%ebx),%xmm2
889         movl    240(%edx),%ecx
890 .L037ctr32_one:
891         movups  (%edx),%xmm0
892         movups  16(%edx),%xmm1
893         leal    32(%edx),%edx
894         xorps   %xmm0,%xmm2
895 .L041enc1_loop_7:
896 .byte   102,15,56,220,209
897         decl    %ecx
898         movups  (%edx),%xmm1
899         leal    16(%edx),%edx
900         jnz     .L041enc1_loop_7
901 .byte   102,15,56,221,209
902         movups  (%esi),%xmm6
903         xorps   %xmm2,%xmm6
904         movups  %xmm6,(%edi)
905         jmp     .L036ctr32_ret
906 .align  16
907 .L038ctr32_two:
908         call    _aesni_encrypt3
909         movups  (%esi),%xmm5
910         movups  16(%esi),%xmm6
911         xorps   %xmm5,%xmm2
912         xorps   %xmm6,%xmm3
913         movups  %xmm2,(%edi)
914         movups  %xmm3,16(%edi)
915         jmp     .L036ctr32_ret
916 .align  16
917 .L039ctr32_three:
918         call    _aesni_encrypt3
919         movups  (%esi),%xmm5
920         movups  16(%esi),%xmm6
921         xorps   %xmm5,%xmm2
922         movups  32(%esi),%xmm7
923         xorps   %xmm6,%xmm3
924         movups  %xmm2,(%edi)
925         xorps   %xmm7,%xmm4
926         movups  %xmm3,16(%edi)
927         movups  %xmm4,32(%edi)
928         jmp     .L036ctr32_ret
929 .align  16
930 .L040ctr32_four:
931         call    _aesni_encrypt4
932         movups  (%esi),%xmm6
933         movups  16(%esi),%xmm7
934         movups  32(%esi),%xmm1
935         xorps   %xmm6,%xmm2
936         movups  48(%esi),%xmm0
937         xorps   %xmm7,%xmm3
938         movups  %xmm2,(%edi)
939         xorps   %xmm1,%xmm4
940         movups  %xmm3,16(%edi)
941         xorps   %xmm0,%xmm5
942         movups  %xmm4,32(%edi)
943         movups  %xmm5,48(%edi)
944 .L036ctr32_ret:
945         movl    80(%esp),%esp
946         popl    %edi
947         popl    %esi
948         popl    %ebx
949         popl    %ebp
950         ret
951 .size   aesni_ctr32_encrypt_blocks,.-.L_aesni_ctr32_encrypt_blocks_begin
952 .globl  aesni_xts_encrypt
953 .type   aesni_xts_encrypt,@function
954 .align  16
955 aesni_xts_encrypt:
956 .L_aesni_xts_encrypt_begin:
957         pushl   %ebp
958         pushl   %ebx
959         pushl   %esi
960         pushl   %edi
961         movl    36(%esp),%edx
962         movl    40(%esp),%esi
963         movl    240(%edx),%ecx
964         movups  (%esi),%xmm2
965         movups  (%edx),%xmm0
966         movups  16(%edx),%xmm1
967         leal    32(%edx),%edx
968         xorps   %xmm0,%xmm2
969 .L042enc1_loop_8:
970 .byte   102,15,56,220,209
971         decl    %ecx
972         movups  (%edx),%xmm1
973         leal    16(%edx),%edx
974         jnz     .L042enc1_loop_8
975 .byte   102,15,56,221,209
976         movl    20(%esp),%esi
977         movl    24(%esp),%edi
978         movl    28(%esp),%eax
979         movl    32(%esp),%edx
980         movl    %esp,%ebp
981         subl    $120,%esp
982         movl    240(%edx),%ecx
983         andl    $-16,%esp
984         movl    $135,96(%esp)
985         movl    $0,100(%esp)
986         movl    $1,104(%esp)
987         movl    $0,108(%esp)
988         movl    %eax,112(%esp)
989         movl    %ebp,116(%esp)
990         movdqa  %xmm2,%xmm1
991         pxor    %xmm0,%xmm0
992         movdqa  96(%esp),%xmm3
993         pcmpgtd %xmm1,%xmm0
994         andl    $-16,%eax
995         movl    %edx,%ebp
996         movl    %ecx,%ebx
997         subl    $96,%eax
998         jc      .L043xts_enc_short
999         shrl    $1,%ecx
1000         movl    %ecx,%ebx
1001         jmp     .L044xts_enc_loop6
1002 .align  16
1003 .L044xts_enc_loop6:
1004         pshufd  $19,%xmm0,%xmm2
1005         pxor    %xmm0,%xmm0
1006         movdqa  %xmm1,(%esp)
1007         paddq   %xmm1,%xmm1
1008         pand    %xmm3,%xmm2
1009         pcmpgtd %xmm1,%xmm0
1010         pxor    %xmm2,%xmm1
1011         pshufd  $19,%xmm0,%xmm2
1012         pxor    %xmm0,%xmm0
1013         movdqa  %xmm1,16(%esp)
1014         paddq   %xmm1,%xmm1
1015         pand    %xmm3,%xmm2
1016         pcmpgtd %xmm1,%xmm0
1017         pxor    %xmm2,%xmm1
1018         pshufd  $19,%xmm0,%xmm2
1019         pxor    %xmm0,%xmm0
1020         movdqa  %xmm1,32(%esp)
1021         paddq   %xmm1,%xmm1
1022         pand    %xmm3,%xmm2
1023         pcmpgtd %xmm1,%xmm0
1024         pxor    %xmm2,%xmm1
1025         pshufd  $19,%xmm0,%xmm2
1026         pxor    %xmm0,%xmm0
1027         movdqa  %xmm1,48(%esp)
1028         paddq   %xmm1,%xmm1
1029         pand    %xmm3,%xmm2
1030         pcmpgtd %xmm1,%xmm0
1031         pxor    %xmm2,%xmm1
1032         pshufd  $19,%xmm0,%xmm7
1033         movdqa  %xmm1,64(%esp)
1034         paddq   %xmm1,%xmm1
1035         movups  (%ebp),%xmm0
1036         pand    %xmm3,%xmm7
1037         movups  (%esi),%xmm2
1038         pxor    %xmm1,%xmm7
1039         movdqu  16(%esi),%xmm3
1040         xorps   %xmm0,%xmm2
1041         movdqu  32(%esi),%xmm4
1042         pxor    %xmm0,%xmm3
1043         movdqu  48(%esi),%xmm5
1044         pxor    %xmm0,%xmm4
1045         movdqu  64(%esi),%xmm6
1046         pxor    %xmm0,%xmm5
1047         movdqu  80(%esi),%xmm1
1048         pxor    %xmm0,%xmm6
1049         leal    96(%esi),%esi
1050         pxor    (%esp),%xmm2
1051         movdqa  %xmm7,80(%esp)
1052         pxor    %xmm1,%xmm7
1053         movups  16(%ebp),%xmm1
1054         leal    32(%ebp),%edx
1055         pxor    16(%esp),%xmm3
1056 .byte   102,15,56,220,209
1057         pxor    32(%esp),%xmm4
1058 .byte   102,15,56,220,217
1059         pxor    48(%esp),%xmm5
1060         decl    %ecx
1061 .byte   102,15,56,220,225
1062         pxor    64(%esp),%xmm6
1063 .byte   102,15,56,220,233
1064         pxor    %xmm0,%xmm7
1065 .byte   102,15,56,220,241
1066         movups  (%edx),%xmm0
1067 .byte   102,15,56,220,249
1068         call    .L_aesni_encrypt6_enter
1069         movdqa  80(%esp),%xmm1
1070         pxor    %xmm0,%xmm0
1071         xorps   (%esp),%xmm2
1072         pcmpgtd %xmm1,%xmm0
1073         xorps   16(%esp),%xmm3
1074         movups  %xmm2,(%edi)
1075         xorps   32(%esp),%xmm4
1076         movups  %xmm3,16(%edi)
1077         xorps   48(%esp),%xmm5
1078         movups  %xmm4,32(%edi)
1079         xorps   64(%esp),%xmm6
1080         movups  %xmm5,48(%edi)
1081         xorps   %xmm1,%xmm7
1082         movups  %xmm6,64(%edi)
1083         pshufd  $19,%xmm0,%xmm2
1084         movups  %xmm7,80(%edi)
1085         leal    96(%edi),%edi
1086         movdqa  96(%esp),%xmm3
1087         pxor    %xmm0,%xmm0
1088         paddq   %xmm1,%xmm1
1089         pand    %xmm3,%xmm2
1090         pcmpgtd %xmm1,%xmm0
1091         movl    %ebx,%ecx
1092         pxor    %xmm2,%xmm1
1093         subl    $96,%eax
1094         jnc     .L044xts_enc_loop6
1095         leal    1(,%ecx,2),%ecx
1096         movl    %ebp,%edx
1097         movl    %ecx,%ebx
1098 .L043xts_enc_short:
1099         addl    $96,%eax
1100         jz      .L045xts_enc_done6x
1101         movdqa  %xmm1,%xmm5
1102         cmpl    $32,%eax
1103         jb      .L046xts_enc_one
1104         pshufd  $19,%xmm0,%xmm2
1105         pxor    %xmm0,%xmm0
1106         paddq   %xmm1,%xmm1
1107         pand    %xmm3,%xmm2
1108         pcmpgtd %xmm1,%xmm0
1109         pxor    %xmm2,%xmm1
1110         je      .L047xts_enc_two
1111         pshufd  $19,%xmm0,%xmm2
1112         pxor    %xmm0,%xmm0
1113         movdqa  %xmm1,%xmm6
1114         paddq   %xmm1,%xmm1
1115         pand    %xmm3,%xmm2
1116         pcmpgtd %xmm1,%xmm0
1117         pxor    %xmm2,%xmm1
1118         cmpl    $64,%eax
1119         jb      .L048xts_enc_three
1120         pshufd  $19,%xmm0,%xmm2
1121         pxor    %xmm0,%xmm0
1122         movdqa  %xmm1,%xmm7
1123         paddq   %xmm1,%xmm1
1124         pand    %xmm3,%xmm2
1125         pcmpgtd %xmm1,%xmm0
1126         pxor    %xmm2,%xmm1
1127         movdqa  %xmm5,(%esp)
1128         movdqa  %xmm6,16(%esp)
1129         je      .L049xts_enc_four
1130         movdqa  %xmm7,32(%esp)
1131         pshufd  $19,%xmm0,%xmm7
1132         movdqa  %xmm1,48(%esp)
1133         paddq   %xmm1,%xmm1
1134         pand    %xmm3,%xmm7
1135         pxor    %xmm1,%xmm7
1136         movdqu  (%esi),%xmm2
1137         movdqu  16(%esi),%xmm3
1138         movdqu  32(%esi),%xmm4
1139         pxor    (%esp),%xmm2
1140         movdqu  48(%esi),%xmm5
1141         pxor    16(%esp),%xmm3
1142         movdqu  64(%esi),%xmm6
1143         pxor    32(%esp),%xmm4
1144         leal    80(%esi),%esi
1145         pxor    48(%esp),%xmm5
1146         movdqa  %xmm7,64(%esp)
1147         pxor    %xmm7,%xmm6
1148         call    _aesni_encrypt6
1149         movaps  64(%esp),%xmm1
1150         xorps   (%esp),%xmm2
1151         xorps   16(%esp),%xmm3
1152         xorps   32(%esp),%xmm4
1153         movups  %xmm2,(%edi)
1154         xorps   48(%esp),%xmm5
1155         movups  %xmm3,16(%edi)
1156         xorps   %xmm1,%xmm6
1157         movups  %xmm4,32(%edi)
1158         movups  %xmm5,48(%edi)
1159         movups  %xmm6,64(%edi)
1160         leal    80(%edi),%edi
1161         jmp     .L050xts_enc_done
1162 .align  16
1163 .L046xts_enc_one:
1164         movups  (%esi),%xmm2
1165         leal    16(%esi),%esi
1166         xorps   %xmm5,%xmm2
1167         movups  (%edx),%xmm0
1168         movups  16(%edx),%xmm1
1169         leal    32(%edx),%edx
1170         xorps   %xmm0,%xmm2
1171 .L051enc1_loop_9:
1172 .byte   102,15,56,220,209
1173         decl    %ecx
1174         movups  (%edx),%xmm1
1175         leal    16(%edx),%edx
1176         jnz     .L051enc1_loop_9
1177 .byte   102,15,56,221,209
1178         xorps   %xmm5,%xmm2
1179         movups  %xmm2,(%edi)
1180         leal    16(%edi),%edi
1181         movdqa  %xmm5,%xmm1
1182         jmp     .L050xts_enc_done
1183 .align  16
1184 .L047xts_enc_two:
1185         movaps  %xmm1,%xmm6
1186         movups  (%esi),%xmm2
1187         movups  16(%esi),%xmm3
1188         leal    32(%esi),%esi
1189         xorps   %xmm5,%xmm2
1190         xorps   %xmm6,%xmm3
1191         xorps   %xmm4,%xmm4
1192         call    _aesni_encrypt3
1193         xorps   %xmm5,%xmm2
1194         xorps   %xmm6,%xmm3
1195         movups  %xmm2,(%edi)
1196         movups  %xmm3,16(%edi)
1197         leal    32(%edi),%edi
1198         movdqa  %xmm6,%xmm1
1199         jmp     .L050xts_enc_done
1200 .align  16
1201 .L048xts_enc_three:
1202         movaps  %xmm1,%xmm7
1203         movups  (%esi),%xmm2
1204         movups  16(%esi),%xmm3
1205         movups  32(%esi),%xmm4
1206         leal    48(%esi),%esi
1207         xorps   %xmm5,%xmm2
1208         xorps   %xmm6,%xmm3
1209         xorps   %xmm7,%xmm4
1210         call    _aesni_encrypt3
1211         xorps   %xmm5,%xmm2
1212         xorps   %xmm6,%xmm3
1213         xorps   %xmm7,%xmm4
1214         movups  %xmm2,(%edi)
1215         movups  %xmm3,16(%edi)
1216         movups  %xmm4,32(%edi)
1217         leal    48(%edi),%edi
1218         movdqa  %xmm7,%xmm1
1219         jmp     .L050xts_enc_done
1220 .align  16
1221 .L049xts_enc_four:
1222         movaps  %xmm1,%xmm6
1223         movups  (%esi),%xmm2
1224         movups  16(%esi),%xmm3
1225         movups  32(%esi),%xmm4
1226         xorps   (%esp),%xmm2
1227         movups  48(%esi),%xmm5
1228         leal    64(%esi),%esi
1229         xorps   16(%esp),%xmm3
1230         xorps   %xmm7,%xmm4
1231         xorps   %xmm6,%xmm5
1232         call    _aesni_encrypt4
1233         xorps   (%esp),%xmm2
1234         xorps   16(%esp),%xmm3
1235         xorps   %xmm7,%xmm4
1236         movups  %xmm2,(%edi)
1237         xorps   %xmm6,%xmm5
1238         movups  %xmm3,16(%edi)
1239         movups  %xmm4,32(%edi)
1240         movups  %xmm5,48(%edi)
1241         leal    64(%edi),%edi
1242         movdqa  %xmm6,%xmm1
1243         jmp     .L050xts_enc_done
1244 .align  16
1245 .L045xts_enc_done6x:
1246         movl    112(%esp),%eax
1247         andl    $15,%eax
1248         jz      .L052xts_enc_ret
1249         movdqa  %xmm1,%xmm5
1250         movl    %eax,112(%esp)
1251         jmp     .L053xts_enc_steal
1252 .align  16
1253 .L050xts_enc_done:
1254         movl    112(%esp),%eax
1255         pxor    %xmm0,%xmm0
1256         andl    $15,%eax
1257         jz      .L052xts_enc_ret
1258         pcmpgtd %xmm1,%xmm0
1259         movl    %eax,112(%esp)
1260         pshufd  $19,%xmm0,%xmm5
1261         paddq   %xmm1,%xmm1
1262         pand    96(%esp),%xmm5
1263         pxor    %xmm1,%xmm5
1264 .L053xts_enc_steal:
1265         movzbl  (%esi),%ecx
1266         movzbl  -16(%edi),%edx
1267         leal    1(%esi),%esi
1268         movb    %cl,-16(%edi)
1269         movb    %dl,(%edi)
1270         leal    1(%edi),%edi
1271         subl    $1,%eax
1272         jnz     .L053xts_enc_steal
1273         subl    112(%esp),%edi
1274         movl    %ebp,%edx
1275         movl    %ebx,%ecx
1276         movups  -16(%edi),%xmm2
1277         xorps   %xmm5,%xmm2
1278         movups  (%edx),%xmm0
1279         movups  16(%edx),%xmm1
1280         leal    32(%edx),%edx
1281         xorps   %xmm0,%xmm2
1282 .L054enc1_loop_10:
1283 .byte   102,15,56,220,209
1284         decl    %ecx
1285         movups  (%edx),%xmm1
1286         leal    16(%edx),%edx
1287         jnz     .L054enc1_loop_10
1288 .byte   102,15,56,221,209
1289         xorps   %xmm5,%xmm2
1290         movups  %xmm2,-16(%edi)
1291 .L052xts_enc_ret:
1292         movl    116(%esp),%esp
1293         popl    %edi
1294         popl    %esi
1295         popl    %ebx
1296         popl    %ebp
1297         ret
1298 .size   aesni_xts_encrypt,.-.L_aesni_xts_encrypt_begin
1299 .globl  aesni_xts_decrypt
1300 .type   aesni_xts_decrypt,@function
1301 .align  16
1302 aesni_xts_decrypt:
1303 .L_aesni_xts_decrypt_begin:
1304         pushl   %ebp
1305         pushl   %ebx
1306         pushl   %esi
1307         pushl   %edi
1308         movl    36(%esp),%edx
1309         movl    40(%esp),%esi
1310         movl    240(%edx),%ecx
1311         movups  (%esi),%xmm2
1312         movups  (%edx),%xmm0
1313         movups  16(%edx),%xmm1
1314         leal    32(%edx),%edx
1315         xorps   %xmm0,%xmm2
1316 .L055enc1_loop_11:
1317 .byte   102,15,56,220,209
1318         decl    %ecx
1319         movups  (%edx),%xmm1
1320         leal    16(%edx),%edx
1321         jnz     .L055enc1_loop_11
1322 .byte   102,15,56,221,209
1323         movl    20(%esp),%esi
1324         movl    24(%esp),%edi
1325         movl    28(%esp),%eax
1326         movl    32(%esp),%edx
1327         movl    %esp,%ebp
1328         subl    $120,%esp
1329         andl    $-16,%esp
1330         xorl    %ebx,%ebx
1331         testl   $15,%eax
1332         setnz   %bl
1333         shll    $4,%ebx
1334         subl    %ebx,%eax
1335         movl    $135,96(%esp)
1336         movl    $0,100(%esp)
1337         movl    $1,104(%esp)
1338         movl    $0,108(%esp)
1339         movl    %eax,112(%esp)
1340         movl    %ebp,116(%esp)
1341         movl    240(%edx),%ecx
1342         movl    %edx,%ebp
1343         movl    %ecx,%ebx
1344         movdqa  %xmm2,%xmm1
1345         pxor    %xmm0,%xmm0
1346         movdqa  96(%esp),%xmm3
1347         pcmpgtd %xmm1,%xmm0
1348         andl    $-16,%eax
1349         subl    $96,%eax
1350         jc      .L056xts_dec_short
1351         shrl    $1,%ecx
1352         movl    %ecx,%ebx
1353         jmp     .L057xts_dec_loop6
1354 .align  16
1355 .L057xts_dec_loop6:
1356         pshufd  $19,%xmm0,%xmm2
1357         pxor    %xmm0,%xmm0
1358         movdqa  %xmm1,(%esp)
1359         paddq   %xmm1,%xmm1
1360         pand    %xmm3,%xmm2
1361         pcmpgtd %xmm1,%xmm0
1362         pxor    %xmm2,%xmm1
1363         pshufd  $19,%xmm0,%xmm2
1364         pxor    %xmm0,%xmm0
1365         movdqa  %xmm1,16(%esp)
1366         paddq   %xmm1,%xmm1
1367         pand    %xmm3,%xmm2
1368         pcmpgtd %xmm1,%xmm0
1369         pxor    %xmm2,%xmm1
1370         pshufd  $19,%xmm0,%xmm2
1371         pxor    %xmm0,%xmm0
1372         movdqa  %xmm1,32(%esp)
1373         paddq   %xmm1,%xmm1
1374         pand    %xmm3,%xmm2
1375         pcmpgtd %xmm1,%xmm0
1376         pxor    %xmm2,%xmm1
1377         pshufd  $19,%xmm0,%xmm2
1378         pxor    %xmm0,%xmm0
1379         movdqa  %xmm1,48(%esp)
1380         paddq   %xmm1,%xmm1
1381         pand    %xmm3,%xmm2
1382         pcmpgtd %xmm1,%xmm0
1383         pxor    %xmm2,%xmm1
1384         pshufd  $19,%xmm0,%xmm7
1385         movdqa  %xmm1,64(%esp)
1386         paddq   %xmm1,%xmm1
1387         movups  (%ebp),%xmm0
1388         pand    %xmm3,%xmm7
1389         movups  (%esi),%xmm2
1390         pxor    %xmm1,%xmm7
1391         movdqu  16(%esi),%xmm3
1392         xorps   %xmm0,%xmm2
1393         movdqu  32(%esi),%xmm4
1394         pxor    %xmm0,%xmm3
1395         movdqu  48(%esi),%xmm5
1396         pxor    %xmm0,%xmm4
1397         movdqu  64(%esi),%xmm6
1398         pxor    %xmm0,%xmm5
1399         movdqu  80(%esi),%xmm1
1400         pxor    %xmm0,%xmm6
1401         leal    96(%esi),%esi
1402         pxor    (%esp),%xmm2
1403         movdqa  %xmm7,80(%esp)
1404         pxor    %xmm1,%xmm7
1405         movups  16(%ebp),%xmm1
1406         leal    32(%ebp),%edx
1407         pxor    16(%esp),%xmm3
1408 .byte   102,15,56,222,209
1409         pxor    32(%esp),%xmm4
1410 .byte   102,15,56,222,217
1411         pxor    48(%esp),%xmm5
1412         decl    %ecx
1413 .byte   102,15,56,222,225
1414         pxor    64(%esp),%xmm6
1415 .byte   102,15,56,222,233
1416         pxor    %xmm0,%xmm7
1417 .byte   102,15,56,222,241
1418         movups  (%edx),%xmm0
1419 .byte   102,15,56,222,249
1420         call    .L_aesni_decrypt6_enter
1421         movdqa  80(%esp),%xmm1
1422         pxor    %xmm0,%xmm0
1423         xorps   (%esp),%xmm2
1424         pcmpgtd %xmm1,%xmm0
1425         xorps   16(%esp),%xmm3
1426         movups  %xmm2,(%edi)
1427         xorps   32(%esp),%xmm4
1428         movups  %xmm3,16(%edi)
1429         xorps   48(%esp),%xmm5
1430         movups  %xmm4,32(%edi)
1431         xorps   64(%esp),%xmm6
1432         movups  %xmm5,48(%edi)
1433         xorps   %xmm1,%xmm7
1434         movups  %xmm6,64(%edi)
1435         pshufd  $19,%xmm0,%xmm2
1436         movups  %xmm7,80(%edi)
1437         leal    96(%edi),%edi
1438         movdqa  96(%esp),%xmm3
1439         pxor    %xmm0,%xmm0
1440         paddq   %xmm1,%xmm1
1441         pand    %xmm3,%xmm2
1442         pcmpgtd %xmm1,%xmm0
1443         movl    %ebx,%ecx
1444         pxor    %xmm2,%xmm1
1445         subl    $96,%eax
1446         jnc     .L057xts_dec_loop6
1447         leal    1(,%ecx,2),%ecx
1448         movl    %ebp,%edx
1449         movl    %ecx,%ebx
1450 .L056xts_dec_short:
1451         addl    $96,%eax
1452         jz      .L058xts_dec_done6x
1453         movdqa  %xmm1,%xmm5
1454         cmpl    $32,%eax
1455         jb      .L059xts_dec_one
1456         pshufd  $19,%xmm0,%xmm2
1457         pxor    %xmm0,%xmm0
1458         paddq   %xmm1,%xmm1
1459         pand    %xmm3,%xmm2
1460         pcmpgtd %xmm1,%xmm0
1461         pxor    %xmm2,%xmm1
1462         je      .L060xts_dec_two
1463         pshufd  $19,%xmm0,%xmm2
1464         pxor    %xmm0,%xmm0
1465         movdqa  %xmm1,%xmm6
1466         paddq   %xmm1,%xmm1
1467         pand    %xmm3,%xmm2
1468         pcmpgtd %xmm1,%xmm0
1469         pxor    %xmm2,%xmm1
1470         cmpl    $64,%eax
1471         jb      .L061xts_dec_three
1472         pshufd  $19,%xmm0,%xmm2
1473         pxor    %xmm0,%xmm0
1474         movdqa  %xmm1,%xmm7
1475         paddq   %xmm1,%xmm1
1476         pand    %xmm3,%xmm2
1477         pcmpgtd %xmm1,%xmm0
1478         pxor    %xmm2,%xmm1
1479         movdqa  %xmm5,(%esp)
1480         movdqa  %xmm6,16(%esp)
1481         je      .L062xts_dec_four
1482         movdqa  %xmm7,32(%esp)
1483         pshufd  $19,%xmm0,%xmm7
1484         movdqa  %xmm1,48(%esp)
1485         paddq   %xmm1,%xmm1
1486         pand    %xmm3,%xmm7
1487         pxor    %xmm1,%xmm7
1488         movdqu  (%esi),%xmm2
1489         movdqu  16(%esi),%xmm3
1490         movdqu  32(%esi),%xmm4
1491         pxor    (%esp),%xmm2
1492         movdqu  48(%esi),%xmm5
1493         pxor    16(%esp),%xmm3
1494         movdqu  64(%esi),%xmm6
1495         pxor    32(%esp),%xmm4
1496         leal    80(%esi),%esi
1497         pxor    48(%esp),%xmm5
1498         movdqa  %xmm7,64(%esp)
1499         pxor    %xmm7,%xmm6
1500         call    _aesni_decrypt6
1501         movaps  64(%esp),%xmm1
1502         xorps   (%esp),%xmm2
1503         xorps   16(%esp),%xmm3
1504         xorps   32(%esp),%xmm4
1505         movups  %xmm2,(%edi)
1506         xorps   48(%esp),%xmm5
1507         movups  %xmm3,16(%edi)
1508         xorps   %xmm1,%xmm6
1509         movups  %xmm4,32(%edi)
1510         movups  %xmm5,48(%edi)
1511         movups  %xmm6,64(%edi)
1512         leal    80(%edi),%edi
1513         jmp     .L063xts_dec_done
1514 .align  16
1515 .L059xts_dec_one:
1516         movups  (%esi),%xmm2
1517         leal    16(%esi),%esi
1518         xorps   %xmm5,%xmm2
1519         movups  (%edx),%xmm0
1520         movups  16(%edx),%xmm1
1521         leal    32(%edx),%edx
1522         xorps   %xmm0,%xmm2
1523 .L064dec1_loop_12:
1524 .byte   102,15,56,222,209
1525         decl    %ecx
1526         movups  (%edx),%xmm1
1527         leal    16(%edx),%edx
1528         jnz     .L064dec1_loop_12
1529 .byte   102,15,56,223,209
1530         xorps   %xmm5,%xmm2
1531         movups  %xmm2,(%edi)
1532         leal    16(%edi),%edi
1533         movdqa  %xmm5,%xmm1
1534         jmp     .L063xts_dec_done
1535 .align  16
1536 .L060xts_dec_two:
1537         movaps  %xmm1,%xmm6
1538         movups  (%esi),%xmm2
1539         movups  16(%esi),%xmm3
1540         leal    32(%esi),%esi
1541         xorps   %xmm5,%xmm2
1542         xorps   %xmm6,%xmm3
1543         call    _aesni_decrypt3
1544         xorps   %xmm5,%xmm2
1545         xorps   %xmm6,%xmm3
1546         movups  %xmm2,(%edi)
1547         movups  %xmm3,16(%edi)
1548         leal    32(%edi),%edi
1549         movdqa  %xmm6,%xmm1
1550         jmp     .L063xts_dec_done
1551 .align  16
1552 .L061xts_dec_three:
1553         movaps  %xmm1,%xmm7
1554         movups  (%esi),%xmm2
1555         movups  16(%esi),%xmm3
1556         movups  32(%esi),%xmm4
1557         leal    48(%esi),%esi
1558         xorps   %xmm5,%xmm2
1559         xorps   %xmm6,%xmm3
1560         xorps   %xmm7,%xmm4
1561         call    _aesni_decrypt3
1562         xorps   %xmm5,%xmm2
1563         xorps   %xmm6,%xmm3
1564         xorps   %xmm7,%xmm4
1565         movups  %xmm2,(%edi)
1566         movups  %xmm3,16(%edi)
1567         movups  %xmm4,32(%edi)
1568         leal    48(%edi),%edi
1569         movdqa  %xmm7,%xmm1
1570         jmp     .L063xts_dec_done
1571 .align  16
1572 .L062xts_dec_four:
1573         movaps  %xmm1,%xmm6
1574         movups  (%esi),%xmm2
1575         movups  16(%esi),%xmm3
1576         movups  32(%esi),%xmm4
1577         xorps   (%esp),%xmm2
1578         movups  48(%esi),%xmm5
1579         leal    64(%esi),%esi
1580         xorps   16(%esp),%xmm3
1581         xorps   %xmm7,%xmm4
1582         xorps   %xmm6,%xmm5
1583         call    _aesni_decrypt4
1584         xorps   (%esp),%xmm2
1585         xorps   16(%esp),%xmm3
1586         xorps   %xmm7,%xmm4
1587         movups  %xmm2,(%edi)
1588         xorps   %xmm6,%xmm5
1589         movups  %xmm3,16(%edi)
1590         movups  %xmm4,32(%edi)
1591         movups  %xmm5,48(%edi)
1592         leal    64(%edi),%edi
1593         movdqa  %xmm6,%xmm1
1594         jmp     .L063xts_dec_done
1595 .align  16
1596 .L058xts_dec_done6x:
1597         movl    112(%esp),%eax
1598         andl    $15,%eax
1599         jz      .L065xts_dec_ret
1600         movl    %eax,112(%esp)
1601         jmp     .L066xts_dec_only_one_more
1602 .align  16
1603 .L063xts_dec_done:
1604         movl    112(%esp),%eax
1605         pxor    %xmm0,%xmm0
1606         andl    $15,%eax
1607         jz      .L065xts_dec_ret
1608         pcmpgtd %xmm1,%xmm0
1609         movl    %eax,112(%esp)
1610         pshufd  $19,%xmm0,%xmm2
1611         pxor    %xmm0,%xmm0
1612         movdqa  96(%esp),%xmm3
1613         paddq   %xmm1,%xmm1
1614         pand    %xmm3,%xmm2
1615         pcmpgtd %xmm1,%xmm0
1616         pxor    %xmm2,%xmm1
1617 .L066xts_dec_only_one_more:
1618         pshufd  $19,%xmm0,%xmm5
1619         movdqa  %xmm1,%xmm6
1620         paddq   %xmm1,%xmm1
1621         pand    %xmm3,%xmm5
1622         pxor    %xmm1,%xmm5
1623         movl    %ebp,%edx
1624         movl    %ebx,%ecx
1625         movups  (%esi),%xmm2
1626         xorps   %xmm5,%xmm2
1627         movups  (%edx),%xmm0
1628         movups  16(%edx),%xmm1
1629         leal    32(%edx),%edx
1630         xorps   %xmm0,%xmm2
1631 .L067dec1_loop_13:
1632 .byte   102,15,56,222,209
1633         decl    %ecx
1634         movups  (%edx),%xmm1
1635         leal    16(%edx),%edx
1636         jnz     .L067dec1_loop_13
1637 .byte   102,15,56,223,209
1638         xorps   %xmm5,%xmm2
1639         movups  %xmm2,(%edi)
1640 .L068xts_dec_steal:
1641         movzbl  16(%esi),%ecx
1642         movzbl  (%edi),%edx
1643         leal    1(%esi),%esi
1644         movb    %cl,(%edi)
1645         movb    %dl,16(%edi)
1646         leal    1(%edi),%edi
1647         subl    $1,%eax
1648         jnz     .L068xts_dec_steal
1649         subl    112(%esp),%edi
1650         movl    %ebp,%edx
1651         movl    %ebx,%ecx
1652         movups  (%edi),%xmm2
1653         xorps   %xmm6,%xmm2
1654         movups  (%edx),%xmm0
1655         movups  16(%edx),%xmm1
1656         leal    32(%edx),%edx
1657         xorps   %xmm0,%xmm2
1658 .L069dec1_loop_14:
1659 .byte   102,15,56,222,209
1660         decl    %ecx
1661         movups  (%edx),%xmm1
1662         leal    16(%edx),%edx
1663         jnz     .L069dec1_loop_14
1664 .byte   102,15,56,223,209
1665         xorps   %xmm6,%xmm2
1666         movups  %xmm2,(%edi)
1667 .L065xts_dec_ret:
1668         movl    116(%esp),%esp
1669         popl    %edi
1670         popl    %esi
1671         popl    %ebx
1672         popl    %ebp
1673         ret
1674 .size   aesni_xts_decrypt,.-.L_aesni_xts_decrypt_begin
1675 .globl  aesni_cbc_encrypt
1676 .type   aesni_cbc_encrypt,@function
1677 .align  16
1678 aesni_cbc_encrypt:
1679 .L_aesni_cbc_encrypt_begin:
1680         pushl   %ebp
1681         pushl   %ebx
1682         pushl   %esi
1683         pushl   %edi
1684         movl    20(%esp),%esi
1685         movl    %esp,%ebx
1686         movl    24(%esp),%edi
1687         subl    $24,%ebx
1688         movl    28(%esp),%eax
1689         andl    $-16,%ebx
1690         movl    32(%esp),%edx
1691         movl    36(%esp),%ebp
1692         testl   %eax,%eax
1693         jz      .L070cbc_abort
1694         cmpl    $0,40(%esp)
1695         xchgl   %esp,%ebx
1696         movups  (%ebp),%xmm7
1697         movl    240(%edx),%ecx
1698         movl    %edx,%ebp
1699         movl    %ebx,16(%esp)
1700         movl    %ecx,%ebx
1701         je      .L071cbc_decrypt
1702         movaps  %xmm7,%xmm2
1703         cmpl    $16,%eax
1704         jb      .L072cbc_enc_tail
1705         subl    $16,%eax
1706         jmp     .L073cbc_enc_loop
1707 .align  16
1708 .L073cbc_enc_loop:
1709         movups  (%esi),%xmm7
1710         leal    16(%esi),%esi
1711         movups  (%edx),%xmm0
1712         movups  16(%edx),%xmm1
1713         xorps   %xmm0,%xmm7
1714         leal    32(%edx),%edx
1715         xorps   %xmm7,%xmm2
1716 .L074enc1_loop_15:
1717 .byte   102,15,56,220,209
1718         decl    %ecx
1719         movups  (%edx),%xmm1
1720         leal    16(%edx),%edx
1721         jnz     .L074enc1_loop_15
1722 .byte   102,15,56,221,209
1723         movl    %ebx,%ecx
1724         movl    %ebp,%edx
1725         movups  %xmm2,(%edi)
1726         leal    16(%edi),%edi
1727         subl    $16,%eax
1728         jnc     .L073cbc_enc_loop
1729         addl    $16,%eax
1730         jnz     .L072cbc_enc_tail
1731         movaps  %xmm2,%xmm7
1732         jmp     .L075cbc_ret
1733 .L072cbc_enc_tail:
1734         movl    %eax,%ecx
1735 .long   2767451785
1736         movl    $16,%ecx
1737         subl    %eax,%ecx
1738         xorl    %eax,%eax
1739 .long   2868115081
1740         leal    -16(%edi),%edi
1741         movl    %ebx,%ecx
1742         movl    %edi,%esi
1743         movl    %ebp,%edx
1744         jmp     .L073cbc_enc_loop
1745 .align  16
1746 .L071cbc_decrypt:
1747         cmpl    $80,%eax
1748         jbe     .L076cbc_dec_tail
1749         movaps  %xmm7,(%esp)
1750         subl    $80,%eax
1751         jmp     .L077cbc_dec_loop6_enter
1752 .align  16
1753 .L078cbc_dec_loop6:
1754         movaps  %xmm0,(%esp)
1755         movups  %xmm7,(%edi)
1756         leal    16(%edi),%edi
1757 .L077cbc_dec_loop6_enter:
1758         movdqu  (%esi),%xmm2
1759         movdqu  16(%esi),%xmm3
1760         movdqu  32(%esi),%xmm4
1761         movdqu  48(%esi),%xmm5
1762         movdqu  64(%esi),%xmm6
1763         movdqu  80(%esi),%xmm7
1764         call    _aesni_decrypt6
1765         movups  (%esi),%xmm1
1766         movups  16(%esi),%xmm0
1767         xorps   (%esp),%xmm2
1768         xorps   %xmm1,%xmm3
1769         movups  32(%esi),%xmm1
1770         xorps   %xmm0,%xmm4
1771         movups  48(%esi),%xmm0
1772         xorps   %xmm1,%xmm5
1773         movups  64(%esi),%xmm1
1774         xorps   %xmm0,%xmm6
1775         movups  80(%esi),%xmm0
1776         xorps   %xmm1,%xmm7
1777         movups  %xmm2,(%edi)
1778         movups  %xmm3,16(%edi)
1779         leal    96(%esi),%esi
1780         movups  %xmm4,32(%edi)
1781         movl    %ebx,%ecx
1782         movups  %xmm5,48(%edi)
1783         movl    %ebp,%edx
1784         movups  %xmm6,64(%edi)
1785         leal    80(%edi),%edi
1786         subl    $96,%eax
1787         ja      .L078cbc_dec_loop6
1788         movaps  %xmm7,%xmm2
1789         movaps  %xmm0,%xmm7
1790         addl    $80,%eax
1791         jle     .L079cbc_dec_tail_collected
1792         movups  %xmm2,(%edi)
1793         leal    16(%edi),%edi
1794 .L076cbc_dec_tail:
1795         movups  (%esi),%xmm2
1796         movaps  %xmm2,%xmm6
1797         cmpl    $16,%eax
1798         jbe     .L080cbc_dec_one
1799         movups  16(%esi),%xmm3
1800         movaps  %xmm3,%xmm5
1801         cmpl    $32,%eax
1802         jbe     .L081cbc_dec_two
1803         movups  32(%esi),%xmm4
1804         cmpl    $48,%eax
1805         jbe     .L082cbc_dec_three
1806         movups  48(%esi),%xmm5
1807         cmpl    $64,%eax
1808         jbe     .L083cbc_dec_four
1809         movups  64(%esi),%xmm6
1810         movaps  %xmm7,(%esp)
1811         movups  (%esi),%xmm2
1812         xorps   %xmm7,%xmm7
1813         call    _aesni_decrypt6
1814         movups  (%esi),%xmm1
1815         movups  16(%esi),%xmm0
1816         xorps   (%esp),%xmm2
1817         xorps   %xmm1,%xmm3
1818         movups  32(%esi),%xmm1
1819         xorps   %xmm0,%xmm4
1820         movups  48(%esi),%xmm0
1821         xorps   %xmm1,%xmm5
1822         movups  64(%esi),%xmm7
1823         xorps   %xmm0,%xmm6
1824         movups  %xmm2,(%edi)
1825         movups  %xmm3,16(%edi)
1826         movups  %xmm4,32(%edi)
1827         movups  %xmm5,48(%edi)
1828         leal    64(%edi),%edi
1829         movaps  %xmm6,%xmm2
1830         subl    $80,%eax
1831         jmp     .L079cbc_dec_tail_collected
1832 .align  16
1833 .L080cbc_dec_one:
1834         movups  (%edx),%xmm0
1835         movups  16(%edx),%xmm1
1836         leal    32(%edx),%edx
1837         xorps   %xmm0,%xmm2
1838 .L084dec1_loop_16:
1839 .byte   102,15,56,222,209
1840         decl    %ecx
1841         movups  (%edx),%xmm1
1842         leal    16(%edx),%edx
1843         jnz     .L084dec1_loop_16
1844 .byte   102,15,56,223,209
1845         xorps   %xmm7,%xmm2
1846         movaps  %xmm6,%xmm7
1847         subl    $16,%eax
1848         jmp     .L079cbc_dec_tail_collected
1849 .align  16
1850 .L081cbc_dec_two:
1851         xorps   %xmm4,%xmm4
1852         call    _aesni_decrypt3
1853         xorps   %xmm7,%xmm2
1854         xorps   %xmm6,%xmm3
1855         movups  %xmm2,(%edi)
1856         movaps  %xmm3,%xmm2
1857         leal    16(%edi),%edi
1858         movaps  %xmm5,%xmm7
1859         subl    $32,%eax
1860         jmp     .L079cbc_dec_tail_collected
1861 .align  16
1862 .L082cbc_dec_three:
1863         call    _aesni_decrypt3
1864         xorps   %xmm7,%xmm2
1865         xorps   %xmm6,%xmm3
1866         xorps   %xmm5,%xmm4
1867         movups  %xmm2,(%edi)
1868         movaps  %xmm4,%xmm2
1869         movups  %xmm3,16(%edi)
1870         leal    32(%edi),%edi
1871         movups  32(%esi),%xmm7
1872         subl    $48,%eax
1873         jmp     .L079cbc_dec_tail_collected
1874 .align  16
1875 .L083cbc_dec_four:
1876         call    _aesni_decrypt4
1877         movups  16(%esi),%xmm1
1878         movups  32(%esi),%xmm0
1879         xorps   %xmm7,%xmm2
1880         movups  48(%esi),%xmm7
1881         xorps   %xmm6,%xmm3
1882         movups  %xmm2,(%edi)
1883         xorps   %xmm1,%xmm4
1884         movups  %xmm3,16(%edi)
1885         xorps   %xmm0,%xmm5
1886         movups  %xmm4,32(%edi)
1887         leal    48(%edi),%edi
1888         movaps  %xmm5,%xmm2
1889         subl    $64,%eax
1890 .L079cbc_dec_tail_collected:
1891         andl    $15,%eax
1892         jnz     .L085cbc_dec_tail_partial
1893         movups  %xmm2,(%edi)
1894         jmp     .L075cbc_ret
1895 .align  16
1896 .L085cbc_dec_tail_partial:
1897         movaps  %xmm2,(%esp)
1898         movl    $16,%ecx
1899         movl    %esp,%esi
1900         subl    %eax,%ecx
1901 .long   2767451785
1902 .L075cbc_ret:
1903         movl    16(%esp),%esp
1904         movl    36(%esp),%ebp
1905         movups  %xmm7,(%ebp)
1906 .L070cbc_abort:
1907         popl    %edi
1908         popl    %esi
1909         popl    %ebx
1910         popl    %ebp
1911         ret
1912 .size   aesni_cbc_encrypt,.-.L_aesni_cbc_encrypt_begin
1913 .type   _aesni_set_encrypt_key,@function
1914 .align  16
1915 _aesni_set_encrypt_key:
1916         testl   %eax,%eax
1917         jz      .L086bad_pointer
1918         testl   %edx,%edx
1919         jz      .L086bad_pointer
1920         movups  (%eax),%xmm0
1921         xorps   %xmm4,%xmm4
1922         leal    16(%edx),%edx
1923         cmpl    $256,%ecx
1924         je      .L08714rounds
1925         cmpl    $192,%ecx
1926         je      .L08812rounds
1927         cmpl    $128,%ecx
1928         jne     .L089bad_keybits
1929 .align  16
1930 .L09010rounds:
1931         movl    $9,%ecx
1932         movups  %xmm0,-16(%edx)
1933 .byte   102,15,58,223,200,1
1934         call    .L091key_128_cold
1935 .byte   102,15,58,223,200,2
1936         call    .L092key_128
1937 .byte   102,15,58,223,200,4
1938         call    .L092key_128
1939 .byte   102,15,58,223,200,8
1940         call    .L092key_128
1941 .byte   102,15,58,223,200,16
1942         call    .L092key_128
1943 .byte   102,15,58,223,200,32
1944         call    .L092key_128
1945 .byte   102,15,58,223,200,64
1946         call    .L092key_128
1947 .byte   102,15,58,223,200,128
1948         call    .L092key_128
1949 .byte   102,15,58,223,200,27
1950         call    .L092key_128
1951 .byte   102,15,58,223,200,54
1952         call    .L092key_128
1953         movups  %xmm0,(%edx)
1954         movl    %ecx,80(%edx)
1955         xorl    %eax,%eax
1956         ret
1957 .align  16
1958 .L092key_128:
1959         movups  %xmm0,(%edx)
1960         leal    16(%edx),%edx
1961 .L091key_128_cold:
1962         shufps  $16,%xmm0,%xmm4
1963         xorps   %xmm4,%xmm0
1964         shufps  $140,%xmm0,%xmm4
1965         xorps   %xmm4,%xmm0
1966         shufps  $255,%xmm1,%xmm1
1967         xorps   %xmm1,%xmm0
1968         ret
1969 .align  16
1970 .L08812rounds:
1971         movq    16(%eax),%xmm2
1972         movl    $11,%ecx
1973         movups  %xmm0,-16(%edx)
1974 .byte   102,15,58,223,202,1
1975         call    .L093key_192a_cold
1976 .byte   102,15,58,223,202,2
1977         call    .L094key_192b
1978 .byte   102,15,58,223,202,4
1979         call    .L095key_192a
1980 .byte   102,15,58,223,202,8
1981         call    .L094key_192b
1982 .byte   102,15,58,223,202,16
1983         call    .L095key_192a
1984 .byte   102,15,58,223,202,32
1985         call    .L094key_192b
1986 .byte   102,15,58,223,202,64
1987         call    .L095key_192a
1988 .byte   102,15,58,223,202,128
1989         call    .L094key_192b
1990         movups  %xmm0,(%edx)
1991         movl    %ecx,48(%edx)
1992         xorl    %eax,%eax
1993         ret
1994 .align  16
1995 .L095key_192a:
1996         movups  %xmm0,(%edx)
1997         leal    16(%edx),%edx
1998 .align  16
1999 .L093key_192a_cold:
2000         movaps  %xmm2,%xmm5
2001 .L096key_192b_warm:
2002         shufps  $16,%xmm0,%xmm4
2003         movdqa  %xmm2,%xmm3
2004         xorps   %xmm4,%xmm0
2005         shufps  $140,%xmm0,%xmm4
2006         pslldq  $4,%xmm3
2007         xorps   %xmm4,%xmm0
2008         pshufd  $85,%xmm1,%xmm1
2009         pxor    %xmm3,%xmm2
2010         pxor    %xmm1,%xmm0
2011         pshufd  $255,%xmm0,%xmm3
2012         pxor    %xmm3,%xmm2
2013         ret
2014 .align  16
2015 .L094key_192b:
2016         movaps  %xmm0,%xmm3
2017         shufps  $68,%xmm0,%xmm5
2018         movups  %xmm5,(%edx)
2019         shufps  $78,%xmm2,%xmm3
2020         movups  %xmm3,16(%edx)
2021         leal    32(%edx),%edx
2022         jmp     .L096key_192b_warm
2023 .align  16
2024 .L08714rounds:
2025         movups  16(%eax),%xmm2
2026         movl    $13,%ecx
2027         leal    16(%edx),%edx
2028         movups  %xmm0,-32(%edx)
2029         movups  %xmm2,-16(%edx)
2030 .byte   102,15,58,223,202,1
2031         call    .L097key_256a_cold
2032 .byte   102,15,58,223,200,1
2033         call    .L098key_256b
2034 .byte   102,15,58,223,202,2
2035         call    .L099key_256a
2036 .byte   102,15,58,223,200,2
2037         call    .L098key_256b
2038 .byte   102,15,58,223,202,4
2039         call    .L099key_256a
2040 .byte   102,15,58,223,200,4
2041         call    .L098key_256b
2042 .byte   102,15,58,223,202,8
2043         call    .L099key_256a
2044 .byte   102,15,58,223,200,8
2045         call    .L098key_256b
2046 .byte   102,15,58,223,202,16
2047         call    .L099key_256a
2048 .byte   102,15,58,223,200,16
2049         call    .L098key_256b
2050 .byte   102,15,58,223,202,32
2051         call    .L099key_256a
2052 .byte   102,15,58,223,200,32
2053         call    .L098key_256b
2054 .byte   102,15,58,223,202,64
2055         call    .L099key_256a
2056         movups  %xmm0,(%edx)
2057         movl    %ecx,16(%edx)
2058         xorl    %eax,%eax
2059         ret
2060 .align  16
2061 .L099key_256a:
2062         movups  %xmm2,(%edx)
2063         leal    16(%edx),%edx
2064 .L097key_256a_cold:
2065         shufps  $16,%xmm0,%xmm4
2066         xorps   %xmm4,%xmm0
2067         shufps  $140,%xmm0,%xmm4
2068         xorps   %xmm4,%xmm0
2069         shufps  $255,%xmm1,%xmm1
2070         xorps   %xmm1,%xmm0
2071         ret
2072 .align  16
2073 .L098key_256b:
2074         movups  %xmm0,(%edx)
2075         leal    16(%edx),%edx
2076         shufps  $16,%xmm2,%xmm4
2077         xorps   %xmm4,%xmm2
2078         shufps  $140,%xmm2,%xmm4
2079         xorps   %xmm4,%xmm2
2080         shufps  $170,%xmm1,%xmm1
2081         xorps   %xmm1,%xmm2
2082         ret
2083 .align  4
2084 .L086bad_pointer:
2085         movl    $-1,%eax
2086         ret
2087 .align  4
2088 .L089bad_keybits:
2089         movl    $-2,%eax
2090         ret
2091 .size   _aesni_set_encrypt_key,.-_aesni_set_encrypt_key
2092 .globl  aesni_set_encrypt_key
2093 .type   aesni_set_encrypt_key,@function
2094 .align  16
2095 aesni_set_encrypt_key:
2096 .L_aesni_set_encrypt_key_begin:
2097         movl    4(%esp),%eax
2098         movl    8(%esp),%ecx
2099         movl    12(%esp),%edx
2100         call    _aesni_set_encrypt_key
2101         ret
2102 .size   aesni_set_encrypt_key,.-.L_aesni_set_encrypt_key_begin
2103 .globl  aesni_set_decrypt_key
2104 .type   aesni_set_decrypt_key,@function
2105 .align  16
2106 aesni_set_decrypt_key:
2107 .L_aesni_set_decrypt_key_begin:
2108         movl    4(%esp),%eax
2109         movl    8(%esp),%ecx
2110         movl    12(%esp),%edx
2111         call    _aesni_set_encrypt_key
2112         movl    12(%esp),%edx
2113         shll    $4,%ecx
2114         testl   %eax,%eax
2115         jnz     .L100dec_key_ret
2116         leal    16(%edx,%ecx,1),%eax
2117         movups  (%edx),%xmm0
2118         movups  (%eax),%xmm1
2119         movups  %xmm0,(%eax)
2120         movups  %xmm1,(%edx)
2121         leal    16(%edx),%edx
2122         leal    -16(%eax),%eax
2123 .L101dec_key_inverse:
2124         movups  (%edx),%xmm0
2125         movups  (%eax),%xmm1
2126 .byte   102,15,56,219,192
2127 .byte   102,15,56,219,201
2128         leal    16(%edx),%edx
2129         leal    -16(%eax),%eax
2130         movups  %xmm0,16(%eax)
2131         movups  %xmm1,-16(%edx)
2132         cmpl    %edx,%eax
2133         ja      .L101dec_key_inverse
2134         movups  (%edx),%xmm0
2135 .byte   102,15,56,219,192
2136         movups  %xmm0,(%edx)
2137         xorl    %eax,%eax
2138 .L100dec_key_ret:
2139         ret
2140 .size   aesni_set_decrypt_key,.-.L_aesni_set_decrypt_key_begin
2141 .byte   65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69
2142 .byte   83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83
2143 .byte   32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
2144 .byte   115,108,46,111,114,103,62,0