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