]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
Added assembly for macosx
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Thu, 15 Mar 2012 17:34:53 +0000 (18:34 +0100)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Thu, 15 Mar 2012 17:50:24 +0000 (18:50 +0100)
cfg.mk
configure.ac
lib/accelerated/x86/Makefile.am
lib/accelerated/x86/asm-macosx/appro-aes-gcm-x86-64-macosx.s [new file with mode: 0644]
lib/accelerated/x86/asm-macosx/appro-aes-x86-64-macosx.s [new file with mode: 0644]
lib/accelerated/x86/asm-macosx/appro-aes-x86-macosx.s [new file with mode: 0644]
lib/accelerated/x86/asm-macosx/cpuid-x86-64-macosx.s [new file with mode: 0644]
lib/accelerated/x86/asm-macosx/cpuid-x86-macosx.s [new file with mode: 0644]
lib/accelerated/x86/asm-macosx/padlock-x86-64-macosx.s [new file with mode: 0644]
lib/accelerated/x86/asm-macosx/padlock-x86-macosx.s [new file with mode: 0644]

diff --git a/cfg.mk b/cfg.mk
index 21b59739a2424d54fe43324f3061436494a5fdec..ac64acf3620c9cad25918223032f5f854049ef70 100644 (file)
--- a/cfg.mk
+++ b/cfg.mk
@@ -157,20 +157,28 @@ upload-web:
                cvs commit -m "Update." manual/ reference/ \
                        doxygen/ devel/ cyclo/
 
-ASM_SOURCES:= lib/accelerated/x86/asm-coff/cpuid-x86-64-coff.s \
+ASM_SOURCES:= \
        lib/accelerated/x86/asm/cpuid-x86-64.s \
-       lib/accelerated/x86/asm-coff/cpuid-x86-coff.s \
        lib/accelerated/x86/asm/cpuid-x86.s \
        lib/accelerated/x86/asm/appro-aes-gcm-x86-64.s \
        lib/accelerated/x86/asm/appro-aes-x86-64.s \
        lib/accelerated/x86/asm/appro-aes-x86.s \
        lib/accelerated/x86/asm/padlock-x86-64.s \
        lib/accelerated/x86/asm/padlock-x86.s \
+       lib/accelerated/x86/asm-coff/cpuid-x86-coff.s \
+       lib/accelerated/x86/asm-coff/cpuid-x86-64-coff.s \
        lib/accelerated/x86/asm-coff/appro-aes-gcm-x86-64-coff.s \
        lib/accelerated/x86/asm-coff/appro-aes-x86-64-coff.s \
        lib/accelerated/x86/asm-coff/appro-aes-x86-coff.s \
        lib/accelerated/x86/asm-coff/padlock-x86-64-coff.s \
-       lib/accelerated/x86/asm-coff/padlock-x86-coff.s
+       lib/accelerated/x86/asm-coff/padlock-x86-coff.s \
+       lib/accelerated/x86/asm-macosx/cpuid-x86-64-macosx.s \
+       lib/accelerated/x86/asm-macosx/cpuid-x86-macosx.s \
+       lib/accelerated/x86/asm-macosx/appro-aes-gcm-x86-64-macosx.s \
+       lib/accelerated/x86/asm-macosx/appro-aes-x86-64-macosx.s \
+       lib/accelerated/x86/asm-macosx/appro-aes-x86-macosx.s \
+       lib/accelerated/x86/asm-macosx/padlock-x86-64-macosx.s \
+       lib/accelerated/x86/asm-macosx/padlock-x86-macosx.s
 
 asm-sources: $(ASM_SOURCES)
 
@@ -247,3 +255,31 @@ lib/accelerated/x86/asm-coff/cpuid-x86-64-coff.s: devel/perlasm/cpuid-x86_64.pl
 lib/accelerated/x86/asm-coff/cpuid-x86-coff.s: devel/perlasm/cpuid-x86.pl
        cat devel/perlasm/license-gnutls.txt > $@
        perl $< coff >> $@
+
+lib/accelerated/x86/asm-macosx/appro-aes-gcm-x86-64-macosx.s: devel/perlasm/ghash-x86_64.pl
+       cat devel/perlasm/license.txt > $@
+       perl $< macosx >> $@
+
+lib/accelerated/x86/asm-macosx/appro-aes-x86-64-macosx.s: devel/perlasm/aesni-x86_64.pl
+       cat devel/perlasm/license.txt > $@
+       perl $< macosx >> $@
+
+lib/accelerated/x86/asm-macosx/appro-aes-x86-macosx.s: devel/perlasm/aesni-x86.pl
+       cat devel/perlasm/license.txt > $@
+       perl $< macosx >> $@
+
+lib/accelerated/x86/asm-macosx/padlock-x86-64-macosx.s: devel/perlasm/e_padlock-x86_64.pl
+       cat devel/perlasm/license.txt > $@
+       perl $< macosx >> $@
+
+lib/accelerated/x86/asm-macosx/padlock-x86-macosx.s: devel/perlasm/e_padlock-x86.pl
+       cat devel/perlasm/license.txt > $@
+       perl $< macosx >> $@
+
+lib/accelerated/x86/asm-macosx/cpuid-x86-64-macosx.s: devel/perlasm/cpuid-x86_64.pl
+       cat devel/perlasm/license-gnutls.txt > $@
+       perl $< macosx >> $@
+
+lib/accelerated/x86/asm-macosx/cpuid-x86-macosx.s: devel/perlasm/cpuid-x86.pl
+       cat devel/perlasm/license-gnutls.txt > $@
+       perl $< macosx >> $@
index 6fdf1d4bbea88283d0b65c6ff7f11666a2491c32..f1a602e34cffb8e001c436be2f86235c365d0296 100644 (file)
@@ -67,11 +67,15 @@ case "$host" in
   *mingw32* | *mingw64*)
     have_win=yes
   ;;
+  *darwin*)
+    have_macosx=yes
+  ;;
   *)
   ;;
 esac
 
 AM_CONDITIONAL(WINDOWS, test "$have_win" = yes)
+AM_CONDITIONAL(MACOSX, test "$have_macosx" = yes)
 
 dnl Hardware Acceleration
 AC_ARG_ENABLE(hardware-acceleration,
index 3ddd066e27b194fb2ce116c6c8e31b2330172dc9..7040847af45a29971a715745b3b0dea0f8ce31b8 100644 (file)
@@ -38,22 +38,34 @@ noinst_LTLIBRARIES = libx86.la
 libx86_la_SOURCES = sha-padlock.c hmac-padlock.c aes-x86.c aes-padlock.c aes-gcm-padlock.c aes-padlock.h aes-x86.h x86.h sha-padlock.h
 
 if ASM_X86_64
-AM_CFLAGS += -DASM_X86_64 -DASM_X86
-libx86_la_SOURCES += aes-gcm-x86.c
+ AM_CFLAGS += -DASM_X86_64 -DASM_X86
+ libx86_la_SOURCES += aes-gcm-x86.c
 
-if WINDOWS
-libx86_la_SOURCES += asm-coff/appro-aes-x86-64-coff.s asm-coff/padlock-x86-64-coff.s asm-coff/cpuid-x86-64-coff.s asm-coff/appro-aes-gcm-x86-64-coff.s
-else
-libx86_la_SOURCES += asm/appro-aes-x86-64.s asm/appro-aes-gcm-x86-64.s asm/padlock-x86-64.s asm/cpuid-x86-64.s
-endif
+ if WINDOWS
+  libx86_la_SOURCES += asm-coff/appro-aes-x86-64-coff.s asm-coff/padlock-x86-64-coff.s asm-coff/cpuid-x86-64-coff.s asm-coff/appro-aes-gcm-x86-64-coff.s
+ endif
 
-else
-AM_CFLAGS += -DASM_X86_32 -DASM_X86
+ if MACOSX
+  libx86_la_SOURCES += asm-macosx/appro-aes-x86-64-macosx.s asm-macosx/padlock-x86-64-macosx.s asm-macosx/cpuid-x86-64-macosx.s asm-macosx/appro-aes-gcm-x86-64-macosx.s
+ endif
+
+ if ELF
+  libx86_la_SOURCES += asm/appro-aes-x86-64.s asm/appro-aes-gcm-x86-64.s asm/padlock-x86-64.s asm/cpuid-x86-64.s
+ endif
 
-if WINDOWS
-libx86_la_SOURCES += asm-coff/appro-aes-x86-coff.s asm-coff/padlock-x86-coff.s asm-coff/cpuid-x86-coff.s
 else
-libx86_la_SOURCES += asm/appro-aes-x86.s asm/padlock-x86.s asm/cpuid-x86.s
-endif
+ AM_CFLAGS += -DASM_X86_32 -DASM_X86
+
+ if WINDOWS
+  libx86_la_SOURCES += asm-coff/appro-aes-x86-coff.s asm-coff/padlock-x86-coff.s asm-coff/cpuid-x86-coff.s
+ endif
+
+ if MACOSX
+  libx86_la_SOURCES += asm-macosx/appro-aes-x86-macosx.s asm-macosx/padlock-x86-macosx.s asm-macosx/cpuid-x86-macosx.s
+ endif
+
+ if ELF
+  libx86_la_SOURCES += asm/appro-aes-x86.s asm/padlock-x86.s asm/cpuid-x86.s
+ endif
 
 endif
diff --git a/lib/accelerated/x86/asm-macosx/appro-aes-gcm-x86-64-macosx.s b/lib/accelerated/x86/asm-macosx/appro-aes-gcm-x86-64-macosx.s
new file mode 100644 (file)
index 0000000..732332b
--- /dev/null
@@ -0,0 +1,1063 @@
+# Copyright (c) 2011, Andy Polyakov by <appro@openssl.org>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 
+#     * Redistributions of source code must retain copyright notices,
+#      this list of conditions and the following disclaimer.
+#
+#     * Redistributions in binary form must reproduce the above
+#      copyright notice, this list of conditions and the following
+#      disclaimer in the documentation and/or other materials
+#      provided with the distribution.
+#
+#     * Neither the name of the Andy Polyakov nor the names of its
+#      copyright holder and contributors may be used to endorse or
+#      promote products derived from this software without specific
+#      prior written permission.
+#
+# ALTERNATIVELY, provided that this notice is retained in full, this
+# product may be distributed under the terms of the GNU General Public
+# License (GPL), in which case the provisions of the GPL apply INSTEAD OF
+# those given above.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+.text  
+
+.globl _gcm_gmult_4bit
+
+.p2align       4
+_gcm_gmult_4bit:
+       pushq   %rbx
+       pushq   %rbp
+       pushq   %r12
+L$gmult_prologue:
+
+       movzbq  15(%rdi),%r8
+       leaq    L$rem_4bit(%rip),%r11
+       xorq    %rax,%rax
+       xorq    %rbx,%rbx
+       movb    %r8b,%al
+       movb    %r8b,%bl
+       shlb    $4,%al
+       movq    $14,%rcx
+       movq    8(%rsi,%rax,1),%r8
+       movq    (%rsi,%rax,1),%r9
+       andb    $240,%bl
+       movq    %r8,%rdx
+       jmp     L$oop1
+
+.p2align       4
+L$oop1:
+       shrq    $4,%r8
+       andq    $15,%rdx
+       movq    %r9,%r10
+       movb    (%rdi,%rcx,1),%al
+       shrq    $4,%r9
+       xorq    8(%rsi,%rbx,1),%r8
+       shlq    $60,%r10
+       xorq    (%rsi,%rbx,1),%r9
+       movb    %al,%bl
+       xorq    (%r11,%rdx,8),%r9
+       movq    %r8,%rdx
+       shlb    $4,%al
+       xorq    %r10,%r8
+       decq    %rcx
+       js      L$break1
+
+       shrq    $4,%r8
+       andq    $15,%rdx
+       movq    %r9,%r10
+       shrq    $4,%r9
+       xorq    8(%rsi,%rax,1),%r8
+       shlq    $60,%r10
+       xorq    (%rsi,%rax,1),%r9
+       andb    $240,%bl
+       xorq    (%r11,%rdx,8),%r9
+       movq    %r8,%rdx
+       xorq    %r10,%r8
+       jmp     L$oop1
+
+.p2align       4
+L$break1:
+       shrq    $4,%r8
+       andq    $15,%rdx
+       movq    %r9,%r10
+       shrq    $4,%r9
+       xorq    8(%rsi,%rax,1),%r8
+       shlq    $60,%r10
+       xorq    (%rsi,%rax,1),%r9
+       andb    $240,%bl
+       xorq    (%r11,%rdx,8),%r9
+       movq    %r8,%rdx
+       xorq    %r10,%r8
+
+       shrq    $4,%r8
+       andq    $15,%rdx
+       movq    %r9,%r10
+       shrq    $4,%r9
+       xorq    8(%rsi,%rbx,1),%r8
+       shlq    $60,%r10
+       xorq    (%rsi,%rbx,1),%r9
+       xorq    %r10,%r8
+       xorq    (%r11,%rdx,8),%r9
+
+       bswapq  %r8
+       bswapq  %r9
+       movq    %r8,8(%rdi)
+       movq    %r9,(%rdi)
+
+       movq    16(%rsp),%rbx
+       leaq    24(%rsp),%rsp
+L$gmult_epilogue:
+       .byte   0xf3,0xc3
+
+.globl _gcm_ghash_4bit
+
+.p2align       4
+_gcm_ghash_4bit:
+       pushq   %rbx
+       pushq   %rbp
+       pushq   %r12
+       pushq   %r13
+       pushq   %r14
+       pushq   %r15
+       subq    $280,%rsp
+L$ghash_prologue:
+       movq    %rdx,%r14
+       movq    %rcx,%r15
+       subq    $-128,%rsi
+       leaq    16+128(%rsp),%rbp
+       xorl    %edx,%edx
+       movq    0+0-128(%rsi),%r8
+       movq    0+8-128(%rsi),%rax
+       movb    %al,%dl
+       shrq    $4,%rax
+       movq    %r8,%r10
+       shrq    $4,%r8
+       movq    16+0-128(%rsi),%r9
+       shlb    $4,%dl
+       movq    16+8-128(%rsi),%rbx
+       shlq    $60,%r10
+       movb    %dl,0(%rsp)
+       orq     %r10,%rax
+       movb    %bl,%dl
+       shrq    $4,%rbx
+       movq    %r9,%r10
+       shrq    $4,%r9
+       movq    %r8,0(%rbp)
+       movq    32+0-128(%rsi),%r8
+       shlb    $4,%dl
+       movq    %rax,0-128(%rbp)
+       movq    32+8-128(%rsi),%rax
+       shlq    $60,%r10
+       movb    %dl,1(%rsp)
+       orq     %r10,%rbx
+       movb    %al,%dl
+       shrq    $4,%rax
+       movq    %r8,%r10
+       shrq    $4,%r8
+       movq    %r9,8(%rbp)
+       movq    48+0-128(%rsi),%r9
+       shlb    $4,%dl
+       movq    %rbx,8-128(%rbp)
+       movq    48+8-128(%rsi),%rbx
+       shlq    $60,%r10
+       movb    %dl,2(%rsp)
+       orq     %r10,%rax
+       movb    %bl,%dl
+       shrq    $4,%rbx
+       movq    %r9,%r10
+       shrq    $4,%r9
+       movq    %r8,16(%rbp)
+       movq    64+0-128(%rsi),%r8
+       shlb    $4,%dl
+       movq    %rax,16-128(%rbp)
+       movq    64+8-128(%rsi),%rax
+       shlq    $60,%r10
+       movb    %dl,3(%rsp)
+       orq     %r10,%rbx
+       movb    %al,%dl
+       shrq    $4,%rax
+       movq    %r8,%r10
+       shrq    $4,%r8
+       movq    %r9,24(%rbp)
+       movq    80+0-128(%rsi),%r9
+       shlb    $4,%dl
+       movq    %rbx,24-128(%rbp)
+       movq    80+8-128(%rsi),%rbx
+       shlq    $60,%r10
+       movb    %dl,4(%rsp)
+       orq     %r10,%rax
+       movb    %bl,%dl
+       shrq    $4,%rbx
+       movq    %r9,%r10
+       shrq    $4,%r9
+       movq    %r8,32(%rbp)
+       movq    96+0-128(%rsi),%r8
+       shlb    $4,%dl
+       movq    %rax,32-128(%rbp)
+       movq    96+8-128(%rsi),%rax
+       shlq    $60,%r10
+       movb    %dl,5(%rsp)
+       orq     %r10,%rbx
+       movb    %al,%dl
+       shrq    $4,%rax
+       movq    %r8,%r10
+       shrq    $4,%r8
+       movq    %r9,40(%rbp)
+       movq    112+0-128(%rsi),%r9
+       shlb    $4,%dl
+       movq    %rbx,40-128(%rbp)
+       movq    112+8-128(%rsi),%rbx
+       shlq    $60,%r10
+       movb    %dl,6(%rsp)
+       orq     %r10,%rax
+       movb    %bl,%dl
+       shrq    $4,%rbx
+       movq    %r9,%r10
+       shrq    $4,%r9
+       movq    %r8,48(%rbp)
+       movq    128+0-128(%rsi),%r8
+       shlb    $4,%dl
+       movq    %rax,48-128(%rbp)
+       movq    128+8-128(%rsi),%rax
+       shlq    $60,%r10
+       movb    %dl,7(%rsp)
+       orq     %r10,%rbx
+       movb    %al,%dl
+       shrq    $4,%rax
+       movq    %r8,%r10
+       shrq    $4,%r8
+       movq    %r9,56(%rbp)
+       movq    144+0-128(%rsi),%r9
+       shlb    $4,%dl
+       movq    %rbx,56-128(%rbp)
+       movq    144+8-128(%rsi),%rbx
+       shlq    $60,%r10
+       movb    %dl,8(%rsp)
+       orq     %r10,%rax
+       movb    %bl,%dl
+       shrq    $4,%rbx
+       movq    %r9,%r10
+       shrq    $4,%r9
+       movq    %r8,64(%rbp)
+       movq    160+0-128(%rsi),%r8
+       shlb    $4,%dl
+       movq    %rax,64-128(%rbp)
+       movq    160+8-128(%rsi),%rax
+       shlq    $60,%r10
+       movb    %dl,9(%rsp)
+       orq     %r10,%rbx
+       movb    %al,%dl
+       shrq    $4,%rax
+       movq    %r8,%r10
+       shrq    $4,%r8
+       movq    %r9,72(%rbp)
+       movq    176+0-128(%rsi),%r9
+       shlb    $4,%dl
+       movq    %rbx,72-128(%rbp)
+       movq    176+8-128(%rsi),%rbx
+       shlq    $60,%r10
+       movb    %dl,10(%rsp)
+       orq     %r10,%rax
+       movb    %bl,%dl
+       shrq    $4,%rbx
+       movq    %r9,%r10
+       shrq    $4,%r9
+       movq    %r8,80(%rbp)
+       movq    192+0-128(%rsi),%r8
+       shlb    $4,%dl
+       movq    %rax,80-128(%rbp)
+       movq    192+8-128(%rsi),%rax
+       shlq    $60,%r10
+       movb    %dl,11(%rsp)
+       orq     %r10,%rbx
+       movb    %al,%dl
+       shrq    $4,%rax
+       movq    %r8,%r10
+       shrq    $4,%r8
+       movq    %r9,88(%rbp)
+       movq    208+0-128(%rsi),%r9
+       shlb    $4,%dl
+       movq    %rbx,88-128(%rbp)
+       movq    208+8-128(%rsi),%rbx
+       shlq    $60,%r10
+       movb    %dl,12(%rsp)
+       orq     %r10,%rax
+       movb    %bl,%dl
+       shrq    $4,%rbx
+       movq    %r9,%r10
+       shrq    $4,%r9
+       movq    %r8,96(%rbp)
+       movq    224+0-128(%rsi),%r8
+       shlb    $4,%dl
+       movq    %rax,96-128(%rbp)
+       movq    224+8-128(%rsi),%rax
+       shlq    $60,%r10
+       movb    %dl,13(%rsp)
+       orq     %r10,%rbx
+       movb    %al,%dl
+       shrq    $4,%rax
+       movq    %r8,%r10
+       shrq    $4,%r8
+       movq    %r9,104(%rbp)
+       movq    240+0-128(%rsi),%r9
+       shlb    $4,%dl
+       movq    %rbx,104-128(%rbp)
+       movq    240+8-128(%rsi),%rbx
+       shlq    $60,%r10
+       movb    %dl,14(%rsp)
+       orq     %r10,%rax
+       movb    %bl,%dl
+       shrq    $4,%rbx
+       movq    %r9,%r10
+       shrq    $4,%r9
+       movq    %r8,112(%rbp)
+       shlb    $4,%dl
+       movq    %rax,112-128(%rbp)
+       shlq    $60,%r10
+       movb    %dl,15(%rsp)
+       orq     %r10,%rbx
+       movq    %r9,120(%rbp)
+       movq    %rbx,120-128(%rbp)
+       addq    $-128,%rsi
+       movq    8(%rdi),%r8
+       movq    0(%rdi),%r9
+       addq    %r14,%r15
+       leaq    L$rem_8bit(%rip),%r11
+       jmp     L$outer_loop
+.p2align       4
+L$outer_loop:
+       xorq    (%r14),%r9
+       movq    8(%r14),%rdx
+       leaq    16(%r14),%r14
+       xorq    %r8,%rdx
+       movq    %r9,(%rdi)
+       movq    %rdx,8(%rdi)
+       shrq    $32,%rdx
+       xorq    %rax,%rax
+       roll    $8,%edx
+       movb    %dl,%al
+       movzbl  %dl,%ebx
+       shlb    $4,%al
+       shrl    $4,%ebx
+       roll    $8,%edx
+       movq    8(%rsi,%rax,1),%r8
+       movq    (%rsi,%rax,1),%r9
+       movb    %dl,%al
+       movzbl  %dl,%ecx
+       shlb    $4,%al
+       movzbq  (%rsp,%rbx,1),%r12
+       shrl    $4,%ecx
+       xorq    %r8,%r12
+       movq    %r9,%r10
+       shrq    $8,%r8
+       movzbq  %r12b,%r12
+       shrq    $8,%r9
+       xorq    -128(%rbp,%rbx,8),%r8
+       shlq    $56,%r10
+       xorq    (%rbp,%rbx,8),%r9
+       roll    $8,%edx
+       xorq    8(%rsi,%rax,1),%r8
+       xorq    (%rsi,%rax,1),%r9
+       movb    %dl,%al
+       xorq    %r10,%r8
+       movzwq  (%r11,%r12,2),%r12
+       movzbl  %dl,%ebx
+       shlb    $4,%al
+       movzbq  (%rsp,%rcx,1),%r13
+       shrl    $4,%ebx
+       shlq    $48,%r12
+       xorq    %r8,%r13
+       movq    %r9,%r10
+       xorq    %r12,%r9
+       shrq    $8,%r8
+       movzbq  %r13b,%r13
+       shrq    $8,%r9
+       xorq    -128(%rbp,%rcx,8),%r8
+       shlq    $56,%r10
+       xorq    (%rbp,%rcx,8),%r9
+       roll    $8,%edx
+       xorq    8(%rsi,%rax,1),%r8
+       xorq    (%rsi,%rax,1),%r9
+       movb    %dl,%al
+       xorq    %r10,%r8
+       movzwq  (%r11,%r13,2),%r13
+       movzbl  %dl,%ecx
+       shlb    $4,%al
+       movzbq  (%rsp,%rbx,1),%r12
+       shrl    $4,%ecx
+       shlq    $48,%r13
+       xorq    %r8,%r12
+       movq    %r9,%r10
+       xorq    %r13,%r9
+       shrq    $8,%r8
+       movzbq  %r12b,%r12
+       movl    8(%rdi),%edx
+       shrq    $8,%r9
+       xorq    -128(%rbp,%rbx,8),%r8
+       shlq    $56,%r10
+       xorq    (%rbp,%rbx,8),%r9
+       roll    $8,%edx
+       xorq    8(%rsi,%rax,1),%r8
+       xorq    (%rsi,%rax,1),%r9
+       movb    %dl,%al
+       xorq    %r10,%r8
+       movzwq  (%r11,%r12,2),%r12
+       movzbl  %dl,%ebx
+       shlb    $4,%al
+       movzbq  (%rsp,%rcx,1),%r13
+       shrl    $4,%ebx
+       shlq    $48,%r12
+       xorq    %r8,%r13
+       movq    %r9,%r10
+       xorq    %r12,%r9
+       shrq    $8,%r8
+       movzbq  %r13b,%r13
+       shrq    $8,%r9
+       xorq    -128(%rbp,%rcx,8),%r8
+       shlq    $56,%r10
+       xorq    (%rbp,%rcx,8),%r9
+       roll    $8,%edx
+       xorq    8(%rsi,%rax,1),%r8
+       xorq    (%rsi,%rax,1),%r9
+       movb    %dl,%al
+       xorq    %r10,%r8
+       movzwq  (%r11,%r13,2),%r13
+       movzbl  %dl,%ecx
+       shlb    $4,%al
+       movzbq  (%rsp,%rbx,1),%r12
+       shrl    $4,%ecx
+       shlq    $48,%r13
+       xorq    %r8,%r12
+       movq    %r9,%r10
+       xorq    %r13,%r9
+       shrq    $8,%r8
+       movzbq  %r12b,%r12
+       shrq    $8,%r9
+       xorq    -128(%rbp,%rbx,8),%r8
+       shlq    $56,%r10
+       xorq    (%rbp,%rbx,8),%r9
+       roll    $8,%edx
+       xorq    8(%rsi,%rax,1),%r8
+       xorq    (%rsi,%rax,1),%r9
+       movb    %dl,%al
+       xorq    %r10,%r8
+       movzwq  (%r11,%r12,2),%r12
+       movzbl  %dl,%ebx
+       shlb    $4,%al
+       movzbq  (%rsp,%rcx,1),%r13
+       shrl    $4,%ebx
+       shlq    $48,%r12
+       xorq    %r8,%r13
+       movq    %r9,%r10
+       xorq    %r12,%r9
+       shrq    $8,%r8
+       movzbq  %r13b,%r13
+       shrq    $8,%r9
+       xorq    -128(%rbp,%rcx,8),%r8
+       shlq    $56,%r10
+       xorq    (%rbp,%rcx,8),%r9
+       roll    $8,%edx
+       xorq    8(%rsi,%rax,1),%r8
+       xorq    (%rsi,%rax,1),%r9
+       movb    %dl,%al
+       xorq    %r10,%r8
+       movzwq  (%r11,%r13,2),%r13
+       movzbl  %dl,%ecx
+       shlb    $4,%al
+       movzbq  (%rsp,%rbx,1),%r12
+       shrl    $4,%ecx
+       shlq    $48,%r13
+       xorq    %r8,%r12
+       movq    %r9,%r10
+       xorq    %r13,%r9
+       shrq    $8,%r8
+       movzbq  %r12b,%r12
+       movl    4(%rdi),%edx
+       shrq    $8,%r9
+       xorq    -128(%rbp,%rbx,8),%r8
+       shlq    $56,%r10
+       xorq    (%rbp,%rbx,8),%r9
+       roll    $8,%edx
+       xorq    8(%rsi,%rax,1),%r8
+       xorq    (%rsi,%rax,1),%r9
+       movb    %dl,%al
+       xorq    %r10,%r8
+       movzwq  (%r11,%r12,2),%r12
+       movzbl  %dl,%ebx
+       shlb    $4,%al
+       movzbq  (%rsp,%rcx,1),%r13
+       shrl    $4,%ebx
+       shlq    $48,%r12
+       xorq    %r8,%r13
+       movq    %r9,%r10
+       xorq    %r12,%r9
+       shrq    $8,%r8
+       movzbq  %r13b,%r13
+       shrq    $8,%r9
+       xorq    -128(%rbp,%rcx,8),%r8
+       shlq    $56,%r10
+       xorq    (%rbp,%rcx,8),%r9
+       roll    $8,%edx
+       xorq    8(%rsi,%rax,1),%r8
+       xorq    (%rsi,%rax,1),%r9
+       movb    %dl,%al
+       xorq    %r10,%r8
+       movzwq  (%r11,%r13,2),%r13
+       movzbl  %dl,%ecx
+       shlb    $4,%al
+       movzbq  (%rsp,%rbx,1),%r12
+       shrl    $4,%ecx
+       shlq    $48,%r13
+       xorq    %r8,%r12
+       movq    %r9,%r10
+       xorq    %r13,%r9
+       shrq    $8,%r8
+       movzbq  %r12b,%r12
+       shrq    $8,%r9
+       xorq    -128(%rbp,%rbx,8),%r8
+       shlq    $56,%r10
+       xorq    (%rbp,%rbx,8),%r9
+       roll    $8,%edx
+       xorq    8(%rsi,%rax,1),%r8
+       xorq    (%rsi,%rax,1),%r9
+       movb    %dl,%al
+       xorq    %r10,%r8
+       movzwq  (%r11,%r12,2),%r12
+       movzbl  %dl,%ebx
+       shlb    $4,%al
+       movzbq  (%rsp,%rcx,1),%r13
+       shrl    $4,%ebx
+       shlq    $48,%r12
+       xorq    %r8,%r13
+       movq    %r9,%r10
+       xorq    %r12,%r9
+       shrq    $8,%r8
+       movzbq  %r13b,%r13
+       shrq    $8,%r9
+       xorq    -128(%rbp,%rcx,8),%r8
+       shlq    $56,%r10
+       xorq    (%rbp,%rcx,8),%r9
+       roll    $8,%edx
+       xorq    8(%rsi,%rax,1),%r8
+       xorq    (%rsi,%rax,1),%r9
+       movb    %dl,%al
+       xorq    %r10,%r8
+       movzwq  (%r11,%r13,2),%r13
+       movzbl  %dl,%ecx
+       shlb    $4,%al
+       movzbq  (%rsp,%rbx,1),%r12
+       shrl    $4,%ecx
+       shlq    $48,%r13
+       xorq    %r8,%r12
+       movq    %r9,%r10
+       xorq    %r13,%r9
+       shrq    $8,%r8
+       movzbq  %r12b,%r12
+       movl    0(%rdi),%edx
+       shrq    $8,%r9
+       xorq    -128(%rbp,%rbx,8),%r8
+       shlq    $56,%r10
+       xorq    (%rbp,%rbx,8),%r9
+       roll    $8,%edx
+       xorq    8(%rsi,%rax,1),%r8
+       xorq    (%rsi,%rax,1),%r9
+       movb    %dl,%al
+       xorq    %r10,%r8
+       movzwq  (%r11,%r12,2),%r12
+       movzbl  %dl,%ebx
+       shlb    $4,%al
+       movzbq  (%rsp,%rcx,1),%r13
+       shrl    $4,%ebx
+       shlq    $48,%r12
+       xorq    %r8,%r13
+       movq    %r9,%r10
+       xorq    %r12,%r9
+       shrq    $8,%r8
+       movzbq  %r13b,%r13
+       shrq    $8,%r9
+       xorq    -128(%rbp,%rcx,8),%r8
+       shlq    $56,%r10
+       xorq    (%rbp,%rcx,8),%r9
+       roll    $8,%edx
+       xorq    8(%rsi,%rax,1),%r8
+       xorq    (%rsi,%rax,1),%r9
+       movb    %dl,%al
+       xorq    %r10,%r8
+       movzwq  (%r11,%r13,2),%r13
+       movzbl  %dl,%ecx
+       shlb    $4,%al
+       movzbq  (%rsp,%rbx,1),%r12
+       shrl    $4,%ecx
+       shlq    $48,%r13
+       xorq    %r8,%r12
+       movq    %r9,%r10
+       xorq    %r13,%r9
+       shrq    $8,%r8
+       movzbq  %r12b,%r12
+       shrq    $8,%r9
+       xorq    -128(%rbp,%rbx,8),%r8
+       shlq    $56,%r10
+       xorq    (%rbp,%rbx,8),%r9
+       roll    $8,%edx
+       xorq    8(%rsi,%rax,1),%r8
+       xorq    (%rsi,%rax,1),%r9
+       movb    %dl,%al
+       xorq    %r10,%r8
+       movzwq  (%r11,%r12,2),%r12
+       movzbl  %dl,%ebx
+       shlb    $4,%al
+       movzbq  (%rsp,%rcx,1),%r13
+       shrl    $4,%ebx
+       shlq    $48,%r12
+       xorq    %r8,%r13
+       movq    %r9,%r10
+       xorq    %r12,%r9
+       shrq    $8,%r8
+       movzbq  %r13b,%r13
+       shrq    $8,%r9
+       xorq    -128(%rbp,%rcx,8),%r8
+       shlq    $56,%r10
+       xorq    (%rbp,%rcx,8),%r9
+       roll    $8,%edx
+       xorq    8(%rsi,%rax,1),%r8
+       xorq    (%rsi,%rax,1),%r9
+       movb    %dl,%al
+       xorq    %r10,%r8
+       movzwq  (%r11,%r13,2),%r13
+       movzbl  %dl,%ecx
+       shlb    $4,%al
+       movzbq  (%rsp,%rbx,1),%r12
+       andl    $240,%ecx
+       shlq    $48,%r13
+       xorq    %r8,%r12
+       movq    %r9,%r10
+       xorq    %r13,%r9
+       shrq    $8,%r8
+       movzbq  %r12b,%r12
+       movl    -4(%rdi),%edx
+       shrq    $8,%r9
+       xorq    -128(%rbp,%rbx,8),%r8
+       shlq    $56,%r10
+       xorq    (%rbp,%rbx,8),%r9
+       movzwq  (%r11,%r12,2),%r12
+       xorq    8(%rsi,%rax,1),%r8
+       xorq    (%rsi,%rax,1),%r9
+       shlq    $48,%r12
+       xorq    %r10,%r8
+       xorq    %r12,%r9
+       movzbq  %r8b,%r13
+       shrq    $4,%r8
+       movq    %r9,%r10
+       shlb    $4,%r13b
+       shrq    $4,%r9
+       xorq    8(%rsi,%rcx,1),%r8
+       movzwq  (%r11,%r13,2),%r13
+       shlq    $60,%r10
+       xorq    (%rsi,%rcx,1),%r9
+       xorq    %r10,%r8
+       shlq    $48,%r13
+       bswapq  %r8
+       xorq    %r13,%r9
+       bswapq  %r9
+       cmpq    %r15,%r14
+       jb      L$outer_loop
+       movq    %r8,8(%rdi)
+       movq    %r9,(%rdi)
+
+       leaq    280(%rsp),%rsi
+       movq    0(%rsi),%r15
+       movq    8(%rsi),%r14
+       movq    16(%rsi),%r13
+       movq    24(%rsi),%r12
+       movq    32(%rsi),%rbp
+       movq    40(%rsi),%rbx
+       leaq    48(%rsi),%rsp
+L$ghash_epilogue:
+       .byte   0xf3,0xc3
+
+.globl _gcm_init_clmul
+
+.p2align       4
+_gcm_init_clmul:
+       movdqu  (%rsi),%xmm2
+       pshufd  $78,%xmm2,%xmm2
+
+
+       pshufd  $255,%xmm2,%xmm4
+       movdqa  %xmm2,%xmm3
+       psllq   $1,%xmm2
+       pxor    %xmm5,%xmm5
+       psrlq   $63,%xmm3
+       pcmpgtd %xmm4,%xmm5
+       pslldq  $8,%xmm3
+       por     %xmm3,%xmm2
+
+
+       pand    L$0x1c2_polynomial(%rip),%xmm5
+       pxor    %xmm5,%xmm2
+
+
+       movdqa  %xmm2,%xmm0
+       movdqa  %xmm0,%xmm1
+       pshufd  $78,%xmm0,%xmm3
+       pshufd  $78,%xmm2,%xmm4
+       pxor    %xmm0,%xmm3
+       pxor    %xmm2,%xmm4
+.byte  102,15,58,68,194,0
+.byte  102,15,58,68,202,17
+.byte  102,15,58,68,220,0
+       pxor    %xmm0,%xmm3
+       pxor    %xmm1,%xmm3
+
+       movdqa  %xmm3,%xmm4
+       psrldq  $8,%xmm3
+       pslldq  $8,%xmm4
+       pxor    %xmm3,%xmm1
+       pxor    %xmm4,%xmm0
+
+       movdqa  %xmm0,%xmm3
+       psllq   $1,%xmm0
+       pxor    %xmm3,%xmm0
+       psllq   $5,%xmm0
+       pxor    %xmm3,%xmm0
+       psllq   $57,%xmm0
+       movdqa  %xmm0,%xmm4
+       pslldq  $8,%xmm0
+       psrldq  $8,%xmm4
+       pxor    %xmm3,%xmm0
+       pxor    %xmm4,%xmm1
+
+
+       movdqa  %xmm0,%xmm4
+       psrlq   $5,%xmm0
+       pxor    %xmm4,%xmm0
+       psrlq   $1,%xmm0
+       pxor    %xmm4,%xmm0
+       pxor    %xmm1,%xmm4
+       psrlq   $1,%xmm0
+       pxor    %xmm4,%xmm0
+       movdqu  %xmm2,(%rdi)
+       movdqu  %xmm0,16(%rdi)
+       .byte   0xf3,0xc3
+
+.globl _gcm_gmult_clmul
+
+.p2align       4
+_gcm_gmult_clmul:
+       movdqu  (%rdi),%xmm0
+       movdqa  L$bswap_mask(%rip),%xmm5
+       movdqu  (%rsi),%xmm2
+.byte  102,15,56,0,197
+       movdqa  %xmm0,%xmm1
+       pshufd  $78,%xmm0,%xmm3
+       pshufd  $78,%xmm2,%xmm4
+       pxor    %xmm0,%xmm3
+       pxor    %xmm2,%xmm4
+.byte  102,15,58,68,194,0
+.byte  102,15,58,68,202,17
+.byte  102,15,58,68,220,0
+       pxor    %xmm0,%xmm3
+       pxor    %xmm1,%xmm3
+
+       movdqa  %xmm3,%xmm4
+       psrldq  $8,%xmm3
+       pslldq  $8,%xmm4
+       pxor    %xmm3,%xmm1
+       pxor    %xmm4,%xmm0
+
+       movdqa  %xmm0,%xmm3
+       psllq   $1,%xmm0
+       pxor    %xmm3,%xmm0
+       psllq   $5,%xmm0
+       pxor    %xmm3,%xmm0
+       psllq   $57,%xmm0
+       movdqa  %xmm0,%xmm4
+       pslldq  $8,%xmm0
+       psrldq  $8,%xmm4
+       pxor    %xmm3,%xmm0
+       pxor    %xmm4,%xmm1
+
+
+       movdqa  %xmm0,%xmm4
+       psrlq   $5,%xmm0
+       pxor    %xmm4,%xmm0
+       psrlq   $1,%xmm0
+       pxor    %xmm4,%xmm0
+       pxor    %xmm1,%xmm4
+       psrlq   $1,%xmm0
+       pxor    %xmm4,%xmm0
+.byte  102,15,56,0,197
+       movdqu  %xmm0,(%rdi)
+       .byte   0xf3,0xc3
+
+.globl _gcm_ghash_clmul
+
+.p2align       4
+_gcm_ghash_clmul:
+       movdqa  L$bswap_mask(%rip),%xmm5
+
+       movdqu  (%rdi),%xmm0
+       movdqu  (%rsi),%xmm2
+.byte  102,15,56,0,197
+
+       subq    $16,%rcx
+       jz      L$odd_tail
+
+       movdqu  16(%rsi),%xmm8
+
+
+
+
+
+       movdqu  (%rdx),%xmm3
+       movdqu  16(%rdx),%xmm6
+.byte  102,15,56,0,221
+.byte  102,15,56,0,245
+       pxor    %xmm3,%xmm0
+       movdqa  %xmm6,%xmm7
+       pshufd  $78,%xmm6,%xmm3
+       pshufd  $78,%xmm2,%xmm4
+       pxor    %xmm6,%xmm3
+       pxor    %xmm2,%xmm4
+.byte  102,15,58,68,242,0
+.byte  102,15,58,68,250,17
+.byte  102,15,58,68,220,0
+       pxor    %xmm6,%xmm3
+       pxor    %xmm7,%xmm3
+
+       movdqa  %xmm3,%xmm4
+       psrldq  $8,%xmm3
+       pslldq  $8,%xmm4
+       pxor    %xmm3,%xmm7
+       pxor    %xmm4,%xmm6
+       movdqa  %xmm0,%xmm1
+       pshufd  $78,%xmm0,%xmm3
+       pshufd  $78,%xmm8,%xmm4
+       pxor    %xmm0,%xmm3
+       pxor    %xmm8,%xmm4
+
+       leaq    32(%rdx),%rdx
+       subq    $32,%rcx
+       jbe     L$even_tail
+
+L$mod_loop:
+.byte  102,65,15,58,68,192,0
+.byte  102,65,15,58,68,200,17
+.byte  102,15,58,68,220,0
+       pxor    %xmm0,%xmm3
+       pxor    %xmm1,%xmm3
+
+       movdqa  %xmm3,%xmm4
+       psrldq  $8,%xmm3
+       pslldq  $8,%xmm4
+       pxor    %xmm3,%xmm1
+       pxor    %xmm4,%xmm0
+       movdqu  (%rdx),%xmm3
+       pxor    %xmm6,%xmm0
+       pxor    %xmm7,%xmm1
+
+       movdqu  16(%rdx),%xmm6
+.byte  102,15,56,0,221
+.byte  102,15,56,0,245
+
+       movdqa  %xmm6,%xmm7
+       pshufd  $78,%xmm6,%xmm9
+       pshufd  $78,%xmm2,%xmm10
+       pxor    %xmm6,%xmm9
+       pxor    %xmm2,%xmm10
+       pxor    %xmm3,%xmm1
+
+       movdqa  %xmm0,%xmm3
+       psllq   $1,%xmm0
+       pxor    %xmm3,%xmm0
+       psllq   $5,%xmm0
+       pxor    %xmm3,%xmm0
+.byte  102,15,58,68,242,0
+       psllq   $57,%xmm0
+       movdqa  %xmm0,%xmm4
+       pslldq  $8,%xmm0
+       psrldq  $8,%xmm4
+       pxor    %xmm3,%xmm0
+       pxor    %xmm4,%xmm1
+
+.byte  102,15,58,68,250,17
+       movdqa  %xmm0,%xmm4
+       psrlq   $5,%xmm0
+       pxor    %xmm4,%xmm0
+       psrlq   $1,%xmm0
+       pxor    %xmm4,%xmm0
+       pxor    %xmm1,%xmm4
+       psrlq   $1,%xmm0
+       pxor    %xmm4,%xmm0
+
+.byte  102,69,15,58,68,202,0
+       movdqa  %xmm0,%xmm1
+       pshufd  $78,%xmm0,%xmm3
+       pshufd  $78,%xmm8,%xmm4
+       pxor    %xmm0,%xmm3
+       pxor    %xmm8,%xmm4
+
+       pxor    %xmm6,%xmm9
+       pxor    %xmm7,%xmm9
+       movdqa  %xmm9,%xmm10
+       psrldq  $8,%xmm9
+       pslldq  $8,%xmm10
+       pxor    %xmm9,%xmm7
+       pxor    %xmm10,%xmm6
+
+       leaq    32(%rdx),%rdx
+       subq    $32,%rcx
+       ja      L$mod_loop
+
+L$even_tail:
+.byte  102,65,15,58,68,192,0
+.byte  102,65,15,58,68,200,17
+.byte  102,15,58,68,220,0
+       pxor    %xmm0,%xmm3
+       pxor    %xmm1,%xmm3
+
+       movdqa  %xmm3,%xmm4
+       psrldq  $8,%xmm3
+       pslldq  $8,%xmm4
+       pxor    %xmm3,%xmm1
+       pxor    %xmm4,%xmm0
+       pxor    %xmm6,%xmm0
+       pxor    %xmm7,%xmm1
+
+       movdqa  %xmm0,%xmm3
+       psllq   $1,%xmm0
+       pxor    %xmm3,%xmm0
+       psllq   $5,%xmm0
+       pxor    %xmm3,%xmm0
+       psllq   $57,%xmm0
+       movdqa  %xmm0,%xmm4
+       pslldq  $8,%xmm0
+       psrldq  $8,%xmm4
+       pxor    %xmm3,%xmm0
+       pxor    %xmm4,%xmm1
+
+
+       movdqa  %xmm0,%xmm4
+       psrlq   $5,%xmm0
+       pxor    %xmm4,%xmm0
+       psrlq   $1,%xmm0
+       pxor    %xmm4,%xmm0
+       pxor    %xmm1,%xmm4
+       psrlq   $1,%xmm0
+       pxor    %xmm4,%xmm0
+       testq   %rcx,%rcx
+       jnz     L$done
+
+L$odd_tail:
+       movdqu  (%rdx),%xmm3
+.byte  102,15,56,0,221
+       pxor    %xmm3,%xmm0
+       movdqa  %xmm0,%xmm1
+       pshufd  $78,%xmm0,%xmm3
+       pshufd  $78,%xmm2,%xmm4
+       pxor    %xmm0,%xmm3
+       pxor    %xmm2,%xmm4
+.byte  102,15,58,68,194,0
+.byte  102,15,58,68,202,17
+.byte  102,15,58,68,220,0
+       pxor    %xmm0,%xmm3
+       pxor    %xmm1,%xmm3
+
+       movdqa  %xmm3,%xmm4
+       psrldq  $8,%xmm3
+       pslldq  $8,%xmm4
+       pxor    %xmm3,%xmm1
+       pxor    %xmm4,%xmm0
+
+       movdqa  %xmm0,%xmm3
+       psllq   $1,%xmm0
+       pxor    %xmm3,%xmm0
+       psllq   $5,%xmm0
+       pxor    %xmm3,%xmm0
+       psllq   $57,%xmm0
+       movdqa  %xmm0,%xmm4
+       pslldq  $8,%xmm0
+       psrldq  $8,%xmm4
+       pxor    %xmm3,%xmm0
+       pxor    %xmm4,%xmm1
+
+
+       movdqa  %xmm0,%xmm4
+       psrlq   $5,%xmm0
+       pxor    %xmm4,%xmm0
+       psrlq   $1,%xmm0
+       pxor    %xmm4,%xmm0
+       pxor    %xmm1,%xmm4
+       psrlq   $1,%xmm0
+       pxor    %xmm4,%xmm0
+L$done:
+.byte  102,15,56,0,197
+       movdqu  %xmm0,(%rdi)
+       .byte   0xf3,0xc3
+L$SEH_end_gcm_ghash_clmul:
+
+.p2align       6
+L$bswap_mask:
+.byte  15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
+L$0x1c2_polynomial:
+.byte  1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xc2
+.p2align       6
+
+L$rem_4bit:
+.long  0,0,0,471859200,0,943718400,0,610271232
+.long  0,1887436800,0,1822425088,0,1220542464,0,1423966208
+.long  0,3774873600,0,4246732800,0,3644850176,0,3311403008
+.long  0,2441084928,0,2376073216,0,2847932416,0,3051356160
+
+L$rem_8bit:
+.value 0x0000,0x01C2,0x0384,0x0246,0x0708,0x06CA,0x048C,0x054E
+.value 0x0E10,0x0FD2,0x0D94,0x0C56,0x0918,0x08DA,0x0A9C,0x0B5E
+.value 0x1C20,0x1DE2,0x1FA4,0x1E66,0x1B28,0x1AEA,0x18AC,0x196E
+.value 0x1230,0x13F2,0x11B4,0x1076,0x1538,0x14FA,0x16BC,0x177E
+.value 0x3840,0x3982,0x3BC4,0x3A06,0x3F48,0x3E8A,0x3CCC,0x3D0E
+.value 0x3650,0x3792,0x35D4,0x3416,0x3158,0x309A,0x32DC,0x331E
+.value 0x2460,0x25A2,0x27E4,0x2626,0x2368,0x22AA,0x20EC,0x212E
+.value 0x2A70,0x2BB2,0x29F4,0x2836,0x2D78,0x2CBA,0x2EFC,0x2F3E
+.value 0x7080,0x7142,0x7304,0x72C6,0x7788,0x764A,0x740C,0x75CE
+.value 0x7E90,0x7F52,0x7D14,0x7CD6,0x7998,0x785A,0x7A1C,0x7BDE
+.value 0x6CA0,0x6D62,0x6F24,0x6EE6,0x6BA8,0x6A6A,0x682C,0x69EE
+.value 0x62B0,0x6372,0x6134,0x60F6,0x65B8,0x647A,0x663C,0x67FE
+.value 0x48C0,0x4902,0x4B44,0x4A86,0x4FC8,0x4E0A,0x4C4C,0x4D8E
+.value 0x46D0,0x4712,0x4554,0x4496,0x41D8,0x401A,0x425C,0x439E
+.value 0x54E0,0x5522,0x5764,0x56A6,0x53E8,0x522A,0x506C,0x51AE
+.value 0x5AF0,0x5B32,0x5974,0x58B6,0x5DF8,0x5C3A,0x5E7C,0x5FBE
+.value 0xE100,0xE0C2,0xE284,0xE346,0xE608,0xE7CA,0xE58C,0xE44E
+.value 0xEF10,0xEED2,0xEC94,0xED56,0xE818,0xE9DA,0xEB9C,0xEA5E
+.value 0xFD20,0xFCE2,0xFEA4,0xFF66,0xFA28,0xFBEA,0xF9AC,0xF86E
+.value 0xF330,0xF2F2,0xF0B4,0xF176,0xF438,0xF5FA,0xF7BC,0xF67E
+.value 0xD940,0xD882,0xDAC4,0xDB06,0xDE48,0xDF8A,0xDDCC,0xDC0E
+.value 0xD750,0xD692,0xD4D4,0xD516,0xD058,0xD19A,0xD3DC,0xD21E
+.value 0xC560,0xC4A2,0xC6E4,0xC726,0xC268,0xC3AA,0xC1EC,0xC02E
+.value 0xCB70,0xCAB2,0xC8F4,0xC936,0xCC78,0xCDBA,0xCFFC,0xCE3E
+.value 0x9180,0x9042,0x9204,0x93C6,0x9688,0x974A,0x950C,0x94CE
+.value 0x9F90,0x9E52,0x9C14,0x9DD6,0x9898,0x995A,0x9B1C,0x9ADE
+.value 0x8DA0,0x8C62,0x8E24,0x8FE6,0x8AA8,0x8B6A,0x892C,0x88EE
+.value 0x83B0,0x8272,0x8034,0x81F6,0x84B8,0x857A,0x873C,0x86FE
+.value 0xA9C0,0xA802,0xAA44,0xAB86,0xAEC8,0xAF0A,0xAD4C,0xAC8E
+.value 0xA7D0,0xA612,0xA454,0xA596,0xA0D8,0xA11A,0xA35C,0xA29E
+.value 0xB5E0,0xB422,0xB664,0xB7A6,0xB2E8,0xB32A,0xB16C,0xB0AE
+.value 0xBBF0,0xBA32,0xB874,0xB9B6,0xBCF8,0xBD3A,0xBF7C,0xBEBE
+
+.byte  71,72,65,83,72,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
+.p2align       6
diff --git a/lib/accelerated/x86/asm-macosx/appro-aes-x86-64-macosx.s b/lib/accelerated/x86/asm-macosx/appro-aes-x86-64-macosx.s
new file mode 100644 (file)
index 0000000..de7ca03
--- /dev/null
@@ -0,0 +1,2572 @@
+# Copyright (c) 2011, Andy Polyakov by <appro@openssl.org>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 
+#     * Redistributions of source code must retain copyright notices,
+#      this list of conditions and the following disclaimer.
+#
+#     * Redistributions in binary form must reproduce the above
+#      copyright notice, this list of conditions and the following
+#      disclaimer in the documentation and/or other materials
+#      provided with the distribution.
+#
+#     * Neither the name of the Andy Polyakov nor the names of its
+#      copyright holder and contributors may be used to endorse or
+#      promote products derived from this software without specific
+#      prior written permission.
+#
+# ALTERNATIVELY, provided that this notice is retained in full, this
+# product may be distributed under the terms of the GNU General Public
+# License (GPL), in which case the provisions of the GPL apply INSTEAD OF
+# those given above.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+.text  
+.globl _aesni_encrypt
+
+.p2align       4
+_aesni_encrypt:
+       movups  (%rdi),%xmm2
+       movl    240(%rdx),%eax
+       movups  (%rdx),%xmm0
+       movups  16(%rdx),%xmm1
+       leaq    32(%rdx),%rdx
+       xorps   %xmm0,%xmm2
+L$oop_enc1_1:
+.byte  102,15,56,220,209
+       decl    %eax
+       movups  (%rdx),%xmm1
+       leaq    16(%rdx),%rdx
+       jnz     L$oop_enc1_1    
+.byte  102,15,56,221,209
+       movups  %xmm2,(%rsi)
+       .byte   0xf3,0xc3
+
+
+.globl _aesni_decrypt
+
+.p2align       4
+_aesni_decrypt:
+       movups  (%rdi),%xmm2
+       movl    240(%rdx),%eax
+       movups  (%rdx),%xmm0
+       movups  16(%rdx),%xmm1
+       leaq    32(%rdx),%rdx
+       xorps   %xmm0,%xmm2
+L$oop_dec1_2:
+.byte  102,15,56,222,209
+       decl    %eax
+       movups  (%rdx),%xmm1
+       leaq    16(%rdx),%rdx
+       jnz     L$oop_dec1_2    
+.byte  102,15,56,223,209
+       movups  %xmm2,(%rsi)
+       .byte   0xf3,0xc3
+
+
+.p2align       4
+_aesni_encrypt3:
+       movups  (%rcx),%xmm0
+       shrl    $1,%eax
+       movups  16(%rcx),%xmm1
+       leaq    32(%rcx),%rcx
+       xorps   %xmm0,%xmm2
+       xorps   %xmm0,%xmm3
+       xorps   %xmm0,%xmm4
+       movups  (%rcx),%xmm0
+
+L$enc_loop3:
+.byte  102,15,56,220,209
+.byte  102,15,56,220,217
+       decl    %eax
+.byte  102,15,56,220,225
+       movups  16(%rcx),%xmm1
+.byte  102,15,56,220,208
+.byte  102,15,56,220,216
+       leaq    32(%rcx),%rcx
+.byte  102,15,56,220,224
+       movups  (%rcx),%xmm0
+       jnz     L$enc_loop3
+
+.byte  102,15,56,220,209
+.byte  102,15,56,220,217
+.byte  102,15,56,220,225
+.byte  102,15,56,221,208
+.byte  102,15,56,221,216
+.byte  102,15,56,221,224
+       .byte   0xf3,0xc3
+
+
+.p2align       4
+_aesni_decrypt3:
+       movups  (%rcx),%xmm0
+       shrl    $1,%eax
+       movups  16(%rcx),%xmm1
+       leaq    32(%rcx),%rcx
+       xorps   %xmm0,%xmm2
+       xorps   %xmm0,%xmm3
+       xorps   %xmm0,%xmm4
+       movups  (%rcx),%xmm0
+
+L$dec_loop3:
+.byte  102,15,56,222,209
+.byte  102,15,56,222,217
+       decl    %eax
+.byte  102,15,56,222,225
+       movups  16(%rcx),%xmm1
+.byte  102,15,56,222,208
+.byte  102,15,56,222,216
+       leaq    32(%rcx),%rcx
+.byte  102,15,56,222,224
+       movups  (%rcx),%xmm0
+       jnz     L$dec_loop3
+
+.byte  102,15,56,222,209
+.byte  102,15,56,222,217
+.byte  102,15,56,222,225
+.byte  102,15,56,223,208
+.byte  102,15,56,223,216
+.byte  102,15,56,223,224
+       .byte   0xf3,0xc3
+
+
+.p2align       4
+_aesni_encrypt4:
+       movups  (%rcx),%xmm0
+       shrl    $1,%eax
+       movups  16(%rcx),%xmm1
+       leaq    32(%rcx),%rcx
+       xorps   %xmm0,%xmm2
+       xorps   %xmm0,%xmm3
+       xorps   %xmm0,%xmm4
+       xorps   %xmm0,%xmm5
+       movups  (%rcx),%xmm0
+
+L$enc_loop4:
+.byte  102,15,56,220,209
+.byte  102,15,56,220,217
+       decl    %eax
+.byte  102,15,56,220,225
+.byte  102,15,56,220,233
+       movups  16(%rcx),%xmm1
+.byte  102,15,56,220,208
+.byte  102,15,56,220,216
+       leaq    32(%rcx),%rcx
+.byte  102,15,56,220,224
+.byte  102,15,56,220,232
+       movups  (%rcx),%xmm0
+       jnz     L$enc_loop4
+
+.byte  102,15,56,220,209
+.byte  102,15,56,220,217
+.byte  102,15,56,220,225
+.byte  102,15,56,220,233
+.byte  102,15,56,221,208
+.byte  102,15,56,221,216
+.byte  102,15,56,221,224
+.byte  102,15,56,221,232
+       .byte   0xf3,0xc3
+
+
+.p2align       4
+_aesni_decrypt4:
+       movups  (%rcx),%xmm0
+       shrl    $1,%eax
+       movups  16(%rcx),%xmm1
+       leaq    32(%rcx),%rcx
+       xorps   %xmm0,%xmm2
+       xorps   %xmm0,%xmm3
+       xorps   %xmm0,%xmm4
+       xorps   %xmm0,%xmm5
+       movups  (%rcx),%xmm0
+
+L$dec_loop4:
+.byte  102,15,56,222,209
+.byte  102,15,56,222,217
+       decl    %eax
+.byte  102,15,56,222,225
+.byte  102,15,56,222,233
+       movups  16(%rcx),%xmm1
+.byte  102,15,56,222,208
+.byte  102,15,56,222,216
+       leaq    32(%rcx),%rcx
+.byte  102,15,56,222,224
+.byte  102,15,56,222,232
+       movups  (%rcx),%xmm0
+       jnz     L$dec_loop4
+
+.byte  102,15,56,222,209
+.byte  102,15,56,222,217
+.byte  102,15,56,222,225
+.byte  102,15,56,222,233
+.byte  102,15,56,223,208
+.byte  102,15,56,223,216
+.byte  102,15,56,223,224
+.byte  102,15,56,223,232
+       .byte   0xf3,0xc3
+
+
+.p2align       4
+_aesni_encrypt6:
+       movups  (%rcx),%xmm0
+       shrl    $1,%eax
+       movups  16(%rcx),%xmm1
+       leaq    32(%rcx),%rcx
+       xorps   %xmm0,%xmm2
+       pxor    %xmm0,%xmm3
+.byte  102,15,56,220,209
+       pxor    %xmm0,%xmm4
+.byte  102,15,56,220,217
+       pxor    %xmm0,%xmm5
+.byte  102,15,56,220,225
+       pxor    %xmm0,%xmm6
+.byte  102,15,56,220,233
+       pxor    %xmm0,%xmm7
+       decl    %eax
+.byte  102,15,56,220,241
+       movups  (%rcx),%xmm0
+.byte  102,15,56,220,249
+       jmp     L$enc_loop6_enter
+.p2align       4
+L$enc_loop6:
+.byte  102,15,56,220,209
+.byte  102,15,56,220,217
+       decl    %eax
+.byte  102,15,56,220,225
+.byte  102,15,56,220,233
+.byte  102,15,56,220,241
+.byte  102,15,56,220,249
+L$enc_loop6_enter:
+       movups  16(%rcx),%xmm1
+.byte  102,15,56,220,208
+.byte  102,15,56,220,216
+       leaq    32(%rcx),%rcx
+.byte  102,15,56,220,224
+.byte  102,15,56,220,232
+.byte  102,15,56,220,240
+.byte  102,15,56,220,248
+       movups  (%rcx),%xmm0
+       jnz     L$enc_loop6
+
+.byte  102,15,56,220,209
+.byte  102,15,56,220,217
+.byte  102,15,56,220,225
+.byte  102,15,56,220,233
+.byte  102,15,56,220,241
+.byte  102,15,56,220,249
+.byte  102,15,56,221,208
+.byte  102,15,56,221,216
+.byte  102,15,56,221,224
+.byte  102,15,56,221,232
+.byte  102,15,56,221,240
+.byte  102,15,56,221,248
+       .byte   0xf3,0xc3
+
+
+.p2align       4
+_aesni_decrypt6:
+       movups  (%rcx),%xmm0
+       shrl    $1,%eax
+       movups  16(%rcx),%xmm1
+       leaq    32(%rcx),%rcx
+       xorps   %xmm0,%xmm2
+       pxor    %xmm0,%xmm3
+.byte  102,15,56,222,209
+       pxor    %xmm0,%xmm4
+.byte  102,15,56,222,217
+       pxor    %xmm0,%xmm5
+.byte  102,15,56,222,225
+       pxor    %xmm0,%xmm6
+.byte  102,15,56,222,233
+       pxor    %xmm0,%xmm7
+       decl    %eax
+.byte  102,15,56,222,241
+       movups  (%rcx),%xmm0
+.byte  102,15,56,222,249
+       jmp     L$dec_loop6_enter
+.p2align       4
+L$dec_loop6:
+.byte  102,15,56,222,209
+.byte  102,15,56,222,217
+       decl    %eax
+.byte  102,15,56,222,225
+.byte  102,15,56,222,233
+.byte  102,15,56,222,241
+.byte  102,15,56,222,249
+L$dec_loop6_enter:
+       movups  16(%rcx),%xmm1
+.byte  102,15,56,222,208
+.byte  102,15,56,222,216
+       leaq    32(%rcx),%rcx
+.byte  102,15,56,222,224
+.byte  102,15,56,222,232
+.byte  102,15,56,222,240
+.byte  102,15,56,222,248
+       movups  (%rcx),%xmm0
+       jnz     L$dec_loop6
+
+.byte  102,15,56,222,209
+.byte  102,15,56,222,217
+.byte  102,15,56,222,225
+.byte  102,15,56,222,233
+.byte  102,15,56,222,241
+.byte  102,15,56,222,249
+.byte  102,15,56,223,208
+.byte  102,15,56,223,216
+.byte  102,15,56,223,224
+.byte  102,15,56,223,232
+.byte  102,15,56,223,240
+.byte  102,15,56,223,248
+       .byte   0xf3,0xc3
+
+
+.p2align       4
+_aesni_encrypt8:
+       movups  (%rcx),%xmm0
+       shrl    $1,%eax
+       movups  16(%rcx),%xmm1
+       leaq    32(%rcx),%rcx
+       xorps   %xmm0,%xmm2
+       xorps   %xmm0,%xmm3
+.byte  102,15,56,220,209
+       pxor    %xmm0,%xmm4
+.byte  102,15,56,220,217
+       pxor    %xmm0,%xmm5
+.byte  102,15,56,220,225
+       pxor    %xmm0,%xmm6
+.byte  102,15,56,220,233
+       pxor    %xmm0,%xmm7
+       decl    %eax
+.byte  102,15,56,220,241
+       pxor    %xmm0,%xmm8
+.byte  102,15,56,220,249
+       pxor    %xmm0,%xmm9
+       movups  (%rcx),%xmm0
+.byte  102,68,15,56,220,193
+.byte  102,68,15,56,220,201
+       movups  16(%rcx),%xmm1
+       jmp     L$enc_loop8_enter
+.p2align       4
+L$enc_loop8:
+.byte  102,15,56,220,209
+.byte  102,15,56,220,217
+       decl    %eax
+.byte  102,15,56,220,225
+.byte  102,15,56,220,233
+.byte  102,15,56,220,241
+.byte  102,15,56,220,249
+.byte  102,68,15,56,220,193
+.byte  102,68,15,56,220,201
+       movups  16(%rcx),%xmm1
+L$enc_loop8_enter:
+.byte  102,15,56,220,208
+.byte  102,15,56,220,216
+       leaq    32(%rcx),%rcx
+.byte  102,15,56,220,224
+.byte  102,15,56,220,232
+.byte  102,15,56,220,240
+.byte  102,15,56,220,248
+.byte  102,68,15,56,220,192
+.byte  102,68,15,56,220,200
+       movups  (%rcx),%xmm0
+       jnz     L$enc_loop8
+
+.byte  102,15,56,220,209
+.byte  102,15,56,220,217
+.byte  102,15,56,220,225
+.byte  102,15,56,220,233
+.byte  102,15,56,220,241
+.byte  102,15,56,220,249
+.byte  102,68,15,56,220,193
+.byte  102,68,15,56,220,201
+.byte  102,15,56,221,208
+.byte  102,15,56,221,216
+.byte  102,15,56,221,224
+.byte  102,15,56,221,232
+.byte  102,15,56,221,240
+.byte  102,15,56,221,248
+.byte  102,68,15,56,221,192
+.byte  102,68,15,56,221,200
+       .byte   0xf3,0xc3
+
+
+.p2align       4
+_aesni_decrypt8:
+       movups  (%rcx),%xmm0
+       shrl    $1,%eax
+       movups  16(%rcx),%xmm1
+       leaq    32(%rcx),%rcx
+       xorps   %xmm0,%xmm2
+       xorps   %xmm0,%xmm3
+.byte  102,15,56,222,209
+       pxor    %xmm0,%xmm4
+.byte  102,15,56,222,217
+       pxor    %xmm0,%xmm5
+.byte  102,15,56,222,225
+       pxor    %xmm0,%xmm6
+.byte  102,15,56,222,233
+       pxor    %xmm0,%xmm7
+       decl    %eax
+.byte  102,15,56,222,241
+       pxor    %xmm0,%xmm8
+.byte  102,15,56,222,249
+       pxor    %xmm0,%xmm9
+       movups  (%rcx),%xmm0
+.byte  102,68,15,56,222,193
+.byte  102,68,15,56,222,201
+       movups  16(%rcx),%xmm1
+       jmp     L$dec_loop8_enter
+.p2align       4
+L$dec_loop8:
+.byte  102,15,56,222,209
+.byte  102,15,56,222,217
+       decl    %eax
+.byte  102,15,56,222,225
+.byte  102,15,56,222,233
+.byte  102,15,56,222,241
+.byte  102,15,56,222,249
+.byte  102,68,15,56,222,193
+.byte  102,68,15,56,222,201
+       movups  16(%rcx),%xmm1
+L$dec_loop8_enter:
+.byte  102,15,56,222,208
+.byte  102,15,56,222,216
+       leaq    32(%rcx),%rcx
+.byte  102,15,56,222,224
+.byte  102,15,56,222,232
+.byte  102,15,56,222,240
+.byte  102,15,56,222,248
+.byte  102,68,15,56,222,192
+.byte  102,68,15,56,222,200
+       movups  (%rcx),%xmm0
+       jnz     L$dec_loop8
+
+.byte  102,15,56,222,209
+.byte  102,15,56,222,217
+.byte  102,15,56,222,225
+.byte  102,15,56,222,233
+.byte  102,15,56,222,241
+.byte  102,15,56,222,249
+.byte  102,68,15,56,222,193
+.byte  102,68,15,56,222,201
+.byte  102,15,56,223,208
+.byte  102,15,56,223,216
+.byte  102,15,56,223,224
+.byte  102,15,56,223,232
+.byte  102,15,56,223,240
+.byte  102,15,56,223,248
+.byte  102,68,15,56,223,192
+.byte  102,68,15,56,223,200
+       .byte   0xf3,0xc3
+
+.globl _aesni_ecb_encrypt
+
+.p2align       4
+_aesni_ecb_encrypt:
+       andq    $-16,%rdx
+       jz      L$ecb_ret
+
+       movl    240(%rcx),%eax
+       movups  (%rcx),%xmm0
+       movq    %rcx,%r11
+       movl    %eax,%r10d
+       testl   %r8d,%r8d
+       jz      L$ecb_decrypt
+
+       cmpq    $128,%rdx
+       jb      L$ecb_enc_tail
+
+       movdqu  (%rdi),%xmm2
+       movdqu  16(%rdi),%xmm3
+       movdqu  32(%rdi),%xmm4
+       movdqu  48(%rdi),%xmm5
+       movdqu  64(%rdi),%xmm6
+       movdqu  80(%rdi),%xmm7
+       movdqu  96(%rdi),%xmm8
+       movdqu  112(%rdi),%xmm9
+       leaq    128(%rdi),%rdi
+       subq    $128,%rdx
+       jmp     L$ecb_enc_loop8_enter
+.p2align       4
+L$ecb_enc_loop8:
+       movups  %xmm2,(%rsi)
+       movq    %r11,%rcx
+       movdqu  (%rdi),%xmm2
+       movl    %r10d,%eax
+       movups  %xmm3,16(%rsi)
+       movdqu  16(%rdi),%xmm3
+       movups  %xmm4,32(%rsi)
+       movdqu  32(%rdi),%xmm4
+       movups  %xmm5,48(%rsi)
+       movdqu  48(%rdi),%xmm5
+       movups  %xmm6,64(%rsi)
+       movdqu  64(%rdi),%xmm6
+       movups  %xmm7,80(%rsi)
+       movdqu  80(%rdi),%xmm7
+       movups  %xmm8,96(%rsi)
+       movdqu  96(%rdi),%xmm8
+       movups  %xmm9,112(%rsi)
+       leaq    128(%rsi),%rsi
+       movdqu  112(%rdi),%xmm9
+       leaq    128(%rdi),%rdi
+L$ecb_enc_loop8_enter:
+
+       call    _aesni_encrypt8
+
+       subq    $128,%rdx
+       jnc     L$ecb_enc_loop8
+
+       movups  %xmm2,(%rsi)
+       movq    %r11,%rcx
+       movups  %xmm3,16(%rsi)
+       movl    %r10d,%eax
+       movups  %xmm4,32(%rsi)
+       movups  %xmm5,48(%rsi)
+       movups  %xmm6,64(%rsi)
+       movups  %xmm7,80(%rsi)
+       movups  %xmm8,96(%rsi)
+       movups  %xmm9,112(%rsi)
+       leaq    128(%rsi),%rsi
+       addq    $128,%rdx
+       jz      L$ecb_ret
+
+L$ecb_enc_tail:
+       movups  (%rdi),%xmm2
+       cmpq    $32,%rdx
+       jb      L$ecb_enc_one
+       movups  16(%rdi),%xmm3
+       je      L$ecb_enc_two
+       movups  32(%rdi),%xmm4
+       cmpq    $64,%rdx
+       jb      L$ecb_enc_three
+       movups  48(%rdi),%xmm5
+       je      L$ecb_enc_four
+       movups  64(%rdi),%xmm6
+       cmpq    $96,%rdx
+       jb      L$ecb_enc_five
+       movups  80(%rdi),%xmm7
+       je      L$ecb_enc_six
+       movdqu  96(%rdi),%xmm8
+       call    _aesni_encrypt8
+       movups  %xmm2,(%rsi)
+       movups  %xmm3,16(%rsi)
+       movups  %xmm4,32(%rsi)
+       movups  %xmm5,48(%rsi)
+       movups  %xmm6,64(%rsi)
+       movups  %xmm7,80(%rsi)
+       movups  %xmm8,96(%rsi)
+       jmp     L$ecb_ret
+.p2align       4
+L$ecb_enc_one:
+       movups  (%rcx),%xmm0
+       movups  16(%rcx),%xmm1
+       leaq    32(%rcx),%rcx
+       xorps   %xmm0,%xmm2
+L$oop_enc1_3:
+.byte  102,15,56,220,209
+       decl    %eax
+       movups  (%rcx),%xmm1
+       leaq    16(%rcx),%rcx
+       jnz     L$oop_enc1_3    
+.byte  102,15,56,221,209
+       movups  %xmm2,(%rsi)
+       jmp     L$ecb_ret
+.p2align       4
+L$ecb_enc_two:
+       xorps   %xmm4,%xmm4
+       call    _aesni_encrypt3
+       movups  %xmm2,(%rsi)
+       movups  %xmm3,16(%rsi)
+       jmp     L$ecb_ret
+.p2align       4
+L$ecb_enc_three:
+       call    _aesni_encrypt3
+       movups  %xmm2,(%rsi)
+       movups  %xmm3,16(%rsi)
+       movups  %xmm4,32(%rsi)
+       jmp     L$ecb_ret
+.p2align       4
+L$ecb_enc_four:
+       call    _aesni_encrypt4
+       movups  %xmm2,(%rsi)
+       movups  %xmm3,16(%rsi)
+       movups  %xmm4,32(%rsi)
+       movups  %xmm5,48(%rsi)
+       jmp     L$ecb_ret
+.p2align       4
+L$ecb_enc_five:
+       xorps   %xmm7,%xmm7
+       call    _aesni_encrypt6
+       movups  %xmm2,(%rsi)
+       movups  %xmm3,16(%rsi)
+       movups  %xmm4,32(%rsi)
+       movups  %xmm5,48(%rsi)
+       movups  %xmm6,64(%rsi)
+       jmp     L$ecb_ret
+.p2align       4
+L$ecb_enc_six:
+       call    _aesni_encrypt6
+       movups  %xmm2,(%rsi)
+       movups  %xmm3,16(%rsi)
+       movups  %xmm4,32(%rsi)
+       movups  %xmm5,48(%rsi)
+       movups  %xmm6,64(%rsi)
+       movups  %xmm7,80(%rsi)
+       jmp     L$ecb_ret
+
+.p2align       4
+L$ecb_decrypt:
+       cmpq    $128,%rdx
+       jb      L$ecb_dec_tail
+
+       movdqu  (%rdi),%xmm2
+       movdqu  16(%rdi),%xmm3
+       movdqu  32(%rdi),%xmm4
+       movdqu  48(%rdi),%xmm5
+       movdqu  64(%rdi),%xmm6
+       movdqu  80(%rdi),%xmm7
+       movdqu  96(%rdi),%xmm8
+       movdqu  112(%rdi),%xmm9
+       leaq    128(%rdi),%rdi
+       subq    $128,%rdx
+       jmp     L$ecb_dec_loop8_enter
+.p2align       4
+L$ecb_dec_loop8:
+       movups  %xmm2,(%rsi)
+       movq    %r11,%rcx
+       movdqu  (%rdi),%xmm2
+       movl    %r10d,%eax
+       movups  %xmm3,16(%rsi)
+       movdqu  16(%rdi),%xmm3
+       movups  %xmm4,32(%rsi)
+       movdqu  32(%rdi),%xmm4
+       movups  %xmm5,48(%rsi)
+       movdqu  48(%rdi),%xmm5
+       movups  %xmm6,64(%rsi)
+       movdqu  64(%rdi),%xmm6
+       movups  %xmm7,80(%rsi)
+       movdqu  80(%rdi),%xmm7
+       movups  %xmm8,96(%rsi)
+       movdqu  96(%rdi),%xmm8
+       movups  %xmm9,112(%rsi)
+       leaq    128(%rsi),%rsi
+       movdqu  112(%rdi),%xmm9
+       leaq    128(%rdi),%rdi
+L$ecb_dec_loop8_enter:
+
+       call    _aesni_decrypt8
+
+       movups  (%r11),%xmm0
+       subq    $128,%rdx
+       jnc     L$ecb_dec_loop8
+
+       movups  %xmm2,(%rsi)
+       movq    %r11,%rcx
+       movups  %xmm3,16(%rsi)
+       movl    %r10d,%eax
+       movups  %xmm4,32(%rsi)
+       movups  %xmm5,48(%rsi)
+       movups  %xmm6,64(%rsi)
+       movups  %xmm7,80(%rsi)
+       movups  %xmm8,96(%rsi)
+       movups  %xmm9,112(%rsi)
+       leaq    128(%rsi),%rsi
+       addq    $128,%rdx
+       jz      L$ecb_ret
+
+L$ecb_dec_tail:
+       movups  (%rdi),%xmm2
+       cmpq    $32,%rdx
+       jb      L$ecb_dec_one
+       movups  16(%rdi),%xmm3
+       je      L$ecb_dec_two
+       movups  32(%rdi),%xmm4
+       cmpq    $64,%rdx
+       jb      L$ecb_dec_three
+       movups  48(%rdi),%xmm5
+       je      L$ecb_dec_four
+       movups  64(%rdi),%xmm6
+       cmpq    $96,%rdx
+       jb      L$ecb_dec_five
+       movups  80(%rdi),%xmm7
+       je      L$ecb_dec_six
+       movups  96(%rdi),%xmm8
+       movups  (%rcx),%xmm0
+       call    _aesni_decrypt8
+       movups  %xmm2,(%rsi)
+       movups  %xmm3,16(%rsi)
+       movups  %xmm4,32(%rsi)
+       movups  %xmm5,48(%rsi)
+       movups  %xmm6,64(%rsi)
+       movups  %xmm7,80(%rsi)
+       movups  %xmm8,96(%rsi)
+       jmp     L$ecb_ret
+.p2align       4
+L$ecb_dec_one:
+       movups  (%rcx),%xmm0
+       movups  16(%rcx),%xmm1
+       leaq    32(%rcx),%rcx
+       xorps   %xmm0,%xmm2
+L$oop_dec1_4:
+.byte  102,15,56,222,209
+       decl    %eax
+       movups  (%rcx),%xmm1
+       leaq    16(%rcx),%rcx
+       jnz     L$oop_dec1_4    
+.byte  102,15,56,223,209
+       movups  %xmm2,(%rsi)
+       jmp     L$ecb_ret
+.p2align       4
+L$ecb_dec_two:
+       xorps   %xmm4,%xmm4
+       call    _aesni_decrypt3
+       movups  %xmm2,(%rsi)
+       movups  %xmm3,16(%rsi)
+       jmp     L$ecb_ret
+.p2align       4
+L$ecb_dec_three:
+       call    _aesni_decrypt3
+       movups  %xmm2,(%rsi)
+       movups  %xmm3,16(%rsi)
+       movups  %xmm4,32(%rsi)
+       jmp     L$ecb_ret
+.p2align       4
+L$ecb_dec_four:
+       call    _aesni_decrypt4
+       movups  %xmm2,(%rsi)
+       movups  %xmm3,16(%rsi)
+       movups  %xmm4,32(%rsi)
+       movups  %xmm5,48(%rsi)
+       jmp     L$ecb_ret
+.p2align       4
+L$ecb_dec_five:
+       xorps   %xmm7,%xmm7
+       call    _aesni_decrypt6
+       movups  %xmm2,(%rsi)
+       movups  %xmm3,16(%rsi)
+       movups  %xmm4,32(%rsi)
+       movups  %xmm5,48(%rsi)
+       movups  %xmm6,64(%rsi)
+       jmp     L$ecb_ret
+.p2align       4
+L$ecb_dec_six:
+       call    _aesni_decrypt6
+       movups  %xmm2,(%rsi)
+       movups  %xmm3,16(%rsi)
+       movups  %xmm4,32(%rsi)
+       movups  %xmm5,48(%rsi)
+       movups  %xmm6,64(%rsi)
+       movups  %xmm7,80(%rsi)
+
+L$ecb_ret:
+       .byte   0xf3,0xc3
+
+.globl _aesni_ccm64_encrypt_blocks
+
+.p2align       4
+_aesni_ccm64_encrypt_blocks:
+       movl    240(%rcx),%eax
+       movdqu  (%r8),%xmm9
+       movdqa  L$increment64(%rip),%xmm6
+       movdqa  L$bswap_mask(%rip),%xmm7
+
+       shrl    $1,%eax
+       leaq    0(%rcx),%r11
+       movdqu  (%r9),%xmm3
+       movdqa  %xmm9,%xmm2
+       movl    %eax,%r10d
+.byte  102,68,15,56,0,207
+       jmp     L$ccm64_enc_outer
+.p2align       4
+L$ccm64_enc_outer:
+       movups  (%r11),%xmm0
+       movl    %r10d,%eax
+       movups  (%rdi),%xmm8
+
+       xorps   %xmm0,%xmm2
+       movups  16(%r11),%xmm1
+       xorps   %xmm8,%xmm0
+       leaq    32(%r11),%rcx
+       xorps   %xmm0,%xmm3
+       movups  (%rcx),%xmm0
+
+L$ccm64_enc2_loop:
+.byte  102,15,56,220,209
+       decl    %eax
+.byte  102,15,56,220,217
+       movups  16(%rcx),%xmm1
+.byte  102,15,56,220,208
+       leaq    32(%rcx),%rcx
+.byte  102,15,56,220,216
+       movups  0(%rcx),%xmm0
+       jnz     L$ccm64_enc2_loop
+.byte  102,15,56,220,209
+.byte  102,15,56,220,217
+       paddq   %xmm6,%xmm9
+.byte  102,15,56,221,208
+.byte  102,15,56,221,216
+
+       decq    %rdx
+       leaq    16(%rdi),%rdi
+       xorps   %xmm2,%xmm8
+       movdqa  %xmm9,%xmm2
+       movups  %xmm8,(%rsi)
+       leaq    16(%rsi),%rsi
+.byte  102,15,56,0,215
+       jnz     L$ccm64_enc_outer
+
+       movups  %xmm3,(%r9)
+       .byte   0xf3,0xc3
+
+.globl _aesni_ccm64_decrypt_blocks
+
+.p2align       4
+_aesni_ccm64_decrypt_blocks:
+       movl    240(%rcx),%eax
+       movups  (%r8),%xmm9
+       movdqu  (%r9),%xmm3
+       movdqa  L$increment64(%rip),%xmm6
+       movdqa  L$bswap_mask(%rip),%xmm7
+
+       movaps  %xmm9,%xmm2
+       movl    %eax,%r10d
+       movq    %rcx,%r11
+.byte  102,68,15,56,0,207
+       movups  (%rcx),%xmm0
+       movups  16(%rcx),%xmm1
+       leaq    32(%rcx),%rcx
+       xorps   %xmm0,%xmm2
+L$oop_enc1_5:
+.byte  102,15,56,220,209
+       decl    %eax
+       movups  (%rcx),%xmm1
+       leaq    16(%rcx),%rcx
+       jnz     L$oop_enc1_5    
+.byte  102,15,56,221,209
+       movups  (%rdi),%xmm8
+       paddq   %xmm6,%xmm9
+       leaq    16(%rdi),%rdi
+       jmp     L$ccm64_dec_outer
+.p2align       4
+L$ccm64_dec_outer:
+       xorps   %xmm2,%xmm8
+       movdqa  %xmm9,%xmm2
+       movl    %r10d,%eax
+       movups  %xmm8,(%rsi)
+       leaq    16(%rsi),%rsi
+.byte  102,15,56,0,215
+
+       subq    $1,%rdx
+       jz      L$ccm64_dec_break
+
+       movups  (%r11),%xmm0
+       shrl    $1,%eax
+       movups  16(%r11),%xmm1
+       xorps   %xmm0,%xmm8
+       leaq    32(%r11),%rcx
+       xorps   %xmm0,%xmm2
+       xorps   %xmm8,%xmm3
+       movups  (%rcx),%xmm0
+
+L$ccm64_dec2_loop:
+.byte  102,15,56,220,209
+       decl    %eax
+.byte  102,15,56,220,217
+       movups  16(%rcx),%xmm1
+.byte  102,15,56,220,208
+       leaq    32(%rcx),%rcx
+.byte  102,15,56,220,216
+       movups  0(%rcx),%xmm0
+       jnz     L$ccm64_dec2_loop
+       movups  (%rdi),%xmm8
+       paddq   %xmm6,%xmm9
+.byte  102,15,56,220,209
+.byte  102,15,56,220,217
+       leaq    16(%rdi),%rdi
+.byte  102,15,56,221,208
+.byte  102,15,56,221,216
+       jmp     L$ccm64_dec_outer
+
+.p2align       4
+L$ccm64_dec_break:
+
+       movups  (%r11),%xmm0
+       movups  16(%r11),%xmm1
+       xorps   %xmm0,%xmm8
+       leaq    32(%r11),%r11
+       xorps   %xmm8,%xmm3
+L$oop_enc1_6:
+.byte  102,15,56,220,217
+       decl    %eax
+       movups  (%r11),%xmm1
+       leaq    16(%r11),%r11
+       jnz     L$oop_enc1_6    
+.byte  102,15,56,221,217
+       movups  %xmm3,(%r9)
+       .byte   0xf3,0xc3
+
+.globl _aesni_ctr32_encrypt_blocks
+
+.p2align       4
+_aesni_ctr32_encrypt_blocks:
+       cmpq    $1,%rdx
+       je      L$ctr32_one_shortcut
+
+       movdqu  (%r8),%xmm14
+       movdqa  L$bswap_mask(%rip),%xmm15
+       xorl    %eax,%eax
+.byte  102,69,15,58,22,242,3
+.byte  102,68,15,58,34,240,3
+
+       movl    240(%rcx),%eax
+       bswapl  %r10d
+       pxor    %xmm12,%xmm12
+       pxor    %xmm13,%xmm13
+.byte  102,69,15,58,34,226,0
+       leaq    3(%r10),%r11
+.byte  102,69,15,58,34,235,0
+       incl    %r10d
+.byte  102,69,15,58,34,226,1
+       incq    %r11
+.byte  102,69,15,58,34,235,1
+       incl    %r10d
+.byte  102,69,15,58,34,226,2
+       incq    %r11
+.byte  102,69,15,58,34,235,2
+       movdqa  %xmm12,-40(%rsp)
+.byte  102,69,15,56,0,231
+       movdqa  %xmm13,-24(%rsp)
+.byte  102,69,15,56,0,239
+
+       pshufd  $192,%xmm12,%xmm2
+       pshufd  $128,%xmm12,%xmm3
+       pshufd  $64,%xmm12,%xmm4
+       cmpq    $6,%rdx
+       jb      L$ctr32_tail
+       shrl    $1,%eax
+       movq    %rcx,%r11
+       movl    %eax,%r10d
+       subq    $6,%rdx
+       jmp     L$ctr32_loop6
+
+.p2align       4
+L$ctr32_loop6:
+       pshufd  $192,%xmm13,%xmm5
+       por     %xmm14,%xmm2
+       movups  (%r11),%xmm0
+       pshufd  $128,%xmm13,%xmm6
+       por     %xmm14,%xmm3
+       movups  16(%r11),%xmm1
+       pshufd  $64,%xmm13,%xmm7
+       por     %xmm14,%xmm4
+       por     %xmm14,%xmm5
+       xorps   %xmm0,%xmm2
+       por     %xmm14,%xmm6
+       por     %xmm14,%xmm7
+
+
+
+
+       pxor    %xmm0,%xmm3
+.byte  102,15,56,220,209
+       leaq    32(%r11),%rcx
+       pxor    %xmm0,%xmm4
+.byte  102,15,56,220,217
+       movdqa  L$increment32(%rip),%xmm13
+       pxor    %xmm0,%xmm5
+.byte  102,15,56,220,225
+       movdqa  -40(%rsp),%xmm12
+       pxor    %xmm0,%xmm6
+.byte  102,15,56,220,233
+       pxor    %xmm0,%xmm7
+       movups  (%rcx),%xmm0
+       decl    %eax
+.byte  102,15,56,220,241
+.byte  102,15,56,220,249
+       jmp     L$ctr32_enc_loop6_enter
+.p2align       4
+L$ctr32_enc_loop6:
+.byte  102,15,56,220,209
+.byte  102,15,56,220,217
+       decl    %eax
+.byte  102,15,56,220,225
+.byte  102,15,56,220,233
+.byte  102,15,56,220,241
+.byte  102,15,56,220,249
+L$ctr32_enc_loop6_enter:
+       movups  16(%rcx),%xmm1
+.byte  102,15,56,220,208
+.byte  102,15,56,220,216
+       leaq    32(%rcx),%rcx
+.byte  102,15,56,220,224
+.byte  102,15,56,220,232
+.byte  102,15,56,220,240
+.byte  102,15,56,220,248
+       movups  (%rcx),%xmm0
+       jnz     L$ctr32_enc_loop6
+
+.byte  102,15,56,220,209
+       paddd   %xmm13,%xmm12
+.byte  102,15,56,220,217
+       paddd   -24(%rsp),%xmm13
+.byte  102,15,56,220,225
+       movdqa  %xmm12,-40(%rsp)
+.byte  102,15,56,220,233
+       movdqa  %xmm13,-24(%rsp)
+.byte  102,15,56,220,241
+.byte  102,69,15,56,0,231
+.byte  102,15,56,220,249
+.byte  102,69,15,56,0,239
+
+.byte  102,15,56,221,208
+       movups  (%rdi),%xmm8
+.byte  102,15,56,221,216
+       movups  16(%rdi),%xmm9
+.byte  102,15,56,221,224
+       movups  32(%rdi),%xmm10
+.byte  102,15,56,221,232
+       movups  48(%rdi),%xmm11
+.byte  102,15,56,221,240
+       movups  64(%rdi),%xmm1
+.byte  102,15,56,221,248
+       movups  80(%rdi),%xmm0
+       leaq    96(%rdi),%rdi
+
+       xorps   %xmm2,%xmm8
+       pshufd  $192,%xmm12,%xmm2
+       xorps   %xmm3,%xmm9
+       pshufd  $128,%xmm12,%xmm3
+       movups  %xmm8,(%rsi)
+       xorps   %xmm4,%xmm10
+       pshufd  $64,%xmm12,%xmm4
+       movups  %xmm9,16(%rsi)
+       xorps   %xmm5,%xmm11
+       movups  %xmm10,32(%rsi)
+       xorps   %xmm6,%xmm1
+       movups  %xmm11,48(%rsi)
+       xorps   %xmm7,%xmm0
+       movups  %xmm1,64(%rsi)
+       movups  %xmm0,80(%rsi)
+       leaq    96(%rsi),%rsi
+       movl    %r10d,%eax
+       subq    $6,%rdx
+       jnc     L$ctr32_loop6
+
+       addq    $6,%rdx
+       jz      L$ctr32_done
+       movq    %r11,%rcx
+       leal    1(%rax,%rax,1),%eax
+
+L$ctr32_tail:
+       por     %xmm14,%xmm2
+       movups  (%rdi),%xmm8
+       cmpq    $2,%rdx
+       jb      L$ctr32_one
+
+       por     %xmm14,%xmm3
+       movups  16(%rdi),%xmm9
+       je      L$ctr32_two
+
+       pshufd  $192,%xmm13,%xmm5
+       por     %xmm14,%xmm4
+       movups  32(%rdi),%xmm10
+       cmpq    $4,%rdx
+       jb      L$ctr32_three
+
+       pshufd  $128,%xmm13,%xmm6
+       por     %xmm14,%xmm5
+       movups  48(%rdi),%xmm11
+       je      L$ctr32_four
+
+       por     %xmm14,%xmm6
+       xorps   %xmm7,%xmm7
+
+       call    _aesni_encrypt6
+
+       movups  64(%rdi),%xmm1
+       xorps   %xmm2,%xmm8
+       xorps   %xmm3,%xmm9
+       movups  %xmm8,(%rsi)
+       xorps   %xmm4,%xmm10
+       movups  %xmm9,16(%rsi)
+       xorps   %xmm5,%xmm11
+       movups  %xmm10,32(%rsi)
+       xorps   %xmm6,%xmm1
+       movups  %xmm11,48(%rsi)
+       movups  %xmm1,64(%rsi)
+       jmp     L$ctr32_done
+
+.p2align       4
+L$ctr32_one_shortcut:
+       movups  (%r8),%xmm2
+       movups  (%rdi),%xmm8
+       movl    240(%rcx),%eax
+L$ctr32_one:
+       movups  (%rcx),%xmm0
+       movups  16(%rcx),%xmm1
+       leaq    32(%rcx),%rcx
+       xorps   %xmm0,%xmm2
+L$oop_enc1_7:
+.byte  102,15,56,220,209
+       decl    %eax
+       movups  (%rcx),%xmm1
+       leaq    16(%rcx),%rcx
+       jnz     L$oop_enc1_7    
+.byte  102,15,56,221,209
+       xorps   %xmm2,%xmm8
+       movups  %xmm8,(%rsi)
+       jmp     L$ctr32_done
+
+.p2align       4
+L$ctr32_two:
+       xorps   %xmm4,%xmm4
+       call    _aesni_encrypt3
+       xorps   %xmm2,%xmm8
+       xorps   %xmm3,%xmm9
+       movups  %xmm8,(%rsi)
+       movups  %xmm9,16(%rsi)
+       jmp     L$ctr32_done
+
+.p2align       4
+L$ctr32_three:
+       call    _aesni_encrypt3
+       xorps   %xmm2,%xmm8
+       xorps   %xmm3,%xmm9
+       movups  %xmm8,(%rsi)
+       xorps   %xmm4,%xmm10
+       movups  %xmm9,16(%rsi)
+       movups  %xmm10,32(%rsi)
+       jmp     L$ctr32_done
+
+.p2align       4
+L$ctr32_four:
+       call    _aesni_encrypt4
+       xorps   %xmm2,%xmm8
+       xorps   %xmm3,%xmm9
+       movups  %xmm8,(%rsi)
+       xorps   %xmm4,%xmm10
+       movups  %xmm9,16(%rsi)
+       xorps   %xmm5,%xmm11
+       movups  %xmm10,32(%rsi)
+       movups  %xmm11,48(%rsi)
+
+L$ctr32_done:
+       .byte   0xf3,0xc3
+
+.globl _aesni_xts_encrypt
+
+.p2align       4
+_aesni_xts_encrypt:
+       leaq    -104(%rsp),%rsp
+       movups  (%r9),%xmm15
+       movl    240(%r8),%eax
+       movl    240(%rcx),%r10d
+       movups  (%r8),%xmm0
+       movups  16(%r8),%xmm1
+       leaq    32(%r8),%r8
+       xorps   %xmm0,%xmm15
+L$oop_enc1_8:
+.byte  102,68,15,56,220,249
+       decl    %eax
+       movups  (%r8),%xmm1
+       leaq    16(%r8),%r8
+       jnz     L$oop_enc1_8    
+.byte  102,68,15,56,221,249
+       movq    %rcx,%r11
+       movl    %r10d,%eax
+       movq    %rdx,%r9
+       andq    $-16,%rdx
+
+       movdqa  L$xts_magic(%rip),%xmm8
+       pxor    %xmm14,%xmm14
+       pcmpgtd %xmm15,%xmm14
+       pshufd  $19,%xmm14,%xmm9
+       pxor    %xmm14,%xmm14
+       movdqa  %xmm15,%xmm10
+       paddq   %xmm15,%xmm15
+       pand    %xmm8,%xmm9
+       pcmpgtd %xmm15,%xmm14
+       pxor    %xmm9,%xmm15
+       pshufd  $19,%xmm14,%xmm9
+       pxor    %xmm14,%xmm14
+       movdqa  %xmm15,%xmm11
+       paddq   %xmm15,%xmm15
+       pand    %xmm8,%xmm9
+       pcmpgtd %xmm15,%xmm14
+       pxor    %xmm9,%xmm15
+       pshufd  $19,%xmm14,%xmm9
+       pxor    %xmm14,%xmm14
+       movdqa  %xmm15,%xmm12
+       paddq   %xmm15,%xmm15
+       pand    %xmm8,%xmm9
+       pcmpgtd %xmm15,%xmm14
+       pxor    %xmm9,%xmm15
+       pshufd  $19,%xmm14,%xmm9
+       pxor    %xmm14,%xmm14
+       movdqa  %xmm15,%xmm13
+       paddq   %xmm15,%xmm15
+       pand    %xmm8,%xmm9
+       pcmpgtd %xmm15,%xmm14
+       pxor    %xmm9,%xmm15
+       subq    $96,%rdx
+       jc      L$xts_enc_short
+
+       shrl    $1,%eax
+       subl    $1,%eax
+       movl    %eax,%r10d
+       jmp     L$xts_enc_grandloop
+
+.p2align       4
+L$xts_enc_grandloop:
+       pshufd  $19,%xmm14,%xmm9
+       movdqa  %xmm15,%xmm14
+       paddq   %xmm15,%xmm15
+       movdqu  0(%rdi),%xmm2
+       pand    %xmm8,%xmm9
+       movdqu  16(%rdi),%xmm3
+       pxor    %xmm9,%xmm15
+
+       movdqu  32(%rdi),%xmm4
+       pxor    %xmm10,%xmm2
+       movdqu  48(%rdi),%xmm5
+       pxor    %xmm11,%xmm3
+       movdqu  64(%rdi),%xmm6
+       pxor    %xmm12,%xmm4
+       movdqu  80(%rdi),%xmm7
+       leaq    96(%rdi),%rdi
+       pxor    %xmm13,%xmm5
+       movups  (%r11),%xmm0
+       pxor    %xmm14,%xmm6
+       pxor    %xmm15,%xmm7
+
+
+
+       movups  16(%r11),%xmm1
+       pxor    %xmm0,%xmm2
+       pxor    %xmm0,%xmm3
+       movdqa  %xmm10,0(%rsp)
+.byte  102,15,56,220,209
+       leaq    32(%r11),%rcx
+       pxor    %xmm0,%xmm4
+       movdqa  %xmm11,16(%rsp)
+.byte  102,15,56,220,217
+       pxor    %xmm0,%xmm5
+       movdqa  %xmm12,32(%rsp)
+.byte  102,15,56,220,225
+       pxor    %xmm0,%xmm6
+       movdqa  %xmm13,48(%rsp)
+.byte  102,15,56,220,233
+       pxor    %xmm0,%xmm7
+       movups  (%rcx),%xmm0
+       decl    %eax
+       movdqa  %xmm14,64(%rsp)
+.byte  102,15,56,220,241
+       movdqa  %xmm15,80(%rsp)
+.byte  102,15,56,220,249
+       pxor    %xmm14,%xmm14
+       pcmpgtd %xmm15,%xmm14
+       jmp     L$xts_enc_loop6_enter
+
+.p2align       4
+L$xts_enc_loop6:
+.byte  102,15,56,220,209
+.byte  102,15,56,220,217
+       decl    %eax
+.byte  102,15,56,220,225
+.byte  102,15,56,220,233
+.byte  102,15,56,220,241
+.byte  102,15,56,220,249
+L$xts_enc_loop6_enter:
+       movups  16(%rcx),%xmm1
+.byte  102,15,56,220,208
+.byte  102,15,56,220,216
+       leaq    32(%rcx),%rcx
+.byte  102,15,56,220,224
+.byte  102,15,56,220,232
+.byte  102,15,56,220,240
+.byte  102,15,56,220,248
+       movups  (%rcx),%xmm0
+       jnz     L$xts_enc_loop6
+
+       pshufd  $19,%xmm14,%xmm9
+       pxor    %xmm14,%xmm14
+       paddq   %xmm15,%xmm15
+.byte  102,15,56,220,209
+       pand    %xmm8,%xmm9
+.byte  102,15,56,220,217
+       pcmpgtd %xmm15,%xmm14
+.byte  102,15,56,220,225
+       pxor    %xmm9,%xmm15
+.byte  102,15,56,220,233
+.byte  102,15,56,220,241
+.byte  102,15,56,220,249
+       movups  16(%rcx),%xmm1
+
+       pshufd  $19,%xmm14,%xmm9
+       pxor    %xmm14,%xmm14
+       movdqa  %xmm15,%xmm10
+       paddq   %xmm15,%xmm15
+.byte  102,15,56,220,208
+       pand    %xmm8,%xmm9
+.byte  102,15,56,220,216
+       pcmpgtd %xmm15,%xmm14
+.byte  102,15,56,220,224
+       pxor    %xmm9,%xmm15
+.byte  102,15,56,220,232
+.byte  102,15,56,220,240
+.byte  102,15,56,220,248
+       movups  32(%rcx),%xmm0
+
+       pshufd  $19,%xmm14,%xmm9
+       pxor    %xmm14,%xmm14
+       movdqa  %xmm15,%xmm11
+       paddq   %xmm15,%xmm15
+.byte  102,15,56,220,209
+       pand    %xmm8,%xmm9
+.byte  102,15,56,220,217
+       pcmpgtd %xmm15,%xmm14
+.byte  102,15,56,220,225
+       pxor    %xmm9,%xmm15
+.byte  102,15,56,220,233
+.byte  102,15,56,220,241
+.byte  102,15,56,220,249
+
+       pshufd  $19,%xmm14,%xmm9
+       pxor    %xmm14,%xmm14
+       movdqa  %xmm15,%xmm12
+       paddq   %xmm15,%xmm15
+.byte  102,15,56,221,208
+       pand    %xmm8,%xmm9
+.byte  102,15,56,221,216
+       pcmpgtd %xmm15,%xmm14
+.byte  102,15,56,221,224
+       pxor    %xmm9,%xmm15
+.byte  102,15,56,221,232
+.byte  102,15,56,221,240
+.byte  102,15,56,221,248
+
+       pshufd  $19,%xmm14,%xmm9
+       pxor    %xmm14,%xmm14
+       movdqa  %xmm15,%xmm13
+       paddq   %xmm15,%xmm15
+       xorps   0(%rsp),%xmm2
+       pand    %xmm8,%xmm9
+       xorps   16(%rsp),%xmm3
+       pcmpgtd %xmm15,%xmm14
+       pxor    %xmm9,%xmm15
+
+       xorps   32(%rsp),%xmm4
+       movups  %xmm2,0(%rsi)
+       xorps   48(%rsp),%xmm5
+       movups  %xmm3,16(%rsi)
+       xorps   64(%rsp),%xmm6
+       movups  %xmm4,32(%rsi)
+       xorps   80(%rsp),%xmm7
+       movups  %xmm5,48(%rsi)
+       movl    %r10d,%eax
+       movups  %xmm6,64(%rsi)
+       movups  %xmm7,80(%rsi)
+       leaq    96(%rsi),%rsi
+       subq    $96,%rdx
+       jnc     L$xts_enc_grandloop
+
+       leal    3(%rax,%rax,1),%eax
+       movq    %r11,%rcx
+       movl    %eax,%r10d
+
+L$xts_enc_short:
+       addq    $96,%rdx
+       jz      L$xts_enc_done
+
+       cmpq    $32,%rdx
+       jb      L$xts_enc_one
+       je      L$xts_enc_two
+
+       cmpq    $64,%rdx
+       jb      L$xts_enc_three
+       je      L$xts_enc_four
+
+       pshufd  $19,%xmm14,%xmm9
+       movdqa  %xmm15,%xmm14
+       paddq   %xmm15,%xmm15
+       movdqu  (%rdi),%xmm2
+       pand    %xmm8,%xmm9
+       movdqu  16(%rdi),%xmm3
+       pxor    %xmm9,%xmm15
+
+       movdqu  32(%rdi),%xmm4
+       pxor    %xmm10,%xmm2
+       movdqu  48(%rdi),%xmm5
+       pxor    %xmm11,%xmm3
+       movdqu  64(%rdi),%xmm6
+       leaq    80(%rdi),%rdi
+       pxor    %xmm12,%xmm4
+       pxor    %xmm13,%xmm5
+       pxor    %xmm14,%xmm6
+
+       call    _aesni_encrypt6
+
+       xorps   %xmm10,%xmm2
+       movdqa  %xmm15,%xmm10
+       xorps   %xmm11,%xmm3
+       xorps   %xmm12,%xmm4
+       movdqu  %xmm2,(%rsi)
+       xorps   %xmm13,%xmm5
+       movdqu  %xmm3,16(%rsi)
+       xorps   %xmm14,%xmm6
+       movdqu  %xmm4,32(%rsi)
+       movdqu  %xmm5,48(%rsi)
+       movdqu  %xmm6,64(%rsi)
+       leaq    80(%rsi),%rsi
+       jmp     L$xts_enc_done
+
+.p2align       4
+L$xts_enc_one:
+       movups  (%rdi),%xmm2
+       leaq    16(%rdi),%rdi
+       xorps   %xmm10,%xmm2
+       movups  (%rcx),%xmm0
+       movups  16(%rcx),%xmm1
+       leaq    32(%rcx),%rcx
+       xorps   %xmm0,%xmm2
+L$oop_enc1_9:
+.byte  102,15,56,220,209
+       decl    %eax
+       movups  (%rcx),%xmm1
+       leaq    16(%rcx),%rcx
+       jnz     L$oop_enc1_9    
+.byte  102,15,56,221,209
+       xorps   %xmm10,%xmm2
+       movdqa  %xmm11,%xmm10
+       movups  %xmm2,(%rsi)
+       leaq    16(%rsi),%rsi
+       jmp     L$xts_enc_done
+
+.p2align       4
+L$xts_enc_two:
+       movups  (%rdi),%xmm2
+       movups  16(%rdi),%xmm3
+       leaq    32(%rdi),%rdi
+       xorps   %xmm10,%xmm2
+       xorps   %xmm11,%xmm3
+
+       call    _aesni_encrypt3
+
+       xorps   %xmm10,%xmm2
+       movdqa  %xmm12,%xmm10
+       xorps   %xmm11,%xmm3
+       movups  %xmm2,(%rsi)
+       movups  %xmm3,16(%rsi)
+       leaq    32(%rsi),%rsi
+       jmp     L$xts_enc_done
+
+.p2align       4
+L$xts_enc_three:
+       movups  (%rdi),%xmm2
+       movups  16(%rdi),%xmm3
+       movups  32(%rdi),%xmm4
+       leaq    48(%rdi),%rdi
+       xorps   %xmm10,%xmm2
+       xorps   %xmm11,%xmm3
+       xorps   %xmm12,%xmm4
+
+       call    _aesni_encrypt3
+
+       xorps   %xmm10,%xmm2
+       movdqa  %xmm13,%xmm10
+       xorps   %xmm11,%xmm3
+       xorps   %xmm12,%xmm4
+       movups  %xmm2,(%rsi)
+       movups  %xmm3,16(%rsi)
+       movups  %xmm4,32(%rsi)
+       leaq    48(%rsi),%rsi
+       jmp     L$xts_enc_done
+
+.p2align       4
+L$xts_enc_four:
+       movups  (%rdi),%xmm2
+       movups  16(%rdi),%xmm3
+       movups  32(%rdi),%xmm4
+       xorps   %xmm10,%xmm2
+       movups  48(%rdi),%xmm5
+       leaq    64(%rdi),%rdi
+       xorps   %xmm11,%xmm3
+       xorps   %xmm12,%xmm4
+       xorps   %xmm13,%xmm5
+
+       call    _aesni_encrypt4
+
+       xorps   %xmm10,%xmm2
+       movdqa  %xmm15,%xmm10
+       xorps   %xmm11,%xmm3
+       xorps   %xmm12,%xmm4
+       movups  %xmm2,(%rsi)
+       xorps   %xmm13,%xmm5
+       movups  %xmm3,16(%rsi)
+       movups  %xmm4,32(%rsi)
+       movups  %xmm5,48(%rsi)
+       leaq    64(%rsi),%rsi
+       jmp     L$xts_enc_done
+
+.p2align       4
+L$xts_enc_done:
+       andq    $15,%r9
+       jz      L$xts_enc_ret
+       movq    %r9,%rdx
+
+L$xts_enc_steal:
+       movzbl  (%rdi),%eax
+       movzbl  -16(%rsi),%ecx
+       leaq    1(%rdi),%rdi
+       movb    %al,-16(%rsi)
+       movb    %cl,0(%rsi)
+       leaq    1(%rsi),%rsi
+       subq    $1,%rdx
+       jnz     L$xts_enc_steal
+
+       subq    %r9,%rsi
+       movq    %r11,%rcx
+       movl    %r10d,%eax
+
+       movups  -16(%rsi),%xmm2
+       xorps   %xmm10,%xmm2
+       movups  (%rcx),%xmm0
+       movups  16(%rcx),%xmm1
+       leaq    32(%rcx),%rcx
+       xorps   %xmm0,%xmm2
+L$oop_enc1_10:
+.byte  102,15,56,220,209
+       decl    %eax
+       movups  (%rcx),%xmm1
+       leaq    16(%rcx),%rcx
+       jnz     L$oop_enc1_10   
+.byte  102,15,56,221,209
+       xorps   %xmm10,%xmm2
+       movups  %xmm2,-16(%rsi)
+
+L$xts_enc_ret:
+       leaq    104(%rsp),%rsp
+L$xts_enc_epilogue:
+       .byte   0xf3,0xc3
+
+.globl _aesni_xts_decrypt
+
+.p2align       4
+_aesni_xts_decrypt:
+       leaq    -104(%rsp),%rsp
+       movups  (%r9),%xmm15
+       movl    240(%r8),%eax
+       movl    240(%rcx),%r10d
+       movups  (%r8),%xmm0
+       movups  16(%r8),%xmm1
+       leaq    32(%r8),%r8
+       xorps   %xmm0,%xmm15
+L$oop_enc1_11:
+.byte  102,68,15,56,220,249
+       decl    %eax
+       movups  (%r8),%xmm1
+       leaq    16(%r8),%r8
+       jnz     L$oop_enc1_11   
+.byte  102,68,15,56,221,249
+       xorl    %eax,%eax
+       testq   $15,%rdx
+       setnz   %al
+       shlq    $4,%rax
+       subq    %rax,%rdx
+
+       movq    %rcx,%r11
+       movl    %r10d,%eax
+       movq    %rdx,%r9
+       andq    $-16,%rdx
+
+       movdqa  L$xts_magic(%rip),%xmm8
+       pxor    %xmm14,%xmm14
+       pcmpgtd %xmm15,%xmm14
+       pshufd  $19,%xmm14,%xmm9
+       pxor    %xmm14,%xmm14
+       movdqa  %xmm15,%xmm10
+       paddq   %xmm15,%xmm15
+       pand    %xmm8,%xmm9
+       pcmpgtd %xmm15,%xmm14
+       pxor    %xmm9,%xmm15
+       pshufd  $19,%xmm14,%xmm9
+       pxor    %xmm14,%xmm14
+       movdqa  %xmm15,%xmm11
+       paddq   %xmm15,%xmm15
+       pand    %xmm8,%xmm9
+       pcmpgtd %xmm15,%xmm14
+       pxor    %xmm9,%xmm15
+       pshufd  $19,%xmm14,%xmm9
+       pxor    %xmm14,%xmm14
+       movdqa  %xmm15,%xmm12
+       paddq   %xmm15,%xmm15
+       pand    %xmm8,%xmm9
+       pcmpgtd %xmm15,%xmm14
+       pxor    %xmm9,%xmm15
+       pshufd  $19,%xmm14,%xmm9
+       pxor    %xmm14,%xmm14
+       movdqa  %xmm15,%xmm13
+       paddq   %xmm15,%xmm15
+       pand    %xmm8,%xmm9
+       pcmpgtd %xmm15,%xmm14
+       pxor    %xmm9,%xmm15
+       subq    $96,%rdx
+       jc      L$xts_dec_short
+
+       shrl    $1,%eax
+       subl    $1,%eax
+       movl    %eax,%r10d
+       jmp     L$xts_dec_grandloop
+
+.p2align       4
+L$xts_dec_grandloop:
+       pshufd  $19,%xmm14,%xmm9
+       movdqa  %xmm15,%xmm14
+       paddq   %xmm15,%xmm15
+       movdqu  0(%rdi),%xmm2
+       pand    %xmm8,%xmm9
+       movdqu  16(%rdi),%xmm3
+       pxor    %xmm9,%xmm15
+
+       movdqu  32(%rdi),%xmm4
+       pxor    %xmm10,%xmm2
+       movdqu  48(%rdi),%xmm5
+       pxor    %xmm11,%xmm3
+       movdqu  64(%rdi),%xmm6
+       pxor    %xmm12,%xmm4
+       movdqu  80(%rdi),%xmm7
+       leaq    96(%rdi),%rdi
+       pxor    %xmm13,%xmm5
+       movups  (%r11),%xmm0
+       pxor    %xmm14,%xmm6
+       pxor    %xmm15,%xmm7
+
+
+
+       movups  16(%r11),%xmm1
+       pxor    %xmm0,%xmm2
+       pxor    %xmm0,%xmm3
+       movdqa  %xmm10,0(%rsp)
+.byte  102,15,56,222,209
+       leaq    32(%r11),%rcx
+       pxor    %xmm0,%xmm4
+       movdqa  %xmm11,16(%rsp)
+.byte  102,15,56,222,217
+       pxor    %xmm0,%xmm5
+       movdqa  %xmm12,32(%rsp)
+.byte  102,15,56,222,225
+       pxor    %xmm0,%xmm6
+       movdqa  %xmm13,48(%rsp)
+.byte  102,15,56,222,233
+       pxor    %xmm0,%xmm7
+       movups  (%rcx),%xmm0
+       decl    %eax
+       movdqa  %xmm14,64(%rsp)
+.byte  102,15,56,222,241
+       movdqa  %xmm15,80(%rsp)
+.byte  102,15,56,222,249
+       pxor    %xmm14,%xmm14
+       pcmpgtd %xmm15,%xmm14
+       jmp     L$xts_dec_loop6_enter
+
+.p2align       4
+L$xts_dec_loop6:
+.byte  102,15,56,222,209
+.byte  102,15,56,222,217
+       decl    %eax
+.byte  102,15,56,222,225
+.byte  102,15,56,222,233
+.byte  102,15,56,222,241
+.byte  102,15,56,222,249
+L$xts_dec_loop6_enter:
+       movups  16(%rcx),%xmm1
+.byte  102,15,56,222,208
+.byte  102,15,56,222,216
+       leaq    32(%rcx),%rcx
+.byte  102,15,56,222,224
+.byte  102,15,56,222,232
+.byte  102,15,56,222,240
+.byte  102,15,56,222,248
+       movups  (%rcx),%xmm0
+       jnz     L$xts_dec_loop6
+
+       pshufd  $19,%xmm14,%xmm9
+       pxor    %xmm14,%xmm14
+       paddq   %xmm15,%xmm15
+.byte  102,15,56,222,209
+       pand    %xmm8,%xmm9
+.byte  102,15,56,222,217
+       pcmpgtd %xmm15,%xmm14
+.byte  102,15,56,222,225
+       pxor    %xmm9,%xmm15
+.byte  102,15,56,222,233
+.byte  102,15,56,222,241
+.byte  102,15,56,222,249
+       movups  16(%rcx),%xmm1
+
+       pshufd  $19,%xmm14,%xmm9
+       pxor    %xmm14,%xmm14
+       movdqa  %xmm15,%xmm10
+       paddq   %xmm15,%xmm15
+.byte  102,15,56,222,208
+       pand    %xmm8,%xmm9
+.byte  102,15,56,222,216
+       pcmpgtd %xmm15,%xmm14
+.byte  102,15,56,222,224
+       pxor    %xmm9,%xmm15
+.byte  102,15,56,222,232
+.byte  102,15,56,222,240
+.byte  102,15,56,222,248
+       movups  32(%rcx),%xmm0
+
+       pshufd  $19,%xmm14,%xmm9
+       pxor    %xmm14,%xmm14
+       movdqa  %xmm15,%xmm11
+       paddq   %xmm15,%xmm15
+.byte  102,15,56,222,209
+       pand    %xmm8,%xmm9
+.byte  102,15,56,222,217
+       pcmpgtd %xmm15,%xmm14
+.byte  102,15,56,222,225
+       pxor    %xmm9,%xmm15
+.byte  102,15,56,222,233
+.byte  102,15,56,222,241
+.byte  102,15,56,222,249
+
+       pshufd  $19,%xmm14,%xmm9
+       pxor    %xmm14,%xmm14
+       movdqa  %xmm15,%xmm12
+       paddq   %xmm15,%xmm15
+.byte  102,15,56,223,208
+       pand    %xmm8,%xmm9
+.byte  102,15,56,223,216
+       pcmpgtd %xmm15,%xmm14
+.byte  102,15,56,223,224
+       pxor    %xmm9,%xmm15
+.byte  102,15,56,223,232
+.byte  102,15,56,223,240
+.byte  102,15,56,223,248
+
+       pshufd  $19,%xmm14,%xmm9
+       pxor    %xmm14,%xmm14
+       movdqa  %xmm15,%xmm13
+       paddq   %xmm15,%xmm15
+       xorps   0(%rsp),%xmm2
+       pand    %xmm8,%xmm9
+       xorps   16(%rsp),%xmm3
+       pcmpgtd %xmm15,%xmm14
+       pxor    %xmm9,%xmm15
+
+       xorps   32(%rsp),%xmm4
+       movups  %xmm2,0(%rsi)
+       xorps   48(%rsp),%xmm5
+       movups  %xmm3,16(%rsi)
+       xorps   64(%rsp),%xmm6
+       movups  %xmm4,32(%rsi)
+       xorps   80(%rsp),%xmm7
+       movups  %xmm5,48(%rsi)
+       movl    %r10d,%eax
+       movups  %xmm6,64(%rsi)
+       movups  %xmm7,80(%rsi)
+       leaq    96(%rsi),%rsi
+       subq    $96,%rdx
+       jnc     L$xts_dec_grandloop
+
+       leal    3(%rax,%rax,1),%eax
+       movq    %r11,%rcx
+       movl    %eax,%r10d
+
+L$xts_dec_short:
+       addq    $96,%rdx
+       jz      L$xts_dec_done
+
+       cmpq    $32,%rdx
+       jb      L$xts_dec_one
+       je      L$xts_dec_two
+
+       cmpq    $64,%rdx
+       jb      L$xts_dec_three
+       je      L$xts_dec_four
+
+       pshufd  $19,%xmm14,%xmm9
+       movdqa  %xmm15,%xmm14
+       paddq   %xmm15,%xmm15
+       movdqu  (%rdi),%xmm2
+       pand    %xmm8,%xmm9
+       movdqu  16(%rdi),%xmm3
+       pxor    %xmm9,%xmm15
+
+       movdqu  32(%rdi),%xmm4
+       pxor    %xmm10,%xmm2
+       movdqu  48(%rdi),%xmm5
+       pxor    %xmm11,%xmm3
+       movdqu  64(%rdi),%xmm6
+       leaq    80(%rdi),%rdi
+       pxor    %xmm12,%xmm4
+       pxor    %xmm13,%xmm5
+       pxor    %xmm14,%xmm6
+
+       call    _aesni_decrypt6
+
+       xorps   %xmm10,%xmm2
+       xorps   %xmm11,%xmm3
+       xorps   %xmm12,%xmm4
+       movdqu  %xmm2,(%rsi)
+       xorps   %xmm13,%xmm5
+       movdqu  %xmm3,16(%rsi)
+       xorps   %xmm14,%xmm6
+       movdqu  %xmm4,32(%rsi)
+       pxor    %xmm14,%xmm14
+       movdqu  %xmm5,48(%rsi)
+       pcmpgtd %xmm15,%xmm14
+       movdqu  %xmm6,64(%rsi)
+       leaq    80(%rsi),%rsi
+       pshufd  $19,%xmm14,%xmm11
+       andq    $15,%r9
+       jz      L$xts_dec_ret
+
+       movdqa  %xmm15,%xmm10
+       paddq   %xmm15,%xmm15
+       pand    %xmm8,%xmm11
+       pxor    %xmm15,%xmm11
+       jmp     L$xts_dec_done2
+
+.p2align       4
+L$xts_dec_one:
+       movups  (%rdi),%xmm2
+       leaq    16(%rdi),%rdi
+       xorps   %xmm10,%xmm2
+       movups  (%rcx),%xmm0
+       movups  16(%rcx),%xmm1
+       leaq    32(%rcx),%rcx
+       xorps   %xmm0,%xmm2
+L$oop_dec1_12:
+.byte  102,15,56,222,209
+       decl    %eax
+       movups  (%rcx),%xmm1
+       leaq    16(%rcx),%rcx
+       jnz     L$oop_dec1_12   
+.byte  102,15,56,223,209
+       xorps   %xmm10,%xmm2
+       movdqa  %xmm11,%xmm10
+       movups  %xmm2,(%rsi)
+       movdqa  %xmm12,%xmm11
+       leaq    16(%rsi),%rsi
+       jmp     L$xts_dec_done
+
+.p2align       4
+L$xts_dec_two:
+       movups  (%rdi),%xmm2
+       movups  16(%rdi),%xmm3
+       leaq    32(%rdi),%rdi
+       xorps   %xmm10,%xmm2
+       xorps   %xmm11,%xmm3
+
+       call    _aesni_decrypt3
+
+       xorps   %xmm10,%xmm2
+       movdqa  %xmm12,%xmm10
+       xorps   %xmm11,%xmm3
+       movdqa  %xmm13,%xmm11
+       movups  %xmm2,(%rsi)
+       movups  %xmm3,16(%rsi)
+       leaq    32(%rsi),%rsi
+       jmp     L$xts_dec_done
+
+.p2align       4
+L$xts_dec_three:
+       movups  (%rdi),%xmm2
+       movups  16(%rdi),%xmm3
+       movups  32(%rdi),%xmm4
+       leaq    48(%rdi),%rdi
+       xorps   %xmm10,%xmm2
+       xorps   %xmm11,%xmm3
+       xorps   %xmm12,%xmm4
+
+       call    _aesni_decrypt3
+
+       xorps   %xmm10,%xmm2
+       movdqa  %xmm13,%xmm10
+       xorps   %xmm11,%xmm3
+       movdqa  %xmm15,%xmm11
+       xorps   %xmm12,%xmm4
+       movups  %xmm2,(%rsi)
+       movups  %xmm3,16(%rsi)
+       movups  %xmm4,32(%rsi)
+       leaq    48(%rsi),%rsi
+       jmp     L$xts_dec_done
+
+.p2align       4
+L$xts_dec_four:
+       pshufd  $19,%xmm14,%xmm9
+       movdqa  %xmm15,%xmm14
+       paddq   %xmm15,%xmm15
+       movups  (%rdi),%xmm2
+       pand    %xmm8,%xmm9
+       movups  16(%rdi),%xmm3
+       pxor    %xmm9,%xmm15
+
+       movups  32(%rdi),%xmm4
+       xorps   %xmm10,%xmm2
+       movups  48(%rdi),%xmm5
+       leaq    64(%rdi),%rdi
+       xorps   %xmm11,%xmm3
+       xorps   %xmm12,%xmm4
+       xorps   %xmm13,%xmm5
+
+       call    _aesni_decrypt4
+
+       xorps   %xmm10,%xmm2
+       movdqa  %xmm14,%xmm10
+       xorps   %xmm11,%xmm3
+       movdqa  %xmm15,%xmm11
+       xorps   %xmm12,%xmm4
+       movups  %xmm2,(%rsi)
+       xorps   %xmm13,%xmm5
+       movups  %xmm3,16(%rsi)
+       movups  %xmm4,32(%rsi)
+       movups  %xmm5,48(%rsi)
+       leaq    64(%rsi),%rsi
+       jmp     L$xts_dec_done
+
+.p2align       4
+L$xts_dec_done:
+       andq    $15,%r9
+       jz      L$xts_dec_ret
+L$xts_dec_done2:
+       movq    %r9,%rdx
+       movq    %r11,%rcx
+       movl    %r10d,%eax
+
+       movups  (%rdi),%xmm2
+       xorps   %xmm11,%xmm2
+       movups  (%rcx),%xmm0
+       movups  16(%rcx),%xmm1
+       leaq    32(%rcx),%rcx
+       xorps   %xmm0,%xmm2
+L$oop_dec1_13:
+.byte  102,15,56,222,209
+       decl    %eax
+       movups  (%rcx),%xmm1
+       leaq    16(%rcx),%rcx
+       jnz     L$oop_dec1_13   
+.byte  102,15,56,223,209
+       xorps   %xmm11,%xmm2
+       movups  %xmm2,(%rsi)
+
+L$xts_dec_steal:
+       movzbl  16(%rdi),%eax
+       movzbl  (%rsi),%ecx
+       leaq    1(%rdi),%rdi
+       movb    %al,(%rsi)
+       movb    %cl,16(%rsi)
+       leaq    1(%rsi),%rsi
+       subq    $1,%rdx
+       jnz     L$xts_dec_steal
+
+       subq    %r9,%rsi
+       movq    %r11,%rcx
+       movl    %r10d,%eax
+
+       movups  (%rsi),%xmm2
+       xorps   %xmm10,%xmm2
+       movups  (%rcx),%xmm0
+       movups  16(%rcx),%xmm1
+       leaq    32(%rcx),%rcx
+       xorps   %xmm0,%xmm2
+L$oop_dec1_14:
+.byte  102,15,56,222,209
+       decl    %eax
+       movups  (%rcx),%xmm1
+       leaq    16(%rcx),%rcx
+       jnz     L$oop_dec1_14   
+.byte  102,15,56,223,209
+       xorps   %xmm10,%xmm2
+       movups  %xmm2,(%rsi)
+
+L$xts_dec_ret:
+       leaq    104(%rsp),%rsp
+L$xts_dec_epilogue:
+       .byte   0xf3,0xc3
+
+.globl _aesni_cbc_encrypt
+
+.p2align       4
+_aesni_cbc_encrypt:
+       testq   %rdx,%rdx
+       jz      L$cbc_ret
+
+       movl    240(%rcx),%r10d
+       movq    %rcx,%r11
+       testl   %r9d,%r9d
+       jz      L$cbc_decrypt
+
+       movups  (%r8),%xmm2
+       movl    %r10d,%eax
+       cmpq    $16,%rdx
+       jb      L$cbc_enc_tail
+       subq    $16,%rdx
+       jmp     L$cbc_enc_loop
+.p2align       4
+L$cbc_enc_loop:
+       movups  (%rdi),%xmm3
+       leaq    16(%rdi),%rdi
+
+       movups  (%rcx),%xmm0
+       movups  16(%rcx),%xmm1
+       xorps   %xmm0,%xmm3
+       leaq    32(%rcx),%rcx
+       xorps   %xmm3,%xmm2
+L$oop_enc1_15:
+.byte  102,15,56,220,209
+       decl    %eax
+       movups  (%rcx),%xmm1
+       leaq    16(%rcx),%rcx
+       jnz     L$oop_enc1_15   
+.byte  102,15,56,221,209
+       movl    %r10d,%eax
+       movq    %r11,%rcx
+       movups  %xmm2,0(%rsi)
+       leaq    16(%rsi),%rsi
+       subq    $16,%rdx
+       jnc     L$cbc_enc_loop
+       addq    $16,%rdx
+       jnz     L$cbc_enc_tail
+       movups  %xmm2,(%r8)
+       jmp     L$cbc_ret
+
+L$cbc_enc_tail:
+       movq    %rdx,%rcx
+       xchgq   %rdi,%rsi
+.long  0x9066A4F3      
+       movl    $16,%ecx
+       subq    %rdx,%rcx
+       xorl    %eax,%eax
+.long  0x9066AAF3      
+       leaq    -16(%rdi),%rdi
+       movl    %r10d,%eax
+       movq    %rdi,%rsi
+       movq    %r11,%rcx
+       xorq    %rdx,%rdx
+       jmp     L$cbc_enc_loop  
+
+.p2align       4
+L$cbc_decrypt:
+       movups  (%r8),%xmm9
+       movl    %r10d,%eax
+       cmpq    $112,%rdx
+       jbe     L$cbc_dec_tail
+       shrl    $1,%r10d
+       subq    $112,%rdx
+       movl    %r10d,%eax
+       movaps  %xmm9,-24(%rsp)
+       jmp     L$cbc_dec_loop8_enter
+.p2align       4
+L$cbc_dec_loop8:
+       movaps  %xmm0,-24(%rsp)
+       movups  %xmm9,(%rsi)
+       leaq    16(%rsi),%rsi
+L$cbc_dec_loop8_enter:
+       movups  (%rcx),%xmm0
+       movups  (%rdi),%xmm2
+       movups  16(%rdi),%xmm3
+       movups  16(%rcx),%xmm1
+
+       leaq    32(%rcx),%rcx
+       movdqu  32(%rdi),%xmm4
+       xorps   %xmm0,%xmm2
+       movdqu  48(%rdi),%xmm5
+       xorps   %xmm0,%xmm3
+       movdqu  64(%rdi),%xmm6
+.byte  102,15,56,222,209
+       pxor    %xmm0,%xmm4
+       movdqu  80(%rdi),%xmm7
+.byte  102,15,56,222,217
+       pxor    %xmm0,%xmm5
+       movdqu  96(%rdi),%xmm8
+.byte  102,15,56,222,225
+       pxor    %xmm0,%xmm6
+       movdqu  112(%rdi),%xmm9
+.byte  102,15,56,222,233
+       pxor    %xmm0,%xmm7
+       decl    %eax
+.byte  102,15,56,222,241
+       pxor    %xmm0,%xmm8
+.byte  102,15,56,222,249
+       pxor    %xmm0,%xmm9
+       movups  (%rcx),%xmm0
+.byte  102,68,15,56,222,193
+.byte  102,68,15,56,222,201
+       movups  16(%rcx),%xmm1
+
+       call    L$dec_loop8_enter
+
+       movups  (%rdi),%xmm1
+       movups  16(%rdi),%xmm0
+       xorps   -24(%rsp),%xmm2
+       xorps   %xmm1,%xmm3
+       movups  32(%rdi),%xmm1
+       xorps   %xmm0,%xmm4
+       movups  48(%rdi),%xmm0
+       xorps   %xmm1,%xmm5
+       movups  64(%rdi),%xmm1
+       xorps   %xmm0,%xmm6
+       movups  80(%rdi),%xmm0
+       xorps   %xmm1,%xmm7
+       movups  96(%rdi),%xmm1
+       xorps   %xmm0,%xmm8
+       movups  112(%rdi),%xmm0
+       xorps   %xmm1,%xmm9
+       movups  %xmm2,(%rsi)
+       movups  %xmm3,16(%rsi)
+       movups  %xmm4,32(%rsi)
+       movups  %xmm5,48(%rsi)
+       movl    %r10d,%eax
+       movups  %xmm6,64(%rsi)
+       movq    %r11,%rcx
+       movups  %xmm7,80(%rsi)
+       leaq    128(%rdi),%rdi
+       movups  %xmm8,96(%rsi)
+       leaq    112(%rsi),%rsi
+       subq    $128,%rdx
+       ja      L$cbc_dec_loop8
+
+       movaps  %xmm9,%xmm2
+       movaps  %xmm0,%xmm9
+       addq    $112,%rdx
+       jle     L$cbc_dec_tail_collected
+       movups  %xmm2,(%rsi)
+       leal    1(%r10,%r10,1),%eax
+       leaq    16(%rsi),%rsi
+L$cbc_dec_tail:
+       movups  (%rdi),%xmm2
+       movaps  %xmm2,%xmm8
+       cmpq    $16,%rdx
+       jbe     L$cbc_dec_one
+
+       movups  16(%rdi),%xmm3
+       movaps  %xmm3,%xmm7
+       cmpq    $32,%rdx
+       jbe     L$cbc_dec_two
+
+       movups  32(%rdi),%xmm4
+       movaps  %xmm4,%xmm6
+       cmpq    $48,%rdx
+       jbe     L$cbc_dec_three
+
+       movups  48(%rdi),%xmm5
+       cmpq    $64,%rdx
+       jbe     L$cbc_dec_four
+
+       movups  64(%rdi),%xmm6
+       cmpq    $80,%rdx
+       jbe     L$cbc_dec_five
+
+       movups  80(%rdi),%xmm7
+       cmpq    $96,%rdx
+       jbe     L$cbc_dec_six
+
+       movups  96(%rdi),%xmm8
+       movaps  %xmm9,-24(%rsp)
+       call    _aesni_decrypt8
+       movups  (%rdi),%xmm1
+       movups  16(%rdi),%xmm0
+       xorps   -24(%rsp),%xmm2
+       xorps   %xmm1,%xmm3
+       movups  32(%rdi),%xmm1
+       xorps   %xmm0,%xmm4
+       movups  48(%rdi),%xmm0
+       xorps   %xmm1,%xmm5
+       movups  64(%rdi),%xmm1
+       xorps   %xmm0,%xmm6
+       movups  80(%rdi),%xmm0
+       xorps   %xmm1,%xmm7
+       movups  96(%rdi),%xmm9
+       xorps   %xmm0,%xmm8
+       movups  %xmm2,(%rsi)
+       movups  %xmm3,16(%rsi)
+       movups  %xmm4,32(%rsi)
+       movups  %xmm5,48(%rsi)
+       movups  %xmm6,64(%rsi)
+       movups  %xmm7,80(%rsi)
+       leaq    96(%rsi),%rsi
+       movaps  %xmm8,%xmm2
+       subq    $112,%rdx
+       jmp     L$cbc_dec_tail_collected
+.p2align       4
+L$cbc_dec_one:
+       movups  (%rcx),%xmm0
+       movups  16(%rcx),%xmm1
+       leaq    32(%rcx),%rcx
+       xorps   %xmm0,%xmm2
+L$oop_dec1_16:
+.byte  102,15,56,222,209
+       decl    %eax
+       movups  (%rcx),%xmm1
+       leaq    16(%rcx),%rcx
+       jnz     L$oop_dec1_16   
+.byte  102,15,56,223,209
+       xorps   %xmm9,%xmm2
+       movaps  %xmm8,%xmm9
+       subq    $16,%rdx
+       jmp     L$cbc_dec_tail_collected
+.p2align       4
+L$cbc_dec_two:
+       xorps   %xmm4,%xmm4
+       call    _aesni_decrypt3
+       xorps   %xmm9,%xmm2
+       xorps   %xmm8,%xmm3
+       movups  %xmm2,(%rsi)
+       movaps  %xmm7,%xmm9
+       movaps  %xmm3,%xmm2
+       leaq    16(%rsi),%rsi
+       subq    $32,%rdx
+       jmp     L$cbc_dec_tail_collected
+.p2align       4
+L$cbc_dec_three:
+       call    _aesni_decrypt3
+       xorps   %xmm9,%xmm2
+       xorps   %xmm8,%xmm3
+       movups  %xmm2,(%rsi)
+       xorps   %xmm7,%xmm4
+       movups  %xmm3,16(%rsi)
+       movaps  %xmm6,%xmm9
+       movaps  %xmm4,%xmm2
+       leaq    32(%rsi),%rsi
+       subq    $48,%rdx
+       jmp     L$cbc_dec_tail_collected
+.p2align       4
+L$cbc_dec_four:
+       call    _aesni_decrypt4
+       xorps   %xmm9,%xmm2
+       movups  48(%rdi),%xmm9
+       xorps   %xmm8,%xmm3
+       movups  %xmm2,(%rsi)
+       xorps   %xmm7,%xmm4
+       movups  %xmm3,16(%rsi)
+       xorps   %xmm6,%xmm5
+       movups  %xmm4,32(%rsi)
+       movaps  %xmm5,%xmm2
+       leaq    48(%rsi),%rsi
+       subq    $64,%rdx
+       jmp     L$cbc_dec_tail_collected
+.p2align       4
+L$cbc_dec_five:
+       xorps   %xmm7,%xmm7
+       call    _aesni_decrypt6
+       movups  16(%rdi),%xmm1
+       movups  32(%rdi),%xmm0
+       xorps   %xmm9,%xmm2
+       xorps   %xmm8,%xmm3
+       xorps   %xmm1,%xmm4
+       movups  48(%rdi),%xmm1
+       xorps   %xmm0,%xmm5
+       movups  64(%rdi),%xmm9
+       xorps   %xmm1,%xmm6
+       movups  %xmm2,(%rsi)
+       movups  %xmm3,16(%rsi)
+       movups  %xmm4,32(%rsi)
+       movups  %xmm5,48(%rsi)
+       leaq    64(%rsi),%rsi
+       movaps  %xmm6,%xmm2
+       subq    $80,%rdx
+       jmp     L$cbc_dec_tail_collected
+.p2align       4
+L$cbc_dec_six:
+       call    _aesni_decrypt6
+       movups  16(%rdi),%xmm1
+       movups  32(%rdi),%xmm0
+       xorps   %xmm9,%xmm2
+       xorps   %xmm8,%xmm3
+       xorps   %xmm1,%xmm4
+       movups  48(%rdi),%xmm1
+       xorps   %xmm0,%xmm5
+       movups  64(%rdi),%xmm0
+       xorps   %xmm1,%xmm6
+       movups  80(%rdi),%xmm9
+       xorps   %xmm0,%xmm7
+       movups  %xmm2,(%rsi)
+       movups  %xmm3,16(%rsi)
+       movups  %xmm4,32(%rsi)
+       movups  %xmm5,48(%rsi)
+       movups  %xmm6,64(%rsi)
+       leaq    80(%rsi),%rsi
+       movaps  %xmm7,%xmm2
+       subq    $96,%rdx
+       jmp     L$cbc_dec_tail_collected
+.p2align       4
+L$cbc_dec_tail_collected:
+       andq    $15,%rdx
+       movups  %xmm9,(%r8)
+       jnz     L$cbc_dec_tail_partial
+       movups  %xmm2,(%rsi)
+       jmp     L$cbc_dec_ret
+.p2align       4
+L$cbc_dec_tail_partial:
+       movaps  %xmm2,-24(%rsp)
+       movq    $16,%rcx
+       movq    %rsi,%rdi
+       subq    %rdx,%rcx
+       leaq    -24(%rsp),%rsi
+.long  0x9066A4F3      
+
+L$cbc_dec_ret:
+L$cbc_ret:
+       .byte   0xf3,0xc3
+
+.globl _aesni_set_decrypt_key
+
+.p2align       4
+_aesni_set_decrypt_key:
+.byte  0x48,0x83,0xEC,0x08     
+       call    __aesni_set_encrypt_key
+       shll    $4,%esi
+       testl   %eax,%eax
+       jnz     L$dec_key_ret
+       leaq    16(%rdx,%rsi,1),%rdi
+
+       movups  (%rdx),%xmm0
+       movups  (%rdi),%xmm1
+       movups  %xmm0,(%rdi)
+       movups  %xmm1,(%rdx)
+       leaq    16(%rdx),%rdx
+       leaq    -16(%rdi),%rdi
+
+L$dec_key_inverse:
+       movups  (%rdx),%xmm0
+       movups  (%rdi),%xmm1
+.byte  102,15,56,219,192
+.byte  102,15,56,219,201
+       leaq    16(%rdx),%rdx
+       leaq    -16(%rdi),%rdi
+       movups  %xmm0,16(%rdi)
+       movups  %xmm1,-16(%rdx)
+       cmpq    %rdx,%rdi
+       ja      L$dec_key_inverse
+
+       movups  (%rdx),%xmm0
+.byte  102,15,56,219,192
+       movups  %xmm0,(%rdi)
+L$dec_key_ret:
+       addq    $8,%rsp
+       .byte   0xf3,0xc3
+L$SEH_end_set_decrypt_key:
+
+.globl _aesni_set_encrypt_key
+
+.p2align       4
+_aesni_set_encrypt_key:
+__aesni_set_encrypt_key:
+.byte  0x48,0x83,0xEC,0x08     
+       movq    $-1,%rax
+       testq   %rdi,%rdi
+       jz      L$enc_key_ret
+       testq   %rdx,%rdx
+       jz      L$enc_key_ret
+
+       movups  (%rdi),%xmm0
+       xorps   %xmm4,%xmm4
+       leaq    16(%rdx),%rax
+       cmpl    $256,%esi
+       je      L$14rounds
+       cmpl    $192,%esi
+       je      L$12rounds
+       cmpl    $128,%esi
+       jne     L$bad_keybits
+
+L$10rounds:
+       movl    $9,%esi
+       movups  %xmm0,(%rdx)
+.byte  102,15,58,223,200,1
+       call    L$key_expansion_128_cold
+.byte  102,15,58,223,200,2
+       call    L$key_expansion_128
+.byte  102,15,58,223,200,4
+       call    L$key_expansion_128
+.byte  102,15,58,223,200,8
+       call    L$key_expansion_128
+.byte  102,15,58,223,200,16
+       call    L$key_expansion_128
+.byte  102,15,58,223,200,32
+       call    L$key_expansion_128
+.byte  102,15,58,223,200,64
+       call    L$key_expansion_128
+.byte  102,15,58,223,200,128
+       call    L$key_expansion_128
+.byte  102,15,58,223,200,27
+       call    L$key_expansion_128
+.byte  102,15,58,223,200,54
+       call    L$key_expansion_128
+       movups  %xmm0,(%rax)
+       movl    %esi,80(%rax)
+       xorl    %eax,%eax
+       jmp     L$enc_key_ret
+
+.p2align       4
+L$12rounds:
+       movq    16(%rdi),%xmm2
+       movl    $11,%esi
+       movups  %xmm0,(%rdx)
+.byte  102,15,58,223,202,1
+       call    L$key_expansion_192a_cold
+.byte  102,15,58,223,202,2
+       call    L$key_expansion_192b
+.byte  102,15,58,223,202,4
+       call    L$key_expansion_192a
+.byte  102,15,58,223,202,8
+       call    L$key_expansion_192b
+.byte  102,15,58,223,202,16
+       call    L$key_expansion_192a
+.byte  102,15,58,223,202,32
+       call    L$key_expansion_192b
+.byte  102,15,58,223,202,64
+       call    L$key_expansion_192a
+.byte  102,15,58,223,202,128
+       call    L$key_expansion_192b
+       movups  %xmm0,(%rax)
+       movl    %esi,48(%rax)
+       xorq    %rax,%rax
+       jmp     L$enc_key_ret
+
+.p2align       4
+L$14rounds:
+       movups  16(%rdi),%xmm2
+       movl    $13,%esi
+       leaq    16(%rax),%rax
+       movups  %xmm0,(%rdx)
+       movups  %xmm2,16(%rdx)
+.byte  102,15,58,223,202,1
+       call    L$key_expansion_256a_cold
+.byte  102,15,58,223,200,1
+       call    L$key_expansion_256b
+.byte  102,15,58,223,202,2
+       call    L$key_expansion_256a
+.byte  102,15,58,223,200,2
+       call    L$key_expansion_256b
+.byte  102,15,58,223,202,4
+       call    L$key_expansion_256a
+.byte  102,15,58,223,200,4
+       call    L$key_expansion_256b
+.byte  102,15,58,223,202,8
+       call    L$key_expansion_256a
+.byte  102,15,58,223,200,8
+       call    L$key_expansion_256b
+.byte  102,15,58,223,202,16
+       call    L$key_expansion_256a
+.byte  102,15,58,223,200,16
+       call    L$key_expansion_256b
+.byte  102,15,58,223,202,32
+       call    L$key_expansion_256a
+.byte  102,15,58,223,200,32
+       call    L$key_expansion_256b
+.byte  102,15,58,223,202,64
+       call    L$key_expansion_256a
+       movups  %xmm0,(%rax)
+       movl    %esi,16(%rax)
+       xorq    %rax,%rax
+       jmp     L$enc_key_ret
+
+.p2align       4
+L$bad_keybits:
+       movq    $-2,%rax
+L$enc_key_ret:
+       addq    $8,%rsp
+       .byte   0xf3,0xc3
+L$SEH_end_set_encrypt_key:
+
+.p2align       4
+L$key_expansion_128:
+       movups  %xmm0,(%rax)
+       leaq    16(%rax),%rax
+L$key_expansion_128_cold:
+       shufps  $16,%xmm0,%xmm4
+       xorps   %xmm4,%xmm0
+       shufps  $140,%xmm0,%xmm4
+       xorps   %xmm4,%xmm0
+       shufps  $255,%xmm1,%xmm1
+       xorps   %xmm1,%xmm0
+       .byte   0xf3,0xc3
+
+.p2align       4
+L$key_expansion_192a:
+       movups  %xmm0,(%rax)
+       leaq    16(%rax),%rax
+L$key_expansion_192a_cold:
+       movaps  %xmm2,%xmm5
+L$key_expansion_192b_warm:
+       shufps  $16,%xmm0,%xmm4
+       movdqa  %xmm2,%xmm3
+       xorps   %xmm4,%xmm0
+       shufps  $140,%xmm0,%xmm4
+       pslldq  $4,%xmm3
+       xorps   %xmm4,%xmm0
+       pshufd  $85,%xmm1,%xmm1
+       pxor    %xmm3,%xmm2
+       pxor    %xmm1,%xmm0
+       pshufd  $255,%xmm0,%xmm3
+       pxor    %xmm3,%xmm2
+       .byte   0xf3,0xc3
+
+.p2align       4
+L$key_expansion_192b:
+       movaps  %xmm0,%xmm3
+       shufps  $68,%xmm0,%xmm5
+       movups  %xmm5,(%rax)
+       shufps  $78,%xmm2,%xmm3
+       movups  %xmm3,16(%rax)
+       leaq    32(%rax),%rax
+       jmp     L$key_expansion_192b_warm
+
+.p2align       4
+L$key_expansion_256a:
+       movups  %xmm2,(%rax)
+       leaq    16(%rax),%rax
+L$key_expansion_256a_cold:
+       shufps  $16,%xmm0,%xmm4
+       xorps   %xmm4,%xmm0
+       shufps  $140,%xmm0,%xmm4
+       xorps   %xmm4,%xmm0
+       shufps  $255,%xmm1,%xmm1
+       xorps   %xmm1,%xmm0
+       .byte   0xf3,0xc3
+
+.p2align       4
+L$key_expansion_256b:
+       movups  %xmm0,(%rax)
+       leaq    16(%rax),%rax
+
+       shufps  $16,%xmm2,%xmm4
+       xorps   %xmm4,%xmm2
+       shufps  $140,%xmm2,%xmm4
+       xorps   %xmm4,%xmm2
+       shufps  $170,%xmm1,%xmm1
+       xorps   %xmm1,%xmm2
+       .byte   0xf3,0xc3
+
+
+.p2align       6
+L$bswap_mask:
+.byte  15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
+L$increment32:
+.long  6,6,6,0
+L$increment64:
+.long  1,0,0,0
+L$xts_magic:
+.long  0x87,0,1,0
+
+.byte  65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69,83,45,78,73,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
+.p2align       6
diff --git a/lib/accelerated/x86/asm-macosx/appro-aes-x86-macosx.s b/lib/accelerated/x86/asm-macosx/appro-aes-x86-macosx.s
new file mode 100644 (file)
index 0000000..ca05d9e
--- /dev/null
@@ -0,0 +1,2144 @@
+# Copyright (c) 2011, Andy Polyakov by <appro@openssl.org>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 
+#     * Redistributions of source code must retain copyright notices,
+#      this list of conditions and the following disclaimer.
+#
+#     * Redistributions in binary form must reproduce the above
+#      copyright notice, this list of conditions and the following
+#      disclaimer in the documentation and/or other materials
+#      provided with the distribution.
+#
+#     * Neither the name of the Andy Polyakov nor the names of its
+#      copyright holder and contributors may be used to endorse or
+#      promote products derived from this software without specific
+#      prior written permission.
+#
+# ALTERNATIVELY, provided that this notice is retained in full, this
+# product may be distributed under the terms of the GNU General Public
+# License (GPL), in which case the provisions of the GPL apply INSTEAD OF
+# those given above.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+.file  "devel/perlasm/aesni-x86.s"
+.text
+.globl _aesni_encrypt
+.align 4
+_aesni_encrypt:
+L_aesni_encrypt_begin:
+       movl    4(%esp),%eax
+       movl    12(%esp),%edx
+       movups  (%eax),%xmm2
+       movl    240(%edx),%ecx
+       movl    8(%esp),%eax
+       movups  (%edx),%xmm0
+       movups  16(%edx),%xmm1
+       leal    32(%edx),%edx
+       xorps   %xmm0,%xmm2
+L000enc1_loop_1:
+.byte  102,15,56,220,209
+       decl    %ecx
+       movups  (%edx),%xmm1
+       leal    16(%edx),%edx
+       jnz     L000enc1_loop_1
+.byte  102,15,56,221,209
+       movups  %xmm2,(%eax)
+       ret
+.globl _aesni_decrypt
+.align 4
+_aesni_decrypt:
+L_aesni_decrypt_begin:
+       movl    4(%esp),%eax
+       movl    12(%esp),%edx
+       movups  (%eax),%xmm2
+       movl    240(%edx),%ecx
+       movl    8(%esp),%eax
+       movups  (%edx),%xmm0
+       movups  16(%edx),%xmm1
+       leal    32(%edx),%edx
+       xorps   %xmm0,%xmm2
+L001dec1_loop_2:
+.byte  102,15,56,222,209
+       decl    %ecx
+       movups  (%edx),%xmm1
+       leal    16(%edx),%edx
+       jnz     L001dec1_loop_2
+.byte  102,15,56,223,209
+       movups  %xmm2,(%eax)
+       ret
+.align 4
+__aesni_encrypt3:
+       movups  (%edx),%xmm0
+       shrl    $1,%ecx
+       movups  16(%edx),%xmm1
+       leal    32(%edx),%edx
+       xorps   %xmm0,%xmm2
+       pxor    %xmm0,%xmm3
+       pxor    %xmm0,%xmm4
+       movups  (%edx),%xmm0
+L002enc3_loop:
+.byte  102,15,56,220,209
+.byte  102,15,56,220,217
+       decl    %ecx
+.byte  102,15,56,220,225
+       movups  16(%edx),%xmm1
+.byte  102,15,56,220,208
+.byte  102,15,56,220,216
+       leal    32(%edx),%edx
+.byte  102,15,56,220,224
+       movups  (%edx),%xmm0
+       jnz     L002enc3_loop
+.byte  102,15,56,220,209
+.byte  102,15,56,220,217
+.byte  102,15,56,220,225
+.byte  102,15,56,221,208
+.byte  102,15,56,221,216
+.byte  102,15,56,221,224
+       ret
+.align 4
+__aesni_decrypt3:
+       movups  (%edx),%xmm0
+       shrl    $1,%ecx
+       movups  16(%edx),%xmm1
+       leal    32(%edx),%edx
+       xorps   %xmm0,%xmm2
+       pxor    %xmm0,%xmm3
+       pxor    %xmm0,%xmm4
+       movups  (%edx),%xmm0
+L003dec3_loop:
+.byte  102,15,56,222,209
+.byte  102,15,56,222,217
+       decl    %ecx
+.byte  102,15,56,222,225
+       movups  16(%edx),%xmm1
+.byte  102,15,56,222,208
+.byte  102,15,56,222,216
+       leal    32(%edx),%edx
+.byte  102,15,56,222,224
+       movups  (%edx),%xmm0
+       jnz     L003dec3_loop
+.byte  102,15,56,222,209
+.byte  102,15,56,222,217
+.byte  102,15,56,222,225
+.byte  102,15,56,223,208
+.byte  102,15,56,223,216
+.byte  102,15,56,223,224
+       ret
+.align 4
+__aesni_encrypt4:
+       movups  (%edx),%xmm0
+       movups  16(%edx),%xmm1
+       shrl    $1,%ecx
+       leal    32(%edx),%edx
+       xorps   %xmm0,%xmm2
+       pxor    %xmm0,%xmm3
+       pxor    %xmm0,%xmm4
+       pxor    %xmm0,%xmm5
+       movups  (%edx),%xmm0
+L004enc4_loop:
+.byte  102,15,56,220,209
+.byte  102,15,56,220,217
+       decl    %ecx
+.byte  102,15,56,220,225
+.byte  102,15,56,220,233
+       movups  16(%edx),%xmm1
+.byte  102,15,56,220,208
+.byte  102,15,56,220,216
+       leal    32(%edx),%edx
+.byte  102,15,56,220,224
+.byte  102,15,56,220,232
+       movups  (%edx),%xmm0
+       jnz     L004enc4_loop
+.byte  102,15,56,220,209
+.byte  102,15,56,220,217
+.byte  102,15,56,220,225
+.byte  102,15,56,220,233
+.byte  102,15,56,221,208
+.byte  102,15,56,221,216
+.byte  102,15,56,221,224
+.byte  102,15,56,221,232
+       ret
+.align 4
+__aesni_decrypt4:
+       movups  (%edx),%xmm0
+       movups  16(%edx),%xmm1
+       shrl    $1,%ecx
+       leal    32(%edx),%edx
+       xorps   %xmm0,%xmm2
+       pxor    %xmm0,%xmm3
+       pxor    %xmm0,%xmm4
+       pxor    %xmm0,%xmm5
+       movups  (%edx),%xmm0
+L005dec4_loop:
+.byte  102,15,56,222,209
+.byte  102,15,56,222,217
+       decl    %ecx
+.byte  102,15,56,222,225
+.byte  102,15,56,222,233
+       movups  16(%edx),%xmm1
+.byte  102,15,56,222,208
+.byte  102,15,56,222,216
+       leal    32(%edx),%edx
+.byte  102,15,56,222,224
+.byte  102,15,56,222,232
+       movups  (%edx),%xmm0
+       jnz     L005dec4_loop
+.byte  102,15,56,222,209
+.byte  102,15,56,222,217
+.byte  102,15,56,222,225
+.byte  102,15,56,222,233
+.byte  102,15,56,223,208
+.byte  102,15,56,223,216
+.byte  102,15,56,223,224
+.byte  102,15,56,223,232
+       ret
+.align 4
+__aesni_encrypt6:
+       movups  (%edx),%xmm0
+       shrl    $1,%ecx
+       movups  16(%edx),%xmm1
+       leal    32(%edx),%edx
+       xorps   %xmm0,%xmm2
+       pxor    %xmm0,%xmm3
+.byte  102,15,56,220,209
+       pxor    %xmm0,%xmm4
+.byte  102,15,56,220,217
+       pxor    %xmm0,%xmm5
+       decl    %ecx
+.byte  102,15,56,220,225
+       pxor    %xmm0,%xmm6
+.byte  102,15,56,220,233
+       pxor    %xmm0,%xmm7
+.byte  102,15,56,220,241
+       movups  (%edx),%xmm0
+.byte  102,15,56,220,249
+       jmp     L_aesni_encrypt6_enter
+.align 4,0x90
+L006enc6_loop:
+.byte  102,15,56,220,209
+.byte  102,15,56,220,217
+       decl    %ecx
+.byte  102,15,56,220,225
+.byte  102,15,56,220,233
+.byte  102,15,56,220,241
+.byte  102,15,56,220,249
+.align 4,0x90
+L_aesni_encrypt6_enter:
+       movups  16(%edx),%xmm1
+.byte  102,15,56,220,208
+.byte  102,15,56,220,216
+       leal    32(%edx),%edx
+.byte  102,15,56,220,224
+.byte  102,15,56,220,232
+.byte  102,15,56,220,240
+.byte  102,15,56,220,248
+       movups  (%edx),%xmm0
+       jnz     L006enc6_loop
+.byte  102,15,56,220,209
+.byte  102,15,56,220,217
+.byte  102,15,56,220,225
+.byte  102,15,56,220,233
+.byte  102,15,56,220,241
+.byte  102,15,56,220,249
+.byte  102,15,56,221,208
+.byte  102,15,56,221,216
+.byte  102,15,56,221,224
+.byte  102,15,56,221,232
+.byte  102,15,56,221,240
+.byte  102,15,56,221,248
+       ret
+.align 4
+__aesni_decrypt6:
+       movups  (%edx),%xmm0
+       shrl    $1,%ecx
+       movups  16(%edx),%xmm1
+       leal    32(%edx),%edx
+       xorps   %xmm0,%xmm2
+       pxor    %xmm0,%xmm3
+.byte  102,15,56,222,209
+       pxor    %xmm0,%xmm4
+.byte  102,15,56,222,217
+       pxor    %xmm0,%xmm5
+       decl    %ecx
+.byte  102,15,56,222,225
+       pxor    %xmm0,%xmm6
+.byte  102,15,56,222,233
+       pxor    %xmm0,%xmm7
+.byte  102,15,56,222,241
+       movups  (%edx),%xmm0
+.byte  102,15,56,222,249
+       jmp     L_aesni_decrypt6_enter
+.align 4,0x90
+L007dec6_loop:
+.byte  102,15,56,222,209
+.byte  102,15,56,222,217
+       decl    %ecx
+.byte  102,15,56,222,225
+.byte  102,15,56,222,233
+.byte  102,15,56,222,241
+.byte  102,15,56,222,249
+.align 4,0x90
+L_aesni_decrypt6_enter:
+       movups  16(%edx),%xmm1
+.byte  102,15,56,222,208
+.byte  102,15,56,222,216
+       leal    32(%edx),%edx
+.byte  102,15,56,222,224
+.byte  102,15,56,222,232
+.byte  102,15,56,222,240
+.byte  102,15,56,222,248
+       movups  (%edx),%xmm0
+       jnz     L007dec6_loop
+.byte  102,15,56,222,209
+.byte  102,15,56,222,217
+.byte  102,15,56,222,225
+.byte  102,15,56,222,233
+.byte  102,15,56,222,241
+.byte  102,15,56,222,249
+.byte  102,15,56,223,208
+.byte  102,15,56,223,216
+.byte  102,15,56,223,224
+.byte  102,15,56,223,232
+.byte  102,15,56,223,240
+.byte  102,15,56,223,248
+       ret
+.globl _aesni_ecb_encrypt
+.align 4
+_aesni_ecb_encrypt:
+L_aesni_ecb_encrypt_begin:
+       pushl   %ebp
+       pushl   %ebx
+       pushl   %esi
+       pushl   %edi
+       movl    20(%esp),%esi
+       movl    24(%esp),%edi
+       movl    28(%esp),%eax
+       movl    32(%esp),%edx
+       movl    36(%esp),%ebx
+       andl    $-16,%eax
+       jz      L008ecb_ret
+       movl    240(%edx),%ecx
+       testl   %ebx,%ebx
+       jz      L009ecb_decrypt
+       movl    %edx,%ebp
+       movl    %ecx,%ebx
+       cmpl    $96,%eax
+       jb      L010ecb_enc_tail
+       movdqu  (%esi),%xmm2
+       movdqu  16(%esi),%xmm3
+       movdqu  32(%esi),%xmm4
+       movdqu  48(%esi),%xmm5
+       movdqu  64(%esi),%xmm6
+       movdqu  80(%esi),%xmm7
+       leal    96(%esi),%esi
+       subl    $96,%eax
+       jmp     L011ecb_enc_loop6_enter
+.align 4,0x90
+L012ecb_enc_loop6:
+       movups  %xmm2,(%edi)
+       movdqu  (%esi),%xmm2
+       movups  %xmm3,16(%edi)
+       movdqu  16(%esi),%xmm3
+       movups  %xmm4,32(%edi)
+       movdqu  32(%esi),%xmm4
+       movups  %xmm5,48(%edi)
+       movdqu  48(%esi),%xmm5
+       movups  %xmm6,64(%edi)
+       movdqu  64(%esi),%xmm6
+       movups  %xmm7,80(%edi)
+       leal    96(%edi),%edi
+       movdqu  80(%esi),%xmm7
+       leal    96(%esi),%esi
+L011ecb_enc_loop6_enter:
+       call    __aesni_encrypt6
+       movl    %ebp,%edx
+       movl    %ebx,%ecx
+       subl    $96,%eax
+       jnc     L012ecb_enc_loop6
+       movups  %xmm2,(%edi)
+       movups  %xmm3,16(%edi)
+       movups  %xmm4,32(%edi)
+       movups  %xmm5,48(%edi)
+       movups  %xmm6,64(%edi)
+       movups  %xmm7,80(%edi)
+       leal    96(%edi),%edi
+       addl    $96,%eax
+       jz      L008ecb_ret
+L010ecb_enc_tail:
+       movups  (%esi),%xmm2
+       cmpl    $32,%eax
+       jb      L013ecb_enc_one
+       movups  16(%esi),%xmm3
+       je      L014ecb_enc_two
+       movups  32(%esi),%xmm4
+       cmpl    $64,%eax
+       jb      L015ecb_enc_three
+       movups  48(%esi),%xmm5
+       je      L016ecb_enc_four
+       movups  64(%esi),%xmm6
+       xorps   %xmm7,%xmm7
+       call    __aesni_encrypt6
+       movups  %xmm2,(%edi)
+       movups  %xmm3,16(%edi)
+       movups  %xmm4,32(%edi)
+       movups  %xmm5,48(%edi)
+       movups  %xmm6,64(%edi)
+       jmp     L008ecb_ret
+.align 4,0x90
+L013ecb_enc_one:
+       movups  (%edx),%xmm0
+       movups  16(%edx),%xmm1
+       leal    32(%edx),%edx
+       xorps   %xmm0,%xmm2
+L017enc1_loop_3:
+.byte  102,15,56,220,209
+       decl    %ecx
+       movups  (%edx),%xmm1
+       leal    16(%edx),%edx
+       jnz     L017enc1_loop_3
+.byte  102,15,56,221,209
+       movups  %xmm2,(%edi)
+       jmp     L008ecb_ret
+.align 4,0x90
+L014ecb_enc_two:
+       xorps   %xmm4,%xmm4
+       call    __aesni_encrypt3
+       movups  %xmm2,(%edi)
+       movups  %xmm3,16(%edi)
+       jmp     L008ecb_ret
+.align 4,0x90
+L015ecb_enc_three:
+       call    __aesni_encrypt3
+       movups  %xmm2,(%edi)
+       movups  %xmm3,16(%edi)
+       movups  %xmm4,32(%edi)
+       jmp     L008ecb_ret
+.align 4,0x90
+L016ecb_enc_four:
+       call    __aesni_encrypt4
+       movups  %xmm2,(%edi)
+       movups  %xmm3,16(%edi)
+       movups  %xmm4,32(%edi)
+       movups  %xmm5,48(%edi)
+       jmp     L008ecb_ret
+.align 4,0x90
+L009ecb_decrypt:
+       movl    %edx,%ebp
+       movl    %ecx,%ebx
+       cmpl    $96,%eax
+       jb      L018ecb_dec_tail
+       movdqu  (%esi),%xmm2
+       movdqu  16(%esi),%xmm3
+       movdqu  32(%esi),%xmm4
+       movdqu  48(%esi),%xmm5
+       movdqu  64(%esi),%xmm6
+       movdqu  80(%esi),%xmm7
+       leal    96(%esi),%esi
+       subl    $96,%eax
+       jmp     L019ecb_dec_loop6_enter
+.align 4,0x90
+L020ecb_dec_loop6:
+       movups  %xmm2,(%edi)
+       movdqu  (%esi),%xmm2
+       movups  %xmm3,16(%edi)
+       movdqu  16(%esi),%xmm3
+       movups  %xmm4,32(%edi)
+       movdqu  32(%esi),%xmm4
+       movups  %xmm5,48(%edi)
+       movdqu  48(%esi),%xmm5
+       movups  %xmm6,64(%edi)
+       movdqu  64(%esi),%xmm6
+       movups  %xmm7,80(%edi)
+       leal    96(%edi),%edi
+       movdqu  80(%esi),%xmm7
+       leal    96(%esi),%esi
+L019ecb_dec_loop6_enter:
+       call    __aesni_decrypt6
+       movl    %ebp,%edx
+       movl    %ebx,%ecx
+       subl    $96,%eax
+       jnc     L020ecb_dec_loop6
+       movups  %xmm2,(%edi)
+       movups  %xmm3,16(%edi)
+       movups  %xmm4,32(%edi)
+       movups  %xmm5,48(%edi)
+       movups  %xmm6,64(%edi)
+       movups  %xmm7,80(%edi)
+       leal    96(%edi),%edi
+       addl    $96,%eax
+       jz      L008ecb_ret
+L018ecb_dec_tail:
+       movups  (%esi),%xmm2
+       cmpl    $32,%eax
+       jb      L021ecb_dec_one
+       movups  16(%esi),%xmm3
+       je      L022ecb_dec_two
+       movups  32(%esi),%xmm4
+       cmpl    $64,%eax
+       jb      L023ecb_dec_three
+       movups  48(%esi),%xmm5
+       je      L024ecb_dec_four
+       movups  64(%esi),%xmm6
+       xorps   %xmm7,%xmm7
+       call    __aesni_decrypt6
+       movups  %xmm2,(%edi)
+       movups  %xmm3,16(%edi)
+       movups  %xmm4,32(%edi)
+       movups  %xmm5,48(%edi)
+       movups  %xmm6,64(%edi)
+       jmp     L008ecb_ret
+.align 4,0x90
+L021ecb_dec_one:
+       movups  (%edx),%xmm0
+       movups  16(%edx),%xmm1
+       leal    32(%edx),%edx
+       xorps   %xmm0,%xmm2
+L025dec1_loop_4:
+.byte  102,15,56,222,209
+       decl    %ecx
+       movups  (%edx),%xmm1
+       leal    16(%edx),%edx
+       jnz     L025dec1_loop_4
+.byte  102,15,56,223,209
+       movups  %xmm2,(%edi)
+       jmp     L008ecb_ret
+.align 4,0x90
+L022ecb_dec_two:
+       xorps   %xmm4,%xmm4
+       call    __aesni_decrypt3
+       movups  %xmm2,(%edi)
+       movups  %xmm3,16(%edi)
+       jmp     L008ecb_ret
+.align 4,0x90
+L023ecb_dec_three:
+       call    __aesni_decrypt3
+       movups  %xmm2,(%edi)
+       movups  %xmm3,16(%edi)
+       movups  %xmm4,32(%edi)
+       jmp     L008ecb_ret
+.align 4,0x90
+L024ecb_dec_four:
+       call    __aesni_decrypt4
+       movups  %xmm2,(%edi)
+       movups  %xmm3,16(%edi)
+       movups  %xmm4,32(%edi)
+       movups  %xmm5,48(%edi)
+L008ecb_ret:
+       popl    %edi
+       popl    %esi
+       popl    %ebx
+       popl    %ebp
+       ret
+.globl _aesni_ccm64_encrypt_blocks
+.align 4
+_aesni_ccm64_encrypt_blocks:
+L_aesni_ccm64_encrypt_blocks_begin:
+       pushl   %ebp
+       pushl   %ebx
+       pushl   %esi
+       pushl   %edi
+       movl    20(%esp),%esi
+       movl    24(%esp),%edi
+       movl    28(%esp),%eax
+       movl    32(%esp),%edx
+       movl    36(%esp),%ebx
+       movl    40(%esp),%ecx
+       movl    %esp,%ebp
+       subl    $60,%esp
+       andl    $-16,%esp
+       movl    %ebp,48(%esp)
+       movdqu  (%ebx),%xmm7
+       movdqu  (%ecx),%xmm3
+       movl    240(%edx),%ecx
+       movl    $202182159,(%esp)
+       movl    $134810123,4(%esp)
+       movl    $67438087,8(%esp)
+       movl    $66051,12(%esp)
+       movl    $1,%ebx
+       xorl    %ebp,%ebp
+       movl    %ebx,16(%esp)
+       movl    %ebp,20(%esp)
+       movl    %ebp,24(%esp)
+       movl    %ebp,28(%esp)
+       shrl    $1,%ecx
+       leal    (%edx),%ebp
+       movdqa  (%esp),%xmm5
+       movdqa  %xmm7,%xmm2
+       movl    %ecx,%ebx
+.byte  102,15,56,0,253
+L026ccm64_enc_outer:
+       movups  (%ebp),%xmm0
+       movl    %ebx,%ecx
+       movups  (%esi),%xmm6
+       xorps   %xmm0,%xmm2
+       movups  16(%ebp),%xmm1
+       xorps   %xmm6,%xmm0
+       leal    32(%ebp),%edx
+       xorps   %xmm0,%xmm3
+       movups  (%edx),%xmm0
+L027ccm64_enc2_loop:
+.byte  102,15,56,220,209
+       decl    %ecx
+.byte  102,15,56,220,217
+       movups  16(%edx),%xmm1
+.byte  102,15,56,220,208
+       leal    32(%edx),%edx
+.byte  102,15,56,220,216
+       movups  (%edx),%xmm0
+       jnz     L027ccm64_enc2_loop
+.byte  102,15,56,220,209
+.byte  102,15,56,220,217
+       paddq   16(%esp),%xmm7
+.byte  102,15,56,221,208
+.byte  102,15,56,221,216
+       decl    %eax
+       leal    16(%esi),%esi
+       xorps   %xmm2,%xmm6
+       movdqa  %xmm7,%xmm2
+       movups  %xmm6,(%edi)
+       leal    16(%edi),%edi
+.byte  102,15,56,0,213
+       jnz     L026ccm64_enc_outer
+       movl    48(%esp),%esp
+       movl    40(%esp),%edi
+       movups  %xmm3,(%edi)
+       popl    %edi
+       popl    %esi
+       popl    %ebx
+       popl    %ebp
+       ret
+.globl _aesni_ccm64_decrypt_blocks
+.align 4
+_aesni_ccm64_decrypt_blocks:
+L_aesni_ccm64_decrypt_blocks_begin:
+       pushl   %ebp
+       pushl   %ebx
+       pushl   %esi
+       pushl   %edi
+       movl    20(%esp),%esi
+       movl    24(%esp),%edi
+       movl    28(%esp),%eax
+       movl    32(%esp),%edx
+       movl    36(%esp),%ebx
+       movl    40(%esp),%ecx
+       movl    %esp,%ebp
+       subl    $60,%esp
+       andl    $-16,%esp
+       movl    %ebp,48(%esp)
+       movdqu  (%ebx),%xmm7
+       movdqu  (%ecx),%xmm3
+       movl    240(%edx),%ecx
+       movl    $202182159,(%esp)
+       movl    $134810123,4(%esp)
+       movl    $67438087,8(%esp)
+       movl    $66051,12(%esp)
+       movl    $1,%ebx
+       xorl    %ebp,%ebp
+       movl    %ebx,16(%esp)
+       movl    %ebp,20(%esp)
+       movl    %ebp,24(%esp)
+       movl    %ebp,28(%esp)
+       movdqa  (%esp),%xmm5
+       movdqa  %xmm7,%xmm2
+       movl    %edx,%ebp
+       movl    %ecx,%ebx
+.byte  102,15,56,0,253
+       movups  (%edx),%xmm0
+       movups  16(%edx),%xmm1
+       leal    32(%edx),%edx
+       xorps   %xmm0,%xmm2
+L028enc1_loop_5:
+.byte  102,15,56,220,209
+       decl    %ecx
+       movups  (%edx),%xmm1
+       leal    16(%edx),%edx
+       jnz     L028enc1_loop_5
+.byte  102,15,56,221,209
+       movups  (%esi),%xmm6
+       paddq   16(%esp),%xmm7
+       leal    16(%esi),%esi
+       jmp     L029ccm64_dec_outer
+.align 4,0x90
+L029ccm64_dec_outer:
+       xorps   %xmm2,%xmm6
+       movdqa  %xmm7,%xmm2
+       movl    %ebx,%ecx
+       movups  %xmm6,(%edi)
+       leal    16(%edi),%edi
+.byte  102,15,56,0,213
+       subl    $1,%eax
+       jz      L030ccm64_dec_break
+       movups  (%ebp),%xmm0
+       shrl    $1,%ecx
+       movups  16(%ebp),%xmm1
+       xorps   %xmm0,%xmm6
+       leal    32(%ebp),%edx
+       xorps   %xmm0,%xmm2
+       xorps   %xmm6,%xmm3
+       movups  (%edx),%xmm0
+L031ccm64_dec2_loop:
+.byte  102,15,56,220,209
+       decl    %ecx
+.byte  102,15,56,220,217
+       movups  16(%edx),%xmm1
+.byte  102,15,56,220,208
+       leal    32(%edx),%edx
+.byte  102,15,56,220,216
+       movups  (%edx),%xmm0
+       jnz     L031ccm64_dec2_loop
+       movups  (%esi),%xmm6
+       paddq   16(%esp),%xmm7
+.byte  102,15,56,220,209
+.byte  102,15,56,220,217
+       leal    16(%esi),%esi
+.byte  102,15,56,221,208
+.byte  102,15,56,221,216
+       jmp     L029ccm64_dec_outer
+.align 4,0x90
+L030ccm64_dec_break:
+       movl    %ebp,%edx
+       movups  (%edx),%xmm0
+       movups  16(%edx),%xmm1
+       xorps   %xmm0,%xmm6
+       leal    32(%edx),%edx
+       xorps   %xmm6,%xmm3
+L032enc1_loop_6:
+.byte  102,15,56,220,217
+       decl    %ecx
+       movups  (%edx),%xmm1
+       leal    16(%edx),%edx
+       jnz     L032enc1_loop_6
+.byte  102,15,56,221,217
+       movl    48(%esp),%esp
+       movl    40(%esp),%edi
+       movups  %xmm3,(%edi)
+       popl    %edi
+       popl    %esi
+       popl    %ebx
+       popl    %ebp
+       ret
+.globl _aesni_ctr32_encrypt_blocks
+.align 4
+_aesni_ctr32_encrypt_blocks:
+L_aesni_ctr32_encrypt_blocks_begin:
+       pushl   %ebp
+       pushl   %ebx
+       pushl   %esi
+       pushl   %edi
+       movl    20(%esp),%esi
+       movl    24(%esp),%edi
+       movl    28(%esp),%eax
+       movl    32(%esp),%edx
+       movl    36(%esp),%ebx
+       movl    %esp,%ebp
+       subl    $88,%esp
+       andl    $-16,%esp
+       movl    %ebp,80(%esp)
+       cmpl    $1,%eax
+       je      L033ctr32_one_shortcut
+       movdqu  (%ebx),%xmm7
+       movl    $202182159,(%esp)
+       movl    $134810123,4(%esp)
+       movl    $67438087,8(%esp)
+       movl    $66051,12(%esp)
+       movl    $6,%ecx
+       xorl    %ebp,%ebp
+       movl    %ecx,16(%esp)
+       movl    %ecx,20(%esp)
+       movl    %ecx,24(%esp)
+       movl    %ebp,28(%esp)
+.byte  102,15,58,22,251,3
+.byte  102,15,58,34,253,3
+       movl    240(%edx),%ecx
+       bswap   %ebx
+       pxor    %xmm1,%xmm1
+       pxor    %xmm0,%xmm0
+       movdqa  (%esp),%xmm2
+.byte  102,15,58,34,203,0
+       leal    3(%ebx),%ebp
+.byte  102,15,58,34,197,0
+       incl    %ebx
+.byte  102,15,58,34,203,1
+       incl    %ebp
+.byte  102,15,58,34,197,1
+       incl    %ebx
+.byte  102,15,58,34,203,2
+       incl    %ebp
+.byte  102,15,58,34,197,2
+       movdqa  %xmm1,48(%esp)
+.byte  102,15,56,0,202
+       movdqa  %xmm0,64(%esp)
+.byte  102,15,56,0,194
+       pshufd  $192,%xmm1,%xmm2
+       pshufd  $128,%xmm1,%xmm3
+       cmpl    $6,%eax
+       jb      L034ctr32_tail
+       movdqa  %xmm7,32(%esp)
+       shrl    $1,%ecx
+       movl    %edx,%ebp
+       movl    %ecx,%ebx
+       subl    $6,%eax
+       jmp     L035ctr32_loop6
+.align 4,0x90
+L035ctr32_loop6:
+       pshufd  $64,%xmm1,%xmm4
+       movdqa  32(%esp),%xmm1
+       pshufd  $192,%xmm0,%xmm5
+       por     %xmm1,%xmm2
+       pshufd  $128,%xmm0,%xmm6
+       por     %xmm1,%xmm3
+       pshufd  $64,%xmm0,%xmm7
+       por     %xmm1,%xmm4
+       por     %xmm1,%xmm5
+       por     %xmm1,%xmm6
+       por     %xmm1,%xmm7
+       movups  (%ebp),%xmm0
+       movups  16(%ebp),%xmm1
+       leal    32(%ebp),%edx
+       decl    %ecx
+       pxor    %xmm0,%xmm2
+       pxor    %xmm0,%xmm3
+.byte  102,15,56,220,209
+       pxor    %xmm0,%xmm4
+.byte  102,15,56,220,217
+       pxor    %xmm0,%xmm5
+.byte  102,15,56,220,225
+       pxor    %xmm0,%xmm6
+.byte  102,15,56,220,233
+       pxor    %xmm0,%xmm7
+.byte  102,15,56,220,241
+       movups  (%edx),%xmm0
+.byte  102,15,56,220,249
+       call    L_aesni_encrypt6_enter
+       movups  (%esi),%xmm1
+       movups  16(%esi),%xmm0
+       xorps   %xmm1,%xmm2
+       movups  32(%esi),%xmm1
+       xorps   %xmm0,%xmm3
+       movups  %xmm2,(%edi)
+       movdqa  16(%esp),%xmm0
+       xorps   %xmm1,%xmm4
+       movdqa  48(%esp),%xmm1
+       movups  %xmm3,16(%edi)
+       movups  %xmm4,32(%edi)
+       paddd   %xmm0,%xmm1
+       paddd   64(%esp),%xmm0
+       movdqa  (%esp),%xmm2
+       movups  48(%esi),%xmm3
+       movups  64(%esi),%xmm4
+       xorps   %xmm3,%xmm5
+       movups  80(%esi),%xmm3
+       leal    96(%esi),%esi
+       movdqa  %xmm1,48(%esp)
+.byte  102,15,56,0,202
+       xorps   %xmm4,%xmm6
+       movups  %xmm5,48(%edi)
+       xorps   %xmm3,%xmm7
+       movdqa  %xmm0,64(%esp)
+.byte  102,15,56,0,194
+       movups  %xmm6,64(%edi)
+       pshufd  $192,%xmm1,%xmm2
+       movups  %xmm7,80(%edi)
+       leal    96(%edi),%edi
+       movl    %ebx,%ecx
+       pshufd  $128,%xmm1,%xmm3
+       subl    $6,%eax
+       jnc     L035ctr32_loop6
+       addl    $6,%eax
+       jz      L036ctr32_ret
+       movl    %ebp,%edx
+       leal    1(,%ecx,2),%ecx
+       movdqa  32(%esp),%xmm7
+L034ctr32_tail:
+       por     %xmm7,%xmm2
+       cmpl    $2,%eax
+       jb      L037ctr32_one
+       pshufd  $64,%xmm1,%xmm4
+       por     %xmm7,%xmm3
+       je      L038ctr32_two
+       pshufd  $192,%xmm0,%xmm5
+       por     %xmm7,%xmm4
+       cmpl    $4,%eax
+       jb      L039ctr32_three
+       pshufd  $128,%xmm0,%xmm6
+       por     %xmm7,%xmm5
+       je      L040ctr32_four
+       por     %xmm7,%xmm6
+       call    __aesni_encrypt6
+       movups  (%esi),%xmm1
+       movups  16(%esi),%xmm0
+       xorps   %xmm1,%xmm2
+       movups  32(%esi),%xmm1
+       xorps   %xmm0,%xmm3
+       movups  48(%esi),%xmm0
+       xorps   %xmm1,%xmm4
+       movups  64(%esi),%xmm1
+       xorps   %xmm0,%xmm5
+       movups  %xmm2,(%edi)
+       xorps   %xmm1,%xmm6
+       movups  %xmm3,16(%edi)
+       movups  %xmm4,32(%edi)
+       movups  %xmm5,48(%edi)
+       movups  %xmm6,64(%edi)
+       jmp     L036ctr32_ret
+.align 4,0x90
+L033ctr32_one_shortcut:
+       movups  (%ebx),%xmm2
+       movl    240(%edx),%ecx
+L037ctr32_one:
+       movups  (%edx),%xmm0
+       movups  16(%edx),%xmm1
+       leal    32(%edx),%edx
+       xorps   %xmm0,%xmm2
+L041enc1_loop_7:
+.byte  102,15,56,220,209
+       decl    %ecx
+       movups  (%edx),%xmm1
+       leal    16(%edx),%edx
+       jnz     L041enc1_loop_7
+.byte  102,15,56,221,209
+       movups  (%esi),%xmm6
+       xorps   %xmm2,%xmm6
+       movups  %xmm6,(%edi)
+       jmp     L036ctr32_ret
+.align 4,0x90
+L038ctr32_two:
+       call    __aesni_encrypt3
+       movups  (%esi),%xmm5
+       movups  16(%esi),%xmm6
+       xorps   %xmm5,%xmm2
+       xorps   %xmm6,%xmm3
+       movups  %xmm2,(%edi)
+       movups  %xmm3,16(%edi)
+       jmp     L036ctr32_ret
+.align 4,0x90
+L039ctr32_three:
+       call    __aesni_encrypt3
+       movups  (%esi),%xmm5
+       movups  16(%esi),%xmm6
+       xorps   %xmm5,%xmm2
+       movups  32(%esi),%xmm7
+       xorps   %xmm6,%xmm3
+       movups  %xmm2,(%edi)
+       xorps   %xmm7,%xmm4
+       movups  %xmm3,16(%edi)
+       movups  %xmm4,32(%edi)
+       jmp     L036ctr32_ret
+.align 4,0x90
+L040ctr32_four:
+       call    __aesni_encrypt4
+       movups  (%esi),%xmm6
+       movups  16(%esi),%xmm7
+       movups  32(%esi),%xmm1
+       xorps   %xmm6,%xmm2
+       movups  48(%esi),%xmm0
+       xorps   %xmm7,%xmm3
+       movups  %xmm2,(%edi)
+       xorps   %xmm1,%xmm4
+       movups  %xmm3,16(%edi)
+       xorps   %xmm0,%xmm5
+       movups  %xmm4,32(%edi)
+       movups  %xmm5,48(%edi)
+L036ctr32_ret:
+       movl    80(%esp),%esp
+       popl    %edi
+       popl    %esi
+       popl    %ebx
+       popl    %ebp
+       ret
+.globl _aesni_xts_encrypt
+.align 4
+_aesni_xts_encrypt:
+L_aesni_xts_encrypt_begin:
+       pushl   %ebp
+       pushl   %ebx
+       pushl   %esi
+       pushl   %edi
+       movl    36(%esp),%edx
+       movl    40(%esp),%esi
+       movl    240(%edx),%ecx
+       movups  (%esi),%xmm2
+       movups  (%edx),%xmm0
+       movups  16(%edx),%xmm1
+       leal    32(%edx),%edx
+       xorps   %xmm0,%xmm2
+L042enc1_loop_8:
+.byte  102,15,56,220,209
+       decl    %ecx
+       movups  (%edx),%xmm1
+       leal    16(%edx),%edx
+       jnz     L042enc1_loop_8
+.byte  102,15,56,221,209
+       movl    20(%esp),%esi
+       movl    24(%esp),%edi
+       movl    28(%esp),%eax
+       movl    32(%esp),%edx
+       movl    %esp,%ebp
+       subl    $120,%esp
+       movl    240(%edx),%ecx
+       andl    $-16,%esp
+       movl    $135,96(%esp)
+       movl    $0,100(%esp)
+       movl    $1,104(%esp)
+       movl    $0,108(%esp)
+       movl    %eax,112(%esp)
+       movl    %ebp,116(%esp)
+       movdqa  %xmm2,%xmm1
+       pxor    %xmm0,%xmm0
+       movdqa  96(%esp),%xmm3
+       pcmpgtd %xmm1,%xmm0
+       andl    $-16,%eax
+       movl    %edx,%ebp
+       movl    %ecx,%ebx
+       subl    $96,%eax
+       jc      L043xts_enc_short
+       shrl    $1,%ecx
+       movl    %ecx,%ebx
+       jmp     L044xts_enc_loop6
+.align 4,0x90
+L044xts_enc_loop6:
+       pshufd  $19,%xmm0,%xmm2
+       pxor    %xmm0,%xmm0
+       movdqa  %xmm1,(%esp)
+       paddq   %xmm1,%xmm1
+       pand    %xmm3,%xmm2
+       pcmpgtd %xmm1,%xmm0
+       pxor    %xmm2,%xmm1
+       pshufd  $19,%xmm0,%xmm2
+       pxor    %xmm0,%xmm0
+       movdqa  %xmm1,16(%esp)
+       paddq   %xmm1,%xmm1
+       pand    %xmm3,%xmm2
+       pcmpgtd %xmm1,%xmm0
+       pxor    %xmm2,%xmm1
+       pshufd  $19,%xmm0,%xmm2
+       pxor    %xmm0,%xmm0
+       movdqa  %xmm1,32(%esp)
+       paddq   %xmm1,%xmm1
+       pand    %xmm3,%xmm2
+       pcmpgtd %xmm1,%xmm0
+       pxor    %xmm2,%xmm1
+       pshufd  $19,%xmm0,%xmm2
+       pxor    %xmm0,%xmm0
+       movdqa  %xmm1,48(%esp)
+       paddq   %xmm1,%xmm1
+       pand    %xmm3,%xmm2
+       pcmpgtd %xmm1,%xmm0
+       pxor    %xmm2,%xmm1
+       pshufd  $19,%xmm0,%xmm7
+       movdqa  %xmm1,64(%esp)
+       paddq   %xmm1,%xmm1
+       movups  (%ebp),%xmm0
+       pand    %xmm3,%xmm7
+       movups  (%esi),%xmm2
+       pxor    %xmm1,%xmm7
+       movdqu  16(%esi),%xmm3
+       xorps   %xmm0,%xmm2
+       movdqu  32(%esi),%xmm4
+       pxor    %xmm0,%xmm3
+       movdqu  48(%esi),%xmm5
+       pxor    %xmm0,%xmm4
+       movdqu  64(%esi),%xmm6
+       pxor    %xmm0,%xmm5
+       movdqu  80(%esi),%xmm1
+       pxor    %xmm0,%xmm6
+       leal    96(%esi),%esi
+       pxor    (%esp),%xmm2
+       movdqa  %xmm7,80(%esp)
+       pxor    %xmm1,%xmm7
+       movups  16(%ebp),%xmm1
+       leal    32(%ebp),%edx
+       pxor    16(%esp),%xmm3
+.byte  102,15,56,220,209
+       pxor    32(%esp),%xmm4
+.byte  102,15,56,220,217
+       pxor    48(%esp),%xmm5
+       decl    %ecx
+.byte  102,15,56,220,225
+       pxor    64(%esp),%xmm6
+.byte  102,15,56,220,233
+       pxor    %xmm0,%xmm7
+.byte  102,15,56,220,241
+       movups  (%edx),%xmm0
+.byte  102,15,56,220,249
+       call    L_aesni_encrypt6_enter
+       movdqa  80(%esp),%xmm1
+       pxor    %xmm0,%xmm0
+       xorps   (%esp),%xmm2
+       pcmpgtd %xmm1,%xmm0
+       xorps   16(%esp),%xmm3
+       movups  %xmm2,(%edi)
+       xorps   32(%esp),%xmm4
+       movups  %xmm3,16(%edi)
+       xorps   48(%esp),%xmm5
+       movups  %xmm4,32(%edi)
+       xorps   64(%esp),%xmm6
+       movups  %xmm5,48(%edi)
+       xorps   %xmm1,%xmm7
+       movups  %xmm6,64(%edi)
+       pshufd  $19,%xmm0,%xmm2
+       movups  %xmm7,80(%edi)
+       leal    96(%edi),%edi
+       movdqa  96(%esp),%xmm3
+       pxor    %xmm0,%xmm0
+       paddq   %xmm1,%xmm1
+       pand    %xmm3,%xmm2
+       pcmpgtd %xmm1,%xmm0
+       movl    %ebx,%ecx
+       pxor    %xmm2,%xmm1
+       subl    $96,%eax
+       jnc     L044xts_enc_loop6
+       leal    1(,%ecx,2),%ecx
+       movl    %ebp,%edx
+       movl    %ecx,%ebx
+L043xts_enc_short:
+       addl    $96,%eax
+       jz      L045xts_enc_done6x
+       movdqa  %xmm1,%xmm5
+       cmpl    $32,%eax
+       jb      L046xts_enc_one
+       pshufd  $19,%xmm0,%xmm2
+       pxor    %xmm0,%xmm0
+       paddq   %xmm1,%xmm1
+       pand    %xmm3,%xmm2
+       pcmpgtd %xmm1,%xmm0
+       pxor    %xmm2,%xmm1
+       je      L047xts_enc_two
+       pshufd  $19,%xmm0,%xmm2
+       pxor    %xmm0,%xmm0
+       movdqa  %xmm1,%xmm6
+       paddq   %xmm1,%xmm1
+       pand    %xmm3,%xmm2
+       pcmpgtd %xmm1,%xmm0
+       pxor    %xmm2,%xmm1
+       cmpl    $64,%eax
+       jb      L048xts_enc_three
+       pshufd  $19,%xmm0,%xmm2
+       pxor    %xmm0,%xmm0
+       movdqa  %xmm1,%xmm7
+       paddq   %xmm1,%xmm1
+       pand    %xmm3,%xmm2
+       pcmpgtd %xmm1,%xmm0
+       pxor    %xmm2,%xmm1
+       movdqa  %xmm5,(%esp)
+       movdqa  %xmm6,16(%esp)
+       je      L049xts_enc_four
+       movdqa  %xmm7,32(%esp)
+       pshufd  $19,%xmm0,%xmm7
+       movdqa  %xmm1,48(%esp)
+       paddq   %xmm1,%xmm1
+       pand    %xmm3,%xmm7
+       pxor    %xmm1,%xmm7
+       movdqu  (%esi),%xmm2
+       movdqu  16(%esi),%xmm3
+       movdqu  32(%esi),%xmm4
+       pxor    (%esp),%xmm2
+       movdqu  48(%esi),%xmm5
+       pxor    16(%esp),%xmm3
+       movdqu  64(%esi),%xmm6
+       pxor    32(%esp),%xmm4
+       leal    80(%esi),%esi
+       pxor    48(%esp),%xmm5
+       movdqa  %xmm7,64(%esp)
+       pxor    %xmm7,%xmm6
+       call    __aesni_encrypt6
+       movaps  64(%esp),%xmm1
+       xorps   (%esp),%xmm2
+       xorps   16(%esp),%xmm3
+       xorps   32(%esp),%xmm4
+       movups  %xmm2,(%edi)
+       xorps   48(%esp),%xmm5
+       movups  %xmm3,16(%edi)
+       xorps   %xmm1,%xmm6
+       movups  %xmm4,32(%edi)
+       movups  %xmm5,48(%edi)
+       movups  %xmm6,64(%edi)
+       leal    80(%edi),%edi
+       jmp     L050xts_enc_done
+.align 4,0x90
+L046xts_enc_one:
+       movups  (%esi),%xmm2
+       leal    16(%esi),%esi
+       xorps   %xmm5,%xmm2
+       movups  (%edx),%xmm0
+       movups  16(%edx),%xmm1
+       leal    32(%edx),%edx
+       xorps   %xmm0,%xmm2
+L051enc1_loop_9:
+.byte  102,15,56,220,209
+       decl    %ecx
+       movups  (%edx),%xmm1
+       leal    16(%edx),%edx
+       jnz     L051enc1_loop_9
+.byte  102,15,56,221,209
+       xorps   %xmm5,%xmm2
+       movups  %xmm2,(%edi)
+       leal    16(%edi),%edi
+       movdqa  %xmm5,%xmm1
+       jmp     L050xts_enc_done
+.align 4,0x90
+L047xts_enc_two:
+       movaps  %xmm1,%xmm6
+       movups  (%esi),%xmm2
+       movups  16(%esi),%xmm3
+       leal    32(%esi),%esi
+       xorps   %xmm5,%xmm2
+       xorps   %xmm6,%xmm3
+       xorps   %xmm4,%xmm4
+       call    __aesni_encrypt3
+       xorps   %xmm5,%xmm2
+       xorps   %xmm6,%xmm3
+       movups  %xmm2,(%edi)
+       movups  %xmm3,16(%edi)
+       leal    32(%edi),%edi
+       movdqa  %xmm6,%xmm1
+       jmp     L050xts_enc_done
+.align 4,0x90
+L048xts_enc_three:
+       movaps  %xmm1,%xmm7
+       movups  (%esi),%xmm2
+       movups  16(%esi),%xmm3
+       movups  32(%esi),%xmm4
+       leal    48(%esi),%esi
+       xorps   %xmm5,%xmm2
+       xorps   %xmm6,%xmm3
+       xorps   %xmm7,%xmm4
+       call    __aesni_encrypt3
+       xorps   %xmm5,%xmm2
+       xorps   %xmm6,%xmm3
+       xorps   %xmm7,%xmm4
+       movups  %xmm2,(%edi)
+       movups  %xmm3,16(%edi)
+       movups  %xmm4,32(%edi)
+       leal    48(%edi),%edi
+       movdqa  %xmm7,%xmm1
+       jmp     L050xts_enc_done
+.align 4,0x90
+L049xts_enc_four:
+       movaps  %xmm1,%xmm6
+       movups  (%esi),%xmm2
+       movups  16(%esi),%xmm3
+       movups  32(%esi),%xmm4
+       xorps   (%esp),%xmm2
+       movups  48(%esi),%xmm5
+       leal    64(%esi),%esi
+       xorps   16(%esp),%xmm3
+       xorps   %xmm7,%xmm4
+       xorps   %xmm6,%xmm5
+       call    __aesni_encrypt4
+       xorps   (%esp),%xmm2
+       xorps   16(%esp),%xmm3
+       xorps   %xmm7,%xmm4
+       movups  %xmm2,(%edi)
+       xorps   %xmm6,%xmm5
+       movups  %xmm3,16(%edi)
+       movups  %xmm4,32(%edi)
+       movups  %xmm5,48(%edi)
+       leal    64(%edi),%edi
+       movdqa  %xmm6,%xmm1
+       jmp     L050xts_enc_done
+.align 4,0x90
+L045xts_enc_done6x:
+       movl    112(%esp),%eax
+       andl    $15,%eax
+       jz      L052xts_enc_ret
+       movdqa  %xmm1,%xmm5
+       movl    %eax,112(%esp)
+       jmp     L053xts_enc_steal
+.align 4,0x90
+L050xts_enc_done:
+       movl    112(%esp),%eax
+       pxor    %xmm0,%xmm0
+       andl    $15,%eax
+       jz      L052xts_enc_ret
+       pcmpgtd %xmm1,%xmm0
+       movl    %eax,112(%esp)
+       pshufd  $19,%xmm0,%xmm5
+       paddq   %xmm1,%xmm1
+       pand    96(%esp),%xmm5
+       pxor    %xmm1,%xmm5
+L053xts_enc_steal:
+       movzbl  (%esi),%ecx
+       movzbl  -16(%edi),%edx
+       leal    1(%esi),%esi
+       movb    %cl,-16(%edi)
+       movb    %dl,(%edi)
+       leal    1(%edi),%edi
+       subl    $1,%eax
+       jnz     L053xts_enc_steal
+       subl    112(%esp),%edi
+       movl    %ebp,%edx
+       movl    %ebx,%ecx
+       movups  -16(%edi),%xmm2
+       xorps   %xmm5,%xmm2
+       movups  (%edx),%xmm0
+       movups  16(%edx),%xmm1
+       leal    32(%edx),%edx
+       xorps   %xmm0,%xmm2
+L054enc1_loop_10:
+.byte  102,15,56,220,209
+       decl    %ecx
+       movups  (%edx),%xmm1
+       leal    16(%edx),%edx
+       jnz     L054enc1_loop_10
+.byte  102,15,56,221,209
+       xorps   %xmm5,%xmm2
+       movups  %xmm2,-16(%edi)
+L052xts_enc_ret:
+       movl    116(%esp),%esp
+       popl    %edi
+       popl    %esi
+       popl    %ebx
+       popl    %ebp
+       ret
+.globl _aesni_xts_decrypt
+.align 4
+_aesni_xts_decrypt:
+L_aesni_xts_decrypt_begin:
+       pushl   %ebp
+       pushl   %ebx
+       pushl   %esi
+       pushl   %edi
+       movl    36(%esp),%edx
+       movl    40(%esp),%esi
+       movl    240(%edx),%ecx
+       movups  (%esi),%xmm2
+       movups  (%edx),%xmm0
+       movups  16(%edx),%xmm1
+       leal    32(%edx),%edx
+       xorps   %xmm0,%xmm2
+L055enc1_loop_11:
+.byte  102,15,56,220,209
+       decl    %ecx
+       movups  (%edx),%xmm1
+       leal    16(%edx),%edx
+       jnz     L055enc1_loop_11
+.byte  102,15,56,221,209
+       movl    20(%esp),%esi
+       movl    24(%esp),%edi
+       movl    28(%esp),%eax
+       movl    32(%esp),%edx
+       movl    %esp,%ebp
+       subl    $120,%esp
+       andl    $-16,%esp
+       xorl    %ebx,%ebx
+       testl   $15,%eax
+       setnz   %bl
+       shll    $4,%ebx
+       subl    %ebx,%eax
+       movl    $135,96(%esp)
+       movl    $0,100(%esp)
+       movl    $1,104(%esp)
+       movl    $0,108(%esp)
+       movl    %eax,112(%esp)
+       movl    %ebp,116(%esp)
+       movl    240(%edx),%ecx
+       movl    %edx,%ebp
+       movl    %ecx,%ebx
+       movdqa  %xmm2,%xmm1
+       pxor    %xmm0,%xmm0
+       movdqa  96(%esp),%xmm3
+       pcmpgtd %xmm1,%xmm0
+       andl    $-16,%eax
+       subl    $96,%eax
+       jc      L056xts_dec_short
+       shrl    $1,%ecx
+       movl    %ecx,%ebx
+       jmp     L057xts_dec_loop6
+.align 4,0x90
+L057xts_dec_loop6:
+       pshufd  $19,%xmm0,%xmm2
+       pxor    %xmm0,%xmm0
+       movdqa  %xmm1,(%esp)
+       paddq   %xmm1,%xmm1
+       pand    %xmm3,%xmm2
+       pcmpgtd %xmm1,%xmm0
+       pxor    %xmm2,%xmm1
+       pshufd  $19,%xmm0,%xmm2
+       pxor    %xmm0,%xmm0
+       movdqa  %xmm1,16(%esp)
+       paddq   %xmm1,%xmm1
+       pand    %xmm3,%xmm2
+       pcmpgtd %xmm1,%xmm0
+       pxor    %xmm2,%xmm1
+       pshufd  $19,%xmm0,%xmm2
+       pxor    %xmm0,%xmm0
+       movdqa  %xmm1,32(%esp)
+       paddq   %xmm1,%xmm1
+       pand    %xmm3,%xmm2
+       pcmpgtd %xmm1,%xmm0
+       pxor    %xmm2,%xmm1
+       pshufd  $19,%xmm0,%xmm2
+       pxor    %xmm0,%xmm0
+       movdqa  %xmm1,48(%esp)
+       paddq   %xmm1,%xmm1
+       pand    %xmm3,%xmm2
+       pcmpgtd %xmm1,%xmm0
+       pxor    %xmm2,%xmm1
+       pshufd  $19,%xmm0,%xmm7
+       movdqa  %xmm1,64(%esp)
+       paddq   %xmm1,%xmm1
+       movups  (%ebp),%xmm0
+       pand    %xmm3,%xmm7
+       movups  (%esi),%xmm2
+       pxor    %xmm1,%xmm7
+       movdqu  16(%esi),%xmm3
+       xorps   %xmm0,%xmm2
+       movdqu  32(%esi),%xmm4
+       pxor    %xmm0,%xmm3
+       movdqu  48(%esi),%xmm5
+       pxor    %xmm0,%xmm4
+       movdqu  64(%esi),%xmm6
+       pxor    %xmm0,%xmm5
+       movdqu  80(%esi),%xmm1
+       pxor    %xmm0,%xmm6
+       leal    96(%esi),%esi
+       pxor    (%esp),%xmm2
+       movdqa  %xmm7,80(%esp)
+       pxor    %xmm1,%xmm7
+       movups  16(%ebp),%xmm1
+       leal    32(%ebp),%edx
+       pxor    16(%esp),%xmm3
+.byte  102,15,56,222,209
+       pxor    32(%esp),%xmm4
+.byte  102,15,56,222,217
+       pxor    48(%esp),%xmm5
+       decl    %ecx
+.byte  102,15,56,222,225
+       pxor    64(%esp),%xmm6
+.byte  102,15,56,222,233
+       pxor    %xmm0,%xmm7
+.byte  102,15,56,222,241
+       movups  (%edx),%xmm0
+.byte  102,15,56,222,249
+       call    L_aesni_decrypt6_enter
+       movdqa  80(%esp),%xmm1
+       pxor    %xmm0,%xmm0
+       xorps   (%esp),%xmm2
+       pcmpgtd %xmm1,%xmm0
+       xorps   16(%esp),%xmm3
+       movups  %xmm2,(%edi)
+       xorps   32(%esp),%xmm4
+       movups  %xmm3,16(%edi)
+       xorps   48(%esp),%xmm5
+       movups  %xmm4,32(%edi)
+       xorps   64(%esp),%xmm6
+       movups  %xmm5,48(%edi)
+       xorps   %xmm1,%xmm7
+       movups  %xmm6,64(%edi)
+       pshufd  $19,%xmm0,%xmm2
+       movups  %xmm7,80(%edi)
+       leal    96(%edi),%edi
+       movdqa  96(%esp),%xmm3
+       pxor    %xmm0,%xmm0
+       paddq   %xmm1,%xmm1
+       pand    %xmm3,%xmm2
+       pcmpgtd %xmm1,%xmm0
+       movl    %ebx,%ecx
+       pxor    %xmm2,%xmm1
+       subl    $96,%eax
+       jnc     L057xts_dec_loop6
+       leal    1(,%ecx,2),%ecx
+       movl    %ebp,%edx
+       movl    %ecx,%ebx
+L056xts_dec_short:
+       addl    $96,%eax
+       jz      L058xts_dec_done6x
+       movdqa  %xmm1,%xmm5
+       cmpl    $32,%eax
+       jb      L059xts_dec_one
+       pshufd  $19,%xmm0,%xmm2
+       pxor    %xmm0,%xmm0
+       paddq   %xmm1,%xmm1
+       pand    %xmm3,%xmm2
+       pcmpgtd %xmm1,%xmm0
+       pxor    %xmm2,%xmm1
+       je      L060xts_dec_two
+       pshufd  $19,%xmm0,%xmm2
+       pxor    %xmm0,%xmm0
+       movdqa  %xmm1,%xmm6
+       paddq   %xmm1,%xmm1
+       pand    %xmm3,%xmm2
+       pcmpgtd %xmm1,%xmm0
+       pxor    %xmm2,%xmm1
+       cmpl    $64,%eax
+       jb      L061xts_dec_three
+       pshufd  $19,%xmm0,%xmm2
+       pxor    %xmm0,%xmm0
+       movdqa  %xmm1,%xmm7
+       paddq   %xmm1,%xmm1
+       pand    %xmm3,%xmm2
+       pcmpgtd %xmm1,%xmm0
+       pxor    %xmm2,%xmm1
+       movdqa  %xmm5,(%esp)
+       movdqa  %xmm6,16(%esp)
+       je      L062xts_dec_four
+       movdqa  %xmm7,32(%esp)
+       pshufd  $19,%xmm0,%xmm7
+       movdqa  %xmm1,48(%esp)
+       paddq   %xmm1,%xmm1
+       pand    %xmm3,%xmm7
+       pxor    %xmm1,%xmm7
+       movdqu  (%esi),%xmm2
+       movdqu  16(%esi),%xmm3
+       movdqu  32(%esi),%xmm4
+       pxor    (%esp),%xmm2
+       movdqu  48(%esi),%xmm5
+       pxor    16(%esp),%xmm3
+       movdqu  64(%esi),%xmm6
+       pxor    32(%esp),%xmm4
+       leal    80(%esi),%esi
+       pxor    48(%esp),%xmm5
+       movdqa  %xmm7,64(%esp)
+       pxor    %xmm7,%xmm6
+       call    __aesni_decrypt6
+       movaps  64(%esp),%xmm1
+       xorps   (%esp),%xmm2
+       xorps   16(%esp),%xmm3
+       xorps   32(%esp),%xmm4
+       movups  %xmm2,(%edi)
+       xorps   48(%esp),%xmm5
+       movups  %xmm3,16(%edi)
+       xorps   %xmm1,%xmm6
+       movups  %xmm4,32(%edi)
+       movups  %xmm5,48(%edi)
+       movups  %xmm6,64(%edi)
+       leal    80(%edi),%edi
+       jmp     L063xts_dec_done
+.align 4,0x90
+L059xts_dec_one:
+       movups  (%esi),%xmm2
+       leal    16(%esi),%esi
+       xorps   %xmm5,%xmm2
+       movups  (%edx),%xmm0
+       movups  16(%edx),%xmm1
+       leal    32(%edx),%edx
+       xorps   %xmm0,%xmm2
+L064dec1_loop_12:
+.byte  102,15,56,222,209
+       decl    %ecx
+       movups  (%edx),%xmm1
+       leal    16(%edx),%edx
+       jnz     L064dec1_loop_12
+.byte  102,15,56,223,209
+       xorps   %xmm5,%xmm2
+       movups  %xmm2,(%edi)
+       leal    16(%edi),%edi
+       movdqa  %xmm5,%xmm1
+       jmp     L063xts_dec_done
+.align 4,0x90
+L060xts_dec_two:
+       movaps  %xmm1,%xmm6
+       movups  (%esi),%xmm2
+       movups  16(%esi),%xmm3
+       leal    32(%esi),%esi
+       xorps   %xmm5,%xmm2
+       xorps   %xmm6,%xmm3
+       call    __aesni_decrypt3
+       xorps   %xmm5,%xmm2
+       xorps   %xmm6,%xmm3
+       movups  %xmm2,(%edi)
+       movups  %xmm3,16(%edi)
+       leal    32(%edi),%edi
+       movdqa  %xmm6,%xmm1
+       jmp     L063xts_dec_done
+.align 4,0x90
+L061xts_dec_three:
+       movaps  %xmm1,%xmm7
+       movups  (%esi),%xmm2
+       movups  16(%esi),%xmm3
+       movups  32(%esi),%xmm4
+       leal    48(%esi),%esi
+       xorps   %xmm5,%xmm2
+       xorps   %xmm6,%xmm3
+       xorps   %xmm7,%xmm4
+       call    __aesni_decrypt3
+       xorps   %xmm5,%xmm2
+       xorps   %xmm6,%xmm3
+       xorps   %xmm7,%xmm4
+       movups  %xmm2,(%edi)
+       movups  %xmm3,16(%edi)
+       movups  %xmm4,32(%edi)
+       leal    48(%edi),%edi
+       movdqa  %xmm7,%xmm1
+       jmp     L063xts_dec_done
+.align 4,0x90
+L062xts_dec_four:
+       movaps  %xmm1,%xmm6
+       movups  (%esi),%xmm2
+       movups  16(%esi),%xmm3
+       movups  32(%esi),%xmm4
+       xorps   (%esp),%xmm2
+       movups  48(%esi),%xmm5
+       leal    64(%esi),%esi
+       xorps   16(%esp),%xmm3
+       xorps   %xmm7,%xmm4
+       xorps   %xmm6,%xmm5
+       call    __aesni_decrypt4
+       xorps   (%esp),%xmm2
+       xorps   16(%esp),%xmm3
+       xorps   %xmm7,%xmm4
+       movups  %xmm2,(%edi)
+       xorps   %xmm6,%xmm5
+       movups  %xmm3,16(%edi)
+       movups  %xmm4,32(%edi)
+       movups  %xmm5,48(%edi)
+       leal    64(%edi),%edi
+       movdqa  %xmm6,%xmm1
+       jmp     L063xts_dec_done
+.align 4,0x90
+L058xts_dec_done6x:
+       movl    112(%esp),%eax
+       andl    $15,%eax
+       jz      L065xts_dec_ret
+       movl    %eax,112(%esp)
+       jmp     L066xts_dec_only_one_more
+.align 4,0x90
+L063xts_dec_done:
+       movl    112(%esp),%eax
+       pxor    %xmm0,%xmm0
+       andl    $15,%eax
+       jz      L065xts_dec_ret
+       pcmpgtd %xmm1,%xmm0
+       movl    %eax,112(%esp)
+       pshufd  $19,%xmm0,%xmm2
+       pxor    %xmm0,%xmm0
+       movdqa  96(%esp),%xmm3
+       paddq   %xmm1,%xmm1
+       pand    %xmm3,%xmm2
+       pcmpgtd %xmm1,%xmm0
+       pxor    %xmm2,%xmm1
+L066xts_dec_only_one_more:
+       pshufd  $19,%xmm0,%xmm5
+       movdqa  %xmm1,%xmm6
+       paddq   %xmm1,%xmm1
+       pand    %xmm3,%xmm5
+       pxor    %xmm1,%xmm5
+       movl    %ebp,%edx
+       movl    %ebx,%ecx
+       movups  (%esi),%xmm2
+       xorps   %xmm5,%xmm2
+       movups  (%edx),%xmm0
+       movups  16(%edx),%xmm1
+       leal    32(%edx),%edx
+       xorps   %xmm0,%xmm2
+L067dec1_loop_13:
+.byte  102,15,56,222,209
+       decl    %ecx
+       movups  (%edx),%xmm1
+       leal    16(%edx),%edx
+       jnz     L067dec1_loop_13
+.byte  102,15,56,223,209
+       xorps   %xmm5,%xmm2
+       movups  %xmm2,(%edi)
+L068xts_dec_steal:
+       movzbl  16(%esi),%ecx
+       movzbl  (%edi),%edx
+       leal    1(%esi),%esi
+       movb    %cl,(%edi)
+       movb    %dl,16(%edi)
+       leal    1(%edi),%edi
+       subl    $1,%eax
+       jnz     L068xts_dec_steal
+       subl    112(%esp),%edi
+       movl    %ebp,%edx
+       movl    %ebx,%ecx
+       movups  (%edi),%xmm2
+       xorps   %xmm6,%xmm2
+       movups  (%edx),%xmm0
+       movups  16(%edx),%xmm1
+       leal    32(%edx),%edx
+       xorps   %xmm0,%xmm2
+L069dec1_loop_14:
+.byte  102,15,56,222,209
+       decl    %ecx
+       movups  (%edx),%xmm1
+       leal    16(%edx),%edx
+       jnz     L069dec1_loop_14
+.byte  102,15,56,223,209
+       xorps   %xmm6,%xmm2
+       movups  %xmm2,(%edi)
+L065xts_dec_ret:
+       movl    116(%esp),%esp
+       popl    %edi
+       popl    %esi
+       popl    %ebx
+       popl    %ebp
+       ret
+.globl _aesni_cbc_encrypt
+.align 4
+_aesni_cbc_encrypt:
+L_aesni_cbc_encrypt_begin:
+       pushl   %ebp
+       pushl   %ebx
+       pushl   %esi
+       pushl   %edi
+       movl    20(%esp),%esi
+       movl    %esp,%ebx
+       movl    24(%esp),%edi
+       subl    $24,%ebx
+       movl    28(%esp),%eax
+       andl    $-16,%ebx
+       movl    32(%esp),%edx
+       movl    36(%esp),%ebp
+       testl   %eax,%eax
+       jz      L070cbc_abort
+       cmpl    $0,40(%esp)
+       xchgl   %esp,%ebx
+       movups  (%ebp),%xmm7
+       movl    240(%edx),%ecx
+       movl    %edx,%ebp
+       movl    %ebx,16(%esp)
+       movl    %ecx,%ebx
+       je      L071cbc_decrypt
+       movaps  %xmm7,%xmm2
+       cmpl    $16,%eax
+       jb      L072cbc_enc_tail
+       subl    $16,%eax
+       jmp     L073cbc_enc_loop
+.align 4,0x90
+L073cbc_enc_loop:
+       movups  (%esi),%xmm7
+       leal    16(%esi),%esi
+       movups  (%edx),%xmm0
+       movups  16(%edx),%xmm1
+       xorps   %xmm0,%xmm7
+       leal    32(%edx),%edx
+       xorps   %xmm7,%xmm2
+L074enc1_loop_15:
+.byte  102,15,56,220,209
+       decl    %ecx
+       movups  (%edx),%xmm1
+       leal    16(%edx),%edx
+       jnz     L074enc1_loop_15
+.byte  102,15,56,221,209
+       movl    %ebx,%ecx
+       movl    %ebp,%edx
+       movups  %xmm2,(%edi)
+       leal    16(%edi),%edi
+       subl    $16,%eax
+       jnc     L073cbc_enc_loop
+       addl    $16,%eax
+       jnz     L072cbc_enc_tail
+       movaps  %xmm2,%xmm7
+       jmp     L075cbc_ret
+L072cbc_enc_tail:
+       movl    %eax,%ecx
+.long  2767451785
+       movl    $16,%ecx
+       subl    %eax,%ecx
+       xorl    %eax,%eax
+.long  2868115081
+       leal    -16(%edi),%edi
+       movl    %ebx,%ecx
+       movl    %edi,%esi
+       movl    %ebp,%edx
+       jmp     L073cbc_enc_loop
+.align 4,0x90
+L071cbc_decrypt:
+       cmpl    $80,%eax
+       jbe     L076cbc_dec_tail
+       movaps  %xmm7,(%esp)
+       subl    $80,%eax
+       jmp     L077cbc_dec_loop6_enter
+.align 4,0x90
+L078cbc_dec_loop6:
+       movaps  %xmm0,(%esp)
+       movups  %xmm7,(%edi)
+       leal    16(%edi),%edi
+L077cbc_dec_loop6_enter:
+       movdqu  (%esi),%xmm2
+       movdqu  16(%esi),%xmm3
+       movdqu  32(%esi),%xmm4
+       movdqu  48(%esi),%xmm5
+       movdqu  64(%esi),%xmm6
+       movdqu  80(%esi),%xmm7
+       call    __aesni_decrypt6
+       movups  (%esi),%xmm1
+       movups  16(%esi),%xmm0
+       xorps   (%esp),%xmm2
+       xorps   %xmm1,%xmm3
+       movups  32(%esi),%xmm1
+       xorps   %xmm0,%xmm4
+       movups  48(%esi),%xmm0
+       xorps   %xmm1,%xmm5
+       movups  64(%esi),%xmm1
+       xorps   %xmm0,%xmm6
+       movups  80(%esi),%xmm0
+       xorps   %xmm1,%xmm7
+       movups  %xmm2,(%edi)
+       movups  %xmm3,16(%edi)
+       leal    96(%esi),%esi
+       movups  %xmm4,32(%edi)
+       movl    %ebx,%ecx
+       movups  %xmm5,48(%edi)
+       movl    %ebp,%edx
+       movups  %xmm6,64(%edi)
+       leal    80(%edi),%edi
+       subl    $96,%eax
+       ja      L078cbc_dec_loop6
+       movaps  %xmm7,%xmm2
+       movaps  %xmm0,%xmm7
+       addl    $80,%eax
+       jle     L079cbc_dec_tail_collected
+       movups  %xmm2,(%edi)
+       leal    16(%edi),%edi
+L076cbc_dec_tail:
+       movups  (%esi),%xmm2
+       movaps  %xmm2,%xmm6
+       cmpl    $16,%eax
+       jbe     L080cbc_dec_one
+       movups  16(%esi),%xmm3
+       movaps  %xmm3,%xmm5
+       cmpl    $32,%eax
+       jbe     L081cbc_dec_two
+       movups  32(%esi),%xmm4
+       cmpl    $48,%eax
+       jbe     L082cbc_dec_three
+       movups  48(%esi),%xmm5
+       cmpl    $64,%eax
+       jbe     L083cbc_dec_four
+       movups  64(%esi),%xmm6
+       movaps  %xmm7,(%esp)
+       movups  (%esi),%xmm2
+       xorps   %xmm7,%xmm7
+       call    __aesni_decrypt6
+       movups  (%esi),%xmm1
+       movups  16(%esi),%xmm0
+       xorps   (%esp),%xmm2
+       xorps   %xmm1,%xmm3
+       movups  32(%esi),%xmm1
+       xorps   %xmm0,%xmm4
+       movups  48(%esi),%xmm0
+       xorps   %xmm1,%xmm5
+       movups  64(%esi),%xmm7
+       xorps   %xmm0,%xmm6
+       movups  %xmm2,(%edi)
+       movups  %xmm3,16(%edi)
+       movups  %xmm4,32(%edi)
+       movups  %xmm5,48(%edi)
+       leal    64(%edi),%edi
+       movaps  %xmm6,%xmm2
+       subl    $80,%eax
+       jmp     L079cbc_dec_tail_collected
+.align 4,0x90
+L080cbc_dec_one:
+       movups  (%edx),%xmm0
+       movups  16(%edx),%xmm1
+       leal    32(%edx),%edx
+       xorps   %xmm0,%xmm2
+L084dec1_loop_16:
+.byte  102,15,56,222,209
+       decl    %ecx
+       movups  (%edx),%xmm1
+       leal    16(%edx),%edx
+       jnz     L084dec1_loop_16
+.byte  102,15,56,223,209
+       xorps   %xmm7,%xmm2
+       movaps  %xmm6,%xmm7
+       subl    $16,%eax
+       jmp     L079cbc_dec_tail_collected
+.align 4,0x90
+L081cbc_dec_two:
+       xorps   %xmm4,%xmm4
+       call    __aesni_decrypt3
+       xorps   %xmm7,%xmm2
+       xorps   %xmm6,%xmm3
+       movups  %xmm2,(%edi)
+       movaps  %xmm3,%xmm2
+       leal    16(%edi),%edi
+       movaps  %xmm5,%xmm7
+       subl    $32,%eax
+       jmp     L079cbc_dec_tail_collected
+.align 4,0x90
+L082cbc_dec_three:
+       call    __aesni_decrypt3
+       xorps   %xmm7,%xmm2
+       xorps   %xmm6,%xmm3
+       xorps   %xmm5,%xmm4
+       movups  %xmm2,(%edi)
+       movaps  %xmm4,%xmm2
+       movups  %xmm3,16(%edi)
+       leal    32(%edi),%edi
+       movups  32(%esi),%xmm7
+       subl    $48,%eax
+       jmp     L079cbc_dec_tail_collected
+.align 4,0x90
+L083cbc_dec_four:
+       call    __aesni_decrypt4
+       movups  16(%esi),%xmm1
+       movups  32(%esi),%xmm0
+       xorps   %xmm7,%xmm2
+       movups  48(%esi),%xmm7
+       xorps   %xmm6,%xmm3
+       movups  %xmm2,(%edi)
+       xorps   %xmm1,%xmm4
+       movups  %xmm3,16(%edi)
+       xorps   %xmm0,%xmm5
+       movups  %xmm4,32(%edi)
+       leal    48(%edi),%edi
+       movaps  %xmm5,%xmm2
+       subl    $64,%eax
+L079cbc_dec_tail_collected:
+       andl    $15,%eax
+       jnz     L085cbc_dec_tail_partial
+       movups  %xmm2,(%edi)
+       jmp     L075cbc_ret
+.align 4,0x90
+L085cbc_dec_tail_partial:
+       movaps  %xmm2,(%esp)
+       movl    $16,%ecx
+       movl    %esp,%esi
+       subl    %eax,%ecx
+.long  2767451785
+L075cbc_ret:
+       movl    16(%esp),%esp
+       movl    36(%esp),%ebp
+       movups  %xmm7,(%ebp)
+L070cbc_abort:
+       popl    %edi
+       popl    %esi
+       popl    %ebx
+       popl    %ebp
+       ret
+.align 4
+__aesni_set_encrypt_key:
+       testl   %eax,%eax
+       jz      L086bad_pointer
+       testl   %edx,%edx
+       jz      L086bad_pointer
+       movups  (%eax),%xmm0
+       xorps   %xmm4,%xmm4
+       leal    16(%edx),%edx
+       cmpl    $256,%ecx
+       je      L08714rounds
+       cmpl    $192,%ecx
+       je      L08812rounds
+       cmpl    $128,%ecx
+       jne     L089bad_keybits
+.align 4,0x90
+L09010rounds:
+       movl    $9,%ecx
+       movups  %xmm0,-16(%edx)
+.byte  102,15,58,223,200,1
+       call    L091key_128_cold
+.byte  102,15,58,223,200,2
+       call    L092key_128
+.byte  102,15,58,223,200,4
+       call    L092key_128
+.byte  102,15,58,223,200,8
+       call    L092key_128
+.byte  102,15,58,223,200,16
+       call    L092key_128
+.byte  102,15,58,223,200,32
+       call    L092key_128
+.byte  102,15,58,223,200,64
+       call    L092key_128
+.byte  102,15,58,223,200,128
+       call    L092key_128
+.byte  102,15,58,223,200,27
+       call    L092key_128
+.byte  102,15,58,223,200,54
+       call    L092key_128
+       movups  %xmm0,(%edx)
+       movl    %ecx,80(%edx)
+       xorl    %eax,%eax
+       ret
+.align 4,0x90
+L092key_128:
+       movups  %xmm0,(%edx)
+       leal    16(%edx),%edx
+L091key_128_cold:
+       shufps  $16,%xmm0,%xmm4
+       xorps   %xmm4,%xmm0
+       shufps  $140,%xmm0,%xmm4
+       xorps   %xmm4,%xmm0
+       shufps  $255,%xmm1,%xmm1
+       xorps   %xmm1,%xmm0
+       ret
+.align 4,0x90
+L08812rounds:
+       movq    16(%eax),%xmm2
+       movl    $11,%ecx
+       movups  %xmm0,-16(%edx)
+.byte  102,15,58,223,202,1
+       call    L093key_192a_cold
+.byte  102,15,58,223,202,2
+       call    L094key_192b
+.byte  102,15,58,223,202,4
+       call    L095key_192a
+.byte  102,15,58,223,202,8
+       call    L094key_192b
+.byte  102,15,58,223,202,16
+       call    L095key_192a
+.byte  102,15,58,223,202,32
+       call    L094key_192b
+.byte  102,15,58,223,202,64
+       call    L095key_192a
+.byte  102,15,58,223,202,128
+       call    L094key_192b
+       movups  %xmm0,(%edx)
+       movl    %ecx,48(%edx)
+       xorl    %eax,%eax
+       ret
+.align 4,0x90
+L095key_192a:
+       movups  %xmm0,(%edx)
+       leal    16(%edx),%edx
+.align 4,0x90
+L093key_192a_cold:
+       movaps  %xmm2,%xmm5
+L096key_192b_warm:
+       shufps  $16,%xmm0,%xmm4
+       movdqa  %xmm2,%xmm3
+       xorps   %xmm4,%xmm0
+       shufps  $140,%xmm0,%xmm4
+       pslldq  $4,%xmm3
+       xorps   %xmm4,%xmm0
+       pshufd  $85,%xmm1,%xmm1
+       pxor    %xmm3,%xmm2
+       pxor    %xmm1,%xmm0
+       pshufd  $255,%xmm0,%xmm3
+       pxor    %xmm3,%xmm2
+       ret
+.align 4,0x90
+L094key_192b:
+       movaps  %xmm0,%xmm3
+       shufps  $68,%xmm0,%xmm5
+       movups  %xmm5,(%edx)
+       shufps  $78,%xmm2,%xmm3
+       movups  %xmm3,16(%edx)
+       leal    32(%edx),%edx
+       jmp     L096key_192b_warm
+.align 4,0x90
+L08714rounds:
+       movups  16(%eax),%xmm2
+       movl    $13,%ecx
+       leal    16(%edx),%edx
+       movups  %xmm0,-32(%edx)
+       movups  %xmm2,-16(%edx)
+.byte  102,15,58,223,202,1
+       call    L097key_256a_cold
+.byte  102,15,58,223,200,1
+       call    L098key_256b
+.byte  102,15,58,223,202,2
+       call    L099key_256a
+.byte  102,15,58,223,200,2
+       call    L098key_256b
+.byte  102,15,58,223,202,4
+       call    L099key_256a
+.byte  102,15,58,223,200,4
+       call    L098key_256b
+.byte  102,15,58,223,202,8
+       call    L099key_256a
+.byte  102,15,58,223,200,8
+       call    L098key_256b
+.byte  102,15,58,223,202,16
+       call    L099key_256a
+.byte  102,15,58,223,200,16
+       call    L098key_256b
+.byte  102,15,58,223,202,32
+       call    L099key_256a
+.byte  102,15,58,223,200,32
+       call    L098key_256b
+.byte  102,15,58,223,202,64
+       call    L099key_256a
+       movups  %xmm0,(%edx)
+       movl    %ecx,16(%edx)
+       xorl    %eax,%eax
+       ret
+.align 4,0x90
+L099key_256a:
+       movups  %xmm2,(%edx)
+       leal    16(%edx),%edx
+L097key_256a_cold:
+       shufps  $16,%xmm0,%xmm4
+       xorps   %xmm4,%xmm0
+       shufps  $140,%xmm0,%xmm4
+       xorps   %xmm4,%xmm0
+       shufps  $255,%xmm1,%xmm1
+       xorps   %xmm1,%xmm0
+       ret
+.align 4,0x90
+L098key_256b:
+       movups  %xmm0,(%edx)
+       leal    16(%edx),%edx
+       shufps  $16,%xmm2,%xmm4
+       xorps   %xmm4,%xmm2
+       shufps  $140,%xmm2,%xmm4
+       xorps   %xmm4,%xmm2
+       shufps  $170,%xmm1,%xmm1
+       xorps   %xmm1,%xmm2
+       ret
+.align 2,0x90
+L086bad_pointer:
+       movl    $-1,%eax
+       ret
+.align 2,0x90
+L089bad_keybits:
+       movl    $-2,%eax
+       ret
+.globl _aesni_set_encrypt_key
+.align 4
+_aesni_set_encrypt_key:
+L_aesni_set_encrypt_key_begin:
+       movl    4(%esp),%eax
+       movl    8(%esp),%ecx
+       movl    12(%esp),%edx
+       call    __aesni_set_encrypt_key
+       ret
+.globl _aesni_set_decrypt_key
+.align 4
+_aesni_set_decrypt_key:
+L_aesni_set_decrypt_key_begin:
+       movl    4(%esp),%eax
+       movl    8(%esp),%ecx
+       movl    12(%esp),%edx
+       call    __aesni_set_encrypt_key
+       movl    12(%esp),%edx
+       shll    $4,%ecx
+       testl   %eax,%eax
+       jnz     L100dec_key_ret
+       leal    16(%edx,%ecx,1),%eax
+       movups  (%edx),%xmm0
+       movups  (%eax),%xmm1
+       movups  %xmm0,(%eax)
+       movups  %xmm1,(%edx)
+       leal    16(%edx),%edx
+       leal    -16(%eax),%eax
+L101dec_key_inverse:
+       movups  (%edx),%xmm0
+       movups  (%eax),%xmm1
+.byte  102,15,56,219,192
+.byte  102,15,56,219,201
+       leal    16(%edx),%edx
+       leal    -16(%eax),%eax
+       movups  %xmm0,16(%eax)
+       movups  %xmm1,-16(%edx)
+       cmpl    %edx,%eax
+       ja      L101dec_key_inverse
+       movups  (%edx),%xmm0
+.byte  102,15,56,219,192
+       movups  %xmm0,(%edx)
+       xorl    %eax,%eax
+L100dec_key_ret:
+       ret
+.byte  65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69
+.byte  83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83
+.byte  32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
+.byte  115,108,46,111,114,103,62,0
diff --git a/lib/accelerated/x86/asm-macosx/cpuid-x86-64-macosx.s b/lib/accelerated/x86/asm-macosx/cpuid-x86-64-macosx.s
new file mode 100644 (file)
index 0000000..b4a4e94
--- /dev/null
@@ -0,0 +1,54 @@
+#
+# Copyright (C) 2011 Free Software Foundation, Inc.
+#
+# Author: Nikos Mavrogiannopoulos
+#
+# This file is part of GnuTLS.
+#
+# The GnuTLS is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public License
+# as published by the Free Software Foundation; either version 3 of
+# the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+.text  
+.globl _gnutls_cpuid
+
+.p2align       4
+_gnutls_cpuid:
+       pushq   %rbp
+       movq    %rsp,%rbp
+       pushq   %rbx
+       movl    %edi,-12(%rbp)
+       movq    %rsi,-24(%rbp)
+       movq    %rdx,-32(%rbp)
+       movq    %rcx,-40(%rbp)
+       movq    %r8,-48(%rbp)
+       movl    -12(%rbp),%eax
+       movl    %eax,-60(%rbp)
+       movl    -60(%rbp),%eax
+       cpuid
+       movl    %edx,-56(%rbp)
+       movl    %ecx,%esi
+       movl    %eax,-52(%rbp)
+       movq    -24(%rbp),%rax
+       movl    -52(%rbp),%edx
+       movl    %edx,(%rax)
+       movq    -32(%rbp),%rax
+       movl    %ebx,(%rax)
+       movq    -40(%rbp),%rax
+       movl    %esi,(%rax)
+       movq    -48(%rbp),%rax
+       movl    -56(%rbp),%ecx
+       movl    %ecx,(%rax)
+       popq    %rbx
+       leave
+       .byte   0xf3,0xc3
+
diff --git a/lib/accelerated/x86/asm-macosx/cpuid-x86-macosx.s b/lib/accelerated/x86/asm-macosx/cpuid-x86-macosx.s
new file mode 100644 (file)
index 0000000..a69a5c7
--- /dev/null
@@ -0,0 +1,66 @@
+#
+# Copyright (C) 2011 Free Software Foundation, Inc.
+#
+# Author: Nikos Mavrogiannopoulos
+#
+# This file is part of GnuTLS.
+#
+# The GnuTLS is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public License
+# as published by the Free Software Foundation; either version 3 of
+# the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+.file  "devel/perlasm/cpuid-x86.s"
+.text
+.globl _gnutls_cpuid
+.align 4
+_gnutls_cpuid:
+L_gnutls_cpuid_begin:
+       pushl   %ebp
+       movl    %esp,%ebp
+       subl    $12,%esp
+       movl    %ebx,(%esp)
+       movl    8(%ebp),%eax
+       movl    %esi,4(%esp)
+       movl    %edi,8(%esp)
+       pushl   %ebx
+       .byte   0x0f,0xa2
+       movl    %ebx,%edi
+       popl    %ebx
+       movl    %edx,%esi
+       movl    12(%ebp),%edx
+       movl    %eax,(%edx)
+       movl    16(%ebp),%eax
+       movl    %edi,(%eax)
+       movl    20(%ebp),%eax
+       movl    %ecx,(%eax)
+       movl    24(%ebp),%eax
+       movl    %esi,(%eax)
+       movl    (%esp),%ebx
+       movl    4(%esp),%esi
+       movl    8(%esp),%edi
+       movl    %ebp,%esp
+       popl    %ebp
+       ret
+.globl _gnutls_have_cpuid
+.align 4
+_gnutls_have_cpuid:
+L_gnutls_have_cpuid_begin:
+       pushfl
+       popl    %eax
+       orl     $2097152,%eax
+       pushl   %eax
+       popfl
+       pushfl
+       popl    %eax
+       andl    $2097152,%eax
+       ret
+.byte  67,80,85,73,68,32,102,111,114,32,120,56,54,0
diff --git a/lib/accelerated/x86/asm-macosx/padlock-x86-64-macosx.s b/lib/accelerated/x86/asm-macosx/padlock-x86-64-macosx.s
new file mode 100644 (file)
index 0000000..a19e824
--- /dev/null
@@ -0,0 +1,515 @@
+# Copyright (c) 2011, Andy Polyakov by <appro@openssl.org>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 
+#     * Redistributions of source code must retain copyright notices,
+#      this list of conditions and the following disclaimer.
+#
+#     * Redistributions in binary form must reproduce the above
+#      copyright notice, this list of conditions and the following
+#      disclaimer in the documentation and/or other materials
+#      provided with the distribution.
+#
+#     * Neither the name of the Andy Polyakov nor the names of its
+#      copyright holder and contributors may be used to endorse or
+#      promote products derived from this software without specific
+#      prior written permission.
+#
+# ALTERNATIVELY, provided that this notice is retained in full, this
+# product may be distributed under the terms of the GNU General Public
+# License (GPL), in which case the provisions of the GPL apply INSTEAD OF
+# those given above.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+.text  
+.globl _padlock_capability
+
+.p2align       4
+_padlock_capability:
+       movq    %rbx,%r8
+       xorl    %eax,%eax
+       cpuid
+       xorl    %eax,%eax
+       cmpl    $1953391939,%ebx
+       jne     L$noluck
+       cmpl    $1215460705,%edx
+       jne     L$noluck
+       cmpl    $1936487777,%ecx
+       jne     L$noluck
+       movl    $3221225472,%eax
+       cpuid
+       movl    %eax,%edx
+       xorl    %eax,%eax
+       cmpl    $3221225473,%edx
+       jb      L$noluck
+       movl    $3221225473,%eax
+       cpuid
+       movl    %edx,%eax
+       andl    $4294967279,%eax
+       orl     $16,%eax
+L$noluck:
+       movq    %r8,%rbx
+       .byte   0xf3,0xc3
+
+
+.globl _padlock_key_bswap
+
+.p2align       4
+_padlock_key_bswap:
+       movl    240(%rdi),%edx
+L$bswap_loop:
+       movl    (%rdi),%eax
+       bswapl  %eax
+       movl    %eax,(%rdi)
+       leaq    4(%rdi),%rdi
+       subl    $1,%edx
+       jnz     L$bswap_loop
+       .byte   0xf3,0xc3
+
+
+.globl _padlock_verify_context
+
+.p2align       4
+_padlock_verify_context:
+       movq    %rdi,%rdx
+       pushf
+       leaq    L$padlock_saved_context(%rip),%rax
+       call    _padlock_verify_ctx
+       leaq    8(%rsp),%rsp
+       .byte   0xf3,0xc3
+
+
+
+.p2align       4
+_padlock_verify_ctx:
+       movq    8(%rsp),%r8
+       btq     $30,%r8
+       jnc     L$verified
+       cmpq    (%rax),%rdx
+       je      L$verified
+       pushf
+       popf
+L$verified:
+       movq    %rdx,(%rax)
+       .byte   0xf3,0xc3
+
+
+.globl _padlock_reload_key
+
+.p2align       4
+_padlock_reload_key:
+       pushf
+       popf
+       .byte   0xf3,0xc3
+
+
+.globl _padlock_aes_block
+
+.p2align       4
+_padlock_aes_block:
+       movq    %rbx,%r8
+       movq    $1,%rcx
+       leaq    32(%rdx),%rbx
+       leaq    16(%rdx),%rdx
+.byte  0xf3,0x0f,0xa7,0xc8     
+       movq    %r8,%rbx
+       .byte   0xf3,0xc3
+
+
+.globl _padlock_xstore
+
+.p2align       4
+_padlock_xstore:
+       movl    %esi,%edx
+.byte  0x0f,0xa7,0xc0          
+       .byte   0xf3,0xc3
+
+
+.globl _padlock_sha1_oneshot
+
+.p2align       4
+_padlock_sha1_oneshot:
+       movq    %rdx,%rcx
+       movq    %rdi,%rdx
+       movups  (%rdi),%xmm0
+       subq    $128+8,%rsp
+       movl    16(%rdi),%eax
+       movaps  %xmm0,(%rsp)
+       movq    %rsp,%rdi
+       movl    %eax,16(%rsp)
+       xorq    %rax,%rax
+.byte  0xf3,0x0f,0xa6,0xc8     
+       movaps  (%rsp),%xmm0
+       movl    16(%rsp),%eax
+       addq    $128+8,%rsp
+       movups  %xmm0,(%rdx)
+       movl    %eax,16(%rdx)
+       .byte   0xf3,0xc3
+
+
+.globl _padlock_sha1_blocks
+
+.p2align       4
+_padlock_sha1_blocks:
+       movq    %rdx,%rcx
+       movq    %rdi,%rdx
+       movups  (%rdi),%xmm0
+       subq    $128+8,%rsp
+       movl    16(%rdi),%eax
+       movaps  %xmm0,(%rsp)
+       movq    %rsp,%rdi
+       movl    %eax,16(%rsp)
+       movq    $-1,%rax
+.byte  0xf3,0x0f,0xa6,0xc8     
+       movaps  (%rsp),%xmm0
+       movl    16(%rsp),%eax
+       addq    $128+8,%rsp
+       movups  %xmm0,(%rdx)
+       movl    %eax,16(%rdx)
+       .byte   0xf3,0xc3
+
+
+.globl _padlock_sha256_oneshot
+
+.p2align       4
+_padlock_sha256_oneshot:
+       movq    %rdx,%rcx
+       movq    %rdi,%rdx
+       movups  (%rdi),%xmm0
+       subq    $128+8,%rsp
+       movups  16(%rdi),%xmm1
+       movaps  %xmm0,(%rsp)
+       movq    %rsp,%rdi
+       movaps  %xmm1,16(%rsp)
+       xorq    %rax,%rax
+.byte  0xf3,0x0f,0xa6,0xd0     
+       movaps  (%rsp),%xmm0
+       movaps  16(%rsp),%xmm1
+       addq    $128+8,%rsp
+       movups  %xmm0,(%rdx)
+       movups  %xmm1,16(%rdx)
+       .byte   0xf3,0xc3
+
+
+.globl _padlock_sha256_blocks
+
+.p2align       4
+_padlock_sha256_blocks:
+       movq    %rdx,%rcx
+       movq    %rdi,%rdx
+       movups  (%rdi),%xmm0
+       subq    $128+8,%rsp
+       movups  16(%rdi),%xmm1
+       movaps  %xmm0,(%rsp)
+       movq    %rsp,%rdi
+       movaps  %xmm1,16(%rsp)
+       movq    $-1,%rax
+.byte  0xf3,0x0f,0xa6,0xd0     
+       movaps  (%rsp),%xmm0
+       movaps  16(%rsp),%xmm1
+       addq    $128+8,%rsp
+       movups  %xmm0,(%rdx)
+       movups  %xmm1,16(%rdx)
+       .byte   0xf3,0xc3
+
+
+.globl _padlock_sha512_blocks
+
+.p2align       4
+_padlock_sha512_blocks:
+       movq    %rdx,%rcx
+       movq    %rdi,%rdx
+       movups  (%rdi),%xmm0
+       subq    $128+8,%rsp
+       movups  16(%rdi),%xmm1
+       movups  32(%rdi),%xmm2
+       movups  48(%rdi),%xmm3
+       movaps  %xmm0,(%rsp)
+       movq    %rsp,%rdi
+       movaps  %xmm1,16(%rsp)
+       movaps  %xmm2,32(%rsp)
+       movaps  %xmm3,48(%rsp)
+.byte  0xf3,0x0f,0xa6,0xe0     
+       movaps  (%rsp),%xmm0
+       movaps  16(%rsp),%xmm1
+       movaps  32(%rsp),%xmm2
+       movaps  48(%rsp),%xmm3
+       addq    $128+8,%rsp
+       movups  %xmm0,(%rdx)
+       movups  %xmm1,16(%rdx)
+       movups  %xmm2,32(%rdx)
+       movups  %xmm3,48(%rdx)
+       .byte   0xf3,0xc3
+
+.globl _padlock_ecb_encrypt
+
+.p2align       4
+_padlock_ecb_encrypt:
+       pushq   %rbp
+       pushq   %rbx
+
+       xorl    %eax,%eax
+       testq   $15,%rdx
+       jnz     L$ecb_abort
+       testq   $15,%rcx
+       jnz     L$ecb_abort
+       leaq    L$padlock_saved_context(%rip),%rax
+       pushf
+       cld
+       call    _padlock_verify_ctx
+       leaq    16(%rdx),%rdx
+       xorl    %eax,%eax
+       xorl    %ebx,%ebx
+       cmpq    $128,%rcx
+       jbe     L$ecb_short
+       testl   $32,(%rdx)
+       jnz     L$ecb_aligned
+       testq   $15,%rdi
+       setz    %al
+       testq   $15,%rsi
+       setz    %bl
+       testl   %ebx,%eax
+       jnz     L$ecb_aligned
+       negq    %rax
+       movq    $512,%rbx
+       notq    %rax
+       leaq    (%rsp),%rbp
+       cmpq    %rbx,%rcx
+       cmovcq  %rcx,%rbx
+       andq    %rbx,%rax
+       movq    %rcx,%rbx
+       negq    %rax
+       andq    $512-1,%rbx
+       leaq    (%rax,%rbp,1),%rsp
+       jmp     L$ecb_loop
+.p2align       4
+L$ecb_loop:
+       cmpq    %rcx,%rbx
+       cmovaq  %rcx,%rbx
+       movq    %rdi,%r8
+       movq    %rsi,%r9
+       movq    %rcx,%r10
+       movq    %rbx,%rcx
+       movq    %rbx,%r11
+       testq   $15,%rdi
+       cmovnzq %rsp,%rdi
+       testq   $15,%rsi
+       jz      L$ecb_inp_aligned
+       shrq    $3,%rcx
+.byte  0xf3,0x48,0xa5          
+       subq    %rbx,%rdi
+       movq    %rbx,%rcx
+       movq    %rdi,%rsi
+L$ecb_inp_aligned:
+       leaq    -16(%rdx),%rax
+       leaq    16(%rdx),%rbx
+       shrq    $4,%rcx
+.byte  0xf3,0x0f,0xa7,200      
+       movq    %r8,%rdi
+       movq    %r11,%rbx
+       testq   $15,%rdi
+       jz      L$ecb_out_aligned
+       movq    %rbx,%rcx
+       shrq    $3,%rcx
+       leaq    (%rsp),%rsi
+.byte  0xf3,0x48,0xa5          
+       subq    %rbx,%rdi
+L$ecb_out_aligned:
+       movq    %r9,%rsi
+       movq    %r10,%rcx
+       addq    %rbx,%rdi
+       addq    %rbx,%rsi
+       subq    %rbx,%rcx
+       movq    $512,%rbx
+       jnz     L$ecb_loop
+
+       cmpq    %rsp,%rbp
+       je      L$ecb_done
+
+       pxor    %xmm0,%xmm0
+       leaq    (%rsp),%rax
+L$ecb_bzero:
+       movaps  %xmm0,(%rax)
+       leaq    16(%rax),%rax
+       cmpq    %rax,%rbp
+       ja      L$ecb_bzero
+
+L$ecb_done:
+       leaq    (%rbp),%rsp
+       jmp     L$ecb_exit
+.p2align       4
+L$ecb_short:
+       movq    %rsp,%rbp
+       subq    %rcx,%rsp
+       xorq    %rbx,%rbx
+L$ecb_short_copy:
+       movups  (%rsi,%rbx,1),%xmm0
+       leaq    16(%rbx),%rbx
+       cmpq    %rbx,%rcx
+       movaps  %xmm0,-16(%rsp,%rbx,1)
+       ja      L$ecb_short_copy
+       movq    %rsp,%rsi
+       movq    %rcx,%rbx
+       jmp     L$ecb_loop
+.p2align       4
+L$ecb_aligned:
+       leaq    -16(%rdx),%rax
+       leaq    16(%rdx),%rbx
+       shrq    $4,%rcx
+.byte  0xf3,0x0f,0xa7,200      
+L$ecb_exit:
+       movl    $1,%eax
+       leaq    8(%rsp),%rsp
+L$ecb_abort:
+       popq    %rbx
+       popq    %rbp
+       .byte   0xf3,0xc3
+
+.globl _padlock_cbc_encrypt
+
+.p2align       4
+_padlock_cbc_encrypt:
+       pushq   %rbp
+       pushq   %rbx
+
+       xorl    %eax,%eax
+       testq   $15,%rdx
+       jnz     L$cbc_abort
+       testq   $15,%rcx
+       jnz     L$cbc_abort
+       leaq    L$padlock_saved_context(%rip),%rax
+       pushf
+       cld
+       call    _padlock_verify_ctx
+       leaq    16(%rdx),%rdx
+       xorl    %eax,%eax
+       xorl    %ebx,%ebx
+       cmpq    $64,%rcx
+       jbe     L$cbc_short
+       testl   $32,(%rdx)
+       jnz     L$cbc_aligned
+       testq   $15,%rdi
+       setz    %al
+       testq   $15,%rsi
+       setz    %bl
+       testl   %ebx,%eax
+       jnz     L$cbc_aligned
+       negq    %rax
+       movq    $512,%rbx
+       notq    %rax
+       leaq    (%rsp),%rbp
+       cmpq    %rbx,%rcx
+       cmovcq  %rcx,%rbx
+       andq    %rbx,%rax
+       movq    %rcx,%rbx
+       negq    %rax
+       andq    $512-1,%rbx
+       leaq    (%rax,%rbp,1),%rsp
+       jmp     L$cbc_loop
+.p2align       4
+L$cbc_loop:
+       cmpq    %rcx,%rbx
+       cmovaq  %rcx,%rbx
+       movq    %rdi,%r8
+       movq    %rsi,%r9
+       movq    %rcx,%r10
+       movq    %rbx,%rcx
+       movq    %rbx,%r11
+       testq   $15,%rdi
+       cmovnzq %rsp,%rdi
+       testq   $15,%rsi
+       jz      L$cbc_inp_aligned
+       shrq    $3,%rcx
+.byte  0xf3,0x48,0xa5          
+       subq    %rbx,%rdi
+       movq    %rbx,%rcx
+       movq    %rdi,%rsi
+L$cbc_inp_aligned:
+       leaq    -16(%rdx),%rax
+       leaq    16(%rdx),%rbx
+       shrq    $4,%rcx
+.byte  0xf3,0x0f,0xa7,208      
+       movdqa  (%rax),%xmm0
+       movdqa  %xmm0,-16(%rdx)
+       movq    %r8,%rdi
+       movq    %r11,%rbx
+       testq   $15,%rdi
+       jz      L$cbc_out_aligned
+       movq    %rbx,%rcx
+       shrq    $3,%rcx
+       leaq    (%rsp),%rsi
+.byte  0xf3,0x48,0xa5          
+       subq    %rbx,%rdi
+L$cbc_out_aligned:
+       movq    %r9,%rsi
+       movq    %r10,%rcx
+       addq    %rbx,%rdi
+       addq    %rbx,%rsi
+       subq    %rbx,%rcx
+       movq    $512,%rbx
+       jnz     L$cbc_loop
+
+       cmpq    %rsp,%rbp
+       je      L$cbc_done
+
+       pxor    %xmm0,%xmm0
+       leaq    (%rsp),%rax
+L$cbc_bzero:
+       movaps  %xmm0,(%rax)
+       leaq    16(%rax),%rax
+       cmpq    %rax,%rbp
+       ja      L$cbc_bzero
+
+L$cbc_done:
+       leaq    (%rbp),%rsp
+       jmp     L$cbc_exit
+.p2align       4
+L$cbc_short:
+       movq    %rsp,%rbp
+       subq    %rcx,%rsp
+       xorq    %rbx,%rbx
+L$cbc_short_copy:
+       movups  (%rsi,%rbx,1),%xmm0
+       leaq    16(%rbx),%rbx
+       cmpq    %rbx,%rcx
+       movaps  %xmm0,-16(%rsp,%rbx,1)
+       ja      L$cbc_short_copy
+       movq    %rsp,%rsi
+       movq    %rcx,%rbx
+       jmp     L$cbc_loop
+.p2align       4
+L$cbc_aligned:
+       leaq    -16(%rdx),%rax
+       leaq    16(%rdx),%rbx
+       shrq    $4,%rcx
+.byte  0xf3,0x0f,0xa7,208      
+       movdqa  (%rax),%xmm0
+       movdqa  %xmm0,-16(%rdx)
+L$cbc_exit:
+       movl    $1,%eax
+       leaq    8(%rsp),%rsp
+L$cbc_abort:
+       popq    %rbx
+       popq    %rbp
+       .byte   0xf3,0xc3
+
+.byte  86,73,65,32,80,97,100,108,111,99,107,32,120,56,54,95,54,52,32,109,111,100,117,108,101,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
+.p2align       4
+.data  
+.p2align       3
+L$padlock_saved_context:
+.quad  0
diff --git a/lib/accelerated/x86/asm-macosx/padlock-x86-macosx.s b/lib/accelerated/x86/asm-macosx/padlock-x86-macosx.s
new file mode 100644 (file)
index 0000000..b3822f4
--- /dev/null
@@ -0,0 +1,591 @@
+# Copyright (c) 2011, Andy Polyakov by <appro@openssl.org>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 
+#     * Redistributions of source code must retain copyright notices,
+#      this list of conditions and the following disclaimer.
+#
+#     * Redistributions in binary form must reproduce the above
+#      copyright notice, this list of conditions and the following
+#      disclaimer in the documentation and/or other materials
+#      provided with the distribution.
+#
+#     * Neither the name of the Andy Polyakov nor the names of its
+#      copyright holder and contributors may be used to endorse or
+#      promote products derived from this software without specific
+#      prior written permission.
+#
+# ALTERNATIVELY, provided that this notice is retained in full, this
+# product may be distributed under the terms of the GNU General Public
+# License (GPL), in which case the provisions of the GPL apply INSTEAD OF
+# those given above.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+.file  "devel/perlasm/e_padlock-x86.s"
+.text
+.globl _padlock_capability
+.align 4
+_padlock_capability:
+L_padlock_capability_begin:
+       pushl   %ebx
+       pushfl
+       popl    %eax
+       movl    %eax,%ecx
+       xorl    $2097152,%eax
+       pushl   %eax
+       popfl
+       pushfl
+       popl    %eax
+       xorl    %eax,%ecx
+       xorl    %eax,%eax
+       btl     $21,%ecx
+       jnc     L000noluck
+       .byte   0x0f,0xa2
+       xorl    %eax,%eax
+       cmpl    $0x746e6543,%ebx
+       jne     L000noluck
+       cmpl    $0x48727561,%edx
+       jne     L000noluck
+       cmpl    $0x736c7561,%ecx
+       jne     L000noluck
+       movl    $3221225472,%eax
+       .byte   0x0f,0xa2
+       movl    %eax,%edx
+       xorl    %eax,%eax
+       cmpl    $3221225473,%edx
+       jb      L000noluck
+       movl    $1,%eax
+       .byte   0x0f,0xa2
+       orl     $15,%eax
+       xorl    %ebx,%ebx
+       andl    $4095,%eax
+       cmpl    $1791,%eax
+       sete    %bl
+       movl    $3221225473,%eax
+       pushl   %ebx
+       .byte   0x0f,0xa2
+       popl    %ebx
+       movl    %edx,%eax
+       shll    $4,%ebx
+       andl    $4294967279,%eax
+       orl     %ebx,%eax
+L000noluck:
+       popl    %ebx
+       ret
+.globl _padlock_key_bswap
+.align 4
+_padlock_key_bswap:
+L_padlock_key_bswap_begin:
+       movl    4(%esp),%edx
+       movl    240(%edx),%ecx
+L001bswap_loop:
+       movl    (%edx),%eax
+       bswap   %eax
+       movl    %eax,(%edx)
+       leal    4(%edx),%edx
+       subl    $1,%ecx
+       jnz     L001bswap_loop
+       ret
+.globl _padlock_verify_context
+.align 4
+_padlock_verify_context:
+L_padlock_verify_context_begin:
+       movl    4(%esp),%edx
+       leal    Lpadlock_saved_context-L002verify_pic_point,%eax
+       pushfl
+       call    __padlock_verify_ctx
+L002verify_pic_point:
+       leal    4(%esp),%esp
+       ret
+.align 4
+__padlock_verify_ctx:
+       addl    (%esp),%eax
+       btl     $30,4(%esp)
+       jnc     L003verified
+       cmpl    (%eax),%edx
+       je      L003verified
+       pushfl
+       popfl
+L003verified:
+       movl    %edx,(%eax)
+       ret
+.globl _padlock_reload_key
+.align 4
+_padlock_reload_key:
+L_padlock_reload_key_begin:
+       pushfl
+       popfl
+       ret
+.globl _padlock_aes_block
+.align 4
+_padlock_aes_block:
+L_padlock_aes_block_begin:
+       pushl   %edi
+       pushl   %esi
+       pushl   %ebx
+       movl    16(%esp),%edi
+       movl    20(%esp),%esi
+       movl    24(%esp),%edx
+       movl    $1,%ecx
+       leal    32(%edx),%ebx
+       leal    16(%edx),%edx
+.byte  243,15,167,200
+       popl    %ebx
+       popl    %esi
+       popl    %edi
+       ret
+.globl _padlock_ecb_encrypt
+.align 4
+_padlock_ecb_encrypt:
+L_padlock_ecb_encrypt_begin:
+       pushl   %ebp
+       pushl   %ebx
+       pushl   %esi
+       pushl   %edi
+       movl    20(%esp),%edi
+       movl    24(%esp),%esi
+       movl    28(%esp),%edx
+       movl    32(%esp),%ecx
+       testl   $15,%edx
+       jnz     L004ecb_abort
+       testl   $15,%ecx
+       jnz     L004ecb_abort
+       leal    Lpadlock_saved_context-L005ecb_pic_point,%eax
+       pushfl
+       cld
+       call    __padlock_verify_ctx
+L005ecb_pic_point:
+       leal    16(%edx),%edx
+       xorl    %eax,%eax
+       xorl    %ebx,%ebx
+       cmpl    $128,%ecx
+       jbe     L006ecb_short
+       testl   $32,(%edx)
+       jnz     L007ecb_aligned
+       testl   $15,%edi
+       setz    %al
+       testl   $15,%esi
+       setz    %bl
+       testl   %ebx,%eax
+       jnz     L007ecb_aligned
+       negl    %eax
+       movl    $512,%ebx
+       notl    %eax
+       leal    -24(%esp),%ebp
+       cmpl    %ebx,%ecx
+       cmovcl  %ecx,%ebx
+       andl    %ebx,%eax
+       movl    %ecx,%ebx
+       negl    %eax
+       andl    $511,%ebx
+       leal    (%eax,%ebp,1),%esp
+       andl    $-16,%esp
+       jmp     L008ecb_loop
+.align 4,0x90
+L008ecb_loop:
+       movl    %edi,(%ebp)
+       movl    %esi,4(%ebp)
+       movl    %ecx,8(%ebp)
+       movl    %ebx,%ecx
+       movl    %ebx,12(%ebp)
+       testl   $15,%edi
+       cmovnzl %esp,%edi
+       testl   $15,%esi
+       jz      L009ecb_inp_aligned
+       shrl    $2,%ecx
+.byte  243,165
+       subl    %ebx,%edi
+       movl    %ebx,%ecx
+       movl    %edi,%esi
+L009ecb_inp_aligned:
+       leal    -16(%edx),%eax
+       leal    16(%edx),%ebx
+       shrl    $4,%ecx
+.byte  243,15,167,200
+       movl    (%ebp),%edi
+       movl    12(%ebp),%ebx
+       testl   $15,%edi
+       jz      L010ecb_out_aligned
+       movl    %ebx,%ecx
+       shrl    $2,%ecx
+       leal    (%esp),%esi
+.byte  243,165
+       subl    %ebx,%edi
+L010ecb_out_aligned:
+       movl    4(%ebp),%esi
+       movl    8(%ebp),%ecx
+       addl    %ebx,%edi
+       addl    %ebx,%esi
+       subl    %ebx,%ecx
+       movl    $512,%ebx
+       jnz     L008ecb_loop
+       cmpl    %ebp,%esp
+       je      L011ecb_done
+       pxor    %xmm0,%xmm0
+       leal    (%esp),%eax
+L012ecb_bzero:
+       movaps  %xmm0,(%eax)
+       leal    16(%eax),%eax
+       cmpl    %eax,%ebp
+       ja      L012ecb_bzero
+L011ecb_done:
+       leal    24(%ebp),%esp
+       jmp     L013ecb_exit
+.align 4,0x90
+L006ecb_short:
+       xorl    %eax,%eax
+       leal    -24(%esp),%ebp
+       subl    %ecx,%eax
+       leal    (%eax,%ebp,1),%esp
+       andl    $-16,%esp
+       xorl    %ebx,%ebx
+L014ecb_short_copy:
+       movups  (%esi,%ebx,1),%xmm0
+       leal    16(%ebx),%ebx
+       cmpl    %ebx,%ecx
+       movaps  %xmm0,-16(%esp,%ebx,1)
+       ja      L014ecb_short_copy
+       movl    %esp,%esi
+       movl    %ecx,%ebx
+       jmp     L008ecb_loop
+.align 4,0x90
+L007ecb_aligned:
+       leal    -16(%edx),%eax
+       leal    16(%edx),%ebx
+       shrl    $4,%ecx
+.byte  243,15,167,200
+L013ecb_exit:
+       movl    $1,%eax
+       leal    4(%esp),%esp
+L004ecb_abort:
+       popl    %edi
+       popl    %esi
+       popl    %ebx
+       popl    %ebp
+       ret
+.globl _padlock_cbc_encrypt
+.align 4
+_padlock_cbc_encrypt:
+L_padlock_cbc_encrypt_begin:
+       pushl   %ebp
+       pushl   %ebx
+       pushl   %esi
+       pushl   %edi
+       movl    20(%esp),%edi
+       movl    24(%esp),%esi
+       movl    28(%esp),%edx
+       movl    32(%esp),%ecx
+       testl   $15,%edx
+       jnz     L015cbc_abort
+       testl   $15,%ecx
+       jnz     L015cbc_abort
+       leal    Lpadlock_saved_context-L016cbc_pic_point,%eax
+       pushfl
+       cld
+       call    __padlock_verify_ctx
+L016cbc_pic_point:
+       leal    16(%edx),%edx
+       xorl    %eax,%eax
+       xorl    %ebx,%ebx
+       cmpl    $64,%ecx
+       jbe     L017cbc_short
+       testl   $32,(%edx)
+       jnz     L018cbc_aligned
+       testl   $15,%edi
+       setz    %al
+       testl   $15,%esi
+       setz    %bl
+       testl   %ebx,%eax
+       jnz     L018cbc_aligned
+       negl    %eax
+       movl    $512,%ebx
+       notl    %eax
+       leal    -24(%esp),%ebp
+       cmpl    %ebx,%ecx
+       cmovcl  %ecx,%ebx
+       andl    %ebx,%eax
+       movl    %ecx,%ebx
+       negl    %eax
+       andl    $511,%ebx
+       leal    (%eax,%ebp,1),%esp
+       andl    $-16,%esp
+       jmp     L019cbc_loop
+.align 4,0x90
+L019cbc_loop:
+       movl    %edi,(%ebp)
+       movl    %esi,4(%ebp)
+       movl    %ecx,8(%ebp)
+       movl    %ebx,%ecx
+       movl    %ebx,12(%ebp)
+       testl   $15,%edi
+       cmovnzl %esp,%edi
+       testl   $15,%esi
+       jz      L020cbc_inp_aligned
+       shrl    $2,%ecx
+.byte  243,165
+       subl    %ebx,%edi
+       movl    %ebx,%ecx
+       movl    %edi,%esi
+L020cbc_inp_aligned:
+       leal    -16(%edx),%eax
+       leal    16(%edx),%ebx
+       shrl    $4,%ecx
+.byte  243,15,167,208
+       movaps  (%eax),%xmm0
+       movaps  %xmm0,-16(%edx)
+       movl    (%ebp),%edi
+       movl    12(%ebp),%ebx
+       testl   $15,%edi
+       jz      L021cbc_out_aligned
+       movl    %ebx,%ecx
+       shrl    $2,%ecx
+       leal    (%esp),%esi
+.byte  243,165
+       subl    %ebx,%edi
+L021cbc_out_aligned:
+       movl    4(%ebp),%esi
+       movl    8(%ebp),%ecx
+       addl    %ebx,%edi
+       addl    %ebx,%esi
+       subl    %ebx,%ecx
+       movl    $512,%ebx
+       jnz     L019cbc_loop
+       cmpl    %ebp,%esp
+       je      L022cbc_done
+       pxor    %xmm0,%xmm0
+       leal    (%esp),%eax
+L023cbc_bzero:
+       movaps  %xmm0,(%eax)
+       leal    16(%eax),%eax
+       cmpl    %eax,%ebp
+       ja      L023cbc_bzero
+L022cbc_done:
+       leal    24(%ebp),%esp
+       jmp     L024cbc_exit
+.align 4,0x90
+L017cbc_short:
+       xorl    %eax,%eax
+       leal    -24(%esp),%ebp
+       subl    %ecx,%eax
+       leal    (%eax,%ebp,1),%esp
+       andl    $-16,%esp
+       xorl    %ebx,%ebx
+L025cbc_short_copy:
+       movups  (%esi,%ebx,1),%xmm0
+       leal    16(%ebx),%ebx
+       cmpl    %ebx,%ecx
+       movaps  %xmm0,-16(%esp,%ebx,1)
+       ja      L025cbc_short_copy
+       movl    %esp,%esi
+       movl    %ecx,%ebx
+       jmp     L019cbc_loop
+.align 4,0x90
+L018cbc_aligned:
+       leal    -16(%edx),%eax
+       leal    16(%edx),%ebx
+       shrl    $4,%ecx
+.byte  243,15,167,208
+       movaps  (%eax),%xmm0
+       movaps  %xmm0,-16(%edx)
+L024cbc_exit:
+       movl    $1,%eax
+       leal    4(%esp),%esp
+L015cbc_abort:
+       popl    %edi
+       popl    %esi
+       popl    %ebx
+       popl    %ebp
+       ret
+.globl _padlock_xstore
+.align 4
+_padlock_xstore:
+L_padlock_xstore_begin:
+       pushl   %edi
+       movl    8(%esp),%edi
+       movl    12(%esp),%edx
+.byte  15,167,192
+       popl    %edi
+       ret
+.align 4
+__win32_segv_handler:
+       movl    $1,%eax
+       movl    4(%esp),%edx
+       movl    12(%esp),%ecx
+       cmpl    $3221225477,(%edx)
+       jne     L026ret
+       addl    $4,184(%ecx)
+       movl    $0,%eax
+L026ret:
+       ret
+.globl _padlock_sha1_oneshot
+.align 4
+_padlock_sha1_oneshot:
+L_padlock_sha1_oneshot_begin:
+       pushl   %edi
+       pushl   %esi
+       xorl    %eax,%eax
+       movl    12(%esp),%edi
+       movl    16(%esp),%esi
+       movl    20(%esp),%ecx
+       movl    %esp,%edx
+       addl    $-128,%esp
+       movups  (%edi),%xmm0
+       andl    $-16,%esp
+       movl    16(%edi),%eax
+       movaps  %xmm0,(%esp)
+       movl    %esp,%edi
+       movl    %eax,16(%esp)
+       xorl    %eax,%eax
+.byte  243,15,166,200
+       movaps  (%esp),%xmm0
+       movl    16(%esp),%eax
+       movl    %edx,%esp
+       movl    12(%esp),%edi
+       movups  %xmm0,(%edi)
+       movl    %eax,16(%edi)
+       popl    %esi
+       popl    %edi
+       ret
+.globl _padlock_sha1_blocks
+.align 4
+_padlock_sha1_blocks:
+L_padlock_sha1_blocks_begin:
+       pushl   %edi
+       pushl   %esi
+       movl    12(%esp),%edi
+       movl    16(%esp),%esi
+       movl    %esp,%edx
+       movl    20(%esp),%ecx
+       addl    $-128,%esp
+       movups  (%edi),%xmm0
+       andl    $-16,%esp
+       movl    16(%edi),%eax
+       movaps  %xmm0,(%esp)
+       movl    %esp,%edi
+       movl    %eax,16(%esp)
+       movl    $-1,%eax
+.byte  243,15,166,200
+       movaps  (%esp),%xmm0
+       movl    16(%esp),%eax
+       movl    %edx,%esp
+       movl    12(%esp),%edi
+       movups  %xmm0,(%edi)
+       movl    %eax,16(%edi)
+       popl    %esi
+       popl    %edi
+       ret
+.globl _padlock_sha256_oneshot
+.align 4
+_padlock_sha256_oneshot:
+L_padlock_sha256_oneshot_begin:
+       pushl   %edi
+       pushl   %esi
+       xorl    %eax,%eax
+       movl    12(%esp),%edi
+       movl    16(%esp),%esi
+       movl    20(%esp),%ecx
+       movl    %esp,%edx
+       addl    $-128,%esp
+       movups  (%edi),%xmm0
+       andl    $-16,%esp
+       movups  16(%edi),%xmm1
+       movaps  %xmm0,(%esp)
+       movl    %esp,%edi
+       movaps  %xmm1,16(%esp)
+       xorl    %eax,%eax
+.byte  243,15,166,208
+       movaps  (%esp),%xmm0
+       movaps  16(%esp),%xmm1
+       movl    %edx,%esp
+       movl    12(%esp),%edi
+       movups  %xmm0,(%edi)
+       movups  %xmm1,16(%edi)
+       popl    %esi
+       popl    %edi
+       ret
+.globl _padlock_sha256_blocks
+.align 4
+_padlock_sha256_blocks:
+L_padlock_sha256_blocks_begin:
+       pushl   %edi
+       pushl   %esi
+       movl    12(%esp),%edi
+       movl    16(%esp),%esi
+       movl    20(%esp),%ecx
+       movl    %esp,%edx
+       addl    $-128,%esp
+       movups  (%edi),%xmm0
+       andl    $-16,%esp
+       movups  16(%edi),%xmm1
+       movaps  %xmm0,(%esp)
+       movl    %esp,%edi
+       movaps  %xmm1,16(%esp)
+       movl    $-1,%eax
+.byte  243,15,166,208
+       movaps  (%esp),%xmm0
+       movaps  16(%esp),%xmm1
+       movl    %edx,%esp
+       movl    12(%esp),%edi
+       movups  %xmm0,(%edi)
+       movups  %xmm1,16(%edi)
+       popl    %esi
+       popl    %edi
+       ret
+.globl _padlock_sha512_blocks
+.align 4
+_padlock_sha512_blocks:
+L_padlock_sha512_blocks_begin:
+       pushl   %edi
+       pushl   %esi
+       movl    12(%esp),%edi
+       movl    16(%esp),%esi
+       movl    20(%esp),%ecx
+       movl    %esp,%edx
+       addl    $-128,%esp
+       movups  (%edi),%xmm0
+       andl    $-16,%esp
+       movups  16(%edi),%xmm1
+       movups  32(%edi),%xmm2
+       movups  48(%edi),%xmm3
+       movaps  %xmm0,(%esp)
+       movl    %esp,%edi
+       movaps  %xmm1,16(%esp)
+       movaps  %xmm2,32(%esp)
+       movaps  %xmm3,48(%esp)
+.byte  243,15,166,224
+       movaps  (%esp),%xmm0
+       movaps  16(%esp),%xmm1
+       movaps  32(%esp),%xmm2
+       movaps  48(%esp),%xmm3
+       movl    %edx,%esp
+       movl    12(%esp),%edi
+       movups  %xmm0,(%edi)
+       movups  %xmm1,16(%edi)
+       movups  %xmm2,32(%edi)
+       movups  %xmm3,48(%edi)
+       popl    %esi
+       popl    %edi
+       ret
+.byte  86,73,65,32,80,97,100,108,111,99,107,32,120,56,54,32
+.byte  109,111,100,117,108,101,44,32,67,82,89,80,84,79,71,65
+.byte  77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101
+.byte  110,115,115,108,46,111,114,103,62,0
+.align 4,0x90
+.data
+.align 2,0x90
+Lpadlock_saved_context:
+.long  0