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