1 /* $FreeBSD$ */
2 /* Do not modify. This file is auto-generated from rc4-x86_64.pl. */
3 .text
4
5
6 .globl RC4
7 .type RC4,@function
8 .align 16
9 RC4:
10 .cfi_startproc
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 leaq 8(%rdi),%rdi
541 leaq (%rdx,%rsi,1),%rdx
542 negq %rsi
543 movq %rsi,%rcx
544 xorl %eax,%eax
545 xorq %r9,%r9
546 xorq %r10,%r10
547 xorq %r11,%r11
548
549 movl OPENSSL_ia32cap_P(%rip),%r8d
550 btl $20,%r8d
551 jc .Lc1stloop
552 jmp .Lw1stloop
553
554 .align 16
555 .Lw1stloop:
556 movl %eax,(%rdi,%rax,4)
557 addb $1,%al
558 jnc .Lw1stloop
559
560 xorq %r9,%r9
561 xorq %r8,%r8
562 .align 16
563 .Lw2ndloop:
564 movl (%rdi,%r9,4),%r10d
565 addb (%rdx,%rsi,1),%r8b
566 addb %r10b,%r8b
567 addq $1,%rsi
568 movl (%rdi,%r8,4),%r11d
569 cmovzq %rcx,%rsi
570 movl %r10d,(%rdi,%r8,4)
571 movl %r11d,(%rdi,%r9,4)
572 addb $1,%r9b
573 jnc .Lw2ndloop
574 jmp .Lexit_key
575
576 .align 16
577 .Lc1stloop:
578 movb %al,(%rdi,%rax,1)
579 addb $1,%al
580 jnc .Lc1stloop
581
582 xorq %r9,%r9
583 xorq %r8,%r8
584 .align 16
585 .Lc2ndloop:
586 movb (%rdi,%r9,1),%r10b
587 addb (%rdx,%rsi,1),%r8b
588 addb %r10b,%r8b
589 addq $1,%rsi
590 movb (%rdi,%r8,1),%r11b
591 jnz .Lcnowrap
592 movq %rcx,%rsi
593 .Lcnowrap:
594 movb %r10b,(%rdi,%r8,1)
595 movb %r11b,(%rdi,%r9,1)
596 addb $1,%r9b
597 jnc .Lc2ndloop
598 movl $-1,256(%rdi)
599
600 .align 16
601 .Lexit_key:
602 xorl %eax,%eax
603 movl %eax,-8(%rdi)
604 movl %eax,-4(%rdi)
605 .byte 0xf3,0xc3
606 .cfi_endproc
607 .size RC4_set_key,.-RC4_set_key
608
609 .globl RC4_options
610 .type RC4_options,@function
611 .align 16
612 RC4_options:
613 .cfi_startproc
614 leaq .Lopts(%rip),%rax
615 movl OPENSSL_ia32cap_P(%rip),%edx
616 btl $20,%edx
617 jc .L8xchar
618 btl $30,%edx
619 jnc .Ldone
620 addq $25,%rax
621 .byte 0xf3,0xc3
622 .L8xchar:
623 addq $12,%rax
624 .Ldone:
625 .byte 0xf3,0xc3
626 .cfi_endproc
627 .align 64
628 .Lopts:
629 .byte 114,99,52,40,56,120,44,105,110,116,41,0
630 .byte 114,99,52,40,56,120,44,99,104,97,114,41,0
631 .byte 114,99,52,40,49,54,120,44,105,110,116,41,0
632 .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
633 .align 64
634 .size RC4_options,.-RC4_options
Cache object: 8c39b8e6e1a19c41c4e7b35af97d5d72
|