mirror_zfs/module/icp/asm-x86_64/sha1/sha1-x86_64.S
Tom Caputi 0b04990a5d Illumos Crypto Port module added to enable native encryption in zfs
A port of the Illumos Crypto Framework to a Linux kernel module (found
in module/icp). This is needed to do the actual encryption work. We cannot
use the Linux kernel's built in crypto api because it is only exported to
GPL-licensed modules. Having the ICP also means the crypto code can run on
any of the other kernels under OpenZFS. I ended up porting over most of the
internals of the framework, which means that porting over other API calls (if
we need them) should be fairly easy. Specifically, I have ported over the API
functions related to encryption, digests, macs, and crypto templates. The ICP
is able to use assembly-accelerated encryption on amd64 machines and AES-NI
instructions on Intel chips that support it. There are place-holder
directories for similar assembly optimizations for other architectures
(although they have not been written).

Signed-off-by: Tom Caputi <tcaputi@datto.com>
Signed-off-by: Tony Hutter <hutter2@llnl.gov>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Issue #4329
2016-07-20 10:43:30 -07:00

1347 lines
24 KiB
ArmAsm

/*
* !/usr/bin/env perl
*
* ====================================================================
* Written by Andy Polyakov <appro@fy.chalmers.se> 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 <sys/stdint.h>
#include <sys/sha1.h>
/* ARGSUSED */
void
sha1_block_data_order(SHA1_CTX *ctx, const void *inpp, size_t blocks)
{
}
#else
#define _ASM
#include <sys/asm_linkage.h>
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)
.asciz "SHA1 block transform for x86_64, CRYPTOGAMS by <appro@openssl.org>"
#endif /* lint || __lint */