]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - secure/lib/libcrypto/amd64/e_padlock-x86_64.S
Regen amd64 assembly files for OpenSSL 1.1.1.
[FreeBSD/FreeBSD.git] / secure / lib / libcrypto / amd64 / e_padlock-x86_64.S
1 /* $FreeBSD$ */
2 /* Do not modify. This file is auto-generated from e_padlock-x86_64.pl. */
3 .text   
4 .globl  padlock_capability
5 .type   padlock_capability,@function
6 .align  16
7 padlock_capability:
8         movq    %rbx,%r8
9         xorl    %eax,%eax
10         cpuid
11         xorl    %eax,%eax
12         cmpl    $0x746e6543,%ebx
13         jne     .Lzhaoxin
14         cmpl    $0x48727561,%edx
15         jne     .Lnoluck
16         cmpl    $0x736c7561,%ecx
17         jne     .Lnoluck
18         jmp     .LzhaoxinEnd
19 .Lzhaoxin:
20         cmpl    $0x68532020,%ebx
21         jne     .Lnoluck
22         cmpl    $0x68676e61,%edx
23         jne     .Lnoluck
24         cmpl    $0x20206961,%ecx
25         jne     .Lnoluck
26 .LzhaoxinEnd:
27         movl    $0xC0000000,%eax
28         cpuid
29         movl    %eax,%edx
30         xorl    %eax,%eax
31         cmpl    $0xC0000001,%edx
32         jb      .Lnoluck
33         movl    $0xC0000001,%eax
34         cpuid
35         movl    %edx,%eax
36         andl    $0xffffffef,%eax
37         orl     $0x10,%eax
38 .Lnoluck:
39         movq    %r8,%rbx
40         .byte   0xf3,0xc3
41 .size   padlock_capability,.-padlock_capability
42
43 .globl  padlock_key_bswap
44 .type   padlock_key_bswap,@function
45 .align  16
46 padlock_key_bswap:
47         movl    240(%rdi),%edx
48 .Lbswap_loop:
49         movl    (%rdi),%eax
50         bswapl  %eax
51         movl    %eax,(%rdi)
52         leaq    4(%rdi),%rdi
53         subl    $1,%edx
54         jnz     .Lbswap_loop
55         .byte   0xf3,0xc3
56 .size   padlock_key_bswap,.-padlock_key_bswap
57
58 .globl  padlock_verify_context
59 .type   padlock_verify_context,@function
60 .align  16
61 padlock_verify_context:
62         movq    %rdi,%rdx
63         pushf
64         leaq    .Lpadlock_saved_context(%rip),%rax
65         call    _padlock_verify_ctx
66         leaq    8(%rsp),%rsp
67         .byte   0xf3,0xc3
68 .size   padlock_verify_context,.-padlock_verify_context
69
70 .type   _padlock_verify_ctx,@function
71 .align  16
72 _padlock_verify_ctx:
73         movq    8(%rsp),%r8
74         btq     $30,%r8
75         jnc     .Lverified
76         cmpq    (%rax),%rdx
77         je      .Lverified
78         pushf
79         popf
80 .Lverified:
81         movq    %rdx,(%rax)
82         .byte   0xf3,0xc3
83 .size   _padlock_verify_ctx,.-_padlock_verify_ctx
84
85 .globl  padlock_reload_key
86 .type   padlock_reload_key,@function
87 .align  16
88 padlock_reload_key:
89         pushf
90         popf
91         .byte   0xf3,0xc3
92 .size   padlock_reload_key,.-padlock_reload_key
93
94 .globl  padlock_aes_block
95 .type   padlock_aes_block,@function
96 .align  16
97 padlock_aes_block:
98         movq    %rbx,%r8
99         movq    $1,%rcx
100         leaq    32(%rdx),%rbx
101         leaq    16(%rdx),%rdx
102 .byte   0xf3,0x0f,0xa7,0xc8
103         movq    %r8,%rbx
104         .byte   0xf3,0xc3
105 .size   padlock_aes_block,.-padlock_aes_block
106
107 .globl  padlock_xstore
108 .type   padlock_xstore,@function
109 .align  16
110 padlock_xstore:
111         movl    %esi,%edx
112 .byte   0x0f,0xa7,0xc0
113         .byte   0xf3,0xc3
114 .size   padlock_xstore,.-padlock_xstore
115
116 .globl  padlock_sha1_oneshot
117 .type   padlock_sha1_oneshot,@function
118 .align  16
119 padlock_sha1_oneshot:
120         movq    %rdx,%rcx
121         movq    %rdi,%rdx
122         movups  (%rdi),%xmm0
123         subq    $128+8,%rsp
124         movl    16(%rdi),%eax
125         movaps  %xmm0,(%rsp)
126         movq    %rsp,%rdi
127         movl    %eax,16(%rsp)
128         xorq    %rax,%rax
129 .byte   0xf3,0x0f,0xa6,0xc8
130         movaps  (%rsp),%xmm0
131         movl    16(%rsp),%eax
132         addq    $128+8,%rsp
133         movups  %xmm0,(%rdx)
134         movl    %eax,16(%rdx)
135         .byte   0xf3,0xc3
136 .size   padlock_sha1_oneshot,.-padlock_sha1_oneshot
137
138 .globl  padlock_sha1_blocks
139 .type   padlock_sha1_blocks,@function
140 .align  16
141 padlock_sha1_blocks:
142         movq    %rdx,%rcx
143         movq    %rdi,%rdx
144         movups  (%rdi),%xmm0
145         subq    $128+8,%rsp
146         movl    16(%rdi),%eax
147         movaps  %xmm0,(%rsp)
148         movq    %rsp,%rdi
149         movl    %eax,16(%rsp)
150         movq    $-1,%rax
151 .byte   0xf3,0x0f,0xa6,0xc8
152         movaps  (%rsp),%xmm0
153         movl    16(%rsp),%eax
154         addq    $128+8,%rsp
155         movups  %xmm0,(%rdx)
156         movl    %eax,16(%rdx)
157         .byte   0xf3,0xc3
158 .size   padlock_sha1_blocks,.-padlock_sha1_blocks
159
160 .globl  padlock_sha256_oneshot
161 .type   padlock_sha256_oneshot,@function
162 .align  16
163 padlock_sha256_oneshot:
164         movq    %rdx,%rcx
165         movq    %rdi,%rdx
166         movups  (%rdi),%xmm0
167         subq    $128+8,%rsp
168         movups  16(%rdi),%xmm1
169         movaps  %xmm0,(%rsp)
170         movq    %rsp,%rdi
171         movaps  %xmm1,16(%rsp)
172         xorq    %rax,%rax
173 .byte   0xf3,0x0f,0xa6,0xd0
174         movaps  (%rsp),%xmm0
175         movaps  16(%rsp),%xmm1
176         addq    $128+8,%rsp
177         movups  %xmm0,(%rdx)
178         movups  %xmm1,16(%rdx)
179         .byte   0xf3,0xc3
180 .size   padlock_sha256_oneshot,.-padlock_sha256_oneshot
181
182 .globl  padlock_sha256_blocks
183 .type   padlock_sha256_blocks,@function
184 .align  16
185 padlock_sha256_blocks:
186         movq    %rdx,%rcx
187         movq    %rdi,%rdx
188         movups  (%rdi),%xmm0
189         subq    $128+8,%rsp
190         movups  16(%rdi),%xmm1
191         movaps  %xmm0,(%rsp)
192         movq    %rsp,%rdi
193         movaps  %xmm1,16(%rsp)
194         movq    $-1,%rax
195 .byte   0xf3,0x0f,0xa6,0xd0
196         movaps  (%rsp),%xmm0
197         movaps  16(%rsp),%xmm1
198         addq    $128+8,%rsp
199         movups  %xmm0,(%rdx)
200         movups  %xmm1,16(%rdx)
201         .byte   0xf3,0xc3
202 .size   padlock_sha256_blocks,.-padlock_sha256_blocks
203
204 .globl  padlock_sha512_blocks
205 .type   padlock_sha512_blocks,@function
206 .align  16
207 padlock_sha512_blocks:
208         movq    %rdx,%rcx
209         movq    %rdi,%rdx
210         movups  (%rdi),%xmm0
211         subq    $128+8,%rsp
212         movups  16(%rdi),%xmm1
213         movups  32(%rdi),%xmm2
214         movups  48(%rdi),%xmm3
215         movaps  %xmm0,(%rsp)
216         movq    %rsp,%rdi
217         movaps  %xmm1,16(%rsp)
218         movaps  %xmm2,32(%rsp)
219         movaps  %xmm3,48(%rsp)
220 .byte   0xf3,0x0f,0xa6,0xe0
221         movaps  (%rsp),%xmm0
222         movaps  16(%rsp),%xmm1
223         movaps  32(%rsp),%xmm2
224         movaps  48(%rsp),%xmm3
225         addq    $128+8,%rsp
226         movups  %xmm0,(%rdx)
227         movups  %xmm1,16(%rdx)
228         movups  %xmm2,32(%rdx)
229         movups  %xmm3,48(%rdx)
230         .byte   0xf3,0xc3
231 .size   padlock_sha512_blocks,.-padlock_sha512_blocks
232 .globl  padlock_ecb_encrypt
233 .type   padlock_ecb_encrypt,@function
234 .align  16
235 padlock_ecb_encrypt:
236         pushq   %rbp
237         pushq   %rbx
238
239         xorl    %eax,%eax
240         testq   $15,%rdx
241         jnz     .Lecb_abort
242         testq   $15,%rcx
243         jnz     .Lecb_abort
244         leaq    .Lpadlock_saved_context(%rip),%rax
245         pushf
246         cld
247         call    _padlock_verify_ctx
248         leaq    16(%rdx),%rdx
249         xorl    %eax,%eax
250         xorl    %ebx,%ebx
251         testl   $32,(%rdx)
252         jnz     .Lecb_aligned
253         testq   $0x0f,%rdi
254         setz    %al
255         testq   $0x0f,%rsi
256         setz    %bl
257         testl   %ebx,%eax
258         jnz     .Lecb_aligned
259         negq    %rax
260         movq    $512,%rbx
261         notq    %rax
262         leaq    (%rsp),%rbp
263         cmpq    %rbx,%rcx
264         cmovcq  %rcx,%rbx
265         andq    %rbx,%rax
266         movq    %rcx,%rbx
267         negq    %rax
268         andq    $512-1,%rbx
269         leaq    (%rax,%rbp,1),%rsp
270         movq    $512,%rax
271         cmovzq  %rax,%rbx
272         cmpq    %rbx,%rcx
273         ja      .Lecb_loop
274         movq    %rsi,%rax
275         cmpq    %rsp,%rbp
276         cmoveq  %rdi,%rax
277         addq    %rcx,%rax
278         negq    %rax
279         andq    $0xfff,%rax
280         cmpq    $128,%rax
281         movq    $-128,%rax
282         cmovaeq %rbx,%rax
283         andq    %rax,%rbx
284         jz      .Lecb_unaligned_tail
285         jmp     .Lecb_loop
286 .align  16
287 .Lecb_loop:
288         cmpq    %rcx,%rbx
289         cmovaq  %rcx,%rbx
290         movq    %rdi,%r8
291         movq    %rsi,%r9
292         movq    %rcx,%r10
293         movq    %rbx,%rcx
294         movq    %rbx,%r11
295         testq   $0x0f,%rdi
296         cmovnzq %rsp,%rdi
297         testq   $0x0f,%rsi
298         jz      .Lecb_inp_aligned
299         shrq    $3,%rcx
300 .byte   0xf3,0x48,0xa5
301         subq    %rbx,%rdi
302         movq    %rbx,%rcx
303         movq    %rdi,%rsi
304 .Lecb_inp_aligned:
305         leaq    -16(%rdx),%rax
306         leaq    16(%rdx),%rbx
307         shrq    $4,%rcx
308 .byte   0xf3,0x0f,0xa7,200
309         movq    %r8,%rdi
310         movq    %r11,%rbx
311         testq   $0x0f,%rdi
312         jz      .Lecb_out_aligned
313         movq    %rbx,%rcx
314         leaq    (%rsp),%rsi
315         shrq    $3,%rcx
316 .byte   0xf3,0x48,0xa5
317         subq    %rbx,%rdi
318 .Lecb_out_aligned:
319         movq    %r9,%rsi
320         movq    %r10,%rcx
321         addq    %rbx,%rdi
322         addq    %rbx,%rsi
323         subq    %rbx,%rcx
324         movq    $512,%rbx
325         jz      .Lecb_break
326         cmpq    %rbx,%rcx
327         jae     .Lecb_loop
328 .Lecb_unaligned_tail:
329         xorl    %eax,%eax
330         cmpq    %rsp,%rbp
331         cmoveq  %rcx,%rax
332         movq    %rdi,%r8
333         movq    %rcx,%rbx
334         subq    %rax,%rsp
335         shrq    $3,%rcx
336         leaq    (%rsp),%rdi
337 .byte   0xf3,0x48,0xa5
338         movq    %rsp,%rsi
339         movq    %r8,%rdi
340         movq    %rbx,%rcx
341         jmp     .Lecb_loop
342 .align  16
343 .Lecb_break:
344         cmpq    %rbp,%rsp
345         je      .Lecb_done
346
347         pxor    %xmm0,%xmm0
348         leaq    (%rsp),%rax
349 .Lecb_bzero:
350         movaps  %xmm0,(%rax)
351         leaq    16(%rax),%rax
352         cmpq    %rax,%rbp
353         ja      .Lecb_bzero
354
355 .Lecb_done:
356         leaq    (%rbp),%rsp
357         jmp     .Lecb_exit
358
359 .align  16
360 .Lecb_aligned:
361         leaq    (%rsi,%rcx,1),%rbp
362         negq    %rbp
363         andq    $0xfff,%rbp
364         xorl    %eax,%eax
365         cmpq    $128,%rbp
366         movq    $128-1,%rbp
367         cmovaeq %rax,%rbp
368         andq    %rcx,%rbp
369         subq    %rbp,%rcx
370         jz      .Lecb_aligned_tail
371         leaq    -16(%rdx),%rax
372         leaq    16(%rdx),%rbx
373         shrq    $4,%rcx
374 .byte   0xf3,0x0f,0xa7,200
375         testq   %rbp,%rbp
376         jz      .Lecb_exit
377
378 .Lecb_aligned_tail:
379         movq    %rdi,%r8
380         movq    %rbp,%rbx
381         movq    %rbp,%rcx
382         leaq    (%rsp),%rbp
383         subq    %rcx,%rsp
384         shrq    $3,%rcx
385         leaq    (%rsp),%rdi
386 .byte   0xf3,0x48,0xa5
387         leaq    (%r8),%rdi
388         leaq    (%rsp),%rsi
389         movq    %rbx,%rcx
390         jmp     .Lecb_loop
391 .Lecb_exit:
392         movl    $1,%eax
393         leaq    8(%rsp),%rsp
394 .Lecb_abort:
395         popq    %rbx
396         popq    %rbp
397         .byte   0xf3,0xc3
398 .size   padlock_ecb_encrypt,.-padlock_ecb_encrypt
399 .globl  padlock_cbc_encrypt
400 .type   padlock_cbc_encrypt,@function
401 .align  16
402 padlock_cbc_encrypt:
403         pushq   %rbp
404         pushq   %rbx
405
406         xorl    %eax,%eax
407         testq   $15,%rdx
408         jnz     .Lcbc_abort
409         testq   $15,%rcx
410         jnz     .Lcbc_abort
411         leaq    .Lpadlock_saved_context(%rip),%rax
412         pushf
413         cld
414         call    _padlock_verify_ctx
415         leaq    16(%rdx),%rdx
416         xorl    %eax,%eax
417         xorl    %ebx,%ebx
418         testl   $32,(%rdx)
419         jnz     .Lcbc_aligned
420         testq   $0x0f,%rdi
421         setz    %al
422         testq   $0x0f,%rsi
423         setz    %bl
424         testl   %ebx,%eax
425         jnz     .Lcbc_aligned
426         negq    %rax
427         movq    $512,%rbx
428         notq    %rax
429         leaq    (%rsp),%rbp
430         cmpq    %rbx,%rcx
431         cmovcq  %rcx,%rbx
432         andq    %rbx,%rax
433         movq    %rcx,%rbx
434         negq    %rax
435         andq    $512-1,%rbx
436         leaq    (%rax,%rbp,1),%rsp
437         movq    $512,%rax
438         cmovzq  %rax,%rbx
439         cmpq    %rbx,%rcx
440         ja      .Lcbc_loop
441         movq    %rsi,%rax
442         cmpq    %rsp,%rbp
443         cmoveq  %rdi,%rax
444         addq    %rcx,%rax
445         negq    %rax
446         andq    $0xfff,%rax
447         cmpq    $64,%rax
448         movq    $-64,%rax
449         cmovaeq %rbx,%rax
450         andq    %rax,%rbx
451         jz      .Lcbc_unaligned_tail
452         jmp     .Lcbc_loop
453 .align  16
454 .Lcbc_loop:
455         cmpq    %rcx,%rbx
456         cmovaq  %rcx,%rbx
457         movq    %rdi,%r8
458         movq    %rsi,%r9
459         movq    %rcx,%r10
460         movq    %rbx,%rcx
461         movq    %rbx,%r11
462         testq   $0x0f,%rdi
463         cmovnzq %rsp,%rdi
464         testq   $0x0f,%rsi
465         jz      .Lcbc_inp_aligned
466         shrq    $3,%rcx
467 .byte   0xf3,0x48,0xa5
468         subq    %rbx,%rdi
469         movq    %rbx,%rcx
470         movq    %rdi,%rsi
471 .Lcbc_inp_aligned:
472         leaq    -16(%rdx),%rax
473         leaq    16(%rdx),%rbx
474         shrq    $4,%rcx
475 .byte   0xf3,0x0f,0xa7,208
476         movdqa  (%rax),%xmm0
477         movdqa  %xmm0,-16(%rdx)
478         movq    %r8,%rdi
479         movq    %r11,%rbx
480         testq   $0x0f,%rdi
481         jz      .Lcbc_out_aligned
482         movq    %rbx,%rcx
483         leaq    (%rsp),%rsi
484         shrq    $3,%rcx
485 .byte   0xf3,0x48,0xa5
486         subq    %rbx,%rdi
487 .Lcbc_out_aligned:
488         movq    %r9,%rsi
489         movq    %r10,%rcx
490         addq    %rbx,%rdi
491         addq    %rbx,%rsi
492         subq    %rbx,%rcx
493         movq    $512,%rbx
494         jz      .Lcbc_break
495         cmpq    %rbx,%rcx
496         jae     .Lcbc_loop
497 .Lcbc_unaligned_tail:
498         xorl    %eax,%eax
499         cmpq    %rsp,%rbp
500         cmoveq  %rcx,%rax
501         movq    %rdi,%r8
502         movq    %rcx,%rbx
503         subq    %rax,%rsp
504         shrq    $3,%rcx
505         leaq    (%rsp),%rdi
506 .byte   0xf3,0x48,0xa5
507         movq    %rsp,%rsi
508         movq    %r8,%rdi
509         movq    %rbx,%rcx
510         jmp     .Lcbc_loop
511 .align  16
512 .Lcbc_break:
513         cmpq    %rbp,%rsp
514         je      .Lcbc_done
515
516         pxor    %xmm0,%xmm0
517         leaq    (%rsp),%rax
518 .Lcbc_bzero:
519         movaps  %xmm0,(%rax)
520         leaq    16(%rax),%rax
521         cmpq    %rax,%rbp
522         ja      .Lcbc_bzero
523
524 .Lcbc_done:
525         leaq    (%rbp),%rsp
526         jmp     .Lcbc_exit
527
528 .align  16
529 .Lcbc_aligned:
530         leaq    (%rsi,%rcx,1),%rbp
531         negq    %rbp
532         andq    $0xfff,%rbp
533         xorl    %eax,%eax
534         cmpq    $64,%rbp
535         movq    $64-1,%rbp
536         cmovaeq %rax,%rbp
537         andq    %rcx,%rbp
538         subq    %rbp,%rcx
539         jz      .Lcbc_aligned_tail
540         leaq    -16(%rdx),%rax
541         leaq    16(%rdx),%rbx
542         shrq    $4,%rcx
543 .byte   0xf3,0x0f,0xa7,208
544         movdqa  (%rax),%xmm0
545         movdqa  %xmm0,-16(%rdx)
546         testq   %rbp,%rbp
547         jz      .Lcbc_exit
548
549 .Lcbc_aligned_tail:
550         movq    %rdi,%r8
551         movq    %rbp,%rbx
552         movq    %rbp,%rcx
553         leaq    (%rsp),%rbp
554         subq    %rcx,%rsp
555         shrq    $3,%rcx
556         leaq    (%rsp),%rdi
557 .byte   0xf3,0x48,0xa5
558         leaq    (%r8),%rdi
559         leaq    (%rsp),%rsi
560         movq    %rbx,%rcx
561         jmp     .Lcbc_loop
562 .Lcbc_exit:
563         movl    $1,%eax
564         leaq    8(%rsp),%rsp
565 .Lcbc_abort:
566         popq    %rbx
567         popq    %rbp
568         .byte   0xf3,0xc3
569 .size   padlock_cbc_encrypt,.-padlock_cbc_encrypt
570 .globl  padlock_cfb_encrypt
571 .type   padlock_cfb_encrypt,@function
572 .align  16
573 padlock_cfb_encrypt:
574         pushq   %rbp
575         pushq   %rbx
576
577         xorl    %eax,%eax
578         testq   $15,%rdx
579         jnz     .Lcfb_abort
580         testq   $15,%rcx
581         jnz     .Lcfb_abort
582         leaq    .Lpadlock_saved_context(%rip),%rax
583         pushf
584         cld
585         call    _padlock_verify_ctx
586         leaq    16(%rdx),%rdx
587         xorl    %eax,%eax
588         xorl    %ebx,%ebx
589         testl   $32,(%rdx)
590         jnz     .Lcfb_aligned
591         testq   $0x0f,%rdi
592         setz    %al
593         testq   $0x0f,%rsi
594         setz    %bl
595         testl   %ebx,%eax
596         jnz     .Lcfb_aligned
597         negq    %rax
598         movq    $512,%rbx
599         notq    %rax
600         leaq    (%rsp),%rbp
601         cmpq    %rbx,%rcx
602         cmovcq  %rcx,%rbx
603         andq    %rbx,%rax
604         movq    %rcx,%rbx
605         negq    %rax
606         andq    $512-1,%rbx
607         leaq    (%rax,%rbp,1),%rsp
608         movq    $512,%rax
609         cmovzq  %rax,%rbx
610         jmp     .Lcfb_loop
611 .align  16
612 .Lcfb_loop:
613         cmpq    %rcx,%rbx
614         cmovaq  %rcx,%rbx
615         movq    %rdi,%r8
616         movq    %rsi,%r9
617         movq    %rcx,%r10
618         movq    %rbx,%rcx
619         movq    %rbx,%r11
620         testq   $0x0f,%rdi
621         cmovnzq %rsp,%rdi
622         testq   $0x0f,%rsi
623         jz      .Lcfb_inp_aligned
624         shrq    $3,%rcx
625 .byte   0xf3,0x48,0xa5
626         subq    %rbx,%rdi
627         movq    %rbx,%rcx
628         movq    %rdi,%rsi
629 .Lcfb_inp_aligned:
630         leaq    -16(%rdx),%rax
631         leaq    16(%rdx),%rbx
632         shrq    $4,%rcx
633 .byte   0xf3,0x0f,0xa7,224
634         movdqa  (%rax),%xmm0
635         movdqa  %xmm0,-16(%rdx)
636         movq    %r8,%rdi
637         movq    %r11,%rbx
638         testq   $0x0f,%rdi
639         jz      .Lcfb_out_aligned
640         movq    %rbx,%rcx
641         leaq    (%rsp),%rsi
642         shrq    $3,%rcx
643 .byte   0xf3,0x48,0xa5
644         subq    %rbx,%rdi
645 .Lcfb_out_aligned:
646         movq    %r9,%rsi
647         movq    %r10,%rcx
648         addq    %rbx,%rdi
649         addq    %rbx,%rsi
650         subq    %rbx,%rcx
651         movq    $512,%rbx
652         jnz     .Lcfb_loop
653         cmpq    %rbp,%rsp
654         je      .Lcfb_done
655
656         pxor    %xmm0,%xmm0
657         leaq    (%rsp),%rax
658 .Lcfb_bzero:
659         movaps  %xmm0,(%rax)
660         leaq    16(%rax),%rax
661         cmpq    %rax,%rbp
662         ja      .Lcfb_bzero
663
664 .Lcfb_done:
665         leaq    (%rbp),%rsp
666         jmp     .Lcfb_exit
667
668 .align  16
669 .Lcfb_aligned:
670         leaq    -16(%rdx),%rax
671         leaq    16(%rdx),%rbx
672         shrq    $4,%rcx
673 .byte   0xf3,0x0f,0xa7,224
674         movdqa  (%rax),%xmm0
675         movdqa  %xmm0,-16(%rdx)
676 .Lcfb_exit:
677         movl    $1,%eax
678         leaq    8(%rsp),%rsp
679 .Lcfb_abort:
680         popq    %rbx
681         popq    %rbp
682         .byte   0xf3,0xc3
683 .size   padlock_cfb_encrypt,.-padlock_cfb_encrypt
684 .globl  padlock_ofb_encrypt
685 .type   padlock_ofb_encrypt,@function
686 .align  16
687 padlock_ofb_encrypt:
688         pushq   %rbp
689         pushq   %rbx
690
691         xorl    %eax,%eax
692         testq   $15,%rdx
693         jnz     .Lofb_abort
694         testq   $15,%rcx
695         jnz     .Lofb_abort
696         leaq    .Lpadlock_saved_context(%rip),%rax
697         pushf
698         cld
699         call    _padlock_verify_ctx
700         leaq    16(%rdx),%rdx
701         xorl    %eax,%eax
702         xorl    %ebx,%ebx
703         testl   $32,(%rdx)
704         jnz     .Lofb_aligned
705         testq   $0x0f,%rdi
706         setz    %al
707         testq   $0x0f,%rsi
708         setz    %bl
709         testl   %ebx,%eax
710         jnz     .Lofb_aligned
711         negq    %rax
712         movq    $512,%rbx
713         notq    %rax
714         leaq    (%rsp),%rbp
715         cmpq    %rbx,%rcx
716         cmovcq  %rcx,%rbx
717         andq    %rbx,%rax
718         movq    %rcx,%rbx
719         negq    %rax
720         andq    $512-1,%rbx
721         leaq    (%rax,%rbp,1),%rsp
722         movq    $512,%rax
723         cmovzq  %rax,%rbx
724         jmp     .Lofb_loop
725 .align  16
726 .Lofb_loop:
727         cmpq    %rcx,%rbx
728         cmovaq  %rcx,%rbx
729         movq    %rdi,%r8
730         movq    %rsi,%r9
731         movq    %rcx,%r10
732         movq    %rbx,%rcx
733         movq    %rbx,%r11
734         testq   $0x0f,%rdi
735         cmovnzq %rsp,%rdi
736         testq   $0x0f,%rsi
737         jz      .Lofb_inp_aligned
738         shrq    $3,%rcx
739 .byte   0xf3,0x48,0xa5
740         subq    %rbx,%rdi
741         movq    %rbx,%rcx
742         movq    %rdi,%rsi
743 .Lofb_inp_aligned:
744         leaq    -16(%rdx),%rax
745         leaq    16(%rdx),%rbx
746         shrq    $4,%rcx
747 .byte   0xf3,0x0f,0xa7,232
748         movdqa  (%rax),%xmm0
749         movdqa  %xmm0,-16(%rdx)
750         movq    %r8,%rdi
751         movq    %r11,%rbx
752         testq   $0x0f,%rdi
753         jz      .Lofb_out_aligned
754         movq    %rbx,%rcx
755         leaq    (%rsp),%rsi
756         shrq    $3,%rcx
757 .byte   0xf3,0x48,0xa5
758         subq    %rbx,%rdi
759 .Lofb_out_aligned:
760         movq    %r9,%rsi
761         movq    %r10,%rcx
762         addq    %rbx,%rdi
763         addq    %rbx,%rsi
764         subq    %rbx,%rcx
765         movq    $512,%rbx
766         jnz     .Lofb_loop
767         cmpq    %rbp,%rsp
768         je      .Lofb_done
769
770         pxor    %xmm0,%xmm0
771         leaq    (%rsp),%rax
772 .Lofb_bzero:
773         movaps  %xmm0,(%rax)
774         leaq    16(%rax),%rax
775         cmpq    %rax,%rbp
776         ja      .Lofb_bzero
777
778 .Lofb_done:
779         leaq    (%rbp),%rsp
780         jmp     .Lofb_exit
781
782 .align  16
783 .Lofb_aligned:
784         leaq    -16(%rdx),%rax
785         leaq    16(%rdx),%rbx
786         shrq    $4,%rcx
787 .byte   0xf3,0x0f,0xa7,232
788         movdqa  (%rax),%xmm0
789         movdqa  %xmm0,-16(%rdx)
790 .Lofb_exit:
791         movl    $1,%eax
792         leaq    8(%rsp),%rsp
793 .Lofb_abort:
794         popq    %rbx
795         popq    %rbp
796         .byte   0xf3,0xc3
797 .size   padlock_ofb_encrypt,.-padlock_ofb_encrypt
798 .globl  padlock_ctr32_encrypt
799 .type   padlock_ctr32_encrypt,@function
800 .align  16
801 padlock_ctr32_encrypt:
802         pushq   %rbp
803         pushq   %rbx
804
805         xorl    %eax,%eax
806         testq   $15,%rdx
807         jnz     .Lctr32_abort
808         testq   $15,%rcx
809         jnz     .Lctr32_abort
810         leaq    .Lpadlock_saved_context(%rip),%rax
811         pushf
812         cld
813         call    _padlock_verify_ctx
814         leaq    16(%rdx),%rdx
815         xorl    %eax,%eax
816         xorl    %ebx,%ebx
817         testl   $32,(%rdx)
818         jnz     .Lctr32_aligned
819         testq   $0x0f,%rdi
820         setz    %al
821         testq   $0x0f,%rsi
822         setz    %bl
823         testl   %ebx,%eax
824         jnz     .Lctr32_aligned
825         negq    %rax
826         movq    $512,%rbx
827         notq    %rax
828         leaq    (%rsp),%rbp
829         cmpq    %rbx,%rcx
830         cmovcq  %rcx,%rbx
831         andq    %rbx,%rax
832         movq    %rcx,%rbx
833         negq    %rax
834         andq    $512-1,%rbx
835         leaq    (%rax,%rbp,1),%rsp
836         movq    $512,%rax
837         cmovzq  %rax,%rbx
838 .Lctr32_reenter:
839         movl    -4(%rdx),%eax
840         bswapl  %eax
841         negl    %eax
842         andl    $31,%eax
843         movq    $512,%rbx
844         shll    $4,%eax
845         cmovzq  %rbx,%rax
846         cmpq    %rax,%rcx
847         cmovaq  %rax,%rbx
848         cmovbeq %rcx,%rbx
849         cmpq    %rbx,%rcx
850         ja      .Lctr32_loop
851         movq    %rsi,%rax
852         cmpq    %rsp,%rbp
853         cmoveq  %rdi,%rax
854         addq    %rcx,%rax
855         negq    %rax
856         andq    $0xfff,%rax
857         cmpq    $32,%rax
858         movq    $-32,%rax
859         cmovaeq %rbx,%rax
860         andq    %rax,%rbx
861         jz      .Lctr32_unaligned_tail
862         jmp     .Lctr32_loop
863 .align  16
864 .Lctr32_loop:
865         cmpq    %rcx,%rbx
866         cmovaq  %rcx,%rbx
867         movq    %rdi,%r8
868         movq    %rsi,%r9
869         movq    %rcx,%r10
870         movq    %rbx,%rcx
871         movq    %rbx,%r11
872         testq   $0x0f,%rdi
873         cmovnzq %rsp,%rdi
874         testq   $0x0f,%rsi
875         jz      .Lctr32_inp_aligned
876         shrq    $3,%rcx
877 .byte   0xf3,0x48,0xa5
878         subq    %rbx,%rdi
879         movq    %rbx,%rcx
880         movq    %rdi,%rsi
881 .Lctr32_inp_aligned:
882         leaq    -16(%rdx),%rax
883         leaq    16(%rdx),%rbx
884         shrq    $4,%rcx
885 .byte   0xf3,0x0f,0xa7,216
886         movl    -4(%rdx),%eax
887         testl   $0xffff0000,%eax
888         jnz     .Lctr32_no_carry
889         bswapl  %eax
890         addl    $0x10000,%eax
891         bswapl  %eax
892         movl    %eax,-4(%rdx)
893 .Lctr32_no_carry:
894         movq    %r8,%rdi
895         movq    %r11,%rbx
896         testq   $0x0f,%rdi
897         jz      .Lctr32_out_aligned
898         movq    %rbx,%rcx
899         leaq    (%rsp),%rsi
900         shrq    $3,%rcx
901 .byte   0xf3,0x48,0xa5
902         subq    %rbx,%rdi
903 .Lctr32_out_aligned:
904         movq    %r9,%rsi
905         movq    %r10,%rcx
906         addq    %rbx,%rdi
907         addq    %rbx,%rsi
908         subq    %rbx,%rcx
909         movq    $512,%rbx
910         jz      .Lctr32_break
911         cmpq    %rbx,%rcx
912         jae     .Lctr32_loop
913         movq    %rcx,%rbx
914         movq    %rsi,%rax
915         cmpq    %rsp,%rbp
916         cmoveq  %rdi,%rax
917         addq    %rcx,%rax
918         negq    %rax
919         andq    $0xfff,%rax
920         cmpq    $32,%rax
921         movq    $-32,%rax
922         cmovaeq %rbx,%rax
923         andq    %rax,%rbx
924         jnz     .Lctr32_loop
925 .Lctr32_unaligned_tail:
926         xorl    %eax,%eax
927         cmpq    %rsp,%rbp
928         cmoveq  %rcx,%rax
929         movq    %rdi,%r8
930         movq    %rcx,%rbx
931         subq    %rax,%rsp
932         shrq    $3,%rcx
933         leaq    (%rsp),%rdi
934 .byte   0xf3,0x48,0xa5
935         movq    %rsp,%rsi
936         movq    %r8,%rdi
937         movq    %rbx,%rcx
938         jmp     .Lctr32_loop
939 .align  16
940 .Lctr32_break:
941         cmpq    %rbp,%rsp
942         je      .Lctr32_done
943
944         pxor    %xmm0,%xmm0
945         leaq    (%rsp),%rax
946 .Lctr32_bzero:
947         movaps  %xmm0,(%rax)
948         leaq    16(%rax),%rax
949         cmpq    %rax,%rbp
950         ja      .Lctr32_bzero
951
952 .Lctr32_done:
953         leaq    (%rbp),%rsp
954         jmp     .Lctr32_exit
955
956 .align  16
957 .Lctr32_aligned:
958         movl    -4(%rdx),%eax
959         bswapl  %eax
960         negl    %eax
961         andl    $0xffff,%eax
962         movq    $1048576,%rbx
963         shll    $4,%eax
964         cmovzq  %rbx,%rax
965         cmpq    %rax,%rcx
966         cmovaq  %rax,%rbx
967         cmovbeq %rcx,%rbx
968         jbe     .Lctr32_aligned_skip
969
970 .Lctr32_aligned_loop:
971         movq    %rcx,%r10
972         movq    %rbx,%rcx
973         movq    %rbx,%r11
974
975         leaq    -16(%rdx),%rax
976         leaq    16(%rdx),%rbx
977         shrq    $4,%rcx
978 .byte   0xf3,0x0f,0xa7,216
979
980         movl    -4(%rdx),%eax
981         bswapl  %eax
982         addl    $0x10000,%eax
983         bswapl  %eax
984         movl    %eax,-4(%rdx)
985
986         movq    %r10,%rcx
987         subq    %r11,%rcx
988         movq    $1048576,%rbx
989         jz      .Lctr32_exit
990         cmpq    %rbx,%rcx
991         jae     .Lctr32_aligned_loop
992
993 .Lctr32_aligned_skip:
994         leaq    (%rsi,%rcx,1),%rbp
995         negq    %rbp
996         andq    $0xfff,%rbp
997         xorl    %eax,%eax
998         cmpq    $32,%rbp
999         movq    $32-1,%rbp
1000         cmovaeq %rax,%rbp
1001         andq    %rcx,%rbp
1002         subq    %rbp,%rcx
1003         jz      .Lctr32_aligned_tail
1004         leaq    -16(%rdx),%rax
1005         leaq    16(%rdx),%rbx
1006         shrq    $4,%rcx
1007 .byte   0xf3,0x0f,0xa7,216
1008         testq   %rbp,%rbp
1009         jz      .Lctr32_exit
1010
1011 .Lctr32_aligned_tail:
1012         movq    %rdi,%r8
1013         movq    %rbp,%rbx
1014         movq    %rbp,%rcx
1015         leaq    (%rsp),%rbp
1016         subq    %rcx,%rsp
1017         shrq    $3,%rcx
1018         leaq    (%rsp),%rdi
1019 .byte   0xf3,0x48,0xa5
1020         leaq    (%r8),%rdi
1021         leaq    (%rsp),%rsi
1022         movq    %rbx,%rcx
1023         jmp     .Lctr32_loop
1024 .Lctr32_exit:
1025         movl    $1,%eax
1026         leaq    8(%rsp),%rsp
1027 .Lctr32_abort:
1028         popq    %rbx
1029         popq    %rbp
1030         .byte   0xf3,0xc3
1031 .size   padlock_ctr32_encrypt,.-padlock_ctr32_encrypt
1032 .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
1033 .align  16
1034 .data   
1035 .align  8
1036 .Lpadlock_saved_context:
1037 .quad   0