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