Added Mike Hamburg's SSSE3 AES implementation.
[gnutls:gnutls.git] / lib / accelerated / x86 / macosx / e_padlock-x86.s
1 # Copyright (c) 2011-2013, 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 .file   "devel/perlasm/e_padlock-x86.s"
41 .text
42 .globl  _padlock_capability
43 .align  4
44 _padlock_capability:
45 L_padlock_capability_begin:
46         pushl   %ebx
47         pushfl
48         popl    %eax
49         movl    %eax,%ecx
50         xorl    $2097152,%eax
51         pushl   %eax
52         popfl
53         pushfl
54         popl    %eax
55         xorl    %eax,%ecx
56         xorl    %eax,%eax
57         btl     $21,%ecx
58         jnc     L000noluck
59         .byte   0x0f,0xa2
60         xorl    %eax,%eax
61         cmpl    $0x746e6543,%ebx
62         jne     L000noluck
63         cmpl    $0x48727561,%edx
64         jne     L000noluck
65         cmpl    $0x736c7561,%ecx
66         jne     L000noluck
67         movl    $3221225472,%eax
68         .byte   0x0f,0xa2
69         movl    %eax,%edx
70         xorl    %eax,%eax
71         cmpl    $3221225473,%edx
72         jb      L000noluck
73         movl    $1,%eax
74         .byte   0x0f,0xa2
75         orl     $15,%eax
76         xorl    %ebx,%ebx
77         andl    $4095,%eax
78         cmpl    $1791,%eax
79         sete    %bl
80         movl    $3221225473,%eax
81         pushl   %ebx
82         .byte   0x0f,0xa2
83         popl    %ebx
84         movl    %edx,%eax
85         shll    $4,%ebx
86         andl    $4294967279,%eax
87         orl     %ebx,%eax
88 L000noluck:
89         popl    %ebx
90         ret
91 .globl  _padlock_key_bswap
92 .align  4
93 _padlock_key_bswap:
94 L_padlock_key_bswap_begin:
95         movl    4(%esp),%edx
96         movl    240(%edx),%ecx
97 L001bswap_loop:
98         movl    (%edx),%eax
99         bswap   %eax
100         movl    %eax,(%edx)
101         leal    4(%edx),%edx
102         subl    $1,%ecx
103         jnz     L001bswap_loop
104         ret
105 .globl  _padlock_verify_context
106 .align  4
107 _padlock_verify_context:
108 L_padlock_verify_context_begin:
109         movl    4(%esp),%edx
110         leal    Lpadlock_saved_context-L002verify_pic_point,%eax
111         pushfl
112         call    __padlock_verify_ctx
113 L002verify_pic_point:
114         leal    4(%esp),%esp
115         ret
116 .align  4
117 __padlock_verify_ctx:
118         addl    (%esp),%eax
119         btl     $30,4(%esp)
120         jnc     L003verified
121         cmpl    (%eax),%edx
122         je      L003verified
123         pushfl
124         popfl
125 L003verified:
126         movl    %edx,(%eax)
127         ret
128 .globl  _padlock_reload_key
129 .align  4
130 _padlock_reload_key:
131 L_padlock_reload_key_begin:
132         pushfl
133         popfl
134         ret
135 .globl  _padlock_aes_block
136 .align  4
137 _padlock_aes_block:
138 L_padlock_aes_block_begin:
139         pushl   %edi
140         pushl   %esi
141         pushl   %ebx
142         movl    16(%esp),%edi
143         movl    20(%esp),%esi
144         movl    24(%esp),%edx
145         movl    $1,%ecx
146         leal    32(%edx),%ebx
147         leal    16(%edx),%edx
148 .byte   243,15,167,200
149         popl    %ebx
150         popl    %esi
151         popl    %edi
152         ret
153 .globl  _padlock_ecb_encrypt
154 .align  4
155 _padlock_ecb_encrypt:
156 L_padlock_ecb_encrypt_begin:
157         pushl   %ebp
158         pushl   %ebx
159         pushl   %esi
160         pushl   %edi
161         movl    20(%esp),%edi
162         movl    24(%esp),%esi
163         movl    28(%esp),%edx
164         movl    32(%esp),%ecx
165         testl   $15,%edx
166         jnz     L004ecb_abort
167         testl   $15,%ecx
168         jnz     L004ecb_abort
169         leal    Lpadlock_saved_context-L005ecb_pic_point,%eax
170         pushfl
171         cld
172         call    __padlock_verify_ctx
173 L005ecb_pic_point:
174         leal    16(%edx),%edx
175         xorl    %eax,%eax
176         xorl    %ebx,%ebx
177         testl   $32,(%edx)
178         jnz     L006ecb_aligned
179         testl   $15,%edi
180         setz    %al
181         testl   $15,%esi
182         setz    %bl
183         testl   %ebx,%eax
184         jnz     L006ecb_aligned
185         negl    %eax
186         movl    $512,%ebx
187         notl    %eax
188         leal    -24(%esp),%ebp
189         cmpl    %ebx,%ecx
190         cmovcl  %ecx,%ebx
191         andl    %ebx,%eax
192         movl    %ecx,%ebx
193         negl    %eax
194         andl    $511,%ebx
195         leal    (%eax,%ebp,1),%esp
196         movl    $512,%eax
197         cmovzl  %eax,%ebx
198         movl    %ebp,%eax
199         andl    $-16,%ebp
200         andl    $-16,%esp
201         movl    %eax,16(%ebp)
202         cmpl    %ebx,%ecx
203         ja      L007ecb_loop
204         movl    %esi,%eax
205         cmpl    %esp,%ebp
206         cmovel  %edi,%eax
207         addl    %ecx,%eax
208         negl    %eax
209         andl    $4095,%eax
210         cmpl    $128,%eax
211         movl    $-128,%eax
212         cmovael %ebx,%eax
213         andl    %eax,%ebx
214         jz      L008ecb_unaligned_tail
215         jmp     L007ecb_loop
216 .align  4,0x90
217 L007ecb_loop:
218         movl    %edi,(%ebp)
219         movl    %esi,4(%ebp)
220         movl    %ecx,8(%ebp)
221         movl    %ebx,%ecx
222         movl    %ebx,12(%ebp)
223         testl   $15,%edi
224         cmovnzl %esp,%edi
225         testl   $15,%esi
226         jz      L009ecb_inp_aligned
227         shrl    $2,%ecx
228 .byte   243,165
229         subl    %ebx,%edi
230         movl    %ebx,%ecx
231         movl    %edi,%esi
232 L009ecb_inp_aligned:
233         leal    -16(%edx),%eax
234         leal    16(%edx),%ebx
235         shrl    $4,%ecx
236 .byte   243,15,167,200
237         movl    (%ebp),%edi
238         movl    12(%ebp),%ebx
239         testl   $15,%edi
240         jz      L010ecb_out_aligned
241         movl    %ebx,%ecx
242         leal    (%esp),%esi
243         shrl    $2,%ecx
244 .byte   243,165
245         subl    %ebx,%edi
246 L010ecb_out_aligned:
247         movl    4(%ebp),%esi
248         movl    8(%ebp),%ecx
249         addl    %ebx,%edi
250         addl    %ebx,%esi
251         subl    %ebx,%ecx
252         movl    $512,%ebx
253         jz      L011ecb_break
254         cmpl    %ebx,%ecx
255         jae     L007ecb_loop
256 L008ecb_unaligned_tail:
257         xorl    %eax,%eax
258         cmpl    %ebp,%esp
259         cmovel  %ecx,%eax
260         subl    %eax,%esp
261         movl    %edi,%eax
262         movl    %ecx,%ebx
263         shrl    $2,%ecx
264         leal    (%esp),%edi
265 .byte   243,165
266         movl    %esp,%esi
267         movl    %eax,%edi
268         movl    %ebx,%ecx
269         jmp     L007ecb_loop
270 .align  4,0x90
271 L011ecb_break:
272         cmpl    %ebp,%esp
273         je      L012ecb_done
274         pxor    %xmm0,%xmm0
275         leal    (%esp),%eax
276 L013ecb_bzero:
277         movaps  %xmm0,(%eax)
278         leal    16(%eax),%eax
279         cmpl    %eax,%ebp
280         ja      L013ecb_bzero
281 L012ecb_done:
282         movl    16(%ebp),%ebp
283         leal    24(%ebp),%esp
284         jmp     L014ecb_exit
285 .align  4,0x90
286 L006ecb_aligned:
287         leal    (%esi,%ecx,1),%ebp
288         negl    %ebp
289         andl    $4095,%ebp
290         xorl    %eax,%eax
291         cmpl    $128,%ebp
292         movl    $127,%ebp
293         cmovael %eax,%ebp
294         andl    %ecx,%ebp
295         subl    %ebp,%ecx
296         jz      L015ecb_aligned_tail
297         leal    -16(%edx),%eax
298         leal    16(%edx),%ebx
299         shrl    $4,%ecx
300 .byte   243,15,167,200
301         testl   %ebp,%ebp
302         jz      L014ecb_exit
303 L015ecb_aligned_tail:
304         movl    %ebp,%ecx
305         leal    -24(%esp),%ebp
306         movl    %ebp,%esp
307         movl    %ebp,%eax
308         subl    %ecx,%esp
309         andl    $-16,%ebp
310         andl    $-16,%esp
311         movl    %eax,16(%ebp)
312         movl    %edi,%eax
313         movl    %ecx,%ebx
314         shrl    $2,%ecx
315         leal    (%esp),%edi
316 .byte   243,165
317         movl    %esp,%esi
318         movl    %eax,%edi
319         movl    %ebx,%ecx
320         jmp     L007ecb_loop
321 L014ecb_exit:
322         movl    $1,%eax
323         leal    4(%esp),%esp
324 L004ecb_abort:
325         popl    %edi
326         popl    %esi
327         popl    %ebx
328         popl    %ebp
329         ret
330 .globl  _padlock_cbc_encrypt
331 .align  4
332 _padlock_cbc_encrypt:
333 L_padlock_cbc_encrypt_begin:
334         pushl   %ebp
335         pushl   %ebx
336         pushl   %esi
337         pushl   %edi
338         movl    20(%esp),%edi
339         movl    24(%esp),%esi
340         movl    28(%esp),%edx
341         movl    32(%esp),%ecx
342         testl   $15,%edx
343         jnz     L016cbc_abort
344         testl   $15,%ecx
345         jnz     L016cbc_abort
346         leal    Lpadlock_saved_context-L017cbc_pic_point,%eax
347         pushfl
348         cld
349         call    __padlock_verify_ctx
350 L017cbc_pic_point:
351         leal    16(%edx),%edx
352         xorl    %eax,%eax
353         xorl    %ebx,%ebx
354         testl   $32,(%edx)
355         jnz     L018cbc_aligned
356         testl   $15,%edi
357         setz    %al
358         testl   $15,%esi
359         setz    %bl
360         testl   %ebx,%eax
361         jnz     L018cbc_aligned
362         negl    %eax
363         movl    $512,%ebx
364         notl    %eax
365         leal    -24(%esp),%ebp
366         cmpl    %ebx,%ecx
367         cmovcl  %ecx,%ebx
368         andl    %ebx,%eax
369         movl    %ecx,%ebx
370         negl    %eax
371         andl    $511,%ebx
372         leal    (%eax,%ebp,1),%esp
373         movl    $512,%eax
374         cmovzl  %eax,%ebx
375         movl    %ebp,%eax
376         andl    $-16,%ebp
377         andl    $-16,%esp
378         movl    %eax,16(%ebp)
379         cmpl    %ebx,%ecx
380         ja      L019cbc_loop
381         movl    %esi,%eax
382         cmpl    %esp,%ebp
383         cmovel  %edi,%eax
384         addl    %ecx,%eax
385         negl    %eax
386         andl    $4095,%eax
387         cmpl    $64,%eax
388         movl    $-64,%eax
389         cmovael %ebx,%eax
390         andl    %eax,%ebx
391         jz      L020cbc_unaligned_tail
392         jmp     L019cbc_loop
393 .align  4,0x90
394 L019cbc_loop:
395         movl    %edi,(%ebp)
396         movl    %esi,4(%ebp)
397         movl    %ecx,8(%ebp)
398         movl    %ebx,%ecx
399         movl    %ebx,12(%ebp)
400         testl   $15,%edi
401         cmovnzl %esp,%edi
402         testl   $15,%esi
403         jz      L021cbc_inp_aligned
404         shrl    $2,%ecx
405 .byte   243,165
406         subl    %ebx,%edi
407         movl    %ebx,%ecx
408         movl    %edi,%esi
409 L021cbc_inp_aligned:
410         leal    -16(%edx),%eax
411         leal    16(%edx),%ebx
412         shrl    $4,%ecx
413 .byte   243,15,167,208
414         movaps  (%eax),%xmm0
415         movaps  %xmm0,-16(%edx)
416         movl    (%ebp),%edi
417         movl    12(%ebp),%ebx
418         testl   $15,%edi
419         jz      L022cbc_out_aligned
420         movl    %ebx,%ecx
421         leal    (%esp),%esi
422         shrl    $2,%ecx
423 .byte   243,165
424         subl    %ebx,%edi
425 L022cbc_out_aligned:
426         movl    4(%ebp),%esi
427         movl    8(%ebp),%ecx
428         addl    %ebx,%edi
429         addl    %ebx,%esi
430         subl    %ebx,%ecx
431         movl    $512,%ebx
432         jz      L023cbc_break
433         cmpl    %ebx,%ecx
434         jae     L019cbc_loop
435 L020cbc_unaligned_tail:
436         xorl    %eax,%eax
437         cmpl    %ebp,%esp
438         cmovel  %ecx,%eax
439         subl    %eax,%esp
440         movl    %edi,%eax
441         movl    %ecx,%ebx
442         shrl    $2,%ecx
443         leal    (%esp),%edi
444 .byte   243,165
445         movl    %esp,%esi
446         movl    %eax,%edi
447         movl    %ebx,%ecx
448         jmp     L019cbc_loop
449 .align  4,0x90
450 L023cbc_break:
451         cmpl    %ebp,%esp
452         je      L024cbc_done
453         pxor    %xmm0,%xmm0
454         leal    (%esp),%eax
455 L025cbc_bzero:
456         movaps  %xmm0,(%eax)
457         leal    16(%eax),%eax
458         cmpl    %eax,%ebp
459         ja      L025cbc_bzero
460 L024cbc_done:
461         movl    16(%ebp),%ebp
462         leal    24(%ebp),%esp
463         jmp     L026cbc_exit
464 .align  4,0x90
465 L018cbc_aligned:
466         leal    (%esi,%ecx,1),%ebp
467         negl    %ebp
468         andl    $4095,%ebp
469         xorl    %eax,%eax
470         cmpl    $64,%ebp
471         movl    $63,%ebp
472         cmovael %eax,%ebp
473         andl    %ecx,%ebp
474         subl    %ebp,%ecx
475         jz      L027cbc_aligned_tail
476         leal    -16(%edx),%eax
477         leal    16(%edx),%ebx
478         shrl    $4,%ecx
479 .byte   243,15,167,208
480         movaps  (%eax),%xmm0
481         movaps  %xmm0,-16(%edx)
482         testl   %ebp,%ebp
483         jz      L026cbc_exit
484 L027cbc_aligned_tail:
485         movl    %ebp,%ecx
486         leal    -24(%esp),%ebp
487         movl    %ebp,%esp
488         movl    %ebp,%eax
489         subl    %ecx,%esp
490         andl    $-16,%ebp
491         andl    $-16,%esp
492         movl    %eax,16(%ebp)
493         movl    %edi,%eax
494         movl    %ecx,%ebx
495         shrl    $2,%ecx
496         leal    (%esp),%edi
497 .byte   243,165
498         movl    %esp,%esi
499         movl    %eax,%edi
500         movl    %ebx,%ecx
501         jmp     L019cbc_loop
502 L026cbc_exit:
503         movl    $1,%eax
504         leal    4(%esp),%esp
505 L016cbc_abort:
506         popl    %edi
507         popl    %esi
508         popl    %ebx
509         popl    %ebp
510         ret
511 .globl  _padlock_cfb_encrypt
512 .align  4
513 _padlock_cfb_encrypt:
514 L_padlock_cfb_encrypt_begin:
515         pushl   %ebp
516         pushl   %ebx
517         pushl   %esi
518         pushl   %edi
519         movl    20(%esp),%edi
520         movl    24(%esp),%esi
521         movl    28(%esp),%edx
522         movl    32(%esp),%ecx
523         testl   $15,%edx
524         jnz     L028cfb_abort
525         testl   $15,%ecx
526         jnz     L028cfb_abort
527         leal    Lpadlock_saved_context-L029cfb_pic_point,%eax
528         pushfl
529         cld
530         call    __padlock_verify_ctx
531 L029cfb_pic_point:
532         leal    16(%edx),%edx
533         xorl    %eax,%eax
534         xorl    %ebx,%ebx
535         testl   $32,(%edx)
536         jnz     L030cfb_aligned
537         testl   $15,%edi
538         setz    %al
539         testl   $15,%esi
540         setz    %bl
541         testl   %ebx,%eax
542         jnz     L030cfb_aligned
543         negl    %eax
544         movl    $512,%ebx
545         notl    %eax
546         leal    -24(%esp),%ebp
547         cmpl    %ebx,%ecx
548         cmovcl  %ecx,%ebx
549         andl    %ebx,%eax
550         movl    %ecx,%ebx
551         negl    %eax
552         andl    $511,%ebx
553         leal    (%eax,%ebp,1),%esp
554         movl    $512,%eax
555         cmovzl  %eax,%ebx
556         movl    %ebp,%eax
557         andl    $-16,%ebp
558         andl    $-16,%esp
559         movl    %eax,16(%ebp)
560         jmp     L031cfb_loop
561 .align  4,0x90
562 L031cfb_loop:
563         movl    %edi,(%ebp)
564         movl    %esi,4(%ebp)
565         movl    %ecx,8(%ebp)
566         movl    %ebx,%ecx
567         movl    %ebx,12(%ebp)
568         testl   $15,%edi
569         cmovnzl %esp,%edi
570         testl   $15,%esi
571         jz      L032cfb_inp_aligned
572         shrl    $2,%ecx
573 .byte   243,165
574         subl    %ebx,%edi
575         movl    %ebx,%ecx
576         movl    %edi,%esi
577 L032cfb_inp_aligned:
578         leal    -16(%edx),%eax
579         leal    16(%edx),%ebx
580         shrl    $4,%ecx
581 .byte   243,15,167,224
582         movaps  (%eax),%xmm0
583         movaps  %xmm0,-16(%edx)
584         movl    (%ebp),%edi
585         movl    12(%ebp),%ebx
586         testl   $15,%edi
587         jz      L033cfb_out_aligned
588         movl    %ebx,%ecx
589         leal    (%esp),%esi
590         shrl    $2,%ecx
591 .byte   243,165
592         subl    %ebx,%edi
593 L033cfb_out_aligned:
594         movl    4(%ebp),%esi
595         movl    8(%ebp),%ecx
596         addl    %ebx,%edi
597         addl    %ebx,%esi
598         subl    %ebx,%ecx
599         movl    $512,%ebx
600         jnz     L031cfb_loop
601         cmpl    %ebp,%esp
602         je      L034cfb_done
603         pxor    %xmm0,%xmm0
604         leal    (%esp),%eax
605 L035cfb_bzero:
606         movaps  %xmm0,(%eax)
607         leal    16(%eax),%eax
608         cmpl    %eax,%ebp
609         ja      L035cfb_bzero
610 L034cfb_done:
611         movl    16(%ebp),%ebp
612         leal    24(%ebp),%esp
613         jmp     L036cfb_exit
614 .align  4,0x90
615 L030cfb_aligned:
616         leal    -16(%edx),%eax
617         leal    16(%edx),%ebx
618         shrl    $4,%ecx
619 .byte   243,15,167,224
620         movaps  (%eax),%xmm0
621         movaps  %xmm0,-16(%edx)
622 L036cfb_exit:
623         movl    $1,%eax
624         leal    4(%esp),%esp
625 L028cfb_abort:
626         popl    %edi
627         popl    %esi
628         popl    %ebx
629         popl    %ebp
630         ret
631 .globl  _padlock_ofb_encrypt
632 .align  4
633 _padlock_ofb_encrypt:
634 L_padlock_ofb_encrypt_begin:
635         pushl   %ebp
636         pushl   %ebx
637         pushl   %esi
638         pushl   %edi
639         movl    20(%esp),%edi
640         movl    24(%esp),%esi
641         movl    28(%esp),%edx
642         movl    32(%esp),%ecx
643         testl   $15,%edx
644         jnz     L037ofb_abort
645         testl   $15,%ecx
646         jnz     L037ofb_abort
647         leal    Lpadlock_saved_context-L038ofb_pic_point,%eax
648         pushfl
649         cld
650         call    __padlock_verify_ctx
651 L038ofb_pic_point:
652         leal    16(%edx),%edx
653         xorl    %eax,%eax
654         xorl    %ebx,%ebx
655         testl   $32,(%edx)
656         jnz     L039ofb_aligned
657         testl   $15,%edi
658         setz    %al
659         testl   $15,%esi
660         setz    %bl
661         testl   %ebx,%eax
662         jnz     L039ofb_aligned
663         negl    %eax
664         movl    $512,%ebx
665         notl    %eax
666         leal    -24(%esp),%ebp
667         cmpl    %ebx,%ecx
668         cmovcl  %ecx,%ebx
669         andl    %ebx,%eax
670         movl    %ecx,%ebx
671         negl    %eax
672         andl    $511,%ebx
673         leal    (%eax,%ebp,1),%esp
674         movl    $512,%eax
675         cmovzl  %eax,%ebx
676         movl    %ebp,%eax
677         andl    $-16,%ebp
678         andl    $-16,%esp
679         movl    %eax,16(%ebp)
680         jmp     L040ofb_loop
681 .align  4,0x90
682 L040ofb_loop:
683         movl    %edi,(%ebp)
684         movl    %esi,4(%ebp)
685         movl    %ecx,8(%ebp)
686         movl    %ebx,%ecx
687         movl    %ebx,12(%ebp)
688         testl   $15,%edi
689         cmovnzl %esp,%edi
690         testl   $15,%esi
691         jz      L041ofb_inp_aligned
692         shrl    $2,%ecx
693 .byte   243,165
694         subl    %ebx,%edi
695         movl    %ebx,%ecx
696         movl    %edi,%esi
697 L041ofb_inp_aligned:
698         leal    -16(%edx),%eax
699         leal    16(%edx),%ebx
700         shrl    $4,%ecx
701 .byte   243,15,167,232
702         movaps  (%eax),%xmm0
703         movaps  %xmm0,-16(%edx)
704         movl    (%ebp),%edi
705         movl    12(%ebp),%ebx
706         testl   $15,%edi
707         jz      L042ofb_out_aligned
708         movl    %ebx,%ecx
709         leal    (%esp),%esi
710         shrl    $2,%ecx
711 .byte   243,165
712         subl    %ebx,%edi
713 L042ofb_out_aligned:
714         movl    4(%ebp),%esi
715         movl    8(%ebp),%ecx
716         addl    %ebx,%edi
717         addl    %ebx,%esi
718         subl    %ebx,%ecx
719         movl    $512,%ebx
720         jnz     L040ofb_loop
721         cmpl    %ebp,%esp
722         je      L043ofb_done
723         pxor    %xmm0,%xmm0
724         leal    (%esp),%eax
725 L044ofb_bzero:
726         movaps  %xmm0,(%eax)
727         leal    16(%eax),%eax
728         cmpl    %eax,%ebp
729         ja      L044ofb_bzero
730 L043ofb_done:
731         movl    16(%ebp),%ebp
732         leal    24(%ebp),%esp
733         jmp     L045ofb_exit
734 .align  4,0x90
735 L039ofb_aligned:
736         leal    -16(%edx),%eax
737         leal    16(%edx),%ebx
738         shrl    $4,%ecx
739 .byte   243,15,167,232
740         movaps  (%eax),%xmm0
741         movaps  %xmm0,-16(%edx)
742 L045ofb_exit:
743         movl    $1,%eax
744         leal    4(%esp),%esp
745 L037ofb_abort:
746         popl    %edi
747         popl    %esi
748         popl    %ebx
749         popl    %ebp
750         ret
751 .globl  _padlock_ctr32_encrypt
752 .align  4
753 _padlock_ctr32_encrypt:
754 L_padlock_ctr32_encrypt_begin:
755         pushl   %ebp
756         pushl   %ebx
757         pushl   %esi
758         pushl   %edi
759         movl    20(%esp),%edi
760         movl    24(%esp),%esi
761         movl    28(%esp),%edx
762         movl    32(%esp),%ecx
763         testl   $15,%edx
764         jnz     L046ctr32_abort
765         testl   $15,%ecx
766         jnz     L046ctr32_abort
767         leal    Lpadlock_saved_context-L047ctr32_pic_point,%eax
768         pushfl
769         cld
770         call    __padlock_verify_ctx
771 L047ctr32_pic_point:
772         leal    16(%edx),%edx
773         xorl    %eax,%eax
774         movq    -16(%edx),%mm0
775         movl    $512,%ebx
776         notl    %eax
777         leal    -24(%esp),%ebp
778         cmpl    %ebx,%ecx
779         cmovcl  %ecx,%ebx
780         andl    %ebx,%eax
781         movl    %ecx,%ebx
782         negl    %eax
783         andl    $511,%ebx
784         leal    (%eax,%ebp,1),%esp
785         movl    $512,%eax
786         cmovzl  %eax,%ebx
787         movl    %ebp,%eax
788         andl    $-16,%ebp
789         andl    $-16,%esp
790         movl    %eax,16(%ebp)
791         jmp     L048ctr32_loop
792 .align  4,0x90
793 L048ctr32_loop:
794         movl    %edi,(%ebp)
795         movl    %esi,4(%ebp)
796         movl    %ecx,8(%ebp)
797         movl    %ebx,%ecx
798         movl    %ebx,12(%ebp)
799         movl    -4(%edx),%ecx
800         xorl    %edi,%edi
801         movl    -8(%edx),%eax
802 L049ctr32_prepare:
803         movl    %ecx,12(%esp,%edi,1)
804         bswap   %ecx
805         movq    %mm0,(%esp,%edi,1)
806         incl    %ecx
807         movl    %eax,8(%esp,%edi,1)
808         bswap   %ecx
809         leal    16(%edi),%edi
810         cmpl    %ebx,%edi
811         jb      L049ctr32_prepare
812         movl    %ecx,-4(%edx)
813         leal    (%esp),%esi
814         leal    (%esp),%edi
815         movl    %ebx,%ecx
816         leal    -16(%edx),%eax
817         leal    16(%edx),%ebx
818         shrl    $4,%ecx
819 .byte   243,15,167,200
820         movl    (%ebp),%edi
821         movl    12(%ebp),%ebx
822         movl    4(%ebp),%esi
823         xorl    %ecx,%ecx
824 L050ctr32_xor:
825         movups  (%esi,%ecx,1),%xmm1
826         leal    16(%ecx),%ecx
827         pxor    -16(%esp,%ecx,1),%xmm1
828         movups  %xmm1,-16(%edi,%ecx,1)
829         cmpl    %ebx,%ecx
830         jb      L050ctr32_xor
831         movl    8(%ebp),%ecx
832         addl    %ebx,%edi
833         addl    %ebx,%esi
834         subl    %ebx,%ecx
835         movl    $512,%ebx
836         jnz     L048ctr32_loop
837         pxor    %xmm0,%xmm0
838         leal    (%esp),%eax
839 L051ctr32_bzero:
840         movaps  %xmm0,(%eax)
841         leal    16(%eax),%eax
842         cmpl    %eax,%ebp
843         ja      L051ctr32_bzero
844 L052ctr32_done:
845         movl    16(%ebp),%ebp
846         leal    24(%ebp),%esp
847         movl    $1,%eax
848         leal    4(%esp),%esp
849         emms
850 L046ctr32_abort:
851         popl    %edi
852         popl    %esi
853         popl    %ebx
854         popl    %ebp
855         ret
856 .globl  _padlock_xstore
857 .align  4
858 _padlock_xstore:
859 L_padlock_xstore_begin:
860         pushl   %edi
861         movl    8(%esp),%edi
862         movl    12(%esp),%edx
863 .byte   15,167,192
864         popl    %edi
865         ret
866 .align  4
867 __win32_segv_handler:
868         movl    $1,%eax
869         movl    4(%esp),%edx
870         movl    12(%esp),%ecx
871         cmpl    $3221225477,(%edx)
872         jne     L053ret
873         addl    $4,184(%ecx)
874         movl    $0,%eax
875 L053ret:
876         ret
877 .globl  _padlock_sha1_oneshot
878 .align  4
879 _padlock_sha1_oneshot:
880 L_padlock_sha1_oneshot_begin:
881         pushl   %edi
882         pushl   %esi
883         xorl    %eax,%eax
884         movl    12(%esp),%edi
885         movl    16(%esp),%esi
886         movl    20(%esp),%ecx
887         movl    %esp,%edx
888         addl    $-128,%esp
889         movups  (%edi),%xmm0
890         andl    $-16,%esp
891         movl    16(%edi),%eax
892         movaps  %xmm0,(%esp)
893         movl    %esp,%edi
894         movl    %eax,16(%esp)
895         xorl    %eax,%eax
896 .byte   243,15,166,200
897         movaps  (%esp),%xmm0
898         movl    16(%esp),%eax
899         movl    %edx,%esp
900         movl    12(%esp),%edi
901         movups  %xmm0,(%edi)
902         movl    %eax,16(%edi)
903         popl    %esi
904         popl    %edi
905         ret
906 .globl  _padlock_sha1_blocks
907 .align  4
908 _padlock_sha1_blocks:
909 L_padlock_sha1_blocks_begin:
910         pushl   %edi
911         pushl   %esi
912         movl    12(%esp),%edi
913         movl    16(%esp),%esi
914         movl    %esp,%edx
915         movl    20(%esp),%ecx
916         addl    $-128,%esp
917         movups  (%edi),%xmm0
918         andl    $-16,%esp
919         movl    16(%edi),%eax
920         movaps  %xmm0,(%esp)
921         movl    %esp,%edi
922         movl    %eax,16(%esp)
923         movl    $-1,%eax
924 .byte   243,15,166,200
925         movaps  (%esp),%xmm0
926         movl    16(%esp),%eax
927         movl    %edx,%esp
928         movl    12(%esp),%edi
929         movups  %xmm0,(%edi)
930         movl    %eax,16(%edi)
931         popl    %esi
932         popl    %edi
933         ret
934 .globl  _padlock_sha256_oneshot
935 .align  4
936 _padlock_sha256_oneshot:
937 L_padlock_sha256_oneshot_begin:
938         pushl   %edi
939         pushl   %esi
940         xorl    %eax,%eax
941         movl    12(%esp),%edi
942         movl    16(%esp),%esi
943         movl    20(%esp),%ecx
944         movl    %esp,%edx
945         addl    $-128,%esp
946         movups  (%edi),%xmm0
947         andl    $-16,%esp
948         movups  16(%edi),%xmm1
949         movaps  %xmm0,(%esp)
950         movl    %esp,%edi
951         movaps  %xmm1,16(%esp)
952         xorl    %eax,%eax
953 .byte   243,15,166,208
954         movaps  (%esp),%xmm0
955         movaps  16(%esp),%xmm1
956         movl    %edx,%esp
957         movl    12(%esp),%edi
958         movups  %xmm0,(%edi)
959         movups  %xmm1,16(%edi)
960         popl    %esi
961         popl    %edi
962         ret
963 .globl  _padlock_sha256_blocks
964 .align  4
965 _padlock_sha256_blocks:
966 L_padlock_sha256_blocks_begin:
967         pushl   %edi
968         pushl   %esi
969         movl    12(%esp),%edi
970         movl    16(%esp),%esi
971         movl    20(%esp),%ecx
972         movl    %esp,%edx
973         addl    $-128,%esp
974         movups  (%edi),%xmm0
975         andl    $-16,%esp
976         movups  16(%edi),%xmm1
977         movaps  %xmm0,(%esp)
978         movl    %esp,%edi
979         movaps  %xmm1,16(%esp)
980         movl    $-1,%eax
981 .byte   243,15,166,208
982         movaps  (%esp),%xmm0
983         movaps  16(%esp),%xmm1
984         movl    %edx,%esp
985         movl    12(%esp),%edi
986         movups  %xmm0,(%edi)
987         movups  %xmm1,16(%edi)
988         popl    %esi
989         popl    %edi
990         ret
991 .globl  _padlock_sha512_blocks
992 .align  4
993 _padlock_sha512_blocks:
994 L_padlock_sha512_blocks_begin:
995         pushl   %edi
996         pushl   %esi
997         movl    12(%esp),%edi
998         movl    16(%esp),%esi
999         movl    20(%esp),%ecx
1000         movl    %esp,%edx
1001         addl    $-128,%esp
1002         movups  (%edi),%xmm0
1003         andl    $-16,%esp
1004         movups  16(%edi),%xmm1
1005         movups  32(%edi),%xmm2
1006         movups  48(%edi),%xmm3
1007         movaps  %xmm0,(%esp)
1008         movl    %esp,%edi
1009         movaps  %xmm1,16(%esp)
1010         movaps  %xmm2,32(%esp)
1011         movaps  %xmm3,48(%esp)
1012 .byte   243,15,166,224
1013         movaps  (%esp),%xmm0
1014         movaps  16(%esp),%xmm1
1015         movaps  32(%esp),%xmm2
1016         movaps  48(%esp),%xmm3
1017         movl    %edx,%esp
1018         movl    12(%esp),%edi
1019         movups  %xmm0,(%edi)
1020         movups  %xmm1,16(%edi)
1021         movups  %xmm2,32(%edi)
1022         movups  %xmm3,48(%edi)
1023         popl    %esi
1024         popl    %edi
1025         ret
1026 .byte   86,73,65,32,80,97,100,108,111,99,107,32,120,56,54,32
1027 .byte   109,111,100,117,108,101,44,32,67,82,89,80,84,79,71,65
1028 .byte   77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101
1029 .byte   110,115,115,108,46,111,114,103,62,0
1030 .align  4,0x90
1031 .data
1032 .align  2,0x90
1033 Lpadlock_saved_context:
1034 .long   0
1035
1036 .section .note.GNU-stack,"",%progbits