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