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