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