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