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