updated licenses
[gnutls:gnutls.git] / lib / accelerated / x86 / elf / padlock-x86-64.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 .type   padlock_capability,@function
43 .align  16
44 padlock_capability:
45         movq    %rbx,%r8
46         xorl    %eax,%eax
47         cpuid
48         xorl    %eax,%eax
49         cmpl    $1953391939,%ebx
50         jne     .Lnoluck
51         cmpl    $1215460705,%edx
52         jne     .Lnoluck
53         cmpl    $1936487777,%ecx
54         jne     .Lnoluck
55         movl    $3221225472,%eax
56         cpuid
57         movl    %eax,%edx
58         xorl    %eax,%eax
59         cmpl    $3221225473,%edx
60         jb      .Lnoluck
61         movl    $3221225473,%eax
62         cpuid
63         movl    %edx,%eax
64         andl    $4294967279,%eax
65         orl     $16,%eax
66 .Lnoluck:
67         movq    %r8,%rbx
68         .byte   0xf3,0xc3
69 .size   padlock_capability,.-padlock_capability
70
71 .globl  padlock_key_bswap
72 .type   padlock_key_bswap,@function
73 .align  16
74 padlock_key_bswap:
75         movl    240(%rdi),%edx
76 .Lbswap_loop:
77         movl    (%rdi),%eax
78         bswapl  %eax
79         movl    %eax,(%rdi)
80         leaq    4(%rdi),%rdi
81         subl    $1,%edx
82         jnz     .Lbswap_loop
83         .byte   0xf3,0xc3
84 .size   padlock_key_bswap,.-padlock_key_bswap
85
86 .globl  padlock_verify_context
87 .type   padlock_verify_context,@function
88 .align  16
89 padlock_verify_context:
90         movq    %rdi,%rdx
91         pushf
92         leaq    .Lpadlock_saved_context(%rip),%rax
93         call    _padlock_verify_ctx
94         leaq    8(%rsp),%rsp
95         .byte   0xf3,0xc3
96 .size   padlock_verify_context,.-padlock_verify_context
97
98 .type   _padlock_verify_ctx,@function
99 .align  16
100 _padlock_verify_ctx:
101         movq    8(%rsp),%r8
102         btq     $30,%r8
103         jnc     .Lverified
104         cmpq    (%rax),%rdx
105         je      .Lverified
106         pushf
107         popf
108 .Lverified:
109         movq    %rdx,(%rax)
110         .byte   0xf3,0xc3
111 .size   _padlock_verify_ctx,.-_padlock_verify_ctx
112
113 .globl  padlock_reload_key
114 .type   padlock_reload_key,@function
115 .align  16
116 padlock_reload_key:
117         pushf
118         popf
119         .byte   0xf3,0xc3
120 .size   padlock_reload_key,.-padlock_reload_key
121
122 .globl  padlock_aes_block
123 .type   padlock_aes_block,@function
124 .align  16
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 .size   padlock_aes_block,.-padlock_aes_block
134
135 .globl  padlock_xstore
136 .type   padlock_xstore,@function
137 .align  16
138 padlock_xstore:
139         movl    %esi,%edx
140 .byte   0x0f,0xa7,0xc0          
141         .byte   0xf3,0xc3
142 .size   padlock_xstore,.-padlock_xstore
143
144 .globl  padlock_sha1_oneshot
145 .type   padlock_sha1_oneshot,@function
146 .align  16
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 .size   padlock_sha1_oneshot,.-padlock_sha1_oneshot
165
166 .globl  padlock_sha1_blocks
167 .type   padlock_sha1_blocks,@function
168 .align  16
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 .size   padlock_sha1_blocks,.-padlock_sha1_blocks
187
188 .globl  padlock_sha256_oneshot
189 .type   padlock_sha256_oneshot,@function
190 .align  16
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 .size   padlock_sha256_oneshot,.-padlock_sha256_oneshot
209
210 .globl  padlock_sha256_blocks
211 .type   padlock_sha256_blocks,@function
212 .align  16
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 .size   padlock_sha256_blocks,.-padlock_sha256_blocks
231
232 .globl  padlock_sha512_blocks
233 .type   padlock_sha512_blocks,@function
234 .align  16
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 .size   padlock_sha512_blocks,.-padlock_sha512_blocks
260 .globl  padlock_ecb_encrypt
261 .type   padlock_ecb_encrypt,@function
262 .align  16
263 padlock_ecb_encrypt:
264         pushq   %rbp
265         pushq   %rbx
266
267         xorl    %eax,%eax
268         testq   $15,%rdx
269         jnz     .Lecb_abort
270         testq   $15,%rcx
271         jnz     .Lecb_abort
272         leaq    .Lpadlock_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     .Lecb_short
281         testl   $32,(%rdx)
282         jnz     .Lecb_aligned
283         testq   $15,%rdi
284         setz    %al
285         testq   $15,%rsi
286         setz    %bl
287         testl   %ebx,%eax
288         jnz     .Lecb_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     .Lecb_loop
301 .align  16
302 .Lecb_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      .Lecb_inp_aligned
314         shrq    $3,%rcx
315 .byte   0xf3,0x48,0xa5          
316         subq    %rbx,%rdi
317         movq    %rbx,%rcx
318         movq    %rdi,%rsi
319 .Lecb_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      .Lecb_out_aligned
328         movq    %rbx,%rcx
329         shrq    $3,%rcx
330         leaq    (%rsp),%rsi
331 .byte   0xf3,0x48,0xa5          
332         subq    %rbx,%rdi
333 .Lecb_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     .Lecb_loop
341
342         cmpq    %rsp,%rbp
343         je      .Lecb_done
344
345         pxor    %xmm0,%xmm0
346         leaq    (%rsp),%rax
347 .Lecb_bzero:
348         movaps  %xmm0,(%rax)
349         leaq    16(%rax),%rax
350         cmpq    %rax,%rbp
351         ja      .Lecb_bzero
352
353 .Lecb_done:
354         leaq    (%rbp),%rsp
355         jmp     .Lecb_exit
356 .align  16
357 .Lecb_short:
358         movq    %rsp,%rbp
359         subq    %rcx,%rsp
360         xorq    %rbx,%rbx
361 .Lecb_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      .Lecb_short_copy
367         movq    %rsp,%rsi
368         movq    %rcx,%rbx
369         jmp     .Lecb_loop
370 .align  16
371 .Lecb_aligned:
372         leaq    -16(%rdx),%rax
373         leaq    16(%rdx),%rbx
374         shrq    $4,%rcx
375 .byte   0xf3,0x0f,0xa7,200      
376 .Lecb_exit:
377         movl    $1,%eax
378         leaq    8(%rsp),%rsp
379 .Lecb_abort:
380         popq    %rbx
381         popq    %rbp
382         .byte   0xf3,0xc3
383 .size   padlock_ecb_encrypt,.-padlock_ecb_encrypt
384 .globl  padlock_cbc_encrypt
385 .type   padlock_cbc_encrypt,@function
386 .align  16
387 padlock_cbc_encrypt:
388         pushq   %rbp
389         pushq   %rbx
390
391         xorl    %eax,%eax
392         testq   $15,%rdx
393         jnz     .Lcbc_abort
394         testq   $15,%rcx
395         jnz     .Lcbc_abort
396         leaq    .Lpadlock_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     .Lcbc_short
405         testl   $32,(%rdx)
406         jnz     .Lcbc_aligned
407         testq   $15,%rdi
408         setz    %al
409         testq   $15,%rsi
410         setz    %bl
411         testl   %ebx,%eax
412         jnz     .Lcbc_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     .Lcbc_loop
425 .align  16
426 .Lcbc_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      .Lcbc_inp_aligned
438         shrq    $3,%rcx
439 .byte   0xf3,0x48,0xa5          
440         subq    %rbx,%rdi
441         movq    %rbx,%rcx
442         movq    %rdi,%rsi
443 .Lcbc_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      .Lcbc_out_aligned
454         movq    %rbx,%rcx
455         shrq    $3,%rcx
456         leaq    (%rsp),%rsi
457 .byte   0xf3,0x48,0xa5          
458         subq    %rbx,%rdi
459 .Lcbc_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     .Lcbc_loop
467
468         cmpq    %rsp,%rbp
469         je      .Lcbc_done
470
471         pxor    %xmm0,%xmm0
472         leaq    (%rsp),%rax
473 .Lcbc_bzero:
474         movaps  %xmm0,(%rax)
475         leaq    16(%rax),%rax
476         cmpq    %rax,%rbp
477         ja      .Lcbc_bzero
478
479 .Lcbc_done:
480         leaq    (%rbp),%rsp
481         jmp     .Lcbc_exit
482 .align  16
483 .Lcbc_short:
484         movq    %rsp,%rbp
485         subq    %rcx,%rsp
486         xorq    %rbx,%rbx
487 .Lcbc_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      .Lcbc_short_copy
493         movq    %rsp,%rsi
494         movq    %rcx,%rbx
495         jmp     .Lcbc_loop
496 .align  16
497 .Lcbc_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 .Lcbc_exit:
505         movl    $1,%eax
506         leaq    8(%rsp),%rsp
507 .Lcbc_abort:
508         popq    %rbx
509         popq    %rbp
510         .byte   0xf3,0xc3
511 .size   padlock_cbc_encrypt,.-padlock_cbc_encrypt
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 .align  16
514 .data   
515 .align  8
516 .Lpadlock_saved_context:
517 .quad   0
518
519 .section .note.GNU-stack,"",%progbits