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