]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - secure/lib/libcrypto/amd64/aesni-x86_64.S
Merge OpenSSL 1.1.1b.
[FreeBSD/FreeBSD.git] / secure / lib / libcrypto / amd64 / aesni-x86_64.S
1 /* $FreeBSD$ */
2 /* Do not modify. This file is auto-generated from aesni-x86_64.pl. */
3 .text   
4
5 .globl  aesni_encrypt
6 .type   aesni_encrypt,@function
7 .align  16
8 aesni_encrypt:
9 .cfi_startproc  
10         movups  (%rdi),%xmm2
11         movl    240(%rdx),%eax
12         movups  (%rdx),%xmm0
13         movups  16(%rdx),%xmm1
14         leaq    32(%rdx),%rdx
15         xorps   %xmm0,%xmm2
16 .Loop_enc1_1:
17 .byte   102,15,56,220,209
18         decl    %eax
19         movups  (%rdx),%xmm1
20         leaq    16(%rdx),%rdx
21         jnz     .Loop_enc1_1
22 .byte   102,15,56,221,209
23         pxor    %xmm0,%xmm0
24         pxor    %xmm1,%xmm1
25         movups  %xmm2,(%rsi)
26         pxor    %xmm2,%xmm2
27         .byte   0xf3,0xc3
28 .cfi_endproc    
29 .size   aesni_encrypt,.-aesni_encrypt
30
31 .globl  aesni_decrypt
32 .type   aesni_decrypt,@function
33 .align  16
34 aesni_decrypt:
35 .cfi_startproc  
36         movups  (%rdi),%xmm2
37         movl    240(%rdx),%eax
38         movups  (%rdx),%xmm0
39         movups  16(%rdx),%xmm1
40         leaq    32(%rdx),%rdx
41         xorps   %xmm0,%xmm2
42 .Loop_dec1_2:
43 .byte   102,15,56,222,209
44         decl    %eax
45         movups  (%rdx),%xmm1
46         leaq    16(%rdx),%rdx
47         jnz     .Loop_dec1_2
48 .byte   102,15,56,223,209
49         pxor    %xmm0,%xmm0
50         pxor    %xmm1,%xmm1
51         movups  %xmm2,(%rsi)
52         pxor    %xmm2,%xmm2
53         .byte   0xf3,0xc3
54 .cfi_endproc    
55 .size   aesni_decrypt, .-aesni_decrypt
56 .type   _aesni_encrypt2,@function
57 .align  16
58 _aesni_encrypt2:
59 .cfi_startproc  
60         movups  (%rcx),%xmm0
61         shll    $4,%eax
62         movups  16(%rcx),%xmm1
63         xorps   %xmm0,%xmm2
64         xorps   %xmm0,%xmm3
65         movups  32(%rcx),%xmm0
66         leaq    32(%rcx,%rax,1),%rcx
67         negq    %rax
68         addq    $16,%rax
69
70 .Lenc_loop2:
71 .byte   102,15,56,220,209
72 .byte   102,15,56,220,217
73         movups  (%rcx,%rax,1),%xmm1
74         addq    $32,%rax
75 .byte   102,15,56,220,208
76 .byte   102,15,56,220,216
77         movups  -16(%rcx,%rax,1),%xmm0
78         jnz     .Lenc_loop2
79
80 .byte   102,15,56,220,209
81 .byte   102,15,56,220,217
82 .byte   102,15,56,221,208
83 .byte   102,15,56,221,216
84         .byte   0xf3,0xc3
85 .cfi_endproc    
86 .size   _aesni_encrypt2,.-_aesni_encrypt2
87 .type   _aesni_decrypt2,@function
88 .align  16
89 _aesni_decrypt2:
90 .cfi_startproc  
91         movups  (%rcx),%xmm0
92         shll    $4,%eax
93         movups  16(%rcx),%xmm1
94         xorps   %xmm0,%xmm2
95         xorps   %xmm0,%xmm3
96         movups  32(%rcx),%xmm0
97         leaq    32(%rcx,%rax,1),%rcx
98         negq    %rax
99         addq    $16,%rax
100
101 .Ldec_loop2:
102 .byte   102,15,56,222,209
103 .byte   102,15,56,222,217
104         movups  (%rcx,%rax,1),%xmm1
105         addq    $32,%rax
106 .byte   102,15,56,222,208
107 .byte   102,15,56,222,216
108         movups  -16(%rcx,%rax,1),%xmm0
109         jnz     .Ldec_loop2
110
111 .byte   102,15,56,222,209
112 .byte   102,15,56,222,217
113 .byte   102,15,56,223,208
114 .byte   102,15,56,223,216
115         .byte   0xf3,0xc3
116 .cfi_endproc    
117 .size   _aesni_decrypt2,.-_aesni_decrypt2
118 .type   _aesni_encrypt3,@function
119 .align  16
120 _aesni_encrypt3:
121 .cfi_startproc  
122         movups  (%rcx),%xmm0
123         shll    $4,%eax
124         movups  16(%rcx),%xmm1
125         xorps   %xmm0,%xmm2
126         xorps   %xmm0,%xmm3
127         xorps   %xmm0,%xmm4
128         movups  32(%rcx),%xmm0
129         leaq    32(%rcx,%rax,1),%rcx
130         negq    %rax
131         addq    $16,%rax
132
133 .Lenc_loop3:
134 .byte   102,15,56,220,209
135 .byte   102,15,56,220,217
136 .byte   102,15,56,220,225
137         movups  (%rcx,%rax,1),%xmm1
138         addq    $32,%rax
139 .byte   102,15,56,220,208
140 .byte   102,15,56,220,216
141 .byte   102,15,56,220,224
142         movups  -16(%rcx,%rax,1),%xmm0
143         jnz     .Lenc_loop3
144
145 .byte   102,15,56,220,209
146 .byte   102,15,56,220,217
147 .byte   102,15,56,220,225
148 .byte   102,15,56,221,208
149 .byte   102,15,56,221,216
150 .byte   102,15,56,221,224
151         .byte   0xf3,0xc3
152 .cfi_endproc    
153 .size   _aesni_encrypt3,.-_aesni_encrypt3
154 .type   _aesni_decrypt3,@function
155 .align  16
156 _aesni_decrypt3:
157 .cfi_startproc  
158         movups  (%rcx),%xmm0
159         shll    $4,%eax
160         movups  16(%rcx),%xmm1
161         xorps   %xmm0,%xmm2
162         xorps   %xmm0,%xmm3
163         xorps   %xmm0,%xmm4
164         movups  32(%rcx),%xmm0
165         leaq    32(%rcx,%rax,1),%rcx
166         negq    %rax
167         addq    $16,%rax
168
169 .Ldec_loop3:
170 .byte   102,15,56,222,209
171 .byte   102,15,56,222,217
172 .byte   102,15,56,222,225
173         movups  (%rcx,%rax,1),%xmm1
174         addq    $32,%rax
175 .byte   102,15,56,222,208
176 .byte   102,15,56,222,216
177 .byte   102,15,56,222,224
178         movups  -16(%rcx,%rax,1),%xmm0
179         jnz     .Ldec_loop3
180
181 .byte   102,15,56,222,209
182 .byte   102,15,56,222,217
183 .byte   102,15,56,222,225
184 .byte   102,15,56,223,208
185 .byte   102,15,56,223,216
186 .byte   102,15,56,223,224
187         .byte   0xf3,0xc3
188 .cfi_endproc    
189 .size   _aesni_decrypt3,.-_aesni_decrypt3
190 .type   _aesni_encrypt4,@function
191 .align  16
192 _aesni_encrypt4:
193 .cfi_startproc  
194         movups  (%rcx),%xmm0
195         shll    $4,%eax
196         movups  16(%rcx),%xmm1
197         xorps   %xmm0,%xmm2
198         xorps   %xmm0,%xmm3
199         xorps   %xmm0,%xmm4
200         xorps   %xmm0,%xmm5
201         movups  32(%rcx),%xmm0
202         leaq    32(%rcx,%rax,1),%rcx
203         negq    %rax
204 .byte   0x0f,0x1f,0x00
205         addq    $16,%rax
206
207 .Lenc_loop4:
208 .byte   102,15,56,220,209
209 .byte   102,15,56,220,217
210 .byte   102,15,56,220,225
211 .byte   102,15,56,220,233
212         movups  (%rcx,%rax,1),%xmm1
213         addq    $32,%rax
214 .byte   102,15,56,220,208
215 .byte   102,15,56,220,216
216 .byte   102,15,56,220,224
217 .byte   102,15,56,220,232
218         movups  -16(%rcx,%rax,1),%xmm0
219         jnz     .Lenc_loop4
220
221 .byte   102,15,56,220,209
222 .byte   102,15,56,220,217
223 .byte   102,15,56,220,225
224 .byte   102,15,56,220,233
225 .byte   102,15,56,221,208
226 .byte   102,15,56,221,216
227 .byte   102,15,56,221,224
228 .byte   102,15,56,221,232
229         .byte   0xf3,0xc3
230 .cfi_endproc    
231 .size   _aesni_encrypt4,.-_aesni_encrypt4
232 .type   _aesni_decrypt4,@function
233 .align  16
234 _aesni_decrypt4:
235 .cfi_startproc  
236         movups  (%rcx),%xmm0
237         shll    $4,%eax
238         movups  16(%rcx),%xmm1
239         xorps   %xmm0,%xmm2
240         xorps   %xmm0,%xmm3
241         xorps   %xmm0,%xmm4
242         xorps   %xmm0,%xmm5
243         movups  32(%rcx),%xmm0
244         leaq    32(%rcx,%rax,1),%rcx
245         negq    %rax
246 .byte   0x0f,0x1f,0x00
247         addq    $16,%rax
248
249 .Ldec_loop4:
250 .byte   102,15,56,222,209
251 .byte   102,15,56,222,217
252 .byte   102,15,56,222,225
253 .byte   102,15,56,222,233
254         movups  (%rcx,%rax,1),%xmm1
255         addq    $32,%rax
256 .byte   102,15,56,222,208
257 .byte   102,15,56,222,216
258 .byte   102,15,56,222,224
259 .byte   102,15,56,222,232
260         movups  -16(%rcx,%rax,1),%xmm0
261         jnz     .Ldec_loop4
262
263 .byte   102,15,56,222,209
264 .byte   102,15,56,222,217
265 .byte   102,15,56,222,225
266 .byte   102,15,56,222,233
267 .byte   102,15,56,223,208
268 .byte   102,15,56,223,216
269 .byte   102,15,56,223,224
270 .byte   102,15,56,223,232
271         .byte   0xf3,0xc3
272 .cfi_endproc    
273 .size   _aesni_decrypt4,.-_aesni_decrypt4
274 .type   _aesni_encrypt6,@function
275 .align  16
276 _aesni_encrypt6:
277 .cfi_startproc  
278         movups  (%rcx),%xmm0
279         shll    $4,%eax
280         movups  16(%rcx),%xmm1
281         xorps   %xmm0,%xmm2
282         pxor    %xmm0,%xmm3
283         pxor    %xmm0,%xmm4
284 .byte   102,15,56,220,209
285         leaq    32(%rcx,%rax,1),%rcx
286         negq    %rax
287 .byte   102,15,56,220,217
288         pxor    %xmm0,%xmm5
289         pxor    %xmm0,%xmm6
290 .byte   102,15,56,220,225
291         pxor    %xmm0,%xmm7
292         movups  (%rcx,%rax,1),%xmm0
293         addq    $16,%rax
294         jmp     .Lenc_loop6_enter
295 .align  16
296 .Lenc_loop6:
297 .byte   102,15,56,220,209
298 .byte   102,15,56,220,217
299 .byte   102,15,56,220,225
300 .Lenc_loop6_enter:
301 .byte   102,15,56,220,233
302 .byte   102,15,56,220,241
303 .byte   102,15,56,220,249
304         movups  (%rcx,%rax,1),%xmm1
305         addq    $32,%rax
306 .byte   102,15,56,220,208
307 .byte   102,15,56,220,216
308 .byte   102,15,56,220,224
309 .byte   102,15,56,220,232
310 .byte   102,15,56,220,240
311 .byte   102,15,56,220,248
312         movups  -16(%rcx,%rax,1),%xmm0
313         jnz     .Lenc_loop6
314
315 .byte   102,15,56,220,209
316 .byte   102,15,56,220,217
317 .byte   102,15,56,220,225
318 .byte   102,15,56,220,233
319 .byte   102,15,56,220,241
320 .byte   102,15,56,220,249
321 .byte   102,15,56,221,208
322 .byte   102,15,56,221,216
323 .byte   102,15,56,221,224
324 .byte   102,15,56,221,232
325 .byte   102,15,56,221,240
326 .byte   102,15,56,221,248
327         .byte   0xf3,0xc3
328 .cfi_endproc    
329 .size   _aesni_encrypt6,.-_aesni_encrypt6
330 .type   _aesni_decrypt6,@function
331 .align  16
332 _aesni_decrypt6:
333 .cfi_startproc  
334         movups  (%rcx),%xmm0
335         shll    $4,%eax
336         movups  16(%rcx),%xmm1
337         xorps   %xmm0,%xmm2
338         pxor    %xmm0,%xmm3
339         pxor    %xmm0,%xmm4
340 .byte   102,15,56,222,209
341         leaq    32(%rcx,%rax,1),%rcx
342         negq    %rax
343 .byte   102,15,56,222,217
344         pxor    %xmm0,%xmm5
345         pxor    %xmm0,%xmm6
346 .byte   102,15,56,222,225
347         pxor    %xmm0,%xmm7
348         movups  (%rcx,%rax,1),%xmm0
349         addq    $16,%rax
350         jmp     .Ldec_loop6_enter
351 .align  16
352 .Ldec_loop6:
353 .byte   102,15,56,222,209
354 .byte   102,15,56,222,217
355 .byte   102,15,56,222,225
356 .Ldec_loop6_enter:
357 .byte   102,15,56,222,233
358 .byte   102,15,56,222,241
359 .byte   102,15,56,222,249
360         movups  (%rcx,%rax,1),%xmm1
361         addq    $32,%rax
362 .byte   102,15,56,222,208
363 .byte   102,15,56,222,216
364 .byte   102,15,56,222,224
365 .byte   102,15,56,222,232
366 .byte   102,15,56,222,240
367 .byte   102,15,56,222,248
368         movups  -16(%rcx,%rax,1),%xmm0
369         jnz     .Ldec_loop6
370
371 .byte   102,15,56,222,209
372 .byte   102,15,56,222,217
373 .byte   102,15,56,222,225
374 .byte   102,15,56,222,233
375 .byte   102,15,56,222,241
376 .byte   102,15,56,222,249
377 .byte   102,15,56,223,208
378 .byte   102,15,56,223,216
379 .byte   102,15,56,223,224
380 .byte   102,15,56,223,232
381 .byte   102,15,56,223,240
382 .byte   102,15,56,223,248
383         .byte   0xf3,0xc3
384 .cfi_endproc    
385 .size   _aesni_decrypt6,.-_aesni_decrypt6
386 .type   _aesni_encrypt8,@function
387 .align  16
388 _aesni_encrypt8:
389 .cfi_startproc  
390         movups  (%rcx),%xmm0
391         shll    $4,%eax
392         movups  16(%rcx),%xmm1
393         xorps   %xmm0,%xmm2
394         xorps   %xmm0,%xmm3
395         pxor    %xmm0,%xmm4
396         pxor    %xmm0,%xmm5
397         pxor    %xmm0,%xmm6
398         leaq    32(%rcx,%rax,1),%rcx
399         negq    %rax
400 .byte   102,15,56,220,209
401         pxor    %xmm0,%xmm7
402         pxor    %xmm0,%xmm8
403 .byte   102,15,56,220,217
404         pxor    %xmm0,%xmm9
405         movups  (%rcx,%rax,1),%xmm0
406         addq    $16,%rax
407         jmp     .Lenc_loop8_inner
408 .align  16
409 .Lenc_loop8:
410 .byte   102,15,56,220,209
411 .byte   102,15,56,220,217
412 .Lenc_loop8_inner:
413 .byte   102,15,56,220,225
414 .byte   102,15,56,220,233
415 .byte   102,15,56,220,241
416 .byte   102,15,56,220,249
417 .byte   102,68,15,56,220,193
418 .byte   102,68,15,56,220,201
419 .Lenc_loop8_enter:
420         movups  (%rcx,%rax,1),%xmm1
421         addq    $32,%rax
422 .byte   102,15,56,220,208
423 .byte   102,15,56,220,216
424 .byte   102,15,56,220,224
425 .byte   102,15,56,220,232
426 .byte   102,15,56,220,240
427 .byte   102,15,56,220,248
428 .byte   102,68,15,56,220,192
429 .byte   102,68,15,56,220,200
430         movups  -16(%rcx,%rax,1),%xmm0
431         jnz     .Lenc_loop8
432
433 .byte   102,15,56,220,209
434 .byte   102,15,56,220,217
435 .byte   102,15,56,220,225
436 .byte   102,15,56,220,233
437 .byte   102,15,56,220,241
438 .byte   102,15,56,220,249
439 .byte   102,68,15,56,220,193
440 .byte   102,68,15,56,220,201
441 .byte   102,15,56,221,208
442 .byte   102,15,56,221,216
443 .byte   102,15,56,221,224
444 .byte   102,15,56,221,232
445 .byte   102,15,56,221,240
446 .byte   102,15,56,221,248
447 .byte   102,68,15,56,221,192
448 .byte   102,68,15,56,221,200
449         .byte   0xf3,0xc3
450 .cfi_endproc    
451 .size   _aesni_encrypt8,.-_aesni_encrypt8
452 .type   _aesni_decrypt8,@function
453 .align  16
454 _aesni_decrypt8:
455 .cfi_startproc  
456         movups  (%rcx),%xmm0
457         shll    $4,%eax
458         movups  16(%rcx),%xmm1
459         xorps   %xmm0,%xmm2
460         xorps   %xmm0,%xmm3
461         pxor    %xmm0,%xmm4
462         pxor    %xmm0,%xmm5
463         pxor    %xmm0,%xmm6
464         leaq    32(%rcx,%rax,1),%rcx
465         negq    %rax
466 .byte   102,15,56,222,209
467         pxor    %xmm0,%xmm7
468         pxor    %xmm0,%xmm8
469 .byte   102,15,56,222,217
470         pxor    %xmm0,%xmm9
471         movups  (%rcx,%rax,1),%xmm0
472         addq    $16,%rax
473         jmp     .Ldec_loop8_inner
474 .align  16
475 .Ldec_loop8:
476 .byte   102,15,56,222,209
477 .byte   102,15,56,222,217
478 .Ldec_loop8_inner:
479 .byte   102,15,56,222,225
480 .byte   102,15,56,222,233
481 .byte   102,15,56,222,241
482 .byte   102,15,56,222,249
483 .byte   102,68,15,56,222,193
484 .byte   102,68,15,56,222,201
485 .Ldec_loop8_enter:
486         movups  (%rcx,%rax,1),%xmm1
487         addq    $32,%rax
488 .byte   102,15,56,222,208
489 .byte   102,15,56,222,216
490 .byte   102,15,56,222,224
491 .byte   102,15,56,222,232
492 .byte   102,15,56,222,240
493 .byte   102,15,56,222,248
494 .byte   102,68,15,56,222,192
495 .byte   102,68,15,56,222,200
496         movups  -16(%rcx,%rax,1),%xmm0
497         jnz     .Ldec_loop8
498
499 .byte   102,15,56,222,209
500 .byte   102,15,56,222,217
501 .byte   102,15,56,222,225
502 .byte   102,15,56,222,233
503 .byte   102,15,56,222,241
504 .byte   102,15,56,222,249
505 .byte   102,68,15,56,222,193
506 .byte   102,68,15,56,222,201
507 .byte   102,15,56,223,208
508 .byte   102,15,56,223,216
509 .byte   102,15,56,223,224
510 .byte   102,15,56,223,232
511 .byte   102,15,56,223,240
512 .byte   102,15,56,223,248
513 .byte   102,68,15,56,223,192
514 .byte   102,68,15,56,223,200
515         .byte   0xf3,0xc3
516 .cfi_endproc    
517 .size   _aesni_decrypt8,.-_aesni_decrypt8
518 .globl  aesni_ecb_encrypt
519 .type   aesni_ecb_encrypt,@function
520 .align  16
521 aesni_ecb_encrypt:
522 .cfi_startproc  
523         andq    $-16,%rdx
524         jz      .Lecb_ret
525
526         movl    240(%rcx),%eax
527         movups  (%rcx),%xmm0
528         movq    %rcx,%r11
529         movl    %eax,%r10d
530         testl   %r8d,%r8d
531         jz      .Lecb_decrypt
532
533         cmpq    $0x80,%rdx
534         jb      .Lecb_enc_tail
535
536         movdqu  (%rdi),%xmm2
537         movdqu  16(%rdi),%xmm3
538         movdqu  32(%rdi),%xmm4
539         movdqu  48(%rdi),%xmm5
540         movdqu  64(%rdi),%xmm6
541         movdqu  80(%rdi),%xmm7
542         movdqu  96(%rdi),%xmm8
543         movdqu  112(%rdi),%xmm9
544         leaq    128(%rdi),%rdi
545         subq    $0x80,%rdx
546         jmp     .Lecb_enc_loop8_enter
547 .align  16
548 .Lecb_enc_loop8:
549         movups  %xmm2,(%rsi)
550         movq    %r11,%rcx
551         movdqu  (%rdi),%xmm2
552         movl    %r10d,%eax
553         movups  %xmm3,16(%rsi)
554         movdqu  16(%rdi),%xmm3
555         movups  %xmm4,32(%rsi)
556         movdqu  32(%rdi),%xmm4
557         movups  %xmm5,48(%rsi)
558         movdqu  48(%rdi),%xmm5
559         movups  %xmm6,64(%rsi)
560         movdqu  64(%rdi),%xmm6
561         movups  %xmm7,80(%rsi)
562         movdqu  80(%rdi),%xmm7
563         movups  %xmm8,96(%rsi)
564         movdqu  96(%rdi),%xmm8
565         movups  %xmm9,112(%rsi)
566         leaq    128(%rsi),%rsi
567         movdqu  112(%rdi),%xmm9
568         leaq    128(%rdi),%rdi
569 .Lecb_enc_loop8_enter:
570
571         call    _aesni_encrypt8
572
573         subq    $0x80,%rdx
574         jnc     .Lecb_enc_loop8
575
576         movups  %xmm2,(%rsi)
577         movq    %r11,%rcx
578         movups  %xmm3,16(%rsi)
579         movl    %r10d,%eax
580         movups  %xmm4,32(%rsi)
581         movups  %xmm5,48(%rsi)
582         movups  %xmm6,64(%rsi)
583         movups  %xmm7,80(%rsi)
584         movups  %xmm8,96(%rsi)
585         movups  %xmm9,112(%rsi)
586         leaq    128(%rsi),%rsi
587         addq    $0x80,%rdx
588         jz      .Lecb_ret
589
590 .Lecb_enc_tail:
591         movups  (%rdi),%xmm2
592         cmpq    $0x20,%rdx
593         jb      .Lecb_enc_one
594         movups  16(%rdi),%xmm3
595         je      .Lecb_enc_two
596         movups  32(%rdi),%xmm4
597         cmpq    $0x40,%rdx
598         jb      .Lecb_enc_three
599         movups  48(%rdi),%xmm5
600         je      .Lecb_enc_four
601         movups  64(%rdi),%xmm6
602         cmpq    $0x60,%rdx
603         jb      .Lecb_enc_five
604         movups  80(%rdi),%xmm7
605         je      .Lecb_enc_six
606         movdqu  96(%rdi),%xmm8
607         xorps   %xmm9,%xmm9
608         call    _aesni_encrypt8
609         movups  %xmm2,(%rsi)
610         movups  %xmm3,16(%rsi)
611         movups  %xmm4,32(%rsi)
612         movups  %xmm5,48(%rsi)
613         movups  %xmm6,64(%rsi)
614         movups  %xmm7,80(%rsi)
615         movups  %xmm8,96(%rsi)
616         jmp     .Lecb_ret
617 .align  16
618 .Lecb_enc_one:
619         movups  (%rcx),%xmm0
620         movups  16(%rcx),%xmm1
621         leaq    32(%rcx),%rcx
622         xorps   %xmm0,%xmm2
623 .Loop_enc1_3:
624 .byte   102,15,56,220,209
625         decl    %eax
626         movups  (%rcx),%xmm1
627         leaq    16(%rcx),%rcx
628         jnz     .Loop_enc1_3
629 .byte   102,15,56,221,209
630         movups  %xmm2,(%rsi)
631         jmp     .Lecb_ret
632 .align  16
633 .Lecb_enc_two:
634         call    _aesni_encrypt2
635         movups  %xmm2,(%rsi)
636         movups  %xmm3,16(%rsi)
637         jmp     .Lecb_ret
638 .align  16
639 .Lecb_enc_three:
640         call    _aesni_encrypt3
641         movups  %xmm2,(%rsi)
642         movups  %xmm3,16(%rsi)
643         movups  %xmm4,32(%rsi)
644         jmp     .Lecb_ret
645 .align  16
646 .Lecb_enc_four:
647         call    _aesni_encrypt4
648         movups  %xmm2,(%rsi)
649         movups  %xmm3,16(%rsi)
650         movups  %xmm4,32(%rsi)
651         movups  %xmm5,48(%rsi)
652         jmp     .Lecb_ret
653 .align  16
654 .Lecb_enc_five:
655         xorps   %xmm7,%xmm7
656         call    _aesni_encrypt6
657         movups  %xmm2,(%rsi)
658         movups  %xmm3,16(%rsi)
659         movups  %xmm4,32(%rsi)
660         movups  %xmm5,48(%rsi)
661         movups  %xmm6,64(%rsi)
662         jmp     .Lecb_ret
663 .align  16
664 .Lecb_enc_six:
665         call    _aesni_encrypt6
666         movups  %xmm2,(%rsi)
667         movups  %xmm3,16(%rsi)
668         movups  %xmm4,32(%rsi)
669         movups  %xmm5,48(%rsi)
670         movups  %xmm6,64(%rsi)
671         movups  %xmm7,80(%rsi)
672         jmp     .Lecb_ret
673
674 .align  16
675 .Lecb_decrypt:
676         cmpq    $0x80,%rdx
677         jb      .Lecb_dec_tail
678
679         movdqu  (%rdi),%xmm2
680         movdqu  16(%rdi),%xmm3
681         movdqu  32(%rdi),%xmm4
682         movdqu  48(%rdi),%xmm5
683         movdqu  64(%rdi),%xmm6
684         movdqu  80(%rdi),%xmm7
685         movdqu  96(%rdi),%xmm8
686         movdqu  112(%rdi),%xmm9
687         leaq    128(%rdi),%rdi
688         subq    $0x80,%rdx
689         jmp     .Lecb_dec_loop8_enter
690 .align  16
691 .Lecb_dec_loop8:
692         movups  %xmm2,(%rsi)
693         movq    %r11,%rcx
694         movdqu  (%rdi),%xmm2
695         movl    %r10d,%eax
696         movups  %xmm3,16(%rsi)
697         movdqu  16(%rdi),%xmm3
698         movups  %xmm4,32(%rsi)
699         movdqu  32(%rdi),%xmm4
700         movups  %xmm5,48(%rsi)
701         movdqu  48(%rdi),%xmm5
702         movups  %xmm6,64(%rsi)
703         movdqu  64(%rdi),%xmm6
704         movups  %xmm7,80(%rsi)
705         movdqu  80(%rdi),%xmm7
706         movups  %xmm8,96(%rsi)
707         movdqu  96(%rdi),%xmm8
708         movups  %xmm9,112(%rsi)
709         leaq    128(%rsi),%rsi
710         movdqu  112(%rdi),%xmm9
711         leaq    128(%rdi),%rdi
712 .Lecb_dec_loop8_enter:
713
714         call    _aesni_decrypt8
715
716         movups  (%r11),%xmm0
717         subq    $0x80,%rdx
718         jnc     .Lecb_dec_loop8
719
720         movups  %xmm2,(%rsi)
721         pxor    %xmm2,%xmm2
722         movq    %r11,%rcx
723         movups  %xmm3,16(%rsi)
724         pxor    %xmm3,%xmm3
725         movl    %r10d,%eax
726         movups  %xmm4,32(%rsi)
727         pxor    %xmm4,%xmm4
728         movups  %xmm5,48(%rsi)
729         pxor    %xmm5,%xmm5
730         movups  %xmm6,64(%rsi)
731         pxor    %xmm6,%xmm6
732         movups  %xmm7,80(%rsi)
733         pxor    %xmm7,%xmm7
734         movups  %xmm8,96(%rsi)
735         pxor    %xmm8,%xmm8
736         movups  %xmm9,112(%rsi)
737         pxor    %xmm9,%xmm9
738         leaq    128(%rsi),%rsi
739         addq    $0x80,%rdx
740         jz      .Lecb_ret
741
742 .Lecb_dec_tail:
743         movups  (%rdi),%xmm2
744         cmpq    $0x20,%rdx
745         jb      .Lecb_dec_one
746         movups  16(%rdi),%xmm3
747         je      .Lecb_dec_two
748         movups  32(%rdi),%xmm4
749         cmpq    $0x40,%rdx
750         jb      .Lecb_dec_three
751         movups  48(%rdi),%xmm5
752         je      .Lecb_dec_four
753         movups  64(%rdi),%xmm6
754         cmpq    $0x60,%rdx
755         jb      .Lecb_dec_five
756         movups  80(%rdi),%xmm7
757         je      .Lecb_dec_six
758         movups  96(%rdi),%xmm8
759         movups  (%rcx),%xmm0
760         xorps   %xmm9,%xmm9
761         call    _aesni_decrypt8
762         movups  %xmm2,(%rsi)
763         pxor    %xmm2,%xmm2
764         movups  %xmm3,16(%rsi)
765         pxor    %xmm3,%xmm3
766         movups  %xmm4,32(%rsi)
767         pxor    %xmm4,%xmm4
768         movups  %xmm5,48(%rsi)
769         pxor    %xmm5,%xmm5
770         movups  %xmm6,64(%rsi)
771         pxor    %xmm6,%xmm6
772         movups  %xmm7,80(%rsi)
773         pxor    %xmm7,%xmm7
774         movups  %xmm8,96(%rsi)
775         pxor    %xmm8,%xmm8
776         pxor    %xmm9,%xmm9
777         jmp     .Lecb_ret
778 .align  16
779 .Lecb_dec_one:
780         movups  (%rcx),%xmm0
781         movups  16(%rcx),%xmm1
782         leaq    32(%rcx),%rcx
783         xorps   %xmm0,%xmm2
784 .Loop_dec1_4:
785 .byte   102,15,56,222,209
786         decl    %eax
787         movups  (%rcx),%xmm1
788         leaq    16(%rcx),%rcx
789         jnz     .Loop_dec1_4
790 .byte   102,15,56,223,209
791         movups  %xmm2,(%rsi)
792         pxor    %xmm2,%xmm2
793         jmp     .Lecb_ret
794 .align  16
795 .Lecb_dec_two:
796         call    _aesni_decrypt2
797         movups  %xmm2,(%rsi)
798         pxor    %xmm2,%xmm2
799         movups  %xmm3,16(%rsi)
800         pxor    %xmm3,%xmm3
801         jmp     .Lecb_ret
802 .align  16
803 .Lecb_dec_three:
804         call    _aesni_decrypt3
805         movups  %xmm2,(%rsi)
806         pxor    %xmm2,%xmm2
807         movups  %xmm3,16(%rsi)
808         pxor    %xmm3,%xmm3
809         movups  %xmm4,32(%rsi)
810         pxor    %xmm4,%xmm4
811         jmp     .Lecb_ret
812 .align  16
813 .Lecb_dec_four:
814         call    _aesni_decrypt4
815         movups  %xmm2,(%rsi)
816         pxor    %xmm2,%xmm2
817         movups  %xmm3,16(%rsi)
818         pxor    %xmm3,%xmm3
819         movups  %xmm4,32(%rsi)
820         pxor    %xmm4,%xmm4
821         movups  %xmm5,48(%rsi)
822         pxor    %xmm5,%xmm5
823         jmp     .Lecb_ret
824 .align  16
825 .Lecb_dec_five:
826         xorps   %xmm7,%xmm7
827         call    _aesni_decrypt6
828         movups  %xmm2,(%rsi)
829         pxor    %xmm2,%xmm2
830         movups  %xmm3,16(%rsi)
831         pxor    %xmm3,%xmm3
832         movups  %xmm4,32(%rsi)
833         pxor    %xmm4,%xmm4
834         movups  %xmm5,48(%rsi)
835         pxor    %xmm5,%xmm5
836         movups  %xmm6,64(%rsi)
837         pxor    %xmm6,%xmm6
838         pxor    %xmm7,%xmm7
839         jmp     .Lecb_ret
840 .align  16
841 .Lecb_dec_six:
842         call    _aesni_decrypt6
843         movups  %xmm2,(%rsi)
844         pxor    %xmm2,%xmm2
845         movups  %xmm3,16(%rsi)
846         pxor    %xmm3,%xmm3
847         movups  %xmm4,32(%rsi)
848         pxor    %xmm4,%xmm4
849         movups  %xmm5,48(%rsi)
850         pxor    %xmm5,%xmm5
851         movups  %xmm6,64(%rsi)
852         pxor    %xmm6,%xmm6
853         movups  %xmm7,80(%rsi)
854         pxor    %xmm7,%xmm7
855
856 .Lecb_ret:
857         xorps   %xmm0,%xmm0
858         pxor    %xmm1,%xmm1
859         .byte   0xf3,0xc3
860 .cfi_endproc    
861 .size   aesni_ecb_encrypt,.-aesni_ecb_encrypt
862 .globl  aesni_ccm64_encrypt_blocks
863 .type   aesni_ccm64_encrypt_blocks,@function
864 .align  16
865 aesni_ccm64_encrypt_blocks:
866         movl    240(%rcx),%eax
867         movdqu  (%r8),%xmm6
868         movdqa  .Lincrement64(%rip),%xmm9
869         movdqa  .Lbswap_mask(%rip),%xmm7
870
871         shll    $4,%eax
872         movl    $16,%r10d
873         leaq    0(%rcx),%r11
874         movdqu  (%r9),%xmm3
875         movdqa  %xmm6,%xmm2
876         leaq    32(%rcx,%rax,1),%rcx
877 .byte   102,15,56,0,247
878         subq    %rax,%r10
879         jmp     .Lccm64_enc_outer
880 .align  16
881 .Lccm64_enc_outer:
882         movups  (%r11),%xmm0
883         movq    %r10,%rax
884         movups  (%rdi),%xmm8
885
886         xorps   %xmm0,%xmm2
887         movups  16(%r11),%xmm1
888         xorps   %xmm8,%xmm0
889         xorps   %xmm0,%xmm3
890         movups  32(%r11),%xmm0
891
892 .Lccm64_enc2_loop:
893 .byte   102,15,56,220,209
894 .byte   102,15,56,220,217
895         movups  (%rcx,%rax,1),%xmm1
896         addq    $32,%rax
897 .byte   102,15,56,220,208
898 .byte   102,15,56,220,216
899         movups  -16(%rcx,%rax,1),%xmm0
900         jnz     .Lccm64_enc2_loop
901 .byte   102,15,56,220,209
902 .byte   102,15,56,220,217
903         paddq   %xmm9,%xmm6
904         decq    %rdx
905 .byte   102,15,56,221,208
906 .byte   102,15,56,221,216
907
908         leaq    16(%rdi),%rdi
909         xorps   %xmm2,%xmm8
910         movdqa  %xmm6,%xmm2
911         movups  %xmm8,(%rsi)
912 .byte   102,15,56,0,215
913         leaq    16(%rsi),%rsi
914         jnz     .Lccm64_enc_outer
915
916         pxor    %xmm0,%xmm0
917         pxor    %xmm1,%xmm1
918         pxor    %xmm2,%xmm2
919         movups  %xmm3,(%r9)
920         pxor    %xmm3,%xmm3
921         pxor    %xmm8,%xmm8
922         pxor    %xmm6,%xmm6
923         .byte   0xf3,0xc3
924 .size   aesni_ccm64_encrypt_blocks,.-aesni_ccm64_encrypt_blocks
925 .globl  aesni_ccm64_decrypt_blocks
926 .type   aesni_ccm64_decrypt_blocks,@function
927 .align  16
928 aesni_ccm64_decrypt_blocks:
929         movl    240(%rcx),%eax
930         movups  (%r8),%xmm6
931         movdqu  (%r9),%xmm3
932         movdqa  .Lincrement64(%rip),%xmm9
933         movdqa  .Lbswap_mask(%rip),%xmm7
934
935         movaps  %xmm6,%xmm2
936         movl    %eax,%r10d
937         movq    %rcx,%r11
938 .byte   102,15,56,0,247
939         movups  (%rcx),%xmm0
940         movups  16(%rcx),%xmm1
941         leaq    32(%rcx),%rcx
942         xorps   %xmm0,%xmm2
943 .Loop_enc1_5:
944 .byte   102,15,56,220,209
945         decl    %eax
946         movups  (%rcx),%xmm1
947         leaq    16(%rcx),%rcx
948         jnz     .Loop_enc1_5
949 .byte   102,15,56,221,209
950         shll    $4,%r10d
951         movl    $16,%eax
952         movups  (%rdi),%xmm8
953         paddq   %xmm9,%xmm6
954         leaq    16(%rdi),%rdi
955         subq    %r10,%rax
956         leaq    32(%r11,%r10,1),%rcx
957         movq    %rax,%r10
958         jmp     .Lccm64_dec_outer
959 .align  16
960 .Lccm64_dec_outer:
961         xorps   %xmm2,%xmm8
962         movdqa  %xmm6,%xmm2
963         movups  %xmm8,(%rsi)
964         leaq    16(%rsi),%rsi
965 .byte   102,15,56,0,215
966
967         subq    $1,%rdx
968         jz      .Lccm64_dec_break
969
970         movups  (%r11),%xmm0
971         movq    %r10,%rax
972         movups  16(%r11),%xmm1
973         xorps   %xmm0,%xmm8
974         xorps   %xmm0,%xmm2
975         xorps   %xmm8,%xmm3
976         movups  32(%r11),%xmm0
977         jmp     .Lccm64_dec2_loop
978 .align  16
979 .Lccm64_dec2_loop:
980 .byte   102,15,56,220,209
981 .byte   102,15,56,220,217
982         movups  (%rcx,%rax,1),%xmm1
983         addq    $32,%rax
984 .byte   102,15,56,220,208
985 .byte   102,15,56,220,216
986         movups  -16(%rcx,%rax,1),%xmm0
987         jnz     .Lccm64_dec2_loop
988         movups  (%rdi),%xmm8
989         paddq   %xmm9,%xmm6
990 .byte   102,15,56,220,209
991 .byte   102,15,56,220,217
992 .byte   102,15,56,221,208
993 .byte   102,15,56,221,216
994         leaq    16(%rdi),%rdi
995         jmp     .Lccm64_dec_outer
996
997 .align  16
998 .Lccm64_dec_break:
999
1000         movl    240(%r11),%eax
1001         movups  (%r11),%xmm0
1002         movups  16(%r11),%xmm1
1003         xorps   %xmm0,%xmm8
1004         leaq    32(%r11),%r11
1005         xorps   %xmm8,%xmm3
1006 .Loop_enc1_6:
1007 .byte   102,15,56,220,217
1008         decl    %eax
1009         movups  (%r11),%xmm1
1010         leaq    16(%r11),%r11
1011         jnz     .Loop_enc1_6
1012 .byte   102,15,56,221,217
1013         pxor    %xmm0,%xmm0
1014         pxor    %xmm1,%xmm1
1015         pxor    %xmm2,%xmm2
1016         movups  %xmm3,(%r9)
1017         pxor    %xmm3,%xmm3
1018         pxor    %xmm8,%xmm8
1019         pxor    %xmm6,%xmm6
1020         .byte   0xf3,0xc3
1021 .size   aesni_ccm64_decrypt_blocks,.-aesni_ccm64_decrypt_blocks
1022 .globl  aesni_ctr32_encrypt_blocks
1023 .type   aesni_ctr32_encrypt_blocks,@function
1024 .align  16
1025 aesni_ctr32_encrypt_blocks:
1026 .cfi_startproc  
1027         cmpq    $1,%rdx
1028         jne     .Lctr32_bulk
1029
1030
1031
1032         movups  (%r8),%xmm2
1033         movups  (%rdi),%xmm3
1034         movl    240(%rcx),%edx
1035         movups  (%rcx),%xmm0
1036         movups  16(%rcx),%xmm1
1037         leaq    32(%rcx),%rcx
1038         xorps   %xmm0,%xmm2
1039 .Loop_enc1_7:
1040 .byte   102,15,56,220,209
1041         decl    %edx
1042         movups  (%rcx),%xmm1
1043         leaq    16(%rcx),%rcx
1044         jnz     .Loop_enc1_7
1045 .byte   102,15,56,221,209
1046         pxor    %xmm0,%xmm0
1047         pxor    %xmm1,%xmm1
1048         xorps   %xmm3,%xmm2
1049         pxor    %xmm3,%xmm3
1050         movups  %xmm2,(%rsi)
1051         xorps   %xmm2,%xmm2
1052         jmp     .Lctr32_epilogue
1053
1054 .align  16
1055 .Lctr32_bulk:
1056         leaq    (%rsp),%r11
1057 .cfi_def_cfa_register   %r11
1058         pushq   %rbp
1059 .cfi_offset     %rbp,-16
1060         subq    $128,%rsp
1061         andq    $-16,%rsp
1062
1063
1064
1065
1066         movdqu  (%r8),%xmm2
1067         movdqu  (%rcx),%xmm0
1068         movl    12(%r8),%r8d
1069         pxor    %xmm0,%xmm2
1070         movl    12(%rcx),%ebp
1071         movdqa  %xmm2,0(%rsp)
1072         bswapl  %r8d
1073         movdqa  %xmm2,%xmm3
1074         movdqa  %xmm2,%xmm4
1075         movdqa  %xmm2,%xmm5
1076         movdqa  %xmm2,64(%rsp)
1077         movdqa  %xmm2,80(%rsp)
1078         movdqa  %xmm2,96(%rsp)
1079         movq    %rdx,%r10
1080         movdqa  %xmm2,112(%rsp)
1081
1082         leaq    1(%r8),%rax
1083         leaq    2(%r8),%rdx
1084         bswapl  %eax
1085         bswapl  %edx
1086         xorl    %ebp,%eax
1087         xorl    %ebp,%edx
1088 .byte   102,15,58,34,216,3
1089         leaq    3(%r8),%rax
1090         movdqa  %xmm3,16(%rsp)
1091 .byte   102,15,58,34,226,3
1092         bswapl  %eax
1093         movq    %r10,%rdx
1094         leaq    4(%r8),%r10
1095         movdqa  %xmm4,32(%rsp)
1096         xorl    %ebp,%eax
1097         bswapl  %r10d
1098 .byte   102,15,58,34,232,3
1099         xorl    %ebp,%r10d
1100         movdqa  %xmm5,48(%rsp)
1101         leaq    5(%r8),%r9
1102         movl    %r10d,64+12(%rsp)
1103         bswapl  %r9d
1104         leaq    6(%r8),%r10
1105         movl    240(%rcx),%eax
1106         xorl    %ebp,%r9d
1107         bswapl  %r10d
1108         movl    %r9d,80+12(%rsp)
1109         xorl    %ebp,%r10d
1110         leaq    7(%r8),%r9
1111         movl    %r10d,96+12(%rsp)
1112         bswapl  %r9d
1113         movl    OPENSSL_ia32cap_P+4(%rip),%r10d
1114         xorl    %ebp,%r9d
1115         andl    $71303168,%r10d
1116         movl    %r9d,112+12(%rsp)
1117
1118         movups  16(%rcx),%xmm1
1119
1120         movdqa  64(%rsp),%xmm6
1121         movdqa  80(%rsp),%xmm7
1122
1123         cmpq    $8,%rdx
1124         jb      .Lctr32_tail
1125
1126         subq    $6,%rdx
1127         cmpl    $4194304,%r10d
1128         je      .Lctr32_6x
1129
1130         leaq    128(%rcx),%rcx
1131         subq    $2,%rdx
1132         jmp     .Lctr32_loop8
1133
1134 .align  16
1135 .Lctr32_6x:
1136         shll    $4,%eax
1137         movl    $48,%r10d
1138         bswapl  %ebp
1139         leaq    32(%rcx,%rax,1),%rcx
1140         subq    %rax,%r10
1141         jmp     .Lctr32_loop6
1142
1143 .align  16
1144 .Lctr32_loop6:
1145         addl    $6,%r8d
1146         movups  -48(%rcx,%r10,1),%xmm0
1147 .byte   102,15,56,220,209
1148         movl    %r8d,%eax
1149         xorl    %ebp,%eax
1150 .byte   102,15,56,220,217
1151 .byte   0x0f,0x38,0xf1,0x44,0x24,12
1152         leal    1(%r8),%eax
1153 .byte   102,15,56,220,225
1154         xorl    %ebp,%eax
1155 .byte   0x0f,0x38,0xf1,0x44,0x24,28
1156 .byte   102,15,56,220,233
1157         leal    2(%r8),%eax
1158         xorl    %ebp,%eax
1159 .byte   102,15,56,220,241
1160 .byte   0x0f,0x38,0xf1,0x44,0x24,44
1161         leal    3(%r8),%eax
1162 .byte   102,15,56,220,249
1163         movups  -32(%rcx,%r10,1),%xmm1
1164         xorl    %ebp,%eax
1165
1166 .byte   102,15,56,220,208
1167 .byte   0x0f,0x38,0xf1,0x44,0x24,60
1168         leal    4(%r8),%eax
1169 .byte   102,15,56,220,216
1170         xorl    %ebp,%eax
1171 .byte   0x0f,0x38,0xf1,0x44,0x24,76
1172 .byte   102,15,56,220,224
1173         leal    5(%r8),%eax
1174         xorl    %ebp,%eax
1175 .byte   102,15,56,220,232
1176 .byte   0x0f,0x38,0xf1,0x44,0x24,92
1177         movq    %r10,%rax
1178 .byte   102,15,56,220,240
1179 .byte   102,15,56,220,248
1180         movups  -16(%rcx,%r10,1),%xmm0
1181
1182         call    .Lenc_loop6
1183
1184         movdqu  (%rdi),%xmm8
1185         movdqu  16(%rdi),%xmm9
1186         movdqu  32(%rdi),%xmm10
1187         movdqu  48(%rdi),%xmm11
1188         movdqu  64(%rdi),%xmm12
1189         movdqu  80(%rdi),%xmm13
1190         leaq    96(%rdi),%rdi
1191         movups  -64(%rcx,%r10,1),%xmm1
1192         pxor    %xmm2,%xmm8
1193         movaps  0(%rsp),%xmm2
1194         pxor    %xmm3,%xmm9
1195         movaps  16(%rsp),%xmm3
1196         pxor    %xmm4,%xmm10
1197         movaps  32(%rsp),%xmm4
1198         pxor    %xmm5,%xmm11
1199         movaps  48(%rsp),%xmm5
1200         pxor    %xmm6,%xmm12
1201         movaps  64(%rsp),%xmm6
1202         pxor    %xmm7,%xmm13
1203         movaps  80(%rsp),%xmm7
1204         movdqu  %xmm8,(%rsi)
1205         movdqu  %xmm9,16(%rsi)
1206         movdqu  %xmm10,32(%rsi)
1207         movdqu  %xmm11,48(%rsi)
1208         movdqu  %xmm12,64(%rsi)
1209         movdqu  %xmm13,80(%rsi)
1210         leaq    96(%rsi),%rsi
1211
1212         subq    $6,%rdx
1213         jnc     .Lctr32_loop6
1214
1215         addq    $6,%rdx
1216         jz      .Lctr32_done
1217
1218         leal    -48(%r10),%eax
1219         leaq    -80(%rcx,%r10,1),%rcx
1220         negl    %eax
1221         shrl    $4,%eax
1222         jmp     .Lctr32_tail
1223
1224 .align  32
1225 .Lctr32_loop8:
1226         addl    $8,%r8d
1227         movdqa  96(%rsp),%xmm8
1228 .byte   102,15,56,220,209
1229         movl    %r8d,%r9d
1230         movdqa  112(%rsp),%xmm9
1231 .byte   102,15,56,220,217
1232         bswapl  %r9d
1233         movups  32-128(%rcx),%xmm0
1234 .byte   102,15,56,220,225
1235         xorl    %ebp,%r9d
1236         nop
1237 .byte   102,15,56,220,233
1238         movl    %r9d,0+12(%rsp)
1239         leaq    1(%r8),%r9
1240 .byte   102,15,56,220,241
1241 .byte   102,15,56,220,249
1242 .byte   102,68,15,56,220,193
1243 .byte   102,68,15,56,220,201
1244         movups  48-128(%rcx),%xmm1
1245         bswapl  %r9d
1246 .byte   102,15,56,220,208
1247 .byte   102,15,56,220,216
1248         xorl    %ebp,%r9d
1249 .byte   0x66,0x90
1250 .byte   102,15,56,220,224
1251 .byte   102,15,56,220,232
1252         movl    %r9d,16+12(%rsp)
1253         leaq    2(%r8),%r9
1254 .byte   102,15,56,220,240
1255 .byte   102,15,56,220,248
1256 .byte   102,68,15,56,220,192
1257 .byte   102,68,15,56,220,200
1258         movups  64-128(%rcx),%xmm0
1259         bswapl  %r9d
1260 .byte   102,15,56,220,209
1261 .byte   102,15,56,220,217
1262         xorl    %ebp,%r9d
1263 .byte   0x66,0x90
1264 .byte   102,15,56,220,225
1265 .byte   102,15,56,220,233
1266         movl    %r9d,32+12(%rsp)
1267         leaq    3(%r8),%r9
1268 .byte   102,15,56,220,241
1269 .byte   102,15,56,220,249
1270 .byte   102,68,15,56,220,193
1271 .byte   102,68,15,56,220,201
1272         movups  80-128(%rcx),%xmm1
1273         bswapl  %r9d
1274 .byte   102,15,56,220,208
1275 .byte   102,15,56,220,216
1276         xorl    %ebp,%r9d
1277 .byte   0x66,0x90
1278 .byte   102,15,56,220,224
1279 .byte   102,15,56,220,232
1280         movl    %r9d,48+12(%rsp)
1281         leaq    4(%r8),%r9
1282 .byte   102,15,56,220,240
1283 .byte   102,15,56,220,248
1284 .byte   102,68,15,56,220,192
1285 .byte   102,68,15,56,220,200
1286         movups  96-128(%rcx),%xmm0
1287         bswapl  %r9d
1288 .byte   102,15,56,220,209
1289 .byte   102,15,56,220,217
1290         xorl    %ebp,%r9d
1291 .byte   0x66,0x90
1292 .byte   102,15,56,220,225
1293 .byte   102,15,56,220,233
1294         movl    %r9d,64+12(%rsp)
1295         leaq    5(%r8),%r9
1296 .byte   102,15,56,220,241
1297 .byte   102,15,56,220,249
1298 .byte   102,68,15,56,220,193
1299 .byte   102,68,15,56,220,201
1300         movups  112-128(%rcx),%xmm1
1301         bswapl  %r9d
1302 .byte   102,15,56,220,208
1303 .byte   102,15,56,220,216
1304         xorl    %ebp,%r9d
1305 .byte   0x66,0x90
1306 .byte   102,15,56,220,224
1307 .byte   102,15,56,220,232
1308         movl    %r9d,80+12(%rsp)
1309         leaq    6(%r8),%r9
1310 .byte   102,15,56,220,240
1311 .byte   102,15,56,220,248
1312 .byte   102,68,15,56,220,192
1313 .byte   102,68,15,56,220,200
1314         movups  128-128(%rcx),%xmm0
1315         bswapl  %r9d
1316 .byte   102,15,56,220,209
1317 .byte   102,15,56,220,217
1318         xorl    %ebp,%r9d
1319 .byte   0x66,0x90
1320 .byte   102,15,56,220,225
1321 .byte   102,15,56,220,233
1322         movl    %r9d,96+12(%rsp)
1323         leaq    7(%r8),%r9
1324 .byte   102,15,56,220,241
1325 .byte   102,15,56,220,249
1326 .byte   102,68,15,56,220,193
1327 .byte   102,68,15,56,220,201
1328         movups  144-128(%rcx),%xmm1
1329         bswapl  %r9d
1330 .byte   102,15,56,220,208
1331 .byte   102,15,56,220,216
1332 .byte   102,15,56,220,224
1333         xorl    %ebp,%r9d
1334         movdqu  0(%rdi),%xmm10
1335 .byte   102,15,56,220,232
1336         movl    %r9d,112+12(%rsp)
1337         cmpl    $11,%eax
1338 .byte   102,15,56,220,240
1339 .byte   102,15,56,220,248
1340 .byte   102,68,15,56,220,192
1341 .byte   102,68,15,56,220,200
1342         movups  160-128(%rcx),%xmm0
1343
1344         jb      .Lctr32_enc_done
1345
1346 .byte   102,15,56,220,209
1347 .byte   102,15,56,220,217
1348 .byte   102,15,56,220,225
1349 .byte   102,15,56,220,233
1350 .byte   102,15,56,220,241
1351 .byte   102,15,56,220,249
1352 .byte   102,68,15,56,220,193
1353 .byte   102,68,15,56,220,201
1354         movups  176-128(%rcx),%xmm1
1355
1356 .byte   102,15,56,220,208
1357 .byte   102,15,56,220,216
1358 .byte   102,15,56,220,224
1359 .byte   102,15,56,220,232
1360 .byte   102,15,56,220,240
1361 .byte   102,15,56,220,248
1362 .byte   102,68,15,56,220,192
1363 .byte   102,68,15,56,220,200
1364         movups  192-128(%rcx),%xmm0
1365         je      .Lctr32_enc_done
1366
1367 .byte   102,15,56,220,209
1368 .byte   102,15,56,220,217
1369 .byte   102,15,56,220,225
1370 .byte   102,15,56,220,233
1371 .byte   102,15,56,220,241
1372 .byte   102,15,56,220,249
1373 .byte   102,68,15,56,220,193
1374 .byte   102,68,15,56,220,201
1375         movups  208-128(%rcx),%xmm1
1376
1377 .byte   102,15,56,220,208
1378 .byte   102,15,56,220,216
1379 .byte   102,15,56,220,224
1380 .byte   102,15,56,220,232
1381 .byte   102,15,56,220,240
1382 .byte   102,15,56,220,248
1383 .byte   102,68,15,56,220,192
1384 .byte   102,68,15,56,220,200
1385         movups  224-128(%rcx),%xmm0
1386         jmp     .Lctr32_enc_done
1387
1388 .align  16
1389 .Lctr32_enc_done:
1390         movdqu  16(%rdi),%xmm11
1391         pxor    %xmm0,%xmm10
1392         movdqu  32(%rdi),%xmm12
1393         pxor    %xmm0,%xmm11
1394         movdqu  48(%rdi),%xmm13
1395         pxor    %xmm0,%xmm12
1396         movdqu  64(%rdi),%xmm14
1397         pxor    %xmm0,%xmm13
1398         movdqu  80(%rdi),%xmm15
1399         pxor    %xmm0,%xmm14
1400         pxor    %xmm0,%xmm15
1401 .byte   102,15,56,220,209
1402 .byte   102,15,56,220,217
1403 .byte   102,15,56,220,225
1404 .byte   102,15,56,220,233
1405 .byte   102,15,56,220,241
1406 .byte   102,15,56,220,249
1407 .byte   102,68,15,56,220,193
1408 .byte   102,68,15,56,220,201
1409         movdqu  96(%rdi),%xmm1
1410         leaq    128(%rdi),%rdi
1411
1412 .byte   102,65,15,56,221,210
1413         pxor    %xmm0,%xmm1
1414         movdqu  112-128(%rdi),%xmm10
1415 .byte   102,65,15,56,221,219
1416         pxor    %xmm0,%xmm10
1417         movdqa  0(%rsp),%xmm11
1418 .byte   102,65,15,56,221,228
1419 .byte   102,65,15,56,221,237
1420         movdqa  16(%rsp),%xmm12
1421         movdqa  32(%rsp),%xmm13
1422 .byte   102,65,15,56,221,246
1423 .byte   102,65,15,56,221,255
1424         movdqa  48(%rsp),%xmm14
1425         movdqa  64(%rsp),%xmm15
1426 .byte   102,68,15,56,221,193
1427         movdqa  80(%rsp),%xmm0
1428         movups  16-128(%rcx),%xmm1
1429 .byte   102,69,15,56,221,202
1430
1431         movups  %xmm2,(%rsi)
1432         movdqa  %xmm11,%xmm2
1433         movups  %xmm3,16(%rsi)
1434         movdqa  %xmm12,%xmm3
1435         movups  %xmm4,32(%rsi)
1436         movdqa  %xmm13,%xmm4
1437         movups  %xmm5,48(%rsi)
1438         movdqa  %xmm14,%xmm5
1439         movups  %xmm6,64(%rsi)
1440         movdqa  %xmm15,%xmm6
1441         movups  %xmm7,80(%rsi)
1442         movdqa  %xmm0,%xmm7
1443         movups  %xmm8,96(%rsi)
1444         movups  %xmm9,112(%rsi)
1445         leaq    128(%rsi),%rsi
1446
1447         subq    $8,%rdx
1448         jnc     .Lctr32_loop8
1449
1450         addq    $8,%rdx
1451         jz      .Lctr32_done
1452         leaq    -128(%rcx),%rcx
1453
1454 .Lctr32_tail:
1455
1456
1457         leaq    16(%rcx),%rcx
1458         cmpq    $4,%rdx
1459         jb      .Lctr32_loop3
1460         je      .Lctr32_loop4
1461
1462
1463         shll    $4,%eax
1464         movdqa  96(%rsp),%xmm8
1465         pxor    %xmm9,%xmm9
1466
1467         movups  16(%rcx),%xmm0
1468 .byte   102,15,56,220,209
1469 .byte   102,15,56,220,217
1470         leaq    32-16(%rcx,%rax,1),%rcx
1471         negq    %rax
1472 .byte   102,15,56,220,225
1473         addq    $16,%rax
1474         movups  (%rdi),%xmm10
1475 .byte   102,15,56,220,233
1476 .byte   102,15,56,220,241
1477         movups  16(%rdi),%xmm11
1478         movups  32(%rdi),%xmm12
1479 .byte   102,15,56,220,249
1480 .byte   102,68,15,56,220,193
1481
1482         call    .Lenc_loop8_enter
1483
1484         movdqu  48(%rdi),%xmm13
1485         pxor    %xmm10,%xmm2
1486         movdqu  64(%rdi),%xmm10
1487         pxor    %xmm11,%xmm3
1488         movdqu  %xmm2,(%rsi)
1489         pxor    %xmm12,%xmm4
1490         movdqu  %xmm3,16(%rsi)
1491         pxor    %xmm13,%xmm5
1492         movdqu  %xmm4,32(%rsi)
1493         pxor    %xmm10,%xmm6
1494         movdqu  %xmm5,48(%rsi)
1495         movdqu  %xmm6,64(%rsi)
1496         cmpq    $6,%rdx
1497         jb      .Lctr32_done
1498
1499         movups  80(%rdi),%xmm11
1500         xorps   %xmm11,%xmm7
1501         movups  %xmm7,80(%rsi)
1502         je      .Lctr32_done
1503
1504         movups  96(%rdi),%xmm12
1505         xorps   %xmm12,%xmm8
1506         movups  %xmm8,96(%rsi)
1507         jmp     .Lctr32_done
1508
1509 .align  32
1510 .Lctr32_loop4:
1511 .byte   102,15,56,220,209
1512         leaq    16(%rcx),%rcx
1513         decl    %eax
1514 .byte   102,15,56,220,217
1515 .byte   102,15,56,220,225
1516 .byte   102,15,56,220,233
1517         movups  (%rcx),%xmm1
1518         jnz     .Lctr32_loop4
1519 .byte   102,15,56,221,209
1520 .byte   102,15,56,221,217
1521         movups  (%rdi),%xmm10
1522         movups  16(%rdi),%xmm11
1523 .byte   102,15,56,221,225
1524 .byte   102,15,56,221,233
1525         movups  32(%rdi),%xmm12
1526         movups  48(%rdi),%xmm13
1527
1528         xorps   %xmm10,%xmm2
1529         movups  %xmm2,(%rsi)
1530         xorps   %xmm11,%xmm3
1531         movups  %xmm3,16(%rsi)
1532         pxor    %xmm12,%xmm4
1533         movdqu  %xmm4,32(%rsi)
1534         pxor    %xmm13,%xmm5
1535         movdqu  %xmm5,48(%rsi)
1536         jmp     .Lctr32_done
1537
1538 .align  32
1539 .Lctr32_loop3:
1540 .byte   102,15,56,220,209
1541         leaq    16(%rcx),%rcx
1542         decl    %eax
1543 .byte   102,15,56,220,217
1544 .byte   102,15,56,220,225
1545         movups  (%rcx),%xmm1
1546         jnz     .Lctr32_loop3
1547 .byte   102,15,56,221,209
1548 .byte   102,15,56,221,217
1549 .byte   102,15,56,221,225
1550
1551         movups  (%rdi),%xmm10
1552         xorps   %xmm10,%xmm2
1553         movups  %xmm2,(%rsi)
1554         cmpq    $2,%rdx
1555         jb      .Lctr32_done
1556
1557         movups  16(%rdi),%xmm11
1558         xorps   %xmm11,%xmm3
1559         movups  %xmm3,16(%rsi)
1560         je      .Lctr32_done
1561
1562         movups  32(%rdi),%xmm12
1563         xorps   %xmm12,%xmm4
1564         movups  %xmm4,32(%rsi)
1565
1566 .Lctr32_done:
1567         xorps   %xmm0,%xmm0
1568         xorl    %ebp,%ebp
1569         pxor    %xmm1,%xmm1
1570         pxor    %xmm2,%xmm2
1571         pxor    %xmm3,%xmm3
1572         pxor    %xmm4,%xmm4
1573         pxor    %xmm5,%xmm5
1574         pxor    %xmm6,%xmm6
1575         pxor    %xmm7,%xmm7
1576         movaps  %xmm0,0(%rsp)
1577         pxor    %xmm8,%xmm8
1578         movaps  %xmm0,16(%rsp)
1579         pxor    %xmm9,%xmm9
1580         movaps  %xmm0,32(%rsp)
1581         pxor    %xmm10,%xmm10
1582         movaps  %xmm0,48(%rsp)
1583         pxor    %xmm11,%xmm11
1584         movaps  %xmm0,64(%rsp)
1585         pxor    %xmm12,%xmm12
1586         movaps  %xmm0,80(%rsp)
1587         pxor    %xmm13,%xmm13
1588         movaps  %xmm0,96(%rsp)
1589         pxor    %xmm14,%xmm14
1590         movaps  %xmm0,112(%rsp)
1591         pxor    %xmm15,%xmm15
1592         movq    -8(%r11),%rbp
1593 .cfi_restore    %rbp
1594         leaq    (%r11),%rsp
1595 .cfi_def_cfa_register   %rsp
1596 .Lctr32_epilogue:
1597         .byte   0xf3,0xc3
1598 .cfi_endproc    
1599 .size   aesni_ctr32_encrypt_blocks,.-aesni_ctr32_encrypt_blocks
1600 .globl  aesni_xts_encrypt
1601 .type   aesni_xts_encrypt,@function
1602 .align  16
1603 aesni_xts_encrypt:
1604 .cfi_startproc  
1605         leaq    (%rsp),%r11
1606 .cfi_def_cfa_register   %r11
1607         pushq   %rbp
1608 .cfi_offset     %rbp,-16
1609         subq    $112,%rsp
1610         andq    $-16,%rsp
1611         movups  (%r9),%xmm2
1612         movl    240(%r8),%eax
1613         movl    240(%rcx),%r10d
1614         movups  (%r8),%xmm0
1615         movups  16(%r8),%xmm1
1616         leaq    32(%r8),%r8
1617         xorps   %xmm0,%xmm2
1618 .Loop_enc1_8:
1619 .byte   102,15,56,220,209
1620         decl    %eax
1621         movups  (%r8),%xmm1
1622         leaq    16(%r8),%r8
1623         jnz     .Loop_enc1_8
1624 .byte   102,15,56,221,209
1625         movups  (%rcx),%xmm0
1626         movq    %rcx,%rbp
1627         movl    %r10d,%eax
1628         shll    $4,%r10d
1629         movq    %rdx,%r9
1630         andq    $-16,%rdx
1631
1632         movups  16(%rcx,%r10,1),%xmm1
1633
1634         movdqa  .Lxts_magic(%rip),%xmm8
1635         movdqa  %xmm2,%xmm15
1636         pshufd  $0x5f,%xmm2,%xmm9
1637         pxor    %xmm0,%xmm1
1638         movdqa  %xmm9,%xmm14
1639         paddd   %xmm9,%xmm9
1640         movdqa  %xmm15,%xmm10
1641         psrad   $31,%xmm14
1642         paddq   %xmm15,%xmm15
1643         pand    %xmm8,%xmm14
1644         pxor    %xmm0,%xmm10
1645         pxor    %xmm14,%xmm15
1646         movdqa  %xmm9,%xmm14
1647         paddd   %xmm9,%xmm9
1648         movdqa  %xmm15,%xmm11
1649         psrad   $31,%xmm14
1650         paddq   %xmm15,%xmm15
1651         pand    %xmm8,%xmm14
1652         pxor    %xmm0,%xmm11
1653         pxor    %xmm14,%xmm15
1654         movdqa  %xmm9,%xmm14
1655         paddd   %xmm9,%xmm9
1656         movdqa  %xmm15,%xmm12
1657         psrad   $31,%xmm14
1658         paddq   %xmm15,%xmm15
1659         pand    %xmm8,%xmm14
1660         pxor    %xmm0,%xmm12
1661         pxor    %xmm14,%xmm15
1662         movdqa  %xmm9,%xmm14
1663         paddd   %xmm9,%xmm9
1664         movdqa  %xmm15,%xmm13
1665         psrad   $31,%xmm14
1666         paddq   %xmm15,%xmm15
1667         pand    %xmm8,%xmm14
1668         pxor    %xmm0,%xmm13
1669         pxor    %xmm14,%xmm15
1670         movdqa  %xmm15,%xmm14
1671         psrad   $31,%xmm9
1672         paddq   %xmm15,%xmm15
1673         pand    %xmm8,%xmm9
1674         pxor    %xmm0,%xmm14
1675         pxor    %xmm9,%xmm15
1676         movaps  %xmm1,96(%rsp)
1677
1678         subq    $96,%rdx
1679         jc      .Lxts_enc_short
1680
1681         movl    $16+96,%eax
1682         leaq    32(%rbp,%r10,1),%rcx
1683         subq    %r10,%rax
1684         movups  16(%rbp),%xmm1
1685         movq    %rax,%r10
1686         leaq    .Lxts_magic(%rip),%r8
1687         jmp     .Lxts_enc_grandloop
1688
1689 .align  32
1690 .Lxts_enc_grandloop:
1691         movdqu  0(%rdi),%xmm2
1692         movdqa  %xmm0,%xmm8
1693         movdqu  16(%rdi),%xmm3
1694         pxor    %xmm10,%xmm2
1695         movdqu  32(%rdi),%xmm4
1696         pxor    %xmm11,%xmm3
1697 .byte   102,15,56,220,209
1698         movdqu  48(%rdi),%xmm5
1699         pxor    %xmm12,%xmm4
1700 .byte   102,15,56,220,217
1701         movdqu  64(%rdi),%xmm6
1702         pxor    %xmm13,%xmm5
1703 .byte   102,15,56,220,225
1704         movdqu  80(%rdi),%xmm7
1705         pxor    %xmm15,%xmm8
1706         movdqa  96(%rsp),%xmm9
1707         pxor    %xmm14,%xmm6
1708 .byte   102,15,56,220,233
1709         movups  32(%rbp),%xmm0
1710         leaq    96(%rdi),%rdi
1711         pxor    %xmm8,%xmm7
1712
1713         pxor    %xmm9,%xmm10
1714 .byte   102,15,56,220,241
1715         pxor    %xmm9,%xmm11
1716         movdqa  %xmm10,0(%rsp)
1717 .byte   102,15,56,220,249
1718         movups  48(%rbp),%xmm1
1719         pxor    %xmm9,%xmm12
1720
1721 .byte   102,15,56,220,208
1722         pxor    %xmm9,%xmm13
1723         movdqa  %xmm11,16(%rsp)
1724 .byte   102,15,56,220,216
1725         pxor    %xmm9,%xmm14
1726         movdqa  %xmm12,32(%rsp)
1727 .byte   102,15,56,220,224
1728 .byte   102,15,56,220,232
1729         pxor    %xmm9,%xmm8
1730         movdqa  %xmm14,64(%rsp)
1731 .byte   102,15,56,220,240
1732 .byte   102,15,56,220,248
1733         movups  64(%rbp),%xmm0
1734         movdqa  %xmm8,80(%rsp)
1735         pshufd  $0x5f,%xmm15,%xmm9
1736         jmp     .Lxts_enc_loop6
1737 .align  32
1738 .Lxts_enc_loop6:
1739 .byte   102,15,56,220,209
1740 .byte   102,15,56,220,217
1741 .byte   102,15,56,220,225
1742 .byte   102,15,56,220,233
1743 .byte   102,15,56,220,241
1744 .byte   102,15,56,220,249
1745         movups  -64(%rcx,%rax,1),%xmm1
1746         addq    $32,%rax
1747
1748 .byte   102,15,56,220,208
1749 .byte   102,15,56,220,216
1750 .byte   102,15,56,220,224
1751 .byte   102,15,56,220,232
1752 .byte   102,15,56,220,240
1753 .byte   102,15,56,220,248
1754         movups  -80(%rcx,%rax,1),%xmm0
1755         jnz     .Lxts_enc_loop6
1756
1757         movdqa  (%r8),%xmm8
1758         movdqa  %xmm9,%xmm14
1759         paddd   %xmm9,%xmm9
1760 .byte   102,15,56,220,209
1761         paddq   %xmm15,%xmm15
1762         psrad   $31,%xmm14
1763 .byte   102,15,56,220,217
1764         pand    %xmm8,%xmm14
1765         movups  (%rbp),%xmm10
1766 .byte   102,15,56,220,225
1767 .byte   102,15,56,220,233
1768 .byte   102,15,56,220,241
1769         pxor    %xmm14,%xmm15
1770         movaps  %xmm10,%xmm11
1771 .byte   102,15,56,220,249
1772         movups  -64(%rcx),%xmm1
1773
1774         movdqa  %xmm9,%xmm14
1775 .byte   102,15,56,220,208
1776         paddd   %xmm9,%xmm9
1777         pxor    %xmm15,%xmm10
1778 .byte   102,15,56,220,216
1779         psrad   $31,%xmm14
1780         paddq   %xmm15,%xmm15
1781 .byte   102,15,56,220,224
1782 .byte   102,15,56,220,232
1783         pand    %xmm8,%xmm14
1784         movaps  %xmm11,%xmm12
1785 .byte   102,15,56,220,240
1786         pxor    %xmm14,%xmm15
1787         movdqa  %xmm9,%xmm14
1788 .byte   102,15,56,220,248
1789         movups  -48(%rcx),%xmm0
1790
1791         paddd   %xmm9,%xmm9
1792 .byte   102,15,56,220,209
1793         pxor    %xmm15,%xmm11
1794         psrad   $31,%xmm14
1795 .byte   102,15,56,220,217
1796         paddq   %xmm15,%xmm15
1797         pand    %xmm8,%xmm14
1798 .byte   102,15,56,220,225
1799 .byte   102,15,56,220,233
1800         movdqa  %xmm13,48(%rsp)
1801         pxor    %xmm14,%xmm15
1802 .byte   102,15,56,220,241
1803         movaps  %xmm12,%xmm13
1804         movdqa  %xmm9,%xmm14
1805 .byte   102,15,56,220,249
1806         movups  -32(%rcx),%xmm1
1807
1808         paddd   %xmm9,%xmm9
1809 .byte   102,15,56,220,208
1810         pxor    %xmm15,%xmm12
1811         psrad   $31,%xmm14
1812 .byte   102,15,56,220,216
1813         paddq   %xmm15,%xmm15
1814         pand    %xmm8,%xmm14
1815 .byte   102,15,56,220,224
1816 .byte   102,15,56,220,232
1817 .byte   102,15,56,220,240
1818         pxor    %xmm14,%xmm15
1819         movaps  %xmm13,%xmm14
1820 .byte   102,15,56,220,248
1821
1822         movdqa  %xmm9,%xmm0
1823         paddd   %xmm9,%xmm9
1824 .byte   102,15,56,220,209
1825         pxor    %xmm15,%xmm13
1826         psrad   $31,%xmm0
1827 .byte   102,15,56,220,217
1828         paddq   %xmm15,%xmm15
1829         pand    %xmm8,%xmm0
1830 .byte   102,15,56,220,225
1831 .byte   102,15,56,220,233
1832         pxor    %xmm0,%xmm15
1833         movups  (%rbp),%xmm0
1834 .byte   102,15,56,220,241
1835 .byte   102,15,56,220,249
1836         movups  16(%rbp),%xmm1
1837
1838         pxor    %xmm15,%xmm14
1839 .byte   102,15,56,221,84,36,0
1840         psrad   $31,%xmm9
1841         paddq   %xmm15,%xmm15
1842 .byte   102,15,56,221,92,36,16
1843 .byte   102,15,56,221,100,36,32
1844         pand    %xmm8,%xmm9
1845         movq    %r10,%rax
1846 .byte   102,15,56,221,108,36,48
1847 .byte   102,15,56,221,116,36,64
1848 .byte   102,15,56,221,124,36,80
1849         pxor    %xmm9,%xmm15
1850
1851         leaq    96(%rsi),%rsi
1852         movups  %xmm2,-96(%rsi)
1853         movups  %xmm3,-80(%rsi)
1854         movups  %xmm4,-64(%rsi)
1855         movups  %xmm5,-48(%rsi)
1856         movups  %xmm6,-32(%rsi)
1857         movups  %xmm7,-16(%rsi)
1858         subq    $96,%rdx
1859         jnc     .Lxts_enc_grandloop
1860
1861         movl    $16+96,%eax
1862         subl    %r10d,%eax
1863         movq    %rbp,%rcx
1864         shrl    $4,%eax
1865
1866 .Lxts_enc_short:
1867
1868         movl    %eax,%r10d
1869         pxor    %xmm0,%xmm10
1870         addq    $96,%rdx
1871         jz      .Lxts_enc_done
1872
1873         pxor    %xmm0,%xmm11
1874         cmpq    $0x20,%rdx
1875         jb      .Lxts_enc_one
1876         pxor    %xmm0,%xmm12
1877         je      .Lxts_enc_two
1878
1879         pxor    %xmm0,%xmm13
1880         cmpq    $0x40,%rdx
1881         jb      .Lxts_enc_three
1882         pxor    %xmm0,%xmm14
1883         je      .Lxts_enc_four
1884
1885         movdqu  (%rdi),%xmm2
1886         movdqu  16(%rdi),%xmm3
1887         movdqu  32(%rdi),%xmm4
1888         pxor    %xmm10,%xmm2
1889         movdqu  48(%rdi),%xmm5
1890         pxor    %xmm11,%xmm3
1891         movdqu  64(%rdi),%xmm6
1892         leaq    80(%rdi),%rdi
1893         pxor    %xmm12,%xmm4
1894         pxor    %xmm13,%xmm5
1895         pxor    %xmm14,%xmm6
1896         pxor    %xmm7,%xmm7
1897
1898         call    _aesni_encrypt6
1899
1900         xorps   %xmm10,%xmm2
1901         movdqa  %xmm15,%xmm10
1902         xorps   %xmm11,%xmm3
1903         xorps   %xmm12,%xmm4
1904         movdqu  %xmm2,(%rsi)
1905         xorps   %xmm13,%xmm5
1906         movdqu  %xmm3,16(%rsi)
1907         xorps   %xmm14,%xmm6
1908         movdqu  %xmm4,32(%rsi)
1909         movdqu  %xmm5,48(%rsi)
1910         movdqu  %xmm6,64(%rsi)
1911         leaq    80(%rsi),%rsi
1912         jmp     .Lxts_enc_done
1913
1914 .align  16
1915 .Lxts_enc_one:
1916         movups  (%rdi),%xmm2
1917         leaq    16(%rdi),%rdi
1918         xorps   %xmm10,%xmm2
1919         movups  (%rcx),%xmm0
1920         movups  16(%rcx),%xmm1
1921         leaq    32(%rcx),%rcx
1922         xorps   %xmm0,%xmm2
1923 .Loop_enc1_9:
1924 .byte   102,15,56,220,209
1925         decl    %eax
1926         movups  (%rcx),%xmm1
1927         leaq    16(%rcx),%rcx
1928         jnz     .Loop_enc1_9
1929 .byte   102,15,56,221,209
1930         xorps   %xmm10,%xmm2
1931         movdqa  %xmm11,%xmm10
1932         movups  %xmm2,(%rsi)
1933         leaq    16(%rsi),%rsi
1934         jmp     .Lxts_enc_done
1935
1936 .align  16
1937 .Lxts_enc_two:
1938         movups  (%rdi),%xmm2
1939         movups  16(%rdi),%xmm3
1940         leaq    32(%rdi),%rdi
1941         xorps   %xmm10,%xmm2
1942         xorps   %xmm11,%xmm3
1943
1944         call    _aesni_encrypt2
1945
1946         xorps   %xmm10,%xmm2
1947         movdqa  %xmm12,%xmm10
1948         xorps   %xmm11,%xmm3
1949         movups  %xmm2,(%rsi)
1950         movups  %xmm3,16(%rsi)
1951         leaq    32(%rsi),%rsi
1952         jmp     .Lxts_enc_done
1953
1954 .align  16
1955 .Lxts_enc_three:
1956         movups  (%rdi),%xmm2
1957         movups  16(%rdi),%xmm3
1958         movups  32(%rdi),%xmm4
1959         leaq    48(%rdi),%rdi
1960         xorps   %xmm10,%xmm2
1961         xorps   %xmm11,%xmm3
1962         xorps   %xmm12,%xmm4
1963
1964         call    _aesni_encrypt3
1965
1966         xorps   %xmm10,%xmm2
1967         movdqa  %xmm13,%xmm10
1968         xorps   %xmm11,%xmm3
1969         xorps   %xmm12,%xmm4
1970         movups  %xmm2,(%rsi)
1971         movups  %xmm3,16(%rsi)
1972         movups  %xmm4,32(%rsi)
1973         leaq    48(%rsi),%rsi
1974         jmp     .Lxts_enc_done
1975
1976 .align  16
1977 .Lxts_enc_four:
1978         movups  (%rdi),%xmm2
1979         movups  16(%rdi),%xmm3
1980         movups  32(%rdi),%xmm4
1981         xorps   %xmm10,%xmm2
1982         movups  48(%rdi),%xmm5
1983         leaq    64(%rdi),%rdi
1984         xorps   %xmm11,%xmm3
1985         xorps   %xmm12,%xmm4
1986         xorps   %xmm13,%xmm5
1987
1988         call    _aesni_encrypt4
1989
1990         pxor    %xmm10,%xmm2
1991         movdqa  %xmm14,%xmm10
1992         pxor    %xmm11,%xmm3
1993         pxor    %xmm12,%xmm4
1994         movdqu  %xmm2,(%rsi)
1995         pxor    %xmm13,%xmm5
1996         movdqu  %xmm3,16(%rsi)
1997         movdqu  %xmm4,32(%rsi)
1998         movdqu  %xmm5,48(%rsi)
1999         leaq    64(%rsi),%rsi
2000         jmp     .Lxts_enc_done
2001
2002 .align  16
2003 .Lxts_enc_done:
2004         andq    $15,%r9
2005         jz      .Lxts_enc_ret
2006         movq    %r9,%rdx
2007
2008 .Lxts_enc_steal:
2009         movzbl  (%rdi),%eax
2010         movzbl  -16(%rsi),%ecx
2011         leaq    1(%rdi),%rdi
2012         movb    %al,-16(%rsi)
2013         movb    %cl,0(%rsi)
2014         leaq    1(%rsi),%rsi
2015         subq    $1,%rdx
2016         jnz     .Lxts_enc_steal
2017
2018         subq    %r9,%rsi
2019         movq    %rbp,%rcx
2020         movl    %r10d,%eax
2021
2022         movups  -16(%rsi),%xmm2
2023         xorps   %xmm10,%xmm2
2024         movups  (%rcx),%xmm0
2025         movups  16(%rcx),%xmm1
2026         leaq    32(%rcx),%rcx
2027         xorps   %xmm0,%xmm2
2028 .Loop_enc1_10:
2029 .byte   102,15,56,220,209
2030         decl    %eax
2031         movups  (%rcx),%xmm1
2032         leaq    16(%rcx),%rcx
2033         jnz     .Loop_enc1_10
2034 .byte   102,15,56,221,209
2035         xorps   %xmm10,%xmm2
2036         movups  %xmm2,-16(%rsi)
2037
2038 .Lxts_enc_ret:
2039         xorps   %xmm0,%xmm0
2040         pxor    %xmm1,%xmm1
2041         pxor    %xmm2,%xmm2
2042         pxor    %xmm3,%xmm3
2043         pxor    %xmm4,%xmm4
2044         pxor    %xmm5,%xmm5
2045         pxor    %xmm6,%xmm6
2046         pxor    %xmm7,%xmm7
2047         movaps  %xmm0,0(%rsp)
2048         pxor    %xmm8,%xmm8
2049         movaps  %xmm0,16(%rsp)
2050         pxor    %xmm9,%xmm9
2051         movaps  %xmm0,32(%rsp)
2052         pxor    %xmm10,%xmm10
2053         movaps  %xmm0,48(%rsp)
2054         pxor    %xmm11,%xmm11
2055         movaps  %xmm0,64(%rsp)
2056         pxor    %xmm12,%xmm12
2057         movaps  %xmm0,80(%rsp)
2058         pxor    %xmm13,%xmm13
2059         movaps  %xmm0,96(%rsp)
2060         pxor    %xmm14,%xmm14
2061         pxor    %xmm15,%xmm15
2062         movq    -8(%r11),%rbp
2063 .cfi_restore    %rbp
2064         leaq    (%r11),%rsp
2065 .cfi_def_cfa_register   %rsp
2066 .Lxts_enc_epilogue:
2067         .byte   0xf3,0xc3
2068 .cfi_endproc    
2069 .size   aesni_xts_encrypt,.-aesni_xts_encrypt
2070 .globl  aesni_xts_decrypt
2071 .type   aesni_xts_decrypt,@function
2072 .align  16
2073 aesni_xts_decrypt:
2074 .cfi_startproc  
2075         leaq    (%rsp),%r11
2076 .cfi_def_cfa_register   %r11
2077         pushq   %rbp
2078 .cfi_offset     %rbp,-16
2079         subq    $112,%rsp
2080         andq    $-16,%rsp
2081         movups  (%r9),%xmm2
2082         movl    240(%r8),%eax
2083         movl    240(%rcx),%r10d
2084         movups  (%r8),%xmm0
2085         movups  16(%r8),%xmm1
2086         leaq    32(%r8),%r8
2087         xorps   %xmm0,%xmm2
2088 .Loop_enc1_11:
2089 .byte   102,15,56,220,209
2090         decl    %eax
2091         movups  (%r8),%xmm1
2092         leaq    16(%r8),%r8
2093         jnz     .Loop_enc1_11
2094 .byte   102,15,56,221,209
2095         xorl    %eax,%eax
2096         testq   $15,%rdx
2097         setnz   %al
2098         shlq    $4,%rax
2099         subq    %rax,%rdx
2100
2101         movups  (%rcx),%xmm0
2102         movq    %rcx,%rbp
2103         movl    %r10d,%eax
2104         shll    $4,%r10d
2105         movq    %rdx,%r9
2106         andq    $-16,%rdx
2107
2108         movups  16(%rcx,%r10,1),%xmm1
2109
2110         movdqa  .Lxts_magic(%rip),%xmm8
2111         movdqa  %xmm2,%xmm15
2112         pshufd  $0x5f,%xmm2,%xmm9
2113         pxor    %xmm0,%xmm1
2114         movdqa  %xmm9,%xmm14
2115         paddd   %xmm9,%xmm9
2116         movdqa  %xmm15,%xmm10
2117         psrad   $31,%xmm14
2118         paddq   %xmm15,%xmm15
2119         pand    %xmm8,%xmm14
2120         pxor    %xmm0,%xmm10
2121         pxor    %xmm14,%xmm15
2122         movdqa  %xmm9,%xmm14
2123         paddd   %xmm9,%xmm9
2124         movdqa  %xmm15,%xmm11
2125         psrad   $31,%xmm14
2126         paddq   %xmm15,%xmm15
2127         pand    %xmm8,%xmm14
2128         pxor    %xmm0,%xmm11
2129         pxor    %xmm14,%xmm15
2130         movdqa  %xmm9,%xmm14
2131         paddd   %xmm9,%xmm9
2132         movdqa  %xmm15,%xmm12
2133         psrad   $31,%xmm14
2134         paddq   %xmm15,%xmm15
2135         pand    %xmm8,%xmm14
2136         pxor    %xmm0,%xmm12
2137         pxor    %xmm14,%xmm15
2138         movdqa  %xmm9,%xmm14
2139         paddd   %xmm9,%xmm9
2140         movdqa  %xmm15,%xmm13
2141         psrad   $31,%xmm14
2142         paddq   %xmm15,%xmm15
2143         pand    %xmm8,%xmm14
2144         pxor    %xmm0,%xmm13
2145         pxor    %xmm14,%xmm15
2146         movdqa  %xmm15,%xmm14
2147         psrad   $31,%xmm9
2148         paddq   %xmm15,%xmm15
2149         pand    %xmm8,%xmm9
2150         pxor    %xmm0,%xmm14
2151         pxor    %xmm9,%xmm15
2152         movaps  %xmm1,96(%rsp)
2153
2154         subq    $96,%rdx
2155         jc      .Lxts_dec_short
2156
2157         movl    $16+96,%eax
2158         leaq    32(%rbp,%r10,1),%rcx
2159         subq    %r10,%rax
2160         movups  16(%rbp),%xmm1
2161         movq    %rax,%r10
2162         leaq    .Lxts_magic(%rip),%r8
2163         jmp     .Lxts_dec_grandloop
2164
2165 .align  32
2166 .Lxts_dec_grandloop:
2167         movdqu  0(%rdi),%xmm2
2168         movdqa  %xmm0,%xmm8
2169         movdqu  16(%rdi),%xmm3
2170         pxor    %xmm10,%xmm2
2171         movdqu  32(%rdi),%xmm4
2172         pxor    %xmm11,%xmm3
2173 .byte   102,15,56,222,209
2174         movdqu  48(%rdi),%xmm5
2175         pxor    %xmm12,%xmm4
2176 .byte   102,15,56,222,217
2177         movdqu  64(%rdi),%xmm6
2178         pxor    %xmm13,%xmm5
2179 .byte   102,15,56,222,225
2180         movdqu  80(%rdi),%xmm7
2181         pxor    %xmm15,%xmm8
2182         movdqa  96(%rsp),%xmm9
2183         pxor    %xmm14,%xmm6
2184 .byte   102,15,56,222,233
2185         movups  32(%rbp),%xmm0
2186         leaq    96(%rdi),%rdi
2187         pxor    %xmm8,%xmm7
2188
2189         pxor    %xmm9,%xmm10
2190 .byte   102,15,56,222,241
2191         pxor    %xmm9,%xmm11
2192         movdqa  %xmm10,0(%rsp)
2193 .byte   102,15,56,222,249
2194         movups  48(%rbp),%xmm1
2195         pxor    %xmm9,%xmm12
2196
2197 .byte   102,15,56,222,208
2198         pxor    %xmm9,%xmm13
2199         movdqa  %xmm11,16(%rsp)
2200 .byte   102,15,56,222,216
2201         pxor    %xmm9,%xmm14
2202         movdqa  %xmm12,32(%rsp)
2203 .byte   102,15,56,222,224
2204 .byte   102,15,56,222,232
2205         pxor    %xmm9,%xmm8
2206         movdqa  %xmm14,64(%rsp)
2207 .byte   102,15,56,222,240
2208 .byte   102,15,56,222,248
2209         movups  64(%rbp),%xmm0
2210         movdqa  %xmm8,80(%rsp)
2211         pshufd  $0x5f,%xmm15,%xmm9
2212         jmp     .Lxts_dec_loop6
2213 .align  32
2214 .Lxts_dec_loop6:
2215 .byte   102,15,56,222,209
2216 .byte   102,15,56,222,217
2217 .byte   102,15,56,222,225
2218 .byte   102,15,56,222,233
2219 .byte   102,15,56,222,241
2220 .byte   102,15,56,222,249
2221         movups  -64(%rcx,%rax,1),%xmm1
2222         addq    $32,%rax
2223
2224 .byte   102,15,56,222,208
2225 .byte   102,15,56,222,216
2226 .byte   102,15,56,222,224
2227 .byte   102,15,56,222,232
2228 .byte   102,15,56,222,240
2229 .byte   102,15,56,222,248
2230         movups  -80(%rcx,%rax,1),%xmm0
2231         jnz     .Lxts_dec_loop6
2232
2233         movdqa  (%r8),%xmm8
2234         movdqa  %xmm9,%xmm14
2235         paddd   %xmm9,%xmm9
2236 .byte   102,15,56,222,209
2237         paddq   %xmm15,%xmm15
2238         psrad   $31,%xmm14
2239 .byte   102,15,56,222,217
2240         pand    %xmm8,%xmm14
2241         movups  (%rbp),%xmm10
2242 .byte   102,15,56,222,225
2243 .byte   102,15,56,222,233
2244 .byte   102,15,56,222,241
2245         pxor    %xmm14,%xmm15
2246         movaps  %xmm10,%xmm11
2247 .byte   102,15,56,222,249
2248         movups  -64(%rcx),%xmm1
2249
2250         movdqa  %xmm9,%xmm14
2251 .byte   102,15,56,222,208
2252         paddd   %xmm9,%xmm9
2253         pxor    %xmm15,%xmm10
2254 .byte   102,15,56,222,216
2255         psrad   $31,%xmm14
2256         paddq   %xmm15,%xmm15
2257 .byte   102,15,56,222,224
2258 .byte   102,15,56,222,232
2259         pand    %xmm8,%xmm14
2260         movaps  %xmm11,%xmm12
2261 .byte   102,15,56,222,240
2262         pxor    %xmm14,%xmm15
2263         movdqa  %xmm9,%xmm14
2264 .byte   102,15,56,222,248
2265         movups  -48(%rcx),%xmm0
2266
2267         paddd   %xmm9,%xmm9
2268 .byte   102,15,56,222,209
2269         pxor    %xmm15,%xmm11
2270         psrad   $31,%xmm14
2271 .byte   102,15,56,222,217
2272         paddq   %xmm15,%xmm15
2273         pand    %xmm8,%xmm14
2274 .byte   102,15,56,222,225
2275 .byte   102,15,56,222,233
2276         movdqa  %xmm13,48(%rsp)
2277         pxor    %xmm14,%xmm15
2278 .byte   102,15,56,222,241
2279         movaps  %xmm12,%xmm13
2280         movdqa  %xmm9,%xmm14
2281 .byte   102,15,56,222,249
2282         movups  -32(%rcx),%xmm1
2283
2284         paddd   %xmm9,%xmm9
2285 .byte   102,15,56,222,208
2286         pxor    %xmm15,%xmm12
2287         psrad   $31,%xmm14
2288 .byte   102,15,56,222,216
2289         paddq   %xmm15,%xmm15
2290         pand    %xmm8,%xmm14
2291 .byte   102,15,56,222,224
2292 .byte   102,15,56,222,232
2293 .byte   102,15,56,222,240
2294         pxor    %xmm14,%xmm15
2295         movaps  %xmm13,%xmm14
2296 .byte   102,15,56,222,248
2297
2298         movdqa  %xmm9,%xmm0
2299         paddd   %xmm9,%xmm9
2300 .byte   102,15,56,222,209
2301         pxor    %xmm15,%xmm13
2302         psrad   $31,%xmm0
2303 .byte   102,15,56,222,217
2304         paddq   %xmm15,%xmm15
2305         pand    %xmm8,%xmm0
2306 .byte   102,15,56,222,225
2307 .byte   102,15,56,222,233
2308         pxor    %xmm0,%xmm15
2309         movups  (%rbp),%xmm0
2310 .byte   102,15,56,222,241
2311 .byte   102,15,56,222,249
2312         movups  16(%rbp),%xmm1
2313
2314         pxor    %xmm15,%xmm14
2315 .byte   102,15,56,223,84,36,0
2316         psrad   $31,%xmm9
2317         paddq   %xmm15,%xmm15
2318 .byte   102,15,56,223,92,36,16
2319 .byte   102,15,56,223,100,36,32
2320         pand    %xmm8,%xmm9
2321         movq    %r10,%rax
2322 .byte   102,15,56,223,108,36,48
2323 .byte   102,15,56,223,116,36,64
2324 .byte   102,15,56,223,124,36,80
2325         pxor    %xmm9,%xmm15
2326
2327         leaq    96(%rsi),%rsi
2328         movups  %xmm2,-96(%rsi)
2329         movups  %xmm3,-80(%rsi)
2330         movups  %xmm4,-64(%rsi)
2331         movups  %xmm5,-48(%rsi)
2332         movups  %xmm6,-32(%rsi)
2333         movups  %xmm7,-16(%rsi)
2334         subq    $96,%rdx
2335         jnc     .Lxts_dec_grandloop
2336
2337         movl    $16+96,%eax
2338         subl    %r10d,%eax
2339         movq    %rbp,%rcx
2340         shrl    $4,%eax
2341
2342 .Lxts_dec_short:
2343
2344         movl    %eax,%r10d
2345         pxor    %xmm0,%xmm10
2346         pxor    %xmm0,%xmm11
2347         addq    $96,%rdx
2348         jz      .Lxts_dec_done
2349
2350         pxor    %xmm0,%xmm12
2351         cmpq    $0x20,%rdx
2352         jb      .Lxts_dec_one
2353         pxor    %xmm0,%xmm13
2354         je      .Lxts_dec_two
2355
2356         pxor    %xmm0,%xmm14
2357         cmpq    $0x40,%rdx
2358         jb      .Lxts_dec_three
2359         je      .Lxts_dec_four
2360
2361         movdqu  (%rdi),%xmm2
2362         movdqu  16(%rdi),%xmm3
2363         movdqu  32(%rdi),%xmm4
2364         pxor    %xmm10,%xmm2
2365         movdqu  48(%rdi),%xmm5
2366         pxor    %xmm11,%xmm3
2367         movdqu  64(%rdi),%xmm6
2368         leaq    80(%rdi),%rdi
2369         pxor    %xmm12,%xmm4
2370         pxor    %xmm13,%xmm5
2371         pxor    %xmm14,%xmm6
2372
2373         call    _aesni_decrypt6
2374
2375         xorps   %xmm10,%xmm2
2376         xorps   %xmm11,%xmm3
2377         xorps   %xmm12,%xmm4
2378         movdqu  %xmm2,(%rsi)
2379         xorps   %xmm13,%xmm5
2380         movdqu  %xmm3,16(%rsi)
2381         xorps   %xmm14,%xmm6
2382         movdqu  %xmm4,32(%rsi)
2383         pxor    %xmm14,%xmm14
2384         movdqu  %xmm5,48(%rsi)
2385         pcmpgtd %xmm15,%xmm14
2386         movdqu  %xmm6,64(%rsi)
2387         leaq    80(%rsi),%rsi
2388         pshufd  $0x13,%xmm14,%xmm11
2389         andq    $15,%r9
2390         jz      .Lxts_dec_ret
2391
2392         movdqa  %xmm15,%xmm10
2393         paddq   %xmm15,%xmm15
2394         pand    %xmm8,%xmm11
2395         pxor    %xmm15,%xmm11
2396         jmp     .Lxts_dec_done2
2397
2398 .align  16
2399 .Lxts_dec_one:
2400         movups  (%rdi),%xmm2
2401         leaq    16(%rdi),%rdi
2402         xorps   %xmm10,%xmm2
2403         movups  (%rcx),%xmm0
2404         movups  16(%rcx),%xmm1
2405         leaq    32(%rcx),%rcx
2406         xorps   %xmm0,%xmm2
2407 .Loop_dec1_12:
2408 .byte   102,15,56,222,209
2409         decl    %eax
2410         movups  (%rcx),%xmm1
2411         leaq    16(%rcx),%rcx
2412         jnz     .Loop_dec1_12
2413 .byte   102,15,56,223,209
2414         xorps   %xmm10,%xmm2
2415         movdqa  %xmm11,%xmm10
2416         movups  %xmm2,(%rsi)
2417         movdqa  %xmm12,%xmm11
2418         leaq    16(%rsi),%rsi
2419         jmp     .Lxts_dec_done
2420
2421 .align  16
2422 .Lxts_dec_two:
2423         movups  (%rdi),%xmm2
2424         movups  16(%rdi),%xmm3
2425         leaq    32(%rdi),%rdi
2426         xorps   %xmm10,%xmm2
2427         xorps   %xmm11,%xmm3
2428
2429         call    _aesni_decrypt2
2430
2431         xorps   %xmm10,%xmm2
2432         movdqa  %xmm12,%xmm10
2433         xorps   %xmm11,%xmm3
2434         movdqa  %xmm13,%xmm11
2435         movups  %xmm2,(%rsi)
2436         movups  %xmm3,16(%rsi)
2437         leaq    32(%rsi),%rsi
2438         jmp     .Lxts_dec_done
2439
2440 .align  16
2441 .Lxts_dec_three:
2442         movups  (%rdi),%xmm2
2443         movups  16(%rdi),%xmm3
2444         movups  32(%rdi),%xmm4
2445         leaq    48(%rdi),%rdi
2446         xorps   %xmm10,%xmm2
2447         xorps   %xmm11,%xmm3
2448         xorps   %xmm12,%xmm4
2449
2450         call    _aesni_decrypt3
2451
2452         xorps   %xmm10,%xmm2
2453         movdqa  %xmm13,%xmm10
2454         xorps   %xmm11,%xmm3
2455         movdqa  %xmm14,%xmm11
2456         xorps   %xmm12,%xmm4
2457         movups  %xmm2,(%rsi)
2458         movups  %xmm3,16(%rsi)
2459         movups  %xmm4,32(%rsi)
2460         leaq    48(%rsi),%rsi
2461         jmp     .Lxts_dec_done
2462
2463 .align  16
2464 .Lxts_dec_four:
2465         movups  (%rdi),%xmm2
2466         movups  16(%rdi),%xmm3
2467         movups  32(%rdi),%xmm4
2468         xorps   %xmm10,%xmm2
2469         movups  48(%rdi),%xmm5
2470         leaq    64(%rdi),%rdi
2471         xorps   %xmm11,%xmm3
2472         xorps   %xmm12,%xmm4
2473         xorps   %xmm13,%xmm5
2474
2475         call    _aesni_decrypt4
2476
2477         pxor    %xmm10,%xmm2
2478         movdqa  %xmm14,%xmm10
2479         pxor    %xmm11,%xmm3
2480         movdqa  %xmm15,%xmm11
2481         pxor    %xmm12,%xmm4
2482         movdqu  %xmm2,(%rsi)
2483         pxor    %xmm13,%xmm5
2484         movdqu  %xmm3,16(%rsi)
2485         movdqu  %xmm4,32(%rsi)
2486         movdqu  %xmm5,48(%rsi)
2487         leaq    64(%rsi),%rsi
2488         jmp     .Lxts_dec_done
2489
2490 .align  16
2491 .Lxts_dec_done:
2492         andq    $15,%r9
2493         jz      .Lxts_dec_ret
2494 .Lxts_dec_done2:
2495         movq    %r9,%rdx
2496         movq    %rbp,%rcx
2497         movl    %r10d,%eax
2498
2499         movups  (%rdi),%xmm2
2500         xorps   %xmm11,%xmm2
2501         movups  (%rcx),%xmm0
2502         movups  16(%rcx),%xmm1
2503         leaq    32(%rcx),%rcx
2504         xorps   %xmm0,%xmm2
2505 .Loop_dec1_13:
2506 .byte   102,15,56,222,209
2507         decl    %eax
2508         movups  (%rcx),%xmm1
2509         leaq    16(%rcx),%rcx
2510         jnz     .Loop_dec1_13
2511 .byte   102,15,56,223,209
2512         xorps   %xmm11,%xmm2
2513         movups  %xmm2,(%rsi)
2514
2515 .Lxts_dec_steal:
2516         movzbl  16(%rdi),%eax
2517         movzbl  (%rsi),%ecx
2518         leaq    1(%rdi),%rdi
2519         movb    %al,(%rsi)
2520         movb    %cl,16(%rsi)
2521         leaq    1(%rsi),%rsi
2522         subq    $1,%rdx
2523         jnz     .Lxts_dec_steal
2524
2525         subq    %r9,%rsi
2526         movq    %rbp,%rcx
2527         movl    %r10d,%eax
2528
2529         movups  (%rsi),%xmm2
2530         xorps   %xmm10,%xmm2
2531         movups  (%rcx),%xmm0
2532         movups  16(%rcx),%xmm1
2533         leaq    32(%rcx),%rcx
2534         xorps   %xmm0,%xmm2
2535 .Loop_dec1_14:
2536 .byte   102,15,56,222,209
2537         decl    %eax
2538         movups  (%rcx),%xmm1
2539         leaq    16(%rcx),%rcx
2540         jnz     .Loop_dec1_14
2541 .byte   102,15,56,223,209
2542         xorps   %xmm10,%xmm2
2543         movups  %xmm2,(%rsi)
2544
2545 .Lxts_dec_ret:
2546         xorps   %xmm0,%xmm0
2547         pxor    %xmm1,%xmm1
2548         pxor    %xmm2,%xmm2
2549         pxor    %xmm3,%xmm3
2550         pxor    %xmm4,%xmm4
2551         pxor    %xmm5,%xmm5
2552         pxor    %xmm6,%xmm6
2553         pxor    %xmm7,%xmm7
2554         movaps  %xmm0,0(%rsp)
2555         pxor    %xmm8,%xmm8
2556         movaps  %xmm0,16(%rsp)
2557         pxor    %xmm9,%xmm9
2558         movaps  %xmm0,32(%rsp)
2559         pxor    %xmm10,%xmm10
2560         movaps  %xmm0,48(%rsp)
2561         pxor    %xmm11,%xmm11
2562         movaps  %xmm0,64(%rsp)
2563         pxor    %xmm12,%xmm12
2564         movaps  %xmm0,80(%rsp)
2565         pxor    %xmm13,%xmm13
2566         movaps  %xmm0,96(%rsp)
2567         pxor    %xmm14,%xmm14
2568         pxor    %xmm15,%xmm15
2569         movq    -8(%r11),%rbp
2570 .cfi_restore    %rbp
2571         leaq    (%r11),%rsp
2572 .cfi_def_cfa_register   %rsp
2573 .Lxts_dec_epilogue:
2574         .byte   0xf3,0xc3
2575 .cfi_endproc    
2576 .size   aesni_xts_decrypt,.-aesni_xts_decrypt
2577 .globl  aesni_ocb_encrypt
2578 .type   aesni_ocb_encrypt,@function
2579 .align  32
2580 aesni_ocb_encrypt:
2581 .cfi_startproc  
2582         leaq    (%rsp),%rax
2583         pushq   %rbx
2584 .cfi_adjust_cfa_offset  8
2585 .cfi_offset     %rbx,-16
2586         pushq   %rbp
2587 .cfi_adjust_cfa_offset  8
2588 .cfi_offset     %rbp,-24
2589         pushq   %r12
2590 .cfi_adjust_cfa_offset  8
2591 .cfi_offset     %r12,-32
2592         pushq   %r13
2593 .cfi_adjust_cfa_offset  8
2594 .cfi_offset     %r13,-40
2595         pushq   %r14
2596 .cfi_adjust_cfa_offset  8
2597 .cfi_offset     %r14,-48
2598         movq    8(%rax),%rbx
2599         movq    8+8(%rax),%rbp
2600
2601         movl    240(%rcx),%r10d
2602         movq    %rcx,%r11
2603         shll    $4,%r10d
2604         movups  (%rcx),%xmm9
2605         movups  16(%rcx,%r10,1),%xmm1
2606
2607         movdqu  (%r9),%xmm15
2608         pxor    %xmm1,%xmm9
2609         pxor    %xmm1,%xmm15
2610
2611         movl    $16+32,%eax
2612         leaq    32(%r11,%r10,1),%rcx
2613         movups  16(%r11),%xmm1
2614         subq    %r10,%rax
2615         movq    %rax,%r10
2616
2617         movdqu  (%rbx),%xmm10
2618         movdqu  (%rbp),%xmm8
2619
2620         testq   $1,%r8
2621         jnz     .Locb_enc_odd
2622
2623         bsfq    %r8,%r12
2624         addq    $1,%r8
2625         shlq    $4,%r12
2626         movdqu  (%rbx,%r12,1),%xmm7
2627         movdqu  (%rdi),%xmm2
2628         leaq    16(%rdi),%rdi
2629
2630         call    __ocb_encrypt1
2631
2632         movdqa  %xmm7,%xmm15
2633         movups  %xmm2,(%rsi)
2634         leaq    16(%rsi),%rsi
2635         subq    $1,%rdx
2636         jz      .Locb_enc_done
2637
2638 .Locb_enc_odd:
2639         leaq    1(%r8),%r12
2640         leaq    3(%r8),%r13
2641         leaq    5(%r8),%r14
2642         leaq    6(%r8),%r8
2643         bsfq    %r12,%r12
2644         bsfq    %r13,%r13
2645         bsfq    %r14,%r14
2646         shlq    $4,%r12
2647         shlq    $4,%r13
2648         shlq    $4,%r14
2649
2650         subq    $6,%rdx
2651         jc      .Locb_enc_short
2652         jmp     .Locb_enc_grandloop
2653
2654 .align  32
2655 .Locb_enc_grandloop:
2656         movdqu  0(%rdi),%xmm2
2657         movdqu  16(%rdi),%xmm3
2658         movdqu  32(%rdi),%xmm4
2659         movdqu  48(%rdi),%xmm5
2660         movdqu  64(%rdi),%xmm6
2661         movdqu  80(%rdi),%xmm7
2662         leaq    96(%rdi),%rdi
2663
2664         call    __ocb_encrypt6
2665
2666         movups  %xmm2,0(%rsi)
2667         movups  %xmm3,16(%rsi)
2668         movups  %xmm4,32(%rsi)
2669         movups  %xmm5,48(%rsi)
2670         movups  %xmm6,64(%rsi)
2671         movups  %xmm7,80(%rsi)
2672         leaq    96(%rsi),%rsi
2673         subq    $6,%rdx
2674         jnc     .Locb_enc_grandloop
2675
2676 .Locb_enc_short:
2677         addq    $6,%rdx
2678         jz      .Locb_enc_done
2679
2680         movdqu  0(%rdi),%xmm2
2681         cmpq    $2,%rdx
2682         jb      .Locb_enc_one
2683         movdqu  16(%rdi),%xmm3
2684         je      .Locb_enc_two
2685
2686         movdqu  32(%rdi),%xmm4
2687         cmpq    $4,%rdx
2688         jb      .Locb_enc_three
2689         movdqu  48(%rdi),%xmm5
2690         je      .Locb_enc_four
2691
2692         movdqu  64(%rdi),%xmm6
2693         pxor    %xmm7,%xmm7
2694
2695         call    __ocb_encrypt6
2696
2697         movdqa  %xmm14,%xmm15
2698         movups  %xmm2,0(%rsi)
2699         movups  %xmm3,16(%rsi)
2700         movups  %xmm4,32(%rsi)
2701         movups  %xmm5,48(%rsi)
2702         movups  %xmm6,64(%rsi)
2703
2704         jmp     .Locb_enc_done
2705
2706 .align  16
2707 .Locb_enc_one:
2708         movdqa  %xmm10,%xmm7
2709
2710         call    __ocb_encrypt1
2711
2712         movdqa  %xmm7,%xmm15
2713         movups  %xmm2,0(%rsi)
2714         jmp     .Locb_enc_done
2715
2716 .align  16
2717 .Locb_enc_two:
2718         pxor    %xmm4,%xmm4
2719         pxor    %xmm5,%xmm5
2720
2721         call    __ocb_encrypt4
2722
2723         movdqa  %xmm11,%xmm15
2724         movups  %xmm2,0(%rsi)
2725         movups  %xmm3,16(%rsi)
2726
2727         jmp     .Locb_enc_done
2728
2729 .align  16
2730 .Locb_enc_three:
2731         pxor    %xmm5,%xmm5
2732
2733         call    __ocb_encrypt4
2734
2735         movdqa  %xmm12,%xmm15
2736         movups  %xmm2,0(%rsi)
2737         movups  %xmm3,16(%rsi)
2738         movups  %xmm4,32(%rsi)
2739
2740         jmp     .Locb_enc_done
2741
2742 .align  16
2743 .Locb_enc_four:
2744         call    __ocb_encrypt4
2745
2746         movdqa  %xmm13,%xmm15
2747         movups  %xmm2,0(%rsi)
2748         movups  %xmm3,16(%rsi)
2749         movups  %xmm4,32(%rsi)
2750         movups  %xmm5,48(%rsi)
2751
2752 .Locb_enc_done:
2753         pxor    %xmm0,%xmm15
2754         movdqu  %xmm8,(%rbp)
2755         movdqu  %xmm15,(%r9)
2756
2757         xorps   %xmm0,%xmm0
2758         pxor    %xmm1,%xmm1
2759         pxor    %xmm2,%xmm2
2760         pxor    %xmm3,%xmm3
2761         pxor    %xmm4,%xmm4
2762         pxor    %xmm5,%xmm5
2763         pxor    %xmm6,%xmm6
2764         pxor    %xmm7,%xmm7
2765         pxor    %xmm8,%xmm8
2766         pxor    %xmm9,%xmm9
2767         pxor    %xmm10,%xmm10
2768         pxor    %xmm11,%xmm11
2769         pxor    %xmm12,%xmm12
2770         pxor    %xmm13,%xmm13
2771         pxor    %xmm14,%xmm14
2772         pxor    %xmm15,%xmm15
2773         leaq    40(%rsp),%rax
2774 .cfi_def_cfa    %rax,8
2775         movq    -40(%rax),%r14
2776 .cfi_restore    %r14
2777         movq    -32(%rax),%r13
2778 .cfi_restore    %r13
2779         movq    -24(%rax),%r12
2780 .cfi_restore    %r12
2781         movq    -16(%rax),%rbp
2782 .cfi_restore    %rbp
2783         movq    -8(%rax),%rbx
2784 .cfi_restore    %rbx
2785         leaq    (%rax),%rsp
2786 .cfi_def_cfa_register   %rsp
2787 .Locb_enc_epilogue:
2788         .byte   0xf3,0xc3
2789 .cfi_endproc    
2790 .size   aesni_ocb_encrypt,.-aesni_ocb_encrypt
2791
2792 .type   __ocb_encrypt6,@function
2793 .align  32
2794 __ocb_encrypt6:
2795         pxor    %xmm9,%xmm15
2796         movdqu  (%rbx,%r12,1),%xmm11
2797         movdqa  %xmm10,%xmm12
2798         movdqu  (%rbx,%r13,1),%xmm13
2799         movdqa  %xmm10,%xmm14
2800         pxor    %xmm15,%xmm10
2801         movdqu  (%rbx,%r14,1),%xmm15
2802         pxor    %xmm10,%xmm11
2803         pxor    %xmm2,%xmm8
2804         pxor    %xmm10,%xmm2
2805         pxor    %xmm11,%xmm12
2806         pxor    %xmm3,%xmm8
2807         pxor    %xmm11,%xmm3
2808         pxor    %xmm12,%xmm13
2809         pxor    %xmm4,%xmm8
2810         pxor    %xmm12,%xmm4
2811         pxor    %xmm13,%xmm14
2812         pxor    %xmm5,%xmm8
2813         pxor    %xmm13,%xmm5
2814         pxor    %xmm14,%xmm15
2815         pxor    %xmm6,%xmm8
2816         pxor    %xmm14,%xmm6
2817         pxor    %xmm7,%xmm8
2818         pxor    %xmm15,%xmm7
2819         movups  32(%r11),%xmm0
2820
2821         leaq    1(%r8),%r12
2822         leaq    3(%r8),%r13
2823         leaq    5(%r8),%r14
2824         addq    $6,%r8
2825         pxor    %xmm9,%xmm10
2826         bsfq    %r12,%r12
2827         bsfq    %r13,%r13
2828         bsfq    %r14,%r14
2829
2830 .byte   102,15,56,220,209
2831 .byte   102,15,56,220,217
2832 .byte   102,15,56,220,225
2833 .byte   102,15,56,220,233
2834         pxor    %xmm9,%xmm11
2835         pxor    %xmm9,%xmm12
2836 .byte   102,15,56,220,241
2837         pxor    %xmm9,%xmm13
2838         pxor    %xmm9,%xmm14
2839 .byte   102,15,56,220,249
2840         movups  48(%r11),%xmm1
2841         pxor    %xmm9,%xmm15
2842
2843 .byte   102,15,56,220,208
2844 .byte   102,15,56,220,216
2845 .byte   102,15,56,220,224
2846 .byte   102,15,56,220,232
2847 .byte   102,15,56,220,240
2848 .byte   102,15,56,220,248
2849         movups  64(%r11),%xmm0
2850         shlq    $4,%r12
2851         shlq    $4,%r13
2852         jmp     .Locb_enc_loop6
2853
2854 .align  32
2855 .Locb_enc_loop6:
2856 .byte   102,15,56,220,209
2857 .byte   102,15,56,220,217
2858 .byte   102,15,56,220,225
2859 .byte   102,15,56,220,233
2860 .byte   102,15,56,220,241
2861 .byte   102,15,56,220,249
2862         movups  (%rcx,%rax,1),%xmm1
2863         addq    $32,%rax
2864
2865 .byte   102,15,56,220,208
2866 .byte   102,15,56,220,216
2867 .byte   102,15,56,220,224
2868 .byte   102,15,56,220,232
2869 .byte   102,15,56,220,240
2870 .byte   102,15,56,220,248
2871         movups  -16(%rcx,%rax,1),%xmm0
2872         jnz     .Locb_enc_loop6
2873
2874 .byte   102,15,56,220,209
2875 .byte   102,15,56,220,217
2876 .byte   102,15,56,220,225
2877 .byte   102,15,56,220,233
2878 .byte   102,15,56,220,241
2879 .byte   102,15,56,220,249
2880         movups  16(%r11),%xmm1
2881         shlq    $4,%r14
2882
2883 .byte   102,65,15,56,221,210
2884         movdqu  (%rbx),%xmm10
2885         movq    %r10,%rax
2886 .byte   102,65,15,56,221,219
2887 .byte   102,65,15,56,221,228
2888 .byte   102,65,15,56,221,237
2889 .byte   102,65,15,56,221,246
2890 .byte   102,65,15,56,221,255
2891         .byte   0xf3,0xc3
2892 .size   __ocb_encrypt6,.-__ocb_encrypt6
2893
2894 .type   __ocb_encrypt4,@function
2895 .align  32
2896 __ocb_encrypt4:
2897         pxor    %xmm9,%xmm15
2898         movdqu  (%rbx,%r12,1),%xmm11
2899         movdqa  %xmm10,%xmm12
2900         movdqu  (%rbx,%r13,1),%xmm13
2901         pxor    %xmm15,%xmm10
2902         pxor    %xmm10,%xmm11
2903         pxor    %xmm2,%xmm8
2904         pxor    %xmm10,%xmm2
2905         pxor    %xmm11,%xmm12
2906         pxor    %xmm3,%xmm8
2907         pxor    %xmm11,%xmm3
2908         pxor    %xmm12,%xmm13
2909         pxor    %xmm4,%xmm8
2910         pxor    %xmm12,%xmm4
2911         pxor    %xmm5,%xmm8
2912         pxor    %xmm13,%xmm5
2913         movups  32(%r11),%xmm0
2914
2915         pxor    %xmm9,%xmm10
2916         pxor    %xmm9,%xmm11
2917         pxor    %xmm9,%xmm12
2918         pxor    %xmm9,%xmm13
2919
2920 .byte   102,15,56,220,209
2921 .byte   102,15,56,220,217
2922 .byte   102,15,56,220,225
2923 .byte   102,15,56,220,233
2924         movups  48(%r11),%xmm1
2925
2926 .byte   102,15,56,220,208
2927 .byte   102,15,56,220,216
2928 .byte   102,15,56,220,224
2929 .byte   102,15,56,220,232
2930         movups  64(%r11),%xmm0
2931         jmp     .Locb_enc_loop4
2932
2933 .align  32
2934 .Locb_enc_loop4:
2935 .byte   102,15,56,220,209
2936 .byte   102,15,56,220,217
2937 .byte   102,15,56,220,225
2938 .byte   102,15,56,220,233
2939         movups  (%rcx,%rax,1),%xmm1
2940         addq    $32,%rax
2941
2942 .byte   102,15,56,220,208
2943 .byte   102,15,56,220,216
2944 .byte   102,15,56,220,224
2945 .byte   102,15,56,220,232
2946         movups  -16(%rcx,%rax,1),%xmm0
2947         jnz     .Locb_enc_loop4
2948
2949 .byte   102,15,56,220,209
2950 .byte   102,15,56,220,217
2951 .byte   102,15,56,220,225
2952 .byte   102,15,56,220,233
2953         movups  16(%r11),%xmm1
2954         movq    %r10,%rax
2955
2956 .byte   102,65,15,56,221,210
2957 .byte   102,65,15,56,221,219
2958 .byte   102,65,15,56,221,228
2959 .byte   102,65,15,56,221,237
2960         .byte   0xf3,0xc3
2961 .size   __ocb_encrypt4,.-__ocb_encrypt4
2962
2963 .type   __ocb_encrypt1,@function
2964 .align  32
2965 __ocb_encrypt1:
2966         pxor    %xmm15,%xmm7
2967         pxor    %xmm9,%xmm7
2968         pxor    %xmm2,%xmm8
2969         pxor    %xmm7,%xmm2
2970         movups  32(%r11),%xmm0
2971
2972 .byte   102,15,56,220,209
2973         movups  48(%r11),%xmm1
2974         pxor    %xmm9,%xmm7
2975
2976 .byte   102,15,56,220,208
2977         movups  64(%r11),%xmm0
2978         jmp     .Locb_enc_loop1
2979
2980 .align  32
2981 .Locb_enc_loop1:
2982 .byte   102,15,56,220,209
2983         movups  (%rcx,%rax,1),%xmm1
2984         addq    $32,%rax
2985
2986 .byte   102,15,56,220,208
2987         movups  -16(%rcx,%rax,1),%xmm0
2988         jnz     .Locb_enc_loop1
2989
2990 .byte   102,15,56,220,209
2991         movups  16(%r11),%xmm1
2992         movq    %r10,%rax
2993
2994 .byte   102,15,56,221,215
2995         .byte   0xf3,0xc3
2996 .size   __ocb_encrypt1,.-__ocb_encrypt1
2997
2998 .globl  aesni_ocb_decrypt
2999 .type   aesni_ocb_decrypt,@function
3000 .align  32
3001 aesni_ocb_decrypt:
3002 .cfi_startproc  
3003         leaq    (%rsp),%rax
3004         pushq   %rbx
3005 .cfi_adjust_cfa_offset  8
3006 .cfi_offset     %rbx,-16
3007         pushq   %rbp
3008 .cfi_adjust_cfa_offset  8
3009 .cfi_offset     %rbp,-24
3010         pushq   %r12
3011 .cfi_adjust_cfa_offset  8
3012 .cfi_offset     %r12,-32
3013         pushq   %r13
3014 .cfi_adjust_cfa_offset  8
3015 .cfi_offset     %r13,-40
3016         pushq   %r14
3017 .cfi_adjust_cfa_offset  8
3018 .cfi_offset     %r14,-48
3019         movq    8(%rax),%rbx
3020         movq    8+8(%rax),%rbp
3021
3022         movl    240(%rcx),%r10d
3023         movq    %rcx,%r11
3024         shll    $4,%r10d
3025         movups  (%rcx),%xmm9
3026         movups  16(%rcx,%r10,1),%xmm1
3027
3028         movdqu  (%r9),%xmm15
3029         pxor    %xmm1,%xmm9
3030         pxor    %xmm1,%xmm15
3031
3032         movl    $16+32,%eax
3033         leaq    32(%r11,%r10,1),%rcx
3034         movups  16(%r11),%xmm1
3035         subq    %r10,%rax
3036         movq    %rax,%r10
3037
3038         movdqu  (%rbx),%xmm10
3039         movdqu  (%rbp),%xmm8
3040
3041         testq   $1,%r8
3042         jnz     .Locb_dec_odd
3043
3044         bsfq    %r8,%r12
3045         addq    $1,%r8
3046         shlq    $4,%r12
3047         movdqu  (%rbx,%r12,1),%xmm7
3048         movdqu  (%rdi),%xmm2
3049         leaq    16(%rdi),%rdi
3050
3051         call    __ocb_decrypt1
3052
3053         movdqa  %xmm7,%xmm15
3054         movups  %xmm2,(%rsi)
3055         xorps   %xmm2,%xmm8
3056         leaq    16(%rsi),%rsi
3057         subq    $1,%rdx
3058         jz      .Locb_dec_done
3059
3060 .Locb_dec_odd:
3061         leaq    1(%r8),%r12
3062         leaq    3(%r8),%r13
3063         leaq    5(%r8),%r14
3064         leaq    6(%r8),%r8
3065         bsfq    %r12,%r12
3066         bsfq    %r13,%r13
3067         bsfq    %r14,%r14
3068         shlq    $4,%r12
3069         shlq    $4,%r13
3070         shlq    $4,%r14
3071
3072         subq    $6,%rdx
3073         jc      .Locb_dec_short
3074         jmp     .Locb_dec_grandloop
3075
3076 .align  32
3077 .Locb_dec_grandloop:
3078         movdqu  0(%rdi),%xmm2
3079         movdqu  16(%rdi),%xmm3
3080         movdqu  32(%rdi),%xmm4
3081         movdqu  48(%rdi),%xmm5
3082         movdqu  64(%rdi),%xmm6
3083         movdqu  80(%rdi),%xmm7
3084         leaq    96(%rdi),%rdi
3085
3086         call    __ocb_decrypt6
3087
3088         movups  %xmm2,0(%rsi)
3089         pxor    %xmm2,%xmm8
3090         movups  %xmm3,16(%rsi)
3091         pxor    %xmm3,%xmm8
3092         movups  %xmm4,32(%rsi)
3093         pxor    %xmm4,%xmm8
3094         movups  %xmm5,48(%rsi)
3095         pxor    %xmm5,%xmm8
3096         movups  %xmm6,64(%rsi)
3097         pxor    %xmm6,%xmm8
3098         movups  %xmm7,80(%rsi)
3099         pxor    %xmm7,%xmm8
3100         leaq    96(%rsi),%rsi
3101         subq    $6,%rdx
3102         jnc     .Locb_dec_grandloop
3103
3104 .Locb_dec_short:
3105         addq    $6,%rdx
3106         jz      .Locb_dec_done
3107
3108         movdqu  0(%rdi),%xmm2
3109         cmpq    $2,%rdx
3110         jb      .Locb_dec_one
3111         movdqu  16(%rdi),%xmm3
3112         je      .Locb_dec_two
3113
3114         movdqu  32(%rdi),%xmm4
3115         cmpq    $4,%rdx
3116         jb      .Locb_dec_three
3117         movdqu  48(%rdi),%xmm5
3118         je      .Locb_dec_four
3119
3120         movdqu  64(%rdi),%xmm6
3121         pxor    %xmm7,%xmm7
3122
3123         call    __ocb_decrypt6
3124
3125         movdqa  %xmm14,%xmm15
3126         movups  %xmm2,0(%rsi)
3127         pxor    %xmm2,%xmm8
3128         movups  %xmm3,16(%rsi)
3129         pxor    %xmm3,%xmm8
3130         movups  %xmm4,32(%rsi)
3131         pxor    %xmm4,%xmm8
3132         movups  %xmm5,48(%rsi)
3133         pxor    %xmm5,%xmm8
3134         movups  %xmm6,64(%rsi)
3135         pxor    %xmm6,%xmm8
3136
3137         jmp     .Locb_dec_done
3138
3139 .align  16
3140 .Locb_dec_one:
3141         movdqa  %xmm10,%xmm7
3142
3143         call    __ocb_decrypt1
3144
3145         movdqa  %xmm7,%xmm15
3146         movups  %xmm2,0(%rsi)
3147         xorps   %xmm2,%xmm8
3148         jmp     .Locb_dec_done
3149
3150 .align  16
3151 .Locb_dec_two:
3152         pxor    %xmm4,%xmm4
3153         pxor    %xmm5,%xmm5
3154
3155         call    __ocb_decrypt4
3156
3157         movdqa  %xmm11,%xmm15
3158         movups  %xmm2,0(%rsi)
3159         xorps   %xmm2,%xmm8
3160         movups  %xmm3,16(%rsi)
3161         xorps   %xmm3,%xmm8
3162
3163         jmp     .Locb_dec_done
3164
3165 .align  16
3166 .Locb_dec_three:
3167         pxor    %xmm5,%xmm5
3168
3169         call    __ocb_decrypt4
3170
3171         movdqa  %xmm12,%xmm15
3172         movups  %xmm2,0(%rsi)
3173         xorps   %xmm2,%xmm8
3174         movups  %xmm3,16(%rsi)
3175         xorps   %xmm3,%xmm8
3176         movups  %xmm4,32(%rsi)
3177         xorps   %xmm4,%xmm8
3178
3179         jmp     .Locb_dec_done
3180
3181 .align  16
3182 .Locb_dec_four:
3183         call    __ocb_decrypt4
3184
3185         movdqa  %xmm13,%xmm15
3186         movups  %xmm2,0(%rsi)
3187         pxor    %xmm2,%xmm8
3188         movups  %xmm3,16(%rsi)
3189         pxor    %xmm3,%xmm8
3190         movups  %xmm4,32(%rsi)
3191         pxor    %xmm4,%xmm8
3192         movups  %xmm5,48(%rsi)
3193         pxor    %xmm5,%xmm8
3194
3195 .Locb_dec_done:
3196         pxor    %xmm0,%xmm15
3197         movdqu  %xmm8,(%rbp)
3198         movdqu  %xmm15,(%r9)
3199
3200         xorps   %xmm0,%xmm0
3201         pxor    %xmm1,%xmm1
3202         pxor    %xmm2,%xmm2
3203         pxor    %xmm3,%xmm3
3204         pxor    %xmm4,%xmm4
3205         pxor    %xmm5,%xmm5
3206         pxor    %xmm6,%xmm6
3207         pxor    %xmm7,%xmm7
3208         pxor    %xmm8,%xmm8
3209         pxor    %xmm9,%xmm9
3210         pxor    %xmm10,%xmm10
3211         pxor    %xmm11,%xmm11
3212         pxor    %xmm12,%xmm12
3213         pxor    %xmm13,%xmm13
3214         pxor    %xmm14,%xmm14
3215         pxor    %xmm15,%xmm15
3216         leaq    40(%rsp),%rax
3217 .cfi_def_cfa    %rax,8
3218         movq    -40(%rax),%r14
3219 .cfi_restore    %r14
3220         movq    -32(%rax),%r13
3221 .cfi_restore    %r13
3222         movq    -24(%rax),%r12
3223 .cfi_restore    %r12
3224         movq    -16(%rax),%rbp
3225 .cfi_restore    %rbp
3226         movq    -8(%rax),%rbx
3227 .cfi_restore    %rbx
3228         leaq    (%rax),%rsp
3229 .cfi_def_cfa_register   %rsp
3230 .Locb_dec_epilogue:
3231         .byte   0xf3,0xc3
3232 .cfi_endproc    
3233 .size   aesni_ocb_decrypt,.-aesni_ocb_decrypt
3234
3235 .type   __ocb_decrypt6,@function
3236 .align  32
3237 __ocb_decrypt6:
3238         pxor    %xmm9,%xmm15
3239         movdqu  (%rbx,%r12,1),%xmm11
3240         movdqa  %xmm10,%xmm12
3241         movdqu  (%rbx,%r13,1),%xmm13
3242         movdqa  %xmm10,%xmm14
3243         pxor    %xmm15,%xmm10
3244         movdqu  (%rbx,%r14,1),%xmm15
3245         pxor    %xmm10,%xmm11
3246         pxor    %xmm10,%xmm2
3247         pxor    %xmm11,%xmm12
3248         pxor    %xmm11,%xmm3
3249         pxor    %xmm12,%xmm13
3250         pxor    %xmm12,%xmm4
3251         pxor    %xmm13,%xmm14
3252         pxor    %xmm13,%xmm5
3253         pxor    %xmm14,%xmm15
3254         pxor    %xmm14,%xmm6
3255         pxor    %xmm15,%xmm7
3256         movups  32(%r11),%xmm0
3257
3258         leaq    1(%r8),%r12
3259         leaq    3(%r8),%r13
3260         leaq    5(%r8),%r14
3261         addq    $6,%r8
3262         pxor    %xmm9,%xmm10
3263         bsfq    %r12,%r12
3264         bsfq    %r13,%r13
3265         bsfq    %r14,%r14
3266
3267 .byte   102,15,56,222,209
3268 .byte   102,15,56,222,217
3269 .byte   102,15,56,222,225
3270 .byte   102,15,56,222,233
3271         pxor    %xmm9,%xmm11
3272         pxor    %xmm9,%xmm12
3273 .byte   102,15,56,222,241
3274         pxor    %xmm9,%xmm13
3275         pxor    %xmm9,%xmm14
3276 .byte   102,15,56,222,249
3277         movups  48(%r11),%xmm1
3278         pxor    %xmm9,%xmm15
3279
3280 .byte   102,15,56,222,208
3281 .byte   102,15,56,222,216
3282 .byte   102,15,56,222,224
3283 .byte   102,15,56,222,232
3284 .byte   102,15,56,222,240
3285 .byte   102,15,56,222,248
3286         movups  64(%r11),%xmm0
3287         shlq    $4,%r12
3288         shlq    $4,%r13
3289         jmp     .Locb_dec_loop6
3290
3291 .align  32
3292 .Locb_dec_loop6:
3293 .byte   102,15,56,222,209
3294 .byte   102,15,56,222,217
3295 .byte   102,15,56,222,225
3296 .byte   102,15,56,222,233
3297 .byte   102,15,56,222,241
3298 .byte   102,15,56,222,249
3299         movups  (%rcx,%rax,1),%xmm1
3300         addq    $32,%rax
3301
3302 .byte   102,15,56,222,208
3303 .byte   102,15,56,222,216
3304 .byte   102,15,56,222,224
3305 .byte   102,15,56,222,232
3306 .byte   102,15,56,222,240
3307 .byte   102,15,56,222,248
3308         movups  -16(%rcx,%rax,1),%xmm0
3309         jnz     .Locb_dec_loop6
3310
3311 .byte   102,15,56,222,209
3312 .byte   102,15,56,222,217
3313 .byte   102,15,56,222,225
3314 .byte   102,15,56,222,233
3315 .byte   102,15,56,222,241
3316 .byte   102,15,56,222,249
3317         movups  16(%r11),%xmm1
3318         shlq    $4,%r14
3319
3320 .byte   102,65,15,56,223,210
3321         movdqu  (%rbx),%xmm10
3322         movq    %r10,%rax
3323 .byte   102,65,15,56,223,219
3324 .byte   102,65,15,56,223,228
3325 .byte   102,65,15,56,223,237
3326 .byte   102,65,15,56,223,246
3327 .byte   102,65,15,56,223,255
3328         .byte   0xf3,0xc3
3329 .size   __ocb_decrypt6,.-__ocb_decrypt6
3330
3331 .type   __ocb_decrypt4,@function
3332 .align  32
3333 __ocb_decrypt4:
3334         pxor    %xmm9,%xmm15
3335         movdqu  (%rbx,%r12,1),%xmm11
3336         movdqa  %xmm10,%xmm12
3337         movdqu  (%rbx,%r13,1),%xmm13
3338         pxor    %xmm15,%xmm10
3339         pxor    %xmm10,%xmm11
3340         pxor    %xmm10,%xmm2
3341         pxor    %xmm11,%xmm12
3342         pxor    %xmm11,%xmm3
3343         pxor    %xmm12,%xmm13
3344         pxor    %xmm12,%xmm4
3345         pxor    %xmm13,%xmm5
3346         movups  32(%r11),%xmm0
3347
3348         pxor    %xmm9,%xmm10
3349         pxor    %xmm9,%xmm11
3350         pxor    %xmm9,%xmm12
3351         pxor    %xmm9,%xmm13
3352
3353 .byte   102,15,56,222,209
3354 .byte   102,15,56,222,217
3355 .byte   102,15,56,222,225
3356 .byte   102,15,56,222,233
3357         movups  48(%r11),%xmm1
3358
3359 .byte   102,15,56,222,208
3360 .byte   102,15,56,222,216
3361 .byte   102,15,56,222,224
3362 .byte   102,15,56,222,232
3363         movups  64(%r11),%xmm0
3364         jmp     .Locb_dec_loop4
3365
3366 .align  32
3367 .Locb_dec_loop4:
3368 .byte   102,15,56,222,209
3369 .byte   102,15,56,222,217
3370 .byte   102,15,56,222,225
3371 .byte   102,15,56,222,233
3372         movups  (%rcx,%rax,1),%xmm1
3373         addq    $32,%rax
3374
3375 .byte   102,15,56,222,208
3376 .byte   102,15,56,222,216
3377 .byte   102,15,56,222,224
3378 .byte   102,15,56,222,232
3379         movups  -16(%rcx,%rax,1),%xmm0
3380         jnz     .Locb_dec_loop4
3381
3382 .byte   102,15,56,222,209
3383 .byte   102,15,56,222,217
3384 .byte   102,15,56,222,225
3385 .byte   102,15,56,222,233
3386         movups  16(%r11),%xmm1
3387         movq    %r10,%rax
3388
3389 .byte   102,65,15,56,223,210
3390 .byte   102,65,15,56,223,219
3391 .byte   102,65,15,56,223,228
3392 .byte   102,65,15,56,223,237
3393         .byte   0xf3,0xc3
3394 .size   __ocb_decrypt4,.-__ocb_decrypt4
3395
3396 .type   __ocb_decrypt1,@function
3397 .align  32
3398 __ocb_decrypt1:
3399         pxor    %xmm15,%xmm7
3400         pxor    %xmm9,%xmm7
3401         pxor    %xmm7,%xmm2
3402         movups  32(%r11),%xmm0
3403
3404 .byte   102,15,56,222,209
3405         movups  48(%r11),%xmm1
3406         pxor    %xmm9,%xmm7
3407
3408 .byte   102,15,56,222,208
3409         movups  64(%r11),%xmm0
3410         jmp     .Locb_dec_loop1
3411
3412 .align  32
3413 .Locb_dec_loop1:
3414 .byte   102,15,56,222,209
3415         movups  (%rcx,%rax,1),%xmm1
3416         addq    $32,%rax
3417
3418 .byte   102,15,56,222,208
3419         movups  -16(%rcx,%rax,1),%xmm0
3420         jnz     .Locb_dec_loop1
3421
3422 .byte   102,15,56,222,209
3423         movups  16(%r11),%xmm1
3424         movq    %r10,%rax
3425
3426 .byte   102,15,56,223,215
3427         .byte   0xf3,0xc3
3428 .size   __ocb_decrypt1,.-__ocb_decrypt1
3429 .globl  aesni_cbc_encrypt
3430 .type   aesni_cbc_encrypt,@function
3431 .align  16
3432 aesni_cbc_encrypt:
3433 .cfi_startproc  
3434         testq   %rdx,%rdx
3435         jz      .Lcbc_ret
3436
3437         movl    240(%rcx),%r10d
3438         movq    %rcx,%r11
3439         testl   %r9d,%r9d
3440         jz      .Lcbc_decrypt
3441
3442         movups  (%r8),%xmm2
3443         movl    %r10d,%eax
3444         cmpq    $16,%rdx
3445         jb      .Lcbc_enc_tail
3446         subq    $16,%rdx
3447         jmp     .Lcbc_enc_loop
3448 .align  16
3449 .Lcbc_enc_loop:
3450         movups  (%rdi),%xmm3
3451         leaq    16(%rdi),%rdi
3452
3453         movups  (%rcx),%xmm0
3454         movups  16(%rcx),%xmm1
3455         xorps   %xmm0,%xmm3
3456         leaq    32(%rcx),%rcx
3457         xorps   %xmm3,%xmm2
3458 .Loop_enc1_15:
3459 .byte   102,15,56,220,209
3460         decl    %eax
3461         movups  (%rcx),%xmm1
3462         leaq    16(%rcx),%rcx
3463         jnz     .Loop_enc1_15
3464 .byte   102,15,56,221,209
3465         movl    %r10d,%eax
3466         movq    %r11,%rcx
3467         movups  %xmm2,0(%rsi)
3468         leaq    16(%rsi),%rsi
3469         subq    $16,%rdx
3470         jnc     .Lcbc_enc_loop
3471         addq    $16,%rdx
3472         jnz     .Lcbc_enc_tail
3473         pxor    %xmm0,%xmm0
3474         pxor    %xmm1,%xmm1
3475         movups  %xmm2,(%r8)
3476         pxor    %xmm2,%xmm2
3477         pxor    %xmm3,%xmm3
3478         jmp     .Lcbc_ret
3479
3480 .Lcbc_enc_tail:
3481         movq    %rdx,%rcx
3482         xchgq   %rdi,%rsi
3483 .long   0x9066A4F3
3484         movl    $16,%ecx
3485         subq    %rdx,%rcx
3486         xorl    %eax,%eax
3487 .long   0x9066AAF3
3488         leaq    -16(%rdi),%rdi
3489         movl    %r10d,%eax
3490         movq    %rdi,%rsi
3491         movq    %r11,%rcx
3492         xorq    %rdx,%rdx
3493         jmp     .Lcbc_enc_loop
3494
3495 .align  16
3496 .Lcbc_decrypt:
3497         cmpq    $16,%rdx
3498         jne     .Lcbc_decrypt_bulk
3499
3500
3501
3502         movdqu  (%rdi),%xmm2
3503         movdqu  (%r8),%xmm3
3504         movdqa  %xmm2,%xmm4
3505         movups  (%rcx),%xmm0
3506         movups  16(%rcx),%xmm1
3507         leaq    32(%rcx),%rcx
3508         xorps   %xmm0,%xmm2
3509 .Loop_dec1_16:
3510 .byte   102,15,56,222,209
3511         decl    %r10d
3512         movups  (%rcx),%xmm1
3513         leaq    16(%rcx),%rcx
3514         jnz     .Loop_dec1_16
3515 .byte   102,15,56,223,209
3516         pxor    %xmm0,%xmm0
3517         pxor    %xmm1,%xmm1
3518         movdqu  %xmm4,(%r8)
3519         xorps   %xmm3,%xmm2
3520         pxor    %xmm3,%xmm3
3521         movups  %xmm2,(%rsi)
3522         pxor    %xmm2,%xmm2
3523         jmp     .Lcbc_ret
3524 .align  16
3525 .Lcbc_decrypt_bulk:
3526         leaq    (%rsp),%r11
3527 .cfi_def_cfa_register   %r11
3528         pushq   %rbp
3529 .cfi_offset     %rbp,-16
3530         subq    $16,%rsp
3531         andq    $-16,%rsp
3532         movq    %rcx,%rbp
3533         movups  (%r8),%xmm10
3534         movl    %r10d,%eax
3535         cmpq    $0x50,%rdx
3536         jbe     .Lcbc_dec_tail
3537
3538         movups  (%rcx),%xmm0
3539         movdqu  0(%rdi),%xmm2
3540         movdqu  16(%rdi),%xmm3
3541         movdqa  %xmm2,%xmm11
3542         movdqu  32(%rdi),%xmm4
3543         movdqa  %xmm3,%xmm12
3544         movdqu  48(%rdi),%xmm5
3545         movdqa  %xmm4,%xmm13
3546         movdqu  64(%rdi),%xmm6
3547         movdqa  %xmm5,%xmm14
3548         movdqu  80(%rdi),%xmm7
3549         movdqa  %xmm6,%xmm15
3550         movl    OPENSSL_ia32cap_P+4(%rip),%r9d
3551         cmpq    $0x70,%rdx
3552         jbe     .Lcbc_dec_six_or_seven
3553
3554         andl    $71303168,%r9d
3555         subq    $0x50,%rdx
3556         cmpl    $4194304,%r9d
3557         je      .Lcbc_dec_loop6_enter
3558         subq    $0x20,%rdx
3559         leaq    112(%rcx),%rcx
3560         jmp     .Lcbc_dec_loop8_enter
3561 .align  16
3562 .Lcbc_dec_loop8:
3563         movups  %xmm9,(%rsi)
3564         leaq    16(%rsi),%rsi
3565 .Lcbc_dec_loop8_enter:
3566         movdqu  96(%rdi),%xmm8
3567         pxor    %xmm0,%xmm2
3568         movdqu  112(%rdi),%xmm9
3569         pxor    %xmm0,%xmm3
3570         movups  16-112(%rcx),%xmm1
3571         pxor    %xmm0,%xmm4
3572         movq    $-1,%rbp
3573         cmpq    $0x70,%rdx
3574         pxor    %xmm0,%xmm5
3575         pxor    %xmm0,%xmm6
3576         pxor    %xmm0,%xmm7
3577         pxor    %xmm0,%xmm8
3578
3579 .byte   102,15,56,222,209
3580         pxor    %xmm0,%xmm9
3581         movups  32-112(%rcx),%xmm0
3582 .byte   102,15,56,222,217
3583 .byte   102,15,56,222,225
3584 .byte   102,15,56,222,233
3585 .byte   102,15,56,222,241
3586 .byte   102,15,56,222,249
3587 .byte   102,68,15,56,222,193
3588         adcq    $0,%rbp
3589         andq    $128,%rbp
3590 .byte   102,68,15,56,222,201
3591         addq    %rdi,%rbp
3592         movups  48-112(%rcx),%xmm1
3593 .byte   102,15,56,222,208
3594 .byte   102,15,56,222,216
3595 .byte   102,15,56,222,224
3596 .byte   102,15,56,222,232
3597 .byte   102,15,56,222,240
3598 .byte   102,15,56,222,248
3599 .byte   102,68,15,56,222,192
3600 .byte   102,68,15,56,222,200
3601         movups  64-112(%rcx),%xmm0
3602         nop
3603 .byte   102,15,56,222,209
3604 .byte   102,15,56,222,217
3605 .byte   102,15,56,222,225
3606 .byte   102,15,56,222,233
3607 .byte   102,15,56,222,241
3608 .byte   102,15,56,222,249
3609 .byte   102,68,15,56,222,193
3610 .byte   102,68,15,56,222,201
3611         movups  80-112(%rcx),%xmm1
3612         nop
3613 .byte   102,15,56,222,208
3614 .byte   102,15,56,222,216
3615 .byte   102,15,56,222,224
3616 .byte   102,15,56,222,232
3617 .byte   102,15,56,222,240
3618 .byte   102,15,56,222,248
3619 .byte   102,68,15,56,222,192
3620 .byte   102,68,15,56,222,200
3621         movups  96-112(%rcx),%xmm0
3622         nop
3623 .byte   102,15,56,222,209
3624 .byte   102,15,56,222,217
3625 .byte   102,15,56,222,225
3626 .byte   102,15,56,222,233
3627 .byte   102,15,56,222,241
3628 .byte   102,15,56,222,249
3629 .byte   102,68,15,56,222,193
3630 .byte   102,68,15,56,222,201
3631         movups  112-112(%rcx),%xmm1
3632         nop
3633 .byte   102,15,56,222,208
3634 .byte   102,15,56,222,216
3635 .byte   102,15,56,222,224
3636 .byte   102,15,56,222,232
3637 .byte   102,15,56,222,240
3638 .byte   102,15,56,222,248
3639 .byte   102,68,15,56,222,192
3640 .byte   102,68,15,56,222,200
3641         movups  128-112(%rcx),%xmm0
3642         nop
3643 .byte   102,15,56,222,209
3644 .byte   102,15,56,222,217
3645 .byte   102,15,56,222,225
3646 .byte   102,15,56,222,233
3647 .byte   102,15,56,222,241
3648 .byte   102,15,56,222,249
3649 .byte   102,68,15,56,222,193
3650 .byte   102,68,15,56,222,201
3651         movups  144-112(%rcx),%xmm1
3652         cmpl    $11,%eax
3653 .byte   102,15,56,222,208
3654 .byte   102,15,56,222,216
3655 .byte   102,15,56,222,224
3656 .byte   102,15,56,222,232
3657 .byte   102,15,56,222,240
3658 .byte   102,15,56,222,248
3659 .byte   102,68,15,56,222,192
3660 .byte   102,68,15,56,222,200
3661         movups  160-112(%rcx),%xmm0
3662         jb      .Lcbc_dec_done
3663 .byte   102,15,56,222,209
3664 .byte   102,15,56,222,217
3665 .byte   102,15,56,222,225
3666 .byte   102,15,56,222,233
3667 .byte   102,15,56,222,241
3668 .byte   102,15,56,222,249
3669 .byte   102,68,15,56,222,193
3670 .byte   102,68,15,56,222,201
3671         movups  176-112(%rcx),%xmm1
3672         nop
3673 .byte   102,15,56,222,208
3674 .byte   102,15,56,222,216
3675 .byte   102,15,56,222,224
3676 .byte   102,15,56,222,232
3677 .byte   102,15,56,222,240
3678 .byte   102,15,56,222,248
3679 .byte   102,68,15,56,222,192
3680 .byte   102,68,15,56,222,200
3681         movups  192-112(%rcx),%xmm0
3682         je      .Lcbc_dec_done
3683 .byte   102,15,56,222,209
3684 .byte   102,15,56,222,217
3685 .byte   102,15,56,222,225
3686 .byte   102,15,56,222,233
3687 .byte   102,15,56,222,241
3688 .byte   102,15,56,222,249
3689 .byte   102,68,15,56,222,193
3690 .byte   102,68,15,56,222,201
3691         movups  208-112(%rcx),%xmm1
3692         nop
3693 .byte   102,15,56,222,208
3694 .byte   102,15,56,222,216
3695 .byte   102,15,56,222,224
3696 .byte   102,15,56,222,232
3697 .byte   102,15,56,222,240
3698 .byte   102,15,56,222,248
3699 .byte   102,68,15,56,222,192
3700 .byte   102,68,15,56,222,200
3701         movups  224-112(%rcx),%xmm0
3702         jmp     .Lcbc_dec_done
3703 .align  16
3704 .Lcbc_dec_done:
3705 .byte   102,15,56,222,209
3706 .byte   102,15,56,222,217
3707         pxor    %xmm0,%xmm10
3708         pxor    %xmm0,%xmm11
3709 .byte   102,15,56,222,225
3710 .byte   102,15,56,222,233
3711         pxor    %xmm0,%xmm12
3712         pxor    %xmm0,%xmm13
3713 .byte   102,15,56,222,241
3714 .byte   102,15,56,222,249
3715         pxor    %xmm0,%xmm14
3716         pxor    %xmm0,%xmm15
3717 .byte   102,68,15,56,222,193
3718 .byte   102,68,15,56,222,201
3719         movdqu  80(%rdi),%xmm1
3720
3721 .byte   102,65,15,56,223,210
3722         movdqu  96(%rdi),%xmm10
3723         pxor    %xmm0,%xmm1
3724 .byte   102,65,15,56,223,219
3725         pxor    %xmm0,%xmm10
3726         movdqu  112(%rdi),%xmm0
3727 .byte   102,65,15,56,223,228
3728         leaq    128(%rdi),%rdi
3729         movdqu  0(%rbp),%xmm11
3730 .byte   102,65,15,56,223,237
3731 .byte   102,65,15,56,223,246
3732         movdqu  16(%rbp),%xmm12
3733         movdqu  32(%rbp),%xmm13
3734 .byte   102,65,15,56,223,255
3735 .byte   102,68,15,56,223,193
3736         movdqu  48(%rbp),%xmm14
3737         movdqu  64(%rbp),%xmm15
3738 .byte   102,69,15,56,223,202
3739         movdqa  %xmm0,%xmm10
3740         movdqu  80(%rbp),%xmm1
3741         movups  -112(%rcx),%xmm0
3742
3743         movups  %xmm2,(%rsi)
3744         movdqa  %xmm11,%xmm2
3745         movups  %xmm3,16(%rsi)
3746         movdqa  %xmm12,%xmm3
3747         movups  %xmm4,32(%rsi)
3748         movdqa  %xmm13,%xmm4
3749         movups  %xmm5,48(%rsi)
3750         movdqa  %xmm14,%xmm5
3751         movups  %xmm6,64(%rsi)
3752         movdqa  %xmm15,%xmm6
3753         movups  %xmm7,80(%rsi)
3754         movdqa  %xmm1,%xmm7
3755         movups  %xmm8,96(%rsi)
3756         leaq    112(%rsi),%rsi
3757
3758         subq    $0x80,%rdx
3759         ja      .Lcbc_dec_loop8
3760
3761         movaps  %xmm9,%xmm2
3762         leaq    -112(%rcx),%rcx
3763         addq    $0x70,%rdx
3764         jle     .Lcbc_dec_clear_tail_collected
3765         movups  %xmm9,(%rsi)
3766         leaq    16(%rsi),%rsi
3767         cmpq    $0x50,%rdx
3768         jbe     .Lcbc_dec_tail
3769
3770         movaps  %xmm11,%xmm2
3771 .Lcbc_dec_six_or_seven:
3772         cmpq    $0x60,%rdx
3773         ja      .Lcbc_dec_seven
3774
3775         movaps  %xmm7,%xmm8
3776         call    _aesni_decrypt6
3777         pxor    %xmm10,%xmm2
3778         movaps  %xmm8,%xmm10
3779         pxor    %xmm11,%xmm3
3780         movdqu  %xmm2,(%rsi)
3781         pxor    %xmm12,%xmm4
3782         movdqu  %xmm3,16(%rsi)
3783         pxor    %xmm3,%xmm3
3784         pxor    %xmm13,%xmm5
3785         movdqu  %xmm4,32(%rsi)
3786         pxor    %xmm4,%xmm4
3787         pxor    %xmm14,%xmm6
3788         movdqu  %xmm5,48(%rsi)
3789         pxor    %xmm5,%xmm5
3790         pxor    %xmm15,%xmm7
3791         movdqu  %xmm6,64(%rsi)
3792         pxor    %xmm6,%xmm6
3793         leaq    80(%rsi),%rsi
3794         movdqa  %xmm7,%xmm2
3795         pxor    %xmm7,%xmm7
3796         jmp     .Lcbc_dec_tail_collected
3797
3798 .align  16
3799 .Lcbc_dec_seven:
3800         movups  96(%rdi),%xmm8
3801         xorps   %xmm9,%xmm9
3802         call    _aesni_decrypt8
3803         movups  80(%rdi),%xmm9
3804         pxor    %xmm10,%xmm2
3805         movups  96(%rdi),%xmm10
3806         pxor    %xmm11,%xmm3
3807         movdqu  %xmm2,(%rsi)
3808         pxor    %xmm12,%xmm4
3809         movdqu  %xmm3,16(%rsi)
3810         pxor    %xmm3,%xmm3
3811         pxor    %xmm13,%xmm5
3812         movdqu  %xmm4,32(%rsi)
3813         pxor    %xmm4,%xmm4
3814         pxor    %xmm14,%xmm6
3815         movdqu  %xmm5,48(%rsi)
3816         pxor    %xmm5,%xmm5
3817         pxor    %xmm15,%xmm7
3818         movdqu  %xmm6,64(%rsi)
3819         pxor    %xmm6,%xmm6
3820         pxor    %xmm9,%xmm8
3821         movdqu  %xmm7,80(%rsi)
3822         pxor    %xmm7,%xmm7
3823         leaq    96(%rsi),%rsi
3824         movdqa  %xmm8,%xmm2
3825         pxor    %xmm8,%xmm8
3826         pxor    %xmm9,%xmm9
3827         jmp     .Lcbc_dec_tail_collected
3828
3829 .align  16
3830 .Lcbc_dec_loop6:
3831         movups  %xmm7,(%rsi)
3832         leaq    16(%rsi),%rsi
3833         movdqu  0(%rdi),%xmm2
3834         movdqu  16(%rdi),%xmm3
3835         movdqa  %xmm2,%xmm11
3836         movdqu  32(%rdi),%xmm4
3837         movdqa  %xmm3,%xmm12
3838         movdqu  48(%rdi),%xmm5
3839         movdqa  %xmm4,%xmm13
3840         movdqu  64(%rdi),%xmm6
3841         movdqa  %xmm5,%xmm14
3842         movdqu  80(%rdi),%xmm7
3843         movdqa  %xmm6,%xmm15
3844 .Lcbc_dec_loop6_enter:
3845         leaq    96(%rdi),%rdi
3846         movdqa  %xmm7,%xmm8
3847
3848         call    _aesni_decrypt6
3849
3850         pxor    %xmm10,%xmm2
3851         movdqa  %xmm8,%xmm10
3852         pxor    %xmm11,%xmm3
3853         movdqu  %xmm2,(%rsi)
3854         pxor    %xmm12,%xmm4
3855         movdqu  %xmm3,16(%rsi)
3856         pxor    %xmm13,%xmm5
3857         movdqu  %xmm4,32(%rsi)
3858         pxor    %xmm14,%xmm6
3859         movq    %rbp,%rcx
3860         movdqu  %xmm5,48(%rsi)
3861         pxor    %xmm15,%xmm7
3862         movl    %r10d,%eax
3863         movdqu  %xmm6,64(%rsi)
3864         leaq    80(%rsi),%rsi
3865         subq    $0x60,%rdx
3866         ja      .Lcbc_dec_loop6
3867
3868         movdqa  %xmm7,%xmm2
3869         addq    $0x50,%rdx
3870         jle     .Lcbc_dec_clear_tail_collected
3871         movups  %xmm7,(%rsi)
3872         leaq    16(%rsi),%rsi
3873
3874 .Lcbc_dec_tail:
3875         movups  (%rdi),%xmm2
3876         subq    $0x10,%rdx
3877         jbe     .Lcbc_dec_one
3878
3879         movups  16(%rdi),%xmm3
3880         movaps  %xmm2,%xmm11
3881         subq    $0x10,%rdx
3882         jbe     .Lcbc_dec_two
3883
3884         movups  32(%rdi),%xmm4
3885         movaps  %xmm3,%xmm12
3886         subq    $0x10,%rdx
3887         jbe     .Lcbc_dec_three
3888
3889         movups  48(%rdi),%xmm5
3890         movaps  %xmm4,%xmm13
3891         subq    $0x10,%rdx
3892         jbe     .Lcbc_dec_four
3893
3894         movups  64(%rdi),%xmm6
3895         movaps  %xmm5,%xmm14
3896         movaps  %xmm6,%xmm15
3897         xorps   %xmm7,%xmm7
3898         call    _aesni_decrypt6
3899         pxor    %xmm10,%xmm2
3900         movaps  %xmm15,%xmm10
3901         pxor    %xmm11,%xmm3
3902         movdqu  %xmm2,(%rsi)
3903         pxor    %xmm12,%xmm4
3904         movdqu  %xmm3,16(%rsi)
3905         pxor    %xmm3,%xmm3
3906         pxor    %xmm13,%xmm5
3907         movdqu  %xmm4,32(%rsi)
3908         pxor    %xmm4,%xmm4
3909         pxor    %xmm14,%xmm6
3910         movdqu  %xmm5,48(%rsi)
3911         pxor    %xmm5,%xmm5
3912         leaq    64(%rsi),%rsi
3913         movdqa  %xmm6,%xmm2
3914         pxor    %xmm6,%xmm6
3915         pxor    %xmm7,%xmm7
3916         subq    $0x10,%rdx
3917         jmp     .Lcbc_dec_tail_collected
3918
3919 .align  16
3920 .Lcbc_dec_one:
3921         movaps  %xmm2,%xmm11
3922         movups  (%rcx),%xmm0
3923         movups  16(%rcx),%xmm1
3924         leaq    32(%rcx),%rcx
3925         xorps   %xmm0,%xmm2
3926 .Loop_dec1_17:
3927 .byte   102,15,56,222,209
3928         decl    %eax
3929         movups  (%rcx),%xmm1
3930         leaq    16(%rcx),%rcx
3931         jnz     .Loop_dec1_17
3932 .byte   102,15,56,223,209
3933         xorps   %xmm10,%xmm2
3934         movaps  %xmm11,%xmm10
3935         jmp     .Lcbc_dec_tail_collected
3936 .align  16
3937 .Lcbc_dec_two:
3938         movaps  %xmm3,%xmm12
3939         call    _aesni_decrypt2
3940         pxor    %xmm10,%xmm2
3941         movaps  %xmm12,%xmm10
3942         pxor    %xmm11,%xmm3
3943         movdqu  %xmm2,(%rsi)
3944         movdqa  %xmm3,%xmm2
3945         pxor    %xmm3,%xmm3
3946         leaq    16(%rsi),%rsi
3947         jmp     .Lcbc_dec_tail_collected
3948 .align  16
3949 .Lcbc_dec_three:
3950         movaps  %xmm4,%xmm13
3951         call    _aesni_decrypt3
3952         pxor    %xmm10,%xmm2
3953         movaps  %xmm13,%xmm10
3954         pxor    %xmm11,%xmm3
3955         movdqu  %xmm2,(%rsi)
3956         pxor    %xmm12,%xmm4
3957         movdqu  %xmm3,16(%rsi)
3958         pxor    %xmm3,%xmm3
3959         movdqa  %xmm4,%xmm2
3960         pxor    %xmm4,%xmm4
3961         leaq    32(%rsi),%rsi
3962         jmp     .Lcbc_dec_tail_collected
3963 .align  16
3964 .Lcbc_dec_four:
3965         movaps  %xmm5,%xmm14
3966         call    _aesni_decrypt4
3967         pxor    %xmm10,%xmm2
3968         movaps  %xmm14,%xmm10
3969         pxor    %xmm11,%xmm3
3970         movdqu  %xmm2,(%rsi)
3971         pxor    %xmm12,%xmm4
3972         movdqu  %xmm3,16(%rsi)
3973         pxor    %xmm3,%xmm3
3974         pxor    %xmm13,%xmm5
3975         movdqu  %xmm4,32(%rsi)
3976         pxor    %xmm4,%xmm4
3977         movdqa  %xmm5,%xmm2
3978         pxor    %xmm5,%xmm5
3979         leaq    48(%rsi),%rsi
3980         jmp     .Lcbc_dec_tail_collected
3981
3982 .align  16
3983 .Lcbc_dec_clear_tail_collected:
3984         pxor    %xmm3,%xmm3
3985         pxor    %xmm4,%xmm4
3986         pxor    %xmm5,%xmm5
3987         pxor    %xmm6,%xmm6
3988         pxor    %xmm7,%xmm7
3989         pxor    %xmm8,%xmm8
3990         pxor    %xmm9,%xmm9
3991 .Lcbc_dec_tail_collected:
3992         movups  %xmm10,(%r8)
3993         andq    $15,%rdx
3994         jnz     .Lcbc_dec_tail_partial
3995         movups  %xmm2,(%rsi)
3996         pxor    %xmm2,%xmm2
3997         jmp     .Lcbc_dec_ret
3998 .align  16
3999 .Lcbc_dec_tail_partial:
4000         movaps  %xmm2,(%rsp)
4001         pxor    %xmm2,%xmm2
4002         movq    $16,%rcx
4003         movq    %rsi,%rdi
4004         subq    %rdx,%rcx
4005         leaq    (%rsp),%rsi
4006 .long   0x9066A4F3
4007         movdqa  %xmm2,(%rsp)
4008
4009 .Lcbc_dec_ret:
4010         xorps   %xmm0,%xmm0
4011         pxor    %xmm1,%xmm1
4012         movq    -8(%r11),%rbp
4013 .cfi_restore    %rbp
4014         leaq    (%r11),%rsp
4015 .cfi_def_cfa_register   %rsp
4016 .Lcbc_ret:
4017         .byte   0xf3,0xc3
4018 .cfi_endproc    
4019 .size   aesni_cbc_encrypt,.-aesni_cbc_encrypt
4020 .globl  aesni_set_decrypt_key
4021 .type   aesni_set_decrypt_key,@function
4022 .align  16
4023 aesni_set_decrypt_key:
4024 .cfi_startproc  
4025 .byte   0x48,0x83,0xEC,0x08
4026 .cfi_adjust_cfa_offset  8
4027         call    __aesni_set_encrypt_key
4028         shll    $4,%esi
4029         testl   %eax,%eax
4030         jnz     .Ldec_key_ret
4031         leaq    16(%rdx,%rsi,1),%rdi
4032
4033         movups  (%rdx),%xmm0
4034         movups  (%rdi),%xmm1
4035         movups  %xmm0,(%rdi)
4036         movups  %xmm1,(%rdx)
4037         leaq    16(%rdx),%rdx
4038         leaq    -16(%rdi),%rdi
4039
4040 .Ldec_key_inverse:
4041         movups  (%rdx),%xmm0
4042         movups  (%rdi),%xmm1
4043 .byte   102,15,56,219,192
4044 .byte   102,15,56,219,201
4045         leaq    16(%rdx),%rdx
4046         leaq    -16(%rdi),%rdi
4047         movups  %xmm0,16(%rdi)
4048         movups  %xmm1,-16(%rdx)
4049         cmpq    %rdx,%rdi
4050         ja      .Ldec_key_inverse
4051
4052         movups  (%rdx),%xmm0
4053 .byte   102,15,56,219,192
4054         pxor    %xmm1,%xmm1
4055         movups  %xmm0,(%rdi)
4056         pxor    %xmm0,%xmm0
4057 .Ldec_key_ret:
4058         addq    $8,%rsp
4059 .cfi_adjust_cfa_offset  -8
4060         .byte   0xf3,0xc3
4061 .cfi_endproc    
4062 .LSEH_end_set_decrypt_key:
4063 .size   aesni_set_decrypt_key,.-aesni_set_decrypt_key
4064 .globl  aesni_set_encrypt_key
4065 .type   aesni_set_encrypt_key,@function
4066 .align  16
4067 aesni_set_encrypt_key:
4068 __aesni_set_encrypt_key:
4069 .cfi_startproc  
4070 .byte   0x48,0x83,0xEC,0x08
4071 .cfi_adjust_cfa_offset  8
4072         movq    $-1,%rax
4073         testq   %rdi,%rdi
4074         jz      .Lenc_key_ret
4075         testq   %rdx,%rdx
4076         jz      .Lenc_key_ret
4077
4078         movl    $268437504,%r10d
4079         movups  (%rdi),%xmm0
4080         xorps   %xmm4,%xmm4
4081         andl    OPENSSL_ia32cap_P+4(%rip),%r10d
4082         leaq    16(%rdx),%rax
4083         cmpl    $256,%esi
4084         je      .L14rounds
4085         cmpl    $192,%esi
4086         je      .L12rounds
4087         cmpl    $128,%esi
4088         jne     .Lbad_keybits
4089
4090 .L10rounds:
4091         movl    $9,%esi
4092         cmpl    $268435456,%r10d
4093         je      .L10rounds_alt
4094
4095         movups  %xmm0,(%rdx)
4096 .byte   102,15,58,223,200,1
4097         call    .Lkey_expansion_128_cold
4098 .byte   102,15,58,223,200,2
4099         call    .Lkey_expansion_128
4100 .byte   102,15,58,223,200,4
4101         call    .Lkey_expansion_128
4102 .byte   102,15,58,223,200,8
4103         call    .Lkey_expansion_128
4104 .byte   102,15,58,223,200,16
4105         call    .Lkey_expansion_128
4106 .byte   102,15,58,223,200,32
4107         call    .Lkey_expansion_128
4108 .byte   102,15,58,223,200,64
4109         call    .Lkey_expansion_128
4110 .byte   102,15,58,223,200,128
4111         call    .Lkey_expansion_128
4112 .byte   102,15,58,223,200,27
4113         call    .Lkey_expansion_128
4114 .byte   102,15,58,223,200,54
4115         call    .Lkey_expansion_128
4116         movups  %xmm0,(%rax)
4117         movl    %esi,80(%rax)
4118         xorl    %eax,%eax
4119         jmp     .Lenc_key_ret
4120
4121 .align  16
4122 .L10rounds_alt:
4123         movdqa  .Lkey_rotate(%rip),%xmm5
4124         movl    $8,%r10d
4125         movdqa  .Lkey_rcon1(%rip),%xmm4
4126         movdqa  %xmm0,%xmm2
4127         movdqu  %xmm0,(%rdx)
4128         jmp     .Loop_key128
4129
4130 .align  16
4131 .Loop_key128:
4132 .byte   102,15,56,0,197
4133 .byte   102,15,56,221,196
4134         pslld   $1,%xmm4
4135         leaq    16(%rax),%rax
4136
4137         movdqa  %xmm2,%xmm3
4138         pslldq  $4,%xmm2
4139         pxor    %xmm2,%xmm3
4140         pslldq  $4,%xmm2
4141         pxor    %xmm2,%xmm3
4142         pslldq  $4,%xmm2
4143         pxor    %xmm3,%xmm2
4144
4145         pxor    %xmm2,%xmm0
4146         movdqu  %xmm0,-16(%rax)
4147         movdqa  %xmm0,%xmm2
4148
4149         decl    %r10d
4150         jnz     .Loop_key128
4151
4152         movdqa  .Lkey_rcon1b(%rip),%xmm4
4153
4154 .byte   102,15,56,0,197
4155 .byte   102,15,56,221,196
4156         pslld   $1,%xmm4
4157
4158         movdqa  %xmm2,%xmm3
4159         pslldq  $4,%xmm2
4160         pxor    %xmm2,%xmm3
4161         pslldq  $4,%xmm2
4162         pxor    %xmm2,%xmm3
4163         pslldq  $4,%xmm2
4164         pxor    %xmm3,%xmm2
4165
4166         pxor    %xmm2,%xmm0
4167         movdqu  %xmm0,(%rax)
4168
4169         movdqa  %xmm0,%xmm2
4170 .byte   102,15,56,0,197
4171 .byte   102,15,56,221,196
4172
4173         movdqa  %xmm2,%xmm3
4174         pslldq  $4,%xmm2
4175         pxor    %xmm2,%xmm3
4176         pslldq  $4,%xmm2
4177         pxor    %xmm2,%xmm3
4178         pslldq  $4,%xmm2
4179         pxor    %xmm3,%xmm2
4180
4181         pxor    %xmm2,%xmm0
4182         movdqu  %xmm0,16(%rax)
4183
4184         movl    %esi,96(%rax)
4185         xorl    %eax,%eax
4186         jmp     .Lenc_key_ret
4187
4188 .align  16
4189 .L12rounds:
4190         movq    16(%rdi),%xmm2
4191         movl    $11,%esi
4192         cmpl    $268435456,%r10d
4193         je      .L12rounds_alt
4194
4195         movups  %xmm0,(%rdx)
4196 .byte   102,15,58,223,202,1
4197         call    .Lkey_expansion_192a_cold
4198 .byte   102,15,58,223,202,2
4199         call    .Lkey_expansion_192b
4200 .byte   102,15,58,223,202,4
4201         call    .Lkey_expansion_192a
4202 .byte   102,15,58,223,202,8
4203         call    .Lkey_expansion_192b
4204 .byte   102,15,58,223,202,16
4205         call    .Lkey_expansion_192a
4206 .byte   102,15,58,223,202,32
4207         call    .Lkey_expansion_192b
4208 .byte   102,15,58,223,202,64
4209         call    .Lkey_expansion_192a
4210 .byte   102,15,58,223,202,128
4211         call    .Lkey_expansion_192b
4212         movups  %xmm0,(%rax)
4213         movl    %esi,48(%rax)
4214         xorq    %rax,%rax
4215         jmp     .Lenc_key_ret
4216
4217 .align  16
4218 .L12rounds_alt:
4219         movdqa  .Lkey_rotate192(%rip),%xmm5
4220         movdqa  .Lkey_rcon1(%rip),%xmm4
4221         movl    $8,%r10d
4222         movdqu  %xmm0,(%rdx)
4223         jmp     .Loop_key192
4224
4225 .align  16
4226 .Loop_key192:
4227         movq    %xmm2,0(%rax)
4228         movdqa  %xmm2,%xmm1
4229 .byte   102,15,56,0,213
4230 .byte   102,15,56,221,212
4231         pslld   $1,%xmm4
4232         leaq    24(%rax),%rax
4233
4234         movdqa  %xmm0,%xmm3
4235         pslldq  $4,%xmm0
4236         pxor    %xmm0,%xmm3
4237         pslldq  $4,%xmm0
4238         pxor    %xmm0,%xmm3
4239         pslldq  $4,%xmm0
4240         pxor    %xmm3,%xmm0
4241
4242         pshufd  $0xff,%xmm0,%xmm3
4243         pxor    %xmm1,%xmm3
4244         pslldq  $4,%xmm1
4245         pxor    %xmm1,%xmm3
4246
4247         pxor    %xmm2,%xmm0
4248         pxor    %xmm3,%xmm2
4249         movdqu  %xmm0,-16(%rax)
4250
4251         decl    %r10d
4252         jnz     .Loop_key192
4253
4254         movl    %esi,32(%rax)
4255         xorl    %eax,%eax
4256         jmp     .Lenc_key_ret
4257
4258 .align  16
4259 .L14rounds:
4260         movups  16(%rdi),%xmm2
4261         movl    $13,%esi
4262         leaq    16(%rax),%rax
4263         cmpl    $268435456,%r10d
4264         je      .L14rounds_alt
4265
4266         movups  %xmm0,(%rdx)
4267         movups  %xmm2,16(%rdx)
4268 .byte   102,15,58,223,202,1
4269         call    .Lkey_expansion_256a_cold
4270 .byte   102,15,58,223,200,1
4271         call    .Lkey_expansion_256b
4272 .byte   102,15,58,223,202,2
4273         call    .Lkey_expansion_256a
4274 .byte   102,15,58,223,200,2
4275         call    .Lkey_expansion_256b
4276 .byte   102,15,58,223,202,4
4277         call    .Lkey_expansion_256a
4278 .byte   102,15,58,223,200,4
4279         call    .Lkey_expansion_256b
4280 .byte   102,15,58,223,202,8
4281         call    .Lkey_expansion_256a
4282 .byte   102,15,58,223,200,8
4283         call    .Lkey_expansion_256b
4284 .byte   102,15,58,223,202,16
4285         call    .Lkey_expansion_256a
4286 .byte   102,15,58,223,200,16
4287         call    .Lkey_expansion_256b
4288 .byte   102,15,58,223,202,32
4289         call    .Lkey_expansion_256a
4290 .byte   102,15,58,223,200,32
4291         call    .Lkey_expansion_256b
4292 .byte   102,15,58,223,202,64
4293         call    .Lkey_expansion_256a
4294         movups  %xmm0,(%rax)
4295         movl    %esi,16(%rax)
4296         xorq    %rax,%rax
4297         jmp     .Lenc_key_ret
4298
4299 .align  16
4300 .L14rounds_alt:
4301         movdqa  .Lkey_rotate(%rip),%xmm5
4302         movdqa  .Lkey_rcon1(%rip),%xmm4
4303         movl    $7,%r10d
4304         movdqu  %xmm0,0(%rdx)
4305         movdqa  %xmm2,%xmm1
4306         movdqu  %xmm2,16(%rdx)
4307         jmp     .Loop_key256
4308
4309 .align  16
4310 .Loop_key256:
4311 .byte   102,15,56,0,213
4312 .byte   102,15,56,221,212
4313
4314         movdqa  %xmm0,%xmm3
4315         pslldq  $4,%xmm0
4316         pxor    %xmm0,%xmm3
4317         pslldq  $4,%xmm0
4318         pxor    %xmm0,%xmm3
4319         pslldq  $4,%xmm0
4320         pxor    %xmm3,%xmm0
4321         pslld   $1,%xmm4
4322
4323         pxor    %xmm2,%xmm0
4324         movdqu  %xmm0,(%rax)
4325
4326         decl    %r10d
4327         jz      .Ldone_key256
4328
4329         pshufd  $0xff,%xmm0,%xmm2
4330         pxor    %xmm3,%xmm3
4331 .byte   102,15,56,221,211
4332
4333         movdqa  %xmm1,%xmm3
4334         pslldq  $4,%xmm1
4335         pxor    %xmm1,%xmm3
4336         pslldq  $4,%xmm1
4337         pxor    %xmm1,%xmm3
4338         pslldq  $4,%xmm1
4339         pxor    %xmm3,%xmm1
4340
4341         pxor    %xmm1,%xmm2
4342         movdqu  %xmm2,16(%rax)
4343         leaq    32(%rax),%rax
4344         movdqa  %xmm2,%xmm1
4345
4346         jmp     .Loop_key256
4347
4348 .Ldone_key256:
4349         movl    %esi,16(%rax)
4350         xorl    %eax,%eax
4351         jmp     .Lenc_key_ret
4352
4353 .align  16
4354 .Lbad_keybits:
4355         movq    $-2,%rax
4356 .Lenc_key_ret:
4357         pxor    %xmm0,%xmm0
4358         pxor    %xmm1,%xmm1
4359         pxor    %xmm2,%xmm2
4360         pxor    %xmm3,%xmm3
4361         pxor    %xmm4,%xmm4
4362         pxor    %xmm5,%xmm5
4363         addq    $8,%rsp
4364 .cfi_adjust_cfa_offset  -8
4365         .byte   0xf3,0xc3
4366 .cfi_endproc    
4367 .LSEH_end_set_encrypt_key:
4368
4369 .align  16
4370 .Lkey_expansion_128:
4371         movups  %xmm0,(%rax)
4372         leaq    16(%rax),%rax
4373 .Lkey_expansion_128_cold:
4374         shufps  $16,%xmm0,%xmm4
4375         xorps   %xmm4,%xmm0
4376         shufps  $140,%xmm0,%xmm4
4377         xorps   %xmm4,%xmm0
4378         shufps  $255,%xmm1,%xmm1
4379         xorps   %xmm1,%xmm0
4380         .byte   0xf3,0xc3
4381
4382 .align  16
4383 .Lkey_expansion_192a:
4384         movups  %xmm0,(%rax)
4385         leaq    16(%rax),%rax
4386 .Lkey_expansion_192a_cold:
4387         movaps  %xmm2,%xmm5
4388 .Lkey_expansion_192b_warm:
4389         shufps  $16,%xmm0,%xmm4
4390         movdqa  %xmm2,%xmm3
4391         xorps   %xmm4,%xmm0
4392         shufps  $140,%xmm0,%xmm4
4393         pslldq  $4,%xmm3
4394         xorps   %xmm4,%xmm0
4395         pshufd  $85,%xmm1,%xmm1
4396         pxor    %xmm3,%xmm2
4397         pxor    %xmm1,%xmm0
4398         pshufd  $255,%xmm0,%xmm3
4399         pxor    %xmm3,%xmm2
4400         .byte   0xf3,0xc3
4401
4402 .align  16
4403 .Lkey_expansion_192b:
4404         movaps  %xmm0,%xmm3
4405         shufps  $68,%xmm0,%xmm5
4406         movups  %xmm5,(%rax)
4407         shufps  $78,%xmm2,%xmm3
4408         movups  %xmm3,16(%rax)
4409         leaq    32(%rax),%rax
4410         jmp     .Lkey_expansion_192b_warm
4411
4412 .align  16
4413 .Lkey_expansion_256a:
4414         movups  %xmm2,(%rax)
4415         leaq    16(%rax),%rax
4416 .Lkey_expansion_256a_cold:
4417         shufps  $16,%xmm0,%xmm4
4418         xorps   %xmm4,%xmm0
4419         shufps  $140,%xmm0,%xmm4
4420         xorps   %xmm4,%xmm0
4421         shufps  $255,%xmm1,%xmm1
4422         xorps   %xmm1,%xmm0
4423         .byte   0xf3,0xc3
4424
4425 .align  16
4426 .Lkey_expansion_256b:
4427         movups  %xmm0,(%rax)
4428         leaq    16(%rax),%rax
4429
4430         shufps  $16,%xmm2,%xmm4
4431         xorps   %xmm4,%xmm2
4432         shufps  $140,%xmm2,%xmm4
4433         xorps   %xmm4,%xmm2
4434         shufps  $170,%xmm1,%xmm1
4435         xorps   %xmm1,%xmm2
4436         .byte   0xf3,0xc3
4437 .size   aesni_set_encrypt_key,.-aesni_set_encrypt_key
4438 .size   __aesni_set_encrypt_key,.-__aesni_set_encrypt_key
4439 .align  64
4440 .Lbswap_mask:
4441 .byte   15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
4442 .Lincrement32:
4443 .long   6,6,6,0
4444 .Lincrement64:
4445 .long   1,0,0,0
4446 .Lxts_magic:
4447 .long   0x87,0,1,0
4448 .Lincrement1:
4449 .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
4450 .Lkey_rotate:
4451 .long   0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d
4452 .Lkey_rotate192:
4453 .long   0x04070605,0x04070605,0x04070605,0x04070605
4454 .Lkey_rcon1:
4455 .long   1,1,1,1
4456 .Lkey_rcon1b:
4457 .long   0x1b,0x1b,0x1b,0x1b
4458
4459 .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
4460 .align  64