1/* 2 * !/usr/bin/env perl 3 * 4 * ==================================================================== 5 * Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL 6 * project. The module is, however, dual licensed under OpenSSL and 7 * CRYPTOGAMS licenses depending on where you obtain it. For further 8 * details see http://www.openssl.org/~appro/cryptogams/. 9 * ==================================================================== 10 * 11 * sha1_block procedure for x86_64. 12 * 13 * It was brought to my attention that on EM64T compiler-generated code 14 * was far behind 32-bit assembler implementation. This is unlike on 15 * Opteron where compiler-generated code was only 15% behind 32-bit 16 * assembler, which originally made it hard to motivate the effort. 17 * There was suggestion to mechanically translate 32-bit code, but I 18 * dismissed it, reasoning that x86_64 offers enough register bank 19 * capacity to fully utilize SHA-1 parallelism. Therefore this fresh 20 * implementation:-) However! While 64-bit code does performs better 21 * on Opteron, I failed to beat 32-bit assembler on EM64T core. Well, 22 * x86_64 does offer larger *addressable* bank, but out-of-order core 23 * reaches for even more registers through dynamic aliasing, and EM64T 24 * core must have managed to run-time optimize even 32-bit code just as 25 * good as 64-bit one. Performance improvement is summarized in the 26 * following table: 27 * 28 * gcc 3.4 32-bit asm cycles/byte 29 * Opteron +45% +20% 6.8 30 * Xeon P4 +65% +0% 9.9 31 * Core2 +60% +10% 7.0 32 * 33 * 34 * OpenSolaris OS modifications 35 * 36 * Sun elects to use this software under the BSD license. 37 * 38 * This source originates from OpenSSL file sha1-x86_64.pl at 39 * ftp://ftp.openssl.org/snapshot/openssl-0.9.8-stable-SNAP-20080131.tar.gz 40 * (presumably for future OpenSSL release 0.9.8h), with these changes: 41 * 42 * 1. Added perl "use strict" and declared variables. 43 * 44 * 2. Added OpenSolaris ENTRY_NP/SET_SIZE macros from 45 * /usr/include/sys/asm_linkage.h, .ident keywords, and lint(1B) guards. 46 * 47 * 3. Removed x86_64-xlate.pl script (not needed for as(1) or gas(1) 48 * assemblers). 49 * 50 */ 51 52/* 53 * This file was generated by a perl script (sha1-x86_64.pl). The comments from 54 * the original file have been pasted above. 55 */ 56 57#if defined(lint) || defined(__lint) 58#include <sys/stdint.h> 59#include <sys/sha1.h> 60 61 62/* ARGSUSED */ 63void 64sha1_block_data_order(SHA1_CTX *ctx, const void *inpp, size_t blocks) 65{ 66} 67 68#else 69#define _ASM 70#include <sys/asm_linkage.h> 71ENTRY_NP(sha1_block_data_order) 72 push %rbx 73 push %rbp 74 push %r12 75 mov %rsp,%rax 76 mov %rdi,%r8 # reassigned argument 77 sub $72,%rsp 78 mov %rsi,%r9 # reassigned argument 79 and $-64,%rsp 80 mov %rdx,%r10 # reassigned argument 81 mov %rax,64(%rsp) 82 83 mov 0(%r8),%edx 84 mov 4(%r8),%esi 85 mov 8(%r8),%edi 86 mov 12(%r8),%ebp 87 mov 16(%r8),%r11d 88.align 4 89.Lloop: 90 mov 0(%r9),%eax 91 bswap %eax 92 mov %eax,0(%rsp) 93 lea 0x5a827999(%eax,%r11d),%r12d 94 mov %edi,%ebx 95 mov 4(%r9),%eax 96 mov %edx,%r11d 97 xor %ebp,%ebx 98 bswap %eax 99 rol $5,%r11d 100 and %esi,%ebx 101 mov %eax,4(%rsp) 102 add %r11d,%r12d 103 xor %ebp,%ebx 104 rol $30,%esi 105 add %ebx,%r12d 106 lea 0x5a827999(%eax,%ebp),%r11d 107 mov %esi,%ebx 108 mov 8(%r9),%eax 109 mov %r12d,%ebp 110 xor %edi,%ebx 111 bswap %eax 112 rol $5,%ebp 113 and %edx,%ebx 114 mov %eax,8(%rsp) 115 add %ebp,%r11d 116 xor %edi,%ebx 117 rol $30,%edx 118 add %ebx,%r11d 119 lea 0x5a827999(%eax,%edi),%ebp 120 mov %edx,%ebx 121 mov 12(%r9),%eax 122 mov %r11d,%edi 123 xor %esi,%ebx 124 bswap %eax 125 rol $5,%edi 126 and %r12d,%ebx 127 mov %eax,12(%rsp) 128 add %edi,%ebp 129 xor %esi,%ebx 130 rol $30,%r12d 131 add %ebx,%ebp 132 lea 0x5a827999(%eax,%esi),%edi 133 mov %r12d,%ebx 134 mov 16(%r9),%eax 135 mov %ebp,%esi 136 xor %edx,%ebx 137 bswap %eax 138 rol $5,%esi 139 and %r11d,%ebx 140 mov %eax,16(%rsp) 141 add %esi,%edi 142 xor %edx,%ebx 143 rol $30,%r11d 144 add %ebx,%edi 145 lea 0x5a827999(%eax,%edx),%esi 146 mov %r11d,%ebx 147 mov 20(%r9),%eax 148 mov %edi,%edx 149 xor %r12d,%ebx 150 bswap %eax 151 rol $5,%edx 152 and %ebp,%ebx 153 mov %eax,20(%rsp) 154 add %edx,%esi 155 xor %r12d,%ebx 156 rol $30,%ebp 157 add %ebx,%esi 158 lea 0x5a827999(%eax,%r12d),%edx 159 mov %ebp,%ebx 160 mov 24(%r9),%eax 161 mov %esi,%r12d 162 xor %r11d,%ebx 163 bswap %eax 164 rol $5,%r12d 165 and %edi,%ebx 166 mov %eax,24(%rsp) 167 add %r12d,%edx 168 xor %r11d,%ebx 169 rol $30,%edi 170 add %ebx,%edx 171 lea 0x5a827999(%eax,%r11d),%r12d 172 mov %edi,%ebx 173 mov 28(%r9),%eax 174 mov %edx,%r11d 175 xor %ebp,%ebx 176 bswap %eax 177 rol $5,%r11d 178 and %esi,%ebx 179 mov %eax,28(%rsp) 180 add %r11d,%r12d 181 xor %ebp,%ebx 182 rol $30,%esi 183 add %ebx,%r12d 184 lea 0x5a827999(%eax,%ebp),%r11d 185 mov %esi,%ebx 186 mov 32(%r9),%eax 187 mov %r12d,%ebp 188 xor %edi,%ebx 189 bswap %eax 190 rol $5,%ebp 191 and %edx,%ebx 192 mov %eax,32(%rsp) 193 add %ebp,%r11d 194 xor %edi,%ebx 195 rol $30,%edx 196 add %ebx,%r11d 197 lea 0x5a827999(%eax,%edi),%ebp 198 mov %edx,%ebx 199 mov 36(%r9),%eax 200 mov %r11d,%edi 201 xor %esi,%ebx 202 bswap %eax 203 rol $5,%edi 204 and %r12d,%ebx 205 mov %eax,36(%rsp) 206 add %edi,%ebp 207 xor %esi,%ebx 208 rol $30,%r12d 209 add %ebx,%ebp 210 lea 0x5a827999(%eax,%esi),%edi 211 mov %r12d,%ebx 212 mov 40(%r9),%eax 213 mov %ebp,%esi 214 xor %edx,%ebx 215 bswap %eax 216 rol $5,%esi 217 and %r11d,%ebx 218 mov %eax,40(%rsp) 219 add %esi,%edi 220 xor %edx,%ebx 221 rol $30,%r11d 222 add %ebx,%edi 223 lea 0x5a827999(%eax,%edx),%esi 224 mov %r11d,%ebx 225 mov 44(%r9),%eax 226 mov %edi,%edx 227 xor %r12d,%ebx 228 bswap %eax 229 rol $5,%edx 230 and %ebp,%ebx 231 mov %eax,44(%rsp) 232 add %edx,%esi 233 xor %r12d,%ebx 234 rol $30,%ebp 235 add %ebx,%esi 236 lea 0x5a827999(%eax,%r12d),%edx 237 mov %ebp,%ebx 238 mov 48(%r9),%eax 239 mov %esi,%r12d 240 xor %r11d,%ebx 241 bswap %eax 242 rol $5,%r12d 243 and %edi,%ebx 244 mov %eax,48(%rsp) 245 add %r12d,%edx 246 xor %r11d,%ebx 247 rol $30,%edi 248 add %ebx,%edx 249 lea 0x5a827999(%eax,%r11d),%r12d 250 mov %edi,%ebx 251 mov 52(%r9),%eax 252 mov %edx,%r11d 253 xor %ebp,%ebx 254 bswap %eax 255 rol $5,%r11d 256 and %esi,%ebx 257 mov %eax,52(%rsp) 258 add %r11d,%r12d 259 xor %ebp,%ebx 260 rol $30,%esi 261 add %ebx,%r12d 262 lea 0x5a827999(%eax,%ebp),%r11d 263 mov %esi,%ebx 264 mov 56(%r9),%eax 265 mov %r12d,%ebp 266 xor %edi,%ebx 267 bswap %eax 268 rol $5,%ebp 269 and %edx,%ebx 270 mov %eax,56(%rsp) 271 add %ebp,%r11d 272 xor %edi,%ebx 273 rol $30,%edx 274 add %ebx,%r11d 275 lea 0x5a827999(%eax,%edi),%ebp 276 mov %edx,%ebx 277 mov 60(%r9),%eax 278 mov %r11d,%edi 279 xor %esi,%ebx 280 bswap %eax 281 rol $5,%edi 282 and %r12d,%ebx 283 mov %eax,60(%rsp) 284 add %edi,%ebp 285 xor %esi,%ebx 286 rol $30,%r12d 287 add %ebx,%ebp 288 lea 0x5a827999(%eax,%esi),%edi 289 mov 0(%rsp),%eax 290 mov %r12d,%ebx 291 mov %ebp,%esi 292 xor 8(%rsp),%eax 293 xor %edx,%ebx 294 rol $5,%esi 295 xor 32(%rsp),%eax 296 and %r11d,%ebx 297 add %esi,%edi 298 xor 52(%rsp),%eax 299 xor %edx,%ebx 300 rol $30,%r11d 301 add %ebx,%edi 302 rol $1,%eax 303 mov %eax,0(%rsp) 304 lea 0x5a827999(%eax,%edx),%esi 305 mov 4(%rsp),%eax 306 mov %r11d,%ebx 307 mov %edi,%edx 308 xor 12(%rsp),%eax 309 xor %r12d,%ebx 310 rol $5,%edx 311 xor 36(%rsp),%eax 312 and %ebp,%ebx 313 add %edx,%esi 314 xor 56(%rsp),%eax 315 xor %r12d,%ebx 316 rol $30,%ebp 317 add %ebx,%esi 318 rol $1,%eax 319 mov %eax,4(%rsp) 320 lea 0x5a827999(%eax,%r12d),%edx 321 mov 8(%rsp),%eax 322 mov %ebp,%ebx 323 mov %esi,%r12d 324 xor 16(%rsp),%eax 325 xor %r11d,%ebx 326 rol $5,%r12d 327 xor 40(%rsp),%eax 328 and %edi,%ebx 329 add %r12d,%edx 330 xor 60(%rsp),%eax 331 xor %r11d,%ebx 332 rol $30,%edi 333 add %ebx,%edx 334 rol $1,%eax 335 mov %eax,8(%rsp) 336 lea 0x5a827999(%eax,%r11d),%r12d 337 mov 12(%rsp),%eax 338 mov %edi,%ebx 339 mov %edx,%r11d 340 xor 20(%rsp),%eax 341 xor %ebp,%ebx 342 rol $5,%r11d 343 xor 44(%rsp),%eax 344 and %esi,%ebx 345 add %r11d,%r12d 346 xor 0(%rsp),%eax 347 xor %ebp,%ebx 348 rol $30,%esi 349 add %ebx,%r12d 350 rol $1,%eax 351 mov %eax,12(%rsp) 352 lea 0x5a827999(%eax,%ebp),%r11d 353 mov 16(%rsp),%eax 354 mov %esi,%ebx 355 mov %r12d,%ebp 356 xor 24(%rsp),%eax 357 xor %edi,%ebx 358 rol $5,%ebp 359 xor 48(%rsp),%eax 360 and %edx,%ebx 361 add %ebp,%r11d 362 xor 4(%rsp),%eax 363 xor %edi,%ebx 364 rol $30,%edx 365 add %ebx,%r11d 366 rol $1,%eax 367 mov %eax,16(%rsp) 368 lea 0x6ed9eba1(%eax,%edi),%ebp 369 mov 20(%rsp),%eax 370 mov %edx,%ebx 371 mov %r11d,%edi 372 xor 28(%rsp),%eax 373 xor %r12d,%ebx 374 rol $5,%edi 375 xor 52(%rsp),%eax 376 xor %esi,%ebx 377 add %edi,%ebp 378 xor 8(%rsp),%eax 379 rol $30,%r12d 380 add %ebx,%ebp 381 rol $1,%eax 382 mov %eax,20(%rsp) 383 lea 0x6ed9eba1(%eax,%esi),%edi 384 mov 24(%rsp),%eax 385 mov %r12d,%ebx 386 mov %ebp,%esi 387 xor 32(%rsp),%eax 388 xor %r11d,%ebx 389 rol $5,%esi 390 xor 56(%rsp),%eax 391 xor %edx,%ebx 392 add %esi,%edi 393 xor 12(%rsp),%eax 394 rol $30,%r11d 395 add %ebx,%edi 396 rol $1,%eax 397 mov %eax,24(%rsp) 398 lea 0x6ed9eba1(%eax,%edx),%esi 399 mov 28(%rsp),%eax 400 mov %r11d,%ebx 401 mov %edi,%edx 402 xor 36(%rsp),%eax 403 xor %ebp,%ebx 404 rol $5,%edx 405 xor 60(%rsp),%eax 406 xor %r12d,%ebx 407 add %edx,%esi 408 xor 16(%rsp),%eax 409 rol $30,%ebp 410 add %ebx,%esi 411 rol $1,%eax 412 mov %eax,28(%rsp) 413 lea 0x6ed9eba1(%eax,%r12d),%edx 414 mov 32(%rsp),%eax 415 mov %ebp,%ebx 416 mov %esi,%r12d 417 xor 40(%rsp),%eax 418 xor %edi,%ebx 419 rol $5,%r12d 420 xor 0(%rsp),%eax 421 xor %r11d,%ebx 422 add %r12d,%edx 423 xor 20(%rsp),%eax 424 rol $30,%edi 425 add %ebx,%edx 426 rol $1,%eax 427 mov %eax,32(%rsp) 428 lea 0x6ed9eba1(%eax,%r11d),%r12d 429 mov 36(%rsp),%eax 430 mov %edi,%ebx 431 mov %edx,%r11d 432 xor 44(%rsp),%eax 433 xor %esi,%ebx 434 rol $5,%r11d 435 xor 4(%rsp),%eax 436 xor %ebp,%ebx 437 add %r11d,%r12d 438 xor 24(%rsp),%eax 439 rol $30,%esi 440 add %ebx,%r12d 441 rol $1,%eax 442 mov %eax,36(%rsp) 443 lea 0x6ed9eba1(%eax,%ebp),%r11d 444 mov 40(%rsp),%eax 445 mov %esi,%ebx 446 mov %r12d,%ebp 447 xor 48(%rsp),%eax 448 xor %edx,%ebx 449 rol $5,%ebp 450 xor 8(%rsp),%eax 451 xor %edi,%ebx 452 add %ebp,%r11d 453 xor 28(%rsp),%eax 454 rol $30,%edx 455 add %ebx,%r11d 456 rol $1,%eax 457 mov %eax,40(%rsp) 458 lea 0x6ed9eba1(%eax,%edi),%ebp 459 mov 44(%rsp),%eax 460 mov %edx,%ebx 461 mov %r11d,%edi 462 xor 52(%rsp),%eax 463 xor %r12d,%ebx 464 rol $5,%edi 465 xor 12(%rsp),%eax 466 xor %esi,%ebx 467 add %edi,%ebp 468 xor 32(%rsp),%eax 469 rol $30,%r12d 470 add %ebx,%ebp 471 rol $1,%eax 472 mov %eax,44(%rsp) 473 lea 0x6ed9eba1(%eax,%esi),%edi 474 mov 48(%rsp),%eax 475 mov %r12d,%ebx 476 mov %ebp,%esi 477 xor 56(%rsp),%eax 478 xor %r11d,%ebx 479 rol $5,%esi 480 xor 16(%rsp),%eax 481 xor %edx,%ebx 482 add %esi,%edi 483 xor 36(%rsp),%eax 484 rol $30,%r11d 485 add %ebx,%edi 486 rol $1,%eax 487 mov %eax,48(%rsp) 488 lea 0x6ed9eba1(%eax,%edx),%esi 489 mov 52(%rsp),%eax 490 mov %r11d,%ebx 491 mov %edi,%edx 492 xor 60(%rsp),%eax 493 xor %ebp,%ebx 494 rol $5,%edx 495 xor 20(%rsp),%eax 496 xor %r12d,%ebx 497 add %edx,%esi 498 xor 40(%rsp),%eax 499 rol $30,%ebp 500 add %ebx,%esi 501 rol $1,%eax 502 mov %eax,52(%rsp) 503 lea 0x6ed9eba1(%eax,%r12d),%edx 504 mov 56(%rsp),%eax 505 mov %ebp,%ebx 506 mov %esi,%r12d 507 xor 0(%rsp),%eax 508 xor %edi,%ebx 509 rol $5,%r12d 510 xor 24(%rsp),%eax 511 xor %r11d,%ebx 512 add %r12d,%edx 513 xor 44(%rsp),%eax 514 rol $30,%edi 515 add %ebx,%edx 516 rol $1,%eax 517 mov %eax,56(%rsp) 518 lea 0x6ed9eba1(%eax,%r11d),%r12d 519 mov 60(%rsp),%eax 520 mov %edi,%ebx 521 mov %edx,%r11d 522 xor 4(%rsp),%eax 523 xor %esi,%ebx 524 rol $5,%r11d 525 xor 28(%rsp),%eax 526 xor %ebp,%ebx 527 add %r11d,%r12d 528 xor 48(%rsp),%eax 529 rol $30,%esi 530 add %ebx,%r12d 531 rol $1,%eax 532 mov %eax,60(%rsp) 533 lea 0x6ed9eba1(%eax,%ebp),%r11d 534 mov 0(%rsp),%eax 535 mov %esi,%ebx 536 mov %r12d,%ebp 537 xor 8(%rsp),%eax 538 xor %edx,%ebx 539 rol $5,%ebp 540 xor 32(%rsp),%eax 541 xor %edi,%ebx 542 add %ebp,%r11d 543 xor 52(%rsp),%eax 544 rol $30,%edx 545 add %ebx,%r11d 546 rol $1,%eax 547 mov %eax,0(%rsp) 548 lea 0x6ed9eba1(%eax,%edi),%ebp 549 mov 4(%rsp),%eax 550 mov %edx,%ebx 551 mov %r11d,%edi 552 xor 12(%rsp),%eax 553 xor %r12d,%ebx 554 rol $5,%edi 555 xor 36(%rsp),%eax 556 xor %esi,%ebx 557 add %edi,%ebp 558 xor 56(%rsp),%eax 559 rol $30,%r12d 560 add %ebx,%ebp 561 rol $1,%eax 562 mov %eax,4(%rsp) 563 lea 0x6ed9eba1(%eax,%esi),%edi 564 mov 8(%rsp),%eax 565 mov %r12d,%ebx 566 mov %ebp,%esi 567 xor 16(%rsp),%eax 568 xor %r11d,%ebx 569 rol $5,%esi 570 xor 40(%rsp),%eax 571 xor %edx,%ebx 572 add %esi,%edi 573 xor 60(%rsp),%eax 574 rol $30,%r11d 575 add %ebx,%edi 576 rol $1,%eax 577 mov %eax,8(%rsp) 578 lea 0x6ed9eba1(%eax,%edx),%esi 579 mov 12(%rsp),%eax 580 mov %r11d,%ebx 581 mov %edi,%edx 582 xor 20(%rsp),%eax 583 xor %ebp,%ebx 584 rol $5,%edx 585 xor 44(%rsp),%eax 586 xor %r12d,%ebx 587 add %edx,%esi 588 xor 0(%rsp),%eax 589 rol $30,%ebp 590 add %ebx,%esi 591 rol $1,%eax 592 mov %eax,12(%rsp) 593 lea 0x6ed9eba1(%eax,%r12d),%edx 594 mov 16(%rsp),%eax 595 mov %ebp,%ebx 596 mov %esi,%r12d 597 xor 24(%rsp),%eax 598 xor %edi,%ebx 599 rol $5,%r12d 600 xor 48(%rsp),%eax 601 xor %r11d,%ebx 602 add %r12d,%edx 603 xor 4(%rsp),%eax 604 rol $30,%edi 605 add %ebx,%edx 606 rol $1,%eax 607 mov %eax,16(%rsp) 608 lea 0x6ed9eba1(%eax,%r11d),%r12d 609 mov 20(%rsp),%eax 610 mov %edi,%ebx 611 mov %edx,%r11d 612 xor 28(%rsp),%eax 613 xor %esi,%ebx 614 rol $5,%r11d 615 xor 52(%rsp),%eax 616 xor %ebp,%ebx 617 add %r11d,%r12d 618 xor 8(%rsp),%eax 619 rol $30,%esi 620 add %ebx,%r12d 621 rol $1,%eax 622 mov %eax,20(%rsp) 623 lea 0x6ed9eba1(%eax,%ebp),%r11d 624 mov 24(%rsp),%eax 625 mov %esi,%ebx 626 mov %r12d,%ebp 627 xor 32(%rsp),%eax 628 xor %edx,%ebx 629 rol $5,%ebp 630 xor 56(%rsp),%eax 631 xor %edi,%ebx 632 add %ebp,%r11d 633 xor 12(%rsp),%eax 634 rol $30,%edx 635 add %ebx,%r11d 636 rol $1,%eax 637 mov %eax,24(%rsp) 638 lea 0x6ed9eba1(%eax,%edi),%ebp 639 mov 28(%rsp),%eax 640 mov %edx,%ebx 641 mov %r11d,%edi 642 xor 36(%rsp),%eax 643 xor %r12d,%ebx 644 rol $5,%edi 645 xor 60(%rsp),%eax 646 xor %esi,%ebx 647 add %edi,%ebp 648 xor 16(%rsp),%eax 649 rol $30,%r12d 650 add %ebx,%ebp 651 rol $1,%eax 652 mov %eax,28(%rsp) 653 lea 0x6ed9eba1(%eax,%esi),%edi 654 mov 32(%rsp),%eax 655 mov %r12d,%ebx 656 mov %ebp,%esi 657 xor 40(%rsp),%eax 658 xor %r11d,%ebx 659 rol $5,%esi 660 xor 0(%rsp),%eax 661 xor %edx,%ebx 662 add %esi,%edi 663 xor 20(%rsp),%eax 664 rol $30,%r11d 665 add %ebx,%edi 666 rol $1,%eax 667 mov %eax,32(%rsp) 668 lea -0x70e44324(%eax,%edx),%esi 669 mov 36(%rsp),%eax 670 mov %ebp,%ebx 671 mov %ebp,%ecx 672 xor 44(%rsp),%eax 673 mov %edi,%edx 674 and %r11d,%ebx 675 xor 4(%rsp),%eax 676 or %r11d,%ecx 677 rol $5,%edx 678 xor 24(%rsp),%eax 679 and %r12d,%ecx 680 add %edx,%esi 681 rol $1,%eax 682 or %ecx,%ebx 683 rol $30,%ebp 684 mov %eax,36(%rsp) 685 add %ebx,%esi 686 lea -0x70e44324(%eax,%r12d),%edx 687 mov 40(%rsp),%eax 688 mov %edi,%ebx 689 mov %edi,%ecx 690 xor 48(%rsp),%eax 691 mov %esi,%r12d 692 and %ebp,%ebx 693 xor 8(%rsp),%eax 694 or %ebp,%ecx 695 rol $5,%r12d 696 xor 28(%rsp),%eax 697 and %r11d,%ecx 698 add %r12d,%edx 699 rol $1,%eax 700 or %ecx,%ebx 701 rol $30,%edi 702 mov %eax,40(%rsp) 703 add %ebx,%edx 704 lea -0x70e44324(%eax,%r11d),%r12d 705 mov 44(%rsp),%eax 706 mov %esi,%ebx 707 mov %esi,%ecx 708 xor 52(%rsp),%eax 709 mov %edx,%r11d 710 and %edi,%ebx 711 xor 12(%rsp),%eax 712 or %edi,%ecx 713 rol $5,%r11d 714 xor 32(%rsp),%eax 715 and %ebp,%ecx 716 add %r11d,%r12d 717 rol $1,%eax 718 or %ecx,%ebx 719 rol $30,%esi 720 mov %eax,44(%rsp) 721 add %ebx,%r12d 722 lea -0x70e44324(%eax,%ebp),%r11d 723 mov 48(%rsp),%eax 724 mov %edx,%ebx 725 mov %edx,%ecx 726 xor 56(%rsp),%eax 727 mov %r12d,%ebp 728 and %esi,%ebx 729 xor 16(%rsp),%eax 730 or %esi,%ecx 731 rol $5,%ebp 732 xor 36(%rsp),%eax 733 and %edi,%ecx 734 add %ebp,%r11d 735 rol $1,%eax 736 or %ecx,%ebx 737 rol $30,%edx 738 mov %eax,48(%rsp) 739 add %ebx,%r11d 740 lea -0x70e44324(%eax,%edi),%ebp 741 mov 52(%rsp),%eax 742 mov %r12d,%ebx 743 mov %r12d,%ecx 744 xor 60(%rsp),%eax 745 mov %r11d,%edi 746 and %edx,%ebx 747 xor 20(%rsp),%eax 748 or %edx,%ecx 749 rol $5,%edi 750 xor 40(%rsp),%eax 751 and %esi,%ecx 752 add %edi,%ebp 753 rol $1,%eax 754 or %ecx,%ebx 755 rol $30,%r12d 756 mov %eax,52(%rsp) 757 add %ebx,%ebp 758 lea -0x70e44324(%eax,%esi),%edi 759 mov 56(%rsp),%eax 760 mov %r11d,%ebx 761 mov %r11d,%ecx 762 xor 0(%rsp),%eax 763 mov %ebp,%esi 764 and %r12d,%ebx 765 xor 24(%rsp),%eax 766 or %r12d,%ecx 767 rol $5,%esi 768 xor 44(%rsp),%eax 769 and %edx,%ecx 770 add %esi,%edi 771 rol $1,%eax 772 or %ecx,%ebx 773 rol $30,%r11d 774 mov %eax,56(%rsp) 775 add %ebx,%edi 776 lea -0x70e44324(%eax,%edx),%esi 777 mov 60(%rsp),%eax 778 mov %ebp,%ebx 779 mov %ebp,%ecx 780 xor 4(%rsp),%eax 781 mov %edi,%edx 782 and %r11d,%ebx 783 xor 28(%rsp),%eax 784 or %r11d,%ecx 785 rol $5,%edx 786 xor 48(%rsp),%eax 787 and %r12d,%ecx 788 add %edx,%esi 789 rol $1,%eax 790 or %ecx,%ebx 791 rol $30,%ebp 792 mov %eax,60(%rsp) 793 add %ebx,%esi 794 lea -0x70e44324(%eax,%r12d),%edx 795 mov 0(%rsp),%eax 796 mov %edi,%ebx 797 mov %edi,%ecx 798 xor 8(%rsp),%eax 799 mov %esi,%r12d 800 and %ebp,%ebx 801 xor 32(%rsp),%eax 802 or %ebp,%ecx 803 rol $5,%r12d 804 xor 52(%rsp),%eax 805 and %r11d,%ecx 806 add %r12d,%edx 807 rol $1,%eax 808 or %ecx,%ebx 809 rol $30,%edi 810 mov %eax,0(%rsp) 811 add %ebx,%edx 812 lea -0x70e44324(%eax,%r11d),%r12d 813 mov 4(%rsp),%eax 814 mov %esi,%ebx 815 mov %esi,%ecx 816 xor 12(%rsp),%eax 817 mov %edx,%r11d 818 and %edi,%ebx 819 xor 36(%rsp),%eax 820 or %edi,%ecx 821 rol $5,%r11d 822 xor 56(%rsp),%eax 823 and %ebp,%ecx 824 add %r11d,%r12d 825 rol $1,%eax 826 or %ecx,%ebx 827 rol $30,%esi 828 mov %eax,4(%rsp) 829 add %ebx,%r12d 830 lea -0x70e44324(%eax,%ebp),%r11d 831 mov 8(%rsp),%eax 832 mov %edx,%ebx 833 mov %edx,%ecx 834 xor 16(%rsp),%eax 835 mov %r12d,%ebp 836 and %esi,%ebx 837 xor 40(%rsp),%eax 838 or %esi,%ecx 839 rol $5,%ebp 840 xor 60(%rsp),%eax 841 and %edi,%ecx 842 add %ebp,%r11d 843 rol $1,%eax 844 or %ecx,%ebx 845 rol $30,%edx 846 mov %eax,8(%rsp) 847 add %ebx,%r11d 848 lea -0x70e44324(%eax,%edi),%ebp 849 mov 12(%rsp),%eax 850 mov %r12d,%ebx 851 mov %r12d,%ecx 852 xor 20(%rsp),%eax 853 mov %r11d,%edi 854 and %edx,%ebx 855 xor 44(%rsp),%eax 856 or %edx,%ecx 857 rol $5,%edi 858 xor 0(%rsp),%eax 859 and %esi,%ecx 860 add %edi,%ebp 861 rol $1,%eax 862 or %ecx,%ebx 863 rol $30,%r12d 864 mov %eax,12(%rsp) 865 add %ebx,%ebp 866 lea -0x70e44324(%eax,%esi),%edi 867 mov 16(%rsp),%eax 868 mov %r11d,%ebx 869 mov %r11d,%ecx 870 xor 24(%rsp),%eax 871 mov %ebp,%esi 872 and %r12d,%ebx 873 xor 48(%rsp),%eax 874 or %r12d,%ecx 875 rol $5,%esi 876 xor 4(%rsp),%eax 877 and %edx,%ecx 878 add %esi,%edi 879 rol $1,%eax 880 or %ecx,%ebx 881 rol $30,%r11d 882 mov %eax,16(%rsp) 883 add %ebx,%edi 884 lea -0x70e44324(%eax,%edx),%esi 885 mov 20(%rsp),%eax 886 mov %ebp,%ebx 887 mov %ebp,%ecx 888 xor 28(%rsp),%eax 889 mov %edi,%edx 890 and %r11d,%ebx 891 xor 52(%rsp),%eax 892 or %r11d,%ecx 893 rol $5,%edx 894 xor 8(%rsp),%eax 895 and %r12d,%ecx 896 add %edx,%esi 897 rol $1,%eax 898 or %ecx,%ebx 899 rol $30,%ebp 900 mov %eax,20(%rsp) 901 add %ebx,%esi 902 lea -0x70e44324(%eax,%r12d),%edx 903 mov 24(%rsp),%eax 904 mov %edi,%ebx 905 mov %edi,%ecx 906 xor 32(%rsp),%eax 907 mov %esi,%r12d 908 and %ebp,%ebx 909 xor 56(%rsp),%eax 910 or %ebp,%ecx 911 rol $5,%r12d 912 xor 12(%rsp),%eax 913 and %r11d,%ecx 914 add %r12d,%edx 915 rol $1,%eax 916 or %ecx,%ebx 917 rol $30,%edi 918 mov %eax,24(%rsp) 919 add %ebx,%edx 920 lea -0x70e44324(%eax,%r11d),%r12d 921 mov 28(%rsp),%eax 922 mov %esi,%ebx 923 mov %esi,%ecx 924 xor 36(%rsp),%eax 925 mov %edx,%r11d 926 and %edi,%ebx 927 xor 60(%rsp),%eax 928 or %edi,%ecx 929 rol $5,%r11d 930 xor 16(%rsp),%eax 931 and %ebp,%ecx 932 add %r11d,%r12d 933 rol $1,%eax 934 or %ecx,%ebx 935 rol $30,%esi 936 mov %eax,28(%rsp) 937 add %ebx,%r12d 938 lea -0x70e44324(%eax,%ebp),%r11d 939 mov 32(%rsp),%eax 940 mov %edx,%ebx 941 mov %edx,%ecx 942 xor 40(%rsp),%eax 943 mov %r12d,%ebp 944 and %esi,%ebx 945 xor 0(%rsp),%eax 946 or %esi,%ecx 947 rol $5,%ebp 948 xor 20(%rsp),%eax 949 and %edi,%ecx 950 add %ebp,%r11d 951 rol $1,%eax 952 or %ecx,%ebx 953 rol $30,%edx 954 mov %eax,32(%rsp) 955 add %ebx,%r11d 956 lea -0x70e44324(%eax,%edi),%ebp 957 mov 36(%rsp),%eax 958 mov %r12d,%ebx 959 mov %r12d,%ecx 960 xor 44(%rsp),%eax 961 mov %r11d,%edi 962 and %edx,%ebx 963 xor 4(%rsp),%eax 964 or %edx,%ecx 965 rol $5,%edi 966 xor 24(%rsp),%eax 967 and %esi,%ecx 968 add %edi,%ebp 969 rol $1,%eax 970 or %ecx,%ebx 971 rol $30,%r12d 972 mov %eax,36(%rsp) 973 add %ebx,%ebp 974 lea -0x70e44324(%eax,%esi),%edi 975 mov 40(%rsp),%eax 976 mov %r11d,%ebx 977 mov %r11d,%ecx 978 xor 48(%rsp),%eax 979 mov %ebp,%esi 980 and %r12d,%ebx 981 xor 8(%rsp),%eax 982 or %r12d,%ecx 983 rol $5,%esi 984 xor 28(%rsp),%eax 985 and %edx,%ecx 986 add %esi,%edi 987 rol $1,%eax 988 or %ecx,%ebx 989 rol $30,%r11d 990 mov %eax,40(%rsp) 991 add %ebx,%edi 992 lea -0x70e44324(%eax,%edx),%esi 993 mov 44(%rsp),%eax 994 mov %ebp,%ebx 995 mov %ebp,%ecx 996 xor 52(%rsp),%eax 997 mov %edi,%edx 998 and %r11d,%ebx 999 xor 12(%rsp),%eax 1000 or %r11d,%ecx 1001 rol $5,%edx 1002 xor 32(%rsp),%eax 1003 and %r12d,%ecx 1004 add %edx,%esi 1005 rol $1,%eax 1006 or %ecx,%ebx 1007 rol $30,%ebp 1008 mov %eax,44(%rsp) 1009 add %ebx,%esi 1010 lea -0x70e44324(%eax,%r12d),%edx 1011 mov 48(%rsp),%eax 1012 mov %edi,%ebx 1013 mov %edi,%ecx 1014 xor 56(%rsp),%eax 1015 mov %esi,%r12d 1016 and %ebp,%ebx 1017 xor 16(%rsp),%eax 1018 or %ebp,%ecx 1019 rol $5,%r12d 1020 xor 36(%rsp),%eax 1021 and %r11d,%ecx 1022 add %r12d,%edx 1023 rol $1,%eax 1024 or %ecx,%ebx 1025 rol $30,%edi 1026 mov %eax,48(%rsp) 1027 add %ebx,%edx 1028 lea -0x359d3e2a(%eax,%r11d),%r12d 1029 mov 52(%rsp),%eax 1030 mov %edi,%ebx 1031 mov %edx,%r11d 1032 xor 60(%rsp),%eax 1033 xor %esi,%ebx 1034 rol $5,%r11d 1035 xor 20(%rsp),%eax 1036 xor %ebp,%ebx 1037 add %r11d,%r12d 1038 xor 40(%rsp),%eax 1039 rol $30,%esi 1040 add %ebx,%r12d 1041 rol $1,%eax 1042 mov %eax,52(%rsp) 1043 lea -0x359d3e2a(%eax,%ebp),%r11d 1044 mov 56(%rsp),%eax 1045 mov %esi,%ebx 1046 mov %r12d,%ebp 1047 xor 0(%rsp),%eax 1048 xor %edx,%ebx 1049 rol $5,%ebp 1050 xor 24(%rsp),%eax 1051 xor %edi,%ebx 1052 add %ebp,%r11d 1053 xor 44(%rsp),%eax 1054 rol $30,%edx 1055 add %ebx,%r11d 1056 rol $1,%eax 1057 mov %eax,56(%rsp) 1058 lea -0x359d3e2a(%eax,%edi),%ebp 1059 mov 60(%rsp),%eax 1060 mov %edx,%ebx 1061 mov %r11d,%edi 1062 xor 4(%rsp),%eax 1063 xor %r12d,%ebx 1064 rol $5,%edi 1065 xor 28(%rsp),%eax 1066 xor %esi,%ebx 1067 add %edi,%ebp 1068 xor 48(%rsp),%eax 1069 rol $30,%r12d 1070 add %ebx,%ebp 1071 rol $1,%eax 1072 mov %eax,60(%rsp) 1073 lea -0x359d3e2a(%eax,%esi),%edi 1074 mov 0(%rsp),%eax 1075 mov %r12d,%ebx 1076 mov %ebp,%esi 1077 xor 8(%rsp),%eax 1078 xor %r11d,%ebx 1079 rol $5,%esi 1080 xor 32(%rsp),%eax 1081 xor %edx,%ebx 1082 add %esi,%edi 1083 xor 52(%rsp),%eax 1084 rol $30,%r11d 1085 add %ebx,%edi 1086 rol $1,%eax 1087 mov %eax,0(%rsp) 1088 lea -0x359d3e2a(%eax,%edx),%esi 1089 mov 4(%rsp),%eax 1090 mov %r11d,%ebx 1091 mov %edi,%edx 1092 xor 12(%rsp),%eax 1093 xor %ebp,%ebx 1094 rol $5,%edx 1095 xor 36(%rsp),%eax 1096 xor %r12d,%ebx 1097 add %edx,%esi 1098 xor 56(%rsp),%eax 1099 rol $30,%ebp 1100 add %ebx,%esi 1101 rol $1,%eax 1102 mov %eax,4(%rsp) 1103 lea -0x359d3e2a(%eax,%r12d),%edx 1104 mov 8(%rsp),%eax 1105 mov %ebp,%ebx 1106 mov %esi,%r12d 1107 xor 16(%rsp),%eax 1108 xor %edi,%ebx 1109 rol $5,%r12d 1110 xor 40(%rsp),%eax 1111 xor %r11d,%ebx 1112 add %r12d,%edx 1113 xor 60(%rsp),%eax 1114 rol $30,%edi 1115 add %ebx,%edx 1116 rol $1,%eax 1117 mov %eax,8(%rsp) 1118 lea -0x359d3e2a(%eax,%r11d),%r12d 1119 mov 12(%rsp),%eax 1120 mov %edi,%ebx 1121 mov %edx,%r11d 1122 xor 20(%rsp),%eax 1123 xor %esi,%ebx 1124 rol $5,%r11d 1125 xor 44(%rsp),%eax 1126 xor %ebp,%ebx 1127 add %r11d,%r12d 1128 xor 0(%rsp),%eax 1129 rol $30,%esi 1130 add %ebx,%r12d 1131 rol $1,%eax 1132 mov %eax,12(%rsp) 1133 lea -0x359d3e2a(%eax,%ebp),%r11d 1134 mov 16(%rsp),%eax 1135 mov %esi,%ebx 1136 mov %r12d,%ebp 1137 xor 24(%rsp),%eax 1138 xor %edx,%ebx 1139 rol $5,%ebp 1140 xor 48(%rsp),%eax 1141 xor %edi,%ebx 1142 add %ebp,%r11d 1143 xor 4(%rsp),%eax 1144 rol $30,%edx 1145 add %ebx,%r11d 1146 rol $1,%eax 1147 mov %eax,16(%rsp) 1148 lea -0x359d3e2a(%eax,%edi),%ebp 1149 mov 20(%rsp),%eax 1150 mov %edx,%ebx 1151 mov %r11d,%edi 1152 xor 28(%rsp),%eax 1153 xor %r12d,%ebx 1154 rol $5,%edi 1155 xor 52(%rsp),%eax 1156 xor %esi,%ebx 1157 add %edi,%ebp 1158 xor 8(%rsp),%eax 1159 rol $30,%r12d 1160 add %ebx,%ebp 1161 rol $1,%eax 1162 mov %eax,20(%rsp) 1163 lea -0x359d3e2a(%eax,%esi),%edi 1164 mov 24(%rsp),%eax 1165 mov %r12d,%ebx 1166 mov %ebp,%esi 1167 xor 32(%rsp),%eax 1168 xor %r11d,%ebx 1169 rol $5,%esi 1170 xor 56(%rsp),%eax 1171 xor %edx,%ebx 1172 add %esi,%edi 1173 xor 12(%rsp),%eax 1174 rol $30,%r11d 1175 add %ebx,%edi 1176 rol $1,%eax 1177 mov %eax,24(%rsp) 1178 lea -0x359d3e2a(%eax,%edx),%esi 1179 mov 28(%rsp),%eax 1180 mov %r11d,%ebx 1181 mov %edi,%edx 1182 xor 36(%rsp),%eax 1183 xor %ebp,%ebx 1184 rol $5,%edx 1185 xor 60(%rsp),%eax 1186 xor %r12d,%ebx 1187 add %edx,%esi 1188 xor 16(%rsp),%eax 1189 rol $30,%ebp 1190 add %ebx,%esi 1191 rol $1,%eax 1192 mov %eax,28(%rsp) 1193 lea -0x359d3e2a(%eax,%r12d),%edx 1194 mov 32(%rsp),%eax 1195 mov %ebp,%ebx 1196 mov %esi,%r12d 1197 xor 40(%rsp),%eax 1198 xor %edi,%ebx 1199 rol $5,%r12d 1200 xor 0(%rsp),%eax 1201 xor %r11d,%ebx 1202 add %r12d,%edx 1203 xor 20(%rsp),%eax 1204 rol $30,%edi 1205 add %ebx,%edx 1206 rol $1,%eax 1207 mov %eax,32(%rsp) 1208 lea -0x359d3e2a(%eax,%r11d),%r12d 1209 mov 36(%rsp),%eax 1210 mov %edi,%ebx 1211 mov %edx,%r11d 1212 xor 44(%rsp),%eax 1213 xor %esi,%ebx 1214 rol $5,%r11d 1215 xor 4(%rsp),%eax 1216 xor %ebp,%ebx 1217 add %r11d,%r12d 1218 xor 24(%rsp),%eax 1219 rol $30,%esi 1220 add %ebx,%r12d 1221 rol $1,%eax 1222 mov %eax,36(%rsp) 1223 lea -0x359d3e2a(%eax,%ebp),%r11d 1224 mov 40(%rsp),%eax 1225 mov %esi,%ebx 1226 mov %r12d,%ebp 1227 xor 48(%rsp),%eax 1228 xor %edx,%ebx 1229 rol $5,%ebp 1230 xor 8(%rsp),%eax 1231 xor %edi,%ebx 1232 add %ebp,%r11d 1233 xor 28(%rsp),%eax 1234 rol $30,%edx 1235 add %ebx,%r11d 1236 rol $1,%eax 1237 mov %eax,40(%rsp) 1238 lea -0x359d3e2a(%eax,%edi),%ebp 1239 mov 44(%rsp),%eax 1240 mov %edx,%ebx 1241 mov %r11d,%edi 1242 xor 52(%rsp),%eax 1243 xor %r12d,%ebx 1244 rol $5,%edi 1245 xor 12(%rsp),%eax 1246 xor %esi,%ebx 1247 add %edi,%ebp 1248 xor 32(%rsp),%eax 1249 rol $30,%r12d 1250 add %ebx,%ebp 1251 rol $1,%eax 1252 mov %eax,44(%rsp) 1253 lea -0x359d3e2a(%eax,%esi),%edi 1254 mov 48(%rsp),%eax 1255 mov %r12d,%ebx 1256 mov %ebp,%esi 1257 xor 56(%rsp),%eax 1258 xor %r11d,%ebx 1259 rol $5,%esi 1260 xor 16(%rsp),%eax 1261 xor %edx,%ebx 1262 add %esi,%edi 1263 xor 36(%rsp),%eax 1264 rol $30,%r11d 1265 add %ebx,%edi 1266 rol $1,%eax 1267 mov %eax,48(%rsp) 1268 lea -0x359d3e2a(%eax,%edx),%esi 1269 mov 52(%rsp),%eax 1270 mov %r11d,%ebx 1271 mov %edi,%edx 1272 xor 60(%rsp),%eax 1273 xor %ebp,%ebx 1274 rol $5,%edx 1275 xor 20(%rsp),%eax 1276 xor %r12d,%ebx 1277 add %edx,%esi 1278 xor 40(%rsp),%eax 1279 rol $30,%ebp 1280 add %ebx,%esi 1281 rol $1,%eax 1282 lea -0x359d3e2a(%eax,%r12d),%edx 1283 mov 56(%rsp),%eax 1284 mov %ebp,%ebx 1285 mov %esi,%r12d 1286 xor 0(%rsp),%eax 1287 xor %edi,%ebx 1288 rol $5,%r12d 1289 xor 24(%rsp),%eax 1290 xor %r11d,%ebx 1291 add %r12d,%edx 1292 xor 44(%rsp),%eax 1293 rol $30,%edi 1294 add %ebx,%edx 1295 rol $1,%eax 1296 lea -0x359d3e2a(%eax,%r11d),%r12d 1297 mov 60(%rsp),%eax 1298 mov %edi,%ebx 1299 mov %edx,%r11d 1300 xor 4(%rsp),%eax 1301 xor %esi,%ebx 1302 rol $5,%r11d 1303 xor 28(%rsp),%eax 1304 xor %ebp,%ebx 1305 add %r11d,%r12d 1306 xor 48(%rsp),%eax 1307 rol $30,%esi 1308 add %ebx,%r12d 1309 rol $1,%eax 1310 lea -0x359d3e2a(%eax,%ebp),%r11d 1311 mov %esi,%ebx 1312 mov %r12d,%ebp 1313 xor %edx,%ebx 1314 rol $5,%ebp 1315 xor %edi,%ebx 1316 add %ebp,%r11d 1317 rol $30,%edx 1318 add %ebx,%r11d 1319 // Update and save state information in SHA-1 context 1320 add 0(%r8),%r11d 1321 add 4(%r8),%r12d 1322 add 8(%r8),%edx 1323 add 12(%r8),%esi 1324 add 16(%r8),%edi 1325 mov %r11d,0(%r8) 1326 mov %r12d,4(%r8) 1327 mov %edx,8(%r8) 1328 mov %esi,12(%r8) 1329 mov %edi,16(%r8) 1330 1331 xchg %r11d,%edx # mov %r11d,%edx 1332 xchg %r12d,%esi # mov %r12d,%esi 1333 xchg %r11d,%edi # mov %edx,%edi 1334 xchg %r12d,%ebp # mov %esi,%ebp 1335 # mov %edi,%r11d 1336 lea 64(%r9),%r9 1337 sub $1,%r10 1338 jnz .Lloop 1339 mov 64(%rsp),%rsp 1340 pop %r12 1341 pop %rbp 1342 pop %rbx 1343 ret 1344SET_SIZE(sha1_block_data_order) 1345 1346.data 1347.asciz "SHA1 block transform for x86_64, CRYPTOGAMS by <appro@openssl.org>" 1348 1349#endif /* lint || __lint */ 1350 1351#ifdef __ELF__ 1352.section .note.GNU-stack,"",%progbits 1353#endif 1354