summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchristos <christos@NetBSD.org>2008-05-10 20:14:20 +0000
committerchristos <christos@NetBSD.org>2008-05-10 20:14:20 +0000
commit4c514b977f026d1691622ee8bf7277c4705c74cd (patch)
tree6c6c328629afacd9c8b834360983f835a90b8ac8
parent2e45fdea284dcf07c19cf81c169824ae6e28ccd6 (diff)
add assembly stubs for amd64.
-rw-r--r--lib/libcrypto/Makefile5
-rw-r--r--lib/libcrypto/aes.inc8
-rw-r--r--lib/libcrypto/arch/x86_64/Makefile12
-rw-r--r--lib/libcrypto/arch/x86_64/aes-x86_64.S2503
-rw-r--r--lib/libcrypto/arch/x86_64/aes.inc3
-rw-r--r--lib/libcrypto/arch/x86_64/md5-x86_64.S665
-rw-r--r--lib/libcrypto/arch/x86_64/rc4-x86_64.S415
-rw-r--r--lib/libcrypto/arch/x86_64/rc4.inc3
-rw-r--r--lib/libcrypto/arch/x86_64/sha1-x86_64.S1278
-rw-r--r--lib/libcrypto/arch/x86_64/sha512-x86_64.S1969
-rw-r--r--lib/libcrypto/arch/x86_64/wp-x86_64.S855
-rw-r--r--lib/libcrypto/rc4.inc5
12 files changed, 7716 insertions, 5 deletions
diff --git a/lib/libcrypto/Makefile b/lib/libcrypto/Makefile
index 0efa607a3e5..146b7058dee 100644
--- a/lib/libcrypto/Makefile
+++ b/lib/libcrypto/Makefile
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.49 2008/05/09 21:52:18 christos Exp $
+# $NetBSD: Makefile,v 1.50 2008/05/10 20:14:20 christos Exp $
# RCSid:
# Id: Makefile,v 1.33 1998/11/11 11:53:53 sjg Exp
@@ -127,6 +127,9 @@ INCSDIR=/usr/include/openssl
# note that the resulting `srcs.inc' file needs to be modified
# to deal with our MKCRYPTO_* configuration variables.
+xxx:
+ echo ${SRCS}
+
update_inc:
(cd ${.CURDIR}; find ${OPENSSLSRC}/crypto \
-name Makefile | \
diff --git a/lib/libcrypto/aes.inc b/lib/libcrypto/aes.inc
index f672488cfde..7fca6fa0598 100644
--- a/lib/libcrypto/aes.inc
+++ b/lib/libcrypto/aes.inc
@@ -1,4 +1,4 @@
-# $NetBSD: aes.inc,v 1.4 2008/05/09 21:52:18 christos Exp $
+# $NetBSD: aes.inc,v 1.5 2008/05/10 20:14:20 christos Exp $
#
# @(#) Copyright (c) 1995 Simon J. Gerraty
#
@@ -7,11 +7,15 @@
.PATH: ${OPENSSLSRC}/crypto/aes
+.if !defined(AES_SRCS)
+AES_SRCS= aes_core.c aes_cbc.c
+.endif
-AES_SRCS = aes_core.c aes_misc.c aes_ecb.c aes_cbc.c aes_cfb.c aes_ofb.c \
+AES_SRCS += aes_misc.c aes_cfb.c aes_ofb.c \
aes_ctr.c aes_wrap.c aes_ige.c
SRCS += ${AES_SRCS}
.for cryptosrc in ${AES_SRCS}
CPPFLAGS.${cryptosrc} = -I${OPENSSLSRC}/crypto/aes
.endfor
+
diff --git a/lib/libcrypto/arch/x86_64/Makefile b/lib/libcrypto/arch/x86_64/Makefile
new file mode 100644
index 00000000000..53c30282ebe
--- /dev/null
+++ b/lib/libcrypto/arch/x86_64/Makefile
@@ -0,0 +1,12 @@
+# $NetBSD: Makefile,v 1.1 2008/05/10 20:14:20 christos Exp $
+
+.include "bsd.own.mk"
+
+CRYPTODIST=${NETBSDSRCDIR}/crypto/dist
+.include "${NETBSDSRCDIR}/crypto/Makefile.openssl"
+
+regen:
+ for i in $$(find ${OPENSSLSRC} -name \*${MACHINE_ARCH}.pl); do \
+ perl $$i | sed -e 's/(%rip)/@GOTPCREL(%rip)/' \
+ > $$(basename $$i .pl).S; \
+ done
diff --git a/lib/libcrypto/arch/x86_64/aes-x86_64.S b/lib/libcrypto/arch/x86_64/aes-x86_64.S
new file mode 100644
index 00000000000..370d14271ea
--- /dev/null
+++ b/lib/libcrypto/arch/x86_64/aes-x86_64.S
@@ -0,0 +1,2503 @@
+.text
+.type _x86_64_AES_encrypt,@function
+.align 16
+_x86_64_AES_encrypt:
+ xorl 0(%r15),%eax
+ xorl 4(%r15),%ebx
+ xorl 8(%r15),%ecx
+ xorl 12(%r15),%edx
+
+ movl 240(%r15),%r13d
+ subl $1,%r13d
+ jmp .Lenc_loop
+.align 16
+.Lenc_loop:
+
+ movzbl %al,%esi
+ movzbl %bl,%edi
+ movzbl %cl,%ebp
+ movl 0(%r14,%rsi,8),%r10d
+ movl 0(%r14,%rdi,8),%r11d
+ movl 0(%r14,%rbp,8),%r12d
+
+ movzbl %bh,%esi
+ movzbl %ch,%edi
+ movzbl %dl,%ebp
+ xorl 3(%r14,%rsi,8),%r10d
+ xorl 3(%r14,%rdi,8),%r11d
+ movl 0(%r14,%rbp,8),%r8d
+
+ movzbl %dh,%esi
+ shrl $16,%ecx
+ movzbl %ah,%ebp
+ xorl 3(%r14,%rsi,8),%r12d
+ shrl $16,%edx
+ xorl 3(%r14,%rbp,8),%r8d
+
+ shrl $16,%ebx
+ leaq 16(%r15),%r15
+ shrl $16,%eax
+
+ movzbl %cl,%esi
+ movzbl %dl,%edi
+ movzbl %al,%ebp
+ xorl 2(%r14,%rsi,8),%r10d
+ xorl 2(%r14,%rdi,8),%r11d
+ xorl 2(%r14,%rbp,8),%r12d
+
+ movzbl %dh,%esi
+ movzbl %ah,%edi
+ movzbl %bl,%ebp
+ xorl 1(%r14,%rsi,8),%r10d
+ xorl 1(%r14,%rdi,8),%r11d
+ xorl 2(%r14,%rbp,8),%r8d
+
+ movl 12(%r15),%edx
+ movzbl %bh,%edi
+ movzbl %ch,%ebp
+ movl 0(%r15),%eax
+ xorl 1(%r14,%rdi,8),%r12d
+ xorl 1(%r14,%rbp,8),%r8d
+
+ movl 4(%r15),%ebx
+ movl 8(%r15),%ecx
+ xorl %r10d,%eax
+ xorl %r11d,%ebx
+ xorl %r12d,%ecx
+ xorl %r8d,%edx
+ subl $1,%r13d
+ jnz .Lenc_loop
+ movzbl %al,%esi
+ movzbl %bl,%edi
+ movzbl %cl,%ebp
+ movzbl 2(%r14,%rsi,8),%r10d
+ movzbl 2(%r14,%rdi,8),%r11d
+ movzbl 2(%r14,%rbp,8),%r12d
+
+ movzbl %dl,%esi
+ movzbl %bh,%edi
+ movzbl %ch,%ebp
+ movzbl 2(%r14,%rsi,8),%r8d
+ movl 0(%r14,%rdi,8),%edi
+ movl 0(%r14,%rbp,8),%ebp
+
+ andl $65280,%edi
+ andl $65280,%ebp
+
+ xorl %edi,%r10d
+ xorl %ebp,%r11d
+ shrl $16,%ecx
+
+ movzbl %dh,%esi
+ movzbl %ah,%edi
+ shrl $16,%edx
+ movl 0(%r14,%rsi,8),%esi
+ movl 0(%r14,%rdi,8),%edi
+
+ andl $65280,%esi
+ andl $65280,%edi
+ shrl $16,%ebx
+ xorl %esi,%r12d
+ xorl %edi,%r8d
+ shrl $16,%eax
+
+ movzbl %cl,%esi
+ movzbl %dl,%edi
+ movzbl %al,%ebp
+ movl 0(%r14,%rsi,8),%esi
+ movl 0(%r14,%rdi,8),%edi
+ movl 0(%r14,%rbp,8),%ebp
+
+ andl $16711680,%esi
+ andl $16711680,%edi
+ andl $16711680,%ebp
+
+ xorl %esi,%r10d
+ xorl %edi,%r11d
+ xorl %ebp,%r12d
+
+ movzbl %bl,%esi
+ movzbl %dh,%edi
+ movzbl %ah,%ebp
+ movl 0(%r14,%rsi,8),%esi
+ movl 2(%r14,%rdi,8),%edi
+ movl 2(%r14,%rbp,8),%ebp
+
+ andl $16711680,%esi
+ andl $4278190080,%edi
+ andl $4278190080,%ebp
+
+ xorl %esi,%r8d
+ xorl %edi,%r10d
+ xorl %ebp,%r11d
+
+ movzbl %bh,%esi
+ movzbl %ch,%edi
+ movl 16+12(%r15),%edx
+ movl 2(%r14,%rsi,8),%esi
+ movl 2(%r14,%rdi,8),%edi
+ movl 16+0(%r15),%eax
+
+ andl $4278190080,%esi
+ andl $4278190080,%edi
+
+ xorl %esi,%r12d
+ xorl %edi,%r8d
+
+ movl 16+4(%r15),%ebx
+ movl 16+8(%r15),%ecx
+ xorl %r10d,%eax
+ xorl %r11d,%ebx
+ xorl %r12d,%ecx
+ xorl %r8d,%edx
+.byte 0xf3,0xc3
+.size _x86_64_AES_encrypt,.-_x86_64_AES_encrypt
+.type _x86_64_AES_encrypt_compact,@function
+.align 16
+_x86_64_AES_encrypt_compact:
+ leaq 128(%r14),%r8
+ movl 0-128(%r8),%edi
+ movl 32-128(%r8),%ebp
+ movl 64-128(%r8),%r10d
+ movl 96-128(%r8),%r11d
+ movl 128-128(%r8),%edi
+ movl 160-128(%r8),%ebp
+ movl 192-128(%r8),%r10d
+ movl 224-128(%r8),%r11d
+ jmp .Lenc_loop_compact
+.align 16
+.Lenc_loop_compact:
+ xorl 0(%r15),%eax
+ xorl 4(%r15),%ebx
+ xorl 8(%r15),%ecx
+ xorl 12(%r15),%edx
+ leaq 16(%r15),%r15
+ movzbl %al,%r10d
+ movzbl %bl,%r11d
+ movzbl %cl,%r12d
+ movzbl (%r14,%r10,1),%r10d
+ movzbl (%r14,%r11,1),%r11d
+ movzbl (%r14,%r12,1),%r12d
+
+ movzbl %dl,%r8d
+ movzbl %bh,%esi
+ movzbl %ch,%edi
+ movzbl (%r14,%r8,1),%r8d
+ movzbl (%r14,%rsi,1),%r9d
+ movzbl (%r14,%rdi,1),%r13d
+
+ movzbl %dh,%ebp
+ movzbl %ah,%esi
+ shrl $16,%ecx
+ movzbl (%r14,%rbp,1),%ebp
+ movzbl (%r14,%rsi,1),%esi
+ shrl $16,%edx
+
+ movzbl %cl,%edi
+ shll $8,%r9d
+ shll $8,%r13d
+ movzbl (%r14,%rdi,1),%edi
+ xorl %r9d,%r10d
+ xorl %r13d,%r11d
+
+ movzbl %dl,%r9d
+ shrl $16,%eax
+ shrl $16,%ebx
+ movzbl %al,%r13d
+ shll $8,%ebp
+ shll $8,%esi
+ movzbl (%r14,%r9,1),%r9d
+ movzbl (%r14,%r13,1),%r13d
+ xorl %ebp,%r12d
+ xorl %esi,%r8d
+
+ movzbl %bl,%ebp
+ movzbl %dh,%esi
+ shll $16,%edi
+ movzbl (%r14,%rbp,1),%ebp
+ movzbl (%r14,%rsi,1),%esi
+ xorl %edi,%r10d
+
+ movzbl %ah,%edi
+ shrl $8,%ecx
+ shrl $8,%ebx
+ movzbl (%r14,%rdi,1),%edi
+ movzbl (%r14,%rcx,1),%edx
+ movzbl (%r14,%rbx,1),%ecx
+ shll $16,%r9d
+ shll $16,%r13d
+ shll $16,%ebp
+ xorl %r9d,%r11d
+ xorl %r13d,%r12d
+ xorl %ebp,%r8d
+
+ shll $24,%esi
+ shll $24,%edi
+ shll $24,%edx
+ xorl %esi,%r10d
+ shll $24,%ecx
+ xorl %edi,%r11d
+ movl %r10d,%eax
+ movl %r11d,%ebx
+ xorl %r12d,%ecx
+ xorl %r8d,%edx
+ cmpq 16(%rsp),%r15
+ je .Lenc_compact_done
+ movl %eax,%esi
+ movl %ebx,%edi
+ andl $2155905152,%esi
+ andl $2155905152,%edi
+ movl %esi,%r10d
+ movl %edi,%r11d
+ shrl $7,%r10d
+ leal (%rax,%rax,1),%r8d
+ shrl $7,%r11d
+ leal (%rbx,%rbx,1),%r9d
+ subl %r10d,%esi
+ subl %r11d,%edi
+ andl $4278124286,%r8d
+ andl $4278124286,%r9d
+ andl $454761243,%esi
+ andl $454761243,%edi
+ movl %eax,%r10d
+ movl %ebx,%r11d
+ xorl %esi,%r8d
+ xorl %edi,%r9d
+
+ xorl %r8d,%eax
+ xorl %r9d,%ebx
+ movl %ecx,%esi
+ movl %edx,%edi
+ roll $24,%eax
+ roll $24,%ebx
+ andl $2155905152,%esi
+ andl $2155905152,%edi
+ xorl %r8d,%eax
+ xorl %r9d,%ebx
+ movl %esi,%r12d
+ movl %edi,%ebp
+ rorl $16,%r10d
+ rorl $16,%r11d
+ shrl $7,%r12d
+ leal (%rcx,%rcx,1),%r8d
+ xorl %r10d,%eax
+ xorl %r11d,%ebx
+ shrl $7,%ebp
+ leal (%rdx,%rdx,1),%r9d
+ rorl $8,%r10d
+ rorl $8,%r11d
+ subl %r12d,%esi
+ subl %ebp,%edi
+ xorl %r10d,%eax
+ xorl %r11d,%ebx
+
+ andl $4278124286,%r8d
+ andl $4278124286,%r9d
+ andl $454761243,%esi
+ andl $454761243,%edi
+ movl %ecx,%r12d
+ movl %edx,%ebp
+ xorl %esi,%r8d
+ xorl %edi,%r9d
+
+ xorl %r8d,%ecx
+ xorl %r9d,%edx
+ roll $24,%ecx
+ roll $24,%edx
+ xorl %r8d,%ecx
+ xorl %r9d,%edx
+ movl 0(%r14),%esi
+ rorl $16,%r12d
+ rorl $16,%ebp
+ movl 64(%r14),%edi
+ xorl %r12d,%ecx
+ xorl %ebp,%edx
+ movl 128(%r14),%r8d
+ rorl $8,%r12d
+ rorl $8,%ebp
+ movl 192(%r14),%r9d
+ xorl %r12d,%ecx
+ xorl %ebp,%edx
+ jmp .Lenc_loop_compact
+.align 16
+.Lenc_compact_done:
+ xorl 0(%r15),%eax
+ xorl 4(%r15),%ebx
+ xorl 8(%r15),%ecx
+ xorl 12(%r15),%edx
+.byte 0xf3,0xc3
+.size _x86_64_AES_encrypt_compact,.-_x86_64_AES_encrypt_compact
+.globl AES_encrypt
+.type AES_encrypt,@function
+.align 16
+AES_encrypt:
+ pushq %rbx
+ pushq %rbp
+ pushq %r12
+ pushq %r13
+ pushq %r14
+ pushq %r15
+
+
+ movq %rsp,%rax
+ movq %rdx,%r15
+ leaq -63(%rdx),%rcx
+ andq $-64,%rsp
+ subq %rsp,%rcx
+ negq %rcx
+ andq $960,%rcx
+ subq %rcx,%rsp
+
+ pushq %rax
+ pushq %rsi
+
+ movl 240(%r15),%r13d
+
+ movl 0(%rdi),%eax
+ movl 4(%rdi),%ebx
+ movl 8(%rdi),%ecx
+ movl 12(%rdi),%edx
+
+ shll $4,%r13d
+ leaq (%r15,%r13,1),%rbp
+ pushq %rbp
+ pushq %r15
+
+
+ .long 0x1358d4c,0x90000000
+ leaq AES_Te+2048-.(%r14),%r14
+ leaq 768(%rsp),%rbp
+ subq %r14,%rbp
+ andq $768,%rbp
+ leaq (%r14,%rbp,1),%r14
+
+ call _x86_64_AES_encrypt_compact
+
+ movq 16(%rsp),%r9
+ movq 24(%rsp),%rsp
+ movl %eax,0(%r9)
+ movl %ebx,4(%r9)
+ movl %ecx,8(%r9)
+ movl %edx,12(%r9)
+
+ popq %r15
+ popq %r14
+ popq %r13
+ popq %r12
+ popq %rbp
+ popq %rbx
+ .byte 0xf3,0xc3
+.size AES_encrypt,.-AES_encrypt
+.type _x86_64_AES_decrypt,@function
+.align 16
+_x86_64_AES_decrypt:
+ xorl 0(%r15),%eax
+ xorl 4(%r15),%ebx
+ xorl 8(%r15),%ecx
+ xorl 12(%r15),%edx
+
+ movl 240(%r15),%r13d
+ subl $1,%r13d
+ jmp .Ldec_loop
+.align 16
+.Ldec_loop:
+
+ movzbl %al,%esi
+ movzbl %bl,%edi
+ movzbl %cl,%ebp
+ movl 0(%r14,%rsi,8),%r10d
+ movl 0(%r14,%rdi,8),%r11d
+ movl 0(%r14,%rbp,8),%r12d
+
+ movzbl %dh,%esi
+ movzbl %ah,%edi
+ movzbl %dl,%ebp
+ xorl 3(%r14,%rsi,8),%r10d
+ xorl 3(%r14,%rdi,8),%r11d
+ movl 0(%r14,%rbp,8),%r8d
+
+ movzbl %bh,%esi
+ shrl $16,%eax
+ movzbl %ch,%ebp
+ xorl 3(%r14,%rsi,8),%r12d
+ shrl $16,%edx
+ xorl 3(%r14,%rbp,8),%r8d
+
+ shrl $16,%ebx
+ leaq 16(%r15),%r15
+ shrl $16,%ecx
+
+ movzbl %cl,%esi
+ movzbl %dl,%edi
+ movzbl %al,%ebp
+ xorl 2(%r14,%rsi,8),%r10d
+ xorl 2(%r14,%rdi,8),%r11d
+ xorl 2(%r14,%rbp,8),%r12d
+
+ movzbl %bh,%esi
+ movzbl %ch,%edi
+ movzbl %bl,%ebp
+ xorl 1(%r14,%rsi,8),%r10d
+ xorl 1(%r14,%rdi,8),%r11d
+ xorl 2(%r14,%rbp,8),%r8d
+
+ movzbl %dh,%esi
+ movl 12(%r15),%edx
+ movzbl %ah,%ebp
+ xorl 1(%r14,%rsi,8),%r12d
+ movl 0(%r15),%eax
+ xorl 1(%r14,%rbp,8),%r8d
+
+ xorl %r10d,%eax
+ movl 4(%r15),%ebx
+ movl 8(%r15),%ecx
+ xorl %r12d,%ecx
+ xorl %r11d,%ebx
+ xorl %r8d,%edx
+ subl $1,%r13d
+ jnz .Ldec_loop
+ leaq 2048(%r14),%r14
+ movzbl %al,%esi
+ movzbl %bl,%edi
+ movzbl %cl,%ebp
+ movzbl (%r14,%rsi,1),%r10d
+ movzbl (%r14,%rdi,1),%r11d
+ movzbl (%r14,%rbp,1),%r12d
+
+ movzbl %dl,%esi
+ movzbl %dh,%edi
+ movzbl %ah,%ebp
+ movzbl (%r14,%rsi,1),%r8d
+ movzbl (%r14,%rdi,1),%edi
+ movzbl (%r14,%rbp,1),%ebp
+
+ shll $8,%edi
+ shll $8,%ebp
+
+ xorl %edi,%r10d
+ xorl %ebp,%r11d
+ shrl $16,%edx
+
+ movzbl %bh,%esi
+ movzbl %ch,%edi
+ shrl $16,%eax
+ movzbl (%r14,%rsi,1),%esi
+ movzbl (%r14,%rdi,1),%edi
+
+ shll $8,%esi
+ shll $8,%edi
+ shrl $16,%ebx
+ xorl %esi,%r12d
+ xorl %edi,%r8d
+ shrl $16,%ecx
+
+ movzbl %cl,%esi
+ movzbl %dl,%edi
+ movzbl %al,%ebp
+ movzbl (%r14,%rsi,1),%esi
+ movzbl (%r14,%rdi,1),%edi
+ movzbl (%r14,%rbp,1),%ebp
+
+ shll $16,%esi
+ shll $16,%edi
+ shll $16,%ebp
+
+ xorl %esi,%r10d
+ xorl %edi,%r11d
+ xorl %ebp,%r12d
+
+ movzbl %bl,%esi
+ movzbl %bh,%edi
+ movzbl %ch,%ebp
+ movzbl (%r14,%rsi,1),%esi
+ movzbl (%r14,%rdi,1),%edi
+ movzbl (%r14,%rbp,1),%ebp
+
+ shll $16,%esi
+ shll $24,%edi
+ shll $24,%ebp
+
+ xorl %esi,%r8d
+ xorl %edi,%r10d
+ xorl %ebp,%r11d
+
+ movzbl %dh,%esi
+ movzbl %ah,%edi
+ movl 16+12(%r15),%edx
+ movzbl (%r14,%rsi,1),%esi
+ movzbl (%r14,%rdi,1),%edi
+ movl 16+0(%r15),%eax
+
+ shll $24,%esi
+ shll $24,%edi
+
+ xorl %esi,%r12d
+ xorl %edi,%r8d
+
+ movl 16+4(%r15),%ebx
+ movl 16+8(%r15),%ecx
+ leaq -2048(%r14),%r14
+ xorl %r10d,%eax
+ xorl %r11d,%ebx
+ xorl %r12d,%ecx
+ xorl %r8d,%edx
+.byte 0xf3,0xc3
+.size _x86_64_AES_decrypt,.-_x86_64_AES_decrypt
+.type _x86_64_AES_decrypt_compact,@function
+.align 16
+_x86_64_AES_decrypt_compact:
+ leaq 128(%r14),%r8
+ movl 0-128(%r8),%edi
+ movl 32-128(%r8),%ebp
+ movl 64-128(%r8),%r10d
+ movl 96-128(%r8),%r11d
+ movl 128-128(%r8),%edi
+ movl 160-128(%r8),%ebp
+ movl 192-128(%r8),%r10d
+ movl 224-128(%r8),%r11d
+ jmp .Ldec_loop_compact
+
+.align 16
+.Ldec_loop_compact:
+ xorl 0(%r15),%eax
+ xorl 4(%r15),%ebx
+ xorl 8(%r15),%ecx
+ xorl 12(%r15),%edx
+ leaq 16(%r15),%r15
+ movzbl %al,%r10d
+ movzbl %bl,%r11d
+ movzbl %cl,%r12d
+ movzbl (%r14,%r10,1),%r10d
+ movzbl (%r14,%r11,1),%r11d
+ movzbl (%r14,%r12,1),%r12d
+
+ movzbl %dl,%r8d
+ movzbl %dh,%esi
+ movzbl %ah,%edi
+ movzbl (%r14,%r8,1),%r8d
+ movzbl (%r14,%rsi,1),%r9d
+ movzbl (%r14,%rdi,1),%r13d
+
+ movzbl %bh,%ebp
+ movzbl %ch,%esi
+ shrl $16,%ecx
+ movzbl (%r14,%rbp,1),%ebp
+ movzbl (%r14,%rsi,1),%esi
+ shrl $16,%edx
+
+ movzbl %cl,%edi
+ shll $8,%r9d
+ shll $8,%r13d
+ movzbl (%r14,%rdi,1),%edi
+ xorl %r9d,%r10d
+ xorl %r13d,%r11d
+
+ movzbl %dl,%r9d
+ shrl $16,%eax
+ shrl $16,%ebx
+ movzbl %al,%r13d
+ shll $8,%ebp
+ shll $8,%esi
+ movzbl (%r14,%r9,1),%r9d
+ movzbl (%r14,%r13,1),%r13d
+ xorl %ebp,%r12d
+ xorl %esi,%r8d
+
+ movzbl %bl,%ebp
+ movzbl %bh,%esi
+ shll $16,%edi
+ movzbl (%r14,%rbp,1),%ebp
+ movzbl (%r14,%rsi,1),%esi
+ xorl %edi,%r10d
+
+ movzbl %ch,%edi
+ shll $16,%r9d
+ shll $16,%r13d
+ movzbl (%r14,%rdi,1),%ebx
+ xorl %r9d,%r11d
+ xorl %r13d,%r12d
+
+ movzbl %dh,%edi
+ shrl $8,%eax
+ shll $16,%ebp
+ movzbl (%r14,%rdi,1),%ecx
+ movzbl (%r14,%rax,1),%edx
+ xorl %ebp,%r8d
+
+ shll $24,%esi
+ shll $24,%ebx
+ shll $24,%ecx
+ xorl %esi,%r10d
+ shll $24,%edx
+ xorl %r11d,%ebx
+ movl %r10d,%eax
+ xorl %r12d,%ecx
+ xorl %r8d,%edx
+ cmpq 16(%rsp),%r15
+ je .Ldec_compact_done
+
+ movq 256+0(%r14),%rsi
+ shlq $32,%rbx
+ shlq $32,%rdx
+ movq 256+8(%r14),%rdi
+ orq %rbx,%rax
+ orq %rdx,%rcx
+ movq 256+16(%r14),%rbp
+ movq %rax,%rbx
+ movq %rcx,%rdx
+ andq %rsi,%rbx
+ andq %rsi,%rdx
+ movq %rbx,%r9
+ movq %rdx,%r12
+ shrq $7,%r9
+ leaq (%rax,%rax,1),%r8
+ shrq $7,%r12
+ leaq (%rcx,%rcx,1),%r11
+ subq %r9,%rbx
+ subq %r12,%rdx
+ andq %rdi,%r8
+ andq %rdi,%r11
+ andq %rbp,%rbx
+ andq %rbp,%rdx
+ xorq %r8,%rbx
+ xorq %r11,%rdx
+ movq %rbx,%r8
+ movq %rdx,%r11
+
+ andq %rsi,%rbx
+ andq %rsi,%rdx
+ movq %rbx,%r10
+ movq %rdx,%r13
+ shrq $7,%r10
+ leaq (%r8,%r8,1),%r9
+ shrq $7,%r13
+ leaq (%r11,%r11,1),%r12
+ subq %r10,%rbx
+ subq %r13,%rdx
+ andq %rdi,%r9
+ andq %rdi,%r12
+ andq %rbp,%rbx
+ andq %rbp,%rdx
+ xorq %r9,%rbx
+ xorq %r12,%rdx
+ movq %rbx,%r9
+ movq %rdx,%r12
+
+ andq %rsi,%rbx
+ andq %rsi,%rdx
+ movq %rbx,%r10
+ movq %rdx,%r13
+ shrq $7,%r10
+ xorq %rax,%r8
+ shrq $7,%r13
+ xorq %rcx,%r11
+ subq %r10,%rbx
+ subq %r13,%rdx
+ leaq (%r9,%r9,1),%r10
+ leaq (%r12,%r12,1),%r13
+ xorq %rax,%r9
+ xorq %rcx,%r12
+ andq %rdi,%r10
+ andq %rdi,%r13
+ andq %rbp,%rbx
+ andq %rbp,%rdx
+ xorq %rbx,%r10
+ xorq %rdx,%r13
+
+ xorq %r10,%rax
+ xorq %r13,%rcx
+ xorq %r10,%r8
+ xorq %r13,%r11
+ movq %rax,%rbx
+ movq %rcx,%rdx
+ xorq %r10,%r9
+ xorq %r13,%r12
+ shrq $32,%rbx
+ shrq $32,%rdx
+ xorq %r8,%r10
+ xorq %r11,%r13
+ roll $8,%eax
+ roll $8,%ecx
+ xorq %r9,%r10
+ xorq %r12,%r13
+
+ roll $8,%ebx
+ roll $8,%edx
+ xorl %r10d,%eax
+ xorl %r13d,%ecx
+ shrq $32,%r10
+ shrq $32,%r13
+ xorl %r10d,%ebx
+ xorl %r13d,%edx
+
+ movq %r8,%r10
+ movq %r11,%r13
+ shrq $32,%r10
+ shrq $32,%r13
+ roll $24,%r8d
+ roll $24,%r11d
+ roll $24,%r10d
+ roll $24,%r13d
+ xorl %r8d,%eax
+ xorl %r11d,%ecx
+ movq %r9,%r8
+ movq %r12,%r11
+ xorl %r10d,%ebx
+ xorl %r13d,%edx
+
+ movq 0(%r14),%rsi
+ shrq $32,%r8
+ shrq $32,%r11
+ movq 64(%r14),%rdi
+ roll $16,%r9d
+ roll $16,%r12d
+ movq 128(%r14),%rbp
+ roll $16,%r8d
+ roll $16,%r11d
+ movq 192(%r14),%r10
+ xorl %r9d,%eax
+ xorl %r12d,%ecx
+ movq 256(%r14),%r13
+ xorl %r8d,%ebx
+ xorl %r11d,%edx
+ jmp .Ldec_loop_compact
+.align 16
+.Ldec_compact_done:
+ xorl 0(%r15),%eax
+ xorl 4(%r15),%ebx
+ xorl 8(%r15),%ecx
+ xorl 12(%r15),%edx
+.byte 0xf3,0xc3
+.size _x86_64_AES_decrypt_compact,.-_x86_64_AES_decrypt_compact
+.globl AES_decrypt
+.type AES_decrypt,@function
+.align 16
+AES_decrypt:
+ pushq %rbx
+ pushq %rbp
+ pushq %r12
+ pushq %r13
+ pushq %r14
+ pushq %r15
+
+
+ movq %rsp,%rax
+ movq %rdx,%r15
+ leaq -63(%rdx),%rcx
+ andq $-64,%rsp
+ subq %rsp,%rcx
+ negq %rcx
+ andq $960,%rcx
+ subq %rcx,%rsp
+
+ pushq %rax
+ pushq %rsi
+
+ movl 240(%r15),%r13d
+
+ movl 0(%rdi),%eax
+ movl 4(%rdi),%ebx
+ movl 8(%rdi),%ecx
+ movl 12(%rdi),%edx
+
+ shll $4,%r13d
+ leaq (%r15,%r13,1),%rbp
+ pushq %rbp
+ pushq %r15
+
+
+ .long 0x1358d4c,0x90000000
+ leaq AES_Td+2048-.(%r14),%r14
+ leaq 768(%rsp),%rbp
+ subq %r14,%rbp
+ andq $768,%rbp
+ leaq (%r14,%rbp,1),%r14
+ shrq $3,%rbp
+ addq %rbp,%r14
+
+ call _x86_64_AES_decrypt_compact
+
+ movq 16(%rsp),%r9
+ movq 24(%rsp),%rsp
+ movl %eax,0(%r9)
+ movl %ebx,4(%r9)
+ movl %ecx,8(%r9)
+ movl %edx,12(%r9)
+
+ popq %r15
+ popq %r14
+ popq %r13
+ popq %r12
+ popq %rbp
+ popq %rbx
+ .byte 0xf3,0xc3
+.size AES_decrypt,.-AES_decrypt
+.globl AES_set_encrypt_key
+.type AES_set_encrypt_key,@function
+.align 16
+AES_set_encrypt_key:
+ call _x86_64_AES_set_encrypt_key
+ .byte 0xf3,0xc3
+.size AES_set_encrypt_key,.-AES_set_encrypt_key
+
+.type _x86_64_AES_set_encrypt_key,@function
+.align 16
+_x86_64_AES_set_encrypt_key:
+ pushq %rbx
+ pushq %rbp
+
+ movl %esi,%ecx
+ movq %rdi,%rsi
+ movq %rdx,%rdi
+
+ testq $-1,%rsi
+ jz .Lbadpointer
+ testq $-1,%rdi
+ jz .Lbadpointer
+
+ .long 0x12d8d48,0x90000000
+ leaq AES_Te-.(%rbp),%rbp
+ leaq 2048+128(%rbp),%rbp
+
+
+ movl 0-128(%rbp),%eax
+ movl 32-128(%rbp),%ebx
+ movl 64-128(%rbp),%r8d
+ movl 96-128(%rbp),%edx
+ movl 128-128(%rbp),%eax
+ movl 160-128(%rbp),%ebx
+ movl 192-128(%rbp),%r8d
+ movl 224-128(%rbp),%edx
+
+ cmpl $128,%ecx
+ je .L10rounds
+ cmpl $192,%ecx
+ je .L12rounds
+ cmpl $256,%ecx
+ je .L14rounds
+ movq $-2,%rax
+ jmp .Lexit
+
+.L10rounds:
+ movq 0(%rsi),%rax
+ movq 8(%rsi),%rdx
+ movq %rax,0(%rdi)
+ movq %rdx,8(%rdi)
+
+ shrq $32,%rdx
+ xorl %ecx,%ecx
+ jmp .L10shortcut
+.align 4
+.L10loop:
+ movl 0(%rdi),%eax
+ movl 12(%rdi),%edx
+.L10shortcut:
+ movzbl %dl,%esi
+ movzbl -128(%rbp,%rsi,1),%ebx
+ movzbl %dh,%esi
+ shll $24,%ebx
+ xorl %ebx,%eax
+
+ movzbl -128(%rbp,%rsi,1),%ebx
+ shrl $16,%edx
+ movzbl %dl,%esi
+ xorl %ebx,%eax
+
+ movzbl -128(%rbp,%rsi,1),%ebx
+ movzbl %dh,%esi
+ shll $8,%ebx
+ xorl %ebx,%eax
+
+ movzbl -128(%rbp,%rsi,1),%ebx
+ shll $16,%ebx
+ xorl %ebx,%eax
+
+ xorl 1024-128(%rbp,%rcx,4),%eax
+ movl %eax,16(%rdi)
+ xorl 4(%rdi),%eax
+ movl %eax,20(%rdi)
+ xorl 8(%rdi),%eax
+ movl %eax,24(%rdi)
+ xorl 12(%rdi),%eax
+ movl %eax,28(%rdi)
+ addl $1,%ecx
+ leaq 16(%rdi),%rdi
+ cmpl $10,%ecx
+ jl .L10loop
+
+ movl $10,80(%rdi)
+ xorq %rax,%rax
+ jmp .Lexit
+
+.L12rounds:
+ movq 0(%rsi),%rax
+ movq 8(%rsi),%rbx
+ movq 16(%rsi),%rdx
+ movq %rax,0(%rdi)
+ movq %rbx,8(%rdi)
+ movq %rdx,16(%rdi)
+
+ shrq $32,%rdx
+ xorl %ecx,%ecx
+ jmp .L12shortcut
+.align 4
+.L12loop:
+ movl 0(%rdi),%eax
+ movl 20(%rdi),%edx
+.L12shortcut:
+ movzbl %dl,%esi
+ movzbl -128(%rbp,%rsi,1),%ebx
+ movzbl %dh,%esi
+ shll $24,%ebx
+ xorl %ebx,%eax
+
+ movzbl -128(%rbp,%rsi,1),%ebx
+ shrl $16,%edx
+ movzbl %dl,%esi
+ xorl %ebx,%eax
+
+ movzbl -128(%rbp,%rsi,1),%ebx
+ movzbl %dh,%esi
+ shll $8,%ebx
+ xorl %ebx,%eax
+
+ movzbl -128(%rbp,%rsi,1),%ebx
+ shll $16,%ebx
+ xorl %ebx,%eax
+
+ xorl 1024-128(%rbp,%rcx,4),%eax
+ movl %eax,24(%rdi)
+ xorl 4(%rdi),%eax
+ movl %eax,28(%rdi)
+ xorl 8(%rdi),%eax
+ movl %eax,32(%rdi)
+ xorl 12(%rdi),%eax
+ movl %eax,36(%rdi)
+
+ cmpl $7,%ecx
+ je .L12break
+ addl $1,%ecx
+
+ xorl 16(%rdi),%eax
+ movl %eax,40(%rdi)
+ xorl 20(%rdi),%eax
+ movl %eax,44(%rdi)
+
+ leaq 24(%rdi),%rdi
+ jmp .L12loop
+.L12break:
+ movl $12,72(%rdi)
+ xorq %rax,%rax
+ jmp .Lexit
+
+.L14rounds:
+ movq 0(%rsi),%rax
+ movq 8(%rsi),%rbx
+ movq 16(%rsi),%rcx
+ movq 24(%rsi),%rdx
+ movq %rax,0(%rdi)
+ movq %rbx,8(%rdi)
+ movq %rcx,16(%rdi)
+ movq %rdx,24(%rdi)
+
+ shrq $32,%rdx
+ xorl %ecx,%ecx
+ jmp .L14shortcut
+.align 4
+.L14loop:
+ movl 0(%rdi),%eax
+ movl 28(%rdi),%edx
+.L14shortcut:
+ movzbl %dl,%esi
+ movzbl -128(%rbp,%rsi,1),%ebx
+ movzbl %dh,%esi
+ shll $24,%ebx
+ xorl %ebx,%eax
+
+ movzbl -128(%rbp,%rsi,1),%ebx
+ shrl $16,%edx
+ movzbl %dl,%esi
+ xorl %ebx,%eax
+
+ movzbl -128(%rbp,%rsi,1),%ebx
+ movzbl %dh,%esi
+ shll $8,%ebx
+ xorl %ebx,%eax
+
+ movzbl -128(%rbp,%rsi,1),%ebx
+ shll $16,%ebx
+ xorl %ebx,%eax
+
+ xorl 1024-128(%rbp,%rcx,4),%eax
+ movl %eax,32(%rdi)
+ xorl 4(%rdi),%eax
+ movl %eax,36(%rdi)
+ xorl 8(%rdi),%eax
+ movl %eax,40(%rdi)
+ xorl 12(%rdi),%eax
+ movl %eax,44(%rdi)
+
+ cmpl $6,%ecx
+ je .L14break
+ addl $1,%ecx
+
+ movl %eax,%edx
+ movl 16(%rdi),%eax
+ movzbl %dl,%esi
+ movzbl -128(%rbp,%rsi,1),%ebx
+ movzbl %dh,%esi
+ xorl %ebx,%eax
+
+ movzbl -128(%rbp,%rsi,1),%ebx
+ shrl $16,%edx
+ shll $8,%ebx
+ movzbl %dl,%esi
+ xorl %ebx,%eax
+
+ movzbl -128(%rbp,%rsi,1),%ebx
+ movzbl %dh,%esi
+ shll $16,%ebx
+ xorl %ebx,%eax
+
+ movzbl -128(%rbp,%rsi,1),%ebx
+ shll $24,%ebx
+ xorl %ebx,%eax
+
+ movl %eax,48(%rdi)
+ xorl 20(%rdi),%eax
+ movl %eax,52(%rdi)
+ xorl 24(%rdi),%eax
+ movl %eax,56(%rdi)
+ xorl 28(%rdi),%eax
+ movl %eax,60(%rdi)
+
+ leaq 32(%rdi),%rdi
+ jmp .L14loop
+.L14break:
+ movl $14,48(%rdi)
+ xorq %rax,%rax
+ jmp .Lexit
+
+.Lbadpointer:
+ movq $-1,%rax
+.Lexit:
+ popq %rbp
+ popq %rbx
+.byte 0xf3,0xc3
+.size _x86_64_AES_set_encrypt_key,.-_x86_64_AES_set_encrypt_key
+.globl AES_set_decrypt_key
+.type AES_set_decrypt_key,@function
+.align 16
+AES_set_decrypt_key:
+ pushq %rdx
+ call _x86_64_AES_set_encrypt_key
+ cmpl $0,%eax
+ popq %r8
+ jne .Labort
+
+ pushq %rbx
+ pushq %rbp
+ pushq %r12
+ pushq %r13
+ pushq %r14
+ pushq %r15
+
+ movl 240(%r8),%r14d
+ xorq %rdi,%rdi
+ leaq (%rdi,%r14,4),%rcx
+ movq %r8,%rsi
+ leaq (%r8,%rcx,4),%rdi
+.align 4
+.Linvert:
+ movq 0(%rsi),%rax
+ movq 8(%rsi),%rbx
+ movq 0(%rdi),%rcx
+ movq 8(%rdi),%rdx
+ movq %rax,0(%rdi)
+ movq %rbx,8(%rdi)
+ movq %rcx,0(%rsi)
+ movq %rdx,8(%rsi)
+ leaq 16(%rsi),%rsi
+ leaq -16(%rdi),%rdi
+ cmpq %rsi,%rdi
+ jne .Linvert
+
+ .long 0x1058d48,0x90000000
+ leaq AES_Te+2048+1024-.(%rax),%rax
+
+ movq 40(%rax),%rsi
+ movq 48(%rax),%rdi
+ movq 56(%rax),%rbp
+
+ movq %r8,%r15
+ subl $1,%r14d
+.align 4
+.Lpermute:
+ leaq 16(%r15),%r15
+ movq 0(%r15),%rax
+ movq 8(%r15),%rcx
+ movq %rax,%rbx
+ movq %rcx,%rdx
+ andq %rsi,%rbx
+ andq %rsi,%rdx
+ movq %rbx,%r9
+ movq %rdx,%r12
+ shrq $7,%r9
+ leaq (%rax,%rax,1),%r8
+ shrq $7,%r12
+ leaq (%rcx,%rcx,1),%r11
+ subq %r9,%rbx
+ subq %r12,%rdx
+ andq %rdi,%r8
+ andq %rdi,%r11
+ andq %rbp,%rbx
+ andq %rbp,%rdx
+ xorq %r8,%rbx
+ xorq %r11,%rdx
+ movq %rbx,%r8
+ movq %rdx,%r11
+
+ andq %rsi,%rbx
+ andq %rsi,%rdx
+ movq %rbx,%r10
+ movq %rdx,%r13
+ shrq $7,%r10
+ leaq (%r8,%r8,1),%r9
+ shrq $7,%r13
+ leaq (%r11,%r11,1),%r12
+ subq %r10,%rbx
+ subq %r13,%rdx
+ andq %rdi,%r9
+ andq %rdi,%r12
+ andq %rbp,%rbx
+ andq %rbp,%rdx
+ xorq %r9,%rbx
+ xorq %r12,%rdx
+ movq %rbx,%r9
+ movq %rdx,%r12
+
+ andq %rsi,%rbx
+ andq %rsi,%rdx
+ movq %rbx,%r10
+ movq %rdx,%r13
+ shrq $7,%r10
+ xorq %rax,%r8
+ shrq $7,%r13
+ xorq %rcx,%r11
+ subq %r10,%rbx
+ subq %r13,%rdx
+ leaq (%r9,%r9,1),%r10
+ leaq (%r12,%r12,1),%r13
+ xorq %rax,%r9
+ xorq %rcx,%r12
+ andq %rdi,%r10
+ andq %rdi,%r13
+ andq %rbp,%rbx
+ andq %rbp,%rdx
+ xorq %rbx,%r10
+ xorq %rdx,%r13
+
+ xorq %r10,%rax
+ xorq %r13,%rcx
+ xorq %r10,%r8
+ xorq %r13,%r11
+ movq %rax,%rbx
+ movq %rcx,%rdx
+ xorq %r10,%r9
+ xorq %r13,%r12
+ shrq $32,%rbx
+ shrq $32,%rdx
+ xorq %r8,%r10
+ xorq %r11,%r13
+ roll $8,%eax
+ roll $8,%ecx
+ xorq %r9,%r10
+ xorq %r12,%r13
+
+ roll $8,%ebx
+ roll $8,%edx
+ xorl %r10d,%eax
+ xorl %r13d,%ecx
+ shrq $32,%r10
+ shrq $32,%r13
+ xorl %r10d,%ebx
+ xorl %r13d,%edx
+
+ movq %r8,%r10
+ movq %r11,%r13
+ shrq $32,%r10
+ shrq $32,%r13
+ roll $24,%r8d
+ roll $24,%r11d
+ roll $24,%r10d
+ roll $24,%r13d
+ xorl %r8d,%eax
+ xorl %r11d,%ecx
+ movq %r9,%r8
+ movq %r12,%r11
+ xorl %r10d,%ebx
+ xorl %r13d,%edx
+
+
+ shrq $32,%r8
+ shrq $32,%r11
+
+ roll $16,%r9d
+ roll $16,%r12d
+
+ roll $16,%r8d
+ roll $16,%r11d
+
+ xorl %r9d,%eax
+ xorl %r12d,%ecx
+
+ xorl %r8d,%ebx
+ xorl %r11d,%edx
+ movl %eax,0(%r15)
+ movl %ebx,4(%r15)
+ movl %ecx,8(%r15)
+ movl %edx,12(%r15)
+ subl $1,%r14d
+ jnz .Lpermute
+
+ xorq %rax,%rax
+ popq %r15
+ popq %r14
+ popq %r13
+ popq %r12
+ popq %rbp
+ popq %rbx
+.Labort:
+ .byte 0xf3,0xc3
+.size AES_set_decrypt_key,.-AES_set_decrypt_key
+.globl AES_cbc_encrypt
+.type AES_cbc_encrypt,@function
+.align 16
+
+AES_cbc_encrypt:
+ cmpq $0,%rdx
+ je .Lcbc_just_ret
+ pushq %rbx
+ pushq %rbp
+ pushq %r12
+ pushq %r13
+ pushq %r14
+ pushq %r15
+ pushfq
+ cld
+ movl %r9d,%r9d
+
+ .long 0x1358d4c,0x90000000
+ leaq AES_Te-.(%r14),%r14
+ cmpq $0,%r9
+ jne .Lcbc_picked_te
+ leaq AES_Td-AES_Te(%r14),%r14
+.Lcbc_picked_te:
+
+ movl OPENSSL_ia32cap_P@GOTPCREL(%rip),%eax
+ cmpq $512,%rdx
+ jb .Lcbc_slow_way
+ testq $15,%rdx
+ jnz .Lcbc_slow_way
+ btl $28,%eax
+ jc .Lcbc_slow_way
+
+
+ leaq -88-248(%rsp),%r15
+ andq $-64,%r15
+
+
+ movq %r14,%r10
+ leaq 2304(%r14),%r11
+ movq %r15,%r12
+ andq $4095,%r10
+ andq $4095,%r11
+ andq $4095,%r12
+
+ cmpq %r11,%r12
+ jb .Lcbc_te_break_out
+ subq %r11,%r12
+ subq %r12,%r15
+ jmp .Lcbc_te_ok
+.Lcbc_te_break_out:
+ subq %r10,%r12
+ andq $4095,%r12
+ addq $320,%r12
+ subq %r12,%r15
+.align 4
+.Lcbc_te_ok:
+
+ xchgq %rsp,%r15
+ addq $8,%rsp
+ movq %r15,16(%rsp)
+ movq %rdi,24(%rsp)
+ movq %rsi,32(%rsp)
+ movq %rdx,40(%rsp)
+ movq %rcx,48(%rsp)
+ movq %r8,56(%rsp)
+ movl $0,80+240(%rsp)
+ movq %r8,%rbp
+ movq %r9,%rbx
+ movq %rsi,%r9
+ movq %rdi,%r8
+ movq %rcx,%r15
+
+ movl 240(%r15),%eax
+
+ movq %r15,%r10
+ subq %r14,%r10
+ andq $4095,%r10
+ cmpq $2304,%r10
+ jb .Lcbc_do_ecopy
+ cmpq $4096-248,%r10
+ jb .Lcbc_skip_ecopy
+.align 4
+.Lcbc_do_ecopy:
+ movq %r15,%rsi
+ leaq 80(%rsp),%rdi
+ leaq 80(%rsp),%r15
+ movl $30,%ecx
+.long 0x90A548F3
+ movl %eax,(%rdi)
+.Lcbc_skip_ecopy:
+ movq %r15,0(%rsp)
+
+ movl $18,%ecx
+.align 4
+.Lcbc_prefetch_te:
+ movq 0(%r14),%r10
+ movq 32(%r14),%r11
+ movq 64(%r14),%r12
+ movq 96(%r14),%r13
+ leaq 128(%r14),%r14
+ subl $1,%ecx
+ jnz .Lcbc_prefetch_te
+ leaq -2304(%r14),%r14
+
+ cmpq $0,%rbx
+ je .LFAST_DECRYPT
+
+
+ movl 0(%rbp),%eax
+ movl 4(%rbp),%ebx
+ movl 8(%rbp),%ecx
+ movl 12(%rbp),%edx
+
+.align 4
+.Lcbc_fast_enc_loop:
+ xorl 0(%r8),%eax
+ xorl 4(%r8),%ebx
+ xorl 8(%r8),%ecx
+ xorl 12(%r8),%edx
+ movq 0(%rsp),%r15
+ movq %r8,24(%rsp)
+
+ call _x86_64_AES_encrypt
+
+ movq 24(%rsp),%r8
+ movq 40(%rsp),%r10
+ movl %eax,0(%r9)
+ movl %ebx,4(%r9)
+ movl %ecx,8(%r9)
+ movl %edx,12(%r9)
+
+ leaq 16(%r8),%r8
+ leaq 16(%r9),%r9
+ subq $16,%r10
+ testq $-16,%r10
+ movq %r10,40(%rsp)
+ jnz .Lcbc_fast_enc_loop
+ movq 56(%rsp),%rbp
+ movl %eax,0(%rbp)
+ movl %ebx,4(%rbp)
+ movl %ecx,8(%rbp)
+ movl %edx,12(%rbp)
+
+.align 4
+.Lcbc_cleanup:
+ cmpl $0,80+240(%rsp)
+ leaq 80(%rsp),%rdi
+ je .Lcbc_exit
+ movl $30,%ecx
+ xorq %rax,%rax
+.long 0x90AB48F3
+.Lcbc_exit:
+ movq 16(%rsp),%rsp
+ popfq
+ popq %r15
+ popq %r14
+ popq %r13
+ popq %r12
+ popq %rbp
+ popq %rbx
+.Lcbc_just_ret:
+ .byte 0xf3,0xc3
+
+
+.align 16
+.LFAST_DECRYPT:
+ cmpq %r8,%r9
+ je .Lcbc_fast_dec_in_place
+
+ movq %rbp,64(%rsp)
+.align 4
+.Lcbc_fast_dec_loop:
+ movl 0(%r8),%eax
+ movl 4(%r8),%ebx
+ movl 8(%r8),%ecx
+ movl 12(%r8),%edx
+ movq 0(%rsp),%r15
+ movq %r8,24(%rsp)
+
+ call _x86_64_AES_decrypt
+
+ movq 64(%rsp),%rbp
+ movq 24(%rsp),%r8
+ movq 40(%rsp),%r10
+ xorl 0(%rbp),%eax
+ xorl 4(%rbp),%ebx
+ xorl 8(%rbp),%ecx
+ xorl 12(%rbp),%edx
+ movq %r8,%rbp
+
+ subq $16,%r10
+ movq %r10,40(%rsp)
+ movq %rbp,64(%rsp)
+
+ movl %eax,0(%r9)
+ movl %ebx,4(%r9)
+ movl %ecx,8(%r9)
+ movl %edx,12(%r9)
+
+ leaq 16(%r8),%r8
+ leaq 16(%r9),%r9
+ jnz .Lcbc_fast_dec_loop
+ movq 56(%rsp),%r12
+ movq 0(%rbp),%r10
+ movq 8(%rbp),%r11
+ movq %r10,0(%r12)
+ movq %r11,8(%r12)
+ jmp .Lcbc_cleanup
+
+.align 16
+.Lcbc_fast_dec_in_place:
+ movq 0(%rbp),%r10
+ movq 8(%rbp),%r11
+ movq %r10,0+64(%rsp)
+ movq %r11,8+64(%rsp)
+.align 4
+.Lcbc_fast_dec_in_place_loop:
+ movl 0(%r8),%eax
+ movl 4(%r8),%ebx
+ movl 8(%r8),%ecx
+ movl 12(%r8),%edx
+ movq 0(%rsp),%r15
+ movq %r8,24(%rsp)
+
+ call _x86_64_AES_decrypt
+
+ movq 24(%rsp),%r8
+ movq 40(%rsp),%r10
+ xorl 0+64(%rsp),%eax
+ xorl 4+64(%rsp),%ebx
+ xorl 8+64(%rsp),%ecx
+ xorl 12+64(%rsp),%edx
+
+ movq 0(%r8),%r11
+ movq 8(%r8),%r12
+ subq $16,%r10
+ jz .Lcbc_fast_dec_in_place_done
+
+ movq %r11,0+64(%rsp)
+ movq %r12,8+64(%rsp)
+
+ movl %eax,0(%r9)
+ movl %ebx,4(%r9)
+ movl %ecx,8(%r9)
+ movl %edx,12(%r9)
+
+ leaq 16(%r8),%r8
+ leaq 16(%r9),%r9
+ movq %r10,40(%rsp)
+ jmp .Lcbc_fast_dec_in_place_loop
+.Lcbc_fast_dec_in_place_done:
+ movq 56(%rsp),%rdi
+ movq %r11,0(%rdi)
+ movq %r12,8(%rdi)
+
+ movl %eax,0(%r9)
+ movl %ebx,4(%r9)
+ movl %ecx,8(%r9)
+ movl %edx,12(%r9)
+
+ jmp .Lcbc_cleanup
+
+
+.align 16
+.Lcbc_slow_way:
+
+ leaq -88(%rsp),%rbp
+ andq $-64,%rbp
+
+ leaq -88-63(%rcx),%rax
+ subq %rbp,%rax
+ negq %rax
+ andq $960,%rax
+ subq %rax,%rbp
+
+ xchgq %rsp,%rbp
+ addq $8,%rsp
+ movq %rbp,16(%rsp)
+
+
+
+
+ movq %r8,56(%rsp)
+ movq %r8,%rbp
+ movq %r9,%rbx
+ movq %rsi,%r9
+ movq %rdi,%r8
+ movq %rcx,%r15
+ movq %rdx,%r10
+
+ movl 240(%r15),%eax
+ movq %r15,0(%rsp)
+ shll $4,%eax
+ leaq (%r15,%rax,1),%rax
+ movq %rax,8(%rsp)
+
+
+ leaq 2048(%r14),%r14
+ leaq 768-8(%rsp),%rax
+ subq %r14,%rax
+ andq $768,%rax
+ leaq (%r14,%rax,1),%r14
+
+ cmpq $0,%rbx
+ je .LSLOW_DECRYPT
+
+
+ testq $-16,%r10
+ movl 0(%rbp),%eax
+ movl 4(%rbp),%ebx
+ movl 8(%rbp),%ecx
+ movl 12(%rbp),%edx
+ jz .Lcbc_slow_enc_tail
+
+.align 4
+.Lcbc_slow_enc_loop:
+ xorl 0(%r8),%eax
+ xorl 4(%r8),%ebx
+ xorl 8(%r8),%ecx
+ xorl 12(%r8),%edx
+ movq 0(%rsp),%r15
+ movq %r8,24(%rsp)
+ movq %r9,32(%rsp)
+ movq %r10,40(%rsp)
+
+ call _x86_64_AES_encrypt_compact
+
+ movq 24(%rsp),%r8
+ movq 32(%rsp),%r9
+ movq 40(%rsp),%r10
+ movl %eax,0(%r9)
+ movl %ebx,4(%r9)
+ movl %ecx,8(%r9)
+ movl %edx,12(%r9)
+
+ leaq 16(%r8),%r8
+ leaq 16(%r9),%r9
+ subq $16,%r10
+ testq $-16,%r10
+ jnz .Lcbc_slow_enc_loop
+ testq $15,%r10
+ jnz .Lcbc_slow_enc_tail
+ movq 56(%rsp),%rbp
+ movl %eax,0(%rbp)
+ movl %ebx,4(%rbp)
+ movl %ecx,8(%rbp)
+ movl %edx,12(%rbp)
+
+ jmp .Lcbc_exit
+.align 4
+.Lcbc_slow_enc_tail:
+ cmpq %r8,%r9
+ je .Lcbc_slow_enc_in_place
+ movq %r10,%rcx
+ movq %r8,%rsi
+ movq %r9,%rdi
+.long 0x9066A4F3
+.Lcbc_slow_enc_in_place:
+ movq $16,%rcx
+ subq %r10,%rcx
+ xorq %rax,%rax
+.long 0x9066AAF3
+ movq %r9,%r8
+ movq $16,40(%rsp)
+ jmp .Lcbc_slow_enc_loop
+
+.align 16
+.LSLOW_DECRYPT:
+ shrq $3,%rax
+ addq %rax,%r14
+
+ movq 0(%rbp),%r11
+ movq 8(%rbp),%r12
+ movq %r11,0+64(%rsp)
+ movq %r12,8+64(%rsp)
+
+.align 4
+.Lcbc_slow_dec_loop:
+ movl 0(%r8),%eax
+ movl 4(%r8),%ebx
+ movl 8(%r8),%ecx
+ movl 12(%r8),%edx
+ movq 0(%rsp),%r15
+ movq %r8,24(%rsp)
+ movq %r9,32(%rsp)
+ movq %r10,40(%rsp)
+
+ call _x86_64_AES_decrypt_compact
+
+ movq 24(%rsp),%r8
+ movq 32(%rsp),%r9
+ movq 40(%rsp),%r10
+ xorl 0+64(%rsp),%eax
+ xorl 4+64(%rsp),%ebx
+ xorl 8+64(%rsp),%ecx
+ xorl 12+64(%rsp),%edx
+
+ movq 0(%r8),%r11
+ movq 8(%r8),%r12
+ subq $16,%r10
+ jc .Lcbc_slow_dec_partial
+ jz .Lcbc_slow_dec_done
+
+ movq %r11,0+64(%rsp)
+ movq %r12,8+64(%rsp)
+
+ movl %eax,0(%r9)
+ movl %ebx,4(%r9)
+ movl %ecx,8(%r9)
+ movl %edx,12(%r9)
+
+ leaq 16(%r8),%r8
+ leaq 16(%r9),%r9
+ jmp .Lcbc_slow_dec_loop
+.Lcbc_slow_dec_done:
+ movq 56(%rsp),%rdi
+ movq %r11,0(%rdi)
+ movq %r12,8(%rdi)
+
+ movl %eax,0(%r9)
+ movl %ebx,4(%r9)
+ movl %ecx,8(%r9)
+ movl %edx,12(%r9)
+
+ jmp .Lcbc_exit
+
+.align 4
+.Lcbc_slow_dec_partial:
+ movq 56(%rsp),%rdi
+ movq %r11,0(%rdi)
+ movq %r12,8(%rdi)
+
+ movl %eax,0+64(%rsp)
+ movl %ebx,4+64(%rsp)
+ movl %ecx,8+64(%rsp)
+ movl %edx,12+64(%rsp)
+
+ movq %r9,%rdi
+ leaq 64(%rsp),%rsi
+ leaq 16(%r10),%rcx
+.long 0x9066A4F3
+ jmp .Lcbc_exit
+.size AES_cbc_encrypt,.-AES_cbc_encrypt
+.globl AES_Te
+.align 64
+AES_Te:
+.long 0xa56363c6,0xa56363c6
+.long 0x847c7cf8,0x847c7cf8
+.long 0x997777ee,0x997777ee
+.long 0x8d7b7bf6,0x8d7b7bf6
+.long 0x0df2f2ff,0x0df2f2ff
+.long 0xbd6b6bd6,0xbd6b6bd6
+.long 0xb16f6fde,0xb16f6fde
+.long 0x54c5c591,0x54c5c591
+.long 0x50303060,0x50303060
+.long 0x03010102,0x03010102
+.long 0xa96767ce,0xa96767ce
+.long 0x7d2b2b56,0x7d2b2b56
+.long 0x19fefee7,0x19fefee7
+.long 0x62d7d7b5,0x62d7d7b5
+.long 0xe6abab4d,0xe6abab4d
+.long 0x9a7676ec,0x9a7676ec
+.long 0x45caca8f,0x45caca8f
+.long 0x9d82821f,0x9d82821f
+.long 0x40c9c989,0x40c9c989
+.long 0x877d7dfa,0x877d7dfa
+.long 0x15fafaef,0x15fafaef
+.long 0xeb5959b2,0xeb5959b2
+.long 0xc947478e,0xc947478e
+.long 0x0bf0f0fb,0x0bf0f0fb
+.long 0xecadad41,0xecadad41
+.long 0x67d4d4b3,0x67d4d4b3
+.long 0xfda2a25f,0xfda2a25f
+.long 0xeaafaf45,0xeaafaf45
+.long 0xbf9c9c23,0xbf9c9c23
+.long 0xf7a4a453,0xf7a4a453
+.long 0x967272e4,0x967272e4
+.long 0x5bc0c09b,0x5bc0c09b
+.long 0xc2b7b775,0xc2b7b775
+.long 0x1cfdfde1,0x1cfdfde1
+.long 0xae93933d,0xae93933d
+.long 0x6a26264c,0x6a26264c
+.long 0x5a36366c,0x5a36366c
+.long 0x413f3f7e,0x413f3f7e
+.long 0x02f7f7f5,0x02f7f7f5
+.long 0x4fcccc83,0x4fcccc83
+.long 0x5c343468,0x5c343468
+.long 0xf4a5a551,0xf4a5a551
+.long 0x34e5e5d1,0x34e5e5d1
+.long 0x08f1f1f9,0x08f1f1f9
+.long 0x937171e2,0x937171e2
+.long 0x73d8d8ab,0x73d8d8ab
+.long 0x53313162,0x53313162
+.long 0x3f15152a,0x3f15152a
+.long 0x0c040408,0x0c040408
+.long 0x52c7c795,0x52c7c795
+.long 0x65232346,0x65232346
+.long 0x5ec3c39d,0x5ec3c39d
+.long 0x28181830,0x28181830
+.long 0xa1969637,0xa1969637
+.long 0x0f05050a,0x0f05050a
+.long 0xb59a9a2f,0xb59a9a2f
+.long 0x0907070e,0x0907070e
+.long 0x36121224,0x36121224
+.long 0x9b80801b,0x9b80801b
+.long 0x3de2e2df,0x3de2e2df
+.long 0x26ebebcd,0x26ebebcd
+.long 0x6927274e,0x6927274e
+.long 0xcdb2b27f,0xcdb2b27f
+.long 0x9f7575ea,0x9f7575ea
+.long 0x1b090912,0x1b090912
+.long 0x9e83831d,0x9e83831d
+.long 0x742c2c58,0x742c2c58
+.long 0x2e1a1a34,0x2e1a1a34
+.long 0x2d1b1b36,0x2d1b1b36
+.long 0xb26e6edc,0xb26e6edc
+.long 0xee5a5ab4,0xee5a5ab4
+.long 0xfba0a05b,0xfba0a05b
+.long 0xf65252a4,0xf65252a4
+.long 0x4d3b3b76,0x4d3b3b76
+.long 0x61d6d6b7,0x61d6d6b7
+.long 0xceb3b37d,0xceb3b37d
+.long 0x7b292952,0x7b292952
+.long 0x3ee3e3dd,0x3ee3e3dd
+.long 0x712f2f5e,0x712f2f5e
+.long 0x97848413,0x97848413
+.long 0xf55353a6,0xf55353a6
+.long 0x68d1d1b9,0x68d1d1b9
+.long 0x00000000,0x00000000
+.long 0x2cededc1,0x2cededc1
+.long 0x60202040,0x60202040
+.long 0x1ffcfce3,0x1ffcfce3
+.long 0xc8b1b179,0xc8b1b179
+.long 0xed5b5bb6,0xed5b5bb6
+.long 0xbe6a6ad4,0xbe6a6ad4
+.long 0x46cbcb8d,0x46cbcb8d
+.long 0xd9bebe67,0xd9bebe67
+.long 0x4b393972,0x4b393972
+.long 0xde4a4a94,0xde4a4a94
+.long 0xd44c4c98,0xd44c4c98
+.long 0xe85858b0,0xe85858b0
+.long 0x4acfcf85,0x4acfcf85
+.long 0x6bd0d0bb,0x6bd0d0bb
+.long 0x2aefefc5,0x2aefefc5
+.long 0xe5aaaa4f,0xe5aaaa4f
+.long 0x16fbfbed,0x16fbfbed
+.long 0xc5434386,0xc5434386
+.long 0xd74d4d9a,0xd74d4d9a
+.long 0x55333366,0x55333366
+.long 0x94858511,0x94858511
+.long 0xcf45458a,0xcf45458a
+.long 0x10f9f9e9,0x10f9f9e9
+.long 0x06020204,0x06020204
+.long 0x817f7ffe,0x817f7ffe
+.long 0xf05050a0,0xf05050a0
+.long 0x443c3c78,0x443c3c78
+.long 0xba9f9f25,0xba9f9f25
+.long 0xe3a8a84b,0xe3a8a84b
+.long 0xf35151a2,0xf35151a2
+.long 0xfea3a35d,0xfea3a35d
+.long 0xc0404080,0xc0404080
+.long 0x8a8f8f05,0x8a8f8f05
+.long 0xad92923f,0xad92923f
+.long 0xbc9d9d21,0xbc9d9d21
+.long 0x48383870,0x48383870
+.long 0x04f5f5f1,0x04f5f5f1
+.long 0xdfbcbc63,0xdfbcbc63
+.long 0xc1b6b677,0xc1b6b677
+.long 0x75dadaaf,0x75dadaaf
+.long 0x63212142,0x63212142
+.long 0x30101020,0x30101020
+.long 0x1affffe5,0x1affffe5
+.long 0x0ef3f3fd,0x0ef3f3fd
+.long 0x6dd2d2bf,0x6dd2d2bf
+.long 0x4ccdcd81,0x4ccdcd81
+.long 0x140c0c18,0x140c0c18
+.long 0x35131326,0x35131326
+.long 0x2fececc3,0x2fececc3
+.long 0xe15f5fbe,0xe15f5fbe
+.long 0xa2979735,0xa2979735
+.long 0xcc444488,0xcc444488
+.long 0x3917172e,0x3917172e
+.long 0x57c4c493,0x57c4c493
+.long 0xf2a7a755,0xf2a7a755
+.long 0x827e7efc,0x827e7efc
+.long 0x473d3d7a,0x473d3d7a
+.long 0xac6464c8,0xac6464c8
+.long 0xe75d5dba,0xe75d5dba
+.long 0x2b191932,0x2b191932
+.long 0x957373e6,0x957373e6
+.long 0xa06060c0,0xa06060c0
+.long 0x98818119,0x98818119
+.long 0xd14f4f9e,0xd14f4f9e
+.long 0x7fdcdca3,0x7fdcdca3
+.long 0x66222244,0x66222244
+.long 0x7e2a2a54,0x7e2a2a54
+.long 0xab90903b,0xab90903b
+.long 0x8388880b,0x8388880b
+.long 0xca46468c,0xca46468c
+.long 0x29eeeec7,0x29eeeec7
+.long 0xd3b8b86b,0xd3b8b86b
+.long 0x3c141428,0x3c141428
+.long 0x79dedea7,0x79dedea7
+.long 0xe25e5ebc,0xe25e5ebc
+.long 0x1d0b0b16,0x1d0b0b16
+.long 0x76dbdbad,0x76dbdbad
+.long 0x3be0e0db,0x3be0e0db
+.long 0x56323264,0x56323264
+.long 0x4e3a3a74,0x4e3a3a74
+.long 0x1e0a0a14,0x1e0a0a14
+.long 0xdb494992,0xdb494992
+.long 0x0a06060c,0x0a06060c
+.long 0x6c242448,0x6c242448
+.long 0xe45c5cb8,0xe45c5cb8
+.long 0x5dc2c29f,0x5dc2c29f
+.long 0x6ed3d3bd,0x6ed3d3bd
+.long 0xefacac43,0xefacac43
+.long 0xa66262c4,0xa66262c4
+.long 0xa8919139,0xa8919139
+.long 0xa4959531,0xa4959531
+.long 0x37e4e4d3,0x37e4e4d3
+.long 0x8b7979f2,0x8b7979f2
+.long 0x32e7e7d5,0x32e7e7d5
+.long 0x43c8c88b,0x43c8c88b
+.long 0x5937376e,0x5937376e
+.long 0xb76d6dda,0xb76d6dda
+.long 0x8c8d8d01,0x8c8d8d01
+.long 0x64d5d5b1,0x64d5d5b1
+.long 0xd24e4e9c,0xd24e4e9c
+.long 0xe0a9a949,0xe0a9a949
+.long 0xb46c6cd8,0xb46c6cd8
+.long 0xfa5656ac,0xfa5656ac
+.long 0x07f4f4f3,0x07f4f4f3
+.long 0x25eaeacf,0x25eaeacf
+.long 0xaf6565ca,0xaf6565ca
+.long 0x8e7a7af4,0x8e7a7af4
+.long 0xe9aeae47,0xe9aeae47
+.long 0x18080810,0x18080810
+.long 0xd5baba6f,0xd5baba6f
+.long 0x887878f0,0x887878f0
+.long 0x6f25254a,0x6f25254a
+.long 0x722e2e5c,0x722e2e5c
+.long 0x241c1c38,0x241c1c38
+.long 0xf1a6a657,0xf1a6a657
+.long 0xc7b4b473,0xc7b4b473
+.long 0x51c6c697,0x51c6c697
+.long 0x23e8e8cb,0x23e8e8cb
+.long 0x7cdddda1,0x7cdddda1
+.long 0x9c7474e8,0x9c7474e8
+.long 0x211f1f3e,0x211f1f3e
+.long 0xdd4b4b96,0xdd4b4b96
+.long 0xdcbdbd61,0xdcbdbd61
+.long 0x868b8b0d,0x868b8b0d
+.long 0x858a8a0f,0x858a8a0f
+.long 0x907070e0,0x907070e0
+.long 0x423e3e7c,0x423e3e7c
+.long 0xc4b5b571,0xc4b5b571
+.long 0xaa6666cc,0xaa6666cc
+.long 0xd8484890,0xd8484890
+.long 0x05030306,0x05030306
+.long 0x01f6f6f7,0x01f6f6f7
+.long 0x120e0e1c,0x120e0e1c
+.long 0xa36161c2,0xa36161c2
+.long 0x5f35356a,0x5f35356a
+.long 0xf95757ae,0xf95757ae
+.long 0xd0b9b969,0xd0b9b969
+.long 0x91868617,0x91868617
+.long 0x58c1c199,0x58c1c199
+.long 0x271d1d3a,0x271d1d3a
+.long 0xb99e9e27,0xb99e9e27
+.long 0x38e1e1d9,0x38e1e1d9
+.long 0x13f8f8eb,0x13f8f8eb
+.long 0xb398982b,0xb398982b
+.long 0x33111122,0x33111122
+.long 0xbb6969d2,0xbb6969d2
+.long 0x70d9d9a9,0x70d9d9a9
+.long 0x898e8e07,0x898e8e07
+.long 0xa7949433,0xa7949433
+.long 0xb69b9b2d,0xb69b9b2d
+.long 0x221e1e3c,0x221e1e3c
+.long 0x92878715,0x92878715
+.long 0x20e9e9c9,0x20e9e9c9
+.long 0x49cece87,0x49cece87
+.long 0xff5555aa,0xff5555aa
+.long 0x78282850,0x78282850
+.long 0x7adfdfa5,0x7adfdfa5
+.long 0x8f8c8c03,0x8f8c8c03
+.long 0xf8a1a159,0xf8a1a159
+.long 0x80898909,0x80898909
+.long 0x170d0d1a,0x170d0d1a
+.long 0xdabfbf65,0xdabfbf65
+.long 0x31e6e6d7,0x31e6e6d7
+.long 0xc6424284,0xc6424284
+.long 0xb86868d0,0xb86868d0
+.long 0xc3414182,0xc3414182
+.long 0xb0999929,0xb0999929
+.long 0x772d2d5a,0x772d2d5a
+.long 0x110f0f1e,0x110f0f1e
+.long 0xcbb0b07b,0xcbb0b07b
+.long 0xfc5454a8,0xfc5454a8
+.long 0xd6bbbb6d,0xd6bbbb6d
+.long 0x3a16162c,0x3a16162c
+.byte 0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5
+.byte 0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76
+.byte 0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0
+.byte 0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0
+.byte 0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc
+.byte 0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15
+.byte 0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a
+.byte 0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75
+.byte 0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0
+.byte 0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84
+.byte 0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b
+.byte 0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf
+.byte 0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85
+.byte 0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8
+.byte 0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5
+.byte 0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2
+.byte 0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17
+.byte 0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73
+.byte 0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88
+.byte 0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb
+.byte 0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c
+.byte 0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79
+.byte 0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9
+.byte 0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08
+.byte 0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6
+.byte 0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a
+.byte 0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e
+.byte 0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e
+.byte 0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94
+.byte 0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf
+.byte 0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68
+.byte 0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16
+.byte 0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5
+.byte 0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76
+.byte 0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0
+.byte 0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0
+.byte 0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc
+.byte 0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15
+.byte 0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a
+.byte 0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75
+.byte 0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0
+.byte 0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84
+.byte 0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b
+.byte 0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf
+.byte 0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85
+.byte 0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8
+.byte 0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5
+.byte 0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2
+.byte 0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17
+.byte 0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73
+.byte 0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88
+.byte 0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb
+.byte 0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c
+.byte 0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79
+.byte 0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9
+.byte 0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08
+.byte 0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6
+.byte 0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a
+.byte 0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e
+.byte 0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e
+.byte 0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94
+.byte 0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf
+.byte 0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68
+.byte 0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16
+.byte 0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5
+.byte 0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76
+.byte 0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0
+.byte 0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0
+.byte 0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc
+.byte 0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15
+.byte 0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a
+.byte 0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75
+.byte 0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0
+.byte 0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84
+.byte 0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b
+.byte 0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf
+.byte 0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85
+.byte 0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8
+.byte 0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5
+.byte 0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2
+.byte 0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17
+.byte 0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73
+.byte 0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88
+.byte 0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb
+.byte 0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c
+.byte 0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79
+.byte 0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9
+.byte 0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08
+.byte 0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6
+.byte 0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a
+.byte 0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e
+.byte 0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e
+.byte 0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94
+.byte 0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf
+.byte 0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68
+.byte 0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16
+.byte 0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5
+.byte 0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76
+.byte 0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0
+.byte 0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0
+.byte 0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc
+.byte 0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15
+.byte 0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a
+.byte 0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75
+.byte 0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0
+.byte 0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84
+.byte 0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b
+.byte 0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf
+.byte 0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85
+.byte 0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8
+.byte 0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5
+.byte 0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2
+.byte 0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17
+.byte 0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73
+.byte 0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88
+.byte 0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb
+.byte 0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c
+.byte 0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79
+.byte 0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9
+.byte 0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08
+.byte 0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6
+.byte 0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a
+.byte 0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e
+.byte 0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e
+.byte 0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94
+.byte 0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf
+.byte 0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68
+.byte 0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16
+.long 0x00000001, 0x00000002, 0x00000004, 0x00000008
+.long 0x00000010, 0x00000020, 0x00000040, 0x00000080
+.long 0x0000001b, 0x00000036, 0x80808080, 0x80808080
+.long 0xfefefefe, 0xfefefefe, 0x1b1b1b1b, 0x1b1b1b1b
+.globl AES_Td
+.align 64
+AES_Td:
+.long 0x50a7f451,0x50a7f451
+.long 0x5365417e,0x5365417e
+.long 0xc3a4171a,0xc3a4171a
+.long 0x965e273a,0x965e273a
+.long 0xcb6bab3b,0xcb6bab3b
+.long 0xf1459d1f,0xf1459d1f
+.long 0xab58faac,0xab58faac
+.long 0x9303e34b,0x9303e34b
+.long 0x55fa3020,0x55fa3020
+.long 0xf66d76ad,0xf66d76ad
+.long 0x9176cc88,0x9176cc88
+.long 0x254c02f5,0x254c02f5
+.long 0xfcd7e54f,0xfcd7e54f
+.long 0xd7cb2ac5,0xd7cb2ac5
+.long 0x80443526,0x80443526
+.long 0x8fa362b5,0x8fa362b5
+.long 0x495ab1de,0x495ab1de
+.long 0x671bba25,0x671bba25
+.long 0x980eea45,0x980eea45
+.long 0xe1c0fe5d,0xe1c0fe5d
+.long 0x02752fc3,0x02752fc3
+.long 0x12f04c81,0x12f04c81
+.long 0xa397468d,0xa397468d
+.long 0xc6f9d36b,0xc6f9d36b
+.long 0xe75f8f03,0xe75f8f03
+.long 0x959c9215,0x959c9215
+.long 0xeb7a6dbf,0xeb7a6dbf
+.long 0xda595295,0xda595295
+.long 0x2d83bed4,0x2d83bed4
+.long 0xd3217458,0xd3217458
+.long 0x2969e049,0x2969e049
+.long 0x44c8c98e,0x44c8c98e
+.long 0x6a89c275,0x6a89c275
+.long 0x78798ef4,0x78798ef4
+.long 0x6b3e5899,0x6b3e5899
+.long 0xdd71b927,0xdd71b927
+.long 0xb64fe1be,0xb64fe1be
+.long 0x17ad88f0,0x17ad88f0
+.long 0x66ac20c9,0x66ac20c9
+.long 0xb43ace7d,0xb43ace7d
+.long 0x184adf63,0x184adf63
+.long 0x82311ae5,0x82311ae5
+.long 0x60335197,0x60335197
+.long 0x457f5362,0x457f5362
+.long 0xe07764b1,0xe07764b1
+.long 0x84ae6bbb,0x84ae6bbb
+.long 0x1ca081fe,0x1ca081fe
+.long 0x942b08f9,0x942b08f9
+.long 0x58684870,0x58684870
+.long 0x19fd458f,0x19fd458f
+.long 0x876cde94,0x876cde94
+.long 0xb7f87b52,0xb7f87b52
+.long 0x23d373ab,0x23d373ab
+.long 0xe2024b72,0xe2024b72
+.long 0x578f1fe3,0x578f1fe3
+.long 0x2aab5566,0x2aab5566
+.long 0x0728ebb2,0x0728ebb2
+.long 0x03c2b52f,0x03c2b52f
+.long 0x9a7bc586,0x9a7bc586
+.long 0xa50837d3,0xa50837d3
+.long 0xf2872830,0xf2872830
+.long 0xb2a5bf23,0xb2a5bf23
+.long 0xba6a0302,0xba6a0302
+.long 0x5c8216ed,0x5c8216ed
+.long 0x2b1ccf8a,0x2b1ccf8a
+.long 0x92b479a7,0x92b479a7
+.long 0xf0f207f3,0xf0f207f3
+.long 0xa1e2694e,0xa1e2694e
+.long 0xcdf4da65,0xcdf4da65
+.long 0xd5be0506,0xd5be0506
+.long 0x1f6234d1,0x1f6234d1
+.long 0x8afea6c4,0x8afea6c4
+.long 0x9d532e34,0x9d532e34
+.long 0xa055f3a2,0xa055f3a2
+.long 0x32e18a05,0x32e18a05
+.long 0x75ebf6a4,0x75ebf6a4
+.long 0x39ec830b,0x39ec830b
+.long 0xaaef6040,0xaaef6040
+.long 0x069f715e,0x069f715e
+.long 0x51106ebd,0x51106ebd
+.long 0xf98a213e,0xf98a213e
+.long 0x3d06dd96,0x3d06dd96
+.long 0xae053edd,0xae053edd
+.long 0x46bde64d,0x46bde64d
+.long 0xb58d5491,0xb58d5491
+.long 0x055dc471,0x055dc471
+.long 0x6fd40604,0x6fd40604
+.long 0xff155060,0xff155060
+.long 0x24fb9819,0x24fb9819
+.long 0x97e9bdd6,0x97e9bdd6
+.long 0xcc434089,0xcc434089
+.long 0x779ed967,0x779ed967
+.long 0xbd42e8b0,0xbd42e8b0
+.long 0x888b8907,0x888b8907
+.long 0x385b19e7,0x385b19e7
+.long 0xdbeec879,0xdbeec879
+.long 0x470a7ca1,0x470a7ca1
+.long 0xe90f427c,0xe90f427c
+.long 0xc91e84f8,0xc91e84f8
+.long 0x00000000,0x00000000
+.long 0x83868009,0x83868009
+.long 0x48ed2b32,0x48ed2b32
+.long 0xac70111e,0xac70111e
+.long 0x4e725a6c,0x4e725a6c
+.long 0xfbff0efd,0xfbff0efd
+.long 0x5638850f,0x5638850f
+.long 0x1ed5ae3d,0x1ed5ae3d
+.long 0x27392d36,0x27392d36
+.long 0x64d90f0a,0x64d90f0a
+.long 0x21a65c68,0x21a65c68
+.long 0xd1545b9b,0xd1545b9b
+.long 0x3a2e3624,0x3a2e3624
+.long 0xb1670a0c,0xb1670a0c
+.long 0x0fe75793,0x0fe75793
+.long 0xd296eeb4,0xd296eeb4
+.long 0x9e919b1b,0x9e919b1b
+.long 0x4fc5c080,0x4fc5c080
+.long 0xa220dc61,0xa220dc61
+.long 0x694b775a,0x694b775a
+.long 0x161a121c,0x161a121c
+.long 0x0aba93e2,0x0aba93e2
+.long 0xe52aa0c0,0xe52aa0c0
+.long 0x43e0223c,0x43e0223c
+.long 0x1d171b12,0x1d171b12
+.long 0x0b0d090e,0x0b0d090e
+.long 0xadc78bf2,0xadc78bf2
+.long 0xb9a8b62d,0xb9a8b62d
+.long 0xc8a91e14,0xc8a91e14
+.long 0x8519f157,0x8519f157
+.long 0x4c0775af,0x4c0775af
+.long 0xbbdd99ee,0xbbdd99ee
+.long 0xfd607fa3,0xfd607fa3
+.long 0x9f2601f7,0x9f2601f7
+.long 0xbcf5725c,0xbcf5725c
+.long 0xc53b6644,0xc53b6644
+.long 0x347efb5b,0x347efb5b
+.long 0x7629438b,0x7629438b
+.long 0xdcc623cb,0xdcc623cb
+.long 0x68fcedb6,0x68fcedb6
+.long 0x63f1e4b8,0x63f1e4b8
+.long 0xcadc31d7,0xcadc31d7
+.long 0x10856342,0x10856342
+.long 0x40229713,0x40229713
+.long 0x2011c684,0x2011c684
+.long 0x7d244a85,0x7d244a85
+.long 0xf83dbbd2,0xf83dbbd2
+.long 0x1132f9ae,0x1132f9ae
+.long 0x6da129c7,0x6da129c7
+.long 0x4b2f9e1d,0x4b2f9e1d
+.long 0xf330b2dc,0xf330b2dc
+.long 0xec52860d,0xec52860d
+.long 0xd0e3c177,0xd0e3c177
+.long 0x6c16b32b,0x6c16b32b
+.long 0x99b970a9,0x99b970a9
+.long 0xfa489411,0xfa489411
+.long 0x2264e947,0x2264e947
+.long 0xc48cfca8,0xc48cfca8
+.long 0x1a3ff0a0,0x1a3ff0a0
+.long 0xd82c7d56,0xd82c7d56
+.long 0xef903322,0xef903322
+.long 0xc74e4987,0xc74e4987
+.long 0xc1d138d9,0xc1d138d9
+.long 0xfea2ca8c,0xfea2ca8c
+.long 0x360bd498,0x360bd498
+.long 0xcf81f5a6,0xcf81f5a6
+.long 0x28de7aa5,0x28de7aa5
+.long 0x268eb7da,0x268eb7da
+.long 0xa4bfad3f,0xa4bfad3f
+.long 0xe49d3a2c,0xe49d3a2c
+.long 0x0d927850,0x0d927850
+.long 0x9bcc5f6a,0x9bcc5f6a
+.long 0x62467e54,0x62467e54
+.long 0xc2138df6,0xc2138df6
+.long 0xe8b8d890,0xe8b8d890
+.long 0x5ef7392e,0x5ef7392e
+.long 0xf5afc382,0xf5afc382
+.long 0xbe805d9f,0xbe805d9f
+.long 0x7c93d069,0x7c93d069
+.long 0xa92dd56f,0xa92dd56f
+.long 0xb31225cf,0xb31225cf
+.long 0x3b99acc8,0x3b99acc8
+.long 0xa77d1810,0xa77d1810
+.long 0x6e639ce8,0x6e639ce8
+.long 0x7bbb3bdb,0x7bbb3bdb
+.long 0x097826cd,0x097826cd
+.long 0xf418596e,0xf418596e
+.long 0x01b79aec,0x01b79aec
+.long 0xa89a4f83,0xa89a4f83
+.long 0x656e95e6,0x656e95e6
+.long 0x7ee6ffaa,0x7ee6ffaa
+.long 0x08cfbc21,0x08cfbc21
+.long 0xe6e815ef,0xe6e815ef
+.long 0xd99be7ba,0xd99be7ba
+.long 0xce366f4a,0xce366f4a
+.long 0xd4099fea,0xd4099fea
+.long 0xd67cb029,0xd67cb029
+.long 0xafb2a431,0xafb2a431
+.long 0x31233f2a,0x31233f2a
+.long 0x3094a5c6,0x3094a5c6
+.long 0xc066a235,0xc066a235
+.long 0x37bc4e74,0x37bc4e74
+.long 0xa6ca82fc,0xa6ca82fc
+.long 0xb0d090e0,0xb0d090e0
+.long 0x15d8a733,0x15d8a733
+.long 0x4a9804f1,0x4a9804f1
+.long 0xf7daec41,0xf7daec41
+.long 0x0e50cd7f,0x0e50cd7f
+.long 0x2ff69117,0x2ff69117
+.long 0x8dd64d76,0x8dd64d76
+.long 0x4db0ef43,0x4db0ef43
+.long 0x544daacc,0x544daacc
+.long 0xdf0496e4,0xdf0496e4
+.long 0xe3b5d19e,0xe3b5d19e
+.long 0x1b886a4c,0x1b886a4c
+.long 0xb81f2cc1,0xb81f2cc1
+.long 0x7f516546,0x7f516546
+.long 0x04ea5e9d,0x04ea5e9d
+.long 0x5d358c01,0x5d358c01
+.long 0x737487fa,0x737487fa
+.long 0x2e410bfb,0x2e410bfb
+.long 0x5a1d67b3,0x5a1d67b3
+.long 0x52d2db92,0x52d2db92
+.long 0x335610e9,0x335610e9
+.long 0x1347d66d,0x1347d66d
+.long 0x8c61d79a,0x8c61d79a
+.long 0x7a0ca137,0x7a0ca137
+.long 0x8e14f859,0x8e14f859
+.long 0x893c13eb,0x893c13eb
+.long 0xee27a9ce,0xee27a9ce
+.long 0x35c961b7,0x35c961b7
+.long 0xede51ce1,0xede51ce1
+.long 0x3cb1477a,0x3cb1477a
+.long 0x59dfd29c,0x59dfd29c
+.long 0x3f73f255,0x3f73f255
+.long 0x79ce1418,0x79ce1418
+.long 0xbf37c773,0xbf37c773
+.long 0xeacdf753,0xeacdf753
+.long 0x5baafd5f,0x5baafd5f
+.long 0x146f3ddf,0x146f3ddf
+.long 0x86db4478,0x86db4478
+.long 0x81f3afca,0x81f3afca
+.long 0x3ec468b9,0x3ec468b9
+.long 0x2c342438,0x2c342438
+.long 0x5f40a3c2,0x5f40a3c2
+.long 0x72c31d16,0x72c31d16
+.long 0x0c25e2bc,0x0c25e2bc
+.long 0x8b493c28,0x8b493c28
+.long 0x41950dff,0x41950dff
+.long 0x7101a839,0x7101a839
+.long 0xdeb30c08,0xdeb30c08
+.long 0x9ce4b4d8,0x9ce4b4d8
+.long 0x90c15664,0x90c15664
+.long 0x6184cb7b,0x6184cb7b
+.long 0x70b632d5,0x70b632d5
+.long 0x745c6c48,0x745c6c48
+.long 0x4257b8d0,0x4257b8d0
+.byte 0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38
+.byte 0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb
+.byte 0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87
+.byte 0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb
+.byte 0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d
+.byte 0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e
+.byte 0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2
+.byte 0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25
+.byte 0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16
+.byte 0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92
+.byte 0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda
+.byte 0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84
+.byte 0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a
+.byte 0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06
+.byte 0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02
+.byte 0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b
+.byte 0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea
+.byte 0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73
+.byte 0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85
+.byte 0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e
+.byte 0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89
+.byte 0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b
+.byte 0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20
+.byte 0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4
+.byte 0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31
+.byte 0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f
+.byte 0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d
+.byte 0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef
+.byte 0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0
+.byte 0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61
+.byte 0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26
+.byte 0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d
+.long 0x80808080, 0x80808080, 0xfefefefe, 0xfefefefe
+.long 0x1b1b1b1b, 0x1b1b1b1b, 0, 0
+.byte 0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38
+.byte 0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb
+.byte 0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87
+.byte 0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb
+.byte 0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d
+.byte 0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e
+.byte 0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2
+.byte 0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25
+.byte 0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16
+.byte 0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92
+.byte 0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda
+.byte 0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84
+.byte 0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a
+.byte 0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06
+.byte 0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02
+.byte 0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b
+.byte 0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea
+.byte 0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73
+.byte 0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85
+.byte 0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e
+.byte 0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89
+.byte 0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b
+.byte 0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20
+.byte 0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4
+.byte 0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31
+.byte 0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f
+.byte 0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d
+.byte 0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef
+.byte 0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0
+.byte 0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61
+.byte 0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26
+.byte 0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d
+.long 0x80808080, 0x80808080, 0xfefefefe, 0xfefefefe
+.long 0x1b1b1b1b, 0x1b1b1b1b, 0, 0
+.byte 0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38
+.byte 0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb
+.byte 0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87
+.byte 0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb
+.byte 0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d
+.byte 0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e
+.byte 0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2
+.byte 0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25
+.byte 0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16
+.byte 0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92
+.byte 0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda
+.byte 0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84
+.byte 0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a
+.byte 0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06
+.byte 0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02
+.byte 0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b
+.byte 0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea
+.byte 0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73
+.byte 0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85
+.byte 0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e
+.byte 0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89
+.byte 0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b
+.byte 0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20
+.byte 0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4
+.byte 0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31
+.byte 0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f
+.byte 0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d
+.byte 0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef
+.byte 0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0
+.byte 0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61
+.byte 0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26
+.byte 0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d
+.long 0x80808080, 0x80808080, 0xfefefefe, 0xfefefefe
+.long 0x1b1b1b1b, 0x1b1b1b1b, 0, 0
+.byte 0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38
+.byte 0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb
+.byte 0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87
+.byte 0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb
+.byte 0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d
+.byte 0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e
+.byte 0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2
+.byte 0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25
+.byte 0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16
+.byte 0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92
+.byte 0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda
+.byte 0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84
+.byte 0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a
+.byte 0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06
+.byte 0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02
+.byte 0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b
+.byte 0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea
+.byte 0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73
+.byte 0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85
+.byte 0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e
+.byte 0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89
+.byte 0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b
+.byte 0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20
+.byte 0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4
+.byte 0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31
+.byte 0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f
+.byte 0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d
+.byte 0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef
+.byte 0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0
+.byte 0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61
+.byte 0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26
+.byte 0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d
+.long 0x80808080, 0x80808080, 0xfefefefe, 0xfefefefe
+.long 0x1b1b1b1b, 0x1b1b1b1b, 0, 0
+.byte 65,69,83,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
+.align 64
diff --git a/lib/libcrypto/arch/x86_64/aes.inc b/lib/libcrypto/arch/x86_64/aes.inc
new file mode 100644
index 00000000000..050fc0f617c
--- /dev/null
+++ b/lib/libcrypto/arch/x86_64/aes.inc
@@ -0,0 +1,3 @@
+.PATH.S: ${.PARSEDIR}
+AES_SRCS = aes-x86_64.S
+.include "../../aes.inc"
diff --git a/lib/libcrypto/arch/x86_64/md5-x86_64.S b/lib/libcrypto/arch/x86_64/md5-x86_64.S
new file mode 100644
index 00000000000..2adb2fc7944
--- /dev/null
+++ b/lib/libcrypto/arch/x86_64/md5-x86_64.S
@@ -0,0 +1,665 @@
+.text
+.align 16
+
+.globl md5_block_asm_data_order
+.type md5_block_asm_data_order,@function
+md5_block_asm_data_order:
+ pushq %rbp
+ pushq %rbx
+ pushq %r12
+ pushq %r14
+ pushq %r15
+
+
+
+
+ movq %rdi,%rbp
+ shlq $6,%rdx
+ leaq (%rsi,%rdx,1),%rdi
+ movl 0(%rbp),%eax
+ movl 4(%rbp),%ebx
+ movl 8(%rbp),%ecx
+ movl 12(%rbp),%edx
+
+
+
+
+
+
+
+ cmpq %rdi,%rsi
+ je .Lend
+
+
+.Lloop:
+ movl %eax,%r8d
+ movl %ebx,%r9d
+ movl %ecx,%r14d
+ movl %edx,%r15d
+ movl 0(%rsi),%r10d
+ movl %edx,%r11d
+ xorl %ecx,%r11d
+ leal 3614090360(%rax,%r10,1),%eax
+ andl %ebx,%r11d
+ xorl %edx,%r11d
+ movl 4(%rsi),%r10d
+ addl %r11d,%eax
+ roll $7,%eax
+ movl %ecx,%r11d
+ addl %ebx,%eax
+ xorl %ebx,%r11d
+ leal 3905402710(%rdx,%r10,1),%edx
+ andl %eax,%r11d
+ xorl %ecx,%r11d
+ movl 8(%rsi),%r10d
+ addl %r11d,%edx
+ roll $12,%edx
+ movl %ebx,%r11d
+ addl %eax,%edx
+ xorl %eax,%r11d
+ leal 606105819(%rcx,%r10,1),%ecx
+ andl %edx,%r11d
+ xorl %ebx,%r11d
+ movl 12(%rsi),%r10d
+ addl %r11d,%ecx
+ roll $17,%ecx
+ movl %eax,%r11d
+ addl %edx,%ecx
+ xorl %edx,%r11d
+ leal 3250441966(%rbx,%r10,1),%ebx
+ andl %ecx,%r11d
+ xorl %eax,%r11d
+ movl 16(%rsi),%r10d
+ addl %r11d,%ebx
+ roll $22,%ebx
+ movl %edx,%r11d
+ addl %ecx,%ebx
+ xorl %ecx,%r11d
+ leal 4118548399(%rax,%r10,1),%eax
+ andl %ebx,%r11d
+ xorl %edx,%r11d
+ movl 20(%rsi),%r10d
+ addl %r11d,%eax
+ roll $7,%eax
+ movl %ecx,%r11d
+ addl %ebx,%eax
+ xorl %ebx,%r11d
+ leal 1200080426(%rdx,%r10,1),%edx
+ andl %eax,%r11d
+ xorl %ecx,%r11d
+ movl 24(%rsi),%r10d
+ addl %r11d,%edx
+ roll $12,%edx
+ movl %ebx,%r11d
+ addl %eax,%edx
+ xorl %eax,%r11d
+ leal 2821735955(%rcx,%r10,1),%ecx
+ andl %edx,%r11d
+ xorl %ebx,%r11d
+ movl 28(%rsi),%r10d
+ addl %r11d,%ecx
+ roll $17,%ecx
+ movl %eax,%r11d
+ addl %edx,%ecx
+ xorl %edx,%r11d
+ leal 4249261313(%rbx,%r10,1),%ebx
+ andl %ecx,%r11d
+ xorl %eax,%r11d
+ movl 32(%rsi),%r10d
+ addl %r11d,%ebx
+ roll $22,%ebx
+ movl %edx,%r11d
+ addl %ecx,%ebx
+ xorl %ecx,%r11d
+ leal 1770035416(%rax,%r10,1),%eax
+ andl %ebx,%r11d
+ xorl %edx,%r11d
+ movl 36(%rsi),%r10d
+ addl %r11d,%eax
+ roll $7,%eax
+ movl %ecx,%r11d
+ addl %ebx,%eax
+ xorl %ebx,%r11d
+ leal 2336552879(%rdx,%r10,1),%edx
+ andl %eax,%r11d
+ xorl %ecx,%r11d
+ movl 40(%rsi),%r10d
+ addl %r11d,%edx
+ roll $12,%edx
+ movl %ebx,%r11d
+ addl %eax,%edx
+ xorl %eax,%r11d
+ leal 4294925233(%rcx,%r10,1),%ecx
+ andl %edx,%r11d
+ xorl %ebx,%r11d
+ movl 44(%rsi),%r10d
+ addl %r11d,%ecx
+ roll $17,%ecx
+ movl %eax,%r11d
+ addl %edx,%ecx
+ xorl %edx,%r11d
+ leal 2304563134(%rbx,%r10,1),%ebx
+ andl %ecx,%r11d
+ xorl %eax,%r11d
+ movl 48(%rsi),%r10d
+ addl %r11d,%ebx
+ roll $22,%ebx
+ movl %edx,%r11d
+ addl %ecx,%ebx
+ xorl %ecx,%r11d
+ leal 1804603682(%rax,%r10,1),%eax
+ andl %ebx,%r11d
+ xorl %edx,%r11d
+ movl 52(%rsi),%r10d
+ addl %r11d,%eax
+ roll $7,%eax
+ movl %ecx,%r11d
+ addl %ebx,%eax
+ xorl %ebx,%r11d
+ leal 4254626195(%rdx,%r10,1),%edx
+ andl %eax,%r11d
+ xorl %ecx,%r11d
+ movl 56(%rsi),%r10d
+ addl %r11d,%edx
+ roll $12,%edx
+ movl %ebx,%r11d
+ addl %eax,%edx
+ xorl %eax,%r11d
+ leal 2792965006(%rcx,%r10,1),%ecx
+ andl %edx,%r11d
+ xorl %ebx,%r11d
+ movl 60(%rsi),%r10d
+ addl %r11d,%ecx
+ roll $17,%ecx
+ movl %eax,%r11d
+ addl %edx,%ecx
+ xorl %edx,%r11d
+ leal 1236535329(%rbx,%r10,1),%ebx
+ andl %ecx,%r11d
+ xorl %eax,%r11d
+ movl 0(%rsi),%r10d
+ addl %r11d,%ebx
+ roll $22,%ebx
+ movl %edx,%r11d
+ addl %ecx,%ebx
+ movl 4(%rsi),%r10d
+ movl %edx,%r11d
+ movl %edx,%r12d
+ notl %r11d
+ leal 4129170786(%rax,%r10,1),%eax
+ andl %ebx,%r12d
+ andl %ecx,%r11d
+ movl 24(%rsi),%r10d
+ orl %r11d,%r12d
+ movl %ecx,%r11d
+ addl %r12d,%eax
+ movl %ecx,%r12d
+ roll $5,%eax
+ addl %ebx,%eax
+ notl %r11d
+ leal 3225465664(%rdx,%r10,1),%edx
+ andl %eax,%r12d
+ andl %ebx,%r11d
+ movl 44(%rsi),%r10d
+ orl %r11d,%r12d
+ movl %ebx,%r11d
+ addl %r12d,%edx
+ movl %ebx,%r12d
+ roll $9,%edx
+ addl %eax,%edx
+ notl %r11d
+ leal 643717713(%rcx,%r10,1),%ecx
+ andl %edx,%r12d
+ andl %eax,%r11d
+ movl 0(%rsi),%r10d
+ orl %r11d,%r12d
+ movl %eax,%r11d
+ addl %r12d,%ecx
+ movl %eax,%r12d
+ roll $14,%ecx
+ addl %edx,%ecx
+ notl %r11d
+ leal 3921069994(%rbx,%r10,1),%ebx
+ andl %ecx,%r12d
+ andl %edx,%r11d
+ movl 20(%rsi),%r10d
+ orl %r11d,%r12d
+ movl %edx,%r11d
+ addl %r12d,%ebx
+ movl %edx,%r12d
+ roll $20,%ebx
+ addl %ecx,%ebx
+ notl %r11d
+ leal 3593408605(%rax,%r10,1),%eax
+ andl %ebx,%r12d
+ andl %ecx,%r11d
+ movl 40(%rsi),%r10d
+ orl %r11d,%r12d
+ movl %ecx,%r11d
+ addl %r12d,%eax
+ movl %ecx,%r12d
+ roll $5,%eax
+ addl %ebx,%eax
+ notl %r11d
+ leal 38016083(%rdx,%r10,1),%edx
+ andl %eax,%r12d
+ andl %ebx,%r11d
+ movl 60(%rsi),%r10d
+ orl %r11d,%r12d
+ movl %ebx,%r11d
+ addl %r12d,%edx
+ movl %ebx,%r12d
+ roll $9,%edx
+ addl %eax,%edx
+ notl %r11d
+ leal 3634488961(%rcx,%r10,1),%ecx
+ andl %edx,%r12d
+ andl %eax,%r11d
+ movl 16(%rsi),%r10d
+ orl %r11d,%r12d
+ movl %eax,%r11d
+ addl %r12d,%ecx
+ movl %eax,%r12d
+ roll $14,%ecx
+ addl %edx,%ecx
+ notl %r11d
+ leal 3889429448(%rbx,%r10,1),%ebx
+ andl %ecx,%r12d
+ andl %edx,%r11d
+ movl 36(%rsi),%r10d
+ orl %r11d,%r12d
+ movl %edx,%r11d
+ addl %r12d,%ebx
+ movl %edx,%r12d
+ roll $20,%ebx
+ addl %ecx,%ebx
+ notl %r11d
+ leal 568446438(%rax,%r10,1),%eax
+ andl %ebx,%r12d
+ andl %ecx,%r11d
+ movl 56(%rsi),%r10d
+ orl %r11d,%r12d
+ movl %ecx,%r11d
+ addl %r12d,%eax
+ movl %ecx,%r12d
+ roll $5,%eax
+ addl %ebx,%eax
+ notl %r11d
+ leal 3275163606(%rdx,%r10,1),%edx
+ andl %eax,%r12d
+ andl %ebx,%r11d
+ movl 12(%rsi),%r10d
+ orl %r11d,%r12d
+ movl %ebx,%r11d
+ addl %r12d,%edx
+ movl %ebx,%r12d
+ roll $9,%edx
+ addl %eax,%edx
+ notl %r11d
+ leal 4107603335(%rcx,%r10,1),%ecx
+ andl %edx,%r12d
+ andl %eax,%r11d
+ movl 32(%rsi),%r10d
+ orl %r11d,%r12d
+ movl %eax,%r11d
+ addl %r12d,%ecx
+ movl %eax,%r12d
+ roll $14,%ecx
+ addl %edx,%ecx
+ notl %r11d
+ leal 1163531501(%rbx,%r10,1),%ebx
+ andl %ecx,%r12d
+ andl %edx,%r11d
+ movl 52(%rsi),%r10d
+ orl %r11d,%r12d
+ movl %edx,%r11d
+ addl %r12d,%ebx
+ movl %edx,%r12d
+ roll $20,%ebx
+ addl %ecx,%ebx
+ notl %r11d
+ leal 2850285829(%rax,%r10,1),%eax
+ andl %ebx,%r12d
+ andl %ecx,%r11d
+ movl 8(%rsi),%r10d
+ orl %r11d,%r12d
+ movl %ecx,%r11d
+ addl %r12d,%eax
+ movl %ecx,%r12d
+ roll $5,%eax
+ addl %ebx,%eax
+ notl %r11d
+ leal 4243563512(%rdx,%r10,1),%edx
+ andl %eax,%r12d
+ andl %ebx,%r11d
+ movl 28(%rsi),%r10d
+ orl %r11d,%r12d
+ movl %ebx,%r11d
+ addl %r12d,%edx
+ movl %ebx,%r12d
+ roll $9,%edx
+ addl %eax,%edx
+ notl %r11d
+ leal 1735328473(%rcx,%r10,1),%ecx
+ andl %edx,%r12d
+ andl %eax,%r11d
+ movl 48(%rsi),%r10d
+ orl %r11d,%r12d
+ movl %eax,%r11d
+ addl %r12d,%ecx
+ movl %eax,%r12d
+ roll $14,%ecx
+ addl %edx,%ecx
+ notl %r11d
+ leal 2368359562(%rbx,%r10,1),%ebx
+ andl %ecx,%r12d
+ andl %edx,%r11d
+ movl 0(%rsi),%r10d
+ orl %r11d,%r12d
+ movl %edx,%r11d
+ addl %r12d,%ebx
+ movl %edx,%r12d
+ roll $20,%ebx
+ addl %ecx,%ebx
+ movl 20(%rsi),%r10d
+ movl %ecx,%r11d
+ leal 4294588738(%rax,%r10,1),%eax
+ movl 32(%rsi),%r10d
+ xorl %edx,%r11d
+ xorl %ebx,%r11d
+ addl %r11d,%eax
+ roll $4,%eax
+ movl %ebx,%r11d
+ addl %ebx,%eax
+ leal 2272392833(%rdx,%r10,1),%edx
+ movl 44(%rsi),%r10d
+ xorl %ecx,%r11d
+ xorl %eax,%r11d
+ addl %r11d,%edx
+ roll $11,%edx
+ movl %eax,%r11d
+ addl %eax,%edx
+ leal 1839030562(%rcx,%r10,1),%ecx
+ movl 56(%rsi),%r10d
+ xorl %ebx,%r11d
+ xorl %edx,%r11d
+ addl %r11d,%ecx
+ roll $16,%ecx
+ movl %edx,%r11d
+ addl %edx,%ecx
+ leal 4259657740(%rbx,%r10,1),%ebx
+ movl 4(%rsi),%r10d
+ xorl %eax,%r11d
+ xorl %ecx,%r11d
+ addl %r11d,%ebx
+ roll $23,%ebx
+ movl %ecx,%r11d
+ addl %ecx,%ebx
+ leal 2763975236(%rax,%r10,1),%eax
+ movl 16(%rsi),%r10d
+ xorl %edx,%r11d
+ xorl %ebx,%r11d
+ addl %r11d,%eax
+ roll $4,%eax
+ movl %ebx,%r11d
+ addl %ebx,%eax
+ leal 1272893353(%rdx,%r10,1),%edx
+ movl 28(%rsi),%r10d
+ xorl %ecx,%r11d
+ xorl %eax,%r11d
+ addl %r11d,%edx
+ roll $11,%edx
+ movl %eax,%r11d
+ addl %eax,%edx
+ leal 4139469664(%rcx,%r10,1),%ecx
+ movl 40(%rsi),%r10d
+ xorl %ebx,%r11d
+ xorl %edx,%r11d
+ addl %r11d,%ecx
+ roll $16,%ecx
+ movl %edx,%r11d
+ addl %edx,%ecx
+ leal 3200236656(%rbx,%r10,1),%ebx
+ movl 52(%rsi),%r10d
+ xorl %eax,%r11d
+ xorl %ecx,%r11d
+ addl %r11d,%ebx
+ roll $23,%ebx
+ movl %ecx,%r11d
+ addl %ecx,%ebx
+ leal 681279174(%rax,%r10,1),%eax
+ movl 0(%rsi),%r10d
+ xorl %edx,%r11d
+ xorl %ebx,%r11d
+ addl %r11d,%eax
+ roll $4,%eax
+ movl %ebx,%r11d
+ addl %ebx,%eax
+ leal 3936430074(%rdx,%r10,1),%edx
+ movl 12(%rsi),%r10d
+ xorl %ecx,%r11d
+ xorl %eax,%r11d
+ addl %r11d,%edx
+ roll $11,%edx
+ movl %eax,%r11d
+ addl %eax,%edx
+ leal 3572445317(%rcx,%r10,1),%ecx
+ movl 24(%rsi),%r10d
+ xorl %ebx,%r11d
+ xorl %edx,%r11d
+ addl %r11d,%ecx
+ roll $16,%ecx
+ movl %edx,%r11d
+ addl %edx,%ecx
+ leal 76029189(%rbx,%r10,1),%ebx
+ movl 36(%rsi),%r10d
+ xorl %eax,%r11d
+ xorl %ecx,%r11d
+ addl %r11d,%ebx
+ roll $23,%ebx
+ movl %ecx,%r11d
+ addl %ecx,%ebx
+ leal 3654602809(%rax,%r10,1),%eax
+ movl 48(%rsi),%r10d
+ xorl %edx,%r11d
+ xorl %ebx,%r11d
+ addl %r11d,%eax
+ roll $4,%eax
+ movl %ebx,%r11d
+ addl %ebx,%eax
+ leal 3873151461(%rdx,%r10,1),%edx
+ movl 60(%rsi),%r10d
+ xorl %ecx,%r11d
+ xorl %eax,%r11d
+ addl %r11d,%edx
+ roll $11,%edx
+ movl %eax,%r11d
+ addl %eax,%edx
+ leal 530742520(%rcx,%r10,1),%ecx
+ movl 8(%rsi),%r10d
+ xorl %ebx,%r11d
+ xorl %edx,%r11d
+ addl %r11d,%ecx
+ roll $16,%ecx
+ movl %edx,%r11d
+ addl %edx,%ecx
+ leal 3299628645(%rbx,%r10,1),%ebx
+ movl 0(%rsi),%r10d
+ xorl %eax,%r11d
+ xorl %ecx,%r11d
+ addl %r11d,%ebx
+ roll $23,%ebx
+ movl %ecx,%r11d
+ addl %ecx,%ebx
+ movl 0(%rsi),%r10d
+ movl $4294967295,%r11d
+ xorl %edx,%r11d
+ leal 4096336452(%rax,%r10,1),%eax
+ orl %ebx,%r11d
+ xorl %ecx,%r11d
+ addl %r11d,%eax
+ movl 28(%rsi),%r10d
+ movl $4294967295,%r11d
+ roll $6,%eax
+ xorl %ecx,%r11d
+ addl %ebx,%eax
+ leal 1126891415(%rdx,%r10,1),%edx
+ orl %eax,%r11d
+ xorl %ebx,%r11d
+ addl %r11d,%edx
+ movl 56(%rsi),%r10d
+ movl $4294967295,%r11d
+ roll $10,%edx
+ xorl %ebx,%r11d
+ addl %eax,%edx
+ leal 2878612391(%rcx,%r10,1),%ecx
+ orl %edx,%r11d
+ xorl %eax,%r11d
+ addl %r11d,%ecx
+ movl 20(%rsi),%r10d
+ movl $4294967295,%r11d
+ roll $15,%ecx
+ xorl %eax,%r11d
+ addl %edx,%ecx
+ leal 4237533241(%rbx,%r10,1),%ebx
+ orl %ecx,%r11d
+ xorl %edx,%r11d
+ addl %r11d,%ebx
+ movl 48(%rsi),%r10d
+ movl $4294967295,%r11d
+ roll $21,%ebx
+ xorl %edx,%r11d
+ addl %ecx,%ebx
+ leal 1700485571(%rax,%r10,1),%eax
+ orl %ebx,%r11d
+ xorl %ecx,%r11d
+ addl %r11d,%eax
+ movl 12(%rsi),%r10d
+ movl $4294967295,%r11d
+ roll $6,%eax
+ xorl %ecx,%r11d
+ addl %ebx,%eax
+ leal 2399980690(%rdx,%r10,1),%edx
+ orl %eax,%r11d
+ xorl %ebx,%r11d
+ addl %r11d,%edx
+ movl 40(%rsi),%r10d
+ movl $4294967295,%r11d
+ roll $10,%edx
+ xorl %ebx,%r11d
+ addl %eax,%edx
+ leal 4293915773(%rcx,%r10,1),%ecx
+ orl %edx,%r11d
+ xorl %eax,%r11d
+ addl %r11d,%ecx
+ movl 4(%rsi),%r10d
+ movl $4294967295,%r11d
+ roll $15,%ecx
+ xorl %eax,%r11d
+ addl %edx,%ecx
+ leal 2240044497(%rbx,%r10,1),%ebx
+ orl %ecx,%r11d
+ xorl %edx,%r11d
+ addl %r11d,%ebx
+ movl 32(%rsi),%r10d
+ movl $4294967295,%r11d
+ roll $21,%ebx
+ xorl %edx,%r11d
+ addl %ecx,%ebx
+ leal 1873313359(%rax,%r10,1),%eax
+ orl %ebx,%r11d
+ xorl %ecx,%r11d
+ addl %r11d,%eax
+ movl 60(%rsi),%r10d
+ movl $4294967295,%r11d
+ roll $6,%eax
+ xorl %ecx,%r11d
+ addl %ebx,%eax
+ leal 4264355552(%rdx,%r10,1),%edx
+ orl %eax,%r11d
+ xorl %ebx,%r11d
+ addl %r11d,%edx
+ movl 24(%rsi),%r10d
+ movl $4294967295,%r11d
+ roll $10,%edx
+ xorl %ebx,%r11d
+ addl %eax,%edx
+ leal 2734768916(%rcx,%r10,1),%ecx
+ orl %edx,%r11d
+ xorl %eax,%r11d
+ addl %r11d,%ecx
+ movl 52(%rsi),%r10d
+ movl $4294967295,%r11d
+ roll $15,%ecx
+ xorl %eax,%r11d
+ addl %edx,%ecx
+ leal 1309151649(%rbx,%r10,1),%ebx
+ orl %ecx,%r11d
+ xorl %edx,%r11d
+ addl %r11d,%ebx
+ movl 16(%rsi),%r10d
+ movl $4294967295,%r11d
+ roll $21,%ebx
+ xorl %edx,%r11d
+ addl %ecx,%ebx
+ leal 4149444226(%rax,%r10,1),%eax
+ orl %ebx,%r11d
+ xorl %ecx,%r11d
+ addl %r11d,%eax
+ movl 44(%rsi),%r10d
+ movl $4294967295,%r11d
+ roll $6,%eax
+ xorl %ecx,%r11d
+ addl %ebx,%eax
+ leal 3174756917(%rdx,%r10,1),%edx
+ orl %eax,%r11d
+ xorl %ebx,%r11d
+ addl %r11d,%edx
+ movl 8(%rsi),%r10d
+ movl $4294967295,%r11d
+ roll $10,%edx
+ xorl %ebx,%r11d
+ addl %eax,%edx
+ leal 718787259(%rcx,%r10,1),%ecx
+ orl %edx,%r11d
+ xorl %eax,%r11d
+ addl %r11d,%ecx
+ movl 36(%rsi),%r10d
+ movl $4294967295,%r11d
+ roll $15,%ecx
+ xorl %eax,%r11d
+ addl %edx,%ecx
+ leal 3951481745(%rbx,%r10,1),%ebx
+ orl %ecx,%r11d
+ xorl %edx,%r11d
+ addl %r11d,%ebx
+ movl 0(%rsi),%r10d
+ movl $4294967295,%r11d
+ roll $21,%ebx
+ xorl %edx,%r11d
+ addl %ecx,%ebx
+
+ addl %r8d,%eax
+ addl %r9d,%ebx
+ addl %r14d,%ecx
+ addl %r15d,%edx
+
+
+ addq $64,%rsi
+ cmpq %rdi,%rsi
+ jb .Lloop
+
+
+.Lend:
+ movl %eax,0(%rbp)
+ movl %ebx,4(%rbp)
+ movl %ecx,8(%rbp)
+ movl %edx,12(%rbp)
+
+ popq %r15
+ popq %r14
+ popq %r12
+ popq %rbx
+ popq %rbp
+ .byte 0xf3,0xc3
+.size md5_block_asm_data_order,.-md5_block_asm_data_order
diff --git a/lib/libcrypto/arch/x86_64/rc4-x86_64.S b/lib/libcrypto/arch/x86_64/rc4-x86_64.S
new file mode 100644
index 00000000000..e0f7b5c82b8
--- /dev/null
+++ b/lib/libcrypto/arch/x86_64/rc4-x86_64.S
@@ -0,0 +1,415 @@
+.text
+
+.globl RC4
+.type RC4,@function
+.align 16
+RC4: orq %rsi,%rsi
+ jne .Lentry
+ .byte 0xf3,0xc3
+.Lentry:
+ pushq %r12
+ pushq %r13
+
+ addq $8,%rdi
+ movl -8(%rdi),%r8d
+ movl -4(%rdi),%r12d
+ cmpl $-1,256(%rdi)
+ je .LRC4_CHAR
+ incb %r8b
+ movl (%rdi,%r8,4),%r9d
+ testq $-8,%rsi
+ jz .Lloop1
+ jmp .Lloop8
+.align 16
+.Lloop8:
+ addb %r9b,%r12b
+ movq %r8,%r10
+ movl (%rdi,%r12,4),%r13d
+ rorq $8,%rax
+ incb %r10b
+ movl (%rdi,%r10,4),%r11d
+ cmpq %r10,%r12
+ movl %r9d,(%rdi,%r12,4)
+ cmoveq %r9,%r11
+ movl %r13d,(%rdi,%r8,4)
+ addb %r9b,%r13b
+ movb (%rdi,%r13,4),%al
+ addb %r11b,%r12b
+ movq %r10,%r8
+ movl (%rdi,%r12,4),%r13d
+ rorq $8,%rax
+ incb %r8b
+ movl (%rdi,%r8,4),%r9d
+ cmpq %r8,%r12
+ movl %r11d,(%rdi,%r12,4)
+ cmoveq %r11,%r9
+ movl %r13d,(%rdi,%r10,4)
+ addb %r11b,%r13b
+ movb (%rdi,%r13,4),%al
+ addb %r9b,%r12b
+ movq %r8,%r10
+ movl (%rdi,%r12,4),%r13d
+ rorq $8,%rax
+ incb %r10b
+ movl (%rdi,%r10,4),%r11d
+ cmpq %r10,%r12
+ movl %r9d,(%rdi,%r12,4)
+ cmoveq %r9,%r11
+ movl %r13d,(%rdi,%r8,4)
+ addb %r9b,%r13b
+ movb (%rdi,%r13,4),%al
+ addb %r11b,%r12b
+ movq %r10,%r8
+ movl (%rdi,%r12,4),%r13d
+ rorq $8,%rax
+ incb %r8b
+ movl (%rdi,%r8,4),%r9d
+ cmpq %r8,%r12
+ movl %r11d,(%rdi,%r12,4)
+ cmoveq %r11,%r9
+ movl %r13d,(%rdi,%r10,4)
+ addb %r11b,%r13b
+ movb (%rdi,%r13,4),%al
+ addb %r9b,%r12b
+ movq %r8,%r10
+ movl (%rdi,%r12,4),%r13d
+ rorq $8,%rax
+ incb %r10b
+ movl (%rdi,%r10,4),%r11d
+ cmpq %r10,%r12
+ movl %r9d,(%rdi,%r12,4)
+ cmoveq %r9,%r11
+ movl %r13d,(%rdi,%r8,4)
+ addb %r9b,%r13b
+ movb (%rdi,%r13,4),%al
+ addb %r11b,%r12b
+ movq %r10,%r8
+ movl (%rdi,%r12,4),%r13d
+ rorq $8,%rax
+ incb %r8b
+ movl (%rdi,%r8,4),%r9d
+ cmpq %r8,%r12
+ movl %r11d,(%rdi,%r12,4)
+ cmoveq %r11,%r9
+ movl %r13d,(%rdi,%r10,4)
+ addb %r11b,%r13b
+ movb (%rdi,%r13,4),%al
+ addb %r9b,%r12b
+ movq %r8,%r10
+ movl (%rdi,%r12,4),%r13d
+ rorq $8,%rax
+ incb %r10b
+ movl (%rdi,%r10,4),%r11d
+ cmpq %r10,%r12
+ movl %r9d,(%rdi,%r12,4)
+ cmoveq %r9,%r11
+ movl %r13d,(%rdi,%r8,4)
+ addb %r9b,%r13b
+ movb (%rdi,%r13,4),%al
+ addb %r11b,%r12b
+ movq %r10,%r8
+ movl (%rdi,%r12,4),%r13d
+ rorq $8,%rax
+ incb %r8b
+ movl (%rdi,%r8,4),%r9d
+ cmpq %r8,%r12
+ movl %r11d,(%rdi,%r12,4)
+ cmoveq %r11,%r9
+ movl %r13d,(%rdi,%r10,4)
+ addb %r11b,%r13b
+ movb (%rdi,%r13,4),%al
+ rorq $8,%rax
+ subq $8,%rsi
+
+ xorq (%rdx),%rax
+ addq $8,%rdx
+ movq %rax,(%rcx)
+ addq $8,%rcx
+
+ testq $-8,%rsi
+ jnz .Lloop8
+ cmpq $0,%rsi
+ jne .Lloop1
+.Lexit:
+ subb $1,%r8b
+ movl %r8d,-8(%rdi)
+ movl %r12d,-4(%rdi)
+
+ popq %r13
+ popq %r12
+ .byte 0xf3,0xc3
+.align 16
+.Lloop1:
+ addb %r9b,%r12b
+ movl (%rdi,%r12,4),%r13d
+ movl %r9d,(%rdi,%r12,4)
+ movl %r13d,(%rdi,%r8,4)
+ addb %r13b,%r9b
+ incb %r8b
+ movl (%rdi,%r9,4),%r13d
+ movl (%rdi,%r8,4),%r9d
+ xorb (%rdx),%r13b
+ incq %rdx
+ movb %r13b,(%rcx)
+ incq %rcx
+ decq %rsi
+ jnz .Lloop1
+ jmp .Lexit
+
+.align 16
+.LRC4_CHAR:
+ addb $1,%r8b
+ movzbl (%rdi,%r8,1),%r9d
+ testq $-8,%rsi
+ jz .Lcloop1
+ cmpl $0,260(%rdi)
+ jnz .Lcloop1
+ pushq %rbx
+ jmp .Lcloop8
+.align 16
+.Lcloop8:
+ movl (%rdx),%eax
+ movl 4(%rdx),%ebx
+ addb %r9b,%r12b
+ leaq 1(%r8),%r10
+ movzbl (%rdi,%r12,1),%r13d
+ movzbl %r10b,%r10d
+ movzbl (%rdi,%r10,1),%r11d
+ movb %r9b,(%rdi,%r12,1)
+ cmpq %r10,%r12
+ movb %r13b,(%rdi,%r8,1)
+ jne .Lcmov0
+ movq %r9,%r11
+.Lcmov0:
+ addb %r9b,%r13b
+ xorb (%rdi,%r13,1),%al
+ rorl $8,%eax
+ addb %r11b,%r12b
+ leaq 1(%r10),%r8
+ movzbl (%rdi,%r12,1),%r13d
+ movzbl %r8b,%r8d
+ movzbl (%rdi,%r8,1),%r9d
+ movb %r11b,(%rdi,%r12,1)
+ cmpq %r8,%r12
+ movb %r13b,(%rdi,%r10,1)
+ jne .Lcmov1
+ movq %r11,%r9
+.Lcmov1:
+ addb %r11b,%r13b
+ xorb (%rdi,%r13,1),%al
+ rorl $8,%eax
+ addb %r9b,%r12b
+ leaq 1(%r8),%r10
+ movzbl (%rdi,%r12,1),%r13d
+ movzbl %r10b,%r10d
+ movzbl (%rdi,%r10,1),%r11d
+ movb %r9b,(%rdi,%r12,1)
+ cmpq %r10,%r12
+ movb %r13b,(%rdi,%r8,1)
+ jne .Lcmov2
+ movq %r9,%r11
+.Lcmov2:
+ addb %r9b,%r13b
+ xorb (%rdi,%r13,1),%al
+ rorl $8,%eax
+ addb %r11b,%r12b
+ leaq 1(%r10),%r8
+ movzbl (%rdi,%r12,1),%r13d
+ movzbl %r8b,%r8d
+ movzbl (%rdi,%r8,1),%r9d
+ movb %r11b,(%rdi,%r12,1)
+ cmpq %r8,%r12
+ movb %r13b,(%rdi,%r10,1)
+ jne .Lcmov3
+ movq %r11,%r9
+.Lcmov3:
+ addb %r11b,%r13b
+ xorb (%rdi,%r13,1),%al
+ rorl $8,%eax
+ addb %r9b,%r12b
+ leaq 1(%r8),%r10
+ movzbl (%rdi,%r12,1),%r13d
+ movzbl %r10b,%r10d
+ movzbl (%rdi,%r10,1),%r11d
+ movb %r9b,(%rdi,%r12,1)
+ cmpq %r10,%r12
+ movb %r13b,(%rdi,%r8,1)
+ jne .Lcmov4
+ movq %r9,%r11
+.Lcmov4:
+ addb %r9b,%r13b
+ xorb (%rdi,%r13,1),%bl
+ rorl $8,%ebx
+ addb %r11b,%r12b
+ leaq 1(%r10),%r8
+ movzbl (%rdi,%r12,1),%r13d
+ movzbl %r8b,%r8d
+ movzbl (%rdi,%r8,1),%r9d
+ movb %r11b,(%rdi,%r12,1)
+ cmpq %r8,%r12
+ movb %r13b,(%rdi,%r10,1)
+ jne .Lcmov5
+ movq %r11,%r9
+.Lcmov5:
+ addb %r11b,%r13b
+ xorb (%rdi,%r13,1),%bl
+ rorl $8,%ebx
+ addb %r9b,%r12b
+ leaq 1(%r8),%r10
+ movzbl (%rdi,%r12,1),%r13d
+ movzbl %r10b,%r10d
+ movzbl (%rdi,%r10,1),%r11d
+ movb %r9b,(%rdi,%r12,1)
+ cmpq %r10,%r12
+ movb %r13b,(%rdi,%r8,1)
+ jne .Lcmov6
+ movq %r9,%r11
+.Lcmov6:
+ addb %r9b,%r13b
+ xorb (%rdi,%r13,1),%bl
+ rorl $8,%ebx
+ addb %r11b,%r12b
+ leaq 1(%r10),%r8
+ movzbl (%rdi,%r12,1),%r13d
+ movzbl %r8b,%r8d
+ movzbl (%rdi,%r8,1),%r9d
+ movb %r11b,(%rdi,%r12,1)
+ cmpq %r8,%r12
+ movb %r13b,(%rdi,%r10,1)
+ jne .Lcmov7
+ movq %r11,%r9
+.Lcmov7:
+ addb %r11b,%r13b
+ xorb (%rdi,%r13,1),%bl
+ rorl $8,%ebx
+ leaq -8(%rsi),%rsi
+ movl %eax,(%rcx)
+ leaq 8(%rdx),%rdx
+ movl %ebx,4(%rcx)
+ leaq 8(%rcx),%rcx
+
+ testq $-8,%rsi
+ jnz .Lcloop8
+ popq %rbx
+ cmpq $0,%rsi
+ jne .Lcloop1
+ jmp .Lexit
+.align 16
+.Lcloop1:
+ addb %r9b,%r12b
+ movzbl (%rdi,%r12,1),%r13d
+ movb %r9b,(%rdi,%r12,1)
+ movb %r13b,(%rdi,%r8,1)
+ addb %r9b,%r13b
+ addb $1,%r8b
+ movzbl %r13b,%r13d
+ movzbl %r8b,%r8d
+ movzbl (%rdi,%r13,1),%r13d
+ movzbl (%rdi,%r8,1),%r9d
+ xorb (%rdx),%r13b
+ leaq 1(%rdx),%rdx
+ movb %r13b,(%rcx)
+ leaq 1(%rcx),%rcx
+ subq $1,%rsi
+ jnz .Lcloop1
+ jmp .Lexit
+.size RC4,.-RC4
+
+.globl RC4_set_key
+.type RC4_set_key,@function
+.align 16
+RC4_set_key:
+ leaq 8(%rdi),%rdi
+ leaq (%rdx,%rsi,1),%rdx
+ negq %rsi
+ movq %rsi,%rcx
+ xorl %eax,%eax
+ xorq %r9,%r9
+ xorq %r10,%r10
+ xorq %r11,%r11
+
+ movl OPENSSL_ia32cap_P@GOTPCREL(%rip),%r8d
+ btl $20,%r8d
+ jnc .Lw1stloop
+ btl $30,%r8d
+ setc %r9b
+ movl %r9d,260(%rdi)
+ jmp .Lc1stloop
+
+.align 16
+.Lw1stloop:
+ movl %eax,(%rdi,%rax,4)
+ addb $1,%al
+ jnc .Lw1stloop
+
+ xorq %r9,%r9
+ xorq %r8,%r8
+.align 16
+.Lw2ndloop:
+ movl (%rdi,%r9,4),%r10d
+ addb (%rdx,%rsi,1),%r8b
+ addb %r10b,%r8b
+ addq $1,%rsi
+ movl (%rdi,%r8,4),%r11d
+ cmovzq %rcx,%rsi
+ movl %r10d,(%rdi,%r8,4)
+ movl %r11d,(%rdi,%r9,4)
+ addb $1,%r9b
+ jnc .Lw2ndloop
+ jmp .Lexit_key
+
+.align 16
+.Lc1stloop:
+ movb %al,(%rdi,%rax,1)
+ addb $1,%al
+ jnc .Lc1stloop
+
+ xorq %r9,%r9
+ xorq %r8,%r8
+.align 16
+.Lc2ndloop:
+ movb (%rdi,%r9,1),%r10b
+ addb (%rdx,%rsi,1),%r8b
+ addb %r10b,%r8b
+ addq $1,%rsi
+ movb (%rdi,%r8,1),%r11b
+ jnz .Lcnowrap
+ movq %rcx,%rsi
+.Lcnowrap:
+ movb %r10b,(%rdi,%r8,1)
+ movb %r11b,(%rdi,%r9,1)
+ addb $1,%r9b
+ jnc .Lc2ndloop
+ movl $-1,256(%rdi)
+
+.align 16
+.Lexit_key:
+ xorl %eax,%eax
+ movl %eax,-8(%rdi)
+ movl %eax,-4(%rdi)
+ .byte 0xf3,0xc3
+.size RC4_set_key,.-RC4_set_key
+
+.globl RC4_options
+.type RC4_options,@function
+.align 16
+RC4_options:
+ .long 0x1058d48,0x90000000
+ leaq .Lopts-.(%rax),%rax
+ movl OPENSSL_ia32cap_P@GOTPCREL(%rip),%edx
+ btl $20,%edx
+ jnc .Ldone
+ addq $12,%rax
+ btl $30,%edx
+ jnc .Ldone
+ addq $13,%rax
+.Ldone:
+ .byte 0xf3,0xc3
+.align 64
+.Lopts:
+.byte 114,99,52,40,56,120,44,105,110,116,41,0
+.byte 114,99,52,40,56,120,44,99,104,97,114,41,0
+.byte 114,99,52,40,49,120,44,99,104,97,114,41,0
+.byte 82,67,52,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
+.align 64
+.size RC4_options,.-RC4_options
diff --git a/lib/libcrypto/arch/x86_64/rc4.inc b/lib/libcrypto/arch/x86_64/rc4.inc
new file mode 100644
index 00000000000..c2b48a46a5c
--- /dev/null
+++ b/lib/libcrypto/arch/x86_64/rc4.inc
@@ -0,0 +1,3 @@
+.PATH.S: ${.PARSEDIR}
+RC4_SRCS = rc4-x86_64.S
+.include "../../rc4.inc"
diff --git a/lib/libcrypto/arch/x86_64/sha1-x86_64.S b/lib/libcrypto/arch/x86_64/sha1-x86_64.S
new file mode 100644
index 00000000000..bced34709a2
--- /dev/null
+++ b/lib/libcrypto/arch/x86_64/sha1-x86_64.S
@@ -0,0 +1,1278 @@
+.text
+.globl sha1_block_data_order
+.type sha1_block_data_order,@function
+.align 16
+sha1_block_data_order:
+ pushq %rbx
+ pushq %rbp
+ pushq %r12
+ movq %rsp,%rax
+ movq %rdi,%r8
+ subq $72,%rsp
+ movq %rsi,%r9
+ andq $-64,%rsp
+ movq %rdx,%r10
+ movq %rax,64(%rsp)
+
+ movl 0(%r8),%edx
+ movl 4(%r8),%esi
+ movl 8(%r8),%edi
+ movl 12(%r8),%ebp
+ movl 16(%r8),%r11d
+.align 4
+.Lloop:
+ movl 0(%r9),%eax
+ bswapl %eax
+ movl %eax,0(%rsp)
+ leal 1518500249(%rax,%r11,1),%r12d
+ movl %edi,%ebx
+ movl 4(%r9),%eax
+ movl %edx,%r11d
+ xorl %ebp,%ebx
+ bswapl %eax
+ roll $5,%r11d
+ andl %esi,%ebx
+ movl %eax,4(%rsp)
+ addl %r11d,%r12d
+ xorl %ebp,%ebx
+ roll $30,%esi
+ addl %ebx,%r12d
+ leal 1518500249(%rax,%rbp,1),%r11d
+ movl %esi,%ebx
+ movl 8(%r9),%eax
+ movl %r12d,%ebp
+ xorl %edi,%ebx
+ bswapl %eax
+ roll $5,%ebp
+ andl %edx,%ebx
+ movl %eax,8(%rsp)
+ addl %ebp,%r11d
+ xorl %edi,%ebx
+ roll $30,%edx
+ addl %ebx,%r11d
+ leal 1518500249(%rax,%rdi,1),%ebp
+ movl %edx,%ebx
+ movl 12(%r9),%eax
+ movl %r11d,%edi
+ xorl %esi,%ebx
+ bswapl %eax
+ roll $5,%edi
+ andl %r12d,%ebx
+ movl %eax,12(%rsp)
+ addl %edi,%ebp
+ xorl %esi,%ebx
+ roll $30,%r12d
+ addl %ebx,%ebp
+ leal 1518500249(%rax,%rsi,1),%edi
+ movl %r12d,%ebx
+ movl 16(%r9),%eax
+ movl %ebp,%esi
+ xorl %edx,%ebx
+ bswapl %eax
+ roll $5,%esi
+ andl %r11d,%ebx
+ movl %eax,16(%rsp)
+ addl %esi,%edi
+ xorl %edx,%ebx
+ roll $30,%r11d
+ addl %ebx,%edi
+ leal 1518500249(%rax,%rdx,1),%esi
+ movl %r11d,%ebx
+ movl 20(%r9),%eax
+ movl %edi,%edx
+ xorl %r12d,%ebx
+ bswapl %eax
+ roll $5,%edx
+ andl %ebp,%ebx
+ movl %eax,20(%rsp)
+ addl %edx,%esi
+ xorl %r12d,%ebx
+ roll $30,%ebp
+ addl %ebx,%esi
+ leal 1518500249(%rax,%r12,1),%edx
+ movl %ebp,%ebx
+ movl 24(%r9),%eax
+ movl %esi,%r12d
+ xorl %r11d,%ebx
+ bswapl %eax
+ roll $5,%r12d
+ andl %edi,%ebx
+ movl %eax,24(%rsp)
+ addl %r12d,%edx
+ xorl %r11d,%ebx
+ roll $30,%edi
+ addl %ebx,%edx
+ leal 1518500249(%rax,%r11,1),%r12d
+ movl %edi,%ebx
+ movl 28(%r9),%eax
+ movl %edx,%r11d
+ xorl %ebp,%ebx
+ bswapl %eax
+ roll $5,%r11d
+ andl %esi,%ebx
+ movl %eax,28(%rsp)
+ addl %r11d,%r12d
+ xorl %ebp,%ebx
+ roll $30,%esi
+ addl %ebx,%r12d
+ leal 1518500249(%rax,%rbp,1),%r11d
+ movl %esi,%ebx
+ movl 32(%r9),%eax
+ movl %r12d,%ebp
+ xorl %edi,%ebx
+ bswapl %eax
+ roll $5,%ebp
+ andl %edx,%ebx
+ movl %eax,32(%rsp)
+ addl %ebp,%r11d
+ xorl %edi,%ebx
+ roll $30,%edx
+ addl %ebx,%r11d
+ leal 1518500249(%rax,%rdi,1),%ebp
+ movl %edx,%ebx
+ movl 36(%r9),%eax
+ movl %r11d,%edi
+ xorl %esi,%ebx
+ bswapl %eax
+ roll $5,%edi
+ andl %r12d,%ebx
+ movl %eax,36(%rsp)
+ addl %edi,%ebp
+ xorl %esi,%ebx
+ roll $30,%r12d
+ addl %ebx,%ebp
+ leal 1518500249(%rax,%rsi,1),%edi
+ movl %r12d,%ebx
+ movl 40(%r9),%eax
+ movl %ebp,%esi
+ xorl %edx,%ebx
+ bswapl %eax
+ roll $5,%esi
+ andl %r11d,%ebx
+ movl %eax,40(%rsp)
+ addl %esi,%edi
+ xorl %edx,%ebx
+ roll $30,%r11d
+ addl %ebx,%edi
+ leal 1518500249(%rax,%rdx,1),%esi
+ movl %r11d,%ebx
+ movl 44(%r9),%eax
+ movl %edi,%edx
+ xorl %r12d,%ebx
+ bswapl %eax
+ roll $5,%edx
+ andl %ebp,%ebx
+ movl %eax,44(%rsp)
+ addl %edx,%esi
+ xorl %r12d,%ebx
+ roll $30,%ebp
+ addl %ebx,%esi
+ leal 1518500249(%rax,%r12,1),%edx
+ movl %ebp,%ebx
+ movl 48(%r9),%eax
+ movl %esi,%r12d
+ xorl %r11d,%ebx
+ bswapl %eax
+ roll $5,%r12d
+ andl %edi,%ebx
+ movl %eax,48(%rsp)
+ addl %r12d,%edx
+ xorl %r11d,%ebx
+ roll $30,%edi
+ addl %ebx,%edx
+ leal 1518500249(%rax,%r11,1),%r12d
+ movl %edi,%ebx
+ movl 52(%r9),%eax
+ movl %edx,%r11d
+ xorl %ebp,%ebx
+ bswapl %eax
+ roll $5,%r11d
+ andl %esi,%ebx
+ movl %eax,52(%rsp)
+ addl %r11d,%r12d
+ xorl %ebp,%ebx
+ roll $30,%esi
+ addl %ebx,%r12d
+ leal 1518500249(%rax,%rbp,1),%r11d
+ movl %esi,%ebx
+ movl 56(%r9),%eax
+ movl %r12d,%ebp
+ xorl %edi,%ebx
+ bswapl %eax
+ roll $5,%ebp
+ andl %edx,%ebx
+ movl %eax,56(%rsp)
+ addl %ebp,%r11d
+ xorl %edi,%ebx
+ roll $30,%edx
+ addl %ebx,%r11d
+ leal 1518500249(%rax,%rdi,1),%ebp
+ movl %edx,%ebx
+ movl 60(%r9),%eax
+ movl %r11d,%edi
+ xorl %esi,%ebx
+ bswapl %eax
+ roll $5,%edi
+ andl %r12d,%ebx
+ movl %eax,60(%rsp)
+ addl %edi,%ebp
+ xorl %esi,%ebx
+ roll $30,%r12d
+ addl %ebx,%ebp
+ leal 1518500249(%rax,%rsi,1),%edi
+ movl 0(%rsp),%eax
+ movl %r12d,%ebx
+ movl %ebp,%esi
+ xorl 8(%rsp),%eax
+ xorl %edx,%ebx
+ roll $5,%esi
+ xorl 32(%rsp),%eax
+ andl %r11d,%ebx
+ addl %esi,%edi
+ xorl 52(%rsp),%eax
+ xorl %edx,%ebx
+ roll $30,%r11d
+ addl %ebx,%edi
+ roll $1,%eax
+ movl %eax,0(%rsp)
+ leal 1518500249(%rax,%rdx,1),%esi
+ movl 4(%rsp),%eax
+ movl %r11d,%ebx
+ movl %edi,%edx
+ xorl 12(%rsp),%eax
+ xorl %r12d,%ebx
+ roll $5,%edx
+ xorl 36(%rsp),%eax
+ andl %ebp,%ebx
+ addl %edx,%esi
+ xorl 56(%rsp),%eax
+ xorl %r12d,%ebx
+ roll $30,%ebp
+ addl %ebx,%esi
+ roll $1,%eax
+ movl %eax,4(%rsp)
+ leal 1518500249(%rax,%r12,1),%edx
+ movl 8(%rsp),%eax
+ movl %ebp,%ebx
+ movl %esi,%r12d
+ xorl 16(%rsp),%eax
+ xorl %r11d,%ebx
+ roll $5,%r12d
+ xorl 40(%rsp),%eax
+ andl %edi,%ebx
+ addl %r12d,%edx
+ xorl 60(%rsp),%eax
+ xorl %r11d,%ebx
+ roll $30,%edi
+ addl %ebx,%edx
+ roll $1,%eax
+ movl %eax,8(%rsp)
+ leal 1518500249(%rax,%r11,1),%r12d
+ movl 12(%rsp),%eax
+ movl %edi,%ebx
+ movl %edx,%r11d
+ xorl 20(%rsp),%eax
+ xorl %ebp,%ebx
+ roll $5,%r11d
+ xorl 44(%rsp),%eax
+ andl %esi,%ebx
+ addl %r11d,%r12d
+ xorl 0(%rsp),%eax
+ xorl %ebp,%ebx
+ roll $30,%esi
+ addl %ebx,%r12d
+ roll $1,%eax
+ movl %eax,12(%rsp)
+ leal 1518500249(%rax,%rbp,1),%r11d
+ movl 16(%rsp),%eax
+ movl %esi,%ebx
+ movl %r12d,%ebp
+ xorl 24(%rsp),%eax
+ xorl %edi,%ebx
+ roll $5,%ebp
+ xorl 48(%rsp),%eax
+ andl %edx,%ebx
+ addl %ebp,%r11d
+ xorl 4(%rsp),%eax
+ xorl %edi,%ebx
+ roll $30,%edx
+ addl %ebx,%r11d
+ roll $1,%eax
+ movl %eax,16(%rsp)
+ leal 1859775393(%rax,%rdi,1),%ebp
+ movl 20(%rsp),%eax
+ movl %edx,%ebx
+ movl %r11d,%edi
+ xorl 28(%rsp),%eax
+ xorl %r12d,%ebx
+ roll $5,%edi
+ xorl 52(%rsp),%eax
+ xorl %esi,%ebx
+ addl %edi,%ebp
+ xorl 8(%rsp),%eax
+ roll $30,%r12d
+ addl %ebx,%ebp
+ roll $1,%eax
+ movl %eax,20(%rsp)
+ leal 1859775393(%rax,%rsi,1),%edi
+ movl 24(%rsp),%eax
+ movl %r12d,%ebx
+ movl %ebp,%esi
+ xorl 32(%rsp),%eax
+ xorl %r11d,%ebx
+ roll $5,%esi
+ xorl 56(%rsp),%eax
+ xorl %edx,%ebx
+ addl %esi,%edi
+ xorl 12(%rsp),%eax
+ roll $30,%r11d
+ addl %ebx,%edi
+ roll $1,%eax
+ movl %eax,24(%rsp)
+ leal 1859775393(%rax,%rdx,1),%esi
+ movl 28(%rsp),%eax
+ movl %r11d,%ebx
+ movl %edi,%edx
+ xorl 36(%rsp),%eax
+ xorl %ebp,%ebx
+ roll $5,%edx
+ xorl 60(%rsp),%eax
+ xorl %r12d,%ebx
+ addl %edx,%esi
+ xorl 16(%rsp),%eax
+ roll $30,%ebp
+ addl %ebx,%esi
+ roll $1,%eax
+ movl %eax,28(%rsp)
+ leal 1859775393(%rax,%r12,1),%edx
+ movl 32(%rsp),%eax
+ movl %ebp,%ebx
+ movl %esi,%r12d
+ xorl 40(%rsp),%eax
+ xorl %edi,%ebx
+ roll $5,%r12d
+ xorl 0(%rsp),%eax
+ xorl %r11d,%ebx
+ addl %r12d,%edx
+ xorl 20(%rsp),%eax
+ roll $30,%edi
+ addl %ebx,%edx
+ roll $1,%eax
+ movl %eax,32(%rsp)
+ leal 1859775393(%rax,%r11,1),%r12d
+ movl 36(%rsp),%eax
+ movl %edi,%ebx
+ movl %edx,%r11d
+ xorl 44(%rsp),%eax
+ xorl %esi,%ebx
+ roll $5,%r11d
+ xorl 4(%rsp),%eax
+ xorl %ebp,%ebx
+ addl %r11d,%r12d
+ xorl 24(%rsp),%eax
+ roll $30,%esi
+ addl %ebx,%r12d
+ roll $1,%eax
+ movl %eax,36(%rsp)
+ leal 1859775393(%rax,%rbp,1),%r11d
+ movl 40(%rsp),%eax
+ movl %esi,%ebx
+ movl %r12d,%ebp
+ xorl 48(%rsp),%eax
+ xorl %edx,%ebx
+ roll $5,%ebp
+ xorl 8(%rsp),%eax
+ xorl %edi,%ebx
+ addl %ebp,%r11d
+ xorl 28(%rsp),%eax
+ roll $30,%edx
+ addl %ebx,%r11d
+ roll $1,%eax
+ movl %eax,40(%rsp)
+ leal 1859775393(%rax,%rdi,1),%ebp
+ movl 44(%rsp),%eax
+ movl %edx,%ebx
+ movl %r11d,%edi
+ xorl 52(%rsp),%eax
+ xorl %r12d,%ebx
+ roll $5,%edi
+ xorl 12(%rsp),%eax
+ xorl %esi,%ebx
+ addl %edi,%ebp
+ xorl 32(%rsp),%eax
+ roll $30,%r12d
+ addl %ebx,%ebp
+ roll $1,%eax
+ movl %eax,44(%rsp)
+ leal 1859775393(%rax,%rsi,1),%edi
+ movl 48(%rsp),%eax
+ movl %r12d,%ebx
+ movl %ebp,%esi
+ xorl 56(%rsp),%eax
+ xorl %r11d,%ebx
+ roll $5,%esi
+ xorl 16(%rsp),%eax
+ xorl %edx,%ebx
+ addl %esi,%edi
+ xorl 36(%rsp),%eax
+ roll $30,%r11d
+ addl %ebx,%edi
+ roll $1,%eax
+ movl %eax,48(%rsp)
+ leal 1859775393(%rax,%rdx,1),%esi
+ movl 52(%rsp),%eax
+ movl %r11d,%ebx
+ movl %edi,%edx
+ xorl 60(%rsp),%eax
+ xorl %ebp,%ebx
+ roll $5,%edx
+ xorl 20(%rsp),%eax
+ xorl %r12d,%ebx
+ addl %edx,%esi
+ xorl 40(%rsp),%eax
+ roll $30,%ebp
+ addl %ebx,%esi
+ roll $1,%eax
+ movl %eax,52(%rsp)
+ leal 1859775393(%rax,%r12,1),%edx
+ movl 56(%rsp),%eax
+ movl %ebp,%ebx
+ movl %esi,%r12d
+ xorl 0(%rsp),%eax
+ xorl %edi,%ebx
+ roll $5,%r12d
+ xorl 24(%rsp),%eax
+ xorl %r11d,%ebx
+ addl %r12d,%edx
+ xorl 44(%rsp),%eax
+ roll $30,%edi
+ addl %ebx,%edx
+ roll $1,%eax
+ movl %eax,56(%rsp)
+ leal 1859775393(%rax,%r11,1),%r12d
+ movl 60(%rsp),%eax
+ movl %edi,%ebx
+ movl %edx,%r11d
+ xorl 4(%rsp),%eax
+ xorl %esi,%ebx
+ roll $5,%r11d
+ xorl 28(%rsp),%eax
+ xorl %ebp,%ebx
+ addl %r11d,%r12d
+ xorl 48(%rsp),%eax
+ roll $30,%esi
+ addl %ebx,%r12d
+ roll $1,%eax
+ movl %eax,60(%rsp)
+ leal 1859775393(%rax,%rbp,1),%r11d
+ movl 0(%rsp),%eax
+ movl %esi,%ebx
+ movl %r12d,%ebp
+ xorl 8(%rsp),%eax
+ xorl %edx,%ebx
+ roll $5,%ebp
+ xorl 32(%rsp),%eax
+ xorl %edi,%ebx
+ addl %ebp,%r11d
+ xorl 52(%rsp),%eax
+ roll $30,%edx
+ addl %ebx,%r11d
+ roll $1,%eax
+ movl %eax,0(%rsp)
+ leal 1859775393(%rax,%rdi,1),%ebp
+ movl 4(%rsp),%eax
+ movl %edx,%ebx
+ movl %r11d,%edi
+ xorl 12(%rsp),%eax
+ xorl %r12d,%ebx
+ roll $5,%edi
+ xorl 36(%rsp),%eax
+ xorl %esi,%ebx
+ addl %edi,%ebp
+ xorl 56(%rsp),%eax
+ roll $30,%r12d
+ addl %ebx,%ebp
+ roll $1,%eax
+ movl %eax,4(%rsp)
+ leal 1859775393(%rax,%rsi,1),%edi
+ movl 8(%rsp),%eax
+ movl %r12d,%ebx
+ movl %ebp,%esi
+ xorl 16(%rsp),%eax
+ xorl %r11d,%ebx
+ roll $5,%esi
+ xorl 40(%rsp),%eax
+ xorl %edx,%ebx
+ addl %esi,%edi
+ xorl 60(%rsp),%eax
+ roll $30,%r11d
+ addl %ebx,%edi
+ roll $1,%eax
+ movl %eax,8(%rsp)
+ leal 1859775393(%rax,%rdx,1),%esi
+ movl 12(%rsp),%eax
+ movl %r11d,%ebx
+ movl %edi,%edx
+ xorl 20(%rsp),%eax
+ xorl %ebp,%ebx
+ roll $5,%edx
+ xorl 44(%rsp),%eax
+ xorl %r12d,%ebx
+ addl %edx,%esi
+ xorl 0(%rsp),%eax
+ roll $30,%ebp
+ addl %ebx,%esi
+ roll $1,%eax
+ movl %eax,12(%rsp)
+ leal 1859775393(%rax,%r12,1),%edx
+ movl 16(%rsp),%eax
+ movl %ebp,%ebx
+ movl %esi,%r12d
+ xorl 24(%rsp),%eax
+ xorl %edi,%ebx
+ roll $5,%r12d
+ xorl 48(%rsp),%eax
+ xorl %r11d,%ebx
+ addl %r12d,%edx
+ xorl 4(%rsp),%eax
+ roll $30,%edi
+ addl %ebx,%edx
+ roll $1,%eax
+ movl %eax,16(%rsp)
+ leal 1859775393(%rax,%r11,1),%r12d
+ movl 20(%rsp),%eax
+ movl %edi,%ebx
+ movl %edx,%r11d
+ xorl 28(%rsp),%eax
+ xorl %esi,%ebx
+ roll $5,%r11d
+ xorl 52(%rsp),%eax
+ xorl %ebp,%ebx
+ addl %r11d,%r12d
+ xorl 8(%rsp),%eax
+ roll $30,%esi
+ addl %ebx,%r12d
+ roll $1,%eax
+ movl %eax,20(%rsp)
+ leal 1859775393(%rax,%rbp,1),%r11d
+ movl 24(%rsp),%eax
+ movl %esi,%ebx
+ movl %r12d,%ebp
+ xorl 32(%rsp),%eax
+ xorl %edx,%ebx
+ roll $5,%ebp
+ xorl 56(%rsp),%eax
+ xorl %edi,%ebx
+ addl %ebp,%r11d
+ xorl 12(%rsp),%eax
+ roll $30,%edx
+ addl %ebx,%r11d
+ roll $1,%eax
+ movl %eax,24(%rsp)
+ leal 1859775393(%rax,%rdi,1),%ebp
+ movl 28(%rsp),%eax
+ movl %edx,%ebx
+ movl %r11d,%edi
+ xorl 36(%rsp),%eax
+ xorl %r12d,%ebx
+ roll $5,%edi
+ xorl 60(%rsp),%eax
+ xorl %esi,%ebx
+ addl %edi,%ebp
+ xorl 16(%rsp),%eax
+ roll $30,%r12d
+ addl %ebx,%ebp
+ roll $1,%eax
+ movl %eax,28(%rsp)
+ leal 1859775393(%rax,%rsi,1),%edi
+ movl 32(%rsp),%eax
+ movl %r12d,%ebx
+ movl %ebp,%esi
+ xorl 40(%rsp),%eax
+ xorl %r11d,%ebx
+ roll $5,%esi
+ xorl 0(%rsp),%eax
+ xorl %edx,%ebx
+ addl %esi,%edi
+ xorl 20(%rsp),%eax
+ roll $30,%r11d
+ addl %ebx,%edi
+ roll $1,%eax
+ movl %eax,32(%rsp)
+ leal 2400959708(%rax,%rdx,1),%esi
+ movl 36(%rsp),%eax
+ movl %ebp,%ebx
+ movl %ebp,%ecx
+ xorl 44(%rsp),%eax
+ movl %edi,%edx
+ andl %r11d,%ebx
+ xorl 4(%rsp),%eax
+ orl %r11d,%ecx
+ roll $5,%edx
+ xorl 24(%rsp),%eax
+ andl %r12d,%ecx
+ addl %edx,%esi
+ roll $1,%eax
+ orl %ecx,%ebx
+ roll $30,%ebp
+ movl %eax,36(%rsp)
+ addl %ebx,%esi
+ leal 2400959708(%rax,%r12,1),%edx
+ movl 40(%rsp),%eax
+ movl %edi,%ebx
+ movl %edi,%ecx
+ xorl 48(%rsp),%eax
+ movl %esi,%r12d
+ andl %ebp,%ebx
+ xorl 8(%rsp),%eax
+ orl %ebp,%ecx
+ roll $5,%r12d
+ xorl 28(%rsp),%eax
+ andl %r11d,%ecx
+ addl %r12d,%edx
+ roll $1,%eax
+ orl %ecx,%ebx
+ roll $30,%edi
+ movl %eax,40(%rsp)
+ addl %ebx,%edx
+ leal 2400959708(%rax,%r11,1),%r12d
+ movl 44(%rsp),%eax
+ movl %esi,%ebx
+ movl %esi,%ecx
+ xorl 52(%rsp),%eax
+ movl %edx,%r11d
+ andl %edi,%ebx
+ xorl 12(%rsp),%eax
+ orl %edi,%ecx
+ roll $5,%r11d
+ xorl 32(%rsp),%eax
+ andl %ebp,%ecx
+ addl %r11d,%r12d
+ roll $1,%eax
+ orl %ecx,%ebx
+ roll $30,%esi
+ movl %eax,44(%rsp)
+ addl %ebx,%r12d
+ leal 2400959708(%rax,%rbp,1),%r11d
+ movl 48(%rsp),%eax
+ movl %edx,%ebx
+ movl %edx,%ecx
+ xorl 56(%rsp),%eax
+ movl %r12d,%ebp
+ andl %esi,%ebx
+ xorl 16(%rsp),%eax
+ orl %esi,%ecx
+ roll $5,%ebp
+ xorl 36(%rsp),%eax
+ andl %edi,%ecx
+ addl %ebp,%r11d
+ roll $1,%eax
+ orl %ecx,%ebx
+ roll $30,%edx
+ movl %eax,48(%rsp)
+ addl %ebx,%r11d
+ leal 2400959708(%rax,%rdi,1),%ebp
+ movl 52(%rsp),%eax
+ movl %r12d,%ebx
+ movl %r12d,%ecx
+ xorl 60(%rsp),%eax
+ movl %r11d,%edi
+ andl %edx,%ebx
+ xorl 20(%rsp),%eax
+ orl %edx,%ecx
+ roll $5,%edi
+ xorl 40(%rsp),%eax
+ andl %esi,%ecx
+ addl %edi,%ebp
+ roll $1,%eax
+ orl %ecx,%ebx
+ roll $30,%r12d
+ movl %eax,52(%rsp)
+ addl %ebx,%ebp
+ leal 2400959708(%rax,%rsi,1),%edi
+ movl 56(%rsp),%eax
+ movl %r11d,%ebx
+ movl %r11d,%ecx
+ xorl 0(%rsp),%eax
+ movl %ebp,%esi
+ andl %r12d,%ebx
+ xorl 24(%rsp),%eax
+ orl %r12d,%ecx
+ roll $5,%esi
+ xorl 44(%rsp),%eax
+ andl %edx,%ecx
+ addl %esi,%edi
+ roll $1,%eax
+ orl %ecx,%ebx
+ roll $30,%r11d
+ movl %eax,56(%rsp)
+ addl %ebx,%edi
+ leal 2400959708(%rax,%rdx,1),%esi
+ movl 60(%rsp),%eax
+ movl %ebp,%ebx
+ movl %ebp,%ecx
+ xorl 4(%rsp),%eax
+ movl %edi,%edx
+ andl %r11d,%ebx
+ xorl 28(%rsp),%eax
+ orl %r11d,%ecx
+ roll $5,%edx
+ xorl 48(%rsp),%eax
+ andl %r12d,%ecx
+ addl %edx,%esi
+ roll $1,%eax
+ orl %ecx,%ebx
+ roll $30,%ebp
+ movl %eax,60(%rsp)
+ addl %ebx,%esi
+ leal 2400959708(%rax,%r12,1),%edx
+ movl 0(%rsp),%eax
+ movl %edi,%ebx
+ movl %edi,%ecx
+ xorl 8(%rsp),%eax
+ movl %esi,%r12d
+ andl %ebp,%ebx
+ xorl 32(%rsp),%eax
+ orl %ebp,%ecx
+ roll $5,%r12d
+ xorl 52(%rsp),%eax
+ andl %r11d,%ecx
+ addl %r12d,%edx
+ roll $1,%eax
+ orl %ecx,%ebx
+ roll $30,%edi
+ movl %eax,0(%rsp)
+ addl %ebx,%edx
+ leal 2400959708(%rax,%r11,1),%r12d
+ movl 4(%rsp),%eax
+ movl %esi,%ebx
+ movl %esi,%ecx
+ xorl 12(%rsp),%eax
+ movl %edx,%r11d
+ andl %edi,%ebx
+ xorl 36(%rsp),%eax
+ orl %edi,%ecx
+ roll $5,%r11d
+ xorl 56(%rsp),%eax
+ andl %ebp,%ecx
+ addl %r11d,%r12d
+ roll $1,%eax
+ orl %ecx,%ebx
+ roll $30,%esi
+ movl %eax,4(%rsp)
+ addl %ebx,%r12d
+ leal 2400959708(%rax,%rbp,1),%r11d
+ movl 8(%rsp),%eax
+ movl %edx,%ebx
+ movl %edx,%ecx
+ xorl 16(%rsp),%eax
+ movl %r12d,%ebp
+ andl %esi,%ebx
+ xorl 40(%rsp),%eax
+ orl %esi,%ecx
+ roll $5,%ebp
+ xorl 60(%rsp),%eax
+ andl %edi,%ecx
+ addl %ebp,%r11d
+ roll $1,%eax
+ orl %ecx,%ebx
+ roll $30,%edx
+ movl %eax,8(%rsp)
+ addl %ebx,%r11d
+ leal 2400959708(%rax,%rdi,1),%ebp
+ movl 12(%rsp),%eax
+ movl %r12d,%ebx
+ movl %r12d,%ecx
+ xorl 20(%rsp),%eax
+ movl %r11d,%edi
+ andl %edx,%ebx
+ xorl 44(%rsp),%eax
+ orl %edx,%ecx
+ roll $5,%edi
+ xorl 0(%rsp),%eax
+ andl %esi,%ecx
+ addl %edi,%ebp
+ roll $1,%eax
+ orl %ecx,%ebx
+ roll $30,%r12d
+ movl %eax,12(%rsp)
+ addl %ebx,%ebp
+ leal 2400959708(%rax,%rsi,1),%edi
+ movl 16(%rsp),%eax
+ movl %r11d,%ebx
+ movl %r11d,%ecx
+ xorl 24(%rsp),%eax
+ movl %ebp,%esi
+ andl %r12d,%ebx
+ xorl 48(%rsp),%eax
+ orl %r12d,%ecx
+ roll $5,%esi
+ xorl 4(%rsp),%eax
+ andl %edx,%ecx
+ addl %esi,%edi
+ roll $1,%eax
+ orl %ecx,%ebx
+ roll $30,%r11d
+ movl %eax,16(%rsp)
+ addl %ebx,%edi
+ leal 2400959708(%rax,%rdx,1),%esi
+ movl 20(%rsp),%eax
+ movl %ebp,%ebx
+ movl %ebp,%ecx
+ xorl 28(%rsp),%eax
+ movl %edi,%edx
+ andl %r11d,%ebx
+ xorl 52(%rsp),%eax
+ orl %r11d,%ecx
+ roll $5,%edx
+ xorl 8(%rsp),%eax
+ andl %r12d,%ecx
+ addl %edx,%esi
+ roll $1,%eax
+ orl %ecx,%ebx
+ roll $30,%ebp
+ movl %eax,20(%rsp)
+ addl %ebx,%esi
+ leal 2400959708(%rax,%r12,1),%edx
+ movl 24(%rsp),%eax
+ movl %edi,%ebx
+ movl %edi,%ecx
+ xorl 32(%rsp),%eax
+ movl %esi,%r12d
+ andl %ebp,%ebx
+ xorl 56(%rsp),%eax
+ orl %ebp,%ecx
+ roll $5,%r12d
+ xorl 12(%rsp),%eax
+ andl %r11d,%ecx
+ addl %r12d,%edx
+ roll $1,%eax
+ orl %ecx,%ebx
+ roll $30,%edi
+ movl %eax,24(%rsp)
+ addl %ebx,%edx
+ leal 2400959708(%rax,%r11,1),%r12d
+ movl 28(%rsp),%eax
+ movl %esi,%ebx
+ movl %esi,%ecx
+ xorl 36(%rsp),%eax
+ movl %edx,%r11d
+ andl %edi,%ebx
+ xorl 60(%rsp),%eax
+ orl %edi,%ecx
+ roll $5,%r11d
+ xorl 16(%rsp),%eax
+ andl %ebp,%ecx
+ addl %r11d,%r12d
+ roll $1,%eax
+ orl %ecx,%ebx
+ roll $30,%esi
+ movl %eax,28(%rsp)
+ addl %ebx,%r12d
+ leal 2400959708(%rax,%rbp,1),%r11d
+ movl 32(%rsp),%eax
+ movl %edx,%ebx
+ movl %edx,%ecx
+ xorl 40(%rsp),%eax
+ movl %r12d,%ebp
+ andl %esi,%ebx
+ xorl 0(%rsp),%eax
+ orl %esi,%ecx
+ roll $5,%ebp
+ xorl 20(%rsp),%eax
+ andl %edi,%ecx
+ addl %ebp,%r11d
+ roll $1,%eax
+ orl %ecx,%ebx
+ roll $30,%edx
+ movl %eax,32(%rsp)
+ addl %ebx,%r11d
+ leal 2400959708(%rax,%rdi,1),%ebp
+ movl 36(%rsp),%eax
+ movl %r12d,%ebx
+ movl %r12d,%ecx
+ xorl 44(%rsp),%eax
+ movl %r11d,%edi
+ andl %edx,%ebx
+ xorl 4(%rsp),%eax
+ orl %edx,%ecx
+ roll $5,%edi
+ xorl 24(%rsp),%eax
+ andl %esi,%ecx
+ addl %edi,%ebp
+ roll $1,%eax
+ orl %ecx,%ebx
+ roll $30,%r12d
+ movl %eax,36(%rsp)
+ addl %ebx,%ebp
+ leal 2400959708(%rax,%rsi,1),%edi
+ movl 40(%rsp),%eax
+ movl %r11d,%ebx
+ movl %r11d,%ecx
+ xorl 48(%rsp),%eax
+ movl %ebp,%esi
+ andl %r12d,%ebx
+ xorl 8(%rsp),%eax
+ orl %r12d,%ecx
+ roll $5,%esi
+ xorl 28(%rsp),%eax
+ andl %edx,%ecx
+ addl %esi,%edi
+ roll $1,%eax
+ orl %ecx,%ebx
+ roll $30,%r11d
+ movl %eax,40(%rsp)
+ addl %ebx,%edi
+ leal 2400959708(%rax,%rdx,1),%esi
+ movl 44(%rsp),%eax
+ movl %ebp,%ebx
+ movl %ebp,%ecx
+ xorl 52(%rsp),%eax
+ movl %edi,%edx
+ andl %r11d,%ebx
+ xorl 12(%rsp),%eax
+ orl %r11d,%ecx
+ roll $5,%edx
+ xorl 32(%rsp),%eax
+ andl %r12d,%ecx
+ addl %edx,%esi
+ roll $1,%eax
+ orl %ecx,%ebx
+ roll $30,%ebp
+ movl %eax,44(%rsp)
+ addl %ebx,%esi
+ leal 2400959708(%rax,%r12,1),%edx
+ movl 48(%rsp),%eax
+ movl %edi,%ebx
+ movl %edi,%ecx
+ xorl 56(%rsp),%eax
+ movl %esi,%r12d
+ andl %ebp,%ebx
+ xorl 16(%rsp),%eax
+ orl %ebp,%ecx
+ roll $5,%r12d
+ xorl 36(%rsp),%eax
+ andl %r11d,%ecx
+ addl %r12d,%edx
+ roll $1,%eax
+ orl %ecx,%ebx
+ roll $30,%edi
+ movl %eax,48(%rsp)
+ addl %ebx,%edx
+ leal 3395469782(%rax,%r11,1),%r12d
+ movl 52(%rsp),%eax
+ movl %edi,%ebx
+ movl %edx,%r11d
+ xorl 60(%rsp),%eax
+ xorl %esi,%ebx
+ roll $5,%r11d
+ xorl 20(%rsp),%eax
+ xorl %ebp,%ebx
+ addl %r11d,%r12d
+ xorl 40(%rsp),%eax
+ roll $30,%esi
+ addl %ebx,%r12d
+ roll $1,%eax
+ movl %eax,52(%rsp)
+ leal 3395469782(%rax,%rbp,1),%r11d
+ movl 56(%rsp),%eax
+ movl %esi,%ebx
+ movl %r12d,%ebp
+ xorl 0(%rsp),%eax
+ xorl %edx,%ebx
+ roll $5,%ebp
+ xorl 24(%rsp),%eax
+ xorl %edi,%ebx
+ addl %ebp,%r11d
+ xorl 44(%rsp),%eax
+ roll $30,%edx
+ addl %ebx,%r11d
+ roll $1,%eax
+ movl %eax,56(%rsp)
+ leal 3395469782(%rax,%rdi,1),%ebp
+ movl 60(%rsp),%eax
+ movl %edx,%ebx
+ movl %r11d,%edi
+ xorl 4(%rsp),%eax
+ xorl %r12d,%ebx
+ roll $5,%edi
+ xorl 28(%rsp),%eax
+ xorl %esi,%ebx
+ addl %edi,%ebp
+ xorl 48(%rsp),%eax
+ roll $30,%r12d
+ addl %ebx,%ebp
+ roll $1,%eax
+ movl %eax,60(%rsp)
+ leal 3395469782(%rax,%rsi,1),%edi
+ movl 0(%rsp),%eax
+ movl %r12d,%ebx
+ movl %ebp,%esi
+ xorl 8(%rsp),%eax
+ xorl %r11d,%ebx
+ roll $5,%esi
+ xorl 32(%rsp),%eax
+ xorl %edx,%ebx
+ addl %esi,%edi
+ xorl 52(%rsp),%eax
+ roll $30,%r11d
+ addl %ebx,%edi
+ roll $1,%eax
+ movl %eax,0(%rsp)
+ leal 3395469782(%rax,%rdx,1),%esi
+ movl 4(%rsp),%eax
+ movl %r11d,%ebx
+ movl %edi,%edx
+ xorl 12(%rsp),%eax
+ xorl %ebp,%ebx
+ roll $5,%edx
+ xorl 36(%rsp),%eax
+ xorl %r12d,%ebx
+ addl %edx,%esi
+ xorl 56(%rsp),%eax
+ roll $30,%ebp
+ addl %ebx,%esi
+ roll $1,%eax
+ movl %eax,4(%rsp)
+ leal 3395469782(%rax,%r12,1),%edx
+ movl 8(%rsp),%eax
+ movl %ebp,%ebx
+ movl %esi,%r12d
+ xorl 16(%rsp),%eax
+ xorl %edi,%ebx
+ roll $5,%r12d
+ xorl 40(%rsp),%eax
+ xorl %r11d,%ebx
+ addl %r12d,%edx
+ xorl 60(%rsp),%eax
+ roll $30,%edi
+ addl %ebx,%edx
+ roll $1,%eax
+ movl %eax,8(%rsp)
+ leal 3395469782(%rax,%r11,1),%r12d
+ movl 12(%rsp),%eax
+ movl %edi,%ebx
+ movl %edx,%r11d
+ xorl 20(%rsp),%eax
+ xorl %esi,%ebx
+ roll $5,%r11d
+ xorl 44(%rsp),%eax
+ xorl %ebp,%ebx
+ addl %r11d,%r12d
+ xorl 0(%rsp),%eax
+ roll $30,%esi
+ addl %ebx,%r12d
+ roll $1,%eax
+ movl %eax,12(%rsp)
+ leal 3395469782(%rax,%rbp,1),%r11d
+ movl 16(%rsp),%eax
+ movl %esi,%ebx
+ movl %r12d,%ebp
+ xorl 24(%rsp),%eax
+ xorl %edx,%ebx
+ roll $5,%ebp
+ xorl 48(%rsp),%eax
+ xorl %edi,%ebx
+ addl %ebp,%r11d
+ xorl 4(%rsp),%eax
+ roll $30,%edx
+ addl %ebx,%r11d
+ roll $1,%eax
+ movl %eax,16(%rsp)
+ leal 3395469782(%rax,%rdi,1),%ebp
+ movl 20(%rsp),%eax
+ movl %edx,%ebx
+ movl %r11d,%edi
+ xorl 28(%rsp),%eax
+ xorl %r12d,%ebx
+ roll $5,%edi
+ xorl 52(%rsp),%eax
+ xorl %esi,%ebx
+ addl %edi,%ebp
+ xorl 8(%rsp),%eax
+ roll $30,%r12d
+ addl %ebx,%ebp
+ roll $1,%eax
+ movl %eax,20(%rsp)
+ leal 3395469782(%rax,%rsi,1),%edi
+ movl 24(%rsp),%eax
+ movl %r12d,%ebx
+ movl %ebp,%esi
+ xorl 32(%rsp),%eax
+ xorl %r11d,%ebx
+ roll $5,%esi
+ xorl 56(%rsp),%eax
+ xorl %edx,%ebx
+ addl %esi,%edi
+ xorl 12(%rsp),%eax
+ roll $30,%r11d
+ addl %ebx,%edi
+ roll $1,%eax
+ movl %eax,24(%rsp)
+ leal 3395469782(%rax,%rdx,1),%esi
+ movl 28(%rsp),%eax
+ movl %r11d,%ebx
+ movl %edi,%edx
+ xorl 36(%rsp),%eax
+ xorl %ebp,%ebx
+ roll $5,%edx
+ xorl 60(%rsp),%eax
+ xorl %r12d,%ebx
+ addl %edx,%esi
+ xorl 16(%rsp),%eax
+ roll $30,%ebp
+ addl %ebx,%esi
+ roll $1,%eax
+ movl %eax,28(%rsp)
+ leal 3395469782(%rax,%r12,1),%edx
+ movl 32(%rsp),%eax
+ movl %ebp,%ebx
+ movl %esi,%r12d
+ xorl 40(%rsp),%eax
+ xorl %edi,%ebx
+ roll $5,%r12d
+ xorl 0(%rsp),%eax
+ xorl %r11d,%ebx
+ addl %r12d,%edx
+ xorl 20(%rsp),%eax
+ roll $30,%edi
+ addl %ebx,%edx
+ roll $1,%eax
+ movl %eax,32(%rsp)
+ leal 3395469782(%rax,%r11,1),%r12d
+ movl 36(%rsp),%eax
+ movl %edi,%ebx
+ movl %edx,%r11d
+ xorl 44(%rsp),%eax
+ xorl %esi,%ebx
+ roll $5,%r11d
+ xorl 4(%rsp),%eax
+ xorl %ebp,%ebx
+ addl %r11d,%r12d
+ xorl 24(%rsp),%eax
+ roll $30,%esi
+ addl %ebx,%r12d
+ roll $1,%eax
+ movl %eax,36(%rsp)
+ leal 3395469782(%rax,%rbp,1),%r11d
+ movl 40(%rsp),%eax
+ movl %esi,%ebx
+ movl %r12d,%ebp
+ xorl 48(%rsp),%eax
+ xorl %edx,%ebx
+ roll $5,%ebp
+ xorl 8(%rsp),%eax
+ xorl %edi,%ebx
+ addl %ebp,%r11d
+ xorl 28(%rsp),%eax
+ roll $30,%edx
+ addl %ebx,%r11d
+ roll $1,%eax
+ movl %eax,40(%rsp)
+ leal 3395469782(%rax,%rdi,1),%ebp
+ movl 44(%rsp),%eax
+ movl %edx,%ebx
+ movl %r11d,%edi
+ xorl 52(%rsp),%eax
+ xorl %r12d,%ebx
+ roll $5,%edi
+ xorl 12(%rsp),%eax
+ xorl %esi,%ebx
+ addl %edi,%ebp
+ xorl 32(%rsp),%eax
+ roll $30,%r12d
+ addl %ebx,%ebp
+ roll $1,%eax
+ movl %eax,44(%rsp)
+ leal 3395469782(%rax,%rsi,1),%edi
+ movl 48(%rsp),%eax
+ movl %r12d,%ebx
+ movl %ebp,%esi
+ xorl 56(%rsp),%eax
+ xorl %r11d,%ebx
+ roll $5,%esi
+ xorl 16(%rsp),%eax
+ xorl %edx,%ebx
+ addl %esi,%edi
+ xorl 36(%rsp),%eax
+ roll $30,%r11d
+ addl %ebx,%edi
+ roll $1,%eax
+ movl %eax,48(%rsp)
+ leal 3395469782(%rax,%rdx,1),%esi
+ movl 52(%rsp),%eax
+ movl %r11d,%ebx
+ movl %edi,%edx
+ xorl 60(%rsp),%eax
+ xorl %ebp,%ebx
+ roll $5,%edx
+ xorl 20(%rsp),%eax
+ xorl %r12d,%ebx
+ addl %edx,%esi
+ xorl 40(%rsp),%eax
+ roll $30,%ebp
+ addl %ebx,%esi
+ roll $1,%eax
+ leal 3395469782(%rax,%r12,1),%edx
+ movl 56(%rsp),%eax
+ movl %ebp,%ebx
+ movl %esi,%r12d
+ xorl 0(%rsp),%eax
+ xorl %edi,%ebx
+ roll $5,%r12d
+ xorl 24(%rsp),%eax
+ xorl %r11d,%ebx
+ addl %r12d,%edx
+ xorl 44(%rsp),%eax
+ roll $30,%edi
+ addl %ebx,%edx
+ roll $1,%eax
+ leal 3395469782(%rax,%r11,1),%r12d
+ movl 60(%rsp),%eax
+ movl %edi,%ebx
+ movl %edx,%r11d
+ xorl 4(%rsp),%eax
+ xorl %esi,%ebx
+ roll $5,%r11d
+ xorl 28(%rsp),%eax
+ xorl %ebp,%ebx
+ addl %r11d,%r12d
+ xorl 48(%rsp),%eax
+ roll $30,%esi
+ addl %ebx,%r12d
+ roll $1,%eax
+ leal 3395469782(%rax,%rbp,1),%r11d
+ movl %esi,%ebx
+ movl %r12d,%ebp
+ xorl %edx,%ebx
+ roll $5,%ebp
+ xorl %edi,%ebx
+ addl %ebp,%r11d
+ roll $30,%edx
+ addl %ebx,%r11d
+ addl 0(%r8),%r11d
+ addl 4(%r8),%r12d
+ addl 8(%r8),%edx
+ addl 12(%r8),%esi
+ addl 16(%r8),%edi
+ movl %r11d,0(%r8)
+ movl %r12d,4(%r8)
+ movl %edx,8(%r8)
+ movl %esi,12(%r8)
+ movl %edi,16(%r8)
+
+ xchgl %r11d,%edx
+ xchgl %r12d,%esi
+ xchgl %r11d,%edi
+ xchgl %r12d,%ebp
+
+ leaq 64(%r9),%r9
+ subq $1,%r10
+ jnz .Lloop
+ movq 64(%rsp),%rsp
+ popq %r12
+ popq %rbp
+ popq %rbx
+ .byte 0xf3,0xc3
+.size sha1_block_data_order,.-sha1_block_data_order
+.byte 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
diff --git a/lib/libcrypto/arch/x86_64/sha512-x86_64.S b/lib/libcrypto/arch/x86_64/sha512-x86_64.S
new file mode 100644
index 00000000000..0bd20086bf8
--- /dev/null
+++ b/lib/libcrypto/arch/x86_64/sha512-x86_64.S
@@ -0,0 +1,1969 @@
+.text
+
+.globl sha256_block_data_order
+.type sha256_block_data_order,@function
+.align 16
+sha256_block_data_order:
+ pushq %rbx
+ pushq %rbp
+ pushq %r12
+ pushq %r13
+ pushq %r14
+ pushq %r15
+ movq %rsp,%rbp
+ shlq $4,%rdx
+ subq $64+32,%rsp
+ leaq (%rsi,%rdx,4),%rdx
+ andq $-64,%rsp
+ movq %rdi,64+0(%rsp)
+ movq %rsi,64+8(%rsp)
+ movq %rdx,64+16(%rsp)
+ movq %rbp,64+24(%rsp)
+
+ .long 0x12d8d48,0x90000000
+ leaq K256-.(%rbp),%rbp
+
+ movl 0(%rdi),%eax
+ movl 4(%rdi),%ebx
+ movl 8(%rdi),%ecx
+ movl 12(%rdi),%edx
+ movl 16(%rdi),%r8d
+ movl 20(%rdi),%r9d
+ movl 24(%rdi),%r10d
+ movl 28(%rdi),%r11d
+ jmp .Lloop
+
+.align 16
+.Lloop:
+ xorq %rdi,%rdi
+ movl 0(%rsi),%r12d
+ bswapl %r12d
+ movl %r8d,%r13d
+ movl %r8d,%r14d
+ movl %r9d,%r15d
+
+ rorl $6,%r13d
+ rorl $11,%r14d
+ xorl %r10d,%r15d
+
+ xorl %r14d,%r13d
+ rorl $14,%r14d
+ andl %r8d,%r15d
+ movl %r12d,0(%rsp)
+
+ xorl %r14d,%r13d
+ xorl %r10d,%r15d
+ addl %r11d,%r12d
+
+ movl %eax,%r11d
+ addl %r13d,%r12d
+
+ addl %r15d,%r12d
+ movl %eax,%r13d
+ movl %eax,%r14d
+
+ rorl $2,%r11d
+ rorl $13,%r13d
+ movl %eax,%r15d
+ addl (%rbp,%rdi,4),%r12d
+
+ xorl %r13d,%r11d
+ rorl $9,%r13d
+ orl %ecx,%r14d
+
+ xorl %r13d,%r11d
+ andl %ecx,%r15d
+ addl %r12d,%edx
+
+ andl %ebx,%r14d
+ addl %r12d,%r11d
+
+ orl %r15d,%r14d
+ leaq 1(%rdi),%rdi
+
+ addl %r14d,%r11d
+ movl 4(%rsi),%r12d
+ bswapl %r12d
+ movl %edx,%r13d
+ movl %edx,%r14d
+ movl %r8d,%r15d
+
+ rorl $6,%r13d
+ rorl $11,%r14d
+ xorl %r9d,%r15d
+
+ xorl %r14d,%r13d
+ rorl $14,%r14d
+ andl %edx,%r15d
+ movl %r12d,4(%rsp)
+
+ xorl %r14d,%r13d
+ xorl %r9d,%r15d
+ addl %r10d,%r12d
+
+ movl %r11d,%r10d
+ addl %r13d,%r12d
+
+ addl %r15d,%r12d
+ movl %r11d,%r13d
+ movl %r11d,%r14d
+
+ rorl $2,%r10d
+ rorl $13,%r13d
+ movl %r11d,%r15d
+ addl (%rbp,%rdi,4),%r12d
+
+ xorl %r13d,%r10d
+ rorl $9,%r13d
+ orl %ebx,%r14d
+
+ xorl %r13d,%r10d
+ andl %ebx,%r15d
+ addl %r12d,%ecx
+
+ andl %eax,%r14d
+ addl %r12d,%r10d
+
+ orl %r15d,%r14d
+ leaq 1(%rdi),%rdi
+
+ addl %r14d,%r10d
+ movl 8(%rsi),%r12d
+ bswapl %r12d
+ movl %ecx,%r13d
+ movl %ecx,%r14d
+ movl %edx,%r15d
+
+ rorl $6,%r13d
+ rorl $11,%r14d
+ xorl %r8d,%r15d
+
+ xorl %r14d,%r13d
+ rorl $14,%r14d
+ andl %ecx,%r15d
+ movl %r12d,8(%rsp)
+
+ xorl %r14d,%r13d
+ xorl %r8d,%r15d
+ addl %r9d,%r12d
+
+ movl %r10d,%r9d
+ addl %r13d,%r12d
+
+ addl %r15d,%r12d
+ movl %r10d,%r13d
+ movl %r10d,%r14d
+
+ rorl $2,%r9d
+ rorl $13,%r13d
+ movl %r10d,%r15d
+ addl (%rbp,%rdi,4),%r12d
+
+ xorl %r13d,%r9d
+ rorl $9,%r13d
+ orl %eax,%r14d
+
+ xorl %r13d,%r9d
+ andl %eax,%r15d
+ addl %r12d,%ebx
+
+ andl %r11d,%r14d
+ addl %r12d,%r9d
+
+ orl %r15d,%r14d
+ leaq 1(%rdi),%rdi
+
+ addl %r14d,%r9d
+ movl 12(%rsi),%r12d
+ bswapl %r12d
+ movl %ebx,%r13d
+ movl %ebx,%r14d
+ movl %ecx,%r15d
+
+ rorl $6,%r13d
+ rorl $11,%r14d
+ xorl %edx,%r15d
+
+ xorl %r14d,%r13d
+ rorl $14,%r14d
+ andl %ebx,%r15d
+ movl %r12d,12(%rsp)
+
+ xorl %r14d,%r13d
+ xorl %edx,%r15d
+ addl %r8d,%r12d
+
+ movl %r9d,%r8d
+ addl %r13d,%r12d
+
+ addl %r15d,%r12d
+ movl %r9d,%r13d
+ movl %r9d,%r14d
+
+ rorl $2,%r8d
+ rorl $13,%r13d
+ movl %r9d,%r15d
+ addl (%rbp,%rdi,4),%r12d
+
+ xorl %r13d,%r8d
+ rorl $9,%r13d
+ orl %r11d,%r14d
+
+ xorl %r13d,%r8d
+ andl %r11d,%r15d
+ addl %r12d,%eax
+
+ andl %r10d,%r14d
+ addl %r12d,%r8d
+
+ orl %r15d,%r14d
+ leaq 1(%rdi),%rdi
+
+ addl %r14d,%r8d
+ movl 16(%rsi),%r12d
+ bswapl %r12d
+ movl %eax,%r13d
+ movl %eax,%r14d
+ movl %ebx,%r15d
+
+ rorl $6,%r13d
+ rorl $11,%r14d
+ xorl %ecx,%r15d
+
+ xorl %r14d,%r13d
+ rorl $14,%r14d
+ andl %eax,%r15d
+ movl %r12d,16(%rsp)
+
+ xorl %r14d,%r13d
+ xorl %ecx,%r15d
+ addl %edx,%r12d
+
+ movl %r8d,%edx
+ addl %r13d,%r12d
+
+ addl %r15d,%r12d
+ movl %r8d,%r13d
+ movl %r8d,%r14d
+
+ rorl $2,%edx
+ rorl $13,%r13d
+ movl %r8d,%r15d
+ addl (%rbp,%rdi,4),%r12d
+
+ xorl %r13d,%edx
+ rorl $9,%r13d
+ orl %r10d,%r14d
+
+ xorl %r13d,%edx
+ andl %r10d,%r15d
+ addl %r12d,%r11d
+
+ andl %r9d,%r14d
+ addl %r12d,%edx
+
+ orl %r15d,%r14d
+ leaq 1(%rdi),%rdi
+
+ addl %r14d,%edx
+ movl 20(%rsi),%r12d
+ bswapl %r12d
+ movl %r11d,%r13d
+ movl %r11d,%r14d
+ movl %eax,%r15d
+
+ rorl $6,%r13d
+ rorl $11,%r14d
+ xorl %ebx,%r15d
+
+ xorl %r14d,%r13d
+ rorl $14,%r14d
+ andl %r11d,%r15d
+ movl %r12d,20(%rsp)
+
+ xorl %r14d,%r13d
+ xorl %ebx,%r15d
+ addl %ecx,%r12d
+
+ movl %edx,%ecx
+ addl %r13d,%r12d
+
+ addl %r15d,%r12d
+ movl %edx,%r13d
+ movl %edx,%r14d
+
+ rorl $2,%ecx
+ rorl $13,%r13d
+ movl %edx,%r15d
+ addl (%rbp,%rdi,4),%r12d
+
+ xorl %r13d,%ecx
+ rorl $9,%r13d
+ orl %r9d,%r14d
+
+ xorl %r13d,%ecx
+ andl %r9d,%r15d
+ addl %r12d,%r10d
+
+ andl %r8d,%r14d
+ addl %r12d,%ecx
+
+ orl %r15d,%r14d
+ leaq 1(%rdi),%rdi
+
+ addl %r14d,%ecx
+ movl 24(%rsi),%r12d
+ bswapl %r12d
+ movl %r10d,%r13d
+ movl %r10d,%r14d
+ movl %r11d,%r15d
+
+ rorl $6,%r13d
+ rorl $11,%r14d
+ xorl %eax,%r15d
+
+ xorl %r14d,%r13d
+ rorl $14,%r14d
+ andl %r10d,%r15d
+ movl %r12d,24(%rsp)
+
+ xorl %r14d,%r13d
+ xorl %eax,%r15d
+ addl %ebx,%r12d
+
+ movl %ecx,%ebx
+ addl %r13d,%r12d
+
+ addl %r15d,%r12d
+ movl %ecx,%r13d
+ movl %ecx,%r14d
+
+ rorl $2,%ebx
+ rorl $13,%r13d
+ movl %ecx,%r15d
+ addl (%rbp,%rdi,4),%r12d
+
+ xorl %r13d,%ebx
+ rorl $9,%r13d
+ orl %r8d,%r14d
+
+ xorl %r13d,%ebx
+ andl %r8d,%r15d
+ addl %r12d,%r9d
+
+ andl %edx,%r14d
+ addl %r12d,%ebx
+
+ orl %r15d,%r14d
+ leaq 1(%rdi),%rdi
+
+ addl %r14d,%ebx
+ movl 28(%rsi),%r12d
+ bswapl %r12d
+ movl %r9d,%r13d
+ movl %r9d,%r14d
+ movl %r10d,%r15d
+
+ rorl $6,%r13d
+ rorl $11,%r14d
+ xorl %r11d,%r15d
+
+ xorl %r14d,%r13d
+ rorl $14,%r14d
+ andl %r9d,%r15d
+ movl %r12d,28(%rsp)
+
+ xorl %r14d,%r13d
+ xorl %r11d,%r15d
+ addl %eax,%r12d
+
+ movl %ebx,%eax
+ addl %r13d,%r12d
+
+ addl %r15d,%r12d
+ movl %ebx,%r13d
+ movl %ebx,%r14d
+
+ rorl $2,%eax
+ rorl $13,%r13d
+ movl %ebx,%r15d
+ addl (%rbp,%rdi,4),%r12d
+
+ xorl %r13d,%eax
+ rorl $9,%r13d
+ orl %edx,%r14d
+
+ xorl %r13d,%eax
+ andl %edx,%r15d
+ addl %r12d,%r8d
+
+ andl %ecx,%r14d
+ addl %r12d,%eax
+
+ orl %r15d,%r14d
+ leaq 1(%rdi),%rdi
+
+ addl %r14d,%eax
+ movl 32(%rsi),%r12d
+ bswapl %r12d
+ movl %r8d,%r13d
+ movl %r8d,%r14d
+ movl %r9d,%r15d
+
+ rorl $6,%r13d
+ rorl $11,%r14d
+ xorl %r10d,%r15d
+
+ xorl %r14d,%r13d
+ rorl $14,%r14d
+ andl %r8d,%r15d
+ movl %r12d,32(%rsp)
+
+ xorl %r14d,%r13d
+ xorl %r10d,%r15d
+ addl %r11d,%r12d
+
+ movl %eax,%r11d
+ addl %r13d,%r12d
+
+ addl %r15d,%r12d
+ movl %eax,%r13d
+ movl %eax,%r14d
+
+ rorl $2,%r11d
+ rorl $13,%r13d
+ movl %eax,%r15d
+ addl (%rbp,%rdi,4),%r12d
+
+ xorl %r13d,%r11d
+ rorl $9,%r13d
+ orl %ecx,%r14d
+
+ xorl %r13d,%r11d
+ andl %ecx,%r15d
+ addl %r12d,%edx
+
+ andl %ebx,%r14d
+ addl %r12d,%r11d
+
+ orl %r15d,%r14d
+ leaq 1(%rdi),%rdi
+
+ addl %r14d,%r11d
+ movl 36(%rsi),%r12d
+ bswapl %r12d
+ movl %edx,%r13d
+ movl %edx,%r14d
+ movl %r8d,%r15d
+
+ rorl $6,%r13d
+ rorl $11,%r14d
+ xorl %r9d,%r15d
+
+ xorl %r14d,%r13d
+ rorl $14,%r14d
+ andl %edx,%r15d
+ movl %r12d,36(%rsp)
+
+ xorl %r14d,%r13d
+ xorl %r9d,%r15d
+ addl %r10d,%r12d
+
+ movl %r11d,%r10d
+ addl %r13d,%r12d
+
+ addl %r15d,%r12d
+ movl %r11d,%r13d
+ movl %r11d,%r14d
+
+ rorl $2,%r10d
+ rorl $13,%r13d
+ movl %r11d,%r15d
+ addl (%rbp,%rdi,4),%r12d
+
+ xorl %r13d,%r10d
+ rorl $9,%r13d
+ orl %ebx,%r14d
+
+ xorl %r13d,%r10d
+ andl %ebx,%r15d
+ addl %r12d,%ecx
+
+ andl %eax,%r14d
+ addl %r12d,%r10d
+
+ orl %r15d,%r14d
+ leaq 1(%rdi),%rdi
+
+ addl %r14d,%r10d
+ movl 40(%rsi),%r12d
+ bswapl %r12d
+ movl %ecx,%r13d
+ movl %ecx,%r14d
+ movl %edx,%r15d
+
+ rorl $6,%r13d
+ rorl $11,%r14d
+ xorl %r8d,%r15d
+
+ xorl %r14d,%r13d
+ rorl $14,%r14d
+ andl %ecx,%r15d
+ movl %r12d,40(%rsp)
+
+ xorl %r14d,%r13d
+ xorl %r8d,%r15d
+ addl %r9d,%r12d
+
+ movl %r10d,%r9d
+ addl %r13d,%r12d
+
+ addl %r15d,%r12d
+ movl %r10d,%r13d
+ movl %r10d,%r14d
+
+ rorl $2,%r9d
+ rorl $13,%r13d
+ movl %r10d,%r15d
+ addl (%rbp,%rdi,4),%r12d
+
+ xorl %r13d,%r9d
+ rorl $9,%r13d
+ orl %eax,%r14d
+
+ xorl %r13d,%r9d
+ andl %eax,%r15d
+ addl %r12d,%ebx
+
+ andl %r11d,%r14d
+ addl %r12d,%r9d
+
+ orl %r15d,%r14d
+ leaq 1(%rdi),%rdi
+
+ addl %r14d,%r9d
+ movl 44(%rsi),%r12d
+ bswapl %r12d
+ movl %ebx,%r13d
+ movl %ebx,%r14d
+ movl %ecx,%r15d
+
+ rorl $6,%r13d
+ rorl $11,%r14d
+ xorl %edx,%r15d
+
+ xorl %r14d,%r13d
+ rorl $14,%r14d
+ andl %ebx,%r15d
+ movl %r12d,44(%rsp)
+
+ xorl %r14d,%r13d
+ xorl %edx,%r15d
+ addl %r8d,%r12d
+
+ movl %r9d,%r8d
+ addl %r13d,%r12d
+
+ addl %r15d,%r12d
+ movl %r9d,%r13d
+ movl %r9d,%r14d
+
+ rorl $2,%r8d
+ rorl $13,%r13d
+ movl %r9d,%r15d
+ addl (%rbp,%rdi,4),%r12d
+
+ xorl %r13d,%r8d
+ rorl $9,%r13d
+ orl %r11d,%r14d
+
+ xorl %r13d,%r8d
+ andl %r11d,%r15d
+ addl %r12d,%eax
+
+ andl %r10d,%r14d
+ addl %r12d,%r8d
+
+ orl %r15d,%r14d
+ leaq 1(%rdi),%rdi
+
+ addl %r14d,%r8d
+ movl 48(%rsi),%r12d
+ bswapl %r12d
+ movl %eax,%r13d
+ movl %eax,%r14d
+ movl %ebx,%r15d
+
+ rorl $6,%r13d
+ rorl $11,%r14d
+ xorl %ecx,%r15d
+
+ xorl %r14d,%r13d
+ rorl $14,%r14d
+ andl %eax,%r15d
+ movl %r12d,48(%rsp)
+
+ xorl %r14d,%r13d
+ xorl %ecx,%r15d
+ addl %edx,%r12d
+
+ movl %r8d,%edx
+ addl %r13d,%r12d
+
+ addl %r15d,%r12d
+ movl %r8d,%r13d
+ movl %r8d,%r14d
+
+ rorl $2,%edx
+ rorl $13,%r13d
+ movl %r8d,%r15d
+ addl (%rbp,%rdi,4),%r12d
+
+ xorl %r13d,%edx
+ rorl $9,%r13d
+ orl %r10d,%r14d
+
+ xorl %r13d,%edx
+ andl %r10d,%r15d
+ addl %r12d,%r11d
+
+ andl %r9d,%r14d
+ addl %r12d,%edx
+
+ orl %r15d,%r14d
+ leaq 1(%rdi),%rdi
+
+ addl %r14d,%edx
+ movl 52(%rsi),%r12d
+ bswapl %r12d
+ movl %r11d,%r13d
+ movl %r11d,%r14d
+ movl %eax,%r15d
+
+ rorl $6,%r13d
+ rorl $11,%r14d
+ xorl %ebx,%r15d
+
+ xorl %r14d,%r13d
+ rorl $14,%r14d
+ andl %r11d,%r15d
+ movl %r12d,52(%rsp)
+
+ xorl %r14d,%r13d
+ xorl %ebx,%r15d
+ addl %ecx,%r12d
+
+ movl %edx,%ecx
+ addl %r13d,%r12d
+
+ addl %r15d,%r12d
+ movl %edx,%r13d
+ movl %edx,%r14d
+
+ rorl $2,%ecx
+ rorl $13,%r13d
+ movl %edx,%r15d
+ addl (%rbp,%rdi,4),%r12d
+
+ xorl %r13d,%ecx
+ rorl $9,%r13d
+ orl %r9d,%r14d
+
+ xorl %r13d,%ecx
+ andl %r9d,%r15d
+ addl %r12d,%r10d
+
+ andl %r8d,%r14d
+ addl %r12d,%ecx
+
+ orl %r15d,%r14d
+ leaq 1(%rdi),%rdi
+
+ addl %r14d,%ecx
+ movl 56(%rsi),%r12d
+ bswapl %r12d
+ movl %r10d,%r13d
+ movl %r10d,%r14d
+ movl %r11d,%r15d
+
+ rorl $6,%r13d
+ rorl $11,%r14d
+ xorl %eax,%r15d
+
+ xorl %r14d,%r13d
+ rorl $14,%r14d
+ andl %r10d,%r15d
+ movl %r12d,56(%rsp)
+
+ xorl %r14d,%r13d
+ xorl %eax,%r15d
+ addl %ebx,%r12d
+
+ movl %ecx,%ebx
+ addl %r13d,%r12d
+
+ addl %r15d,%r12d
+ movl %ecx,%r13d
+ movl %ecx,%r14d
+
+ rorl $2,%ebx
+ rorl $13,%r13d
+ movl %ecx,%r15d
+ addl (%rbp,%rdi,4),%r12d
+
+ xorl %r13d,%ebx
+ rorl $9,%r13d
+ orl %r8d,%r14d
+
+ xorl %r13d,%ebx
+ andl %r8d,%r15d
+ addl %r12d,%r9d
+
+ andl %edx,%r14d
+ addl %r12d,%ebx
+
+ orl %r15d,%r14d
+ leaq 1(%rdi),%rdi
+
+ addl %r14d,%ebx
+ movl 60(%rsi),%r12d
+ bswapl %r12d
+ movl %r9d,%r13d
+ movl %r9d,%r14d
+ movl %r10d,%r15d
+
+ rorl $6,%r13d
+ rorl $11,%r14d
+ xorl %r11d,%r15d
+
+ xorl %r14d,%r13d
+ rorl $14,%r14d
+ andl %r9d,%r15d
+ movl %r12d,60(%rsp)
+
+ xorl %r14d,%r13d
+ xorl %r11d,%r15d
+ addl %eax,%r12d
+
+ movl %ebx,%eax
+ addl %r13d,%r12d
+
+ addl %r15d,%r12d
+ movl %ebx,%r13d
+ movl %ebx,%r14d
+
+ rorl $2,%eax
+ rorl $13,%r13d
+ movl %ebx,%r15d
+ addl (%rbp,%rdi,4),%r12d
+
+ xorl %r13d,%eax
+ rorl $9,%r13d
+ orl %edx,%r14d
+
+ xorl %r13d,%eax
+ andl %edx,%r15d
+ addl %r12d,%r8d
+
+ andl %ecx,%r14d
+ addl %r12d,%eax
+
+ orl %r15d,%r14d
+ leaq 1(%rdi),%rdi
+
+ addl %r14d,%eax
+ jmp .Lrounds_16_xx
+.align 16
+.Lrounds_16_xx:
+ movl 4(%rsp),%r13d
+ movl 56(%rsp),%r12d
+
+ movl %r13d,%r15d
+
+ shrl $3,%r13d
+ rorl $7,%r15d
+
+ xorl %r15d,%r13d
+ rorl $11,%r15d
+
+ xorl %r15d,%r13d
+ movl %r12d,%r14d
+
+ shrl $10,%r12d
+ rorl $17,%r14d
+
+ xorl %r14d,%r12d
+ rorl $2,%r14d
+
+ xorl %r14d,%r12d
+
+ addl %r13d,%r12d
+
+ addl 36(%rsp),%r12d
+
+ addl 0(%rsp),%r12d
+ movl %r8d,%r13d
+ movl %r8d,%r14d
+ movl %r9d,%r15d
+
+ rorl $6,%r13d
+ rorl $11,%r14d
+ xorl %r10d,%r15d
+
+ xorl %r14d,%r13d
+ rorl $14,%r14d
+ andl %r8d,%r15d
+ movl %r12d,0(%rsp)
+
+ xorl %r14d,%r13d
+ xorl %r10d,%r15d
+ addl %r11d,%r12d
+
+ movl %eax,%r11d
+ addl %r13d,%r12d
+
+ addl %r15d,%r12d
+ movl %eax,%r13d
+ movl %eax,%r14d
+
+ rorl $2,%r11d
+ rorl $13,%r13d
+ movl %eax,%r15d
+ addl (%rbp,%rdi,4),%r12d
+
+ xorl %r13d,%r11d
+ rorl $9,%r13d
+ orl %ecx,%r14d
+
+ xorl %r13d,%r11d
+ andl %ecx,%r15d
+ addl %r12d,%edx
+
+ andl %ebx,%r14d
+ addl %r12d,%r11d
+
+ orl %r15d,%r14d
+ leaq 1(%rdi),%rdi
+
+ addl %r14d,%r11d
+ movl 8(%rsp),%r13d
+ movl 60(%rsp),%r12d
+
+ movl %r13d,%r15d
+
+ shrl $3,%r13d
+ rorl $7,%r15d
+
+ xorl %r15d,%r13d
+ rorl $11,%r15d
+
+ xorl %r15d,%r13d
+ movl %r12d,%r14d
+
+ shrl $10,%r12d
+ rorl $17,%r14d
+
+ xorl %r14d,%r12d
+ rorl $2,%r14d
+
+ xorl %r14d,%r12d
+
+ addl %r13d,%r12d
+
+ addl 40(%rsp),%r12d
+
+ addl 4(%rsp),%r12d
+ movl %edx,%r13d
+ movl %edx,%r14d
+ movl %r8d,%r15d
+
+ rorl $6,%r13d
+ rorl $11,%r14d
+ xorl %r9d,%r15d
+
+ xorl %r14d,%r13d
+ rorl $14,%r14d
+ andl %edx,%r15d
+ movl %r12d,4(%rsp)
+
+ xorl %r14d,%r13d
+ xorl %r9d,%r15d
+ addl %r10d,%r12d
+
+ movl %r11d,%r10d
+ addl %r13d,%r12d
+
+ addl %r15d,%r12d
+ movl %r11d,%r13d
+ movl %r11d,%r14d
+
+ rorl $2,%r10d
+ rorl $13,%r13d
+ movl %r11d,%r15d
+ addl (%rbp,%rdi,4),%r12d
+
+ xorl %r13d,%r10d
+ rorl $9,%r13d
+ orl %ebx,%r14d
+
+ xorl %r13d,%r10d
+ andl %ebx,%r15d
+ addl %r12d,%ecx
+
+ andl %eax,%r14d
+ addl %r12d,%r10d
+
+ orl %r15d,%r14d
+ leaq 1(%rdi),%rdi
+
+ addl %r14d,%r10d
+ movl 12(%rsp),%r13d
+ movl 0(%rsp),%r12d
+
+ movl %r13d,%r15d
+
+ shrl $3,%r13d
+ rorl $7,%r15d
+
+ xorl %r15d,%r13d
+ rorl $11,%r15d
+
+ xorl %r15d,%r13d
+ movl %r12d,%r14d
+
+ shrl $10,%r12d
+ rorl $17,%r14d
+
+ xorl %r14d,%r12d
+ rorl $2,%r14d
+
+ xorl %r14d,%r12d
+
+ addl %r13d,%r12d
+
+ addl 44(%rsp),%r12d
+
+ addl 8(%rsp),%r12d
+ movl %ecx,%r13d
+ movl %ecx,%r14d
+ movl %edx,%r15d
+
+ rorl $6,%r13d
+ rorl $11,%r14d
+ xorl %r8d,%r15d
+
+ xorl %r14d,%r13d
+ rorl $14,%r14d
+ andl %ecx,%r15d
+ movl %r12d,8(%rsp)
+
+ xorl %r14d,%r13d
+ xorl %r8d,%r15d
+ addl %r9d,%r12d
+
+ movl %r10d,%r9d
+ addl %r13d,%r12d
+
+ addl %r15d,%r12d
+ movl %r10d,%r13d
+ movl %r10d,%r14d
+
+ rorl $2,%r9d
+ rorl $13,%r13d
+ movl %r10d,%r15d
+ addl (%rbp,%rdi,4),%r12d
+
+ xorl %r13d,%r9d
+ rorl $9,%r13d
+ orl %eax,%r14d
+
+ xorl %r13d,%r9d
+ andl %eax,%r15d
+ addl %r12d,%ebx
+
+ andl %r11d,%r14d
+ addl %r12d,%r9d
+
+ orl %r15d,%r14d
+ leaq 1(%rdi),%rdi
+
+ addl %r14d,%r9d
+ movl 16(%rsp),%r13d
+ movl 4(%rsp),%r12d
+
+ movl %r13d,%r15d
+
+ shrl $3,%r13d
+ rorl $7,%r15d
+
+ xorl %r15d,%r13d
+ rorl $11,%r15d
+
+ xorl %r15d,%r13d
+ movl %r12d,%r14d
+
+ shrl $10,%r12d
+ rorl $17,%r14d
+
+ xorl %r14d,%r12d
+ rorl $2,%r14d
+
+ xorl %r14d,%r12d
+
+ addl %r13d,%r12d
+
+ addl 48(%rsp),%r12d
+
+ addl 12(%rsp),%r12d
+ movl %ebx,%r13d
+ movl %ebx,%r14d
+ movl %ecx,%r15d
+
+ rorl $6,%r13d
+ rorl $11,%r14d
+ xorl %edx,%r15d
+
+ xorl %r14d,%r13d
+ rorl $14,%r14d
+ andl %ebx,%r15d
+ movl %r12d,12(%rsp)
+
+ xorl %r14d,%r13d
+ xorl %edx,%r15d
+ addl %r8d,%r12d
+
+ movl %r9d,%r8d
+ addl %r13d,%r12d
+
+ addl %r15d,%r12d
+ movl %r9d,%r13d
+ movl %r9d,%r14d
+
+ rorl $2,%r8d
+ rorl $13,%r13d
+ movl %r9d,%r15d
+ addl (%rbp,%rdi,4),%r12d
+
+ xorl %r13d,%r8d
+ rorl $9,%r13d
+ orl %r11d,%r14d
+
+ xorl %r13d,%r8d
+ andl %r11d,%r15d
+ addl %r12d,%eax
+
+ andl %r10d,%r14d
+ addl %r12d,%r8d
+
+ orl %r15d,%r14d
+ leaq 1(%rdi),%rdi
+
+ addl %r14d,%r8d
+ movl 20(%rsp),%r13d
+ movl 8(%rsp),%r12d
+
+ movl %r13d,%r15d
+
+ shrl $3,%r13d
+ rorl $7,%r15d
+
+ xorl %r15d,%r13d
+ rorl $11,%r15d
+
+ xorl %r15d,%r13d
+ movl %r12d,%r14d
+
+ shrl $10,%r12d
+ rorl $17,%r14d
+
+ xorl %r14d,%r12d
+ rorl $2,%r14d
+
+ xorl %r14d,%r12d
+
+ addl %r13d,%r12d
+
+ addl 52(%rsp),%r12d
+
+ addl 16(%rsp),%r12d
+ movl %eax,%r13d
+ movl %eax,%r14d
+ movl %ebx,%r15d
+
+ rorl $6,%r13d
+ rorl $11,%r14d
+ xorl %ecx,%r15d
+
+ xorl %r14d,%r13d
+ rorl $14,%r14d
+ andl %eax,%r15d
+ movl %r12d,16(%rsp)
+
+ xorl %r14d,%r13d
+ xorl %ecx,%r15d
+ addl %edx,%r12d
+
+ movl %r8d,%edx
+ addl %r13d,%r12d
+
+ addl %r15d,%r12d
+ movl %r8d,%r13d
+ movl %r8d,%r14d
+
+ rorl $2,%edx
+ rorl $13,%r13d
+ movl %r8d,%r15d
+ addl (%rbp,%rdi,4),%r12d
+
+ xorl %r13d,%edx
+ rorl $9,%r13d
+ orl %r10d,%r14d
+
+ xorl %r13d,%edx
+ andl %r10d,%r15d
+ addl %r12d,%r11d
+
+ andl %r9d,%r14d
+ addl %r12d,%edx
+
+ orl %r15d,%r14d
+ leaq 1(%rdi),%rdi
+
+ addl %r14d,%edx
+ movl 24(%rsp),%r13d
+ movl 12(%rsp),%r12d
+
+ movl %r13d,%r15d
+
+ shrl $3,%r13d
+ rorl $7,%r15d
+
+ xorl %r15d,%r13d
+ rorl $11,%r15d
+
+ xorl %r15d,%r13d
+ movl %r12d,%r14d
+
+ shrl $10,%r12d
+ rorl $17,%r14d
+
+ xorl %r14d,%r12d
+ rorl $2,%r14d
+
+ xorl %r14d,%r12d
+
+ addl %r13d,%r12d
+
+ addl 56(%rsp),%r12d
+
+ addl 20(%rsp),%r12d
+ movl %r11d,%r13d
+ movl %r11d,%r14d
+ movl %eax,%r15d
+
+ rorl $6,%r13d
+ rorl $11,%r14d
+ xorl %ebx,%r15d
+
+ xorl %r14d,%r13d
+ rorl $14,%r14d
+ andl %r11d,%r15d
+ movl %r12d,20(%rsp)
+
+ xorl %r14d,%r13d
+ xorl %ebx,%r15d
+ addl %ecx,%r12d
+
+ movl %edx,%ecx
+ addl %r13d,%r12d
+
+ addl %r15d,%r12d
+ movl %edx,%r13d
+ movl %edx,%r14d
+
+ rorl $2,%ecx
+ rorl $13,%r13d
+ movl %edx,%r15d
+ addl (%rbp,%rdi,4),%r12d
+
+ xorl %r13d,%ecx
+ rorl $9,%r13d
+ orl %r9d,%r14d
+
+ xorl %r13d,%ecx
+ andl %r9d,%r15d
+ addl %r12d,%r10d
+
+ andl %r8d,%r14d
+ addl %r12d,%ecx
+
+ orl %r15d,%r14d
+ leaq 1(%rdi),%rdi
+
+ addl %r14d,%ecx
+ movl 28(%rsp),%r13d
+ movl 16(%rsp),%r12d
+
+ movl %r13d,%r15d
+
+ shrl $3,%r13d
+ rorl $7,%r15d
+
+ xorl %r15d,%r13d
+ rorl $11,%r15d
+
+ xorl %r15d,%r13d
+ movl %r12d,%r14d
+
+ shrl $10,%r12d
+ rorl $17,%r14d
+
+ xorl %r14d,%r12d
+ rorl $2,%r14d
+
+ xorl %r14d,%r12d
+
+ addl %r13d,%r12d
+
+ addl 60(%rsp),%r12d
+
+ addl 24(%rsp),%r12d
+ movl %r10d,%r13d
+ movl %r10d,%r14d
+ movl %r11d,%r15d
+
+ rorl $6,%r13d
+ rorl $11,%r14d
+ xorl %eax,%r15d
+
+ xorl %r14d,%r13d
+ rorl $14,%r14d
+ andl %r10d,%r15d
+ movl %r12d,24(%rsp)
+
+ xorl %r14d,%r13d
+ xorl %eax,%r15d
+ addl %ebx,%r12d
+
+ movl %ecx,%ebx
+ addl %r13d,%r12d
+
+ addl %r15d,%r12d
+ movl %ecx,%r13d
+ movl %ecx,%r14d
+
+ rorl $2,%ebx
+ rorl $13,%r13d
+ movl %ecx,%r15d
+ addl (%rbp,%rdi,4),%r12d
+
+ xorl %r13d,%ebx
+ rorl $9,%r13d
+ orl %r8d,%r14d
+
+ xorl %r13d,%ebx
+ andl %r8d,%r15d
+ addl %r12d,%r9d
+
+ andl %edx,%r14d
+ addl %r12d,%ebx
+
+ orl %r15d,%r14d
+ leaq 1(%rdi),%rdi
+
+ addl %r14d,%ebx
+ movl 32(%rsp),%r13d
+ movl 20(%rsp),%r12d
+
+ movl %r13d,%r15d
+
+ shrl $3,%r13d
+ rorl $7,%r15d
+
+ xorl %r15d,%r13d
+ rorl $11,%r15d
+
+ xorl %r15d,%r13d
+ movl %r12d,%r14d
+
+ shrl $10,%r12d
+ rorl $17,%r14d
+
+ xorl %r14d,%r12d
+ rorl $2,%r14d
+
+ xorl %r14d,%r12d
+
+ addl %r13d,%r12d
+
+ addl 0(%rsp),%r12d
+
+ addl 28(%rsp),%r12d
+ movl %r9d,%r13d
+ movl %r9d,%r14d
+ movl %r10d,%r15d
+
+ rorl $6,%r13d
+ rorl $11,%r14d
+ xorl %r11d,%r15d
+
+ xorl %r14d,%r13d
+ rorl $14,%r14d
+ andl %r9d,%r15d
+ movl %r12d,28(%rsp)
+
+ xorl %r14d,%r13d
+ xorl %r11d,%r15d
+ addl %eax,%r12d
+
+ movl %ebx,%eax
+ addl %r13d,%r12d
+
+ addl %r15d,%r12d
+ movl %ebx,%r13d
+ movl %ebx,%r14d
+
+ rorl $2,%eax
+ rorl $13,%r13d
+ movl %ebx,%r15d
+ addl (%rbp,%rdi,4),%r12d
+
+ xorl %r13d,%eax
+ rorl $9,%r13d
+ orl %edx,%r14d
+
+ xorl %r13d,%eax
+ andl %edx,%r15d
+ addl %r12d,%r8d
+
+ andl %ecx,%r14d
+ addl %r12d,%eax
+
+ orl %r15d,%r14d
+ leaq 1(%rdi),%rdi
+
+ addl %r14d,%eax
+ movl 36(%rsp),%r13d
+ movl 24(%rsp),%r12d
+
+ movl %r13d,%r15d
+
+ shrl $3,%r13d
+ rorl $7,%r15d
+
+ xorl %r15d,%r13d
+ rorl $11,%r15d
+
+ xorl %r15d,%r13d
+ movl %r12d,%r14d
+
+ shrl $10,%r12d
+ rorl $17,%r14d
+
+ xorl %r14d,%r12d
+ rorl $2,%r14d
+
+ xorl %r14d,%r12d
+
+ addl %r13d,%r12d
+
+ addl 4(%rsp),%r12d
+
+ addl 32(%rsp),%r12d
+ movl %r8d,%r13d
+ movl %r8d,%r14d
+ movl %r9d,%r15d
+
+ rorl $6,%r13d
+ rorl $11,%r14d
+ xorl %r10d,%r15d
+
+ xorl %r14d,%r13d
+ rorl $14,%r14d
+ andl %r8d,%r15d
+ movl %r12d,32(%rsp)
+
+ xorl %r14d,%r13d
+ xorl %r10d,%r15d
+ addl %r11d,%r12d
+
+ movl %eax,%r11d
+ addl %r13d,%r12d
+
+ addl %r15d,%r12d
+ movl %eax,%r13d
+ movl %eax,%r14d
+
+ rorl $2,%r11d
+ rorl $13,%r13d
+ movl %eax,%r15d
+ addl (%rbp,%rdi,4),%r12d
+
+ xorl %r13d,%r11d
+ rorl $9,%r13d
+ orl %ecx,%r14d
+
+ xorl %r13d,%r11d
+ andl %ecx,%r15d
+ addl %r12d,%edx
+
+ andl %ebx,%r14d
+ addl %r12d,%r11d
+
+ orl %r15d,%r14d
+ leaq 1(%rdi),%rdi
+
+ addl %r14d,%r11d
+ movl 40(%rsp),%r13d
+ movl 28(%rsp),%r12d
+
+ movl %r13d,%r15d
+
+ shrl $3,%r13d
+ rorl $7,%r15d
+
+ xorl %r15d,%r13d
+ rorl $11,%r15d
+
+ xorl %r15d,%r13d
+ movl %r12d,%r14d
+
+ shrl $10,%r12d
+ rorl $17,%r14d
+
+ xorl %r14d,%r12d
+ rorl $2,%r14d
+
+ xorl %r14d,%r12d
+
+ addl %r13d,%r12d
+
+ addl 8(%rsp),%r12d
+
+ addl 36(%rsp),%r12d
+ movl %edx,%r13d
+ movl %edx,%r14d
+ movl %r8d,%r15d
+
+ rorl $6,%r13d
+ rorl $11,%r14d
+ xorl %r9d,%r15d
+
+ xorl %r14d,%r13d
+ rorl $14,%r14d
+ andl %edx,%r15d
+ movl %r12d,36(%rsp)
+
+ xorl %r14d,%r13d
+ xorl %r9d,%r15d
+ addl %r10d,%r12d
+
+ movl %r11d,%r10d
+ addl %r13d,%r12d
+
+ addl %r15d,%r12d
+ movl %r11d,%r13d
+ movl %r11d,%r14d
+
+ rorl $2,%r10d
+ rorl $13,%r13d
+ movl %r11d,%r15d
+ addl (%rbp,%rdi,4),%r12d
+
+ xorl %r13d,%r10d
+ rorl $9,%r13d
+ orl %ebx,%r14d
+
+ xorl %r13d,%r10d
+ andl %ebx,%r15d
+ addl %r12d,%ecx
+
+ andl %eax,%r14d
+ addl %r12d,%r10d
+
+ orl %r15d,%r14d
+ leaq 1(%rdi),%rdi
+
+ addl %r14d,%r10d
+ movl 44(%rsp),%r13d
+ movl 32(%rsp),%r12d
+
+ movl %r13d,%r15d
+
+ shrl $3,%r13d
+ rorl $7,%r15d
+
+ xorl %r15d,%r13d
+ rorl $11,%r15d
+
+ xorl %r15d,%r13d
+ movl %r12d,%r14d
+
+ shrl $10,%r12d
+ rorl $17,%r14d
+
+ xorl %r14d,%r12d
+ rorl $2,%r14d
+
+ xorl %r14d,%r12d
+
+ addl %r13d,%r12d
+
+ addl 12(%rsp),%r12d
+
+ addl 40(%rsp),%r12d
+ movl %ecx,%r13d
+ movl %ecx,%r14d
+ movl %edx,%r15d
+
+ rorl $6,%r13d
+ rorl $11,%r14d
+ xorl %r8d,%r15d
+
+ xorl %r14d,%r13d
+ rorl $14,%r14d
+ andl %ecx,%r15d
+ movl %r12d,40(%rsp)
+
+ xorl %r14d,%r13d
+ xorl %r8d,%r15d
+ addl %r9d,%r12d
+
+ movl %r10d,%r9d
+ addl %r13d,%r12d
+
+ addl %r15d,%r12d
+ movl %r10d,%r13d
+ movl %r10d,%r14d
+
+ rorl $2,%r9d
+ rorl $13,%r13d
+ movl %r10d,%r15d
+ addl (%rbp,%rdi,4),%r12d
+
+ xorl %r13d,%r9d
+ rorl $9,%r13d
+ orl %eax,%r14d
+
+ xorl %r13d,%r9d
+ andl %eax,%r15d
+ addl %r12d,%ebx
+
+ andl %r11d,%r14d
+ addl %r12d,%r9d
+
+ orl %r15d,%r14d
+ leaq 1(%rdi),%rdi
+
+ addl %r14d,%r9d
+ movl 48(%rsp),%r13d
+ movl 36(%rsp),%r12d
+
+ movl %r13d,%r15d
+
+ shrl $3,%r13d
+ rorl $7,%r15d
+
+ xorl %r15d,%r13d
+ rorl $11,%r15d
+
+ xorl %r15d,%r13d
+ movl %r12d,%r14d
+
+ shrl $10,%r12d
+ rorl $17,%r14d
+
+ xorl %r14d,%r12d
+ rorl $2,%r14d
+
+ xorl %r14d,%r12d
+
+ addl %r13d,%r12d
+
+ addl 16(%rsp),%r12d
+
+ addl 44(%rsp),%r12d
+ movl %ebx,%r13d
+ movl %ebx,%r14d
+ movl %ecx,%r15d
+
+ rorl $6,%r13d
+ rorl $11,%r14d
+ xorl %edx,%r15d
+
+ xorl %r14d,%r13d
+ rorl $14,%r14d
+ andl %ebx,%r15d
+ movl %r12d,44(%rsp)
+
+ xorl %r14d,%r13d
+ xorl %edx,%r15d
+ addl %r8d,%r12d
+
+ movl %r9d,%r8d
+ addl %r13d,%r12d
+
+ addl %r15d,%r12d
+ movl %r9d,%r13d
+ movl %r9d,%r14d
+
+ rorl $2,%r8d
+ rorl $13,%r13d
+ movl %r9d,%r15d
+ addl (%rbp,%rdi,4),%r12d
+
+ xorl %r13d,%r8d
+ rorl $9,%r13d
+ orl %r11d,%r14d
+
+ xorl %r13d,%r8d
+ andl %r11d,%r15d
+ addl %r12d,%eax
+
+ andl %r10d,%r14d
+ addl %r12d,%r8d
+
+ orl %r15d,%r14d
+ leaq 1(%rdi),%rdi
+
+ addl %r14d,%r8d
+ movl 52(%rsp),%r13d
+ movl 40(%rsp),%r12d
+
+ movl %r13d,%r15d
+
+ shrl $3,%r13d
+ rorl $7,%r15d
+
+ xorl %r15d,%r13d
+ rorl $11,%r15d
+
+ xorl %r15d,%r13d
+ movl %r12d,%r14d
+
+ shrl $10,%r12d
+ rorl $17,%r14d
+
+ xorl %r14d,%r12d
+ rorl $2,%r14d
+
+ xorl %r14d,%r12d
+
+ addl %r13d,%r12d
+
+ addl 20(%rsp),%r12d
+
+ addl 48(%rsp),%r12d
+ movl %eax,%r13d
+ movl %eax,%r14d
+ movl %ebx,%r15d
+
+ rorl $6,%r13d
+ rorl $11,%r14d
+ xorl %ecx,%r15d
+
+ xorl %r14d,%r13d
+ rorl $14,%r14d
+ andl %eax,%r15d
+ movl %r12d,48(%rsp)
+
+ xorl %r14d,%r13d
+ xorl %ecx,%r15d
+ addl %edx,%r12d
+
+ movl %r8d,%edx
+ addl %r13d,%r12d
+
+ addl %r15d,%r12d
+ movl %r8d,%r13d
+ movl %r8d,%r14d
+
+ rorl $2,%edx
+ rorl $13,%r13d
+ movl %r8d,%r15d
+ addl (%rbp,%rdi,4),%r12d
+
+ xorl %r13d,%edx
+ rorl $9,%r13d
+ orl %r10d,%r14d
+
+ xorl %r13d,%edx
+ andl %r10d,%r15d
+ addl %r12d,%r11d
+
+ andl %r9d,%r14d
+ addl %r12d,%edx
+
+ orl %r15d,%r14d
+ leaq 1(%rdi),%rdi
+
+ addl %r14d,%edx
+ movl 56(%rsp),%r13d
+ movl 44(%rsp),%r12d
+
+ movl %r13d,%r15d
+
+ shrl $3,%r13d
+ rorl $7,%r15d
+
+ xorl %r15d,%r13d
+ rorl $11,%r15d
+
+ xorl %r15d,%r13d
+ movl %r12d,%r14d
+
+ shrl $10,%r12d
+ rorl $17,%r14d
+
+ xorl %r14d,%r12d
+ rorl $2,%r14d
+
+ xorl %r14d,%r12d
+
+ addl %r13d,%r12d
+
+ addl 24(%rsp),%r12d
+
+ addl 52(%rsp),%r12d
+ movl %r11d,%r13d
+ movl %r11d,%r14d
+ movl %eax,%r15d
+
+ rorl $6,%r13d
+ rorl $11,%r14d
+ xorl %ebx,%r15d
+
+ xorl %r14d,%r13d
+ rorl $14,%r14d
+ andl %r11d,%r15d
+ movl %r12d,52(%rsp)
+
+ xorl %r14d,%r13d
+ xorl %ebx,%r15d
+ addl %ecx,%r12d
+
+ movl %edx,%ecx
+ addl %r13d,%r12d
+
+ addl %r15d,%r12d
+ movl %edx,%r13d
+ movl %edx,%r14d
+
+ rorl $2,%ecx
+ rorl $13,%r13d
+ movl %edx,%r15d
+ addl (%rbp,%rdi,4),%r12d
+
+ xorl %r13d,%ecx
+ rorl $9,%r13d
+ orl %r9d,%r14d
+
+ xorl %r13d,%ecx
+ andl %r9d,%r15d
+ addl %r12d,%r10d
+
+ andl %r8d,%r14d
+ addl %r12d,%ecx
+
+ orl %r15d,%r14d
+ leaq 1(%rdi),%rdi
+
+ addl %r14d,%ecx
+ movl 60(%rsp),%r13d
+ movl 48(%rsp),%r12d
+
+ movl %r13d,%r15d
+
+ shrl $3,%r13d
+ rorl $7,%r15d
+
+ xorl %r15d,%r13d
+ rorl $11,%r15d
+
+ xorl %r15d,%r13d
+ movl %r12d,%r14d
+
+ shrl $10,%r12d
+ rorl $17,%r14d
+
+ xorl %r14d,%r12d
+ rorl $2,%r14d
+
+ xorl %r14d,%r12d
+
+ addl %r13d,%r12d
+
+ addl 28(%rsp),%r12d
+
+ addl 56(%rsp),%r12d
+ movl %r10d,%r13d
+ movl %r10d,%r14d
+ movl %r11d,%r15d
+
+ rorl $6,%r13d
+ rorl $11,%r14d
+ xorl %eax,%r15d
+
+ xorl %r14d,%r13d
+ rorl $14,%r14d
+ andl %r10d,%r15d
+ movl %r12d,56(%rsp)
+
+ xorl %r14d,%r13d
+ xorl %eax,%r15d
+ addl %ebx,%r12d
+
+ movl %ecx,%ebx
+ addl %r13d,%r12d
+
+ addl %r15d,%r12d
+ movl %ecx,%r13d
+ movl %ecx,%r14d
+
+ rorl $2,%ebx
+ rorl $13,%r13d
+ movl %ecx,%r15d
+ addl (%rbp,%rdi,4),%r12d
+
+ xorl %r13d,%ebx
+ rorl $9,%r13d
+ orl %r8d,%r14d
+
+ xorl %r13d,%ebx
+ andl %r8d,%r15d
+ addl %r12d,%r9d
+
+ andl %edx,%r14d
+ addl %r12d,%ebx
+
+ orl %r15d,%r14d
+ leaq 1(%rdi),%rdi
+
+ addl %r14d,%ebx
+ movl 0(%rsp),%r13d
+ movl 52(%rsp),%r12d
+
+ movl %r13d,%r15d
+
+ shrl $3,%r13d
+ rorl $7,%r15d
+
+ xorl %r15d,%r13d
+ rorl $11,%r15d
+
+ xorl %r15d,%r13d
+ movl %r12d,%r14d
+
+ shrl $10,%r12d
+ rorl $17,%r14d
+
+ xorl %r14d,%r12d
+ rorl $2,%r14d
+
+ xorl %r14d,%r12d
+
+ addl %r13d,%r12d
+
+ addl 32(%rsp),%r12d
+
+ addl 60(%rsp),%r12d
+ movl %r9d,%r13d
+ movl %r9d,%r14d
+ movl %r10d,%r15d
+
+ rorl $6,%r13d
+ rorl $11,%r14d
+ xorl %r11d,%r15d
+
+ xorl %r14d,%r13d
+ rorl $14,%r14d
+ andl %r9d,%r15d
+ movl %r12d,60(%rsp)
+
+ xorl %r14d,%r13d
+ xorl %r11d,%r15d
+ addl %eax,%r12d
+
+ movl %ebx,%eax
+ addl %r13d,%r12d
+
+ addl %r15d,%r12d
+ movl %ebx,%r13d
+ movl %ebx,%r14d
+
+ rorl $2,%eax
+ rorl $13,%r13d
+ movl %ebx,%r15d
+ addl (%rbp,%rdi,4),%r12d
+
+ xorl %r13d,%eax
+ rorl $9,%r13d
+ orl %edx,%r14d
+
+ xorl %r13d,%eax
+ andl %edx,%r15d
+ addl %r12d,%r8d
+
+ andl %ecx,%r14d
+ addl %r12d,%eax
+
+ orl %r15d,%r14d
+ leaq 1(%rdi),%rdi
+
+ addl %r14d,%eax
+ cmpq $64,%rdi
+ jb .Lrounds_16_xx
+
+ movq 64+0(%rsp),%rdi
+ leaq 64(%rsi),%rsi
+
+ addl 0(%rdi),%eax
+ addl 4(%rdi),%ebx
+ addl 8(%rdi),%ecx
+ addl 12(%rdi),%edx
+ addl 16(%rdi),%r8d
+ addl 20(%rdi),%r9d
+ addl 24(%rdi),%r10d
+ addl 28(%rdi),%r11d
+
+ cmpq 64+16(%rsp),%rsi
+
+ movl %eax,0(%rdi)
+ movl %ebx,4(%rdi)
+ movl %ecx,8(%rdi)
+ movl %edx,12(%rdi)
+ movl %r8d,16(%rdi)
+ movl %r9d,20(%rdi)
+ movl %r10d,24(%rdi)
+ movl %r11d,28(%rdi)
+ jb .Lloop
+
+ movq 64+24(%rsp),%rsp
+ popq %r15
+ popq %r14
+ popq %r13
+ popq %r12
+ popq %rbp
+ popq %rbx
+
+ .byte 0xf3,0xc3
+.size sha256_block_data_order,.-sha256_block_data_order
+.align 64
+.type K256,@object
+K256:
+.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
+.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
+.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
+.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
+.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
+.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
+.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
+.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
+.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
+.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
+.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
+.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070
+.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
+.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
+.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
+.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
diff --git a/lib/libcrypto/arch/x86_64/wp-x86_64.S b/lib/libcrypto/arch/x86_64/wp-x86_64.S
new file mode 100644
index 00000000000..5aee7781c4d
--- /dev/null
+++ b/lib/libcrypto/arch/x86_64/wp-x86_64.S
@@ -0,0 +1,855 @@
+.text
+
+.globl whirlpool_block
+.type whirlpool_block,@function
+.align 16
+whirlpool_block:
+ pushq %rbx
+ pushq %rbp
+ pushq %r12
+ pushq %r13
+ pushq %r14
+ pushq %r15
+
+ movq %rsp,%rax
+ subq $128+40,%rsp
+ andq $-64,%rsp
+
+ leaq 128(%rsp),%rbx
+ movq %rdi,0(%rbx)
+ movq %rsi,8(%rbx)
+ movq %rdx,16(%rbx)
+ movq %rax,32(%rbx)
+
+ .long 0x12d8d48,0x90000000
+ leaq .Ltable-.(%rbp),%rbp
+
+ xorq %rcx,%rcx
+ xorq %rdx,%rdx
+ movq 0(%rdi),%r8
+ movq 8(%rdi),%r9
+ movq 16(%rdi),%r10
+ movq 24(%rdi),%r11
+ movq 32(%rdi),%r12
+ movq 40(%rdi),%r13
+ movq 48(%rdi),%r14
+ movq 56(%rdi),%r15
+.Louterloop:
+ movq %r8,0(%rsp)
+ movq %r9,8(%rsp)
+ movq %r10,16(%rsp)
+ movq %r11,24(%rsp)
+ movq %r12,32(%rsp)
+ movq %r13,40(%rsp)
+ movq %r14,48(%rsp)
+ movq %r15,56(%rsp)
+ xorq 0(%rsi),%r8
+ xorq 8(%rsi),%r9
+ xorq 16(%rsi),%r10
+ xorq 24(%rsi),%r11
+ xorq 32(%rsi),%r12
+ xorq 40(%rsi),%r13
+ xorq 48(%rsi),%r14
+ xorq 56(%rsi),%r15
+ movq %r8,64+0(%rsp)
+ movq %r9,64+8(%rsp)
+ movq %r10,64+16(%rsp)
+ movq %r11,64+24(%rsp)
+ movq %r12,64+32(%rsp)
+ movq %r13,64+40(%rsp)
+ movq %r14,64+48(%rsp)
+ movq %r15,64+56(%rsp)
+ xorq %rsi,%rsi
+ movq %rsi,24(%rbx)
+.align 16
+.Lround:
+ movq 4096(%rbp,%rsi,8),%r8
+ movl 0(%rsp),%eax
+ movl 4(%rsp),%ebx
+ movb %al,%cl
+ movb %ah,%dl
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ shrl $16,%eax
+ xorq 0(%rbp,%rsi,8),%r8
+ movq 7(%rbp,%rdi,8),%r9
+ movb %al,%cl
+ movb %ah,%dl
+ movl 0+8(%rsp),%eax
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ movq 6(%rbp,%rsi,8),%r10
+ movq 5(%rbp,%rdi,8),%r11
+ movb %bl,%cl
+ movb %bh,%dl
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ shrl $16,%ebx
+ movq 4(%rbp,%rsi,8),%r12
+ movq 3(%rbp,%rdi,8),%r13
+ movb %bl,%cl
+ movb %bh,%dl
+ movl 0+8+4(%rsp),%ebx
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ movq 2(%rbp,%rsi,8),%r14
+ movq 1(%rbp,%rdi,8),%r15
+ movb %al,%cl
+ movb %ah,%dl
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ shrl $16,%eax
+ xorq 0(%rbp,%rsi,8),%r9
+ xorq 7(%rbp,%rdi,8),%r10
+ movb %al,%cl
+ movb %ah,%dl
+ movl 8+8(%rsp),%eax
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ xorq 6(%rbp,%rsi,8),%r11
+ xorq 5(%rbp,%rdi,8),%r12
+ movb %bl,%cl
+ movb %bh,%dl
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ shrl $16,%ebx
+ xorq 4(%rbp,%rsi,8),%r13
+ xorq 3(%rbp,%rdi,8),%r14
+ movb %bl,%cl
+ movb %bh,%dl
+ movl 8+8+4(%rsp),%ebx
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ xorq 2(%rbp,%rsi,8),%r15
+ xorq 1(%rbp,%rdi,8),%r8
+ movb %al,%cl
+ movb %ah,%dl
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ shrl $16,%eax
+ xorq 0(%rbp,%rsi,8),%r10
+ xorq 7(%rbp,%rdi,8),%r11
+ movb %al,%cl
+ movb %ah,%dl
+ movl 16+8(%rsp),%eax
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ xorq 6(%rbp,%rsi,8),%r12
+ xorq 5(%rbp,%rdi,8),%r13
+ movb %bl,%cl
+ movb %bh,%dl
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ shrl $16,%ebx
+ xorq 4(%rbp,%rsi,8),%r14
+ xorq 3(%rbp,%rdi,8),%r15
+ movb %bl,%cl
+ movb %bh,%dl
+ movl 16+8+4(%rsp),%ebx
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ xorq 2(%rbp,%rsi,8),%r8
+ xorq 1(%rbp,%rdi,8),%r9
+ movb %al,%cl
+ movb %ah,%dl
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ shrl $16,%eax
+ xorq 0(%rbp,%rsi,8),%r11
+ xorq 7(%rbp,%rdi,8),%r12
+ movb %al,%cl
+ movb %ah,%dl
+ movl 24+8(%rsp),%eax
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ xorq 6(%rbp,%rsi,8),%r13
+ xorq 5(%rbp,%rdi,8),%r14
+ movb %bl,%cl
+ movb %bh,%dl
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ shrl $16,%ebx
+ xorq 4(%rbp,%rsi,8),%r15
+ xorq 3(%rbp,%rdi,8),%r8
+ movb %bl,%cl
+ movb %bh,%dl
+ movl 24+8+4(%rsp),%ebx
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ xorq 2(%rbp,%rsi,8),%r9
+ xorq 1(%rbp,%rdi,8),%r10
+ movb %al,%cl
+ movb %ah,%dl
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ shrl $16,%eax
+ xorq 0(%rbp,%rsi,8),%r12
+ xorq 7(%rbp,%rdi,8),%r13
+ movb %al,%cl
+ movb %ah,%dl
+ movl 32+8(%rsp),%eax
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ xorq 6(%rbp,%rsi,8),%r14
+ xorq 5(%rbp,%rdi,8),%r15
+ movb %bl,%cl
+ movb %bh,%dl
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ shrl $16,%ebx
+ xorq 4(%rbp,%rsi,8),%r8
+ xorq 3(%rbp,%rdi,8),%r9
+ movb %bl,%cl
+ movb %bh,%dl
+ movl 32+8+4(%rsp),%ebx
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ xorq 2(%rbp,%rsi,8),%r10
+ xorq 1(%rbp,%rdi,8),%r11
+ movb %al,%cl
+ movb %ah,%dl
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ shrl $16,%eax
+ xorq 0(%rbp,%rsi,8),%r13
+ xorq 7(%rbp,%rdi,8),%r14
+ movb %al,%cl
+ movb %ah,%dl
+ movl 40+8(%rsp),%eax
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ xorq 6(%rbp,%rsi,8),%r15
+ xorq 5(%rbp,%rdi,8),%r8
+ movb %bl,%cl
+ movb %bh,%dl
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ shrl $16,%ebx
+ xorq 4(%rbp,%rsi,8),%r9
+ xorq 3(%rbp,%rdi,8),%r10
+ movb %bl,%cl
+ movb %bh,%dl
+ movl 40+8+4(%rsp),%ebx
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ xorq 2(%rbp,%rsi,8),%r11
+ xorq 1(%rbp,%rdi,8),%r12
+ movb %al,%cl
+ movb %ah,%dl
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ shrl $16,%eax
+ xorq 0(%rbp,%rsi,8),%r14
+ xorq 7(%rbp,%rdi,8),%r15
+ movb %al,%cl
+ movb %ah,%dl
+ movl 48+8(%rsp),%eax
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ xorq 6(%rbp,%rsi,8),%r8
+ xorq 5(%rbp,%rdi,8),%r9
+ movb %bl,%cl
+ movb %bh,%dl
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ shrl $16,%ebx
+ xorq 4(%rbp,%rsi,8),%r10
+ xorq 3(%rbp,%rdi,8),%r11
+ movb %bl,%cl
+ movb %bh,%dl
+ movl 48+8+4(%rsp),%ebx
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ xorq 2(%rbp,%rsi,8),%r12
+ xorq 1(%rbp,%rdi,8),%r13
+ movb %al,%cl
+ movb %ah,%dl
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ shrl $16,%eax
+ xorq 0(%rbp,%rsi,8),%r15
+ xorq 7(%rbp,%rdi,8),%r8
+ movb %al,%cl
+ movb %ah,%dl
+ movl 56+8(%rsp),%eax
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ xorq 6(%rbp,%rsi,8),%r9
+ xorq 5(%rbp,%rdi,8),%r10
+ movb %bl,%cl
+ movb %bh,%dl
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ shrl $16,%ebx
+ xorq 4(%rbp,%rsi,8),%r11
+ xorq 3(%rbp,%rdi,8),%r12
+ movb %bl,%cl
+ movb %bh,%dl
+ movl 56+8+4(%rsp),%ebx
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ xorq 2(%rbp,%rsi,8),%r13
+ xorq 1(%rbp,%rdi,8),%r14
+ movq %r8,0(%rsp)
+ movq %r9,8(%rsp)
+ movq %r10,16(%rsp)
+ movq %r11,24(%rsp)
+ movq %r12,32(%rsp)
+ movq %r13,40(%rsp)
+ movq %r14,48(%rsp)
+ movq %r15,56(%rsp)
+ movb %al,%cl
+ movb %ah,%dl
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ shrl $16,%eax
+ xorq 0(%rbp,%rsi,8),%r8
+ xorq 7(%rbp,%rdi,8),%r9
+ movb %al,%cl
+ movb %ah,%dl
+ movl 64+0+8(%rsp),%eax
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ xorq 6(%rbp,%rsi,8),%r10
+ xorq 5(%rbp,%rdi,8),%r11
+ movb %bl,%cl
+ movb %bh,%dl
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ shrl $16,%ebx
+ xorq 4(%rbp,%rsi,8),%r12
+ xorq 3(%rbp,%rdi,8),%r13
+ movb %bl,%cl
+ movb %bh,%dl
+ movl 64+0+8+4(%rsp),%ebx
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ xorq 2(%rbp,%rsi,8),%r14
+ xorq 1(%rbp,%rdi,8),%r15
+ movb %al,%cl
+ movb %ah,%dl
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ shrl $16,%eax
+ xorq 0(%rbp,%rsi,8),%r9
+ xorq 7(%rbp,%rdi,8),%r10
+ movb %al,%cl
+ movb %ah,%dl
+ movl 64+8+8(%rsp),%eax
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ xorq 6(%rbp,%rsi,8),%r11
+ xorq 5(%rbp,%rdi,8),%r12
+ movb %bl,%cl
+ movb %bh,%dl
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ shrl $16,%ebx
+ xorq 4(%rbp,%rsi,8),%r13
+ xorq 3(%rbp,%rdi,8),%r14
+ movb %bl,%cl
+ movb %bh,%dl
+ movl 64+8+8+4(%rsp),%ebx
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ xorq 2(%rbp,%rsi,8),%r15
+ xorq 1(%rbp,%rdi,8),%r8
+ movb %al,%cl
+ movb %ah,%dl
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ shrl $16,%eax
+ xorq 0(%rbp,%rsi,8),%r10
+ xorq 7(%rbp,%rdi,8),%r11
+ movb %al,%cl
+ movb %ah,%dl
+ movl 64+16+8(%rsp),%eax
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ xorq 6(%rbp,%rsi,8),%r12
+ xorq 5(%rbp,%rdi,8),%r13
+ movb %bl,%cl
+ movb %bh,%dl
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ shrl $16,%ebx
+ xorq 4(%rbp,%rsi,8),%r14
+ xorq 3(%rbp,%rdi,8),%r15
+ movb %bl,%cl
+ movb %bh,%dl
+ movl 64+16+8+4(%rsp),%ebx
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ xorq 2(%rbp,%rsi,8),%r8
+ xorq 1(%rbp,%rdi,8),%r9
+ movb %al,%cl
+ movb %ah,%dl
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ shrl $16,%eax
+ xorq 0(%rbp,%rsi,8),%r11
+ xorq 7(%rbp,%rdi,8),%r12
+ movb %al,%cl
+ movb %ah,%dl
+ movl 64+24+8(%rsp),%eax
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ xorq 6(%rbp,%rsi,8),%r13
+ xorq 5(%rbp,%rdi,8),%r14
+ movb %bl,%cl
+ movb %bh,%dl
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ shrl $16,%ebx
+ xorq 4(%rbp,%rsi,8),%r15
+ xorq 3(%rbp,%rdi,8),%r8
+ movb %bl,%cl
+ movb %bh,%dl
+ movl 64+24+8+4(%rsp),%ebx
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ xorq 2(%rbp,%rsi,8),%r9
+ xorq 1(%rbp,%rdi,8),%r10
+ movb %al,%cl
+ movb %ah,%dl
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ shrl $16,%eax
+ xorq 0(%rbp,%rsi,8),%r12
+ xorq 7(%rbp,%rdi,8),%r13
+ movb %al,%cl
+ movb %ah,%dl
+ movl 64+32+8(%rsp),%eax
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ xorq 6(%rbp,%rsi,8),%r14
+ xorq 5(%rbp,%rdi,8),%r15
+ movb %bl,%cl
+ movb %bh,%dl
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ shrl $16,%ebx
+ xorq 4(%rbp,%rsi,8),%r8
+ xorq 3(%rbp,%rdi,8),%r9
+ movb %bl,%cl
+ movb %bh,%dl
+ movl 64+32+8+4(%rsp),%ebx
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ xorq 2(%rbp,%rsi,8),%r10
+ xorq 1(%rbp,%rdi,8),%r11
+ movb %al,%cl
+ movb %ah,%dl
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ shrl $16,%eax
+ xorq 0(%rbp,%rsi,8),%r13
+ xorq 7(%rbp,%rdi,8),%r14
+ movb %al,%cl
+ movb %ah,%dl
+ movl 64+40+8(%rsp),%eax
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ xorq 6(%rbp,%rsi,8),%r15
+ xorq 5(%rbp,%rdi,8),%r8
+ movb %bl,%cl
+ movb %bh,%dl
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ shrl $16,%ebx
+ xorq 4(%rbp,%rsi,8),%r9
+ xorq 3(%rbp,%rdi,8),%r10
+ movb %bl,%cl
+ movb %bh,%dl
+ movl 64+40+8+4(%rsp),%ebx
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ xorq 2(%rbp,%rsi,8),%r11
+ xorq 1(%rbp,%rdi,8),%r12
+ movb %al,%cl
+ movb %ah,%dl
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ shrl $16,%eax
+ xorq 0(%rbp,%rsi,8),%r14
+ xorq 7(%rbp,%rdi,8),%r15
+ movb %al,%cl
+ movb %ah,%dl
+ movl 64+48+8(%rsp),%eax
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ xorq 6(%rbp,%rsi,8),%r8
+ xorq 5(%rbp,%rdi,8),%r9
+ movb %bl,%cl
+ movb %bh,%dl
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ shrl $16,%ebx
+ xorq 4(%rbp,%rsi,8),%r10
+ xorq 3(%rbp,%rdi,8),%r11
+ movb %bl,%cl
+ movb %bh,%dl
+ movl 64+48+8+4(%rsp),%ebx
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ xorq 2(%rbp,%rsi,8),%r12
+ xorq 1(%rbp,%rdi,8),%r13
+ movb %al,%cl
+ movb %ah,%dl
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ shrl $16,%eax
+ xorq 0(%rbp,%rsi,8),%r15
+ xorq 7(%rbp,%rdi,8),%r8
+ movb %al,%cl
+ movb %ah,%dl
+
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ xorq 6(%rbp,%rsi,8),%r9
+ xorq 5(%rbp,%rdi,8),%r10
+ movb %bl,%cl
+ movb %bh,%dl
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ shrl $16,%ebx
+ xorq 4(%rbp,%rsi,8),%r11
+ xorq 3(%rbp,%rdi,8),%r12
+ movb %bl,%cl
+ movb %bh,%dl
+
+ leaq (%rcx,%rcx,1),%rsi
+ leaq (%rdx,%rdx,1),%rdi
+ xorq 2(%rbp,%rsi,8),%r13
+ xorq 1(%rbp,%rdi,8),%r14
+ leaq 128(%rsp),%rbx
+ movq 24(%rbx),%rsi
+ addq $1,%rsi
+ cmpq $10,%rsi
+ je .Lroundsdone
+
+ movq %rsi,24(%rbx)
+ movq %r8,64+0(%rsp)
+ movq %r9,64+8(%rsp)
+ movq %r10,64+16(%rsp)
+ movq %r11,64+24(%rsp)
+ movq %r12,64+32(%rsp)
+ movq %r13,64+40(%rsp)
+ movq %r14,64+48(%rsp)
+ movq %r15,64+56(%rsp)
+ jmp .Lround
+.align 16
+.Lroundsdone:
+ movq 0(%rbx),%rdi
+ movq 8(%rbx),%rsi
+ movq 16(%rbx),%rax
+ xorq 0(%rsi),%r8
+ xorq 8(%rsi),%r9
+ xorq 16(%rsi),%r10
+ xorq 24(%rsi),%r11
+ xorq 32(%rsi),%r12
+ xorq 40(%rsi),%r13
+ xorq 48(%rsi),%r14
+ xorq 56(%rsi),%r15
+ xorq 0(%rdi),%r8
+ xorq 8(%rdi),%r9
+ xorq 16(%rdi),%r10
+ xorq 24(%rdi),%r11
+ xorq 32(%rdi),%r12
+ xorq 40(%rdi),%r13
+ xorq 48(%rdi),%r14
+ xorq 56(%rdi),%r15
+ movq %r8,0(%rdi)
+ movq %r9,8(%rdi)
+ movq %r10,16(%rdi)
+ movq %r11,24(%rdi)
+ movq %r12,32(%rdi)
+ movq %r13,40(%rdi)
+ movq %r14,48(%rdi)
+ movq %r15,56(%rdi)
+ leaq 64(%rsi),%rsi
+ subq $1,%rax
+ jz .Lalldone
+ movq %rsi,8(%rbx)
+ movq %rax,16(%rbx)
+ jmp .Louterloop
+.Lalldone:
+ movq 32(%rbx),%rsp
+ popq %r15
+ popq %r14
+ popq %r13
+ popq %r12
+ popq %rbp
+ popq %rbx
+ .byte 0xf3,0xc3
+.size whirlpool_block,.-whirlpool_block
+
+.align 64
+.type .Ltable,@object
+.Ltable:
+.byte 24,24,96,24,192,120,48,216,24,24,96,24,192,120,48,216
+.byte 35,35,140,35,5,175,70,38,35,35,140,35,5,175,70,38
+.byte 198,198,63,198,126,249,145,184,198,198,63,198,126,249,145,184
+.byte 232,232,135,232,19,111,205,251,232,232,135,232,19,111,205,251
+.byte 135,135,38,135,76,161,19,203,135,135,38,135,76,161,19,203
+.byte 184,184,218,184,169,98,109,17,184,184,218,184,169,98,109,17
+.byte 1,1,4,1,8,5,2,9,1,1,4,1,8,5,2,9
+.byte 79,79,33,79,66,110,158,13,79,79,33,79,66,110,158,13
+.byte 54,54,216,54,173,238,108,155,54,54,216,54,173,238,108,155
+.byte 166,166,162,166,89,4,81,255,166,166,162,166,89,4,81,255
+.byte 210,210,111,210,222,189,185,12,210,210,111,210,222,189,185,12
+.byte 245,245,243,245,251,6,247,14,245,245,243,245,251,6,247,14
+.byte 121,121,249,121,239,128,242,150,121,121,249,121,239,128,242,150
+.byte 111,111,161,111,95,206,222,48,111,111,161,111,95,206,222,48
+.byte 145,145,126,145,252,239,63,109,145,145,126,145,252,239,63,109
+.byte 82,82,85,82,170,7,164,248,82,82,85,82,170,7,164,248
+.byte 96,96,157,96,39,253,192,71,96,96,157,96,39,253,192,71
+.byte 188,188,202,188,137,118,101,53,188,188,202,188,137,118,101,53
+.byte 155,155,86,155,172,205,43,55,155,155,86,155,172,205,43,55
+.byte 142,142,2,142,4,140,1,138,142,142,2,142,4,140,1,138
+.byte 163,163,182,163,113,21,91,210,163,163,182,163,113,21,91,210
+.byte 12,12,48,12,96,60,24,108,12,12,48,12,96,60,24,108
+.byte 123,123,241,123,255,138,246,132,123,123,241,123,255,138,246,132
+.byte 53,53,212,53,181,225,106,128,53,53,212,53,181,225,106,128
+.byte 29,29,116,29,232,105,58,245,29,29,116,29,232,105,58,245
+.byte 224,224,167,224,83,71,221,179,224,224,167,224,83,71,221,179
+.byte 215,215,123,215,246,172,179,33,215,215,123,215,246,172,179,33
+.byte 194,194,47,194,94,237,153,156,194,194,47,194,94,237,153,156
+.byte 46,46,184,46,109,150,92,67,46,46,184,46,109,150,92,67
+.byte 75,75,49,75,98,122,150,41,75,75,49,75,98,122,150,41
+.byte 254,254,223,254,163,33,225,93,254,254,223,254,163,33,225,93
+.byte 87,87,65,87,130,22,174,213,87,87,65,87,130,22,174,213
+.byte 21,21,84,21,168,65,42,189,21,21,84,21,168,65,42,189
+.byte 119,119,193,119,159,182,238,232,119,119,193,119,159,182,238,232
+.byte 55,55,220,55,165,235,110,146,55,55,220,55,165,235,110,146
+.byte 229,229,179,229,123,86,215,158,229,229,179,229,123,86,215,158
+.byte 159,159,70,159,140,217,35,19,159,159,70,159,140,217,35,19
+.byte 240,240,231,240,211,23,253,35,240,240,231,240,211,23,253,35
+.byte 74,74,53,74,106,127,148,32,74,74,53,74,106,127,148,32
+.byte 218,218,79,218,158,149,169,68,218,218,79,218,158,149,169,68
+.byte 88,88,125,88,250,37,176,162,88,88,125,88,250,37,176,162
+.byte 201,201,3,201,6,202,143,207,201,201,3,201,6,202,143,207
+.byte 41,41,164,41,85,141,82,124,41,41,164,41,85,141,82,124
+.byte 10,10,40,10,80,34,20,90,10,10,40,10,80,34,20,90
+.byte 177,177,254,177,225,79,127,80,177,177,254,177,225,79,127,80
+.byte 160,160,186,160,105,26,93,201,160,160,186,160,105,26,93,201
+.byte 107,107,177,107,127,218,214,20,107,107,177,107,127,218,214,20
+.byte 133,133,46,133,92,171,23,217,133,133,46,133,92,171,23,217
+.byte 189,189,206,189,129,115,103,60,189,189,206,189,129,115,103,60
+.byte 93,93,105,93,210,52,186,143,93,93,105,93,210,52,186,143
+.byte 16,16,64,16,128,80,32,144,16,16,64,16,128,80,32,144
+.byte 244,244,247,244,243,3,245,7,244,244,247,244,243,3,245,7
+.byte 203,203,11,203,22,192,139,221,203,203,11,203,22,192,139,221
+.byte 62,62,248,62,237,198,124,211,62,62,248,62,237,198,124,211
+.byte 5,5,20,5,40,17,10,45,5,5,20,5,40,17,10,45
+.byte 103,103,129,103,31,230,206,120,103,103,129,103,31,230,206,120
+.byte 228,228,183,228,115,83,213,151,228,228,183,228,115,83,213,151
+.byte 39,39,156,39,37,187,78,2,39,39,156,39,37,187,78,2
+.byte 65,65,25,65,50,88,130,115,65,65,25,65,50,88,130,115
+.byte 139,139,22,139,44,157,11,167,139,139,22,139,44,157,11,167
+.byte 167,167,166,167,81,1,83,246,167,167,166,167,81,1,83,246
+.byte 125,125,233,125,207,148,250,178,125,125,233,125,207,148,250,178
+.byte 149,149,110,149,220,251,55,73,149,149,110,149,220,251,55,73
+.byte 216,216,71,216,142,159,173,86,216,216,71,216,142,159,173,86
+.byte 251,251,203,251,139,48,235,112,251,251,203,251,139,48,235,112
+.byte 238,238,159,238,35,113,193,205,238,238,159,238,35,113,193,205
+.byte 124,124,237,124,199,145,248,187,124,124,237,124,199,145,248,187
+.byte 102,102,133,102,23,227,204,113,102,102,133,102,23,227,204,113
+.byte 221,221,83,221,166,142,167,123,221,221,83,221,166,142,167,123
+.byte 23,23,92,23,184,75,46,175,23,23,92,23,184,75,46,175
+.byte 71,71,1,71,2,70,142,69,71,71,1,71,2,70,142,69
+.byte 158,158,66,158,132,220,33,26,158,158,66,158,132,220,33,26
+.byte 202,202,15,202,30,197,137,212,202,202,15,202,30,197,137,212
+.byte 45,45,180,45,117,153,90,88,45,45,180,45,117,153,90,88
+.byte 191,191,198,191,145,121,99,46,191,191,198,191,145,121,99,46
+.byte 7,7,28,7,56,27,14,63,7,7,28,7,56,27,14,63
+.byte 173,173,142,173,1,35,71,172,173,173,142,173,1,35,71,172
+.byte 90,90,117,90,234,47,180,176,90,90,117,90,234,47,180,176
+.byte 131,131,54,131,108,181,27,239,131,131,54,131,108,181,27,239
+.byte 51,51,204,51,133,255,102,182,51,51,204,51,133,255,102,182
+.byte 99,99,145,99,63,242,198,92,99,99,145,99,63,242,198,92
+.byte 2,2,8,2,16,10,4,18,2,2,8,2,16,10,4,18
+.byte 170,170,146,170,57,56,73,147,170,170,146,170,57,56,73,147
+.byte 113,113,217,113,175,168,226,222,113,113,217,113,175,168,226,222
+.byte 200,200,7,200,14,207,141,198,200,200,7,200,14,207,141,198
+.byte 25,25,100,25,200,125,50,209,25,25,100,25,200,125,50,209
+.byte 73,73,57,73,114,112,146,59,73,73,57,73,114,112,146,59
+.byte 217,217,67,217,134,154,175,95,217,217,67,217,134,154,175,95
+.byte 242,242,239,242,195,29,249,49,242,242,239,242,195,29,249,49
+.byte 227,227,171,227,75,72,219,168,227,227,171,227,75,72,219,168
+.byte 91,91,113,91,226,42,182,185,91,91,113,91,226,42,182,185
+.byte 136,136,26,136,52,146,13,188,136,136,26,136,52,146,13,188
+.byte 154,154,82,154,164,200,41,62,154,154,82,154,164,200,41,62
+.byte 38,38,152,38,45,190,76,11,38,38,152,38,45,190,76,11
+.byte 50,50,200,50,141,250,100,191,50,50,200,50,141,250,100,191
+.byte 176,176,250,176,233,74,125,89,176,176,250,176,233,74,125,89
+.byte 233,233,131,233,27,106,207,242,233,233,131,233,27,106,207,242
+.byte 15,15,60,15,120,51,30,119,15,15,60,15,120,51,30,119
+.byte 213,213,115,213,230,166,183,51,213,213,115,213,230,166,183,51
+.byte 128,128,58,128,116,186,29,244,128,128,58,128,116,186,29,244
+.byte 190,190,194,190,153,124,97,39,190,190,194,190,153,124,97,39
+.byte 205,205,19,205,38,222,135,235,205,205,19,205,38,222,135,235
+.byte 52,52,208,52,189,228,104,137,52,52,208,52,189,228,104,137
+.byte 72,72,61,72,122,117,144,50,72,72,61,72,122,117,144,50
+.byte 255,255,219,255,171,36,227,84,255,255,219,255,171,36,227,84
+.byte 122,122,245,122,247,143,244,141,122,122,245,122,247,143,244,141
+.byte 144,144,122,144,244,234,61,100,144,144,122,144,244,234,61,100
+.byte 95,95,97,95,194,62,190,157,95,95,97,95,194,62,190,157
+.byte 32,32,128,32,29,160,64,61,32,32,128,32,29,160,64,61
+.byte 104,104,189,104,103,213,208,15,104,104,189,104,103,213,208,15
+.byte 26,26,104,26,208,114,52,202,26,26,104,26,208,114,52,202
+.byte 174,174,130,174,25,44,65,183,174,174,130,174,25,44,65,183
+.byte 180,180,234,180,201,94,117,125,180,180,234,180,201,94,117,125
+.byte 84,84,77,84,154,25,168,206,84,84,77,84,154,25,168,206
+.byte 147,147,118,147,236,229,59,127,147,147,118,147,236,229,59,127
+.byte 34,34,136,34,13,170,68,47,34,34,136,34,13,170,68,47
+.byte 100,100,141,100,7,233,200,99,100,100,141,100,7,233,200,99
+.byte 241,241,227,241,219,18,255,42,241,241,227,241,219,18,255,42
+.byte 115,115,209,115,191,162,230,204,115,115,209,115,191,162,230,204
+.byte 18,18,72,18,144,90,36,130,18,18,72,18,144,90,36,130
+.byte 64,64,29,64,58,93,128,122,64,64,29,64,58,93,128,122
+.byte 8,8,32,8,64,40,16,72,8,8,32,8,64,40,16,72
+.byte 195,195,43,195,86,232,155,149,195,195,43,195,86,232,155,149
+.byte 236,236,151,236,51,123,197,223,236,236,151,236,51,123,197,223
+.byte 219,219,75,219,150,144,171,77,219,219,75,219,150,144,171,77
+.byte 161,161,190,161,97,31,95,192,161,161,190,161,97,31,95,192
+.byte 141,141,14,141,28,131,7,145,141,141,14,141,28,131,7,145
+.byte 61,61,244,61,245,201,122,200,61,61,244,61,245,201,122,200
+.byte 151,151,102,151,204,241,51,91,151,151,102,151,204,241,51,91
+.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+.byte 207,207,27,207,54,212,131,249,207,207,27,207,54,212,131,249
+.byte 43,43,172,43,69,135,86,110,43,43,172,43,69,135,86,110
+.byte 118,118,197,118,151,179,236,225,118,118,197,118,151,179,236,225
+.byte 130,130,50,130,100,176,25,230,130,130,50,130,100,176,25,230
+.byte 214,214,127,214,254,169,177,40,214,214,127,214,254,169,177,40
+.byte 27,27,108,27,216,119,54,195,27,27,108,27,216,119,54,195
+.byte 181,181,238,181,193,91,119,116,181,181,238,181,193,91,119,116
+.byte 175,175,134,175,17,41,67,190,175,175,134,175,17,41,67,190
+.byte 106,106,181,106,119,223,212,29,106,106,181,106,119,223,212,29
+.byte 80,80,93,80,186,13,160,234,80,80,93,80,186,13,160,234
+.byte 69,69,9,69,18,76,138,87,69,69,9,69,18,76,138,87
+.byte 243,243,235,243,203,24,251,56,243,243,235,243,203,24,251,56
+.byte 48,48,192,48,157,240,96,173,48,48,192,48,157,240,96,173
+.byte 239,239,155,239,43,116,195,196,239,239,155,239,43,116,195,196
+.byte 63,63,252,63,229,195,126,218,63,63,252,63,229,195,126,218
+.byte 85,85,73,85,146,28,170,199,85,85,73,85,146,28,170,199
+.byte 162,162,178,162,121,16,89,219,162,162,178,162,121,16,89,219
+.byte 234,234,143,234,3,101,201,233,234,234,143,234,3,101,201,233
+.byte 101,101,137,101,15,236,202,106,101,101,137,101,15,236,202,106
+.byte 186,186,210,186,185,104,105,3,186,186,210,186,185,104,105,3
+.byte 47,47,188,47,101,147,94,74,47,47,188,47,101,147,94,74
+.byte 192,192,39,192,78,231,157,142,192,192,39,192,78,231,157,142
+.byte 222,222,95,222,190,129,161,96,222,222,95,222,190,129,161,96
+.byte 28,28,112,28,224,108,56,252,28,28,112,28,224,108,56,252
+.byte 253,253,211,253,187,46,231,70,253,253,211,253,187,46,231,70
+.byte 77,77,41,77,82,100,154,31,77,77,41,77,82,100,154,31
+.byte 146,146,114,146,228,224,57,118,146,146,114,146,228,224,57,118
+.byte 117,117,201,117,143,188,234,250,117,117,201,117,143,188,234,250
+.byte 6,6,24,6,48,30,12,54,6,6,24,6,48,30,12,54
+.byte 138,138,18,138,36,152,9,174,138,138,18,138,36,152,9,174
+.byte 178,178,242,178,249,64,121,75,178,178,242,178,249,64,121,75
+.byte 230,230,191,230,99,89,209,133,230,230,191,230,99,89,209,133
+.byte 14,14,56,14,112,54,28,126,14,14,56,14,112,54,28,126
+.byte 31,31,124,31,248,99,62,231,31,31,124,31,248,99,62,231
+.byte 98,98,149,98,55,247,196,85,98,98,149,98,55,247,196,85
+.byte 212,212,119,212,238,163,181,58,212,212,119,212,238,163,181,58
+.byte 168,168,154,168,41,50,77,129,168,168,154,168,41,50,77,129
+.byte 150,150,98,150,196,244,49,82,150,150,98,150,196,244,49,82
+.byte 249,249,195,249,155,58,239,98,249,249,195,249,155,58,239,98
+.byte 197,197,51,197,102,246,151,163,197,197,51,197,102,246,151,163
+.byte 37,37,148,37,53,177,74,16,37,37,148,37,53,177,74,16
+.byte 89,89,121,89,242,32,178,171,89,89,121,89,242,32,178,171
+.byte 132,132,42,132,84,174,21,208,132,132,42,132,84,174,21,208
+.byte 114,114,213,114,183,167,228,197,114,114,213,114,183,167,228,197
+.byte 57,57,228,57,213,221,114,236,57,57,228,57,213,221,114,236
+.byte 76,76,45,76,90,97,152,22,76,76,45,76,90,97,152,22
+.byte 94,94,101,94,202,59,188,148,94,94,101,94,202,59,188,148
+.byte 120,120,253,120,231,133,240,159,120,120,253,120,231,133,240,159
+.byte 56,56,224,56,221,216,112,229,56,56,224,56,221,216,112,229
+.byte 140,140,10,140,20,134,5,152,140,140,10,140,20,134,5,152
+.byte 209,209,99,209,198,178,191,23,209,209,99,209,198,178,191,23
+.byte 165,165,174,165,65,11,87,228,165,165,174,165,65,11,87,228
+.byte 226,226,175,226,67,77,217,161,226,226,175,226,67,77,217,161
+.byte 97,97,153,97,47,248,194,78,97,97,153,97,47,248,194,78
+.byte 179,179,246,179,241,69,123,66,179,179,246,179,241,69,123,66
+.byte 33,33,132,33,21,165,66,52,33,33,132,33,21,165,66,52
+.byte 156,156,74,156,148,214,37,8,156,156,74,156,148,214,37,8
+.byte 30,30,120,30,240,102,60,238,30,30,120,30,240,102,60,238
+.byte 67,67,17,67,34,82,134,97,67,67,17,67,34,82,134,97
+.byte 199,199,59,199,118,252,147,177,199,199,59,199,118,252,147,177
+.byte 252,252,215,252,179,43,229,79,252,252,215,252,179,43,229,79
+.byte 4,4,16,4,32,20,8,36,4,4,16,4,32,20,8,36
+.byte 81,81,89,81,178,8,162,227,81,81,89,81,178,8,162,227
+.byte 153,153,94,153,188,199,47,37,153,153,94,153,188,199,47,37
+.byte 109,109,169,109,79,196,218,34,109,109,169,109,79,196,218,34
+.byte 13,13,52,13,104,57,26,101,13,13,52,13,104,57,26,101
+.byte 250,250,207,250,131,53,233,121,250,250,207,250,131,53,233,121
+.byte 223,223,91,223,182,132,163,105,223,223,91,223,182,132,163,105
+.byte 126,126,229,126,215,155,252,169,126,126,229,126,215,155,252,169
+.byte 36,36,144,36,61,180,72,25,36,36,144,36,61,180,72,25
+.byte 59,59,236,59,197,215,118,254,59,59,236,59,197,215,118,254
+.byte 171,171,150,171,49,61,75,154,171,171,150,171,49,61,75,154
+.byte 206,206,31,206,62,209,129,240,206,206,31,206,62,209,129,240
+.byte 17,17,68,17,136,85,34,153,17,17,68,17,136,85,34,153
+.byte 143,143,6,143,12,137,3,131,143,143,6,143,12,137,3,131
+.byte 78,78,37,78,74,107,156,4,78,78,37,78,74,107,156,4
+.byte 183,183,230,183,209,81,115,102,183,183,230,183,209,81,115,102
+.byte 235,235,139,235,11,96,203,224,235,235,139,235,11,96,203,224
+.byte 60,60,240,60,253,204,120,193,60,60,240,60,253,204,120,193
+.byte 129,129,62,129,124,191,31,253,129,129,62,129,124,191,31,253
+.byte 148,148,106,148,212,254,53,64,148,148,106,148,212,254,53,64
+.byte 247,247,251,247,235,12,243,28,247,247,251,247,235,12,243,28
+.byte 185,185,222,185,161,103,111,24,185,185,222,185,161,103,111,24
+.byte 19,19,76,19,152,95,38,139,19,19,76,19,152,95,38,139
+.byte 44,44,176,44,125,156,88,81,44,44,176,44,125,156,88,81
+.byte 211,211,107,211,214,184,187,5,211,211,107,211,214,184,187,5
+.byte 231,231,187,231,107,92,211,140,231,231,187,231,107,92,211,140
+.byte 110,110,165,110,87,203,220,57,110,110,165,110,87,203,220,57
+.byte 196,196,55,196,110,243,149,170,196,196,55,196,110,243,149,170
+.byte 3,3,12,3,24,15,6,27,3,3,12,3,24,15,6,27
+.byte 86,86,69,86,138,19,172,220,86,86,69,86,138,19,172,220
+.byte 68,68,13,68,26,73,136,94,68,68,13,68,26,73,136,94
+.byte 127,127,225,127,223,158,254,160,127,127,225,127,223,158,254,160
+.byte 169,169,158,169,33,55,79,136,169,169,158,169,33,55,79,136
+.byte 42,42,168,42,77,130,84,103,42,42,168,42,77,130,84,103
+.byte 187,187,214,187,177,109,107,10,187,187,214,187,177,109,107,10
+.byte 193,193,35,193,70,226,159,135,193,193,35,193,70,226,159,135
+.byte 83,83,81,83,162,2,166,241,83,83,81,83,162,2,166,241
+.byte 220,220,87,220,174,139,165,114,220,220,87,220,174,139,165,114
+.byte 11,11,44,11,88,39,22,83,11,11,44,11,88,39,22,83
+.byte 157,157,78,157,156,211,39,1,157,157,78,157,156,211,39,1
+.byte 108,108,173,108,71,193,216,43,108,108,173,108,71,193,216,43
+.byte 49,49,196,49,149,245,98,164,49,49,196,49,149,245,98,164
+.byte 116,116,205,116,135,185,232,243,116,116,205,116,135,185,232,243
+.byte 246,246,255,246,227,9,241,21,246,246,255,246,227,9,241,21
+.byte 70,70,5,70,10,67,140,76,70,70,5,70,10,67,140,76
+.byte 172,172,138,172,9,38,69,165,172,172,138,172,9,38,69,165
+.byte 137,137,30,137,60,151,15,181,137,137,30,137,60,151,15,181
+.byte 20,20,80,20,160,68,40,180,20,20,80,20,160,68,40,180
+.byte 225,225,163,225,91,66,223,186,225,225,163,225,91,66,223,186
+.byte 22,22,88,22,176,78,44,166,22,22,88,22,176,78,44,166
+.byte 58,58,232,58,205,210,116,247,58,58,232,58,205,210,116,247
+.byte 105,105,185,105,111,208,210,6,105,105,185,105,111,208,210,6
+.byte 9,9,36,9,72,45,18,65,9,9,36,9,72,45,18,65
+.byte 112,112,221,112,167,173,224,215,112,112,221,112,167,173,224,215
+.byte 182,182,226,182,217,84,113,111,182,182,226,182,217,84,113,111
+.byte 208,208,103,208,206,183,189,30,208,208,103,208,206,183,189,30
+.byte 237,237,147,237,59,126,199,214,237,237,147,237,59,126,199,214
+.byte 204,204,23,204,46,219,133,226,204,204,23,204,46,219,133,226
+.byte 66,66,21,66,42,87,132,104,66,66,21,66,42,87,132,104
+.byte 152,152,90,152,180,194,45,44,152,152,90,152,180,194,45,44
+.byte 164,164,170,164,73,14,85,237,164,164,170,164,73,14,85,237
+.byte 40,40,160,40,93,136,80,117,40,40,160,40,93,136,80,117
+.byte 92,92,109,92,218,49,184,134,92,92,109,92,218,49,184,134
+.byte 248,248,199,248,147,63,237,107,248,248,199,248,147,63,237,107
+.byte 134,134,34,134,68,164,17,194,134,134,34,134,68,164,17,194
+.byte 24,35,198,232,135,184,1,79
+.byte 54,166,210,245,121,111,145,82
+.byte 96,188,155,142,163,12,123,53
+.byte 29,224,215,194,46,75,254,87
+.byte 21,119,55,229,159,240,74,218
+.byte 88,201,41,10,177,160,107,133
+.byte 189,93,16,244,203,62,5,103
+.byte 228,39,65,139,167,125,149,216
+.byte 251,238,124,102,221,23,71,158
+.byte 202,45,191,7,173,90,131,51
diff --git a/lib/libcrypto/rc4.inc b/lib/libcrypto/rc4.inc
index 55464f51e48..6c1d1d7d32c 100644
--- a/lib/libcrypto/rc4.inc
+++ b/lib/libcrypto/rc4.inc
@@ -1,4 +1,4 @@
-# $NetBSD: rc4.inc,v 1.6 2007/12/09 22:44:20 adrianp Exp $
+# $NetBSD: rc4.inc,v 1.7 2008/05/10 20:14:20 christos Exp $
#
# @(#) Copyright (c) 1995 Simon J. Gerraty
#
@@ -7,8 +7,9 @@
.PATH: ${OPENSSLSRC}/crypto/rc4
-
+.ifndef(RC4_SRCS)
RC4_SRCS = rc4_skey.c rc4_enc.c
+.endif
SRCS += ${RC4_SRCS}
.for cryptosrc in ${RC4_SRCS}