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