VirtualBox

source: vbox/trunk/src/libs/openssl-1.1.1j/crypto/genasm-elf/rc4-x86_64.S@ 88461

Last change on this file since 88461 was 83531, checked in by vboxsync, 5 years ago

setting svn:sync-process=export for openssl-1.1.1f, all files except tests

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

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette