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