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