Import LibreSSL v2.4.2 to vendor branch
[dragonfly.git] / crypto / libressl / crypto / aes / bsaes-macosx-x86_64.s
blobdfce084d8191c5a624b3cdbc127cd5eaa91ab804
1 .text
7 .p2align 6
8 _bsaes_encrypt8:
9 leaq L$BS0(%rip),%r11
11 movdqa (%rax),%xmm8
12 leaq 16(%rax),%rax
13 movdqa 80(%r11),%xmm7
14 pxor %xmm8,%xmm15
15 pxor %xmm8,%xmm0
16 .byte 102,68,15,56,0,255
17 pxor %xmm8,%xmm1
18 .byte 102,15,56,0,199
19 pxor %xmm8,%xmm2
20 .byte 102,15,56,0,207
21 pxor %xmm8,%xmm3
22 .byte 102,15,56,0,215
23 pxor %xmm8,%xmm4
24 .byte 102,15,56,0,223
25 pxor %xmm8,%xmm5
26 .byte 102,15,56,0,231
27 pxor %xmm8,%xmm6
28 .byte 102,15,56,0,239
29 .byte 102,15,56,0,247
30 _bsaes_encrypt8_bitslice:
31 movdqa 0(%r11),%xmm7
32 movdqa 16(%r11),%xmm8
33 movdqa %xmm5,%xmm9
34 psrlq $1,%xmm5
35 movdqa %xmm3,%xmm10
36 psrlq $1,%xmm3
37 pxor %xmm6,%xmm5
38 pxor %xmm4,%xmm3
39 pand %xmm7,%xmm5
40 pand %xmm7,%xmm3
41 pxor %xmm5,%xmm6
42 psllq $1,%xmm5
43 pxor %xmm3,%xmm4
44 psllq $1,%xmm3
45 pxor %xmm9,%xmm5
46 pxor %xmm10,%xmm3
47 movdqa %xmm1,%xmm9
48 psrlq $1,%xmm1
49 movdqa %xmm15,%xmm10
50 psrlq $1,%xmm15
51 pxor %xmm2,%xmm1
52 pxor %xmm0,%xmm15
53 pand %xmm7,%xmm1
54 pand %xmm7,%xmm15
55 pxor %xmm1,%xmm2
56 psllq $1,%xmm1
57 pxor %xmm15,%xmm0
58 psllq $1,%xmm15
59 pxor %xmm9,%xmm1
60 pxor %xmm10,%xmm15
61 movdqa 32(%r11),%xmm7
62 movdqa %xmm4,%xmm9
63 psrlq $2,%xmm4
64 movdqa %xmm3,%xmm10
65 psrlq $2,%xmm3
66 pxor %xmm6,%xmm4
67 pxor %xmm5,%xmm3
68 pand %xmm8,%xmm4
69 pand %xmm8,%xmm3
70 pxor %xmm4,%xmm6
71 psllq $2,%xmm4
72 pxor %xmm3,%xmm5
73 psllq $2,%xmm3
74 pxor %xmm9,%xmm4
75 pxor %xmm10,%xmm3
76 movdqa %xmm0,%xmm9
77 psrlq $2,%xmm0
78 movdqa %xmm15,%xmm10
79 psrlq $2,%xmm15
80 pxor %xmm2,%xmm0
81 pxor %xmm1,%xmm15
82 pand %xmm8,%xmm0
83 pand %xmm8,%xmm15
84 pxor %xmm0,%xmm2
85 psllq $2,%xmm0
86 pxor %xmm15,%xmm1
87 psllq $2,%xmm15
88 pxor %xmm9,%xmm0
89 pxor %xmm10,%xmm15
90 movdqa %xmm2,%xmm9
91 psrlq $4,%xmm2
92 movdqa %xmm1,%xmm10
93 psrlq $4,%xmm1
94 pxor %xmm6,%xmm2
95 pxor %xmm5,%xmm1
96 pand %xmm7,%xmm2
97 pand %xmm7,%xmm1
98 pxor %xmm2,%xmm6
99 psllq $4,%xmm2
100 pxor %xmm1,%xmm5
101 psllq $4,%xmm1
102 pxor %xmm9,%xmm2
103 pxor %xmm10,%xmm1
104 movdqa %xmm0,%xmm9
105 psrlq $4,%xmm0
106 movdqa %xmm15,%xmm10
107 psrlq $4,%xmm15
108 pxor %xmm4,%xmm0
109 pxor %xmm3,%xmm15
110 pand %xmm7,%xmm0
111 pand %xmm7,%xmm15
112 pxor %xmm0,%xmm4
113 psllq $4,%xmm0
114 pxor %xmm15,%xmm3
115 psllq $4,%xmm15
116 pxor %xmm9,%xmm0
117 pxor %xmm10,%xmm15
118 decl %r10d
119 jmp L$enc_sbox
120 .p2align 4
121 L$enc_loop:
122 pxor 0(%rax),%xmm15
123 pxor 16(%rax),%xmm0
124 .byte 102,68,15,56,0,255
125 pxor 32(%rax),%xmm1
126 .byte 102,15,56,0,199
127 pxor 48(%rax),%xmm2
128 .byte 102,15,56,0,207
129 pxor 64(%rax),%xmm3
130 .byte 102,15,56,0,215
131 pxor 80(%rax),%xmm4
132 .byte 102,15,56,0,223
133 pxor 96(%rax),%xmm5
134 .byte 102,15,56,0,231
135 pxor 112(%rax),%xmm6
136 .byte 102,15,56,0,239
137 leaq 128(%rax),%rax
138 .byte 102,15,56,0,247
139 L$enc_sbox:
140 pxor %xmm5,%xmm4
141 pxor %xmm0,%xmm1
142 pxor %xmm15,%xmm2
143 pxor %xmm1,%xmm5
144 pxor %xmm15,%xmm4
146 pxor %xmm2,%xmm5
147 pxor %xmm6,%xmm2
148 pxor %xmm4,%xmm6
149 pxor %xmm3,%xmm2
150 pxor %xmm4,%xmm3
151 pxor %xmm0,%xmm2
153 pxor %xmm6,%xmm1
154 pxor %xmm4,%xmm0
155 movdqa %xmm6,%xmm10
156 movdqa %xmm0,%xmm9
157 movdqa %xmm4,%xmm8
158 movdqa %xmm1,%xmm12
159 movdqa %xmm5,%xmm11
161 pxor %xmm3,%xmm10
162 pxor %xmm1,%xmm9
163 pxor %xmm2,%xmm8
164 movdqa %xmm10,%xmm13
165 pxor %xmm3,%xmm12
166 movdqa %xmm9,%xmm7
167 pxor %xmm15,%xmm11
168 movdqa %xmm10,%xmm14
170 por %xmm8,%xmm9
171 por %xmm11,%xmm10
172 pxor %xmm7,%xmm14
173 pand %xmm11,%xmm13
174 pxor %xmm8,%xmm11
175 pand %xmm8,%xmm7
176 pand %xmm11,%xmm14
177 movdqa %xmm2,%xmm11
178 pxor %xmm15,%xmm11
179 pand %xmm11,%xmm12
180 pxor %xmm12,%xmm10
181 pxor %xmm12,%xmm9
182 movdqa %xmm6,%xmm12
183 movdqa %xmm4,%xmm11
184 pxor %xmm0,%xmm12
185 pxor %xmm5,%xmm11
186 movdqa %xmm12,%xmm8
187 pand %xmm11,%xmm12
188 por %xmm11,%xmm8
189 pxor %xmm12,%xmm7
190 pxor %xmm14,%xmm10
191 pxor %xmm13,%xmm9
192 pxor %xmm14,%xmm8
193 movdqa %xmm1,%xmm11
194 pxor %xmm13,%xmm7
195 movdqa %xmm3,%xmm12
196 pxor %xmm13,%xmm8
197 movdqa %xmm0,%xmm13
198 pand %xmm2,%xmm11
199 movdqa %xmm6,%xmm14
200 pand %xmm15,%xmm12
201 pand %xmm4,%xmm13
202 por %xmm5,%xmm14
203 pxor %xmm11,%xmm10
204 pxor %xmm12,%xmm9
205 pxor %xmm13,%xmm8
206 pxor %xmm14,%xmm7
212 movdqa %xmm10,%xmm11
213 pand %xmm8,%xmm10
214 pxor %xmm9,%xmm11
216 movdqa %xmm7,%xmm13
217 movdqa %xmm11,%xmm14
218 pxor %xmm10,%xmm13
219 pand %xmm13,%xmm14
221 movdqa %xmm8,%xmm12
222 pxor %xmm9,%xmm14
223 pxor %xmm7,%xmm12
225 pxor %xmm9,%xmm10
227 pand %xmm10,%xmm12
229 movdqa %xmm13,%xmm9
230 pxor %xmm7,%xmm12
232 pxor %xmm12,%xmm9
233 pxor %xmm12,%xmm8
235 pand %xmm7,%xmm9
237 pxor %xmm9,%xmm13
238 pxor %xmm9,%xmm8
240 pand %xmm14,%xmm13
242 pxor %xmm11,%xmm13
243 movdqa %xmm5,%xmm11
244 movdqa %xmm4,%xmm7
245 movdqa %xmm14,%xmm9
246 pxor %xmm13,%xmm9
247 pand %xmm5,%xmm9
248 pxor %xmm4,%xmm5
249 pand %xmm14,%xmm4
250 pand %xmm13,%xmm5
251 pxor %xmm4,%xmm5
252 pxor %xmm9,%xmm4
253 pxor %xmm15,%xmm11
254 pxor %xmm2,%xmm7
255 pxor %xmm12,%xmm14
256 pxor %xmm8,%xmm13
257 movdqa %xmm14,%xmm10
258 movdqa %xmm12,%xmm9
259 pxor %xmm13,%xmm10
260 pxor %xmm8,%xmm9
261 pand %xmm11,%xmm10
262 pand %xmm15,%xmm9
263 pxor %xmm7,%xmm11
264 pxor %xmm2,%xmm15
265 pand %xmm14,%xmm7
266 pand %xmm12,%xmm2
267 pand %xmm13,%xmm11
268 pand %xmm8,%xmm15
269 pxor %xmm11,%xmm7
270 pxor %xmm2,%xmm15
271 pxor %xmm10,%xmm11
272 pxor %xmm9,%xmm2
273 pxor %xmm11,%xmm5
274 pxor %xmm11,%xmm15
275 pxor %xmm7,%xmm4
276 pxor %xmm7,%xmm2
278 movdqa %xmm6,%xmm11
279 movdqa %xmm0,%xmm7
280 pxor %xmm3,%xmm11
281 pxor %xmm1,%xmm7
282 movdqa %xmm14,%xmm10
283 movdqa %xmm12,%xmm9
284 pxor %xmm13,%xmm10
285 pxor %xmm8,%xmm9
286 pand %xmm11,%xmm10
287 pand %xmm3,%xmm9
288 pxor %xmm7,%xmm11
289 pxor %xmm1,%xmm3
290 pand %xmm14,%xmm7
291 pand %xmm12,%xmm1
292 pand %xmm13,%xmm11
293 pand %xmm8,%xmm3
294 pxor %xmm11,%xmm7
295 pxor %xmm1,%xmm3
296 pxor %xmm10,%xmm11
297 pxor %xmm9,%xmm1
298 pxor %xmm12,%xmm14
299 pxor %xmm8,%xmm13
300 movdqa %xmm14,%xmm10
301 pxor %xmm13,%xmm10
302 pand %xmm6,%xmm10
303 pxor %xmm0,%xmm6
304 pand %xmm14,%xmm0
305 pand %xmm13,%xmm6
306 pxor %xmm0,%xmm6
307 pxor %xmm10,%xmm0
308 pxor %xmm11,%xmm6
309 pxor %xmm11,%xmm3
310 pxor %xmm7,%xmm0
311 pxor %xmm7,%xmm1
312 pxor %xmm15,%xmm6
313 pxor %xmm5,%xmm0
314 pxor %xmm6,%xmm3
315 pxor %xmm15,%xmm5
316 pxor %xmm0,%xmm15
318 pxor %xmm4,%xmm0
319 pxor %xmm1,%xmm4
320 pxor %xmm2,%xmm1
321 pxor %xmm4,%xmm2
322 pxor %xmm4,%xmm3
324 pxor %xmm2,%xmm5
325 decl %r10d
326 jl L$enc_done
327 pshufd $147,%xmm15,%xmm7
328 pshufd $147,%xmm0,%xmm8
329 pxor %xmm7,%xmm15
330 pshufd $147,%xmm3,%xmm9
331 pxor %xmm8,%xmm0
332 pshufd $147,%xmm5,%xmm10
333 pxor %xmm9,%xmm3
334 pshufd $147,%xmm2,%xmm11
335 pxor %xmm10,%xmm5
336 pshufd $147,%xmm6,%xmm12
337 pxor %xmm11,%xmm2
338 pshufd $147,%xmm1,%xmm13
339 pxor %xmm12,%xmm6
340 pshufd $147,%xmm4,%xmm14
341 pxor %xmm13,%xmm1
342 pxor %xmm14,%xmm4
344 pxor %xmm15,%xmm8
345 pxor %xmm4,%xmm7
346 pxor %xmm4,%xmm8
347 pshufd $78,%xmm15,%xmm15
348 pxor %xmm0,%xmm9
349 pshufd $78,%xmm0,%xmm0
350 pxor %xmm2,%xmm12
351 pxor %xmm7,%xmm15
352 pxor %xmm6,%xmm13
353 pxor %xmm8,%xmm0
354 pxor %xmm5,%xmm11
355 pshufd $78,%xmm2,%xmm7
356 pxor %xmm1,%xmm14
357 pshufd $78,%xmm6,%xmm8
358 pxor %xmm3,%xmm10
359 pshufd $78,%xmm5,%xmm2
360 pxor %xmm4,%xmm10
361 pshufd $78,%xmm4,%xmm6
362 pxor %xmm4,%xmm11
363 pshufd $78,%xmm1,%xmm5
364 pxor %xmm11,%xmm7
365 pshufd $78,%xmm3,%xmm1
366 pxor %xmm12,%xmm8
367 pxor %xmm10,%xmm2
368 pxor %xmm14,%xmm6
369 pxor %xmm13,%xmm5
370 movdqa %xmm7,%xmm3
371 pxor %xmm9,%xmm1
372 movdqa %xmm8,%xmm4
373 movdqa 48(%r11),%xmm7
374 jnz L$enc_loop
375 movdqa 64(%r11),%xmm7
376 jmp L$enc_loop
377 .p2align 4
378 L$enc_done:
379 movdqa 0(%r11),%xmm7
380 movdqa 16(%r11),%xmm8
381 movdqa %xmm1,%xmm9
382 psrlq $1,%xmm1
383 movdqa %xmm2,%xmm10
384 psrlq $1,%xmm2
385 pxor %xmm4,%xmm1
386 pxor %xmm6,%xmm2
387 pand %xmm7,%xmm1
388 pand %xmm7,%xmm2
389 pxor %xmm1,%xmm4
390 psllq $1,%xmm1
391 pxor %xmm2,%xmm6
392 psllq $1,%xmm2
393 pxor %xmm9,%xmm1
394 pxor %xmm10,%xmm2
395 movdqa %xmm3,%xmm9
396 psrlq $1,%xmm3
397 movdqa %xmm15,%xmm10
398 psrlq $1,%xmm15
399 pxor %xmm5,%xmm3
400 pxor %xmm0,%xmm15
401 pand %xmm7,%xmm3
402 pand %xmm7,%xmm15
403 pxor %xmm3,%xmm5
404 psllq $1,%xmm3
405 pxor %xmm15,%xmm0
406 psllq $1,%xmm15
407 pxor %xmm9,%xmm3
408 pxor %xmm10,%xmm15
409 movdqa 32(%r11),%xmm7
410 movdqa %xmm6,%xmm9
411 psrlq $2,%xmm6
412 movdqa %xmm2,%xmm10
413 psrlq $2,%xmm2
414 pxor %xmm4,%xmm6
415 pxor %xmm1,%xmm2
416 pand %xmm8,%xmm6
417 pand %xmm8,%xmm2
418 pxor %xmm6,%xmm4
419 psllq $2,%xmm6
420 pxor %xmm2,%xmm1
421 psllq $2,%xmm2
422 pxor %xmm9,%xmm6
423 pxor %xmm10,%xmm2
424 movdqa %xmm0,%xmm9
425 psrlq $2,%xmm0
426 movdqa %xmm15,%xmm10
427 psrlq $2,%xmm15
428 pxor %xmm5,%xmm0
429 pxor %xmm3,%xmm15
430 pand %xmm8,%xmm0
431 pand %xmm8,%xmm15
432 pxor %xmm0,%xmm5
433 psllq $2,%xmm0
434 pxor %xmm15,%xmm3
435 psllq $2,%xmm15
436 pxor %xmm9,%xmm0
437 pxor %xmm10,%xmm15
438 movdqa %xmm5,%xmm9
439 psrlq $4,%xmm5
440 movdqa %xmm3,%xmm10
441 psrlq $4,%xmm3
442 pxor %xmm4,%xmm5
443 pxor %xmm1,%xmm3
444 pand %xmm7,%xmm5
445 pand %xmm7,%xmm3
446 pxor %xmm5,%xmm4
447 psllq $4,%xmm5
448 pxor %xmm3,%xmm1
449 psllq $4,%xmm3
450 pxor %xmm9,%xmm5
451 pxor %xmm10,%xmm3
452 movdqa %xmm0,%xmm9
453 psrlq $4,%xmm0
454 movdqa %xmm15,%xmm10
455 psrlq $4,%xmm15
456 pxor %xmm6,%xmm0
457 pxor %xmm2,%xmm15
458 pand %xmm7,%xmm0
459 pand %xmm7,%xmm15
460 pxor %xmm0,%xmm6
461 psllq $4,%xmm0
462 pxor %xmm15,%xmm2
463 psllq $4,%xmm15
464 pxor %xmm9,%xmm0
465 pxor %xmm10,%xmm15
466 movdqa (%rax),%xmm7
467 pxor %xmm7,%xmm3
468 pxor %xmm7,%xmm5
469 pxor %xmm7,%xmm2
470 pxor %xmm7,%xmm6
471 pxor %xmm7,%xmm1
472 pxor %xmm7,%xmm4
473 pxor %xmm7,%xmm15
474 pxor %xmm7,%xmm0
475 .byte 0xf3,0xc3
479 .p2align 6
480 _bsaes_decrypt8:
481 leaq L$BS0(%rip),%r11
483 movdqa (%rax),%xmm8
484 leaq 16(%rax),%rax
485 movdqa -48(%r11),%xmm7
486 pxor %xmm8,%xmm15
487 pxor %xmm8,%xmm0
488 .byte 102,68,15,56,0,255
489 pxor %xmm8,%xmm1
490 .byte 102,15,56,0,199
491 pxor %xmm8,%xmm2
492 .byte 102,15,56,0,207
493 pxor %xmm8,%xmm3
494 .byte 102,15,56,0,215
495 pxor %xmm8,%xmm4
496 .byte 102,15,56,0,223
497 pxor %xmm8,%xmm5
498 .byte 102,15,56,0,231
499 pxor %xmm8,%xmm6
500 .byte 102,15,56,0,239
501 .byte 102,15,56,0,247
502 movdqa 0(%r11),%xmm7
503 movdqa 16(%r11),%xmm8
504 movdqa %xmm5,%xmm9
505 psrlq $1,%xmm5
506 movdqa %xmm3,%xmm10
507 psrlq $1,%xmm3
508 pxor %xmm6,%xmm5
509 pxor %xmm4,%xmm3
510 pand %xmm7,%xmm5
511 pand %xmm7,%xmm3
512 pxor %xmm5,%xmm6
513 psllq $1,%xmm5
514 pxor %xmm3,%xmm4
515 psllq $1,%xmm3
516 pxor %xmm9,%xmm5
517 pxor %xmm10,%xmm3
518 movdqa %xmm1,%xmm9
519 psrlq $1,%xmm1
520 movdqa %xmm15,%xmm10
521 psrlq $1,%xmm15
522 pxor %xmm2,%xmm1
523 pxor %xmm0,%xmm15
524 pand %xmm7,%xmm1
525 pand %xmm7,%xmm15
526 pxor %xmm1,%xmm2
527 psllq $1,%xmm1
528 pxor %xmm15,%xmm0
529 psllq $1,%xmm15
530 pxor %xmm9,%xmm1
531 pxor %xmm10,%xmm15
532 movdqa 32(%r11),%xmm7
533 movdqa %xmm4,%xmm9
534 psrlq $2,%xmm4
535 movdqa %xmm3,%xmm10
536 psrlq $2,%xmm3
537 pxor %xmm6,%xmm4
538 pxor %xmm5,%xmm3
539 pand %xmm8,%xmm4
540 pand %xmm8,%xmm3
541 pxor %xmm4,%xmm6
542 psllq $2,%xmm4
543 pxor %xmm3,%xmm5
544 psllq $2,%xmm3
545 pxor %xmm9,%xmm4
546 pxor %xmm10,%xmm3
547 movdqa %xmm0,%xmm9
548 psrlq $2,%xmm0
549 movdqa %xmm15,%xmm10
550 psrlq $2,%xmm15
551 pxor %xmm2,%xmm0
552 pxor %xmm1,%xmm15
553 pand %xmm8,%xmm0
554 pand %xmm8,%xmm15
555 pxor %xmm0,%xmm2
556 psllq $2,%xmm0
557 pxor %xmm15,%xmm1
558 psllq $2,%xmm15
559 pxor %xmm9,%xmm0
560 pxor %xmm10,%xmm15
561 movdqa %xmm2,%xmm9
562 psrlq $4,%xmm2
563 movdqa %xmm1,%xmm10
564 psrlq $4,%xmm1
565 pxor %xmm6,%xmm2
566 pxor %xmm5,%xmm1
567 pand %xmm7,%xmm2
568 pand %xmm7,%xmm1
569 pxor %xmm2,%xmm6
570 psllq $4,%xmm2
571 pxor %xmm1,%xmm5
572 psllq $4,%xmm1
573 pxor %xmm9,%xmm2
574 pxor %xmm10,%xmm1
575 movdqa %xmm0,%xmm9
576 psrlq $4,%xmm0
577 movdqa %xmm15,%xmm10
578 psrlq $4,%xmm15
579 pxor %xmm4,%xmm0
580 pxor %xmm3,%xmm15
581 pand %xmm7,%xmm0
582 pand %xmm7,%xmm15
583 pxor %xmm0,%xmm4
584 psllq $4,%xmm0
585 pxor %xmm15,%xmm3
586 psllq $4,%xmm15
587 pxor %xmm9,%xmm0
588 pxor %xmm10,%xmm15
589 decl %r10d
590 jmp L$dec_sbox
591 .p2align 4
592 L$dec_loop:
593 pxor 0(%rax),%xmm15
594 pxor 16(%rax),%xmm0
595 .byte 102,68,15,56,0,255
596 pxor 32(%rax),%xmm1
597 .byte 102,15,56,0,199
598 pxor 48(%rax),%xmm2
599 .byte 102,15,56,0,207
600 pxor 64(%rax),%xmm3
601 .byte 102,15,56,0,215
602 pxor 80(%rax),%xmm4
603 .byte 102,15,56,0,223
604 pxor 96(%rax),%xmm5
605 .byte 102,15,56,0,231
606 pxor 112(%rax),%xmm6
607 .byte 102,15,56,0,239
608 leaq 128(%rax),%rax
609 .byte 102,15,56,0,247
610 L$dec_sbox:
611 pxor %xmm3,%xmm2
613 pxor %xmm6,%xmm3
614 pxor %xmm6,%xmm1
615 pxor %xmm3,%xmm5
616 pxor %xmm5,%xmm6
617 pxor %xmm6,%xmm0
619 pxor %xmm0,%xmm15
620 pxor %xmm4,%xmm1
621 pxor %xmm15,%xmm2
622 pxor %xmm15,%xmm4
623 pxor %xmm2,%xmm0
624 movdqa %xmm2,%xmm10
625 movdqa %xmm6,%xmm9
626 movdqa %xmm0,%xmm8
627 movdqa %xmm3,%xmm12
628 movdqa %xmm4,%xmm11
630 pxor %xmm15,%xmm10
631 pxor %xmm3,%xmm9
632 pxor %xmm5,%xmm8
633 movdqa %xmm10,%xmm13
634 pxor %xmm15,%xmm12
635 movdqa %xmm9,%xmm7
636 pxor %xmm1,%xmm11
637 movdqa %xmm10,%xmm14
639 por %xmm8,%xmm9
640 por %xmm11,%xmm10
641 pxor %xmm7,%xmm14
642 pand %xmm11,%xmm13
643 pxor %xmm8,%xmm11
644 pand %xmm8,%xmm7
645 pand %xmm11,%xmm14
646 movdqa %xmm5,%xmm11
647 pxor %xmm1,%xmm11
648 pand %xmm11,%xmm12
649 pxor %xmm12,%xmm10
650 pxor %xmm12,%xmm9
651 movdqa %xmm2,%xmm12
652 movdqa %xmm0,%xmm11
653 pxor %xmm6,%xmm12
654 pxor %xmm4,%xmm11
655 movdqa %xmm12,%xmm8
656 pand %xmm11,%xmm12
657 por %xmm11,%xmm8
658 pxor %xmm12,%xmm7
659 pxor %xmm14,%xmm10
660 pxor %xmm13,%xmm9
661 pxor %xmm14,%xmm8
662 movdqa %xmm3,%xmm11
663 pxor %xmm13,%xmm7
664 movdqa %xmm15,%xmm12
665 pxor %xmm13,%xmm8
666 movdqa %xmm6,%xmm13
667 pand %xmm5,%xmm11
668 movdqa %xmm2,%xmm14
669 pand %xmm1,%xmm12
670 pand %xmm0,%xmm13
671 por %xmm4,%xmm14
672 pxor %xmm11,%xmm10
673 pxor %xmm12,%xmm9
674 pxor %xmm13,%xmm8
675 pxor %xmm14,%xmm7
681 movdqa %xmm10,%xmm11
682 pand %xmm8,%xmm10
683 pxor %xmm9,%xmm11
685 movdqa %xmm7,%xmm13
686 movdqa %xmm11,%xmm14
687 pxor %xmm10,%xmm13
688 pand %xmm13,%xmm14
690 movdqa %xmm8,%xmm12
691 pxor %xmm9,%xmm14
692 pxor %xmm7,%xmm12
694 pxor %xmm9,%xmm10
696 pand %xmm10,%xmm12
698 movdqa %xmm13,%xmm9
699 pxor %xmm7,%xmm12
701 pxor %xmm12,%xmm9
702 pxor %xmm12,%xmm8
704 pand %xmm7,%xmm9
706 pxor %xmm9,%xmm13
707 pxor %xmm9,%xmm8
709 pand %xmm14,%xmm13
711 pxor %xmm11,%xmm13
712 movdqa %xmm4,%xmm11
713 movdqa %xmm0,%xmm7
714 movdqa %xmm14,%xmm9
715 pxor %xmm13,%xmm9
716 pand %xmm4,%xmm9
717 pxor %xmm0,%xmm4
718 pand %xmm14,%xmm0
719 pand %xmm13,%xmm4
720 pxor %xmm0,%xmm4
721 pxor %xmm9,%xmm0
722 pxor %xmm1,%xmm11
723 pxor %xmm5,%xmm7
724 pxor %xmm12,%xmm14
725 pxor %xmm8,%xmm13
726 movdqa %xmm14,%xmm10
727 movdqa %xmm12,%xmm9
728 pxor %xmm13,%xmm10
729 pxor %xmm8,%xmm9
730 pand %xmm11,%xmm10
731 pand %xmm1,%xmm9
732 pxor %xmm7,%xmm11
733 pxor %xmm5,%xmm1
734 pand %xmm14,%xmm7
735 pand %xmm12,%xmm5
736 pand %xmm13,%xmm11
737 pand %xmm8,%xmm1
738 pxor %xmm11,%xmm7
739 pxor %xmm5,%xmm1
740 pxor %xmm10,%xmm11
741 pxor %xmm9,%xmm5
742 pxor %xmm11,%xmm4
743 pxor %xmm11,%xmm1
744 pxor %xmm7,%xmm0
745 pxor %xmm7,%xmm5
747 movdqa %xmm2,%xmm11
748 movdqa %xmm6,%xmm7
749 pxor %xmm15,%xmm11
750 pxor %xmm3,%xmm7
751 movdqa %xmm14,%xmm10
752 movdqa %xmm12,%xmm9
753 pxor %xmm13,%xmm10
754 pxor %xmm8,%xmm9
755 pand %xmm11,%xmm10
756 pand %xmm15,%xmm9
757 pxor %xmm7,%xmm11
758 pxor %xmm3,%xmm15
759 pand %xmm14,%xmm7
760 pand %xmm12,%xmm3
761 pand %xmm13,%xmm11
762 pand %xmm8,%xmm15
763 pxor %xmm11,%xmm7
764 pxor %xmm3,%xmm15
765 pxor %xmm10,%xmm11
766 pxor %xmm9,%xmm3
767 pxor %xmm12,%xmm14
768 pxor %xmm8,%xmm13
769 movdqa %xmm14,%xmm10
770 pxor %xmm13,%xmm10
771 pand %xmm2,%xmm10
772 pxor %xmm6,%xmm2
773 pand %xmm14,%xmm6
774 pand %xmm13,%xmm2
775 pxor %xmm6,%xmm2
776 pxor %xmm10,%xmm6
777 pxor %xmm11,%xmm2
778 pxor %xmm11,%xmm15
779 pxor %xmm7,%xmm6
780 pxor %xmm7,%xmm3
781 pxor %xmm6,%xmm0
782 pxor %xmm4,%xmm5
784 pxor %xmm0,%xmm3
785 pxor %xmm6,%xmm1
786 pxor %xmm6,%xmm4
787 pxor %xmm1,%xmm3
788 pxor %xmm15,%xmm6
789 pxor %xmm4,%xmm3
790 pxor %xmm5,%xmm2
791 pxor %xmm0,%xmm5
792 pxor %xmm3,%xmm2
794 pxor %xmm15,%xmm3
795 pxor %xmm2,%xmm6
796 decl %r10d
797 jl L$dec_done
799 pshufd $78,%xmm15,%xmm7
800 pshufd $78,%xmm2,%xmm13
801 pxor %xmm15,%xmm7
802 pshufd $78,%xmm4,%xmm14
803 pxor %xmm2,%xmm13
804 pshufd $78,%xmm0,%xmm8
805 pxor %xmm4,%xmm14
806 pshufd $78,%xmm5,%xmm9
807 pxor %xmm0,%xmm8
808 pshufd $78,%xmm3,%xmm10
809 pxor %xmm5,%xmm9
810 pxor %xmm13,%xmm15
811 pxor %xmm13,%xmm0
812 pshufd $78,%xmm1,%xmm11
813 pxor %xmm3,%xmm10
814 pxor %xmm7,%xmm5
815 pxor %xmm8,%xmm3
816 pshufd $78,%xmm6,%xmm12
817 pxor %xmm1,%xmm11
818 pxor %xmm14,%xmm0
819 pxor %xmm9,%xmm1
820 pxor %xmm6,%xmm12
822 pxor %xmm14,%xmm5
823 pxor %xmm13,%xmm3
824 pxor %xmm13,%xmm1
825 pxor %xmm10,%xmm6
826 pxor %xmm11,%xmm2
827 pxor %xmm14,%xmm1
828 pxor %xmm14,%xmm6
829 pxor %xmm12,%xmm4
830 pshufd $147,%xmm15,%xmm7
831 pshufd $147,%xmm0,%xmm8
832 pxor %xmm7,%xmm15
833 pshufd $147,%xmm5,%xmm9
834 pxor %xmm8,%xmm0
835 pshufd $147,%xmm3,%xmm10
836 pxor %xmm9,%xmm5
837 pshufd $147,%xmm1,%xmm11
838 pxor %xmm10,%xmm3
839 pshufd $147,%xmm6,%xmm12
840 pxor %xmm11,%xmm1
841 pshufd $147,%xmm2,%xmm13
842 pxor %xmm12,%xmm6
843 pshufd $147,%xmm4,%xmm14
844 pxor %xmm13,%xmm2
845 pxor %xmm14,%xmm4
847 pxor %xmm15,%xmm8
848 pxor %xmm4,%xmm7
849 pxor %xmm4,%xmm8
850 pshufd $78,%xmm15,%xmm15
851 pxor %xmm0,%xmm9
852 pshufd $78,%xmm0,%xmm0
853 pxor %xmm1,%xmm12
854 pxor %xmm7,%xmm15
855 pxor %xmm6,%xmm13
856 pxor %xmm8,%xmm0
857 pxor %xmm3,%xmm11
858 pshufd $78,%xmm1,%xmm7
859 pxor %xmm2,%xmm14
860 pshufd $78,%xmm6,%xmm8
861 pxor %xmm5,%xmm10
862 pshufd $78,%xmm3,%xmm1
863 pxor %xmm4,%xmm10
864 pshufd $78,%xmm4,%xmm6
865 pxor %xmm4,%xmm11
866 pshufd $78,%xmm2,%xmm3
867 pxor %xmm11,%xmm7
868 pshufd $78,%xmm5,%xmm2
869 pxor %xmm12,%xmm8
870 pxor %xmm1,%xmm10
871 pxor %xmm14,%xmm6
872 pxor %xmm3,%xmm13
873 movdqa %xmm7,%xmm3
874 pxor %xmm9,%xmm2
875 movdqa %xmm13,%xmm5
876 movdqa %xmm8,%xmm4
877 movdqa %xmm2,%xmm1
878 movdqa %xmm10,%xmm2
879 movdqa -16(%r11),%xmm7
880 jnz L$dec_loop
881 movdqa -32(%r11),%xmm7
882 jmp L$dec_loop
883 .p2align 4
884 L$dec_done:
885 movdqa 0(%r11),%xmm7
886 movdqa 16(%r11),%xmm8
887 movdqa %xmm2,%xmm9
888 psrlq $1,%xmm2
889 movdqa %xmm1,%xmm10
890 psrlq $1,%xmm1
891 pxor %xmm4,%xmm2
892 pxor %xmm6,%xmm1
893 pand %xmm7,%xmm2
894 pand %xmm7,%xmm1
895 pxor %xmm2,%xmm4
896 psllq $1,%xmm2
897 pxor %xmm1,%xmm6
898 psllq $1,%xmm1
899 pxor %xmm9,%xmm2
900 pxor %xmm10,%xmm1
901 movdqa %xmm5,%xmm9
902 psrlq $1,%xmm5
903 movdqa %xmm15,%xmm10
904 psrlq $1,%xmm15
905 pxor %xmm3,%xmm5
906 pxor %xmm0,%xmm15
907 pand %xmm7,%xmm5
908 pand %xmm7,%xmm15
909 pxor %xmm5,%xmm3
910 psllq $1,%xmm5
911 pxor %xmm15,%xmm0
912 psllq $1,%xmm15
913 pxor %xmm9,%xmm5
914 pxor %xmm10,%xmm15
915 movdqa 32(%r11),%xmm7
916 movdqa %xmm6,%xmm9
917 psrlq $2,%xmm6
918 movdqa %xmm1,%xmm10
919 psrlq $2,%xmm1
920 pxor %xmm4,%xmm6
921 pxor %xmm2,%xmm1
922 pand %xmm8,%xmm6
923 pand %xmm8,%xmm1
924 pxor %xmm6,%xmm4
925 psllq $2,%xmm6
926 pxor %xmm1,%xmm2
927 psllq $2,%xmm1
928 pxor %xmm9,%xmm6
929 pxor %xmm10,%xmm1
930 movdqa %xmm0,%xmm9
931 psrlq $2,%xmm0
932 movdqa %xmm15,%xmm10
933 psrlq $2,%xmm15
934 pxor %xmm3,%xmm0
935 pxor %xmm5,%xmm15
936 pand %xmm8,%xmm0
937 pand %xmm8,%xmm15
938 pxor %xmm0,%xmm3
939 psllq $2,%xmm0
940 pxor %xmm15,%xmm5
941 psllq $2,%xmm15
942 pxor %xmm9,%xmm0
943 pxor %xmm10,%xmm15
944 movdqa %xmm3,%xmm9
945 psrlq $4,%xmm3
946 movdqa %xmm5,%xmm10
947 psrlq $4,%xmm5
948 pxor %xmm4,%xmm3
949 pxor %xmm2,%xmm5
950 pand %xmm7,%xmm3
951 pand %xmm7,%xmm5
952 pxor %xmm3,%xmm4
953 psllq $4,%xmm3
954 pxor %xmm5,%xmm2
955 psllq $4,%xmm5
956 pxor %xmm9,%xmm3
957 pxor %xmm10,%xmm5
958 movdqa %xmm0,%xmm9
959 psrlq $4,%xmm0
960 movdqa %xmm15,%xmm10
961 psrlq $4,%xmm15
962 pxor %xmm6,%xmm0
963 pxor %xmm1,%xmm15
964 pand %xmm7,%xmm0
965 pand %xmm7,%xmm15
966 pxor %xmm0,%xmm6
967 psllq $4,%xmm0
968 pxor %xmm15,%xmm1
969 psllq $4,%xmm15
970 pxor %xmm9,%xmm0
971 pxor %xmm10,%xmm15
972 movdqa (%rax),%xmm7
973 pxor %xmm7,%xmm5
974 pxor %xmm7,%xmm3
975 pxor %xmm7,%xmm1
976 pxor %xmm7,%xmm6
977 pxor %xmm7,%xmm2
978 pxor %xmm7,%xmm4
979 pxor %xmm7,%xmm15
980 pxor %xmm7,%xmm0
981 .byte 0xf3,0xc3
984 .p2align 4
985 _bsaes_key_convert:
986 leaq L$masks(%rip),%r11
987 movdqu (%rcx),%xmm7
988 leaq 16(%rcx),%rcx
989 movdqa 0(%r11),%xmm0
990 movdqa 16(%r11),%xmm1
991 movdqa 32(%r11),%xmm2
992 movdqa 48(%r11),%xmm3
993 movdqa 64(%r11),%xmm4
994 pcmpeqd %xmm5,%xmm5
996 movdqu (%rcx),%xmm6
997 movdqa %xmm7,(%rax)
998 leaq 16(%rax),%rax
999 decl %r10d
1000 jmp L$key_loop
1001 .p2align 4
1002 L$key_loop:
1003 .byte 102,15,56,0,244
1005 movdqa %xmm0,%xmm8
1006 movdqa %xmm1,%xmm9
1008 pand %xmm6,%xmm8
1009 pand %xmm6,%xmm9
1010 movdqa %xmm2,%xmm10
1011 pcmpeqb %xmm0,%xmm8
1012 psllq $4,%xmm0
1013 movdqa %xmm3,%xmm11
1014 pcmpeqb %xmm1,%xmm9
1015 psllq $4,%xmm1
1017 pand %xmm6,%xmm10
1018 pand %xmm6,%xmm11
1019 movdqa %xmm0,%xmm12
1020 pcmpeqb %xmm2,%xmm10
1021 psllq $4,%xmm2
1022 movdqa %xmm1,%xmm13
1023 pcmpeqb %xmm3,%xmm11
1024 psllq $4,%xmm3
1026 movdqa %xmm2,%xmm14
1027 movdqa %xmm3,%xmm15
1028 pxor %xmm5,%xmm8
1029 pxor %xmm5,%xmm9
1031 pand %xmm6,%xmm12
1032 pand %xmm6,%xmm13
1033 movdqa %xmm8,0(%rax)
1034 pcmpeqb %xmm0,%xmm12
1035 psrlq $4,%xmm0
1036 movdqa %xmm9,16(%rax)
1037 pcmpeqb %xmm1,%xmm13
1038 psrlq $4,%xmm1
1039 leaq 16(%rcx),%rcx
1041 pand %xmm6,%xmm14
1042 pand %xmm6,%xmm15
1043 movdqa %xmm10,32(%rax)
1044 pcmpeqb %xmm2,%xmm14
1045 psrlq $4,%xmm2
1046 movdqa %xmm11,48(%rax)
1047 pcmpeqb %xmm3,%xmm15
1048 psrlq $4,%xmm3
1049 movdqu (%rcx),%xmm6
1051 pxor %xmm5,%xmm13
1052 pxor %xmm5,%xmm14
1053 movdqa %xmm12,64(%rax)
1054 movdqa %xmm13,80(%rax)
1055 movdqa %xmm14,96(%rax)
1056 movdqa %xmm15,112(%rax)
1057 leaq 128(%rax),%rax
1058 decl %r10d
1059 jnz L$key_loop
1061 movdqa 80(%r11),%xmm7
1063 .byte 0xf3,0xc3
1066 .globl _bsaes_cbc_encrypt
1068 .p2align 4
1069 _bsaes_cbc_encrypt:
1070 cmpl $0,%r9d
1071 jne _asm_AES_cbc_encrypt
1072 cmpq $128,%rdx
1073 jb _asm_AES_cbc_encrypt
1075 movq %rsp,%rax
1076 L$cbc_dec_prologue:
1077 pushq %rbp
1078 pushq %rbx
1079 pushq %r12
1080 pushq %r13
1081 pushq %r14
1082 pushq %r15
1083 leaq -72(%rsp),%rsp
1084 movq %rsp,%rbp
1085 movl 240(%rcx),%eax
1086 movq %rdi,%r12
1087 movq %rsi,%r13
1088 movq %rdx,%r14
1089 movq %rcx,%r15
1090 movq %r8,%rbx
1091 shrq $4,%r14
1093 movl %eax,%edx
1094 shlq $7,%rax
1095 subq $96,%rax
1096 subq %rax,%rsp
1098 movq %rsp,%rax
1099 movq %r15,%rcx
1100 movl %edx,%r10d
1101 call _bsaes_key_convert
1102 pxor (%rsp),%xmm7
1103 movdqa %xmm6,(%rax)
1104 movdqa %xmm7,(%rsp)
1106 movdqu (%rbx),%xmm14
1107 subq $8,%r14
1108 L$cbc_dec_loop:
1109 movdqu 0(%r12),%xmm15
1110 movdqu 16(%r12),%xmm0
1111 movdqu 32(%r12),%xmm1
1112 movdqu 48(%r12),%xmm2
1113 movdqu 64(%r12),%xmm3
1114 movdqu 80(%r12),%xmm4
1115 movq %rsp,%rax
1116 movdqu 96(%r12),%xmm5
1117 movl %edx,%r10d
1118 movdqu 112(%r12),%xmm6
1119 movdqa %xmm14,32(%rbp)
1121 call _bsaes_decrypt8
1123 pxor 32(%rbp),%xmm15
1124 movdqu 0(%r12),%xmm7
1125 movdqu 16(%r12),%xmm8
1126 pxor %xmm7,%xmm0
1127 movdqu 32(%r12),%xmm9
1128 pxor %xmm8,%xmm5
1129 movdqu 48(%r12),%xmm10
1130 pxor %xmm9,%xmm3
1131 movdqu 64(%r12),%xmm11
1132 pxor %xmm10,%xmm1
1133 movdqu 80(%r12),%xmm12
1134 pxor %xmm11,%xmm6
1135 movdqu 96(%r12),%xmm13
1136 pxor %xmm12,%xmm2
1137 movdqu 112(%r12),%xmm14
1138 pxor %xmm13,%xmm4
1139 movdqu %xmm15,0(%r13)
1140 leaq 128(%r12),%r12
1141 movdqu %xmm0,16(%r13)
1142 movdqu %xmm5,32(%r13)
1143 movdqu %xmm3,48(%r13)
1144 movdqu %xmm1,64(%r13)
1145 movdqu %xmm6,80(%r13)
1146 movdqu %xmm2,96(%r13)
1147 movdqu %xmm4,112(%r13)
1148 leaq 128(%r13),%r13
1149 subq $8,%r14
1150 jnc L$cbc_dec_loop
1152 addq $8,%r14
1153 jz L$cbc_dec_done
1155 movdqu 0(%r12),%xmm15
1156 movq %rsp,%rax
1157 movl %edx,%r10d
1158 cmpq $2,%r14
1159 jb L$cbc_dec_one
1160 movdqu 16(%r12),%xmm0
1161 je L$cbc_dec_two
1162 movdqu 32(%r12),%xmm1
1163 cmpq $4,%r14
1164 jb L$cbc_dec_three
1165 movdqu 48(%r12),%xmm2
1166 je L$cbc_dec_four
1167 movdqu 64(%r12),%xmm3
1168 cmpq $6,%r14
1169 jb L$cbc_dec_five
1170 movdqu 80(%r12),%xmm4
1171 je L$cbc_dec_six
1172 movdqu 96(%r12),%xmm5
1173 movdqa %xmm14,32(%rbp)
1174 call _bsaes_decrypt8
1175 pxor 32(%rbp),%xmm15
1176 movdqu 0(%r12),%xmm7
1177 movdqu 16(%r12),%xmm8
1178 pxor %xmm7,%xmm0
1179 movdqu 32(%r12),%xmm9
1180 pxor %xmm8,%xmm5
1181 movdqu 48(%r12),%xmm10
1182 pxor %xmm9,%xmm3
1183 movdqu 64(%r12),%xmm11
1184 pxor %xmm10,%xmm1
1185 movdqu 80(%r12),%xmm12
1186 pxor %xmm11,%xmm6
1187 movdqu 96(%r12),%xmm14
1188 pxor %xmm12,%xmm2
1189 movdqu %xmm15,0(%r13)
1190 movdqu %xmm0,16(%r13)
1191 movdqu %xmm5,32(%r13)
1192 movdqu %xmm3,48(%r13)
1193 movdqu %xmm1,64(%r13)
1194 movdqu %xmm6,80(%r13)
1195 movdqu %xmm2,96(%r13)
1196 jmp L$cbc_dec_done
1197 .p2align 4
1198 L$cbc_dec_six:
1199 movdqa %xmm14,32(%rbp)
1200 call _bsaes_decrypt8
1201 pxor 32(%rbp),%xmm15
1202 movdqu 0(%r12),%xmm7
1203 movdqu 16(%r12),%xmm8
1204 pxor %xmm7,%xmm0
1205 movdqu 32(%r12),%xmm9
1206 pxor %xmm8,%xmm5
1207 movdqu 48(%r12),%xmm10
1208 pxor %xmm9,%xmm3
1209 movdqu 64(%r12),%xmm11
1210 pxor %xmm10,%xmm1
1211 movdqu 80(%r12),%xmm14
1212 pxor %xmm11,%xmm6
1213 movdqu %xmm15,0(%r13)
1214 movdqu %xmm0,16(%r13)
1215 movdqu %xmm5,32(%r13)
1216 movdqu %xmm3,48(%r13)
1217 movdqu %xmm1,64(%r13)
1218 movdqu %xmm6,80(%r13)
1219 jmp L$cbc_dec_done
1220 .p2align 4
1221 L$cbc_dec_five:
1222 movdqa %xmm14,32(%rbp)
1223 call _bsaes_decrypt8
1224 pxor 32(%rbp),%xmm15
1225 movdqu 0(%r12),%xmm7
1226 movdqu 16(%r12),%xmm8
1227 pxor %xmm7,%xmm0
1228 movdqu 32(%r12),%xmm9
1229 pxor %xmm8,%xmm5
1230 movdqu 48(%r12),%xmm10
1231 pxor %xmm9,%xmm3
1232 movdqu 64(%r12),%xmm14
1233 pxor %xmm10,%xmm1
1234 movdqu %xmm15,0(%r13)
1235 movdqu %xmm0,16(%r13)
1236 movdqu %xmm5,32(%r13)
1237 movdqu %xmm3,48(%r13)
1238 movdqu %xmm1,64(%r13)
1239 jmp L$cbc_dec_done
1240 .p2align 4
1241 L$cbc_dec_four:
1242 movdqa %xmm14,32(%rbp)
1243 call _bsaes_decrypt8
1244 pxor 32(%rbp),%xmm15
1245 movdqu 0(%r12),%xmm7
1246 movdqu 16(%r12),%xmm8
1247 pxor %xmm7,%xmm0
1248 movdqu 32(%r12),%xmm9
1249 pxor %xmm8,%xmm5
1250 movdqu 48(%r12),%xmm14
1251 pxor %xmm9,%xmm3
1252 movdqu %xmm15,0(%r13)
1253 movdqu %xmm0,16(%r13)
1254 movdqu %xmm5,32(%r13)
1255 movdqu %xmm3,48(%r13)
1256 jmp L$cbc_dec_done
1257 .p2align 4
1258 L$cbc_dec_three:
1259 movdqa %xmm14,32(%rbp)
1260 call _bsaes_decrypt8
1261 pxor 32(%rbp),%xmm15
1262 movdqu 0(%r12),%xmm7
1263 movdqu 16(%r12),%xmm8
1264 pxor %xmm7,%xmm0
1265 movdqu 32(%r12),%xmm14
1266 pxor %xmm8,%xmm5
1267 movdqu %xmm15,0(%r13)
1268 movdqu %xmm0,16(%r13)
1269 movdqu %xmm5,32(%r13)
1270 jmp L$cbc_dec_done
1271 .p2align 4
1272 L$cbc_dec_two:
1273 movdqa %xmm14,32(%rbp)
1274 call _bsaes_decrypt8
1275 pxor 32(%rbp),%xmm15
1276 movdqu 0(%r12),%xmm7
1277 movdqu 16(%r12),%xmm14
1278 pxor %xmm7,%xmm0
1279 movdqu %xmm15,0(%r13)
1280 movdqu %xmm0,16(%r13)
1281 jmp L$cbc_dec_done
1282 .p2align 4
1283 L$cbc_dec_one:
1284 leaq (%r12),%rdi
1285 leaq 32(%rbp),%rsi
1286 leaq (%r15),%rdx
1287 call _asm_AES_decrypt
1288 pxor 32(%rbp),%xmm14
1289 movdqu %xmm14,(%r13)
1290 movdqa %xmm15,%xmm14
1292 L$cbc_dec_done:
1293 movdqu %xmm14,(%rbx)
1294 leaq (%rsp),%rax
1295 pxor %xmm0,%xmm0
1296 L$cbc_dec_bzero:
1297 movdqa %xmm0,0(%rax)
1298 movdqa %xmm0,16(%rax)
1299 leaq 32(%rax),%rax
1300 cmpq %rax,%rbp
1301 ja L$cbc_dec_bzero
1303 leaq (%rbp),%rsp
1304 movq 72(%rsp),%r15
1305 movq 80(%rsp),%r14
1306 movq 88(%rsp),%r13
1307 movq 96(%rsp),%r12
1308 movq 104(%rsp),%rbx
1309 movq 112(%rsp),%rax
1310 leaq 120(%rsp),%rsp
1311 movq %rax,%rbp
1312 L$cbc_dec_epilogue:
1313 .byte 0xf3,0xc3
1316 .globl _bsaes_ctr32_encrypt_blocks
1318 .p2align 4
1319 _bsaes_ctr32_encrypt_blocks:
1320 movq %rsp,%rax
1321 L$ctr_enc_prologue:
1322 pushq %rbp
1323 pushq %rbx
1324 pushq %r12
1325 pushq %r13
1326 pushq %r14
1327 pushq %r15
1328 leaq -72(%rsp),%rsp
1329 movq %rsp,%rbp
1330 movdqu (%r8),%xmm0
1331 movl 240(%rcx),%eax
1332 movq %rdi,%r12
1333 movq %rsi,%r13
1334 movq %rdx,%r14
1335 movq %rcx,%r15
1336 movdqa %xmm0,32(%rbp)
1337 cmpq $8,%rdx
1338 jb L$ctr_enc_short
1340 movl %eax,%ebx
1341 shlq $7,%rax
1342 subq $96,%rax
1343 subq %rax,%rsp
1345 movq %rsp,%rax
1346 movq %r15,%rcx
1347 movl %ebx,%r10d
1348 call _bsaes_key_convert
1349 pxor %xmm6,%xmm7
1350 movdqa %xmm7,(%rax)
1352 movdqa (%rsp),%xmm8
1353 leaq L$ADD1(%rip),%r11
1354 movdqa 32(%rbp),%xmm15
1355 movdqa -32(%r11),%xmm7
1356 .byte 102,68,15,56,0,199
1357 .byte 102,68,15,56,0,255
1358 movdqa %xmm8,(%rsp)
1359 jmp L$ctr_enc_loop
1360 .p2align 4
1361 L$ctr_enc_loop:
1362 movdqa %xmm15,32(%rbp)
1363 movdqa %xmm15,%xmm0
1364 movdqa %xmm15,%xmm1
1365 paddd 0(%r11),%xmm0
1366 movdqa %xmm15,%xmm2
1367 paddd 16(%r11),%xmm1
1368 movdqa %xmm15,%xmm3
1369 paddd 32(%r11),%xmm2
1370 movdqa %xmm15,%xmm4
1371 paddd 48(%r11),%xmm3
1372 movdqa %xmm15,%xmm5
1373 paddd 64(%r11),%xmm4
1374 movdqa %xmm15,%xmm6
1375 paddd 80(%r11),%xmm5
1376 paddd 96(%r11),%xmm6
1380 movdqa (%rsp),%xmm8
1381 leaq 16(%rsp),%rax
1382 movdqa -16(%r11),%xmm7
1383 pxor %xmm8,%xmm15
1384 pxor %xmm8,%xmm0
1385 .byte 102,68,15,56,0,255
1386 pxor %xmm8,%xmm1
1387 .byte 102,15,56,0,199
1388 pxor %xmm8,%xmm2
1389 .byte 102,15,56,0,207
1390 pxor %xmm8,%xmm3
1391 .byte 102,15,56,0,215
1392 pxor %xmm8,%xmm4
1393 .byte 102,15,56,0,223
1394 pxor %xmm8,%xmm5
1395 .byte 102,15,56,0,231
1396 pxor %xmm8,%xmm6
1397 .byte 102,15,56,0,239
1398 leaq L$BS0(%rip),%r11
1399 .byte 102,15,56,0,247
1400 movl %ebx,%r10d
1402 call _bsaes_encrypt8_bitslice
1404 subq $8,%r14
1405 jc L$ctr_enc_loop_done
1407 movdqu 0(%r12),%xmm7
1408 movdqu 16(%r12),%xmm8
1409 movdqu 32(%r12),%xmm9
1410 movdqu 48(%r12),%xmm10
1411 movdqu 64(%r12),%xmm11
1412 movdqu 80(%r12),%xmm12
1413 movdqu 96(%r12),%xmm13
1414 movdqu 112(%r12),%xmm14
1415 leaq 128(%r12),%r12
1416 pxor %xmm15,%xmm7
1417 movdqa 32(%rbp),%xmm15
1418 pxor %xmm8,%xmm0
1419 movdqu %xmm7,0(%r13)
1420 pxor %xmm9,%xmm3
1421 movdqu %xmm0,16(%r13)
1422 pxor %xmm10,%xmm5
1423 movdqu %xmm3,32(%r13)
1424 pxor %xmm11,%xmm2
1425 movdqu %xmm5,48(%r13)
1426 pxor %xmm12,%xmm6
1427 movdqu %xmm2,64(%r13)
1428 pxor %xmm13,%xmm1
1429 movdqu %xmm6,80(%r13)
1430 pxor %xmm14,%xmm4
1431 movdqu %xmm1,96(%r13)
1432 leaq L$ADD1(%rip),%r11
1433 movdqu %xmm4,112(%r13)
1434 leaq 128(%r13),%r13
1435 paddd 112(%r11),%xmm15
1436 jnz L$ctr_enc_loop
1438 jmp L$ctr_enc_done
1439 .p2align 4
1440 L$ctr_enc_loop_done:
1441 addq $8,%r14
1442 movdqu 0(%r12),%xmm7
1443 pxor %xmm7,%xmm15
1444 movdqu %xmm15,0(%r13)
1445 cmpq $2,%r14
1446 jb L$ctr_enc_done
1447 movdqu 16(%r12),%xmm8
1448 pxor %xmm8,%xmm0
1449 movdqu %xmm0,16(%r13)
1450 je L$ctr_enc_done
1451 movdqu 32(%r12),%xmm9
1452 pxor %xmm9,%xmm3
1453 movdqu %xmm3,32(%r13)
1454 cmpq $4,%r14
1455 jb L$ctr_enc_done
1456 movdqu 48(%r12),%xmm10
1457 pxor %xmm10,%xmm5
1458 movdqu %xmm5,48(%r13)
1459 je L$ctr_enc_done
1460 movdqu 64(%r12),%xmm11
1461 pxor %xmm11,%xmm2
1462 movdqu %xmm2,64(%r13)
1463 cmpq $6,%r14
1464 jb L$ctr_enc_done
1465 movdqu 80(%r12),%xmm12
1466 pxor %xmm12,%xmm6
1467 movdqu %xmm6,80(%r13)
1468 je L$ctr_enc_done
1469 movdqu 96(%r12),%xmm13
1470 pxor %xmm13,%xmm1
1471 movdqu %xmm1,96(%r13)
1472 jmp L$ctr_enc_done
1474 .p2align 4
1475 L$ctr_enc_short:
1476 leaq 32(%rbp),%rdi
1477 leaq 48(%rbp),%rsi
1478 leaq (%r15),%rdx
1479 call _asm_AES_encrypt
1480 movdqu (%r12),%xmm0
1481 leaq 16(%r12),%r12
1482 movl 44(%rbp),%eax
1483 bswapl %eax
1484 pxor 48(%rbp),%xmm0
1485 incl %eax
1486 movdqu %xmm0,(%r13)
1487 bswapl %eax
1488 leaq 16(%r13),%r13
1489 movl %eax,44(%rsp)
1490 decq %r14
1491 jnz L$ctr_enc_short
1493 L$ctr_enc_done:
1494 leaq (%rsp),%rax
1495 pxor %xmm0,%xmm0
1496 L$ctr_enc_bzero:
1497 movdqa %xmm0,0(%rax)
1498 movdqa %xmm0,16(%rax)
1499 leaq 32(%rax),%rax
1500 cmpq %rax,%rbp
1501 ja L$ctr_enc_bzero
1503 leaq (%rbp),%rsp
1504 movq 72(%rsp),%r15
1505 movq 80(%rsp),%r14
1506 movq 88(%rsp),%r13
1507 movq 96(%rsp),%r12
1508 movq 104(%rsp),%rbx
1509 movq 112(%rsp),%rax
1510 leaq 120(%rsp),%rsp
1511 movq %rax,%rbp
1512 L$ctr_enc_epilogue:
1513 .byte 0xf3,0xc3
1515 .globl _bsaes_xts_encrypt
1517 .p2align 4
1518 _bsaes_xts_encrypt:
1519 movq %rsp,%rax
1520 L$xts_enc_prologue:
1521 pushq %rbp
1522 pushq %rbx
1523 pushq %r12
1524 pushq %r13
1525 pushq %r14
1526 pushq %r15
1527 leaq -72(%rsp),%rsp
1528 movq %rsp,%rbp
1529 movq %rdi,%r12
1530 movq %rsi,%r13
1531 movq %rdx,%r14
1532 movq %rcx,%r15
1534 leaq (%r9),%rdi
1535 leaq 32(%rbp),%rsi
1536 leaq (%r8),%rdx
1537 call _asm_AES_encrypt
1539 movl 240(%r15),%eax
1540 movq %r14,%rbx
1542 movl %eax,%edx
1543 shlq $7,%rax
1544 subq $96,%rax
1545 subq %rax,%rsp
1547 movq %rsp,%rax
1548 movq %r15,%rcx
1549 movl %edx,%r10d
1550 call _bsaes_key_convert
1551 pxor %xmm6,%xmm7
1552 movdqa %xmm7,(%rax)
1554 andq $-16,%r14
1555 subq $128,%rsp
1556 movdqa 32(%rbp),%xmm6
1558 pxor %xmm14,%xmm14
1559 movdqa L$xts_magic(%rip),%xmm12
1560 pcmpgtd %xmm6,%xmm14
1562 subq $128,%r14
1563 jc L$xts_enc_short
1564 jmp L$xts_enc_loop
1566 .p2align 4
1567 L$xts_enc_loop:
1568 pshufd $19,%xmm14,%xmm13
1569 pxor %xmm14,%xmm14
1570 movdqa %xmm6,%xmm15
1571 movdqa %xmm6,0(%rsp)
1572 paddq %xmm6,%xmm6
1573 pand %xmm12,%xmm13
1574 pcmpgtd %xmm6,%xmm14
1575 pxor %xmm13,%xmm6
1576 pshufd $19,%xmm14,%xmm13
1577 pxor %xmm14,%xmm14
1578 movdqa %xmm6,%xmm0
1579 movdqa %xmm6,16(%rsp)
1580 paddq %xmm6,%xmm6
1581 pand %xmm12,%xmm13
1582 pcmpgtd %xmm6,%xmm14
1583 pxor %xmm13,%xmm6
1584 movdqu 0(%r12),%xmm7
1585 pshufd $19,%xmm14,%xmm13
1586 pxor %xmm14,%xmm14
1587 movdqa %xmm6,%xmm1
1588 movdqa %xmm6,32(%rsp)
1589 paddq %xmm6,%xmm6
1590 pand %xmm12,%xmm13
1591 pcmpgtd %xmm6,%xmm14
1592 pxor %xmm13,%xmm6
1593 movdqu 16(%r12),%xmm8
1594 pxor %xmm7,%xmm15
1595 pshufd $19,%xmm14,%xmm13
1596 pxor %xmm14,%xmm14
1597 movdqa %xmm6,%xmm2
1598 movdqa %xmm6,48(%rsp)
1599 paddq %xmm6,%xmm6
1600 pand %xmm12,%xmm13
1601 pcmpgtd %xmm6,%xmm14
1602 pxor %xmm13,%xmm6
1603 movdqu 32(%r12),%xmm9
1604 pxor %xmm8,%xmm0
1605 pshufd $19,%xmm14,%xmm13
1606 pxor %xmm14,%xmm14
1607 movdqa %xmm6,%xmm3
1608 movdqa %xmm6,64(%rsp)
1609 paddq %xmm6,%xmm6
1610 pand %xmm12,%xmm13
1611 pcmpgtd %xmm6,%xmm14
1612 pxor %xmm13,%xmm6
1613 movdqu 48(%r12),%xmm10
1614 pxor %xmm9,%xmm1
1615 pshufd $19,%xmm14,%xmm13
1616 pxor %xmm14,%xmm14
1617 movdqa %xmm6,%xmm4
1618 movdqa %xmm6,80(%rsp)
1619 paddq %xmm6,%xmm6
1620 pand %xmm12,%xmm13
1621 pcmpgtd %xmm6,%xmm14
1622 pxor %xmm13,%xmm6
1623 movdqu 64(%r12),%xmm11
1624 pxor %xmm10,%xmm2
1625 pshufd $19,%xmm14,%xmm13
1626 pxor %xmm14,%xmm14
1627 movdqa %xmm6,%xmm5
1628 movdqa %xmm6,96(%rsp)
1629 paddq %xmm6,%xmm6
1630 pand %xmm12,%xmm13
1631 pcmpgtd %xmm6,%xmm14
1632 pxor %xmm13,%xmm6
1633 movdqu 80(%r12),%xmm12
1634 pxor %xmm11,%xmm3
1635 movdqu 96(%r12),%xmm13
1636 pxor %xmm12,%xmm4
1637 movdqu 112(%r12),%xmm14
1638 leaq 128(%r12),%r12
1639 movdqa %xmm6,112(%rsp)
1640 pxor %xmm13,%xmm5
1641 leaq 128(%rsp),%rax
1642 pxor %xmm14,%xmm6
1643 movl %edx,%r10d
1645 call _bsaes_encrypt8
1647 pxor 0(%rsp),%xmm15
1648 pxor 16(%rsp),%xmm0
1649 movdqu %xmm15,0(%r13)
1650 pxor 32(%rsp),%xmm3
1651 movdqu %xmm0,16(%r13)
1652 pxor 48(%rsp),%xmm5
1653 movdqu %xmm3,32(%r13)
1654 pxor 64(%rsp),%xmm2
1655 movdqu %xmm5,48(%r13)
1656 pxor 80(%rsp),%xmm6
1657 movdqu %xmm2,64(%r13)
1658 pxor 96(%rsp),%xmm1
1659 movdqu %xmm6,80(%r13)
1660 pxor 112(%rsp),%xmm4
1661 movdqu %xmm1,96(%r13)
1662 movdqu %xmm4,112(%r13)
1663 leaq 128(%r13),%r13
1665 movdqa 112(%rsp),%xmm6
1666 pxor %xmm14,%xmm14
1667 movdqa L$xts_magic(%rip),%xmm12
1668 pcmpgtd %xmm6,%xmm14
1669 pshufd $19,%xmm14,%xmm13
1670 pxor %xmm14,%xmm14
1671 paddq %xmm6,%xmm6
1672 pand %xmm12,%xmm13
1673 pcmpgtd %xmm6,%xmm14
1674 pxor %xmm13,%xmm6
1676 subq $128,%r14
1677 jnc L$xts_enc_loop
1679 L$xts_enc_short:
1680 addq $128,%r14
1681 jz L$xts_enc_done
1682 pshufd $19,%xmm14,%xmm13
1683 pxor %xmm14,%xmm14
1684 movdqa %xmm6,%xmm15
1685 movdqa %xmm6,0(%rsp)
1686 paddq %xmm6,%xmm6
1687 pand %xmm12,%xmm13
1688 pcmpgtd %xmm6,%xmm14
1689 pxor %xmm13,%xmm6
1690 pshufd $19,%xmm14,%xmm13
1691 pxor %xmm14,%xmm14
1692 movdqa %xmm6,%xmm0
1693 movdqa %xmm6,16(%rsp)
1694 paddq %xmm6,%xmm6
1695 pand %xmm12,%xmm13
1696 pcmpgtd %xmm6,%xmm14
1697 pxor %xmm13,%xmm6
1698 movdqu 0(%r12),%xmm7
1699 cmpq $16,%r14
1700 je L$xts_enc_1
1701 pshufd $19,%xmm14,%xmm13
1702 pxor %xmm14,%xmm14
1703 movdqa %xmm6,%xmm1
1704 movdqa %xmm6,32(%rsp)
1705 paddq %xmm6,%xmm6
1706 pand %xmm12,%xmm13
1707 pcmpgtd %xmm6,%xmm14
1708 pxor %xmm13,%xmm6
1709 movdqu 16(%r12),%xmm8
1710 cmpq $32,%r14
1711 je L$xts_enc_2
1712 pxor %xmm7,%xmm15
1713 pshufd $19,%xmm14,%xmm13
1714 pxor %xmm14,%xmm14
1715 movdqa %xmm6,%xmm2
1716 movdqa %xmm6,48(%rsp)
1717 paddq %xmm6,%xmm6
1718 pand %xmm12,%xmm13
1719 pcmpgtd %xmm6,%xmm14
1720 pxor %xmm13,%xmm6
1721 movdqu 32(%r12),%xmm9
1722 cmpq $48,%r14
1723 je L$xts_enc_3
1724 pxor %xmm8,%xmm0
1725 pshufd $19,%xmm14,%xmm13
1726 pxor %xmm14,%xmm14
1727 movdqa %xmm6,%xmm3
1728 movdqa %xmm6,64(%rsp)
1729 paddq %xmm6,%xmm6
1730 pand %xmm12,%xmm13
1731 pcmpgtd %xmm6,%xmm14
1732 pxor %xmm13,%xmm6
1733 movdqu 48(%r12),%xmm10
1734 cmpq $64,%r14
1735 je L$xts_enc_4
1736 pxor %xmm9,%xmm1
1737 pshufd $19,%xmm14,%xmm13
1738 pxor %xmm14,%xmm14
1739 movdqa %xmm6,%xmm4
1740 movdqa %xmm6,80(%rsp)
1741 paddq %xmm6,%xmm6
1742 pand %xmm12,%xmm13
1743 pcmpgtd %xmm6,%xmm14
1744 pxor %xmm13,%xmm6
1745 movdqu 64(%r12),%xmm11
1746 cmpq $80,%r14
1747 je L$xts_enc_5
1748 pxor %xmm10,%xmm2
1749 pshufd $19,%xmm14,%xmm13
1750 pxor %xmm14,%xmm14
1751 movdqa %xmm6,%xmm5
1752 movdqa %xmm6,96(%rsp)
1753 paddq %xmm6,%xmm6
1754 pand %xmm12,%xmm13
1755 pcmpgtd %xmm6,%xmm14
1756 pxor %xmm13,%xmm6
1757 movdqu 80(%r12),%xmm12
1758 cmpq $96,%r14
1759 je L$xts_enc_6
1760 pxor %xmm11,%xmm3
1761 movdqu 96(%r12),%xmm13
1762 pxor %xmm12,%xmm4
1763 movdqa %xmm6,112(%rsp)
1764 leaq 112(%r12),%r12
1765 pxor %xmm13,%xmm5
1766 leaq 128(%rsp),%rax
1767 movl %edx,%r10d
1769 call _bsaes_encrypt8
1771 pxor 0(%rsp),%xmm15
1772 pxor 16(%rsp),%xmm0
1773 movdqu %xmm15,0(%r13)
1774 pxor 32(%rsp),%xmm3
1775 movdqu %xmm0,16(%r13)
1776 pxor 48(%rsp),%xmm5
1777 movdqu %xmm3,32(%r13)
1778 pxor 64(%rsp),%xmm2
1779 movdqu %xmm5,48(%r13)
1780 pxor 80(%rsp),%xmm6
1781 movdqu %xmm2,64(%r13)
1782 pxor 96(%rsp),%xmm1
1783 movdqu %xmm6,80(%r13)
1784 movdqu %xmm1,96(%r13)
1785 leaq 112(%r13),%r13
1787 movdqa 112(%rsp),%xmm6
1788 jmp L$xts_enc_done
1789 .p2align 4
1790 L$xts_enc_6:
1791 pxor %xmm11,%xmm3
1792 leaq 96(%r12),%r12
1793 pxor %xmm12,%xmm4
1794 leaq 128(%rsp),%rax
1795 movl %edx,%r10d
1797 call _bsaes_encrypt8
1799 pxor 0(%rsp),%xmm15
1800 pxor 16(%rsp),%xmm0
1801 movdqu %xmm15,0(%r13)
1802 pxor 32(%rsp),%xmm3
1803 movdqu %xmm0,16(%r13)
1804 pxor 48(%rsp),%xmm5
1805 movdqu %xmm3,32(%r13)
1806 pxor 64(%rsp),%xmm2
1807 movdqu %xmm5,48(%r13)
1808 pxor 80(%rsp),%xmm6
1809 movdqu %xmm2,64(%r13)
1810 movdqu %xmm6,80(%r13)
1811 leaq 96(%r13),%r13
1813 movdqa 96(%rsp),%xmm6
1814 jmp L$xts_enc_done
1815 .p2align 4
1816 L$xts_enc_5:
1817 pxor %xmm10,%xmm2
1818 leaq 80(%r12),%r12
1819 pxor %xmm11,%xmm3
1820 leaq 128(%rsp),%rax
1821 movl %edx,%r10d
1823 call _bsaes_encrypt8
1825 pxor 0(%rsp),%xmm15
1826 pxor 16(%rsp),%xmm0
1827 movdqu %xmm15,0(%r13)
1828 pxor 32(%rsp),%xmm3
1829 movdqu %xmm0,16(%r13)
1830 pxor 48(%rsp),%xmm5
1831 movdqu %xmm3,32(%r13)
1832 pxor 64(%rsp),%xmm2
1833 movdqu %xmm5,48(%r13)
1834 movdqu %xmm2,64(%r13)
1835 leaq 80(%r13),%r13
1837 movdqa 80(%rsp),%xmm6
1838 jmp L$xts_enc_done
1839 .p2align 4
1840 L$xts_enc_4:
1841 pxor %xmm9,%xmm1
1842 leaq 64(%r12),%r12
1843 pxor %xmm10,%xmm2
1844 leaq 128(%rsp),%rax
1845 movl %edx,%r10d
1847 call _bsaes_encrypt8
1849 pxor 0(%rsp),%xmm15
1850 pxor 16(%rsp),%xmm0
1851 movdqu %xmm15,0(%r13)
1852 pxor 32(%rsp),%xmm3
1853 movdqu %xmm0,16(%r13)
1854 pxor 48(%rsp),%xmm5
1855 movdqu %xmm3,32(%r13)
1856 movdqu %xmm5,48(%r13)
1857 leaq 64(%r13),%r13
1859 movdqa 64(%rsp),%xmm6
1860 jmp L$xts_enc_done
1861 .p2align 4
1862 L$xts_enc_3:
1863 pxor %xmm8,%xmm0
1864 leaq 48(%r12),%r12
1865 pxor %xmm9,%xmm1
1866 leaq 128(%rsp),%rax
1867 movl %edx,%r10d
1869 call _bsaes_encrypt8
1871 pxor 0(%rsp),%xmm15
1872 pxor 16(%rsp),%xmm0
1873 movdqu %xmm15,0(%r13)
1874 pxor 32(%rsp),%xmm3
1875 movdqu %xmm0,16(%r13)
1876 movdqu %xmm3,32(%r13)
1877 leaq 48(%r13),%r13
1879 movdqa 48(%rsp),%xmm6
1880 jmp L$xts_enc_done
1881 .p2align 4
1882 L$xts_enc_2:
1883 pxor %xmm7,%xmm15
1884 leaq 32(%r12),%r12
1885 pxor %xmm8,%xmm0
1886 leaq 128(%rsp),%rax
1887 movl %edx,%r10d
1889 call _bsaes_encrypt8
1891 pxor 0(%rsp),%xmm15
1892 pxor 16(%rsp),%xmm0
1893 movdqu %xmm15,0(%r13)
1894 movdqu %xmm0,16(%r13)
1895 leaq 32(%r13),%r13
1897 movdqa 32(%rsp),%xmm6
1898 jmp L$xts_enc_done
1899 .p2align 4
1900 L$xts_enc_1:
1901 pxor %xmm15,%xmm7
1902 leaq 16(%r12),%r12
1903 movdqa %xmm7,32(%rbp)
1904 leaq 32(%rbp),%rdi
1905 leaq 32(%rbp),%rsi
1906 leaq (%r15),%rdx
1907 call _asm_AES_encrypt
1908 pxor 32(%rbp),%xmm15
1914 movdqu %xmm15,0(%r13)
1915 leaq 16(%r13),%r13
1917 movdqa 16(%rsp),%xmm6
1919 L$xts_enc_done:
1920 andl $15,%ebx
1921 jz L$xts_enc_ret
1922 movq %r13,%rdx
1924 L$xts_enc_steal:
1925 movzbl (%r12),%eax
1926 movzbl -16(%rdx),%ecx
1927 leaq 1(%r12),%r12
1928 movb %al,-16(%rdx)
1929 movb %cl,0(%rdx)
1930 leaq 1(%rdx),%rdx
1931 subl $1,%ebx
1932 jnz L$xts_enc_steal
1934 movdqu -16(%r13),%xmm15
1935 leaq 32(%rbp),%rdi
1936 pxor %xmm6,%xmm15
1937 leaq 32(%rbp),%rsi
1938 movdqa %xmm15,32(%rbp)
1939 leaq (%r15),%rdx
1940 call _asm_AES_encrypt
1941 pxor 32(%rbp),%xmm6
1942 movdqu %xmm6,-16(%r13)
1944 L$xts_enc_ret:
1945 leaq (%rsp),%rax
1946 pxor %xmm0,%xmm0
1947 L$xts_enc_bzero:
1948 movdqa %xmm0,0(%rax)
1949 movdqa %xmm0,16(%rax)
1950 leaq 32(%rax),%rax
1951 cmpq %rax,%rbp
1952 ja L$xts_enc_bzero
1954 leaq (%rbp),%rsp
1955 movq 72(%rsp),%r15
1956 movq 80(%rsp),%r14
1957 movq 88(%rsp),%r13
1958 movq 96(%rsp),%r12
1959 movq 104(%rsp),%rbx
1960 movq 112(%rsp),%rax
1961 leaq 120(%rsp),%rsp
1962 movq %rax,%rbp
1963 L$xts_enc_epilogue:
1964 .byte 0xf3,0xc3
1967 .globl _bsaes_xts_decrypt
1969 .p2align 4
1970 _bsaes_xts_decrypt:
1971 movq %rsp,%rax
1972 L$xts_dec_prologue:
1973 pushq %rbp
1974 pushq %rbx
1975 pushq %r12
1976 pushq %r13
1977 pushq %r14
1978 pushq %r15
1979 leaq -72(%rsp),%rsp
1980 movq %rsp,%rbp
1981 movq %rdi,%r12
1982 movq %rsi,%r13
1983 movq %rdx,%r14
1984 movq %rcx,%r15
1986 leaq (%r9),%rdi
1987 leaq 32(%rbp),%rsi
1988 leaq (%r8),%rdx
1989 call _asm_AES_encrypt
1991 movl 240(%r15),%eax
1992 movq %r14,%rbx
1994 movl %eax,%edx
1995 shlq $7,%rax
1996 subq $96,%rax
1997 subq %rax,%rsp
1999 movq %rsp,%rax
2000 movq %r15,%rcx
2001 movl %edx,%r10d
2002 call _bsaes_key_convert
2003 pxor (%rsp),%xmm7
2004 movdqa %xmm6,(%rax)
2005 movdqa %xmm7,(%rsp)
2007 xorl %eax,%eax
2008 andq $-16,%r14
2009 testl $15,%ebx
2010 setnz %al
2011 shlq $4,%rax
2012 subq %rax,%r14
2014 subq $128,%rsp
2015 movdqa 32(%rbp),%xmm6
2017 pxor %xmm14,%xmm14
2018 movdqa L$xts_magic(%rip),%xmm12
2019 pcmpgtd %xmm6,%xmm14
2021 subq $128,%r14
2022 jc L$xts_dec_short
2023 jmp L$xts_dec_loop
2025 .p2align 4
2026 L$xts_dec_loop:
2027 pshufd $19,%xmm14,%xmm13
2028 pxor %xmm14,%xmm14
2029 movdqa %xmm6,%xmm15
2030 movdqa %xmm6,0(%rsp)
2031 paddq %xmm6,%xmm6
2032 pand %xmm12,%xmm13
2033 pcmpgtd %xmm6,%xmm14
2034 pxor %xmm13,%xmm6
2035 pshufd $19,%xmm14,%xmm13
2036 pxor %xmm14,%xmm14
2037 movdqa %xmm6,%xmm0
2038 movdqa %xmm6,16(%rsp)
2039 paddq %xmm6,%xmm6
2040 pand %xmm12,%xmm13
2041 pcmpgtd %xmm6,%xmm14
2042 pxor %xmm13,%xmm6
2043 movdqu 0(%r12),%xmm7
2044 pshufd $19,%xmm14,%xmm13
2045 pxor %xmm14,%xmm14
2046 movdqa %xmm6,%xmm1
2047 movdqa %xmm6,32(%rsp)
2048 paddq %xmm6,%xmm6
2049 pand %xmm12,%xmm13
2050 pcmpgtd %xmm6,%xmm14
2051 pxor %xmm13,%xmm6
2052 movdqu 16(%r12),%xmm8
2053 pxor %xmm7,%xmm15
2054 pshufd $19,%xmm14,%xmm13
2055 pxor %xmm14,%xmm14
2056 movdqa %xmm6,%xmm2
2057 movdqa %xmm6,48(%rsp)
2058 paddq %xmm6,%xmm6
2059 pand %xmm12,%xmm13
2060 pcmpgtd %xmm6,%xmm14
2061 pxor %xmm13,%xmm6
2062 movdqu 32(%r12),%xmm9
2063 pxor %xmm8,%xmm0
2064 pshufd $19,%xmm14,%xmm13
2065 pxor %xmm14,%xmm14
2066 movdqa %xmm6,%xmm3
2067 movdqa %xmm6,64(%rsp)
2068 paddq %xmm6,%xmm6
2069 pand %xmm12,%xmm13
2070 pcmpgtd %xmm6,%xmm14
2071 pxor %xmm13,%xmm6
2072 movdqu 48(%r12),%xmm10
2073 pxor %xmm9,%xmm1
2074 pshufd $19,%xmm14,%xmm13
2075 pxor %xmm14,%xmm14
2076 movdqa %xmm6,%xmm4
2077 movdqa %xmm6,80(%rsp)
2078 paddq %xmm6,%xmm6
2079 pand %xmm12,%xmm13
2080 pcmpgtd %xmm6,%xmm14
2081 pxor %xmm13,%xmm6
2082 movdqu 64(%r12),%xmm11
2083 pxor %xmm10,%xmm2
2084 pshufd $19,%xmm14,%xmm13
2085 pxor %xmm14,%xmm14
2086 movdqa %xmm6,%xmm5
2087 movdqa %xmm6,96(%rsp)
2088 paddq %xmm6,%xmm6
2089 pand %xmm12,%xmm13
2090 pcmpgtd %xmm6,%xmm14
2091 pxor %xmm13,%xmm6
2092 movdqu 80(%r12),%xmm12
2093 pxor %xmm11,%xmm3
2094 movdqu 96(%r12),%xmm13
2095 pxor %xmm12,%xmm4
2096 movdqu 112(%r12),%xmm14
2097 leaq 128(%r12),%r12
2098 movdqa %xmm6,112(%rsp)
2099 pxor %xmm13,%xmm5
2100 leaq 128(%rsp),%rax
2101 pxor %xmm14,%xmm6
2102 movl %edx,%r10d
2104 call _bsaes_decrypt8
2106 pxor 0(%rsp),%xmm15
2107 pxor 16(%rsp),%xmm0
2108 movdqu %xmm15,0(%r13)
2109 pxor 32(%rsp),%xmm5
2110 movdqu %xmm0,16(%r13)
2111 pxor 48(%rsp),%xmm3
2112 movdqu %xmm5,32(%r13)
2113 pxor 64(%rsp),%xmm1
2114 movdqu %xmm3,48(%r13)
2115 pxor 80(%rsp),%xmm6
2116 movdqu %xmm1,64(%r13)
2117 pxor 96(%rsp),%xmm2
2118 movdqu %xmm6,80(%r13)
2119 pxor 112(%rsp),%xmm4
2120 movdqu %xmm2,96(%r13)
2121 movdqu %xmm4,112(%r13)
2122 leaq 128(%r13),%r13
2124 movdqa 112(%rsp),%xmm6
2125 pxor %xmm14,%xmm14
2126 movdqa L$xts_magic(%rip),%xmm12
2127 pcmpgtd %xmm6,%xmm14
2128 pshufd $19,%xmm14,%xmm13
2129 pxor %xmm14,%xmm14
2130 paddq %xmm6,%xmm6
2131 pand %xmm12,%xmm13
2132 pcmpgtd %xmm6,%xmm14
2133 pxor %xmm13,%xmm6
2135 subq $128,%r14
2136 jnc L$xts_dec_loop
2138 L$xts_dec_short:
2139 addq $128,%r14
2140 jz L$xts_dec_done
2141 pshufd $19,%xmm14,%xmm13
2142 pxor %xmm14,%xmm14
2143 movdqa %xmm6,%xmm15
2144 movdqa %xmm6,0(%rsp)
2145 paddq %xmm6,%xmm6
2146 pand %xmm12,%xmm13
2147 pcmpgtd %xmm6,%xmm14
2148 pxor %xmm13,%xmm6
2149 pshufd $19,%xmm14,%xmm13
2150 pxor %xmm14,%xmm14
2151 movdqa %xmm6,%xmm0
2152 movdqa %xmm6,16(%rsp)
2153 paddq %xmm6,%xmm6
2154 pand %xmm12,%xmm13
2155 pcmpgtd %xmm6,%xmm14
2156 pxor %xmm13,%xmm6
2157 movdqu 0(%r12),%xmm7
2158 cmpq $16,%r14
2159 je L$xts_dec_1
2160 pshufd $19,%xmm14,%xmm13
2161 pxor %xmm14,%xmm14
2162 movdqa %xmm6,%xmm1
2163 movdqa %xmm6,32(%rsp)
2164 paddq %xmm6,%xmm6
2165 pand %xmm12,%xmm13
2166 pcmpgtd %xmm6,%xmm14
2167 pxor %xmm13,%xmm6
2168 movdqu 16(%r12),%xmm8
2169 cmpq $32,%r14
2170 je L$xts_dec_2
2171 pxor %xmm7,%xmm15
2172 pshufd $19,%xmm14,%xmm13
2173 pxor %xmm14,%xmm14
2174 movdqa %xmm6,%xmm2
2175 movdqa %xmm6,48(%rsp)
2176 paddq %xmm6,%xmm6
2177 pand %xmm12,%xmm13
2178 pcmpgtd %xmm6,%xmm14
2179 pxor %xmm13,%xmm6
2180 movdqu 32(%r12),%xmm9
2181 cmpq $48,%r14
2182 je L$xts_dec_3
2183 pxor %xmm8,%xmm0
2184 pshufd $19,%xmm14,%xmm13
2185 pxor %xmm14,%xmm14
2186 movdqa %xmm6,%xmm3
2187 movdqa %xmm6,64(%rsp)
2188 paddq %xmm6,%xmm6
2189 pand %xmm12,%xmm13
2190 pcmpgtd %xmm6,%xmm14
2191 pxor %xmm13,%xmm6
2192 movdqu 48(%r12),%xmm10
2193 cmpq $64,%r14
2194 je L$xts_dec_4
2195 pxor %xmm9,%xmm1
2196 pshufd $19,%xmm14,%xmm13
2197 pxor %xmm14,%xmm14
2198 movdqa %xmm6,%xmm4
2199 movdqa %xmm6,80(%rsp)
2200 paddq %xmm6,%xmm6
2201 pand %xmm12,%xmm13
2202 pcmpgtd %xmm6,%xmm14
2203 pxor %xmm13,%xmm6
2204 movdqu 64(%r12),%xmm11
2205 cmpq $80,%r14
2206 je L$xts_dec_5
2207 pxor %xmm10,%xmm2
2208 pshufd $19,%xmm14,%xmm13
2209 pxor %xmm14,%xmm14
2210 movdqa %xmm6,%xmm5
2211 movdqa %xmm6,96(%rsp)
2212 paddq %xmm6,%xmm6
2213 pand %xmm12,%xmm13
2214 pcmpgtd %xmm6,%xmm14
2215 pxor %xmm13,%xmm6
2216 movdqu 80(%r12),%xmm12
2217 cmpq $96,%r14
2218 je L$xts_dec_6
2219 pxor %xmm11,%xmm3
2220 movdqu 96(%r12),%xmm13
2221 pxor %xmm12,%xmm4
2222 movdqa %xmm6,112(%rsp)
2223 leaq 112(%r12),%r12
2224 pxor %xmm13,%xmm5
2225 leaq 128(%rsp),%rax
2226 movl %edx,%r10d
2228 call _bsaes_decrypt8
2230 pxor 0(%rsp),%xmm15
2231 pxor 16(%rsp),%xmm0
2232 movdqu %xmm15,0(%r13)
2233 pxor 32(%rsp),%xmm5
2234 movdqu %xmm0,16(%r13)
2235 pxor 48(%rsp),%xmm3
2236 movdqu %xmm5,32(%r13)
2237 pxor 64(%rsp),%xmm1
2238 movdqu %xmm3,48(%r13)
2239 pxor 80(%rsp),%xmm6
2240 movdqu %xmm1,64(%r13)
2241 pxor 96(%rsp),%xmm2
2242 movdqu %xmm6,80(%r13)
2243 movdqu %xmm2,96(%r13)
2244 leaq 112(%r13),%r13
2246 movdqa 112(%rsp),%xmm6
2247 jmp L$xts_dec_done
2248 .p2align 4
2249 L$xts_dec_6:
2250 pxor %xmm11,%xmm3
2251 leaq 96(%r12),%r12
2252 pxor %xmm12,%xmm4
2253 leaq 128(%rsp),%rax
2254 movl %edx,%r10d
2256 call _bsaes_decrypt8
2258 pxor 0(%rsp),%xmm15
2259 pxor 16(%rsp),%xmm0
2260 movdqu %xmm15,0(%r13)
2261 pxor 32(%rsp),%xmm5
2262 movdqu %xmm0,16(%r13)
2263 pxor 48(%rsp),%xmm3
2264 movdqu %xmm5,32(%r13)
2265 pxor 64(%rsp),%xmm1
2266 movdqu %xmm3,48(%r13)
2267 pxor 80(%rsp),%xmm6
2268 movdqu %xmm1,64(%r13)
2269 movdqu %xmm6,80(%r13)
2270 leaq 96(%r13),%r13
2272 movdqa 96(%rsp),%xmm6
2273 jmp L$xts_dec_done
2274 .p2align 4
2275 L$xts_dec_5:
2276 pxor %xmm10,%xmm2
2277 leaq 80(%r12),%r12
2278 pxor %xmm11,%xmm3
2279 leaq 128(%rsp),%rax
2280 movl %edx,%r10d
2282 call _bsaes_decrypt8
2284 pxor 0(%rsp),%xmm15
2285 pxor 16(%rsp),%xmm0
2286 movdqu %xmm15,0(%r13)
2287 pxor 32(%rsp),%xmm5
2288 movdqu %xmm0,16(%r13)
2289 pxor 48(%rsp),%xmm3
2290 movdqu %xmm5,32(%r13)
2291 pxor 64(%rsp),%xmm1
2292 movdqu %xmm3,48(%r13)
2293 movdqu %xmm1,64(%r13)
2294 leaq 80(%r13),%r13
2296 movdqa 80(%rsp),%xmm6
2297 jmp L$xts_dec_done
2298 .p2align 4
2299 L$xts_dec_4:
2300 pxor %xmm9,%xmm1
2301 leaq 64(%r12),%r12
2302 pxor %xmm10,%xmm2
2303 leaq 128(%rsp),%rax
2304 movl %edx,%r10d
2306 call _bsaes_decrypt8
2308 pxor 0(%rsp),%xmm15
2309 pxor 16(%rsp),%xmm0
2310 movdqu %xmm15,0(%r13)
2311 pxor 32(%rsp),%xmm5
2312 movdqu %xmm0,16(%r13)
2313 pxor 48(%rsp),%xmm3
2314 movdqu %xmm5,32(%r13)
2315 movdqu %xmm3,48(%r13)
2316 leaq 64(%r13),%r13
2318 movdqa 64(%rsp),%xmm6
2319 jmp L$xts_dec_done
2320 .p2align 4
2321 L$xts_dec_3:
2322 pxor %xmm8,%xmm0
2323 leaq 48(%r12),%r12
2324 pxor %xmm9,%xmm1
2325 leaq 128(%rsp),%rax
2326 movl %edx,%r10d
2328 call _bsaes_decrypt8
2330 pxor 0(%rsp),%xmm15
2331 pxor 16(%rsp),%xmm0
2332 movdqu %xmm15,0(%r13)
2333 pxor 32(%rsp),%xmm5
2334 movdqu %xmm0,16(%r13)
2335 movdqu %xmm5,32(%r13)
2336 leaq 48(%r13),%r13
2338 movdqa 48(%rsp),%xmm6
2339 jmp L$xts_dec_done
2340 .p2align 4
2341 L$xts_dec_2:
2342 pxor %xmm7,%xmm15
2343 leaq 32(%r12),%r12
2344 pxor %xmm8,%xmm0
2345 leaq 128(%rsp),%rax
2346 movl %edx,%r10d
2348 call _bsaes_decrypt8
2350 pxor 0(%rsp),%xmm15
2351 pxor 16(%rsp),%xmm0
2352 movdqu %xmm15,0(%r13)
2353 movdqu %xmm0,16(%r13)
2354 leaq 32(%r13),%r13
2356 movdqa 32(%rsp),%xmm6
2357 jmp L$xts_dec_done
2358 .p2align 4
2359 L$xts_dec_1:
2360 pxor %xmm15,%xmm7
2361 leaq 16(%r12),%r12
2362 movdqa %xmm7,32(%rbp)
2363 leaq 32(%rbp),%rdi
2364 leaq 32(%rbp),%rsi
2365 leaq (%r15),%rdx
2366 call _asm_AES_decrypt
2367 pxor 32(%rbp),%xmm15
2373 movdqu %xmm15,0(%r13)
2374 leaq 16(%r13),%r13
2376 movdqa 16(%rsp),%xmm6
2378 L$xts_dec_done:
2379 andl $15,%ebx
2380 jz L$xts_dec_ret
2382 pxor %xmm14,%xmm14
2383 movdqa L$xts_magic(%rip),%xmm12
2384 pcmpgtd %xmm6,%xmm14
2385 pshufd $19,%xmm14,%xmm13
2386 movdqa %xmm6,%xmm5
2387 paddq %xmm6,%xmm6
2388 pand %xmm12,%xmm13
2389 movdqu (%r12),%xmm15
2390 pxor %xmm13,%xmm6
2392 leaq 32(%rbp),%rdi
2393 pxor %xmm6,%xmm15
2394 leaq 32(%rbp),%rsi
2395 movdqa %xmm15,32(%rbp)
2396 leaq (%r15),%rdx
2397 call _asm_AES_decrypt
2398 pxor 32(%rbp),%xmm6
2399 movq %r13,%rdx
2400 movdqu %xmm6,(%r13)
2402 L$xts_dec_steal:
2403 movzbl 16(%r12),%eax
2404 movzbl (%rdx),%ecx
2405 leaq 1(%r12),%r12
2406 movb %al,(%rdx)
2407 movb %cl,16(%rdx)
2408 leaq 1(%rdx),%rdx
2409 subl $1,%ebx
2410 jnz L$xts_dec_steal
2412 movdqu (%r13),%xmm15
2413 leaq 32(%rbp),%rdi
2414 pxor %xmm5,%xmm15
2415 leaq 32(%rbp),%rsi
2416 movdqa %xmm15,32(%rbp)
2417 leaq (%r15),%rdx
2418 call _asm_AES_decrypt
2419 pxor 32(%rbp),%xmm5
2420 movdqu %xmm5,(%r13)
2422 L$xts_dec_ret:
2423 leaq (%rsp),%rax
2424 pxor %xmm0,%xmm0
2425 L$xts_dec_bzero:
2426 movdqa %xmm0,0(%rax)
2427 movdqa %xmm0,16(%rax)
2428 leaq 32(%rax),%rax
2429 cmpq %rax,%rbp
2430 ja L$xts_dec_bzero
2432 leaq (%rbp),%rsp
2433 movq 72(%rsp),%r15
2434 movq 80(%rsp),%r14
2435 movq 88(%rsp),%r13
2436 movq 96(%rsp),%r12
2437 movq 104(%rsp),%rbx
2438 movq 112(%rsp),%rax
2439 leaq 120(%rsp),%rsp
2440 movq %rax,%rbp
2441 L$xts_dec_epilogue:
2442 .byte 0xf3,0xc3
2445 .p2align 6
2446 _bsaes_const:
2447 L$M0ISR:
2448 .quad 0x0a0e0206070b0f03, 0x0004080c0d010509
2449 L$ISRM0:
2450 .quad 0x01040b0e0205080f, 0x0306090c00070a0d
2451 L$ISR:
2452 .quad 0x0504070602010003, 0x0f0e0d0c080b0a09
2453 L$BS0:
2454 .quad 0x5555555555555555, 0x5555555555555555
2455 L$BS1:
2456 .quad 0x3333333333333333, 0x3333333333333333
2457 L$BS2:
2458 .quad 0x0f0f0f0f0f0f0f0f, 0x0f0f0f0f0f0f0f0f
2459 L$SR:
2460 .quad 0x0504070600030201, 0x0f0e0d0c0a09080b
2461 L$SRM0:
2462 .quad 0x0304090e00050a0f, 0x01060b0c0207080d
2463 L$M0SR:
2464 .quad 0x0a0e02060f03070b, 0x0004080c05090d01
2465 L$SWPUP:
2466 .quad 0x0706050403020100, 0x0c0d0e0f0b0a0908
2467 L$SWPUPM0SR:
2468 .quad 0x0a0d02060c03070b, 0x0004080f05090e01
2469 L$ADD1:
2470 .quad 0x0000000000000000, 0x0000000100000000
2471 L$ADD2:
2472 .quad 0x0000000000000000, 0x0000000200000000
2473 L$ADD3:
2474 .quad 0x0000000000000000, 0x0000000300000000
2475 L$ADD4:
2476 .quad 0x0000000000000000, 0x0000000400000000
2477 L$ADD5:
2478 .quad 0x0000000000000000, 0x0000000500000000
2479 L$ADD6:
2480 .quad 0x0000000000000000, 0x0000000600000000
2481 L$ADD7:
2482 .quad 0x0000000000000000, 0x0000000700000000
2483 L$ADD8:
2484 .quad 0x0000000000000000, 0x0000000800000000
2485 L$xts_magic:
2486 .long 0x87,0,1,0
2487 L$masks:
2488 .quad 0x0101010101010101, 0x0101010101010101
2489 .quad 0x0202020202020202, 0x0202020202020202
2490 .quad 0x0404040404040404, 0x0404040404040404
2491 .quad 0x0808080808080808, 0x0808080808080808
2492 L$M0:
2493 .quad 0x02060a0e03070b0f, 0x0004080c0105090d
2494 L$63:
2495 .quad 0x6363636363636363, 0x6363636363636363
2496 .byte 66,105,116,45,115,108,105,99,101,100,32,65,69,83,32,102,111,114,32,120,56,54,95,54,52,47,83,83,83,69,51,44,32,69,109,105,108,105,97,32,75,195,164,115,112,101,114,44,32,80,101,116,101,114,32,83,99,104,119,97,98,101,44,32,65,110,100,121,32,80,111,108,121,97,107,111,118,0
2497 .p2align 6