renamed asm directories.
[gnutls:gnutls.git] / lib / accelerated / x86 / coff / appro-aes-x86-64-coff.s
1 # Copyright (c) 2011, Andy Polyakov by <appro@openssl.org>
2 # All rights reserved.
3 #
4 # Redistribution and use in source and binary forms, with or without
5 # modification, are permitted provided that the following conditions
6 # are met:
7
8 #     * Redistributions of source code must retain copyright notices,
9 #      this list of conditions and the following disclaimer.
10 #
11 #     * Redistributions in binary form must reproduce the above
12 #      copyright notice, this list of conditions and the following
13 #      disclaimer in the documentation and/or other materials
14 #      provided with the distribution.
15 #
16 #     * Neither the name of the Andy Polyakov nor the names of its
17 #      copyright holder and contributors may be used to endorse or
18 #      promote products derived from this software without specific
19 #      prior written permission.
20 #
21 # ALTERNATIVELY, provided that this notice is retained in full, this
22 # product may be distributed under the terms of the GNU General Public
23 # License (GPL), in which case the provisions of the GPL apply INSTEAD OF
24 # those given above.
25 #
26 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS
27 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
28 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
29 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
30 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
31 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
32 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
33 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
34 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
35 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
36 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37
38 .text   
39 .globl  aesni_encrypt
40 .def    aesni_encrypt;  .scl 2; .type 32;       .endef
41 .p2align        4
42 aesni_encrypt:
43         movups  (%rcx),%xmm2
44         movl    240(%r8),%eax
45         movups  (%r8),%xmm0
46         movups  16(%r8),%xmm1
47         leaq    32(%r8),%r8
48         xorps   %xmm0,%xmm2
49 .Loop_enc1_1:
50 .byte   102,15,56,220,209
51         decl    %eax
52         movups  (%r8),%xmm1
53         leaq    16(%r8),%r8
54         jnz     .Loop_enc1_1    
55 .byte   102,15,56,221,209
56         movups  %xmm2,(%rdx)
57         .byte   0xf3,0xc3
58
59
60 .globl  aesni_decrypt
61 .def    aesni_decrypt;  .scl 2; .type 32;       .endef
62 .p2align        4
63 aesni_decrypt:
64         movups  (%rcx),%xmm2
65         movl    240(%r8),%eax
66         movups  (%r8),%xmm0
67         movups  16(%r8),%xmm1
68         leaq    32(%r8),%r8
69         xorps   %xmm0,%xmm2
70 .Loop_dec1_2:
71 .byte   102,15,56,222,209
72         decl    %eax
73         movups  (%r8),%xmm1
74         leaq    16(%r8),%r8
75         jnz     .Loop_dec1_2    
76 .byte   102,15,56,223,209
77         movups  %xmm2,(%rdx)
78         .byte   0xf3,0xc3
79
80 .def    _aesni_encrypt3;        .scl 3; .type 32;       .endef
81 .p2align        4
82 _aesni_encrypt3:
83         movups  (%rcx),%xmm0
84         shrl    $1,%eax
85         movups  16(%rcx),%xmm1
86         leaq    32(%rcx),%rcx
87         xorps   %xmm0,%xmm2
88         xorps   %xmm0,%xmm3
89         xorps   %xmm0,%xmm4
90         movups  (%rcx),%xmm0
91
92 .Lenc_loop3:
93 .byte   102,15,56,220,209
94 .byte   102,15,56,220,217
95         decl    %eax
96 .byte   102,15,56,220,225
97         movups  16(%rcx),%xmm1
98 .byte   102,15,56,220,208
99 .byte   102,15,56,220,216
100         leaq    32(%rcx),%rcx
101 .byte   102,15,56,220,224
102         movups  (%rcx),%xmm0
103         jnz     .Lenc_loop3
104
105 .byte   102,15,56,220,209
106 .byte   102,15,56,220,217
107 .byte   102,15,56,220,225
108 .byte   102,15,56,221,208
109 .byte   102,15,56,221,216
110 .byte   102,15,56,221,224
111         .byte   0xf3,0xc3
112
113 .def    _aesni_decrypt3;        .scl 3; .type 32;       .endef
114 .p2align        4
115 _aesni_decrypt3:
116         movups  (%rcx),%xmm0
117         shrl    $1,%eax
118         movups  16(%rcx),%xmm1
119         leaq    32(%rcx),%rcx
120         xorps   %xmm0,%xmm2
121         xorps   %xmm0,%xmm3
122         xorps   %xmm0,%xmm4
123         movups  (%rcx),%xmm0
124
125 .Ldec_loop3:
126 .byte   102,15,56,222,209
127 .byte   102,15,56,222,217
128         decl    %eax
129 .byte   102,15,56,222,225
130         movups  16(%rcx),%xmm1
131 .byte   102,15,56,222,208
132 .byte   102,15,56,222,216
133         leaq    32(%rcx),%rcx
134 .byte   102,15,56,222,224
135         movups  (%rcx),%xmm0
136         jnz     .Ldec_loop3
137
138 .byte   102,15,56,222,209
139 .byte   102,15,56,222,217
140 .byte   102,15,56,222,225
141 .byte   102,15,56,223,208
142 .byte   102,15,56,223,216
143 .byte   102,15,56,223,224
144         .byte   0xf3,0xc3
145
146 .def    _aesni_encrypt4;        .scl 3; .type 32;       .endef
147 .p2align        4
148 _aesni_encrypt4:
149         movups  (%rcx),%xmm0
150         shrl    $1,%eax
151         movups  16(%rcx),%xmm1
152         leaq    32(%rcx),%rcx
153         xorps   %xmm0,%xmm2
154         xorps   %xmm0,%xmm3
155         xorps   %xmm0,%xmm4
156         xorps   %xmm0,%xmm5
157         movups  (%rcx),%xmm0
158
159 .Lenc_loop4:
160 .byte   102,15,56,220,209
161 .byte   102,15,56,220,217
162         decl    %eax
163 .byte   102,15,56,220,225
164 .byte   102,15,56,220,233
165         movups  16(%rcx),%xmm1
166 .byte   102,15,56,220,208
167 .byte   102,15,56,220,216
168         leaq    32(%rcx),%rcx
169 .byte   102,15,56,220,224
170 .byte   102,15,56,220,232
171         movups  (%rcx),%xmm0
172         jnz     .Lenc_loop4
173
174 .byte   102,15,56,220,209
175 .byte   102,15,56,220,217
176 .byte   102,15,56,220,225
177 .byte   102,15,56,220,233
178 .byte   102,15,56,221,208
179 .byte   102,15,56,221,216
180 .byte   102,15,56,221,224
181 .byte   102,15,56,221,232
182         .byte   0xf3,0xc3
183
184 .def    _aesni_decrypt4;        .scl 3; .type 32;       .endef
185 .p2align        4
186 _aesni_decrypt4:
187         movups  (%rcx),%xmm0
188         shrl    $1,%eax
189         movups  16(%rcx),%xmm1
190         leaq    32(%rcx),%rcx
191         xorps   %xmm0,%xmm2
192         xorps   %xmm0,%xmm3
193         xorps   %xmm0,%xmm4
194         xorps   %xmm0,%xmm5
195         movups  (%rcx),%xmm0
196
197 .Ldec_loop4:
198 .byte   102,15,56,222,209
199 .byte   102,15,56,222,217
200         decl    %eax
201 .byte   102,15,56,222,225
202 .byte   102,15,56,222,233
203         movups  16(%rcx),%xmm1
204 .byte   102,15,56,222,208
205 .byte   102,15,56,222,216
206         leaq    32(%rcx),%rcx
207 .byte   102,15,56,222,224
208 .byte   102,15,56,222,232
209         movups  (%rcx),%xmm0
210         jnz     .Ldec_loop4
211
212 .byte   102,15,56,222,209
213 .byte   102,15,56,222,217
214 .byte   102,15,56,222,225
215 .byte   102,15,56,222,233
216 .byte   102,15,56,223,208
217 .byte   102,15,56,223,216
218 .byte   102,15,56,223,224
219 .byte   102,15,56,223,232
220         .byte   0xf3,0xc3
221
222 .def    _aesni_encrypt6;        .scl 3; .type 32;       .endef
223 .p2align        4
224 _aesni_encrypt6:
225         movups  (%rcx),%xmm0
226         shrl    $1,%eax
227         movups  16(%rcx),%xmm1
228         leaq    32(%rcx),%rcx
229         xorps   %xmm0,%xmm2
230         pxor    %xmm0,%xmm3
231 .byte   102,15,56,220,209
232         pxor    %xmm0,%xmm4
233 .byte   102,15,56,220,217
234         pxor    %xmm0,%xmm5
235 .byte   102,15,56,220,225
236         pxor    %xmm0,%xmm6
237 .byte   102,15,56,220,233
238         pxor    %xmm0,%xmm7
239         decl    %eax
240 .byte   102,15,56,220,241
241         movups  (%rcx),%xmm0
242 .byte   102,15,56,220,249
243         jmp     .Lenc_loop6_enter
244 .p2align        4
245 .Lenc_loop6:
246 .byte   102,15,56,220,209
247 .byte   102,15,56,220,217
248         decl    %eax
249 .byte   102,15,56,220,225
250 .byte   102,15,56,220,233
251 .byte   102,15,56,220,241
252 .byte   102,15,56,220,249
253 .Lenc_loop6_enter:
254         movups  16(%rcx),%xmm1
255 .byte   102,15,56,220,208
256 .byte   102,15,56,220,216
257         leaq    32(%rcx),%rcx
258 .byte   102,15,56,220,224
259 .byte   102,15,56,220,232
260 .byte   102,15,56,220,240
261 .byte   102,15,56,220,248
262         movups  (%rcx),%xmm0
263         jnz     .Lenc_loop6
264
265 .byte   102,15,56,220,209
266 .byte   102,15,56,220,217
267 .byte   102,15,56,220,225
268 .byte   102,15,56,220,233
269 .byte   102,15,56,220,241
270 .byte   102,15,56,220,249
271 .byte   102,15,56,221,208
272 .byte   102,15,56,221,216
273 .byte   102,15,56,221,224
274 .byte   102,15,56,221,232
275 .byte   102,15,56,221,240
276 .byte   102,15,56,221,248
277         .byte   0xf3,0xc3
278
279 .def    _aesni_decrypt6;        .scl 3; .type 32;       .endef
280 .p2align        4
281 _aesni_decrypt6:
282         movups  (%rcx),%xmm0
283         shrl    $1,%eax
284         movups  16(%rcx),%xmm1
285         leaq    32(%rcx),%rcx
286         xorps   %xmm0,%xmm2
287         pxor    %xmm0,%xmm3
288 .byte   102,15,56,222,209
289         pxor    %xmm0,%xmm4
290 .byte   102,15,56,222,217
291         pxor    %xmm0,%xmm5
292 .byte   102,15,56,222,225
293         pxor    %xmm0,%xmm6
294 .byte   102,15,56,222,233
295         pxor    %xmm0,%xmm7
296         decl    %eax
297 .byte   102,15,56,222,241
298         movups  (%rcx),%xmm0
299 .byte   102,15,56,222,249
300         jmp     .Ldec_loop6_enter
301 .p2align        4
302 .Ldec_loop6:
303 .byte   102,15,56,222,209
304 .byte   102,15,56,222,217
305         decl    %eax
306 .byte   102,15,56,222,225
307 .byte   102,15,56,222,233
308 .byte   102,15,56,222,241
309 .byte   102,15,56,222,249
310 .Ldec_loop6_enter:
311         movups  16(%rcx),%xmm1
312 .byte   102,15,56,222,208
313 .byte   102,15,56,222,216
314         leaq    32(%rcx),%rcx
315 .byte   102,15,56,222,224
316 .byte   102,15,56,222,232
317 .byte   102,15,56,222,240
318 .byte   102,15,56,222,248
319         movups  (%rcx),%xmm0
320         jnz     .Ldec_loop6
321
322 .byte   102,15,56,222,209
323 .byte   102,15,56,222,217
324 .byte   102,15,56,222,225
325 .byte   102,15,56,222,233
326 .byte   102,15,56,222,241
327 .byte   102,15,56,222,249
328 .byte   102,15,56,223,208
329 .byte   102,15,56,223,216
330 .byte   102,15,56,223,224
331 .byte   102,15,56,223,232
332 .byte   102,15,56,223,240
333 .byte   102,15,56,223,248
334         .byte   0xf3,0xc3
335
336 .def    _aesni_encrypt8;        .scl 3; .type 32;       .endef
337 .p2align        4
338 _aesni_encrypt8:
339         movups  (%rcx),%xmm0
340         shrl    $1,%eax
341         movups  16(%rcx),%xmm1
342         leaq    32(%rcx),%rcx
343         xorps   %xmm0,%xmm2
344         xorps   %xmm0,%xmm3
345 .byte   102,15,56,220,209
346         pxor    %xmm0,%xmm4
347 .byte   102,15,56,220,217
348         pxor    %xmm0,%xmm5
349 .byte   102,15,56,220,225
350         pxor    %xmm0,%xmm6
351 .byte   102,15,56,220,233
352         pxor    %xmm0,%xmm7
353         decl    %eax
354 .byte   102,15,56,220,241
355         pxor    %xmm0,%xmm8
356 .byte   102,15,56,220,249
357         pxor    %xmm0,%xmm9
358         movups  (%rcx),%xmm0
359 .byte   102,68,15,56,220,193
360 .byte   102,68,15,56,220,201
361         movups  16(%rcx),%xmm1
362         jmp     .Lenc_loop8_enter
363 .p2align        4
364 .Lenc_loop8:
365 .byte   102,15,56,220,209
366 .byte   102,15,56,220,217
367         decl    %eax
368 .byte   102,15,56,220,225
369 .byte   102,15,56,220,233
370 .byte   102,15,56,220,241
371 .byte   102,15,56,220,249
372 .byte   102,68,15,56,220,193
373 .byte   102,68,15,56,220,201
374         movups  16(%rcx),%xmm1
375 .Lenc_loop8_enter:
376 .byte   102,15,56,220,208
377 .byte   102,15,56,220,216
378         leaq    32(%rcx),%rcx
379 .byte   102,15,56,220,224
380 .byte   102,15,56,220,232
381 .byte   102,15,56,220,240
382 .byte   102,15,56,220,248
383 .byte   102,68,15,56,220,192
384 .byte   102,68,15,56,220,200
385         movups  (%rcx),%xmm0
386         jnz     .Lenc_loop8
387
388 .byte   102,15,56,220,209
389 .byte   102,15,56,220,217
390 .byte   102,15,56,220,225
391 .byte   102,15,56,220,233
392 .byte   102,15,56,220,241
393 .byte   102,15,56,220,249
394 .byte   102,68,15,56,220,193
395 .byte   102,68,15,56,220,201
396 .byte   102,15,56,221,208
397 .byte   102,15,56,221,216
398 .byte   102,15,56,221,224
399 .byte   102,15,56,221,232
400 .byte   102,15,56,221,240
401 .byte   102,15,56,221,248
402 .byte   102,68,15,56,221,192
403 .byte   102,68,15,56,221,200
404         .byte   0xf3,0xc3
405
406 .def    _aesni_decrypt8;        .scl 3; .type 32;       .endef
407 .p2align        4
408 _aesni_decrypt8:
409         movups  (%rcx),%xmm0
410         shrl    $1,%eax
411         movups  16(%rcx),%xmm1
412         leaq    32(%rcx),%rcx
413         xorps   %xmm0,%xmm2
414         xorps   %xmm0,%xmm3
415 .byte   102,15,56,222,209
416         pxor    %xmm0,%xmm4
417 .byte   102,15,56,222,217
418         pxor    %xmm0,%xmm5
419 .byte   102,15,56,222,225
420         pxor    %xmm0,%xmm6
421 .byte   102,15,56,222,233
422         pxor    %xmm0,%xmm7
423         decl    %eax
424 .byte   102,15,56,222,241
425         pxor    %xmm0,%xmm8
426 .byte   102,15,56,222,249
427         pxor    %xmm0,%xmm9
428         movups  (%rcx),%xmm0
429 .byte   102,68,15,56,222,193
430 .byte   102,68,15,56,222,201
431         movups  16(%rcx),%xmm1
432         jmp     .Ldec_loop8_enter
433 .p2align        4
434 .Ldec_loop8:
435 .byte   102,15,56,222,209
436 .byte   102,15,56,222,217
437         decl    %eax
438 .byte   102,15,56,222,225
439 .byte   102,15,56,222,233
440 .byte   102,15,56,222,241
441 .byte   102,15,56,222,249
442 .byte   102,68,15,56,222,193
443 .byte   102,68,15,56,222,201
444         movups  16(%rcx),%xmm1
445 .Ldec_loop8_enter:
446 .byte   102,15,56,222,208
447 .byte   102,15,56,222,216
448         leaq    32(%rcx),%rcx
449 .byte   102,15,56,222,224
450 .byte   102,15,56,222,232
451 .byte   102,15,56,222,240
452 .byte   102,15,56,222,248
453 .byte   102,68,15,56,222,192
454 .byte   102,68,15,56,222,200
455         movups  (%rcx),%xmm0
456         jnz     .Ldec_loop8
457
458 .byte   102,15,56,222,209
459 .byte   102,15,56,222,217
460 .byte   102,15,56,222,225
461 .byte   102,15,56,222,233
462 .byte   102,15,56,222,241
463 .byte   102,15,56,222,249
464 .byte   102,68,15,56,222,193
465 .byte   102,68,15,56,222,201
466 .byte   102,15,56,223,208
467 .byte   102,15,56,223,216
468 .byte   102,15,56,223,224
469 .byte   102,15,56,223,232
470 .byte   102,15,56,223,240
471 .byte   102,15,56,223,248
472 .byte   102,68,15,56,223,192
473 .byte   102,68,15,56,223,200
474         .byte   0xf3,0xc3
475
476 .globl  aesni_ecb_encrypt
477 .def    aesni_ecb_encrypt;      .scl 2; .type 32;       .endef
478 .p2align        4
479 aesni_ecb_encrypt:
480         movq    %rdi,8(%rsp)
481         movq    %rsi,16(%rsp)
482         movq    %rsp,%rax
483 .LSEH_begin_aesni_ecb_encrypt:
484         movq    %rcx,%rdi
485         movq    %rdx,%rsi
486         movq    %r8,%rdx
487         movq    %r9,%rcx
488         movq    40(%rsp),%r8
489
490         andq    $-16,%rdx
491         jz      .Lecb_ret
492
493         movl    240(%rcx),%eax
494         movups  (%rcx),%xmm0
495         movq    %rcx,%r11
496         movl    %eax,%r10d
497         testl   %r8d,%r8d
498         jz      .Lecb_decrypt
499
500         cmpq    $128,%rdx
501         jb      .Lecb_enc_tail
502
503         movdqu  (%rdi),%xmm2
504         movdqu  16(%rdi),%xmm3
505         movdqu  32(%rdi),%xmm4
506         movdqu  48(%rdi),%xmm5
507         movdqu  64(%rdi),%xmm6
508         movdqu  80(%rdi),%xmm7
509         movdqu  96(%rdi),%xmm8
510         movdqu  112(%rdi),%xmm9
511         leaq    128(%rdi),%rdi
512         subq    $128,%rdx
513         jmp     .Lecb_enc_loop8_enter
514 .p2align        4
515 .Lecb_enc_loop8:
516         movups  %xmm2,(%rsi)
517         movq    %r11,%rcx
518         movdqu  (%rdi),%xmm2
519         movl    %r10d,%eax
520         movups  %xmm3,16(%rsi)
521         movdqu  16(%rdi),%xmm3
522         movups  %xmm4,32(%rsi)
523         movdqu  32(%rdi),%xmm4
524         movups  %xmm5,48(%rsi)
525         movdqu  48(%rdi),%xmm5
526         movups  %xmm6,64(%rsi)
527         movdqu  64(%rdi),%xmm6
528         movups  %xmm7,80(%rsi)
529         movdqu  80(%rdi),%xmm7
530         movups  %xmm8,96(%rsi)
531         movdqu  96(%rdi),%xmm8
532         movups  %xmm9,112(%rsi)
533         leaq    128(%rsi),%rsi
534         movdqu  112(%rdi),%xmm9
535         leaq    128(%rdi),%rdi
536 .Lecb_enc_loop8_enter:
537
538         call    _aesni_encrypt8
539
540         subq    $128,%rdx
541         jnc     .Lecb_enc_loop8
542
543         movups  %xmm2,(%rsi)
544         movq    %r11,%rcx
545         movups  %xmm3,16(%rsi)
546         movl    %r10d,%eax
547         movups  %xmm4,32(%rsi)
548         movups  %xmm5,48(%rsi)
549         movups  %xmm6,64(%rsi)
550         movups  %xmm7,80(%rsi)
551         movups  %xmm8,96(%rsi)
552         movups  %xmm9,112(%rsi)
553         leaq    128(%rsi),%rsi
554         addq    $128,%rdx
555         jz      .Lecb_ret
556
557 .Lecb_enc_tail:
558         movups  (%rdi),%xmm2
559         cmpq    $32,%rdx
560         jb      .Lecb_enc_one
561         movups  16(%rdi),%xmm3
562         je      .Lecb_enc_two
563         movups  32(%rdi),%xmm4
564         cmpq    $64,%rdx
565         jb      .Lecb_enc_three
566         movups  48(%rdi),%xmm5
567         je      .Lecb_enc_four
568         movups  64(%rdi),%xmm6
569         cmpq    $96,%rdx
570         jb      .Lecb_enc_five
571         movups  80(%rdi),%xmm7
572         je      .Lecb_enc_six
573         movdqu  96(%rdi),%xmm8
574         call    _aesni_encrypt8
575         movups  %xmm2,(%rsi)
576         movups  %xmm3,16(%rsi)
577         movups  %xmm4,32(%rsi)
578         movups  %xmm5,48(%rsi)
579         movups  %xmm6,64(%rsi)
580         movups  %xmm7,80(%rsi)
581         movups  %xmm8,96(%rsi)
582         jmp     .Lecb_ret
583 .p2align        4
584 .Lecb_enc_one:
585         movups  (%rcx),%xmm0
586         movups  16(%rcx),%xmm1
587         leaq    32(%rcx),%rcx
588         xorps   %xmm0,%xmm2
589 .Loop_enc1_3:
590 .byte   102,15,56,220,209
591         decl    %eax
592         movups  (%rcx),%xmm1
593         leaq    16(%rcx),%rcx
594         jnz     .Loop_enc1_3    
595 .byte   102,15,56,221,209
596         movups  %xmm2,(%rsi)
597         jmp     .Lecb_ret
598 .p2align        4
599 .Lecb_enc_two:
600         xorps   %xmm4,%xmm4
601         call    _aesni_encrypt3
602         movups  %xmm2,(%rsi)
603         movups  %xmm3,16(%rsi)
604         jmp     .Lecb_ret
605 .p2align        4
606 .Lecb_enc_three:
607         call    _aesni_encrypt3
608         movups  %xmm2,(%rsi)
609         movups  %xmm3,16(%rsi)
610         movups  %xmm4,32(%rsi)
611         jmp     .Lecb_ret
612 .p2align        4
613 .Lecb_enc_four:
614         call    _aesni_encrypt4
615         movups  %xmm2,(%rsi)
616         movups  %xmm3,16(%rsi)
617         movups  %xmm4,32(%rsi)
618         movups  %xmm5,48(%rsi)
619         jmp     .Lecb_ret
620 .p2align        4
621 .Lecb_enc_five:
622         xorps   %xmm7,%xmm7
623         call    _aesni_encrypt6
624         movups  %xmm2,(%rsi)
625         movups  %xmm3,16(%rsi)
626         movups  %xmm4,32(%rsi)
627         movups  %xmm5,48(%rsi)
628         movups  %xmm6,64(%rsi)
629         jmp     .Lecb_ret
630 .p2align        4
631 .Lecb_enc_six:
632         call    _aesni_encrypt6
633         movups  %xmm2,(%rsi)
634         movups  %xmm3,16(%rsi)
635         movups  %xmm4,32(%rsi)
636         movups  %xmm5,48(%rsi)
637         movups  %xmm6,64(%rsi)
638         movups  %xmm7,80(%rsi)
639         jmp     .Lecb_ret
640
641 .p2align        4
642 .Lecb_decrypt:
643         cmpq    $128,%rdx
644         jb      .Lecb_dec_tail
645
646         movdqu  (%rdi),%xmm2
647         movdqu  16(%rdi),%xmm3
648         movdqu  32(%rdi),%xmm4
649         movdqu  48(%rdi),%xmm5
650         movdqu  64(%rdi),%xmm6
651         movdqu  80(%rdi),%xmm7
652         movdqu  96(%rdi),%xmm8
653         movdqu  112(%rdi),%xmm9
654         leaq    128(%rdi),%rdi
655         subq    $128,%rdx
656         jmp     .Lecb_dec_loop8_enter
657 .p2align        4
658 .Lecb_dec_loop8:
659         movups  %xmm2,(%rsi)
660         movq    %r11,%rcx
661         movdqu  (%rdi),%xmm2
662         movl    %r10d,%eax
663         movups  %xmm3,16(%rsi)
664         movdqu  16(%rdi),%xmm3
665         movups  %xmm4,32(%rsi)
666         movdqu  32(%rdi),%xmm4
667         movups  %xmm5,48(%rsi)
668         movdqu  48(%rdi),%xmm5
669         movups  %xmm6,64(%rsi)
670         movdqu  64(%rdi),%xmm6
671         movups  %xmm7,80(%rsi)
672         movdqu  80(%rdi),%xmm7
673         movups  %xmm8,96(%rsi)
674         movdqu  96(%rdi),%xmm8
675         movups  %xmm9,112(%rsi)
676         leaq    128(%rsi),%rsi
677         movdqu  112(%rdi),%xmm9
678         leaq    128(%rdi),%rdi
679 .Lecb_dec_loop8_enter:
680
681         call    _aesni_decrypt8
682
683         movups  (%r11),%xmm0
684         subq    $128,%rdx
685         jnc     .Lecb_dec_loop8
686
687         movups  %xmm2,(%rsi)
688         movq    %r11,%rcx
689         movups  %xmm3,16(%rsi)
690         movl    %r10d,%eax
691         movups  %xmm4,32(%rsi)
692         movups  %xmm5,48(%rsi)
693         movups  %xmm6,64(%rsi)
694         movups  %xmm7,80(%rsi)
695         movups  %xmm8,96(%rsi)
696         movups  %xmm9,112(%rsi)
697         leaq    128(%rsi),%rsi
698         addq    $128,%rdx
699         jz      .Lecb_ret
700
701 .Lecb_dec_tail:
702         movups  (%rdi),%xmm2
703         cmpq    $32,%rdx
704         jb      .Lecb_dec_one
705         movups  16(%rdi),%xmm3
706         je      .Lecb_dec_two
707         movups  32(%rdi),%xmm4
708         cmpq    $64,%rdx
709         jb      .Lecb_dec_three
710         movups  48(%rdi),%xmm5
711         je      .Lecb_dec_four
712         movups  64(%rdi),%xmm6
713         cmpq    $96,%rdx
714         jb      .Lecb_dec_five
715         movups  80(%rdi),%xmm7
716         je      .Lecb_dec_six
717         movups  96(%rdi),%xmm8
718         movups  (%rcx),%xmm0
719         call    _aesni_decrypt8
720         movups  %xmm2,(%rsi)
721         movups  %xmm3,16(%rsi)
722         movups  %xmm4,32(%rsi)
723         movups  %xmm5,48(%rsi)
724         movups  %xmm6,64(%rsi)
725         movups  %xmm7,80(%rsi)
726         movups  %xmm8,96(%rsi)
727         jmp     .Lecb_ret
728 .p2align        4
729 .Lecb_dec_one:
730         movups  (%rcx),%xmm0
731         movups  16(%rcx),%xmm1
732         leaq    32(%rcx),%rcx
733         xorps   %xmm0,%xmm2
734 .Loop_dec1_4:
735 .byte   102,15,56,222,209
736         decl    %eax
737         movups  (%rcx),%xmm1
738         leaq    16(%rcx),%rcx
739         jnz     .Loop_dec1_4    
740 .byte   102,15,56,223,209
741         movups  %xmm2,(%rsi)
742         jmp     .Lecb_ret
743 .p2align        4
744 .Lecb_dec_two:
745         xorps   %xmm4,%xmm4
746         call    _aesni_decrypt3
747         movups  %xmm2,(%rsi)
748         movups  %xmm3,16(%rsi)
749         jmp     .Lecb_ret
750 .p2align        4
751 .Lecb_dec_three:
752         call    _aesni_decrypt3
753         movups  %xmm2,(%rsi)
754         movups  %xmm3,16(%rsi)
755         movups  %xmm4,32(%rsi)
756         jmp     .Lecb_ret
757 .p2align        4
758 .Lecb_dec_four:
759         call    _aesni_decrypt4
760         movups  %xmm2,(%rsi)
761         movups  %xmm3,16(%rsi)
762         movups  %xmm4,32(%rsi)
763         movups  %xmm5,48(%rsi)
764         jmp     .Lecb_ret
765 .p2align        4
766 .Lecb_dec_five:
767         xorps   %xmm7,%xmm7
768         call    _aesni_decrypt6
769         movups  %xmm2,(%rsi)
770         movups  %xmm3,16(%rsi)
771         movups  %xmm4,32(%rsi)
772         movups  %xmm5,48(%rsi)
773         movups  %xmm6,64(%rsi)
774         jmp     .Lecb_ret
775 .p2align        4
776 .Lecb_dec_six:
777         call    _aesni_decrypt6
778         movups  %xmm2,(%rsi)
779         movups  %xmm3,16(%rsi)
780         movups  %xmm4,32(%rsi)
781         movups  %xmm5,48(%rsi)
782         movups  %xmm6,64(%rsi)
783         movups  %xmm7,80(%rsi)
784
785 .Lecb_ret:
786         movq    8(%rsp),%rdi
787         movq    16(%rsp),%rsi
788         .byte   0xf3,0xc3
789 .LSEH_end_aesni_ecb_encrypt:
790 .globl  aesni_ccm64_encrypt_blocks
791 .def    aesni_ccm64_encrypt_blocks;     .scl 2; .type 32;       .endef
792 .p2align        4
793 aesni_ccm64_encrypt_blocks:
794         movq    %rdi,8(%rsp)
795         movq    %rsi,16(%rsp)
796         movq    %rsp,%rax
797 .LSEH_begin_aesni_ccm64_encrypt_blocks:
798         movq    %rcx,%rdi
799         movq    %rdx,%rsi
800         movq    %r8,%rdx
801         movq    %r9,%rcx
802         movq    40(%rsp),%r8
803         movq    48(%rsp),%r9
804
805         leaq    -88(%rsp),%rsp
806         movaps  %xmm6,(%rsp)
807         movaps  %xmm7,16(%rsp)
808         movaps  %xmm8,32(%rsp)
809         movaps  %xmm9,48(%rsp)
810 .Lccm64_enc_body:
811         movl    240(%rcx),%eax
812         movdqu  (%r8),%xmm9
813         movdqa  .Lincrement64(%rip),%xmm6
814         movdqa  .Lbswap_mask(%rip),%xmm7
815
816         shrl    $1,%eax
817         leaq    0(%rcx),%r11
818         movdqu  (%r9),%xmm3
819         movdqa  %xmm9,%xmm2
820         movl    %eax,%r10d
821 .byte   102,68,15,56,0,207
822         jmp     .Lccm64_enc_outer
823 .p2align        4
824 .Lccm64_enc_outer:
825         movups  (%r11),%xmm0
826         movl    %r10d,%eax
827         movups  (%rdi),%xmm8
828
829         xorps   %xmm0,%xmm2
830         movups  16(%r11),%xmm1
831         xorps   %xmm8,%xmm0
832         leaq    32(%r11),%rcx
833         xorps   %xmm0,%xmm3
834         movups  (%rcx),%xmm0
835
836 .Lccm64_enc2_loop:
837 .byte   102,15,56,220,209
838         decl    %eax
839 .byte   102,15,56,220,217
840         movups  16(%rcx),%xmm1
841 .byte   102,15,56,220,208
842         leaq    32(%rcx),%rcx
843 .byte   102,15,56,220,216
844         movups  0(%rcx),%xmm0
845         jnz     .Lccm64_enc2_loop
846 .byte   102,15,56,220,209
847 .byte   102,15,56,220,217
848         paddq   %xmm6,%xmm9
849 .byte   102,15,56,221,208
850 .byte   102,15,56,221,216
851
852         decq    %rdx
853         leaq    16(%rdi),%rdi
854         xorps   %xmm2,%xmm8
855         movdqa  %xmm9,%xmm2
856         movups  %xmm8,(%rsi)
857         leaq    16(%rsi),%rsi
858 .byte   102,15,56,0,215
859         jnz     .Lccm64_enc_outer
860
861         movups  %xmm3,(%r9)
862         movaps  (%rsp),%xmm6
863         movaps  16(%rsp),%xmm7
864         movaps  32(%rsp),%xmm8
865         movaps  48(%rsp),%xmm9
866         leaq    88(%rsp),%rsp
867 .Lccm64_enc_ret:
868         movq    8(%rsp),%rdi
869         movq    16(%rsp),%rsi
870         .byte   0xf3,0xc3
871 .LSEH_end_aesni_ccm64_encrypt_blocks:
872 .globl  aesni_ccm64_decrypt_blocks
873 .def    aesni_ccm64_decrypt_blocks;     .scl 2; .type 32;       .endef
874 .p2align        4
875 aesni_ccm64_decrypt_blocks:
876         movq    %rdi,8(%rsp)
877         movq    %rsi,16(%rsp)
878         movq    %rsp,%rax
879 .LSEH_begin_aesni_ccm64_decrypt_blocks:
880         movq    %rcx,%rdi
881         movq    %rdx,%rsi
882         movq    %r8,%rdx
883         movq    %r9,%rcx
884         movq    40(%rsp),%r8
885         movq    48(%rsp),%r9
886
887         leaq    -88(%rsp),%rsp
888         movaps  %xmm6,(%rsp)
889         movaps  %xmm7,16(%rsp)
890         movaps  %xmm8,32(%rsp)
891         movaps  %xmm9,48(%rsp)
892 .Lccm64_dec_body:
893         movl    240(%rcx),%eax
894         movups  (%r8),%xmm9
895         movdqu  (%r9),%xmm3
896         movdqa  .Lincrement64(%rip),%xmm6
897         movdqa  .Lbswap_mask(%rip),%xmm7
898
899         movaps  %xmm9,%xmm2
900         movl    %eax,%r10d
901         movq    %rcx,%r11
902 .byte   102,68,15,56,0,207
903         movups  (%rcx),%xmm0
904         movups  16(%rcx),%xmm1
905         leaq    32(%rcx),%rcx
906         xorps   %xmm0,%xmm2
907 .Loop_enc1_5:
908 .byte   102,15,56,220,209
909         decl    %eax
910         movups  (%rcx),%xmm1
911         leaq    16(%rcx),%rcx
912         jnz     .Loop_enc1_5    
913 .byte   102,15,56,221,209
914         movups  (%rdi),%xmm8
915         paddq   %xmm6,%xmm9
916         leaq    16(%rdi),%rdi
917         jmp     .Lccm64_dec_outer
918 .p2align        4
919 .Lccm64_dec_outer:
920         xorps   %xmm2,%xmm8
921         movdqa  %xmm9,%xmm2
922         movl    %r10d,%eax
923         movups  %xmm8,(%rsi)
924         leaq    16(%rsi),%rsi
925 .byte   102,15,56,0,215
926
927         subq    $1,%rdx
928         jz      .Lccm64_dec_break
929
930         movups  (%r11),%xmm0
931         shrl    $1,%eax
932         movups  16(%r11),%xmm1
933         xorps   %xmm0,%xmm8
934         leaq    32(%r11),%rcx
935         xorps   %xmm0,%xmm2
936         xorps   %xmm8,%xmm3
937         movups  (%rcx),%xmm0
938
939 .Lccm64_dec2_loop:
940 .byte   102,15,56,220,209
941         decl    %eax
942 .byte   102,15,56,220,217
943         movups  16(%rcx),%xmm1
944 .byte   102,15,56,220,208
945         leaq    32(%rcx),%rcx
946 .byte   102,15,56,220,216
947         movups  0(%rcx),%xmm0
948         jnz     .Lccm64_dec2_loop
949         movups  (%rdi),%xmm8
950         paddq   %xmm6,%xmm9
951 .byte   102,15,56,220,209
952 .byte   102,15,56,220,217
953         leaq    16(%rdi),%rdi
954 .byte   102,15,56,221,208
955 .byte   102,15,56,221,216
956         jmp     .Lccm64_dec_outer
957
958 .p2align        4
959 .Lccm64_dec_break:
960
961         movups  (%r11),%xmm0
962         movups  16(%r11),%xmm1
963         xorps   %xmm0,%xmm8
964         leaq    32(%r11),%r11
965         xorps   %xmm8,%xmm3
966 .Loop_enc1_6:
967 .byte   102,15,56,220,217
968         decl    %eax
969         movups  (%r11),%xmm1
970         leaq    16(%r11),%r11
971         jnz     .Loop_enc1_6    
972 .byte   102,15,56,221,217
973         movups  %xmm3,(%r9)
974         movaps  (%rsp),%xmm6
975         movaps  16(%rsp),%xmm7
976         movaps  32(%rsp),%xmm8
977         movaps  48(%rsp),%xmm9
978         leaq    88(%rsp),%rsp
979 .Lccm64_dec_ret:
980         movq    8(%rsp),%rdi
981         movq    16(%rsp),%rsi
982         .byte   0xf3,0xc3
983 .LSEH_end_aesni_ccm64_decrypt_blocks:
984 .globl  aesni_ctr32_encrypt_blocks
985 .def    aesni_ctr32_encrypt_blocks;     .scl 2; .type 32;       .endef
986 .p2align        4
987 aesni_ctr32_encrypt_blocks:
988         movq    %rdi,8(%rsp)
989         movq    %rsi,16(%rsp)
990         movq    %rsp,%rax
991 .LSEH_begin_aesni_ctr32_encrypt_blocks:
992         movq    %rcx,%rdi
993         movq    %rdx,%rsi
994         movq    %r8,%rdx
995         movq    %r9,%rcx
996         movq    40(%rsp),%r8
997
998         leaq    -200(%rsp),%rsp
999         movaps  %xmm6,32(%rsp)
1000         movaps  %xmm7,48(%rsp)
1001         movaps  %xmm8,64(%rsp)
1002         movaps  %xmm9,80(%rsp)
1003         movaps  %xmm10,96(%rsp)
1004         movaps  %xmm11,112(%rsp)
1005         movaps  %xmm12,128(%rsp)
1006         movaps  %xmm13,144(%rsp)
1007         movaps  %xmm14,160(%rsp)
1008         movaps  %xmm15,176(%rsp)
1009 .Lctr32_body:
1010         cmpq    $1,%rdx
1011         je      .Lctr32_one_shortcut
1012
1013         movdqu  (%r8),%xmm14
1014         movdqa  .Lbswap_mask(%rip),%xmm15
1015         xorl    %eax,%eax
1016 .byte   102,69,15,58,22,242,3
1017 .byte   102,68,15,58,34,240,3
1018
1019         movl    240(%rcx),%eax
1020         bswapl  %r10d
1021         pxor    %xmm12,%xmm12
1022         pxor    %xmm13,%xmm13
1023 .byte   102,69,15,58,34,226,0
1024         leaq    3(%r10),%r11
1025 .byte   102,69,15,58,34,235,0
1026         incl    %r10d
1027 .byte   102,69,15,58,34,226,1
1028         incq    %r11
1029 .byte   102,69,15,58,34,235,1
1030         incl    %r10d
1031 .byte   102,69,15,58,34,226,2
1032         incq    %r11
1033 .byte   102,69,15,58,34,235,2
1034         movdqa  %xmm12,0(%rsp)
1035 .byte   102,69,15,56,0,231
1036         movdqa  %xmm13,16(%rsp)
1037 .byte   102,69,15,56,0,239
1038
1039         pshufd  $192,%xmm12,%xmm2
1040         pshufd  $128,%xmm12,%xmm3
1041         pshufd  $64,%xmm12,%xmm4
1042         cmpq    $6,%rdx
1043         jb      .Lctr32_tail
1044         shrl    $1,%eax
1045         movq    %rcx,%r11
1046         movl    %eax,%r10d
1047         subq    $6,%rdx
1048         jmp     .Lctr32_loop6
1049
1050 .p2align        4
1051 .Lctr32_loop6:
1052         pshufd  $192,%xmm13,%xmm5
1053         por     %xmm14,%xmm2
1054         movups  (%r11),%xmm0
1055         pshufd  $128,%xmm13,%xmm6
1056         por     %xmm14,%xmm3
1057         movups  16(%r11),%xmm1
1058         pshufd  $64,%xmm13,%xmm7
1059         por     %xmm14,%xmm4
1060         por     %xmm14,%xmm5
1061         xorps   %xmm0,%xmm2
1062         por     %xmm14,%xmm6
1063         por     %xmm14,%xmm7
1064
1065
1066
1067
1068         pxor    %xmm0,%xmm3
1069 .byte   102,15,56,220,209
1070         leaq    32(%r11),%rcx
1071         pxor    %xmm0,%xmm4
1072 .byte   102,15,56,220,217
1073         movdqa  .Lincrement32(%rip),%xmm13
1074         pxor    %xmm0,%xmm5
1075 .byte   102,15,56,220,225
1076         movdqa  0(%rsp),%xmm12
1077         pxor    %xmm0,%xmm6
1078 .byte   102,15,56,220,233
1079         pxor    %xmm0,%xmm7
1080         movups  (%rcx),%xmm0
1081         decl    %eax
1082 .byte   102,15,56,220,241
1083 .byte   102,15,56,220,249
1084         jmp     .Lctr32_enc_loop6_enter
1085 .p2align        4
1086 .Lctr32_enc_loop6:
1087 .byte   102,15,56,220,209
1088 .byte   102,15,56,220,217
1089         decl    %eax
1090 .byte   102,15,56,220,225
1091 .byte   102,15,56,220,233
1092 .byte   102,15,56,220,241
1093 .byte   102,15,56,220,249
1094 .Lctr32_enc_loop6_enter:
1095         movups  16(%rcx),%xmm1
1096 .byte   102,15,56,220,208
1097 .byte   102,15,56,220,216
1098         leaq    32(%rcx),%rcx
1099 .byte   102,15,56,220,224
1100 .byte   102,15,56,220,232
1101 .byte   102,15,56,220,240
1102 .byte   102,15,56,220,248
1103         movups  (%rcx),%xmm0
1104         jnz     .Lctr32_enc_loop6
1105
1106 .byte   102,15,56,220,209
1107         paddd   %xmm13,%xmm12
1108 .byte   102,15,56,220,217
1109         paddd   16(%rsp),%xmm13
1110 .byte   102,15,56,220,225
1111         movdqa  %xmm12,0(%rsp)
1112 .byte   102,15,56,220,233
1113         movdqa  %xmm13,16(%rsp)
1114 .byte   102,15,56,220,241
1115 .byte   102,69,15,56,0,231
1116 .byte   102,15,56,220,249
1117 .byte   102,69,15,56,0,239
1118
1119 .byte   102,15,56,221,208
1120         movups  (%rdi),%xmm8
1121 .byte   102,15,56,221,216
1122         movups  16(%rdi),%xmm9
1123 .byte   102,15,56,221,224
1124         movups  32(%rdi),%xmm10
1125 .byte   102,15,56,221,232
1126         movups  48(%rdi),%xmm11
1127 .byte   102,15,56,221,240
1128         movups  64(%rdi),%xmm1
1129 .byte   102,15,56,221,248
1130         movups  80(%rdi),%xmm0
1131         leaq    96(%rdi),%rdi
1132
1133         xorps   %xmm2,%xmm8
1134         pshufd  $192,%xmm12,%xmm2
1135         xorps   %xmm3,%xmm9
1136         pshufd  $128,%xmm12,%xmm3
1137         movups  %xmm8,(%rsi)
1138         xorps   %xmm4,%xmm10
1139         pshufd  $64,%xmm12,%xmm4
1140         movups  %xmm9,16(%rsi)
1141         xorps   %xmm5,%xmm11
1142         movups  %xmm10,32(%rsi)
1143         xorps   %xmm6,%xmm1
1144         movups  %xmm11,48(%rsi)
1145         xorps   %xmm7,%xmm0
1146         movups  %xmm1,64(%rsi)
1147         movups  %xmm0,80(%rsi)
1148         leaq    96(%rsi),%rsi
1149         movl    %r10d,%eax
1150         subq    $6,%rdx
1151         jnc     .Lctr32_loop6
1152
1153         addq    $6,%rdx
1154         jz      .Lctr32_done
1155         movq    %r11,%rcx
1156         leal    1(%rax,%rax,1),%eax
1157
1158 .Lctr32_tail:
1159         por     %xmm14,%xmm2
1160         movups  (%rdi),%xmm8
1161         cmpq    $2,%rdx
1162         jb      .Lctr32_one
1163
1164         por     %xmm14,%xmm3
1165         movups  16(%rdi),%xmm9
1166         je      .Lctr32_two
1167
1168         pshufd  $192,%xmm13,%xmm5
1169         por     %xmm14,%xmm4
1170         movups  32(%rdi),%xmm10
1171         cmpq    $4,%rdx
1172         jb      .Lctr32_three
1173
1174         pshufd  $128,%xmm13,%xmm6
1175         por     %xmm14,%xmm5
1176         movups  48(%rdi),%xmm11
1177         je      .Lctr32_four
1178
1179         por     %xmm14,%xmm6
1180         xorps   %xmm7,%xmm7
1181
1182         call    _aesni_encrypt6
1183
1184         movups  64(%rdi),%xmm1
1185         xorps   %xmm2,%xmm8
1186         xorps   %xmm3,%xmm9
1187         movups  %xmm8,(%rsi)
1188         xorps   %xmm4,%xmm10
1189         movups  %xmm9,16(%rsi)
1190         xorps   %xmm5,%xmm11
1191         movups  %xmm10,32(%rsi)
1192         xorps   %xmm6,%xmm1
1193         movups  %xmm11,48(%rsi)
1194         movups  %xmm1,64(%rsi)
1195         jmp     .Lctr32_done
1196
1197 .p2align        4
1198 .Lctr32_one_shortcut:
1199         movups  (%r8),%xmm2
1200         movups  (%rdi),%xmm8
1201         movl    240(%rcx),%eax
1202 .Lctr32_one:
1203         movups  (%rcx),%xmm0
1204         movups  16(%rcx),%xmm1
1205         leaq    32(%rcx),%rcx
1206         xorps   %xmm0,%xmm2
1207 .Loop_enc1_7:
1208 .byte   102,15,56,220,209
1209         decl    %eax
1210         movups  (%rcx),%xmm1
1211         leaq    16(%rcx),%rcx
1212         jnz     .Loop_enc1_7    
1213 .byte   102,15,56,221,209
1214         xorps   %xmm2,%xmm8
1215         movups  %xmm8,(%rsi)
1216         jmp     .Lctr32_done
1217
1218 .p2align        4
1219 .Lctr32_two:
1220         xorps   %xmm4,%xmm4
1221         call    _aesni_encrypt3
1222         xorps   %xmm2,%xmm8
1223         xorps   %xmm3,%xmm9
1224         movups  %xmm8,(%rsi)
1225         movups  %xmm9,16(%rsi)
1226         jmp     .Lctr32_done
1227
1228 .p2align        4
1229 .Lctr32_three:
1230         call    _aesni_encrypt3
1231         xorps   %xmm2,%xmm8
1232         xorps   %xmm3,%xmm9
1233         movups  %xmm8,(%rsi)
1234         xorps   %xmm4,%xmm10
1235         movups  %xmm9,16(%rsi)
1236         movups  %xmm10,32(%rsi)
1237         jmp     .Lctr32_done
1238
1239 .p2align        4
1240 .Lctr32_four:
1241         call    _aesni_encrypt4
1242         xorps   %xmm2,%xmm8
1243         xorps   %xmm3,%xmm9
1244         movups  %xmm8,(%rsi)
1245         xorps   %xmm4,%xmm10
1246         movups  %xmm9,16(%rsi)
1247         xorps   %xmm5,%xmm11
1248         movups  %xmm10,32(%rsi)
1249         movups  %xmm11,48(%rsi)
1250
1251 .Lctr32_done:
1252         movaps  32(%rsp),%xmm6
1253         movaps  48(%rsp),%xmm7
1254         movaps  64(%rsp),%xmm8
1255         movaps  80(%rsp),%xmm9
1256         movaps  96(%rsp),%xmm10
1257         movaps  112(%rsp),%xmm11
1258         movaps  128(%rsp),%xmm12
1259         movaps  144(%rsp),%xmm13
1260         movaps  160(%rsp),%xmm14
1261         movaps  176(%rsp),%xmm15
1262         leaq    200(%rsp),%rsp
1263 .Lctr32_ret:
1264         movq    8(%rsp),%rdi
1265         movq    16(%rsp),%rsi
1266         .byte   0xf3,0xc3
1267 .LSEH_end_aesni_ctr32_encrypt_blocks:
1268 .globl  aesni_xts_encrypt
1269 .def    aesni_xts_encrypt;      .scl 2; .type 32;       .endef
1270 .p2align        4
1271 aesni_xts_encrypt:
1272         movq    %rdi,8(%rsp)
1273         movq    %rsi,16(%rsp)
1274         movq    %rsp,%rax
1275 .LSEH_begin_aesni_xts_encrypt:
1276         movq    %rcx,%rdi
1277         movq    %rdx,%rsi
1278         movq    %r8,%rdx
1279         movq    %r9,%rcx
1280         movq    40(%rsp),%r8
1281         movq    48(%rsp),%r9
1282
1283         leaq    -264(%rsp),%rsp
1284         movaps  %xmm6,96(%rsp)
1285         movaps  %xmm7,112(%rsp)
1286         movaps  %xmm8,128(%rsp)
1287         movaps  %xmm9,144(%rsp)
1288         movaps  %xmm10,160(%rsp)
1289         movaps  %xmm11,176(%rsp)
1290         movaps  %xmm12,192(%rsp)
1291         movaps  %xmm13,208(%rsp)
1292         movaps  %xmm14,224(%rsp)
1293         movaps  %xmm15,240(%rsp)
1294 .Lxts_enc_body:
1295         movups  (%r9),%xmm15
1296         movl    240(%r8),%eax
1297         movl    240(%rcx),%r10d
1298         movups  (%r8),%xmm0
1299         movups  16(%r8),%xmm1
1300         leaq    32(%r8),%r8
1301         xorps   %xmm0,%xmm15
1302 .Loop_enc1_8:
1303 .byte   102,68,15,56,220,249
1304         decl    %eax
1305         movups  (%r8),%xmm1
1306         leaq    16(%r8),%r8
1307         jnz     .Loop_enc1_8    
1308 .byte   102,68,15,56,221,249
1309         movq    %rcx,%r11
1310         movl    %r10d,%eax
1311         movq    %rdx,%r9
1312         andq    $-16,%rdx
1313
1314         movdqa  .Lxts_magic(%rip),%xmm8
1315         pxor    %xmm14,%xmm14
1316         pcmpgtd %xmm15,%xmm14
1317         pshufd  $19,%xmm14,%xmm9
1318         pxor    %xmm14,%xmm14
1319         movdqa  %xmm15,%xmm10
1320         paddq   %xmm15,%xmm15
1321         pand    %xmm8,%xmm9
1322         pcmpgtd %xmm15,%xmm14
1323         pxor    %xmm9,%xmm15
1324         pshufd  $19,%xmm14,%xmm9
1325         pxor    %xmm14,%xmm14
1326         movdqa  %xmm15,%xmm11
1327         paddq   %xmm15,%xmm15
1328         pand    %xmm8,%xmm9
1329         pcmpgtd %xmm15,%xmm14
1330         pxor    %xmm9,%xmm15
1331         pshufd  $19,%xmm14,%xmm9
1332         pxor    %xmm14,%xmm14
1333         movdqa  %xmm15,%xmm12
1334         paddq   %xmm15,%xmm15
1335         pand    %xmm8,%xmm9
1336         pcmpgtd %xmm15,%xmm14
1337         pxor    %xmm9,%xmm15
1338         pshufd  $19,%xmm14,%xmm9
1339         pxor    %xmm14,%xmm14
1340         movdqa  %xmm15,%xmm13
1341         paddq   %xmm15,%xmm15
1342         pand    %xmm8,%xmm9
1343         pcmpgtd %xmm15,%xmm14
1344         pxor    %xmm9,%xmm15
1345         subq    $96,%rdx
1346         jc      .Lxts_enc_short
1347
1348         shrl    $1,%eax
1349         subl    $1,%eax
1350         movl    %eax,%r10d
1351         jmp     .Lxts_enc_grandloop
1352
1353 .p2align        4
1354 .Lxts_enc_grandloop:
1355         pshufd  $19,%xmm14,%xmm9
1356         movdqa  %xmm15,%xmm14
1357         paddq   %xmm15,%xmm15
1358         movdqu  0(%rdi),%xmm2
1359         pand    %xmm8,%xmm9
1360         movdqu  16(%rdi),%xmm3
1361         pxor    %xmm9,%xmm15
1362
1363         movdqu  32(%rdi),%xmm4
1364         pxor    %xmm10,%xmm2
1365         movdqu  48(%rdi),%xmm5
1366         pxor    %xmm11,%xmm3
1367         movdqu  64(%rdi),%xmm6
1368         pxor    %xmm12,%xmm4
1369         movdqu  80(%rdi),%xmm7
1370         leaq    96(%rdi),%rdi
1371         pxor    %xmm13,%xmm5
1372         movups  (%r11),%xmm0
1373         pxor    %xmm14,%xmm6
1374         pxor    %xmm15,%xmm7
1375
1376
1377
1378         movups  16(%r11),%xmm1
1379         pxor    %xmm0,%xmm2
1380         pxor    %xmm0,%xmm3
1381         movdqa  %xmm10,0(%rsp)
1382 .byte   102,15,56,220,209
1383         leaq    32(%r11),%rcx
1384         pxor    %xmm0,%xmm4
1385         movdqa  %xmm11,16(%rsp)
1386 .byte   102,15,56,220,217
1387         pxor    %xmm0,%xmm5
1388         movdqa  %xmm12,32(%rsp)
1389 .byte   102,15,56,220,225
1390         pxor    %xmm0,%xmm6
1391         movdqa  %xmm13,48(%rsp)
1392 .byte   102,15,56,220,233
1393         pxor    %xmm0,%xmm7
1394         movups  (%rcx),%xmm0
1395         decl    %eax
1396         movdqa  %xmm14,64(%rsp)
1397 .byte   102,15,56,220,241
1398         movdqa  %xmm15,80(%rsp)
1399 .byte   102,15,56,220,249
1400         pxor    %xmm14,%xmm14
1401         pcmpgtd %xmm15,%xmm14
1402         jmp     .Lxts_enc_loop6_enter
1403
1404 .p2align        4
1405 .Lxts_enc_loop6:
1406 .byte   102,15,56,220,209
1407 .byte   102,15,56,220,217
1408         decl    %eax
1409 .byte   102,15,56,220,225
1410 .byte   102,15,56,220,233
1411 .byte   102,15,56,220,241
1412 .byte   102,15,56,220,249
1413 .Lxts_enc_loop6_enter:
1414         movups  16(%rcx),%xmm1
1415 .byte   102,15,56,220,208
1416 .byte   102,15,56,220,216
1417         leaq    32(%rcx),%rcx
1418 .byte   102,15,56,220,224
1419 .byte   102,15,56,220,232
1420 .byte   102,15,56,220,240
1421 .byte   102,15,56,220,248
1422         movups  (%rcx),%xmm0
1423         jnz     .Lxts_enc_loop6
1424
1425         pshufd  $19,%xmm14,%xmm9
1426         pxor    %xmm14,%xmm14
1427         paddq   %xmm15,%xmm15
1428 .byte   102,15,56,220,209
1429         pand    %xmm8,%xmm9
1430 .byte   102,15,56,220,217
1431         pcmpgtd %xmm15,%xmm14
1432 .byte   102,15,56,220,225
1433         pxor    %xmm9,%xmm15
1434 .byte   102,15,56,220,233
1435 .byte   102,15,56,220,241
1436 .byte   102,15,56,220,249
1437         movups  16(%rcx),%xmm1
1438
1439         pshufd  $19,%xmm14,%xmm9
1440         pxor    %xmm14,%xmm14
1441         movdqa  %xmm15,%xmm10
1442         paddq   %xmm15,%xmm15
1443 .byte   102,15,56,220,208
1444         pand    %xmm8,%xmm9
1445 .byte   102,15,56,220,216
1446         pcmpgtd %xmm15,%xmm14
1447 .byte   102,15,56,220,224
1448         pxor    %xmm9,%xmm15
1449 .byte   102,15,56,220,232
1450 .byte   102,15,56,220,240
1451 .byte   102,15,56,220,248
1452         movups  32(%rcx),%xmm0
1453
1454         pshufd  $19,%xmm14,%xmm9
1455         pxor    %xmm14,%xmm14
1456         movdqa  %xmm15,%xmm11
1457         paddq   %xmm15,%xmm15
1458 .byte   102,15,56,220,209
1459         pand    %xmm8,%xmm9
1460 .byte   102,15,56,220,217
1461         pcmpgtd %xmm15,%xmm14
1462 .byte   102,15,56,220,225
1463         pxor    %xmm9,%xmm15
1464 .byte   102,15,56,220,233
1465 .byte   102,15,56,220,241
1466 .byte   102,15,56,220,249
1467
1468         pshufd  $19,%xmm14,%xmm9
1469         pxor    %xmm14,%xmm14
1470         movdqa  %xmm15,%xmm12
1471         paddq   %xmm15,%xmm15
1472 .byte   102,15,56,221,208
1473         pand    %xmm8,%xmm9
1474 .byte   102,15,56,221,216
1475         pcmpgtd %xmm15,%xmm14
1476 .byte   102,15,56,221,224
1477         pxor    %xmm9,%xmm15
1478 .byte   102,15,56,221,232
1479 .byte   102,15,56,221,240
1480 .byte   102,15,56,221,248
1481
1482         pshufd  $19,%xmm14,%xmm9
1483         pxor    %xmm14,%xmm14
1484         movdqa  %xmm15,%xmm13
1485         paddq   %xmm15,%xmm15
1486         xorps   0(%rsp),%xmm2
1487         pand    %xmm8,%xmm9
1488         xorps   16(%rsp),%xmm3
1489         pcmpgtd %xmm15,%xmm14
1490         pxor    %xmm9,%xmm15
1491
1492         xorps   32(%rsp),%xmm4
1493         movups  %xmm2,0(%rsi)
1494         xorps   48(%rsp),%xmm5
1495         movups  %xmm3,16(%rsi)
1496         xorps   64(%rsp),%xmm6
1497         movups  %xmm4,32(%rsi)
1498         xorps   80(%rsp),%xmm7
1499         movups  %xmm5,48(%rsi)
1500         movl    %r10d,%eax
1501         movups  %xmm6,64(%rsi)
1502         movups  %xmm7,80(%rsi)
1503         leaq    96(%rsi),%rsi
1504         subq    $96,%rdx
1505         jnc     .Lxts_enc_grandloop
1506
1507         leal    3(%rax,%rax,1),%eax
1508         movq    %r11,%rcx
1509         movl    %eax,%r10d
1510
1511 .Lxts_enc_short:
1512         addq    $96,%rdx
1513         jz      .Lxts_enc_done
1514
1515         cmpq    $32,%rdx
1516         jb      .Lxts_enc_one
1517         je      .Lxts_enc_two
1518
1519         cmpq    $64,%rdx
1520         jb      .Lxts_enc_three
1521         je      .Lxts_enc_four
1522
1523         pshufd  $19,%xmm14,%xmm9
1524         movdqa  %xmm15,%xmm14
1525         paddq   %xmm15,%xmm15
1526         movdqu  (%rdi),%xmm2
1527         pand    %xmm8,%xmm9
1528         movdqu  16(%rdi),%xmm3
1529         pxor    %xmm9,%xmm15
1530
1531         movdqu  32(%rdi),%xmm4
1532         pxor    %xmm10,%xmm2
1533         movdqu  48(%rdi),%xmm5
1534         pxor    %xmm11,%xmm3
1535         movdqu  64(%rdi),%xmm6
1536         leaq    80(%rdi),%rdi
1537         pxor    %xmm12,%xmm4
1538         pxor    %xmm13,%xmm5
1539         pxor    %xmm14,%xmm6
1540
1541         call    _aesni_encrypt6
1542
1543         xorps   %xmm10,%xmm2
1544         movdqa  %xmm15,%xmm10
1545         xorps   %xmm11,%xmm3
1546         xorps   %xmm12,%xmm4
1547         movdqu  %xmm2,(%rsi)
1548         xorps   %xmm13,%xmm5
1549         movdqu  %xmm3,16(%rsi)
1550         xorps   %xmm14,%xmm6
1551         movdqu  %xmm4,32(%rsi)
1552         movdqu  %xmm5,48(%rsi)
1553         movdqu  %xmm6,64(%rsi)
1554         leaq    80(%rsi),%rsi
1555         jmp     .Lxts_enc_done
1556
1557 .p2align        4
1558 .Lxts_enc_one:
1559         movups  (%rdi),%xmm2
1560         leaq    16(%rdi),%rdi
1561         xorps   %xmm10,%xmm2
1562         movups  (%rcx),%xmm0
1563         movups  16(%rcx),%xmm1
1564         leaq    32(%rcx),%rcx
1565         xorps   %xmm0,%xmm2
1566 .Loop_enc1_9:
1567 .byte   102,15,56,220,209
1568         decl    %eax
1569         movups  (%rcx),%xmm1
1570         leaq    16(%rcx),%rcx
1571         jnz     .Loop_enc1_9    
1572 .byte   102,15,56,221,209
1573         xorps   %xmm10,%xmm2
1574         movdqa  %xmm11,%xmm10
1575         movups  %xmm2,(%rsi)
1576         leaq    16(%rsi),%rsi
1577         jmp     .Lxts_enc_done
1578
1579 .p2align        4
1580 .Lxts_enc_two:
1581         movups  (%rdi),%xmm2
1582         movups  16(%rdi),%xmm3
1583         leaq    32(%rdi),%rdi
1584         xorps   %xmm10,%xmm2
1585         xorps   %xmm11,%xmm3
1586
1587         call    _aesni_encrypt3
1588
1589         xorps   %xmm10,%xmm2
1590         movdqa  %xmm12,%xmm10
1591         xorps   %xmm11,%xmm3
1592         movups  %xmm2,(%rsi)
1593         movups  %xmm3,16(%rsi)
1594         leaq    32(%rsi),%rsi
1595         jmp     .Lxts_enc_done
1596
1597 .p2align        4
1598 .Lxts_enc_three:
1599         movups  (%rdi),%xmm2
1600         movups  16(%rdi),%xmm3
1601         movups  32(%rdi),%xmm4
1602         leaq    48(%rdi),%rdi
1603         xorps   %xmm10,%xmm2
1604         xorps   %xmm11,%xmm3
1605         xorps   %xmm12,%xmm4
1606
1607         call    _aesni_encrypt3
1608
1609         xorps   %xmm10,%xmm2
1610         movdqa  %xmm13,%xmm10
1611         xorps   %xmm11,%xmm3
1612         xorps   %xmm12,%xmm4
1613         movups  %xmm2,(%rsi)
1614         movups  %xmm3,16(%rsi)
1615         movups  %xmm4,32(%rsi)
1616         leaq    48(%rsi),%rsi
1617         jmp     .Lxts_enc_done
1618
1619 .p2align        4
1620 .Lxts_enc_four:
1621         movups  (%rdi),%xmm2
1622         movups  16(%rdi),%xmm3
1623         movups  32(%rdi),%xmm4
1624         xorps   %xmm10,%xmm2
1625         movups  48(%rdi),%xmm5
1626         leaq    64(%rdi),%rdi
1627         xorps   %xmm11,%xmm3
1628         xorps   %xmm12,%xmm4
1629         xorps   %xmm13,%xmm5
1630
1631         call    _aesni_encrypt4
1632
1633         xorps   %xmm10,%xmm2
1634         movdqa  %xmm15,%xmm10
1635         xorps   %xmm11,%xmm3
1636         xorps   %xmm12,%xmm4
1637         movups  %xmm2,(%rsi)
1638         xorps   %xmm13,%xmm5
1639         movups  %xmm3,16(%rsi)
1640         movups  %xmm4,32(%rsi)
1641         movups  %xmm5,48(%rsi)
1642         leaq    64(%rsi),%rsi
1643         jmp     .Lxts_enc_done
1644
1645 .p2align        4
1646 .Lxts_enc_done:
1647         andq    $15,%r9
1648         jz      .Lxts_enc_ret
1649         movq    %r9,%rdx
1650
1651 .Lxts_enc_steal:
1652         movzbl  (%rdi),%eax
1653         movzbl  -16(%rsi),%ecx
1654         leaq    1(%rdi),%rdi
1655         movb    %al,-16(%rsi)
1656         movb    %cl,0(%rsi)
1657         leaq    1(%rsi),%rsi
1658         subq    $1,%rdx
1659         jnz     .Lxts_enc_steal
1660
1661         subq    %r9,%rsi
1662         movq    %r11,%rcx
1663         movl    %r10d,%eax
1664
1665         movups  -16(%rsi),%xmm2
1666         xorps   %xmm10,%xmm2
1667         movups  (%rcx),%xmm0
1668         movups  16(%rcx),%xmm1
1669         leaq    32(%rcx),%rcx
1670         xorps   %xmm0,%xmm2
1671 .Loop_enc1_10:
1672 .byte   102,15,56,220,209
1673         decl    %eax
1674         movups  (%rcx),%xmm1
1675         leaq    16(%rcx),%rcx
1676         jnz     .Loop_enc1_10   
1677 .byte   102,15,56,221,209
1678         xorps   %xmm10,%xmm2
1679         movups  %xmm2,-16(%rsi)
1680
1681 .Lxts_enc_ret:
1682         movaps  96(%rsp),%xmm6
1683         movaps  112(%rsp),%xmm7
1684         movaps  128(%rsp),%xmm8
1685         movaps  144(%rsp),%xmm9
1686         movaps  160(%rsp),%xmm10
1687         movaps  176(%rsp),%xmm11
1688         movaps  192(%rsp),%xmm12
1689         movaps  208(%rsp),%xmm13
1690         movaps  224(%rsp),%xmm14
1691         movaps  240(%rsp),%xmm15
1692         leaq    264(%rsp),%rsp
1693 .Lxts_enc_epilogue:
1694         movq    8(%rsp),%rdi
1695         movq    16(%rsp),%rsi
1696         .byte   0xf3,0xc3
1697 .LSEH_end_aesni_xts_encrypt:
1698 .globl  aesni_xts_decrypt
1699 .def    aesni_xts_decrypt;      .scl 2; .type 32;       .endef
1700 .p2align        4
1701 aesni_xts_decrypt:
1702         movq    %rdi,8(%rsp)
1703         movq    %rsi,16(%rsp)
1704         movq    %rsp,%rax
1705 .LSEH_begin_aesni_xts_decrypt:
1706         movq    %rcx,%rdi
1707         movq    %rdx,%rsi
1708         movq    %r8,%rdx
1709         movq    %r9,%rcx
1710         movq    40(%rsp),%r8
1711         movq    48(%rsp),%r9
1712
1713         leaq    -264(%rsp),%rsp
1714         movaps  %xmm6,96(%rsp)
1715         movaps  %xmm7,112(%rsp)
1716         movaps  %xmm8,128(%rsp)
1717         movaps  %xmm9,144(%rsp)
1718         movaps  %xmm10,160(%rsp)
1719         movaps  %xmm11,176(%rsp)
1720         movaps  %xmm12,192(%rsp)
1721         movaps  %xmm13,208(%rsp)
1722         movaps  %xmm14,224(%rsp)
1723         movaps  %xmm15,240(%rsp)
1724 .Lxts_dec_body:
1725         movups  (%r9),%xmm15
1726         movl    240(%r8),%eax
1727         movl    240(%rcx),%r10d
1728         movups  (%r8),%xmm0
1729         movups  16(%r8),%xmm1
1730         leaq    32(%r8),%r8
1731         xorps   %xmm0,%xmm15
1732 .Loop_enc1_11:
1733 .byte   102,68,15,56,220,249
1734         decl    %eax
1735         movups  (%r8),%xmm1
1736         leaq    16(%r8),%r8
1737         jnz     .Loop_enc1_11   
1738 .byte   102,68,15,56,221,249
1739         xorl    %eax,%eax
1740         testq   $15,%rdx
1741         setnz   %al
1742         shlq    $4,%rax
1743         subq    %rax,%rdx
1744
1745         movq    %rcx,%r11
1746         movl    %r10d,%eax
1747         movq    %rdx,%r9
1748         andq    $-16,%rdx
1749
1750         movdqa  .Lxts_magic(%rip),%xmm8
1751         pxor    %xmm14,%xmm14
1752         pcmpgtd %xmm15,%xmm14
1753         pshufd  $19,%xmm14,%xmm9
1754         pxor    %xmm14,%xmm14
1755         movdqa  %xmm15,%xmm10
1756         paddq   %xmm15,%xmm15
1757         pand    %xmm8,%xmm9
1758         pcmpgtd %xmm15,%xmm14
1759         pxor    %xmm9,%xmm15
1760         pshufd  $19,%xmm14,%xmm9
1761         pxor    %xmm14,%xmm14
1762         movdqa  %xmm15,%xmm11
1763         paddq   %xmm15,%xmm15
1764         pand    %xmm8,%xmm9
1765         pcmpgtd %xmm15,%xmm14
1766         pxor    %xmm9,%xmm15
1767         pshufd  $19,%xmm14,%xmm9
1768         pxor    %xmm14,%xmm14
1769         movdqa  %xmm15,%xmm12
1770         paddq   %xmm15,%xmm15
1771         pand    %xmm8,%xmm9
1772         pcmpgtd %xmm15,%xmm14
1773         pxor    %xmm9,%xmm15
1774         pshufd  $19,%xmm14,%xmm9
1775         pxor    %xmm14,%xmm14
1776         movdqa  %xmm15,%xmm13
1777         paddq   %xmm15,%xmm15
1778         pand    %xmm8,%xmm9
1779         pcmpgtd %xmm15,%xmm14
1780         pxor    %xmm9,%xmm15
1781         subq    $96,%rdx
1782         jc      .Lxts_dec_short
1783
1784         shrl    $1,%eax
1785         subl    $1,%eax
1786         movl    %eax,%r10d
1787         jmp     .Lxts_dec_grandloop
1788
1789 .p2align        4
1790 .Lxts_dec_grandloop:
1791         pshufd  $19,%xmm14,%xmm9
1792         movdqa  %xmm15,%xmm14
1793         paddq   %xmm15,%xmm15
1794         movdqu  0(%rdi),%xmm2
1795         pand    %xmm8,%xmm9
1796         movdqu  16(%rdi),%xmm3
1797         pxor    %xmm9,%xmm15
1798
1799         movdqu  32(%rdi),%xmm4
1800         pxor    %xmm10,%xmm2
1801         movdqu  48(%rdi),%xmm5
1802         pxor    %xmm11,%xmm3
1803         movdqu  64(%rdi),%xmm6
1804         pxor    %xmm12,%xmm4
1805         movdqu  80(%rdi),%xmm7
1806         leaq    96(%rdi),%rdi
1807         pxor    %xmm13,%xmm5
1808         movups  (%r11),%xmm0
1809         pxor    %xmm14,%xmm6
1810         pxor    %xmm15,%xmm7
1811
1812
1813
1814         movups  16(%r11),%xmm1
1815         pxor    %xmm0,%xmm2
1816         pxor    %xmm0,%xmm3
1817         movdqa  %xmm10,0(%rsp)
1818 .byte   102,15,56,222,209
1819         leaq    32(%r11),%rcx
1820         pxor    %xmm0,%xmm4
1821         movdqa  %xmm11,16(%rsp)
1822 .byte   102,15,56,222,217
1823         pxor    %xmm0,%xmm5
1824         movdqa  %xmm12,32(%rsp)
1825 .byte   102,15,56,222,225
1826         pxor    %xmm0,%xmm6
1827         movdqa  %xmm13,48(%rsp)
1828 .byte   102,15,56,222,233
1829         pxor    %xmm0,%xmm7
1830         movups  (%rcx),%xmm0
1831         decl    %eax
1832         movdqa  %xmm14,64(%rsp)
1833 .byte   102,15,56,222,241
1834         movdqa  %xmm15,80(%rsp)
1835 .byte   102,15,56,222,249
1836         pxor    %xmm14,%xmm14
1837         pcmpgtd %xmm15,%xmm14
1838         jmp     .Lxts_dec_loop6_enter
1839
1840 .p2align        4
1841 .Lxts_dec_loop6:
1842 .byte   102,15,56,222,209
1843 .byte   102,15,56,222,217
1844         decl    %eax
1845 .byte   102,15,56,222,225
1846 .byte   102,15,56,222,233
1847 .byte   102,15,56,222,241
1848 .byte   102,15,56,222,249
1849 .Lxts_dec_loop6_enter:
1850         movups  16(%rcx),%xmm1
1851 .byte   102,15,56,222,208
1852 .byte   102,15,56,222,216
1853         leaq    32(%rcx),%rcx
1854 .byte   102,15,56,222,224
1855 .byte   102,15,56,222,232
1856 .byte   102,15,56,222,240
1857 .byte   102,15,56,222,248
1858         movups  (%rcx),%xmm0
1859         jnz     .Lxts_dec_loop6
1860
1861         pshufd  $19,%xmm14,%xmm9
1862         pxor    %xmm14,%xmm14
1863         paddq   %xmm15,%xmm15
1864 .byte   102,15,56,222,209
1865         pand    %xmm8,%xmm9
1866 .byte   102,15,56,222,217
1867         pcmpgtd %xmm15,%xmm14
1868 .byte   102,15,56,222,225
1869         pxor    %xmm9,%xmm15
1870 .byte   102,15,56,222,233
1871 .byte   102,15,56,222,241
1872 .byte   102,15,56,222,249
1873         movups  16(%rcx),%xmm1
1874
1875         pshufd  $19,%xmm14,%xmm9
1876         pxor    %xmm14,%xmm14
1877         movdqa  %xmm15,%xmm10
1878         paddq   %xmm15,%xmm15
1879 .byte   102,15,56,222,208
1880         pand    %xmm8,%xmm9
1881 .byte   102,15,56,222,216
1882         pcmpgtd %xmm15,%xmm14
1883 .byte   102,15,56,222,224
1884         pxor    %xmm9,%xmm15
1885 .byte   102,15,56,222,232
1886 .byte   102,15,56,222,240
1887 .byte   102,15,56,222,248
1888         movups  32(%rcx),%xmm0
1889
1890         pshufd  $19,%xmm14,%xmm9
1891         pxor    %xmm14,%xmm14
1892         movdqa  %xmm15,%xmm11
1893         paddq   %xmm15,%xmm15
1894 .byte   102,15,56,222,209
1895         pand    %xmm8,%xmm9
1896 .byte   102,15,56,222,217
1897         pcmpgtd %xmm15,%xmm14
1898 .byte   102,15,56,222,225
1899         pxor    %xmm9,%xmm15
1900 .byte   102,15,56,222,233
1901 .byte   102,15,56,222,241
1902 .byte   102,15,56,222,249
1903
1904         pshufd  $19,%xmm14,%xmm9
1905         pxor    %xmm14,%xmm14
1906         movdqa  %xmm15,%xmm12
1907         paddq   %xmm15,%xmm15
1908 .byte   102,15,56,223,208
1909         pand    %xmm8,%xmm9
1910 .byte   102,15,56,223,216
1911         pcmpgtd %xmm15,%xmm14
1912 .byte   102,15,56,223,224
1913         pxor    %xmm9,%xmm15
1914 .byte   102,15,56,223,232
1915 .byte   102,15,56,223,240
1916 .byte   102,15,56,223,248
1917
1918         pshufd  $19,%xmm14,%xmm9
1919         pxor    %xmm14,%xmm14
1920         movdqa  %xmm15,%xmm13
1921         paddq   %xmm15,%xmm15
1922         xorps   0(%rsp),%xmm2
1923         pand    %xmm8,%xmm9
1924         xorps   16(%rsp),%xmm3
1925         pcmpgtd %xmm15,%xmm14
1926         pxor    %xmm9,%xmm15
1927
1928         xorps   32(%rsp),%xmm4
1929         movups  %xmm2,0(%rsi)
1930         xorps   48(%rsp),%xmm5
1931         movups  %xmm3,16(%rsi)
1932         xorps   64(%rsp),%xmm6
1933         movups  %xmm4,32(%rsi)
1934         xorps   80(%rsp),%xmm7
1935         movups  %xmm5,48(%rsi)
1936         movl    %r10d,%eax
1937         movups  %xmm6,64(%rsi)
1938         movups  %xmm7,80(%rsi)
1939         leaq    96(%rsi),%rsi
1940         subq    $96,%rdx
1941         jnc     .Lxts_dec_grandloop
1942
1943         leal    3(%rax,%rax,1),%eax
1944         movq    %r11,%rcx
1945         movl    %eax,%r10d
1946
1947 .Lxts_dec_short:
1948         addq    $96,%rdx
1949         jz      .Lxts_dec_done
1950
1951         cmpq    $32,%rdx
1952         jb      .Lxts_dec_one
1953         je      .Lxts_dec_two
1954
1955         cmpq    $64,%rdx
1956         jb      .Lxts_dec_three
1957         je      .Lxts_dec_four
1958
1959         pshufd  $19,%xmm14,%xmm9
1960         movdqa  %xmm15,%xmm14
1961         paddq   %xmm15,%xmm15
1962         movdqu  (%rdi),%xmm2
1963         pand    %xmm8,%xmm9
1964         movdqu  16(%rdi),%xmm3
1965         pxor    %xmm9,%xmm15
1966
1967         movdqu  32(%rdi),%xmm4
1968         pxor    %xmm10,%xmm2
1969         movdqu  48(%rdi),%xmm5
1970         pxor    %xmm11,%xmm3
1971         movdqu  64(%rdi),%xmm6
1972         leaq    80(%rdi),%rdi
1973         pxor    %xmm12,%xmm4
1974         pxor    %xmm13,%xmm5
1975         pxor    %xmm14,%xmm6
1976
1977         call    _aesni_decrypt6
1978
1979         xorps   %xmm10,%xmm2
1980         xorps   %xmm11,%xmm3
1981         xorps   %xmm12,%xmm4
1982         movdqu  %xmm2,(%rsi)
1983         xorps   %xmm13,%xmm5
1984         movdqu  %xmm3,16(%rsi)
1985         xorps   %xmm14,%xmm6
1986         movdqu  %xmm4,32(%rsi)
1987         pxor    %xmm14,%xmm14
1988         movdqu  %xmm5,48(%rsi)
1989         pcmpgtd %xmm15,%xmm14
1990         movdqu  %xmm6,64(%rsi)
1991         leaq    80(%rsi),%rsi
1992         pshufd  $19,%xmm14,%xmm11
1993         andq    $15,%r9
1994         jz      .Lxts_dec_ret
1995
1996         movdqa  %xmm15,%xmm10
1997         paddq   %xmm15,%xmm15
1998         pand    %xmm8,%xmm11
1999         pxor    %xmm15,%xmm11
2000         jmp     .Lxts_dec_done2
2001
2002 .p2align        4
2003 .Lxts_dec_one:
2004         movups  (%rdi),%xmm2
2005         leaq    16(%rdi),%rdi
2006         xorps   %xmm10,%xmm2
2007         movups  (%rcx),%xmm0
2008         movups  16(%rcx),%xmm1
2009         leaq    32(%rcx),%rcx
2010         xorps   %xmm0,%xmm2
2011 .Loop_dec1_12:
2012 .byte   102,15,56,222,209
2013         decl    %eax
2014         movups  (%rcx),%xmm1
2015         leaq    16(%rcx),%rcx
2016         jnz     .Loop_dec1_12   
2017 .byte   102,15,56,223,209
2018         xorps   %xmm10,%xmm2
2019         movdqa  %xmm11,%xmm10
2020         movups  %xmm2,(%rsi)
2021         movdqa  %xmm12,%xmm11
2022         leaq    16(%rsi),%rsi
2023         jmp     .Lxts_dec_done
2024
2025 .p2align        4
2026 .Lxts_dec_two:
2027         movups  (%rdi),%xmm2
2028         movups  16(%rdi),%xmm3
2029         leaq    32(%rdi),%rdi
2030         xorps   %xmm10,%xmm2
2031         xorps   %xmm11,%xmm3
2032
2033         call    _aesni_decrypt3
2034
2035         xorps   %xmm10,%xmm2
2036         movdqa  %xmm12,%xmm10
2037         xorps   %xmm11,%xmm3
2038         movdqa  %xmm13,%xmm11
2039         movups  %xmm2,(%rsi)
2040         movups  %xmm3,16(%rsi)
2041         leaq    32(%rsi),%rsi
2042         jmp     .Lxts_dec_done
2043
2044 .p2align        4
2045 .Lxts_dec_three:
2046         movups  (%rdi),%xmm2
2047         movups  16(%rdi),%xmm3
2048         movups  32(%rdi),%xmm4
2049         leaq    48(%rdi),%rdi
2050         xorps   %xmm10,%xmm2
2051         xorps   %xmm11,%xmm3
2052         xorps   %xmm12,%xmm4
2053
2054         call    _aesni_decrypt3
2055
2056         xorps   %xmm10,%xmm2
2057         movdqa  %xmm13,%xmm10
2058         xorps   %xmm11,%xmm3
2059         movdqa  %xmm15,%xmm11
2060         xorps   %xmm12,%xmm4
2061         movups  %xmm2,(%rsi)
2062         movups  %xmm3,16(%rsi)
2063         movups  %xmm4,32(%rsi)
2064         leaq    48(%rsi),%rsi
2065         jmp     .Lxts_dec_done
2066
2067 .p2align        4
2068 .Lxts_dec_four:
2069         pshufd  $19,%xmm14,%xmm9
2070         movdqa  %xmm15,%xmm14
2071         paddq   %xmm15,%xmm15
2072         movups  (%rdi),%xmm2
2073         pand    %xmm8,%xmm9
2074         movups  16(%rdi),%xmm3
2075         pxor    %xmm9,%xmm15
2076
2077         movups  32(%rdi),%xmm4
2078         xorps   %xmm10,%xmm2
2079         movups  48(%rdi),%xmm5
2080         leaq    64(%rdi),%rdi
2081         xorps   %xmm11,%xmm3
2082         xorps   %xmm12,%xmm4
2083         xorps   %xmm13,%xmm5
2084
2085         call    _aesni_decrypt4
2086
2087         xorps   %xmm10,%xmm2
2088         movdqa  %xmm14,%xmm10
2089         xorps   %xmm11,%xmm3
2090         movdqa  %xmm15,%xmm11
2091         xorps   %xmm12,%xmm4
2092         movups  %xmm2,(%rsi)
2093         xorps   %xmm13,%xmm5
2094         movups  %xmm3,16(%rsi)
2095         movups  %xmm4,32(%rsi)
2096         movups  %xmm5,48(%rsi)
2097         leaq    64(%rsi),%rsi
2098         jmp     .Lxts_dec_done
2099
2100 .p2align        4
2101 .Lxts_dec_done:
2102         andq    $15,%r9
2103         jz      .Lxts_dec_ret
2104 .Lxts_dec_done2:
2105         movq    %r9,%rdx
2106         movq    %r11,%rcx
2107         movl    %r10d,%eax
2108
2109         movups  (%rdi),%xmm2
2110         xorps   %xmm11,%xmm2
2111         movups  (%rcx),%xmm0
2112         movups  16(%rcx),%xmm1
2113         leaq    32(%rcx),%rcx
2114         xorps   %xmm0,%xmm2
2115 .Loop_dec1_13:
2116 .byte   102,15,56,222,209
2117         decl    %eax
2118         movups  (%rcx),%xmm1
2119         leaq    16(%rcx),%rcx
2120         jnz     .Loop_dec1_13   
2121 .byte   102,15,56,223,209
2122         xorps   %xmm11,%xmm2
2123         movups  %xmm2,(%rsi)
2124
2125 .Lxts_dec_steal:
2126         movzbl  16(%rdi),%eax
2127         movzbl  (%rsi),%ecx
2128         leaq    1(%rdi),%rdi
2129         movb    %al,(%rsi)
2130         movb    %cl,16(%rsi)
2131         leaq    1(%rsi),%rsi
2132         subq    $1,%rdx
2133         jnz     .Lxts_dec_steal
2134
2135         subq    %r9,%rsi
2136         movq    %r11,%rcx
2137         movl    %r10d,%eax
2138
2139         movups  (%rsi),%xmm2
2140         xorps   %xmm10,%xmm2
2141         movups  (%rcx),%xmm0
2142         movups  16(%rcx),%xmm1
2143         leaq    32(%rcx),%rcx
2144         xorps   %xmm0,%xmm2
2145 .Loop_dec1_14:
2146 .byte   102,15,56,222,209
2147         decl    %eax
2148         movups  (%rcx),%xmm1
2149         leaq    16(%rcx),%rcx
2150         jnz     .Loop_dec1_14   
2151 .byte   102,15,56,223,209
2152         xorps   %xmm10,%xmm2
2153         movups  %xmm2,(%rsi)
2154
2155 .Lxts_dec_ret:
2156         movaps  96(%rsp),%xmm6
2157         movaps  112(%rsp),%xmm7
2158         movaps  128(%rsp),%xmm8
2159         movaps  144(%rsp),%xmm9
2160         movaps  160(%rsp),%xmm10
2161         movaps  176(%rsp),%xmm11
2162         movaps  192(%rsp),%xmm12
2163         movaps  208(%rsp),%xmm13
2164         movaps  224(%rsp),%xmm14
2165         movaps  240(%rsp),%xmm15
2166         leaq    264(%rsp),%rsp
2167 .Lxts_dec_epilogue:
2168         movq    8(%rsp),%rdi
2169         movq    16(%rsp),%rsi
2170         .byte   0xf3,0xc3
2171 .LSEH_end_aesni_xts_decrypt:
2172 .globl  aesni_cbc_encrypt
2173 .def    aesni_cbc_encrypt;      .scl 2; .type 32;       .endef
2174 .p2align        4
2175 aesni_cbc_encrypt:
2176         movq    %rdi,8(%rsp)
2177         movq    %rsi,16(%rsp)
2178         movq    %rsp,%rax
2179 .LSEH_begin_aesni_cbc_encrypt:
2180         movq    %rcx,%rdi
2181         movq    %rdx,%rsi
2182         movq    %r8,%rdx
2183         movq    %r9,%rcx
2184         movq    40(%rsp),%r8
2185         movq    48(%rsp),%r9
2186
2187         testq   %rdx,%rdx
2188         jz      .Lcbc_ret
2189
2190         movl    240(%rcx),%r10d
2191         movq    %rcx,%r11
2192         testl   %r9d,%r9d
2193         jz      .Lcbc_decrypt
2194
2195         movups  (%r8),%xmm2
2196         movl    %r10d,%eax
2197         cmpq    $16,%rdx
2198         jb      .Lcbc_enc_tail
2199         subq    $16,%rdx
2200         jmp     .Lcbc_enc_loop
2201 .p2align        4
2202 .Lcbc_enc_loop:
2203         movups  (%rdi),%xmm3
2204         leaq    16(%rdi),%rdi
2205
2206         movups  (%rcx),%xmm0
2207         movups  16(%rcx),%xmm1
2208         xorps   %xmm0,%xmm3
2209         leaq    32(%rcx),%rcx
2210         xorps   %xmm3,%xmm2
2211 .Loop_enc1_15:
2212 .byte   102,15,56,220,209
2213         decl    %eax
2214         movups  (%rcx),%xmm1
2215         leaq    16(%rcx),%rcx
2216         jnz     .Loop_enc1_15   
2217 .byte   102,15,56,221,209
2218         movl    %r10d,%eax
2219         movq    %r11,%rcx
2220         movups  %xmm2,0(%rsi)
2221         leaq    16(%rsi),%rsi
2222         subq    $16,%rdx
2223         jnc     .Lcbc_enc_loop
2224         addq    $16,%rdx
2225         jnz     .Lcbc_enc_tail
2226         movups  %xmm2,(%r8)
2227         jmp     .Lcbc_ret
2228
2229 .Lcbc_enc_tail:
2230         movq    %rdx,%rcx
2231         xchgq   %rdi,%rsi
2232 .long   0x9066A4F3      
2233         movl    $16,%ecx
2234         subq    %rdx,%rcx
2235         xorl    %eax,%eax
2236 .long   0x9066AAF3      
2237         leaq    -16(%rdi),%rdi
2238         movl    %r10d,%eax
2239         movq    %rdi,%rsi
2240         movq    %r11,%rcx
2241         xorq    %rdx,%rdx
2242         jmp     .Lcbc_enc_loop  
2243
2244 .p2align        4
2245 .Lcbc_decrypt:
2246         leaq    -88(%rsp),%rsp
2247         movaps  %xmm6,(%rsp)
2248         movaps  %xmm7,16(%rsp)
2249         movaps  %xmm8,32(%rsp)
2250         movaps  %xmm9,48(%rsp)
2251 .Lcbc_decrypt_body:
2252         movups  (%r8),%xmm9
2253         movl    %r10d,%eax
2254         cmpq    $112,%rdx
2255         jbe     .Lcbc_dec_tail
2256         shrl    $1,%r10d
2257         subq    $112,%rdx
2258         movl    %r10d,%eax
2259         movaps  %xmm9,64(%rsp)
2260         jmp     .Lcbc_dec_loop8_enter
2261 .p2align        4
2262 .Lcbc_dec_loop8:
2263         movaps  %xmm0,64(%rsp)
2264         movups  %xmm9,(%rsi)
2265         leaq    16(%rsi),%rsi
2266 .Lcbc_dec_loop8_enter:
2267         movups  (%rcx),%xmm0
2268         movups  (%rdi),%xmm2
2269         movups  16(%rdi),%xmm3
2270         movups  16(%rcx),%xmm1
2271
2272         leaq    32(%rcx),%rcx
2273         movdqu  32(%rdi),%xmm4
2274         xorps   %xmm0,%xmm2
2275         movdqu  48(%rdi),%xmm5
2276         xorps   %xmm0,%xmm3
2277         movdqu  64(%rdi),%xmm6
2278 .byte   102,15,56,222,209
2279         pxor    %xmm0,%xmm4
2280         movdqu  80(%rdi),%xmm7
2281 .byte   102,15,56,222,217
2282         pxor    %xmm0,%xmm5
2283         movdqu  96(%rdi),%xmm8
2284 .byte   102,15,56,222,225
2285         pxor    %xmm0,%xmm6
2286         movdqu  112(%rdi),%xmm9
2287 .byte   102,15,56,222,233
2288         pxor    %xmm0,%xmm7
2289         decl    %eax
2290 .byte   102,15,56,222,241
2291         pxor    %xmm0,%xmm8
2292 .byte   102,15,56,222,249
2293         pxor    %xmm0,%xmm9
2294         movups  (%rcx),%xmm0
2295 .byte   102,68,15,56,222,193
2296 .byte   102,68,15,56,222,201
2297         movups  16(%rcx),%xmm1
2298
2299         call    .Ldec_loop8_enter
2300
2301         movups  (%rdi),%xmm1
2302         movups  16(%rdi),%xmm0
2303         xorps   64(%rsp),%xmm2
2304         xorps   %xmm1,%xmm3
2305         movups  32(%rdi),%xmm1
2306         xorps   %xmm0,%xmm4
2307         movups  48(%rdi),%xmm0
2308         xorps   %xmm1,%xmm5
2309         movups  64(%rdi),%xmm1
2310         xorps   %xmm0,%xmm6
2311         movups  80(%rdi),%xmm0
2312         xorps   %xmm1,%xmm7
2313         movups  96(%rdi),%xmm1
2314         xorps   %xmm0,%xmm8
2315         movups  112(%rdi),%xmm0
2316         xorps   %xmm1,%xmm9
2317         movups  %xmm2,(%rsi)
2318         movups  %xmm3,16(%rsi)
2319         movups  %xmm4,32(%rsi)
2320         movups  %xmm5,48(%rsi)
2321         movl    %r10d,%eax
2322         movups  %xmm6,64(%rsi)
2323         movq    %r11,%rcx
2324         movups  %xmm7,80(%rsi)
2325         leaq    128(%rdi),%rdi
2326         movups  %xmm8,96(%rsi)
2327         leaq    112(%rsi),%rsi
2328         subq    $128,%rdx
2329         ja      .Lcbc_dec_loop8
2330
2331         movaps  %xmm9,%xmm2
2332         movaps  %xmm0,%xmm9
2333         addq    $112,%rdx
2334         jle     .Lcbc_dec_tail_collected
2335         movups  %xmm2,(%rsi)
2336         leal    1(%r10,%r10,1),%eax
2337         leaq    16(%rsi),%rsi
2338 .Lcbc_dec_tail:
2339         movups  (%rdi),%xmm2
2340         movaps  %xmm2,%xmm8
2341         cmpq    $16,%rdx
2342         jbe     .Lcbc_dec_one
2343
2344         movups  16(%rdi),%xmm3
2345         movaps  %xmm3,%xmm7
2346         cmpq    $32,%rdx
2347         jbe     .Lcbc_dec_two
2348
2349         movups  32(%rdi),%xmm4
2350         movaps  %xmm4,%xmm6
2351         cmpq    $48,%rdx
2352         jbe     .Lcbc_dec_three
2353
2354         movups  48(%rdi),%xmm5
2355         cmpq    $64,%rdx
2356         jbe     .Lcbc_dec_four
2357
2358         movups  64(%rdi),%xmm6
2359         cmpq    $80,%rdx
2360         jbe     .Lcbc_dec_five
2361
2362         movups  80(%rdi),%xmm7
2363         cmpq    $96,%rdx
2364         jbe     .Lcbc_dec_six
2365
2366         movups  96(%rdi),%xmm8
2367         movaps  %xmm9,64(%rsp)
2368         call    _aesni_decrypt8
2369         movups  (%rdi),%xmm1
2370         movups  16(%rdi),%xmm0
2371         xorps   64(%rsp),%xmm2
2372         xorps   %xmm1,%xmm3
2373         movups  32(%rdi),%xmm1
2374         xorps   %xmm0,%xmm4
2375         movups  48(%rdi),%xmm0
2376         xorps   %xmm1,%xmm5
2377         movups  64(%rdi),%xmm1
2378         xorps   %xmm0,%xmm6
2379         movups  80(%rdi),%xmm0
2380         xorps   %xmm1,%xmm7
2381         movups  96(%rdi),%xmm9
2382         xorps   %xmm0,%xmm8
2383         movups  %xmm2,(%rsi)
2384         movups  %xmm3,16(%rsi)
2385         movups  %xmm4,32(%rsi)
2386         movups  %xmm5,48(%rsi)
2387         movups  %xmm6,64(%rsi)
2388         movups  %xmm7,80(%rsi)
2389         leaq    96(%rsi),%rsi
2390         movaps  %xmm8,%xmm2
2391         subq    $112,%rdx
2392         jmp     .Lcbc_dec_tail_collected
2393 .p2align        4
2394 .Lcbc_dec_one:
2395         movups  (%rcx),%xmm0
2396         movups  16(%rcx),%xmm1
2397         leaq    32(%rcx),%rcx
2398         xorps   %xmm0,%xmm2
2399 .Loop_dec1_16:
2400 .byte   102,15,56,222,209
2401         decl    %eax
2402         movups  (%rcx),%xmm1
2403         leaq    16(%rcx),%rcx
2404         jnz     .Loop_dec1_16   
2405 .byte   102,15,56,223,209
2406         xorps   %xmm9,%xmm2
2407         movaps  %xmm8,%xmm9
2408         subq    $16,%rdx
2409         jmp     .Lcbc_dec_tail_collected
2410 .p2align        4
2411 .Lcbc_dec_two:
2412         xorps   %xmm4,%xmm4
2413         call    _aesni_decrypt3
2414         xorps   %xmm9,%xmm2
2415         xorps   %xmm8,%xmm3
2416         movups  %xmm2,(%rsi)
2417         movaps  %xmm7,%xmm9
2418         movaps  %xmm3,%xmm2
2419         leaq    16(%rsi),%rsi
2420         subq    $32,%rdx
2421         jmp     .Lcbc_dec_tail_collected
2422 .p2align        4
2423 .Lcbc_dec_three:
2424         call    _aesni_decrypt3
2425         xorps   %xmm9,%xmm2
2426         xorps   %xmm8,%xmm3
2427         movups  %xmm2,(%rsi)
2428         xorps   %xmm7,%xmm4
2429         movups  %xmm3,16(%rsi)
2430         movaps  %xmm6,%xmm9
2431         movaps  %xmm4,%xmm2
2432         leaq    32(%rsi),%rsi
2433         subq    $48,%rdx
2434         jmp     .Lcbc_dec_tail_collected
2435 .p2align        4
2436 .Lcbc_dec_four:
2437         call    _aesni_decrypt4
2438         xorps   %xmm9,%xmm2
2439         movups  48(%rdi),%xmm9
2440         xorps   %xmm8,%xmm3
2441         movups  %xmm2,(%rsi)
2442         xorps   %xmm7,%xmm4
2443         movups  %xmm3,16(%rsi)
2444         xorps   %xmm6,%xmm5
2445         movups  %xmm4,32(%rsi)
2446         movaps  %xmm5,%xmm2
2447         leaq    48(%rsi),%rsi
2448         subq    $64,%rdx
2449         jmp     .Lcbc_dec_tail_collected
2450 .p2align        4
2451 .Lcbc_dec_five:
2452         xorps   %xmm7,%xmm7
2453         call    _aesni_decrypt6
2454         movups  16(%rdi),%xmm1
2455         movups  32(%rdi),%xmm0
2456         xorps   %xmm9,%xmm2
2457         xorps   %xmm8,%xmm3
2458         xorps   %xmm1,%xmm4
2459         movups  48(%rdi),%xmm1
2460         xorps   %xmm0,%xmm5
2461         movups  64(%rdi),%xmm9
2462         xorps   %xmm1,%xmm6
2463         movups  %xmm2,(%rsi)
2464         movups  %xmm3,16(%rsi)
2465         movups  %xmm4,32(%rsi)
2466         movups  %xmm5,48(%rsi)
2467         leaq    64(%rsi),%rsi
2468         movaps  %xmm6,%xmm2
2469         subq    $80,%rdx
2470         jmp     .Lcbc_dec_tail_collected
2471 .p2align        4
2472 .Lcbc_dec_six:
2473         call    _aesni_decrypt6
2474         movups  16(%rdi),%xmm1
2475         movups  32(%rdi),%xmm0
2476         xorps   %xmm9,%xmm2
2477         xorps   %xmm8,%xmm3
2478         xorps   %xmm1,%xmm4
2479         movups  48(%rdi),%xmm1
2480         xorps   %xmm0,%xmm5
2481         movups  64(%rdi),%xmm0
2482         xorps   %xmm1,%xmm6
2483         movups  80(%rdi),%xmm9
2484         xorps   %xmm0,%xmm7
2485         movups  %xmm2,(%rsi)
2486         movups  %xmm3,16(%rsi)
2487         movups  %xmm4,32(%rsi)
2488         movups  %xmm5,48(%rsi)
2489         movups  %xmm6,64(%rsi)
2490         leaq    80(%rsi),%rsi
2491         movaps  %xmm7,%xmm2
2492         subq    $96,%rdx
2493         jmp     .Lcbc_dec_tail_collected
2494 .p2align        4
2495 .Lcbc_dec_tail_collected:
2496         andq    $15,%rdx
2497         movups  %xmm9,(%r8)
2498         jnz     .Lcbc_dec_tail_partial
2499         movups  %xmm2,(%rsi)
2500         jmp     .Lcbc_dec_ret
2501 .p2align        4
2502 .Lcbc_dec_tail_partial:
2503         movaps  %xmm2,64(%rsp)
2504         movq    $16,%rcx
2505         movq    %rsi,%rdi
2506         subq    %rdx,%rcx
2507         leaq    64(%rsp),%rsi
2508 .long   0x9066A4F3      
2509
2510 .Lcbc_dec_ret:
2511         movaps  (%rsp),%xmm6
2512         movaps  16(%rsp),%xmm7
2513         movaps  32(%rsp),%xmm8
2514         movaps  48(%rsp),%xmm9
2515         leaq    88(%rsp),%rsp
2516 .Lcbc_ret:
2517         movq    8(%rsp),%rdi
2518         movq    16(%rsp),%rsi
2519         .byte   0xf3,0xc3
2520 .LSEH_end_aesni_cbc_encrypt:
2521 .globl  aesni_set_decrypt_key
2522 .def    aesni_set_decrypt_key;  .scl 2; .type 32;       .endef
2523 .p2align        4
2524 aesni_set_decrypt_key:
2525 .byte   0x48,0x83,0xEC,0x08     
2526         call    __aesni_set_encrypt_key
2527         shll    $4,%edx
2528         testl   %eax,%eax
2529         jnz     .Ldec_key_ret
2530         leaq    16(%r8,%rdx,1),%rcx
2531
2532         movups  (%r8),%xmm0
2533         movups  (%rcx),%xmm1
2534         movups  %xmm0,(%rcx)
2535         movups  %xmm1,(%r8)
2536         leaq    16(%r8),%r8
2537         leaq    -16(%rcx),%rcx
2538
2539 .Ldec_key_inverse:
2540         movups  (%r8),%xmm0
2541         movups  (%rcx),%xmm1
2542 .byte   102,15,56,219,192
2543 .byte   102,15,56,219,201
2544         leaq    16(%r8),%r8
2545         leaq    -16(%rcx),%rcx
2546         movups  %xmm0,16(%rcx)
2547         movups  %xmm1,-16(%r8)
2548         cmpq    %r8,%rcx
2549         ja      .Ldec_key_inverse
2550
2551         movups  (%r8),%xmm0
2552 .byte   102,15,56,219,192
2553         movups  %xmm0,(%rcx)
2554 .Ldec_key_ret:
2555         addq    $8,%rsp
2556         .byte   0xf3,0xc3
2557 .LSEH_end_set_decrypt_key:
2558
2559 .globl  aesni_set_encrypt_key
2560 .def    aesni_set_encrypt_key;  .scl 2; .type 32;       .endef
2561 .p2align        4
2562 aesni_set_encrypt_key:
2563 __aesni_set_encrypt_key:
2564 .byte   0x48,0x83,0xEC,0x08     
2565         movq    $-1,%rax
2566         testq   %rcx,%rcx
2567         jz      .Lenc_key_ret
2568         testq   %r8,%r8
2569         jz      .Lenc_key_ret
2570
2571         movups  (%rcx),%xmm0
2572         xorps   %xmm4,%xmm4
2573         leaq    16(%r8),%rax
2574         cmpl    $256,%edx
2575         je      .L14rounds
2576         cmpl    $192,%edx
2577         je      .L12rounds
2578         cmpl    $128,%edx
2579         jne     .Lbad_keybits
2580
2581 .L10rounds:
2582         movl    $9,%edx
2583         movups  %xmm0,(%r8)
2584 .byte   102,15,58,223,200,1
2585         call    .Lkey_expansion_128_cold
2586 .byte   102,15,58,223,200,2
2587         call    .Lkey_expansion_128
2588 .byte   102,15,58,223,200,4
2589         call    .Lkey_expansion_128
2590 .byte   102,15,58,223,200,8
2591         call    .Lkey_expansion_128
2592 .byte   102,15,58,223,200,16
2593         call    .Lkey_expansion_128
2594 .byte   102,15,58,223,200,32
2595         call    .Lkey_expansion_128
2596 .byte   102,15,58,223,200,64
2597         call    .Lkey_expansion_128
2598 .byte   102,15,58,223,200,128
2599         call    .Lkey_expansion_128
2600 .byte   102,15,58,223,200,27
2601         call    .Lkey_expansion_128
2602 .byte   102,15,58,223,200,54
2603         call    .Lkey_expansion_128
2604         movups  %xmm0,(%rax)
2605         movl    %edx,80(%rax)
2606         xorl    %eax,%eax
2607         jmp     .Lenc_key_ret
2608
2609 .p2align        4
2610 .L12rounds:
2611         movq    16(%rcx),%xmm2
2612         movl    $11,%edx
2613         movups  %xmm0,(%r8)
2614 .byte   102,15,58,223,202,1
2615         call    .Lkey_expansion_192a_cold
2616 .byte   102,15,58,223,202,2
2617         call    .Lkey_expansion_192b
2618 .byte   102,15,58,223,202,4
2619         call    .Lkey_expansion_192a
2620 .byte   102,15,58,223,202,8
2621         call    .Lkey_expansion_192b
2622 .byte   102,15,58,223,202,16
2623         call    .Lkey_expansion_192a
2624 .byte   102,15,58,223,202,32
2625         call    .Lkey_expansion_192b
2626 .byte   102,15,58,223,202,64
2627         call    .Lkey_expansion_192a
2628 .byte   102,15,58,223,202,128
2629         call    .Lkey_expansion_192b
2630         movups  %xmm0,(%rax)
2631         movl    %edx,48(%rax)
2632         xorq    %rax,%rax
2633         jmp     .Lenc_key_ret
2634
2635 .p2align        4
2636 .L14rounds:
2637         movups  16(%rcx),%xmm2
2638         movl    $13,%edx
2639         leaq    16(%rax),%rax
2640         movups  %xmm0,(%r8)
2641         movups  %xmm2,16(%r8)
2642 .byte   102,15,58,223,202,1
2643         call    .Lkey_expansion_256a_cold
2644 .byte   102,15,58,223,200,1
2645         call    .Lkey_expansion_256b
2646 .byte   102,15,58,223,202,2
2647         call    .Lkey_expansion_256a
2648 .byte   102,15,58,223,200,2
2649         call    .Lkey_expansion_256b
2650 .byte   102,15,58,223,202,4
2651         call    .Lkey_expansion_256a
2652 .byte   102,15,58,223,200,4
2653         call    .Lkey_expansion_256b
2654 .byte   102,15,58,223,202,8
2655         call    .Lkey_expansion_256a
2656 .byte   102,15,58,223,200,8
2657         call    .Lkey_expansion_256b
2658 .byte   102,15,58,223,202,16
2659         call    .Lkey_expansion_256a
2660 .byte   102,15,58,223,200,16
2661         call    .Lkey_expansion_256b
2662 .byte   102,15,58,223,202,32
2663         call    .Lkey_expansion_256a
2664 .byte   102,15,58,223,200,32
2665         call    .Lkey_expansion_256b
2666 .byte   102,15,58,223,202,64
2667         call    .Lkey_expansion_256a
2668         movups  %xmm0,(%rax)
2669         movl    %edx,16(%rax)
2670         xorq    %rax,%rax
2671         jmp     .Lenc_key_ret
2672
2673 .p2align        4
2674 .Lbad_keybits:
2675         movq    $-2,%rax
2676 .Lenc_key_ret:
2677         addq    $8,%rsp
2678         .byte   0xf3,0xc3
2679 .LSEH_end_set_encrypt_key:
2680
2681 .p2align        4
2682 .Lkey_expansion_128:
2683         movups  %xmm0,(%rax)
2684         leaq    16(%rax),%rax
2685 .Lkey_expansion_128_cold:
2686         shufps  $16,%xmm0,%xmm4
2687         xorps   %xmm4,%xmm0
2688         shufps  $140,%xmm0,%xmm4
2689         xorps   %xmm4,%xmm0
2690         shufps  $255,%xmm1,%xmm1
2691         xorps   %xmm1,%xmm0
2692         .byte   0xf3,0xc3
2693
2694 .p2align        4
2695 .Lkey_expansion_192a:
2696         movups  %xmm0,(%rax)
2697         leaq    16(%rax),%rax
2698 .Lkey_expansion_192a_cold:
2699         movaps  %xmm2,%xmm5
2700 .Lkey_expansion_192b_warm:
2701         shufps  $16,%xmm0,%xmm4
2702         movdqa  %xmm2,%xmm3
2703         xorps   %xmm4,%xmm0
2704         shufps  $140,%xmm0,%xmm4
2705         pslldq  $4,%xmm3
2706         xorps   %xmm4,%xmm0
2707         pshufd  $85,%xmm1,%xmm1
2708         pxor    %xmm3,%xmm2
2709         pxor    %xmm1,%xmm0
2710         pshufd  $255,%xmm0,%xmm3
2711         pxor    %xmm3,%xmm2
2712         .byte   0xf3,0xc3
2713
2714 .p2align        4
2715 .Lkey_expansion_192b:
2716         movaps  %xmm0,%xmm3
2717         shufps  $68,%xmm0,%xmm5
2718         movups  %xmm5,(%rax)
2719         shufps  $78,%xmm2,%xmm3
2720         movups  %xmm3,16(%rax)
2721         leaq    32(%rax),%rax
2722         jmp     .Lkey_expansion_192b_warm
2723
2724 .p2align        4
2725 .Lkey_expansion_256a:
2726         movups  %xmm2,(%rax)
2727         leaq    16(%rax),%rax
2728 .Lkey_expansion_256a_cold:
2729         shufps  $16,%xmm0,%xmm4
2730         xorps   %xmm4,%xmm0
2731         shufps  $140,%xmm0,%xmm4
2732         xorps   %xmm4,%xmm0
2733         shufps  $255,%xmm1,%xmm1
2734         xorps   %xmm1,%xmm0
2735         .byte   0xf3,0xc3
2736
2737 .p2align        4
2738 .Lkey_expansion_256b:
2739         movups  %xmm0,(%rax)
2740         leaq    16(%rax),%rax
2741
2742         shufps  $16,%xmm2,%xmm4
2743         xorps   %xmm4,%xmm2
2744         shufps  $140,%xmm2,%xmm4
2745         xorps   %xmm4,%xmm2
2746         shufps  $170,%xmm1,%xmm1
2747         xorps   %xmm1,%xmm2
2748         .byte   0xf3,0xc3
2749
2750
2751 .p2align        6
2752 .Lbswap_mask:
2753 .byte   15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
2754 .Lincrement32:
2755 .long   6,6,6,0
2756 .Lincrement64:
2757 .long   1,0,0,0
2758 .Lxts_magic:
2759 .long   0x87,0,1,0
2760
2761 .byte   65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69,83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
2762 .p2align        6
2763
2764 .def    ecb_se_handler; .scl 3; .type 32;       .endef
2765 .p2align        4
2766 ecb_se_handler:
2767         pushq   %rsi
2768         pushq   %rdi
2769         pushq   %rbx
2770         pushq   %rbp
2771         pushq   %r12
2772         pushq   %r13
2773         pushq   %r14
2774         pushq   %r15
2775         pushfq
2776         subq    $64,%rsp
2777
2778         movq    152(%r8),%rax
2779
2780         jmp     .Lcommon_seh_tail
2781
2782
2783 .def    ccm64_se_handler;       .scl 3; .type 32;       .endef
2784 .p2align        4
2785 ccm64_se_handler:
2786         pushq   %rsi
2787         pushq   %rdi
2788         pushq   %rbx
2789         pushq   %rbp
2790         pushq   %r12
2791         pushq   %r13
2792         pushq   %r14
2793         pushq   %r15
2794         pushfq
2795         subq    $64,%rsp
2796
2797         movq    120(%r8),%rax
2798         movq    248(%r8),%rbx
2799
2800         movq    8(%r9),%rsi
2801         movq    56(%r9),%r11
2802
2803         movl    0(%r11),%r10d
2804         leaq    (%rsi,%r10,1),%r10
2805         cmpq    %r10,%rbx
2806         jb      .Lcommon_seh_tail
2807
2808         movq    152(%r8),%rax
2809
2810         movl    4(%r11),%r10d
2811         leaq    (%rsi,%r10,1),%r10
2812         cmpq    %r10,%rbx
2813         jae     .Lcommon_seh_tail
2814
2815         leaq    0(%rax),%rsi
2816         leaq    512(%r8),%rdi
2817         movl    $8,%ecx
2818 .long   0xa548f3fc              
2819         leaq    88(%rax),%rax
2820
2821         jmp     .Lcommon_seh_tail
2822
2823
2824 .def    ctr32_se_handler;       .scl 3; .type 32;       .endef
2825 .p2align        4
2826 ctr32_se_handler:
2827         pushq   %rsi
2828         pushq   %rdi
2829         pushq   %rbx
2830         pushq   %rbp
2831         pushq   %r12
2832         pushq   %r13
2833         pushq   %r14
2834         pushq   %r15
2835         pushfq
2836         subq    $64,%rsp
2837
2838         movq    120(%r8),%rax
2839         movq    248(%r8),%rbx
2840
2841         leaq    .Lctr32_body(%rip),%r10
2842         cmpq    %r10,%rbx
2843         jb      .Lcommon_seh_tail
2844
2845         movq    152(%r8),%rax
2846
2847         leaq    .Lctr32_ret(%rip),%r10
2848         cmpq    %r10,%rbx
2849         jae     .Lcommon_seh_tail
2850
2851         leaq    32(%rax),%rsi
2852         leaq    512(%r8),%rdi
2853         movl    $20,%ecx
2854 .long   0xa548f3fc              
2855         leaq    200(%rax),%rax
2856
2857         jmp     .Lcommon_seh_tail
2858
2859
2860 .def    xts_se_handler; .scl 3; .type 32;       .endef
2861 .p2align        4
2862 xts_se_handler:
2863         pushq   %rsi
2864         pushq   %rdi
2865         pushq   %rbx
2866         pushq   %rbp
2867         pushq   %r12
2868         pushq   %r13
2869         pushq   %r14
2870         pushq   %r15
2871         pushfq
2872         subq    $64,%rsp
2873
2874         movq    120(%r8),%rax
2875         movq    248(%r8),%rbx
2876
2877         movq    8(%r9),%rsi
2878         movq    56(%r9),%r11
2879
2880         movl    0(%r11),%r10d
2881         leaq    (%rsi,%r10,1),%r10
2882         cmpq    %r10,%rbx
2883         jb      .Lcommon_seh_tail
2884
2885         movq    152(%r8),%rax
2886
2887         movl    4(%r11),%r10d
2888         leaq    (%rsi,%r10,1),%r10
2889         cmpq    %r10,%rbx
2890         jae     .Lcommon_seh_tail
2891
2892         leaq    96(%rax),%rsi
2893         leaq    512(%r8),%rdi
2894         movl    $20,%ecx
2895 .long   0xa548f3fc              
2896         leaq    104+160(%rax),%rax
2897
2898         jmp     .Lcommon_seh_tail
2899
2900 .def    cbc_se_handler; .scl 3; .type 32;       .endef
2901 .p2align        4
2902 cbc_se_handler:
2903         pushq   %rsi
2904         pushq   %rdi
2905         pushq   %rbx
2906         pushq   %rbp
2907         pushq   %r12
2908         pushq   %r13
2909         pushq   %r14
2910         pushq   %r15
2911         pushfq
2912         subq    $64,%rsp
2913
2914         movq    152(%r8),%rax
2915         movq    248(%r8),%rbx
2916
2917         leaq    .Lcbc_decrypt(%rip),%r10
2918         cmpq    %r10,%rbx
2919         jb      .Lcommon_seh_tail
2920
2921         leaq    .Lcbc_decrypt_body(%rip),%r10
2922         cmpq    %r10,%rbx
2923         jb      .Lrestore_cbc_rax
2924
2925         leaq    .Lcbc_ret(%rip),%r10
2926         cmpq    %r10,%rbx
2927         jae     .Lcommon_seh_tail
2928
2929         leaq    0(%rax),%rsi
2930         leaq    512(%r8),%rdi
2931         movl    $8,%ecx
2932 .long   0xa548f3fc              
2933         leaq    88(%rax),%rax
2934         jmp     .Lcommon_seh_tail
2935
2936 .Lrestore_cbc_rax:
2937         movq    120(%r8),%rax
2938
2939 .Lcommon_seh_tail:
2940         movq    8(%rax),%rdi
2941         movq    16(%rax),%rsi
2942         movq    %rax,152(%r8)
2943         movq    %rsi,168(%r8)
2944         movq    %rdi,176(%r8)
2945
2946         movq    40(%r9),%rdi
2947         movq    %r8,%rsi
2948         movl    $154,%ecx
2949 .long   0xa548f3fc              
2950
2951         movq    %r9,%rsi
2952         xorq    %rcx,%rcx
2953         movq    8(%rsi),%rdx
2954         movq    0(%rsi),%r8
2955         movq    16(%rsi),%r9
2956         movq    40(%rsi),%r10
2957         leaq    56(%rsi),%r11
2958         leaq    24(%rsi),%r12
2959         movq    %r10,32(%rsp)
2960         movq    %r11,40(%rsp)
2961         movq    %r12,48(%rsp)
2962         movq    %rcx,56(%rsp)
2963         call    *__imp_RtlVirtualUnwind(%rip)
2964
2965         movl    $1,%eax
2966         addq    $64,%rsp
2967         popfq
2968         popq    %r15
2969         popq    %r14
2970         popq    %r13
2971         popq    %r12
2972         popq    %rbp
2973         popq    %rbx
2974         popq    %rdi
2975         popq    %rsi
2976         .byte   0xf3,0xc3
2977
2978
2979 .section        .pdata
2980 .p2align        2
2981 .rva    .LSEH_begin_aesni_ecb_encrypt
2982 .rva    .LSEH_end_aesni_ecb_encrypt
2983 .rva    .LSEH_info_ecb
2984
2985 .rva    .LSEH_begin_aesni_ccm64_encrypt_blocks
2986 .rva    .LSEH_end_aesni_ccm64_encrypt_blocks
2987 .rva    .LSEH_info_ccm64_enc
2988
2989 .rva    .LSEH_begin_aesni_ccm64_decrypt_blocks
2990 .rva    .LSEH_end_aesni_ccm64_decrypt_blocks
2991 .rva    .LSEH_info_ccm64_dec
2992
2993 .rva    .LSEH_begin_aesni_ctr32_encrypt_blocks
2994 .rva    .LSEH_end_aesni_ctr32_encrypt_blocks
2995 .rva    .LSEH_info_ctr32
2996
2997 .rva    .LSEH_begin_aesni_xts_encrypt
2998 .rva    .LSEH_end_aesni_xts_encrypt
2999 .rva    .LSEH_info_xts_enc
3000
3001 .rva    .LSEH_begin_aesni_xts_decrypt
3002 .rva    .LSEH_end_aesni_xts_decrypt
3003 .rva    .LSEH_info_xts_dec
3004 .rva    .LSEH_begin_aesni_cbc_encrypt
3005 .rva    .LSEH_end_aesni_cbc_encrypt
3006 .rva    .LSEH_info_cbc
3007
3008 .rva    aesni_set_decrypt_key
3009 .rva    .LSEH_end_set_decrypt_key
3010 .rva    .LSEH_info_key
3011
3012 .rva    aesni_set_encrypt_key
3013 .rva    .LSEH_end_set_encrypt_key
3014 .rva    .LSEH_info_key
3015 .section        .xdata
3016 .p2align        3
3017 .LSEH_info_ecb:
3018 .byte   9,0,0,0
3019 .rva    ecb_se_handler
3020 .LSEH_info_ccm64_enc:
3021 .byte   9,0,0,0
3022 .rva    ccm64_se_handler
3023 .rva    .Lccm64_enc_body,.Lccm64_enc_ret        
3024 .LSEH_info_ccm64_dec:
3025 .byte   9,0,0,0
3026 .rva    ccm64_se_handler
3027 .rva    .Lccm64_dec_body,.Lccm64_dec_ret        
3028 .LSEH_info_ctr32:
3029 .byte   9,0,0,0
3030 .rva    ctr32_se_handler
3031 .LSEH_info_xts_enc:
3032 .byte   9,0,0,0
3033 .rva    xts_se_handler
3034 .rva    .Lxts_enc_body,.Lxts_enc_epilogue       
3035 .LSEH_info_xts_dec:
3036 .byte   9,0,0,0
3037 .rva    xts_se_handler
3038 .rva    .Lxts_dec_body,.Lxts_dec_epilogue       
3039 .LSEH_info_cbc:
3040 .byte   9,0,0,0
3041 .rva    cbc_se_handler
3042 .LSEH_info_key:
3043 .byte   0x01,0x04,0x01,0x00
3044 .byte   0x04,0x02,0x00,0x00