updated openssl code
[gnutls:gnutls.git] / lib / accelerated / x86 / macosx / padlock-x86-macosx.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 .align  4
44 _padlock_capability:
45 L_padlock_capability_begin:
46         pushl   %ebx
47         pushfl
48         popl    %eax
49         movl    %eax,%ecx
50         xorl    $2097152,%eax
51         pushl   %eax
52         popfl
53         pushfl
54         popl    %eax
55         xorl    %eax,%ecx
56         xorl    %eax,%eax
57         btl     $21,%ecx
58         jnc     L000noluck
59         .byte   0x0f,0xa2
60         xorl    %eax,%eax
61         cmpl    $0x746e6543,%ebx
62         jne     L000noluck
63         cmpl    $0x48727561,%edx
64         jne     L000noluck
65         cmpl    $0x736c7561,%ecx
66         jne     L000noluck
67         movl    $3221225472,%eax
68         .byte   0x0f,0xa2
69         movl    %eax,%edx
70         xorl    %eax,%eax
71         cmpl    $3221225473,%edx
72         jb      L000noluck
73         movl    $1,%eax
74         .byte   0x0f,0xa2
75         orl     $15,%eax
76         xorl    %ebx,%ebx
77         andl    $4095,%eax
78         cmpl    $1791,%eax
79         sete    %bl
80         movl    $3221225473,%eax
81         pushl   %ebx
82         .byte   0x0f,0xa2
83         popl    %ebx
84         movl    %edx,%eax
85         shll    $4,%ebx
86         andl    $4294967279,%eax
87         orl     %ebx,%eax
88 L000noluck:
89         popl    %ebx
90         ret
91 .globl  _padlock_key_bswap
92 .align  4
93 _padlock_key_bswap:
94 L_padlock_key_bswap_begin:
95         movl    4(%esp),%edx
96         movl    240(%edx),%ecx
97 L001bswap_loop:
98         movl    (%edx),%eax
99         bswap   %eax
100         movl    %eax,(%edx)
101         leal    4(%edx),%edx
102         subl    $1,%ecx
103         jnz     L001bswap_loop
104         ret
105 .globl  _padlock_verify_context
106 .align  4
107 _padlock_verify_context:
108 L_padlock_verify_context_begin:
109         movl    4(%esp),%edx
110         leal    Lpadlock_saved_context-L002verify_pic_point,%eax
111         pushfl
112         call    __padlock_verify_ctx
113 L002verify_pic_point:
114         leal    4(%esp),%esp
115         ret
116 .align  4
117 __padlock_verify_ctx:
118         addl    (%esp),%eax
119         btl     $30,4(%esp)
120         jnc     L003verified
121         cmpl    (%eax),%edx
122         je      L003verified
123         pushfl
124         popfl
125 L003verified:
126         movl    %edx,(%eax)
127         ret
128 .globl  _padlock_reload_key
129 .align  4
130 _padlock_reload_key:
131 L_padlock_reload_key_begin:
132         pushfl
133         popfl
134         ret
135 .globl  _padlock_aes_block
136 .align  4
137 _padlock_aes_block:
138 L_padlock_aes_block_begin:
139         pushl   %edi
140         pushl   %esi
141         pushl   %ebx
142         movl    16(%esp),%edi
143         movl    20(%esp),%esi
144         movl    24(%esp),%edx
145         movl    $1,%ecx
146         leal    32(%edx),%ebx
147         leal    16(%edx),%edx
148 .byte   243,15,167,200
149         popl    %ebx
150         popl    %esi
151         popl    %edi
152         ret
153 .globl  _padlock_ecb_encrypt
154 .align  4
155 _padlock_ecb_encrypt:
156 L_padlock_ecb_encrypt_begin:
157         pushl   %ebp
158         pushl   %ebx
159         pushl   %esi
160         pushl   %edi
161         movl    20(%esp),%edi
162         movl    24(%esp),%esi
163         movl    28(%esp),%edx
164         movl    32(%esp),%ecx
165         testl   $15,%edx
166         jnz     L004ecb_abort
167         testl   $15,%ecx
168         jnz     L004ecb_abort
169         leal    Lpadlock_saved_context-L005ecb_pic_point,%eax
170         pushfl
171         cld
172         call    __padlock_verify_ctx
173 L005ecb_pic_point:
174         leal    16(%edx),%edx
175         xorl    %eax,%eax
176         xorl    %ebx,%ebx
177         testl   $32,(%edx)
178         jnz     L006ecb_aligned
179         testl   $15,%edi
180         setz    %al
181         testl   $15,%esi
182         setz    %bl
183         testl   %ebx,%eax
184         jnz     L006ecb_aligned
185         negl    %eax
186         movl    $512,%ebx
187         notl    %eax
188         leal    -24(%esp),%ebp
189         cmpl    %ebx,%ecx
190         cmovcl  %ecx,%ebx
191         andl    %ebx,%eax
192         movl    %ecx,%ebx
193         negl    %eax
194         andl    $511,%ebx
195         leal    (%eax,%ebp,1),%esp
196         movl    $512,%eax
197         cmovzl  %eax,%ebx
198         movl    %ebp,%eax
199         andl    $-16,%ebp
200         andl    $-16,%esp
201         movl    %eax,16(%ebp)
202         cmpl    %ebx,%ecx
203         ja      L007ecb_loop
204         movl    %esi,%eax
205         cmpl    %esp,%ebp
206         cmovel  %edi,%eax
207         addl    %ecx,%eax
208         negl    %eax
209         andl    $4095,%eax
210         cmpl    $128,%eax
211         movl    $-128,%eax
212         cmovael %ebx,%eax
213         andl    %eax,%ebx
214         jz      L008ecb_unaligned_tail
215         jmp     L007ecb_loop
216 .align  4,0x90
217 L007ecb_loop:
218         movl    %edi,(%ebp)
219         movl    %esi,4(%ebp)
220         movl    %ecx,8(%ebp)
221         movl    %ebx,%ecx
222         movl    %ebx,12(%ebp)
223         testl   $15,%edi
224         cmovnzl %esp,%edi
225         testl   $15,%esi
226         jz      L009ecb_inp_aligned
227         shrl    $2,%ecx
228 .byte   243,165
229         subl    %ebx,%edi
230         movl    %ebx,%ecx
231         movl    %edi,%esi
232 L009ecb_inp_aligned:
233         leal    -16(%edx),%eax
234         leal    16(%edx),%ebx
235         shrl    $4,%ecx
236 .byte   243,15,167,200
237         movl    (%ebp),%edi
238         movl    12(%ebp),%ebx
239         testl   $15,%edi
240         jz      L010ecb_out_aligned
241         movl    %ebx,%ecx
242         leal    (%esp),%esi
243         shrl    $2,%ecx
244 .byte   243,165
245         subl    %ebx,%edi
246 L010ecb_out_aligned:
247         movl    4(%ebp),%esi
248         movl    8(%ebp),%ecx
249         addl    %ebx,%edi
250         addl    %ebx,%esi
251         subl    %ebx,%ecx
252         movl    $512,%ebx
253         jz      L011ecb_break
254         cmpl    %ebx,%ecx
255         jae     L007ecb_loop
256 L008ecb_unaligned_tail:
257         xorl    %eax,%eax
258         cmpl    %ebp,%esp
259         cmovel  %ecx,%eax
260         subl    %eax,%esp
261         movl    %edi,%eax
262         movl    %ecx,%ebx
263         shrl    $2,%ecx
264         leal    (%esp),%edi
265 .byte   243,165
266         movl    %esp,%esi
267         movl    %eax,%edi
268         movl    %ebx,%ecx
269         jmp     L007ecb_loop
270 .align  4,0x90
271 L011ecb_break:
272         cmpl    %ebp,%esp
273         je      L012ecb_done
274         pxor    %xmm0,%xmm0
275         leal    (%esp),%eax
276 L013ecb_bzero:
277         movaps  %xmm0,(%eax)
278         leal    16(%eax),%eax
279         cmpl    %eax,%ebp
280         ja      L013ecb_bzero
281 L012ecb_done:
282         movl    16(%ebp),%ebp
283         leal    24(%ebp),%esp
284         jmp     L014ecb_exit
285 .align  4,0x90
286 L006ecb_aligned:
287         leal    (%esi,%ecx,1),%ebp
288         negl    %ebp
289         andl    $4095,%ebp
290         xorl    %eax,%eax
291         cmpl    $128,%ebp
292         movl    $127,%ebp
293         cmovael %eax,%ebp
294         andl    %ecx,%ebp
295         subl    %ebp,%ecx
296         jz      L015ecb_aligned_tail
297         leal    -16(%edx),%eax
298         leal    16(%edx),%ebx
299         shrl    $4,%ecx
300 .byte   243,15,167,200
301         testl   %ebp,%ebp
302         jz      L014ecb_exit
303 L015ecb_aligned_tail:
304         movl    %ebp,%ecx
305         leal    -24(%esp),%ebp
306         movl    %ebp,%esp
307         movl    %ebp,%eax
308         subl    %ecx,%esp
309         andl    $-16,%ebp
310         andl    $-16,%esp
311         movl    %eax,16(%ebp)
312         movl    %edi,%eax
313         movl    %ecx,%ebx
314         shrl    $2,%ecx
315         leal    (%esp),%edi
316 .byte   243,165
317         movl    %esp,%esi
318         movl    %eax,%edi
319         movl    %ebx,%ecx
320         jmp     L007ecb_loop
321 L014ecb_exit:
322         movl    $1,%eax
323         leal    4(%esp),%esp
324 L004ecb_abort:
325         popl    %edi
326         popl    %esi
327         popl    %ebx
328         popl    %ebp
329         ret
330 .globl  _padlock_cbc_encrypt
331 .align  4
332 _padlock_cbc_encrypt:
333 L_padlock_cbc_encrypt_begin:
334         pushl   %ebp
335         pushl   %ebx
336         pushl   %esi
337         pushl   %edi
338         movl    20(%esp),%edi
339         movl    24(%esp),%esi
340         movl    28(%esp),%edx
341         movl    32(%esp),%ecx
342         testl   $15,%edx
343         jnz     L016cbc_abort
344         testl   $15,%ecx
345         jnz     L016cbc_abort
346         leal    Lpadlock_saved_context-L017cbc_pic_point,%eax
347         pushfl
348         cld
349         call    __padlock_verify_ctx
350 L017cbc_pic_point:
351         leal    16(%edx),%edx
352         xorl    %eax,%eax
353         xorl    %ebx,%ebx
354         testl   $32,(%edx)
355         jnz     L018cbc_aligned
356         testl   $15,%edi
357         setz    %al
358         testl   $15,%esi
359         setz    %bl
360         testl   %ebx,%eax
361         jnz     L018cbc_aligned
362         negl    %eax
363         movl    $512,%ebx
364         notl    %eax
365         leal    -24(%esp),%ebp
366         cmpl    %ebx,%ecx
367         cmovcl  %ecx,%ebx
368         andl    %ebx,%eax
369         movl    %ecx,%ebx
370         negl    %eax
371         andl    $511,%ebx
372         leal    (%eax,%ebp,1),%esp
373         movl    $512,%eax
374         cmovzl  %eax,%ebx
375         movl    %ebp,%eax
376         andl    $-16,%ebp
377         andl    $-16,%esp
378         movl    %eax,16(%ebp)
379         cmpl    %ebx,%ecx
380         ja      L019cbc_loop
381         movl    %esi,%eax
382         cmpl    %esp,%ebp
383         cmovel  %edi,%eax
384         addl    %ecx,%eax
385         negl    %eax
386         andl    $4095,%eax
387         cmpl    $64,%eax
388         movl    $-64,%eax
389         cmovael %ebx,%eax
390         andl    %eax,%ebx
391         jz      L020cbc_unaligned_tail
392         jmp     L019cbc_loop
393 .align  4,0x90
394 L019cbc_loop:
395         movl    %edi,(%ebp)
396         movl    %esi,4(%ebp)
397         movl    %ecx,8(%ebp)
398         movl    %ebx,%ecx
399         movl    %ebx,12(%ebp)
400         testl   $15,%edi
401         cmovnzl %esp,%edi
402         testl   $15,%esi
403         jz      L021cbc_inp_aligned
404         shrl    $2,%ecx
405 .byte   243,165
406         subl    %ebx,%edi
407         movl    %ebx,%ecx
408         movl    %edi,%esi
409 L021cbc_inp_aligned:
410         leal    -16(%edx),%eax
411         leal    16(%edx),%ebx
412         shrl    $4,%ecx
413 .byte   243,15,167,208
414         movaps  (%eax),%xmm0
415         movaps  %xmm0,-16(%edx)
416         movl    (%ebp),%edi
417         movl    12(%ebp),%ebx
418         testl   $15,%edi
419         jz      L022cbc_out_aligned
420         movl    %ebx,%ecx
421         leal    (%esp),%esi
422         shrl    $2,%ecx
423 .byte   243,165
424         subl    %ebx,%edi
425 L022cbc_out_aligned:
426         movl    4(%ebp),%esi
427         movl    8(%ebp),%ecx
428         addl    %ebx,%edi
429         addl    %ebx,%esi
430         subl    %ebx,%ecx
431         movl    $512,%ebx
432         jz      L023cbc_break
433         cmpl    %ebx,%ecx
434         jae     L019cbc_loop
435 L020cbc_unaligned_tail:
436         xorl    %eax,%eax
437         cmpl    %ebp,%esp
438         cmovel  %ecx,%eax
439         subl    %eax,%esp
440         movl    %edi,%eax
441         movl    %ecx,%ebx
442         shrl    $2,%ecx
443         leal    (%esp),%edi
444 .byte   243,165
445         movl    %esp,%esi
446         movl    %eax,%edi
447         movl    %ebx,%ecx
448         jmp     L019cbc_loop
449 .align  4,0x90
450 L023cbc_break:
451         cmpl    %ebp,%esp
452         je      L024cbc_done
453         pxor    %xmm0,%xmm0
454         leal    (%esp),%eax
455 L025cbc_bzero:
456         movaps  %xmm0,(%eax)
457         leal    16(%eax),%eax
458         cmpl    %eax,%ebp
459         ja      L025cbc_bzero
460 L024cbc_done:
461         movl    16(%ebp),%ebp
462         leal    24(%ebp),%esp
463         jmp     L026cbc_exit
464 .align  4,0x90
465 L018cbc_aligned:
466         leal    (%esi,%ecx,1),%ebp
467         negl    %ebp
468         andl    $4095,%ebp
469         xorl    %eax,%eax
470         cmpl    $64,%ebp
471         movl    $63,%ebp
472         cmovael %eax,%ebp
473         andl    %ecx,%ebp
474         subl    %ebp,%ecx
475         jz      L027cbc_aligned_tail
476         leal    -16(%edx),%eax
477         leal    16(%edx),%ebx
478         shrl    $4,%ecx
479 .byte   243,15,167,208
480         movaps  (%eax),%xmm0
481         movaps  %xmm0,-16(%edx)
482         testl   %ebp,%ebp
483         jz      L026cbc_exit
484 L027cbc_aligned_tail:
485         movl    %ebp,%ecx
486         leal    -24(%esp),%ebp
487         movl    %ebp,%esp
488         movl    %ebp,%eax
489         subl    %ecx,%esp
490         andl    $-16,%ebp
491         andl    $-16,%esp
492         movl    %eax,16(%ebp)
493         movl    %edi,%eax
494         movl    %ecx,%ebx
495         shrl    $2,%ecx
496         leal    (%esp),%edi
497 .byte   243,165
498         movl    %esp,%esi
499         movl    %eax,%edi
500         movl    %ebx,%ecx
501         jmp     L019cbc_loop
502 L026cbc_exit:
503         movl    $1,%eax
504         leal    4(%esp),%esp
505 L016cbc_abort:
506         popl    %edi
507         popl    %esi
508         popl    %ebx
509         popl    %ebp
510         ret
511 .globl  _padlock_xstore
512 .align  4
513 _padlock_xstore:
514 L_padlock_xstore_begin:
515         pushl   %edi
516         movl    8(%esp),%edi
517         movl    12(%esp),%edx
518 .byte   15,167,192
519         popl    %edi
520         ret
521 .align  4
522 __win32_segv_handler:
523         movl    $1,%eax
524         movl    4(%esp),%edx
525         movl    12(%esp),%ecx
526         cmpl    $3221225477,(%edx)
527         jne     L028ret
528         addl    $4,184(%ecx)
529         movl    $0,%eax
530 L028ret:
531         ret
532 .globl  _padlock_sha1_oneshot
533 .align  4
534 _padlock_sha1_oneshot:
535 L_padlock_sha1_oneshot_begin:
536         pushl   %edi
537         pushl   %esi
538         xorl    %eax,%eax
539         movl    12(%esp),%edi
540         movl    16(%esp),%esi
541         movl    20(%esp),%ecx
542         movl    %esp,%edx
543         addl    $-128,%esp
544         movups  (%edi),%xmm0
545         andl    $-16,%esp
546         movl    16(%edi),%eax
547         movaps  %xmm0,(%esp)
548         movl    %esp,%edi
549         movl    %eax,16(%esp)
550         xorl    %eax,%eax
551 .byte   243,15,166,200
552         movaps  (%esp),%xmm0
553         movl    16(%esp),%eax
554         movl    %edx,%esp
555         movl    12(%esp),%edi
556         movups  %xmm0,(%edi)
557         movl    %eax,16(%edi)
558         popl    %esi
559         popl    %edi
560         ret
561 .globl  _padlock_sha1_blocks
562 .align  4
563 _padlock_sha1_blocks:
564 L_padlock_sha1_blocks_begin:
565         pushl   %edi
566         pushl   %esi
567         movl    12(%esp),%edi
568         movl    16(%esp),%esi
569         movl    %esp,%edx
570         movl    20(%esp),%ecx
571         addl    $-128,%esp
572         movups  (%edi),%xmm0
573         andl    $-16,%esp
574         movl    16(%edi),%eax
575         movaps  %xmm0,(%esp)
576         movl    %esp,%edi
577         movl    %eax,16(%esp)
578         movl    $-1,%eax
579 .byte   243,15,166,200
580         movaps  (%esp),%xmm0
581         movl    16(%esp),%eax
582         movl    %edx,%esp
583         movl    12(%esp),%edi
584         movups  %xmm0,(%edi)
585         movl    %eax,16(%edi)
586         popl    %esi
587         popl    %edi
588         ret
589 .globl  _padlock_sha256_oneshot
590 .align  4
591 _padlock_sha256_oneshot:
592 L_padlock_sha256_oneshot_begin:
593         pushl   %edi
594         pushl   %esi
595         xorl    %eax,%eax
596         movl    12(%esp),%edi
597         movl    16(%esp),%esi
598         movl    20(%esp),%ecx
599         movl    %esp,%edx
600         addl    $-128,%esp
601         movups  (%edi),%xmm0
602         andl    $-16,%esp
603         movups  16(%edi),%xmm1
604         movaps  %xmm0,(%esp)
605         movl    %esp,%edi
606         movaps  %xmm1,16(%esp)
607         xorl    %eax,%eax
608 .byte   243,15,166,208
609         movaps  (%esp),%xmm0
610         movaps  16(%esp),%xmm1
611         movl    %edx,%esp
612         movl    12(%esp),%edi
613         movups  %xmm0,(%edi)
614         movups  %xmm1,16(%edi)
615         popl    %esi
616         popl    %edi
617         ret
618 .globl  _padlock_sha256_blocks
619 .align  4
620 _padlock_sha256_blocks:
621 L_padlock_sha256_blocks_begin:
622         pushl   %edi
623         pushl   %esi
624         movl    12(%esp),%edi
625         movl    16(%esp),%esi
626         movl    20(%esp),%ecx
627         movl    %esp,%edx
628         addl    $-128,%esp
629         movups  (%edi),%xmm0
630         andl    $-16,%esp
631         movups  16(%edi),%xmm1
632         movaps  %xmm0,(%esp)
633         movl    %esp,%edi
634         movaps  %xmm1,16(%esp)
635         movl    $-1,%eax
636 .byte   243,15,166,208
637         movaps  (%esp),%xmm0
638         movaps  16(%esp),%xmm1
639         movl    %edx,%esp
640         movl    12(%esp),%edi
641         movups  %xmm0,(%edi)
642         movups  %xmm1,16(%edi)
643         popl    %esi
644         popl    %edi
645         ret
646 .globl  _padlock_sha512_blocks
647 .align  4
648 _padlock_sha512_blocks:
649 L_padlock_sha512_blocks_begin:
650         pushl   %edi
651         pushl   %esi
652         movl    12(%esp),%edi
653         movl    16(%esp),%esi
654         movl    20(%esp),%ecx
655         movl    %esp,%edx
656         addl    $-128,%esp
657         movups  (%edi),%xmm0
658         andl    $-16,%esp
659         movups  16(%edi),%xmm1
660         movups  32(%edi),%xmm2
661         movups  48(%edi),%xmm3
662         movaps  %xmm0,(%esp)
663         movl    %esp,%edi
664         movaps  %xmm1,16(%esp)
665         movaps  %xmm2,32(%esp)
666         movaps  %xmm3,48(%esp)
667 .byte   243,15,166,224
668         movaps  (%esp),%xmm0
669         movaps  16(%esp),%xmm1
670         movaps  32(%esp),%xmm2
671         movaps  48(%esp),%xmm3
672         movl    %edx,%esp
673         movl    12(%esp),%edi
674         movups  %xmm0,(%edi)
675         movups  %xmm1,16(%edi)
676         movups  %xmm2,32(%edi)
677         movups  %xmm3,48(%edi)
678         popl    %esi
679         popl    %edi
680         ret
681 .byte   86,73,65,32,80,97,100,108,111,99,107,32,120,56,54,32
682 .byte   109,111,100,117,108,101,44,32,67,82,89,80,84,79,71,65
683 .byte   77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101
684 .byte   110,115,115,108,46,111,114,103,62,0
685 .align  4,0x90
686 .data
687 .align  2,0x90
688 Lpadlock_saved_context:
689 .long   0