Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / third_party / boringssl / linux-x86 / crypto / aes / vpaes-x86.S
blob9aede394844202da7bd4fbf07fab59e80ea3593c
1 #if defined(__i386__)
2 .file   "vpaes-x86.S"
3 .text
4 .align  64
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  64
61 .hidden _vpaes_preheat
62 .type   _vpaes_preheat,@function
63 .align  16
64 _vpaes_preheat:
65         addl    (%esp),%ebp
66         movdqa  -48(%ebp),%xmm7
67         movdqa  -16(%ebp),%xmm6
68         ret
69 .size   _vpaes_preheat,.-_vpaes_preheat
70 .hidden _vpaes_encrypt_core
71 .type   _vpaes_encrypt_core,@function
72 .align  16
73 _vpaes_encrypt_core:
74         movl    $16,%ecx
75         movl    240(%edx),%eax
76         movdqa  %xmm6,%xmm1
77         movdqa  (%ebp),%xmm2
78         pandn   %xmm0,%xmm1
79         pand    %xmm6,%xmm0
80         movdqu  (%edx),%xmm5
81 .byte   102,15,56,0,208
82         movdqa  16(%ebp),%xmm0
83         pxor    %xmm5,%xmm2
84         psrld   $4,%xmm1
85         addl    $16,%edx
86 .byte   102,15,56,0,193
87         leal    192(%ebp),%ebx
88         pxor    %xmm2,%xmm0
89         jmp     .L000enc_entry
90 .align  16
91 .L001enc_loop:
92         movdqa  32(%ebp),%xmm4
93         movdqa  48(%ebp),%xmm0
94 .byte   102,15,56,0,226
95 .byte   102,15,56,0,195
96         pxor    %xmm5,%xmm4
97         movdqa  64(%ebp),%xmm5
98         pxor    %xmm4,%xmm0
99         movdqa  -64(%ebx,%ecx,1),%xmm1
100 .byte   102,15,56,0,234
101         movdqa  80(%ebp),%xmm2
102         movdqa  (%ebx,%ecx,1),%xmm4
103 .byte   102,15,56,0,211
104         movdqa  %xmm0,%xmm3
105         pxor    %xmm5,%xmm2
106 .byte   102,15,56,0,193
107         addl    $16,%edx
108         pxor    %xmm2,%xmm0
109 .byte   102,15,56,0,220
110         addl    $16,%ecx
111         pxor    %xmm0,%xmm3
112 .byte   102,15,56,0,193
113         andl    $48,%ecx
114         subl    $1,%eax
115         pxor    %xmm3,%xmm0
116 .L000enc_entry:
117         movdqa  %xmm6,%xmm1
118         movdqa  -32(%ebp),%xmm5
119         pandn   %xmm0,%xmm1
120         psrld   $4,%xmm1
121         pand    %xmm6,%xmm0
122 .byte   102,15,56,0,232
123         movdqa  %xmm7,%xmm3
124         pxor    %xmm1,%xmm0
125 .byte   102,15,56,0,217
126         movdqa  %xmm7,%xmm4
127         pxor    %xmm5,%xmm3
128 .byte   102,15,56,0,224
129         movdqa  %xmm7,%xmm2
130         pxor    %xmm5,%xmm4
131 .byte   102,15,56,0,211
132         movdqa  %xmm7,%xmm3
133         pxor    %xmm0,%xmm2
134 .byte   102,15,56,0,220
135         movdqu  (%edx),%xmm5
136         pxor    %xmm1,%xmm3
137         jnz     .L001enc_loop
138         movdqa  96(%ebp),%xmm4
139         movdqa  112(%ebp),%xmm0
140 .byte   102,15,56,0,226
141         pxor    %xmm5,%xmm4
142 .byte   102,15,56,0,195
143         movdqa  64(%ebx,%ecx,1),%xmm1
144         pxor    %xmm4,%xmm0
145 .byte   102,15,56,0,193
146         ret
147 .size   _vpaes_encrypt_core,.-_vpaes_encrypt_core
148 .hidden _vpaes_decrypt_core
149 .type   _vpaes_decrypt_core,@function
150 .align  16
151 _vpaes_decrypt_core:
152         leal    608(%ebp),%ebx
153         movl    240(%edx),%eax
154         movdqa  %xmm6,%xmm1
155         movdqa  -64(%ebx),%xmm2
156         pandn   %xmm0,%xmm1
157         movl    %eax,%ecx
158         psrld   $4,%xmm1
159         movdqu  (%edx),%xmm5
160         shll    $4,%ecx
161         pand    %xmm6,%xmm0
162 .byte   102,15,56,0,208
163         movdqa  -48(%ebx),%xmm0
164         xorl    $48,%ecx
165 .byte   102,15,56,0,193
166         andl    $48,%ecx
167         pxor    %xmm5,%xmm2
168         movdqa  176(%ebp),%xmm5
169         pxor    %xmm2,%xmm0
170         addl    $16,%edx
171         leal    -352(%ebx,%ecx,1),%ecx
172         jmp     .L002dec_entry
173 .align  16
174 .L003dec_loop:
175         movdqa  -32(%ebx),%xmm4
176         movdqa  -16(%ebx),%xmm1
177 .byte   102,15,56,0,226
178 .byte   102,15,56,0,203
179         pxor    %xmm4,%xmm0
180         movdqa  (%ebx),%xmm4
181         pxor    %xmm1,%xmm0
182         movdqa  16(%ebx),%xmm1
183 .byte   102,15,56,0,226
184 .byte   102,15,56,0,197
185 .byte   102,15,56,0,203
186         pxor    %xmm4,%xmm0
187         movdqa  32(%ebx),%xmm4
188         pxor    %xmm1,%xmm0
189         movdqa  48(%ebx),%xmm1
190 .byte   102,15,56,0,226
191 .byte   102,15,56,0,197
192 .byte   102,15,56,0,203
193         pxor    %xmm4,%xmm0
194         movdqa  64(%ebx),%xmm4
195         pxor    %xmm1,%xmm0
196         movdqa  80(%ebx),%xmm1
197 .byte   102,15,56,0,226
198 .byte   102,15,56,0,197
199 .byte   102,15,56,0,203
200         pxor    %xmm4,%xmm0
201         addl    $16,%edx
202 .byte   102,15,58,15,237,12
203         pxor    %xmm1,%xmm0
204         subl    $1,%eax
205 .L002dec_entry:
206         movdqa  %xmm6,%xmm1
207         movdqa  -32(%ebp),%xmm2
208         pandn   %xmm0,%xmm1
209         pand    %xmm6,%xmm0
210         psrld   $4,%xmm1
211 .byte   102,15,56,0,208
212         movdqa  %xmm7,%xmm3
213         pxor    %xmm1,%xmm0
214 .byte   102,15,56,0,217
215         movdqa  %xmm7,%xmm4
216         pxor    %xmm2,%xmm3
217 .byte   102,15,56,0,224
218         pxor    %xmm2,%xmm4
219         movdqa  %xmm7,%xmm2
220 .byte   102,15,56,0,211
221         movdqa  %xmm7,%xmm3
222         pxor    %xmm0,%xmm2
223 .byte   102,15,56,0,220
224         movdqu  (%edx),%xmm0
225         pxor    %xmm1,%xmm3
226         jnz     .L003dec_loop
227         movdqa  96(%ebx),%xmm4
228 .byte   102,15,56,0,226
229         pxor    %xmm0,%xmm4
230         movdqa  112(%ebx),%xmm0
231         movdqa  (%ecx),%xmm2
232 .byte   102,15,56,0,195
233         pxor    %xmm4,%xmm0
234 .byte   102,15,56,0,194
235         ret
236 .size   _vpaes_decrypt_core,.-_vpaes_decrypt_core
237 .hidden _vpaes_schedule_core
238 .type   _vpaes_schedule_core,@function
239 .align  16
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  16
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  16
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  16
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 .size   _vpaes_schedule_core,.-_vpaes_schedule_core
332 .hidden _vpaes_schedule_192_smear
333 .type   _vpaes_schedule_192_smear,@function
334 .align  16
335 _vpaes_schedule_192_smear:
336         pshufd  $128,%xmm6,%xmm1
337         pshufd  $254,%xmm7,%xmm0
338         pxor    %xmm1,%xmm6
339         pxor    %xmm1,%xmm1
340         pxor    %xmm0,%xmm6
341         movdqa  %xmm6,%xmm0
342         movhlps %xmm1,%xmm6
343         ret
344 .size   _vpaes_schedule_192_smear,.-_vpaes_schedule_192_smear
345 .hidden _vpaes_schedule_round
346 .type   _vpaes_schedule_round,@function
347 .align  16
348 _vpaes_schedule_round:
349         movdqa  8(%esp),%xmm2
350         pxor    %xmm1,%xmm1
351 .byte   102,15,58,15,202,15
352 .byte   102,15,58,15,210,15
353         pxor    %xmm1,%xmm7
354         pshufd  $255,%xmm0,%xmm0
355 .byte   102,15,58,15,192,1
356         movdqa  %xmm2,8(%esp)
357 .L_vpaes_schedule_low_round:
358         movdqa  %xmm7,%xmm1
359         pslldq  $4,%xmm7
360         pxor    %xmm1,%xmm7
361         movdqa  %xmm7,%xmm1
362         pslldq  $8,%xmm7
363         pxor    %xmm1,%xmm7
364         pxor    336(%ebp),%xmm7
365         movdqa  -16(%ebp),%xmm4
366         movdqa  -48(%ebp),%xmm5
367         movdqa  %xmm4,%xmm1
368         pandn   %xmm0,%xmm1
369         psrld   $4,%xmm1
370         pand    %xmm4,%xmm0
371         movdqa  -32(%ebp),%xmm2
372 .byte   102,15,56,0,208
373         pxor    %xmm1,%xmm0
374         movdqa  %xmm5,%xmm3
375 .byte   102,15,56,0,217
376         pxor    %xmm2,%xmm3
377         movdqa  %xmm5,%xmm4
378 .byte   102,15,56,0,224
379         pxor    %xmm2,%xmm4
380         movdqa  %xmm5,%xmm2
381 .byte   102,15,56,0,211
382         pxor    %xmm0,%xmm2
383         movdqa  %xmm5,%xmm3
384 .byte   102,15,56,0,220
385         pxor    %xmm1,%xmm3
386         movdqa  32(%ebp),%xmm4
387 .byte   102,15,56,0,226
388         movdqa  48(%ebp),%xmm0
389 .byte   102,15,56,0,195
390         pxor    %xmm4,%xmm0
391         pxor    %xmm7,%xmm0
392         movdqa  %xmm0,%xmm7
393         ret
394 .size   _vpaes_schedule_round,.-_vpaes_schedule_round
395 .hidden _vpaes_schedule_transform
396 .type   _vpaes_schedule_transform,@function
397 .align  16
398 _vpaes_schedule_transform:
399         movdqa  -16(%ebp),%xmm2
400         movdqa  %xmm2,%xmm1
401         pandn   %xmm0,%xmm1
402         psrld   $4,%xmm1
403         pand    %xmm2,%xmm0
404         movdqa  (%ebx),%xmm2
405 .byte   102,15,56,0,208
406         movdqa  16(%ebx),%xmm0
407 .byte   102,15,56,0,193
408         pxor    %xmm2,%xmm0
409         ret
410 .size   _vpaes_schedule_transform,.-_vpaes_schedule_transform
411 .hidden _vpaes_schedule_mangle
412 .type   _vpaes_schedule_mangle,@function
413 .align  16
414 _vpaes_schedule_mangle:
415         movdqa  %xmm0,%xmm4
416         movdqa  128(%ebp),%xmm5
417         testl   %edi,%edi
418         jnz     .L014schedule_mangle_dec
419         addl    $16,%edx
420         pxor    336(%ebp),%xmm4
421 .byte   102,15,56,0,229
422         movdqa  %xmm4,%xmm3
423 .byte   102,15,56,0,229
424         pxor    %xmm4,%xmm3
425 .byte   102,15,56,0,229
426         pxor    %xmm4,%xmm3
427         jmp     .L015schedule_mangle_both
428 .align  16
429 .L014schedule_mangle_dec:
430         movdqa  -16(%ebp),%xmm2
431         leal    416(%ebp),%esi
432         movdqa  %xmm2,%xmm1
433         pandn   %xmm4,%xmm1
434         psrld   $4,%xmm1
435         pand    %xmm2,%xmm4
436         movdqa  (%esi),%xmm2
437 .byte   102,15,56,0,212
438         movdqa  16(%esi),%xmm3
439 .byte   102,15,56,0,217
440         pxor    %xmm2,%xmm3
441 .byte   102,15,56,0,221
442         movdqa  32(%esi),%xmm2
443 .byte   102,15,56,0,212
444         pxor    %xmm3,%xmm2
445         movdqa  48(%esi),%xmm3
446 .byte   102,15,56,0,217
447         pxor    %xmm2,%xmm3
448 .byte   102,15,56,0,221
449         movdqa  64(%esi),%xmm2
450 .byte   102,15,56,0,212
451         pxor    %xmm3,%xmm2
452         movdqa  80(%esi),%xmm3
453 .byte   102,15,56,0,217
454         pxor    %xmm2,%xmm3
455 .byte   102,15,56,0,221
456         movdqa  96(%esi),%xmm2
457 .byte   102,15,56,0,212
458         pxor    %xmm3,%xmm2
459         movdqa  112(%esi),%xmm3
460 .byte   102,15,56,0,217
461         pxor    %xmm2,%xmm3
462         addl    $-16,%edx
463 .L015schedule_mangle_both:
464         movdqa  256(%ebp,%ecx,1),%xmm1
465 .byte   102,15,56,0,217
466         addl    $-16,%ecx
467         andl    $48,%ecx
468         movdqu  %xmm3,(%edx)
469         ret
470 .size   _vpaes_schedule_mangle,.-_vpaes_schedule_mangle
471 .globl  vpaes_set_encrypt_key
472 .hidden vpaes_set_encrypt_key
473 .type   vpaes_set_encrypt_key,@function
474 .align  16
475 vpaes_set_encrypt_key:
476 .L_vpaes_set_encrypt_key_begin:
477         pushl   %ebp
478         pushl   %ebx
479         pushl   %esi
480         pushl   %edi
481         movl    20(%esp),%esi
482         leal    -56(%esp),%ebx
483         movl    24(%esp),%eax
484         andl    $-16,%ebx
485         movl    28(%esp),%edx
486         xchgl   %esp,%ebx
487         movl    %ebx,48(%esp)
488         movl    %eax,%ebx
489         shrl    $5,%ebx
490         addl    $5,%ebx
491         movl    %ebx,240(%edx)
492         movl    $48,%ecx
493         movl    $0,%edi
494         leal    .L_vpaes_consts+0x30-.L016pic_point,%ebp
495         call    _vpaes_schedule_core
496 .L016pic_point:
497         movl    48(%esp),%esp
498         xorl    %eax,%eax
499         popl    %edi
500         popl    %esi
501         popl    %ebx
502         popl    %ebp
503         ret
504 .size   vpaes_set_encrypt_key,.-.L_vpaes_set_encrypt_key_begin
505 .globl  vpaes_set_decrypt_key
506 .hidden vpaes_set_decrypt_key
507 .type   vpaes_set_decrypt_key,@function
508 .align  16
509 vpaes_set_decrypt_key:
510 .L_vpaes_set_decrypt_key_begin:
511         pushl   %ebp
512         pushl   %ebx
513         pushl   %esi
514         pushl   %edi
515         movl    20(%esp),%esi
516         leal    -56(%esp),%ebx
517         movl    24(%esp),%eax
518         andl    $-16,%ebx
519         movl    28(%esp),%edx
520         xchgl   %esp,%ebx
521         movl    %ebx,48(%esp)
522         movl    %eax,%ebx
523         shrl    $5,%ebx
524         addl    $5,%ebx
525         movl    %ebx,240(%edx)
526         shll    $4,%ebx
527         leal    16(%edx,%ebx,1),%edx
528         movl    $1,%edi
529         movl    %eax,%ecx
530         shrl    $1,%ecx
531         andl    $32,%ecx
532         xorl    $32,%ecx
533         leal    .L_vpaes_consts+0x30-.L017pic_point,%ebp
534         call    _vpaes_schedule_core
535 .L017pic_point:
536         movl    48(%esp),%esp
537         xorl    %eax,%eax
538         popl    %edi
539         popl    %esi
540         popl    %ebx
541         popl    %ebp
542         ret
543 .size   vpaes_set_decrypt_key,.-.L_vpaes_set_decrypt_key_begin
544 .globl  vpaes_encrypt
545 .hidden 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 .hidden vpaes_decrypt
576 .type   vpaes_decrypt,@function
577 .align  16
578 vpaes_decrypt:
579 .L_vpaes_decrypt_begin:
580         pushl   %ebp
581         pushl   %ebx
582         pushl   %esi
583         pushl   %edi
584         leal    .L_vpaes_consts+0x30-.L019pic_point,%ebp
585         call    _vpaes_preheat
586 .L019pic_point:
587         movl    20(%esp),%esi
588         leal    -56(%esp),%ebx
589         movl    24(%esp),%edi
590         andl    $-16,%ebx
591         movl    28(%esp),%edx
592         xchgl   %esp,%ebx
593         movl    %ebx,48(%esp)
594         movdqu  (%esi),%xmm0
595         call    _vpaes_decrypt_core
596         movdqu  %xmm0,(%edi)
597         movl    48(%esp),%esp
598         popl    %edi
599         popl    %esi
600         popl    %ebx
601         popl    %ebp
602         ret
603 .size   vpaes_decrypt,.-.L_vpaes_decrypt_begin
604 .globl  vpaes_cbc_encrypt
605 .hidden vpaes_cbc_encrypt
606 .type   vpaes_cbc_encrypt,@function
607 .align  16
608 vpaes_cbc_encrypt:
609 .L_vpaes_cbc_encrypt_begin:
610         pushl   %ebp
611         pushl   %ebx
612         pushl   %esi
613         pushl   %edi
614         movl    20(%esp),%esi
615         movl    24(%esp),%edi
616         movl    28(%esp),%eax
617         movl    32(%esp),%edx
618         subl    $16,%eax
619         jc      .L020cbc_abort
620         leal    -56(%esp),%ebx
621         movl    36(%esp),%ebp
622         andl    $-16,%ebx
623         movl    40(%esp),%ecx
624         xchgl   %esp,%ebx
625         movdqu  (%ebp),%xmm1
626         subl    %esi,%edi
627         movl    %ebx,48(%esp)
628         movl    %edi,(%esp)
629         movl    %edx,4(%esp)
630         movl    %ebp,8(%esp)
631         movl    %eax,%edi
632         leal    .L_vpaes_consts+0x30-.L021pic_point,%ebp
633         call    _vpaes_preheat
634 .L021pic_point:
635         cmpl    $0,%ecx
636         je      .L022cbc_dec_loop
637         jmp     .L023cbc_enc_loop
638 .align  16
639 .L023cbc_enc_loop:
640         movdqu  (%esi),%xmm0
641         pxor    %xmm1,%xmm0
642         call    _vpaes_encrypt_core
643         movl    (%esp),%ebx
644         movl    4(%esp),%edx
645         movdqa  %xmm0,%xmm1
646         movdqu  %xmm0,(%ebx,%esi,1)
647         leal    16(%esi),%esi
648         subl    $16,%edi
649         jnc     .L023cbc_enc_loop
650         jmp     .L024cbc_done
651 .align  16
652 .L022cbc_dec_loop:
653         movdqu  (%esi),%xmm0
654         movdqa  %xmm1,16(%esp)
655         movdqa  %xmm0,32(%esp)
656         call    _vpaes_decrypt_core
657         movl    (%esp),%ebx
658         movl    4(%esp),%edx
659         pxor    16(%esp),%xmm0
660         movdqa  32(%esp),%xmm1
661         movdqu  %xmm0,(%ebx,%esi,1)
662         leal    16(%esi),%esi
663         subl    $16,%edi
664         jnc     .L022cbc_dec_loop
665 .L024cbc_done:
666         movl    8(%esp),%ebx
667         movl    48(%esp),%esp
668         movdqu  %xmm1,(%ebx)
669 .L020cbc_abort:
670         popl    %edi
671         popl    %esi
672         popl    %ebx
673         popl    %ebp
674         ret
675 .size   vpaes_cbc_encrypt,.-.L_vpaes_cbc_encrypt_begin
676 #endif