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