Added Mike Hamburg's SSSE3 AES implementation.
[gnutls:gnutls.git] / lib / accelerated / x86 / elf / aes-ssse3-x86.s
1 ######################################################################
2 ## Constant-time SSSE3 AES core implementation.
3 ## version 0.1
4 ##
5 ## By Mike Hamburg (Stanford University), 2009
6 ## Public domain.
7 ##
8 ## For details see http://shiftleft.org/papers/vector_aes/ and
9 ## http://crypto.stanford.edu/vpaes/.
10 #
11 # *** This file is auto-generated ***
12 #
13 .file   "vpaes-x86.s"
14 .text
15 .align  64
16 .L_vpaes_consts:
17 .long   218628480,235210255,168496130,67568393
18 .long   252381056,17041926,33884169,51187212
19 .long   252645135,252645135,252645135,252645135
20 .long   1512730624,3266504856,1377990664,3401244816
21 .long   830229760,1275146365,2969422977,3447763452
22 .long   3411033600,2979783055,338359620,2782886510
23 .long   4209124096,907596821,221174255,1006095553
24 .long   191964160,3799684038,3164090317,1589111125
25 .long   182528256,1777043520,2877432650,3265356744
26 .long   1874708224,3503451415,3305285752,363511674
27 .long   1606117888,3487855781,1093350906,2384367825
28 .long   197121,67569157,134941193,202313229
29 .long   67569157,134941193,202313229,197121
30 .long   134941193,202313229,197121,67569157
31 .long   202313229,197121,67569157,134941193
32 .long   33619971,100992007,168364043,235736079
33 .long   235736079,33619971,100992007,168364043
34 .long   168364043,235736079,33619971,100992007
35 .long   100992007,168364043,235736079,33619971
36 .long   50462976,117835012,185207048,252579084
37 .long   252314880,51251460,117574920,184942860
38 .long   184682752,252054788,50987272,118359308
39 .long   118099200,185467140,251790600,50727180
40 .long   2946363062,528716217,1300004225,1881839624
41 .long   1532713819,1532713819,1532713819,1532713819
42 .long   3602276352,4288629033,3737020424,4153884961
43 .long   1354558464,32357713,2958822624,3775749553
44 .long   1201988352,132424512,1572796698,503232858
45 .long   2213177600,1597421020,4103937655,675398315
46 .long   2749646592,4273543773,1511898873,121693092
47 .long   3040248576,1103263732,2871565598,1608280554
48 .long   2236667136,2588920351,482954393,64377734
49 .long   3069987328,291237287,2117370568,3650299247
50 .long   533321216,3573750986,2572112006,1401264716
51 .long   1339849704,2721158661,548607111,3445553514
52 .long   2128193280,3054596040,2183486460,1257083700
53 .long   655635200,1165381986,3923443150,2344132524
54 .long   190078720,256924420,290342170,357187870
55 .long   1610966272,2263057382,4103205268,309794674
56 .long   2592527872,2233205587,1335446729,3402964816
57 .long   3973531904,3225098121,3002836325,1918774430
58 .long   3870401024,2102906079,2284471353,4117666579
59 .long   617007872,1021508343,366931923,691083277
60 .long   2528395776,3491914898,2968704004,1613121270
61 .long   3445188352,3247741094,844474987,4093578302
62 .long   651481088,1190302358,1689581232,574775300
63 .long   4289380608,206939853,2555985458,2489840491
64 .long   2130264064,327674451,3566485037,3349835193
65 .long   2470714624,316102159,3636825756,3393945945
66 .byte   86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105
67 .byte   111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83
68 .byte   83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117
69 .byte   114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105
70 .byte   118,101,114,115,105,116,121,41,0
71 .align  64
72 .type   _vpaes_preheat,@function
73 .align  16
74 _vpaes_preheat:
75         addl    (%esp),%ebp
76         movdqa  -48(%ebp),%xmm7
77         movdqa  -16(%ebp),%xmm6
78         ret
79 .size   _vpaes_preheat,.-_vpaes_preheat
80 .type   _vpaes_encrypt_core,@function
81 .align  16
82 _vpaes_encrypt_core:
83         movl    $16,%ecx
84         movl    240(%edx),%eax
85         movdqa  %xmm6,%xmm1
86         movdqa  (%ebp),%xmm2
87         pandn   %xmm0,%xmm1
88         pand    %xmm6,%xmm0
89         movdqu  (%edx),%xmm5
90 .byte   102,15,56,0,208
91         movdqa  16(%ebp),%xmm0
92         pxor    %xmm5,%xmm2
93         psrld   $4,%xmm1
94         addl    $16,%edx
95 .byte   102,15,56,0,193
96         leal    192(%ebp),%ebx
97         pxor    %xmm2,%xmm0
98         jmp     .L000enc_entry
99 .align  16
100 .L001enc_loop:
101         movdqa  32(%ebp),%xmm4
102         movdqa  48(%ebp),%xmm0
103 .byte   102,15,56,0,226
104 .byte   102,15,56,0,195
105         pxor    %xmm5,%xmm4
106         movdqa  64(%ebp),%xmm5
107         pxor    %xmm4,%xmm0
108         movdqa  -64(%ebx,%ecx,1),%xmm1
109 .byte   102,15,56,0,234
110         movdqa  80(%ebp),%xmm2
111         movdqa  (%ebx,%ecx,1),%xmm4
112 .byte   102,15,56,0,211
113         movdqa  %xmm0,%xmm3
114         pxor    %xmm5,%xmm2
115 .byte   102,15,56,0,193
116         addl    $16,%edx
117         pxor    %xmm2,%xmm0
118 .byte   102,15,56,0,220
119         addl    $16,%ecx
120         pxor    %xmm0,%xmm3
121 .byte   102,15,56,0,193
122         andl    $48,%ecx
123         subl    $1,%eax
124         pxor    %xmm3,%xmm0
125 .L000enc_entry:
126         movdqa  %xmm6,%xmm1
127         movdqa  -32(%ebp),%xmm5
128         pandn   %xmm0,%xmm1
129         psrld   $4,%xmm1
130         pand    %xmm6,%xmm0
131 .byte   102,15,56,0,232
132         movdqa  %xmm7,%xmm3
133         pxor    %xmm1,%xmm0
134 .byte   102,15,56,0,217
135         movdqa  %xmm7,%xmm4
136         pxor    %xmm5,%xmm3
137 .byte   102,15,56,0,224
138         movdqa  %xmm7,%xmm2
139         pxor    %xmm5,%xmm4
140 .byte   102,15,56,0,211
141         movdqa  %xmm7,%xmm3
142         pxor    %xmm0,%xmm2
143 .byte   102,15,56,0,220
144         movdqu  (%edx),%xmm5
145         pxor    %xmm1,%xmm3
146         jnz     .L001enc_loop
147         movdqa  96(%ebp),%xmm4
148         movdqa  112(%ebp),%xmm0
149 .byte   102,15,56,0,226
150         pxor    %xmm5,%xmm4
151 .byte   102,15,56,0,195
152         movdqa  64(%ebx,%ecx,1),%xmm1
153         pxor    %xmm4,%xmm0
154 .byte   102,15,56,0,193
155         ret
156 .size   _vpaes_encrypt_core,.-_vpaes_encrypt_core
157 .type   _vpaes_decrypt_core,@function
158 .align  16
159 _vpaes_decrypt_core:
160         leal    608(%ebp),%ebx
161         movl    240(%edx),%eax
162         movdqa  %xmm6,%xmm1
163         movdqa  -64(%ebx),%xmm2
164         pandn   %xmm0,%xmm1
165         movl    %eax,%ecx
166         psrld   $4,%xmm1
167         movdqu  (%edx),%xmm5
168         shll    $4,%ecx
169         pand    %xmm6,%xmm0
170 .byte   102,15,56,0,208
171         movdqa  -48(%ebx),%xmm0
172         xorl    $48,%ecx
173 .byte   102,15,56,0,193
174         andl    $48,%ecx
175         pxor    %xmm5,%xmm2
176         movdqa  176(%ebp),%xmm5
177         pxor    %xmm2,%xmm0
178         addl    $16,%edx
179         leal    -352(%ebx,%ecx,1),%ecx
180         jmp     .L002dec_entry
181 .align  16
182 .L003dec_loop:
183         movdqa  -32(%ebx),%xmm4
184         movdqa  -16(%ebx),%xmm1
185 .byte   102,15,56,0,226
186 .byte   102,15,56,0,203
187         pxor    %xmm4,%xmm0
188         movdqa  (%ebx),%xmm4
189         pxor    %xmm1,%xmm0
190         movdqa  16(%ebx),%xmm1
191 .byte   102,15,56,0,226
192 .byte   102,15,56,0,197
193 .byte   102,15,56,0,203
194         pxor    %xmm4,%xmm0
195         movdqa  32(%ebx),%xmm4
196         pxor    %xmm1,%xmm0
197         movdqa  48(%ebx),%xmm1
198 .byte   102,15,56,0,226
199 .byte   102,15,56,0,197
200 .byte   102,15,56,0,203
201         pxor    %xmm4,%xmm0
202         movdqa  64(%ebx),%xmm4
203         pxor    %xmm1,%xmm0
204         movdqa  80(%ebx),%xmm1
205 .byte   102,15,56,0,226
206 .byte   102,15,56,0,197
207 .byte   102,15,56,0,203
208         pxor    %xmm4,%xmm0
209         addl    $16,%edx
210 .byte   102,15,58,15,237,12
211         pxor    %xmm1,%xmm0
212         subl    $1,%eax
213 .L002dec_entry:
214         movdqa  %xmm6,%xmm1
215         movdqa  -32(%ebp),%xmm2
216         pandn   %xmm0,%xmm1
217         pand    %xmm6,%xmm0
218         psrld   $4,%xmm1
219 .byte   102,15,56,0,208
220         movdqa  %xmm7,%xmm3
221         pxor    %xmm1,%xmm0
222 .byte   102,15,56,0,217
223         movdqa  %xmm7,%xmm4
224         pxor    %xmm2,%xmm3
225 .byte   102,15,56,0,224
226         pxor    %xmm2,%xmm4
227         movdqa  %xmm7,%xmm2
228 .byte   102,15,56,0,211
229         movdqa  %xmm7,%xmm3
230         pxor    %xmm0,%xmm2
231 .byte   102,15,56,0,220
232         movdqu  (%edx),%xmm0
233         pxor    %xmm1,%xmm3
234         jnz     .L003dec_loop
235         movdqa  96(%ebx),%xmm4
236 .byte   102,15,56,0,226
237         pxor    %xmm0,%xmm4
238         movdqa  112(%ebx),%xmm0
239         movdqa  (%ecx),%xmm2
240 .byte   102,15,56,0,195
241         pxor    %xmm4,%xmm0
242 .byte   102,15,56,0,194
243         ret
244 .size   _vpaes_decrypt_core,.-_vpaes_decrypt_core
245 .type   _vpaes_schedule_core,@function
246 .align  16
247 _vpaes_schedule_core:
248         addl    (%esp),%ebp
249         movdqu  (%esi),%xmm0
250         movdqa  320(%ebp),%xmm2
251         movdqa  %xmm0,%xmm3
252         leal    (%ebp),%ebx
253         movdqa  %xmm2,4(%esp)
254         call    _vpaes_schedule_transform
255         movdqa  %xmm0,%xmm7
256         testl   %edi,%edi
257         jnz     .L004schedule_am_decrypting
258         movdqu  %xmm0,(%edx)
259         jmp     .L005schedule_go
260 .L004schedule_am_decrypting:
261         movdqa  256(%ebp,%ecx,1),%xmm1
262 .byte   102,15,56,0,217
263         movdqu  %xmm3,(%edx)
264         xorl    $48,%ecx
265 .L005schedule_go:
266         cmpl    $192,%eax
267         ja      .L006schedule_256
268         je      .L007schedule_192
269 .L008schedule_128:
270         movl    $10,%eax
271 .L009loop_schedule_128:
272         call    _vpaes_schedule_round
273         decl    %eax
274         jz      .L010schedule_mangle_last
275         call    _vpaes_schedule_mangle
276         jmp     .L009loop_schedule_128
277 .align  16
278 .L007schedule_192:
279         movdqu  8(%esi),%xmm0
280         call    _vpaes_schedule_transform
281         movdqa  %xmm0,%xmm6
282         pxor    %xmm4,%xmm4
283         movhlps %xmm4,%xmm6
284         movl    $4,%eax
285 .L011loop_schedule_192:
286         call    _vpaes_schedule_round
287 .byte   102,15,58,15,198,8
288         call    _vpaes_schedule_mangle
289         call    _vpaes_schedule_192_smear
290         call    _vpaes_schedule_mangle
291         call    _vpaes_schedule_round
292         decl    %eax
293         jz      .L010schedule_mangle_last
294         call    _vpaes_schedule_mangle
295         call    _vpaes_schedule_192_smear
296         jmp     .L011loop_schedule_192
297 .align  16
298 .L006schedule_256:
299         movdqu  16(%esi),%xmm0
300         call    _vpaes_schedule_transform
301         movl    $7,%eax
302 .L012loop_schedule_256:
303         call    _vpaes_schedule_mangle
304         movdqa  %xmm0,%xmm6
305         call    _vpaes_schedule_round
306         decl    %eax
307         jz      .L010schedule_mangle_last
308         call    _vpaes_schedule_mangle
309         pshufd  $255,%xmm0,%xmm0
310         movdqa  %xmm7,20(%esp)
311         movdqa  %xmm6,%xmm7
312         call    .L_vpaes_schedule_low_round
313         movdqa  20(%esp),%xmm7
314         jmp     .L012loop_schedule_256
315 .align  16
316 .L010schedule_mangle_last:
317         leal    384(%ebp),%ebx
318         testl   %edi,%edi
319         jnz     .L013schedule_mangle_last_dec
320         movdqa  256(%ebp,%ecx,1),%xmm1
321 .byte   102,15,56,0,193
322         leal    352(%ebp),%ebx
323         addl    $32,%edx
324 .L013schedule_mangle_last_dec:
325         addl    $-16,%edx
326         pxor    336(%ebp),%xmm0
327         call    _vpaes_schedule_transform
328         movdqu  %xmm0,(%edx)
329         pxor    %xmm0,%xmm0
330         pxor    %xmm1,%xmm1
331         pxor    %xmm2,%xmm2
332         pxor    %xmm3,%xmm3
333         pxor    %xmm4,%xmm4
334         pxor    %xmm5,%xmm5
335         pxor    %xmm6,%xmm6
336         pxor    %xmm7,%xmm7
337         ret
338 .size   _vpaes_schedule_core,.-_vpaes_schedule_core
339 .type   _vpaes_schedule_192_smear,@function
340 .align  16
341 _vpaes_schedule_192_smear:
342         pshufd  $128,%xmm6,%xmm1
343         pshufd  $254,%xmm7,%xmm0
344         pxor    %xmm1,%xmm6
345         pxor    %xmm1,%xmm1
346         pxor    %xmm0,%xmm6
347         movdqa  %xmm6,%xmm0
348         movhlps %xmm1,%xmm6
349         ret
350 .size   _vpaes_schedule_192_smear,.-_vpaes_schedule_192_smear
351 .type   _vpaes_schedule_round,@function
352 .align  16
353 _vpaes_schedule_round:
354         movdqa  8(%esp),%xmm2
355         pxor    %xmm1,%xmm1
356 .byte   102,15,58,15,202,15
357 .byte   102,15,58,15,210,15
358         pxor    %xmm1,%xmm7
359         pshufd  $255,%xmm0,%xmm0
360 .byte   102,15,58,15,192,1
361         movdqa  %xmm2,8(%esp)
362 .L_vpaes_schedule_low_round:
363         movdqa  %xmm7,%xmm1
364         pslldq  $4,%xmm7
365         pxor    %xmm1,%xmm7
366         movdqa  %xmm7,%xmm1
367         pslldq  $8,%xmm7
368         pxor    %xmm1,%xmm7
369         pxor    336(%ebp),%xmm7
370         movdqa  -16(%ebp),%xmm4
371         movdqa  -48(%ebp),%xmm5
372         movdqa  %xmm4,%xmm1
373         pandn   %xmm0,%xmm1
374         psrld   $4,%xmm1
375         pand    %xmm4,%xmm0
376         movdqa  -32(%ebp),%xmm2
377 .byte   102,15,56,0,208
378         pxor    %xmm1,%xmm0
379         movdqa  %xmm5,%xmm3
380 .byte   102,15,56,0,217
381         pxor    %xmm2,%xmm3
382         movdqa  %xmm5,%xmm4
383 .byte   102,15,56,0,224
384         pxor    %xmm2,%xmm4
385         movdqa  %xmm5,%xmm2
386 .byte   102,15,56,0,211
387         pxor    %xmm0,%xmm2
388         movdqa  %xmm5,%xmm3
389 .byte   102,15,56,0,220
390         pxor    %xmm1,%xmm3
391         movdqa  32(%ebp),%xmm4
392 .byte   102,15,56,0,226
393         movdqa  48(%ebp),%xmm0
394 .byte   102,15,56,0,195
395         pxor    %xmm4,%xmm0
396         pxor    %xmm7,%xmm0
397         movdqa  %xmm0,%xmm7
398         ret
399 .size   _vpaes_schedule_round,.-_vpaes_schedule_round
400 .type   _vpaes_schedule_transform,@function
401 .align  16
402 _vpaes_schedule_transform:
403         movdqa  -16(%ebp),%xmm2
404         movdqa  %xmm2,%xmm1
405         pandn   %xmm0,%xmm1
406         psrld   $4,%xmm1
407         pand    %xmm2,%xmm0
408         movdqa  (%ebx),%xmm2
409 .byte   102,15,56,0,208
410         movdqa  16(%ebx),%xmm0
411 .byte   102,15,56,0,193
412         pxor    %xmm2,%xmm0
413         ret
414 .size   _vpaes_schedule_transform,.-_vpaes_schedule_transform
415 .type   _vpaes_schedule_mangle,@function
416 .align  16
417 _vpaes_schedule_mangle:
418         movdqa  %xmm0,%xmm4
419         movdqa  128(%ebp),%xmm5
420         testl   %edi,%edi
421         jnz     .L014schedule_mangle_dec
422         addl    $16,%edx
423         pxor    336(%ebp),%xmm4
424 .byte   102,15,56,0,229
425         movdqa  %xmm4,%xmm3
426 .byte   102,15,56,0,229
427         pxor    %xmm4,%xmm3
428 .byte   102,15,56,0,229
429         pxor    %xmm4,%xmm3
430         jmp     .L015schedule_mangle_both
431 .align  16
432 .L014schedule_mangle_dec:
433         movdqa  -16(%ebp),%xmm2
434         leal    416(%ebp),%esi
435         movdqa  %xmm2,%xmm1
436         pandn   %xmm4,%xmm1
437         psrld   $4,%xmm1
438         pand    %xmm2,%xmm4
439         movdqa  (%esi),%xmm2
440 .byte   102,15,56,0,212
441         movdqa  16(%esi),%xmm3
442 .byte   102,15,56,0,217
443         pxor    %xmm2,%xmm3
444 .byte   102,15,56,0,221
445         movdqa  32(%esi),%xmm2
446 .byte   102,15,56,0,212
447         pxor    %xmm3,%xmm2
448         movdqa  48(%esi),%xmm3
449 .byte   102,15,56,0,217
450         pxor    %xmm2,%xmm3
451 .byte   102,15,56,0,221
452         movdqa  64(%esi),%xmm2
453 .byte   102,15,56,0,212
454         pxor    %xmm3,%xmm2
455         movdqa  80(%esi),%xmm3
456 .byte   102,15,56,0,217
457         pxor    %xmm2,%xmm3
458 .byte   102,15,56,0,221
459         movdqa  96(%esi),%xmm2
460 .byte   102,15,56,0,212
461         pxor    %xmm3,%xmm2
462         movdqa  112(%esi),%xmm3
463 .byte   102,15,56,0,217
464         pxor    %xmm2,%xmm3
465         addl    $-16,%edx
466 .L015schedule_mangle_both:
467         movdqa  256(%ebp,%ecx,1),%xmm1
468 .byte   102,15,56,0,217
469         addl    $-16,%ecx
470         andl    $48,%ecx
471         movdqu  %xmm3,(%edx)
472         ret
473 .size   _vpaes_schedule_mangle,.-_vpaes_schedule_mangle
474 .globl  vpaes_set_encrypt_key
475 .type   vpaes_set_encrypt_key,@function
476 .align  16
477 vpaes_set_encrypt_key:
478 .L_vpaes_set_encrypt_key_begin:
479         pushl   %ebp
480         pushl   %ebx
481         pushl   %esi
482         pushl   %edi
483         movl    20(%esp),%esi
484         leal    -56(%esp),%ebx
485         movl    24(%esp),%eax
486         andl    $-16,%ebx
487         movl    28(%esp),%edx
488         xchgl   %esp,%ebx
489         movl    %ebx,48(%esp)
490         movl    %eax,%ebx
491         shrl    $5,%ebx
492         addl    $5,%ebx
493         movl    %ebx,240(%edx)
494         movl    $48,%ecx
495         movl    $0,%edi
496         leal    .L_vpaes_consts+0x30-.L016pic_point,%ebp
497         call    _vpaes_schedule_core
498 .L016pic_point:
499         movl    48(%esp),%esp
500         xorl    %eax,%eax
501         popl    %edi
502         popl    %esi
503         popl    %ebx
504         popl    %ebp
505         ret
506 .size   vpaes_set_encrypt_key,.-.L_vpaes_set_encrypt_key_begin
507 .globl  vpaes_set_decrypt_key
508 .type   vpaes_set_decrypt_key,@function
509 .align  16
510 vpaes_set_decrypt_key:
511 .L_vpaes_set_decrypt_key_begin:
512         pushl   %ebp
513         pushl   %ebx
514         pushl   %esi
515         pushl   %edi
516         movl    20(%esp),%esi
517         leal    -56(%esp),%ebx
518         movl    24(%esp),%eax
519         andl    $-16,%ebx
520         movl    28(%esp),%edx
521         xchgl   %esp,%ebx
522         movl    %ebx,48(%esp)
523         movl    %eax,%ebx
524         shrl    $5,%ebx
525         addl    $5,%ebx
526         movl    %ebx,240(%edx)
527         shll    $4,%ebx
528         leal    16(%edx,%ebx,1),%edx
529         movl    $1,%edi
530         movl    %eax,%ecx
531         shrl    $1,%ecx
532         andl    $32,%ecx
533         xorl    $32,%ecx
534         leal    .L_vpaes_consts+0x30-.L017pic_point,%ebp
535         call    _vpaes_schedule_core
536 .L017pic_point:
537         movl    48(%esp),%esp
538         xorl    %eax,%eax
539         popl    %edi
540         popl    %esi
541         popl    %ebx
542         popl    %ebp
543         ret
544 .size   vpaes_set_decrypt_key,.-.L_vpaes_set_decrypt_key_begin
545 .globl  vpaes_encrypt
546 .type   vpaes_encrypt,@function
547 .align  16
548 vpaes_encrypt:
549 .L_vpaes_encrypt_begin:
550         pushl   %ebp
551         pushl   %ebx
552         pushl   %esi
553         pushl   %edi
554         leal    .L_vpaes_consts+0x30-.L018pic_point,%ebp
555         call    _vpaes_preheat
556 .L018pic_point:
557         movl    20(%esp),%esi
558         leal    -56(%esp),%ebx
559         movl    24(%esp),%edi
560         andl    $-16,%ebx
561         movl    28(%esp),%edx
562         xchgl   %esp,%ebx
563         movl    %ebx,48(%esp)
564         movdqu  (%esi),%xmm0
565         call    _vpaes_encrypt_core
566         movdqu  %xmm0,(%edi)
567         movl    48(%esp),%esp
568         popl    %edi
569         popl    %esi
570         popl    %ebx
571         popl    %ebp
572         ret
573 .size   vpaes_encrypt,.-.L_vpaes_encrypt_begin
574 .globl  vpaes_decrypt
575 .type   vpaes_decrypt,@function
576 .align  16
577 vpaes_decrypt:
578 .L_vpaes_decrypt_begin:
579         pushl   %ebp
580         pushl   %ebx
581         pushl   %esi
582         pushl   %edi
583         leal    .L_vpaes_consts+0x30-.L019pic_point,%ebp
584         call    _vpaes_preheat
585 .L019pic_point:
586         movl    20(%esp),%esi
587         leal    -56(%esp),%ebx
588         movl    24(%esp),%edi
589         andl    $-16,%ebx
590         movl    28(%esp),%edx
591         xchgl   %esp,%ebx
592         movl    %ebx,48(%esp)
593         movdqu  (%esi),%xmm0
594         call    _vpaes_decrypt_core
595         movdqu  %xmm0,(%edi)
596         movl    48(%esp),%esp
597         popl    %edi
598         popl    %esi
599         popl    %ebx
600         popl    %ebp
601         ret
602 .size   vpaes_decrypt,.-.L_vpaes_decrypt_begin
603 .globl  vpaes_cbc_encrypt
604 .type   vpaes_cbc_encrypt,@function
605 .align  16
606 vpaes_cbc_encrypt:
607 .L_vpaes_cbc_encrypt_begin:
608         pushl   %ebp
609         pushl   %ebx
610         pushl   %esi
611         pushl   %edi
612         movl    20(%esp),%esi
613         movl    24(%esp),%edi
614         movl    28(%esp),%eax
615         movl    32(%esp),%edx
616         subl    $16,%eax
617         jc      .L020cbc_abort
618         leal    -56(%esp),%ebx
619         movl    36(%esp),%ebp
620         andl    $-16,%ebx
621         movl    40(%esp),%ecx
622         xchgl   %esp,%ebx
623         movdqu  (%ebp),%xmm1
624         subl    %esi,%edi
625         movl    %ebx,48(%esp)
626         movl    %edi,(%esp)
627         movl    %edx,4(%esp)
628         movl    %ebp,8(%esp)
629         movl    %eax,%edi
630         leal    .L_vpaes_consts+0x30-.L021pic_point,%ebp
631         call    _vpaes_preheat
632 .L021pic_point:
633         cmpl    $0,%ecx
634         je      .L022cbc_dec_loop
635         jmp     .L023cbc_enc_loop
636 .align  16
637 .L023cbc_enc_loop:
638         movdqu  (%esi),%xmm0
639         pxor    %xmm1,%xmm0
640         call    _vpaes_encrypt_core
641         movl    (%esp),%ebx
642         movl    4(%esp),%edx
643         movdqa  %xmm0,%xmm1
644         movdqu  %xmm0,(%ebx,%esi,1)
645         leal    16(%esi),%esi
646         subl    $16,%edi
647         jnc     .L023cbc_enc_loop
648         jmp     .L024cbc_done
649 .align  16
650 .L022cbc_dec_loop:
651         movdqu  (%esi),%xmm0
652         movdqa  %xmm1,16(%esp)
653         movdqa  %xmm0,32(%esp)
654         call    _vpaes_decrypt_core
655         movl    (%esp),%ebx
656         movl    4(%esp),%edx
657         pxor    16(%esp),%xmm0
658         movdqa  32(%esp),%xmm1
659         movdqu  %xmm0,(%ebx,%esi,1)
660         leal    16(%esi),%esi
661         subl    $16,%edi
662         jnc     .L022cbc_dec_loop
663 .L024cbc_done:
664         movl    8(%esp),%ebx
665         movl    48(%esp),%esp
666         movdqu  %xmm1,(%ebx)
667 .L020cbc_abort:
668         popl    %edi
669         popl    %esi
670         popl    %ebx
671         popl    %ebp
672         ret
673 .size   vpaes_cbc_encrypt,.-.L_vpaes_cbc_encrypt_begin
674
675 .section .note.GNU-stack,"",%progbits