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