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