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