6ceb3da302aa5176a5660dc2a951d4413c719807
[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  80(%r11),%xmm7
14         pxor    %xmm8,%xmm15
15         pxor    %xmm8,%xmm0
16 .byte   102,68,15,56,0,255
17         pxor    %xmm8,%xmm1
18 .byte   102,15,56,0,199
19         pxor    %xmm8,%xmm2
20 .byte   102,15,56,0,207
21         pxor    %xmm8,%xmm3
22 .byte   102,15,56,0,215
23         pxor    %xmm8,%xmm4
24 .byte   102,15,56,0,223
25         pxor    %xmm8,%xmm5
26 .byte   102,15,56,0,231
27         pxor    %xmm8,%xmm6
28 .byte   102,15,56,0,239
29 .byte   102,15,56,0,247
30 _bsaes_encrypt8_bitslice:
31         movdqa  0(%r11),%xmm7
32         movdqa  16(%r11),%xmm8
33         movdqa  %xmm5,%xmm9
34         psrlq   $1,%xmm5
35         movdqa  %xmm3,%xmm10
36         psrlq   $1,%xmm3
37         pxor    %xmm6,%xmm5
38         pxor    %xmm4,%xmm3
39         pand    %xmm7,%xmm5
40         pand    %xmm7,%xmm3
41         pxor    %xmm5,%xmm6
42         psllq   $1,%xmm5
43         pxor    %xmm3,%xmm4
44         psllq   $1,%xmm3
45         pxor    %xmm9,%xmm5
46         pxor    %xmm10,%xmm3
47         movdqa  %xmm1,%xmm9
48         psrlq   $1,%xmm1
49         movdqa  %xmm15,%xmm10
50         psrlq   $1,%xmm15
51         pxor    %xmm2,%xmm1
52         pxor    %xmm0,%xmm15
53         pand    %xmm7,%xmm1
54         pand    %xmm7,%xmm15
55         pxor    %xmm1,%xmm2
56         psllq   $1,%xmm1
57         pxor    %xmm15,%xmm0
58         psllq   $1,%xmm15
59         pxor    %xmm9,%xmm1
60         pxor    %xmm10,%xmm15
61         movdqa  32(%r11),%xmm7
62         movdqa  %xmm4,%xmm9
63         psrlq   $2,%xmm4
64         movdqa  %xmm3,%xmm10
65         psrlq   $2,%xmm3
66         pxor    %xmm6,%xmm4
67         pxor    %xmm5,%xmm3
68         pand    %xmm8,%xmm4
69         pand    %xmm8,%xmm3
70         pxor    %xmm4,%xmm6
71         psllq   $2,%xmm4
72         pxor    %xmm3,%xmm5
73         psllq   $2,%xmm3
74         pxor    %xmm9,%xmm4
75         pxor    %xmm10,%xmm3
76         movdqa  %xmm0,%xmm9
77         psrlq   $2,%xmm0
78         movdqa  %xmm15,%xmm10
79         psrlq   $2,%xmm15
80         pxor    %xmm2,%xmm0
81         pxor    %xmm1,%xmm15
82         pand    %xmm8,%xmm0
83         pand    %xmm8,%xmm15
84         pxor    %xmm0,%xmm2
85         psllq   $2,%xmm0
86         pxor    %xmm15,%xmm1
87         psllq   $2,%xmm15
88         pxor    %xmm9,%xmm0
89         pxor    %xmm10,%xmm15
90         movdqa  %xmm2,%xmm9
91         psrlq   $4,%xmm2
92         movdqa  %xmm1,%xmm10
93         psrlq   $4,%xmm1
94         pxor    %xmm6,%xmm2
95         pxor    %xmm5,%xmm1
96         pand    %xmm7,%xmm2
97         pand    %xmm7,%xmm1
98         pxor    %xmm2,%xmm6
99         psllq   $4,%xmm2
100         pxor    %xmm1,%xmm5
101         psllq   $4,%xmm1
102         pxor    %xmm9,%xmm2
103         pxor    %xmm10,%xmm1
104         movdqa  %xmm0,%xmm9
105         psrlq   $4,%xmm0
106         movdqa  %xmm15,%xmm10
107         psrlq   $4,%xmm15
108         pxor    %xmm4,%xmm0
109         pxor    %xmm3,%xmm15
110         pand    %xmm7,%xmm0
111         pand    %xmm7,%xmm15
112         pxor    %xmm0,%xmm4
113         psllq   $4,%xmm0
114         pxor    %xmm15,%xmm3
115         psllq   $4,%xmm15
116         pxor    %xmm9,%xmm0
117         pxor    %xmm10,%xmm15
118         decl    %r10d
119         jmp     .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    .Lmasks(%rip),%r11
1050         movdqu  (%rcx),%xmm7
1051         leaq    16(%rcx),%rcx
1052         movdqa  0(%r11),%xmm0
1053         movdqa  16(%r11),%xmm1
1054         movdqa  32(%r11),%xmm2
1055         movdqa  48(%r11),%xmm3
1056         movdqa  64(%r11),%xmm4
1057         pcmpeqd %xmm5,%xmm5
1058
1059         movdqu  (%rcx),%xmm6
1060         movdqa  %xmm7,(%rax)
1061         leaq    16(%rax),%rax
1062         decl    %r10d
1063         jmp     .Lkey_loop
1064 .align  16
1065 .Lkey_loop:
1066 .byte   102,15,56,0,244
1067
1068         movdqa  %xmm0,%xmm8
1069         movdqa  %xmm1,%xmm9
1070
1071         pand    %xmm6,%xmm8
1072         pand    %xmm6,%xmm9
1073         movdqa  %xmm2,%xmm10
1074         pcmpeqb %xmm0,%xmm8
1075         psllq   $4,%xmm0
1076         movdqa  %xmm3,%xmm11
1077         pcmpeqb %xmm1,%xmm9
1078         psllq   $4,%xmm1
1079
1080         pand    %xmm6,%xmm10
1081         pand    %xmm6,%xmm11
1082         movdqa  %xmm0,%xmm12
1083         pcmpeqb %xmm2,%xmm10
1084         psllq   $4,%xmm2
1085         movdqa  %xmm1,%xmm13
1086         pcmpeqb %xmm3,%xmm11
1087         psllq   $4,%xmm3
1088
1089         movdqa  %xmm2,%xmm14
1090         movdqa  %xmm3,%xmm15
1091         pxor    %xmm5,%xmm8
1092         pxor    %xmm5,%xmm9
1093
1094         pand    %xmm6,%xmm12
1095         pand    %xmm6,%xmm13
1096         movdqa  %xmm8,0(%rax)
1097         pcmpeqb %xmm0,%xmm12
1098         psrlq   $4,%xmm0
1099         movdqa  %xmm9,16(%rax)
1100         pcmpeqb %xmm1,%xmm13
1101         psrlq   $4,%xmm1
1102         leaq    16(%rcx),%rcx
1103
1104         pand    %xmm6,%xmm14
1105         pand    %xmm6,%xmm15
1106         movdqa  %xmm10,32(%rax)
1107         pcmpeqb %xmm2,%xmm14
1108         psrlq   $4,%xmm2
1109         movdqa  %xmm11,48(%rax)
1110         pcmpeqb %xmm3,%xmm15
1111         psrlq   $4,%xmm3
1112         movdqu  (%rcx),%xmm6
1113
1114         pxor    %xmm5,%xmm13
1115         pxor    %xmm5,%xmm14
1116         movdqa  %xmm12,64(%rax)
1117         movdqa  %xmm13,80(%rax)
1118         movdqa  %xmm14,96(%rax)
1119         movdqa  %xmm15,112(%rax)
1120         leaq    128(%rax),%rax
1121         decl    %r10d
1122         jnz     .Lkey_loop
1123
1124         movdqa  80(%r11),%xmm7
1125
1126         .byte   0xf3,0xc3
1127 .size   _bsaes_key_convert,.-_bsaes_key_convert
1128
1129 .globl  bsaes_cbc_encrypt
1130 .type   bsaes_cbc_encrypt,@function
1131 .align  16
1132 bsaes_cbc_encrypt:
1133         cmpl    $0,%r9d
1134         jne     asm_AES_cbc_encrypt
1135         cmpq    $128,%rdx
1136         jb      asm_AES_cbc_encrypt
1137
1138         movq    %rsp,%rax
1139 .Lcbc_dec_prologue:
1140         pushq   %rbp
1141         pushq   %rbx
1142         pushq   %r12
1143         pushq   %r13
1144         pushq   %r14
1145         pushq   %r15
1146         leaq    -72(%rsp),%rsp
1147         movq    %rsp,%rbp
1148         movl    240(%rcx),%eax
1149         movq    %rdi,%r12
1150         movq    %rsi,%r13
1151         movq    %rdx,%r14
1152         movq    %rcx,%r15
1153         movq    %r8,%rbx
1154         shrq    $4,%r14
1155
1156         movl    %eax,%edx
1157         shlq    $7,%rax
1158         subq    $96,%rax
1159         subq    %rax,%rsp
1160
1161         movq    %rsp,%rax
1162         movq    %r15,%rcx
1163         movl    %edx,%r10d
1164         call    _bsaes_key_convert
1165         pxor    (%rsp),%xmm7
1166         movdqa  %xmm6,(%rax)
1167         movdqa  %xmm7,(%rsp)
1168
1169         movdqu  (%rbx),%xmm14
1170         subq    $8,%r14
1171 .Lcbc_dec_loop:
1172         movdqu  0(%r12),%xmm15
1173         movdqu  16(%r12),%xmm0
1174         movdqu  32(%r12),%xmm1
1175         movdqu  48(%r12),%xmm2
1176         movdqu  64(%r12),%xmm3
1177         movdqu  80(%r12),%xmm4
1178         movq    %rsp,%rax
1179         movdqu  96(%r12),%xmm5
1180         movl    %edx,%r10d
1181         movdqu  112(%r12),%xmm6
1182         movdqa  %xmm14,32(%rbp)
1183
1184         call    _bsaes_decrypt8
1185
1186         pxor    32(%rbp),%xmm15
1187         movdqu  0(%r12),%xmm7
1188         movdqu  16(%r12),%xmm8
1189         pxor    %xmm7,%xmm0
1190         movdqu  32(%r12),%xmm9
1191         pxor    %xmm8,%xmm5
1192         movdqu  48(%r12),%xmm10
1193         pxor    %xmm9,%xmm3
1194         movdqu  64(%r12),%xmm11
1195         pxor    %xmm10,%xmm1
1196         movdqu  80(%r12),%xmm12
1197         pxor    %xmm11,%xmm6
1198         movdqu  96(%r12),%xmm13
1199         pxor    %xmm12,%xmm2
1200         movdqu  112(%r12),%xmm14
1201         pxor    %xmm13,%xmm4
1202         movdqu  %xmm15,0(%r13)
1203         leaq    128(%r12),%r12
1204         movdqu  %xmm0,16(%r13)
1205         movdqu  %xmm5,32(%r13)
1206         movdqu  %xmm3,48(%r13)
1207         movdqu  %xmm1,64(%r13)
1208         movdqu  %xmm6,80(%r13)
1209         movdqu  %xmm2,96(%r13)
1210         movdqu  %xmm4,112(%r13)
1211         leaq    128(%r13),%r13
1212         subq    $8,%r14
1213         jnc     .Lcbc_dec_loop
1214
1215         addq    $8,%r14
1216         jz      .Lcbc_dec_done
1217
1218         movdqu  0(%r12),%xmm15
1219         movq    %rsp,%rax
1220         movl    %edx,%r10d
1221         cmpq    $2,%r14
1222         jb      .Lcbc_dec_one
1223         movdqu  16(%r12),%xmm0
1224         je      .Lcbc_dec_two
1225         movdqu  32(%r12),%xmm1
1226         cmpq    $4,%r14
1227         jb      .Lcbc_dec_three
1228         movdqu  48(%r12),%xmm2
1229         je      .Lcbc_dec_four
1230         movdqu  64(%r12),%xmm3
1231         cmpq    $6,%r14
1232         jb      .Lcbc_dec_five
1233         movdqu  80(%r12),%xmm4
1234         je      .Lcbc_dec_six
1235         movdqu  96(%r12),%xmm5
1236         movdqa  %xmm14,32(%rbp)
1237         call    _bsaes_decrypt8
1238         pxor    32(%rbp),%xmm15
1239         movdqu  0(%r12),%xmm7
1240         movdqu  16(%r12),%xmm8
1241         pxor    %xmm7,%xmm0
1242         movdqu  32(%r12),%xmm9
1243         pxor    %xmm8,%xmm5
1244         movdqu  48(%r12),%xmm10
1245         pxor    %xmm9,%xmm3
1246         movdqu  64(%r12),%xmm11
1247         pxor    %xmm10,%xmm1
1248         movdqu  80(%r12),%xmm12
1249         pxor    %xmm11,%xmm6
1250         movdqu  96(%r12),%xmm14
1251         pxor    %xmm12,%xmm2
1252         movdqu  %xmm15,0(%r13)
1253         movdqu  %xmm0,16(%r13)
1254         movdqu  %xmm5,32(%r13)
1255         movdqu  %xmm3,48(%r13)
1256         movdqu  %xmm1,64(%r13)
1257         movdqu  %xmm6,80(%r13)
1258         movdqu  %xmm2,96(%r13)
1259         jmp     .Lcbc_dec_done
1260 .align  16
1261 .Lcbc_dec_six:
1262         movdqa  %xmm14,32(%rbp)
1263         call    _bsaes_decrypt8
1264         pxor    32(%rbp),%xmm15
1265         movdqu  0(%r12),%xmm7
1266         movdqu  16(%r12),%xmm8
1267         pxor    %xmm7,%xmm0
1268         movdqu  32(%r12),%xmm9
1269         pxor    %xmm8,%xmm5
1270         movdqu  48(%r12),%xmm10
1271         pxor    %xmm9,%xmm3
1272         movdqu  64(%r12),%xmm11
1273         pxor    %xmm10,%xmm1
1274         movdqu  80(%r12),%xmm14
1275         pxor    %xmm11,%xmm6
1276         movdqu  %xmm15,0(%r13)
1277         movdqu  %xmm0,16(%r13)
1278         movdqu  %xmm5,32(%r13)
1279         movdqu  %xmm3,48(%r13)
1280         movdqu  %xmm1,64(%r13)
1281         movdqu  %xmm6,80(%r13)
1282         jmp     .Lcbc_dec_done
1283 .align  16
1284 .Lcbc_dec_five:
1285         movdqa  %xmm14,32(%rbp)
1286         call    _bsaes_decrypt8
1287         pxor    32(%rbp),%xmm15
1288         movdqu  0(%r12),%xmm7
1289         movdqu  16(%r12),%xmm8
1290         pxor    %xmm7,%xmm0
1291         movdqu  32(%r12),%xmm9
1292         pxor    %xmm8,%xmm5
1293         movdqu  48(%r12),%xmm10
1294         pxor    %xmm9,%xmm3
1295         movdqu  64(%r12),%xmm14
1296         pxor    %xmm10,%xmm1
1297         movdqu  %xmm15,0(%r13)
1298         movdqu  %xmm0,16(%r13)
1299         movdqu  %xmm5,32(%r13)
1300         movdqu  %xmm3,48(%r13)
1301         movdqu  %xmm1,64(%r13)
1302         jmp     .Lcbc_dec_done
1303 .align  16
1304 .Lcbc_dec_four:
1305         movdqa  %xmm14,32(%rbp)
1306         call    _bsaes_decrypt8
1307         pxor    32(%rbp),%xmm15
1308         movdqu  0(%r12),%xmm7
1309         movdqu  16(%r12),%xmm8
1310         pxor    %xmm7,%xmm0
1311         movdqu  32(%r12),%xmm9
1312         pxor    %xmm8,%xmm5
1313         movdqu  48(%r12),%xmm14
1314         pxor    %xmm9,%xmm3
1315         movdqu  %xmm15,0(%r13)
1316         movdqu  %xmm0,16(%r13)
1317         movdqu  %xmm5,32(%r13)
1318         movdqu  %xmm3,48(%r13)
1319         jmp     .Lcbc_dec_done
1320 .align  16
1321 .Lcbc_dec_three:
1322         movdqa  %xmm14,32(%rbp)
1323         call    _bsaes_decrypt8
1324         pxor    32(%rbp),%xmm15
1325         movdqu  0(%r12),%xmm7
1326         movdqu  16(%r12),%xmm8
1327         pxor    %xmm7,%xmm0
1328         movdqu  32(%r12),%xmm14
1329         pxor    %xmm8,%xmm5
1330         movdqu  %xmm15,0(%r13)
1331         movdqu  %xmm0,16(%r13)
1332         movdqu  %xmm5,32(%r13)
1333         jmp     .Lcbc_dec_done
1334 .align  16
1335 .Lcbc_dec_two:
1336         movdqa  %xmm14,32(%rbp)
1337         call    _bsaes_decrypt8
1338         pxor    32(%rbp),%xmm15
1339         movdqu  0(%r12),%xmm7
1340         movdqu  16(%r12),%xmm14
1341         pxor    %xmm7,%xmm0
1342         movdqu  %xmm15,0(%r13)
1343         movdqu  %xmm0,16(%r13)
1344         jmp     .Lcbc_dec_done
1345 .align  16
1346 .Lcbc_dec_one:
1347         leaq    (%r12),%rdi
1348         leaq    32(%rbp),%rsi
1349         leaq    (%r15),%rdx
1350         call    asm_AES_decrypt         
1351         pxor    32(%rbp),%xmm14
1352         movdqu  %xmm14,(%r13)
1353         movdqa  %xmm15,%xmm14
1354
1355 .Lcbc_dec_done:
1356         movdqu  %xmm14,(%rbx)
1357         leaq    (%rsp),%rax
1358         pxor    %xmm0,%xmm0
1359 .Lcbc_dec_bzero:
1360         movdqa  %xmm0,0(%rax)
1361         movdqa  %xmm0,16(%rax)
1362         leaq    32(%rax),%rax
1363         cmpq    %rax,%rbp
1364         ja      .Lcbc_dec_bzero
1365
1366         leaq    (%rbp),%rsp
1367         movq    72(%rsp),%r15
1368         movq    80(%rsp),%r14
1369         movq    88(%rsp),%r13
1370         movq    96(%rsp),%r12
1371         movq    104(%rsp),%rbx
1372         movq    112(%rsp),%rax
1373         leaq    120(%rsp),%rsp
1374         movq    %rax,%rbp
1375 .Lcbc_dec_epilogue:
1376         .byte   0xf3,0xc3
1377 .size   bsaes_cbc_encrypt,.-bsaes_cbc_encrypt
1378
1379 .globl  bsaes_ctr32_encrypt_blocks
1380 .type   bsaes_ctr32_encrypt_blocks,@function
1381 .align  16
1382 bsaes_ctr32_encrypt_blocks:
1383         movq    %rsp,%rax
1384 .Lctr_enc_prologue:
1385         pushq   %rbp
1386         pushq   %rbx
1387         pushq   %r12
1388         pushq   %r13
1389         pushq   %r14
1390         pushq   %r15
1391         leaq    -72(%rsp),%rsp
1392         movq    %rsp,%rbp
1393         movdqu  (%r8),%xmm0
1394         movl    240(%rcx),%eax
1395         movq    %rdi,%r12
1396         movq    %rsi,%r13
1397         movq    %rdx,%r14
1398         movq    %rcx,%r15
1399         movdqa  %xmm0,32(%rbp)
1400         cmpq    $8,%rdx
1401         jb      .Lctr_enc_short
1402
1403         movl    %eax,%ebx
1404         shlq    $7,%rax
1405         subq    $96,%rax
1406         subq    %rax,%rsp
1407
1408         movq    %rsp,%rax
1409         movq    %r15,%rcx
1410         movl    %ebx,%r10d
1411         call    _bsaes_key_convert
1412         pxor    %xmm6,%xmm7
1413         movdqa  %xmm7,(%rax)
1414
1415         movdqa  (%rsp),%xmm8
1416         leaq    .LADD1(%rip),%r11
1417         movdqa  32(%rbp),%xmm15
1418         movdqa  -32(%r11),%xmm7
1419 .byte   102,68,15,56,0,199
1420 .byte   102,68,15,56,0,255
1421         movdqa  %xmm8,(%rsp)
1422         jmp     .Lctr_enc_loop
1423 .align  16
1424 .Lctr_enc_loop:
1425         movdqa  %xmm15,32(%rbp)
1426         movdqa  %xmm15,%xmm0
1427         movdqa  %xmm15,%xmm1
1428         paddd   0(%r11),%xmm0
1429         movdqa  %xmm15,%xmm2
1430         paddd   16(%r11),%xmm1
1431         movdqa  %xmm15,%xmm3
1432         paddd   32(%r11),%xmm2
1433         movdqa  %xmm15,%xmm4
1434         paddd   48(%r11),%xmm3
1435         movdqa  %xmm15,%xmm5
1436         paddd   64(%r11),%xmm4
1437         movdqa  %xmm15,%xmm6
1438         paddd   80(%r11),%xmm5
1439         paddd   96(%r11),%xmm6
1440
1441
1442
1443         movdqa  (%rsp),%xmm8
1444         leaq    16(%rsp),%rax
1445         movdqa  -16(%r11),%xmm7
1446         pxor    %xmm8,%xmm15
1447         pxor    %xmm8,%xmm0
1448 .byte   102,68,15,56,0,255
1449         pxor    %xmm8,%xmm1
1450 .byte   102,15,56,0,199
1451         pxor    %xmm8,%xmm2
1452 .byte   102,15,56,0,207
1453         pxor    %xmm8,%xmm3
1454 .byte   102,15,56,0,215
1455         pxor    %xmm8,%xmm4
1456 .byte   102,15,56,0,223
1457         pxor    %xmm8,%xmm5
1458 .byte   102,15,56,0,231
1459         pxor    %xmm8,%xmm6
1460 .byte   102,15,56,0,239
1461         leaq    .LBS0(%rip),%r11
1462 .byte   102,15,56,0,247
1463         movl    %ebx,%r10d
1464
1465         call    _bsaes_encrypt8_bitslice
1466
1467         subq    $8,%r14
1468         jc      .Lctr_enc_loop_done
1469
1470         movdqu  0(%r12),%xmm7
1471         movdqu  16(%r12),%xmm8
1472         movdqu  32(%r12),%xmm9
1473         movdqu  48(%r12),%xmm10
1474         movdqu  64(%r12),%xmm11
1475         movdqu  80(%r12),%xmm12
1476         movdqu  96(%r12),%xmm13
1477         movdqu  112(%r12),%xmm14
1478         leaq    128(%r12),%r12
1479         pxor    %xmm15,%xmm7
1480         movdqa  32(%rbp),%xmm15
1481         pxor    %xmm8,%xmm0
1482         movdqu  %xmm7,0(%r13)
1483         pxor    %xmm9,%xmm3
1484         movdqu  %xmm0,16(%r13)
1485         pxor    %xmm10,%xmm5
1486         movdqu  %xmm3,32(%r13)
1487         pxor    %xmm11,%xmm2
1488         movdqu  %xmm5,48(%r13)
1489         pxor    %xmm12,%xmm6
1490         movdqu  %xmm2,64(%r13)
1491         pxor    %xmm13,%xmm1
1492         movdqu  %xmm6,80(%r13)
1493         pxor    %xmm14,%xmm4
1494         movdqu  %xmm1,96(%r13)
1495         leaq    .LADD1(%rip),%r11
1496         movdqu  %xmm4,112(%r13)
1497         leaq    128(%r13),%r13
1498         paddd   112(%r11),%xmm15
1499         jnz     .Lctr_enc_loop
1500
1501         jmp     .Lctr_enc_done
1502 .align  16
1503 .Lctr_enc_loop_done:
1504         addq    $8,%r14
1505         movdqu  0(%r12),%xmm7
1506         pxor    %xmm7,%xmm15
1507         movdqu  %xmm15,0(%r13)
1508         cmpq    $2,%r14
1509         jb      .Lctr_enc_done
1510         movdqu  16(%r12),%xmm8
1511         pxor    %xmm8,%xmm0
1512         movdqu  %xmm0,16(%r13)
1513         je      .Lctr_enc_done
1514         movdqu  32(%r12),%xmm9
1515         pxor    %xmm9,%xmm3
1516         movdqu  %xmm3,32(%r13)
1517         cmpq    $4,%r14
1518         jb      .Lctr_enc_done
1519         movdqu  48(%r12),%xmm10
1520         pxor    %xmm10,%xmm5
1521         movdqu  %xmm5,48(%r13)
1522         je      .Lctr_enc_done
1523         movdqu  64(%r12),%xmm11
1524         pxor    %xmm11,%xmm2
1525         movdqu  %xmm2,64(%r13)
1526         cmpq    $6,%r14
1527         jb      .Lctr_enc_done
1528         movdqu  80(%r12),%xmm12
1529         pxor    %xmm12,%xmm6
1530         movdqu  %xmm6,80(%r13)
1531         je      .Lctr_enc_done
1532         movdqu  96(%r12),%xmm13
1533         pxor    %xmm13,%xmm1
1534         movdqu  %xmm1,96(%r13)
1535         jmp     .Lctr_enc_done
1536
1537 .align  16
1538 .Lctr_enc_short:
1539         leaq    32(%rbp),%rdi
1540         leaq    48(%rbp),%rsi
1541         leaq    (%r15),%rdx
1542         call    asm_AES_encrypt
1543         movdqu  (%r12),%xmm0
1544         leaq    16(%r12),%r12
1545         movl    44(%rbp),%eax
1546         bswapl  %eax
1547         pxor    48(%rbp),%xmm0
1548         incl    %eax
1549         movdqu  %xmm0,(%r13)
1550         bswapl  %eax
1551         leaq    16(%r13),%r13
1552         movl    %eax,44(%rsp)
1553         decq    %r14
1554         jnz     .Lctr_enc_short
1555
1556 .Lctr_enc_done:
1557         leaq    (%rsp),%rax
1558         pxor    %xmm0,%xmm0
1559 .Lctr_enc_bzero:
1560         movdqa  %xmm0,0(%rax)
1561         movdqa  %xmm0,16(%rax)
1562         leaq    32(%rax),%rax
1563         cmpq    %rax,%rbp
1564         ja      .Lctr_enc_bzero
1565
1566         leaq    (%rbp),%rsp
1567         movq    72(%rsp),%r15
1568         movq    80(%rsp),%r14
1569         movq    88(%rsp),%r13
1570         movq    96(%rsp),%r12
1571         movq    104(%rsp),%rbx
1572         movq    112(%rsp),%rax
1573         leaq    120(%rsp),%rsp
1574         movq    %rax,%rbp
1575 .Lctr_enc_epilogue:
1576         .byte   0xf3,0xc3
1577 .size   bsaes_ctr32_encrypt_blocks,.-bsaes_ctr32_encrypt_blocks
1578 .globl  bsaes_xts_encrypt
1579 .type   bsaes_xts_encrypt,@function
1580 .align  16
1581 bsaes_xts_encrypt:
1582         movq    %rsp,%rax
1583 .Lxts_enc_prologue:
1584         pushq   %rbp
1585         pushq   %rbx
1586         pushq   %r12
1587         pushq   %r13
1588         pushq   %r14
1589         pushq   %r15
1590         leaq    -72(%rsp),%rsp
1591         movq    %rsp,%rbp
1592         movq    %rdi,%r12
1593         movq    %rsi,%r13
1594         movq    %rdx,%r14
1595         movq    %rcx,%r15
1596
1597         leaq    (%r9),%rdi
1598         leaq    32(%rbp),%rsi
1599         leaq    (%r8),%rdx
1600         call    asm_AES_encrypt         
1601
1602         movl    240(%r15),%eax
1603         movq    %r14,%rbx
1604
1605         movl    %eax,%edx
1606         shlq    $7,%rax
1607         subq    $96,%rax
1608         subq    %rax,%rsp
1609
1610         movq    %rsp,%rax
1611         movq    %r15,%rcx
1612         movl    %edx,%r10d
1613         call    _bsaes_key_convert
1614         pxor    %xmm6,%xmm7
1615         movdqa  %xmm7,(%rax)
1616
1617         andq    $-16,%r14
1618         subq    $128,%rsp
1619         movdqa  32(%rbp),%xmm6
1620
1621         pxor    %xmm14,%xmm14
1622         movdqa  .Lxts_magic(%rip),%xmm12
1623         pcmpgtd %xmm6,%xmm14
1624
1625         subq    $128,%r14
1626         jc      .Lxts_enc_short
1627         jmp     .Lxts_enc_loop
1628
1629 .align  16
1630 .Lxts_enc_loop:
1631         pshufd  $19,%xmm14,%xmm13
1632         pxor    %xmm14,%xmm14
1633         movdqa  %xmm6,%xmm15
1634         movdqa  %xmm6,0(%rsp)
1635         paddq   %xmm6,%xmm6
1636         pand    %xmm12,%xmm13
1637         pcmpgtd %xmm6,%xmm14
1638         pxor    %xmm13,%xmm6
1639         pshufd  $19,%xmm14,%xmm13
1640         pxor    %xmm14,%xmm14
1641         movdqa  %xmm6,%xmm0
1642         movdqa  %xmm6,16(%rsp)
1643         paddq   %xmm6,%xmm6
1644         pand    %xmm12,%xmm13
1645         pcmpgtd %xmm6,%xmm14
1646         pxor    %xmm13,%xmm6
1647         movdqu  0(%r12),%xmm7
1648         pshufd  $19,%xmm14,%xmm13
1649         pxor    %xmm14,%xmm14
1650         movdqa  %xmm6,%xmm1
1651         movdqa  %xmm6,32(%rsp)
1652         paddq   %xmm6,%xmm6
1653         pand    %xmm12,%xmm13
1654         pcmpgtd %xmm6,%xmm14
1655         pxor    %xmm13,%xmm6
1656         movdqu  16(%r12),%xmm8
1657         pxor    %xmm7,%xmm15
1658         pshufd  $19,%xmm14,%xmm13
1659         pxor    %xmm14,%xmm14
1660         movdqa  %xmm6,%xmm2
1661         movdqa  %xmm6,48(%rsp)
1662         paddq   %xmm6,%xmm6
1663         pand    %xmm12,%xmm13
1664         pcmpgtd %xmm6,%xmm14
1665         pxor    %xmm13,%xmm6
1666         movdqu  32(%r12),%xmm9
1667         pxor    %xmm8,%xmm0
1668         pshufd  $19,%xmm14,%xmm13
1669         pxor    %xmm14,%xmm14
1670         movdqa  %xmm6,%xmm3
1671         movdqa  %xmm6,64(%rsp)
1672         paddq   %xmm6,%xmm6
1673         pand    %xmm12,%xmm13
1674         pcmpgtd %xmm6,%xmm14
1675         pxor    %xmm13,%xmm6
1676         movdqu  48(%r12),%xmm10
1677         pxor    %xmm9,%xmm1
1678         pshufd  $19,%xmm14,%xmm13
1679         pxor    %xmm14,%xmm14
1680         movdqa  %xmm6,%xmm4
1681         movdqa  %xmm6,80(%rsp)
1682         paddq   %xmm6,%xmm6
1683         pand    %xmm12,%xmm13
1684         pcmpgtd %xmm6,%xmm14
1685         pxor    %xmm13,%xmm6
1686         movdqu  64(%r12),%xmm11
1687         pxor    %xmm10,%xmm2
1688         pshufd  $19,%xmm14,%xmm13
1689         pxor    %xmm14,%xmm14
1690         movdqa  %xmm6,%xmm5
1691         movdqa  %xmm6,96(%rsp)
1692         paddq   %xmm6,%xmm6
1693         pand    %xmm12,%xmm13
1694         pcmpgtd %xmm6,%xmm14
1695         pxor    %xmm13,%xmm6
1696         movdqu  80(%r12),%xmm12
1697         pxor    %xmm11,%xmm3
1698         movdqu  96(%r12),%xmm13
1699         pxor    %xmm12,%xmm4
1700         movdqu  112(%r12),%xmm14
1701         leaq    128(%r12),%r12
1702         movdqa  %xmm6,112(%rsp)
1703         pxor    %xmm13,%xmm5
1704         leaq    128(%rsp),%rax
1705         pxor    %xmm14,%xmm6
1706         movl    %edx,%r10d
1707
1708         call    _bsaes_encrypt8
1709
1710         pxor    0(%rsp),%xmm15
1711         pxor    16(%rsp),%xmm0
1712         movdqu  %xmm15,0(%r13)
1713         pxor    32(%rsp),%xmm3
1714         movdqu  %xmm0,16(%r13)
1715         pxor    48(%rsp),%xmm5
1716         movdqu  %xmm3,32(%r13)
1717         pxor    64(%rsp),%xmm2
1718         movdqu  %xmm5,48(%r13)
1719         pxor    80(%rsp),%xmm6
1720         movdqu  %xmm2,64(%r13)
1721         pxor    96(%rsp),%xmm1
1722         movdqu  %xmm6,80(%r13)
1723         pxor    112(%rsp),%xmm4
1724         movdqu  %xmm1,96(%r13)
1725         movdqu  %xmm4,112(%r13)
1726         leaq    128(%r13),%r13
1727
1728         movdqa  112(%rsp),%xmm6
1729         pxor    %xmm14,%xmm14
1730         movdqa  .Lxts_magic(%rip),%xmm12
1731         pcmpgtd %xmm6,%xmm14
1732         pshufd  $19,%xmm14,%xmm13
1733         pxor    %xmm14,%xmm14
1734         paddq   %xmm6,%xmm6
1735         pand    %xmm12,%xmm13
1736         pcmpgtd %xmm6,%xmm14
1737         pxor    %xmm13,%xmm6
1738
1739         subq    $128,%r14
1740         jnc     .Lxts_enc_loop
1741
1742 .Lxts_enc_short:
1743         addq    $128,%r14
1744         jz      .Lxts_enc_done
1745         pshufd  $19,%xmm14,%xmm13
1746         pxor    %xmm14,%xmm14
1747         movdqa  %xmm6,%xmm15
1748         movdqa  %xmm6,0(%rsp)
1749         paddq   %xmm6,%xmm6
1750         pand    %xmm12,%xmm13
1751         pcmpgtd %xmm6,%xmm14
1752         pxor    %xmm13,%xmm6
1753         pshufd  $19,%xmm14,%xmm13
1754         pxor    %xmm14,%xmm14
1755         movdqa  %xmm6,%xmm0
1756         movdqa  %xmm6,16(%rsp)
1757         paddq   %xmm6,%xmm6
1758         pand    %xmm12,%xmm13
1759         pcmpgtd %xmm6,%xmm14
1760         pxor    %xmm13,%xmm6
1761         movdqu  0(%r12),%xmm7
1762         cmpq    $16,%r14
1763         je      .Lxts_enc_1
1764         pshufd  $19,%xmm14,%xmm13
1765         pxor    %xmm14,%xmm14
1766         movdqa  %xmm6,%xmm1
1767         movdqa  %xmm6,32(%rsp)
1768         paddq   %xmm6,%xmm6
1769         pand    %xmm12,%xmm13
1770         pcmpgtd %xmm6,%xmm14
1771         pxor    %xmm13,%xmm6
1772         movdqu  16(%r12),%xmm8
1773         cmpq    $32,%r14
1774         je      .Lxts_enc_2
1775         pxor    %xmm7,%xmm15
1776         pshufd  $19,%xmm14,%xmm13
1777         pxor    %xmm14,%xmm14
1778         movdqa  %xmm6,%xmm2
1779         movdqa  %xmm6,48(%rsp)
1780         paddq   %xmm6,%xmm6
1781         pand    %xmm12,%xmm13
1782         pcmpgtd %xmm6,%xmm14
1783         pxor    %xmm13,%xmm6
1784         movdqu  32(%r12),%xmm9
1785         cmpq    $48,%r14
1786         je      .Lxts_enc_3
1787         pxor    %xmm8,%xmm0
1788         pshufd  $19,%xmm14,%xmm13
1789         pxor    %xmm14,%xmm14
1790         movdqa  %xmm6,%xmm3
1791         movdqa  %xmm6,64(%rsp)
1792         paddq   %xmm6,%xmm6
1793         pand    %xmm12,%xmm13
1794         pcmpgtd %xmm6,%xmm14
1795         pxor    %xmm13,%xmm6
1796         movdqu  48(%r12),%xmm10
1797         cmpq    $64,%r14
1798         je      .Lxts_enc_4
1799         pxor    %xmm9,%xmm1
1800         pshufd  $19,%xmm14,%xmm13
1801         pxor    %xmm14,%xmm14
1802         movdqa  %xmm6,%xmm4
1803         movdqa  %xmm6,80(%rsp)
1804         paddq   %xmm6,%xmm6
1805         pand    %xmm12,%xmm13
1806         pcmpgtd %xmm6,%xmm14
1807         pxor    %xmm13,%xmm6
1808         movdqu  64(%r12),%xmm11
1809         cmpq    $80,%r14
1810         je      .Lxts_enc_5
1811         pxor    %xmm10,%xmm2
1812         pshufd  $19,%xmm14,%xmm13
1813         pxor    %xmm14,%xmm14
1814         movdqa  %xmm6,%xmm5
1815         movdqa  %xmm6,96(%rsp)
1816         paddq   %xmm6,%xmm6
1817         pand    %xmm12,%xmm13
1818         pcmpgtd %xmm6,%xmm14
1819         pxor    %xmm13,%xmm6
1820         movdqu  80(%r12),%xmm12
1821         cmpq    $96,%r14
1822         je      .Lxts_enc_6
1823         pxor    %xmm11,%xmm3
1824         movdqu  96(%r12),%xmm13
1825         pxor    %xmm12,%xmm4
1826         movdqa  %xmm6,112(%rsp)
1827         leaq    112(%r12),%r12
1828         pxor    %xmm13,%xmm5
1829         leaq    128(%rsp),%rax
1830         movl    %edx,%r10d
1831
1832         call    _bsaes_encrypt8
1833
1834         pxor    0(%rsp),%xmm15
1835         pxor    16(%rsp),%xmm0
1836         movdqu  %xmm15,0(%r13)
1837         pxor    32(%rsp),%xmm3
1838         movdqu  %xmm0,16(%r13)
1839         pxor    48(%rsp),%xmm5
1840         movdqu  %xmm3,32(%r13)
1841         pxor    64(%rsp),%xmm2
1842         movdqu  %xmm5,48(%r13)
1843         pxor    80(%rsp),%xmm6
1844         movdqu  %xmm2,64(%r13)
1845         pxor    96(%rsp),%xmm1
1846         movdqu  %xmm6,80(%r13)
1847         movdqu  %xmm1,96(%r13)
1848         leaq    112(%r13),%r13
1849
1850         movdqa  112(%rsp),%xmm6
1851         jmp     .Lxts_enc_done
1852 .align  16
1853 .Lxts_enc_6:
1854         pxor    %xmm11,%xmm3
1855         leaq    96(%r12),%r12
1856         pxor    %xmm12,%xmm4
1857         leaq    128(%rsp),%rax
1858         movl    %edx,%r10d
1859
1860         call    _bsaes_encrypt8
1861
1862         pxor    0(%rsp),%xmm15
1863         pxor    16(%rsp),%xmm0
1864         movdqu  %xmm15,0(%r13)
1865         pxor    32(%rsp),%xmm3
1866         movdqu  %xmm0,16(%r13)
1867         pxor    48(%rsp),%xmm5
1868         movdqu  %xmm3,32(%r13)
1869         pxor    64(%rsp),%xmm2
1870         movdqu  %xmm5,48(%r13)
1871         pxor    80(%rsp),%xmm6
1872         movdqu  %xmm2,64(%r13)
1873         movdqu  %xmm6,80(%r13)
1874         leaq    96(%r13),%r13
1875
1876         movdqa  96(%rsp),%xmm6
1877         jmp     .Lxts_enc_done
1878 .align  16
1879 .Lxts_enc_5:
1880         pxor    %xmm10,%xmm2
1881         leaq    80(%r12),%r12
1882         pxor    %xmm11,%xmm3
1883         leaq    128(%rsp),%rax
1884         movl    %edx,%r10d
1885
1886         call    _bsaes_encrypt8
1887
1888         pxor    0(%rsp),%xmm15
1889         pxor    16(%rsp),%xmm0
1890         movdqu  %xmm15,0(%r13)
1891         pxor    32(%rsp),%xmm3
1892         movdqu  %xmm0,16(%r13)
1893         pxor    48(%rsp),%xmm5
1894         movdqu  %xmm3,32(%r13)
1895         pxor    64(%rsp),%xmm2
1896         movdqu  %xmm5,48(%r13)
1897         movdqu  %xmm2,64(%r13)
1898         leaq    80(%r13),%r13
1899
1900         movdqa  80(%rsp),%xmm6
1901         jmp     .Lxts_enc_done
1902 .align  16
1903 .Lxts_enc_4:
1904         pxor    %xmm9,%xmm1
1905         leaq    64(%r12),%r12
1906         pxor    %xmm10,%xmm2
1907         leaq    128(%rsp),%rax
1908         movl    %edx,%r10d
1909
1910         call    _bsaes_encrypt8
1911
1912         pxor    0(%rsp),%xmm15
1913         pxor    16(%rsp),%xmm0
1914         movdqu  %xmm15,0(%r13)
1915         pxor    32(%rsp),%xmm3
1916         movdqu  %xmm0,16(%r13)
1917         pxor    48(%rsp),%xmm5
1918         movdqu  %xmm3,32(%r13)
1919         movdqu  %xmm5,48(%r13)
1920         leaq    64(%r13),%r13
1921
1922         movdqa  64(%rsp),%xmm6
1923         jmp     .Lxts_enc_done
1924 .align  16
1925 .Lxts_enc_3:
1926         pxor    %xmm8,%xmm0
1927         leaq    48(%r12),%r12
1928         pxor    %xmm9,%xmm1
1929         leaq    128(%rsp),%rax
1930         movl    %edx,%r10d
1931
1932         call    _bsaes_encrypt8
1933
1934         pxor    0(%rsp),%xmm15
1935         pxor    16(%rsp),%xmm0
1936         movdqu  %xmm15,0(%r13)
1937         pxor    32(%rsp),%xmm3
1938         movdqu  %xmm0,16(%r13)
1939         movdqu  %xmm3,32(%r13)
1940         leaq    48(%r13),%r13
1941
1942         movdqa  48(%rsp),%xmm6
1943         jmp     .Lxts_enc_done
1944 .align  16
1945 .Lxts_enc_2:
1946         pxor    %xmm7,%xmm15
1947         leaq    32(%r12),%r12
1948         pxor    %xmm8,%xmm0
1949         leaq    128(%rsp),%rax
1950         movl    %edx,%r10d
1951
1952         call    _bsaes_encrypt8
1953
1954         pxor    0(%rsp),%xmm15
1955         pxor    16(%rsp),%xmm0
1956         movdqu  %xmm15,0(%r13)
1957         movdqu  %xmm0,16(%r13)
1958         leaq    32(%r13),%r13
1959
1960         movdqa  32(%rsp),%xmm6
1961         jmp     .Lxts_enc_done
1962 .align  16
1963 .Lxts_enc_1:
1964         pxor    %xmm15,%xmm7
1965         leaq    16(%r12),%r12
1966         movdqa  %xmm7,32(%rbp)
1967         leaq    32(%rbp),%rdi
1968         leaq    32(%rbp),%rsi
1969         leaq    (%r15),%rdx
1970         call    asm_AES_encrypt         
1971         pxor    32(%rbp),%xmm15
1972
1973
1974
1975
1976
1977         movdqu  %xmm15,0(%r13)
1978         leaq    16(%r13),%r13
1979
1980         movdqa  16(%rsp),%xmm6
1981
1982 .Lxts_enc_done:
1983         andl    $15,%ebx
1984         jz      .Lxts_enc_ret
1985         movq    %r13,%rdx
1986
1987 .Lxts_enc_steal:
1988         movzbl  (%r12),%eax
1989         movzbl  -16(%rdx),%ecx
1990         leaq    1(%r12),%r12
1991         movb    %al,-16(%rdx)
1992         movb    %cl,0(%rdx)
1993         leaq    1(%rdx),%rdx
1994         subl    $1,%ebx
1995         jnz     .Lxts_enc_steal
1996
1997         movdqu  -16(%r13),%xmm15
1998         leaq    32(%rbp),%rdi
1999         pxor    %xmm6,%xmm15
2000         leaq    32(%rbp),%rsi
2001         movdqa  %xmm15,32(%rbp)
2002         leaq    (%r15),%rdx
2003         call    asm_AES_encrypt         
2004         pxor    32(%rbp),%xmm6
2005         movdqu  %xmm6,-16(%r13)
2006
2007 .Lxts_enc_ret:
2008         leaq    (%rsp),%rax
2009         pxor    %xmm0,%xmm0
2010 .Lxts_enc_bzero:
2011         movdqa  %xmm0,0(%rax)
2012         movdqa  %xmm0,16(%rax)
2013         leaq    32(%rax),%rax
2014         cmpq    %rax,%rbp
2015         ja      .Lxts_enc_bzero
2016
2017         leaq    (%rbp),%rsp
2018         movq    72(%rsp),%r15
2019         movq    80(%rsp),%r14
2020         movq    88(%rsp),%r13
2021         movq    96(%rsp),%r12
2022         movq    104(%rsp),%rbx
2023         movq    112(%rsp),%rax
2024         leaq    120(%rsp),%rsp
2025         movq    %rax,%rbp
2026 .Lxts_enc_epilogue:
2027         .byte   0xf3,0xc3
2028 .size   bsaes_xts_encrypt,.-bsaes_xts_encrypt
2029
2030 .globl  bsaes_xts_decrypt
2031 .type   bsaes_xts_decrypt,@function
2032 .align  16
2033 bsaes_xts_decrypt:
2034         movq    %rsp,%rax
2035 .Lxts_dec_prologue:
2036         pushq   %rbp
2037         pushq   %rbx
2038         pushq   %r12
2039         pushq   %r13
2040         pushq   %r14
2041         pushq   %r15
2042         leaq    -72(%rsp),%rsp
2043         movq    %rsp,%rbp
2044         movq    %rdi,%r12
2045         movq    %rsi,%r13
2046         movq    %rdx,%r14
2047         movq    %rcx,%r15
2048
2049         leaq    (%r9),%rdi
2050         leaq    32(%rbp),%rsi
2051         leaq    (%r8),%rdx
2052         call    asm_AES_encrypt         
2053
2054         movl    240(%r15),%eax
2055         movq    %r14,%rbx
2056
2057         movl    %eax,%edx
2058         shlq    $7,%rax
2059         subq    $96,%rax
2060         subq    %rax,%rsp
2061
2062         movq    %rsp,%rax
2063         movq    %r15,%rcx
2064         movl    %edx,%r10d
2065         call    _bsaes_key_convert
2066         pxor    (%rsp),%xmm7
2067         movdqa  %xmm6,(%rax)
2068         movdqa  %xmm7,(%rsp)
2069
2070         xorl    %eax,%eax
2071         andq    $-16,%r14
2072         testl   $15,%ebx
2073         setnz   %al
2074         shlq    $4,%rax
2075         subq    %rax,%r14
2076
2077         subq    $128,%rsp
2078         movdqa  32(%rbp),%xmm6
2079
2080         pxor    %xmm14,%xmm14
2081         movdqa  .Lxts_magic(%rip),%xmm12
2082         pcmpgtd %xmm6,%xmm14
2083
2084         subq    $128,%r14
2085         jc      .Lxts_dec_short
2086         jmp     .Lxts_dec_loop
2087
2088 .align  16
2089 .Lxts_dec_loop:
2090         pshufd  $19,%xmm14,%xmm13
2091         pxor    %xmm14,%xmm14
2092         movdqa  %xmm6,%xmm15
2093         movdqa  %xmm6,0(%rsp)
2094         paddq   %xmm6,%xmm6
2095         pand    %xmm12,%xmm13
2096         pcmpgtd %xmm6,%xmm14
2097         pxor    %xmm13,%xmm6
2098         pshufd  $19,%xmm14,%xmm13
2099         pxor    %xmm14,%xmm14
2100         movdqa  %xmm6,%xmm0
2101         movdqa  %xmm6,16(%rsp)
2102         paddq   %xmm6,%xmm6
2103         pand    %xmm12,%xmm13
2104         pcmpgtd %xmm6,%xmm14
2105         pxor    %xmm13,%xmm6
2106         movdqu  0(%r12),%xmm7
2107         pshufd  $19,%xmm14,%xmm13
2108         pxor    %xmm14,%xmm14
2109         movdqa  %xmm6,%xmm1
2110         movdqa  %xmm6,32(%rsp)
2111         paddq   %xmm6,%xmm6
2112         pand    %xmm12,%xmm13
2113         pcmpgtd %xmm6,%xmm14
2114         pxor    %xmm13,%xmm6
2115         movdqu  16(%r12),%xmm8
2116         pxor    %xmm7,%xmm15
2117         pshufd  $19,%xmm14,%xmm13
2118         pxor    %xmm14,%xmm14
2119         movdqa  %xmm6,%xmm2
2120         movdqa  %xmm6,48(%rsp)
2121         paddq   %xmm6,%xmm6
2122         pand    %xmm12,%xmm13
2123         pcmpgtd %xmm6,%xmm14
2124         pxor    %xmm13,%xmm6
2125         movdqu  32(%r12),%xmm9
2126         pxor    %xmm8,%xmm0
2127         pshufd  $19,%xmm14,%xmm13
2128         pxor    %xmm14,%xmm14
2129         movdqa  %xmm6,%xmm3
2130         movdqa  %xmm6,64(%rsp)
2131         paddq   %xmm6,%xmm6
2132         pand    %xmm12,%xmm13
2133         pcmpgtd %xmm6,%xmm14
2134         pxor    %xmm13,%xmm6
2135         movdqu  48(%r12),%xmm10
2136         pxor    %xmm9,%xmm1
2137         pshufd  $19,%xmm14,%xmm13
2138         pxor    %xmm14,%xmm14
2139         movdqa  %xmm6,%xmm4
2140         movdqa  %xmm6,80(%rsp)
2141         paddq   %xmm6,%xmm6
2142         pand    %xmm12,%xmm13
2143         pcmpgtd %xmm6,%xmm14
2144         pxor    %xmm13,%xmm6
2145         movdqu  64(%r12),%xmm11
2146         pxor    %xmm10,%xmm2
2147         pshufd  $19,%xmm14,%xmm13
2148         pxor    %xmm14,%xmm14
2149         movdqa  %xmm6,%xmm5
2150         movdqa  %xmm6,96(%rsp)
2151         paddq   %xmm6,%xmm6
2152         pand    %xmm12,%xmm13
2153         pcmpgtd %xmm6,%xmm14
2154         pxor    %xmm13,%xmm6
2155         movdqu  80(%r12),%xmm12
2156         pxor    %xmm11,%xmm3
2157         movdqu  96(%r12),%xmm13
2158         pxor    %xmm12,%xmm4
2159         movdqu  112(%r12),%xmm14
2160         leaq    128(%r12),%r12
2161         movdqa  %xmm6,112(%rsp)
2162         pxor    %xmm13,%xmm5
2163         leaq    128(%rsp),%rax
2164         pxor    %xmm14,%xmm6
2165         movl    %edx,%r10d
2166
2167         call    _bsaes_decrypt8
2168
2169         pxor    0(%rsp),%xmm15
2170         pxor    16(%rsp),%xmm0
2171         movdqu  %xmm15,0(%r13)
2172         pxor    32(%rsp),%xmm5
2173         movdqu  %xmm0,16(%r13)
2174         pxor    48(%rsp),%xmm3
2175         movdqu  %xmm5,32(%r13)
2176         pxor    64(%rsp),%xmm1
2177         movdqu  %xmm3,48(%r13)
2178         pxor    80(%rsp),%xmm6
2179         movdqu  %xmm1,64(%r13)
2180         pxor    96(%rsp),%xmm2
2181         movdqu  %xmm6,80(%r13)
2182         pxor    112(%rsp),%xmm4
2183         movdqu  %xmm2,96(%r13)
2184         movdqu  %xmm4,112(%r13)
2185         leaq    128(%r13),%r13
2186
2187         movdqa  112(%rsp),%xmm6
2188         pxor    %xmm14,%xmm14
2189         movdqa  .Lxts_magic(%rip),%xmm12
2190         pcmpgtd %xmm6,%xmm14
2191         pshufd  $19,%xmm14,%xmm13
2192         pxor    %xmm14,%xmm14
2193         paddq   %xmm6,%xmm6
2194         pand    %xmm12,%xmm13
2195         pcmpgtd %xmm6,%xmm14
2196         pxor    %xmm13,%xmm6
2197
2198         subq    $128,%r14
2199         jnc     .Lxts_dec_loop
2200
2201 .Lxts_dec_short:
2202         addq    $128,%r14
2203         jz      .Lxts_dec_done
2204         pshufd  $19,%xmm14,%xmm13
2205         pxor    %xmm14,%xmm14
2206         movdqa  %xmm6,%xmm15
2207         movdqa  %xmm6,0(%rsp)
2208         paddq   %xmm6,%xmm6
2209         pand    %xmm12,%xmm13
2210         pcmpgtd %xmm6,%xmm14
2211         pxor    %xmm13,%xmm6
2212         pshufd  $19,%xmm14,%xmm13
2213         pxor    %xmm14,%xmm14
2214         movdqa  %xmm6,%xmm0
2215         movdqa  %xmm6,16(%rsp)
2216         paddq   %xmm6,%xmm6
2217         pand    %xmm12,%xmm13
2218         pcmpgtd %xmm6,%xmm14
2219         pxor    %xmm13,%xmm6
2220         movdqu  0(%r12),%xmm7
2221         cmpq    $16,%r14
2222         je      .Lxts_dec_1
2223         pshufd  $19,%xmm14,%xmm13
2224         pxor    %xmm14,%xmm14
2225         movdqa  %xmm6,%xmm1
2226         movdqa  %xmm6,32(%rsp)
2227         paddq   %xmm6,%xmm6
2228         pand    %xmm12,%xmm13
2229         pcmpgtd %xmm6,%xmm14
2230         pxor    %xmm13,%xmm6
2231         movdqu  16(%r12),%xmm8
2232         cmpq    $32,%r14
2233         je      .Lxts_dec_2
2234         pxor    %xmm7,%xmm15
2235         pshufd  $19,%xmm14,%xmm13
2236         pxor    %xmm14,%xmm14
2237         movdqa  %xmm6,%xmm2
2238         movdqa  %xmm6,48(%rsp)
2239         paddq   %xmm6,%xmm6
2240         pand    %xmm12,%xmm13
2241         pcmpgtd %xmm6,%xmm14
2242         pxor    %xmm13,%xmm6
2243         movdqu  32(%r12),%xmm9
2244         cmpq    $48,%r14
2245         je      .Lxts_dec_3
2246         pxor    %xmm8,%xmm0
2247         pshufd  $19,%xmm14,%xmm13
2248         pxor    %xmm14,%xmm14
2249         movdqa  %xmm6,%xmm3
2250         movdqa  %xmm6,64(%rsp)
2251         paddq   %xmm6,%xmm6
2252         pand    %xmm12,%xmm13
2253         pcmpgtd %xmm6,%xmm14
2254         pxor    %xmm13,%xmm6
2255         movdqu  48(%r12),%xmm10
2256         cmpq    $64,%r14
2257         je      .Lxts_dec_4
2258         pxor    %xmm9,%xmm1
2259         pshufd  $19,%xmm14,%xmm13
2260         pxor    %xmm14,%xmm14
2261         movdqa  %xmm6,%xmm4
2262         movdqa  %xmm6,80(%rsp)
2263         paddq   %xmm6,%xmm6
2264         pand    %xmm12,%xmm13
2265         pcmpgtd %xmm6,%xmm14
2266         pxor    %xmm13,%xmm6
2267         movdqu  64(%r12),%xmm11
2268         cmpq    $80,%r14
2269         je      .Lxts_dec_5
2270         pxor    %xmm10,%xmm2
2271         pshufd  $19,%xmm14,%xmm13
2272         pxor    %xmm14,%xmm14
2273         movdqa  %xmm6,%xmm5
2274         movdqa  %xmm6,96(%rsp)
2275         paddq   %xmm6,%xmm6
2276         pand    %xmm12,%xmm13
2277         pcmpgtd %xmm6,%xmm14
2278         pxor    %xmm13,%xmm6
2279         movdqu  80(%r12),%xmm12
2280         cmpq    $96,%r14
2281         je      .Lxts_dec_6
2282         pxor    %xmm11,%xmm3
2283         movdqu  96(%r12),%xmm13
2284         pxor    %xmm12,%xmm4
2285         movdqa  %xmm6,112(%rsp)
2286         leaq    112(%r12),%r12
2287         pxor    %xmm13,%xmm5
2288         leaq    128(%rsp),%rax
2289         movl    %edx,%r10d
2290
2291         call    _bsaes_decrypt8
2292
2293         pxor    0(%rsp),%xmm15
2294         pxor    16(%rsp),%xmm0
2295         movdqu  %xmm15,0(%r13)
2296         pxor    32(%rsp),%xmm5
2297         movdqu  %xmm0,16(%r13)
2298         pxor    48(%rsp),%xmm3
2299         movdqu  %xmm5,32(%r13)
2300         pxor    64(%rsp),%xmm1
2301         movdqu  %xmm3,48(%r13)
2302         pxor    80(%rsp),%xmm6
2303         movdqu  %xmm1,64(%r13)
2304         pxor    96(%rsp),%xmm2
2305         movdqu  %xmm6,80(%r13)
2306         movdqu  %xmm2,96(%r13)
2307         leaq    112(%r13),%r13
2308
2309         movdqa  112(%rsp),%xmm6
2310         jmp     .Lxts_dec_done
2311 .align  16
2312 .Lxts_dec_6:
2313         pxor    %xmm11,%xmm3
2314         leaq    96(%r12),%r12
2315         pxor    %xmm12,%xmm4
2316         leaq    128(%rsp),%rax
2317         movl    %edx,%r10d
2318
2319         call    _bsaes_decrypt8
2320
2321         pxor    0(%rsp),%xmm15
2322         pxor    16(%rsp),%xmm0
2323         movdqu  %xmm15,0(%r13)
2324         pxor    32(%rsp),%xmm5
2325         movdqu  %xmm0,16(%r13)
2326         pxor    48(%rsp),%xmm3
2327         movdqu  %xmm5,32(%r13)
2328         pxor    64(%rsp),%xmm1
2329         movdqu  %xmm3,48(%r13)
2330         pxor    80(%rsp),%xmm6
2331         movdqu  %xmm1,64(%r13)
2332         movdqu  %xmm6,80(%r13)
2333         leaq    96(%r13),%r13
2334
2335         movdqa  96(%rsp),%xmm6
2336         jmp     .Lxts_dec_done
2337 .align  16
2338 .Lxts_dec_5:
2339         pxor    %xmm10,%xmm2
2340         leaq    80(%r12),%r12
2341         pxor    %xmm11,%xmm3
2342         leaq    128(%rsp),%rax
2343         movl    %edx,%r10d
2344
2345         call    _bsaes_decrypt8
2346
2347         pxor    0(%rsp),%xmm15
2348         pxor    16(%rsp),%xmm0
2349         movdqu  %xmm15,0(%r13)
2350         pxor    32(%rsp),%xmm5
2351         movdqu  %xmm0,16(%r13)
2352         pxor    48(%rsp),%xmm3
2353         movdqu  %xmm5,32(%r13)
2354         pxor    64(%rsp),%xmm1
2355         movdqu  %xmm3,48(%r13)
2356         movdqu  %xmm1,64(%r13)
2357         leaq    80(%r13),%r13
2358
2359         movdqa  80(%rsp),%xmm6
2360         jmp     .Lxts_dec_done
2361 .align  16
2362 .Lxts_dec_4:
2363         pxor    %xmm9,%xmm1
2364         leaq    64(%r12),%r12
2365         pxor    %xmm10,%xmm2
2366         leaq    128(%rsp),%rax
2367         movl    %edx,%r10d
2368
2369         call    _bsaes_decrypt8
2370
2371         pxor    0(%rsp),%xmm15
2372         pxor    16(%rsp),%xmm0
2373         movdqu  %xmm15,0(%r13)
2374         pxor    32(%rsp),%xmm5
2375         movdqu  %xmm0,16(%r13)
2376         pxor    48(%rsp),%xmm3
2377         movdqu  %xmm5,32(%r13)
2378         movdqu  %xmm3,48(%r13)
2379         leaq    64(%r13),%r13
2380
2381         movdqa  64(%rsp),%xmm6
2382         jmp     .Lxts_dec_done
2383 .align  16
2384 .Lxts_dec_3:
2385         pxor    %xmm8,%xmm0
2386         leaq    48(%r12),%r12
2387         pxor    %xmm9,%xmm1
2388         leaq    128(%rsp),%rax
2389         movl    %edx,%r10d
2390
2391         call    _bsaes_decrypt8
2392
2393         pxor    0(%rsp),%xmm15
2394         pxor    16(%rsp),%xmm0
2395         movdqu  %xmm15,0(%r13)
2396         pxor    32(%rsp),%xmm5
2397         movdqu  %xmm0,16(%r13)
2398         movdqu  %xmm5,32(%r13)
2399         leaq    48(%r13),%r13
2400
2401         movdqa  48(%rsp),%xmm6
2402         jmp     .Lxts_dec_done
2403 .align  16
2404 .Lxts_dec_2:
2405         pxor    %xmm7,%xmm15
2406         leaq    32(%r12),%r12
2407         pxor    %xmm8,%xmm0
2408         leaq    128(%rsp),%rax
2409         movl    %edx,%r10d
2410
2411         call    _bsaes_decrypt8
2412
2413         pxor    0(%rsp),%xmm15
2414         pxor    16(%rsp),%xmm0
2415         movdqu  %xmm15,0(%r13)
2416         movdqu  %xmm0,16(%r13)
2417         leaq    32(%r13),%r13
2418
2419         movdqa  32(%rsp),%xmm6
2420         jmp     .Lxts_dec_done
2421 .align  16
2422 .Lxts_dec_1:
2423         pxor    %xmm15,%xmm7
2424         leaq    16(%r12),%r12
2425         movdqa  %xmm7,32(%rbp)
2426         leaq    32(%rbp),%rdi
2427         leaq    32(%rbp),%rsi
2428         leaq    (%r15),%rdx
2429         call    asm_AES_decrypt         
2430         pxor    32(%rbp),%xmm15
2431
2432
2433
2434
2435
2436         movdqu  %xmm15,0(%r13)
2437         leaq    16(%r13),%r13
2438
2439         movdqa  16(%rsp),%xmm6
2440
2441 .Lxts_dec_done:
2442         andl    $15,%ebx
2443         jz      .Lxts_dec_ret
2444
2445         pxor    %xmm14,%xmm14
2446         movdqa  .Lxts_magic(%rip),%xmm12
2447         pcmpgtd %xmm6,%xmm14
2448         pshufd  $19,%xmm14,%xmm13
2449         movdqa  %xmm6,%xmm5
2450         paddq   %xmm6,%xmm6
2451         pand    %xmm12,%xmm13
2452         movdqu  (%r12),%xmm15
2453         pxor    %xmm13,%xmm6
2454
2455         leaq    32(%rbp),%rdi
2456         pxor    %xmm6,%xmm15
2457         leaq    32(%rbp),%rsi
2458         movdqa  %xmm15,32(%rbp)
2459         leaq    (%r15),%rdx
2460         call    asm_AES_decrypt         
2461         pxor    32(%rbp),%xmm6
2462         movq    %r13,%rdx
2463         movdqu  %xmm6,(%r13)
2464
2465 .Lxts_dec_steal:
2466         movzbl  16(%r12),%eax
2467         movzbl  (%rdx),%ecx
2468         leaq    1(%r12),%r12
2469         movb    %al,(%rdx)
2470         movb    %cl,16(%rdx)
2471         leaq    1(%rdx),%rdx
2472         subl    $1,%ebx
2473         jnz     .Lxts_dec_steal
2474
2475         movdqu  (%r13),%xmm15
2476         leaq    32(%rbp),%rdi
2477         pxor    %xmm5,%xmm15
2478         leaq    32(%rbp),%rsi
2479         movdqa  %xmm15,32(%rbp)
2480         leaq    (%r15),%rdx
2481         call    asm_AES_decrypt         
2482         pxor    32(%rbp),%xmm5
2483         movdqu  %xmm5,(%r13)
2484
2485 .Lxts_dec_ret:
2486         leaq    (%rsp),%rax
2487         pxor    %xmm0,%xmm0
2488 .Lxts_dec_bzero:
2489         movdqa  %xmm0,0(%rax)
2490         movdqa  %xmm0,16(%rax)
2491         leaq    32(%rax),%rax
2492         cmpq    %rax,%rbp
2493         ja      .Lxts_dec_bzero
2494
2495         leaq    (%rbp),%rsp
2496         movq    72(%rsp),%r15
2497         movq    80(%rsp),%r14
2498         movq    88(%rsp),%r13
2499         movq    96(%rsp),%r12
2500         movq    104(%rsp),%rbx
2501         movq    112(%rsp),%rax
2502         leaq    120(%rsp),%rsp
2503         movq    %rax,%rbp
2504 .Lxts_dec_epilogue:
2505         .byte   0xf3,0xc3
2506 .size   bsaes_xts_decrypt,.-bsaes_xts_decrypt
2507 .type   _bsaes_const,@object
2508 .align  64
2509 _bsaes_const:
2510 .LM0ISR:
2511 .quad   0x0a0e0206070b0f03, 0x0004080c0d010509
2512 .LISRM0:
2513 .quad   0x01040b0e0205080f, 0x0306090c00070a0d
2514 .LISR:
2515 .quad   0x0504070602010003, 0x0f0e0d0c080b0a09
2516 .LBS0:
2517 .quad   0x5555555555555555, 0x5555555555555555
2518 .LBS1:
2519 .quad   0x3333333333333333, 0x3333333333333333
2520 .LBS2:
2521 .quad   0x0f0f0f0f0f0f0f0f, 0x0f0f0f0f0f0f0f0f
2522 .LSR:
2523 .quad   0x0504070600030201, 0x0f0e0d0c0a09080b
2524 .LSRM0:
2525 .quad   0x0304090e00050a0f, 0x01060b0c0207080d
2526 .LM0SR:
2527 .quad   0x0a0e02060f03070b, 0x0004080c05090d01
2528 .LSWPUP:
2529 .quad   0x0706050403020100, 0x0c0d0e0f0b0a0908
2530 .LSWPUPM0SR:
2531 .quad   0x0a0d02060c03070b, 0x0004080f05090e01
2532 .LADD1:
2533 .quad   0x0000000000000000, 0x0000000100000000
2534 .LADD2:
2535 .quad   0x0000000000000000, 0x0000000200000000
2536 .LADD3:
2537 .quad   0x0000000000000000, 0x0000000300000000
2538 .LADD4:
2539 .quad   0x0000000000000000, 0x0000000400000000
2540 .LADD5:
2541 .quad   0x0000000000000000, 0x0000000500000000
2542 .LADD6:
2543 .quad   0x0000000000000000, 0x0000000600000000
2544 .LADD7:
2545 .quad   0x0000000000000000, 0x0000000700000000
2546 .LADD8:
2547 .quad   0x0000000000000000, 0x0000000800000000
2548 .Lxts_magic:
2549 .long   0x87,0,1,0
2550 .Lmasks:
2551 .quad   0x0101010101010101, 0x0101010101010101
2552 .quad   0x0202020202020202, 0x0202020202020202
2553 .quad   0x0404040404040404, 0x0404040404040404
2554 .quad   0x0808080808080808, 0x0808080808080808
2555 .LM0:
2556 .quad   0x02060a0e03070b0f, 0x0004080c0105090d
2557 .L63:
2558 .quad   0x6363636363636363, 0x6363636363636363
2559 .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
2560 .align  64
2561 .size   _bsaes_const,.-_bsaes_const