Home | History | Annotate | Download | only in rc4
      1 #if defined(__x86_64__)
      2 .text
      3 
      4 
      5 .globl	_asm_RC4
      6 .private_extern _asm_RC4
      7 
      8 .p2align	4
      9 _asm_RC4:
     10 	orq	%rsi,%rsi
     11 	jne	L$entry
     12 	.byte	0xf3,0xc3
     13 L$entry:
     14 	pushq	%rbx
     15 	pushq	%r12
     16 	pushq	%r13
     17 L$prologue:
     18 	movq	%rsi,%r11
     19 	movq	%rdx,%r12
     20 	movq	%rcx,%r13
     21 	xorq	%r10,%r10
     22 	xorq	%rcx,%rcx
     23 
     24 	leaq	8(%rdi),%rdi
     25 	movb	-8(%rdi),%r10b
     26 	movb	-4(%rdi),%cl
     27 	cmpl	$-1,256(%rdi)
     28 	je	L$RC4_CHAR
     29 	movq	_OPENSSL_ia32cap_P@GOTPCREL(%rip),%r8
     30 	movl	(%r8),%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
     44 L$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
     62 L$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
    143 L$intel:
    144 	testq	$-32,%r11
    145 	jz	L$loop1
    146 	andq	$15,%rbx
    147 	jz	L$oop16_is_hot
    148 	subq	%rbx,%r11
    149 L$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 
    168 L$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
    182 L$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
    198 L$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
    340 L$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
    357 L$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
    364 L$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
    377 L$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
    391 L$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
    405 L$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
    419 L$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
    433 L$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
    447 L$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
    461 L$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
    475 L$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
    491 L$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
    512 L$exit:
    513 	subb	$1,%r10b
    514 	movl	%r10d,-8(%rdi)
    515 	movl	%ecx,-4(%rdi)
    516 
    517 	movq	(%rsp),%r13
    518 	movq	8(%rsp),%r12
    519 	movq	16(%rsp),%rbx
    520 	addq	$24,%rsp
    521 L$epilogue:
    522 	.byte	0xf3,0xc3
    523 
    524 .globl	_asm_RC4_set_key
    525 .private_extern _asm_RC4_set_key
    526 
    527 .p2align	4
    528 _asm_RC4_set_key:
    529 	leaq	8(%rdi),%rdi
    530 	leaq	(%rdx,%rsi,1),%rdx
    531 	negq	%rsi
    532 	movq	%rsi,%rcx
    533 	xorl	%eax,%eax
    534 	xorq	%r9,%r9
    535 	xorq	%r10,%r10
    536 	xorq	%r11,%r11
    537 
    538 	movq	_OPENSSL_ia32cap_P@GOTPCREL(%rip),%r8
    539 	movl	(%r8),%r8d
    540 	btl	$20,%r8d
    541 	jc	L$c1stloop
    542 	jmp	L$w1stloop
    543 
    544 .p2align	4
    545 L$w1stloop:
    546 	movl	%eax,(%rdi,%rax,4)
    547 	addb	$1,%al
    548 	jnc	L$w1stloop
    549 
    550 	xorq	%r9,%r9
    551 	xorq	%r8,%r8
    552 .p2align	4
    553 L$w2ndloop:
    554 	movl	(%rdi,%r9,4),%r10d
    555 	addb	(%rdx,%rsi,1),%r8b
    556 	addb	%r10b,%r8b
    557 	addq	$1,%rsi
    558 	movl	(%rdi,%r8,4),%r11d
    559 	cmovzq	%rcx,%rsi
    560 	movl	%r10d,(%rdi,%r8,4)
    561 	movl	%r11d,(%rdi,%r9,4)
    562 	addb	$1,%r9b
    563 	jnc	L$w2ndloop
    564 	jmp	L$exit_key
    565 
    566 .p2align	4
    567 L$c1stloop:
    568 	movb	%al,(%rdi,%rax,1)
    569 	addb	$1,%al
    570 	jnc	L$c1stloop
    571 
    572 	xorq	%r9,%r9
    573 	xorq	%r8,%r8
    574 .p2align	4
    575 L$c2ndloop:
    576 	movb	(%rdi,%r9,1),%r10b
    577 	addb	(%rdx,%rsi,1),%r8b
    578 	addb	%r10b,%r8b
    579 	addq	$1,%rsi
    580 	movb	(%rdi,%r8,1),%r11b
    581 	jnz	L$cnowrap
    582 	movq	%rcx,%rsi
    583 L$cnowrap:
    584 	movb	%r10b,(%rdi,%r8,1)
    585 	movb	%r11b,(%rdi,%r9,1)
    586 	addb	$1,%r9b
    587 	jnc	L$c2ndloop
    588 	movl	$-1,256(%rdi)
    589 
    590 .p2align	4
    591 L$exit_key:
    592 	xorl	%eax,%eax
    593 	movl	%eax,-8(%rdi)
    594 	movl	%eax,-4(%rdi)
    595 	.byte	0xf3,0xc3
    596 
    597 
    598 .globl	_RC4_options
    599 .private_extern _RC4_options
    600 
    601 .p2align	4
    602 _RC4_options:
    603 	leaq	L$opts(%rip),%rax
    604 	movq	_OPENSSL_ia32cap_P(%rip),%rdx
    605 	movl	(%rdx),%edx
    606 	btl	$20,%edx
    607 	jc	L$8xchar
    608 	btl	$30,%edx
    609 	jnc	L$done
    610 	addq	$25,%rax
    611 	.byte	0xf3,0xc3
    612 L$8xchar:
    613 	addq	$12,%rax
    614 L$done:
    615 	.byte	0xf3,0xc3
    616 .p2align	6
    617 L$opts:
    618 .byte	114,99,52,40,56,120,44,105,110,116,41,0
    619 .byte	114,99,52,40,56,120,44,99,104,97,114,41,0
    620 .byte	114,99,52,40,49,54,120,44,105,110,116,41,0
    621 .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
    622 .p2align	6
    623 
    624 #endif
    625