use C's style comments to compile in old MacOSX systems. Reported by Ryan Schmidt.
[gnutls:gnutls.git] / lib / accelerated / x86 / macosx / padlock-x86-64-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 .text   
43 .globl  _padlock_capability
44
45 .p2align        4
46 _padlock_capability:
47         movq    %rbx,%r8
48         xorl    %eax,%eax
49         cpuid
50         xorl    %eax,%eax
51         cmpl    $1953391939,%ebx
52         jne     L$noluck
53         cmpl    $1215460705,%edx
54         jne     L$noluck
55         cmpl    $1936487777,%ecx
56         jne     L$noluck
57         movl    $3221225472,%eax
58         cpuid
59         movl    %eax,%edx
60         xorl    %eax,%eax
61         cmpl    $3221225473,%edx
62         jb      L$noluck
63         movl    $3221225473,%eax
64         cpuid
65         movl    %edx,%eax
66         andl    $4294967279,%eax
67         orl     $16,%eax
68 L$noluck:
69         movq    %r8,%rbx
70         .byte   0xf3,0xc3
71
72
73 .globl  _padlock_key_bswap
74
75 .p2align        4
76 _padlock_key_bswap:
77         movl    240(%rdi),%edx
78 L$bswap_loop:
79         movl    (%rdi),%eax
80         bswapl  %eax
81         movl    %eax,(%rdi)
82         leaq    4(%rdi),%rdi
83         subl    $1,%edx
84         jnz     L$bswap_loop
85         .byte   0xf3,0xc3
86
87
88 .globl  _padlock_verify_context
89
90 .p2align        4
91 _padlock_verify_context:
92         movq    %rdi,%rdx
93         pushf
94         leaq    L$padlock_saved_context(%rip),%rax
95         call    _padlock_verify_ctx
96         leaq    8(%rsp),%rsp
97         .byte   0xf3,0xc3
98
99
100
101 .p2align        4
102 _padlock_verify_ctx:
103         movq    8(%rsp),%r8
104         btq     $30,%r8
105         jnc     L$verified
106         cmpq    (%rax),%rdx
107         je      L$verified
108         pushf
109         popf
110 L$verified:
111         movq    %rdx,(%rax)
112         .byte   0xf3,0xc3
113
114
115 .globl  _padlock_reload_key
116
117 .p2align        4
118 _padlock_reload_key:
119         pushf
120         popf
121         .byte   0xf3,0xc3
122
123
124 .globl  _padlock_aes_block
125
126 .p2align        4
127 _padlock_aes_block:
128         movq    %rbx,%r8
129         movq    $1,%rcx
130         leaq    32(%rdx),%rbx
131         leaq    16(%rdx),%rdx
132 .byte   0xf3,0x0f,0xa7,0xc8     
133         movq    %r8,%rbx
134         .byte   0xf3,0xc3
135
136
137 .globl  _padlock_xstore
138
139 .p2align        4
140 _padlock_xstore:
141         movl    %esi,%edx
142 .byte   0x0f,0xa7,0xc0          
143         .byte   0xf3,0xc3
144
145
146 .globl  _padlock_sha1_oneshot
147
148 .p2align        4
149 _padlock_sha1_oneshot:
150         movq    %rdx,%rcx
151         movq    %rdi,%rdx
152         movups  (%rdi),%xmm0
153         subq    $128+8,%rsp
154         movl    16(%rdi),%eax
155         movaps  %xmm0,(%rsp)
156         movq    %rsp,%rdi
157         movl    %eax,16(%rsp)
158         xorq    %rax,%rax
159 .byte   0xf3,0x0f,0xa6,0xc8     
160         movaps  (%rsp),%xmm0
161         movl    16(%rsp),%eax
162         addq    $128+8,%rsp
163         movups  %xmm0,(%rdx)
164         movl    %eax,16(%rdx)
165         .byte   0xf3,0xc3
166
167
168 .globl  _padlock_sha1_blocks
169
170 .p2align        4
171 _padlock_sha1_blocks:
172         movq    %rdx,%rcx
173         movq    %rdi,%rdx
174         movups  (%rdi),%xmm0
175         subq    $128+8,%rsp
176         movl    16(%rdi),%eax
177         movaps  %xmm0,(%rsp)
178         movq    %rsp,%rdi
179         movl    %eax,16(%rsp)
180         movq    $-1,%rax
181 .byte   0xf3,0x0f,0xa6,0xc8     
182         movaps  (%rsp),%xmm0
183         movl    16(%rsp),%eax
184         addq    $128+8,%rsp
185         movups  %xmm0,(%rdx)
186         movl    %eax,16(%rdx)
187         .byte   0xf3,0xc3
188
189
190 .globl  _padlock_sha256_oneshot
191
192 .p2align        4
193 _padlock_sha256_oneshot:
194         movq    %rdx,%rcx
195         movq    %rdi,%rdx
196         movups  (%rdi),%xmm0
197         subq    $128+8,%rsp
198         movups  16(%rdi),%xmm1
199         movaps  %xmm0,(%rsp)
200         movq    %rsp,%rdi
201         movaps  %xmm1,16(%rsp)
202         xorq    %rax,%rax
203 .byte   0xf3,0x0f,0xa6,0xd0     
204         movaps  (%rsp),%xmm0
205         movaps  16(%rsp),%xmm1
206         addq    $128+8,%rsp
207         movups  %xmm0,(%rdx)
208         movups  %xmm1,16(%rdx)
209         .byte   0xf3,0xc3
210
211
212 .globl  _padlock_sha256_blocks
213
214 .p2align        4
215 _padlock_sha256_blocks:
216         movq    %rdx,%rcx
217         movq    %rdi,%rdx
218         movups  (%rdi),%xmm0
219         subq    $128+8,%rsp
220         movups  16(%rdi),%xmm1
221         movaps  %xmm0,(%rsp)
222         movq    %rsp,%rdi
223         movaps  %xmm1,16(%rsp)
224         movq    $-1,%rax
225 .byte   0xf3,0x0f,0xa6,0xd0     
226         movaps  (%rsp),%xmm0
227         movaps  16(%rsp),%xmm1
228         addq    $128+8,%rsp
229         movups  %xmm0,(%rdx)
230         movups  %xmm1,16(%rdx)
231         .byte   0xf3,0xc3
232
233
234 .globl  _padlock_sha512_blocks
235
236 .p2align        4
237 _padlock_sha512_blocks:
238         movq    %rdx,%rcx
239         movq    %rdi,%rdx
240         movups  (%rdi),%xmm0
241         subq    $128+8,%rsp
242         movups  16(%rdi),%xmm1
243         movups  32(%rdi),%xmm2
244         movups  48(%rdi),%xmm3
245         movaps  %xmm0,(%rsp)
246         movq    %rsp,%rdi
247         movaps  %xmm1,16(%rsp)
248         movaps  %xmm2,32(%rsp)
249         movaps  %xmm3,48(%rsp)
250 .byte   0xf3,0x0f,0xa6,0xe0     
251         movaps  (%rsp),%xmm0
252         movaps  16(%rsp),%xmm1
253         movaps  32(%rsp),%xmm2
254         movaps  48(%rsp),%xmm3
255         addq    $128+8,%rsp
256         movups  %xmm0,(%rdx)
257         movups  %xmm1,16(%rdx)
258         movups  %xmm2,32(%rdx)
259         movups  %xmm3,48(%rdx)
260         .byte   0xf3,0xc3
261
262 .globl  _padlock_ecb_encrypt
263
264 .p2align        4
265 _padlock_ecb_encrypt:
266         pushq   %rbp
267         pushq   %rbx
268
269         xorl    %eax,%eax
270         testq   $15,%rdx
271         jnz     L$ecb_abort
272         testq   $15,%rcx
273         jnz     L$ecb_abort
274         leaq    L$padlock_saved_context(%rip),%rax
275         pushf
276         cld
277         call    _padlock_verify_ctx
278         leaq    16(%rdx),%rdx
279         xorl    %eax,%eax
280         xorl    %ebx,%ebx
281         testl   $32,(%rdx)
282         jnz     L$ecb_aligned
283         testq   $15,%rdi
284         setz    %al
285         testq   $15,%rsi
286         setz    %bl
287         testl   %ebx,%eax
288         jnz     L$ecb_aligned
289         negq    %rax
290         movq    $512,%rbx
291         notq    %rax
292         leaq    (%rsp),%rbp
293         cmpq    %rbx,%rcx
294         cmovcq  %rcx,%rbx
295         andq    %rbx,%rax
296         movq    %rcx,%rbx
297         negq    %rax
298         andq    $512-1,%rbx
299         leaq    (%rax,%rbp,1),%rsp
300         movq    $512,%rax
301         cmovzq  %rax,%rbx
302         cmpq    %rbx,%rcx
303         ja      L$ecb_loop
304         movq    %rsi,%rax
305         cmpq    %rsp,%rbp
306         cmoveq  %rdi,%rax
307         addq    %rcx,%rax
308         negq    %rax
309         andq    $4095,%rax
310         cmpq    $128,%rax
311         movq    $-128,%rax
312         cmovaeq %rbx,%rax
313         andq    %rax,%rbx
314         jz      L$ecb_unaligned_tail
315         jmp     L$ecb_loop
316 .p2align        4
317 L$ecb_loop:
318         cmpq    %rcx,%rbx
319         cmovaq  %rcx,%rbx
320         movq    %rdi,%r8
321         movq    %rsi,%r9
322         movq    %rcx,%r10
323         movq    %rbx,%rcx
324         movq    %rbx,%r11
325         testq   $15,%rdi
326         cmovnzq %rsp,%rdi
327         testq   $15,%rsi
328         jz      L$ecb_inp_aligned
329         shrq    $3,%rcx
330 .byte   0xf3,0x48,0xa5          
331         subq    %rbx,%rdi
332         movq    %rbx,%rcx
333         movq    %rdi,%rsi
334 L$ecb_inp_aligned:
335         leaq    -16(%rdx),%rax
336         leaq    16(%rdx),%rbx
337         shrq    $4,%rcx
338 .byte   0xf3,0x0f,0xa7,200      
339         movq    %r8,%rdi
340         movq    %r11,%rbx
341         testq   $15,%rdi
342         jz      L$ecb_out_aligned
343         movq    %rbx,%rcx
344         leaq    (%rsp),%rsi
345         shrq    $3,%rcx
346 .byte   0xf3,0x48,0xa5          
347         subq    %rbx,%rdi
348 L$ecb_out_aligned:
349         movq    %r9,%rsi
350         movq    %r10,%rcx
351         addq    %rbx,%rdi
352         addq    %rbx,%rsi
353         subq    %rbx,%rcx
354         movq    $512,%rbx
355         jz      L$ecb_break
356         cmpq    %rbx,%rcx
357         jae     L$ecb_loop
358 L$ecb_unaligned_tail:
359         xorl    %eax,%eax
360         cmpq    %rsp,%rbp
361         cmoveq  %rcx,%rax
362         movq    %rdi,%r8
363         movq    %rcx,%rbx
364         subq    %rax,%rsp
365         shrq    $3,%rcx
366         leaq    (%rsp),%rdi
367 .byte   0xf3,0x48,0xa5          
368         movq    %rsp,%rsi
369         movq    %r8,%rdi
370         movq    %rbx,%rcx
371         jmp     L$ecb_loop
372 .p2align        4
373 L$ecb_break:
374         cmpq    %rbp,%rsp
375         je      L$ecb_done
376
377         pxor    %xmm0,%xmm0
378         leaq    (%rsp),%rax
379 L$ecb_bzero:
380         movaps  %xmm0,(%rax)
381         leaq    16(%rax),%rax
382         cmpq    %rax,%rbp
383         ja      L$ecb_bzero
384
385 L$ecb_done:
386         leaq    (%rbp),%rsp
387         jmp     L$ecb_exit
388
389 .p2align        4
390 L$ecb_aligned:
391         leaq    (%rsi,%rcx,1),%rbp
392         negq    %rbp
393         andq    $4095,%rbp
394         xorl    %eax,%eax
395         cmpq    $128,%rbp
396         movq    $128-1,%rbp
397         cmovaeq %rax,%rbp
398         andq    %rcx,%rbp
399         subq    %rbp,%rcx
400         jz      L$ecb_aligned_tail
401         leaq    -16(%rdx),%rax
402         leaq    16(%rdx),%rbx
403         shrq    $4,%rcx
404 .byte   0xf3,0x0f,0xa7,200      
405         testq   %rbp,%rbp
406         jz      L$ecb_exit
407
408 L$ecb_aligned_tail:
409         movq    %rdi,%r8
410         movq    %rbp,%rbx
411         movq    %rbp,%rcx
412         leaq    (%rsp),%rbp
413         subq    %rcx,%rsp
414         shrq    $3,%rcx
415         leaq    (%rsp),%rdi
416 .byte   0xf3,0x48,0xa5          
417         leaq    (%r8),%rdi
418         leaq    (%rsp),%rsi
419         movq    %rbx,%rcx
420         jmp     L$ecb_loop
421 L$ecb_exit:
422         movl    $1,%eax
423         leaq    8(%rsp),%rsp
424 L$ecb_abort:
425         popq    %rbx
426         popq    %rbp
427         .byte   0xf3,0xc3
428
429 .globl  _padlock_cbc_encrypt
430
431 .p2align        4
432 _padlock_cbc_encrypt:
433         pushq   %rbp
434         pushq   %rbx
435
436         xorl    %eax,%eax
437         testq   $15,%rdx
438         jnz     L$cbc_abort
439         testq   $15,%rcx
440         jnz     L$cbc_abort
441         leaq    L$padlock_saved_context(%rip),%rax
442         pushf
443         cld
444         call    _padlock_verify_ctx
445         leaq    16(%rdx),%rdx
446         xorl    %eax,%eax
447         xorl    %ebx,%ebx
448         testl   $32,(%rdx)
449         jnz     L$cbc_aligned
450         testq   $15,%rdi
451         setz    %al
452         testq   $15,%rsi
453         setz    %bl
454         testl   %ebx,%eax
455         jnz     L$cbc_aligned
456         negq    %rax
457         movq    $512,%rbx
458         notq    %rax
459         leaq    (%rsp),%rbp
460         cmpq    %rbx,%rcx
461         cmovcq  %rcx,%rbx
462         andq    %rbx,%rax
463         movq    %rcx,%rbx
464         negq    %rax
465         andq    $512-1,%rbx
466         leaq    (%rax,%rbp,1),%rsp
467         movq    $512,%rax
468         cmovzq  %rax,%rbx
469         cmpq    %rbx,%rcx
470         ja      L$cbc_loop
471         movq    %rsi,%rax
472         cmpq    %rsp,%rbp
473         cmoveq  %rdi,%rax
474         addq    %rcx,%rax
475         negq    %rax
476         andq    $4095,%rax
477         cmpq    $64,%rax
478         movq    $-64,%rax
479         cmovaeq %rbx,%rax
480         andq    %rax,%rbx
481         jz      L$cbc_unaligned_tail
482         jmp     L$cbc_loop
483 .p2align        4
484 L$cbc_loop:
485         cmpq    %rcx,%rbx
486         cmovaq  %rcx,%rbx
487         movq    %rdi,%r8
488         movq    %rsi,%r9
489         movq    %rcx,%r10
490         movq    %rbx,%rcx
491         movq    %rbx,%r11
492         testq   $15,%rdi
493         cmovnzq %rsp,%rdi
494         testq   $15,%rsi
495         jz      L$cbc_inp_aligned
496         shrq    $3,%rcx
497 .byte   0xf3,0x48,0xa5          
498         subq    %rbx,%rdi
499         movq    %rbx,%rcx
500         movq    %rdi,%rsi
501 L$cbc_inp_aligned:
502         leaq    -16(%rdx),%rax
503         leaq    16(%rdx),%rbx
504         shrq    $4,%rcx
505 .byte   0xf3,0x0f,0xa7,208      
506         movdqa  (%rax),%xmm0
507         movdqa  %xmm0,-16(%rdx)
508         movq    %r8,%rdi
509         movq    %r11,%rbx
510         testq   $15,%rdi
511         jz      L$cbc_out_aligned
512         movq    %rbx,%rcx
513         leaq    (%rsp),%rsi
514         shrq    $3,%rcx
515 .byte   0xf3,0x48,0xa5          
516         subq    %rbx,%rdi
517 L$cbc_out_aligned:
518         movq    %r9,%rsi
519         movq    %r10,%rcx
520         addq    %rbx,%rdi
521         addq    %rbx,%rsi
522         subq    %rbx,%rcx
523         movq    $512,%rbx
524         jz      L$cbc_break
525         cmpq    %rbx,%rcx
526         jae     L$cbc_loop
527 L$cbc_unaligned_tail:
528         xorl    %eax,%eax
529         cmpq    %rsp,%rbp
530         cmoveq  %rcx,%rax
531         movq    %rdi,%r8
532         movq    %rcx,%rbx
533         subq    %rax,%rsp
534         shrq    $3,%rcx
535         leaq    (%rsp),%rdi
536 .byte   0xf3,0x48,0xa5          
537         movq    %rsp,%rsi
538         movq    %r8,%rdi
539         movq    %rbx,%rcx
540         jmp     L$cbc_loop
541 .p2align        4
542 L$cbc_break:
543         cmpq    %rbp,%rsp
544         je      L$cbc_done
545
546         pxor    %xmm0,%xmm0
547         leaq    (%rsp),%rax
548 L$cbc_bzero:
549         movaps  %xmm0,(%rax)
550         leaq    16(%rax),%rax
551         cmpq    %rax,%rbp
552         ja      L$cbc_bzero
553
554 L$cbc_done:
555         leaq    (%rbp),%rsp
556         jmp     L$cbc_exit
557
558 .p2align        4
559 L$cbc_aligned:
560         leaq    (%rsi,%rcx,1),%rbp
561         negq    %rbp
562         andq    $4095,%rbp
563         xorl    %eax,%eax
564         cmpq    $64,%rbp
565         movq    $64-1,%rbp
566         cmovaeq %rax,%rbp
567         andq    %rcx,%rbp
568         subq    %rbp,%rcx
569         jz      L$cbc_aligned_tail
570         leaq    -16(%rdx),%rax
571         leaq    16(%rdx),%rbx
572         shrq    $4,%rcx
573 .byte   0xf3,0x0f,0xa7,208      
574         movdqa  (%rax),%xmm0
575         movdqa  %xmm0,-16(%rdx)
576         testq   %rbp,%rbp
577         jz      L$cbc_exit
578
579 L$cbc_aligned_tail:
580         movq    %rdi,%r8
581         movq    %rbp,%rbx
582         movq    %rbp,%rcx
583         leaq    (%rsp),%rbp
584         subq    %rcx,%rsp
585         shrq    $3,%rcx
586         leaq    (%rsp),%rdi
587 .byte   0xf3,0x48,0xa5          
588         leaq    (%r8),%rdi
589         leaq    (%rsp),%rsi
590         movq    %rbx,%rcx
591         jmp     L$cbc_loop
592 L$cbc_exit:
593         movl    $1,%eax
594         leaq    8(%rsp),%rsp
595 L$cbc_abort:
596         popq    %rbx
597         popq    %rbp
598         .byte   0xf3,0xc3
599
600 .byte   86,73,65,32,80,97,100,108,111,99,107,32,120,56,54,95,54,52,32,109,111,100,117,108,101,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
601 .p2align        4
602 .data   
603 .p2align        3
604 L$padlock_saved_context:
605 .quad   0