Added Mike Hamburg's SSSE3 AES implementation.
[gnutls:gnutls.git] / lib / accelerated / x86 / macosx / 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  6,0x90
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  6,0x90
72 .align  4
73 __vpaes_preheat:
74         addl    (%esp),%ebp
75         movdqa  -48(%ebp),%xmm7
76         movdqa  -16(%ebp),%xmm6
77         ret
78 .align  4
79 __vpaes_encrypt_core:
80         movl    $16,%ecx
81         movl    240(%edx),%eax
82         movdqa  %xmm6,%xmm1
83         movdqa  (%ebp),%xmm2
84         pandn   %xmm0,%xmm1
85         pand    %xmm6,%xmm0
86         movdqu  (%edx),%xmm5
87 .byte   102,15,56,0,208
88         movdqa  16(%ebp),%xmm0
89         pxor    %xmm5,%xmm2
90         psrld   $4,%xmm1
91         addl    $16,%edx
92 .byte   102,15,56,0,193
93         leal    192(%ebp),%ebx
94         pxor    %xmm2,%xmm0
95         jmp     L000enc_entry
96 .align  4,0x90
97 L001enc_loop:
98         movdqa  32(%ebp),%xmm4
99         movdqa  48(%ebp),%xmm0
100 .byte   102,15,56,0,226
101 .byte   102,15,56,0,195
102         pxor    %xmm5,%xmm4
103         movdqa  64(%ebp),%xmm5
104         pxor    %xmm4,%xmm0
105         movdqa  -64(%ebx,%ecx,1),%xmm1
106 .byte   102,15,56,0,234
107         movdqa  80(%ebp),%xmm2
108         movdqa  (%ebx,%ecx,1),%xmm4
109 .byte   102,15,56,0,211
110         movdqa  %xmm0,%xmm3
111         pxor    %xmm5,%xmm2
112 .byte   102,15,56,0,193
113         addl    $16,%edx
114         pxor    %xmm2,%xmm0
115 .byte   102,15,56,0,220
116         addl    $16,%ecx
117         pxor    %xmm0,%xmm3
118 .byte   102,15,56,0,193
119         andl    $48,%ecx
120         subl    $1,%eax
121         pxor    %xmm3,%xmm0
122 L000enc_entry:
123         movdqa  %xmm6,%xmm1
124         movdqa  -32(%ebp),%xmm5
125         pandn   %xmm0,%xmm1
126         psrld   $4,%xmm1
127         pand    %xmm6,%xmm0
128 .byte   102,15,56,0,232
129         movdqa  %xmm7,%xmm3
130         pxor    %xmm1,%xmm0
131 .byte   102,15,56,0,217
132         movdqa  %xmm7,%xmm4
133         pxor    %xmm5,%xmm3
134 .byte   102,15,56,0,224
135         movdqa  %xmm7,%xmm2
136         pxor    %xmm5,%xmm4
137 .byte   102,15,56,0,211
138         movdqa  %xmm7,%xmm3
139         pxor    %xmm0,%xmm2
140 .byte   102,15,56,0,220
141         movdqu  (%edx),%xmm5
142         pxor    %xmm1,%xmm3
143         jnz     L001enc_loop
144         movdqa  96(%ebp),%xmm4
145         movdqa  112(%ebp),%xmm0
146 .byte   102,15,56,0,226
147         pxor    %xmm5,%xmm4
148 .byte   102,15,56,0,195
149         movdqa  64(%ebx,%ecx,1),%xmm1
150         pxor    %xmm4,%xmm0
151 .byte   102,15,56,0,193
152         ret
153 .align  4
154 __vpaes_decrypt_core:
155         leal    608(%ebp),%ebx
156         movl    240(%edx),%eax
157         movdqa  %xmm6,%xmm1
158         movdqa  -64(%ebx),%xmm2
159         pandn   %xmm0,%xmm1
160         movl    %eax,%ecx
161         psrld   $4,%xmm1
162         movdqu  (%edx),%xmm5
163         shll    $4,%ecx
164         pand    %xmm6,%xmm0
165 .byte   102,15,56,0,208
166         movdqa  -48(%ebx),%xmm0
167         xorl    $48,%ecx
168 .byte   102,15,56,0,193
169         andl    $48,%ecx
170         pxor    %xmm5,%xmm2
171         movdqa  176(%ebp),%xmm5
172         pxor    %xmm2,%xmm0
173         addl    $16,%edx
174         leal    -352(%ebx,%ecx,1),%ecx
175         jmp     L002dec_entry
176 .align  4,0x90
177 L003dec_loop:
178         movdqa  -32(%ebx),%xmm4
179         movdqa  -16(%ebx),%xmm1
180 .byte   102,15,56,0,226
181 .byte   102,15,56,0,203
182         pxor    %xmm4,%xmm0
183         movdqa  (%ebx),%xmm4
184         pxor    %xmm1,%xmm0
185         movdqa  16(%ebx),%xmm1
186 .byte   102,15,56,0,226
187 .byte   102,15,56,0,197
188 .byte   102,15,56,0,203
189         pxor    %xmm4,%xmm0
190         movdqa  32(%ebx),%xmm4
191         pxor    %xmm1,%xmm0
192         movdqa  48(%ebx),%xmm1
193 .byte   102,15,56,0,226
194 .byte   102,15,56,0,197
195 .byte   102,15,56,0,203
196         pxor    %xmm4,%xmm0
197         movdqa  64(%ebx),%xmm4
198         pxor    %xmm1,%xmm0
199         movdqa  80(%ebx),%xmm1
200 .byte   102,15,56,0,226
201 .byte   102,15,56,0,197
202 .byte   102,15,56,0,203
203         pxor    %xmm4,%xmm0
204         addl    $16,%edx
205 .byte   102,15,58,15,237,12
206         pxor    %xmm1,%xmm0
207         subl    $1,%eax
208 L002dec_entry:
209         movdqa  %xmm6,%xmm1
210         movdqa  -32(%ebp),%xmm2
211         pandn   %xmm0,%xmm1
212         pand    %xmm6,%xmm0
213         psrld   $4,%xmm1
214 .byte   102,15,56,0,208
215         movdqa  %xmm7,%xmm3
216         pxor    %xmm1,%xmm0
217 .byte   102,15,56,0,217
218         movdqa  %xmm7,%xmm4
219         pxor    %xmm2,%xmm3
220 .byte   102,15,56,0,224
221         pxor    %xmm2,%xmm4
222         movdqa  %xmm7,%xmm2
223 .byte   102,15,56,0,211
224         movdqa  %xmm7,%xmm3
225         pxor    %xmm0,%xmm2
226 .byte   102,15,56,0,220
227         movdqu  (%edx),%xmm0
228         pxor    %xmm1,%xmm3
229         jnz     L003dec_loop
230         movdqa  96(%ebx),%xmm4
231 .byte   102,15,56,0,226
232         pxor    %xmm0,%xmm4
233         movdqa  112(%ebx),%xmm0
234         movdqa  (%ecx),%xmm2
235 .byte   102,15,56,0,195
236         pxor    %xmm4,%xmm0
237 .byte   102,15,56,0,194
238         ret
239 .align  4
240 __vpaes_schedule_core:
241         addl    (%esp),%ebp
242         movdqu  (%esi),%xmm0
243         movdqa  320(%ebp),%xmm2
244         movdqa  %xmm0,%xmm3
245         leal    (%ebp),%ebx
246         movdqa  %xmm2,4(%esp)
247         call    __vpaes_schedule_transform
248         movdqa  %xmm0,%xmm7
249         testl   %edi,%edi
250         jnz     L004schedule_am_decrypting
251         movdqu  %xmm0,(%edx)
252         jmp     L005schedule_go
253 L004schedule_am_decrypting:
254         movdqa  256(%ebp,%ecx,1),%xmm1
255 .byte   102,15,56,0,217
256         movdqu  %xmm3,(%edx)
257         xorl    $48,%ecx
258 L005schedule_go:
259         cmpl    $192,%eax
260         ja      L006schedule_256
261         je      L007schedule_192
262 L008schedule_128:
263         movl    $10,%eax
264 L009loop_schedule_128:
265         call    __vpaes_schedule_round
266         decl    %eax
267         jz      L010schedule_mangle_last
268         call    __vpaes_schedule_mangle
269         jmp     L009loop_schedule_128
270 .align  4,0x90
271 L007schedule_192:
272         movdqu  8(%esi),%xmm0
273         call    __vpaes_schedule_transform
274         movdqa  %xmm0,%xmm6
275         pxor    %xmm4,%xmm4
276         movhlps %xmm4,%xmm6
277         movl    $4,%eax
278 L011loop_schedule_192:
279         call    __vpaes_schedule_round
280 .byte   102,15,58,15,198,8
281         call    __vpaes_schedule_mangle
282         call    __vpaes_schedule_192_smear
283         call    __vpaes_schedule_mangle
284         call    __vpaes_schedule_round
285         decl    %eax
286         jz      L010schedule_mangle_last
287         call    __vpaes_schedule_mangle
288         call    __vpaes_schedule_192_smear
289         jmp     L011loop_schedule_192
290 .align  4,0x90
291 L006schedule_256:
292         movdqu  16(%esi),%xmm0
293         call    __vpaes_schedule_transform
294         movl    $7,%eax
295 L012loop_schedule_256:
296         call    __vpaes_schedule_mangle
297         movdqa  %xmm0,%xmm6
298         call    __vpaes_schedule_round
299         decl    %eax
300         jz      L010schedule_mangle_last
301         call    __vpaes_schedule_mangle
302         pshufd  $255,%xmm0,%xmm0
303         movdqa  %xmm7,20(%esp)
304         movdqa  %xmm6,%xmm7
305         call    L_vpaes_schedule_low_round
306         movdqa  20(%esp),%xmm7
307         jmp     L012loop_schedule_256
308 .align  4,0x90
309 L010schedule_mangle_last:
310         leal    384(%ebp),%ebx
311         testl   %edi,%edi
312         jnz     L013schedule_mangle_last_dec
313         movdqa  256(%ebp,%ecx,1),%xmm1
314 .byte   102,15,56,0,193
315         leal    352(%ebp),%ebx
316         addl    $32,%edx
317 L013schedule_mangle_last_dec:
318         addl    $-16,%edx
319         pxor    336(%ebp),%xmm0
320         call    __vpaes_schedule_transform
321         movdqu  %xmm0,(%edx)
322         pxor    %xmm0,%xmm0
323         pxor    %xmm1,%xmm1
324         pxor    %xmm2,%xmm2
325         pxor    %xmm3,%xmm3
326         pxor    %xmm4,%xmm4
327         pxor    %xmm5,%xmm5
328         pxor    %xmm6,%xmm6
329         pxor    %xmm7,%xmm7
330         ret
331 .align  4
332 __vpaes_schedule_192_smear:
333         pshufd  $128,%xmm6,%xmm1
334         pshufd  $254,%xmm7,%xmm0
335         pxor    %xmm1,%xmm6
336         pxor    %xmm1,%xmm1
337         pxor    %xmm0,%xmm6
338         movdqa  %xmm6,%xmm0
339         movhlps %xmm1,%xmm6
340         ret
341 .align  4
342 __vpaes_schedule_round:
343         movdqa  8(%esp),%xmm2
344         pxor    %xmm1,%xmm1
345 .byte   102,15,58,15,202,15
346 .byte   102,15,58,15,210,15
347         pxor    %xmm1,%xmm7
348         pshufd  $255,%xmm0,%xmm0
349 .byte   102,15,58,15,192,1
350         movdqa  %xmm2,8(%esp)
351 L_vpaes_schedule_low_round:
352         movdqa  %xmm7,%xmm1
353         pslldq  $4,%xmm7
354         pxor    %xmm1,%xmm7
355         movdqa  %xmm7,%xmm1
356         pslldq  $8,%xmm7
357         pxor    %xmm1,%xmm7
358         pxor    336(%ebp),%xmm7
359         movdqa  -16(%ebp),%xmm4
360         movdqa  -48(%ebp),%xmm5
361         movdqa  %xmm4,%xmm1
362         pandn   %xmm0,%xmm1
363         psrld   $4,%xmm1
364         pand    %xmm4,%xmm0
365         movdqa  -32(%ebp),%xmm2
366 .byte   102,15,56,0,208
367         pxor    %xmm1,%xmm0
368         movdqa  %xmm5,%xmm3
369 .byte   102,15,56,0,217
370         pxor    %xmm2,%xmm3
371         movdqa  %xmm5,%xmm4
372 .byte   102,15,56,0,224
373         pxor    %xmm2,%xmm4
374         movdqa  %xmm5,%xmm2
375 .byte   102,15,56,0,211
376         pxor    %xmm0,%xmm2
377         movdqa  %xmm5,%xmm3
378 .byte   102,15,56,0,220
379         pxor    %xmm1,%xmm3
380         movdqa  32(%ebp),%xmm4
381 .byte   102,15,56,0,226
382         movdqa  48(%ebp),%xmm0
383 .byte   102,15,56,0,195
384         pxor    %xmm4,%xmm0
385         pxor    %xmm7,%xmm0
386         movdqa  %xmm0,%xmm7
387         ret
388 .align  4
389 __vpaes_schedule_transform:
390         movdqa  -16(%ebp),%xmm2
391         movdqa  %xmm2,%xmm1
392         pandn   %xmm0,%xmm1
393         psrld   $4,%xmm1
394         pand    %xmm2,%xmm0
395         movdqa  (%ebx),%xmm2
396 .byte   102,15,56,0,208
397         movdqa  16(%ebx),%xmm0
398 .byte   102,15,56,0,193
399         pxor    %xmm2,%xmm0
400         ret
401 .align  4
402 __vpaes_schedule_mangle:
403         movdqa  %xmm0,%xmm4
404         movdqa  128(%ebp),%xmm5
405         testl   %edi,%edi
406         jnz     L014schedule_mangle_dec
407         addl    $16,%edx
408         pxor    336(%ebp),%xmm4
409 .byte   102,15,56,0,229
410         movdqa  %xmm4,%xmm3
411 .byte   102,15,56,0,229
412         pxor    %xmm4,%xmm3
413 .byte   102,15,56,0,229
414         pxor    %xmm4,%xmm3
415         jmp     L015schedule_mangle_both
416 .align  4,0x90
417 L014schedule_mangle_dec:
418         movdqa  -16(%ebp),%xmm2
419         leal    416(%ebp),%esi
420         movdqa  %xmm2,%xmm1
421         pandn   %xmm4,%xmm1
422         psrld   $4,%xmm1
423         pand    %xmm2,%xmm4
424         movdqa  (%esi),%xmm2
425 .byte   102,15,56,0,212
426         movdqa  16(%esi),%xmm3
427 .byte   102,15,56,0,217
428         pxor    %xmm2,%xmm3
429 .byte   102,15,56,0,221
430         movdqa  32(%esi),%xmm2
431 .byte   102,15,56,0,212
432         pxor    %xmm3,%xmm2
433         movdqa  48(%esi),%xmm3
434 .byte   102,15,56,0,217
435         pxor    %xmm2,%xmm3
436 .byte   102,15,56,0,221
437         movdqa  64(%esi),%xmm2
438 .byte   102,15,56,0,212
439         pxor    %xmm3,%xmm2
440         movdqa  80(%esi),%xmm3
441 .byte   102,15,56,0,217
442         pxor    %xmm2,%xmm3
443 .byte   102,15,56,0,221
444         movdqa  96(%esi),%xmm2
445 .byte   102,15,56,0,212
446         pxor    %xmm3,%xmm2
447         movdqa  112(%esi),%xmm3
448 .byte   102,15,56,0,217
449         pxor    %xmm2,%xmm3
450         addl    $-16,%edx
451 L015schedule_mangle_both:
452         movdqa  256(%ebp,%ecx,1),%xmm1
453 .byte   102,15,56,0,217
454         addl    $-16,%ecx
455         andl    $48,%ecx
456         movdqu  %xmm3,(%edx)
457         ret
458 .globl  _vpaes_set_encrypt_key
459 .align  4
460 _vpaes_set_encrypt_key:
461 L_vpaes_set_encrypt_key_begin:
462         pushl   %ebp
463         pushl   %ebx
464         pushl   %esi
465         pushl   %edi
466         movl    20(%esp),%esi
467         leal    -56(%esp),%ebx
468         movl    24(%esp),%eax
469         andl    $-16,%ebx
470         movl    28(%esp),%edx
471         xchgl   %esp,%ebx
472         movl    %ebx,48(%esp)
473         movl    %eax,%ebx
474         shrl    $5,%ebx
475         addl    $5,%ebx
476         movl    %ebx,240(%edx)
477         movl    $48,%ecx
478         movl    $0,%edi
479         leal    L_vpaes_consts+0x30-L016pic_point,%ebp
480         call    __vpaes_schedule_core
481 L016pic_point:
482         movl    48(%esp),%esp
483         xorl    %eax,%eax
484         popl    %edi
485         popl    %esi
486         popl    %ebx
487         popl    %ebp
488         ret
489 .globl  _vpaes_set_decrypt_key
490 .align  4
491 _vpaes_set_decrypt_key:
492 L_vpaes_set_decrypt_key_begin:
493         pushl   %ebp
494         pushl   %ebx
495         pushl   %esi
496         pushl   %edi
497         movl    20(%esp),%esi
498         leal    -56(%esp),%ebx
499         movl    24(%esp),%eax
500         andl    $-16,%ebx
501         movl    28(%esp),%edx
502         xchgl   %esp,%ebx
503         movl    %ebx,48(%esp)
504         movl    %eax,%ebx
505         shrl    $5,%ebx
506         addl    $5,%ebx
507         movl    %ebx,240(%edx)
508         shll    $4,%ebx
509         leal    16(%edx,%ebx,1),%edx
510         movl    $1,%edi
511         movl    %eax,%ecx
512         shrl    $1,%ecx
513         andl    $32,%ecx
514         xorl    $32,%ecx
515         leal    L_vpaes_consts+0x30-L017pic_point,%ebp
516         call    __vpaes_schedule_core
517 L017pic_point:
518         movl    48(%esp),%esp
519         xorl    %eax,%eax
520         popl    %edi
521         popl    %esi
522         popl    %ebx
523         popl    %ebp
524         ret
525 .globl  _vpaes_encrypt
526 .align  4
527 _vpaes_encrypt:
528 L_vpaes_encrypt_begin:
529         pushl   %ebp
530         pushl   %ebx
531         pushl   %esi
532         pushl   %edi
533         leal    L_vpaes_consts+0x30-L018pic_point,%ebp
534         call    __vpaes_preheat
535 L018pic_point:
536         movl    20(%esp),%esi
537         leal    -56(%esp),%ebx
538         movl    24(%esp),%edi
539         andl    $-16,%ebx
540         movl    28(%esp),%edx
541         xchgl   %esp,%ebx
542         movl    %ebx,48(%esp)
543         movdqu  (%esi),%xmm0
544         call    __vpaes_encrypt_core
545         movdqu  %xmm0,(%edi)
546         movl    48(%esp),%esp
547         popl    %edi
548         popl    %esi
549         popl    %ebx
550         popl    %ebp
551         ret
552 .globl  _vpaes_decrypt
553 .align  4
554 _vpaes_decrypt:
555 L_vpaes_decrypt_begin:
556         pushl   %ebp
557         pushl   %ebx
558         pushl   %esi
559         pushl   %edi
560         leal    L_vpaes_consts+0x30-L019pic_point,%ebp
561         call    __vpaes_preheat
562 L019pic_point:
563         movl    20(%esp),%esi
564         leal    -56(%esp),%ebx
565         movl    24(%esp),%edi
566         andl    $-16,%ebx
567         movl    28(%esp),%edx
568         xchgl   %esp,%ebx
569         movl    %ebx,48(%esp)
570         movdqu  (%esi),%xmm0
571         call    __vpaes_decrypt_core
572         movdqu  %xmm0,(%edi)
573         movl    48(%esp),%esp
574         popl    %edi
575         popl    %esi
576         popl    %ebx
577         popl    %ebp
578         ret
579 .globl  _vpaes_cbc_encrypt
580 .align  4
581 _vpaes_cbc_encrypt:
582 L_vpaes_cbc_encrypt_begin:
583         pushl   %ebp
584         pushl   %ebx
585         pushl   %esi
586         pushl   %edi
587         movl    20(%esp),%esi
588         movl    24(%esp),%edi
589         movl    28(%esp),%eax
590         movl    32(%esp),%edx
591         subl    $16,%eax
592         jc      L020cbc_abort
593         leal    -56(%esp),%ebx
594         movl    36(%esp),%ebp
595         andl    $-16,%ebx
596         movl    40(%esp),%ecx
597         xchgl   %esp,%ebx
598         movdqu  (%ebp),%xmm1
599         subl    %esi,%edi
600         movl    %ebx,48(%esp)
601         movl    %edi,(%esp)
602         movl    %edx,4(%esp)
603         movl    %ebp,8(%esp)
604         movl    %eax,%edi
605         leal    L_vpaes_consts+0x30-L021pic_point,%ebp
606         call    __vpaes_preheat
607 L021pic_point:
608         cmpl    $0,%ecx
609         je      L022cbc_dec_loop
610         jmp     L023cbc_enc_loop
611 .align  4,0x90
612 L023cbc_enc_loop:
613         movdqu  (%esi),%xmm0
614         pxor    %xmm1,%xmm0
615         call    __vpaes_encrypt_core
616         movl    (%esp),%ebx
617         movl    4(%esp),%edx
618         movdqa  %xmm0,%xmm1
619         movdqu  %xmm0,(%ebx,%esi,1)
620         leal    16(%esi),%esi
621         subl    $16,%edi
622         jnc     L023cbc_enc_loop
623         jmp     L024cbc_done
624 .align  4,0x90
625 L022cbc_dec_loop:
626         movdqu  (%esi),%xmm0
627         movdqa  %xmm1,16(%esp)
628         movdqa  %xmm0,32(%esp)
629         call    __vpaes_decrypt_core
630         movl    (%esp),%ebx
631         movl    4(%esp),%edx
632         pxor    16(%esp),%xmm0
633         movdqa  32(%esp),%xmm1
634         movdqu  %xmm0,(%ebx,%esi,1)
635         leal    16(%esi),%esi
636         subl    $16,%edi
637         jnc     L022cbc_dec_loop
638 L024cbc_done:
639         movl    8(%esp),%ebx
640         movl    48(%esp),%esp
641         movdqu  %xmm1,(%ebx)
642 L020cbc_abort:
643         popl    %edi
644         popl    %esi
645         popl    %ebx
646         popl    %ebp
647         ret
648
649 .section .note.GNU-stack,"",%progbits