]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/blob - secure/lib/libcrypto/i386/vpaes-x86.S
- Make libcrypto.so position independent on i386.
[FreeBSD/stable/10.git] / secure / lib / libcrypto / i386 / vpaes-x86.S
1 # $FreeBSD$
2 # Do not modify. This file is auto-generated from vpaes-x86.pl.
3 #ifdef PIC
4 .file   "vpaes-x86.S"
5 .text
6 .align  64
7 .L_vpaes_consts:
8 .long   218628480,235210255,168496130,67568393
9 .long   252381056,17041926,33884169,51187212
10 .long   252645135,252645135,252645135,252645135
11 .long   1512730624,3266504856,1377990664,3401244816
12 .long   830229760,1275146365,2969422977,3447763452
13 .long   3411033600,2979783055,338359620,2782886510
14 .long   4209124096,907596821,221174255,1006095553
15 .long   191964160,3799684038,3164090317,1589111125
16 .long   182528256,1777043520,2877432650,3265356744
17 .long   1874708224,3503451415,3305285752,363511674
18 .long   1606117888,3487855781,1093350906,2384367825
19 .long   197121,67569157,134941193,202313229
20 .long   67569157,134941193,202313229,197121
21 .long   134941193,202313229,197121,67569157
22 .long   202313229,197121,67569157,134941193
23 .long   33619971,100992007,168364043,235736079
24 .long   235736079,33619971,100992007,168364043
25 .long   168364043,235736079,33619971,100992007
26 .long   100992007,168364043,235736079,33619971
27 .long   50462976,117835012,185207048,252579084
28 .long   252314880,51251460,117574920,184942860
29 .long   184682752,252054788,50987272,118359308
30 .long   118099200,185467140,251790600,50727180
31 .long   2946363062,528716217,1300004225,1881839624
32 .long   1532713819,1532713819,1532713819,1532713819
33 .long   3602276352,4288629033,3737020424,4153884961
34 .long   1354558464,32357713,2958822624,3775749553
35 .long   1201988352,132424512,1572796698,503232858
36 .long   2213177600,1597421020,4103937655,675398315
37 .long   2749646592,4273543773,1511898873,121693092
38 .long   3040248576,1103263732,2871565598,1608280554
39 .long   2236667136,2588920351,482954393,64377734
40 .long   3069987328,291237287,2117370568,3650299247
41 .long   533321216,3573750986,2572112006,1401264716
42 .long   1339849704,2721158661,548607111,3445553514
43 .long   2128193280,3054596040,2183486460,1257083700
44 .long   655635200,1165381986,3923443150,2344132524
45 .long   190078720,256924420,290342170,357187870
46 .long   1610966272,2263057382,4103205268,309794674
47 .long   2592527872,2233205587,1335446729,3402964816
48 .long   3973531904,3225098121,3002836325,1918774430
49 .long   3870401024,2102906079,2284471353,4117666579
50 .long   617007872,1021508343,366931923,691083277
51 .long   2528395776,3491914898,2968704004,1613121270
52 .long   3445188352,3247741094,844474987,4093578302
53 .long   651481088,1190302358,1689581232,574775300
54 .long   4289380608,206939853,2555985458,2489840491
55 .long   2130264064,327674451,3566485037,3349835193
56 .long   2470714624,316102159,3636825756,3393945945
57 .byte   86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105
58 .byte   111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83
59 .byte   83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117
60 .byte   114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105
61 .byte   118,101,114,115,105,116,121,41,0
62 .align  64
63 .type   _vpaes_preheat,@function
64 .align  16
65 _vpaes_preheat:
66         addl    (%esp),%ebp
67         movdqa  -48(%ebp),%xmm7
68         movdqa  -16(%ebp),%xmm6
69         ret
70 .size   _vpaes_preheat,.-_vpaes_preheat
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         movdqu  (%edx),%xmm5
80         psrld   $4,%xmm1
81         pand    %xmm6,%xmm0
82 .byte   102,15,56,0,208
83         movdqa  16(%ebp),%xmm0
84 .byte   102,15,56,0,193
85         pxor    %xmm5,%xmm2
86         pxor    %xmm2,%xmm0
87         addl    $16,%edx
88         leal    192(%ebp),%ebx
89         jmp     .L000enc_entry
90 .align  16
91 .L001enc_loop:
92         movdqa  32(%ebp),%xmm4
93 .byte   102,15,56,0,226
94         pxor    %xmm5,%xmm4
95         movdqa  48(%ebp),%xmm0
96 .byte   102,15,56,0,195
97         pxor    %xmm4,%xmm0
98         movdqa  64(%ebp),%xmm5
99 .byte   102,15,56,0,234
100         movdqa  -64(%ebx,%ecx,1),%xmm1
101         movdqa  80(%ebp),%xmm2
102 .byte   102,15,56,0,211
103         pxor    %xmm5,%xmm2
104         movdqa  (%ebx,%ecx,1),%xmm4
105         movdqa  %xmm0,%xmm3
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         pxor    %xmm3,%xmm0
115         subl    $1,%eax
116 .L000enc_entry:
117         movdqa  %xmm6,%xmm1
118         pandn   %xmm0,%xmm1
119         psrld   $4,%xmm1
120         pand    %xmm6,%xmm0
121         movdqa  -32(%ebp),%xmm5
122 .byte   102,15,56,0,232
123         pxor    %xmm1,%xmm0
124         movdqa  %xmm7,%xmm3
125 .byte   102,15,56,0,217
126         pxor    %xmm5,%xmm3
127         movdqa  %xmm7,%xmm4
128 .byte   102,15,56,0,224
129         pxor    %xmm5,%xmm4
130         movdqa  %xmm7,%xmm2
131 .byte   102,15,56,0,211
132         pxor    %xmm0,%xmm2
133         movdqa  %xmm7,%xmm3
134         movdqu  (%edx),%xmm5
135 .byte   102,15,56,0,220
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 .type   _vpaes_decrypt_core,@function
149 .align  16
150 _vpaes_decrypt_core:
151         movl    240(%edx),%eax
152         leal    608(%ebp),%ebx
153         movdqa  %xmm6,%xmm1
154         movdqa  -64(%ebx),%xmm2
155         pandn   %xmm0,%xmm1
156         movl    %eax,%ecx
157         psrld   $4,%xmm1
158         movdqu  (%edx),%xmm5
159         shll    $4,%ecx
160         pand    %xmm6,%xmm0
161 .byte   102,15,56,0,208
162         movdqa  -48(%ebx),%xmm0
163         xorl    $48,%ecx
164 .byte   102,15,56,0,193
165         andl    $48,%ecx
166         pxor    %xmm5,%xmm2
167         movdqa  176(%ebp),%xmm5
168         pxor    %xmm2,%xmm0
169         addl    $16,%edx
170         leal    -352(%ebx,%ecx,1),%ecx
171         jmp     .L002dec_entry
172 .align  16
173 .L003dec_loop:
174         movdqa  -32(%ebx),%xmm4
175 .byte   102,15,56,0,226
176         pxor    %xmm0,%xmm4
177         movdqa  -16(%ebx),%xmm0
178 .byte   102,15,56,0,195
179         pxor    %xmm4,%xmm0
180         addl    $16,%edx
181 .byte   102,15,56,0,197
182         movdqa  (%ebx),%xmm4
183 .byte   102,15,56,0,226
184         pxor    %xmm0,%xmm4
185         movdqa  16(%ebx),%xmm0
186 .byte   102,15,56,0,195
187         pxor    %xmm4,%xmm0
188         subl    $1,%eax
189 .byte   102,15,56,0,197
190         movdqa  32(%ebx),%xmm4
191 .byte   102,15,56,0,226
192         pxor    %xmm0,%xmm4
193         movdqa  48(%ebx),%xmm0
194 .byte   102,15,56,0,195
195         pxor    %xmm4,%xmm0
196 .byte   102,15,56,0,197
197         movdqa  64(%ebx),%xmm4
198 .byte   102,15,56,0,226
199         pxor    %xmm0,%xmm4
200         movdqa  80(%ebx),%xmm0
201 .byte   102,15,56,0,195
202         pxor    %xmm4,%xmm0
203 .byte   102,15,58,15,237,12
204 .L002dec_entry:
205         movdqa  %xmm6,%xmm1
206         pandn   %xmm0,%xmm1
207         psrld   $4,%xmm1
208         pand    %xmm6,%xmm0
209         movdqa  -32(%ebp),%xmm2
210 .byte   102,15,56,0,208
211         pxor    %xmm1,%xmm0
212         movdqa  %xmm7,%xmm3
213 .byte   102,15,56,0,217
214         pxor    %xmm2,%xmm3
215         movdqa  %xmm7,%xmm4
216 .byte   102,15,56,0,224
217         pxor    %xmm2,%xmm4
218         movdqa  %xmm7,%xmm2
219 .byte   102,15,56,0,211
220         pxor    %xmm0,%xmm2
221         movdqa  %xmm7,%xmm3
222 .byte   102,15,56,0,220
223         pxor    %xmm1,%xmm3
224         movdqu  (%edx),%xmm0
225         jnz     .L003dec_loop
226         movdqa  96(%ebx),%xmm4
227 .byte   102,15,56,0,226
228         pxor    %xmm0,%xmm4
229         movdqa  112(%ebx),%xmm0
230         movdqa  (%ecx),%xmm2
231 .byte   102,15,56,0,195
232         pxor    %xmm4,%xmm0
233 .byte   102,15,56,0,194
234         ret
235 .size   _vpaes_decrypt_core,.-_vpaes_decrypt_core
236 .type   _vpaes_schedule_core,@function
237 .align  16
238 _vpaes_schedule_core:
239         addl    (%esp),%ebp
240         movdqu  (%esi),%xmm0
241         movdqa  320(%ebp),%xmm2
242         movdqa  %xmm0,%xmm3
243         leal    (%ebp),%ebx
244         movdqa  %xmm2,4(%esp)
245         call    _vpaes_schedule_transform
246         movdqa  %xmm0,%xmm7
247         testl   %edi,%edi
248         jnz     .L004schedule_am_decrypting
249         movdqu  %xmm0,(%edx)
250         jmp     .L005schedule_go
251 .L004schedule_am_decrypting:
252         movdqa  256(%ebp,%ecx,1),%xmm1
253 .byte   102,15,56,0,217
254         movdqu  %xmm3,(%edx)
255         xorl    $48,%ecx
256 .L005schedule_go:
257         cmpl    $192,%eax
258         ja      .L006schedule_256
259         je      .L007schedule_192
260 .L008schedule_128:
261         movl    $10,%eax
262 .L009loop_schedule_128:
263         call    _vpaes_schedule_round
264         decl    %eax
265         jz      .L010schedule_mangle_last
266         call    _vpaes_schedule_mangle
267         jmp     .L009loop_schedule_128
268 .align  16
269 .L007schedule_192:
270         movdqu  8(%esi),%xmm0
271         call    _vpaes_schedule_transform
272         movdqa  %xmm0,%xmm6
273         pxor    %xmm4,%xmm4
274         movhlps %xmm4,%xmm6
275         movl    $4,%eax
276 .L011loop_schedule_192:
277         call    _vpaes_schedule_round
278 .byte   102,15,58,15,198,8
279         call    _vpaes_schedule_mangle
280         call    _vpaes_schedule_192_smear
281         call    _vpaes_schedule_mangle
282         call    _vpaes_schedule_round
283         decl    %eax
284         jz      .L010schedule_mangle_last
285         call    _vpaes_schedule_mangle
286         call    _vpaes_schedule_192_smear
287         jmp     .L011loop_schedule_192
288 .align  16
289 .L006schedule_256:
290         movdqu  16(%esi),%xmm0
291         call    _vpaes_schedule_transform
292         movl    $7,%eax
293 .L012loop_schedule_256:
294         call    _vpaes_schedule_mangle
295         movdqa  %xmm0,%xmm6
296         call    _vpaes_schedule_round
297         decl    %eax
298         jz      .L010schedule_mangle_last
299         call    _vpaes_schedule_mangle
300         pshufd  $255,%xmm0,%xmm0
301         movdqa  %xmm7,20(%esp)
302         movdqa  %xmm6,%xmm7
303         call    .L_vpaes_schedule_low_round
304         movdqa  20(%esp),%xmm7
305         jmp     .L012loop_schedule_256
306 .align  16
307 .L010schedule_mangle_last:
308         leal    384(%ebp),%ebx
309         testl   %edi,%edi
310         jnz     .L013schedule_mangle_last_dec
311         movdqa  256(%ebp,%ecx,1),%xmm1
312 .byte   102,15,56,0,193
313         leal    352(%ebp),%ebx
314         addl    $32,%edx
315 .L013schedule_mangle_last_dec:
316         addl    $-16,%edx
317         pxor    336(%ebp),%xmm0
318         call    _vpaes_schedule_transform
319         movdqu  %xmm0,(%edx)
320         pxor    %xmm0,%xmm0
321         pxor    %xmm1,%xmm1
322         pxor    %xmm2,%xmm2
323         pxor    %xmm3,%xmm3
324         pxor    %xmm4,%xmm4
325         pxor    %xmm5,%xmm5
326         pxor    %xmm6,%xmm6
327         pxor    %xmm7,%xmm7
328         ret
329 .size   _vpaes_schedule_core,.-_vpaes_schedule_core
330 .type   _vpaes_schedule_192_smear,@function
331 .align  16
332 _vpaes_schedule_192_smear:
333         pshufd  $128,%xmm6,%xmm0
334         pxor    %xmm0,%xmm6
335         pshufd  $254,%xmm7,%xmm0
336         pxor    %xmm0,%xmm6
337         movdqa  %xmm6,%xmm0
338         pxor    %xmm1,%xmm1
339         movhlps %xmm1,%xmm6
340         ret
341 .size   _vpaes_schedule_192_smear,.-_vpaes_schedule_192_smear
342 .type   _vpaes_schedule_round,@function
343 .align  16
344 _vpaes_schedule_round:
345         movdqa  8(%esp),%xmm2
346         pxor    %xmm1,%xmm1
347 .byte   102,15,58,15,202,15
348 .byte   102,15,58,15,210,15
349         pxor    %xmm1,%xmm7
350         pshufd  $255,%xmm0,%xmm0
351 .byte   102,15,58,15,192,1
352         movdqa  %xmm2,8(%esp)
353 .L_vpaes_schedule_low_round:
354         movdqa  %xmm7,%xmm1
355         pslldq  $4,%xmm7
356         pxor    %xmm1,%xmm7
357         movdqa  %xmm7,%xmm1
358         pslldq  $8,%xmm7
359         pxor    %xmm1,%xmm7
360         pxor    336(%ebp),%xmm7
361         movdqa  -16(%ebp),%xmm4
362         movdqa  -48(%ebp),%xmm5
363         movdqa  %xmm4,%xmm1
364         pandn   %xmm0,%xmm1
365         psrld   $4,%xmm1
366         pand    %xmm4,%xmm0
367         movdqa  -32(%ebp),%xmm2
368 .byte   102,15,56,0,208
369         pxor    %xmm1,%xmm0
370         movdqa  %xmm5,%xmm3
371 .byte   102,15,56,0,217
372         pxor    %xmm2,%xmm3
373         movdqa  %xmm5,%xmm4
374 .byte   102,15,56,0,224
375         pxor    %xmm2,%xmm4
376         movdqa  %xmm5,%xmm2
377 .byte   102,15,56,0,211
378         pxor    %xmm0,%xmm2
379         movdqa  %xmm5,%xmm3
380 .byte   102,15,56,0,220
381         pxor    %xmm1,%xmm3
382         movdqa  32(%ebp),%xmm4
383 .byte   102,15,56,0,226
384         movdqa  48(%ebp),%xmm0
385 .byte   102,15,56,0,195
386         pxor    %xmm4,%xmm0
387         pxor    %xmm7,%xmm0
388         movdqa  %xmm0,%xmm7
389         ret
390 .size   _vpaes_schedule_round,.-_vpaes_schedule_round
391 .type   _vpaes_schedule_transform,@function
392 .align  16
393 _vpaes_schedule_transform:
394         movdqa  -16(%ebp),%xmm2
395         movdqa  %xmm2,%xmm1
396         pandn   %xmm0,%xmm1
397         psrld   $4,%xmm1
398         pand    %xmm2,%xmm0
399         movdqa  (%ebx),%xmm2
400 .byte   102,15,56,0,208
401         movdqa  16(%ebx),%xmm0
402 .byte   102,15,56,0,193
403         pxor    %xmm2,%xmm0
404         ret
405 .size   _vpaes_schedule_transform,.-_vpaes_schedule_transform
406 .type   _vpaes_schedule_mangle,@function
407 .align  16
408 _vpaes_schedule_mangle:
409         movdqa  %xmm0,%xmm4
410         movdqa  128(%ebp),%xmm5
411         testl   %edi,%edi
412         jnz     .L014schedule_mangle_dec
413         addl    $16,%edx
414         pxor    336(%ebp),%xmm4
415 .byte   102,15,56,0,229
416         movdqa  %xmm4,%xmm3
417 .byte   102,15,56,0,229
418         pxor    %xmm4,%xmm3
419 .byte   102,15,56,0,229
420         pxor    %xmm4,%xmm3
421         jmp     .L015schedule_mangle_both
422 .align  16
423 .L014schedule_mangle_dec:
424         movdqa  -16(%ebp),%xmm2
425         leal    416(%ebp),%esi
426         movdqa  %xmm2,%xmm1
427         pandn   %xmm4,%xmm1
428         psrld   $4,%xmm1
429         pand    %xmm2,%xmm4
430         movdqa  (%esi),%xmm2
431 .byte   102,15,56,0,212
432         movdqa  16(%esi),%xmm3
433 .byte   102,15,56,0,217
434         pxor    %xmm2,%xmm3
435 .byte   102,15,56,0,221
436         movdqa  32(%esi),%xmm2
437 .byte   102,15,56,0,212
438         pxor    %xmm3,%xmm2
439         movdqa  48(%esi),%xmm3
440 .byte   102,15,56,0,217
441         pxor    %xmm2,%xmm3
442 .byte   102,15,56,0,221
443         movdqa  64(%esi),%xmm2
444 .byte   102,15,56,0,212
445         pxor    %xmm3,%xmm2
446         movdqa  80(%esi),%xmm3
447 .byte   102,15,56,0,217
448         pxor    %xmm2,%xmm3
449 .byte   102,15,56,0,221
450         movdqa  96(%esi),%xmm2
451 .byte   102,15,56,0,212
452         pxor    %xmm3,%xmm2
453         movdqa  112(%esi),%xmm3
454 .byte   102,15,56,0,217
455         pxor    %xmm2,%xmm3
456         addl    $-16,%edx
457 .L015schedule_mangle_both:
458         movdqa  256(%ebp,%ecx,1),%xmm1
459 .byte   102,15,56,0,217
460         addl    $-16,%ecx
461         andl    $48,%ecx
462         movdqu  %xmm3,(%edx)
463         ret
464 .size   _vpaes_schedule_mangle,.-_vpaes_schedule_mangle
465 .globl  vpaes_set_encrypt_key
466 .type   vpaes_set_encrypt_key,@function
467 .align  16
468 vpaes_set_encrypt_key:
469 .L_vpaes_set_encrypt_key_begin:
470         pushl   %ebp
471         pushl   %ebx
472         pushl   %esi
473         pushl   %edi
474         movl    20(%esp),%esi
475         leal    -56(%esp),%ebx
476         movl    24(%esp),%eax
477         andl    $-16,%ebx
478         movl    28(%esp),%edx
479         xchgl   %esp,%ebx
480         movl    %ebx,48(%esp)
481         movl    %eax,%ebx
482         shrl    $5,%ebx
483         addl    $5,%ebx
484         movl    %ebx,240(%edx)
485         movl    $48,%ecx
486         movl    $0,%edi
487         leal    .L_vpaes_consts+0x30-.L016pic_point,%ebp
488         call    _vpaes_schedule_core
489 .L016pic_point:
490         movl    48(%esp),%esp
491         xorl    %eax,%eax
492         popl    %edi
493         popl    %esi
494         popl    %ebx
495         popl    %ebp
496         ret
497 .size   vpaes_set_encrypt_key,.-.L_vpaes_set_encrypt_key_begin
498 .globl  vpaes_set_decrypt_key
499 .type   vpaes_set_decrypt_key,@function
500 .align  16
501 vpaes_set_decrypt_key:
502 .L_vpaes_set_decrypt_key_begin:
503         pushl   %ebp
504         pushl   %ebx
505         pushl   %esi
506         pushl   %edi
507         movl    20(%esp),%esi
508         leal    -56(%esp),%ebx
509         movl    24(%esp),%eax
510         andl    $-16,%ebx
511         movl    28(%esp),%edx
512         xchgl   %esp,%ebx
513         movl    %ebx,48(%esp)
514         movl    %eax,%ebx
515         shrl    $5,%ebx
516         addl    $5,%ebx
517         movl    %ebx,240(%edx)
518         shll    $4,%ebx
519         leal    16(%edx,%ebx,1),%edx
520         movl    $1,%edi
521         movl    %eax,%ecx
522         shrl    $1,%ecx
523         andl    $32,%ecx
524         xorl    $32,%ecx
525         leal    .L_vpaes_consts+0x30-.L017pic_point,%ebp
526         call    _vpaes_schedule_core
527 .L017pic_point:
528         movl    48(%esp),%esp
529         xorl    %eax,%eax
530         popl    %edi
531         popl    %esi
532         popl    %ebx
533         popl    %ebp
534         ret
535 .size   vpaes_set_decrypt_key,.-.L_vpaes_set_decrypt_key_begin
536 .globl  vpaes_encrypt
537 .type   vpaes_encrypt,@function
538 .align  16
539 vpaes_encrypt:
540 .L_vpaes_encrypt_begin:
541         pushl   %ebp
542         pushl   %ebx
543         pushl   %esi
544         pushl   %edi
545         leal    .L_vpaes_consts+0x30-.L018pic_point,%ebp
546         call    _vpaes_preheat
547 .L018pic_point:
548         movl    20(%esp),%esi
549         leal    -56(%esp),%ebx
550         movl    24(%esp),%edi
551         andl    $-16,%ebx
552         movl    28(%esp),%edx
553         xchgl   %esp,%ebx
554         movl    %ebx,48(%esp)
555         movdqu  (%esi),%xmm0
556         call    _vpaes_encrypt_core
557         movdqu  %xmm0,(%edi)
558         movl    48(%esp),%esp
559         popl    %edi
560         popl    %esi
561         popl    %ebx
562         popl    %ebp
563         ret
564 .size   vpaes_encrypt,.-.L_vpaes_encrypt_begin
565 .globl  vpaes_decrypt
566 .type   vpaes_decrypt,@function
567 .align  16
568 vpaes_decrypt:
569 .L_vpaes_decrypt_begin:
570         pushl   %ebp
571         pushl   %ebx
572         pushl   %esi
573         pushl   %edi
574         leal    .L_vpaes_consts+0x30-.L019pic_point,%ebp
575         call    _vpaes_preheat
576 .L019pic_point:
577         movl    20(%esp),%esi
578         leal    -56(%esp),%ebx
579         movl    24(%esp),%edi
580         andl    $-16,%ebx
581         movl    28(%esp),%edx
582         xchgl   %esp,%ebx
583         movl    %ebx,48(%esp)
584         movdqu  (%esi),%xmm0
585         call    _vpaes_decrypt_core
586         movdqu  %xmm0,(%edi)
587         movl    48(%esp),%esp
588         popl    %edi
589         popl    %esi
590         popl    %ebx
591         popl    %ebp
592         ret
593 .size   vpaes_decrypt,.-.L_vpaes_decrypt_begin
594 .globl  vpaes_cbc_encrypt
595 .type   vpaes_cbc_encrypt,@function
596 .align  16
597 vpaes_cbc_encrypt:
598 .L_vpaes_cbc_encrypt_begin:
599         pushl   %ebp
600         pushl   %ebx
601         pushl   %esi
602         pushl   %edi
603         movl    20(%esp),%esi
604         movl    24(%esp),%edi
605         movl    28(%esp),%eax
606         movl    32(%esp),%edx
607         subl    $16,%eax
608         jc      .L020cbc_abort
609         leal    -56(%esp),%ebx
610         movl    36(%esp),%ebp
611         andl    $-16,%ebx
612         movl    40(%esp),%ecx
613         xchgl   %esp,%ebx
614         movdqu  (%ebp),%xmm1
615         subl    %esi,%edi
616         movl    %ebx,48(%esp)
617         movl    %edi,(%esp)
618         movl    %edx,4(%esp)
619         movl    %ebp,8(%esp)
620         movl    %eax,%edi
621         leal    .L_vpaes_consts+0x30-.L021pic_point,%ebp
622         call    _vpaes_preheat
623 .L021pic_point:
624         cmpl    $0,%ecx
625         je      .L022cbc_dec_loop
626         jmp     .L023cbc_enc_loop
627 .align  16
628 .L023cbc_enc_loop:
629         movdqu  (%esi),%xmm0
630         pxor    %xmm1,%xmm0
631         call    _vpaes_encrypt_core
632         movl    (%esp),%ebx
633         movl    4(%esp),%edx
634         movdqa  %xmm0,%xmm1
635         movdqu  %xmm0,(%ebx,%esi,1)
636         leal    16(%esi),%esi
637         subl    $16,%edi
638         jnc     .L023cbc_enc_loop
639         jmp     .L024cbc_done
640 .align  16
641 .L022cbc_dec_loop:
642         movdqu  (%esi),%xmm0
643         movdqa  %xmm1,16(%esp)
644         movdqa  %xmm0,32(%esp)
645         call    _vpaes_decrypt_core
646         movl    (%esp),%ebx
647         movl    4(%esp),%edx
648         pxor    16(%esp),%xmm0
649         movdqa  32(%esp),%xmm1
650         movdqu  %xmm0,(%ebx,%esi,1)
651         leal    16(%esi),%esi
652         subl    $16,%edi
653         jnc     .L022cbc_dec_loop
654 .L024cbc_done:
655         movl    8(%esp),%ebx
656         movl    48(%esp),%esp
657         movdqu  %xmm1,(%ebx)
658 .L020cbc_abort:
659         popl    %edi
660         popl    %esi
661         popl    %ebx
662         popl    %ebp
663         ret
664 .size   vpaes_cbc_encrypt,.-.L_vpaes_cbc_encrypt_begin
665 #else
666 .file   "vpaes-x86.S"
667 .text
668 .align  64
669 .L_vpaes_consts:
670 .long   218628480,235210255,168496130,67568393
671 .long   252381056,17041926,33884169,51187212
672 .long   252645135,252645135,252645135,252645135
673 .long   1512730624,3266504856,1377990664,3401244816
674 .long   830229760,1275146365,2969422977,3447763452
675 .long   3411033600,2979783055,338359620,2782886510
676 .long   4209124096,907596821,221174255,1006095553
677 .long   191964160,3799684038,3164090317,1589111125
678 .long   182528256,1777043520,2877432650,3265356744
679 .long   1874708224,3503451415,3305285752,363511674
680 .long   1606117888,3487855781,1093350906,2384367825
681 .long   197121,67569157,134941193,202313229
682 .long   67569157,134941193,202313229,197121
683 .long   134941193,202313229,197121,67569157
684 .long   202313229,197121,67569157,134941193
685 .long   33619971,100992007,168364043,235736079
686 .long   235736079,33619971,100992007,168364043
687 .long   168364043,235736079,33619971,100992007
688 .long   100992007,168364043,235736079,33619971
689 .long   50462976,117835012,185207048,252579084
690 .long   252314880,51251460,117574920,184942860
691 .long   184682752,252054788,50987272,118359308
692 .long   118099200,185467140,251790600,50727180
693 .long   2946363062,528716217,1300004225,1881839624
694 .long   1532713819,1532713819,1532713819,1532713819
695 .long   3602276352,4288629033,3737020424,4153884961
696 .long   1354558464,32357713,2958822624,3775749553
697 .long   1201988352,132424512,1572796698,503232858
698 .long   2213177600,1597421020,4103937655,675398315
699 .long   2749646592,4273543773,1511898873,121693092
700 .long   3040248576,1103263732,2871565598,1608280554
701 .long   2236667136,2588920351,482954393,64377734
702 .long   3069987328,291237287,2117370568,3650299247
703 .long   533321216,3573750986,2572112006,1401264716
704 .long   1339849704,2721158661,548607111,3445553514
705 .long   2128193280,3054596040,2183486460,1257083700
706 .long   655635200,1165381986,3923443150,2344132524
707 .long   190078720,256924420,290342170,357187870
708 .long   1610966272,2263057382,4103205268,309794674
709 .long   2592527872,2233205587,1335446729,3402964816
710 .long   3973531904,3225098121,3002836325,1918774430
711 .long   3870401024,2102906079,2284471353,4117666579
712 .long   617007872,1021508343,366931923,691083277
713 .long   2528395776,3491914898,2968704004,1613121270
714 .long   3445188352,3247741094,844474987,4093578302
715 .long   651481088,1190302358,1689581232,574775300
716 .long   4289380608,206939853,2555985458,2489840491
717 .long   2130264064,327674451,3566485037,3349835193
718 .long   2470714624,316102159,3636825756,3393945945
719 .byte   86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105
720 .byte   111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83
721 .byte   83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117
722 .byte   114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105
723 .byte   118,101,114,115,105,116,121,41,0
724 .align  64
725 .type   _vpaes_preheat,@function
726 .align  16
727 _vpaes_preheat:
728         addl    (%esp),%ebp
729         movdqa  -48(%ebp),%xmm7
730         movdqa  -16(%ebp),%xmm6
731         ret
732 .size   _vpaes_preheat,.-_vpaes_preheat
733 .type   _vpaes_encrypt_core,@function
734 .align  16
735 _vpaes_encrypt_core:
736         movl    $16,%ecx
737         movl    240(%edx),%eax
738         movdqa  %xmm6,%xmm1
739         movdqa  (%ebp),%xmm2
740         pandn   %xmm0,%xmm1
741         movdqu  (%edx),%xmm5
742         psrld   $4,%xmm1
743         pand    %xmm6,%xmm0
744 .byte   102,15,56,0,208
745         movdqa  16(%ebp),%xmm0
746 .byte   102,15,56,0,193
747         pxor    %xmm5,%xmm2
748         pxor    %xmm2,%xmm0
749         addl    $16,%edx
750         leal    192(%ebp),%ebx
751         jmp     .L000enc_entry
752 .align  16
753 .L001enc_loop:
754         movdqa  32(%ebp),%xmm4
755 .byte   102,15,56,0,226
756         pxor    %xmm5,%xmm4
757         movdqa  48(%ebp),%xmm0
758 .byte   102,15,56,0,195
759         pxor    %xmm4,%xmm0
760         movdqa  64(%ebp),%xmm5
761 .byte   102,15,56,0,234
762         movdqa  -64(%ebx,%ecx,1),%xmm1
763         movdqa  80(%ebp),%xmm2
764 .byte   102,15,56,0,211
765         pxor    %xmm5,%xmm2
766         movdqa  (%ebx,%ecx,1),%xmm4
767         movdqa  %xmm0,%xmm3
768 .byte   102,15,56,0,193
769         addl    $16,%edx
770         pxor    %xmm2,%xmm0
771 .byte   102,15,56,0,220
772         addl    $16,%ecx
773         pxor    %xmm0,%xmm3
774 .byte   102,15,56,0,193
775         andl    $48,%ecx
776         pxor    %xmm3,%xmm0
777         subl    $1,%eax
778 .L000enc_entry:
779         movdqa  %xmm6,%xmm1
780         pandn   %xmm0,%xmm1
781         psrld   $4,%xmm1
782         pand    %xmm6,%xmm0
783         movdqa  -32(%ebp),%xmm5
784 .byte   102,15,56,0,232
785         pxor    %xmm1,%xmm0
786         movdqa  %xmm7,%xmm3
787 .byte   102,15,56,0,217
788         pxor    %xmm5,%xmm3
789         movdqa  %xmm7,%xmm4
790 .byte   102,15,56,0,224
791         pxor    %xmm5,%xmm4
792         movdqa  %xmm7,%xmm2
793 .byte   102,15,56,0,211
794         pxor    %xmm0,%xmm2
795         movdqa  %xmm7,%xmm3
796         movdqu  (%edx),%xmm5
797 .byte   102,15,56,0,220
798         pxor    %xmm1,%xmm3
799         jnz     .L001enc_loop
800         movdqa  96(%ebp),%xmm4
801         movdqa  112(%ebp),%xmm0
802 .byte   102,15,56,0,226
803         pxor    %xmm5,%xmm4
804 .byte   102,15,56,0,195
805         movdqa  64(%ebx,%ecx,1),%xmm1
806         pxor    %xmm4,%xmm0
807 .byte   102,15,56,0,193
808         ret
809 .size   _vpaes_encrypt_core,.-_vpaes_encrypt_core
810 .type   _vpaes_decrypt_core,@function
811 .align  16
812 _vpaes_decrypt_core:
813         movl    240(%edx),%eax
814         leal    608(%ebp),%ebx
815         movdqa  %xmm6,%xmm1
816         movdqa  -64(%ebx),%xmm2
817         pandn   %xmm0,%xmm1
818         movl    %eax,%ecx
819         psrld   $4,%xmm1
820         movdqu  (%edx),%xmm5
821         shll    $4,%ecx
822         pand    %xmm6,%xmm0
823 .byte   102,15,56,0,208
824         movdqa  -48(%ebx),%xmm0
825         xorl    $48,%ecx
826 .byte   102,15,56,0,193
827         andl    $48,%ecx
828         pxor    %xmm5,%xmm2
829         movdqa  176(%ebp),%xmm5
830         pxor    %xmm2,%xmm0
831         addl    $16,%edx
832         leal    -352(%ebx,%ecx,1),%ecx
833         jmp     .L002dec_entry
834 .align  16
835 .L003dec_loop:
836         movdqa  -32(%ebx),%xmm4
837 .byte   102,15,56,0,226
838         pxor    %xmm0,%xmm4
839         movdqa  -16(%ebx),%xmm0
840 .byte   102,15,56,0,195
841         pxor    %xmm4,%xmm0
842         addl    $16,%edx
843 .byte   102,15,56,0,197
844         movdqa  (%ebx),%xmm4
845 .byte   102,15,56,0,226
846         pxor    %xmm0,%xmm4
847         movdqa  16(%ebx),%xmm0
848 .byte   102,15,56,0,195
849         pxor    %xmm4,%xmm0
850         subl    $1,%eax
851 .byte   102,15,56,0,197
852         movdqa  32(%ebx),%xmm4
853 .byte   102,15,56,0,226
854         pxor    %xmm0,%xmm4
855         movdqa  48(%ebx),%xmm0
856 .byte   102,15,56,0,195
857         pxor    %xmm4,%xmm0
858 .byte   102,15,56,0,197
859         movdqa  64(%ebx),%xmm4
860 .byte   102,15,56,0,226
861         pxor    %xmm0,%xmm4
862         movdqa  80(%ebx),%xmm0
863 .byte   102,15,56,0,195
864         pxor    %xmm4,%xmm0
865 .byte   102,15,58,15,237,12
866 .L002dec_entry:
867         movdqa  %xmm6,%xmm1
868         pandn   %xmm0,%xmm1
869         psrld   $4,%xmm1
870         pand    %xmm6,%xmm0
871         movdqa  -32(%ebp),%xmm2
872 .byte   102,15,56,0,208
873         pxor    %xmm1,%xmm0
874         movdqa  %xmm7,%xmm3
875 .byte   102,15,56,0,217
876         pxor    %xmm2,%xmm3
877         movdqa  %xmm7,%xmm4
878 .byte   102,15,56,0,224
879         pxor    %xmm2,%xmm4
880         movdqa  %xmm7,%xmm2
881 .byte   102,15,56,0,211
882         pxor    %xmm0,%xmm2
883         movdqa  %xmm7,%xmm3
884 .byte   102,15,56,0,220
885         pxor    %xmm1,%xmm3
886         movdqu  (%edx),%xmm0
887         jnz     .L003dec_loop
888         movdqa  96(%ebx),%xmm4
889 .byte   102,15,56,0,226
890         pxor    %xmm0,%xmm4
891         movdqa  112(%ebx),%xmm0
892         movdqa  (%ecx),%xmm2
893 .byte   102,15,56,0,195
894         pxor    %xmm4,%xmm0
895 .byte   102,15,56,0,194
896         ret
897 .size   _vpaes_decrypt_core,.-_vpaes_decrypt_core
898 .type   _vpaes_schedule_core,@function
899 .align  16
900 _vpaes_schedule_core:
901         addl    (%esp),%ebp
902         movdqu  (%esi),%xmm0
903         movdqa  320(%ebp),%xmm2
904         movdqa  %xmm0,%xmm3
905         leal    (%ebp),%ebx
906         movdqa  %xmm2,4(%esp)
907         call    _vpaes_schedule_transform
908         movdqa  %xmm0,%xmm7
909         testl   %edi,%edi
910         jnz     .L004schedule_am_decrypting
911         movdqu  %xmm0,(%edx)
912         jmp     .L005schedule_go
913 .L004schedule_am_decrypting:
914         movdqa  256(%ebp,%ecx,1),%xmm1
915 .byte   102,15,56,0,217
916         movdqu  %xmm3,(%edx)
917         xorl    $48,%ecx
918 .L005schedule_go:
919         cmpl    $192,%eax
920         ja      .L006schedule_256
921         je      .L007schedule_192
922 .L008schedule_128:
923         movl    $10,%eax
924 .L009loop_schedule_128:
925         call    _vpaes_schedule_round
926         decl    %eax
927         jz      .L010schedule_mangle_last
928         call    _vpaes_schedule_mangle
929         jmp     .L009loop_schedule_128
930 .align  16
931 .L007schedule_192:
932         movdqu  8(%esi),%xmm0
933         call    _vpaes_schedule_transform
934         movdqa  %xmm0,%xmm6
935         pxor    %xmm4,%xmm4
936         movhlps %xmm4,%xmm6
937         movl    $4,%eax
938 .L011loop_schedule_192:
939         call    _vpaes_schedule_round
940 .byte   102,15,58,15,198,8
941         call    _vpaes_schedule_mangle
942         call    _vpaes_schedule_192_smear
943         call    _vpaes_schedule_mangle
944         call    _vpaes_schedule_round
945         decl    %eax
946         jz      .L010schedule_mangle_last
947         call    _vpaes_schedule_mangle
948         call    _vpaes_schedule_192_smear
949         jmp     .L011loop_schedule_192
950 .align  16
951 .L006schedule_256:
952         movdqu  16(%esi),%xmm0
953         call    _vpaes_schedule_transform
954         movl    $7,%eax
955 .L012loop_schedule_256:
956         call    _vpaes_schedule_mangle
957         movdqa  %xmm0,%xmm6
958         call    _vpaes_schedule_round
959         decl    %eax
960         jz      .L010schedule_mangle_last
961         call    _vpaes_schedule_mangle
962         pshufd  $255,%xmm0,%xmm0
963         movdqa  %xmm7,20(%esp)
964         movdqa  %xmm6,%xmm7
965         call    .L_vpaes_schedule_low_round
966         movdqa  20(%esp),%xmm7
967         jmp     .L012loop_schedule_256
968 .align  16
969 .L010schedule_mangle_last:
970         leal    384(%ebp),%ebx
971         testl   %edi,%edi
972         jnz     .L013schedule_mangle_last_dec
973         movdqa  256(%ebp,%ecx,1),%xmm1
974 .byte   102,15,56,0,193
975         leal    352(%ebp),%ebx
976         addl    $32,%edx
977 .L013schedule_mangle_last_dec:
978         addl    $-16,%edx
979         pxor    336(%ebp),%xmm0
980         call    _vpaes_schedule_transform
981         movdqu  %xmm0,(%edx)
982         pxor    %xmm0,%xmm0
983         pxor    %xmm1,%xmm1
984         pxor    %xmm2,%xmm2
985         pxor    %xmm3,%xmm3
986         pxor    %xmm4,%xmm4
987         pxor    %xmm5,%xmm5
988         pxor    %xmm6,%xmm6
989         pxor    %xmm7,%xmm7
990         ret
991 .size   _vpaes_schedule_core,.-_vpaes_schedule_core
992 .type   _vpaes_schedule_192_smear,@function
993 .align  16
994 _vpaes_schedule_192_smear:
995         pshufd  $128,%xmm6,%xmm0
996         pxor    %xmm0,%xmm6
997         pshufd  $254,%xmm7,%xmm0
998         pxor    %xmm0,%xmm6
999         movdqa  %xmm6,%xmm0
1000         pxor    %xmm1,%xmm1
1001         movhlps %xmm1,%xmm6
1002         ret
1003 .size   _vpaes_schedule_192_smear,.-_vpaes_schedule_192_smear
1004 .type   _vpaes_schedule_round,@function
1005 .align  16
1006 _vpaes_schedule_round:
1007         movdqa  8(%esp),%xmm2
1008         pxor    %xmm1,%xmm1
1009 .byte   102,15,58,15,202,15
1010 .byte   102,15,58,15,210,15
1011         pxor    %xmm1,%xmm7
1012         pshufd  $255,%xmm0,%xmm0
1013 .byte   102,15,58,15,192,1
1014         movdqa  %xmm2,8(%esp)
1015 .L_vpaes_schedule_low_round:
1016         movdqa  %xmm7,%xmm1
1017         pslldq  $4,%xmm7
1018         pxor    %xmm1,%xmm7
1019         movdqa  %xmm7,%xmm1
1020         pslldq  $8,%xmm7
1021         pxor    %xmm1,%xmm7
1022         pxor    336(%ebp),%xmm7
1023         movdqa  -16(%ebp),%xmm4
1024         movdqa  -48(%ebp),%xmm5
1025         movdqa  %xmm4,%xmm1
1026         pandn   %xmm0,%xmm1
1027         psrld   $4,%xmm1
1028         pand    %xmm4,%xmm0
1029         movdqa  -32(%ebp),%xmm2
1030 .byte   102,15,56,0,208
1031         pxor    %xmm1,%xmm0
1032         movdqa  %xmm5,%xmm3
1033 .byte   102,15,56,0,217
1034         pxor    %xmm2,%xmm3
1035         movdqa  %xmm5,%xmm4
1036 .byte   102,15,56,0,224
1037         pxor    %xmm2,%xmm4
1038         movdqa  %xmm5,%xmm2
1039 .byte   102,15,56,0,211
1040         pxor    %xmm0,%xmm2
1041         movdqa  %xmm5,%xmm3
1042 .byte   102,15,56,0,220
1043         pxor    %xmm1,%xmm3
1044         movdqa  32(%ebp),%xmm4
1045 .byte   102,15,56,0,226
1046         movdqa  48(%ebp),%xmm0
1047 .byte   102,15,56,0,195
1048         pxor    %xmm4,%xmm0
1049         pxor    %xmm7,%xmm0
1050         movdqa  %xmm0,%xmm7
1051         ret
1052 .size   _vpaes_schedule_round,.-_vpaes_schedule_round
1053 .type   _vpaes_schedule_transform,@function
1054 .align  16
1055 _vpaes_schedule_transform:
1056         movdqa  -16(%ebp),%xmm2
1057         movdqa  %xmm2,%xmm1
1058         pandn   %xmm0,%xmm1
1059         psrld   $4,%xmm1
1060         pand    %xmm2,%xmm0
1061         movdqa  (%ebx),%xmm2
1062 .byte   102,15,56,0,208
1063         movdqa  16(%ebx),%xmm0
1064 .byte   102,15,56,0,193
1065         pxor    %xmm2,%xmm0
1066         ret
1067 .size   _vpaes_schedule_transform,.-_vpaes_schedule_transform
1068 .type   _vpaes_schedule_mangle,@function
1069 .align  16
1070 _vpaes_schedule_mangle:
1071         movdqa  %xmm0,%xmm4
1072         movdqa  128(%ebp),%xmm5
1073         testl   %edi,%edi
1074         jnz     .L014schedule_mangle_dec
1075         addl    $16,%edx
1076         pxor    336(%ebp),%xmm4
1077 .byte   102,15,56,0,229
1078         movdqa  %xmm4,%xmm3
1079 .byte   102,15,56,0,229
1080         pxor    %xmm4,%xmm3
1081 .byte   102,15,56,0,229
1082         pxor    %xmm4,%xmm3
1083         jmp     .L015schedule_mangle_both
1084 .align  16
1085 .L014schedule_mangle_dec:
1086         movdqa  -16(%ebp),%xmm2
1087         leal    416(%ebp),%esi
1088         movdqa  %xmm2,%xmm1
1089         pandn   %xmm4,%xmm1
1090         psrld   $4,%xmm1
1091         pand    %xmm2,%xmm4
1092         movdqa  (%esi),%xmm2
1093 .byte   102,15,56,0,212
1094         movdqa  16(%esi),%xmm3
1095 .byte   102,15,56,0,217
1096         pxor    %xmm2,%xmm3
1097 .byte   102,15,56,0,221
1098         movdqa  32(%esi),%xmm2
1099 .byte   102,15,56,0,212
1100         pxor    %xmm3,%xmm2
1101         movdqa  48(%esi),%xmm3
1102 .byte   102,15,56,0,217
1103         pxor    %xmm2,%xmm3
1104 .byte   102,15,56,0,221
1105         movdqa  64(%esi),%xmm2
1106 .byte   102,15,56,0,212
1107         pxor    %xmm3,%xmm2
1108         movdqa  80(%esi),%xmm3
1109 .byte   102,15,56,0,217
1110         pxor    %xmm2,%xmm3
1111 .byte   102,15,56,0,221
1112         movdqa  96(%esi),%xmm2
1113 .byte   102,15,56,0,212
1114         pxor    %xmm3,%xmm2
1115         movdqa  112(%esi),%xmm3
1116 .byte   102,15,56,0,217
1117         pxor    %xmm2,%xmm3
1118         addl    $-16,%edx
1119 .L015schedule_mangle_both:
1120         movdqa  256(%ebp,%ecx,1),%xmm1
1121 .byte   102,15,56,0,217
1122         addl    $-16,%ecx
1123         andl    $48,%ecx
1124         movdqu  %xmm3,(%edx)
1125         ret
1126 .size   _vpaes_schedule_mangle,.-_vpaes_schedule_mangle
1127 .globl  vpaes_set_encrypt_key
1128 .type   vpaes_set_encrypt_key,@function
1129 .align  16
1130 vpaes_set_encrypt_key:
1131 .L_vpaes_set_encrypt_key_begin:
1132         pushl   %ebp
1133         pushl   %ebx
1134         pushl   %esi
1135         pushl   %edi
1136         movl    20(%esp),%esi
1137         leal    -56(%esp),%ebx
1138         movl    24(%esp),%eax
1139         andl    $-16,%ebx
1140         movl    28(%esp),%edx
1141         xchgl   %esp,%ebx
1142         movl    %ebx,48(%esp)
1143         movl    %eax,%ebx
1144         shrl    $5,%ebx
1145         addl    $5,%ebx
1146         movl    %ebx,240(%edx)
1147         movl    $48,%ecx
1148         movl    $0,%edi
1149         leal    .L_vpaes_consts+0x30-.L016pic_point,%ebp
1150         call    _vpaes_schedule_core
1151 .L016pic_point:
1152         movl    48(%esp),%esp
1153         xorl    %eax,%eax
1154         popl    %edi
1155         popl    %esi
1156         popl    %ebx
1157         popl    %ebp
1158         ret
1159 .size   vpaes_set_encrypt_key,.-.L_vpaes_set_encrypt_key_begin
1160 .globl  vpaes_set_decrypt_key
1161 .type   vpaes_set_decrypt_key,@function
1162 .align  16
1163 vpaes_set_decrypt_key:
1164 .L_vpaes_set_decrypt_key_begin:
1165         pushl   %ebp
1166         pushl   %ebx
1167         pushl   %esi
1168         pushl   %edi
1169         movl    20(%esp),%esi
1170         leal    -56(%esp),%ebx
1171         movl    24(%esp),%eax
1172         andl    $-16,%ebx
1173         movl    28(%esp),%edx
1174         xchgl   %esp,%ebx
1175         movl    %ebx,48(%esp)
1176         movl    %eax,%ebx
1177         shrl    $5,%ebx
1178         addl    $5,%ebx
1179         movl    %ebx,240(%edx)
1180         shll    $4,%ebx
1181         leal    16(%edx,%ebx,1),%edx
1182         movl    $1,%edi
1183         movl    %eax,%ecx
1184         shrl    $1,%ecx
1185         andl    $32,%ecx
1186         xorl    $32,%ecx
1187         leal    .L_vpaes_consts+0x30-.L017pic_point,%ebp
1188         call    _vpaes_schedule_core
1189 .L017pic_point:
1190         movl    48(%esp),%esp
1191         xorl    %eax,%eax
1192         popl    %edi
1193         popl    %esi
1194         popl    %ebx
1195         popl    %ebp
1196         ret
1197 .size   vpaes_set_decrypt_key,.-.L_vpaes_set_decrypt_key_begin
1198 .globl  vpaes_encrypt
1199 .type   vpaes_encrypt,@function
1200 .align  16
1201 vpaes_encrypt:
1202 .L_vpaes_encrypt_begin:
1203         pushl   %ebp
1204         pushl   %ebx
1205         pushl   %esi
1206         pushl   %edi
1207         leal    .L_vpaes_consts+0x30-.L018pic_point,%ebp
1208         call    _vpaes_preheat
1209 .L018pic_point:
1210         movl    20(%esp),%esi
1211         leal    -56(%esp),%ebx
1212         movl    24(%esp),%edi
1213         andl    $-16,%ebx
1214         movl    28(%esp),%edx
1215         xchgl   %esp,%ebx
1216         movl    %ebx,48(%esp)
1217         movdqu  (%esi),%xmm0
1218         call    _vpaes_encrypt_core
1219         movdqu  %xmm0,(%edi)
1220         movl    48(%esp),%esp
1221         popl    %edi
1222         popl    %esi
1223         popl    %ebx
1224         popl    %ebp
1225         ret
1226 .size   vpaes_encrypt,.-.L_vpaes_encrypt_begin
1227 .globl  vpaes_decrypt
1228 .type   vpaes_decrypt,@function
1229 .align  16
1230 vpaes_decrypt:
1231 .L_vpaes_decrypt_begin:
1232         pushl   %ebp
1233         pushl   %ebx
1234         pushl   %esi
1235         pushl   %edi
1236         leal    .L_vpaes_consts+0x30-.L019pic_point,%ebp
1237         call    _vpaes_preheat
1238 .L019pic_point:
1239         movl    20(%esp),%esi
1240         leal    -56(%esp),%ebx
1241         movl    24(%esp),%edi
1242         andl    $-16,%ebx
1243         movl    28(%esp),%edx
1244         xchgl   %esp,%ebx
1245         movl    %ebx,48(%esp)
1246         movdqu  (%esi),%xmm0
1247         call    _vpaes_decrypt_core
1248         movdqu  %xmm0,(%edi)
1249         movl    48(%esp),%esp
1250         popl    %edi
1251         popl    %esi
1252         popl    %ebx
1253         popl    %ebp
1254         ret
1255 .size   vpaes_decrypt,.-.L_vpaes_decrypt_begin
1256 .globl  vpaes_cbc_encrypt
1257 .type   vpaes_cbc_encrypt,@function
1258 .align  16
1259 vpaes_cbc_encrypt:
1260 .L_vpaes_cbc_encrypt_begin:
1261         pushl   %ebp
1262         pushl   %ebx
1263         pushl   %esi
1264         pushl   %edi
1265         movl    20(%esp),%esi
1266         movl    24(%esp),%edi
1267         movl    28(%esp),%eax
1268         movl    32(%esp),%edx
1269         subl    $16,%eax
1270         jc      .L020cbc_abort
1271         leal    -56(%esp),%ebx
1272         movl    36(%esp),%ebp
1273         andl    $-16,%ebx
1274         movl    40(%esp),%ecx
1275         xchgl   %esp,%ebx
1276         movdqu  (%ebp),%xmm1
1277         subl    %esi,%edi
1278         movl    %ebx,48(%esp)
1279         movl    %edi,(%esp)
1280         movl    %edx,4(%esp)
1281         movl    %ebp,8(%esp)
1282         movl    %eax,%edi
1283         leal    .L_vpaes_consts+0x30-.L021pic_point,%ebp
1284         call    _vpaes_preheat
1285 .L021pic_point:
1286         cmpl    $0,%ecx
1287         je      .L022cbc_dec_loop
1288         jmp     .L023cbc_enc_loop
1289 .align  16
1290 .L023cbc_enc_loop:
1291         movdqu  (%esi),%xmm0
1292         pxor    %xmm1,%xmm0
1293         call    _vpaes_encrypt_core
1294         movl    (%esp),%ebx
1295         movl    4(%esp),%edx
1296         movdqa  %xmm0,%xmm1
1297         movdqu  %xmm0,(%ebx,%esi,1)
1298         leal    16(%esi),%esi
1299         subl    $16,%edi
1300         jnc     .L023cbc_enc_loop
1301         jmp     .L024cbc_done
1302 .align  16
1303 .L022cbc_dec_loop:
1304         movdqu  (%esi),%xmm0
1305         movdqa  %xmm1,16(%esp)
1306         movdqa  %xmm0,32(%esp)
1307         call    _vpaes_decrypt_core
1308         movl    (%esp),%ebx
1309         movl    4(%esp),%edx
1310         pxor    16(%esp),%xmm0
1311         movdqa  32(%esp),%xmm1
1312         movdqu  %xmm0,(%ebx,%esi,1)
1313         leal    16(%esi),%esi
1314         subl    $16,%edi
1315         jnc     .L022cbc_dec_loop
1316 .L024cbc_done:
1317         movl    8(%esp),%ebx
1318         movl    48(%esp),%esp
1319         movdqu  %xmm1,(%ebx)
1320 .L020cbc_abort:
1321         popl    %edi
1322         popl    %esi
1323         popl    %ebx
1324         popl    %ebp
1325         ret
1326 .size   vpaes_cbc_encrypt,.-.L_vpaes_cbc_encrypt_begin
1327 #endif