]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
Added COFF versions of assembly files.
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Tue, 25 Oct 2011 17:39:09 +0000 (19:39 +0200)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Tue, 25 Oct 2011 17:39:09 +0000 (19:39 +0200)
configure.ac
lib/accelerated/x86/Makefile.am
lib/accelerated/x86/coff/appro-aes-x86-coff.s [new file with mode: 0644]
lib/accelerated/x86/coff/padlock-x86-coff.s [new file with mode: 0644]

index d558994285538236d4e7c5a9611e2aaf7a7de1fd..c881664b75965385e4474c2103467b066822d9ae 100644 (file)
@@ -68,6 +68,16 @@ fi
 AM_CONDITIONAL(ENABLE_CXX, test "$use_cxx" != "no")
 AM_CONDITIONAL(WANT_TEST_SUITE, [test -f tests/suite/mini-eagain2.c])
 
+dnl Detect windows build
+case "$host" in
+  *-*-mingw32*)
+    have_win32=yes
+  ;;
+  *)
+  ;;
+esac
+
+AM_CONDITIONAL(WIN32, test "$have_win32" = yes)
 
 dnl Hardware Acceleration
 AC_ARG_ENABLE(hardware-acceleration,
@@ -75,6 +85,7 @@ AC_ARG_ENABLE(hardware-acceleration,
     use_accel=$enableval, use_accel=yes)
 hw_accel=none
 
+
 if test "$use_accel" != "no"; then
 case $host_cpu in
   i?86 | x86_64 | amd64)
index 3530998ad0965c1f9ca848e83d594281f7e00748..689f97736255167acfd78614a9fdcd97c46f17be 100644 (file)
@@ -39,9 +39,17 @@ 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 += asm/appro-aes-x86-64.s asm/appro-aes-gcm-x86-64.s aes-gcm-x86.c asm/padlock-x86-64.s asm/cpuid-x86-64.s
+
 else
+
 AM_CFLAGS += -DASM_X86_32 -DASM_X86
+if WIN32
+libx86_la_SOURCES += coff/appro-aes-x86-coff.s coff/padlock-x86-coff.s asm/cpuid-x86.s
+else
 libx86_la_SOURCES += asm/appro-aes-x86.s asm/padlock-x86.s asm/cpuid-x86.s
 endif
+
+endif
diff --git a/lib/accelerated/x86/coff/appro-aes-x86-coff.s b/lib/accelerated/x86/coff/appro-aes-x86-coff.s
new file mode 100644 (file)
index 0000000..2f9a6bc
--- /dev/null
@@ -0,0 +1,2162 @@
+# 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  "aesni-x86.s"
+.text
+.globl _aesni_encrypt
+.def   _aesni_encrypt; .scl    2;      .type   32;     .endef
+.align 16
+_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
+.def   _aesni_decrypt; .scl    2;      .type   32;     .endef
+.align 16
+_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
+.def   __aesni_encrypt3;       .scl    3;      .type   32;     .endef
+.align 16
+__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
+.def   __aesni_decrypt3;       .scl    3;      .type   32;     .endef
+.align 16
+__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
+.def   __aesni_encrypt4;       .scl    3;      .type   32;     .endef
+.align 16
+__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
+.def   __aesni_decrypt4;       .scl    3;      .type   32;     .endef
+.align 16
+__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
+.def   __aesni_encrypt6;       .scl    3;      .type   32;     .endef
+.align 16
+__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 16
+.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 16
+.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
+.def   __aesni_decrypt6;       .scl    3;      .type   32;     .endef
+.align 16
+__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 16
+.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 16
+.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
+.def   _aesni_ecb_encrypt;     .scl    2;      .type   32;     .endef
+.align 16
+_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 16
+.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 16
+.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 16
+.L014ecb_enc_two:
+       xorps   %xmm4,%xmm4
+       call    __aesni_encrypt3
+       movups  %xmm2,(%edi)
+       movups  %xmm3,16(%edi)
+       jmp     .L008ecb_ret
+.align 16
+.L015ecb_enc_three:
+       call    __aesni_encrypt3
+       movups  %xmm2,(%edi)
+       movups  %xmm3,16(%edi)
+       movups  %xmm4,32(%edi)
+       jmp     .L008ecb_ret
+.align 16
+.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 16
+.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 16
+.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 16
+.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 16
+.L022ecb_dec_two:
+       xorps   %xmm4,%xmm4
+       call    __aesni_decrypt3
+       movups  %xmm2,(%edi)
+       movups  %xmm3,16(%edi)
+       jmp     .L008ecb_ret
+.align 16
+.L023ecb_dec_three:
+       call    __aesni_decrypt3
+       movups  %xmm2,(%edi)
+       movups  %xmm3,16(%edi)
+       movups  %xmm4,32(%edi)
+       jmp     .L008ecb_ret
+.align 16
+.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
+.def   _aesni_ccm64_encrypt_blocks;    .scl    2;      .type   32;     .endef
+.align 16
+_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
+.def   _aesni_ccm64_decrypt_blocks;    .scl    2;      .type   32;     .endef
+.align 16
+_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 16
+.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 16
+.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
+.def   _aesni_ctr32_encrypt_blocks;    .scl    2;      .type   32;     .endef
+.align 16
+_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 16
+.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 16
+.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 16
+.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 16
+.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 16
+.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
+.def   _aesni_xts_encrypt;     .scl    2;      .type   32;     .endef
+.align 16
+_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 16
+.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 16
+.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 16
+.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 16
+.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 16
+.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 16
+.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 16
+.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
+.def   _aesni_xts_decrypt;     .scl    2;      .type   32;     .endef
+.align 16
+_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 16
+.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 16
+.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 16
+.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 16
+.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 16
+.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 16
+.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 16
+.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
+.def   _aesni_cbc_encrypt;     .scl    2;      .type   32;     .endef
+.align 16
+_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 16
+.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 16
+.L071cbc_decrypt:
+       cmpl    $80,%eax
+       jbe     .L076cbc_dec_tail
+       movaps  %xmm7,(%esp)
+       subl    $80,%eax
+       jmp     .L077cbc_dec_loop6_enter
+.align 16
+.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 16
+.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 16
+.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 16
+.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 16
+.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 16
+.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
+.def   __aesni_set_encrypt_key;        .scl    3;      .type   32;     .endef
+.align 16
+__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 16
+.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 16
+.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 16
+.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 16
+.L095key_192a:
+       movups  %xmm0,(%edx)
+       leal    16(%edx),%edx
+.align 16
+.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 16
+.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 16
+.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 16
+.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 16
+.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 4
+.L086bad_pointer:
+       movl    $-1,%eax
+       ret
+.align 4
+.L089bad_keybits:
+       movl    $-2,%eax
+       ret
+.globl _aesni_set_encrypt_key
+.def   _aesni_set_encrypt_key; .scl    2;      .type   32;     .endef
+.align 16
+_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
+.def   _aesni_set_decrypt_key; .scl    2;      .type   32;     .endef
+.align 16
+_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/coff/padlock-x86-coff.s b/lib/accelerated/x86/coff/padlock-x86-coff.s
new file mode 100644 (file)
index 0000000..c1014bd
--- /dev/null
@@ -0,0 +1,615 @@
+# 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  "./engines/asm/e_padlock-x86.s"
+.text
+.globl _padlock_capability
+.def   _padlock_capability;    .scl    2;      .type   32;     .endef
+.align 16
+_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
+.def   _padlock_key_bswap;     .scl    2;      .type   32;     .endef
+.align 16
+_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
+.def   _padlock_verify_context;        .scl    2;      .type   32;     .endef
+.align 16
+_padlock_verify_context:
+.L_padlock_verify_context_begin:
+       movl    4(%esp),%edx
+       leal    .Lpadlock_saved_context,%eax
+       pushfl
+       call    __padlock_verify_ctx
+.L002verify_pic_point:
+       leal    4(%esp),%esp
+       ret
+.def   __padlock_verify_ctx;   .scl    3;      .type   32;     .endef
+.align 16
+__padlock_verify_ctx:
+       btl     $30,4(%esp)
+       jnc     .L003verified
+       cmpl    (%eax),%edx
+       je      .L003verified
+       pushfl
+       popfl
+.L003verified:
+       movl    %edx,(%eax)
+       ret
+.globl _padlock_reload_key
+.def   _padlock_reload_key;    .scl    2;      .type   32;     .endef
+.align 16
+_padlock_reload_key:
+.L_padlock_reload_key_begin:
+       pushfl
+       popfl
+       ret
+.globl _padlock_aes_block
+.def   _padlock_aes_block;     .scl    2;      .type   32;     .endef
+.align 16
+_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
+.def   _padlock_ecb_encrypt;   .scl    2;      .type   32;     .endef
+.align 16
+_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,%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 16
+.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 16
+.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 16
+.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
+.def   _padlock_cbc_encrypt;   .scl    2;      .type   32;     .endef
+.align 16
+_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,%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 16
+.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 16
+.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 16
+.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
+.def   _padlock_xstore;        .scl    2;      .type   32;     .endef
+.align 16
+_padlock_xstore:
+.L_padlock_xstore_begin:
+       pushl   %edi
+       movl    8(%esp),%edi
+       movl    12(%esp),%edx
+.byte  15,167,192
+       popl    %edi
+       ret
+.def   __win32_segv_handler;   .scl    3;      .type   32;     .endef
+.align 16
+__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
+.def   _padlock_sha1_oneshot;  .scl    2;      .type   32;     .endef
+.align 16
+_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
+       pushl   __win32_segv_handler
+.byte  100,255,48
+.byte  100,137,32
+       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
+.byte  100,143,5,0,0,0,0
+       leal    4(%esp),%esp
+       movl    16(%esp),%edi
+       movups  %xmm0,(%edi)
+       movl    %eax,16(%edi)
+       popl    %esi
+       popl    %edi
+       ret
+.globl _padlock_sha1_blocks
+.def   _padlock_sha1_blocks;   .scl    2;      .type   32;     .endef
+.align 16
+_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
+.def   _padlock_sha256_oneshot;        .scl    2;      .type   32;     .endef
+.align 16
+_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
+       pushl   __win32_segv_handler
+.byte  100,255,48
+.byte  100,137,32
+       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
+.byte  100,143,5,0,0,0,0
+       leal    4(%esp),%esp
+       movl    16(%esp),%edi
+       movups  %xmm0,(%edi)
+       movups  %xmm1,16(%edi)
+       popl    %esi
+       popl    %edi
+       ret
+.globl _padlock_sha256_blocks
+.def   _padlock_sha256_blocks; .scl    2;      .type   32;     .endef
+.align 16
+_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
+.def   _padlock_sha512_blocks; .scl    2;      .type   32;     .endef
+.align 16
+_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 16
+.data
+.align 4
+.Lpadlock_saved_context:
+.long  0