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