use C's style comments to compile in old MacOSX systems. Reported by Ryan Schmidt.
[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         cmpq    $1,%rdx
931         je      L$ctr32_one_shortcut
932
933         movdqu  (%r8),%xmm14
934         movdqa  L$bswap_mask(%rip),%xmm15
935         xorl    %eax,%eax
936 .byte   102,69,15,58,22,242,3
937 .byte   102,68,15,58,34,240,3
938
939         movl    240(%rcx),%eax
940         bswapl  %r10d
941         pxor    %xmm12,%xmm12
942         pxor    %xmm13,%xmm13
943 .byte   102,69,15,58,34,226,0
944         leaq    3(%r10),%r11
945 .byte   102,69,15,58,34,235,0
946         incl    %r10d
947 .byte   102,69,15,58,34,226,1
948         incq    %r11
949 .byte   102,69,15,58,34,235,1
950         incl    %r10d
951 .byte   102,69,15,58,34,226,2
952         incq    %r11
953 .byte   102,69,15,58,34,235,2
954         movdqa  %xmm12,-40(%rsp)
955 .byte   102,69,15,56,0,231
956         movdqa  %xmm13,-24(%rsp)
957 .byte   102,69,15,56,0,239
958
959         pshufd  $192,%xmm12,%xmm2
960         pshufd  $128,%xmm12,%xmm3
961         pshufd  $64,%xmm12,%xmm4
962         cmpq    $6,%rdx
963         jb      L$ctr32_tail
964         shrl    $1,%eax
965         movq    %rcx,%r11
966         movl    %eax,%r10d
967         subq    $6,%rdx
968         jmp     L$ctr32_loop6
969
970 .p2align        4
971 L$ctr32_loop6:
972         pshufd  $192,%xmm13,%xmm5
973         por     %xmm14,%xmm2
974         movups  (%r11),%xmm0
975         pshufd  $128,%xmm13,%xmm6
976         por     %xmm14,%xmm3
977         movups  16(%r11),%xmm1
978         pshufd  $64,%xmm13,%xmm7
979         por     %xmm14,%xmm4
980         por     %xmm14,%xmm5
981         xorps   %xmm0,%xmm2
982         por     %xmm14,%xmm6
983         por     %xmm14,%xmm7
984
985
986
987
988         pxor    %xmm0,%xmm3
989 .byte   102,15,56,220,209
990         leaq    32(%r11),%rcx
991         pxor    %xmm0,%xmm4
992 .byte   102,15,56,220,217
993         movdqa  L$increment32(%rip),%xmm13
994         pxor    %xmm0,%xmm5
995 .byte   102,15,56,220,225
996         movdqa  -40(%rsp),%xmm12
997         pxor    %xmm0,%xmm6
998 .byte   102,15,56,220,233
999         pxor    %xmm0,%xmm7
1000         movups  (%rcx),%xmm0
1001         decl    %eax
1002 .byte   102,15,56,220,241
1003 .byte   102,15,56,220,249
1004         jmp     L$ctr32_enc_loop6_enter
1005 .p2align        4
1006 L$ctr32_enc_loop6:
1007 .byte   102,15,56,220,209
1008 .byte   102,15,56,220,217
1009         decl    %eax
1010 .byte   102,15,56,220,225
1011 .byte   102,15,56,220,233
1012 .byte   102,15,56,220,241
1013 .byte   102,15,56,220,249
1014 L$ctr32_enc_loop6_enter:
1015         movups  16(%rcx),%xmm1
1016 .byte   102,15,56,220,208
1017 .byte   102,15,56,220,216
1018         leaq    32(%rcx),%rcx
1019 .byte   102,15,56,220,224
1020 .byte   102,15,56,220,232
1021 .byte   102,15,56,220,240
1022 .byte   102,15,56,220,248
1023         movups  (%rcx),%xmm0
1024         jnz     L$ctr32_enc_loop6
1025
1026 .byte   102,15,56,220,209
1027         paddd   %xmm13,%xmm12
1028 .byte   102,15,56,220,217
1029         paddd   -24(%rsp),%xmm13
1030 .byte   102,15,56,220,225
1031         movdqa  %xmm12,-40(%rsp)
1032 .byte   102,15,56,220,233
1033         movdqa  %xmm13,-24(%rsp)
1034 .byte   102,15,56,220,241
1035 .byte   102,69,15,56,0,231
1036 .byte   102,15,56,220,249
1037 .byte   102,69,15,56,0,239
1038
1039 .byte   102,15,56,221,208
1040         movups  (%rdi),%xmm8
1041 .byte   102,15,56,221,216
1042         movups  16(%rdi),%xmm9
1043 .byte   102,15,56,221,224
1044         movups  32(%rdi),%xmm10
1045 .byte   102,15,56,221,232
1046         movups  48(%rdi),%xmm11
1047 .byte   102,15,56,221,240
1048         movups  64(%rdi),%xmm1
1049 .byte   102,15,56,221,248
1050         movups  80(%rdi),%xmm0
1051         leaq    96(%rdi),%rdi
1052
1053         xorps   %xmm2,%xmm8
1054         pshufd  $192,%xmm12,%xmm2
1055         xorps   %xmm3,%xmm9
1056         pshufd  $128,%xmm12,%xmm3
1057         movups  %xmm8,(%rsi)
1058         xorps   %xmm4,%xmm10
1059         pshufd  $64,%xmm12,%xmm4
1060         movups  %xmm9,16(%rsi)
1061         xorps   %xmm5,%xmm11
1062         movups  %xmm10,32(%rsi)
1063         xorps   %xmm6,%xmm1
1064         movups  %xmm11,48(%rsi)
1065         xorps   %xmm7,%xmm0
1066         movups  %xmm1,64(%rsi)
1067         movups  %xmm0,80(%rsi)
1068         leaq    96(%rsi),%rsi
1069         movl    %r10d,%eax
1070         subq    $6,%rdx
1071         jnc     L$ctr32_loop6
1072
1073         addq    $6,%rdx
1074         jz      L$ctr32_done
1075         movq    %r11,%rcx
1076         leal    1(%rax,%rax,1),%eax
1077
1078 L$ctr32_tail:
1079         por     %xmm14,%xmm2
1080         movups  (%rdi),%xmm8
1081         cmpq    $2,%rdx
1082         jb      L$ctr32_one
1083
1084         por     %xmm14,%xmm3
1085         movups  16(%rdi),%xmm9
1086         je      L$ctr32_two
1087
1088         pshufd  $192,%xmm13,%xmm5
1089         por     %xmm14,%xmm4
1090         movups  32(%rdi),%xmm10
1091         cmpq    $4,%rdx
1092         jb      L$ctr32_three
1093
1094         pshufd  $128,%xmm13,%xmm6
1095         por     %xmm14,%xmm5
1096         movups  48(%rdi),%xmm11
1097         je      L$ctr32_four
1098
1099         por     %xmm14,%xmm6
1100         xorps   %xmm7,%xmm7
1101
1102         call    _aesni_encrypt6
1103
1104         movups  64(%rdi),%xmm1
1105         xorps   %xmm2,%xmm8
1106         xorps   %xmm3,%xmm9
1107         movups  %xmm8,(%rsi)
1108         xorps   %xmm4,%xmm10
1109         movups  %xmm9,16(%rsi)
1110         xorps   %xmm5,%xmm11
1111         movups  %xmm10,32(%rsi)
1112         xorps   %xmm6,%xmm1
1113         movups  %xmm11,48(%rsi)
1114         movups  %xmm1,64(%rsi)
1115         jmp     L$ctr32_done
1116
1117 .p2align        4
1118 L$ctr32_one_shortcut:
1119         movups  (%r8),%xmm2
1120         movups  (%rdi),%xmm8
1121         movl    240(%rcx),%eax
1122 L$ctr32_one:
1123         movups  (%rcx),%xmm0
1124         movups  16(%rcx),%xmm1
1125         leaq    32(%rcx),%rcx
1126         xorps   %xmm0,%xmm2
1127 L$oop_enc1_7:
1128 .byte   102,15,56,220,209
1129         decl    %eax
1130         movups  (%rcx),%xmm1
1131         leaq    16(%rcx),%rcx
1132         jnz     L$oop_enc1_7    
1133 .byte   102,15,56,221,209
1134         xorps   %xmm2,%xmm8
1135         movups  %xmm8,(%rsi)
1136         jmp     L$ctr32_done
1137
1138 .p2align        4
1139 L$ctr32_two:
1140         xorps   %xmm4,%xmm4
1141         call    _aesni_encrypt3
1142         xorps   %xmm2,%xmm8
1143         xorps   %xmm3,%xmm9
1144         movups  %xmm8,(%rsi)
1145         movups  %xmm9,16(%rsi)
1146         jmp     L$ctr32_done
1147
1148 .p2align        4
1149 L$ctr32_three:
1150         call    _aesni_encrypt3
1151         xorps   %xmm2,%xmm8
1152         xorps   %xmm3,%xmm9
1153         movups  %xmm8,(%rsi)
1154         xorps   %xmm4,%xmm10
1155         movups  %xmm9,16(%rsi)
1156         movups  %xmm10,32(%rsi)
1157         jmp     L$ctr32_done
1158
1159 .p2align        4
1160 L$ctr32_four:
1161         call    _aesni_encrypt4
1162         xorps   %xmm2,%xmm8
1163         xorps   %xmm3,%xmm9
1164         movups  %xmm8,(%rsi)
1165         xorps   %xmm4,%xmm10
1166         movups  %xmm9,16(%rsi)
1167         xorps   %xmm5,%xmm11
1168         movups  %xmm10,32(%rsi)
1169         movups  %xmm11,48(%rsi)
1170
1171 L$ctr32_done:
1172         .byte   0xf3,0xc3
1173
1174 .globl  _aesni_xts_encrypt
1175
1176 .p2align        4
1177 _aesni_xts_encrypt:
1178         leaq    -104(%rsp),%rsp
1179         movups  (%r9),%xmm15
1180         movl    240(%r8),%eax
1181         movl    240(%rcx),%r10d
1182         movups  (%r8),%xmm0
1183         movups  16(%r8),%xmm1
1184         leaq    32(%r8),%r8
1185         xorps   %xmm0,%xmm15
1186 L$oop_enc1_8:
1187 .byte   102,68,15,56,220,249
1188         decl    %eax
1189         movups  (%r8),%xmm1
1190         leaq    16(%r8),%r8
1191         jnz     L$oop_enc1_8    
1192 .byte   102,68,15,56,221,249
1193         movq    %rcx,%r11
1194         movl    %r10d,%eax
1195         movq    %rdx,%r9
1196         andq    $-16,%rdx
1197
1198         movdqa  L$xts_magic(%rip),%xmm8
1199         pxor    %xmm14,%xmm14
1200         pcmpgtd %xmm15,%xmm14
1201         pshufd  $19,%xmm14,%xmm9
1202         pxor    %xmm14,%xmm14
1203         movdqa  %xmm15,%xmm10
1204         paddq   %xmm15,%xmm15
1205         pand    %xmm8,%xmm9
1206         pcmpgtd %xmm15,%xmm14
1207         pxor    %xmm9,%xmm15
1208         pshufd  $19,%xmm14,%xmm9
1209         pxor    %xmm14,%xmm14
1210         movdqa  %xmm15,%xmm11
1211         paddq   %xmm15,%xmm15
1212         pand    %xmm8,%xmm9
1213         pcmpgtd %xmm15,%xmm14
1214         pxor    %xmm9,%xmm15
1215         pshufd  $19,%xmm14,%xmm9
1216         pxor    %xmm14,%xmm14
1217         movdqa  %xmm15,%xmm12
1218         paddq   %xmm15,%xmm15
1219         pand    %xmm8,%xmm9
1220         pcmpgtd %xmm15,%xmm14
1221         pxor    %xmm9,%xmm15
1222         pshufd  $19,%xmm14,%xmm9
1223         pxor    %xmm14,%xmm14
1224         movdqa  %xmm15,%xmm13
1225         paddq   %xmm15,%xmm15
1226         pand    %xmm8,%xmm9
1227         pcmpgtd %xmm15,%xmm14
1228         pxor    %xmm9,%xmm15
1229         subq    $96,%rdx
1230         jc      L$xts_enc_short
1231
1232         shrl    $1,%eax
1233         subl    $1,%eax
1234         movl    %eax,%r10d
1235         jmp     L$xts_enc_grandloop
1236
1237 .p2align        4
1238 L$xts_enc_grandloop:
1239         pshufd  $19,%xmm14,%xmm9
1240         movdqa  %xmm15,%xmm14
1241         paddq   %xmm15,%xmm15
1242         movdqu  0(%rdi),%xmm2
1243         pand    %xmm8,%xmm9
1244         movdqu  16(%rdi),%xmm3
1245         pxor    %xmm9,%xmm15
1246
1247         movdqu  32(%rdi),%xmm4
1248         pxor    %xmm10,%xmm2
1249         movdqu  48(%rdi),%xmm5
1250         pxor    %xmm11,%xmm3
1251         movdqu  64(%rdi),%xmm6
1252         pxor    %xmm12,%xmm4
1253         movdqu  80(%rdi),%xmm7
1254         leaq    96(%rdi),%rdi
1255         pxor    %xmm13,%xmm5
1256         movups  (%r11),%xmm0
1257         pxor    %xmm14,%xmm6
1258         pxor    %xmm15,%xmm7
1259
1260
1261
1262         movups  16(%r11),%xmm1
1263         pxor    %xmm0,%xmm2
1264         pxor    %xmm0,%xmm3
1265         movdqa  %xmm10,0(%rsp)
1266 .byte   102,15,56,220,209
1267         leaq    32(%r11),%rcx
1268         pxor    %xmm0,%xmm4
1269         movdqa  %xmm11,16(%rsp)
1270 .byte   102,15,56,220,217
1271         pxor    %xmm0,%xmm5
1272         movdqa  %xmm12,32(%rsp)
1273 .byte   102,15,56,220,225
1274         pxor    %xmm0,%xmm6
1275         movdqa  %xmm13,48(%rsp)
1276 .byte   102,15,56,220,233
1277         pxor    %xmm0,%xmm7
1278         movups  (%rcx),%xmm0
1279         decl    %eax
1280         movdqa  %xmm14,64(%rsp)
1281 .byte   102,15,56,220,241
1282         movdqa  %xmm15,80(%rsp)
1283 .byte   102,15,56,220,249
1284         pxor    %xmm14,%xmm14
1285         pcmpgtd %xmm15,%xmm14
1286         jmp     L$xts_enc_loop6_enter
1287
1288 .p2align        4
1289 L$xts_enc_loop6:
1290 .byte   102,15,56,220,209
1291 .byte   102,15,56,220,217
1292         decl    %eax
1293 .byte   102,15,56,220,225
1294 .byte   102,15,56,220,233
1295 .byte   102,15,56,220,241
1296 .byte   102,15,56,220,249
1297 L$xts_enc_loop6_enter:
1298         movups  16(%rcx),%xmm1
1299 .byte   102,15,56,220,208
1300 .byte   102,15,56,220,216
1301         leaq    32(%rcx),%rcx
1302 .byte   102,15,56,220,224
1303 .byte   102,15,56,220,232
1304 .byte   102,15,56,220,240
1305 .byte   102,15,56,220,248
1306         movups  (%rcx),%xmm0
1307         jnz     L$xts_enc_loop6
1308
1309         pshufd  $19,%xmm14,%xmm9
1310         pxor    %xmm14,%xmm14
1311         paddq   %xmm15,%xmm15
1312 .byte   102,15,56,220,209
1313         pand    %xmm8,%xmm9
1314 .byte   102,15,56,220,217
1315         pcmpgtd %xmm15,%xmm14
1316 .byte   102,15,56,220,225
1317         pxor    %xmm9,%xmm15
1318 .byte   102,15,56,220,233
1319 .byte   102,15,56,220,241
1320 .byte   102,15,56,220,249
1321         movups  16(%rcx),%xmm1
1322
1323         pshufd  $19,%xmm14,%xmm9
1324         pxor    %xmm14,%xmm14
1325         movdqa  %xmm15,%xmm10
1326         paddq   %xmm15,%xmm15
1327 .byte   102,15,56,220,208
1328         pand    %xmm8,%xmm9
1329 .byte   102,15,56,220,216
1330         pcmpgtd %xmm15,%xmm14
1331 .byte   102,15,56,220,224
1332         pxor    %xmm9,%xmm15
1333 .byte   102,15,56,220,232
1334 .byte   102,15,56,220,240
1335 .byte   102,15,56,220,248
1336         movups  32(%rcx),%xmm0
1337
1338         pshufd  $19,%xmm14,%xmm9
1339         pxor    %xmm14,%xmm14
1340         movdqa  %xmm15,%xmm11
1341         paddq   %xmm15,%xmm15
1342 .byte   102,15,56,220,209
1343         pand    %xmm8,%xmm9
1344 .byte   102,15,56,220,217
1345         pcmpgtd %xmm15,%xmm14
1346 .byte   102,15,56,220,225
1347         pxor    %xmm9,%xmm15
1348 .byte   102,15,56,220,233
1349 .byte   102,15,56,220,241
1350 .byte   102,15,56,220,249
1351
1352         pshufd  $19,%xmm14,%xmm9
1353         pxor    %xmm14,%xmm14
1354         movdqa  %xmm15,%xmm12
1355         paddq   %xmm15,%xmm15
1356 .byte   102,15,56,221,208
1357         pand    %xmm8,%xmm9
1358 .byte   102,15,56,221,216
1359         pcmpgtd %xmm15,%xmm14
1360 .byte   102,15,56,221,224
1361         pxor    %xmm9,%xmm15
1362 .byte   102,15,56,221,232
1363 .byte   102,15,56,221,240
1364 .byte   102,15,56,221,248
1365
1366         pshufd  $19,%xmm14,%xmm9
1367         pxor    %xmm14,%xmm14
1368         movdqa  %xmm15,%xmm13
1369         paddq   %xmm15,%xmm15
1370         xorps   0(%rsp),%xmm2
1371         pand    %xmm8,%xmm9
1372         xorps   16(%rsp),%xmm3
1373         pcmpgtd %xmm15,%xmm14
1374         pxor    %xmm9,%xmm15
1375
1376         xorps   32(%rsp),%xmm4
1377         movups  %xmm2,0(%rsi)
1378         xorps   48(%rsp),%xmm5
1379         movups  %xmm3,16(%rsi)
1380         xorps   64(%rsp),%xmm6
1381         movups  %xmm4,32(%rsi)
1382         xorps   80(%rsp),%xmm7
1383         movups  %xmm5,48(%rsi)
1384         movl    %r10d,%eax
1385         movups  %xmm6,64(%rsi)
1386         movups  %xmm7,80(%rsi)
1387         leaq    96(%rsi),%rsi
1388         subq    $96,%rdx
1389         jnc     L$xts_enc_grandloop
1390
1391         leal    3(%rax,%rax,1),%eax
1392         movq    %r11,%rcx
1393         movl    %eax,%r10d
1394
1395 L$xts_enc_short:
1396         addq    $96,%rdx
1397         jz      L$xts_enc_done
1398
1399         cmpq    $32,%rdx
1400         jb      L$xts_enc_one
1401         je      L$xts_enc_two
1402
1403         cmpq    $64,%rdx
1404         jb      L$xts_enc_three
1405         je      L$xts_enc_four
1406
1407         pshufd  $19,%xmm14,%xmm9
1408         movdqa  %xmm15,%xmm14
1409         paddq   %xmm15,%xmm15
1410         movdqu  (%rdi),%xmm2
1411         pand    %xmm8,%xmm9
1412         movdqu  16(%rdi),%xmm3
1413         pxor    %xmm9,%xmm15
1414
1415         movdqu  32(%rdi),%xmm4
1416         pxor    %xmm10,%xmm2
1417         movdqu  48(%rdi),%xmm5
1418         pxor    %xmm11,%xmm3
1419         movdqu  64(%rdi),%xmm6
1420         leaq    80(%rdi),%rdi
1421         pxor    %xmm12,%xmm4
1422         pxor    %xmm13,%xmm5
1423         pxor    %xmm14,%xmm6
1424
1425         call    _aesni_encrypt6
1426
1427         xorps   %xmm10,%xmm2
1428         movdqa  %xmm15,%xmm10
1429         xorps   %xmm11,%xmm3
1430         xorps   %xmm12,%xmm4
1431         movdqu  %xmm2,(%rsi)
1432         xorps   %xmm13,%xmm5
1433         movdqu  %xmm3,16(%rsi)
1434         xorps   %xmm14,%xmm6
1435         movdqu  %xmm4,32(%rsi)
1436         movdqu  %xmm5,48(%rsi)
1437         movdqu  %xmm6,64(%rsi)
1438         leaq    80(%rsi),%rsi
1439         jmp     L$xts_enc_done
1440
1441 .p2align        4
1442 L$xts_enc_one:
1443         movups  (%rdi),%xmm2
1444         leaq    16(%rdi),%rdi
1445         xorps   %xmm10,%xmm2
1446         movups  (%rcx),%xmm0
1447         movups  16(%rcx),%xmm1
1448         leaq    32(%rcx),%rcx
1449         xorps   %xmm0,%xmm2
1450 L$oop_enc1_9:
1451 .byte   102,15,56,220,209
1452         decl    %eax
1453         movups  (%rcx),%xmm1
1454         leaq    16(%rcx),%rcx
1455         jnz     L$oop_enc1_9    
1456 .byte   102,15,56,221,209
1457         xorps   %xmm10,%xmm2
1458         movdqa  %xmm11,%xmm10
1459         movups  %xmm2,(%rsi)
1460         leaq    16(%rsi),%rsi
1461         jmp     L$xts_enc_done
1462
1463 .p2align        4
1464 L$xts_enc_two:
1465         movups  (%rdi),%xmm2
1466         movups  16(%rdi),%xmm3
1467         leaq    32(%rdi),%rdi
1468         xorps   %xmm10,%xmm2
1469         xorps   %xmm11,%xmm3
1470
1471         call    _aesni_encrypt3
1472
1473         xorps   %xmm10,%xmm2
1474         movdqa  %xmm12,%xmm10
1475         xorps   %xmm11,%xmm3
1476         movups  %xmm2,(%rsi)
1477         movups  %xmm3,16(%rsi)
1478         leaq    32(%rsi),%rsi
1479         jmp     L$xts_enc_done
1480
1481 .p2align        4
1482 L$xts_enc_three:
1483         movups  (%rdi),%xmm2
1484         movups  16(%rdi),%xmm3
1485         movups  32(%rdi),%xmm4
1486         leaq    48(%rdi),%rdi
1487         xorps   %xmm10,%xmm2
1488         xorps   %xmm11,%xmm3
1489         xorps   %xmm12,%xmm4
1490
1491         call    _aesni_encrypt3
1492
1493         xorps   %xmm10,%xmm2
1494         movdqa  %xmm13,%xmm10
1495         xorps   %xmm11,%xmm3
1496         xorps   %xmm12,%xmm4
1497         movups  %xmm2,(%rsi)
1498         movups  %xmm3,16(%rsi)
1499         movups  %xmm4,32(%rsi)
1500         leaq    48(%rsi),%rsi
1501         jmp     L$xts_enc_done
1502
1503 .p2align        4
1504 L$xts_enc_four:
1505         movups  (%rdi),%xmm2
1506         movups  16(%rdi),%xmm3
1507         movups  32(%rdi),%xmm4
1508         xorps   %xmm10,%xmm2
1509         movups  48(%rdi),%xmm5
1510         leaq    64(%rdi),%rdi
1511         xorps   %xmm11,%xmm3
1512         xorps   %xmm12,%xmm4
1513         xorps   %xmm13,%xmm5
1514
1515         call    _aesni_encrypt4
1516
1517         xorps   %xmm10,%xmm2
1518         movdqa  %xmm15,%xmm10
1519         xorps   %xmm11,%xmm3
1520         xorps   %xmm12,%xmm4
1521         movups  %xmm2,(%rsi)
1522         xorps   %xmm13,%xmm5
1523         movups  %xmm3,16(%rsi)
1524         movups  %xmm4,32(%rsi)
1525         movups  %xmm5,48(%rsi)
1526         leaq    64(%rsi),%rsi
1527         jmp     L$xts_enc_done
1528
1529 .p2align        4
1530 L$xts_enc_done:
1531         andq    $15,%r9
1532         jz      L$xts_enc_ret
1533         movq    %r9,%rdx
1534
1535 L$xts_enc_steal:
1536         movzbl  (%rdi),%eax
1537         movzbl  -16(%rsi),%ecx
1538         leaq    1(%rdi),%rdi
1539         movb    %al,-16(%rsi)
1540         movb    %cl,0(%rsi)
1541         leaq    1(%rsi),%rsi
1542         subq    $1,%rdx
1543         jnz     L$xts_enc_steal
1544
1545         subq    %r9,%rsi
1546         movq    %r11,%rcx
1547         movl    %r10d,%eax
1548
1549         movups  -16(%rsi),%xmm2
1550         xorps   %xmm10,%xmm2
1551         movups  (%rcx),%xmm0
1552         movups  16(%rcx),%xmm1
1553         leaq    32(%rcx),%rcx
1554         xorps   %xmm0,%xmm2
1555 L$oop_enc1_10:
1556 .byte   102,15,56,220,209
1557         decl    %eax
1558         movups  (%rcx),%xmm1
1559         leaq    16(%rcx),%rcx
1560         jnz     L$oop_enc1_10   
1561 .byte   102,15,56,221,209
1562         xorps   %xmm10,%xmm2
1563         movups  %xmm2,-16(%rsi)
1564
1565 L$xts_enc_ret:
1566         leaq    104(%rsp),%rsp
1567 L$xts_enc_epilogue:
1568         .byte   0xf3,0xc3
1569
1570 .globl  _aesni_xts_decrypt
1571
1572 .p2align        4
1573 _aesni_xts_decrypt:
1574         leaq    -104(%rsp),%rsp
1575         movups  (%r9),%xmm15
1576         movl    240(%r8),%eax
1577         movl    240(%rcx),%r10d
1578         movups  (%r8),%xmm0
1579         movups  16(%r8),%xmm1
1580         leaq    32(%r8),%r8
1581         xorps   %xmm0,%xmm15
1582 L$oop_enc1_11:
1583 .byte   102,68,15,56,220,249
1584         decl    %eax
1585         movups  (%r8),%xmm1
1586         leaq    16(%r8),%r8
1587         jnz     L$oop_enc1_11   
1588 .byte   102,68,15,56,221,249
1589         xorl    %eax,%eax
1590         testq   $15,%rdx
1591         setnz   %al
1592         shlq    $4,%rax
1593         subq    %rax,%rdx
1594
1595         movq    %rcx,%r11
1596         movl    %r10d,%eax
1597         movq    %rdx,%r9
1598         andq    $-16,%rdx
1599
1600         movdqa  L$xts_magic(%rip),%xmm8
1601         pxor    %xmm14,%xmm14
1602         pcmpgtd %xmm15,%xmm14
1603         pshufd  $19,%xmm14,%xmm9
1604         pxor    %xmm14,%xmm14
1605         movdqa  %xmm15,%xmm10
1606         paddq   %xmm15,%xmm15
1607         pand    %xmm8,%xmm9
1608         pcmpgtd %xmm15,%xmm14
1609         pxor    %xmm9,%xmm15
1610         pshufd  $19,%xmm14,%xmm9
1611         pxor    %xmm14,%xmm14
1612         movdqa  %xmm15,%xmm11
1613         paddq   %xmm15,%xmm15
1614         pand    %xmm8,%xmm9
1615         pcmpgtd %xmm15,%xmm14
1616         pxor    %xmm9,%xmm15
1617         pshufd  $19,%xmm14,%xmm9
1618         pxor    %xmm14,%xmm14
1619         movdqa  %xmm15,%xmm12
1620         paddq   %xmm15,%xmm15
1621         pand    %xmm8,%xmm9
1622         pcmpgtd %xmm15,%xmm14
1623         pxor    %xmm9,%xmm15
1624         pshufd  $19,%xmm14,%xmm9
1625         pxor    %xmm14,%xmm14
1626         movdqa  %xmm15,%xmm13
1627         paddq   %xmm15,%xmm15
1628         pand    %xmm8,%xmm9
1629         pcmpgtd %xmm15,%xmm14
1630         pxor    %xmm9,%xmm15
1631         subq    $96,%rdx
1632         jc      L$xts_dec_short
1633
1634         shrl    $1,%eax
1635         subl    $1,%eax
1636         movl    %eax,%r10d
1637         jmp     L$xts_dec_grandloop
1638
1639 .p2align        4
1640 L$xts_dec_grandloop:
1641         pshufd  $19,%xmm14,%xmm9
1642         movdqa  %xmm15,%xmm14
1643         paddq   %xmm15,%xmm15
1644         movdqu  0(%rdi),%xmm2
1645         pand    %xmm8,%xmm9
1646         movdqu  16(%rdi),%xmm3
1647         pxor    %xmm9,%xmm15
1648
1649         movdqu  32(%rdi),%xmm4
1650         pxor    %xmm10,%xmm2
1651         movdqu  48(%rdi),%xmm5
1652         pxor    %xmm11,%xmm3
1653         movdqu  64(%rdi),%xmm6
1654         pxor    %xmm12,%xmm4
1655         movdqu  80(%rdi),%xmm7
1656         leaq    96(%rdi),%rdi
1657         pxor    %xmm13,%xmm5
1658         movups  (%r11),%xmm0
1659         pxor    %xmm14,%xmm6
1660         pxor    %xmm15,%xmm7
1661
1662
1663
1664         movups  16(%r11),%xmm1
1665         pxor    %xmm0,%xmm2
1666         pxor    %xmm0,%xmm3
1667         movdqa  %xmm10,0(%rsp)
1668 .byte   102,15,56,222,209
1669         leaq    32(%r11),%rcx
1670         pxor    %xmm0,%xmm4
1671         movdqa  %xmm11,16(%rsp)
1672 .byte   102,15,56,222,217
1673         pxor    %xmm0,%xmm5
1674         movdqa  %xmm12,32(%rsp)
1675 .byte   102,15,56,222,225
1676         pxor    %xmm0,%xmm6
1677         movdqa  %xmm13,48(%rsp)
1678 .byte   102,15,56,222,233
1679         pxor    %xmm0,%xmm7
1680         movups  (%rcx),%xmm0
1681         decl    %eax
1682         movdqa  %xmm14,64(%rsp)
1683 .byte   102,15,56,222,241
1684         movdqa  %xmm15,80(%rsp)
1685 .byte   102,15,56,222,249
1686         pxor    %xmm14,%xmm14
1687         pcmpgtd %xmm15,%xmm14
1688         jmp     L$xts_dec_loop6_enter
1689
1690 .p2align        4
1691 L$xts_dec_loop6:
1692 .byte   102,15,56,222,209
1693 .byte   102,15,56,222,217
1694         decl    %eax
1695 .byte   102,15,56,222,225
1696 .byte   102,15,56,222,233
1697 .byte   102,15,56,222,241
1698 .byte   102,15,56,222,249
1699 L$xts_dec_loop6_enter:
1700         movups  16(%rcx),%xmm1
1701 .byte   102,15,56,222,208
1702 .byte   102,15,56,222,216
1703         leaq    32(%rcx),%rcx
1704 .byte   102,15,56,222,224
1705 .byte   102,15,56,222,232
1706 .byte   102,15,56,222,240
1707 .byte   102,15,56,222,248
1708         movups  (%rcx),%xmm0
1709         jnz     L$xts_dec_loop6
1710
1711         pshufd  $19,%xmm14,%xmm9
1712         pxor    %xmm14,%xmm14
1713         paddq   %xmm15,%xmm15
1714 .byte   102,15,56,222,209
1715         pand    %xmm8,%xmm9
1716 .byte   102,15,56,222,217
1717         pcmpgtd %xmm15,%xmm14
1718 .byte   102,15,56,222,225
1719         pxor    %xmm9,%xmm15
1720 .byte   102,15,56,222,233
1721 .byte   102,15,56,222,241
1722 .byte   102,15,56,222,249
1723         movups  16(%rcx),%xmm1
1724
1725         pshufd  $19,%xmm14,%xmm9
1726         pxor    %xmm14,%xmm14
1727         movdqa  %xmm15,%xmm10
1728         paddq   %xmm15,%xmm15
1729 .byte   102,15,56,222,208
1730         pand    %xmm8,%xmm9
1731 .byte   102,15,56,222,216
1732         pcmpgtd %xmm15,%xmm14
1733 .byte   102,15,56,222,224
1734         pxor    %xmm9,%xmm15
1735 .byte   102,15,56,222,232
1736 .byte   102,15,56,222,240
1737 .byte   102,15,56,222,248
1738         movups  32(%rcx),%xmm0
1739
1740         pshufd  $19,%xmm14,%xmm9
1741         pxor    %xmm14,%xmm14
1742         movdqa  %xmm15,%xmm11
1743         paddq   %xmm15,%xmm15
1744 .byte   102,15,56,222,209
1745         pand    %xmm8,%xmm9
1746 .byte   102,15,56,222,217
1747         pcmpgtd %xmm15,%xmm14
1748 .byte   102,15,56,222,225
1749         pxor    %xmm9,%xmm15
1750 .byte   102,15,56,222,233
1751 .byte   102,15,56,222,241
1752 .byte   102,15,56,222,249
1753
1754         pshufd  $19,%xmm14,%xmm9
1755         pxor    %xmm14,%xmm14
1756         movdqa  %xmm15,%xmm12
1757         paddq   %xmm15,%xmm15
1758 .byte   102,15,56,223,208
1759         pand    %xmm8,%xmm9
1760 .byte   102,15,56,223,216
1761         pcmpgtd %xmm15,%xmm14
1762 .byte   102,15,56,223,224
1763         pxor    %xmm9,%xmm15
1764 .byte   102,15,56,223,232
1765 .byte   102,15,56,223,240
1766 .byte   102,15,56,223,248
1767
1768         pshufd  $19,%xmm14,%xmm9
1769         pxor    %xmm14,%xmm14
1770         movdqa  %xmm15,%xmm13
1771         paddq   %xmm15,%xmm15
1772         xorps   0(%rsp),%xmm2
1773         pand    %xmm8,%xmm9
1774         xorps   16(%rsp),%xmm3
1775         pcmpgtd %xmm15,%xmm14
1776         pxor    %xmm9,%xmm15
1777
1778         xorps   32(%rsp),%xmm4
1779         movups  %xmm2,0(%rsi)
1780         xorps   48(%rsp),%xmm5
1781         movups  %xmm3,16(%rsi)
1782         xorps   64(%rsp),%xmm6
1783         movups  %xmm4,32(%rsi)
1784         xorps   80(%rsp),%xmm7
1785         movups  %xmm5,48(%rsi)
1786         movl    %r10d,%eax
1787         movups  %xmm6,64(%rsi)
1788         movups  %xmm7,80(%rsi)
1789         leaq    96(%rsi),%rsi
1790         subq    $96,%rdx
1791         jnc     L$xts_dec_grandloop
1792
1793         leal    3(%rax,%rax,1),%eax
1794         movq    %r11,%rcx
1795         movl    %eax,%r10d
1796
1797 L$xts_dec_short:
1798         addq    $96,%rdx
1799         jz      L$xts_dec_done
1800
1801         cmpq    $32,%rdx
1802         jb      L$xts_dec_one
1803         je      L$xts_dec_two
1804
1805         cmpq    $64,%rdx
1806         jb      L$xts_dec_three
1807         je      L$xts_dec_four
1808
1809         pshufd  $19,%xmm14,%xmm9
1810         movdqa  %xmm15,%xmm14
1811         paddq   %xmm15,%xmm15
1812         movdqu  (%rdi),%xmm2
1813         pand    %xmm8,%xmm9
1814         movdqu  16(%rdi),%xmm3
1815         pxor    %xmm9,%xmm15
1816
1817         movdqu  32(%rdi),%xmm4
1818         pxor    %xmm10,%xmm2
1819         movdqu  48(%rdi),%xmm5
1820         pxor    %xmm11,%xmm3
1821         movdqu  64(%rdi),%xmm6
1822         leaq    80(%rdi),%rdi
1823         pxor    %xmm12,%xmm4
1824         pxor    %xmm13,%xmm5
1825         pxor    %xmm14,%xmm6
1826
1827         call    _aesni_decrypt6
1828
1829         xorps   %xmm10,%xmm2
1830         xorps   %xmm11,%xmm3
1831         xorps   %xmm12,%xmm4
1832         movdqu  %xmm2,(%rsi)
1833         xorps   %xmm13,%xmm5
1834         movdqu  %xmm3,16(%rsi)
1835         xorps   %xmm14,%xmm6
1836         movdqu  %xmm4,32(%rsi)
1837         pxor    %xmm14,%xmm14
1838         movdqu  %xmm5,48(%rsi)
1839         pcmpgtd %xmm15,%xmm14
1840         movdqu  %xmm6,64(%rsi)
1841         leaq    80(%rsi),%rsi
1842         pshufd  $19,%xmm14,%xmm11
1843         andq    $15,%r9
1844         jz      L$xts_dec_ret
1845
1846         movdqa  %xmm15,%xmm10
1847         paddq   %xmm15,%xmm15
1848         pand    %xmm8,%xmm11
1849         pxor    %xmm15,%xmm11
1850         jmp     L$xts_dec_done2
1851
1852 .p2align        4
1853 L$xts_dec_one:
1854         movups  (%rdi),%xmm2
1855         leaq    16(%rdi),%rdi
1856         xorps   %xmm10,%xmm2
1857         movups  (%rcx),%xmm0
1858         movups  16(%rcx),%xmm1
1859         leaq    32(%rcx),%rcx
1860         xorps   %xmm0,%xmm2
1861 L$oop_dec1_12:
1862 .byte   102,15,56,222,209
1863         decl    %eax
1864         movups  (%rcx),%xmm1
1865         leaq    16(%rcx),%rcx
1866         jnz     L$oop_dec1_12   
1867 .byte   102,15,56,223,209
1868         xorps   %xmm10,%xmm2
1869         movdqa  %xmm11,%xmm10
1870         movups  %xmm2,(%rsi)
1871         movdqa  %xmm12,%xmm11
1872         leaq    16(%rsi),%rsi
1873         jmp     L$xts_dec_done
1874
1875 .p2align        4
1876 L$xts_dec_two:
1877         movups  (%rdi),%xmm2
1878         movups  16(%rdi),%xmm3
1879         leaq    32(%rdi),%rdi
1880         xorps   %xmm10,%xmm2
1881         xorps   %xmm11,%xmm3
1882
1883         call    _aesni_decrypt3
1884
1885         xorps   %xmm10,%xmm2
1886         movdqa  %xmm12,%xmm10
1887         xorps   %xmm11,%xmm3
1888         movdqa  %xmm13,%xmm11
1889         movups  %xmm2,(%rsi)
1890         movups  %xmm3,16(%rsi)
1891         leaq    32(%rsi),%rsi
1892         jmp     L$xts_dec_done
1893
1894 .p2align        4
1895 L$xts_dec_three:
1896         movups  (%rdi),%xmm2
1897         movups  16(%rdi),%xmm3
1898         movups  32(%rdi),%xmm4
1899         leaq    48(%rdi),%rdi
1900         xorps   %xmm10,%xmm2
1901         xorps   %xmm11,%xmm3
1902         xorps   %xmm12,%xmm4
1903
1904         call    _aesni_decrypt3
1905
1906         xorps   %xmm10,%xmm2
1907         movdqa  %xmm13,%xmm10
1908         xorps   %xmm11,%xmm3
1909         movdqa  %xmm15,%xmm11
1910         xorps   %xmm12,%xmm4
1911         movups  %xmm2,(%rsi)
1912         movups  %xmm3,16(%rsi)
1913         movups  %xmm4,32(%rsi)
1914         leaq    48(%rsi),%rsi
1915         jmp     L$xts_dec_done
1916
1917 .p2align        4
1918 L$xts_dec_four:
1919         pshufd  $19,%xmm14,%xmm9
1920         movdqa  %xmm15,%xmm14
1921         paddq   %xmm15,%xmm15
1922         movups  (%rdi),%xmm2
1923         pand    %xmm8,%xmm9
1924         movups  16(%rdi),%xmm3
1925         pxor    %xmm9,%xmm15
1926
1927         movups  32(%rdi),%xmm4
1928         xorps   %xmm10,%xmm2
1929         movups  48(%rdi),%xmm5
1930         leaq    64(%rdi),%rdi
1931         xorps   %xmm11,%xmm3
1932         xorps   %xmm12,%xmm4
1933         xorps   %xmm13,%xmm5
1934
1935         call    _aesni_decrypt4
1936
1937         xorps   %xmm10,%xmm2
1938         movdqa  %xmm14,%xmm10
1939         xorps   %xmm11,%xmm3
1940         movdqa  %xmm15,%xmm11
1941         xorps   %xmm12,%xmm4
1942         movups  %xmm2,(%rsi)
1943         xorps   %xmm13,%xmm5
1944         movups  %xmm3,16(%rsi)
1945         movups  %xmm4,32(%rsi)
1946         movups  %xmm5,48(%rsi)
1947         leaq    64(%rsi),%rsi
1948         jmp     L$xts_dec_done
1949
1950 .p2align        4
1951 L$xts_dec_done:
1952         andq    $15,%r9
1953         jz      L$xts_dec_ret
1954 L$xts_dec_done2:
1955         movq    %r9,%rdx
1956         movq    %r11,%rcx
1957         movl    %r10d,%eax
1958
1959         movups  (%rdi),%xmm2
1960         xorps   %xmm11,%xmm2
1961         movups  (%rcx),%xmm0
1962         movups  16(%rcx),%xmm1
1963         leaq    32(%rcx),%rcx
1964         xorps   %xmm0,%xmm2
1965 L$oop_dec1_13:
1966 .byte   102,15,56,222,209
1967         decl    %eax
1968         movups  (%rcx),%xmm1
1969         leaq    16(%rcx),%rcx
1970         jnz     L$oop_dec1_13   
1971 .byte   102,15,56,223,209
1972         xorps   %xmm11,%xmm2
1973         movups  %xmm2,(%rsi)
1974
1975 L$xts_dec_steal:
1976         movzbl  16(%rdi),%eax
1977         movzbl  (%rsi),%ecx
1978         leaq    1(%rdi),%rdi
1979         movb    %al,(%rsi)
1980         movb    %cl,16(%rsi)
1981         leaq    1(%rsi),%rsi
1982         subq    $1,%rdx
1983         jnz     L$xts_dec_steal
1984
1985         subq    %r9,%rsi
1986         movq    %r11,%rcx
1987         movl    %r10d,%eax
1988
1989         movups  (%rsi),%xmm2
1990         xorps   %xmm10,%xmm2
1991         movups  (%rcx),%xmm0
1992         movups  16(%rcx),%xmm1
1993         leaq    32(%rcx),%rcx
1994         xorps   %xmm0,%xmm2
1995 L$oop_dec1_14:
1996 .byte   102,15,56,222,209
1997         decl    %eax
1998         movups  (%rcx),%xmm1
1999         leaq    16(%rcx),%rcx
2000         jnz     L$oop_dec1_14   
2001 .byte   102,15,56,223,209
2002         xorps   %xmm10,%xmm2
2003         movups  %xmm2,(%rsi)
2004
2005 L$xts_dec_ret:
2006         leaq    104(%rsp),%rsp
2007 L$xts_dec_epilogue:
2008         .byte   0xf3,0xc3
2009
2010 .globl  _aesni_cbc_encrypt
2011
2012 .p2align        4
2013 _aesni_cbc_encrypt:
2014         testq   %rdx,%rdx
2015         jz      L$cbc_ret
2016
2017         movl    240(%rcx),%r10d
2018         movq    %rcx,%r11
2019         testl   %r9d,%r9d
2020         jz      L$cbc_decrypt
2021
2022         movups  (%r8),%xmm2
2023         movl    %r10d,%eax
2024         cmpq    $16,%rdx
2025         jb      L$cbc_enc_tail
2026         subq    $16,%rdx
2027         jmp     L$cbc_enc_loop
2028 .p2align        4
2029 L$cbc_enc_loop:
2030         movups  (%rdi),%xmm3
2031         leaq    16(%rdi),%rdi
2032
2033         movups  (%rcx),%xmm0
2034         movups  16(%rcx),%xmm1
2035         xorps   %xmm0,%xmm3
2036         leaq    32(%rcx),%rcx
2037         xorps   %xmm3,%xmm2
2038 L$oop_enc1_15:
2039 .byte   102,15,56,220,209
2040         decl    %eax
2041         movups  (%rcx),%xmm1
2042         leaq    16(%rcx),%rcx
2043         jnz     L$oop_enc1_15   
2044 .byte   102,15,56,221,209
2045         movl    %r10d,%eax
2046         movq    %r11,%rcx
2047         movups  %xmm2,0(%rsi)
2048         leaq    16(%rsi),%rsi
2049         subq    $16,%rdx
2050         jnc     L$cbc_enc_loop
2051         addq    $16,%rdx
2052         jnz     L$cbc_enc_tail
2053         movups  %xmm2,(%r8)
2054         jmp     L$cbc_ret
2055
2056 L$cbc_enc_tail:
2057         movq    %rdx,%rcx
2058         xchgq   %rdi,%rsi
2059 .long   0x9066A4F3      
2060         movl    $16,%ecx
2061         subq    %rdx,%rcx
2062         xorl    %eax,%eax
2063 .long   0x9066AAF3      
2064         leaq    -16(%rdi),%rdi
2065         movl    %r10d,%eax
2066         movq    %rdi,%rsi
2067         movq    %r11,%rcx
2068         xorq    %rdx,%rdx
2069         jmp     L$cbc_enc_loop  
2070
2071 .p2align        4
2072 L$cbc_decrypt:
2073         movups  (%r8),%xmm9
2074         movl    %r10d,%eax
2075         cmpq    $112,%rdx
2076         jbe     L$cbc_dec_tail
2077         shrl    $1,%r10d
2078         subq    $112,%rdx
2079         movl    %r10d,%eax
2080         movaps  %xmm9,-24(%rsp)
2081         jmp     L$cbc_dec_loop8_enter
2082 .p2align        4
2083 L$cbc_dec_loop8:
2084         movaps  %xmm0,-24(%rsp)
2085         movups  %xmm9,(%rsi)
2086         leaq    16(%rsi),%rsi
2087 L$cbc_dec_loop8_enter:
2088         movups  (%rcx),%xmm0
2089         movups  (%rdi),%xmm2
2090         movups  16(%rdi),%xmm3
2091         movups  16(%rcx),%xmm1
2092
2093         leaq    32(%rcx),%rcx
2094         movdqu  32(%rdi),%xmm4
2095         xorps   %xmm0,%xmm2
2096         movdqu  48(%rdi),%xmm5
2097         xorps   %xmm0,%xmm3
2098         movdqu  64(%rdi),%xmm6
2099 .byte   102,15,56,222,209
2100         pxor    %xmm0,%xmm4
2101         movdqu  80(%rdi),%xmm7
2102 .byte   102,15,56,222,217
2103         pxor    %xmm0,%xmm5
2104         movdqu  96(%rdi),%xmm8
2105 .byte   102,15,56,222,225
2106         pxor    %xmm0,%xmm6
2107         movdqu  112(%rdi),%xmm9
2108 .byte   102,15,56,222,233
2109         pxor    %xmm0,%xmm7
2110         decl    %eax
2111 .byte   102,15,56,222,241
2112         pxor    %xmm0,%xmm8
2113 .byte   102,15,56,222,249
2114         pxor    %xmm0,%xmm9
2115         movups  (%rcx),%xmm0
2116 .byte   102,68,15,56,222,193
2117 .byte   102,68,15,56,222,201
2118         movups  16(%rcx),%xmm1
2119
2120         call    L$dec_loop8_enter
2121
2122         movups  (%rdi),%xmm1
2123         movups  16(%rdi),%xmm0
2124         xorps   -24(%rsp),%xmm2
2125         xorps   %xmm1,%xmm3
2126         movups  32(%rdi),%xmm1
2127         xorps   %xmm0,%xmm4
2128         movups  48(%rdi),%xmm0
2129         xorps   %xmm1,%xmm5
2130         movups  64(%rdi),%xmm1
2131         xorps   %xmm0,%xmm6
2132         movups  80(%rdi),%xmm0
2133         xorps   %xmm1,%xmm7
2134         movups  96(%rdi),%xmm1
2135         xorps   %xmm0,%xmm8
2136         movups  112(%rdi),%xmm0
2137         xorps   %xmm1,%xmm9
2138         movups  %xmm2,(%rsi)
2139         movups  %xmm3,16(%rsi)
2140         movups  %xmm4,32(%rsi)
2141         movups  %xmm5,48(%rsi)
2142         movl    %r10d,%eax
2143         movups  %xmm6,64(%rsi)
2144         movq    %r11,%rcx
2145         movups  %xmm7,80(%rsi)
2146         leaq    128(%rdi),%rdi
2147         movups  %xmm8,96(%rsi)
2148         leaq    112(%rsi),%rsi
2149         subq    $128,%rdx
2150         ja      L$cbc_dec_loop8
2151
2152         movaps  %xmm9,%xmm2
2153         movaps  %xmm0,%xmm9
2154         addq    $112,%rdx
2155         jle     L$cbc_dec_tail_collected
2156         movups  %xmm2,(%rsi)
2157         leal    1(%r10,%r10,1),%eax
2158         leaq    16(%rsi),%rsi
2159 L$cbc_dec_tail:
2160         movups  (%rdi),%xmm2
2161         movaps  %xmm2,%xmm8
2162         cmpq    $16,%rdx
2163         jbe     L$cbc_dec_one
2164
2165         movups  16(%rdi),%xmm3
2166         movaps  %xmm3,%xmm7
2167         cmpq    $32,%rdx
2168         jbe     L$cbc_dec_two
2169
2170         movups  32(%rdi),%xmm4
2171         movaps  %xmm4,%xmm6
2172         cmpq    $48,%rdx
2173         jbe     L$cbc_dec_three
2174
2175         movups  48(%rdi),%xmm5
2176         cmpq    $64,%rdx
2177         jbe     L$cbc_dec_four
2178
2179         movups  64(%rdi),%xmm6
2180         cmpq    $80,%rdx
2181         jbe     L$cbc_dec_five
2182
2183         movups  80(%rdi),%xmm7
2184         cmpq    $96,%rdx
2185         jbe     L$cbc_dec_six
2186
2187         movups  96(%rdi),%xmm8
2188         movaps  %xmm9,-24(%rsp)
2189         call    _aesni_decrypt8
2190         movups  (%rdi),%xmm1
2191         movups  16(%rdi),%xmm0
2192         xorps   -24(%rsp),%xmm2
2193         xorps   %xmm1,%xmm3
2194         movups  32(%rdi),%xmm1
2195         xorps   %xmm0,%xmm4
2196         movups  48(%rdi),%xmm0
2197         xorps   %xmm1,%xmm5
2198         movups  64(%rdi),%xmm1
2199         xorps   %xmm0,%xmm6
2200         movups  80(%rdi),%xmm0
2201         xorps   %xmm1,%xmm7
2202         movups  96(%rdi),%xmm9
2203         xorps   %xmm0,%xmm8
2204         movups  %xmm2,(%rsi)
2205         movups  %xmm3,16(%rsi)
2206         movups  %xmm4,32(%rsi)
2207         movups  %xmm5,48(%rsi)
2208         movups  %xmm6,64(%rsi)
2209         movups  %xmm7,80(%rsi)
2210         leaq    96(%rsi),%rsi
2211         movaps  %xmm8,%xmm2
2212         subq    $112,%rdx
2213         jmp     L$cbc_dec_tail_collected
2214 .p2align        4
2215 L$cbc_dec_one:
2216         movups  (%rcx),%xmm0
2217         movups  16(%rcx),%xmm1
2218         leaq    32(%rcx),%rcx
2219         xorps   %xmm0,%xmm2
2220 L$oop_dec1_16:
2221 .byte   102,15,56,222,209
2222         decl    %eax
2223         movups  (%rcx),%xmm1
2224         leaq    16(%rcx),%rcx
2225         jnz     L$oop_dec1_16   
2226 .byte   102,15,56,223,209
2227         xorps   %xmm9,%xmm2
2228         movaps  %xmm8,%xmm9
2229         subq    $16,%rdx
2230         jmp     L$cbc_dec_tail_collected
2231 .p2align        4
2232 L$cbc_dec_two:
2233         xorps   %xmm4,%xmm4
2234         call    _aesni_decrypt3
2235         xorps   %xmm9,%xmm2
2236         xorps   %xmm8,%xmm3
2237         movups  %xmm2,(%rsi)
2238         movaps  %xmm7,%xmm9
2239         movaps  %xmm3,%xmm2
2240         leaq    16(%rsi),%rsi
2241         subq    $32,%rdx
2242         jmp     L$cbc_dec_tail_collected
2243 .p2align        4
2244 L$cbc_dec_three:
2245         call    _aesni_decrypt3
2246         xorps   %xmm9,%xmm2
2247         xorps   %xmm8,%xmm3
2248         movups  %xmm2,(%rsi)
2249         xorps   %xmm7,%xmm4
2250         movups  %xmm3,16(%rsi)
2251         movaps  %xmm6,%xmm9
2252         movaps  %xmm4,%xmm2
2253         leaq    32(%rsi),%rsi
2254         subq    $48,%rdx
2255         jmp     L$cbc_dec_tail_collected
2256 .p2align        4
2257 L$cbc_dec_four:
2258         call    _aesni_decrypt4
2259         xorps   %xmm9,%xmm2
2260         movups  48(%rdi),%xmm9
2261         xorps   %xmm8,%xmm3
2262         movups  %xmm2,(%rsi)
2263         xorps   %xmm7,%xmm4
2264         movups  %xmm3,16(%rsi)
2265         xorps   %xmm6,%xmm5
2266         movups  %xmm4,32(%rsi)
2267         movaps  %xmm5,%xmm2
2268         leaq    48(%rsi),%rsi
2269         subq    $64,%rdx
2270         jmp     L$cbc_dec_tail_collected
2271 .p2align        4
2272 L$cbc_dec_five:
2273         xorps   %xmm7,%xmm7
2274         call    _aesni_decrypt6
2275         movups  16(%rdi),%xmm1
2276         movups  32(%rdi),%xmm0
2277         xorps   %xmm9,%xmm2
2278         xorps   %xmm8,%xmm3
2279         xorps   %xmm1,%xmm4
2280         movups  48(%rdi),%xmm1
2281         xorps   %xmm0,%xmm5
2282         movups  64(%rdi),%xmm9
2283         xorps   %xmm1,%xmm6
2284         movups  %xmm2,(%rsi)
2285         movups  %xmm3,16(%rsi)
2286         movups  %xmm4,32(%rsi)
2287         movups  %xmm5,48(%rsi)
2288         leaq    64(%rsi),%rsi
2289         movaps  %xmm6,%xmm2
2290         subq    $80,%rdx
2291         jmp     L$cbc_dec_tail_collected
2292 .p2align        4
2293 L$cbc_dec_six:
2294         call    _aesni_decrypt6
2295         movups  16(%rdi),%xmm1
2296         movups  32(%rdi),%xmm0
2297         xorps   %xmm9,%xmm2
2298         xorps   %xmm8,%xmm3
2299         xorps   %xmm1,%xmm4
2300         movups  48(%rdi),%xmm1
2301         xorps   %xmm0,%xmm5
2302         movups  64(%rdi),%xmm0
2303         xorps   %xmm1,%xmm6
2304         movups  80(%rdi),%xmm9
2305         xorps   %xmm0,%xmm7
2306         movups  %xmm2,(%rsi)
2307         movups  %xmm3,16(%rsi)
2308         movups  %xmm4,32(%rsi)
2309         movups  %xmm5,48(%rsi)
2310         movups  %xmm6,64(%rsi)
2311         leaq    80(%rsi),%rsi
2312         movaps  %xmm7,%xmm2
2313         subq    $96,%rdx
2314         jmp     L$cbc_dec_tail_collected
2315 .p2align        4
2316 L$cbc_dec_tail_collected:
2317         andq    $15,%rdx
2318         movups  %xmm9,(%r8)
2319         jnz     L$cbc_dec_tail_partial
2320         movups  %xmm2,(%rsi)
2321         jmp     L$cbc_dec_ret
2322 .p2align        4
2323 L$cbc_dec_tail_partial:
2324         movaps  %xmm2,-24(%rsp)
2325         movq    $16,%rcx
2326         movq    %rsi,%rdi
2327         subq    %rdx,%rcx
2328         leaq    -24(%rsp),%rsi
2329 .long   0x9066A4F3      
2330
2331 L$cbc_dec_ret:
2332 L$cbc_ret:
2333         .byte   0xf3,0xc3
2334
2335 .globl  _aesni_set_decrypt_key
2336
2337 .p2align        4
2338 _aesni_set_decrypt_key:
2339 .byte   0x48,0x83,0xEC,0x08     
2340         call    __aesni_set_encrypt_key
2341         shll    $4,%esi
2342         testl   %eax,%eax
2343         jnz     L$dec_key_ret
2344         leaq    16(%rdx,%rsi,1),%rdi
2345
2346         movups  (%rdx),%xmm0
2347         movups  (%rdi),%xmm1
2348         movups  %xmm0,(%rdi)
2349         movups  %xmm1,(%rdx)
2350         leaq    16(%rdx),%rdx
2351         leaq    -16(%rdi),%rdi
2352
2353 L$dec_key_inverse:
2354         movups  (%rdx),%xmm0
2355         movups  (%rdi),%xmm1
2356 .byte   102,15,56,219,192
2357 .byte   102,15,56,219,201
2358         leaq    16(%rdx),%rdx
2359         leaq    -16(%rdi),%rdi
2360         movups  %xmm0,16(%rdi)
2361         movups  %xmm1,-16(%rdx)
2362         cmpq    %rdx,%rdi
2363         ja      L$dec_key_inverse
2364
2365         movups  (%rdx),%xmm0
2366 .byte   102,15,56,219,192
2367         movups  %xmm0,(%rdi)
2368 L$dec_key_ret:
2369         addq    $8,%rsp
2370         .byte   0xf3,0xc3
2371 L$SEH_end_set_decrypt_key:
2372
2373 .globl  _aesni_set_encrypt_key
2374
2375 .p2align        4
2376 _aesni_set_encrypt_key:
2377 __aesni_set_encrypt_key:
2378 .byte   0x48,0x83,0xEC,0x08     
2379         movq    $-1,%rax
2380         testq   %rdi,%rdi
2381         jz      L$enc_key_ret
2382         testq   %rdx,%rdx
2383         jz      L$enc_key_ret
2384
2385         movups  (%rdi),%xmm0
2386         xorps   %xmm4,%xmm4
2387         leaq    16(%rdx),%rax
2388         cmpl    $256,%esi
2389         je      L$14rounds
2390         cmpl    $192,%esi
2391         je      L$12rounds
2392         cmpl    $128,%esi
2393         jne     L$bad_keybits
2394
2395 L$10rounds:
2396         movl    $9,%esi
2397         movups  %xmm0,(%rdx)
2398 .byte   102,15,58,223,200,1
2399         call    L$key_expansion_128_cold
2400 .byte   102,15,58,223,200,2
2401         call    L$key_expansion_128
2402 .byte   102,15,58,223,200,4
2403         call    L$key_expansion_128
2404 .byte   102,15,58,223,200,8
2405         call    L$key_expansion_128
2406 .byte   102,15,58,223,200,16
2407         call    L$key_expansion_128
2408 .byte   102,15,58,223,200,32
2409         call    L$key_expansion_128
2410 .byte   102,15,58,223,200,64
2411         call    L$key_expansion_128
2412 .byte   102,15,58,223,200,128
2413         call    L$key_expansion_128
2414 .byte   102,15,58,223,200,27
2415         call    L$key_expansion_128
2416 .byte   102,15,58,223,200,54
2417         call    L$key_expansion_128
2418         movups  %xmm0,(%rax)
2419         movl    %esi,80(%rax)
2420         xorl    %eax,%eax
2421         jmp     L$enc_key_ret
2422
2423 .p2align        4
2424 L$12rounds:
2425         movq    16(%rdi),%xmm2
2426         movl    $11,%esi
2427         movups  %xmm0,(%rdx)
2428 .byte   102,15,58,223,202,1
2429         call    L$key_expansion_192a_cold
2430 .byte   102,15,58,223,202,2
2431         call    L$key_expansion_192b
2432 .byte   102,15,58,223,202,4
2433         call    L$key_expansion_192a
2434 .byte   102,15,58,223,202,8
2435         call    L$key_expansion_192b
2436 .byte   102,15,58,223,202,16
2437         call    L$key_expansion_192a
2438 .byte   102,15,58,223,202,32
2439         call    L$key_expansion_192b
2440 .byte   102,15,58,223,202,64
2441         call    L$key_expansion_192a
2442 .byte   102,15,58,223,202,128
2443         call    L$key_expansion_192b
2444         movups  %xmm0,(%rax)
2445         movl    %esi,48(%rax)
2446         xorq    %rax,%rax
2447         jmp     L$enc_key_ret
2448
2449 .p2align        4
2450 L$14rounds:
2451         movups  16(%rdi),%xmm2
2452         movl    $13,%esi
2453         leaq    16(%rax),%rax
2454         movups  %xmm0,(%rdx)
2455         movups  %xmm2,16(%rdx)
2456 .byte   102,15,58,223,202,1
2457         call    L$key_expansion_256a_cold
2458 .byte   102,15,58,223,200,1
2459         call    L$key_expansion_256b
2460 .byte   102,15,58,223,202,2
2461         call    L$key_expansion_256a
2462 .byte   102,15,58,223,200,2
2463         call    L$key_expansion_256b
2464 .byte   102,15,58,223,202,4
2465         call    L$key_expansion_256a
2466 .byte   102,15,58,223,200,4
2467         call    L$key_expansion_256b
2468 .byte   102,15,58,223,202,8
2469         call    L$key_expansion_256a
2470 .byte   102,15,58,223,200,8
2471         call    L$key_expansion_256b
2472 .byte   102,15,58,223,202,16
2473         call    L$key_expansion_256a
2474 .byte   102,15,58,223,200,16
2475         call    L$key_expansion_256b
2476 .byte   102,15,58,223,202,32
2477         call    L$key_expansion_256a
2478 .byte   102,15,58,223,200,32
2479         call    L$key_expansion_256b
2480 .byte   102,15,58,223,202,64
2481         call    L$key_expansion_256a
2482         movups  %xmm0,(%rax)
2483         movl    %esi,16(%rax)
2484         xorq    %rax,%rax
2485         jmp     L$enc_key_ret
2486
2487 .p2align        4
2488 L$bad_keybits:
2489         movq    $-2,%rax
2490 L$enc_key_ret:
2491         addq    $8,%rsp
2492         .byte   0xf3,0xc3
2493 L$SEH_end_set_encrypt_key:
2494
2495 .p2align        4
2496 L$key_expansion_128:
2497         movups  %xmm0,(%rax)
2498         leaq    16(%rax),%rax
2499 L$key_expansion_128_cold:
2500         shufps  $16,%xmm0,%xmm4
2501         xorps   %xmm4,%xmm0
2502         shufps  $140,%xmm0,%xmm4
2503         xorps   %xmm4,%xmm0
2504         shufps  $255,%xmm1,%xmm1
2505         xorps   %xmm1,%xmm0
2506         .byte   0xf3,0xc3
2507
2508 .p2align        4
2509 L$key_expansion_192a:
2510         movups  %xmm0,(%rax)
2511         leaq    16(%rax),%rax
2512 L$key_expansion_192a_cold:
2513         movaps  %xmm2,%xmm5
2514 L$key_expansion_192b_warm:
2515         shufps  $16,%xmm0,%xmm4
2516         movdqa  %xmm2,%xmm3
2517         xorps   %xmm4,%xmm0
2518         shufps  $140,%xmm0,%xmm4
2519         pslldq  $4,%xmm3
2520         xorps   %xmm4,%xmm0
2521         pshufd  $85,%xmm1,%xmm1
2522         pxor    %xmm3,%xmm2
2523         pxor    %xmm1,%xmm0
2524         pshufd  $255,%xmm0,%xmm3
2525         pxor    %xmm3,%xmm2
2526         .byte   0xf3,0xc3
2527
2528 .p2align        4
2529 L$key_expansion_192b:
2530         movaps  %xmm0,%xmm3
2531         shufps  $68,%xmm0,%xmm5
2532         movups  %xmm5,(%rax)
2533         shufps  $78,%xmm2,%xmm3
2534         movups  %xmm3,16(%rax)
2535         leaq    32(%rax),%rax
2536         jmp     L$key_expansion_192b_warm
2537
2538 .p2align        4
2539 L$key_expansion_256a:
2540         movups  %xmm2,(%rax)
2541         leaq    16(%rax),%rax
2542 L$key_expansion_256a_cold:
2543         shufps  $16,%xmm0,%xmm4
2544         xorps   %xmm4,%xmm0
2545         shufps  $140,%xmm0,%xmm4
2546         xorps   %xmm4,%xmm0
2547         shufps  $255,%xmm1,%xmm1
2548         xorps   %xmm1,%xmm0
2549         .byte   0xf3,0xc3
2550
2551 .p2align        4
2552 L$key_expansion_256b:
2553         movups  %xmm0,(%rax)
2554         leaq    16(%rax),%rax
2555
2556         shufps  $16,%xmm2,%xmm4
2557         xorps   %xmm4,%xmm2
2558         shufps  $140,%xmm2,%xmm4
2559         xorps   %xmm4,%xmm2
2560         shufps  $170,%xmm1,%xmm1
2561         xorps   %xmm1,%xmm2
2562         .byte   0xf3,0xc3
2563
2564
2565 .p2align        6
2566 L$bswap_mask:
2567 .byte   15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
2568 L$increment32:
2569 .long   6,6,6,0
2570 L$increment64:
2571 .long   1,0,0,0
2572 L$xts_magic:
2573 .long   0x87,0,1,0
2574
2575 .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
2576 .p2align        6