Home | History | Annotate | Line # | Download | only in x86_64
      1 #include <machine/asm.h>
      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