updated licenses
[gnutls:gnutls.git] / lib / accelerated / x86 / elf / padlock-x86.s
1 # Copyright (c) 2011-2012, Andy Polyakov <appro@openssl.org>
2 # All rights reserved.
3 #
4 # Redistribution and use in source and binary forms, with or without
5 # modification, are permitted provided that the following conditions
6 # are met:
7
8 #     * Redistributions of source code must retain copyright notices,
9 #      this list of conditions and the following disclaimer.
10 #
11 #     * Redistributions in binary form must reproduce the above
12 #      copyright notice, this list of conditions and the following
13 #      disclaimer in the documentation and/or other materials
14 #      provided with the distribution.
15 #
16 #     * Neither the name of the Andy Polyakov nor the names of its
17 #      copyright holder and contributors may be used to endorse or
18 #      promote products derived from this software without specific
19 #      prior written permission.
20 #
21 # ALTERNATIVELY, provided that this notice is retained in full, this
22 # product may be distributed under the terms of the GNU General Public
23 # License (GPL), in which case the provisions of the GPL apply INSTEAD OF
24 # those given above.
25 #
26 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS
27 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
28 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
29 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
30 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
31 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
32 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
33 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
34 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
35 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
36 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37 #
38 # *** This file is auto-generated ***
39 #
40 .file   "devel/perlasm/e_padlock-x86.s"
41 .text
42 .globl  padlock_capability
43 .type   padlock_capability,@function
44 .align  16
45 padlock_capability:
46 .L_padlock_capability_begin:
47         pushl   %ebx
48         pushfl
49         popl    %eax
50         movl    %eax,%ecx
51         xorl    $2097152,%eax
52         pushl   %eax
53         popfl
54         pushfl
55         popl    %eax
56         xorl    %eax,%ecx
57         xorl    %eax,%eax
58         btl     $21,%ecx
59         jnc     .L000noluck
60         .byte   0x0f,0xa2
61         xorl    %eax,%eax
62         cmpl    $0x746e6543,%ebx
63         jne     .L000noluck
64         cmpl    $0x48727561,%edx
65         jne     .L000noluck
66         cmpl    $0x736c7561,%ecx
67         jne     .L000noluck
68         movl    $3221225472,%eax
69         .byte   0x0f,0xa2
70         movl    %eax,%edx
71         xorl    %eax,%eax
72         cmpl    $3221225473,%edx
73         jb      .L000noluck
74         movl    $1,%eax
75         .byte   0x0f,0xa2
76         orl     $15,%eax
77         xorl    %ebx,%ebx
78         andl    $4095,%eax
79         cmpl    $1791,%eax
80         sete    %bl
81         movl    $3221225473,%eax
82         pushl   %ebx
83         .byte   0x0f,0xa2
84         popl    %ebx
85         movl    %edx,%eax
86         shll    $4,%ebx
87         andl    $4294967279,%eax
88         orl     %ebx,%eax
89 .L000noluck:
90         popl    %ebx
91         ret
92 .size   padlock_capability,.-.L_padlock_capability_begin
93 .globl  padlock_key_bswap
94 .type   padlock_key_bswap,@function
95 .align  16
96 padlock_key_bswap:
97 .L_padlock_key_bswap_begin:
98         movl    4(%esp),%edx
99         movl    240(%edx),%ecx
100 .L001bswap_loop:
101         movl    (%edx),%eax
102         bswap   %eax
103         movl    %eax,(%edx)
104         leal    4(%edx),%edx
105         subl    $1,%ecx
106         jnz     .L001bswap_loop
107         ret
108 .size   padlock_key_bswap,.-.L_padlock_key_bswap_begin
109 .globl  padlock_verify_context
110 .type   padlock_verify_context,@function
111 .align  16
112 padlock_verify_context:
113 .L_padlock_verify_context_begin:
114         movl    4(%esp),%edx
115         leal    .Lpadlock_saved_context-.L002verify_pic_point,%eax
116         pushfl
117         call    _padlock_verify_ctx
118 .L002verify_pic_point:
119         leal    4(%esp),%esp
120         ret
121 .size   padlock_verify_context,.-.L_padlock_verify_context_begin
122 .type   _padlock_verify_ctx,@function
123 .align  16
124 _padlock_verify_ctx:
125         addl    (%esp),%eax
126         btl     $30,4(%esp)
127         jnc     .L003verified
128         cmpl    (%eax),%edx
129         je      .L003verified
130         pushfl
131         popfl
132 .L003verified:
133         movl    %edx,(%eax)
134         ret
135 .size   _padlock_verify_ctx,.-_padlock_verify_ctx
136 .globl  padlock_reload_key
137 .type   padlock_reload_key,@function
138 .align  16
139 padlock_reload_key:
140 .L_padlock_reload_key_begin:
141         pushfl
142         popfl
143         ret
144 .size   padlock_reload_key,.-.L_padlock_reload_key_begin
145 .globl  padlock_aes_block
146 .type   padlock_aes_block,@function
147 .align  16
148 padlock_aes_block:
149 .L_padlock_aes_block_begin:
150         pushl   %edi
151         pushl   %esi
152         pushl   %ebx
153         movl    16(%esp),%edi
154         movl    20(%esp),%esi
155         movl    24(%esp),%edx
156         movl    $1,%ecx
157         leal    32(%edx),%ebx
158         leal    16(%edx),%edx
159 .byte   243,15,167,200
160         popl    %ebx
161         popl    %esi
162         popl    %edi
163         ret
164 .size   padlock_aes_block,.-.L_padlock_aes_block_begin
165 .globl  padlock_ecb_encrypt
166 .type   padlock_ecb_encrypt,@function
167 .align  16
168 padlock_ecb_encrypt:
169 .L_padlock_ecb_encrypt_begin:
170         pushl   %ebp
171         pushl   %ebx
172         pushl   %esi
173         pushl   %edi
174         movl    20(%esp),%edi
175         movl    24(%esp),%esi
176         movl    28(%esp),%edx
177         movl    32(%esp),%ecx
178         testl   $15,%edx
179         jnz     .L004ecb_abort
180         testl   $15,%ecx
181         jnz     .L004ecb_abort
182         leal    .Lpadlock_saved_context-.L005ecb_pic_point,%eax
183         pushfl
184         cld
185         call    _padlock_verify_ctx
186 .L005ecb_pic_point:
187         leal    16(%edx),%edx
188         xorl    %eax,%eax
189         xorl    %ebx,%ebx
190         cmpl    $128,%ecx
191         jbe     .L006ecb_short
192         testl   $32,(%edx)
193         jnz     .L007ecb_aligned
194         testl   $15,%edi
195         setz    %al
196         testl   $15,%esi
197         setz    %bl
198         testl   %ebx,%eax
199         jnz     .L007ecb_aligned
200         negl    %eax
201         movl    $512,%ebx
202         notl    %eax
203         leal    -24(%esp),%ebp
204         cmpl    %ebx,%ecx
205         cmovcl  %ecx,%ebx
206         andl    %ebx,%eax
207         movl    %ecx,%ebx
208         negl    %eax
209         andl    $511,%ebx
210         leal    (%eax,%ebp,1),%esp
211         andl    $-16,%esp
212         jmp     .L008ecb_loop
213 .align  16
214 .L008ecb_loop:
215         movl    %edi,(%ebp)
216         movl    %esi,4(%ebp)
217         movl    %ecx,8(%ebp)
218         movl    %ebx,%ecx
219         movl    %ebx,12(%ebp)
220         testl   $15,%edi
221         cmovnzl %esp,%edi
222         testl   $15,%esi
223         jz      .L009ecb_inp_aligned
224         shrl    $2,%ecx
225 .byte   243,165
226         subl    %ebx,%edi
227         movl    %ebx,%ecx
228         movl    %edi,%esi
229 .L009ecb_inp_aligned:
230         leal    -16(%edx),%eax
231         leal    16(%edx),%ebx
232         shrl    $4,%ecx
233 .byte   243,15,167,200
234         movl    (%ebp),%edi
235         movl    12(%ebp),%ebx
236         testl   $15,%edi
237         jz      .L010ecb_out_aligned
238         movl    %ebx,%ecx
239         shrl    $2,%ecx
240         leal    (%esp),%esi
241 .byte   243,165
242         subl    %ebx,%edi
243 .L010ecb_out_aligned:
244         movl    4(%ebp),%esi
245         movl    8(%ebp),%ecx
246         addl    %ebx,%edi
247         addl    %ebx,%esi
248         subl    %ebx,%ecx
249         movl    $512,%ebx
250         jnz     .L008ecb_loop
251         cmpl    %ebp,%esp
252         je      .L011ecb_done
253         pxor    %xmm0,%xmm0
254         leal    (%esp),%eax
255 .L012ecb_bzero:
256         movaps  %xmm0,(%eax)
257         leal    16(%eax),%eax
258         cmpl    %eax,%ebp
259         ja      .L012ecb_bzero
260 .L011ecb_done:
261         leal    24(%ebp),%esp
262         jmp     .L013ecb_exit
263 .align  16
264 .L006ecb_short:
265         xorl    %eax,%eax
266         leal    -24(%esp),%ebp
267         subl    %ecx,%eax
268         leal    (%eax,%ebp,1),%esp
269         andl    $-16,%esp
270         xorl    %ebx,%ebx
271 .L014ecb_short_copy:
272         movups  (%esi,%ebx,1),%xmm0
273         leal    16(%ebx),%ebx
274         cmpl    %ebx,%ecx
275         movaps  %xmm0,-16(%esp,%ebx,1)
276         ja      .L014ecb_short_copy
277         movl    %esp,%esi
278         movl    %ecx,%ebx
279         jmp     .L008ecb_loop
280 .align  16
281 .L007ecb_aligned:
282         leal    -16(%edx),%eax
283         leal    16(%edx),%ebx
284         shrl    $4,%ecx
285 .byte   243,15,167,200
286 .L013ecb_exit:
287         movl    $1,%eax
288         leal    4(%esp),%esp
289 .L004ecb_abort:
290         popl    %edi
291         popl    %esi
292         popl    %ebx
293         popl    %ebp
294         ret
295 .size   padlock_ecb_encrypt,.-.L_padlock_ecb_encrypt_begin
296 .globl  padlock_cbc_encrypt
297 .type   padlock_cbc_encrypt,@function
298 .align  16
299 padlock_cbc_encrypt:
300 .L_padlock_cbc_encrypt_begin:
301         pushl   %ebp
302         pushl   %ebx
303         pushl   %esi
304         pushl   %edi
305         movl    20(%esp),%edi
306         movl    24(%esp),%esi
307         movl    28(%esp),%edx
308         movl    32(%esp),%ecx
309         testl   $15,%edx
310         jnz     .L015cbc_abort
311         testl   $15,%ecx
312         jnz     .L015cbc_abort
313         leal    .Lpadlock_saved_context-.L016cbc_pic_point,%eax
314         pushfl
315         cld
316         call    _padlock_verify_ctx
317 .L016cbc_pic_point:
318         leal    16(%edx),%edx
319         xorl    %eax,%eax
320         xorl    %ebx,%ebx
321         cmpl    $64,%ecx
322         jbe     .L017cbc_short
323         testl   $32,(%edx)
324         jnz     .L018cbc_aligned
325         testl   $15,%edi
326         setz    %al
327         testl   $15,%esi
328         setz    %bl
329         testl   %ebx,%eax
330         jnz     .L018cbc_aligned
331         negl    %eax
332         movl    $512,%ebx
333         notl    %eax
334         leal    -24(%esp),%ebp
335         cmpl    %ebx,%ecx
336         cmovcl  %ecx,%ebx
337         andl    %ebx,%eax
338         movl    %ecx,%ebx
339         negl    %eax
340         andl    $511,%ebx
341         leal    (%eax,%ebp,1),%esp
342         andl    $-16,%esp
343         jmp     .L019cbc_loop
344 .align  16
345 .L019cbc_loop:
346         movl    %edi,(%ebp)
347         movl    %esi,4(%ebp)
348         movl    %ecx,8(%ebp)
349         movl    %ebx,%ecx
350         movl    %ebx,12(%ebp)
351         testl   $15,%edi
352         cmovnzl %esp,%edi
353         testl   $15,%esi
354         jz      .L020cbc_inp_aligned
355         shrl    $2,%ecx
356 .byte   243,165
357         subl    %ebx,%edi
358         movl    %ebx,%ecx
359         movl    %edi,%esi
360 .L020cbc_inp_aligned:
361         leal    -16(%edx),%eax
362         leal    16(%edx),%ebx
363         shrl    $4,%ecx
364 .byte   243,15,167,208
365         movaps  (%eax),%xmm0
366         movaps  %xmm0,-16(%edx)
367         movl    (%ebp),%edi
368         movl    12(%ebp),%ebx
369         testl   $15,%edi
370         jz      .L021cbc_out_aligned
371         movl    %ebx,%ecx
372         shrl    $2,%ecx
373         leal    (%esp),%esi
374 .byte   243,165
375         subl    %ebx,%edi
376 .L021cbc_out_aligned:
377         movl    4(%ebp),%esi
378         movl    8(%ebp),%ecx
379         addl    %ebx,%edi
380         addl    %ebx,%esi
381         subl    %ebx,%ecx
382         movl    $512,%ebx
383         jnz     .L019cbc_loop
384         cmpl    %ebp,%esp
385         je      .L022cbc_done
386         pxor    %xmm0,%xmm0
387         leal    (%esp),%eax
388 .L023cbc_bzero:
389         movaps  %xmm0,(%eax)
390         leal    16(%eax),%eax
391         cmpl    %eax,%ebp
392         ja      .L023cbc_bzero
393 .L022cbc_done:
394         leal    24(%ebp),%esp
395         jmp     .L024cbc_exit
396 .align  16
397 .L017cbc_short:
398         xorl    %eax,%eax
399         leal    -24(%esp),%ebp
400         subl    %ecx,%eax
401         leal    (%eax,%ebp,1),%esp
402         andl    $-16,%esp
403         xorl    %ebx,%ebx
404 .L025cbc_short_copy:
405         movups  (%esi,%ebx,1),%xmm0
406         leal    16(%ebx),%ebx
407         cmpl    %ebx,%ecx
408         movaps  %xmm0,-16(%esp,%ebx,1)
409         ja      .L025cbc_short_copy
410         movl    %esp,%esi
411         movl    %ecx,%ebx
412         jmp     .L019cbc_loop
413 .align  16
414 .L018cbc_aligned:
415         leal    -16(%edx),%eax
416         leal    16(%edx),%ebx
417         shrl    $4,%ecx
418 .byte   243,15,167,208
419         movaps  (%eax),%xmm0
420         movaps  %xmm0,-16(%edx)
421 .L024cbc_exit:
422         movl    $1,%eax
423         leal    4(%esp),%esp
424 .L015cbc_abort:
425         popl    %edi
426         popl    %esi
427         popl    %ebx
428         popl    %ebp
429         ret
430 .size   padlock_cbc_encrypt,.-.L_padlock_cbc_encrypt_begin
431 .globl  padlock_xstore
432 .type   padlock_xstore,@function
433 .align  16
434 padlock_xstore:
435 .L_padlock_xstore_begin:
436         pushl   %edi
437         movl    8(%esp),%edi
438         movl    12(%esp),%edx
439 .byte   15,167,192
440         popl    %edi
441         ret
442 .size   padlock_xstore,.-.L_padlock_xstore_begin
443 .type   _win32_segv_handler,@function
444 .align  16
445 _win32_segv_handler:
446         movl    $1,%eax
447         movl    4(%esp),%edx
448         movl    12(%esp),%ecx
449         cmpl    $3221225477,(%edx)
450         jne     .L026ret
451         addl    $4,184(%ecx)
452         movl    $0,%eax
453 .L026ret:
454         ret
455 .size   _win32_segv_handler,.-_win32_segv_handler
456 .globl  padlock_sha1_oneshot
457 .type   padlock_sha1_oneshot,@function
458 .align  16
459 padlock_sha1_oneshot:
460 .L_padlock_sha1_oneshot_begin:
461         pushl   %edi
462         pushl   %esi
463         xorl    %eax,%eax
464         movl    12(%esp),%edi
465         movl    16(%esp),%esi
466         movl    20(%esp),%ecx
467         movl    %esp,%edx
468         addl    $-128,%esp
469         movups  (%edi),%xmm0
470         andl    $-16,%esp
471         movl    16(%edi),%eax
472         movaps  %xmm0,(%esp)
473         movl    %esp,%edi
474         movl    %eax,16(%esp)
475         xorl    %eax,%eax
476 .byte   243,15,166,200
477         movaps  (%esp),%xmm0
478         movl    16(%esp),%eax
479         movl    %edx,%esp
480         movl    12(%esp),%edi
481         movups  %xmm0,(%edi)
482         movl    %eax,16(%edi)
483         popl    %esi
484         popl    %edi
485         ret
486 .size   padlock_sha1_oneshot,.-.L_padlock_sha1_oneshot_begin
487 .globl  padlock_sha1_blocks
488 .type   padlock_sha1_blocks,@function
489 .align  16
490 padlock_sha1_blocks:
491 .L_padlock_sha1_blocks_begin:
492         pushl   %edi
493         pushl   %esi
494         movl    12(%esp),%edi
495         movl    16(%esp),%esi
496         movl    %esp,%edx
497         movl    20(%esp),%ecx
498         addl    $-128,%esp
499         movups  (%edi),%xmm0
500         andl    $-16,%esp
501         movl    16(%edi),%eax
502         movaps  %xmm0,(%esp)
503         movl    %esp,%edi
504         movl    %eax,16(%esp)
505         movl    $-1,%eax
506 .byte   243,15,166,200
507         movaps  (%esp),%xmm0
508         movl    16(%esp),%eax
509         movl    %edx,%esp
510         movl    12(%esp),%edi
511         movups  %xmm0,(%edi)
512         movl    %eax,16(%edi)
513         popl    %esi
514         popl    %edi
515         ret
516 .size   padlock_sha1_blocks,.-.L_padlock_sha1_blocks_begin
517 .globl  padlock_sha256_oneshot
518 .type   padlock_sha256_oneshot,@function
519 .align  16
520 padlock_sha256_oneshot:
521 .L_padlock_sha256_oneshot_begin:
522         pushl   %edi
523         pushl   %esi
524         xorl    %eax,%eax
525         movl    12(%esp),%edi
526         movl    16(%esp),%esi
527         movl    20(%esp),%ecx
528         movl    %esp,%edx
529         addl    $-128,%esp
530         movups  (%edi),%xmm0
531         andl    $-16,%esp
532         movups  16(%edi),%xmm1
533         movaps  %xmm0,(%esp)
534         movl    %esp,%edi
535         movaps  %xmm1,16(%esp)
536         xorl    %eax,%eax
537 .byte   243,15,166,208
538         movaps  (%esp),%xmm0
539         movaps  16(%esp),%xmm1
540         movl    %edx,%esp
541         movl    12(%esp),%edi
542         movups  %xmm0,(%edi)
543         movups  %xmm1,16(%edi)
544         popl    %esi
545         popl    %edi
546         ret
547 .size   padlock_sha256_oneshot,.-.L_padlock_sha256_oneshot_begin
548 .globl  padlock_sha256_blocks
549 .type   padlock_sha256_blocks,@function
550 .align  16
551 padlock_sha256_blocks:
552 .L_padlock_sha256_blocks_begin:
553         pushl   %edi
554         pushl   %esi
555         movl    12(%esp),%edi
556         movl    16(%esp),%esi
557         movl    20(%esp),%ecx
558         movl    %esp,%edx
559         addl    $-128,%esp
560         movups  (%edi),%xmm0
561         andl    $-16,%esp
562         movups  16(%edi),%xmm1
563         movaps  %xmm0,(%esp)
564         movl    %esp,%edi
565         movaps  %xmm1,16(%esp)
566         movl    $-1,%eax
567 .byte   243,15,166,208
568         movaps  (%esp),%xmm0
569         movaps  16(%esp),%xmm1
570         movl    %edx,%esp
571         movl    12(%esp),%edi
572         movups  %xmm0,(%edi)
573         movups  %xmm1,16(%edi)
574         popl    %esi
575         popl    %edi
576         ret
577 .size   padlock_sha256_blocks,.-.L_padlock_sha256_blocks_begin
578 .globl  padlock_sha512_blocks
579 .type   padlock_sha512_blocks,@function
580 .align  16
581 padlock_sha512_blocks:
582 .L_padlock_sha512_blocks_begin:
583         pushl   %edi
584         pushl   %esi
585         movl    12(%esp),%edi
586         movl    16(%esp),%esi
587         movl    20(%esp),%ecx
588         movl    %esp,%edx
589         addl    $-128,%esp
590         movups  (%edi),%xmm0
591         andl    $-16,%esp
592         movups  16(%edi),%xmm1
593         movups  32(%edi),%xmm2
594         movups  48(%edi),%xmm3
595         movaps  %xmm0,(%esp)
596         movl    %esp,%edi
597         movaps  %xmm1,16(%esp)
598         movaps  %xmm2,32(%esp)
599         movaps  %xmm3,48(%esp)
600 .byte   243,15,166,224
601         movaps  (%esp),%xmm0
602         movaps  16(%esp),%xmm1
603         movaps  32(%esp),%xmm2
604         movaps  48(%esp),%xmm3
605         movl    %edx,%esp
606         movl    12(%esp),%edi
607         movups  %xmm0,(%edi)
608         movups  %xmm1,16(%edi)
609         movups  %xmm2,32(%edi)
610         movups  %xmm3,48(%edi)
611         popl    %esi
612         popl    %edi
613         ret
614 .size   padlock_sha512_blocks,.-.L_padlock_sha512_blocks_begin
615 .byte   86,73,65,32,80,97,100,108,111,99,107,32,120,56,54,32
616 .byte   109,111,100,117,108,101,44,32,67,82,89,80,84,79,71,65
617 .byte   77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101
618 .byte   110,115,115,108,46,111,114,103,62,0
619 .align  16
620 .data
621 .align  4
622 .Lpadlock_saved_context:
623 .long   0
624
625 .section .note.GNU-stack,"",%progbits