corrected copyright notices
[gnutls.git] / lib / accelerated / x86 / coff / padlock-x86-coff.s
blob69eb468638acf2d497f0198c903b9866800f2d94
1 # Copyright (c) 2011-2012, Andy Polyakov <appro@openssl.org>
2 # All rights reserved.
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.
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.
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.
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.
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.
38 # *** This file is auto-generated ***
40 .file "devel/perlasm/e_padlock-x86.s"
41 .text
42 .globl _padlock_capability
43 .def _padlock_capability; .scl 2; .type 32; .endef
44 .align 16
45 _padlock_capability:
46 .L_padlock_capability_begin:
47 pushl %ebx
48 pushfl
49 popl %eax
50 movl %eax,%ecx
51 xorl $2097152,%eax
52 pushl %eax
53 popfl
54 pushfl
55 popl %eax
56 xorl %eax,%ecx
57 xorl %eax,%eax
58 btl $21,%ecx
59 jnc .L000noluck
60 .byte 0x0f,0xa2
61 xorl %eax,%eax
62 cmpl $0x746e6543,%ebx
63 jne .L000noluck
64 cmpl $0x48727561,%edx
65 jne .L000noluck
66 cmpl $0x736c7561,%ecx
67 jne .L000noluck
68 movl $3221225472,%eax
69 .byte 0x0f,0xa2
70 movl %eax,%edx
71 xorl %eax,%eax
72 cmpl $3221225473,%edx
73 jb .L000noluck
74 movl $1,%eax
75 .byte 0x0f,0xa2
76 orl $15,%eax
77 xorl %ebx,%ebx
78 andl $4095,%eax
79 cmpl $1791,%eax
80 sete %bl
81 movl $3221225473,%eax
82 pushl %ebx
83 .byte 0x0f,0xa2
84 popl %ebx
85 movl %edx,%eax
86 shll $4,%ebx
87 andl $4294967279,%eax
88 orl %ebx,%eax
89 .L000noluck:
90 popl %ebx
91 ret
92 .globl _padlock_key_bswap
93 .def _padlock_key_bswap; .scl 2; .type 32; .endef
94 .align 16
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
107 .globl _padlock_verify_context
108 .def _padlock_verify_context; .scl 2; .type 32; .endef
109 .align 16
110 _padlock_verify_context:
111 .L_padlock_verify_context_begin:
112 movl 4(%esp),%edx
113 leal .Lpadlock_saved_context,%eax
114 pushfl
115 call __padlock_verify_ctx
116 .L002verify_pic_point:
117 leal 4(%esp),%esp
119 .def __padlock_verify_ctx; .scl 3; .type 32; .endef
120 .align 16
121 __padlock_verify_ctx:
122 btl $30,4(%esp)
123 jnc .L003verified
124 cmpl (%eax),%edx
125 je .L003verified
126 pushfl
127 popfl
128 .L003verified:
129 movl %edx,(%eax)
131 .globl _padlock_reload_key
132 .def _padlock_reload_key; .scl 2; .type 32; .endef
133 .align 16
134 _padlock_reload_key:
135 .L_padlock_reload_key_begin:
136 pushfl
137 popfl
139 .globl _padlock_aes_block
140 .def _padlock_aes_block; .scl 2; .type 32; .endef
141 .align 16
142 _padlock_aes_block:
143 .L_padlock_aes_block_begin:
144 pushl %edi
145 pushl %esi
146 pushl %ebx
147 movl 16(%esp),%edi
148 movl 20(%esp),%esi
149 movl 24(%esp),%edx
150 movl $1,%ecx
151 leal 32(%edx),%ebx
152 leal 16(%edx),%edx
153 .byte 243,15,167,200
154 popl %ebx
155 popl %esi
156 popl %edi
158 .globl _padlock_ecb_encrypt
159 .def _padlock_ecb_encrypt; .scl 2; .type 32; .endef
160 .align 16
161 _padlock_ecb_encrypt:
162 .L_padlock_ecb_encrypt_begin:
163 pushl %ebp
164 pushl %ebx
165 pushl %esi
166 pushl %edi
167 movl 20(%esp),%edi
168 movl 24(%esp),%esi
169 movl 28(%esp),%edx
170 movl 32(%esp),%ecx
171 testl $15,%edx
172 jnz .L004ecb_abort
173 testl $15,%ecx
174 jnz .L004ecb_abort
175 leal .Lpadlock_saved_context,%eax
176 pushfl
178 call __padlock_verify_ctx
179 .L005ecb_pic_point:
180 leal 16(%edx),%edx
181 xorl %eax,%eax
182 xorl %ebx,%ebx
183 testl $32,(%edx)
184 jnz .L006ecb_aligned
185 testl $15,%edi
186 setz %al
187 testl $15,%esi
188 setz %bl
189 testl %ebx,%eax
190 jnz .L006ecb_aligned
191 negl %eax
192 movl $512,%ebx
193 notl %eax
194 leal -24(%esp),%ebp
195 cmpl %ebx,%ecx
196 cmovcl %ecx,%ebx
197 andl %ebx,%eax
198 movl %ecx,%ebx
199 negl %eax
200 andl $511,%ebx
201 leal (%eax,%ebp,1),%esp
202 movl $512,%eax
203 cmovzl %eax,%ebx
204 movl %ebp,%eax
205 andl $-16,%ebp
206 andl $-16,%esp
207 movl %eax,16(%ebp)
208 cmpl %ebx,%ecx
209 ja .L007ecb_loop
210 movl %esi,%eax
211 cmpl %esp,%ebp
212 cmovel %edi,%eax
213 addl %ecx,%eax
214 negl %eax
215 andl $4095,%eax
216 cmpl $128,%eax
217 movl $-128,%eax
218 cmovael %ebx,%eax
219 andl %eax,%ebx
220 jz .L008ecb_unaligned_tail
221 jmp .L007ecb_loop
222 .align 16
223 .L007ecb_loop:
224 movl %edi,(%ebp)
225 movl %esi,4(%ebp)
226 movl %ecx,8(%ebp)
227 movl %ebx,%ecx
228 movl %ebx,12(%ebp)
229 testl $15,%edi
230 cmovnzl %esp,%edi
231 testl $15,%esi
232 jz .L009ecb_inp_aligned
233 shrl $2,%ecx
234 .byte 243,165
235 subl %ebx,%edi
236 movl %ebx,%ecx
237 movl %edi,%esi
238 .L009ecb_inp_aligned:
239 leal -16(%edx),%eax
240 leal 16(%edx),%ebx
241 shrl $4,%ecx
242 .byte 243,15,167,200
243 movl (%ebp),%edi
244 movl 12(%ebp),%ebx
245 testl $15,%edi
246 jz .L010ecb_out_aligned
247 movl %ebx,%ecx
248 leal (%esp),%esi
249 shrl $2,%ecx
250 .byte 243,165
251 subl %ebx,%edi
252 .L010ecb_out_aligned:
253 movl 4(%ebp),%esi
254 movl 8(%ebp),%ecx
255 addl %ebx,%edi
256 addl %ebx,%esi
257 subl %ebx,%ecx
258 movl $512,%ebx
259 jz .L011ecb_break
260 cmpl %ebx,%ecx
261 jae .L007ecb_loop
262 .L008ecb_unaligned_tail:
263 xorl %eax,%eax
264 cmpl %ebp,%esp
265 cmovel %ecx,%eax
266 subl %eax,%esp
267 movl %edi,%eax
268 movl %ecx,%ebx
269 shrl $2,%ecx
270 leal (%esp),%edi
271 .byte 243,165
272 movl %esp,%esi
273 movl %eax,%edi
274 movl %ebx,%ecx
275 jmp .L007ecb_loop
276 .align 16
277 .L011ecb_break:
278 cmpl %ebp,%esp
279 je .L012ecb_done
280 pxor %xmm0,%xmm0
281 leal (%esp),%eax
282 .L013ecb_bzero:
283 movaps %xmm0,(%eax)
284 leal 16(%eax),%eax
285 cmpl %eax,%ebp
286 ja .L013ecb_bzero
287 .L012ecb_done:
288 movl 16(%ebp),%ebp
289 leal 24(%ebp),%esp
290 jmp .L014ecb_exit
291 .align 16
292 .L006ecb_aligned:
293 leal (%esi,%ecx,1),%ebp
294 negl %ebp
295 andl $4095,%ebp
296 xorl %eax,%eax
297 cmpl $128,%ebp
298 movl $127,%ebp
299 cmovael %eax,%ebp
300 andl %ecx,%ebp
301 subl %ebp,%ecx
302 jz .L015ecb_aligned_tail
303 leal -16(%edx),%eax
304 leal 16(%edx),%ebx
305 shrl $4,%ecx
306 .byte 243,15,167,200
307 testl %ebp,%ebp
308 jz .L014ecb_exit
309 .L015ecb_aligned_tail:
310 movl %ebp,%ecx
311 leal -24(%esp),%ebp
312 movl %ebp,%esp
313 movl %ebp,%eax
314 subl %ecx,%esp
315 andl $-16,%ebp
316 andl $-16,%esp
317 movl %eax,16(%ebp)
318 movl %edi,%eax
319 movl %ecx,%ebx
320 shrl $2,%ecx
321 leal (%esp),%edi
322 .byte 243,165
323 movl %esp,%esi
324 movl %eax,%edi
325 movl %ebx,%ecx
326 jmp .L007ecb_loop
327 .L014ecb_exit:
328 movl $1,%eax
329 leal 4(%esp),%esp
330 .L004ecb_abort:
331 popl %edi
332 popl %esi
333 popl %ebx
334 popl %ebp
336 .globl _padlock_cbc_encrypt
337 .def _padlock_cbc_encrypt; .scl 2; .type 32; .endef
338 .align 16
339 _padlock_cbc_encrypt:
340 .L_padlock_cbc_encrypt_begin:
341 pushl %ebp
342 pushl %ebx
343 pushl %esi
344 pushl %edi
345 movl 20(%esp),%edi
346 movl 24(%esp),%esi
347 movl 28(%esp),%edx
348 movl 32(%esp),%ecx
349 testl $15,%edx
350 jnz .L016cbc_abort
351 testl $15,%ecx
352 jnz .L016cbc_abort
353 leal .Lpadlock_saved_context,%eax
354 pushfl
356 call __padlock_verify_ctx
357 .L017cbc_pic_point:
358 leal 16(%edx),%edx
359 xorl %eax,%eax
360 xorl %ebx,%ebx
361 testl $32,(%edx)
362 jnz .L018cbc_aligned
363 testl $15,%edi
364 setz %al
365 testl $15,%esi
366 setz %bl
367 testl %ebx,%eax
368 jnz .L018cbc_aligned
369 negl %eax
370 movl $512,%ebx
371 notl %eax
372 leal -24(%esp),%ebp
373 cmpl %ebx,%ecx
374 cmovcl %ecx,%ebx
375 andl %ebx,%eax
376 movl %ecx,%ebx
377 negl %eax
378 andl $511,%ebx
379 leal (%eax,%ebp,1),%esp
380 movl $512,%eax
381 cmovzl %eax,%ebx
382 movl %ebp,%eax
383 andl $-16,%ebp
384 andl $-16,%esp
385 movl %eax,16(%ebp)
386 cmpl %ebx,%ecx
387 ja .L019cbc_loop
388 movl %esi,%eax
389 cmpl %esp,%ebp
390 cmovel %edi,%eax
391 addl %ecx,%eax
392 negl %eax
393 andl $4095,%eax
394 cmpl $64,%eax
395 movl $-64,%eax
396 cmovael %ebx,%eax
397 andl %eax,%ebx
398 jz .L020cbc_unaligned_tail
399 jmp .L019cbc_loop
400 .align 16
401 .L019cbc_loop:
402 movl %edi,(%ebp)
403 movl %esi,4(%ebp)
404 movl %ecx,8(%ebp)
405 movl %ebx,%ecx
406 movl %ebx,12(%ebp)
407 testl $15,%edi
408 cmovnzl %esp,%edi
409 testl $15,%esi
410 jz .L021cbc_inp_aligned
411 shrl $2,%ecx
412 .byte 243,165
413 subl %ebx,%edi
414 movl %ebx,%ecx
415 movl %edi,%esi
416 .L021cbc_inp_aligned:
417 leal -16(%edx),%eax
418 leal 16(%edx),%ebx
419 shrl $4,%ecx
420 .byte 243,15,167,208
421 movaps (%eax),%xmm0
422 movaps %xmm0,-16(%edx)
423 movl (%ebp),%edi
424 movl 12(%ebp),%ebx
425 testl $15,%edi
426 jz .L022cbc_out_aligned
427 movl %ebx,%ecx
428 leal (%esp),%esi
429 shrl $2,%ecx
430 .byte 243,165
431 subl %ebx,%edi
432 .L022cbc_out_aligned:
433 movl 4(%ebp),%esi
434 movl 8(%ebp),%ecx
435 addl %ebx,%edi
436 addl %ebx,%esi
437 subl %ebx,%ecx
438 movl $512,%ebx
439 jz .L023cbc_break
440 cmpl %ebx,%ecx
441 jae .L019cbc_loop
442 .L020cbc_unaligned_tail:
443 xorl %eax,%eax
444 cmpl %ebp,%esp
445 cmovel %ecx,%eax
446 subl %eax,%esp
447 movl %edi,%eax
448 movl %ecx,%ebx
449 shrl $2,%ecx
450 leal (%esp),%edi
451 .byte 243,165
452 movl %esp,%esi
453 movl %eax,%edi
454 movl %ebx,%ecx
455 jmp .L019cbc_loop
456 .align 16
457 .L023cbc_break:
458 cmpl %ebp,%esp
459 je .L024cbc_done
460 pxor %xmm0,%xmm0
461 leal (%esp),%eax
462 .L025cbc_bzero:
463 movaps %xmm0,(%eax)
464 leal 16(%eax),%eax
465 cmpl %eax,%ebp
466 ja .L025cbc_bzero
467 .L024cbc_done:
468 movl 16(%ebp),%ebp
469 leal 24(%ebp),%esp
470 jmp .L026cbc_exit
471 .align 16
472 .L018cbc_aligned:
473 leal (%esi,%ecx,1),%ebp
474 negl %ebp
475 andl $4095,%ebp
476 xorl %eax,%eax
477 cmpl $64,%ebp
478 movl $63,%ebp
479 cmovael %eax,%ebp
480 andl %ecx,%ebp
481 subl %ebp,%ecx
482 jz .L027cbc_aligned_tail
483 leal -16(%edx),%eax
484 leal 16(%edx),%ebx
485 shrl $4,%ecx
486 .byte 243,15,167,208
487 movaps (%eax),%xmm0
488 movaps %xmm0,-16(%edx)
489 testl %ebp,%ebp
490 jz .L026cbc_exit
491 .L027cbc_aligned_tail:
492 movl %ebp,%ecx
493 leal -24(%esp),%ebp
494 movl %ebp,%esp
495 movl %ebp,%eax
496 subl %ecx,%esp
497 andl $-16,%ebp
498 andl $-16,%esp
499 movl %eax,16(%ebp)
500 movl %edi,%eax
501 movl %ecx,%ebx
502 shrl $2,%ecx
503 leal (%esp),%edi
504 .byte 243,165
505 movl %esp,%esi
506 movl %eax,%edi
507 movl %ebx,%ecx
508 jmp .L019cbc_loop
509 .L026cbc_exit:
510 movl $1,%eax
511 leal 4(%esp),%esp
512 .L016cbc_abort:
513 popl %edi
514 popl %esi
515 popl %ebx
516 popl %ebp
518 .globl _padlock_xstore
519 .def _padlock_xstore; .scl 2; .type 32; .endef
520 .align 16
521 _padlock_xstore:
522 .L_padlock_xstore_begin:
523 pushl %edi
524 movl 8(%esp),%edi
525 movl 12(%esp),%edx
526 .byte 15,167,192
527 popl %edi
529 .def __win32_segv_handler; .scl 3; .type 32; .endef
530 .align 16
531 __win32_segv_handler:
532 movl $1,%eax
533 movl 4(%esp),%edx
534 movl 12(%esp),%ecx
535 cmpl $3221225477,(%edx)
536 jne .L028ret
537 addl $4,184(%ecx)
538 movl $0,%eax
539 .L028ret:
541 .globl _padlock_sha1_oneshot
542 .def _padlock_sha1_oneshot; .scl 2; .type 32; .endef
543 .align 16
544 _padlock_sha1_oneshot:
545 .L_padlock_sha1_oneshot_begin:
546 pushl %edi
547 pushl %esi
548 xorl %eax,%eax
549 movl 12(%esp),%edi
550 movl 16(%esp),%esi
551 movl 20(%esp),%ecx
552 pushl __win32_segv_handler
553 .byte 100,255,48
554 .byte 100,137,32
555 movl %esp,%edx
556 addl $-128,%esp
557 movups (%edi),%xmm0
558 andl $-16,%esp
559 movl 16(%edi),%eax
560 movaps %xmm0,(%esp)
561 movl %esp,%edi
562 movl %eax,16(%esp)
563 xorl %eax,%eax
564 .byte 243,15,166,200
565 movaps (%esp),%xmm0
566 movl 16(%esp),%eax
567 movl %edx,%esp
568 .byte 100,143,5,0,0,0,0
569 leal 4(%esp),%esp
570 movl 16(%esp),%edi
571 movups %xmm0,(%edi)
572 movl %eax,16(%edi)
573 popl %esi
574 popl %edi
576 .globl _padlock_sha1_blocks
577 .def _padlock_sha1_blocks; .scl 2; .type 32; .endef
578 .align 16
579 _padlock_sha1_blocks:
580 .L_padlock_sha1_blocks_begin:
581 pushl %edi
582 pushl %esi
583 movl 12(%esp),%edi
584 movl 16(%esp),%esi
585 movl %esp,%edx
586 movl 20(%esp),%ecx
587 addl $-128,%esp
588 movups (%edi),%xmm0
589 andl $-16,%esp
590 movl 16(%edi),%eax
591 movaps %xmm0,(%esp)
592 movl %esp,%edi
593 movl %eax,16(%esp)
594 movl $-1,%eax
595 .byte 243,15,166,200
596 movaps (%esp),%xmm0
597 movl 16(%esp),%eax
598 movl %edx,%esp
599 movl 12(%esp),%edi
600 movups %xmm0,(%edi)
601 movl %eax,16(%edi)
602 popl %esi
603 popl %edi
605 .globl _padlock_sha256_oneshot
606 .def _padlock_sha256_oneshot; .scl 2; .type 32; .endef
607 .align 16
608 _padlock_sha256_oneshot:
609 .L_padlock_sha256_oneshot_begin:
610 pushl %edi
611 pushl %esi
612 xorl %eax,%eax
613 movl 12(%esp),%edi
614 movl 16(%esp),%esi
615 movl 20(%esp),%ecx
616 pushl __win32_segv_handler
617 .byte 100,255,48
618 .byte 100,137,32
619 movl %esp,%edx
620 addl $-128,%esp
621 movups (%edi),%xmm0
622 andl $-16,%esp
623 movups 16(%edi),%xmm1
624 movaps %xmm0,(%esp)
625 movl %esp,%edi
626 movaps %xmm1,16(%esp)
627 xorl %eax,%eax
628 .byte 243,15,166,208
629 movaps (%esp),%xmm0
630 movaps 16(%esp),%xmm1
631 movl %edx,%esp
632 .byte 100,143,5,0,0,0,0
633 leal 4(%esp),%esp
634 movl 16(%esp),%edi
635 movups %xmm0,(%edi)
636 movups %xmm1,16(%edi)
637 popl %esi
638 popl %edi
640 .globl _padlock_sha256_blocks
641 .def _padlock_sha256_blocks; .scl 2; .type 32; .endef
642 .align 16
643 _padlock_sha256_blocks:
644 .L_padlock_sha256_blocks_begin:
645 pushl %edi
646 pushl %esi
647 movl 12(%esp),%edi
648 movl 16(%esp),%esi
649 movl 20(%esp),%ecx
650 movl %esp,%edx
651 addl $-128,%esp
652 movups (%edi),%xmm0
653 andl $-16,%esp
654 movups 16(%edi),%xmm1
655 movaps %xmm0,(%esp)
656 movl %esp,%edi
657 movaps %xmm1,16(%esp)
658 movl $-1,%eax
659 .byte 243,15,166,208
660 movaps (%esp),%xmm0
661 movaps 16(%esp),%xmm1
662 movl %edx,%esp
663 movl 12(%esp),%edi
664 movups %xmm0,(%edi)
665 movups %xmm1,16(%edi)
666 popl %esi
667 popl %edi
669 .globl _padlock_sha512_blocks
670 .def _padlock_sha512_blocks; .scl 2; .type 32; .endef
671 .align 16
672 _padlock_sha512_blocks:
673 .L_padlock_sha512_blocks_begin:
674 pushl %edi
675 pushl %esi
676 movl 12(%esp),%edi
677 movl 16(%esp),%esi
678 movl 20(%esp),%ecx
679 movl %esp,%edx
680 addl $-128,%esp
681 movups (%edi),%xmm0
682 andl $-16,%esp
683 movups 16(%edi),%xmm1
684 movups 32(%edi),%xmm2
685 movups 48(%edi),%xmm3
686 movaps %xmm0,(%esp)
687 movl %esp,%edi
688 movaps %xmm1,16(%esp)
689 movaps %xmm2,32(%esp)
690 movaps %xmm3,48(%esp)
691 .byte 243,15,166,224
692 movaps (%esp),%xmm0
693 movaps 16(%esp),%xmm1
694 movaps 32(%esp),%xmm2
695 movaps 48(%esp),%xmm3
696 movl %edx,%esp
697 movl 12(%esp),%edi
698 movups %xmm0,(%edi)
699 movups %xmm1,16(%edi)
700 movups %xmm2,32(%edi)
701 movups %xmm3,48(%edi)
702 popl %esi
703 popl %edi
705 .byte 86,73,65,32,80,97,100,108,111,99,107,32,120,56,54,32
706 .byte 109,111,100,117,108,101,44,32,67,82,89,80,84,79,71,65
707 .byte 77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101
708 .byte 110,115,115,108,46,111,114,103,62,0
709 .align 16
710 .data
711 .align 4
712 .Lpadlock_saved_context:
713 .long 0