updated licenses
[gnutls:gnutls.git] / lib / accelerated / x86 / coff / padlock-x86-64-coff.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 .def    padlock_capability;     .scl 2; .type 32;       .endef
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     .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
70
71 .globl  padlock_key_bswap
72 .def    padlock_key_bswap;      .scl 2; .type 32;       .endef
73 .p2align        4
74 padlock_key_bswap:
75         movl    240(%rcx),%edx
76 .Lbswap_loop:
77         movl    (%rcx),%eax
78         bswapl  %eax
79         movl    %eax,(%rcx)
80         leaq    4(%rcx),%rcx
81         subl    $1,%edx
82         jnz     .Lbswap_loop
83         .byte   0xf3,0xc3
84
85
86 .globl  padlock_verify_context
87 .def    padlock_verify_context; .scl 2; .type 32;       .endef
88 .p2align        4
89 padlock_verify_context:
90         movq    %rcx,%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
97
98 .def    _padlock_verify_ctx;    .scl 3; .type 32;       .endef
99 .p2align        4
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
112
113 .globl  padlock_reload_key
114 .def    padlock_reload_key;     .scl 2; .type 32;       .endef
115 .p2align        4
116 padlock_reload_key:
117         pushf
118         popf
119         .byte   0xf3,0xc3
120
121
122 .globl  padlock_aes_block
123 .def    padlock_aes_block;      .scl 2; .type 32;       .endef
124 .p2align        4
125 padlock_aes_block:
126         movq    %rdi,8(%rsp)
127         movq    %rsi,16(%rsp)
128         movq    %rsp,%rax
129 .LSEH_begin_padlock_aes_block:
130         movq    %rcx,%rdi
131         movq    %rdx,%rsi
132         movq    %r8,%rdx
133
134         movq    %rbx,%r8
135         movq    $1,%rcx
136         leaq    32(%rdx),%rbx
137         leaq    16(%rdx),%rdx
138 .byte   0xf3,0x0f,0xa7,0xc8     
139         movq    %r8,%rbx
140         movq    8(%rsp),%rdi
141         movq    16(%rsp),%rsi
142         .byte   0xf3,0xc3
143 .LSEH_end_padlock_aes_block:
144
145 .globl  padlock_xstore
146 .def    padlock_xstore; .scl 2; .type 32;       .endef
147 .p2align        4
148 padlock_xstore:
149         movq    %rdi,8(%rsp)
150         movq    %rsi,16(%rsp)
151         movq    %rsp,%rax
152 .LSEH_begin_padlock_xstore:
153         movq    %rcx,%rdi
154         movq    %rdx,%rsi
155
156         movl    %esi,%edx
157 .byte   0x0f,0xa7,0xc0          
158         movq    8(%rsp),%rdi
159         movq    16(%rsp),%rsi
160         .byte   0xf3,0xc3
161 .LSEH_end_padlock_xstore:
162
163 .globl  padlock_sha1_oneshot
164 .def    padlock_sha1_oneshot;   .scl 2; .type 32;       .endef
165 .p2align        4
166 padlock_sha1_oneshot:
167         movq    %rdi,8(%rsp)
168         movq    %rsi,16(%rsp)
169         movq    %rsp,%rax
170 .LSEH_begin_padlock_sha1_oneshot:
171         movq    %rcx,%rdi
172         movq    %rdx,%rsi
173         movq    %r8,%rdx
174
175         movq    %rdx,%rcx
176         movq    %rdi,%rdx
177         movups  (%rdi),%xmm0
178         subq    $128+8,%rsp
179         movl    16(%rdi),%eax
180         movaps  %xmm0,(%rsp)
181         movq    %rsp,%rdi
182         movl    %eax,16(%rsp)
183         xorq    %rax,%rax
184 .byte   0xf3,0x0f,0xa6,0xc8     
185         movaps  (%rsp),%xmm0
186         movl    16(%rsp),%eax
187         addq    $128+8,%rsp
188         movups  %xmm0,(%rdx)
189         movl    %eax,16(%rdx)
190         movq    8(%rsp),%rdi
191         movq    16(%rsp),%rsi
192         .byte   0xf3,0xc3
193 .LSEH_end_padlock_sha1_oneshot:
194
195 .globl  padlock_sha1_blocks
196 .def    padlock_sha1_blocks;    .scl 2; .type 32;       .endef
197 .p2align        4
198 padlock_sha1_blocks:
199         movq    %rdi,8(%rsp)
200         movq    %rsi,16(%rsp)
201         movq    %rsp,%rax
202 .LSEH_begin_padlock_sha1_blocks:
203         movq    %rcx,%rdi
204         movq    %rdx,%rsi
205         movq    %r8,%rdx
206
207         movq    %rdx,%rcx
208         movq    %rdi,%rdx
209         movups  (%rdi),%xmm0
210         subq    $128+8,%rsp
211         movl    16(%rdi),%eax
212         movaps  %xmm0,(%rsp)
213         movq    %rsp,%rdi
214         movl    %eax,16(%rsp)
215         movq    $-1,%rax
216 .byte   0xf3,0x0f,0xa6,0xc8     
217         movaps  (%rsp),%xmm0
218         movl    16(%rsp),%eax
219         addq    $128+8,%rsp
220         movups  %xmm0,(%rdx)
221         movl    %eax,16(%rdx)
222         movq    8(%rsp),%rdi
223         movq    16(%rsp),%rsi
224         .byte   0xf3,0xc3
225 .LSEH_end_padlock_sha1_blocks:
226
227 .globl  padlock_sha256_oneshot
228 .def    padlock_sha256_oneshot; .scl 2; .type 32;       .endef
229 .p2align        4
230 padlock_sha256_oneshot:
231         movq    %rdi,8(%rsp)
232         movq    %rsi,16(%rsp)
233         movq    %rsp,%rax
234 .LSEH_begin_padlock_sha256_oneshot:
235         movq    %rcx,%rdi
236         movq    %rdx,%rsi
237         movq    %r8,%rdx
238
239         movq    %rdx,%rcx
240         movq    %rdi,%rdx
241         movups  (%rdi),%xmm0
242         subq    $128+8,%rsp
243         movups  16(%rdi),%xmm1
244         movaps  %xmm0,(%rsp)
245         movq    %rsp,%rdi
246         movaps  %xmm1,16(%rsp)
247         xorq    %rax,%rax
248 .byte   0xf3,0x0f,0xa6,0xd0     
249         movaps  (%rsp),%xmm0
250         movaps  16(%rsp),%xmm1
251         addq    $128+8,%rsp
252         movups  %xmm0,(%rdx)
253         movups  %xmm1,16(%rdx)
254         movq    8(%rsp),%rdi
255         movq    16(%rsp),%rsi
256         .byte   0xf3,0xc3
257 .LSEH_end_padlock_sha256_oneshot:
258
259 .globl  padlock_sha256_blocks
260 .def    padlock_sha256_blocks;  .scl 2; .type 32;       .endef
261 .p2align        4
262 padlock_sha256_blocks:
263         movq    %rdi,8(%rsp)
264         movq    %rsi,16(%rsp)
265         movq    %rsp,%rax
266 .LSEH_begin_padlock_sha256_blocks:
267         movq    %rcx,%rdi
268         movq    %rdx,%rsi
269         movq    %r8,%rdx
270
271         movq    %rdx,%rcx
272         movq    %rdi,%rdx
273         movups  (%rdi),%xmm0
274         subq    $128+8,%rsp
275         movups  16(%rdi),%xmm1
276         movaps  %xmm0,(%rsp)
277         movq    %rsp,%rdi
278         movaps  %xmm1,16(%rsp)
279         movq    $-1,%rax
280 .byte   0xf3,0x0f,0xa6,0xd0     
281         movaps  (%rsp),%xmm0
282         movaps  16(%rsp),%xmm1
283         addq    $128+8,%rsp
284         movups  %xmm0,(%rdx)
285         movups  %xmm1,16(%rdx)
286         movq    8(%rsp),%rdi
287         movq    16(%rsp),%rsi
288         .byte   0xf3,0xc3
289 .LSEH_end_padlock_sha256_blocks:
290
291 .globl  padlock_sha512_blocks
292 .def    padlock_sha512_blocks;  .scl 2; .type 32;       .endef
293 .p2align        4
294 padlock_sha512_blocks:
295         movq    %rdi,8(%rsp)
296         movq    %rsi,16(%rsp)
297         movq    %rsp,%rax
298 .LSEH_begin_padlock_sha512_blocks:
299         movq    %rcx,%rdi
300         movq    %rdx,%rsi
301         movq    %r8,%rdx
302
303         movq    %rdx,%rcx
304         movq    %rdi,%rdx
305         movups  (%rdi),%xmm0
306         subq    $128+8,%rsp
307         movups  16(%rdi),%xmm1
308         movups  32(%rdi),%xmm2
309         movups  48(%rdi),%xmm3
310         movaps  %xmm0,(%rsp)
311         movq    %rsp,%rdi
312         movaps  %xmm1,16(%rsp)
313         movaps  %xmm2,32(%rsp)
314         movaps  %xmm3,48(%rsp)
315 .byte   0xf3,0x0f,0xa6,0xe0     
316         movaps  (%rsp),%xmm0
317         movaps  16(%rsp),%xmm1
318         movaps  32(%rsp),%xmm2
319         movaps  48(%rsp),%xmm3
320         addq    $128+8,%rsp
321         movups  %xmm0,(%rdx)
322         movups  %xmm1,16(%rdx)
323         movups  %xmm2,32(%rdx)
324         movups  %xmm3,48(%rdx)
325         movq    8(%rsp),%rdi
326         movq    16(%rsp),%rsi
327         .byte   0xf3,0xc3
328 .LSEH_end_padlock_sha512_blocks:
329 .globl  padlock_ecb_encrypt
330 .def    padlock_ecb_encrypt;    .scl 2; .type 32;       .endef
331 .p2align        4
332 padlock_ecb_encrypt:
333         movq    %rdi,8(%rsp)
334         movq    %rsi,16(%rsp)
335         movq    %rsp,%rax
336 .LSEH_begin_padlock_ecb_encrypt:
337         movq    %rcx,%rdi
338         movq    %rdx,%rsi
339         movq    %r8,%rdx
340         movq    %r9,%rcx
341
342         pushq   %rbp
343         pushq   %rbx
344
345         xorl    %eax,%eax
346         testq   $15,%rdx
347         jnz     .Lecb_abort
348         testq   $15,%rcx
349         jnz     .Lecb_abort
350         leaq    .Lpadlock_saved_context(%rip),%rax
351         pushf
352         cld
353         call    _padlock_verify_ctx
354         leaq    16(%rdx),%rdx
355         xorl    %eax,%eax
356         xorl    %ebx,%ebx
357         cmpq    $128,%rcx
358         jbe     .Lecb_short
359         testl   $32,(%rdx)
360         jnz     .Lecb_aligned
361         testq   $15,%rdi
362         setz    %al
363         testq   $15,%rsi
364         setz    %bl
365         testl   %ebx,%eax
366         jnz     .Lecb_aligned
367         negq    %rax
368         movq    $512,%rbx
369         notq    %rax
370         leaq    (%rsp),%rbp
371         cmpq    %rbx,%rcx
372         cmovcq  %rcx,%rbx
373         andq    %rbx,%rax
374         movq    %rcx,%rbx
375         negq    %rax
376         andq    $512-1,%rbx
377         leaq    (%rax,%rbp,1),%rsp
378         jmp     .Lecb_loop
379 .p2align        4
380 .Lecb_loop:
381         cmpq    %rcx,%rbx
382         cmovaq  %rcx,%rbx
383         movq    %rdi,%r8
384         movq    %rsi,%r9
385         movq    %rcx,%r10
386         movq    %rbx,%rcx
387         movq    %rbx,%r11
388         testq   $15,%rdi
389         cmovnzq %rsp,%rdi
390         testq   $15,%rsi
391         jz      .Lecb_inp_aligned
392         shrq    $3,%rcx
393 .byte   0xf3,0x48,0xa5          
394         subq    %rbx,%rdi
395         movq    %rbx,%rcx
396         movq    %rdi,%rsi
397 .Lecb_inp_aligned:
398         leaq    -16(%rdx),%rax
399         leaq    16(%rdx),%rbx
400         shrq    $4,%rcx
401 .byte   0xf3,0x0f,0xa7,200      
402         movq    %r8,%rdi
403         movq    %r11,%rbx
404         testq   $15,%rdi
405         jz      .Lecb_out_aligned
406         movq    %rbx,%rcx
407         shrq    $3,%rcx
408         leaq    (%rsp),%rsi
409 .byte   0xf3,0x48,0xa5          
410         subq    %rbx,%rdi
411 .Lecb_out_aligned:
412         movq    %r9,%rsi
413         movq    %r10,%rcx
414         addq    %rbx,%rdi
415         addq    %rbx,%rsi
416         subq    %rbx,%rcx
417         movq    $512,%rbx
418         jnz     .Lecb_loop
419
420         cmpq    %rsp,%rbp
421         je      .Lecb_done
422
423         pxor    %xmm0,%xmm0
424         leaq    (%rsp),%rax
425 .Lecb_bzero:
426         movaps  %xmm0,(%rax)
427         leaq    16(%rax),%rax
428         cmpq    %rax,%rbp
429         ja      .Lecb_bzero
430
431 .Lecb_done:
432         leaq    (%rbp),%rsp
433         jmp     .Lecb_exit
434 .p2align        4
435 .Lecb_short:
436         movq    %rsp,%rbp
437         subq    %rcx,%rsp
438         xorq    %rbx,%rbx
439 .Lecb_short_copy:
440         movups  (%rsi,%rbx,1),%xmm0
441         leaq    16(%rbx),%rbx
442         cmpq    %rbx,%rcx
443         movaps  %xmm0,-16(%rsp,%rbx,1)
444         ja      .Lecb_short_copy
445         movq    %rsp,%rsi
446         movq    %rcx,%rbx
447         jmp     .Lecb_loop
448 .p2align        4
449 .Lecb_aligned:
450         leaq    -16(%rdx),%rax
451         leaq    16(%rdx),%rbx
452         shrq    $4,%rcx
453 .byte   0xf3,0x0f,0xa7,200      
454 .Lecb_exit:
455         movl    $1,%eax
456         leaq    8(%rsp),%rsp
457 .Lecb_abort:
458         popq    %rbx
459         popq    %rbp
460         movq    8(%rsp),%rdi
461         movq    16(%rsp),%rsi
462         .byte   0xf3,0xc3
463 .LSEH_end_padlock_ecb_encrypt:
464 .globl  padlock_cbc_encrypt
465 .def    padlock_cbc_encrypt;    .scl 2; .type 32;       .endef
466 .p2align        4
467 padlock_cbc_encrypt:
468         movq    %rdi,8(%rsp)
469         movq    %rsi,16(%rsp)
470         movq    %rsp,%rax
471 .LSEH_begin_padlock_cbc_encrypt:
472         movq    %rcx,%rdi
473         movq    %rdx,%rsi
474         movq    %r8,%rdx
475         movq    %r9,%rcx
476
477         pushq   %rbp
478         pushq   %rbx
479
480         xorl    %eax,%eax
481         testq   $15,%rdx
482         jnz     .Lcbc_abort
483         testq   $15,%rcx
484         jnz     .Lcbc_abort
485         leaq    .Lpadlock_saved_context(%rip),%rax
486         pushf
487         cld
488         call    _padlock_verify_ctx
489         leaq    16(%rdx),%rdx
490         xorl    %eax,%eax
491         xorl    %ebx,%ebx
492         cmpq    $64,%rcx
493         jbe     .Lcbc_short
494         testl   $32,(%rdx)
495         jnz     .Lcbc_aligned
496         testq   $15,%rdi
497         setz    %al
498         testq   $15,%rsi
499         setz    %bl
500         testl   %ebx,%eax
501         jnz     .Lcbc_aligned
502         negq    %rax
503         movq    $512,%rbx
504         notq    %rax
505         leaq    (%rsp),%rbp
506         cmpq    %rbx,%rcx
507         cmovcq  %rcx,%rbx
508         andq    %rbx,%rax
509         movq    %rcx,%rbx
510         negq    %rax
511         andq    $512-1,%rbx
512         leaq    (%rax,%rbp,1),%rsp
513         jmp     .Lcbc_loop
514 .p2align        4
515 .Lcbc_loop:
516         cmpq    %rcx,%rbx
517         cmovaq  %rcx,%rbx
518         movq    %rdi,%r8
519         movq    %rsi,%r9
520         movq    %rcx,%r10
521         movq    %rbx,%rcx
522         movq    %rbx,%r11
523         testq   $15,%rdi
524         cmovnzq %rsp,%rdi
525         testq   $15,%rsi
526         jz      .Lcbc_inp_aligned
527         shrq    $3,%rcx
528 .byte   0xf3,0x48,0xa5          
529         subq    %rbx,%rdi
530         movq    %rbx,%rcx
531         movq    %rdi,%rsi
532 .Lcbc_inp_aligned:
533         leaq    -16(%rdx),%rax
534         leaq    16(%rdx),%rbx
535         shrq    $4,%rcx
536 .byte   0xf3,0x0f,0xa7,208      
537         movdqa  (%rax),%xmm0
538         movdqa  %xmm0,-16(%rdx)
539         movq    %r8,%rdi
540         movq    %r11,%rbx
541         testq   $15,%rdi
542         jz      .Lcbc_out_aligned
543         movq    %rbx,%rcx
544         shrq    $3,%rcx
545         leaq    (%rsp),%rsi
546 .byte   0xf3,0x48,0xa5          
547         subq    %rbx,%rdi
548 .Lcbc_out_aligned:
549         movq    %r9,%rsi
550         movq    %r10,%rcx
551         addq    %rbx,%rdi
552         addq    %rbx,%rsi
553         subq    %rbx,%rcx
554         movq    $512,%rbx
555         jnz     .Lcbc_loop
556
557         cmpq    %rsp,%rbp
558         je      .Lcbc_done
559
560         pxor    %xmm0,%xmm0
561         leaq    (%rsp),%rax
562 .Lcbc_bzero:
563         movaps  %xmm0,(%rax)
564         leaq    16(%rax),%rax
565         cmpq    %rax,%rbp
566         ja      .Lcbc_bzero
567
568 .Lcbc_done:
569         leaq    (%rbp),%rsp
570         jmp     .Lcbc_exit
571 .p2align        4
572 .Lcbc_short:
573         movq    %rsp,%rbp
574         subq    %rcx,%rsp
575         xorq    %rbx,%rbx
576 .Lcbc_short_copy:
577         movups  (%rsi,%rbx,1),%xmm0
578         leaq    16(%rbx),%rbx
579         cmpq    %rbx,%rcx
580         movaps  %xmm0,-16(%rsp,%rbx,1)
581         ja      .Lcbc_short_copy
582         movq    %rsp,%rsi
583         movq    %rcx,%rbx
584         jmp     .Lcbc_loop
585 .p2align        4
586 .Lcbc_aligned:
587         leaq    -16(%rdx),%rax
588         leaq    16(%rdx),%rbx
589         shrq    $4,%rcx
590 .byte   0xf3,0x0f,0xa7,208      
591         movdqa  (%rax),%xmm0
592         movdqa  %xmm0,-16(%rdx)
593 .Lcbc_exit:
594         movl    $1,%eax
595         leaq    8(%rsp),%rsp
596 .Lcbc_abort:
597         popq    %rbx
598         popq    %rbp
599         movq    8(%rsp),%rdi
600         movq    16(%rsp),%rsi
601         .byte   0xf3,0xc3
602 .LSEH_end_padlock_cbc_encrypt:
603 .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
604 .p2align        4
605 .data   
606 .p2align        3
607 .Lpadlock_saved_context:
608 .quad   0