1# enter ECRYPT_encrypt_bytes 2.text 3.p2align 5 4.globl ECRYPT_encrypt_bytes 5ECRYPT_encrypt_bytes: 6 mov %rsp,%r11 7 and $31,%r11 8 add $256,%r11 9 sub %r11,%rsp 10 # x = arg1 11 mov %rdi,%r8 12 # m = arg2 13 mov %rsi,%rsi 14 # out = arg3 15 mov %rdx,%rdi 16 # bytes = arg4 17 mov %rcx,%rdx 18 # unsigned>? bytes - 0 19 cmp $0,%rdx 20 # comment:fp stack unchanged by jump 21 # goto done if !unsigned> 22 jbe ._done 23 # comment:fp stack unchanged by fallthrough 24# start: 25._start: 26 # r11_stack = r11 27 movq %r11,0(%rsp) 28 # r12_stack = r12 29 movq %r12,8(%rsp) 30 # r13_stack = r13 31 movq %r13,16(%rsp) 32 # r14_stack = r14 33 movq %r14,24(%rsp) 34 # r15_stack = r15 35 movq %r15,32(%rsp) 36 # rbx_stack = rbx 37 movq %rbx,40(%rsp) 38 # rbp_stack = rbp 39 movq %rbp,48(%rsp) 40 # in0 = *(uint64 *) (x + 0) 41 movq 0(%r8),%rcx 42 # in2 = *(uint64 *) (x + 8) 43 movq 8(%r8),%r9 44 # in4 = *(uint64 *) (x + 16) 45 movq 16(%r8),%rax 46 # in6 = *(uint64 *) (x + 24) 47 movq 24(%r8),%r10 48 # in8 = *(uint64 *) (x + 32) 49 movq 32(%r8),%r11 50 # in10 = *(uint64 *) (x + 40) 51 movq 40(%r8),%r12 52 # in12 = *(uint64 *) (x + 48) 53 movq 48(%r8),%r13 54 # in14 = *(uint64 *) (x + 56) 55 movq 56(%r8),%r14 56 # j0 = in0 57 movq %rcx,56(%rsp) 58 # j2 = in2 59 movq %r9,64(%rsp) 60 # j4 = in4 61 movq %rax,72(%rsp) 62 # j6 = in6 63 movq %r10,80(%rsp) 64 # j8 = in8 65 movq %r11,88(%rsp) 66 # j10 = in10 67 movq %r12,96(%rsp) 68 # j12 = in12 69 movq %r13,104(%rsp) 70 # j14 = in14 71 movq %r14,112(%rsp) 72 # x_backup = x 73 movq %r8,120(%rsp) 74# bytesatleast1: 75._bytesatleast1: 76 # unsigned<? bytes - 64 77 cmp $64,%rdx 78 # comment:fp stack unchanged by jump 79 # goto nocopy if !unsigned< 80 jae ._nocopy 81 # ctarget = out 82 movq %rdi,128(%rsp) 83 # out = &tmp 84 leaq 192(%rsp),%rdi 85 # i = bytes 86 mov %rdx,%rcx 87 # while (i) { *out++ = *m++; --i } 88 rep movsb 89 # out = &tmp 90 leaq 192(%rsp),%rdi 91 # m = &tmp 92 leaq 192(%rsp),%rsi 93 # comment:fp stack unchanged by fallthrough 94# nocopy: 95._nocopy: 96 # out_backup = out 97 movq %rdi,136(%rsp) 98 # m_backup = m 99 movq %rsi,144(%rsp) 100 # bytes_backup = bytes 101 movq %rdx,152(%rsp) 102 # x1 = j0 103 movq 56(%rsp),%rdi 104 # x0 = x1 105 mov %rdi,%rdx 106 # (uint64) x1 >>= 32 107 shr $32,%rdi 108 # x3 = j2 109 movq 64(%rsp),%rsi 110 # x2 = x3 111 mov %rsi,%rcx 112 # (uint64) x3 >>= 32 113 shr $32,%rsi 114 # x5 = j4 115 movq 72(%rsp),%r8 116 # x4 = x5 117 mov %r8,%r9 118 # (uint64) x5 >>= 32 119 shr $32,%r8 120 # x5_stack = x5 121 movq %r8,160(%rsp) 122 # x7 = j6 123 movq 80(%rsp),%r8 124 # x6 = x7 125 mov %r8,%rax 126 # (uint64) x7 >>= 32 127 shr $32,%r8 128 # x9 = j8 129 movq 88(%rsp),%r10 130 # x8 = x9 131 mov %r10,%r11 132 # (uint64) x9 >>= 32 133 shr $32,%r10 134 # x11 = j10 135 movq 96(%rsp),%r12 136 # x10 = x11 137 mov %r12,%r13 138 # x10_stack = x10 139 movq %r13,168(%rsp) 140 # (uint64) x11 >>= 32 141 shr $32,%r12 142 # x13 = j12 143 movq 104(%rsp),%r13 144 # x12 = x13 145 mov %r13,%r14 146 # (uint64) x13 >>= 32 147 shr $32,%r13 148 # x15 = j14 149 movq 112(%rsp),%r15 150 # x14 = x15 151 mov %r15,%rbx 152 # (uint64) x15 >>= 32 153 shr $32,%r15 154 # x15_stack = x15 155 movq %r15,176(%rsp) 156 # i = 20 157 mov $20,%r15 158# mainloop: 159._mainloop: 160 # i_backup = i 161 movq %r15,184(%rsp) 162 # x5 = x5_stack 163 movq 160(%rsp),%r15 164 # a = x12 + x0 165 lea (%r14,%rdx),%rbp 166 # (uint32) a <<<= 7 167 rol $7,%ebp 168 # x4 ^= a 169 xor %rbp,%r9 170 # b = x1 + x5 171 lea (%rdi,%r15),%rbp 172 # (uint32) b <<<= 7 173 rol $7,%ebp 174 # x9 ^= b 175 xor %rbp,%r10 176 # a = x0 + x4 177 lea (%rdx,%r9),%rbp 178 # (uint32) a <<<= 9 179 rol $9,%ebp 180 # x8 ^= a 181 xor %rbp,%r11 182 # b = x5 + x9 183 lea (%r15,%r10),%rbp 184 # (uint32) b <<<= 9 185 rol $9,%ebp 186 # x13 ^= b 187 xor %rbp,%r13 188 # a = x4 + x8 189 lea (%r9,%r11),%rbp 190 # (uint32) a <<<= 13 191 rol $13,%ebp 192 # x12 ^= a 193 xor %rbp,%r14 194 # b = x9 + x13 195 lea (%r10,%r13),%rbp 196 # (uint32) b <<<= 13 197 rol $13,%ebp 198 # x1 ^= b 199 xor %rbp,%rdi 200 # a = x8 + x12 201 lea (%r11,%r14),%rbp 202 # (uint32) a <<<= 18 203 rol $18,%ebp 204 # x0 ^= a 205 xor %rbp,%rdx 206 # b = x13 + x1 207 lea (%r13,%rdi),%rbp 208 # (uint32) b <<<= 18 209 rol $18,%ebp 210 # x5 ^= b 211 xor %rbp,%r15 212 # x10 = x10_stack 213 movq 168(%rsp),%rbp 214 # x5_stack = x5 215 movq %r15,160(%rsp) 216 # c = x6 + x10 217 lea (%rax,%rbp),%r15 218 # (uint32) c <<<= 7 219 rol $7,%r15d 220 # x14 ^= c 221 xor %r15,%rbx 222 # c = x10 + x14 223 lea (%rbp,%rbx),%r15 224 # (uint32) c <<<= 9 225 rol $9,%r15d 226 # x2 ^= c 227 xor %r15,%rcx 228 # c = x14 + x2 229 lea (%rbx,%rcx),%r15 230 # (uint32) c <<<= 13 231 rol $13,%r15d 232 # x6 ^= c 233 xor %r15,%rax 234 # c = x2 + x6 235 lea (%rcx,%rax),%r15 236 # (uint32) c <<<= 18 237 rol $18,%r15d 238 # x10 ^= c 239 xor %r15,%rbp 240 # x15 = x15_stack 241 movq 176(%rsp),%r15 242 # x10_stack = x10 243 movq %rbp,168(%rsp) 244 # d = x11 + x15 245 lea (%r12,%r15),%rbp 246 # (uint32) d <<<= 7 247 rol $7,%ebp 248 # x3 ^= d 249 xor %rbp,%rsi 250 # d = x15 + x3 251 lea (%r15,%rsi),%rbp 252 # (uint32) d <<<= 9 253 rol $9,%ebp 254 # x7 ^= d 255 xor %rbp,%r8 256 # d = x3 + x7 257 lea (%rsi,%r8),%rbp 258 # (uint32) d <<<= 13 259 rol $13,%ebp 260 # x11 ^= d 261 xor %rbp,%r12 262 # d = x7 + x11 263 lea (%r8,%r12),%rbp 264 # (uint32) d <<<= 18 265 rol $18,%ebp 266 # x15 ^= d 267 xor %rbp,%r15 268 # x15_stack = x15 269 movq %r15,176(%rsp) 270 # x5 = x5_stack 271 movq 160(%rsp),%r15 272 # a = x3 + x0 273 lea (%rsi,%rdx),%rbp 274 # (uint32) a <<<= 7 275 rol $7,%ebp 276 # x1 ^= a 277 xor %rbp,%rdi 278 # b = x4 + x5 279 lea (%r9,%r15),%rbp 280 # (uint32) b <<<= 7 281 rol $7,%ebp 282 # x6 ^= b 283 xor %rbp,%rax 284 # a = x0 + x1 285 lea (%rdx,%rdi),%rbp 286 # (uint32) a <<<= 9 287 rol $9,%ebp 288 # x2 ^= a 289 xor %rbp,%rcx 290 # b = x5 + x6 291 lea (%r15,%rax),%rbp 292 # (uint32) b <<<= 9 293 rol $9,%ebp 294 # x7 ^= b 295 xor %rbp,%r8 296 # a = x1 + x2 297 lea (%rdi,%rcx),%rbp 298 # (uint32) a <<<= 13 299 rol $13,%ebp 300 # x3 ^= a 301 xor %rbp,%rsi 302 # b = x6 + x7 303 lea (%rax,%r8),%rbp 304 # (uint32) b <<<= 13 305 rol $13,%ebp 306 # x4 ^= b 307 xor %rbp,%r9 308 # a = x2 + x3 309 lea (%rcx,%rsi),%rbp 310 # (uint32) a <<<= 18 311 rol $18,%ebp 312 # x0 ^= a 313 xor %rbp,%rdx 314 # b = x7 + x4 315 lea (%r8,%r9),%rbp 316 # (uint32) b <<<= 18 317 rol $18,%ebp 318 # x5 ^= b 319 xor %rbp,%r15 320 # x10 = x10_stack 321 movq 168(%rsp),%rbp 322 # x5_stack = x5 323 movq %r15,160(%rsp) 324 # c = x9 + x10 325 lea (%r10,%rbp),%r15 326 # (uint32) c <<<= 7 327 rol $7,%r15d 328 # x11 ^= c 329 xor %r15,%r12 330 # c = x10 + x11 331 lea (%rbp,%r12),%r15 332 # (uint32) c <<<= 9 333 rol $9,%r15d 334 # x8 ^= c 335 xor %r15,%r11 336 # c = x11 + x8 337 lea (%r12,%r11),%r15 338 # (uint32) c <<<= 13 339 rol $13,%r15d 340 # x9 ^= c 341 xor %r15,%r10 342 # c = x8 + x9 343 lea (%r11,%r10),%r15 344 # (uint32) c <<<= 18 345 rol $18,%r15d 346 # x10 ^= c 347 xor %r15,%rbp 348 # x15 = x15_stack 349 movq 176(%rsp),%r15 350 # x10_stack = x10 351 movq %rbp,168(%rsp) 352 # d = x14 + x15 353 lea (%rbx,%r15),%rbp 354 # (uint32) d <<<= 7 355 rol $7,%ebp 356 # x12 ^= d 357 xor %rbp,%r14 358 # d = x15 + x12 359 lea (%r15,%r14),%rbp 360 # (uint32) d <<<= 9 361 rol $9,%ebp 362 # x13 ^= d 363 xor %rbp,%r13 364 # d = x12 + x13 365 lea (%r14,%r13),%rbp 366 # (uint32) d <<<= 13 367 rol $13,%ebp 368 # x14 ^= d 369 xor %rbp,%rbx 370 # d = x13 + x14 371 lea (%r13,%rbx),%rbp 372 # (uint32) d <<<= 18 373 rol $18,%ebp 374 # x15 ^= d 375 xor %rbp,%r15 376 # x15_stack = x15 377 movq %r15,176(%rsp) 378 # x5 = x5_stack 379 movq 160(%rsp),%r15 380 # a = x12 + x0 381 lea (%r14,%rdx),%rbp 382 # (uint32) a <<<= 7 383 rol $7,%ebp 384 # x4 ^= a 385 xor %rbp,%r9 386 # b = x1 + x5 387 lea (%rdi,%r15),%rbp 388 # (uint32) b <<<= 7 389 rol $7,%ebp 390 # x9 ^= b 391 xor %rbp,%r10 392 # a = x0 + x4 393 lea (%rdx,%r9),%rbp 394 # (uint32) a <<<= 9 395 rol $9,%ebp 396 # x8 ^= a 397 xor %rbp,%r11 398 # b = x5 + x9 399 lea (%r15,%r10),%rbp 400 # (uint32) b <<<= 9 401 rol $9,%ebp 402 # x13 ^= b 403 xor %rbp,%r13 404 # a = x4 + x8 405 lea (%r9,%r11),%rbp 406 # (uint32) a <<<= 13 407 rol $13,%ebp 408 # x12 ^= a 409 xor %rbp,%r14 410 # b = x9 + x13 411 lea (%r10,%r13),%rbp 412 # (uint32) b <<<= 13 413 rol $13,%ebp 414 # x1 ^= b 415 xor %rbp,%rdi 416 # a = x8 + x12 417 lea (%r11,%r14),%rbp 418 # (uint32) a <<<= 18 419 rol $18,%ebp 420 # x0 ^= a 421 xor %rbp,%rdx 422 # b = x13 + x1 423 lea (%r13,%rdi),%rbp 424 # (uint32) b <<<= 18 425 rol $18,%ebp 426 # x5 ^= b 427 xor %rbp,%r15 428 # x10 = x10_stack 429 movq 168(%rsp),%rbp 430 # x5_stack = x5 431 movq %r15,160(%rsp) 432 # c = x6 + x10 433 lea (%rax,%rbp),%r15 434 # (uint32) c <<<= 7 435 rol $7,%r15d 436 # x14 ^= c 437 xor %r15,%rbx 438 # c = x10 + x14 439 lea (%rbp,%rbx),%r15 440 # (uint32) c <<<= 9 441 rol $9,%r15d 442 # x2 ^= c 443 xor %r15,%rcx 444 # c = x14 + x2 445 lea (%rbx,%rcx),%r15 446 # (uint32) c <<<= 13 447 rol $13,%r15d 448 # x6 ^= c 449 xor %r15,%rax 450 # c = x2 + x6 451 lea (%rcx,%rax),%r15 452 # (uint32) c <<<= 18 453 rol $18,%r15d 454 # x10 ^= c 455 xor %r15,%rbp 456 # x15 = x15_stack 457 movq 176(%rsp),%r15 458 # x10_stack = x10 459 movq %rbp,168(%rsp) 460 # d = x11 + x15 461 lea (%r12,%r15),%rbp 462 # (uint32) d <<<= 7 463 rol $7,%ebp 464 # x3 ^= d 465 xor %rbp,%rsi 466 # d = x15 + x3 467 lea (%r15,%rsi),%rbp 468 # (uint32) d <<<= 9 469 rol $9,%ebp 470 # x7 ^= d 471 xor %rbp,%r8 472 # d = x3 + x7 473 lea (%rsi,%r8),%rbp 474 # (uint32) d <<<= 13 475 rol $13,%ebp 476 # x11 ^= d 477 xor %rbp,%r12 478 # d = x7 + x11 479 lea (%r8,%r12),%rbp 480 # (uint32) d <<<= 18 481 rol $18,%ebp 482 # x15 ^= d 483 xor %rbp,%r15 484 # x15_stack = x15 485 movq %r15,176(%rsp) 486 # x5 = x5_stack 487 movq 160(%rsp),%r15 488 # a = x3 + x0 489 lea (%rsi,%rdx),%rbp 490 # (uint32) a <<<= 7 491 rol $7,%ebp 492 # x1 ^= a 493 xor %rbp,%rdi 494 # b = x4 + x5 495 lea (%r9,%r15),%rbp 496 # (uint32) b <<<= 7 497 rol $7,%ebp 498 # x6 ^= b 499 xor %rbp,%rax 500 # a = x0 + x1 501 lea (%rdx,%rdi),%rbp 502 # (uint32) a <<<= 9 503 rol $9,%ebp 504 # x2 ^= a 505 xor %rbp,%rcx 506 # b = x5 + x6 507 lea (%r15,%rax),%rbp 508 # (uint32) b <<<= 9 509 rol $9,%ebp 510 # x7 ^= b 511 xor %rbp,%r8 512 # a = x1 + x2 513 lea (%rdi,%rcx),%rbp 514 # (uint32) a <<<= 13 515 rol $13,%ebp 516 # x3 ^= a 517 xor %rbp,%rsi 518 # b = x6 + x7 519 lea (%rax,%r8),%rbp 520 # (uint32) b <<<= 13 521 rol $13,%ebp 522 # x4 ^= b 523 xor %rbp,%r9 524 # a = x2 + x3 525 lea (%rcx,%rsi),%rbp 526 # (uint32) a <<<= 18 527 rol $18,%ebp 528 # x0 ^= a 529 xor %rbp,%rdx 530 # b = x7 + x4 531 lea (%r8,%r9),%rbp 532 # (uint32) b <<<= 18 533 rol $18,%ebp 534 # x5 ^= b 535 xor %rbp,%r15 536 # x10 = x10_stack 537 movq 168(%rsp),%rbp 538 # x5_stack = x5 539 movq %r15,160(%rsp) 540 # c = x9 + x10 541 lea (%r10,%rbp),%r15 542 # (uint32) c <<<= 7 543 rol $7,%r15d 544 # x11 ^= c 545 xor %r15,%r12 546 # c = x10 + x11 547 lea (%rbp,%r12),%r15 548 # (uint32) c <<<= 9 549 rol $9,%r15d 550 # x8 ^= c 551 xor %r15,%r11 552 # c = x11 + x8 553 lea (%r12,%r11),%r15 554 # (uint32) c <<<= 13 555 rol $13,%r15d 556 # x9 ^= c 557 xor %r15,%r10 558 # c = x8 + x9 559 lea (%r11,%r10),%r15 560 # (uint32) c <<<= 18 561 rol $18,%r15d 562 # x10 ^= c 563 xor %r15,%rbp 564 # x15 = x15_stack 565 movq 176(%rsp),%r15 566 # x10_stack = x10 567 movq %rbp,168(%rsp) 568 # d = x14 + x15 569 lea (%rbx,%r15),%rbp 570 # (uint32) d <<<= 7 571 rol $7,%ebp 572 # x12 ^= d 573 xor %rbp,%r14 574 # d = x15 + x12 575 lea (%r15,%r14),%rbp 576 # (uint32) d <<<= 9 577 rol $9,%ebp 578 # x13 ^= d 579 xor %rbp,%r13 580 # d = x12 + x13 581 lea (%r14,%r13),%rbp 582 # (uint32) d <<<= 13 583 rol $13,%ebp 584 # x14 ^= d 585 xor %rbp,%rbx 586 # d = x13 + x14 587 lea (%r13,%rbx),%rbp 588 # (uint32) d <<<= 18 589 rol $18,%ebp 590 # x15 ^= d 591 xor %rbp,%r15 592 # x15_stack = x15 593 movq %r15,176(%rsp) 594 # i = i_backup 595 movq 184(%rsp),%r15 596 # unsigned>? i -= 4 597 sub $4,%r15 598 # comment:fp stack unchanged by jump 599 # goto mainloop if unsigned> 600 ja ._mainloop 601 # (uint32) x2 += j2 602 addl 64(%rsp),%ecx 603 # x3 <<= 32 604 shl $32,%rsi 605 # x3 += j2 606 addq 64(%rsp),%rsi 607 # (uint64) x3 >>= 32 608 shr $32,%rsi 609 # x3 <<= 32 610 shl $32,%rsi 611 # x2 += x3 612 add %rsi,%rcx 613 # (uint32) x6 += j6 614 addl 80(%rsp),%eax 615 # x7 <<= 32 616 shl $32,%r8 617 # x7 += j6 618 addq 80(%rsp),%r8 619 # (uint64) x7 >>= 32 620 shr $32,%r8 621 # x7 <<= 32 622 shl $32,%r8 623 # x6 += x7 624 add %r8,%rax 625 # (uint32) x8 += j8 626 addl 88(%rsp),%r11d 627 # x9 <<= 32 628 shl $32,%r10 629 # x9 += j8 630 addq 88(%rsp),%r10 631 # (uint64) x9 >>= 32 632 shr $32,%r10 633 # x9 <<= 32 634 shl $32,%r10 635 # x8 += x9 636 add %r10,%r11 637 # (uint32) x12 += j12 638 addl 104(%rsp),%r14d 639 # x13 <<= 32 640 shl $32,%r13 641 # x13 += j12 642 addq 104(%rsp),%r13 643 # (uint64) x13 >>= 32 644 shr $32,%r13 645 # x13 <<= 32 646 shl $32,%r13 647 # x12 += x13 648 add %r13,%r14 649 # (uint32) x0 += j0 650 addl 56(%rsp),%edx 651 # x1 <<= 32 652 shl $32,%rdi 653 # x1 += j0 654 addq 56(%rsp),%rdi 655 # (uint64) x1 >>= 32 656 shr $32,%rdi 657 # x1 <<= 32 658 shl $32,%rdi 659 # x0 += x1 660 add %rdi,%rdx 661 # x5 = x5_stack 662 movq 160(%rsp),%rdi 663 # (uint32) x4 += j4 664 addl 72(%rsp),%r9d 665 # x5 <<= 32 666 shl $32,%rdi 667 # x5 += j4 668 addq 72(%rsp),%rdi 669 # (uint64) x5 >>= 32 670 shr $32,%rdi 671 # x5 <<= 32 672 shl $32,%rdi 673 # x4 += x5 674 add %rdi,%r9 675 # x10 = x10_stack 676 movq 168(%rsp),%r8 677 # (uint32) x10 += j10 678 addl 96(%rsp),%r8d 679 # x11 <<= 32 680 shl $32,%r12 681 # x11 += j10 682 addq 96(%rsp),%r12 683 # (uint64) x11 >>= 32 684 shr $32,%r12 685 # x11 <<= 32 686 shl $32,%r12 687 # x10 += x11 688 add %r12,%r8 689 # x15 = x15_stack 690 movq 176(%rsp),%rdi 691 # (uint32) x14 += j14 692 addl 112(%rsp),%ebx 693 # x15 <<= 32 694 shl $32,%rdi 695 # x15 += j14 696 addq 112(%rsp),%rdi 697 # (uint64) x15 >>= 32 698 shr $32,%rdi 699 # x15 <<= 32 700 shl $32,%rdi 701 # x14 += x15 702 add %rdi,%rbx 703 # out = out_backup 704 movq 136(%rsp),%rdi 705 # m = m_backup 706 movq 144(%rsp),%rsi 707 # x0 ^= *(uint64 *) (m + 0) 708 xorq 0(%rsi),%rdx 709 # *(uint64 *) (out + 0) = x0 710 movq %rdx,0(%rdi) 711 # x2 ^= *(uint64 *) (m + 8) 712 xorq 8(%rsi),%rcx 713 # *(uint64 *) (out + 8) = x2 714 movq %rcx,8(%rdi) 715 # x4 ^= *(uint64 *) (m + 16) 716 xorq 16(%rsi),%r9 717 # *(uint64 *) (out + 16) = x4 718 movq %r9,16(%rdi) 719 # x6 ^= *(uint64 *) (m + 24) 720 xorq 24(%rsi),%rax 721 # *(uint64 *) (out + 24) = x6 722 movq %rax,24(%rdi) 723 # x8 ^= *(uint64 *) (m + 32) 724 xorq 32(%rsi),%r11 725 # *(uint64 *) (out + 32) = x8 726 movq %r11,32(%rdi) 727 # x10 ^= *(uint64 *) (m + 40) 728 xorq 40(%rsi),%r8 729 # *(uint64 *) (out + 40) = x10 730 movq %r8,40(%rdi) 731 # x12 ^= *(uint64 *) (m + 48) 732 xorq 48(%rsi),%r14 733 # *(uint64 *) (out + 48) = x12 734 movq %r14,48(%rdi) 735 # x14 ^= *(uint64 *) (m + 56) 736 xorq 56(%rsi),%rbx 737 # *(uint64 *) (out + 56) = x14 738 movq %rbx,56(%rdi) 739 # bytes = bytes_backup 740 movq 152(%rsp),%rdx 741 # in8 = j8 742 movq 88(%rsp),%rcx 743 # in8 += 1 744 add $1,%rcx 745 # j8 = in8 746 movq %rcx,88(%rsp) 747 # unsigned>? unsigned<? bytes - 64 748 cmp $64,%rdx 749 # comment:fp stack unchanged by jump 750 # goto bytesatleast65 if unsigned> 751 ja ._bytesatleast65 752 # comment:fp stack unchanged by jump 753 # goto bytesatleast64 if !unsigned< 754 jae ._bytesatleast64 755 # m = out 756 mov %rdi,%rsi 757 # out = ctarget 758 movq 128(%rsp),%rdi 759 # i = bytes 760 mov %rdx,%rcx 761 # while (i) { *out++ = *m++; --i } 762 rep movsb 763 # comment:fp stack unchanged by fallthrough 764# bytesatleast64: 765._bytesatleast64: 766 # x = x_backup 767 movq 120(%rsp),%rdi 768 # in8 = j8 769 movq 88(%rsp),%rsi 770 # *(uint64 *) (x + 32) = in8 771 movq %rsi,32(%rdi) 772 # r11 = r11_stack 773 movq 0(%rsp),%r11 774 # r12 = r12_stack 775 movq 8(%rsp),%r12 776 # r13 = r13_stack 777 movq 16(%rsp),%r13 778 # r14 = r14_stack 779 movq 24(%rsp),%r14 780 # r15 = r15_stack 781 movq 32(%rsp),%r15 782 # rbx = rbx_stack 783 movq 40(%rsp),%rbx 784 # rbp = rbp_stack 785 movq 48(%rsp),%rbp 786 # comment:fp stack unchanged by fallthrough 787# done: 788._done: 789 # leave 790 add %r11,%rsp 791 mov %rdi,%rax 792 mov %rsi,%rdx 793 ret 794# bytesatleast65: 795._bytesatleast65: 796 # bytes -= 64 797 sub $64,%rdx 798 # out += 64 799 add $64,%rdi 800 # m += 64 801 add $64,%rsi 802 # comment:fp stack unchanged by jump 803 # goto bytesatleast1 804 jmp ._bytesatleast1 805# enter ECRYPT_keysetup 806.text 807.p2align 5 808.globl ECRYPT_keysetup 809ECRYPT_keysetup: 810 mov %rsp,%r11 811 and $31,%r11 812 add $256,%r11 813 sub %r11,%rsp 814 # k = arg2 815 mov %rsi,%rsi 816 # kbits = arg3 817 mov %rdx,%rdx 818 # x = arg1 819 mov %rdi,%rdi 820 # in0 = *(uint64 *) (k + 0) 821 movq 0(%rsi),%r8 822 # in2 = *(uint64 *) (k + 8) 823 movq 8(%rsi),%r9 824 # *(uint64 *) (x + 4) = in0 825 movq %r8,4(%rdi) 826 # *(uint64 *) (x + 12) = in2 827 movq %r9,12(%rdi) 828 # unsigned<? kbits - 256 829 cmp $256,%rdx 830 # comment:fp stack unchanged by jump 831 # goto kbits128 if unsigned< 832 jb ._kbits128 833# kbits256: 834._kbits256: 835 # in10 = *(uint64 *) (k + 16) 836 movq 16(%rsi),%rdx 837 # in12 = *(uint64 *) (k + 24) 838 movq 24(%rsi),%rsi 839 # *(uint64 *) (x + 44) = in10 840 movq %rdx,44(%rdi) 841 # *(uint64 *) (x + 52) = in12 842 movq %rsi,52(%rdi) 843 # in0 = 1634760805 844 mov $1634760805,%rsi 845 # in4 = 857760878 846 mov $857760878,%rdx 847 # in10 = 2036477234 848 mov $2036477234,%rcx 849 # in14 = 1797285236 850 mov $1797285236,%r8 851 # *(uint32 *) (x + 0) = in0 852 movl %esi,0(%rdi) 853 # *(uint32 *) (x + 20) = in4 854 movl %edx,20(%rdi) 855 # *(uint32 *) (x + 40) = in10 856 movl %ecx,40(%rdi) 857 # *(uint32 *) (x + 60) = in14 858 movl %r8d,60(%rdi) 859 # comment:fp stack unchanged by jump 860 # goto keysetupdone 861 jmp ._keysetupdone 862# kbits128: 863._kbits128: 864 # in10 = *(uint64 *) (k + 0) 865 movq 0(%rsi),%rdx 866 # in12 = *(uint64 *) (k + 8) 867 movq 8(%rsi),%rsi 868 # *(uint64 *) (x + 44) = in10 869 movq %rdx,44(%rdi) 870 # *(uint64 *) (x + 52) = in12 871 movq %rsi,52(%rdi) 872 # in0 = 1634760805 873 mov $1634760805,%rsi 874 # in4 = 824206446 875 mov $824206446,%rdx 876 # in10 = 2036477238 877 mov $2036477238,%rcx 878 # in14 = 1797285236 879 mov $1797285236,%r8 880 # *(uint32 *) (x + 0) = in0 881 movl %esi,0(%rdi) 882 # *(uint32 *) (x + 20) = in4 883 movl %edx,20(%rdi) 884 # *(uint32 *) (x + 40) = in10 885 movl %ecx,40(%rdi) 886 # *(uint32 *) (x + 60) = in14 887 movl %r8d,60(%rdi) 888# keysetupdone: 889._keysetupdone: 890 # leave 891 add %r11,%rsp 892 mov %rdi,%rax 893 mov %rsi,%rdx 894 ret 895# enter ECRYPT_ivsetup 896.text 897.p2align 5 898.globl ECRYPT_ivsetup 899ECRYPT_ivsetup: 900 mov %rsp,%r11 901 and $31,%r11 902 add $256,%r11 903 sub %r11,%rsp 904 # iv = arg2 905 mov %rsi,%rsi 906 # x = arg1 907 mov %rdi,%rdi 908 # in6 = *(uint64 *) (iv + 0) 909 movq 0(%rsi),%rsi 910 # in8 = 0 911 mov $0,%r8 912 # *(uint64 *) (x + 24) = in6 913 movq %rsi,24(%rdi) 914 # *(uint64 *) (x + 32) = in8 915 movq %r8,32(%rdi) 916 # leave 917 add %r11,%rsp 918 mov %rdi,%rax 919 mov %rsi,%rdx 920 ret 921