Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/crypto/openssl/amd64/rc4-x86_64.S
39482 views
1
/* Do not modify. This file is auto-generated from rc4-x86_64.pl. */
2
.text
3
4
5
.globl RC4
6
.type RC4,@function
7
.align 16
8
RC4:
9
.cfi_startproc
10
.byte 243,15,30,250
11
orq %rsi,%rsi
12
jne .Lentry
13
.byte 0xf3,0xc3
14
.Lentry:
15
pushq %rbx
16
.cfi_adjust_cfa_offset 8
17
.cfi_offset %rbx,-16
18
pushq %r12
19
.cfi_adjust_cfa_offset 8
20
.cfi_offset %r12,-24
21
pushq %r13
22
.cfi_adjust_cfa_offset 8
23
.cfi_offset %r13,-32
24
.Lprologue:
25
movq %rsi,%r11
26
movq %rdx,%r12
27
movq %rcx,%r13
28
xorq %r10,%r10
29
xorq %rcx,%rcx
30
31
leaq 8(%rdi),%rdi
32
movb -8(%rdi),%r10b
33
movb -4(%rdi),%cl
34
cmpl $-1,256(%rdi)
35
je .LRC4_CHAR
36
movl OPENSSL_ia32cap_P(%rip),%r8d
37
xorq %rbx,%rbx
38
incb %r10b
39
subq %r10,%rbx
40
subq %r12,%r13
41
movl (%rdi,%r10,4),%eax
42
testq $-16,%r11
43
jz .Lloop1
44
btl $30,%r8d
45
jc .Lintel
46
andq $7,%rbx
47
leaq 1(%r10),%rsi
48
jz .Loop8
49
subq %rbx,%r11
50
.Loop8_warmup:
51
addb %al,%cl
52
movl (%rdi,%rcx,4),%edx
53
movl %eax,(%rdi,%rcx,4)
54
movl %edx,(%rdi,%r10,4)
55
addb %dl,%al
56
incb %r10b
57
movl (%rdi,%rax,4),%edx
58
movl (%rdi,%r10,4),%eax
59
xorb (%r12),%dl
60
movb %dl,(%r12,%r13,1)
61
leaq 1(%r12),%r12
62
decq %rbx
63
jnz .Loop8_warmup
64
65
leaq 1(%r10),%rsi
66
jmp .Loop8
67
.align 16
68
.Loop8:
69
addb %al,%cl
70
movl (%rdi,%rcx,4),%edx
71
movl %eax,(%rdi,%rcx,4)
72
movl 0(%rdi,%rsi,4),%ebx
73
rorq $8,%r8
74
movl %edx,0(%rdi,%r10,4)
75
addb %al,%dl
76
movb (%rdi,%rdx,4),%r8b
77
addb %bl,%cl
78
movl (%rdi,%rcx,4),%edx
79
movl %ebx,(%rdi,%rcx,4)
80
movl 4(%rdi,%rsi,4),%eax
81
rorq $8,%r8
82
movl %edx,4(%rdi,%r10,4)
83
addb %bl,%dl
84
movb (%rdi,%rdx,4),%r8b
85
addb %al,%cl
86
movl (%rdi,%rcx,4),%edx
87
movl %eax,(%rdi,%rcx,4)
88
movl 8(%rdi,%rsi,4),%ebx
89
rorq $8,%r8
90
movl %edx,8(%rdi,%r10,4)
91
addb %al,%dl
92
movb (%rdi,%rdx,4),%r8b
93
addb %bl,%cl
94
movl (%rdi,%rcx,4),%edx
95
movl %ebx,(%rdi,%rcx,4)
96
movl 12(%rdi,%rsi,4),%eax
97
rorq $8,%r8
98
movl %edx,12(%rdi,%r10,4)
99
addb %bl,%dl
100
movb (%rdi,%rdx,4),%r8b
101
addb %al,%cl
102
movl (%rdi,%rcx,4),%edx
103
movl %eax,(%rdi,%rcx,4)
104
movl 16(%rdi,%rsi,4),%ebx
105
rorq $8,%r8
106
movl %edx,16(%rdi,%r10,4)
107
addb %al,%dl
108
movb (%rdi,%rdx,4),%r8b
109
addb %bl,%cl
110
movl (%rdi,%rcx,4),%edx
111
movl %ebx,(%rdi,%rcx,4)
112
movl 20(%rdi,%rsi,4),%eax
113
rorq $8,%r8
114
movl %edx,20(%rdi,%r10,4)
115
addb %bl,%dl
116
movb (%rdi,%rdx,4),%r8b
117
addb %al,%cl
118
movl (%rdi,%rcx,4),%edx
119
movl %eax,(%rdi,%rcx,4)
120
movl 24(%rdi,%rsi,4),%ebx
121
rorq $8,%r8
122
movl %edx,24(%rdi,%r10,4)
123
addb %al,%dl
124
movb (%rdi,%rdx,4),%r8b
125
addb $8,%sil
126
addb %bl,%cl
127
movl (%rdi,%rcx,4),%edx
128
movl %ebx,(%rdi,%rcx,4)
129
movl -4(%rdi,%rsi,4),%eax
130
rorq $8,%r8
131
movl %edx,28(%rdi,%r10,4)
132
addb %bl,%dl
133
movb (%rdi,%rdx,4),%r8b
134
addb $8,%r10b
135
rorq $8,%r8
136
subq $8,%r11
137
138
xorq (%r12),%r8
139
movq %r8,(%r12,%r13,1)
140
leaq 8(%r12),%r12
141
142
testq $-8,%r11
143
jnz .Loop8
144
cmpq $0,%r11
145
jne .Lloop1
146
jmp .Lexit
147
148
.align 16
149
.Lintel:
150
testq $-32,%r11
151
jz .Lloop1
152
andq $15,%rbx
153
jz .Loop16_is_hot
154
subq %rbx,%r11
155
.Loop16_warmup:
156
addb %al,%cl
157
movl (%rdi,%rcx,4),%edx
158
movl %eax,(%rdi,%rcx,4)
159
movl %edx,(%rdi,%r10,4)
160
addb %dl,%al
161
incb %r10b
162
movl (%rdi,%rax,4),%edx
163
movl (%rdi,%r10,4),%eax
164
xorb (%r12),%dl
165
movb %dl,(%r12,%r13,1)
166
leaq 1(%r12),%r12
167
decq %rbx
168
jnz .Loop16_warmup
169
170
movq %rcx,%rbx
171
xorq %rcx,%rcx
172
movb %bl,%cl
173
174
.Loop16_is_hot:
175
leaq (%rdi,%r10,4),%rsi
176
addb %al,%cl
177
movl (%rdi,%rcx,4),%edx
178
pxor %xmm0,%xmm0
179
movl %eax,(%rdi,%rcx,4)
180
addb %dl,%al
181
movl 4(%rsi),%ebx
182
movzbl %al,%eax
183
movl %edx,0(%rsi)
184
addb %bl,%cl
185
pinsrw $0,(%rdi,%rax,4),%xmm0
186
jmp .Loop16_enter
187
.align 16
188
.Loop16:
189
addb %al,%cl
190
movl (%rdi,%rcx,4),%edx
191
pxor %xmm0,%xmm2
192
psllq $8,%xmm1
193
pxor %xmm0,%xmm0
194
movl %eax,(%rdi,%rcx,4)
195
addb %dl,%al
196
movl 4(%rsi),%ebx
197
movzbl %al,%eax
198
movl %edx,0(%rsi)
199
pxor %xmm1,%xmm2
200
addb %bl,%cl
201
pinsrw $0,(%rdi,%rax,4),%xmm0
202
movdqu %xmm2,(%r12,%r13,1)
203
leaq 16(%r12),%r12
204
.Loop16_enter:
205
movl (%rdi,%rcx,4),%edx
206
pxor %xmm1,%xmm1
207
movl %ebx,(%rdi,%rcx,4)
208
addb %dl,%bl
209
movl 8(%rsi),%eax
210
movzbl %bl,%ebx
211
movl %edx,4(%rsi)
212
addb %al,%cl
213
pinsrw $0,(%rdi,%rbx,4),%xmm1
214
movl (%rdi,%rcx,4),%edx
215
movl %eax,(%rdi,%rcx,4)
216
addb %dl,%al
217
movl 12(%rsi),%ebx
218
movzbl %al,%eax
219
movl %edx,8(%rsi)
220
addb %bl,%cl
221
pinsrw $1,(%rdi,%rax,4),%xmm0
222
movl (%rdi,%rcx,4),%edx
223
movl %ebx,(%rdi,%rcx,4)
224
addb %dl,%bl
225
movl 16(%rsi),%eax
226
movzbl %bl,%ebx
227
movl %edx,12(%rsi)
228
addb %al,%cl
229
pinsrw $1,(%rdi,%rbx,4),%xmm1
230
movl (%rdi,%rcx,4),%edx
231
movl %eax,(%rdi,%rcx,4)
232
addb %dl,%al
233
movl 20(%rsi),%ebx
234
movzbl %al,%eax
235
movl %edx,16(%rsi)
236
addb %bl,%cl
237
pinsrw $2,(%rdi,%rax,4),%xmm0
238
movl (%rdi,%rcx,4),%edx
239
movl %ebx,(%rdi,%rcx,4)
240
addb %dl,%bl
241
movl 24(%rsi),%eax
242
movzbl %bl,%ebx
243
movl %edx,20(%rsi)
244
addb %al,%cl
245
pinsrw $2,(%rdi,%rbx,4),%xmm1
246
movl (%rdi,%rcx,4),%edx
247
movl %eax,(%rdi,%rcx,4)
248
addb %dl,%al
249
movl 28(%rsi),%ebx
250
movzbl %al,%eax
251
movl %edx,24(%rsi)
252
addb %bl,%cl
253
pinsrw $3,(%rdi,%rax,4),%xmm0
254
movl (%rdi,%rcx,4),%edx
255
movl %ebx,(%rdi,%rcx,4)
256
addb %dl,%bl
257
movl 32(%rsi),%eax
258
movzbl %bl,%ebx
259
movl %edx,28(%rsi)
260
addb %al,%cl
261
pinsrw $3,(%rdi,%rbx,4),%xmm1
262
movl (%rdi,%rcx,4),%edx
263
movl %eax,(%rdi,%rcx,4)
264
addb %dl,%al
265
movl 36(%rsi),%ebx
266
movzbl %al,%eax
267
movl %edx,32(%rsi)
268
addb %bl,%cl
269
pinsrw $4,(%rdi,%rax,4),%xmm0
270
movl (%rdi,%rcx,4),%edx
271
movl %ebx,(%rdi,%rcx,4)
272
addb %dl,%bl
273
movl 40(%rsi),%eax
274
movzbl %bl,%ebx
275
movl %edx,36(%rsi)
276
addb %al,%cl
277
pinsrw $4,(%rdi,%rbx,4),%xmm1
278
movl (%rdi,%rcx,4),%edx
279
movl %eax,(%rdi,%rcx,4)
280
addb %dl,%al
281
movl 44(%rsi),%ebx
282
movzbl %al,%eax
283
movl %edx,40(%rsi)
284
addb %bl,%cl
285
pinsrw $5,(%rdi,%rax,4),%xmm0
286
movl (%rdi,%rcx,4),%edx
287
movl %ebx,(%rdi,%rcx,4)
288
addb %dl,%bl
289
movl 48(%rsi),%eax
290
movzbl %bl,%ebx
291
movl %edx,44(%rsi)
292
addb %al,%cl
293
pinsrw $5,(%rdi,%rbx,4),%xmm1
294
movl (%rdi,%rcx,4),%edx
295
movl %eax,(%rdi,%rcx,4)
296
addb %dl,%al
297
movl 52(%rsi),%ebx
298
movzbl %al,%eax
299
movl %edx,48(%rsi)
300
addb %bl,%cl
301
pinsrw $6,(%rdi,%rax,4),%xmm0
302
movl (%rdi,%rcx,4),%edx
303
movl %ebx,(%rdi,%rcx,4)
304
addb %dl,%bl
305
movl 56(%rsi),%eax
306
movzbl %bl,%ebx
307
movl %edx,52(%rsi)
308
addb %al,%cl
309
pinsrw $6,(%rdi,%rbx,4),%xmm1
310
movl (%rdi,%rcx,4),%edx
311
movl %eax,(%rdi,%rcx,4)
312
addb %dl,%al
313
movl 60(%rsi),%ebx
314
movzbl %al,%eax
315
movl %edx,56(%rsi)
316
addb %bl,%cl
317
pinsrw $7,(%rdi,%rax,4),%xmm0
318
addb $16,%r10b
319
movdqu (%r12),%xmm2
320
movl (%rdi,%rcx,4),%edx
321
movl %ebx,(%rdi,%rcx,4)
322
addb %dl,%bl
323
movzbl %bl,%ebx
324
movl %edx,60(%rsi)
325
leaq (%rdi,%r10,4),%rsi
326
pinsrw $7,(%rdi,%rbx,4),%xmm1
327
movl (%rsi),%eax
328
movq %rcx,%rbx
329
xorq %rcx,%rcx
330
subq $16,%r11
331
movb %bl,%cl
332
testq $-16,%r11
333
jnz .Loop16
334
335
psllq $8,%xmm1
336
pxor %xmm0,%xmm2
337
pxor %xmm1,%xmm2
338
movdqu %xmm2,(%r12,%r13,1)
339
leaq 16(%r12),%r12
340
341
cmpq $0,%r11
342
jne .Lloop1
343
jmp .Lexit
344
345
.align 16
346
.Lloop1:
347
addb %al,%cl
348
movl (%rdi,%rcx,4),%edx
349
movl %eax,(%rdi,%rcx,4)
350
movl %edx,(%rdi,%r10,4)
351
addb %dl,%al
352
incb %r10b
353
movl (%rdi,%rax,4),%edx
354
movl (%rdi,%r10,4),%eax
355
xorb (%r12),%dl
356
movb %dl,(%r12,%r13,1)
357
leaq 1(%r12),%r12
358
decq %r11
359
jnz .Lloop1
360
jmp .Lexit
361
362
.align 16
363
.LRC4_CHAR:
364
addb $1,%r10b
365
movzbl (%rdi,%r10,1),%eax
366
testq $-8,%r11
367
jz .Lcloop1
368
jmp .Lcloop8
369
.align 16
370
.Lcloop8:
371
movl (%r12),%r8d
372
movl 4(%r12),%r9d
373
addb %al,%cl
374
leaq 1(%r10),%rsi
375
movzbl (%rdi,%rcx,1),%edx
376
movzbl %sil,%esi
377
movzbl (%rdi,%rsi,1),%ebx
378
movb %al,(%rdi,%rcx,1)
379
cmpq %rsi,%rcx
380
movb %dl,(%rdi,%r10,1)
381
jne .Lcmov0
382
movq %rax,%rbx
383
.Lcmov0:
384
addb %al,%dl
385
xorb (%rdi,%rdx,1),%r8b
386
rorl $8,%r8d
387
addb %bl,%cl
388
leaq 1(%rsi),%r10
389
movzbl (%rdi,%rcx,1),%edx
390
movzbl %r10b,%r10d
391
movzbl (%rdi,%r10,1),%eax
392
movb %bl,(%rdi,%rcx,1)
393
cmpq %r10,%rcx
394
movb %dl,(%rdi,%rsi,1)
395
jne .Lcmov1
396
movq %rbx,%rax
397
.Lcmov1:
398
addb %bl,%dl
399
xorb (%rdi,%rdx,1),%r8b
400
rorl $8,%r8d
401
addb %al,%cl
402
leaq 1(%r10),%rsi
403
movzbl (%rdi,%rcx,1),%edx
404
movzbl %sil,%esi
405
movzbl (%rdi,%rsi,1),%ebx
406
movb %al,(%rdi,%rcx,1)
407
cmpq %rsi,%rcx
408
movb %dl,(%rdi,%r10,1)
409
jne .Lcmov2
410
movq %rax,%rbx
411
.Lcmov2:
412
addb %al,%dl
413
xorb (%rdi,%rdx,1),%r8b
414
rorl $8,%r8d
415
addb %bl,%cl
416
leaq 1(%rsi),%r10
417
movzbl (%rdi,%rcx,1),%edx
418
movzbl %r10b,%r10d
419
movzbl (%rdi,%r10,1),%eax
420
movb %bl,(%rdi,%rcx,1)
421
cmpq %r10,%rcx
422
movb %dl,(%rdi,%rsi,1)
423
jne .Lcmov3
424
movq %rbx,%rax
425
.Lcmov3:
426
addb %bl,%dl
427
xorb (%rdi,%rdx,1),%r8b
428
rorl $8,%r8d
429
addb %al,%cl
430
leaq 1(%r10),%rsi
431
movzbl (%rdi,%rcx,1),%edx
432
movzbl %sil,%esi
433
movzbl (%rdi,%rsi,1),%ebx
434
movb %al,(%rdi,%rcx,1)
435
cmpq %rsi,%rcx
436
movb %dl,(%rdi,%r10,1)
437
jne .Lcmov4
438
movq %rax,%rbx
439
.Lcmov4:
440
addb %al,%dl
441
xorb (%rdi,%rdx,1),%r9b
442
rorl $8,%r9d
443
addb %bl,%cl
444
leaq 1(%rsi),%r10
445
movzbl (%rdi,%rcx,1),%edx
446
movzbl %r10b,%r10d
447
movzbl (%rdi,%r10,1),%eax
448
movb %bl,(%rdi,%rcx,1)
449
cmpq %r10,%rcx
450
movb %dl,(%rdi,%rsi,1)
451
jne .Lcmov5
452
movq %rbx,%rax
453
.Lcmov5:
454
addb %bl,%dl
455
xorb (%rdi,%rdx,1),%r9b
456
rorl $8,%r9d
457
addb %al,%cl
458
leaq 1(%r10),%rsi
459
movzbl (%rdi,%rcx,1),%edx
460
movzbl %sil,%esi
461
movzbl (%rdi,%rsi,1),%ebx
462
movb %al,(%rdi,%rcx,1)
463
cmpq %rsi,%rcx
464
movb %dl,(%rdi,%r10,1)
465
jne .Lcmov6
466
movq %rax,%rbx
467
.Lcmov6:
468
addb %al,%dl
469
xorb (%rdi,%rdx,1),%r9b
470
rorl $8,%r9d
471
addb %bl,%cl
472
leaq 1(%rsi),%r10
473
movzbl (%rdi,%rcx,1),%edx
474
movzbl %r10b,%r10d
475
movzbl (%rdi,%r10,1),%eax
476
movb %bl,(%rdi,%rcx,1)
477
cmpq %r10,%rcx
478
movb %dl,(%rdi,%rsi,1)
479
jne .Lcmov7
480
movq %rbx,%rax
481
.Lcmov7:
482
addb %bl,%dl
483
xorb (%rdi,%rdx,1),%r9b
484
rorl $8,%r9d
485
leaq -8(%r11),%r11
486
movl %r8d,(%r13)
487
leaq 8(%r12),%r12
488
movl %r9d,4(%r13)
489
leaq 8(%r13),%r13
490
491
testq $-8,%r11
492
jnz .Lcloop8
493
cmpq $0,%r11
494
jne .Lcloop1
495
jmp .Lexit
496
.align 16
497
.Lcloop1:
498
addb %al,%cl
499
movzbl %cl,%ecx
500
movzbl (%rdi,%rcx,1),%edx
501
movb %al,(%rdi,%rcx,1)
502
movb %dl,(%rdi,%r10,1)
503
addb %al,%dl
504
addb $1,%r10b
505
movzbl %dl,%edx
506
movzbl %r10b,%r10d
507
movzbl (%rdi,%rdx,1),%edx
508
movzbl (%rdi,%r10,1),%eax
509
xorb (%r12),%dl
510
leaq 1(%r12),%r12
511
movb %dl,(%r13)
512
leaq 1(%r13),%r13
513
subq $1,%r11
514
jnz .Lcloop1
515
jmp .Lexit
516
517
.align 16
518
.Lexit:
519
subb $1,%r10b
520
movl %r10d,-8(%rdi)
521
movl %ecx,-4(%rdi)
522
523
movq (%rsp),%r13
524
.cfi_restore %r13
525
movq 8(%rsp),%r12
526
.cfi_restore %r12
527
movq 16(%rsp),%rbx
528
.cfi_restore %rbx
529
addq $24,%rsp
530
.cfi_adjust_cfa_offset -24
531
.Lepilogue:
532
.byte 0xf3,0xc3
533
.cfi_endproc
534
.size RC4,.-RC4
535
.globl RC4_set_key
536
.type RC4_set_key,@function
537
.align 16
538
RC4_set_key:
539
.cfi_startproc
540
.byte 243,15,30,250
541
leaq 8(%rdi),%rdi
542
leaq (%rdx,%rsi,1),%rdx
543
negq %rsi
544
movq %rsi,%rcx
545
xorl %eax,%eax
546
xorq %r9,%r9
547
xorq %r10,%r10
548
xorq %r11,%r11
549
550
movl OPENSSL_ia32cap_P(%rip),%r8d
551
btl $20,%r8d
552
jc .Lc1stloop
553
jmp .Lw1stloop
554
555
.align 16
556
.Lw1stloop:
557
movl %eax,(%rdi,%rax,4)
558
addb $1,%al
559
jnc .Lw1stloop
560
561
xorq %r9,%r9
562
xorq %r8,%r8
563
.align 16
564
.Lw2ndloop:
565
movl (%rdi,%r9,4),%r10d
566
addb (%rdx,%rsi,1),%r8b
567
addb %r10b,%r8b
568
addq $1,%rsi
569
movl (%rdi,%r8,4),%r11d
570
cmovzq %rcx,%rsi
571
movl %r10d,(%rdi,%r8,4)
572
movl %r11d,(%rdi,%r9,4)
573
addb $1,%r9b
574
jnc .Lw2ndloop
575
jmp .Lexit_key
576
577
.align 16
578
.Lc1stloop:
579
movb %al,(%rdi,%rax,1)
580
addb $1,%al
581
jnc .Lc1stloop
582
583
xorq %r9,%r9
584
xorq %r8,%r8
585
.align 16
586
.Lc2ndloop:
587
movb (%rdi,%r9,1),%r10b
588
addb (%rdx,%rsi,1),%r8b
589
addb %r10b,%r8b
590
addq $1,%rsi
591
movb (%rdi,%r8,1),%r11b
592
jnz .Lcnowrap
593
movq %rcx,%rsi
594
.Lcnowrap:
595
movb %r10b,(%rdi,%r8,1)
596
movb %r11b,(%rdi,%r9,1)
597
addb $1,%r9b
598
jnc .Lc2ndloop
599
movl $-1,256(%rdi)
600
601
.align 16
602
.Lexit_key:
603
xorl %eax,%eax
604
movl %eax,-8(%rdi)
605
movl %eax,-4(%rdi)
606
.byte 0xf3,0xc3
607
.cfi_endproc
608
.size RC4_set_key,.-RC4_set_key
609
610
.globl RC4_options
611
.type RC4_options,@function
612
.align 16
613
RC4_options:
614
.cfi_startproc
615
.byte 243,15,30,250
616
leaq .Lopts(%rip),%rax
617
movl OPENSSL_ia32cap_P(%rip),%edx
618
btl $20,%edx
619
jc .L8xchar
620
btl $30,%edx
621
jnc .Ldone
622
addq $25,%rax
623
.byte 0xf3,0xc3
624
.L8xchar:
625
addq $12,%rax
626
.Ldone:
627
.byte 0xf3,0xc3
628
.cfi_endproc
629
.align 64
630
.Lopts:
631
.byte 114,99,52,40,56,120,44,105,110,116,41,0
632
.byte 114,99,52,40,56,120,44,99,104,97,114,41,0
633
.byte 114,99,52,40,49,54,120,44,105,110,116,41,0
634
.byte 82,67,52,32,102,111,114,32,120,56,54,95,54,52,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
635
.align 64
636
.size RC4_options,.-RC4_options
637
.section ".note.gnu.property", "a"
638
.p2align 3
639
.long 1f - 0f
640
.long 4f - 1f
641
.long 5
642
0:
643
# "GNU" encoded with .byte, since .asciz isn't supported
644
# on Solaris.
645
.byte 0x47
646
.byte 0x4e
647
.byte 0x55
648
.byte 0
649
1:
650
.p2align 3
651
.long 0xc0000002
652
.long 3f - 2f
653
2:
654
.long 3
655
3:
656
.p2align 3
657
4:
658
659