if_iwm - Adjust if_iwm_sta.h prototypes, don't pass iwm_node to rm_sta().
[dragonfly.git] / secure / lib / libcrypto / asm / aesni-mb-x86_64.s
1 .text   
2
3
4
5 .globl  aesni_multi_cbc_encrypt
6 .type   aesni_multi_cbc_encrypt,@function
7 .align  32
8 aesni_multi_cbc_encrypt:
9         cmpl    $2,%edx
10         jb      .Lenc_non_avx
11         movl    OPENSSL_ia32cap_P+4(%rip),%ecx
12         testl   $268435456,%ecx
13         jnz     _avx_cbc_enc_shortcut
14         jmp     .Lenc_non_avx
15 .align  16
16 .Lenc_non_avx:
17         movq    %rsp,%rax
18         pushq   %rbx
19         pushq   %rbp
20         pushq   %r12
21         pushq   %r13
22         pushq   %r14
23         pushq   %r15
24
25
26
27
28
29
30         subq    $48,%rsp
31         andq    $-64,%rsp
32         movq    %rax,16(%rsp)
33
34 .Lenc4x_body:
35         movdqu  (%rsi),%xmm12
36         leaq    120(%rsi),%rsi
37         leaq    80(%rdi),%rdi
38
39 .Lenc4x_loop_grande:
40         movl    %edx,24(%rsp)
41         xorl    %edx,%edx
42         movl    -64(%rdi),%ecx
43         movq    -80(%rdi),%r8
44         cmpl    %edx,%ecx
45         movq    -72(%rdi),%r12
46         cmovgl  %ecx,%edx
47         testl   %ecx,%ecx
48         movdqu  -56(%rdi),%xmm2
49         movl    %ecx,32(%rsp)
50         cmovleq %rsp,%r8
51         movl    -24(%rdi),%ecx
52         movq    -40(%rdi),%r9
53         cmpl    %edx,%ecx
54         movq    -32(%rdi),%r13
55         cmovgl  %ecx,%edx
56         testl   %ecx,%ecx
57         movdqu  -16(%rdi),%xmm3
58         movl    %ecx,36(%rsp)
59         cmovleq %rsp,%r9
60         movl    16(%rdi),%ecx
61         movq    0(%rdi),%r10
62         cmpl    %edx,%ecx
63         movq    8(%rdi),%r14
64         cmovgl  %ecx,%edx
65         testl   %ecx,%ecx
66         movdqu  24(%rdi),%xmm4
67         movl    %ecx,40(%rsp)
68         cmovleq %rsp,%r10
69         movl    56(%rdi),%ecx
70         movq    40(%rdi),%r11
71         cmpl    %edx,%ecx
72         movq    48(%rdi),%r15
73         cmovgl  %ecx,%edx
74         testl   %ecx,%ecx
75         movdqu  64(%rdi),%xmm5
76         movl    %ecx,44(%rsp)
77         cmovleq %rsp,%r11
78         testl   %edx,%edx
79         jz      .Lenc4x_done
80
81         movups  16-120(%rsi),%xmm1
82         pxor    %xmm12,%xmm2
83         movups  32-120(%rsi),%xmm0
84         pxor    %xmm12,%xmm3
85         movl    240-120(%rsi),%eax
86         pxor    %xmm12,%xmm4
87         movdqu  (%r8),%xmm6
88         pxor    %xmm12,%xmm5
89         movdqu  (%r9),%xmm7
90         pxor    %xmm6,%xmm2
91         movdqu  (%r10),%xmm8
92         pxor    %xmm7,%xmm3
93         movdqu  (%r11),%xmm9
94         pxor    %xmm8,%xmm4
95         pxor    %xmm9,%xmm5
96         movdqa  32(%rsp),%xmm10
97         xorq    %rbx,%rbx
98         jmp     .Loop_enc4x
99
100 .align  32
101 .Loop_enc4x:
102         addq    $16,%rbx
103         leaq    16(%rsp),%rbp
104         movl    $1,%ecx
105         subq    %rbx,%rbp
106
107 .byte   102,15,56,220,209
108         prefetcht0      31(%r8,%rbx,1)
109         prefetcht0      31(%r9,%rbx,1)
110 .byte   102,15,56,220,217
111         prefetcht0      31(%r10,%rbx,1)
112         prefetcht0      31(%r10,%rbx,1)
113 .byte   102,15,56,220,225
114 .byte   102,15,56,220,233
115         movups  48-120(%rsi),%xmm1
116         cmpl    32(%rsp),%ecx
117 .byte   102,15,56,220,208
118 .byte   102,15,56,220,216
119 .byte   102,15,56,220,224
120         cmovgeq %rbp,%r8
121         cmovgq  %rbp,%r12
122 .byte   102,15,56,220,232
123         movups  -56(%rsi),%xmm0
124         cmpl    36(%rsp),%ecx
125 .byte   102,15,56,220,209
126 .byte   102,15,56,220,217
127 .byte   102,15,56,220,225
128         cmovgeq %rbp,%r9
129         cmovgq  %rbp,%r13
130 .byte   102,15,56,220,233
131         movups  -40(%rsi),%xmm1
132         cmpl    40(%rsp),%ecx
133 .byte   102,15,56,220,208
134 .byte   102,15,56,220,216
135 .byte   102,15,56,220,224
136         cmovgeq %rbp,%r10
137         cmovgq  %rbp,%r14
138 .byte   102,15,56,220,232
139         movups  -24(%rsi),%xmm0
140         cmpl    44(%rsp),%ecx
141 .byte   102,15,56,220,209
142 .byte   102,15,56,220,217
143 .byte   102,15,56,220,225
144         cmovgeq %rbp,%r11
145         cmovgq  %rbp,%r15
146 .byte   102,15,56,220,233
147         movups  -8(%rsi),%xmm1
148         movdqa  %xmm10,%xmm11
149 .byte   102,15,56,220,208
150         prefetcht0      15(%r12,%rbx,1)
151         prefetcht0      15(%r13,%rbx,1)
152 .byte   102,15,56,220,216
153         prefetcht0      15(%r14,%rbx,1)
154         prefetcht0      15(%r15,%rbx,1)
155 .byte   102,15,56,220,224
156 .byte   102,15,56,220,232
157         movups  128-120(%rsi),%xmm0
158         pxor    %xmm12,%xmm12
159
160 .byte   102,15,56,220,209
161         pcmpgtd %xmm12,%xmm11
162         movdqu  -120(%rsi),%xmm12
163 .byte   102,15,56,220,217
164         paddd   %xmm11,%xmm10
165         movdqa  %xmm10,32(%rsp)
166 .byte   102,15,56,220,225
167 .byte   102,15,56,220,233
168         movups  144-120(%rsi),%xmm1
169
170         cmpl    $11,%eax
171
172 .byte   102,15,56,220,208
173 .byte   102,15,56,220,216
174 .byte   102,15,56,220,224
175 .byte   102,15,56,220,232
176         movups  160-120(%rsi),%xmm0
177
178         jb      .Lenc4x_tail
179
180 .byte   102,15,56,220,209
181 .byte   102,15,56,220,217
182 .byte   102,15,56,220,225
183 .byte   102,15,56,220,233
184         movups  176-120(%rsi),%xmm1
185
186 .byte   102,15,56,220,208
187 .byte   102,15,56,220,216
188 .byte   102,15,56,220,224
189 .byte   102,15,56,220,232
190         movups  192-120(%rsi),%xmm0
191
192         je      .Lenc4x_tail
193
194 .byte   102,15,56,220,209
195 .byte   102,15,56,220,217
196 .byte   102,15,56,220,225
197 .byte   102,15,56,220,233
198         movups  208-120(%rsi),%xmm1
199
200 .byte   102,15,56,220,208
201 .byte   102,15,56,220,216
202 .byte   102,15,56,220,224
203 .byte   102,15,56,220,232
204         movups  224-120(%rsi),%xmm0
205         jmp     .Lenc4x_tail
206
207 .align  32
208 .Lenc4x_tail:
209 .byte   102,15,56,220,209
210 .byte   102,15,56,220,217
211 .byte   102,15,56,220,225
212 .byte   102,15,56,220,233
213         movdqu  (%r8,%rbx,1),%xmm6
214         movdqu  16-120(%rsi),%xmm1
215
216 .byte   102,15,56,221,208
217         movdqu  (%r9,%rbx,1),%xmm7
218         pxor    %xmm12,%xmm6
219 .byte   102,15,56,221,216
220         movdqu  (%r10,%rbx,1),%xmm8
221         pxor    %xmm12,%xmm7
222 .byte   102,15,56,221,224
223         movdqu  (%r11,%rbx,1),%xmm9
224         pxor    %xmm12,%xmm8
225 .byte   102,15,56,221,232
226         movdqu  32-120(%rsi),%xmm0
227         pxor    %xmm12,%xmm9
228
229         movups  %xmm2,-16(%r12,%rbx,1)
230         pxor    %xmm6,%xmm2
231         movups  %xmm3,-16(%r13,%rbx,1)
232         pxor    %xmm7,%xmm3
233         movups  %xmm4,-16(%r14,%rbx,1)
234         pxor    %xmm8,%xmm4
235         movups  %xmm5,-16(%r15,%rbx,1)
236         pxor    %xmm9,%xmm5
237
238         decl    %edx
239         jnz     .Loop_enc4x
240
241         movq    16(%rsp),%rax
242         movl    24(%rsp),%edx
243
244
245
246
247
248
249
250
251
252
253         leaq    160(%rdi),%rdi
254         decl    %edx
255         jnz     .Lenc4x_loop_grande
256
257 .Lenc4x_done:
258         movq    -48(%rax),%r15
259         movq    -40(%rax),%r14
260         movq    -32(%rax),%r13
261         movq    -24(%rax),%r12
262         movq    -16(%rax),%rbp
263         movq    -8(%rax),%rbx
264         leaq    (%rax),%rsp
265 .Lenc4x_epilogue:
266         .byte   0xf3,0xc3
267 .size   aesni_multi_cbc_encrypt,.-aesni_multi_cbc_encrypt
268
269 .globl  aesni_multi_cbc_decrypt
270 .type   aesni_multi_cbc_decrypt,@function
271 .align  32
272 aesni_multi_cbc_decrypt:
273         cmpl    $2,%edx
274         jb      .Ldec_non_avx
275         movl    OPENSSL_ia32cap_P+4(%rip),%ecx
276         testl   $268435456,%ecx
277         jnz     _avx_cbc_dec_shortcut
278         jmp     .Ldec_non_avx
279 .align  16
280 .Ldec_non_avx:
281         movq    %rsp,%rax
282         pushq   %rbx
283         pushq   %rbp
284         pushq   %r12
285         pushq   %r13
286         pushq   %r14
287         pushq   %r15
288
289
290
291
292
293
294         subq    $48,%rsp
295         andq    $-64,%rsp
296         movq    %rax,16(%rsp)
297
298 .Ldec4x_body:
299         movdqu  (%rsi),%xmm12
300         leaq    120(%rsi),%rsi
301         leaq    80(%rdi),%rdi
302
303 .Ldec4x_loop_grande:
304         movl    %edx,24(%rsp)
305         xorl    %edx,%edx
306         movl    -64(%rdi),%ecx
307         movq    -80(%rdi),%r8
308         cmpl    %edx,%ecx
309         movq    -72(%rdi),%r12
310         cmovgl  %ecx,%edx
311         testl   %ecx,%ecx
312         movdqu  -56(%rdi),%xmm6
313         movl    %ecx,32(%rsp)
314         cmovleq %rsp,%r8
315         movl    -24(%rdi),%ecx
316         movq    -40(%rdi),%r9
317         cmpl    %edx,%ecx
318         movq    -32(%rdi),%r13
319         cmovgl  %ecx,%edx
320         testl   %ecx,%ecx
321         movdqu  -16(%rdi),%xmm7
322         movl    %ecx,36(%rsp)
323         cmovleq %rsp,%r9
324         movl    16(%rdi),%ecx
325         movq    0(%rdi),%r10
326         cmpl    %edx,%ecx
327         movq    8(%rdi),%r14
328         cmovgl  %ecx,%edx
329         testl   %ecx,%ecx
330         movdqu  24(%rdi),%xmm8
331         movl    %ecx,40(%rsp)
332         cmovleq %rsp,%r10
333         movl    56(%rdi),%ecx
334         movq    40(%rdi),%r11
335         cmpl    %edx,%ecx
336         movq    48(%rdi),%r15
337         cmovgl  %ecx,%edx
338         testl   %ecx,%ecx
339         movdqu  64(%rdi),%xmm9
340         movl    %ecx,44(%rsp)
341         cmovleq %rsp,%r11
342         testl   %edx,%edx
343         jz      .Ldec4x_done
344
345         movups  16-120(%rsi),%xmm1
346         movups  32-120(%rsi),%xmm0
347         movl    240-120(%rsi),%eax
348         movdqu  (%r8),%xmm2
349         movdqu  (%r9),%xmm3
350         pxor    %xmm12,%xmm2
351         movdqu  (%r10),%xmm4
352         pxor    %xmm12,%xmm3
353         movdqu  (%r11),%xmm5
354         pxor    %xmm12,%xmm4
355         pxor    %xmm12,%xmm5
356         movdqa  32(%rsp),%xmm10
357         xorq    %rbx,%rbx
358         jmp     .Loop_dec4x
359
360 .align  32
361 .Loop_dec4x:
362         addq    $16,%rbx
363         leaq    16(%rsp),%rbp
364         movl    $1,%ecx
365         subq    %rbx,%rbp
366
367 .byte   102,15,56,222,209
368         prefetcht0      31(%r8,%rbx,1)
369         prefetcht0      31(%r9,%rbx,1)
370 .byte   102,15,56,222,217
371         prefetcht0      31(%r10,%rbx,1)
372         prefetcht0      31(%r11,%rbx,1)
373 .byte   102,15,56,222,225
374 .byte   102,15,56,222,233
375         movups  48-120(%rsi),%xmm1
376         cmpl    32(%rsp),%ecx
377 .byte   102,15,56,222,208
378 .byte   102,15,56,222,216
379 .byte   102,15,56,222,224
380         cmovgeq %rbp,%r8
381         cmovgq  %rbp,%r12
382 .byte   102,15,56,222,232
383         movups  -56(%rsi),%xmm0
384         cmpl    36(%rsp),%ecx
385 .byte   102,15,56,222,209
386 .byte   102,15,56,222,217
387 .byte   102,15,56,222,225
388         cmovgeq %rbp,%r9
389         cmovgq  %rbp,%r13
390 .byte   102,15,56,222,233
391         movups  -40(%rsi),%xmm1
392         cmpl    40(%rsp),%ecx
393 .byte   102,15,56,222,208
394 .byte   102,15,56,222,216
395 .byte   102,15,56,222,224
396         cmovgeq %rbp,%r10
397         cmovgq  %rbp,%r14
398 .byte   102,15,56,222,232
399         movups  -24(%rsi),%xmm0
400         cmpl    44(%rsp),%ecx
401 .byte   102,15,56,222,209
402 .byte   102,15,56,222,217
403 .byte   102,15,56,222,225
404         cmovgeq %rbp,%r11
405         cmovgq  %rbp,%r15
406 .byte   102,15,56,222,233
407         movups  -8(%rsi),%xmm1
408         movdqa  %xmm10,%xmm11
409 .byte   102,15,56,222,208
410         prefetcht0      15(%r12,%rbx,1)
411         prefetcht0      15(%r13,%rbx,1)
412 .byte   102,15,56,222,216
413         prefetcht0      15(%r14,%rbx,1)
414         prefetcht0      15(%r15,%rbx,1)
415 .byte   102,15,56,222,224
416 .byte   102,15,56,222,232
417         movups  128-120(%rsi),%xmm0
418         pxor    %xmm12,%xmm12
419
420 .byte   102,15,56,222,209
421         pcmpgtd %xmm12,%xmm11
422         movdqu  -120(%rsi),%xmm12
423 .byte   102,15,56,222,217
424         paddd   %xmm11,%xmm10
425         movdqa  %xmm10,32(%rsp)
426 .byte   102,15,56,222,225
427 .byte   102,15,56,222,233
428         movups  144-120(%rsi),%xmm1
429
430         cmpl    $11,%eax
431
432 .byte   102,15,56,222,208
433 .byte   102,15,56,222,216
434 .byte   102,15,56,222,224
435 .byte   102,15,56,222,232
436         movups  160-120(%rsi),%xmm0
437
438         jb      .Ldec4x_tail
439
440 .byte   102,15,56,222,209
441 .byte   102,15,56,222,217
442 .byte   102,15,56,222,225
443 .byte   102,15,56,222,233
444         movups  176-120(%rsi),%xmm1
445
446 .byte   102,15,56,222,208
447 .byte   102,15,56,222,216
448 .byte   102,15,56,222,224
449 .byte   102,15,56,222,232
450         movups  192-120(%rsi),%xmm0
451
452         je      .Ldec4x_tail
453
454 .byte   102,15,56,222,209
455 .byte   102,15,56,222,217
456 .byte   102,15,56,222,225
457 .byte   102,15,56,222,233
458         movups  208-120(%rsi),%xmm1
459
460 .byte   102,15,56,222,208
461 .byte   102,15,56,222,216
462 .byte   102,15,56,222,224
463 .byte   102,15,56,222,232
464         movups  224-120(%rsi),%xmm0
465         jmp     .Ldec4x_tail
466
467 .align  32
468 .Ldec4x_tail:
469 .byte   102,15,56,222,209
470 .byte   102,15,56,222,217
471 .byte   102,15,56,222,225
472         pxor    %xmm0,%xmm6
473         pxor    %xmm0,%xmm7
474 .byte   102,15,56,222,233
475         movdqu  16-120(%rsi),%xmm1
476         pxor    %xmm0,%xmm8
477         pxor    %xmm0,%xmm9
478         movdqu  32-120(%rsi),%xmm0
479
480 .byte   102,15,56,223,214
481 .byte   102,15,56,223,223
482         movdqu  -16(%r8,%rbx,1),%xmm6
483         movdqu  -16(%r9,%rbx,1),%xmm7
484 .byte   102,65,15,56,223,224
485 .byte   102,65,15,56,223,233
486         movdqu  -16(%r10,%rbx,1),%xmm8
487         movdqu  -16(%r11,%rbx,1),%xmm9
488
489         movups  %xmm2,-16(%r12,%rbx,1)
490         movdqu  (%r8,%rbx,1),%xmm2
491         movups  %xmm3,-16(%r13,%rbx,1)
492         movdqu  (%r9,%rbx,1),%xmm3
493         pxor    %xmm12,%xmm2
494         movups  %xmm4,-16(%r14,%rbx,1)
495         movdqu  (%r10,%rbx,1),%xmm4
496         pxor    %xmm12,%xmm3
497         movups  %xmm5,-16(%r15,%rbx,1)
498         movdqu  (%r11,%rbx,1),%xmm5
499         pxor    %xmm12,%xmm4
500         pxor    %xmm12,%xmm5
501
502         decl    %edx
503         jnz     .Loop_dec4x
504
505         movq    16(%rsp),%rax
506         movl    24(%rsp),%edx
507
508         leaq    160(%rdi),%rdi
509         decl    %edx
510         jnz     .Ldec4x_loop_grande
511
512 .Ldec4x_done:
513         movq    -48(%rax),%r15
514         movq    -40(%rax),%r14
515         movq    -32(%rax),%r13
516         movq    -24(%rax),%r12
517         movq    -16(%rax),%rbp
518         movq    -8(%rax),%rbx
519         leaq    (%rax),%rsp
520 .Ldec4x_epilogue:
521         .byte   0xf3,0xc3
522 .size   aesni_multi_cbc_decrypt,.-aesni_multi_cbc_decrypt
523 .type   aesni_multi_cbc_encrypt_avx,@function
524 .align  32
525 aesni_multi_cbc_encrypt_avx:
526 _avx_cbc_enc_shortcut:
527         movq    %rsp,%rax
528         pushq   %rbx
529         pushq   %rbp
530         pushq   %r12
531         pushq   %r13
532         pushq   %r14
533         pushq   %r15
534
535
536
537
538
539
540
541
542         subq    $192,%rsp
543         andq    $-128,%rsp
544         movq    %rax,16(%rsp)
545
546 .Lenc8x_body:
547         vzeroupper
548         vmovdqu (%rsi),%xmm15
549         leaq    120(%rsi),%rsi
550         leaq    160(%rdi),%rdi
551         shrl    $1,%edx
552
553 .Lenc8x_loop_grande:
554
555         xorl    %edx,%edx
556         movl    -144(%rdi),%ecx
557         movq    -160(%rdi),%r8
558         cmpl    %edx,%ecx
559         movq    -152(%rdi),%rbx
560         cmovgl  %ecx,%edx
561         testl   %ecx,%ecx
562         vmovdqu -136(%rdi),%xmm2
563         movl    %ecx,32(%rsp)
564         cmovleq %rsp,%r8
565         subq    %r8,%rbx
566         movq    %rbx,64(%rsp)
567         movl    -104(%rdi),%ecx
568         movq    -120(%rdi),%r9
569         cmpl    %edx,%ecx
570         movq    -112(%rdi),%rbp
571         cmovgl  %ecx,%edx
572         testl   %ecx,%ecx
573         vmovdqu -96(%rdi),%xmm3
574         movl    %ecx,36(%rsp)
575         cmovleq %rsp,%r9
576         subq    %r9,%rbp
577         movq    %rbp,72(%rsp)
578         movl    -64(%rdi),%ecx
579         movq    -80(%rdi),%r10
580         cmpl    %edx,%ecx
581         movq    -72(%rdi),%rbp
582         cmovgl  %ecx,%edx
583         testl   %ecx,%ecx
584         vmovdqu -56(%rdi),%xmm4
585         movl    %ecx,40(%rsp)
586         cmovleq %rsp,%r10
587         subq    %r10,%rbp
588         movq    %rbp,80(%rsp)
589         movl    -24(%rdi),%ecx
590         movq    -40(%rdi),%r11
591         cmpl    %edx,%ecx
592         movq    -32(%rdi),%rbp
593         cmovgl  %ecx,%edx
594         testl   %ecx,%ecx
595         vmovdqu -16(%rdi),%xmm5
596         movl    %ecx,44(%rsp)
597         cmovleq %rsp,%r11
598         subq    %r11,%rbp
599         movq    %rbp,88(%rsp)
600         movl    16(%rdi),%ecx
601         movq    0(%rdi),%r12
602         cmpl    %edx,%ecx
603         movq    8(%rdi),%rbp
604         cmovgl  %ecx,%edx
605         testl   %ecx,%ecx
606         vmovdqu 24(%rdi),%xmm6
607         movl    %ecx,48(%rsp)
608         cmovleq %rsp,%r12
609         subq    %r12,%rbp
610         movq    %rbp,96(%rsp)
611         movl    56(%rdi),%ecx
612         movq    40(%rdi),%r13
613         cmpl    %edx,%ecx
614         movq    48(%rdi),%rbp
615         cmovgl  %ecx,%edx
616         testl   %ecx,%ecx
617         vmovdqu 64(%rdi),%xmm7
618         movl    %ecx,52(%rsp)
619         cmovleq %rsp,%r13
620         subq    %r13,%rbp
621         movq    %rbp,104(%rsp)
622         movl    96(%rdi),%ecx
623         movq    80(%rdi),%r14
624         cmpl    %edx,%ecx
625         movq    88(%rdi),%rbp
626         cmovgl  %ecx,%edx
627         testl   %ecx,%ecx
628         vmovdqu 104(%rdi),%xmm8
629         movl    %ecx,56(%rsp)
630         cmovleq %rsp,%r14
631         subq    %r14,%rbp
632         movq    %rbp,112(%rsp)
633         movl    136(%rdi),%ecx
634         movq    120(%rdi),%r15
635         cmpl    %edx,%ecx
636         movq    128(%rdi),%rbp
637         cmovgl  %ecx,%edx
638         testl   %ecx,%ecx
639         vmovdqu 144(%rdi),%xmm9
640         movl    %ecx,60(%rsp)
641         cmovleq %rsp,%r15
642         subq    %r15,%rbp
643         movq    %rbp,120(%rsp)
644         testl   %edx,%edx
645         jz      .Lenc8x_done
646
647         vmovups 16-120(%rsi),%xmm1
648         vmovups 32-120(%rsi),%xmm0
649         movl    240-120(%rsi),%eax
650
651         vpxor   (%r8),%xmm15,%xmm10
652         leaq    128(%rsp),%rbp
653         vpxor   (%r9),%xmm15,%xmm11
654         vpxor   (%r10),%xmm15,%xmm12
655         vpxor   (%r11),%xmm15,%xmm13
656         vpxor   %xmm10,%xmm2,%xmm2
657         vpxor   (%r12),%xmm15,%xmm10
658         vpxor   %xmm11,%xmm3,%xmm3
659         vpxor   (%r13),%xmm15,%xmm11
660         vpxor   %xmm12,%xmm4,%xmm4
661         vpxor   (%r14),%xmm15,%xmm12
662         vpxor   %xmm13,%xmm5,%xmm5
663         vpxor   (%r15),%xmm15,%xmm13
664         vpxor   %xmm10,%xmm6,%xmm6
665         movl    $1,%ecx
666         vpxor   %xmm11,%xmm7,%xmm7
667         vpxor   %xmm12,%xmm8,%xmm8
668         vpxor   %xmm13,%xmm9,%xmm9
669         jmp     .Loop_enc8x
670
671 .align  32
672 .Loop_enc8x:
673         vaesenc %xmm1,%xmm2,%xmm2
674         cmpl    32+0(%rsp),%ecx
675         vaesenc %xmm1,%xmm3,%xmm3
676         prefetcht0      31(%r8)
677         vaesenc %xmm1,%xmm4,%xmm4
678         vaesenc %xmm1,%xmm5,%xmm5
679         leaq    (%r8,%rbx,1),%rbx
680         cmovgeq %rsp,%r8
681         vaesenc %xmm1,%xmm6,%xmm6
682         cmovgq  %rsp,%rbx
683         vaesenc %xmm1,%xmm7,%xmm7
684         subq    %r8,%rbx
685         vaesenc %xmm1,%xmm8,%xmm8
686         vpxor   16(%r8),%xmm15,%xmm10
687         movq    %rbx,64+0(%rsp)
688         vaesenc %xmm1,%xmm9,%xmm9
689         vmovups -72(%rsi),%xmm1
690         leaq    16(%r8,%rbx,1),%r8
691         vmovdqu %xmm10,0(%rbp)
692         vaesenc %xmm0,%xmm2,%xmm2
693         cmpl    32+4(%rsp),%ecx
694         movq    64+8(%rsp),%rbx
695         vaesenc %xmm0,%xmm3,%xmm3
696         prefetcht0      31(%r9)
697         vaesenc %xmm0,%xmm4,%xmm4
698         vaesenc %xmm0,%xmm5,%xmm5
699         leaq    (%r9,%rbx,1),%rbx
700         cmovgeq %rsp,%r9
701         vaesenc %xmm0,%xmm6,%xmm6
702         cmovgq  %rsp,%rbx
703         vaesenc %xmm0,%xmm7,%xmm7
704         subq    %r9,%rbx
705         vaesenc %xmm0,%xmm8,%xmm8
706         vpxor   16(%r9),%xmm15,%xmm11
707         movq    %rbx,64+8(%rsp)
708         vaesenc %xmm0,%xmm9,%xmm9
709         vmovups -56(%rsi),%xmm0
710         leaq    16(%r9,%rbx,1),%r9
711         vmovdqu %xmm11,16(%rbp)
712         vaesenc %xmm1,%xmm2,%xmm2
713         cmpl    32+8(%rsp),%ecx
714         movq    64+16(%rsp),%rbx
715         vaesenc %xmm1,%xmm3,%xmm3
716         prefetcht0      31(%r10)
717         vaesenc %xmm1,%xmm4,%xmm4
718         prefetcht0      15(%r8)
719         vaesenc %xmm1,%xmm5,%xmm5
720         leaq    (%r10,%rbx,1),%rbx
721         cmovgeq %rsp,%r10
722         vaesenc %xmm1,%xmm6,%xmm6
723         cmovgq  %rsp,%rbx
724         vaesenc %xmm1,%xmm7,%xmm7
725         subq    %r10,%rbx
726         vaesenc %xmm1,%xmm8,%xmm8
727         vpxor   16(%r10),%xmm15,%xmm12
728         movq    %rbx,64+16(%rsp)
729         vaesenc %xmm1,%xmm9,%xmm9
730         vmovups -40(%rsi),%xmm1
731         leaq    16(%r10,%rbx,1),%r10
732         vmovdqu %xmm12,32(%rbp)
733         vaesenc %xmm0,%xmm2,%xmm2
734         cmpl    32+12(%rsp),%ecx
735         movq    64+24(%rsp),%rbx
736         vaesenc %xmm0,%xmm3,%xmm3
737         prefetcht0      31(%r11)
738         vaesenc %xmm0,%xmm4,%xmm4
739         prefetcht0      15(%r9)
740         vaesenc %xmm0,%xmm5,%xmm5
741         leaq    (%r11,%rbx,1),%rbx
742         cmovgeq %rsp,%r11
743         vaesenc %xmm0,%xmm6,%xmm6
744         cmovgq  %rsp,%rbx
745         vaesenc %xmm0,%xmm7,%xmm7
746         subq    %r11,%rbx
747         vaesenc %xmm0,%xmm8,%xmm8
748         vpxor   16(%r11),%xmm15,%xmm13
749         movq    %rbx,64+24(%rsp)
750         vaesenc %xmm0,%xmm9,%xmm9
751         vmovups -24(%rsi),%xmm0
752         leaq    16(%r11,%rbx,1),%r11
753         vmovdqu %xmm13,48(%rbp)
754         vaesenc %xmm1,%xmm2,%xmm2
755         cmpl    32+16(%rsp),%ecx
756         movq    64+32(%rsp),%rbx
757         vaesenc %xmm1,%xmm3,%xmm3
758         prefetcht0      31(%r12)
759         vaesenc %xmm1,%xmm4,%xmm4
760         prefetcht0      15(%r10)
761         vaesenc %xmm1,%xmm5,%xmm5
762         leaq    (%r12,%rbx,1),%rbx
763         cmovgeq %rsp,%r12
764         vaesenc %xmm1,%xmm6,%xmm6
765         cmovgq  %rsp,%rbx
766         vaesenc %xmm1,%xmm7,%xmm7
767         subq    %r12,%rbx
768         vaesenc %xmm1,%xmm8,%xmm8
769         vpxor   16(%r12),%xmm15,%xmm10
770         movq    %rbx,64+32(%rsp)
771         vaesenc %xmm1,%xmm9,%xmm9
772         vmovups -8(%rsi),%xmm1
773         leaq    16(%r12,%rbx,1),%r12
774         vaesenc %xmm0,%xmm2,%xmm2
775         cmpl    32+20(%rsp),%ecx
776         movq    64+40(%rsp),%rbx
777         vaesenc %xmm0,%xmm3,%xmm3
778         prefetcht0      31(%r13)
779         vaesenc %xmm0,%xmm4,%xmm4
780         prefetcht0      15(%r11)
781         vaesenc %xmm0,%xmm5,%xmm5
782         leaq    (%rbx,%r13,1),%rbx
783         cmovgeq %rsp,%r13
784         vaesenc %xmm0,%xmm6,%xmm6
785         cmovgq  %rsp,%rbx
786         vaesenc %xmm0,%xmm7,%xmm7
787         subq    %r13,%rbx
788         vaesenc %xmm0,%xmm8,%xmm8
789         vpxor   16(%r13),%xmm15,%xmm11
790         movq    %rbx,64+40(%rsp)
791         vaesenc %xmm0,%xmm9,%xmm9
792         vmovups 8(%rsi),%xmm0
793         leaq    16(%r13,%rbx,1),%r13
794         vaesenc %xmm1,%xmm2,%xmm2
795         cmpl    32+24(%rsp),%ecx
796         movq    64+48(%rsp),%rbx
797         vaesenc %xmm1,%xmm3,%xmm3
798         prefetcht0      31(%r14)
799         vaesenc %xmm1,%xmm4,%xmm4
800         prefetcht0      15(%r12)
801         vaesenc %xmm1,%xmm5,%xmm5
802         leaq    (%r14,%rbx,1),%rbx
803         cmovgeq %rsp,%r14
804         vaesenc %xmm1,%xmm6,%xmm6
805         cmovgq  %rsp,%rbx
806         vaesenc %xmm1,%xmm7,%xmm7
807         subq    %r14,%rbx
808         vaesenc %xmm1,%xmm8,%xmm8
809         vpxor   16(%r14),%xmm15,%xmm12
810         movq    %rbx,64+48(%rsp)
811         vaesenc %xmm1,%xmm9,%xmm9
812         vmovups 24(%rsi),%xmm1
813         leaq    16(%r14,%rbx,1),%r14
814         vaesenc %xmm0,%xmm2,%xmm2
815         cmpl    32+28(%rsp),%ecx
816         movq    64+56(%rsp),%rbx
817         vaesenc %xmm0,%xmm3,%xmm3
818         prefetcht0      31(%r15)
819         vaesenc %xmm0,%xmm4,%xmm4
820         prefetcht0      15(%r13)
821         vaesenc %xmm0,%xmm5,%xmm5
822         leaq    (%r15,%rbx,1),%rbx
823         cmovgeq %rsp,%r15
824         vaesenc %xmm0,%xmm6,%xmm6
825         cmovgq  %rsp,%rbx
826         vaesenc %xmm0,%xmm7,%xmm7
827         subq    %r15,%rbx
828         vaesenc %xmm0,%xmm8,%xmm8
829         vpxor   16(%r15),%xmm15,%xmm13
830         movq    %rbx,64+56(%rsp)
831         vaesenc %xmm0,%xmm9,%xmm9
832         vmovups 40(%rsi),%xmm0
833         leaq    16(%r15,%rbx,1),%r15
834         vmovdqu 32(%rsp),%xmm14
835         prefetcht0      15(%r14)
836         prefetcht0      15(%r15)
837         cmpl    $11,%eax
838         jb      .Lenc8x_tail
839
840         vaesenc %xmm1,%xmm2,%xmm2
841         vaesenc %xmm1,%xmm3,%xmm3
842         vaesenc %xmm1,%xmm4,%xmm4
843         vaesenc %xmm1,%xmm5,%xmm5
844         vaesenc %xmm1,%xmm6,%xmm6
845         vaesenc %xmm1,%xmm7,%xmm7
846         vaesenc %xmm1,%xmm8,%xmm8
847         vaesenc %xmm1,%xmm9,%xmm9
848         vmovups 176-120(%rsi),%xmm1
849
850         vaesenc %xmm0,%xmm2,%xmm2
851         vaesenc %xmm0,%xmm3,%xmm3
852         vaesenc %xmm0,%xmm4,%xmm4
853         vaesenc %xmm0,%xmm5,%xmm5
854         vaesenc %xmm0,%xmm6,%xmm6
855         vaesenc %xmm0,%xmm7,%xmm7
856         vaesenc %xmm0,%xmm8,%xmm8
857         vaesenc %xmm0,%xmm9,%xmm9
858         vmovups 192-120(%rsi),%xmm0
859         je      .Lenc8x_tail
860
861         vaesenc %xmm1,%xmm2,%xmm2
862         vaesenc %xmm1,%xmm3,%xmm3
863         vaesenc %xmm1,%xmm4,%xmm4
864         vaesenc %xmm1,%xmm5,%xmm5
865         vaesenc %xmm1,%xmm6,%xmm6
866         vaesenc %xmm1,%xmm7,%xmm7
867         vaesenc %xmm1,%xmm8,%xmm8
868         vaesenc %xmm1,%xmm9,%xmm9
869         vmovups 208-120(%rsi),%xmm1
870
871         vaesenc %xmm0,%xmm2,%xmm2
872         vaesenc %xmm0,%xmm3,%xmm3
873         vaesenc %xmm0,%xmm4,%xmm4
874         vaesenc %xmm0,%xmm5,%xmm5
875         vaesenc %xmm0,%xmm6,%xmm6
876         vaesenc %xmm0,%xmm7,%xmm7
877         vaesenc %xmm0,%xmm8,%xmm8
878         vaesenc %xmm0,%xmm9,%xmm9
879         vmovups 224-120(%rsi),%xmm0
880
881 .Lenc8x_tail:
882         vaesenc %xmm1,%xmm2,%xmm2
883         vpxor   %xmm15,%xmm15,%xmm15
884         vaesenc %xmm1,%xmm3,%xmm3
885         vaesenc %xmm1,%xmm4,%xmm4
886         vpcmpgtd        %xmm15,%xmm14,%xmm15
887         vaesenc %xmm1,%xmm5,%xmm5
888         vaesenc %xmm1,%xmm6,%xmm6
889         vpaddd  %xmm14,%xmm15,%xmm15
890         vmovdqu 48(%rsp),%xmm14
891         vaesenc %xmm1,%xmm7,%xmm7
892         movq    64(%rsp),%rbx
893         vaesenc %xmm1,%xmm8,%xmm8
894         vaesenc %xmm1,%xmm9,%xmm9
895         vmovups 16-120(%rsi),%xmm1
896
897         vaesenclast     %xmm0,%xmm2,%xmm2
898         vmovdqa %xmm15,32(%rsp)
899         vpxor   %xmm15,%xmm15,%xmm15
900         vaesenclast     %xmm0,%xmm3,%xmm3
901         vaesenclast     %xmm0,%xmm4,%xmm4
902         vpcmpgtd        %xmm15,%xmm14,%xmm15
903         vaesenclast     %xmm0,%xmm5,%xmm5
904         vaesenclast     %xmm0,%xmm6,%xmm6
905         vpaddd  %xmm15,%xmm14,%xmm14
906         vmovdqu -120(%rsi),%xmm15
907         vaesenclast     %xmm0,%xmm7,%xmm7
908         vaesenclast     %xmm0,%xmm8,%xmm8
909         vmovdqa %xmm14,48(%rsp)
910         vaesenclast     %xmm0,%xmm9,%xmm9
911         vmovups 32-120(%rsi),%xmm0
912
913         vmovups %xmm2,-16(%r8)
914         subq    %rbx,%r8
915         vpxor   0(%rbp),%xmm2,%xmm2
916         vmovups %xmm3,-16(%r9)
917         subq    72(%rsp),%r9
918         vpxor   16(%rbp),%xmm3,%xmm3
919         vmovups %xmm4,-16(%r10)
920         subq    80(%rsp),%r10
921         vpxor   32(%rbp),%xmm4,%xmm4
922         vmovups %xmm5,-16(%r11)
923         subq    88(%rsp),%r11
924         vpxor   48(%rbp),%xmm5,%xmm5
925         vmovups %xmm6,-16(%r12)
926         subq    96(%rsp),%r12
927         vpxor   %xmm10,%xmm6,%xmm6
928         vmovups %xmm7,-16(%r13)
929         subq    104(%rsp),%r13
930         vpxor   %xmm11,%xmm7,%xmm7
931         vmovups %xmm8,-16(%r14)
932         subq    112(%rsp),%r14
933         vpxor   %xmm12,%xmm8,%xmm8
934         vmovups %xmm9,-16(%r15)
935         subq    120(%rsp),%r15
936         vpxor   %xmm13,%xmm9,%xmm9
937
938         decl    %edx
939         jnz     .Loop_enc8x
940
941         movq    16(%rsp),%rax
942
943
944
945
946
947 .Lenc8x_done:
948         vzeroupper
949         movq    -48(%rax),%r15
950         movq    -40(%rax),%r14
951         movq    -32(%rax),%r13
952         movq    -24(%rax),%r12
953         movq    -16(%rax),%rbp
954         movq    -8(%rax),%rbx
955         leaq    (%rax),%rsp
956 .Lenc8x_epilogue:
957         .byte   0xf3,0xc3
958 .size   aesni_multi_cbc_encrypt_avx,.-aesni_multi_cbc_encrypt_avx
959
960 .type   aesni_multi_cbc_decrypt_avx,@function
961 .align  32
962 aesni_multi_cbc_decrypt_avx:
963 _avx_cbc_dec_shortcut:
964         movq    %rsp,%rax
965         pushq   %rbx
966         pushq   %rbp
967         pushq   %r12
968         pushq   %r13
969         pushq   %r14
970         pushq   %r15
971
972
973
974
975
976
977
978
979
980         subq    $256,%rsp
981         andq    $-256,%rsp
982         subq    $192,%rsp
983         movq    %rax,16(%rsp)
984
985 .Ldec8x_body:
986         vzeroupper
987         vmovdqu (%rsi),%xmm15
988         leaq    120(%rsi),%rsi
989         leaq    160(%rdi),%rdi
990         shrl    $1,%edx
991
992 .Ldec8x_loop_grande:
993
994         xorl    %edx,%edx
995         movl    -144(%rdi),%ecx
996         movq    -160(%rdi),%r8
997         cmpl    %edx,%ecx
998         movq    -152(%rdi),%rbx
999         cmovgl  %ecx,%edx
1000         testl   %ecx,%ecx
1001         vmovdqu -136(%rdi),%xmm2
1002         movl    %ecx,32(%rsp)
1003         cmovleq %rsp,%r8
1004         subq    %r8,%rbx
1005         movq    %rbx,64(%rsp)
1006         vmovdqu %xmm2,192(%rsp)
1007         movl    -104(%rdi),%ecx
1008         movq    -120(%rdi),%r9
1009         cmpl    %edx,%ecx
1010         movq    -112(%rdi),%rbp
1011         cmovgl  %ecx,%edx
1012         testl   %ecx,%ecx
1013         vmovdqu -96(%rdi),%xmm3
1014         movl    %ecx,36(%rsp)
1015         cmovleq %rsp,%r9
1016         subq    %r9,%rbp
1017         movq    %rbp,72(%rsp)
1018         vmovdqu %xmm3,208(%rsp)
1019         movl    -64(%rdi),%ecx
1020         movq    -80(%rdi),%r10
1021         cmpl    %edx,%ecx
1022         movq    -72(%rdi),%rbp
1023         cmovgl  %ecx,%edx
1024         testl   %ecx,%ecx
1025         vmovdqu -56(%rdi),%xmm4
1026         movl    %ecx,40(%rsp)
1027         cmovleq %rsp,%r10
1028         subq    %r10,%rbp
1029         movq    %rbp,80(%rsp)
1030         vmovdqu %xmm4,224(%rsp)
1031         movl    -24(%rdi),%ecx
1032         movq    -40(%rdi),%r11
1033         cmpl    %edx,%ecx
1034         movq    -32(%rdi),%rbp
1035         cmovgl  %ecx,%edx
1036         testl   %ecx,%ecx
1037         vmovdqu -16(%rdi),%xmm5
1038         movl    %ecx,44(%rsp)
1039         cmovleq %rsp,%r11
1040         subq    %r11,%rbp
1041         movq    %rbp,88(%rsp)
1042         vmovdqu %xmm5,240(%rsp)
1043         movl    16(%rdi),%ecx
1044         movq    0(%rdi),%r12
1045         cmpl    %edx,%ecx
1046         movq    8(%rdi),%rbp
1047         cmovgl  %ecx,%edx
1048         testl   %ecx,%ecx
1049         vmovdqu 24(%rdi),%xmm6
1050         movl    %ecx,48(%rsp)
1051         cmovleq %rsp,%r12
1052         subq    %r12,%rbp
1053         movq    %rbp,96(%rsp)
1054         vmovdqu %xmm6,256(%rsp)
1055         movl    56(%rdi),%ecx
1056         movq    40(%rdi),%r13
1057         cmpl    %edx,%ecx
1058         movq    48(%rdi),%rbp
1059         cmovgl  %ecx,%edx
1060         testl   %ecx,%ecx
1061         vmovdqu 64(%rdi),%xmm7
1062         movl    %ecx,52(%rsp)
1063         cmovleq %rsp,%r13
1064         subq    %r13,%rbp
1065         movq    %rbp,104(%rsp)
1066         vmovdqu %xmm7,272(%rsp)
1067         movl    96(%rdi),%ecx
1068         movq    80(%rdi),%r14
1069         cmpl    %edx,%ecx
1070         movq    88(%rdi),%rbp
1071         cmovgl  %ecx,%edx
1072         testl   %ecx,%ecx
1073         vmovdqu 104(%rdi),%xmm8
1074         movl    %ecx,56(%rsp)
1075         cmovleq %rsp,%r14
1076         subq    %r14,%rbp
1077         movq    %rbp,112(%rsp)
1078         vmovdqu %xmm8,288(%rsp)
1079         movl    136(%rdi),%ecx
1080         movq    120(%rdi),%r15
1081         cmpl    %edx,%ecx
1082         movq    128(%rdi),%rbp
1083         cmovgl  %ecx,%edx
1084         testl   %ecx,%ecx
1085         vmovdqu 144(%rdi),%xmm9
1086         movl    %ecx,60(%rsp)
1087         cmovleq %rsp,%r15
1088         subq    %r15,%rbp
1089         movq    %rbp,120(%rsp)
1090         vmovdqu %xmm9,304(%rsp)
1091         testl   %edx,%edx
1092         jz      .Ldec8x_done
1093
1094         vmovups 16-120(%rsi),%xmm1
1095         vmovups 32-120(%rsi),%xmm0
1096         movl    240-120(%rsi),%eax
1097         leaq    192+128(%rsp),%rbp
1098
1099         vmovdqu (%r8),%xmm2
1100         vmovdqu (%r9),%xmm3
1101         vmovdqu (%r10),%xmm4
1102         vmovdqu (%r11),%xmm5
1103         vmovdqu (%r12),%xmm6
1104         vmovdqu (%r13),%xmm7
1105         vmovdqu (%r14),%xmm8
1106         vmovdqu (%r15),%xmm9
1107         vmovdqu %xmm2,0(%rbp)
1108         vpxor   %xmm15,%xmm2,%xmm2
1109         vmovdqu %xmm3,16(%rbp)
1110         vpxor   %xmm15,%xmm3,%xmm3
1111         vmovdqu %xmm4,32(%rbp)
1112         vpxor   %xmm15,%xmm4,%xmm4
1113         vmovdqu %xmm5,48(%rbp)
1114         vpxor   %xmm15,%xmm5,%xmm5
1115         vmovdqu %xmm6,64(%rbp)
1116         vpxor   %xmm15,%xmm6,%xmm6
1117         vmovdqu %xmm7,80(%rbp)
1118         vpxor   %xmm15,%xmm7,%xmm7
1119         vmovdqu %xmm8,96(%rbp)
1120         vpxor   %xmm15,%xmm8,%xmm8
1121         vmovdqu %xmm9,112(%rbp)
1122         vpxor   %xmm15,%xmm9,%xmm9
1123         xorq    $0x80,%rbp
1124         movl    $1,%ecx
1125         jmp     .Loop_dec8x
1126
1127 .align  32
1128 .Loop_dec8x:
1129         vaesdec %xmm1,%xmm2,%xmm2
1130         cmpl    32+0(%rsp),%ecx
1131         vaesdec %xmm1,%xmm3,%xmm3
1132         prefetcht0      31(%r8)
1133         vaesdec %xmm1,%xmm4,%xmm4
1134         vaesdec %xmm1,%xmm5,%xmm5
1135         leaq    (%r8,%rbx,1),%rbx
1136         cmovgeq %rsp,%r8
1137         vaesdec %xmm1,%xmm6,%xmm6
1138         cmovgq  %rsp,%rbx
1139         vaesdec %xmm1,%xmm7,%xmm7
1140         subq    %r8,%rbx
1141         vaesdec %xmm1,%xmm8,%xmm8
1142         vmovdqu 16(%r8),%xmm10
1143         movq    %rbx,64+0(%rsp)
1144         vaesdec %xmm1,%xmm9,%xmm9
1145         vmovups -72(%rsi),%xmm1
1146         leaq    16(%r8,%rbx,1),%r8
1147         vmovdqu %xmm10,128(%rsp)
1148         vaesdec %xmm0,%xmm2,%xmm2
1149         cmpl    32+4(%rsp),%ecx
1150         movq    64+8(%rsp),%rbx
1151         vaesdec %xmm0,%xmm3,%xmm3
1152         prefetcht0      31(%r9)
1153         vaesdec %xmm0,%xmm4,%xmm4
1154         vaesdec %xmm0,%xmm5,%xmm5
1155         leaq    (%r9,%rbx,1),%rbx
1156         cmovgeq %rsp,%r9
1157         vaesdec %xmm0,%xmm6,%xmm6
1158         cmovgq  %rsp,%rbx
1159         vaesdec %xmm0,%xmm7,%xmm7
1160         subq    %r9,%rbx
1161         vaesdec %xmm0,%xmm8,%xmm8
1162         vmovdqu 16(%r9),%xmm11
1163         movq    %rbx,64+8(%rsp)
1164         vaesdec %xmm0,%xmm9,%xmm9
1165         vmovups -56(%rsi),%xmm0
1166         leaq    16(%r9,%rbx,1),%r9
1167         vmovdqu %xmm11,144(%rsp)
1168         vaesdec %xmm1,%xmm2,%xmm2
1169         cmpl    32+8(%rsp),%ecx
1170         movq    64+16(%rsp),%rbx
1171         vaesdec %xmm1,%xmm3,%xmm3
1172         prefetcht0      31(%r10)
1173         vaesdec %xmm1,%xmm4,%xmm4
1174         prefetcht0      15(%r8)
1175         vaesdec %xmm1,%xmm5,%xmm5
1176         leaq    (%r10,%rbx,1),%rbx
1177         cmovgeq %rsp,%r10
1178         vaesdec %xmm1,%xmm6,%xmm6
1179         cmovgq  %rsp,%rbx
1180         vaesdec %xmm1,%xmm7,%xmm7
1181         subq    %r10,%rbx
1182         vaesdec %xmm1,%xmm8,%xmm8
1183         vmovdqu 16(%r10),%xmm12
1184         movq    %rbx,64+16(%rsp)
1185         vaesdec %xmm1,%xmm9,%xmm9
1186         vmovups -40(%rsi),%xmm1
1187         leaq    16(%r10,%rbx,1),%r10
1188         vmovdqu %xmm12,160(%rsp)
1189         vaesdec %xmm0,%xmm2,%xmm2
1190         cmpl    32+12(%rsp),%ecx
1191         movq    64+24(%rsp),%rbx
1192         vaesdec %xmm0,%xmm3,%xmm3
1193         prefetcht0      31(%r11)
1194         vaesdec %xmm0,%xmm4,%xmm4
1195         prefetcht0      15(%r9)
1196         vaesdec %xmm0,%xmm5,%xmm5
1197         leaq    (%r11,%rbx,1),%rbx
1198         cmovgeq %rsp,%r11
1199         vaesdec %xmm0,%xmm6,%xmm6
1200         cmovgq  %rsp,%rbx
1201         vaesdec %xmm0,%xmm7,%xmm7
1202         subq    %r11,%rbx
1203         vaesdec %xmm0,%xmm8,%xmm8
1204         vmovdqu 16(%r11),%xmm13
1205         movq    %rbx,64+24(%rsp)
1206         vaesdec %xmm0,%xmm9,%xmm9
1207         vmovups -24(%rsi),%xmm0
1208         leaq    16(%r11,%rbx,1),%r11
1209         vmovdqu %xmm13,176(%rsp)
1210         vaesdec %xmm1,%xmm2,%xmm2
1211         cmpl    32+16(%rsp),%ecx
1212         movq    64+32(%rsp),%rbx
1213         vaesdec %xmm1,%xmm3,%xmm3
1214         prefetcht0      31(%r12)
1215         vaesdec %xmm1,%xmm4,%xmm4
1216         prefetcht0      15(%r10)
1217         vaesdec %xmm1,%xmm5,%xmm5
1218         leaq    (%r12,%rbx,1),%rbx
1219         cmovgeq %rsp,%r12
1220         vaesdec %xmm1,%xmm6,%xmm6
1221         cmovgq  %rsp,%rbx
1222         vaesdec %xmm1,%xmm7,%xmm7
1223         subq    %r12,%rbx
1224         vaesdec %xmm1,%xmm8,%xmm8
1225         vmovdqu 16(%r12),%xmm10
1226         movq    %rbx,64+32(%rsp)
1227         vaesdec %xmm1,%xmm9,%xmm9
1228         vmovups -8(%rsi),%xmm1
1229         leaq    16(%r12,%rbx,1),%r12
1230         vaesdec %xmm0,%xmm2,%xmm2
1231         cmpl    32+20(%rsp),%ecx
1232         movq    64+40(%rsp),%rbx
1233         vaesdec %xmm0,%xmm3,%xmm3
1234         prefetcht0      31(%r13)
1235         vaesdec %xmm0,%xmm4,%xmm4
1236         prefetcht0      15(%r11)
1237         vaesdec %xmm0,%xmm5,%xmm5
1238         leaq    (%rbx,%r13,1),%rbx
1239         cmovgeq %rsp,%r13
1240         vaesdec %xmm0,%xmm6,%xmm6
1241         cmovgq  %rsp,%rbx
1242         vaesdec %xmm0,%xmm7,%xmm7
1243         subq    %r13,%rbx
1244         vaesdec %xmm0,%xmm8,%xmm8
1245         vmovdqu 16(%r13),%xmm11
1246         movq    %rbx,64+40(%rsp)
1247         vaesdec %xmm0,%xmm9,%xmm9
1248         vmovups 8(%rsi),%xmm0
1249         leaq    16(%r13,%rbx,1),%r13
1250         vaesdec %xmm1,%xmm2,%xmm2
1251         cmpl    32+24(%rsp),%ecx
1252         movq    64+48(%rsp),%rbx
1253         vaesdec %xmm1,%xmm3,%xmm3
1254         prefetcht0      31(%r14)
1255         vaesdec %xmm1,%xmm4,%xmm4
1256         prefetcht0      15(%r12)
1257         vaesdec %xmm1,%xmm5,%xmm5
1258         leaq    (%r14,%rbx,1),%rbx
1259         cmovgeq %rsp,%r14
1260         vaesdec %xmm1,%xmm6,%xmm6
1261         cmovgq  %rsp,%rbx
1262         vaesdec %xmm1,%xmm7,%xmm7
1263         subq    %r14,%rbx
1264         vaesdec %xmm1,%xmm8,%xmm8
1265         vmovdqu 16(%r14),%xmm12
1266         movq    %rbx,64+48(%rsp)
1267         vaesdec %xmm1,%xmm9,%xmm9
1268         vmovups 24(%rsi),%xmm1
1269         leaq    16(%r14,%rbx,1),%r14
1270         vaesdec %xmm0,%xmm2,%xmm2
1271         cmpl    32+28(%rsp),%ecx
1272         movq    64+56(%rsp),%rbx
1273         vaesdec %xmm0,%xmm3,%xmm3
1274         prefetcht0      31(%r15)
1275         vaesdec %xmm0,%xmm4,%xmm4
1276         prefetcht0      15(%r13)
1277         vaesdec %xmm0,%xmm5,%xmm5
1278         leaq    (%r15,%rbx,1),%rbx
1279         cmovgeq %rsp,%r15
1280         vaesdec %xmm0,%xmm6,%xmm6
1281         cmovgq  %rsp,%rbx
1282         vaesdec %xmm0,%xmm7,%xmm7
1283         subq    %r15,%rbx
1284         vaesdec %xmm0,%xmm8,%xmm8
1285         vmovdqu 16(%r15),%xmm13
1286         movq    %rbx,64+56(%rsp)
1287         vaesdec %xmm0,%xmm9,%xmm9
1288         vmovups 40(%rsi),%xmm0
1289         leaq    16(%r15,%rbx,1),%r15
1290         vmovdqu 32(%rsp),%xmm14
1291         prefetcht0      15(%r14)
1292         prefetcht0      15(%r15)
1293         cmpl    $11,%eax
1294         jb      .Ldec8x_tail
1295
1296         vaesdec %xmm1,%xmm2,%xmm2
1297         vaesdec %xmm1,%xmm3,%xmm3
1298         vaesdec %xmm1,%xmm4,%xmm4
1299         vaesdec %xmm1,%xmm5,%xmm5
1300         vaesdec %xmm1,%xmm6,%xmm6
1301         vaesdec %xmm1,%xmm7,%xmm7
1302         vaesdec %xmm1,%xmm8,%xmm8
1303         vaesdec %xmm1,%xmm9,%xmm9
1304         vmovups 176-120(%rsi),%xmm1
1305
1306         vaesdec %xmm0,%xmm2,%xmm2
1307         vaesdec %xmm0,%xmm3,%xmm3
1308         vaesdec %xmm0,%xmm4,%xmm4
1309         vaesdec %xmm0,%xmm5,%xmm5
1310         vaesdec %xmm0,%xmm6,%xmm6
1311         vaesdec %xmm0,%xmm7,%xmm7
1312         vaesdec %xmm0,%xmm8,%xmm8
1313         vaesdec %xmm0,%xmm9,%xmm9
1314         vmovups 192-120(%rsi),%xmm0
1315         je      .Ldec8x_tail
1316
1317         vaesdec %xmm1,%xmm2,%xmm2
1318         vaesdec %xmm1,%xmm3,%xmm3
1319         vaesdec %xmm1,%xmm4,%xmm4
1320         vaesdec %xmm1,%xmm5,%xmm5
1321         vaesdec %xmm1,%xmm6,%xmm6
1322         vaesdec %xmm1,%xmm7,%xmm7
1323         vaesdec %xmm1,%xmm8,%xmm8
1324         vaesdec %xmm1,%xmm9,%xmm9
1325         vmovups 208-120(%rsi),%xmm1
1326
1327         vaesdec %xmm0,%xmm2,%xmm2
1328         vaesdec %xmm0,%xmm3,%xmm3
1329         vaesdec %xmm0,%xmm4,%xmm4
1330         vaesdec %xmm0,%xmm5,%xmm5
1331         vaesdec %xmm0,%xmm6,%xmm6
1332         vaesdec %xmm0,%xmm7,%xmm7
1333         vaesdec %xmm0,%xmm8,%xmm8
1334         vaesdec %xmm0,%xmm9,%xmm9
1335         vmovups 224-120(%rsi),%xmm0
1336
1337 .Ldec8x_tail:
1338         vaesdec %xmm1,%xmm2,%xmm2
1339         vpxor   %xmm15,%xmm15,%xmm15
1340         vaesdec %xmm1,%xmm3,%xmm3
1341         vaesdec %xmm1,%xmm4,%xmm4
1342         vpcmpgtd        %xmm15,%xmm14,%xmm15
1343         vaesdec %xmm1,%xmm5,%xmm5
1344         vaesdec %xmm1,%xmm6,%xmm6
1345         vpaddd  %xmm14,%xmm15,%xmm15
1346         vmovdqu 48(%rsp),%xmm14
1347         vaesdec %xmm1,%xmm7,%xmm7
1348         movq    64(%rsp),%rbx
1349         vaesdec %xmm1,%xmm8,%xmm8
1350         vaesdec %xmm1,%xmm9,%xmm9
1351         vmovups 16-120(%rsi),%xmm1
1352
1353         vaesdeclast     %xmm0,%xmm2,%xmm2
1354         vmovdqa %xmm15,32(%rsp)
1355         vpxor   %xmm15,%xmm15,%xmm15
1356         vaesdeclast     %xmm0,%xmm3,%xmm3
1357         vpxor   0(%rbp),%xmm2,%xmm2
1358         vaesdeclast     %xmm0,%xmm4,%xmm4
1359         vpxor   16(%rbp),%xmm3,%xmm3
1360         vpcmpgtd        %xmm15,%xmm14,%xmm15
1361         vaesdeclast     %xmm0,%xmm5,%xmm5
1362         vpxor   32(%rbp),%xmm4,%xmm4
1363         vaesdeclast     %xmm0,%xmm6,%xmm6
1364         vpxor   48(%rbp),%xmm5,%xmm5
1365         vpaddd  %xmm15,%xmm14,%xmm14
1366         vmovdqu -120(%rsi),%xmm15
1367         vaesdeclast     %xmm0,%xmm7,%xmm7
1368         vpxor   64(%rbp),%xmm6,%xmm6
1369         vaesdeclast     %xmm0,%xmm8,%xmm8
1370         vpxor   80(%rbp),%xmm7,%xmm7
1371         vmovdqa %xmm14,48(%rsp)
1372         vaesdeclast     %xmm0,%xmm9,%xmm9
1373         vpxor   96(%rbp),%xmm8,%xmm8
1374         vmovups 32-120(%rsi),%xmm0
1375
1376         vmovups %xmm2,-16(%r8)
1377         subq    %rbx,%r8
1378         vmovdqu 128+0(%rsp),%xmm2
1379         vpxor   112(%rbp),%xmm9,%xmm9
1380         vmovups %xmm3,-16(%r9)
1381         subq    72(%rsp),%r9
1382         vmovdqu %xmm2,0(%rbp)
1383         vpxor   %xmm15,%xmm2,%xmm2
1384         vmovdqu 128+16(%rsp),%xmm3
1385         vmovups %xmm4,-16(%r10)
1386         subq    80(%rsp),%r10
1387         vmovdqu %xmm3,16(%rbp)
1388         vpxor   %xmm15,%xmm3,%xmm3
1389         vmovdqu 128+32(%rsp),%xmm4
1390         vmovups %xmm5,-16(%r11)
1391         subq    88(%rsp),%r11
1392         vmovdqu %xmm4,32(%rbp)
1393         vpxor   %xmm15,%xmm4,%xmm4
1394         vmovdqu 128+48(%rsp),%xmm5
1395         vmovups %xmm6,-16(%r12)
1396         subq    96(%rsp),%r12
1397         vmovdqu %xmm5,48(%rbp)
1398         vpxor   %xmm15,%xmm5,%xmm5
1399         vmovdqu %xmm10,64(%rbp)
1400         vpxor   %xmm10,%xmm15,%xmm6
1401         vmovups %xmm7,-16(%r13)
1402         subq    104(%rsp),%r13
1403         vmovdqu %xmm11,80(%rbp)
1404         vpxor   %xmm11,%xmm15,%xmm7
1405         vmovups %xmm8,-16(%r14)
1406         subq    112(%rsp),%r14
1407         vmovdqu %xmm12,96(%rbp)
1408         vpxor   %xmm12,%xmm15,%xmm8
1409         vmovups %xmm9,-16(%r15)
1410         subq    120(%rsp),%r15
1411         vmovdqu %xmm13,112(%rbp)
1412         vpxor   %xmm13,%xmm15,%xmm9
1413
1414         xorq    $128,%rbp
1415         decl    %edx
1416         jnz     .Loop_dec8x
1417
1418         movq    16(%rsp),%rax
1419
1420
1421
1422
1423
1424 .Ldec8x_done:
1425         vzeroupper
1426         movq    -48(%rax),%r15
1427         movq    -40(%rax),%r14
1428         movq    -32(%rax),%r13
1429         movq    -24(%rax),%r12
1430         movq    -16(%rax),%rbp
1431         movq    -8(%rax),%rbx
1432         leaq    (%rax),%rsp
1433 .Ldec8x_epilogue:
1434         .byte   0xf3,0xc3
1435 .size   aesni_multi_cbc_decrypt_avx,.-aesni_multi_cbc_decrypt_avx
1436 .section .note.GNU-stack,"",%progbits