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 9RC4: 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 538RC4_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 612RC4_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 635