VirtualBox

source: vbox/trunk/src/libs/openssl-3.0.1/crypto/genasm-macosx/rc4-x86_64.S@ 94081

Last change on this file since 94081 was 83531, checked in by vboxsync, 4 years ago

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

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