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