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