/* * !/usr/bin/env perl * * ==================================================================== * Written by Andy Polyakov for the OpenSSL * project. The module is, however, dual licensed under OpenSSL and * CRYPTOGAMS licenses depending on where you obtain it. For further * details see http://www.openssl.org/~appro/cryptogams/. * ==================================================================== * * sha1_block procedure for x86_64. * * It was brought to my attention that on EM64T compiler-generated code * was far behind 32-bit assembler implementation. This is unlike on * Opteron where compiler-generated code was only 15% behind 32-bit * assembler, which originally made it hard to motivate the effort. * There was suggestion to mechanically translate 32-bit code, but I * dismissed it, reasoning that x86_64 offers enough register bank * capacity to fully utilize SHA-1 parallelism. Therefore this fresh * implementation:-) However! While 64-bit code does performs better * on Opteron, I failed to beat 32-bit assembler on EM64T core. Well, * x86_64 does offer larger *addressable* bank, but out-of-order core * reaches for even more registers through dynamic aliasing, and EM64T * core must have managed to run-time optimize even 32-bit code just as * good as 64-bit one. Performance improvement is summarized in the * following table: * * gcc 3.4 32-bit asm cycles/byte * Opteron +45% +20% 6.8 * Xeon P4 +65% +0% 9.9 * Core2 +60% +10% 7.0 * * * OpenSolaris OS modifications * * Sun elects to use this software under the BSD license. * * This source originates from OpenSSL file sha1-x86_64.pl at * ftp://ftp.openssl.org/snapshot/openssl-0.9.8-stable-SNAP-20080131.tar.gz * (presumably for future OpenSSL release 0.9.8h), with these changes: * * 1. Added perl "use strict" and declared variables. * * 2. Added OpenSolaris ENTRY_NP/SET_SIZE macros from * /usr/include/sys/asm_linkage.h, .ident keywords, and lint(1B) guards. * * 3. Removed x86_64-xlate.pl script (not needed for as(1) or gas(1) * assemblers). * */ /* * This file was generated by a perl script (sha1-x86_64.pl). The comments from * the original file have been pasted above. */ #if defined(lint) || defined(__lint) #include #include /* ARGSUSED */ void sha1_block_data_order(SHA1_CTX *ctx, const void *inpp, size_t blocks) { } #else #define _ASM #include ENTRY_NP(sha1_block_data_order) push %rbx push %rbp push %r12 mov %rsp,%rax mov %rdi,%r8 # reassigned argument sub $72,%rsp mov %rsi,%r9 # reassigned argument and $-64,%rsp mov %rdx,%r10 # reassigned argument mov %rax,64(%rsp) mov 0(%r8),%edx mov 4(%r8),%esi mov 8(%r8),%edi mov 12(%r8),%ebp mov 16(%r8),%r11d .align 4 .Lloop: mov 0(%r9),%eax bswap %eax mov %eax,0(%rsp) lea 0x5a827999(%eax,%r11d),%r12d mov %edi,%ebx mov 4(%r9),%eax mov %edx,%r11d xor %ebp,%ebx bswap %eax rol $5,%r11d and %esi,%ebx mov %eax,4(%rsp) add %r11d,%r12d xor %ebp,%ebx rol $30,%esi add %ebx,%r12d lea 0x5a827999(%eax,%ebp),%r11d mov %esi,%ebx mov 8(%r9),%eax mov %r12d,%ebp xor %edi,%ebx bswap %eax rol $5,%ebp and %edx,%ebx mov %eax,8(%rsp) add %ebp,%r11d xor %edi,%ebx rol $30,%edx add %ebx,%r11d lea 0x5a827999(%eax,%edi),%ebp mov %edx,%ebx mov 12(%r9),%eax mov %r11d,%edi xor %esi,%ebx bswap %eax rol $5,%edi and %r12d,%ebx mov %eax,12(%rsp) add %edi,%ebp xor %esi,%ebx rol $30,%r12d add %ebx,%ebp lea 0x5a827999(%eax,%esi),%edi mov %r12d,%ebx mov 16(%r9),%eax mov %ebp,%esi xor %edx,%ebx bswap %eax rol $5,%esi and %r11d,%ebx mov %eax,16(%rsp) add %esi,%edi xor %edx,%ebx rol $30,%r11d add %ebx,%edi lea 0x5a827999(%eax,%edx),%esi mov %r11d,%ebx mov 20(%r9),%eax mov %edi,%edx xor %r12d,%ebx bswap %eax rol $5,%edx and %ebp,%ebx mov %eax,20(%rsp) add %edx,%esi xor %r12d,%ebx rol $30,%ebp add %ebx,%esi lea 0x5a827999(%eax,%r12d),%edx mov %ebp,%ebx mov 24(%r9),%eax mov %esi,%r12d xor %r11d,%ebx bswap %eax rol $5,%r12d and %edi,%ebx mov %eax,24(%rsp) add %r12d,%edx xor %r11d,%ebx rol $30,%edi add %ebx,%edx lea 0x5a827999(%eax,%r11d),%r12d mov %edi,%ebx mov 28(%r9),%eax mov %edx,%r11d xor %ebp,%ebx bswap %eax rol $5,%r11d and %esi,%ebx mov %eax,28(%rsp) add %r11d,%r12d xor %ebp,%ebx rol $30,%esi add %ebx,%r12d lea 0x5a827999(%eax,%ebp),%r11d mov %esi,%ebx mov 32(%r9),%eax mov %r12d,%ebp xor %edi,%ebx bswap %eax rol $5,%ebp and %edx,%ebx mov %eax,32(%rsp) add %ebp,%r11d xor %edi,%ebx rol $30,%edx add %ebx,%r11d lea 0x5a827999(%eax,%edi),%ebp mov %edx,%ebx mov 36(%r9),%eax mov %r11d,%edi xor %esi,%ebx bswap %eax rol $5,%edi and %r12d,%ebx mov %eax,36(%rsp) add %edi,%ebp xor %esi,%ebx rol $30,%r12d add %ebx,%ebp lea 0x5a827999(%eax,%esi),%edi mov %r12d,%ebx mov 40(%r9),%eax mov %ebp,%esi xor %edx,%ebx bswap %eax rol $5,%esi and %r11d,%ebx mov %eax,40(%rsp) add %esi,%edi xor %edx,%ebx rol $30,%r11d add %ebx,%edi lea 0x5a827999(%eax,%edx),%esi mov %r11d,%ebx mov 44(%r9),%eax mov %edi,%edx xor %r12d,%ebx bswap %eax rol $5,%edx and %ebp,%ebx mov %eax,44(%rsp) add %edx,%esi xor %r12d,%ebx rol $30,%ebp add %ebx,%esi lea 0x5a827999(%eax,%r12d),%edx mov %ebp,%ebx mov 48(%r9),%eax mov %esi,%r12d xor %r11d,%ebx bswap %eax rol $5,%r12d and %edi,%ebx mov %eax,48(%rsp) add %r12d,%edx xor %r11d,%ebx rol $30,%edi add %ebx,%edx lea 0x5a827999(%eax,%r11d),%r12d mov %edi,%ebx mov 52(%r9),%eax mov %edx,%r11d xor %ebp,%ebx bswap %eax rol $5,%r11d and %esi,%ebx mov %eax,52(%rsp) add %r11d,%r12d xor %ebp,%ebx rol $30,%esi add %ebx,%r12d lea 0x5a827999(%eax,%ebp),%r11d mov %esi,%ebx mov 56(%r9),%eax mov %r12d,%ebp xor %edi,%ebx bswap %eax rol $5,%ebp and %edx,%ebx mov %eax,56(%rsp) add %ebp,%r11d xor %edi,%ebx rol $30,%edx add %ebx,%r11d lea 0x5a827999(%eax,%edi),%ebp mov %edx,%ebx mov 60(%r9),%eax mov %r11d,%edi xor %esi,%ebx bswap %eax rol $5,%edi and %r12d,%ebx mov %eax,60(%rsp) add %edi,%ebp xor %esi,%ebx rol $30,%r12d add %ebx,%ebp lea 0x5a827999(%eax,%esi),%edi mov 0(%rsp),%eax mov %r12d,%ebx mov %ebp,%esi xor 8(%rsp),%eax xor %edx,%ebx rol $5,%esi xor 32(%rsp),%eax and %r11d,%ebx add %esi,%edi xor 52(%rsp),%eax xor %edx,%ebx rol $30,%r11d add %ebx,%edi rol $1,%eax mov %eax,0(%rsp) lea 0x5a827999(%eax,%edx),%esi mov 4(%rsp),%eax mov %r11d,%ebx mov %edi,%edx xor 12(%rsp),%eax xor %r12d,%ebx rol $5,%edx xor 36(%rsp),%eax and %ebp,%ebx add %edx,%esi xor 56(%rsp),%eax xor %r12d,%ebx rol $30,%ebp add %ebx,%esi rol $1,%eax mov %eax,4(%rsp) lea 0x5a827999(%eax,%r12d),%edx mov 8(%rsp),%eax mov %ebp,%ebx mov %esi,%r12d xor 16(%rsp),%eax xor %r11d,%ebx rol $5,%r12d xor 40(%rsp),%eax and %edi,%ebx add %r12d,%edx xor 60(%rsp),%eax xor %r11d,%ebx rol $30,%edi add %ebx,%edx rol $1,%eax mov %eax,8(%rsp) lea 0x5a827999(%eax,%r11d),%r12d mov 12(%rsp),%eax mov %edi,%ebx mov %edx,%r11d xor 20(%rsp),%eax xor %ebp,%ebx rol $5,%r11d xor 44(%rsp),%eax and %esi,%ebx add %r11d,%r12d xor 0(%rsp),%eax xor %ebp,%ebx rol $30,%esi add %ebx,%r12d rol $1,%eax mov %eax,12(%rsp) lea 0x5a827999(%eax,%ebp),%r11d mov 16(%rsp),%eax mov %esi,%ebx mov %r12d,%ebp xor 24(%rsp),%eax xor %edi,%ebx rol $5,%ebp xor 48(%rsp),%eax and %edx,%ebx add %ebp,%r11d xor 4(%rsp),%eax xor %edi,%ebx rol $30,%edx add %ebx,%r11d rol $1,%eax mov %eax,16(%rsp) lea 0x6ed9eba1(%eax,%edi),%ebp mov 20(%rsp),%eax mov %edx,%ebx mov %r11d,%edi xor 28(%rsp),%eax xor %r12d,%ebx rol $5,%edi xor 52(%rsp),%eax xor %esi,%ebx add %edi,%ebp xor 8(%rsp),%eax rol $30,%r12d add %ebx,%ebp rol $1,%eax mov %eax,20(%rsp) lea 0x6ed9eba1(%eax,%esi),%edi mov 24(%rsp),%eax mov %r12d,%ebx mov %ebp,%esi xor 32(%rsp),%eax xor %r11d,%ebx rol $5,%esi xor 56(%rsp),%eax xor %edx,%ebx add %esi,%edi xor 12(%rsp),%eax rol $30,%r11d add %ebx,%edi rol $1,%eax mov %eax,24(%rsp) lea 0x6ed9eba1(%eax,%edx),%esi mov 28(%rsp),%eax mov %r11d,%ebx mov %edi,%edx xor 36(%rsp),%eax xor %ebp,%ebx rol $5,%edx xor 60(%rsp),%eax xor %r12d,%ebx add %edx,%esi xor 16(%rsp),%eax rol $30,%ebp add %ebx,%esi rol $1,%eax mov %eax,28(%rsp) lea 0x6ed9eba1(%eax,%r12d),%edx mov 32(%rsp),%eax mov %ebp,%ebx mov %esi,%r12d xor 40(%rsp),%eax xor %edi,%ebx rol $5,%r12d xor 0(%rsp),%eax xor %r11d,%ebx add %r12d,%edx xor 20(%rsp),%eax rol $30,%edi add %ebx,%edx rol $1,%eax mov %eax,32(%rsp) lea 0x6ed9eba1(%eax,%r11d),%r12d mov 36(%rsp),%eax mov %edi,%ebx mov %edx,%r11d xor 44(%rsp),%eax xor %esi,%ebx rol $5,%r11d xor 4(%rsp),%eax xor %ebp,%ebx add %r11d,%r12d xor 24(%rsp),%eax rol $30,%esi add %ebx,%r12d rol $1,%eax mov %eax,36(%rsp) lea 0x6ed9eba1(%eax,%ebp),%r11d mov 40(%rsp),%eax mov %esi,%ebx mov %r12d,%ebp xor 48(%rsp),%eax xor %edx,%ebx rol $5,%ebp xor 8(%rsp),%eax xor %edi,%ebx add %ebp,%r11d xor 28(%rsp),%eax rol $30,%edx add %ebx,%r11d rol $1,%eax mov %eax,40(%rsp) lea 0x6ed9eba1(%eax,%edi),%ebp mov 44(%rsp),%eax mov %edx,%ebx mov %r11d,%edi xor 52(%rsp),%eax xor %r12d,%ebx rol $5,%edi xor 12(%rsp),%eax xor %esi,%ebx add %edi,%ebp xor 32(%rsp),%eax rol $30,%r12d add %ebx,%ebp rol $1,%eax mov %eax,44(%rsp) lea 0x6ed9eba1(%eax,%esi),%edi mov 48(%rsp),%eax mov %r12d,%ebx mov %ebp,%esi xor 56(%rsp),%eax xor %r11d,%ebx rol $5,%esi xor 16(%rsp),%eax xor %edx,%ebx add %esi,%edi xor 36(%rsp),%eax rol $30,%r11d add %ebx,%edi rol $1,%eax mov %eax,48(%rsp) lea 0x6ed9eba1(%eax,%edx),%esi mov 52(%rsp),%eax mov %r11d,%ebx mov %edi,%edx xor 60(%rsp),%eax xor %ebp,%ebx rol $5,%edx xor 20(%rsp),%eax xor %r12d,%ebx add %edx,%esi xor 40(%rsp),%eax rol $30,%ebp add %ebx,%esi rol $1,%eax mov %eax,52(%rsp) lea 0x6ed9eba1(%eax,%r12d),%edx mov 56(%rsp),%eax mov %ebp,%ebx mov %esi,%r12d xor 0(%rsp),%eax xor %edi,%ebx rol $5,%r12d xor 24(%rsp),%eax xor %r11d,%ebx add %r12d,%edx xor 44(%rsp),%eax rol $30,%edi add %ebx,%edx rol $1,%eax mov %eax,56(%rsp) lea 0x6ed9eba1(%eax,%r11d),%r12d mov 60(%rsp),%eax mov %edi,%ebx mov %edx,%r11d xor 4(%rsp),%eax xor %esi,%ebx rol $5,%r11d xor 28(%rsp),%eax xor %ebp,%ebx add %r11d,%r12d xor 48(%rsp),%eax rol $30,%esi add %ebx,%r12d rol $1,%eax mov %eax,60(%rsp) lea 0x6ed9eba1(%eax,%ebp),%r11d mov 0(%rsp),%eax mov %esi,%ebx mov %r12d,%ebp xor 8(%rsp),%eax xor %edx,%ebx rol $5,%ebp xor 32(%rsp),%eax xor %edi,%ebx add %ebp,%r11d xor 52(%rsp),%eax rol $30,%edx add %ebx,%r11d rol $1,%eax mov %eax,0(%rsp) lea 0x6ed9eba1(%eax,%edi),%ebp mov 4(%rsp),%eax mov %edx,%ebx mov %r11d,%edi xor 12(%rsp),%eax xor %r12d,%ebx rol $5,%edi xor 36(%rsp),%eax xor %esi,%ebx add %edi,%ebp xor 56(%rsp),%eax rol $30,%r12d add %ebx,%ebp rol $1,%eax mov %eax,4(%rsp) lea 0x6ed9eba1(%eax,%esi),%edi mov 8(%rsp),%eax mov %r12d,%ebx mov %ebp,%esi xor 16(%rsp),%eax xor %r11d,%ebx rol $5,%esi xor 40(%rsp),%eax xor %edx,%ebx add %esi,%edi xor 60(%rsp),%eax rol $30,%r11d add %ebx,%edi rol $1,%eax mov %eax,8(%rsp) lea 0x6ed9eba1(%eax,%edx),%esi mov 12(%rsp),%eax mov %r11d,%ebx mov %edi,%edx xor 20(%rsp),%eax xor %ebp,%ebx rol $5,%edx xor 44(%rsp),%eax xor %r12d,%ebx add %edx,%esi xor 0(%rsp),%eax rol $30,%ebp add %ebx,%esi rol $1,%eax mov %eax,12(%rsp) lea 0x6ed9eba1(%eax,%r12d),%edx mov 16(%rsp),%eax mov %ebp,%ebx mov %esi,%r12d xor 24(%rsp),%eax xor %edi,%ebx rol $5,%r12d xor 48(%rsp),%eax xor %r11d,%ebx add %r12d,%edx xor 4(%rsp),%eax rol $30,%edi add %ebx,%edx rol $1,%eax mov %eax,16(%rsp) lea 0x6ed9eba1(%eax,%r11d),%r12d mov 20(%rsp),%eax mov %edi,%ebx mov %edx,%r11d xor 28(%rsp),%eax xor %esi,%ebx rol $5,%r11d xor 52(%rsp),%eax xor %ebp,%ebx add %r11d,%r12d xor 8(%rsp),%eax rol $30,%esi add %ebx,%r12d rol $1,%eax mov %eax,20(%rsp) lea 0x6ed9eba1(%eax,%ebp),%r11d mov 24(%rsp),%eax mov %esi,%ebx mov %r12d,%ebp xor 32(%rsp),%eax xor %edx,%ebx rol $5,%ebp xor 56(%rsp),%eax xor %edi,%ebx add %ebp,%r11d xor 12(%rsp),%eax rol $30,%edx add %ebx,%r11d rol $1,%eax mov %eax,24(%rsp) lea 0x6ed9eba1(%eax,%edi),%ebp mov 28(%rsp),%eax mov %edx,%ebx mov %r11d,%edi xor 36(%rsp),%eax xor %r12d,%ebx rol $5,%edi xor 60(%rsp),%eax xor %esi,%ebx add %edi,%ebp xor 16(%rsp),%eax rol $30,%r12d add %ebx,%ebp rol $1,%eax mov %eax,28(%rsp) lea 0x6ed9eba1(%eax,%esi),%edi mov 32(%rsp),%eax mov %r12d,%ebx mov %ebp,%esi xor 40(%rsp),%eax xor %r11d,%ebx rol $5,%esi xor 0(%rsp),%eax xor %edx,%ebx add %esi,%edi xor 20(%rsp),%eax rol $30,%r11d add %ebx,%edi rol $1,%eax mov %eax,32(%rsp) lea -0x70e44324(%eax,%edx),%esi mov 36(%rsp),%eax mov %ebp,%ebx mov %ebp,%ecx xor 44(%rsp),%eax mov %edi,%edx and %r11d,%ebx xor 4(%rsp),%eax or %r11d,%ecx rol $5,%edx xor 24(%rsp),%eax and %r12d,%ecx add %edx,%esi rol $1,%eax or %ecx,%ebx rol $30,%ebp mov %eax,36(%rsp) add %ebx,%esi lea -0x70e44324(%eax,%r12d),%edx mov 40(%rsp),%eax mov %edi,%ebx mov %edi,%ecx xor 48(%rsp),%eax mov %esi,%r12d and %ebp,%ebx xor 8(%rsp),%eax or %ebp,%ecx rol $5,%r12d xor 28(%rsp),%eax and %r11d,%ecx add %r12d,%edx rol $1,%eax or %ecx,%ebx rol $30,%edi mov %eax,40(%rsp) add %ebx,%edx lea -0x70e44324(%eax,%r11d),%r12d mov 44(%rsp),%eax mov %esi,%ebx mov %esi,%ecx xor 52(%rsp),%eax mov %edx,%r11d and %edi,%ebx xor 12(%rsp),%eax or %edi,%ecx rol $5,%r11d xor 32(%rsp),%eax and %ebp,%ecx add %r11d,%r12d rol $1,%eax or %ecx,%ebx rol $30,%esi mov %eax,44(%rsp) add %ebx,%r12d lea -0x70e44324(%eax,%ebp),%r11d mov 48(%rsp),%eax mov %edx,%ebx mov %edx,%ecx xor 56(%rsp),%eax mov %r12d,%ebp and %esi,%ebx xor 16(%rsp),%eax or %esi,%ecx rol $5,%ebp xor 36(%rsp),%eax and %edi,%ecx add %ebp,%r11d rol $1,%eax or %ecx,%ebx rol $30,%edx mov %eax,48(%rsp) add %ebx,%r11d lea -0x70e44324(%eax,%edi),%ebp mov 52(%rsp),%eax mov %r12d,%ebx mov %r12d,%ecx xor 60(%rsp),%eax mov %r11d,%edi and %edx,%ebx xor 20(%rsp),%eax or %edx,%ecx rol $5,%edi xor 40(%rsp),%eax and %esi,%ecx add %edi,%ebp rol $1,%eax or %ecx,%ebx rol $30,%r12d mov %eax,52(%rsp) add %ebx,%ebp lea -0x70e44324(%eax,%esi),%edi mov 56(%rsp),%eax mov %r11d,%ebx mov %r11d,%ecx xor 0(%rsp),%eax mov %ebp,%esi and %r12d,%ebx xor 24(%rsp),%eax or %r12d,%ecx rol $5,%esi xor 44(%rsp),%eax and %edx,%ecx add %esi,%edi rol $1,%eax or %ecx,%ebx rol $30,%r11d mov %eax,56(%rsp) add %ebx,%edi lea -0x70e44324(%eax,%edx),%esi mov 60(%rsp),%eax mov %ebp,%ebx mov %ebp,%ecx xor 4(%rsp),%eax mov %edi,%edx and %r11d,%ebx xor 28(%rsp),%eax or %r11d,%ecx rol $5,%edx xor 48(%rsp),%eax and %r12d,%ecx add %edx,%esi rol $1,%eax or %ecx,%ebx rol $30,%ebp mov %eax,60(%rsp) add %ebx,%esi lea -0x70e44324(%eax,%r12d),%edx mov 0(%rsp),%eax mov %edi,%ebx mov %edi,%ecx xor 8(%rsp),%eax mov %esi,%r12d and %ebp,%ebx xor 32(%rsp),%eax or %ebp,%ecx rol $5,%r12d xor 52(%rsp),%eax and %r11d,%ecx add %r12d,%edx rol $1,%eax or %ecx,%ebx rol $30,%edi mov %eax,0(%rsp) add %ebx,%edx lea -0x70e44324(%eax,%r11d),%r12d mov 4(%rsp),%eax mov %esi,%ebx mov %esi,%ecx xor 12(%rsp),%eax mov %edx,%r11d and %edi,%ebx xor 36(%rsp),%eax or %edi,%ecx rol $5,%r11d xor 56(%rsp),%eax and %ebp,%ecx add %r11d,%r12d rol $1,%eax or %ecx,%ebx rol $30,%esi mov %eax,4(%rsp) add %ebx,%r12d lea -0x70e44324(%eax,%ebp),%r11d mov 8(%rsp),%eax mov %edx,%ebx mov %edx,%ecx xor 16(%rsp),%eax mov %r12d,%ebp and %esi,%ebx xor 40(%rsp),%eax or %esi,%ecx rol $5,%ebp xor 60(%rsp),%eax and %edi,%ecx add %ebp,%r11d rol $1,%eax or %ecx,%ebx rol $30,%edx mov %eax,8(%rsp) add %ebx,%r11d lea -0x70e44324(%eax,%edi),%ebp mov 12(%rsp),%eax mov %r12d,%ebx mov %r12d,%ecx xor 20(%rsp),%eax mov %r11d,%edi and %edx,%ebx xor 44(%rsp),%eax or %edx,%ecx rol $5,%edi xor 0(%rsp),%eax and %esi,%ecx add %edi,%ebp rol $1,%eax or %ecx,%ebx rol $30,%r12d mov %eax,12(%rsp) add %ebx,%ebp lea -0x70e44324(%eax,%esi),%edi mov 16(%rsp),%eax mov %r11d,%ebx mov %r11d,%ecx xor 24(%rsp),%eax mov %ebp,%esi and %r12d,%ebx xor 48(%rsp),%eax or %r12d,%ecx rol $5,%esi xor 4(%rsp),%eax and %edx,%ecx add %esi,%edi rol $1,%eax or %ecx,%ebx rol $30,%r11d mov %eax,16(%rsp) add %ebx,%edi lea -0x70e44324(%eax,%edx),%esi mov 20(%rsp),%eax mov %ebp,%ebx mov %ebp,%ecx xor 28(%rsp),%eax mov %edi,%edx and %r11d,%ebx xor 52(%rsp),%eax or %r11d,%ecx rol $5,%edx xor 8(%rsp),%eax and %r12d,%ecx add %edx,%esi rol $1,%eax or %ecx,%ebx rol $30,%ebp mov %eax,20(%rsp) add %ebx,%esi lea -0x70e44324(%eax,%r12d),%edx mov 24(%rsp),%eax mov %edi,%ebx mov %edi,%ecx xor 32(%rsp),%eax mov %esi,%r12d and %ebp,%ebx xor 56(%rsp),%eax or %ebp,%ecx rol $5,%r12d xor 12(%rsp),%eax and %r11d,%ecx add %r12d,%edx rol $1,%eax or %ecx,%ebx rol $30,%edi mov %eax,24(%rsp) add %ebx,%edx lea -0x70e44324(%eax,%r11d),%r12d mov 28(%rsp),%eax mov %esi,%ebx mov %esi,%ecx xor 36(%rsp),%eax mov %edx,%r11d and %edi,%ebx xor 60(%rsp),%eax or %edi,%ecx rol $5,%r11d xor 16(%rsp),%eax and %ebp,%ecx add %r11d,%r12d rol $1,%eax or %ecx,%ebx rol $30,%esi mov %eax,28(%rsp) add %ebx,%r12d lea -0x70e44324(%eax,%ebp),%r11d mov 32(%rsp),%eax mov %edx,%ebx mov %edx,%ecx xor 40(%rsp),%eax mov %r12d,%ebp and %esi,%ebx xor 0(%rsp),%eax or %esi,%ecx rol $5,%ebp xor 20(%rsp),%eax and %edi,%ecx add %ebp,%r11d rol $1,%eax or %ecx,%ebx rol $30,%edx mov %eax,32(%rsp) add %ebx,%r11d lea -0x70e44324(%eax,%edi),%ebp mov 36(%rsp),%eax mov %r12d,%ebx mov %r12d,%ecx xor 44(%rsp),%eax mov %r11d,%edi and %edx,%ebx xor 4(%rsp),%eax or %edx,%ecx rol $5,%edi xor 24(%rsp),%eax and %esi,%ecx add %edi,%ebp rol $1,%eax or %ecx,%ebx rol $30,%r12d mov %eax,36(%rsp) add %ebx,%ebp lea -0x70e44324(%eax,%esi),%edi mov 40(%rsp),%eax mov %r11d,%ebx mov %r11d,%ecx xor 48(%rsp),%eax mov %ebp,%esi and %r12d,%ebx xor 8(%rsp),%eax or %r12d,%ecx rol $5,%esi xor 28(%rsp),%eax and %edx,%ecx add %esi,%edi rol $1,%eax or %ecx,%ebx rol $30,%r11d mov %eax,40(%rsp) add %ebx,%edi lea -0x70e44324(%eax,%edx),%esi mov 44(%rsp),%eax mov %ebp,%ebx mov %ebp,%ecx xor 52(%rsp),%eax mov %edi,%edx and %r11d,%ebx xor 12(%rsp),%eax or %r11d,%ecx rol $5,%edx xor 32(%rsp),%eax and %r12d,%ecx add %edx,%esi rol $1,%eax or %ecx,%ebx rol $30,%ebp mov %eax,44(%rsp) add %ebx,%esi lea -0x70e44324(%eax,%r12d),%edx mov 48(%rsp),%eax mov %edi,%ebx mov %edi,%ecx xor 56(%rsp),%eax mov %esi,%r12d and %ebp,%ebx xor 16(%rsp),%eax or %ebp,%ecx rol $5,%r12d xor 36(%rsp),%eax and %r11d,%ecx add %r12d,%edx rol $1,%eax or %ecx,%ebx rol $30,%edi mov %eax,48(%rsp) add %ebx,%edx lea -0x359d3e2a(%eax,%r11d),%r12d mov 52(%rsp),%eax mov %edi,%ebx mov %edx,%r11d xor 60(%rsp),%eax xor %esi,%ebx rol $5,%r11d xor 20(%rsp),%eax xor %ebp,%ebx add %r11d,%r12d xor 40(%rsp),%eax rol $30,%esi add %ebx,%r12d rol $1,%eax mov %eax,52(%rsp) lea -0x359d3e2a(%eax,%ebp),%r11d mov 56(%rsp),%eax mov %esi,%ebx mov %r12d,%ebp xor 0(%rsp),%eax xor %edx,%ebx rol $5,%ebp xor 24(%rsp),%eax xor %edi,%ebx add %ebp,%r11d xor 44(%rsp),%eax rol $30,%edx add %ebx,%r11d rol $1,%eax mov %eax,56(%rsp) lea -0x359d3e2a(%eax,%edi),%ebp mov 60(%rsp),%eax mov %edx,%ebx mov %r11d,%edi xor 4(%rsp),%eax xor %r12d,%ebx rol $5,%edi xor 28(%rsp),%eax xor %esi,%ebx add %edi,%ebp xor 48(%rsp),%eax rol $30,%r12d add %ebx,%ebp rol $1,%eax mov %eax,60(%rsp) lea -0x359d3e2a(%eax,%esi),%edi mov 0(%rsp),%eax mov %r12d,%ebx mov %ebp,%esi xor 8(%rsp),%eax xor %r11d,%ebx rol $5,%esi xor 32(%rsp),%eax xor %edx,%ebx add %esi,%edi xor 52(%rsp),%eax rol $30,%r11d add %ebx,%edi rol $1,%eax mov %eax,0(%rsp) lea -0x359d3e2a(%eax,%edx),%esi mov 4(%rsp),%eax mov %r11d,%ebx mov %edi,%edx xor 12(%rsp),%eax xor %ebp,%ebx rol $5,%edx xor 36(%rsp),%eax xor %r12d,%ebx add %edx,%esi xor 56(%rsp),%eax rol $30,%ebp add %ebx,%esi rol $1,%eax mov %eax,4(%rsp) lea -0x359d3e2a(%eax,%r12d),%edx mov 8(%rsp),%eax mov %ebp,%ebx mov %esi,%r12d xor 16(%rsp),%eax xor %edi,%ebx rol $5,%r12d xor 40(%rsp),%eax xor %r11d,%ebx add %r12d,%edx xor 60(%rsp),%eax rol $30,%edi add %ebx,%edx rol $1,%eax mov %eax,8(%rsp) lea -0x359d3e2a(%eax,%r11d),%r12d mov 12(%rsp),%eax mov %edi,%ebx mov %edx,%r11d xor 20(%rsp),%eax xor %esi,%ebx rol $5,%r11d xor 44(%rsp),%eax xor %ebp,%ebx add %r11d,%r12d xor 0(%rsp),%eax rol $30,%esi add %ebx,%r12d rol $1,%eax mov %eax,12(%rsp) lea -0x359d3e2a(%eax,%ebp),%r11d mov 16(%rsp),%eax mov %esi,%ebx mov %r12d,%ebp xor 24(%rsp),%eax xor %edx,%ebx rol $5,%ebp xor 48(%rsp),%eax xor %edi,%ebx add %ebp,%r11d xor 4(%rsp),%eax rol $30,%edx add %ebx,%r11d rol $1,%eax mov %eax,16(%rsp) lea -0x359d3e2a(%eax,%edi),%ebp mov 20(%rsp),%eax mov %edx,%ebx mov %r11d,%edi xor 28(%rsp),%eax xor %r12d,%ebx rol $5,%edi xor 52(%rsp),%eax xor %esi,%ebx add %edi,%ebp xor 8(%rsp),%eax rol $30,%r12d add %ebx,%ebp rol $1,%eax mov %eax,20(%rsp) lea -0x359d3e2a(%eax,%esi),%edi mov 24(%rsp),%eax mov %r12d,%ebx mov %ebp,%esi xor 32(%rsp),%eax xor %r11d,%ebx rol $5,%esi xor 56(%rsp),%eax xor %edx,%ebx add %esi,%edi xor 12(%rsp),%eax rol $30,%r11d add %ebx,%edi rol $1,%eax mov %eax,24(%rsp) lea -0x359d3e2a(%eax,%edx),%esi mov 28(%rsp),%eax mov %r11d,%ebx mov %edi,%edx xor 36(%rsp),%eax xor %ebp,%ebx rol $5,%edx xor 60(%rsp),%eax xor %r12d,%ebx add %edx,%esi xor 16(%rsp),%eax rol $30,%ebp add %ebx,%esi rol $1,%eax mov %eax,28(%rsp) lea -0x359d3e2a(%eax,%r12d),%edx mov 32(%rsp),%eax mov %ebp,%ebx mov %esi,%r12d xor 40(%rsp),%eax xor %edi,%ebx rol $5,%r12d xor 0(%rsp),%eax xor %r11d,%ebx add %r12d,%edx xor 20(%rsp),%eax rol $30,%edi add %ebx,%edx rol $1,%eax mov %eax,32(%rsp) lea -0x359d3e2a(%eax,%r11d),%r12d mov 36(%rsp),%eax mov %edi,%ebx mov %edx,%r11d xor 44(%rsp),%eax xor %esi,%ebx rol $5,%r11d xor 4(%rsp),%eax xor %ebp,%ebx add %r11d,%r12d xor 24(%rsp),%eax rol $30,%esi add %ebx,%r12d rol $1,%eax mov %eax,36(%rsp) lea -0x359d3e2a(%eax,%ebp),%r11d mov 40(%rsp),%eax mov %esi,%ebx mov %r12d,%ebp xor 48(%rsp),%eax xor %edx,%ebx rol $5,%ebp xor 8(%rsp),%eax xor %edi,%ebx add %ebp,%r11d xor 28(%rsp),%eax rol $30,%edx add %ebx,%r11d rol $1,%eax mov %eax,40(%rsp) lea -0x359d3e2a(%eax,%edi),%ebp mov 44(%rsp),%eax mov %edx,%ebx mov %r11d,%edi xor 52(%rsp),%eax xor %r12d,%ebx rol $5,%edi xor 12(%rsp),%eax xor %esi,%ebx add %edi,%ebp xor 32(%rsp),%eax rol $30,%r12d add %ebx,%ebp rol $1,%eax mov %eax,44(%rsp) lea -0x359d3e2a(%eax,%esi),%edi mov 48(%rsp),%eax mov %r12d,%ebx mov %ebp,%esi xor 56(%rsp),%eax xor %r11d,%ebx rol $5,%esi xor 16(%rsp),%eax xor %edx,%ebx add %esi,%edi xor 36(%rsp),%eax rol $30,%r11d add %ebx,%edi rol $1,%eax mov %eax,48(%rsp) lea -0x359d3e2a(%eax,%edx),%esi mov 52(%rsp),%eax mov %r11d,%ebx mov %edi,%edx xor 60(%rsp),%eax xor %ebp,%ebx rol $5,%edx xor 20(%rsp),%eax xor %r12d,%ebx add %edx,%esi xor 40(%rsp),%eax rol $30,%ebp add %ebx,%esi rol $1,%eax lea -0x359d3e2a(%eax,%r12d),%edx mov 56(%rsp),%eax mov %ebp,%ebx mov %esi,%r12d xor 0(%rsp),%eax xor %edi,%ebx rol $5,%r12d xor 24(%rsp),%eax xor %r11d,%ebx add %r12d,%edx xor 44(%rsp),%eax rol $30,%edi add %ebx,%edx rol $1,%eax lea -0x359d3e2a(%eax,%r11d),%r12d mov 60(%rsp),%eax mov %edi,%ebx mov %edx,%r11d xor 4(%rsp),%eax xor %esi,%ebx rol $5,%r11d xor 28(%rsp),%eax xor %ebp,%ebx add %r11d,%r12d xor 48(%rsp),%eax rol $30,%esi add %ebx,%r12d rol $1,%eax lea -0x359d3e2a(%eax,%ebp),%r11d mov %esi,%ebx mov %r12d,%ebp xor %edx,%ebx rol $5,%ebp xor %edi,%ebx add %ebp,%r11d rol $30,%edx add %ebx,%r11d // Update and save state information in SHA-1 context add 0(%r8),%r11d add 4(%r8),%r12d add 8(%r8),%edx add 12(%r8),%esi add 16(%r8),%edi mov %r11d,0(%r8) mov %r12d,4(%r8) mov %edx,8(%r8) mov %esi,12(%r8) mov %edi,16(%r8) xchg %r11d,%edx # mov %r11d,%edx xchg %r12d,%esi # mov %r12d,%esi xchg %r11d,%edi # mov %edx,%edi xchg %r12d,%ebp # mov %esi,%ebp # mov %edi,%r11d lea 64(%r9),%r9 sub $1,%r10 jnz .Lloop mov 64(%rsp),%rsp pop %r12 pop %rbp pop %rbx ret SET_SIZE(sha1_block_data_order) .data .asciz "SHA1 block transform for x86_64, CRYPTOGAMS by " #endif /* lint || __lint */ #ifdef __ELF__ .section .note.GNU-stack,"",%progbits #endif