Browse Source

Restoring authorship annotation for <valbon@yandex-team.ru>. Commit 2 of 2.

valbon 3 years ago
parent
commit
f3cec1df1d

+ 5 - 5
build/sysincl/windows.yml

@@ -7,8 +7,8 @@
   - adhoc.h
   - apiset.h
   - apisetcconv.h
-  - atltime.h 
-  - audioclient.h 
+  - atltime.h
+  - audioclient.h
   - authz.h
   - basetyps.h
   - bcrypt.h
@@ -16,7 +16,7 @@
   - capi.h
   - cet.h
   - cfg.h
-  - comdef.h 
+  - comdef.h
   - commctrl.h
   - commdlg.h
   - common.ver
@@ -50,7 +50,7 @@
   - downloadmgr.h
   - driverspecs.h
   - dshow.h
-  - dsound.h 
+  - dsound.h
   - dsparse.h
   - dv.h
   - dvdmedia.h
@@ -125,7 +125,7 @@
   - minwinbase.h
   - minwindef.h
   - mlang.h
-  - mmdeviceapi.h 
+  - mmdeviceapi.h
   - mmsystem.h
   - mq.h
   - mshtmdid.h

+ 12 - 12
contrib/libs/openssl/apps/ya.make

@@ -83,18 +83,18 @@ IF (OS_DARWIN AND ARCH_ARM64)
     )
 ENDIF()
 
-IF (OS_WINDOWS) 
-    IF (ARCH_X86_64) 
-        CFLAGS( 
-            -DENGINESDIR="\"C:\\\\Program\ Files\\\\OpenSSL\\\\lib\\\\engines-1_1\"" 
-            -DOPENSSLDIR="\"C:\\\\Program\ Files\\\\Common\ Files\\\\SSL\"" 
-        ) 
+IF (OS_WINDOWS)
+    IF (ARCH_X86_64)
+        CFLAGS(
+            -DENGINESDIR="\"C:\\\\Program\ Files\\\\OpenSSL\\\\lib\\\\engines-1_1\""
+            -DOPENSSLDIR="\"C:\\\\Program\ Files\\\\Common\ Files\\\\SSL\""
+        )
     ELSEIF (ARCH_I386)
-        CFLAGS( 
-            -DENGINESDIR="\"C:\\\\Program\ Files\ \(x86\)\\\\OpenSSL\\\\lib\\\\engines-1_1\"" 
-            -DOPENSSLDIR="\"C:\\\\Program\ Files\ \(x86\)\\\\Common\ Files\\\\SSL\"" 
-        ) 
-    ENDIF() 
+        CFLAGS(
+            -DENGINESDIR="\"C:\\\\Program\ Files\ \(x86\)\\\\OpenSSL\\\\lib\\\\engines-1_1\""
+            -DOPENSSLDIR="\"C:\\\\Program\ Files\ \(x86\)\\\\Common\ Files\\\\SSL\""
+        )
+    ENDIF()
     CFLAGS(
         -DOPENSSL_SYS_WIN32
         -DUNICODE
@@ -162,7 +162,7 @@ SRCS(
     x509.c
 )
 
-IF (OS_WINDOWS) 
+IF (OS_WINDOWS)
     SRCS(
         win32_init.c
     )

+ 3224 - 3224
contrib/libs/openssl/asm/windows/crypto/aes/aesni-x86.masm

@@ -1,3224 +1,3224 @@
-IF @Version LT 800 
-ECHO MASM version 8.00 or later is strongly recommended. 
-ENDIF 
-.686 
-.XMM 
-IF @Version LT 800 
-XMMWORD STRUCT 16 
-DQ	2 dup (?) 
-XMMWORD	ENDS 
-ENDIF 
- 
-.MODEL	FLAT 
-OPTION	DOTNAME 
-IF @Version LT 800 
-.text$	SEGMENT PAGE 'CODE' 
-ELSE 
-.text$	SEGMENT ALIGN(64) 'CODE' 
-ENDIF 
-;EXTERN	_OPENSSL_ia32cap_P:NEAR 
-ALIGN	16 
-_aesni_encrypt	PROC PUBLIC 
-$L_aesni_encrypt_begin:: 
-	mov	eax,DWORD PTR 4[esp] 
-	mov	edx,DWORD PTR 12[esp] 
-	movups	xmm2,XMMWORD PTR [eax] 
-	mov	ecx,DWORD PTR 240[edx] 
-	mov	eax,DWORD PTR 8[esp] 
-	movups	xmm0,XMMWORD PTR [edx] 
-	movups	xmm1,XMMWORD PTR 16[edx] 
-	lea	edx,DWORD PTR 32[edx] 
-	xorps	xmm2,xmm0 
-$L000enc1_loop_1: 
-DB	102,15,56,220,209 
-	dec	ecx 
-	movups	xmm1,XMMWORD PTR [edx] 
-	lea	edx,DWORD PTR 16[edx] 
-	jnz	$L000enc1_loop_1 
-DB	102,15,56,221,209 
-	pxor	xmm0,xmm0 
-	pxor	xmm1,xmm1 
-	movups	XMMWORD PTR [eax],xmm2 
-	pxor	xmm2,xmm2 
-	ret 
-_aesni_encrypt ENDP 
-ALIGN	16 
-_aesni_decrypt	PROC PUBLIC 
-$L_aesni_decrypt_begin:: 
-	mov	eax,DWORD PTR 4[esp] 
-	mov	edx,DWORD PTR 12[esp] 
-	movups	xmm2,XMMWORD PTR [eax] 
-	mov	ecx,DWORD PTR 240[edx] 
-	mov	eax,DWORD PTR 8[esp] 
-	movups	xmm0,XMMWORD PTR [edx] 
-	movups	xmm1,XMMWORD PTR 16[edx] 
-	lea	edx,DWORD PTR 32[edx] 
-	xorps	xmm2,xmm0 
-$L001dec1_loop_2: 
-DB	102,15,56,222,209 
-	dec	ecx 
-	movups	xmm1,XMMWORD PTR [edx] 
-	lea	edx,DWORD PTR 16[edx] 
-	jnz	$L001dec1_loop_2 
-DB	102,15,56,223,209 
-	pxor	xmm0,xmm0 
-	pxor	xmm1,xmm1 
-	movups	XMMWORD PTR [eax],xmm2 
-	pxor	xmm2,xmm2 
-	ret 
-_aesni_decrypt ENDP 
-ALIGN	16 
-__aesni_encrypt2	PROC PRIVATE 
-	movups	xmm0,XMMWORD PTR [edx] 
-	shl	ecx,4 
-	movups	xmm1,XMMWORD PTR 16[edx] 
-	xorps	xmm2,xmm0 
-	pxor	xmm3,xmm0 
-	movups	xmm0,XMMWORD PTR 32[edx] 
-	lea	edx,DWORD PTR 32[ecx*1+edx] 
-	neg	ecx 
-	add	ecx,16 
-$L002enc2_loop: 
-DB	102,15,56,220,209 
-DB	102,15,56,220,217 
-	movups	xmm1,XMMWORD PTR [ecx*1+edx] 
-	add	ecx,32 
-DB	102,15,56,220,208 
-DB	102,15,56,220,216 
-	movups	xmm0,XMMWORD PTR [ecx*1+edx-16] 
-	jnz	$L002enc2_loop 
-DB	102,15,56,220,209 
-DB	102,15,56,220,217 
-DB	102,15,56,221,208 
-DB	102,15,56,221,216 
-	ret 
-__aesni_encrypt2 ENDP 
-ALIGN	16 
-__aesni_decrypt2	PROC PRIVATE 
-	movups	xmm0,XMMWORD PTR [edx] 
-	shl	ecx,4 
-	movups	xmm1,XMMWORD PTR 16[edx] 
-	xorps	xmm2,xmm0 
-	pxor	xmm3,xmm0 
-	movups	xmm0,XMMWORD PTR 32[edx] 
-	lea	edx,DWORD PTR 32[ecx*1+edx] 
-	neg	ecx 
-	add	ecx,16 
-$L003dec2_loop: 
-DB	102,15,56,222,209 
-DB	102,15,56,222,217 
-	movups	xmm1,XMMWORD PTR [ecx*1+edx] 
-	add	ecx,32 
-DB	102,15,56,222,208 
-DB	102,15,56,222,216 
-	movups	xmm0,XMMWORD PTR [ecx*1+edx-16] 
-	jnz	$L003dec2_loop 
-DB	102,15,56,222,209 
-DB	102,15,56,222,217 
-DB	102,15,56,223,208 
-DB	102,15,56,223,216 
-	ret 
-__aesni_decrypt2 ENDP 
-ALIGN	16 
-__aesni_encrypt3	PROC PRIVATE 
-	movups	xmm0,XMMWORD PTR [edx] 
-	shl	ecx,4 
-	movups	xmm1,XMMWORD PTR 16[edx] 
-	xorps	xmm2,xmm0 
-	pxor	xmm3,xmm0 
-	pxor	xmm4,xmm0 
-	movups	xmm0,XMMWORD PTR 32[edx] 
-	lea	edx,DWORD PTR 32[ecx*1+edx] 
-	neg	ecx 
-	add	ecx,16 
-$L004enc3_loop: 
-DB	102,15,56,220,209 
-DB	102,15,56,220,217 
-DB	102,15,56,220,225 
-	movups	xmm1,XMMWORD PTR [ecx*1+edx] 
-	add	ecx,32 
-DB	102,15,56,220,208 
-DB	102,15,56,220,216 
-DB	102,15,56,220,224 
-	movups	xmm0,XMMWORD PTR [ecx*1+edx-16] 
-	jnz	$L004enc3_loop 
-DB	102,15,56,220,209 
-DB	102,15,56,220,217 
-DB	102,15,56,220,225 
-DB	102,15,56,221,208 
-DB	102,15,56,221,216 
-DB	102,15,56,221,224 
-	ret 
-__aesni_encrypt3 ENDP 
-ALIGN	16 
-__aesni_decrypt3	PROC PRIVATE 
-	movups	xmm0,XMMWORD PTR [edx] 
-	shl	ecx,4 
-	movups	xmm1,XMMWORD PTR 16[edx] 
-	xorps	xmm2,xmm0 
-	pxor	xmm3,xmm0 
-	pxor	xmm4,xmm0 
-	movups	xmm0,XMMWORD PTR 32[edx] 
-	lea	edx,DWORD PTR 32[ecx*1+edx] 
-	neg	ecx 
-	add	ecx,16 
-$L005dec3_loop: 
-DB	102,15,56,222,209 
-DB	102,15,56,222,217 
-DB	102,15,56,222,225 
-	movups	xmm1,XMMWORD PTR [ecx*1+edx] 
-	add	ecx,32 
-DB	102,15,56,222,208 
-DB	102,15,56,222,216 
-DB	102,15,56,222,224 
-	movups	xmm0,XMMWORD PTR [ecx*1+edx-16] 
-	jnz	$L005dec3_loop 
-DB	102,15,56,222,209 
-DB	102,15,56,222,217 
-DB	102,15,56,222,225 
-DB	102,15,56,223,208 
-DB	102,15,56,223,216 
-DB	102,15,56,223,224 
-	ret 
-__aesni_decrypt3 ENDP 
-ALIGN	16 
-__aesni_encrypt4	PROC PRIVATE 
-	movups	xmm0,XMMWORD PTR [edx] 
-	movups	xmm1,XMMWORD PTR 16[edx] 
-	shl	ecx,4 
-	xorps	xmm2,xmm0 
-	pxor	xmm3,xmm0 
-	pxor	xmm4,xmm0 
-	pxor	xmm5,xmm0 
-	movups	xmm0,XMMWORD PTR 32[edx] 
-	lea	edx,DWORD PTR 32[ecx*1+edx] 
-	neg	ecx 
-DB	15,31,64,0 
-	add	ecx,16 
-$L006enc4_loop: 
-DB	102,15,56,220,209 
-DB	102,15,56,220,217 
-DB	102,15,56,220,225 
-DB	102,15,56,220,233 
-	movups	xmm1,XMMWORD PTR [ecx*1+edx] 
-	add	ecx,32 
-DB	102,15,56,220,208 
-DB	102,15,56,220,216 
-DB	102,15,56,220,224 
-DB	102,15,56,220,232 
-	movups	xmm0,XMMWORD PTR [ecx*1+edx-16] 
-	jnz	$L006enc4_loop 
-DB	102,15,56,220,209 
-DB	102,15,56,220,217 
-DB	102,15,56,220,225 
-DB	102,15,56,220,233 
-DB	102,15,56,221,208 
-DB	102,15,56,221,216 
-DB	102,15,56,221,224 
-DB	102,15,56,221,232 
-	ret 
-__aesni_encrypt4 ENDP 
-ALIGN	16 
-__aesni_decrypt4	PROC PRIVATE 
-	movups	xmm0,XMMWORD PTR [edx] 
-	movups	xmm1,XMMWORD PTR 16[edx] 
-	shl	ecx,4 
-	xorps	xmm2,xmm0 
-	pxor	xmm3,xmm0 
-	pxor	xmm4,xmm0 
-	pxor	xmm5,xmm0 
-	movups	xmm0,XMMWORD PTR 32[edx] 
-	lea	edx,DWORD PTR 32[ecx*1+edx] 
-	neg	ecx 
-DB	15,31,64,0 
-	add	ecx,16 
-$L007dec4_loop: 
-DB	102,15,56,222,209 
-DB	102,15,56,222,217 
-DB	102,15,56,222,225 
-DB	102,15,56,222,233 
-	movups	xmm1,XMMWORD PTR [ecx*1+edx] 
-	add	ecx,32 
-DB	102,15,56,222,208 
-DB	102,15,56,222,216 
-DB	102,15,56,222,224 
-DB	102,15,56,222,232 
-	movups	xmm0,XMMWORD PTR [ecx*1+edx-16] 
-	jnz	$L007dec4_loop 
-DB	102,15,56,222,209 
-DB	102,15,56,222,217 
-DB	102,15,56,222,225 
-DB	102,15,56,222,233 
-DB	102,15,56,223,208 
-DB	102,15,56,223,216 
-DB	102,15,56,223,224 
-DB	102,15,56,223,232 
-	ret 
-__aesni_decrypt4 ENDP 
-ALIGN	16 
-__aesni_encrypt6	PROC PRIVATE 
-	movups	xmm0,XMMWORD PTR [edx] 
-	shl	ecx,4 
-	movups	xmm1,XMMWORD PTR 16[edx] 
-	xorps	xmm2,xmm0 
-	pxor	xmm3,xmm0 
-	pxor	xmm4,xmm0 
-DB	102,15,56,220,209 
-	pxor	xmm5,xmm0 
-	pxor	xmm6,xmm0 
-DB	102,15,56,220,217 
-	lea	edx,DWORD PTR 32[ecx*1+edx] 
-	neg	ecx 
-DB	102,15,56,220,225 
-	pxor	xmm7,xmm0 
-	movups	xmm0,XMMWORD PTR [ecx*1+edx] 
-	add	ecx,16 
-	jmp	$L008_aesni_encrypt6_inner 
-ALIGN	16 
-$L009enc6_loop: 
-DB	102,15,56,220,209 
-DB	102,15,56,220,217 
-DB	102,15,56,220,225 
-$L008_aesni_encrypt6_inner: 
-DB	102,15,56,220,233 
-DB	102,15,56,220,241 
-DB	102,15,56,220,249 
-$L_aesni_encrypt6_enter:: 
-	movups	xmm1,XMMWORD PTR [ecx*1+edx] 
-	add	ecx,32 
-DB	102,15,56,220,208 
-DB	102,15,56,220,216 
-DB	102,15,56,220,224 
-DB	102,15,56,220,232 
-DB	102,15,56,220,240 
-DB	102,15,56,220,248 
-	movups	xmm0,XMMWORD PTR [ecx*1+edx-16] 
-	jnz	$L009enc6_loop 
-DB	102,15,56,220,209 
-DB	102,15,56,220,217 
-DB	102,15,56,220,225 
-DB	102,15,56,220,233 
-DB	102,15,56,220,241 
-DB	102,15,56,220,249 
-DB	102,15,56,221,208 
-DB	102,15,56,221,216 
-DB	102,15,56,221,224 
-DB	102,15,56,221,232 
-DB	102,15,56,221,240 
-DB	102,15,56,221,248 
-	ret 
-__aesni_encrypt6 ENDP 
-ALIGN	16 
-__aesni_decrypt6	PROC PRIVATE 
-	movups	xmm0,XMMWORD PTR [edx] 
-	shl	ecx,4 
-	movups	xmm1,XMMWORD PTR 16[edx] 
-	xorps	xmm2,xmm0 
-	pxor	xmm3,xmm0 
-	pxor	xmm4,xmm0 
-DB	102,15,56,222,209 
-	pxor	xmm5,xmm0 
-	pxor	xmm6,xmm0 
-DB	102,15,56,222,217 
-	lea	edx,DWORD PTR 32[ecx*1+edx] 
-	neg	ecx 
-DB	102,15,56,222,225 
-	pxor	xmm7,xmm0 
-	movups	xmm0,XMMWORD PTR [ecx*1+edx] 
-	add	ecx,16 
-	jmp	$L010_aesni_decrypt6_inner 
-ALIGN	16 
-$L011dec6_loop: 
-DB	102,15,56,222,209 
-DB	102,15,56,222,217 
-DB	102,15,56,222,225 
-$L010_aesni_decrypt6_inner: 
-DB	102,15,56,222,233 
-DB	102,15,56,222,241 
-DB	102,15,56,222,249 
-$L_aesni_decrypt6_enter:: 
-	movups	xmm1,XMMWORD PTR [ecx*1+edx] 
-	add	ecx,32 
-DB	102,15,56,222,208 
-DB	102,15,56,222,216 
-DB	102,15,56,222,224 
-DB	102,15,56,222,232 
-DB	102,15,56,222,240 
-DB	102,15,56,222,248 
-	movups	xmm0,XMMWORD PTR [ecx*1+edx-16] 
-	jnz	$L011dec6_loop 
-DB	102,15,56,222,209 
-DB	102,15,56,222,217 
-DB	102,15,56,222,225 
-DB	102,15,56,222,233 
-DB	102,15,56,222,241 
-DB	102,15,56,222,249 
-DB	102,15,56,223,208 
-DB	102,15,56,223,216 
-DB	102,15,56,223,224 
-DB	102,15,56,223,232 
-DB	102,15,56,223,240 
-DB	102,15,56,223,248 
-	ret 
-__aesni_decrypt6 ENDP 
-ALIGN	16 
-_aesni_ecb_encrypt	PROC PUBLIC 
-$L_aesni_ecb_encrypt_begin:: 
-	push	ebp 
-	push	ebx 
-	push	esi 
-	push	edi 
-	mov	esi,DWORD PTR 20[esp] 
-	mov	edi,DWORD PTR 24[esp] 
-	mov	eax,DWORD PTR 28[esp] 
-	mov	edx,DWORD PTR 32[esp] 
-	mov	ebx,DWORD PTR 36[esp] 
-	and	eax,-16 
-	jz	$L012ecb_ret 
-	mov	ecx,DWORD PTR 240[edx] 
-	test	ebx,ebx 
-	jz	$L013ecb_decrypt 
-	mov	ebp,edx 
-	mov	ebx,ecx 
-	cmp	eax,96 
-	jb	$L014ecb_enc_tail 
-	movdqu	xmm2,XMMWORD PTR [esi] 
-	movdqu	xmm3,XMMWORD PTR 16[esi] 
-	movdqu	xmm4,XMMWORD PTR 32[esi] 
-	movdqu	xmm5,XMMWORD PTR 48[esi] 
-	movdqu	xmm6,XMMWORD PTR 64[esi] 
-	movdqu	xmm7,XMMWORD PTR 80[esi] 
-	lea	esi,DWORD PTR 96[esi] 
-	sub	eax,96 
-	jmp	$L015ecb_enc_loop6_enter 
-ALIGN	16 
-$L016ecb_enc_loop6: 
-	movups	XMMWORD PTR [edi],xmm2 
-	movdqu	xmm2,XMMWORD PTR [esi] 
-	movups	XMMWORD PTR 16[edi],xmm3 
-	movdqu	xmm3,XMMWORD PTR 16[esi] 
-	movups	XMMWORD PTR 32[edi],xmm4 
-	movdqu	xmm4,XMMWORD PTR 32[esi] 
-	movups	XMMWORD PTR 48[edi],xmm5 
-	movdqu	xmm5,XMMWORD PTR 48[esi] 
-	movups	XMMWORD PTR 64[edi],xmm6 
-	movdqu	xmm6,XMMWORD PTR 64[esi] 
-	movups	XMMWORD PTR 80[edi],xmm7 
-	lea	edi,DWORD PTR 96[edi] 
-	movdqu	xmm7,XMMWORD PTR 80[esi] 
-	lea	esi,DWORD PTR 96[esi] 
-$L015ecb_enc_loop6_enter: 
-	call	__aesni_encrypt6 
-	mov	edx,ebp 
-	mov	ecx,ebx 
-	sub	eax,96 
-	jnc	$L016ecb_enc_loop6 
-	movups	XMMWORD PTR [edi],xmm2 
-	movups	XMMWORD PTR 16[edi],xmm3 
-	movups	XMMWORD PTR 32[edi],xmm4 
-	movups	XMMWORD PTR 48[edi],xmm5 
-	movups	XMMWORD PTR 64[edi],xmm6 
-	movups	XMMWORD PTR 80[edi],xmm7 
-	lea	edi,DWORD PTR 96[edi] 
-	add	eax,96 
-	jz	$L012ecb_ret 
-$L014ecb_enc_tail: 
-	movups	xmm2,XMMWORD PTR [esi] 
-	cmp	eax,32 
-	jb	$L017ecb_enc_one 
-	movups	xmm3,XMMWORD PTR 16[esi] 
-	je	$L018ecb_enc_two 
-	movups	xmm4,XMMWORD PTR 32[esi] 
-	cmp	eax,64 
-	jb	$L019ecb_enc_three 
-	movups	xmm5,XMMWORD PTR 48[esi] 
-	je	$L020ecb_enc_four 
-	movups	xmm6,XMMWORD PTR 64[esi] 
-	xorps	xmm7,xmm7 
-	call	__aesni_encrypt6 
-	movups	XMMWORD PTR [edi],xmm2 
-	movups	XMMWORD PTR 16[edi],xmm3 
-	movups	XMMWORD PTR 32[edi],xmm4 
-	movups	XMMWORD PTR 48[edi],xmm5 
-	movups	XMMWORD PTR 64[edi],xmm6 
-	jmp	$L012ecb_ret 
-ALIGN	16 
-$L017ecb_enc_one: 
-	movups	xmm0,XMMWORD PTR [edx] 
-	movups	xmm1,XMMWORD PTR 16[edx] 
-	lea	edx,DWORD PTR 32[edx] 
-	xorps	xmm2,xmm0 
-$L021enc1_loop_3: 
-DB	102,15,56,220,209 
-	dec	ecx 
-	movups	xmm1,XMMWORD PTR [edx] 
-	lea	edx,DWORD PTR 16[edx] 
-	jnz	$L021enc1_loop_3 
-DB	102,15,56,221,209 
-	movups	XMMWORD PTR [edi],xmm2 
-	jmp	$L012ecb_ret 
-ALIGN	16 
-$L018ecb_enc_two: 
-	call	__aesni_encrypt2 
-	movups	XMMWORD PTR [edi],xmm2 
-	movups	XMMWORD PTR 16[edi],xmm3 
-	jmp	$L012ecb_ret 
-ALIGN	16 
-$L019ecb_enc_three: 
-	call	__aesni_encrypt3 
-	movups	XMMWORD PTR [edi],xmm2 
-	movups	XMMWORD PTR 16[edi],xmm3 
-	movups	XMMWORD PTR 32[edi],xmm4 
-	jmp	$L012ecb_ret 
-ALIGN	16 
-$L020ecb_enc_four: 
-	call	__aesni_encrypt4 
-	movups	XMMWORD PTR [edi],xmm2 
-	movups	XMMWORD PTR 16[edi],xmm3 
-	movups	XMMWORD PTR 32[edi],xmm4 
-	movups	XMMWORD PTR 48[edi],xmm5 
-	jmp	$L012ecb_ret 
-ALIGN	16 
-$L013ecb_decrypt: 
-	mov	ebp,edx 
-	mov	ebx,ecx 
-	cmp	eax,96 
-	jb	$L022ecb_dec_tail 
-	movdqu	xmm2,XMMWORD PTR [esi] 
-	movdqu	xmm3,XMMWORD PTR 16[esi] 
-	movdqu	xmm4,XMMWORD PTR 32[esi] 
-	movdqu	xmm5,XMMWORD PTR 48[esi] 
-	movdqu	xmm6,XMMWORD PTR 64[esi] 
-	movdqu	xmm7,XMMWORD PTR 80[esi] 
-	lea	esi,DWORD PTR 96[esi] 
-	sub	eax,96 
-	jmp	$L023ecb_dec_loop6_enter 
-ALIGN	16 
-$L024ecb_dec_loop6: 
-	movups	XMMWORD PTR [edi],xmm2 
-	movdqu	xmm2,XMMWORD PTR [esi] 
-	movups	XMMWORD PTR 16[edi],xmm3 
-	movdqu	xmm3,XMMWORD PTR 16[esi] 
-	movups	XMMWORD PTR 32[edi],xmm4 
-	movdqu	xmm4,XMMWORD PTR 32[esi] 
-	movups	XMMWORD PTR 48[edi],xmm5 
-	movdqu	xmm5,XMMWORD PTR 48[esi] 
-	movups	XMMWORD PTR 64[edi],xmm6 
-	movdqu	xmm6,XMMWORD PTR 64[esi] 
-	movups	XMMWORD PTR 80[edi],xmm7 
-	lea	edi,DWORD PTR 96[edi] 
-	movdqu	xmm7,XMMWORD PTR 80[esi] 
-	lea	esi,DWORD PTR 96[esi] 
-$L023ecb_dec_loop6_enter: 
-	call	__aesni_decrypt6 
-	mov	edx,ebp 
-	mov	ecx,ebx 
-	sub	eax,96 
-	jnc	$L024ecb_dec_loop6 
-	movups	XMMWORD PTR [edi],xmm2 
-	movups	XMMWORD PTR 16[edi],xmm3 
-	movups	XMMWORD PTR 32[edi],xmm4 
-	movups	XMMWORD PTR 48[edi],xmm5 
-	movups	XMMWORD PTR 64[edi],xmm6 
-	movups	XMMWORD PTR 80[edi],xmm7 
-	lea	edi,DWORD PTR 96[edi] 
-	add	eax,96 
-	jz	$L012ecb_ret 
-$L022ecb_dec_tail: 
-	movups	xmm2,XMMWORD PTR [esi] 
-	cmp	eax,32 
-	jb	$L025ecb_dec_one 
-	movups	xmm3,XMMWORD PTR 16[esi] 
-	je	$L026ecb_dec_two 
-	movups	xmm4,XMMWORD PTR 32[esi] 
-	cmp	eax,64 
-	jb	$L027ecb_dec_three 
-	movups	xmm5,XMMWORD PTR 48[esi] 
-	je	$L028ecb_dec_four 
-	movups	xmm6,XMMWORD PTR 64[esi] 
-	xorps	xmm7,xmm7 
-	call	__aesni_decrypt6 
-	movups	XMMWORD PTR [edi],xmm2 
-	movups	XMMWORD PTR 16[edi],xmm3 
-	movups	XMMWORD PTR 32[edi],xmm4 
-	movups	XMMWORD PTR 48[edi],xmm5 
-	movups	XMMWORD PTR 64[edi],xmm6 
-	jmp	$L012ecb_ret 
-ALIGN	16 
-$L025ecb_dec_one: 
-	movups	xmm0,XMMWORD PTR [edx] 
-	movups	xmm1,XMMWORD PTR 16[edx] 
-	lea	edx,DWORD PTR 32[edx] 
-	xorps	xmm2,xmm0 
-$L029dec1_loop_4: 
-DB	102,15,56,222,209 
-	dec	ecx 
-	movups	xmm1,XMMWORD PTR [edx] 
-	lea	edx,DWORD PTR 16[edx] 
-	jnz	$L029dec1_loop_4 
-DB	102,15,56,223,209 
-	movups	XMMWORD PTR [edi],xmm2 
-	jmp	$L012ecb_ret 
-ALIGN	16 
-$L026ecb_dec_two: 
-	call	__aesni_decrypt2 
-	movups	XMMWORD PTR [edi],xmm2 
-	movups	XMMWORD PTR 16[edi],xmm3 
-	jmp	$L012ecb_ret 
-ALIGN	16 
-$L027ecb_dec_three: 
-	call	__aesni_decrypt3 
-	movups	XMMWORD PTR [edi],xmm2 
-	movups	XMMWORD PTR 16[edi],xmm3 
-	movups	XMMWORD PTR 32[edi],xmm4 
-	jmp	$L012ecb_ret 
-ALIGN	16 
-$L028ecb_dec_four: 
-	call	__aesni_decrypt4 
-	movups	XMMWORD PTR [edi],xmm2 
-	movups	XMMWORD PTR 16[edi],xmm3 
-	movups	XMMWORD PTR 32[edi],xmm4 
-	movups	XMMWORD PTR 48[edi],xmm5 
-$L012ecb_ret: 
-	pxor	xmm0,xmm0 
-	pxor	xmm1,xmm1 
-	pxor	xmm2,xmm2 
-	pxor	xmm3,xmm3 
-	pxor	xmm4,xmm4 
-	pxor	xmm5,xmm5 
-	pxor	xmm6,xmm6 
-	pxor	xmm7,xmm7 
-	pop	edi 
-	pop	esi 
-	pop	ebx 
-	pop	ebp 
-	ret 
-_aesni_ecb_encrypt ENDP 
-ALIGN	16 
-_aesni_ccm64_encrypt_blocks	PROC PUBLIC 
-$L_aesni_ccm64_encrypt_blocks_begin:: 
-	push	ebp 
-	push	ebx 
-	push	esi 
-	push	edi 
-	mov	esi,DWORD PTR 20[esp] 
-	mov	edi,DWORD PTR 24[esp] 
-	mov	eax,DWORD PTR 28[esp] 
-	mov	edx,DWORD PTR 32[esp] 
-	mov	ebx,DWORD PTR 36[esp] 
-	mov	ecx,DWORD PTR 40[esp] 
-	mov	ebp,esp 
-	sub	esp,60 
-	and	esp,-16 
-	mov	DWORD PTR 48[esp],ebp 
-	movdqu	xmm7,XMMWORD PTR [ebx] 
-	movdqu	xmm3,XMMWORD PTR [ecx] 
-	mov	ecx,DWORD PTR 240[edx] 
-	mov	DWORD PTR [esp],202182159 
-	mov	DWORD PTR 4[esp],134810123 
-	mov	DWORD PTR 8[esp],67438087 
-	mov	DWORD PTR 12[esp],66051 
-	mov	ebx,1 
-	xor	ebp,ebp 
-	mov	DWORD PTR 16[esp],ebx 
-	mov	DWORD PTR 20[esp],ebp 
-	mov	DWORD PTR 24[esp],ebp 
-	mov	DWORD PTR 28[esp],ebp 
-	shl	ecx,4 
-	mov	ebx,16 
-	lea	ebp,DWORD PTR [edx] 
-	movdqa	xmm5,XMMWORD PTR [esp] 
-	movdqa	xmm2,xmm7 
-	lea	edx,DWORD PTR 32[ecx*1+edx] 
-	sub	ebx,ecx 
-DB	102,15,56,0,253 
-$L030ccm64_enc_outer: 
-	movups	xmm0,XMMWORD PTR [ebp] 
-	mov	ecx,ebx 
-	movups	xmm6,XMMWORD PTR [esi] 
-	xorps	xmm2,xmm0 
-	movups	xmm1,XMMWORD PTR 16[ebp] 
-	xorps	xmm0,xmm6 
-	xorps	xmm3,xmm0 
-	movups	xmm0,XMMWORD PTR 32[ebp] 
-$L031ccm64_enc2_loop: 
-DB	102,15,56,220,209 
-DB	102,15,56,220,217 
-	movups	xmm1,XMMWORD PTR [ecx*1+edx] 
-	add	ecx,32 
-DB	102,15,56,220,208 
-DB	102,15,56,220,216 
-	movups	xmm0,XMMWORD PTR [ecx*1+edx-16] 
-	jnz	$L031ccm64_enc2_loop 
-DB	102,15,56,220,209 
-DB	102,15,56,220,217 
-	paddq	xmm7,XMMWORD PTR 16[esp] 
-	dec	eax 
-DB	102,15,56,221,208 
-DB	102,15,56,221,216 
-	lea	esi,DWORD PTR 16[esi] 
-	xorps	xmm6,xmm2 
-	movdqa	xmm2,xmm7 
-	movups	XMMWORD PTR [edi],xmm6 
-DB	102,15,56,0,213 
-	lea	edi,DWORD PTR 16[edi] 
-	jnz	$L030ccm64_enc_outer 
-	mov	esp,DWORD PTR 48[esp] 
-	mov	edi,DWORD PTR 40[esp] 
-	movups	XMMWORD PTR [edi],xmm3 
-	pxor	xmm0,xmm0 
-	pxor	xmm1,xmm1 
-	pxor	xmm2,xmm2 
-	pxor	xmm3,xmm3 
-	pxor	xmm4,xmm4 
-	pxor	xmm5,xmm5 
-	pxor	xmm6,xmm6 
-	pxor	xmm7,xmm7 
-	pop	edi 
-	pop	esi 
-	pop	ebx 
-	pop	ebp 
-	ret 
-_aesni_ccm64_encrypt_blocks ENDP 
-ALIGN	16 
-_aesni_ccm64_decrypt_blocks	PROC PUBLIC 
-$L_aesni_ccm64_decrypt_blocks_begin:: 
-	push	ebp 
-	push	ebx 
-	push	esi 
-	push	edi 
-	mov	esi,DWORD PTR 20[esp] 
-	mov	edi,DWORD PTR 24[esp] 
-	mov	eax,DWORD PTR 28[esp] 
-	mov	edx,DWORD PTR 32[esp] 
-	mov	ebx,DWORD PTR 36[esp] 
-	mov	ecx,DWORD PTR 40[esp] 
-	mov	ebp,esp 
-	sub	esp,60 
-	and	esp,-16 
-	mov	DWORD PTR 48[esp],ebp 
-	movdqu	xmm7,XMMWORD PTR [ebx] 
-	movdqu	xmm3,XMMWORD PTR [ecx] 
-	mov	ecx,DWORD PTR 240[edx] 
-	mov	DWORD PTR [esp],202182159 
-	mov	DWORD PTR 4[esp],134810123 
-	mov	DWORD PTR 8[esp],67438087 
-	mov	DWORD PTR 12[esp],66051 
-	mov	ebx,1 
-	xor	ebp,ebp 
-	mov	DWORD PTR 16[esp],ebx 
-	mov	DWORD PTR 20[esp],ebp 
-	mov	DWORD PTR 24[esp],ebp 
-	mov	DWORD PTR 28[esp],ebp 
-	movdqa	xmm5,XMMWORD PTR [esp] 
-	movdqa	xmm2,xmm7 
-	mov	ebp,edx 
-	mov	ebx,ecx 
-DB	102,15,56,0,253 
-	movups	xmm0,XMMWORD PTR [edx] 
-	movups	xmm1,XMMWORD PTR 16[edx] 
-	lea	edx,DWORD PTR 32[edx] 
-	xorps	xmm2,xmm0 
-$L032enc1_loop_5: 
-DB	102,15,56,220,209 
-	dec	ecx 
-	movups	xmm1,XMMWORD PTR [edx] 
-	lea	edx,DWORD PTR 16[edx] 
-	jnz	$L032enc1_loop_5 
-DB	102,15,56,221,209 
-	shl	ebx,4 
-	mov	ecx,16 
-	movups	xmm6,XMMWORD PTR [esi] 
-	paddq	xmm7,XMMWORD PTR 16[esp] 
-	lea	esi,QWORD PTR 16[esi] 
-	sub	ecx,ebx 
-	lea	edx,DWORD PTR 32[ebx*1+ebp] 
-	mov	ebx,ecx 
-	jmp	$L033ccm64_dec_outer 
-ALIGN	16 
-$L033ccm64_dec_outer: 
-	xorps	xmm6,xmm2 
-	movdqa	xmm2,xmm7 
-	movups	XMMWORD PTR [edi],xmm6 
-	lea	edi,DWORD PTR 16[edi] 
-DB	102,15,56,0,213 
-	sub	eax,1 
-	jz	$L034ccm64_dec_break 
-	movups	xmm0,XMMWORD PTR [ebp] 
-	mov	ecx,ebx 
-	movups	xmm1,XMMWORD PTR 16[ebp] 
-	xorps	xmm6,xmm0 
-	xorps	xmm2,xmm0 
-	xorps	xmm3,xmm6 
-	movups	xmm0,XMMWORD PTR 32[ebp] 
-$L035ccm64_dec2_loop: 
-DB	102,15,56,220,209 
-DB	102,15,56,220,217 
-	movups	xmm1,XMMWORD PTR [ecx*1+edx] 
-	add	ecx,32 
-DB	102,15,56,220,208 
-DB	102,15,56,220,216 
-	movups	xmm0,XMMWORD PTR [ecx*1+edx-16] 
-	jnz	$L035ccm64_dec2_loop 
-	movups	xmm6,XMMWORD PTR [esi] 
-	paddq	xmm7,XMMWORD PTR 16[esp] 
-DB	102,15,56,220,209 
-DB	102,15,56,220,217 
-DB	102,15,56,221,208 
-DB	102,15,56,221,216 
-	lea	esi,QWORD PTR 16[esi] 
-	jmp	$L033ccm64_dec_outer 
-ALIGN	16 
-$L034ccm64_dec_break: 
-	mov	ecx,DWORD PTR 240[ebp] 
-	mov	edx,ebp 
-	movups	xmm0,XMMWORD PTR [edx] 
-	movups	xmm1,XMMWORD PTR 16[edx] 
-	xorps	xmm6,xmm0 
-	lea	edx,DWORD PTR 32[edx] 
-	xorps	xmm3,xmm6 
-$L036enc1_loop_6: 
-DB	102,15,56,220,217 
-	dec	ecx 
-	movups	xmm1,XMMWORD PTR [edx] 
-	lea	edx,DWORD PTR 16[edx] 
-	jnz	$L036enc1_loop_6 
-DB	102,15,56,221,217 
-	mov	esp,DWORD PTR 48[esp] 
-	mov	edi,DWORD PTR 40[esp] 
-	movups	XMMWORD PTR [edi],xmm3 
-	pxor	xmm0,xmm0 
-	pxor	xmm1,xmm1 
-	pxor	xmm2,xmm2 
-	pxor	xmm3,xmm3 
-	pxor	xmm4,xmm4 
-	pxor	xmm5,xmm5 
-	pxor	xmm6,xmm6 
-	pxor	xmm7,xmm7 
-	pop	edi 
-	pop	esi 
-	pop	ebx 
-	pop	ebp 
-	ret 
-_aesni_ccm64_decrypt_blocks ENDP 
-ALIGN	16 
-_aesni_ctr32_encrypt_blocks	PROC PUBLIC 
-$L_aesni_ctr32_encrypt_blocks_begin:: 
-	push	ebp 
-	push	ebx 
-	push	esi 
-	push	edi 
-	mov	esi,DWORD PTR 20[esp] 
-	mov	edi,DWORD PTR 24[esp] 
-	mov	eax,DWORD PTR 28[esp] 
-	mov	edx,DWORD PTR 32[esp] 
-	mov	ebx,DWORD PTR 36[esp] 
-	mov	ebp,esp 
-	sub	esp,88 
-	and	esp,-16 
-	mov	DWORD PTR 80[esp],ebp 
-	cmp	eax,1 
-	je	$L037ctr32_one_shortcut 
-	movdqu	xmm7,XMMWORD PTR [ebx] 
-	mov	DWORD PTR [esp],202182159 
-	mov	DWORD PTR 4[esp],134810123 
-	mov	DWORD PTR 8[esp],67438087 
-	mov	DWORD PTR 12[esp],66051 
-	mov	ecx,6 
-	xor	ebp,ebp 
-	mov	DWORD PTR 16[esp],ecx 
-	mov	DWORD PTR 20[esp],ecx 
-	mov	DWORD PTR 24[esp],ecx 
-	mov	DWORD PTR 28[esp],ebp 
-DB	102,15,58,22,251,3 
-DB	102,15,58,34,253,3 
-	mov	ecx,DWORD PTR 240[edx] 
-	bswap	ebx 
-	pxor	xmm0,xmm0 
-	pxor	xmm1,xmm1 
-	movdqa	xmm2,XMMWORD PTR [esp] 
-DB	102,15,58,34,195,0 
-	lea	ebp,DWORD PTR 3[ebx] 
-DB	102,15,58,34,205,0 
-	inc	ebx 
-DB	102,15,58,34,195,1 
-	inc	ebp 
-DB	102,15,58,34,205,1 
-	inc	ebx 
-DB	102,15,58,34,195,2 
-	inc	ebp 
-DB	102,15,58,34,205,2 
-	movdqa	XMMWORD PTR 48[esp],xmm0 
-DB	102,15,56,0,194 
-	movdqu	xmm6,XMMWORD PTR [edx] 
-	movdqa	XMMWORD PTR 64[esp],xmm1 
-DB	102,15,56,0,202 
-	pshufd	xmm2,xmm0,192 
-	pshufd	xmm3,xmm0,128 
-	cmp	eax,6 
-	jb	$L038ctr32_tail 
-	pxor	xmm7,xmm6 
-	shl	ecx,4 
-	mov	ebx,16 
-	movdqa	XMMWORD PTR 32[esp],xmm7 
-	mov	ebp,edx 
-	sub	ebx,ecx 
-	lea	edx,DWORD PTR 32[ecx*1+edx] 
-	sub	eax,6 
-	jmp	$L039ctr32_loop6 
-ALIGN	16 
-$L039ctr32_loop6: 
-	pshufd	xmm4,xmm0,64 
-	movdqa	xmm0,XMMWORD PTR 32[esp] 
-	pshufd	xmm5,xmm1,192 
-	pxor	xmm2,xmm0 
-	pshufd	xmm6,xmm1,128 
-	pxor	xmm3,xmm0 
-	pshufd	xmm7,xmm1,64 
-	movups	xmm1,XMMWORD PTR 16[ebp] 
-	pxor	xmm4,xmm0 
-	pxor	xmm5,xmm0 
-DB	102,15,56,220,209 
-	pxor	xmm6,xmm0 
-	pxor	xmm7,xmm0 
-DB	102,15,56,220,217 
-	movups	xmm0,XMMWORD PTR 32[ebp] 
-	mov	ecx,ebx 
-DB	102,15,56,220,225 
-DB	102,15,56,220,233 
-DB	102,15,56,220,241 
-DB	102,15,56,220,249 
-	call	$L_aesni_encrypt6_enter 
-	movups	xmm1,XMMWORD PTR [esi] 
-	movups	xmm0,XMMWORD PTR 16[esi] 
-	xorps	xmm2,xmm1 
-	movups	xmm1,XMMWORD PTR 32[esi] 
-	xorps	xmm3,xmm0 
-	movups	XMMWORD PTR [edi],xmm2 
-	movdqa	xmm0,XMMWORD PTR 16[esp] 
-	xorps	xmm4,xmm1 
-	movdqa	xmm1,XMMWORD PTR 64[esp] 
-	movups	XMMWORD PTR 16[edi],xmm3 
-	movups	XMMWORD PTR 32[edi],xmm4 
-	paddd	xmm1,xmm0 
-	paddd	xmm0,XMMWORD PTR 48[esp] 
-	movdqa	xmm2,XMMWORD PTR [esp] 
-	movups	xmm3,XMMWORD PTR 48[esi] 
-	movups	xmm4,XMMWORD PTR 64[esi] 
-	xorps	xmm5,xmm3 
-	movups	xmm3,XMMWORD PTR 80[esi] 
-	lea	esi,DWORD PTR 96[esi] 
-	movdqa	XMMWORD PTR 48[esp],xmm0 
-DB	102,15,56,0,194 
-	xorps	xmm6,xmm4 
-	movups	XMMWORD PTR 48[edi],xmm5 
-	xorps	xmm7,xmm3 
-	movdqa	XMMWORD PTR 64[esp],xmm1 
-DB	102,15,56,0,202 
-	movups	XMMWORD PTR 64[edi],xmm6 
-	pshufd	xmm2,xmm0,192 
-	movups	XMMWORD PTR 80[edi],xmm7 
-	lea	edi,DWORD PTR 96[edi] 
-	pshufd	xmm3,xmm0,128 
-	sub	eax,6 
-	jnc	$L039ctr32_loop6 
-	add	eax,6 
-	jz	$L040ctr32_ret 
-	movdqu	xmm7,XMMWORD PTR [ebp] 
-	mov	edx,ebp 
-	pxor	xmm7,XMMWORD PTR 32[esp] 
-	mov	ecx,DWORD PTR 240[ebp] 
-$L038ctr32_tail: 
-	por	xmm2,xmm7 
-	cmp	eax,2 
-	jb	$L041ctr32_one 
-	pshufd	xmm4,xmm0,64 
-	por	xmm3,xmm7 
-	je	$L042ctr32_two 
-	pshufd	xmm5,xmm1,192 
-	por	xmm4,xmm7 
-	cmp	eax,4 
-	jb	$L043ctr32_three 
-	pshufd	xmm6,xmm1,128 
-	por	xmm5,xmm7 
-	je	$L044ctr32_four 
-	por	xmm6,xmm7 
-	call	__aesni_encrypt6 
-	movups	xmm1,XMMWORD PTR [esi] 
-	movups	xmm0,XMMWORD PTR 16[esi] 
-	xorps	xmm2,xmm1 
-	movups	xmm1,XMMWORD PTR 32[esi] 
-	xorps	xmm3,xmm0 
-	movups	xmm0,XMMWORD PTR 48[esi] 
-	xorps	xmm4,xmm1 
-	movups	xmm1,XMMWORD PTR 64[esi] 
-	xorps	xmm5,xmm0 
-	movups	XMMWORD PTR [edi],xmm2 
-	xorps	xmm6,xmm1 
-	movups	XMMWORD PTR 16[edi],xmm3 
-	movups	XMMWORD PTR 32[edi],xmm4 
-	movups	XMMWORD PTR 48[edi],xmm5 
-	movups	XMMWORD PTR 64[edi],xmm6 
-	jmp	$L040ctr32_ret 
-ALIGN	16 
-$L037ctr32_one_shortcut: 
-	movups	xmm2,XMMWORD PTR [ebx] 
-	mov	ecx,DWORD PTR 240[edx] 
-$L041ctr32_one: 
-	movups	xmm0,XMMWORD PTR [edx] 
-	movups	xmm1,XMMWORD PTR 16[edx] 
-	lea	edx,DWORD PTR 32[edx] 
-	xorps	xmm2,xmm0 
-$L045enc1_loop_7: 
-DB	102,15,56,220,209 
-	dec	ecx 
-	movups	xmm1,XMMWORD PTR [edx] 
-	lea	edx,DWORD PTR 16[edx] 
-	jnz	$L045enc1_loop_7 
-DB	102,15,56,221,209 
-	movups	xmm6,XMMWORD PTR [esi] 
-	xorps	xmm6,xmm2 
-	movups	XMMWORD PTR [edi],xmm6 
-	jmp	$L040ctr32_ret 
-ALIGN	16 
-$L042ctr32_two: 
-	call	__aesni_encrypt2 
-	movups	xmm5,XMMWORD PTR [esi] 
-	movups	xmm6,XMMWORD PTR 16[esi] 
-	xorps	xmm2,xmm5 
-	xorps	xmm3,xmm6 
-	movups	XMMWORD PTR [edi],xmm2 
-	movups	XMMWORD PTR 16[edi],xmm3 
-	jmp	$L040ctr32_ret 
-ALIGN	16 
-$L043ctr32_three: 
-	call	__aesni_encrypt3 
-	movups	xmm5,XMMWORD PTR [esi] 
-	movups	xmm6,XMMWORD PTR 16[esi] 
-	xorps	xmm2,xmm5 
-	movups	xmm7,XMMWORD PTR 32[esi] 
-	xorps	xmm3,xmm6 
-	movups	XMMWORD PTR [edi],xmm2 
-	xorps	xmm4,xmm7 
-	movups	XMMWORD PTR 16[edi],xmm3 
-	movups	XMMWORD PTR 32[edi],xmm4 
-	jmp	$L040ctr32_ret 
-ALIGN	16 
-$L044ctr32_four: 
-	call	__aesni_encrypt4 
-	movups	xmm6,XMMWORD PTR [esi] 
-	movups	xmm7,XMMWORD PTR 16[esi] 
-	movups	xmm1,XMMWORD PTR 32[esi] 
-	xorps	xmm2,xmm6 
-	movups	xmm0,XMMWORD PTR 48[esi] 
-	xorps	xmm3,xmm7 
-	movups	XMMWORD PTR [edi],xmm2 
-	xorps	xmm4,xmm1 
-	movups	XMMWORD PTR 16[edi],xmm3 
-	xorps	xmm5,xmm0 
-	movups	XMMWORD PTR 32[edi],xmm4 
-	movups	XMMWORD PTR 48[edi],xmm5 
-$L040ctr32_ret: 
-	pxor	xmm0,xmm0 
-	pxor	xmm1,xmm1 
-	pxor	xmm2,xmm2 
-	pxor	xmm3,xmm3 
-	pxor	xmm4,xmm4 
-	movdqa	XMMWORD PTR 32[esp],xmm0 
-	pxor	xmm5,xmm5 
-	movdqa	XMMWORD PTR 48[esp],xmm0 
-	pxor	xmm6,xmm6 
-	movdqa	XMMWORD PTR 64[esp],xmm0 
-	pxor	xmm7,xmm7 
-	mov	esp,DWORD PTR 80[esp] 
-	pop	edi 
-	pop	esi 
-	pop	ebx 
-	pop	ebp 
-	ret 
-_aesni_ctr32_encrypt_blocks ENDP 
-ALIGN	16 
-_aesni_xts_encrypt	PROC PUBLIC 
-$L_aesni_xts_encrypt_begin:: 
-	push	ebp 
-	push	ebx 
-	push	esi 
-	push	edi 
-	mov	edx,DWORD PTR 36[esp] 
-	mov	esi,DWORD PTR 40[esp] 
-	mov	ecx,DWORD PTR 240[edx] 
-	movups	xmm2,XMMWORD PTR [esi] 
-	movups	xmm0,XMMWORD PTR [edx] 
-	movups	xmm1,XMMWORD PTR 16[edx] 
-	lea	edx,DWORD PTR 32[edx] 
-	xorps	xmm2,xmm0 
-$L046enc1_loop_8: 
-DB	102,15,56,220,209 
-	dec	ecx 
-	movups	xmm1,XMMWORD PTR [edx] 
-	lea	edx,DWORD PTR 16[edx] 
-	jnz	$L046enc1_loop_8 
-DB	102,15,56,221,209 
-	mov	esi,DWORD PTR 20[esp] 
-	mov	edi,DWORD PTR 24[esp] 
-	mov	eax,DWORD PTR 28[esp] 
-	mov	edx,DWORD PTR 32[esp] 
-	mov	ebp,esp 
-	sub	esp,120 
-	mov	ecx,DWORD PTR 240[edx] 
-	and	esp,-16 
-	mov	DWORD PTR 96[esp],135 
-	mov	DWORD PTR 100[esp],0 
-	mov	DWORD PTR 104[esp],1 
-	mov	DWORD PTR 108[esp],0 
-	mov	DWORD PTR 112[esp],eax 
-	mov	DWORD PTR 116[esp],ebp 
-	movdqa	xmm1,xmm2 
-	pxor	xmm0,xmm0 
-	movdqa	xmm3,XMMWORD PTR 96[esp] 
-	pcmpgtd	xmm0,xmm1 
-	and	eax,-16 
-	mov	ebp,edx 
-	mov	ebx,ecx 
-	sub	eax,96 
-	jc	$L047xts_enc_short 
-	shl	ecx,4 
-	mov	ebx,16 
-	sub	ebx,ecx 
-	lea	edx,DWORD PTR 32[ecx*1+edx] 
-	jmp	$L048xts_enc_loop6 
-ALIGN	16 
-$L048xts_enc_loop6: 
-	pshufd	xmm2,xmm0,19 
-	pxor	xmm0,xmm0 
-	movdqa	XMMWORD PTR [esp],xmm1 
-	paddq	xmm1,xmm1 
-	pand	xmm2,xmm3 
-	pcmpgtd	xmm0,xmm1 
-	pxor	xmm1,xmm2 
-	pshufd	xmm2,xmm0,19 
-	pxor	xmm0,xmm0 
-	movdqa	XMMWORD PTR 16[esp],xmm1 
-	paddq	xmm1,xmm1 
-	pand	xmm2,xmm3 
-	pcmpgtd	xmm0,xmm1 
-	pxor	xmm1,xmm2 
-	pshufd	xmm2,xmm0,19 
-	pxor	xmm0,xmm0 
-	movdqa	XMMWORD PTR 32[esp],xmm1 
-	paddq	xmm1,xmm1 
-	pand	xmm2,xmm3 
-	pcmpgtd	xmm0,xmm1 
-	pxor	xmm1,xmm2 
-	pshufd	xmm2,xmm0,19 
-	pxor	xmm0,xmm0 
-	movdqa	XMMWORD PTR 48[esp],xmm1 
-	paddq	xmm1,xmm1 
-	pand	xmm2,xmm3 
-	pcmpgtd	xmm0,xmm1 
-	pxor	xmm1,xmm2 
-	pshufd	xmm7,xmm0,19 
-	movdqa	XMMWORD PTR 64[esp],xmm1 
-	paddq	xmm1,xmm1 
-	movups	xmm0,XMMWORD PTR [ebp] 
-	pand	xmm7,xmm3 
-	movups	xmm2,XMMWORD PTR [esi] 
-	pxor	xmm7,xmm1 
-	mov	ecx,ebx 
-	movdqu	xmm3,XMMWORD PTR 16[esi] 
-	xorps	xmm2,xmm0 
-	movdqu	xmm4,XMMWORD PTR 32[esi] 
-	pxor	xmm3,xmm0 
-	movdqu	xmm5,XMMWORD PTR 48[esi] 
-	pxor	xmm4,xmm0 
-	movdqu	xmm6,XMMWORD PTR 64[esi] 
-	pxor	xmm5,xmm0 
-	movdqu	xmm1,XMMWORD PTR 80[esi] 
-	pxor	xmm6,xmm0 
-	lea	esi,DWORD PTR 96[esi] 
-	pxor	xmm2,XMMWORD PTR [esp] 
-	movdqa	XMMWORD PTR 80[esp],xmm7 
-	pxor	xmm7,xmm1 
-	movups	xmm1,XMMWORD PTR 16[ebp] 
-	pxor	xmm3,XMMWORD PTR 16[esp] 
-	pxor	xmm4,XMMWORD PTR 32[esp] 
-DB	102,15,56,220,209 
-	pxor	xmm5,XMMWORD PTR 48[esp] 
-	pxor	xmm6,XMMWORD PTR 64[esp] 
-DB	102,15,56,220,217 
-	pxor	xmm7,xmm0 
-	movups	xmm0,XMMWORD PTR 32[ebp] 
-DB	102,15,56,220,225 
-DB	102,15,56,220,233 
-DB	102,15,56,220,241 
-DB	102,15,56,220,249 
-	call	$L_aesni_encrypt6_enter 
-	movdqa	xmm1,XMMWORD PTR 80[esp] 
-	pxor	xmm0,xmm0 
-	xorps	xmm2,XMMWORD PTR [esp] 
-	pcmpgtd	xmm0,xmm1 
-	xorps	xmm3,XMMWORD PTR 16[esp] 
-	movups	XMMWORD PTR [edi],xmm2 
-	xorps	xmm4,XMMWORD PTR 32[esp] 
-	movups	XMMWORD PTR 16[edi],xmm3 
-	xorps	xmm5,XMMWORD PTR 48[esp] 
-	movups	XMMWORD PTR 32[edi],xmm4 
-	xorps	xmm6,XMMWORD PTR 64[esp] 
-	movups	XMMWORD PTR 48[edi],xmm5 
-	xorps	xmm7,xmm1 
-	movups	XMMWORD PTR 64[edi],xmm6 
-	pshufd	xmm2,xmm0,19 
-	movups	XMMWORD PTR 80[edi],xmm7 
-	lea	edi,DWORD PTR 96[edi] 
-	movdqa	xmm3,XMMWORD PTR 96[esp] 
-	pxor	xmm0,xmm0 
-	paddq	xmm1,xmm1 
-	pand	xmm2,xmm3 
-	pcmpgtd	xmm0,xmm1 
-	pxor	xmm1,xmm2 
-	sub	eax,96 
-	jnc	$L048xts_enc_loop6 
-	mov	ecx,DWORD PTR 240[ebp] 
-	mov	edx,ebp 
-	mov	ebx,ecx 
-$L047xts_enc_short: 
-	add	eax,96 
-	jz	$L049xts_enc_done6x 
-	movdqa	xmm5,xmm1 
-	cmp	eax,32 
-	jb	$L050xts_enc_one 
-	pshufd	xmm2,xmm0,19 
-	pxor	xmm0,xmm0 
-	paddq	xmm1,xmm1 
-	pand	xmm2,xmm3 
-	pcmpgtd	xmm0,xmm1 
-	pxor	xmm1,xmm2 
-	je	$L051xts_enc_two 
-	pshufd	xmm2,xmm0,19 
-	pxor	xmm0,xmm0 
-	movdqa	xmm6,xmm1 
-	paddq	xmm1,xmm1 
-	pand	xmm2,xmm3 
-	pcmpgtd	xmm0,xmm1 
-	pxor	xmm1,xmm2 
-	cmp	eax,64 
-	jb	$L052xts_enc_three 
-	pshufd	xmm2,xmm0,19 
-	pxor	xmm0,xmm0 
-	movdqa	xmm7,xmm1 
-	paddq	xmm1,xmm1 
-	pand	xmm2,xmm3 
-	pcmpgtd	xmm0,xmm1 
-	pxor	xmm1,xmm2 
-	movdqa	XMMWORD PTR [esp],xmm5 
-	movdqa	XMMWORD PTR 16[esp],xmm6 
-	je	$L053xts_enc_four 
-	movdqa	XMMWORD PTR 32[esp],xmm7 
-	pshufd	xmm7,xmm0,19 
-	movdqa	XMMWORD PTR 48[esp],xmm1 
-	paddq	xmm1,xmm1 
-	pand	xmm7,xmm3 
-	pxor	xmm7,xmm1 
-	movdqu	xmm2,XMMWORD PTR [esi] 
-	movdqu	xmm3,XMMWORD PTR 16[esi] 
-	movdqu	xmm4,XMMWORD PTR 32[esi] 
-	pxor	xmm2,XMMWORD PTR [esp] 
-	movdqu	xmm5,XMMWORD PTR 48[esi] 
-	pxor	xmm3,XMMWORD PTR 16[esp] 
-	movdqu	xmm6,XMMWORD PTR 64[esi] 
-	pxor	xmm4,XMMWORD PTR 32[esp] 
-	lea	esi,DWORD PTR 80[esi] 
-	pxor	xmm5,XMMWORD PTR 48[esp] 
-	movdqa	XMMWORD PTR 64[esp],xmm7 
-	pxor	xmm6,xmm7 
-	call	__aesni_encrypt6 
-	movaps	xmm1,XMMWORD PTR 64[esp] 
-	xorps	xmm2,XMMWORD PTR [esp] 
-	xorps	xmm3,XMMWORD PTR 16[esp] 
-	xorps	xmm4,XMMWORD PTR 32[esp] 
-	movups	XMMWORD PTR [edi],xmm2 
-	xorps	xmm5,XMMWORD PTR 48[esp] 
-	movups	XMMWORD PTR 16[edi],xmm3 
-	xorps	xmm6,xmm1 
-	movups	XMMWORD PTR 32[edi],xmm4 
-	movups	XMMWORD PTR 48[edi],xmm5 
-	movups	XMMWORD PTR 64[edi],xmm6 
-	lea	edi,DWORD PTR 80[edi] 
-	jmp	$L054xts_enc_done 
-ALIGN	16 
-$L050xts_enc_one: 
-	movups	xmm2,XMMWORD PTR [esi] 
-	lea	esi,DWORD PTR 16[esi] 
-	xorps	xmm2,xmm5 
-	movups	xmm0,XMMWORD PTR [edx] 
-	movups	xmm1,XMMWORD PTR 16[edx] 
-	lea	edx,DWORD PTR 32[edx] 
-	xorps	xmm2,xmm0 
-$L055enc1_loop_9: 
-DB	102,15,56,220,209 
-	dec	ecx 
-	movups	xmm1,XMMWORD PTR [edx] 
-	lea	edx,DWORD PTR 16[edx] 
-	jnz	$L055enc1_loop_9 
-DB	102,15,56,221,209 
-	xorps	xmm2,xmm5 
-	movups	XMMWORD PTR [edi],xmm2 
-	lea	edi,DWORD PTR 16[edi] 
-	movdqa	xmm1,xmm5 
-	jmp	$L054xts_enc_done 
-ALIGN	16 
-$L051xts_enc_two: 
-	movaps	xmm6,xmm1 
-	movups	xmm2,XMMWORD PTR [esi] 
-	movups	xmm3,XMMWORD PTR 16[esi] 
-	lea	esi,DWORD PTR 32[esi] 
-	xorps	xmm2,xmm5 
-	xorps	xmm3,xmm6 
-	call	__aesni_encrypt2 
-	xorps	xmm2,xmm5 
-	xorps	xmm3,xmm6 
-	movups	XMMWORD PTR [edi],xmm2 
-	movups	XMMWORD PTR 16[edi],xmm3 
-	lea	edi,DWORD PTR 32[edi] 
-	movdqa	xmm1,xmm6 
-	jmp	$L054xts_enc_done 
-ALIGN	16 
-$L052xts_enc_three: 
-	movaps	xmm7,xmm1 
-	movups	xmm2,XMMWORD PTR [esi] 
-	movups	xmm3,XMMWORD PTR 16[esi] 
-	movups	xmm4,XMMWORD PTR 32[esi] 
-	lea	esi,DWORD PTR 48[esi] 
-	xorps	xmm2,xmm5 
-	xorps	xmm3,xmm6 
-	xorps	xmm4,xmm7 
-	call	__aesni_encrypt3 
-	xorps	xmm2,xmm5 
-	xorps	xmm3,xmm6 
-	xorps	xmm4,xmm7 
-	movups	XMMWORD PTR [edi],xmm2 
-	movups	XMMWORD PTR 16[edi],xmm3 
-	movups	XMMWORD PTR 32[edi],xmm4 
-	lea	edi,DWORD PTR 48[edi] 
-	movdqa	xmm1,xmm7 
-	jmp	$L054xts_enc_done 
-ALIGN	16 
-$L053xts_enc_four: 
-	movaps	xmm6,xmm1 
-	movups	xmm2,XMMWORD PTR [esi] 
-	movups	xmm3,XMMWORD PTR 16[esi] 
-	movups	xmm4,XMMWORD PTR 32[esi] 
-	xorps	xmm2,XMMWORD PTR [esp] 
-	movups	xmm5,XMMWORD PTR 48[esi] 
-	lea	esi,DWORD PTR 64[esi] 
-	xorps	xmm3,XMMWORD PTR 16[esp] 
-	xorps	xmm4,xmm7 
-	xorps	xmm5,xmm6 
-	call	__aesni_encrypt4 
-	xorps	xmm2,XMMWORD PTR [esp] 
-	xorps	xmm3,XMMWORD PTR 16[esp] 
-	xorps	xmm4,xmm7 
-	movups	XMMWORD PTR [edi],xmm2 
-	xorps	xmm5,xmm6 
-	movups	XMMWORD PTR 16[edi],xmm3 
-	movups	XMMWORD PTR 32[edi],xmm4 
-	movups	XMMWORD PTR 48[edi],xmm5 
-	lea	edi,DWORD PTR 64[edi] 
-	movdqa	xmm1,xmm6 
-	jmp	$L054xts_enc_done 
-ALIGN	16 
-$L049xts_enc_done6x: 
-	mov	eax,DWORD PTR 112[esp] 
-	and	eax,15 
-	jz	$L056xts_enc_ret 
-	movdqa	xmm5,xmm1 
-	mov	DWORD PTR 112[esp],eax 
-	jmp	$L057xts_enc_steal 
-ALIGN	16 
-$L054xts_enc_done: 
-	mov	eax,DWORD PTR 112[esp] 
-	pxor	xmm0,xmm0 
-	and	eax,15 
-	jz	$L056xts_enc_ret 
-	pcmpgtd	xmm0,xmm1 
-	mov	DWORD PTR 112[esp],eax 
-	pshufd	xmm5,xmm0,19 
-	paddq	xmm1,xmm1 
-	pand	xmm5,XMMWORD PTR 96[esp] 
-	pxor	xmm5,xmm1 
-$L057xts_enc_steal: 
-	movzx	ecx,BYTE PTR [esi] 
-	movzx	edx,BYTE PTR [edi-16] 
-	lea	esi,DWORD PTR 1[esi] 
-	mov	BYTE PTR [edi-16],cl 
-	mov	BYTE PTR [edi],dl 
-	lea	edi,DWORD PTR 1[edi] 
-	sub	eax,1 
-	jnz	$L057xts_enc_steal 
-	sub	edi,DWORD PTR 112[esp] 
-	mov	edx,ebp 
-	mov	ecx,ebx 
-	movups	xmm2,XMMWORD PTR [edi-16] 
-	xorps	xmm2,xmm5 
-	movups	xmm0,XMMWORD PTR [edx] 
-	movups	xmm1,XMMWORD PTR 16[edx] 
-	lea	edx,DWORD PTR 32[edx] 
-	xorps	xmm2,xmm0 
-$L058enc1_loop_10: 
-DB	102,15,56,220,209 
-	dec	ecx 
-	movups	xmm1,XMMWORD PTR [edx] 
-	lea	edx,DWORD PTR 16[edx] 
-	jnz	$L058enc1_loop_10 
-DB	102,15,56,221,209 
-	xorps	xmm2,xmm5 
-	movups	XMMWORD PTR [edi-16],xmm2 
-$L056xts_enc_ret: 
-	pxor	xmm0,xmm0 
-	pxor	xmm1,xmm1 
-	pxor	xmm2,xmm2 
-	movdqa	XMMWORD PTR [esp],xmm0 
-	pxor	xmm3,xmm3 
-	movdqa	XMMWORD PTR 16[esp],xmm0 
-	pxor	xmm4,xmm4 
-	movdqa	XMMWORD PTR 32[esp],xmm0 
-	pxor	xmm5,xmm5 
-	movdqa	XMMWORD PTR 48[esp],xmm0 
-	pxor	xmm6,xmm6 
-	movdqa	XMMWORD PTR 64[esp],xmm0 
-	pxor	xmm7,xmm7 
-	movdqa	XMMWORD PTR 80[esp],xmm0 
-	mov	esp,DWORD PTR 116[esp] 
-	pop	edi 
-	pop	esi 
-	pop	ebx 
-	pop	ebp 
-	ret 
-_aesni_xts_encrypt ENDP 
-ALIGN	16 
-_aesni_xts_decrypt	PROC PUBLIC 
-$L_aesni_xts_decrypt_begin:: 
-	push	ebp 
-	push	ebx 
-	push	esi 
-	push	edi 
-	mov	edx,DWORD PTR 36[esp] 
-	mov	esi,DWORD PTR 40[esp] 
-	mov	ecx,DWORD PTR 240[edx] 
-	movups	xmm2,XMMWORD PTR [esi] 
-	movups	xmm0,XMMWORD PTR [edx] 
-	movups	xmm1,XMMWORD PTR 16[edx] 
-	lea	edx,DWORD PTR 32[edx] 
-	xorps	xmm2,xmm0 
-$L059enc1_loop_11: 
-DB	102,15,56,220,209 
-	dec	ecx 
-	movups	xmm1,XMMWORD PTR [edx] 
-	lea	edx,DWORD PTR 16[edx] 
-	jnz	$L059enc1_loop_11 
-DB	102,15,56,221,209 
-	mov	esi,DWORD PTR 20[esp] 
-	mov	edi,DWORD PTR 24[esp] 
-	mov	eax,DWORD PTR 28[esp] 
-	mov	edx,DWORD PTR 32[esp] 
-	mov	ebp,esp 
-	sub	esp,120 
-	and	esp,-16 
-	xor	ebx,ebx 
-	test	eax,15 
-	setnz	bl 
-	shl	ebx,4 
-	sub	eax,ebx 
-	mov	DWORD PTR 96[esp],135 
-	mov	DWORD PTR 100[esp],0 
-	mov	DWORD PTR 104[esp],1 
-	mov	DWORD PTR 108[esp],0 
-	mov	DWORD PTR 112[esp],eax 
-	mov	DWORD PTR 116[esp],ebp 
-	mov	ecx,DWORD PTR 240[edx] 
-	mov	ebp,edx 
-	mov	ebx,ecx 
-	movdqa	xmm1,xmm2 
-	pxor	xmm0,xmm0 
-	movdqa	xmm3,XMMWORD PTR 96[esp] 
-	pcmpgtd	xmm0,xmm1 
-	and	eax,-16 
-	sub	eax,96 
-	jc	$L060xts_dec_short 
-	shl	ecx,4 
-	mov	ebx,16 
-	sub	ebx,ecx 
-	lea	edx,DWORD PTR 32[ecx*1+edx] 
-	jmp	$L061xts_dec_loop6 
-ALIGN	16 
-$L061xts_dec_loop6: 
-	pshufd	xmm2,xmm0,19 
-	pxor	xmm0,xmm0 
-	movdqa	XMMWORD PTR [esp],xmm1 
-	paddq	xmm1,xmm1 
-	pand	xmm2,xmm3 
-	pcmpgtd	xmm0,xmm1 
-	pxor	xmm1,xmm2 
-	pshufd	xmm2,xmm0,19 
-	pxor	xmm0,xmm0 
-	movdqa	XMMWORD PTR 16[esp],xmm1 
-	paddq	xmm1,xmm1 
-	pand	xmm2,xmm3 
-	pcmpgtd	xmm0,xmm1 
-	pxor	xmm1,xmm2 
-	pshufd	xmm2,xmm0,19 
-	pxor	xmm0,xmm0 
-	movdqa	XMMWORD PTR 32[esp],xmm1 
-	paddq	xmm1,xmm1 
-	pand	xmm2,xmm3 
-	pcmpgtd	xmm0,xmm1 
-	pxor	xmm1,xmm2 
-	pshufd	xmm2,xmm0,19 
-	pxor	xmm0,xmm0 
-	movdqa	XMMWORD PTR 48[esp],xmm1 
-	paddq	xmm1,xmm1 
-	pand	xmm2,xmm3 
-	pcmpgtd	xmm0,xmm1 
-	pxor	xmm1,xmm2 
-	pshufd	xmm7,xmm0,19 
-	movdqa	XMMWORD PTR 64[esp],xmm1 
-	paddq	xmm1,xmm1 
-	movups	xmm0,XMMWORD PTR [ebp] 
-	pand	xmm7,xmm3 
-	movups	xmm2,XMMWORD PTR [esi] 
-	pxor	xmm7,xmm1 
-	mov	ecx,ebx 
-	movdqu	xmm3,XMMWORD PTR 16[esi] 
-	xorps	xmm2,xmm0 
-	movdqu	xmm4,XMMWORD PTR 32[esi] 
-	pxor	xmm3,xmm0 
-	movdqu	xmm5,XMMWORD PTR 48[esi] 
-	pxor	xmm4,xmm0 
-	movdqu	xmm6,XMMWORD PTR 64[esi] 
-	pxor	xmm5,xmm0 
-	movdqu	xmm1,XMMWORD PTR 80[esi] 
-	pxor	xmm6,xmm0 
-	lea	esi,DWORD PTR 96[esi] 
-	pxor	xmm2,XMMWORD PTR [esp] 
-	movdqa	XMMWORD PTR 80[esp],xmm7 
-	pxor	xmm7,xmm1 
-	movups	xmm1,XMMWORD PTR 16[ebp] 
-	pxor	xmm3,XMMWORD PTR 16[esp] 
-	pxor	xmm4,XMMWORD PTR 32[esp] 
-DB	102,15,56,222,209 
-	pxor	xmm5,XMMWORD PTR 48[esp] 
-	pxor	xmm6,XMMWORD PTR 64[esp] 
-DB	102,15,56,222,217 
-	pxor	xmm7,xmm0 
-	movups	xmm0,XMMWORD PTR 32[ebp] 
-DB	102,15,56,222,225 
-DB	102,15,56,222,233 
-DB	102,15,56,222,241 
-DB	102,15,56,222,249 
-	call	$L_aesni_decrypt6_enter 
-	movdqa	xmm1,XMMWORD PTR 80[esp] 
-	pxor	xmm0,xmm0 
-	xorps	xmm2,XMMWORD PTR [esp] 
-	pcmpgtd	xmm0,xmm1 
-	xorps	xmm3,XMMWORD PTR 16[esp] 
-	movups	XMMWORD PTR [edi],xmm2 
-	xorps	xmm4,XMMWORD PTR 32[esp] 
-	movups	XMMWORD PTR 16[edi],xmm3 
-	xorps	xmm5,XMMWORD PTR 48[esp] 
-	movups	XMMWORD PTR 32[edi],xmm4 
-	xorps	xmm6,XMMWORD PTR 64[esp] 
-	movups	XMMWORD PTR 48[edi],xmm5 
-	xorps	xmm7,xmm1 
-	movups	XMMWORD PTR 64[edi],xmm6 
-	pshufd	xmm2,xmm0,19 
-	movups	XMMWORD PTR 80[edi],xmm7 
-	lea	edi,DWORD PTR 96[edi] 
-	movdqa	xmm3,XMMWORD PTR 96[esp] 
-	pxor	xmm0,xmm0 
-	paddq	xmm1,xmm1 
-	pand	xmm2,xmm3 
-	pcmpgtd	xmm0,xmm1 
-	pxor	xmm1,xmm2 
-	sub	eax,96 
-	jnc	$L061xts_dec_loop6 
-	mov	ecx,DWORD PTR 240[ebp] 
-	mov	edx,ebp 
-	mov	ebx,ecx 
-$L060xts_dec_short: 
-	add	eax,96 
-	jz	$L062xts_dec_done6x 
-	movdqa	xmm5,xmm1 
-	cmp	eax,32 
-	jb	$L063xts_dec_one 
-	pshufd	xmm2,xmm0,19 
-	pxor	xmm0,xmm0 
-	paddq	xmm1,xmm1 
-	pand	xmm2,xmm3 
-	pcmpgtd	xmm0,xmm1 
-	pxor	xmm1,xmm2 
-	je	$L064xts_dec_two 
-	pshufd	xmm2,xmm0,19 
-	pxor	xmm0,xmm0 
-	movdqa	xmm6,xmm1 
-	paddq	xmm1,xmm1 
-	pand	xmm2,xmm3 
-	pcmpgtd	xmm0,xmm1 
-	pxor	xmm1,xmm2 
-	cmp	eax,64 
-	jb	$L065xts_dec_three 
-	pshufd	xmm2,xmm0,19 
-	pxor	xmm0,xmm0 
-	movdqa	xmm7,xmm1 
-	paddq	xmm1,xmm1 
-	pand	xmm2,xmm3 
-	pcmpgtd	xmm0,xmm1 
-	pxor	xmm1,xmm2 
-	movdqa	XMMWORD PTR [esp],xmm5 
-	movdqa	XMMWORD PTR 16[esp],xmm6 
-	je	$L066xts_dec_four 
-	movdqa	XMMWORD PTR 32[esp],xmm7 
-	pshufd	xmm7,xmm0,19 
-	movdqa	XMMWORD PTR 48[esp],xmm1 
-	paddq	xmm1,xmm1 
-	pand	xmm7,xmm3 
-	pxor	xmm7,xmm1 
-	movdqu	xmm2,XMMWORD PTR [esi] 
-	movdqu	xmm3,XMMWORD PTR 16[esi] 
-	movdqu	xmm4,XMMWORD PTR 32[esi] 
-	pxor	xmm2,XMMWORD PTR [esp] 
-	movdqu	xmm5,XMMWORD PTR 48[esi] 
-	pxor	xmm3,XMMWORD PTR 16[esp] 
-	movdqu	xmm6,XMMWORD PTR 64[esi] 
-	pxor	xmm4,XMMWORD PTR 32[esp] 
-	lea	esi,DWORD PTR 80[esi] 
-	pxor	xmm5,XMMWORD PTR 48[esp] 
-	movdqa	XMMWORD PTR 64[esp],xmm7 
-	pxor	xmm6,xmm7 
-	call	__aesni_decrypt6 
-	movaps	xmm1,XMMWORD PTR 64[esp] 
-	xorps	xmm2,XMMWORD PTR [esp] 
-	xorps	xmm3,XMMWORD PTR 16[esp] 
-	xorps	xmm4,XMMWORD PTR 32[esp] 
-	movups	XMMWORD PTR [edi],xmm2 
-	xorps	xmm5,XMMWORD PTR 48[esp] 
-	movups	XMMWORD PTR 16[edi],xmm3 
-	xorps	xmm6,xmm1 
-	movups	XMMWORD PTR 32[edi],xmm4 
-	movups	XMMWORD PTR 48[edi],xmm5 
-	movups	XMMWORD PTR 64[edi],xmm6 
-	lea	edi,DWORD PTR 80[edi] 
-	jmp	$L067xts_dec_done 
-ALIGN	16 
-$L063xts_dec_one: 
-	movups	xmm2,XMMWORD PTR [esi] 
-	lea	esi,DWORD PTR 16[esi] 
-	xorps	xmm2,xmm5 
-	movups	xmm0,XMMWORD PTR [edx] 
-	movups	xmm1,XMMWORD PTR 16[edx] 
-	lea	edx,DWORD PTR 32[edx] 
-	xorps	xmm2,xmm0 
-$L068dec1_loop_12: 
-DB	102,15,56,222,209 
-	dec	ecx 
-	movups	xmm1,XMMWORD PTR [edx] 
-	lea	edx,DWORD PTR 16[edx] 
-	jnz	$L068dec1_loop_12 
-DB	102,15,56,223,209 
-	xorps	xmm2,xmm5 
-	movups	XMMWORD PTR [edi],xmm2 
-	lea	edi,DWORD PTR 16[edi] 
-	movdqa	xmm1,xmm5 
-	jmp	$L067xts_dec_done 
-ALIGN	16 
-$L064xts_dec_two: 
-	movaps	xmm6,xmm1 
-	movups	xmm2,XMMWORD PTR [esi] 
-	movups	xmm3,XMMWORD PTR 16[esi] 
-	lea	esi,DWORD PTR 32[esi] 
-	xorps	xmm2,xmm5 
-	xorps	xmm3,xmm6 
-	call	__aesni_decrypt2 
-	xorps	xmm2,xmm5 
-	xorps	xmm3,xmm6 
-	movups	XMMWORD PTR [edi],xmm2 
-	movups	XMMWORD PTR 16[edi],xmm3 
-	lea	edi,DWORD PTR 32[edi] 
-	movdqa	xmm1,xmm6 
-	jmp	$L067xts_dec_done 
-ALIGN	16 
-$L065xts_dec_three: 
-	movaps	xmm7,xmm1 
-	movups	xmm2,XMMWORD PTR [esi] 
-	movups	xmm3,XMMWORD PTR 16[esi] 
-	movups	xmm4,XMMWORD PTR 32[esi] 
-	lea	esi,DWORD PTR 48[esi] 
-	xorps	xmm2,xmm5 
-	xorps	xmm3,xmm6 
-	xorps	xmm4,xmm7 
-	call	__aesni_decrypt3 
-	xorps	xmm2,xmm5 
-	xorps	xmm3,xmm6 
-	xorps	xmm4,xmm7 
-	movups	XMMWORD PTR [edi],xmm2 
-	movups	XMMWORD PTR 16[edi],xmm3 
-	movups	XMMWORD PTR 32[edi],xmm4 
-	lea	edi,DWORD PTR 48[edi] 
-	movdqa	xmm1,xmm7 
-	jmp	$L067xts_dec_done 
-ALIGN	16 
-$L066xts_dec_four: 
-	movaps	xmm6,xmm1 
-	movups	xmm2,XMMWORD PTR [esi] 
-	movups	xmm3,XMMWORD PTR 16[esi] 
-	movups	xmm4,XMMWORD PTR 32[esi] 
-	xorps	xmm2,XMMWORD PTR [esp] 
-	movups	xmm5,XMMWORD PTR 48[esi] 
-	lea	esi,DWORD PTR 64[esi] 
-	xorps	xmm3,XMMWORD PTR 16[esp] 
-	xorps	xmm4,xmm7 
-	xorps	xmm5,xmm6 
-	call	__aesni_decrypt4 
-	xorps	xmm2,XMMWORD PTR [esp] 
-	xorps	xmm3,XMMWORD PTR 16[esp] 
-	xorps	xmm4,xmm7 
-	movups	XMMWORD PTR [edi],xmm2 
-	xorps	xmm5,xmm6 
-	movups	XMMWORD PTR 16[edi],xmm3 
-	movups	XMMWORD PTR 32[edi],xmm4 
-	movups	XMMWORD PTR 48[edi],xmm5 
-	lea	edi,DWORD PTR 64[edi] 
-	movdqa	xmm1,xmm6 
-	jmp	$L067xts_dec_done 
-ALIGN	16 
-$L062xts_dec_done6x: 
-	mov	eax,DWORD PTR 112[esp] 
-	and	eax,15 
-	jz	$L069xts_dec_ret 
-	mov	DWORD PTR 112[esp],eax 
-	jmp	$L070xts_dec_only_one_more 
-ALIGN	16 
-$L067xts_dec_done: 
-	mov	eax,DWORD PTR 112[esp] 
-	pxor	xmm0,xmm0 
-	and	eax,15 
-	jz	$L069xts_dec_ret 
-	pcmpgtd	xmm0,xmm1 
-	mov	DWORD PTR 112[esp],eax 
-	pshufd	xmm2,xmm0,19 
-	pxor	xmm0,xmm0 
-	movdqa	xmm3,XMMWORD PTR 96[esp] 
-	paddq	xmm1,xmm1 
-	pand	xmm2,xmm3 
-	pcmpgtd	xmm0,xmm1 
-	pxor	xmm1,xmm2 
-$L070xts_dec_only_one_more: 
-	pshufd	xmm5,xmm0,19 
-	movdqa	xmm6,xmm1 
-	paddq	xmm1,xmm1 
-	pand	xmm5,xmm3 
-	pxor	xmm5,xmm1 
-	mov	edx,ebp 
-	mov	ecx,ebx 
-	movups	xmm2,XMMWORD PTR [esi] 
-	xorps	xmm2,xmm5 
-	movups	xmm0,XMMWORD PTR [edx] 
-	movups	xmm1,XMMWORD PTR 16[edx] 
-	lea	edx,DWORD PTR 32[edx] 
-	xorps	xmm2,xmm0 
-$L071dec1_loop_13: 
-DB	102,15,56,222,209 
-	dec	ecx 
-	movups	xmm1,XMMWORD PTR [edx] 
-	lea	edx,DWORD PTR 16[edx] 
-	jnz	$L071dec1_loop_13 
-DB	102,15,56,223,209 
-	xorps	xmm2,xmm5 
-	movups	XMMWORD PTR [edi],xmm2 
-$L072xts_dec_steal: 
-	movzx	ecx,BYTE PTR 16[esi] 
-	movzx	edx,BYTE PTR [edi] 
-	lea	esi,DWORD PTR 1[esi] 
-	mov	BYTE PTR [edi],cl 
-	mov	BYTE PTR 16[edi],dl 
-	lea	edi,DWORD PTR 1[edi] 
-	sub	eax,1 
-	jnz	$L072xts_dec_steal 
-	sub	edi,DWORD PTR 112[esp] 
-	mov	edx,ebp 
-	mov	ecx,ebx 
-	movups	xmm2,XMMWORD PTR [edi] 
-	xorps	xmm2,xmm6 
-	movups	xmm0,XMMWORD PTR [edx] 
-	movups	xmm1,XMMWORD PTR 16[edx] 
-	lea	edx,DWORD PTR 32[edx] 
-	xorps	xmm2,xmm0 
-$L073dec1_loop_14: 
-DB	102,15,56,222,209 
-	dec	ecx 
-	movups	xmm1,XMMWORD PTR [edx] 
-	lea	edx,DWORD PTR 16[edx] 
-	jnz	$L073dec1_loop_14 
-DB	102,15,56,223,209 
-	xorps	xmm2,xmm6 
-	movups	XMMWORD PTR [edi],xmm2 
-$L069xts_dec_ret: 
-	pxor	xmm0,xmm0 
-	pxor	xmm1,xmm1 
-	pxor	xmm2,xmm2 
-	movdqa	XMMWORD PTR [esp],xmm0 
-	pxor	xmm3,xmm3 
-	movdqa	XMMWORD PTR 16[esp],xmm0 
-	pxor	xmm4,xmm4 
-	movdqa	XMMWORD PTR 32[esp],xmm0 
-	pxor	xmm5,xmm5 
-	movdqa	XMMWORD PTR 48[esp],xmm0 
-	pxor	xmm6,xmm6 
-	movdqa	XMMWORD PTR 64[esp],xmm0 
-	pxor	xmm7,xmm7 
-	movdqa	XMMWORD PTR 80[esp],xmm0 
-	mov	esp,DWORD PTR 116[esp] 
-	pop	edi 
-	pop	esi 
-	pop	ebx 
-	pop	ebp 
-	ret 
-_aesni_xts_decrypt ENDP 
-ALIGN	16 
-_aesni_ocb_encrypt	PROC PUBLIC 
-$L_aesni_ocb_encrypt_begin:: 
-	push	ebp 
-	push	ebx 
-	push	esi 
-	push	edi 
-	mov	ecx,DWORD PTR 40[esp] 
-	mov	ebx,DWORD PTR 48[esp] 
-	mov	esi,DWORD PTR 20[esp] 
-	mov	edi,DWORD PTR 24[esp] 
-	mov	eax,DWORD PTR 28[esp] 
-	mov	edx,DWORD PTR 32[esp] 
-	movdqu	xmm0,XMMWORD PTR [ecx] 
-	mov	ebp,DWORD PTR 36[esp] 
-	movdqu	xmm1,XMMWORD PTR [ebx] 
-	mov	ebx,DWORD PTR 44[esp] 
-	mov	ecx,esp 
-	sub	esp,132 
-	and	esp,-16 
-	sub	edi,esi 
-	shl	eax,4 
-	lea	eax,DWORD PTR [eax*1+esi-96] 
-	mov	DWORD PTR 120[esp],edi 
-	mov	DWORD PTR 124[esp],eax 
-	mov	DWORD PTR 128[esp],ecx 
-	mov	ecx,DWORD PTR 240[edx] 
-	test	ebp,1 
-	jnz	$L074odd 
-	bsf	eax,ebp 
-	add	ebp,1 
-	shl	eax,4 
-	movdqu	xmm7,XMMWORD PTR [eax*1+ebx] 
-	mov	eax,edx 
-	movdqu	xmm2,XMMWORD PTR [esi] 
-	lea	esi,DWORD PTR 16[esi] 
-	pxor	xmm7,xmm0 
-	pxor	xmm1,xmm2 
-	pxor	xmm2,xmm7 
-	movdqa	xmm6,xmm1 
-	movups	xmm0,XMMWORD PTR [edx] 
-	movups	xmm1,XMMWORD PTR 16[edx] 
-	lea	edx,DWORD PTR 32[edx] 
-	xorps	xmm2,xmm0 
-$L075enc1_loop_15: 
-DB	102,15,56,220,209 
-	dec	ecx 
-	movups	xmm1,XMMWORD PTR [edx] 
-	lea	edx,DWORD PTR 16[edx] 
-	jnz	$L075enc1_loop_15 
-DB	102,15,56,221,209 
-	xorps	xmm2,xmm7 
-	movdqa	xmm0,xmm7 
-	movdqa	xmm1,xmm6 
-	movups	XMMWORD PTR [esi*1+edi-16],xmm2 
-	mov	ecx,DWORD PTR 240[eax] 
-	mov	edx,eax 
-	mov	eax,DWORD PTR 124[esp] 
-$L074odd: 
-	shl	ecx,4 
-	mov	edi,16 
-	sub	edi,ecx 
-	mov	DWORD PTR 112[esp],edx 
-	lea	edx,DWORD PTR 32[ecx*1+edx] 
-	mov	DWORD PTR 116[esp],edi 
-	cmp	esi,eax 
-	ja	$L076short 
-	jmp	$L077grandloop 
-ALIGN	32 
-$L077grandloop: 
-	lea	ecx,DWORD PTR 1[ebp] 
-	lea	eax,DWORD PTR 3[ebp] 
-	lea	edi,DWORD PTR 5[ebp] 
-	add	ebp,6 
-	bsf	ecx,ecx 
-	bsf	eax,eax 
-	bsf	edi,edi 
-	shl	ecx,4 
-	shl	eax,4 
-	shl	edi,4 
-	movdqu	xmm2,XMMWORD PTR [ebx] 
-	movdqu	xmm3,XMMWORD PTR [ecx*1+ebx] 
-	mov	ecx,DWORD PTR 116[esp] 
-	movdqa	xmm4,xmm2 
-	movdqu	xmm5,XMMWORD PTR [eax*1+ebx] 
-	movdqa	xmm6,xmm2 
-	movdqu	xmm7,XMMWORD PTR [edi*1+ebx] 
-	pxor	xmm2,xmm0 
-	pxor	xmm3,xmm2 
-	movdqa	XMMWORD PTR [esp],xmm2 
-	pxor	xmm4,xmm3 
-	movdqa	XMMWORD PTR 16[esp],xmm3 
-	pxor	xmm5,xmm4 
-	movdqa	XMMWORD PTR 32[esp],xmm4 
-	pxor	xmm6,xmm5 
-	movdqa	XMMWORD PTR 48[esp],xmm5 
-	pxor	xmm7,xmm6 
-	movdqa	XMMWORD PTR 64[esp],xmm6 
-	movdqa	XMMWORD PTR 80[esp],xmm7 
-	movups	xmm0,XMMWORD PTR [ecx*1+edx-48] 
-	movdqu	xmm2,XMMWORD PTR [esi] 
-	movdqu	xmm3,XMMWORD PTR 16[esi] 
-	movdqu	xmm4,XMMWORD PTR 32[esi] 
-	movdqu	xmm5,XMMWORD PTR 48[esi] 
-	movdqu	xmm6,XMMWORD PTR 64[esi] 
-	movdqu	xmm7,XMMWORD PTR 80[esi] 
-	lea	esi,DWORD PTR 96[esi] 
-	pxor	xmm1,xmm2 
-	pxor	xmm2,xmm0 
-	pxor	xmm1,xmm3 
-	pxor	xmm3,xmm0 
-	pxor	xmm1,xmm4 
-	pxor	xmm4,xmm0 
-	pxor	xmm1,xmm5 
-	pxor	xmm5,xmm0 
-	pxor	xmm1,xmm6 
-	pxor	xmm6,xmm0 
-	pxor	xmm1,xmm7 
-	pxor	xmm7,xmm0 
-	movdqa	XMMWORD PTR 96[esp],xmm1 
-	movups	xmm1,XMMWORD PTR [ecx*1+edx-32] 
-	pxor	xmm2,XMMWORD PTR [esp] 
-	pxor	xmm3,XMMWORD PTR 16[esp] 
-	pxor	xmm4,XMMWORD PTR 32[esp] 
-	pxor	xmm5,XMMWORD PTR 48[esp] 
-	pxor	xmm6,XMMWORD PTR 64[esp] 
-	pxor	xmm7,XMMWORD PTR 80[esp] 
-	movups	xmm0,XMMWORD PTR [ecx*1+edx-16] 
-DB	102,15,56,220,209 
-DB	102,15,56,220,217 
-DB	102,15,56,220,225 
-DB	102,15,56,220,233 
-DB	102,15,56,220,241 
-DB	102,15,56,220,249 
-	mov	edi,DWORD PTR 120[esp] 
-	mov	eax,DWORD PTR 124[esp] 
-	call	$L_aesni_encrypt6_enter 
-	movdqa	xmm0,XMMWORD PTR 80[esp] 
-	pxor	xmm2,XMMWORD PTR [esp] 
-	pxor	xmm3,XMMWORD PTR 16[esp] 
-	pxor	xmm4,XMMWORD PTR 32[esp] 
-	pxor	xmm5,XMMWORD PTR 48[esp] 
-	pxor	xmm6,XMMWORD PTR 64[esp] 
-	pxor	xmm7,xmm0 
-	movdqa	xmm1,XMMWORD PTR 96[esp] 
-	movdqu	XMMWORD PTR [esi*1+edi-96],xmm2 
-	movdqu	XMMWORD PTR [esi*1+edi-80],xmm3 
-	movdqu	XMMWORD PTR [esi*1+edi-64],xmm4 
-	movdqu	XMMWORD PTR [esi*1+edi-48],xmm5 
-	movdqu	XMMWORD PTR [esi*1+edi-32],xmm6 
-	movdqu	XMMWORD PTR [esi*1+edi-16],xmm7 
-	cmp	esi,eax 
-	jb	$L077grandloop 
-$L076short: 
-	add	eax,96 
-	sub	eax,esi 
-	jz	$L078done 
-	cmp	eax,32 
-	jb	$L079one 
-	je	$L080two 
-	cmp	eax,64 
-	jb	$L081three 
-	je	$L082four 
-	lea	ecx,DWORD PTR 1[ebp] 
-	lea	eax,DWORD PTR 3[ebp] 
-	bsf	ecx,ecx 
-	bsf	eax,eax 
-	shl	ecx,4 
-	shl	eax,4 
-	movdqu	xmm2,XMMWORD PTR [ebx] 
-	movdqu	xmm3,XMMWORD PTR [ecx*1+ebx] 
-	mov	ecx,DWORD PTR 116[esp] 
-	movdqa	xmm4,xmm2 
-	movdqu	xmm5,XMMWORD PTR [eax*1+ebx] 
-	movdqa	xmm6,xmm2 
-	pxor	xmm2,xmm0 
-	pxor	xmm3,xmm2 
-	movdqa	XMMWORD PTR [esp],xmm2 
-	pxor	xmm4,xmm3 
-	movdqa	XMMWORD PTR 16[esp],xmm3 
-	pxor	xmm5,xmm4 
-	movdqa	XMMWORD PTR 32[esp],xmm4 
-	pxor	xmm6,xmm5 
-	movdqa	XMMWORD PTR 48[esp],xmm5 
-	pxor	xmm7,xmm6 
-	movdqa	XMMWORD PTR 64[esp],xmm6 
-	movups	xmm0,XMMWORD PTR [ecx*1+edx-48] 
-	movdqu	xmm2,XMMWORD PTR [esi] 
-	movdqu	xmm3,XMMWORD PTR 16[esi] 
-	movdqu	xmm4,XMMWORD PTR 32[esi] 
-	movdqu	xmm5,XMMWORD PTR 48[esi] 
-	movdqu	xmm6,XMMWORD PTR 64[esi] 
-	pxor	xmm7,xmm7 
-	pxor	xmm1,xmm2 
-	pxor	xmm2,xmm0 
-	pxor	xmm1,xmm3 
-	pxor	xmm3,xmm0 
-	pxor	xmm1,xmm4 
-	pxor	xmm4,xmm0 
-	pxor	xmm1,xmm5 
-	pxor	xmm5,xmm0 
-	pxor	xmm1,xmm6 
-	pxor	xmm6,xmm0 
-	movdqa	XMMWORD PTR 96[esp],xmm1 
-	movups	xmm1,XMMWORD PTR [ecx*1+edx-32] 
-	pxor	xmm2,XMMWORD PTR [esp] 
-	pxor	xmm3,XMMWORD PTR 16[esp] 
-	pxor	xmm4,XMMWORD PTR 32[esp] 
-	pxor	xmm5,XMMWORD PTR 48[esp] 
-	pxor	xmm6,XMMWORD PTR 64[esp] 
-	movups	xmm0,XMMWORD PTR [ecx*1+edx-16] 
-DB	102,15,56,220,209 
-DB	102,15,56,220,217 
-DB	102,15,56,220,225 
-DB	102,15,56,220,233 
-DB	102,15,56,220,241 
-DB	102,15,56,220,249 
-	mov	edi,DWORD PTR 120[esp] 
-	call	$L_aesni_encrypt6_enter 
-	movdqa	xmm0,XMMWORD PTR 64[esp] 
-	pxor	xmm2,XMMWORD PTR [esp] 
-	pxor	xmm3,XMMWORD PTR 16[esp] 
-	pxor	xmm4,XMMWORD PTR 32[esp] 
-	pxor	xmm5,XMMWORD PTR 48[esp] 
-	pxor	xmm6,xmm0 
-	movdqa	xmm1,XMMWORD PTR 96[esp] 
-	movdqu	XMMWORD PTR [esi*1+edi],xmm2 
-	movdqu	XMMWORD PTR 16[esi*1+edi],xmm3 
-	movdqu	XMMWORD PTR 32[esi*1+edi],xmm4 
-	movdqu	XMMWORD PTR 48[esi*1+edi],xmm5 
-	movdqu	XMMWORD PTR 64[esi*1+edi],xmm6 
-	jmp	$L078done 
-ALIGN	16 
-$L079one: 
-	movdqu	xmm7,XMMWORD PTR [ebx] 
-	mov	edx,DWORD PTR 112[esp] 
-	movdqu	xmm2,XMMWORD PTR [esi] 
-	mov	ecx,DWORD PTR 240[edx] 
-	pxor	xmm7,xmm0 
-	pxor	xmm1,xmm2 
-	pxor	xmm2,xmm7 
-	movdqa	xmm6,xmm1 
-	mov	edi,DWORD PTR 120[esp] 
-	movups	xmm0,XMMWORD PTR [edx] 
-	movups	xmm1,XMMWORD PTR 16[edx] 
-	lea	edx,DWORD PTR 32[edx] 
-	xorps	xmm2,xmm0 
-$L083enc1_loop_16: 
-DB	102,15,56,220,209 
-	dec	ecx 
-	movups	xmm1,XMMWORD PTR [edx] 
-	lea	edx,DWORD PTR 16[edx] 
-	jnz	$L083enc1_loop_16 
-DB	102,15,56,221,209 
-	xorps	xmm2,xmm7 
-	movdqa	xmm0,xmm7 
-	movdqa	xmm1,xmm6 
-	movups	XMMWORD PTR [esi*1+edi],xmm2 
-	jmp	$L078done 
-ALIGN	16 
-$L080two: 
-	lea	ecx,DWORD PTR 1[ebp] 
-	mov	edx,DWORD PTR 112[esp] 
-	bsf	ecx,ecx 
-	shl	ecx,4 
-	movdqu	xmm6,XMMWORD PTR [ebx] 
-	movdqu	xmm7,XMMWORD PTR [ecx*1+ebx] 
-	movdqu	xmm2,XMMWORD PTR [esi] 
-	movdqu	xmm3,XMMWORD PTR 16[esi] 
-	mov	ecx,DWORD PTR 240[edx] 
-	pxor	xmm6,xmm0 
-	pxor	xmm7,xmm6 
-	pxor	xmm1,xmm2 
-	pxor	xmm2,xmm6 
-	pxor	xmm1,xmm3 
-	pxor	xmm3,xmm7 
-	movdqa	xmm5,xmm1 
-	mov	edi,DWORD PTR 120[esp] 
-	call	__aesni_encrypt2 
-	xorps	xmm2,xmm6 
-	xorps	xmm3,xmm7 
-	movdqa	xmm0,xmm7 
-	movdqa	xmm1,xmm5 
-	movups	XMMWORD PTR [esi*1+edi],xmm2 
-	movups	XMMWORD PTR 16[esi*1+edi],xmm3 
-	jmp	$L078done 
-ALIGN	16 
-$L081three: 
-	lea	ecx,DWORD PTR 1[ebp] 
-	mov	edx,DWORD PTR 112[esp] 
-	bsf	ecx,ecx 
-	shl	ecx,4 
-	movdqu	xmm5,XMMWORD PTR [ebx] 
-	movdqu	xmm6,XMMWORD PTR [ecx*1+ebx] 
-	movdqa	xmm7,xmm5 
-	movdqu	xmm2,XMMWORD PTR [esi] 
-	movdqu	xmm3,XMMWORD PTR 16[esi] 
-	movdqu	xmm4,XMMWORD PTR 32[esi] 
-	mov	ecx,DWORD PTR 240[edx] 
-	pxor	xmm5,xmm0 
-	pxor	xmm6,xmm5 
-	pxor	xmm7,xmm6 
-	pxor	xmm1,xmm2 
-	pxor	xmm2,xmm5 
-	pxor	xmm1,xmm3 
-	pxor	xmm3,xmm6 
-	pxor	xmm1,xmm4 
-	pxor	xmm4,xmm7 
-	movdqa	XMMWORD PTR 96[esp],xmm1 
-	mov	edi,DWORD PTR 120[esp] 
-	call	__aesni_encrypt3 
-	xorps	xmm2,xmm5 
-	xorps	xmm3,xmm6 
-	xorps	xmm4,xmm7 
-	movdqa	xmm0,xmm7 
-	movdqa	xmm1,XMMWORD PTR 96[esp] 
-	movups	XMMWORD PTR [esi*1+edi],xmm2 
-	movups	XMMWORD PTR 16[esi*1+edi],xmm3 
-	movups	XMMWORD PTR 32[esi*1+edi],xmm4 
-	jmp	$L078done 
-ALIGN	16 
-$L082four: 
-	lea	ecx,DWORD PTR 1[ebp] 
-	lea	eax,DWORD PTR 3[ebp] 
-	bsf	ecx,ecx 
-	bsf	eax,eax 
-	mov	edx,DWORD PTR 112[esp] 
-	shl	ecx,4 
-	shl	eax,4 
-	movdqu	xmm4,XMMWORD PTR [ebx] 
-	movdqu	xmm5,XMMWORD PTR [ecx*1+ebx] 
-	movdqa	xmm6,xmm4 
-	movdqu	xmm7,XMMWORD PTR [eax*1+ebx] 
-	pxor	xmm4,xmm0 
-	movdqu	xmm2,XMMWORD PTR [esi] 
-	pxor	xmm5,xmm4 
-	movdqu	xmm3,XMMWORD PTR 16[esi] 
-	pxor	xmm6,xmm5 
-	movdqa	XMMWORD PTR [esp],xmm4 
-	pxor	xmm7,xmm6 
-	movdqa	XMMWORD PTR 16[esp],xmm5 
-	movdqu	xmm4,XMMWORD PTR 32[esi] 
-	movdqu	xmm5,XMMWORD PTR 48[esi] 
-	mov	ecx,DWORD PTR 240[edx] 
-	pxor	xmm1,xmm2 
-	pxor	xmm2,XMMWORD PTR [esp] 
-	pxor	xmm1,xmm3 
-	pxor	xmm3,XMMWORD PTR 16[esp] 
-	pxor	xmm1,xmm4 
-	pxor	xmm4,xmm6 
-	pxor	xmm1,xmm5 
-	pxor	xmm5,xmm7 
-	movdqa	XMMWORD PTR 96[esp],xmm1 
-	mov	edi,DWORD PTR 120[esp] 
-	call	__aesni_encrypt4 
-	xorps	xmm2,XMMWORD PTR [esp] 
-	xorps	xmm3,XMMWORD PTR 16[esp] 
-	xorps	xmm4,xmm6 
-	movups	XMMWORD PTR [esi*1+edi],xmm2 
-	xorps	xmm5,xmm7 
-	movups	XMMWORD PTR 16[esi*1+edi],xmm3 
-	movdqa	xmm0,xmm7 
-	movups	XMMWORD PTR 32[esi*1+edi],xmm4 
-	movdqa	xmm1,XMMWORD PTR 96[esp] 
-	movups	XMMWORD PTR 48[esi*1+edi],xmm5 
-$L078done: 
-	mov	edx,DWORD PTR 128[esp] 
-	pxor	xmm2,xmm2 
-	pxor	xmm3,xmm3 
-	movdqa	XMMWORD PTR [esp],xmm2 
-	pxor	xmm4,xmm4 
-	movdqa	XMMWORD PTR 16[esp],xmm2 
-	pxor	xmm5,xmm5 
-	movdqa	XMMWORD PTR 32[esp],xmm2 
-	pxor	xmm6,xmm6 
-	movdqa	XMMWORD PTR 48[esp],xmm2 
-	pxor	xmm7,xmm7 
-	movdqa	XMMWORD PTR 64[esp],xmm2 
-	movdqa	XMMWORD PTR 80[esp],xmm2 
-	movdqa	XMMWORD PTR 96[esp],xmm2 
-	lea	esp,DWORD PTR [edx] 
-	mov	ecx,DWORD PTR 40[esp] 
-	mov	ebx,DWORD PTR 48[esp] 
-	movdqu	XMMWORD PTR [ecx],xmm0 
-	pxor	xmm0,xmm0 
-	movdqu	XMMWORD PTR [ebx],xmm1 
-	pxor	xmm1,xmm1 
-	pop	edi 
-	pop	esi 
-	pop	ebx 
-	pop	ebp 
-	ret 
-_aesni_ocb_encrypt ENDP 
-ALIGN	16 
-_aesni_ocb_decrypt	PROC PUBLIC 
-$L_aesni_ocb_decrypt_begin:: 
-	push	ebp 
-	push	ebx 
-	push	esi 
-	push	edi 
-	mov	ecx,DWORD PTR 40[esp] 
-	mov	ebx,DWORD PTR 48[esp] 
-	mov	esi,DWORD PTR 20[esp] 
-	mov	edi,DWORD PTR 24[esp] 
-	mov	eax,DWORD PTR 28[esp] 
-	mov	edx,DWORD PTR 32[esp] 
-	movdqu	xmm0,XMMWORD PTR [ecx] 
-	mov	ebp,DWORD PTR 36[esp] 
-	movdqu	xmm1,XMMWORD PTR [ebx] 
-	mov	ebx,DWORD PTR 44[esp] 
-	mov	ecx,esp 
-	sub	esp,132 
-	and	esp,-16 
-	sub	edi,esi 
-	shl	eax,4 
-	lea	eax,DWORD PTR [eax*1+esi-96] 
-	mov	DWORD PTR 120[esp],edi 
-	mov	DWORD PTR 124[esp],eax 
-	mov	DWORD PTR 128[esp],ecx 
-	mov	ecx,DWORD PTR 240[edx] 
-	test	ebp,1 
-	jnz	$L084odd 
-	bsf	eax,ebp 
-	add	ebp,1 
-	shl	eax,4 
-	movdqu	xmm7,XMMWORD PTR [eax*1+ebx] 
-	mov	eax,edx 
-	movdqu	xmm2,XMMWORD PTR [esi] 
-	lea	esi,DWORD PTR 16[esi] 
-	pxor	xmm7,xmm0 
-	pxor	xmm2,xmm7 
-	movdqa	xmm6,xmm1 
-	movups	xmm0,XMMWORD PTR [edx] 
-	movups	xmm1,XMMWORD PTR 16[edx] 
-	lea	edx,DWORD PTR 32[edx] 
-	xorps	xmm2,xmm0 
-$L085dec1_loop_17: 
-DB	102,15,56,222,209 
-	dec	ecx 
-	movups	xmm1,XMMWORD PTR [edx] 
-	lea	edx,DWORD PTR 16[edx] 
-	jnz	$L085dec1_loop_17 
-DB	102,15,56,223,209 
-	xorps	xmm2,xmm7 
-	movaps	xmm1,xmm6 
-	movdqa	xmm0,xmm7 
-	xorps	xmm1,xmm2 
-	movups	XMMWORD PTR [esi*1+edi-16],xmm2 
-	mov	ecx,DWORD PTR 240[eax] 
-	mov	edx,eax 
-	mov	eax,DWORD PTR 124[esp] 
-$L084odd: 
-	shl	ecx,4 
-	mov	edi,16 
-	sub	edi,ecx 
-	mov	DWORD PTR 112[esp],edx 
-	lea	edx,DWORD PTR 32[ecx*1+edx] 
-	mov	DWORD PTR 116[esp],edi 
-	cmp	esi,eax 
-	ja	$L086short 
-	jmp	$L087grandloop 
-ALIGN	32 
-$L087grandloop: 
-	lea	ecx,DWORD PTR 1[ebp] 
-	lea	eax,DWORD PTR 3[ebp] 
-	lea	edi,DWORD PTR 5[ebp] 
-	add	ebp,6 
-	bsf	ecx,ecx 
-	bsf	eax,eax 
-	bsf	edi,edi 
-	shl	ecx,4 
-	shl	eax,4 
-	shl	edi,4 
-	movdqu	xmm2,XMMWORD PTR [ebx] 
-	movdqu	xmm3,XMMWORD PTR [ecx*1+ebx] 
-	mov	ecx,DWORD PTR 116[esp] 
-	movdqa	xmm4,xmm2 
-	movdqu	xmm5,XMMWORD PTR [eax*1+ebx] 
-	movdqa	xmm6,xmm2 
-	movdqu	xmm7,XMMWORD PTR [edi*1+ebx] 
-	pxor	xmm2,xmm0 
-	pxor	xmm3,xmm2 
-	movdqa	XMMWORD PTR [esp],xmm2 
-	pxor	xmm4,xmm3 
-	movdqa	XMMWORD PTR 16[esp],xmm3 
-	pxor	xmm5,xmm4 
-	movdqa	XMMWORD PTR 32[esp],xmm4 
-	pxor	xmm6,xmm5 
-	movdqa	XMMWORD PTR 48[esp],xmm5 
-	pxor	xmm7,xmm6 
-	movdqa	XMMWORD PTR 64[esp],xmm6 
-	movdqa	XMMWORD PTR 80[esp],xmm7 
-	movups	xmm0,XMMWORD PTR [ecx*1+edx-48] 
-	movdqu	xmm2,XMMWORD PTR [esi] 
-	movdqu	xmm3,XMMWORD PTR 16[esi] 
-	movdqu	xmm4,XMMWORD PTR 32[esi] 
-	movdqu	xmm5,XMMWORD PTR 48[esi] 
-	movdqu	xmm6,XMMWORD PTR 64[esi] 
-	movdqu	xmm7,XMMWORD PTR 80[esi] 
-	lea	esi,DWORD PTR 96[esi] 
-	movdqa	XMMWORD PTR 96[esp],xmm1 
-	pxor	xmm2,xmm0 
-	pxor	xmm3,xmm0 
-	pxor	xmm4,xmm0 
-	pxor	xmm5,xmm0 
-	pxor	xmm6,xmm0 
-	pxor	xmm7,xmm0 
-	movups	xmm1,XMMWORD PTR [ecx*1+edx-32] 
-	pxor	xmm2,XMMWORD PTR [esp] 
-	pxor	xmm3,XMMWORD PTR 16[esp] 
-	pxor	xmm4,XMMWORD PTR 32[esp] 
-	pxor	xmm5,XMMWORD PTR 48[esp] 
-	pxor	xmm6,XMMWORD PTR 64[esp] 
-	pxor	xmm7,XMMWORD PTR 80[esp] 
-	movups	xmm0,XMMWORD PTR [ecx*1+edx-16] 
-DB	102,15,56,222,209 
-DB	102,15,56,222,217 
-DB	102,15,56,222,225 
-DB	102,15,56,222,233 
-DB	102,15,56,222,241 
-DB	102,15,56,222,249 
-	mov	edi,DWORD PTR 120[esp] 
-	mov	eax,DWORD PTR 124[esp] 
-	call	$L_aesni_decrypt6_enter 
-	movdqa	xmm0,XMMWORD PTR 80[esp] 
-	pxor	xmm2,XMMWORD PTR [esp] 
-	movdqa	xmm1,XMMWORD PTR 96[esp] 
-	pxor	xmm3,XMMWORD PTR 16[esp] 
-	pxor	xmm4,XMMWORD PTR 32[esp] 
-	pxor	xmm5,XMMWORD PTR 48[esp] 
-	pxor	xmm6,XMMWORD PTR 64[esp] 
-	pxor	xmm7,xmm0 
-	pxor	xmm1,xmm2 
-	movdqu	XMMWORD PTR [esi*1+edi-96],xmm2 
-	pxor	xmm1,xmm3 
-	movdqu	XMMWORD PTR [esi*1+edi-80],xmm3 
-	pxor	xmm1,xmm4 
-	movdqu	XMMWORD PTR [esi*1+edi-64],xmm4 
-	pxor	xmm1,xmm5 
-	movdqu	XMMWORD PTR [esi*1+edi-48],xmm5 
-	pxor	xmm1,xmm6 
-	movdqu	XMMWORD PTR [esi*1+edi-32],xmm6 
-	pxor	xmm1,xmm7 
-	movdqu	XMMWORD PTR [esi*1+edi-16],xmm7 
-	cmp	esi,eax 
-	jb	$L087grandloop 
-$L086short: 
-	add	eax,96 
-	sub	eax,esi 
-	jz	$L088done 
-	cmp	eax,32 
-	jb	$L089one 
-	je	$L090two 
-	cmp	eax,64 
-	jb	$L091three 
-	je	$L092four 
-	lea	ecx,DWORD PTR 1[ebp] 
-	lea	eax,DWORD PTR 3[ebp] 
-	bsf	ecx,ecx 
-	bsf	eax,eax 
-	shl	ecx,4 
-	shl	eax,4 
-	movdqu	xmm2,XMMWORD PTR [ebx] 
-	movdqu	xmm3,XMMWORD PTR [ecx*1+ebx] 
-	mov	ecx,DWORD PTR 116[esp] 
-	movdqa	xmm4,xmm2 
-	movdqu	xmm5,XMMWORD PTR [eax*1+ebx] 
-	movdqa	xmm6,xmm2 
-	pxor	xmm2,xmm0 
-	pxor	xmm3,xmm2 
-	movdqa	XMMWORD PTR [esp],xmm2 
-	pxor	xmm4,xmm3 
-	movdqa	XMMWORD PTR 16[esp],xmm3 
-	pxor	xmm5,xmm4 
-	movdqa	XMMWORD PTR 32[esp],xmm4 
-	pxor	xmm6,xmm5 
-	movdqa	XMMWORD PTR 48[esp],xmm5 
-	pxor	xmm7,xmm6 
-	movdqa	XMMWORD PTR 64[esp],xmm6 
-	movups	xmm0,XMMWORD PTR [ecx*1+edx-48] 
-	movdqu	xmm2,XMMWORD PTR [esi] 
-	movdqu	xmm3,XMMWORD PTR 16[esi] 
-	movdqu	xmm4,XMMWORD PTR 32[esi] 
-	movdqu	xmm5,XMMWORD PTR 48[esi] 
-	movdqu	xmm6,XMMWORD PTR 64[esi] 
-	pxor	xmm7,xmm7 
-	movdqa	XMMWORD PTR 96[esp],xmm1 
-	pxor	xmm2,xmm0 
-	pxor	xmm3,xmm0 
-	pxor	xmm4,xmm0 
-	pxor	xmm5,xmm0 
-	pxor	xmm6,xmm0 
-	movups	xmm1,XMMWORD PTR [ecx*1+edx-32] 
-	pxor	xmm2,XMMWORD PTR [esp] 
-	pxor	xmm3,XMMWORD PTR 16[esp] 
-	pxor	xmm4,XMMWORD PTR 32[esp] 
-	pxor	xmm5,XMMWORD PTR 48[esp] 
-	pxor	xmm6,XMMWORD PTR 64[esp] 
-	movups	xmm0,XMMWORD PTR [ecx*1+edx-16] 
-DB	102,15,56,222,209 
-DB	102,15,56,222,217 
-DB	102,15,56,222,225 
-DB	102,15,56,222,233 
-DB	102,15,56,222,241 
-DB	102,15,56,222,249 
-	mov	edi,DWORD PTR 120[esp] 
-	call	$L_aesni_decrypt6_enter 
-	movdqa	xmm0,XMMWORD PTR 64[esp] 
-	pxor	xmm2,XMMWORD PTR [esp] 
-	movdqa	xmm1,XMMWORD PTR 96[esp] 
-	pxor	xmm3,XMMWORD PTR 16[esp] 
-	pxor	xmm4,XMMWORD PTR 32[esp] 
-	pxor	xmm5,XMMWORD PTR 48[esp] 
-	pxor	xmm6,xmm0 
-	pxor	xmm1,xmm2 
-	movdqu	XMMWORD PTR [esi*1+edi],xmm2 
-	pxor	xmm1,xmm3 
-	movdqu	XMMWORD PTR 16[esi*1+edi],xmm3 
-	pxor	xmm1,xmm4 
-	movdqu	XMMWORD PTR 32[esi*1+edi],xmm4 
-	pxor	xmm1,xmm5 
-	movdqu	XMMWORD PTR 48[esi*1+edi],xmm5 
-	pxor	xmm1,xmm6 
-	movdqu	XMMWORD PTR 64[esi*1+edi],xmm6 
-	jmp	$L088done 
-ALIGN	16 
-$L089one: 
-	movdqu	xmm7,XMMWORD PTR [ebx] 
-	mov	edx,DWORD PTR 112[esp] 
-	movdqu	xmm2,XMMWORD PTR [esi] 
-	mov	ecx,DWORD PTR 240[edx] 
-	pxor	xmm7,xmm0 
-	pxor	xmm2,xmm7 
-	movdqa	xmm6,xmm1 
-	mov	edi,DWORD PTR 120[esp] 
-	movups	xmm0,XMMWORD PTR [edx] 
-	movups	xmm1,XMMWORD PTR 16[edx] 
-	lea	edx,DWORD PTR 32[edx] 
-	xorps	xmm2,xmm0 
-$L093dec1_loop_18: 
-DB	102,15,56,222,209 
-	dec	ecx 
-	movups	xmm1,XMMWORD PTR [edx] 
-	lea	edx,DWORD PTR 16[edx] 
-	jnz	$L093dec1_loop_18 
-DB	102,15,56,223,209 
-	xorps	xmm2,xmm7 
-	movaps	xmm1,xmm6 
-	movdqa	xmm0,xmm7 
-	xorps	xmm1,xmm2 
-	movups	XMMWORD PTR [esi*1+edi],xmm2 
-	jmp	$L088done 
-ALIGN	16 
-$L090two: 
-	lea	ecx,DWORD PTR 1[ebp] 
-	mov	edx,DWORD PTR 112[esp] 
-	bsf	ecx,ecx 
-	shl	ecx,4 
-	movdqu	xmm6,XMMWORD PTR [ebx] 
-	movdqu	xmm7,XMMWORD PTR [ecx*1+ebx] 
-	movdqu	xmm2,XMMWORD PTR [esi] 
-	movdqu	xmm3,XMMWORD PTR 16[esi] 
-	mov	ecx,DWORD PTR 240[edx] 
-	movdqa	xmm5,xmm1 
-	pxor	xmm6,xmm0 
-	pxor	xmm7,xmm6 
-	pxor	xmm2,xmm6 
-	pxor	xmm3,xmm7 
-	mov	edi,DWORD PTR 120[esp] 
-	call	__aesni_decrypt2 
-	xorps	xmm2,xmm6 
-	xorps	xmm3,xmm7 
-	movdqa	xmm0,xmm7 
-	xorps	xmm5,xmm2 
-	movups	XMMWORD PTR [esi*1+edi],xmm2 
-	xorps	xmm5,xmm3 
-	movups	XMMWORD PTR 16[esi*1+edi],xmm3 
-	movaps	xmm1,xmm5 
-	jmp	$L088done 
-ALIGN	16 
-$L091three: 
-	lea	ecx,DWORD PTR 1[ebp] 
-	mov	edx,DWORD PTR 112[esp] 
-	bsf	ecx,ecx 
-	shl	ecx,4 
-	movdqu	xmm5,XMMWORD PTR [ebx] 
-	movdqu	xmm6,XMMWORD PTR [ecx*1+ebx] 
-	movdqa	xmm7,xmm5 
-	movdqu	xmm2,XMMWORD PTR [esi] 
-	movdqu	xmm3,XMMWORD PTR 16[esi] 
-	movdqu	xmm4,XMMWORD PTR 32[esi] 
-	mov	ecx,DWORD PTR 240[edx] 
-	movdqa	XMMWORD PTR 96[esp],xmm1 
-	pxor	xmm5,xmm0 
-	pxor	xmm6,xmm5 
-	pxor	xmm7,xmm6 
-	pxor	xmm2,xmm5 
-	pxor	xmm3,xmm6 
-	pxor	xmm4,xmm7 
-	mov	edi,DWORD PTR 120[esp] 
-	call	__aesni_decrypt3 
-	movdqa	xmm1,XMMWORD PTR 96[esp] 
-	xorps	xmm2,xmm5 
-	xorps	xmm3,xmm6 
-	xorps	xmm4,xmm7 
-	movups	XMMWORD PTR [esi*1+edi],xmm2 
-	pxor	xmm1,xmm2 
-	movdqa	xmm0,xmm7 
-	movups	XMMWORD PTR 16[esi*1+edi],xmm3 
-	pxor	xmm1,xmm3 
-	movups	XMMWORD PTR 32[esi*1+edi],xmm4 
-	pxor	xmm1,xmm4 
-	jmp	$L088done 
-ALIGN	16 
-$L092four: 
-	lea	ecx,DWORD PTR 1[ebp] 
-	lea	eax,DWORD PTR 3[ebp] 
-	bsf	ecx,ecx 
-	bsf	eax,eax 
-	mov	edx,DWORD PTR 112[esp] 
-	shl	ecx,4 
-	shl	eax,4 
-	movdqu	xmm4,XMMWORD PTR [ebx] 
-	movdqu	xmm5,XMMWORD PTR [ecx*1+ebx] 
-	movdqa	xmm6,xmm4 
-	movdqu	xmm7,XMMWORD PTR [eax*1+ebx] 
-	pxor	xmm4,xmm0 
-	movdqu	xmm2,XMMWORD PTR [esi] 
-	pxor	xmm5,xmm4 
-	movdqu	xmm3,XMMWORD PTR 16[esi] 
-	pxor	xmm6,xmm5 
-	movdqa	XMMWORD PTR [esp],xmm4 
-	pxor	xmm7,xmm6 
-	movdqa	XMMWORD PTR 16[esp],xmm5 
-	movdqu	xmm4,XMMWORD PTR 32[esi] 
-	movdqu	xmm5,XMMWORD PTR 48[esi] 
-	mov	ecx,DWORD PTR 240[edx] 
-	movdqa	XMMWORD PTR 96[esp],xmm1 
-	pxor	xmm2,XMMWORD PTR [esp] 
-	pxor	xmm3,XMMWORD PTR 16[esp] 
-	pxor	xmm4,xmm6 
-	pxor	xmm5,xmm7 
-	mov	edi,DWORD PTR 120[esp] 
-	call	__aesni_decrypt4 
-	movdqa	xmm1,XMMWORD PTR 96[esp] 
-	xorps	xmm2,XMMWORD PTR [esp] 
-	xorps	xmm3,XMMWORD PTR 16[esp] 
-	xorps	xmm4,xmm6 
-	movups	XMMWORD PTR [esi*1+edi],xmm2 
-	pxor	xmm1,xmm2 
-	xorps	xmm5,xmm7 
-	movups	XMMWORD PTR 16[esi*1+edi],xmm3 
-	pxor	xmm1,xmm3 
-	movdqa	xmm0,xmm7 
-	movups	XMMWORD PTR 32[esi*1+edi],xmm4 
-	pxor	xmm1,xmm4 
-	movups	XMMWORD PTR 48[esi*1+edi],xmm5 
-	pxor	xmm1,xmm5 
-$L088done: 
-	mov	edx,DWORD PTR 128[esp] 
-	pxor	xmm2,xmm2 
-	pxor	xmm3,xmm3 
-	movdqa	XMMWORD PTR [esp],xmm2 
-	pxor	xmm4,xmm4 
-	movdqa	XMMWORD PTR 16[esp],xmm2 
-	pxor	xmm5,xmm5 
-	movdqa	XMMWORD PTR 32[esp],xmm2 
-	pxor	xmm6,xmm6 
-	movdqa	XMMWORD PTR 48[esp],xmm2 
-	pxor	xmm7,xmm7 
-	movdqa	XMMWORD PTR 64[esp],xmm2 
-	movdqa	XMMWORD PTR 80[esp],xmm2 
-	movdqa	XMMWORD PTR 96[esp],xmm2 
-	lea	esp,DWORD PTR [edx] 
-	mov	ecx,DWORD PTR 40[esp] 
-	mov	ebx,DWORD PTR 48[esp] 
-	movdqu	XMMWORD PTR [ecx],xmm0 
-	pxor	xmm0,xmm0 
-	movdqu	XMMWORD PTR [ebx],xmm1 
-	pxor	xmm1,xmm1 
-	pop	edi 
-	pop	esi 
-	pop	ebx 
-	pop	ebp 
-	ret 
-_aesni_ocb_decrypt ENDP 
-ALIGN	16 
-_aesni_cbc_encrypt	PROC PUBLIC 
-$L_aesni_cbc_encrypt_begin:: 
-	push	ebp 
-	push	ebx 
-	push	esi 
-	push	edi 
-	mov	esi,DWORD PTR 20[esp] 
-	mov	ebx,esp 
-	mov	edi,DWORD PTR 24[esp] 
-	sub	ebx,24 
-	mov	eax,DWORD PTR 28[esp] 
-	and	ebx,-16 
-	mov	edx,DWORD PTR 32[esp] 
-	mov	ebp,DWORD PTR 36[esp] 
-	test	eax,eax 
-	jz	$L094cbc_abort 
-	cmp	DWORD PTR 40[esp],0 
-	xchg	ebx,esp 
-	movups	xmm7,XMMWORD PTR [ebp] 
-	mov	ecx,DWORD PTR 240[edx] 
-	mov	ebp,edx 
-	mov	DWORD PTR 16[esp],ebx 
-	mov	ebx,ecx 
-	je	$L095cbc_decrypt 
-	movaps	xmm2,xmm7 
-	cmp	eax,16 
-	jb	$L096cbc_enc_tail 
-	sub	eax,16 
-	jmp	$L097cbc_enc_loop 
-ALIGN	16 
-$L097cbc_enc_loop: 
-	movups	xmm7,XMMWORD PTR [esi] 
-	lea	esi,DWORD PTR 16[esi] 
-	movups	xmm0,XMMWORD PTR [edx] 
-	movups	xmm1,XMMWORD PTR 16[edx] 
-	xorps	xmm7,xmm0 
-	lea	edx,DWORD PTR 32[edx] 
-	xorps	xmm2,xmm7 
-$L098enc1_loop_19: 
-DB	102,15,56,220,209 
-	dec	ecx 
-	movups	xmm1,XMMWORD PTR [edx] 
-	lea	edx,DWORD PTR 16[edx] 
-	jnz	$L098enc1_loop_19 
-DB	102,15,56,221,209 
-	mov	ecx,ebx 
-	mov	edx,ebp 
-	movups	XMMWORD PTR [edi],xmm2 
-	lea	edi,DWORD PTR 16[edi] 
-	sub	eax,16 
-	jnc	$L097cbc_enc_loop 
-	add	eax,16 
-	jnz	$L096cbc_enc_tail 
-	movaps	xmm7,xmm2 
-	pxor	xmm2,xmm2 
-	jmp	$L099cbc_ret 
-$L096cbc_enc_tail: 
-	mov	ecx,eax 
-DD	2767451785 
-	mov	ecx,16 
-	sub	ecx,eax 
-	xor	eax,eax 
-DD	2868115081 
-	lea	edi,DWORD PTR [edi-16] 
-	mov	ecx,ebx 
-	mov	esi,edi 
-	mov	edx,ebp 
-	jmp	$L097cbc_enc_loop 
-ALIGN	16 
-$L095cbc_decrypt: 
-	cmp	eax,80 
-	jbe	$L100cbc_dec_tail 
-	movaps	XMMWORD PTR [esp],xmm7 
-	sub	eax,80 
-	jmp	$L101cbc_dec_loop6_enter 
-ALIGN	16 
-$L102cbc_dec_loop6: 
-	movaps	XMMWORD PTR [esp],xmm0 
-	movups	XMMWORD PTR [edi],xmm7 
-	lea	edi,DWORD PTR 16[edi] 
-$L101cbc_dec_loop6_enter: 
-	movdqu	xmm2,XMMWORD PTR [esi] 
-	movdqu	xmm3,XMMWORD PTR 16[esi] 
-	movdqu	xmm4,XMMWORD PTR 32[esi] 
-	movdqu	xmm5,XMMWORD PTR 48[esi] 
-	movdqu	xmm6,XMMWORD PTR 64[esi] 
-	movdqu	xmm7,XMMWORD PTR 80[esi] 
-	call	__aesni_decrypt6 
-	movups	xmm1,XMMWORD PTR [esi] 
-	movups	xmm0,XMMWORD PTR 16[esi] 
-	xorps	xmm2,XMMWORD PTR [esp] 
-	xorps	xmm3,xmm1 
-	movups	xmm1,XMMWORD PTR 32[esi] 
-	xorps	xmm4,xmm0 
-	movups	xmm0,XMMWORD PTR 48[esi] 
-	xorps	xmm5,xmm1 
-	movups	xmm1,XMMWORD PTR 64[esi] 
-	xorps	xmm6,xmm0 
-	movups	xmm0,XMMWORD PTR 80[esi] 
-	xorps	xmm7,xmm1 
-	movups	XMMWORD PTR [edi],xmm2 
-	movups	XMMWORD PTR 16[edi],xmm3 
-	lea	esi,DWORD PTR 96[esi] 
-	movups	XMMWORD PTR 32[edi],xmm4 
-	mov	ecx,ebx 
-	movups	XMMWORD PTR 48[edi],xmm5 
-	mov	edx,ebp 
-	movups	XMMWORD PTR 64[edi],xmm6 
-	lea	edi,DWORD PTR 80[edi] 
-	sub	eax,96 
-	ja	$L102cbc_dec_loop6 
-	movaps	xmm2,xmm7 
-	movaps	xmm7,xmm0 
-	add	eax,80 
-	jle	$L103cbc_dec_clear_tail_collected 
-	movups	XMMWORD PTR [edi],xmm2 
-	lea	edi,DWORD PTR 16[edi] 
-$L100cbc_dec_tail: 
-	movups	xmm2,XMMWORD PTR [esi] 
-	movaps	xmm6,xmm2 
-	cmp	eax,16 
-	jbe	$L104cbc_dec_one 
-	movups	xmm3,XMMWORD PTR 16[esi] 
-	movaps	xmm5,xmm3 
-	cmp	eax,32 
-	jbe	$L105cbc_dec_two 
-	movups	xmm4,XMMWORD PTR 32[esi] 
-	cmp	eax,48 
-	jbe	$L106cbc_dec_three 
-	movups	xmm5,XMMWORD PTR 48[esi] 
-	cmp	eax,64 
-	jbe	$L107cbc_dec_four 
-	movups	xmm6,XMMWORD PTR 64[esi] 
-	movaps	XMMWORD PTR [esp],xmm7 
-	movups	xmm2,XMMWORD PTR [esi] 
-	xorps	xmm7,xmm7 
-	call	__aesni_decrypt6 
-	movups	xmm1,XMMWORD PTR [esi] 
-	movups	xmm0,XMMWORD PTR 16[esi] 
-	xorps	xmm2,XMMWORD PTR [esp] 
-	xorps	xmm3,xmm1 
-	movups	xmm1,XMMWORD PTR 32[esi] 
-	xorps	xmm4,xmm0 
-	movups	xmm0,XMMWORD PTR 48[esi] 
-	xorps	xmm5,xmm1 
-	movups	xmm7,XMMWORD PTR 64[esi] 
-	xorps	xmm6,xmm0 
-	movups	XMMWORD PTR [edi],xmm2 
-	movups	XMMWORD PTR 16[edi],xmm3 
-	pxor	xmm3,xmm3 
-	movups	XMMWORD PTR 32[edi],xmm4 
-	pxor	xmm4,xmm4 
-	movups	XMMWORD PTR 48[edi],xmm5 
-	pxor	xmm5,xmm5 
-	lea	edi,DWORD PTR 64[edi] 
-	movaps	xmm2,xmm6 
-	pxor	xmm6,xmm6 
-	sub	eax,80 
-	jmp	$L108cbc_dec_tail_collected 
-ALIGN	16 
-$L104cbc_dec_one: 
-	movups	xmm0,XMMWORD PTR [edx] 
-	movups	xmm1,XMMWORD PTR 16[edx] 
-	lea	edx,DWORD PTR 32[edx] 
-	xorps	xmm2,xmm0 
-$L109dec1_loop_20: 
-DB	102,15,56,222,209 
-	dec	ecx 
-	movups	xmm1,XMMWORD PTR [edx] 
-	lea	edx,DWORD PTR 16[edx] 
-	jnz	$L109dec1_loop_20 
-DB	102,15,56,223,209 
-	xorps	xmm2,xmm7 
-	movaps	xmm7,xmm6 
-	sub	eax,16 
-	jmp	$L108cbc_dec_tail_collected 
-ALIGN	16 
-$L105cbc_dec_two: 
-	call	__aesni_decrypt2 
-	xorps	xmm2,xmm7 
-	xorps	xmm3,xmm6 
-	movups	XMMWORD PTR [edi],xmm2 
-	movaps	xmm2,xmm3 
-	pxor	xmm3,xmm3 
-	lea	edi,DWORD PTR 16[edi] 
-	movaps	xmm7,xmm5 
-	sub	eax,32 
-	jmp	$L108cbc_dec_tail_collected 
-ALIGN	16 
-$L106cbc_dec_three: 
-	call	__aesni_decrypt3 
-	xorps	xmm2,xmm7 
-	xorps	xmm3,xmm6 
-	xorps	xmm4,xmm5 
-	movups	XMMWORD PTR [edi],xmm2 
-	movaps	xmm2,xmm4 
-	pxor	xmm4,xmm4 
-	movups	XMMWORD PTR 16[edi],xmm3 
-	pxor	xmm3,xmm3 
-	lea	edi,DWORD PTR 32[edi] 
-	movups	xmm7,XMMWORD PTR 32[esi] 
-	sub	eax,48 
-	jmp	$L108cbc_dec_tail_collected 
-ALIGN	16 
-$L107cbc_dec_four: 
-	call	__aesni_decrypt4 
-	movups	xmm1,XMMWORD PTR 16[esi] 
-	movups	xmm0,XMMWORD PTR 32[esi] 
-	xorps	xmm2,xmm7 
-	movups	xmm7,XMMWORD PTR 48[esi] 
-	xorps	xmm3,xmm6 
-	movups	XMMWORD PTR [edi],xmm2 
-	xorps	xmm4,xmm1 
-	movups	XMMWORD PTR 16[edi],xmm3 
-	pxor	xmm3,xmm3 
-	xorps	xmm5,xmm0 
-	movups	XMMWORD PTR 32[edi],xmm4 
-	pxor	xmm4,xmm4 
-	lea	edi,DWORD PTR 48[edi] 
-	movaps	xmm2,xmm5 
-	pxor	xmm5,xmm5 
-	sub	eax,64 
-	jmp	$L108cbc_dec_tail_collected 
-ALIGN	16 
-$L103cbc_dec_clear_tail_collected: 
-	pxor	xmm3,xmm3 
-	pxor	xmm4,xmm4 
-	pxor	xmm5,xmm5 
-	pxor	xmm6,xmm6 
-$L108cbc_dec_tail_collected: 
-	and	eax,15 
-	jnz	$L110cbc_dec_tail_partial 
-	movups	XMMWORD PTR [edi],xmm2 
-	pxor	xmm0,xmm0 
-	jmp	$L099cbc_ret 
-ALIGN	16 
-$L110cbc_dec_tail_partial: 
-	movaps	XMMWORD PTR [esp],xmm2 
-	pxor	xmm0,xmm0 
-	mov	ecx,16 
-	mov	esi,esp 
-	sub	ecx,eax 
-DD	2767451785 
-	movdqa	XMMWORD PTR [esp],xmm2 
-$L099cbc_ret: 
-	mov	esp,DWORD PTR 16[esp] 
-	mov	ebp,DWORD PTR 36[esp] 
-	pxor	xmm2,xmm2 
-	pxor	xmm1,xmm1 
-	movups	XMMWORD PTR [ebp],xmm7 
-	pxor	xmm7,xmm7 
-$L094cbc_abort: 
-	pop	edi 
-	pop	esi 
-	pop	ebx 
-	pop	ebp 
-	ret 
-_aesni_cbc_encrypt ENDP 
-ALIGN	16 
-__aesni_set_encrypt_key	PROC PRIVATE 
-	push	ebp 
-	push	ebx 
-	test	eax,eax 
-	jz	$L111bad_pointer 
-	test	edx,edx 
-	jz	$L111bad_pointer 
-	call	$L112pic 
-$L112pic: 
-	pop	ebx 
-	lea	ebx,DWORD PTR ($Lkey_const-$L112pic)[ebx] 
-	lea	ebp,DWORD PTR _OPENSSL_ia32cap_P 
-	movups	xmm0,XMMWORD PTR [eax] 
-	xorps	xmm4,xmm4 
-	mov	ebp,DWORD PTR 4[ebp] 
-	lea	edx,DWORD PTR 16[edx] 
-	and	ebp,268437504 
-	cmp	ecx,256 
-	je	$L11314rounds 
-	cmp	ecx,192 
-	je	$L11412rounds 
-	cmp	ecx,128 
-	jne	$L115bad_keybits 
-ALIGN	16 
-$L11610rounds: 
-	cmp	ebp,268435456 
-	je	$L11710rounds_alt 
-	mov	ecx,9 
-	movups	XMMWORD PTR [edx-16],xmm0 
-DB	102,15,58,223,200,1 
-	call	$L118key_128_cold 
-DB	102,15,58,223,200,2 
-	call	$L119key_128 
-DB	102,15,58,223,200,4 
-	call	$L119key_128 
-DB	102,15,58,223,200,8 
-	call	$L119key_128 
-DB	102,15,58,223,200,16 
-	call	$L119key_128 
-DB	102,15,58,223,200,32 
-	call	$L119key_128 
-DB	102,15,58,223,200,64 
-	call	$L119key_128 
-DB	102,15,58,223,200,128 
-	call	$L119key_128 
-DB	102,15,58,223,200,27 
-	call	$L119key_128 
-DB	102,15,58,223,200,54 
-	call	$L119key_128 
-	movups	XMMWORD PTR [edx],xmm0 
-	mov	DWORD PTR 80[edx],ecx 
-	jmp	$L120good_key 
-ALIGN	16 
-$L119key_128: 
-	movups	XMMWORD PTR [edx],xmm0 
-	lea	edx,DWORD PTR 16[edx] 
-$L118key_128_cold: 
-	shufps	xmm4,xmm0,16 
-	xorps	xmm0,xmm4 
-	shufps	xmm4,xmm0,140 
-	xorps	xmm0,xmm4 
-	shufps	xmm1,xmm1,255 
-	xorps	xmm0,xmm1 
-	ret 
-ALIGN	16 
-$L11710rounds_alt: 
-	movdqa	xmm5,XMMWORD PTR [ebx] 
-	mov	ecx,8 
-	movdqa	xmm4,XMMWORD PTR 32[ebx] 
-	movdqa	xmm2,xmm0 
-	movdqu	XMMWORD PTR [edx-16],xmm0 
-$L121loop_key128: 
-DB	102,15,56,0,197 
-DB	102,15,56,221,196 
-	pslld	xmm4,1 
-	lea	edx,DWORD PTR 16[edx] 
-	movdqa	xmm3,xmm2 
-	pslldq	xmm2,4 
-	pxor	xmm3,xmm2 
-	pslldq	xmm2,4 
-	pxor	xmm3,xmm2 
-	pslldq	xmm2,4 
-	pxor	xmm2,xmm3 
-	pxor	xmm0,xmm2 
-	movdqu	XMMWORD PTR [edx-16],xmm0 
-	movdqa	xmm2,xmm0 
-	dec	ecx 
-	jnz	$L121loop_key128 
-	movdqa	xmm4,XMMWORD PTR 48[ebx] 
-DB	102,15,56,0,197 
-DB	102,15,56,221,196 
-	pslld	xmm4,1 
-	movdqa	xmm3,xmm2 
-	pslldq	xmm2,4 
-	pxor	xmm3,xmm2 
-	pslldq	xmm2,4 
-	pxor	xmm3,xmm2 
-	pslldq	xmm2,4 
-	pxor	xmm2,xmm3 
-	pxor	xmm0,xmm2 
-	movdqu	XMMWORD PTR [edx],xmm0 
-	movdqa	xmm2,xmm0 
-DB	102,15,56,0,197 
-DB	102,15,56,221,196 
-	movdqa	xmm3,xmm2 
-	pslldq	xmm2,4 
-	pxor	xmm3,xmm2 
-	pslldq	xmm2,4 
-	pxor	xmm3,xmm2 
-	pslldq	xmm2,4 
-	pxor	xmm2,xmm3 
-	pxor	xmm0,xmm2 
-	movdqu	XMMWORD PTR 16[edx],xmm0 
-	mov	ecx,9 
-	mov	DWORD PTR 96[edx],ecx 
-	jmp	$L120good_key 
-ALIGN	16 
-$L11412rounds: 
-	movq	xmm2,QWORD PTR 16[eax] 
-	cmp	ebp,268435456 
-	je	$L12212rounds_alt 
-	mov	ecx,11 
-	movups	XMMWORD PTR [edx-16],xmm0 
-DB	102,15,58,223,202,1 
-	call	$L123key_192a_cold 
-DB	102,15,58,223,202,2 
-	call	$L124key_192b 
-DB	102,15,58,223,202,4 
-	call	$L125key_192a 
-DB	102,15,58,223,202,8 
-	call	$L124key_192b 
-DB	102,15,58,223,202,16 
-	call	$L125key_192a 
-DB	102,15,58,223,202,32 
-	call	$L124key_192b 
-DB	102,15,58,223,202,64 
-	call	$L125key_192a 
-DB	102,15,58,223,202,128 
-	call	$L124key_192b 
-	movups	XMMWORD PTR [edx],xmm0 
-	mov	DWORD PTR 48[edx],ecx 
-	jmp	$L120good_key 
-ALIGN	16 
-$L125key_192a: 
-	movups	XMMWORD PTR [edx],xmm0 
-	lea	edx,DWORD PTR 16[edx] 
-ALIGN	16 
-$L123key_192a_cold: 
-	movaps	xmm5,xmm2 
-$L126key_192b_warm: 
-	shufps	xmm4,xmm0,16 
-	movdqa	xmm3,xmm2 
-	xorps	xmm0,xmm4 
-	shufps	xmm4,xmm0,140 
-	pslldq	xmm3,4 
-	xorps	xmm0,xmm4 
-	pshufd	xmm1,xmm1,85 
-	pxor	xmm2,xmm3 
-	pxor	xmm0,xmm1 
-	pshufd	xmm3,xmm0,255 
-	pxor	xmm2,xmm3 
-	ret 
-ALIGN	16 
-$L124key_192b: 
-	movaps	xmm3,xmm0 
-	shufps	xmm5,xmm0,68 
-	movups	XMMWORD PTR [edx],xmm5 
-	shufps	xmm3,xmm2,78 
-	movups	XMMWORD PTR 16[edx],xmm3 
-	lea	edx,DWORD PTR 32[edx] 
-	jmp	$L126key_192b_warm 
-ALIGN	16 
-$L12212rounds_alt: 
-	movdqa	xmm5,XMMWORD PTR 16[ebx] 
-	movdqa	xmm4,XMMWORD PTR 32[ebx] 
-	mov	ecx,8 
-	movdqu	XMMWORD PTR [edx-16],xmm0 
-$L127loop_key192: 
-	movq	QWORD PTR [edx],xmm2 
-	movdqa	xmm1,xmm2 
-DB	102,15,56,0,213 
-DB	102,15,56,221,212 
-	pslld	xmm4,1 
-	lea	edx,DWORD PTR 24[edx] 
-	movdqa	xmm3,xmm0 
-	pslldq	xmm0,4 
-	pxor	xmm3,xmm0 
-	pslldq	xmm0,4 
-	pxor	xmm3,xmm0 
-	pslldq	xmm0,4 
-	pxor	xmm0,xmm3 
-	pshufd	xmm3,xmm0,255 
-	pxor	xmm3,xmm1 
-	pslldq	xmm1,4 
-	pxor	xmm3,xmm1 
-	pxor	xmm0,xmm2 
-	pxor	xmm2,xmm3 
-	movdqu	XMMWORD PTR [edx-16],xmm0 
-	dec	ecx 
-	jnz	$L127loop_key192 
-	mov	ecx,11 
-	mov	DWORD PTR 32[edx],ecx 
-	jmp	$L120good_key 
-ALIGN	16 
-$L11314rounds: 
-	movups	xmm2,XMMWORD PTR 16[eax] 
-	lea	edx,DWORD PTR 16[edx] 
-	cmp	ebp,268435456 
-	je	$L12814rounds_alt 
-	mov	ecx,13 
-	movups	XMMWORD PTR [edx-32],xmm0 
-	movups	XMMWORD PTR [edx-16],xmm2 
-DB	102,15,58,223,202,1 
-	call	$L129key_256a_cold 
-DB	102,15,58,223,200,1 
-	call	$L130key_256b 
-DB	102,15,58,223,202,2 
-	call	$L131key_256a 
-DB	102,15,58,223,200,2 
-	call	$L130key_256b 
-DB	102,15,58,223,202,4 
-	call	$L131key_256a 
-DB	102,15,58,223,200,4 
-	call	$L130key_256b 
-DB	102,15,58,223,202,8 
-	call	$L131key_256a 
-DB	102,15,58,223,200,8 
-	call	$L130key_256b 
-DB	102,15,58,223,202,16 
-	call	$L131key_256a 
-DB	102,15,58,223,200,16 
-	call	$L130key_256b 
-DB	102,15,58,223,202,32 
-	call	$L131key_256a 
-DB	102,15,58,223,200,32 
-	call	$L130key_256b 
-DB	102,15,58,223,202,64 
-	call	$L131key_256a 
-	movups	XMMWORD PTR [edx],xmm0 
-	mov	DWORD PTR 16[edx],ecx 
-	xor	eax,eax 
-	jmp	$L120good_key 
-ALIGN	16 
-$L131key_256a: 
-	movups	XMMWORD PTR [edx],xmm2 
-	lea	edx,DWORD PTR 16[edx] 
-$L129key_256a_cold: 
-	shufps	xmm4,xmm0,16 
-	xorps	xmm0,xmm4 
-	shufps	xmm4,xmm0,140 
-	xorps	xmm0,xmm4 
-	shufps	xmm1,xmm1,255 
-	xorps	xmm0,xmm1 
-	ret 
-ALIGN	16 
-$L130key_256b: 
-	movups	XMMWORD PTR [edx],xmm0 
-	lea	edx,DWORD PTR 16[edx] 
-	shufps	xmm4,xmm2,16 
-	xorps	xmm2,xmm4 
-	shufps	xmm4,xmm2,140 
-	xorps	xmm2,xmm4 
-	shufps	xmm1,xmm1,170 
-	xorps	xmm2,xmm1 
-	ret 
-ALIGN	16 
-$L12814rounds_alt: 
-	movdqa	xmm5,XMMWORD PTR [ebx] 
-	movdqa	xmm4,XMMWORD PTR 32[ebx] 
-	mov	ecx,7 
-	movdqu	XMMWORD PTR [edx-32],xmm0 
-	movdqa	xmm1,xmm2 
-	movdqu	XMMWORD PTR [edx-16],xmm2 
-$L132loop_key256: 
-DB	102,15,56,0,213 
-DB	102,15,56,221,212 
-	movdqa	xmm3,xmm0 
-	pslldq	xmm0,4 
-	pxor	xmm3,xmm0 
-	pslldq	xmm0,4 
-	pxor	xmm3,xmm0 
-	pslldq	xmm0,4 
-	pxor	xmm0,xmm3 
-	pslld	xmm4,1 
-	pxor	xmm0,xmm2 
-	movdqu	XMMWORD PTR [edx],xmm0 
-	dec	ecx 
-	jz	$L133done_key256 
-	pshufd	xmm2,xmm0,255 
-	pxor	xmm3,xmm3 
-DB	102,15,56,221,211 
-	movdqa	xmm3,xmm1 
-	pslldq	xmm1,4 
-	pxor	xmm3,xmm1 
-	pslldq	xmm1,4 
-	pxor	xmm3,xmm1 
-	pslldq	xmm1,4 
-	pxor	xmm1,xmm3 
-	pxor	xmm2,xmm1 
-	movdqu	XMMWORD PTR 16[edx],xmm2 
-	lea	edx,DWORD PTR 32[edx] 
-	movdqa	xmm1,xmm2 
-	jmp	$L132loop_key256 
-$L133done_key256: 
-	mov	ecx,13 
-	mov	DWORD PTR 16[edx],ecx 
-$L120good_key: 
-	pxor	xmm0,xmm0 
-	pxor	xmm1,xmm1 
-	pxor	xmm2,xmm2 
-	pxor	xmm3,xmm3 
-	pxor	xmm4,xmm4 
-	pxor	xmm5,xmm5 
-	xor	eax,eax 
-	pop	ebx 
-	pop	ebp 
-	ret 
-ALIGN	4 
-$L111bad_pointer: 
-	mov	eax,-1 
-	pop	ebx 
-	pop	ebp 
-	ret 
-ALIGN	4 
-$L115bad_keybits: 
-	pxor	xmm0,xmm0 
-	mov	eax,-2 
-	pop	ebx 
-	pop	ebp 
-	ret 
-__aesni_set_encrypt_key ENDP 
-ALIGN	16 
-_aesni_set_encrypt_key	PROC PUBLIC 
-$L_aesni_set_encrypt_key_begin:: 
-	mov	eax,DWORD PTR 4[esp] 
-	mov	ecx,DWORD PTR 8[esp] 
-	mov	edx,DWORD PTR 12[esp] 
-	call	__aesni_set_encrypt_key 
-	ret 
-_aesni_set_encrypt_key ENDP 
-ALIGN	16 
-_aesni_set_decrypt_key	PROC PUBLIC 
-$L_aesni_set_decrypt_key_begin:: 
-	mov	eax,DWORD PTR 4[esp] 
-	mov	ecx,DWORD PTR 8[esp] 
-	mov	edx,DWORD PTR 12[esp] 
-	call	__aesni_set_encrypt_key 
-	mov	edx,DWORD PTR 12[esp] 
-	shl	ecx,4 
-	test	eax,eax 
-	jnz	$L134dec_key_ret 
-	lea	eax,DWORD PTR 16[ecx*1+edx] 
-	movups	xmm0,XMMWORD PTR [edx] 
-	movups	xmm1,XMMWORD PTR [eax] 
-	movups	XMMWORD PTR [eax],xmm0 
-	movups	XMMWORD PTR [edx],xmm1 
-	lea	edx,DWORD PTR 16[edx] 
-	lea	eax,DWORD PTR [eax-16] 
-$L135dec_key_inverse: 
-	movups	xmm0,XMMWORD PTR [edx] 
-	movups	xmm1,XMMWORD PTR [eax] 
-DB	102,15,56,219,192 
-DB	102,15,56,219,201 
-	lea	edx,DWORD PTR 16[edx] 
-	lea	eax,DWORD PTR [eax-16] 
-	movups	XMMWORD PTR 16[eax],xmm0 
-	movups	XMMWORD PTR [edx-16],xmm1 
-	cmp	eax,edx 
-	ja	$L135dec_key_inverse 
-	movups	xmm0,XMMWORD PTR [edx] 
-DB	102,15,56,219,192 
-	movups	XMMWORD PTR [edx],xmm0 
-	pxor	xmm0,xmm0 
-	pxor	xmm1,xmm1 
-	xor	eax,eax 
-$L134dec_key_ret: 
-	ret 
-_aesni_set_decrypt_key ENDP 
-ALIGN	64 
-$Lkey_const:: 
-DD	202313229,202313229,202313229,202313229 
-DD	67569157,67569157,67569157,67569157 
-DD	1,1,1,1 
-DD	27,27,27,27 
-DB	65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69 
-DB	83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83 
-DB	32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115 
-DB	115,108,46,111,114,103,62,0 
-.text$	ENDS 
-.bss	SEGMENT 'BSS' 
-COMM	_OPENSSL_ia32cap_P:DWORD:4 
-.bss	ENDS 
-END 
+IF @Version LT 800
+ECHO MASM version 8.00 or later is strongly recommended.
+ENDIF
+.686
+.XMM
+IF @Version LT 800
+XMMWORD STRUCT 16
+DQ	2 dup (?)
+XMMWORD	ENDS
+ENDIF
+
+.MODEL	FLAT
+OPTION	DOTNAME
+IF @Version LT 800
+.text$	SEGMENT PAGE 'CODE'
+ELSE
+.text$	SEGMENT ALIGN(64) 'CODE'
+ENDIF
+;EXTERN	_OPENSSL_ia32cap_P:NEAR
+ALIGN	16
+_aesni_encrypt	PROC PUBLIC
+$L_aesni_encrypt_begin::
+	mov	eax,DWORD PTR 4[esp]
+	mov	edx,DWORD PTR 12[esp]
+	movups	xmm2,XMMWORD PTR [eax]
+	mov	ecx,DWORD PTR 240[edx]
+	mov	eax,DWORD PTR 8[esp]
+	movups	xmm0,XMMWORD PTR [edx]
+	movups	xmm1,XMMWORD PTR 16[edx]
+	lea	edx,DWORD PTR 32[edx]
+	xorps	xmm2,xmm0
+$L000enc1_loop_1:
+DB	102,15,56,220,209
+	dec	ecx
+	movups	xmm1,XMMWORD PTR [edx]
+	lea	edx,DWORD PTR 16[edx]
+	jnz	$L000enc1_loop_1
+DB	102,15,56,221,209
+	pxor	xmm0,xmm0
+	pxor	xmm1,xmm1
+	movups	XMMWORD PTR [eax],xmm2
+	pxor	xmm2,xmm2
+	ret
+_aesni_encrypt ENDP
+ALIGN	16
+_aesni_decrypt	PROC PUBLIC
+$L_aesni_decrypt_begin::
+	mov	eax,DWORD PTR 4[esp]
+	mov	edx,DWORD PTR 12[esp]
+	movups	xmm2,XMMWORD PTR [eax]
+	mov	ecx,DWORD PTR 240[edx]
+	mov	eax,DWORD PTR 8[esp]
+	movups	xmm0,XMMWORD PTR [edx]
+	movups	xmm1,XMMWORD PTR 16[edx]
+	lea	edx,DWORD PTR 32[edx]
+	xorps	xmm2,xmm0
+$L001dec1_loop_2:
+DB	102,15,56,222,209
+	dec	ecx
+	movups	xmm1,XMMWORD PTR [edx]
+	lea	edx,DWORD PTR 16[edx]
+	jnz	$L001dec1_loop_2
+DB	102,15,56,223,209
+	pxor	xmm0,xmm0
+	pxor	xmm1,xmm1
+	movups	XMMWORD PTR [eax],xmm2
+	pxor	xmm2,xmm2
+	ret
+_aesni_decrypt ENDP
+ALIGN	16
+__aesni_encrypt2	PROC PRIVATE
+	movups	xmm0,XMMWORD PTR [edx]
+	shl	ecx,4
+	movups	xmm1,XMMWORD PTR 16[edx]
+	xorps	xmm2,xmm0
+	pxor	xmm3,xmm0
+	movups	xmm0,XMMWORD PTR 32[edx]
+	lea	edx,DWORD PTR 32[ecx*1+edx]
+	neg	ecx
+	add	ecx,16
+$L002enc2_loop:
+DB	102,15,56,220,209
+DB	102,15,56,220,217
+	movups	xmm1,XMMWORD PTR [ecx*1+edx]
+	add	ecx,32
+DB	102,15,56,220,208
+DB	102,15,56,220,216
+	movups	xmm0,XMMWORD PTR [ecx*1+edx-16]
+	jnz	$L002enc2_loop
+DB	102,15,56,220,209
+DB	102,15,56,220,217
+DB	102,15,56,221,208
+DB	102,15,56,221,216
+	ret
+__aesni_encrypt2 ENDP
+ALIGN	16
+__aesni_decrypt2	PROC PRIVATE
+	movups	xmm0,XMMWORD PTR [edx]
+	shl	ecx,4
+	movups	xmm1,XMMWORD PTR 16[edx]
+	xorps	xmm2,xmm0
+	pxor	xmm3,xmm0
+	movups	xmm0,XMMWORD PTR 32[edx]
+	lea	edx,DWORD PTR 32[ecx*1+edx]
+	neg	ecx
+	add	ecx,16
+$L003dec2_loop:
+DB	102,15,56,222,209
+DB	102,15,56,222,217
+	movups	xmm1,XMMWORD PTR [ecx*1+edx]
+	add	ecx,32
+DB	102,15,56,222,208
+DB	102,15,56,222,216
+	movups	xmm0,XMMWORD PTR [ecx*1+edx-16]
+	jnz	$L003dec2_loop
+DB	102,15,56,222,209
+DB	102,15,56,222,217
+DB	102,15,56,223,208
+DB	102,15,56,223,216
+	ret
+__aesni_decrypt2 ENDP
+ALIGN	16
+__aesni_encrypt3	PROC PRIVATE
+	movups	xmm0,XMMWORD PTR [edx]
+	shl	ecx,4
+	movups	xmm1,XMMWORD PTR 16[edx]
+	xorps	xmm2,xmm0
+	pxor	xmm3,xmm0
+	pxor	xmm4,xmm0
+	movups	xmm0,XMMWORD PTR 32[edx]
+	lea	edx,DWORD PTR 32[ecx*1+edx]
+	neg	ecx
+	add	ecx,16
+$L004enc3_loop:
+DB	102,15,56,220,209
+DB	102,15,56,220,217
+DB	102,15,56,220,225
+	movups	xmm1,XMMWORD PTR [ecx*1+edx]
+	add	ecx,32
+DB	102,15,56,220,208
+DB	102,15,56,220,216
+DB	102,15,56,220,224
+	movups	xmm0,XMMWORD PTR [ecx*1+edx-16]
+	jnz	$L004enc3_loop
+DB	102,15,56,220,209
+DB	102,15,56,220,217
+DB	102,15,56,220,225
+DB	102,15,56,221,208
+DB	102,15,56,221,216
+DB	102,15,56,221,224
+	ret
+__aesni_encrypt3 ENDP
+ALIGN	16
+__aesni_decrypt3	PROC PRIVATE
+	movups	xmm0,XMMWORD PTR [edx]
+	shl	ecx,4
+	movups	xmm1,XMMWORD PTR 16[edx]
+	xorps	xmm2,xmm0
+	pxor	xmm3,xmm0
+	pxor	xmm4,xmm0
+	movups	xmm0,XMMWORD PTR 32[edx]
+	lea	edx,DWORD PTR 32[ecx*1+edx]
+	neg	ecx
+	add	ecx,16
+$L005dec3_loop:
+DB	102,15,56,222,209
+DB	102,15,56,222,217
+DB	102,15,56,222,225
+	movups	xmm1,XMMWORD PTR [ecx*1+edx]
+	add	ecx,32
+DB	102,15,56,222,208
+DB	102,15,56,222,216
+DB	102,15,56,222,224
+	movups	xmm0,XMMWORD PTR [ecx*1+edx-16]
+	jnz	$L005dec3_loop
+DB	102,15,56,222,209
+DB	102,15,56,222,217
+DB	102,15,56,222,225
+DB	102,15,56,223,208
+DB	102,15,56,223,216
+DB	102,15,56,223,224
+	ret
+__aesni_decrypt3 ENDP
+ALIGN	16
+__aesni_encrypt4	PROC PRIVATE
+	movups	xmm0,XMMWORD PTR [edx]
+	movups	xmm1,XMMWORD PTR 16[edx]
+	shl	ecx,4
+	xorps	xmm2,xmm0
+	pxor	xmm3,xmm0
+	pxor	xmm4,xmm0
+	pxor	xmm5,xmm0
+	movups	xmm0,XMMWORD PTR 32[edx]
+	lea	edx,DWORD PTR 32[ecx*1+edx]
+	neg	ecx
+DB	15,31,64,0
+	add	ecx,16
+$L006enc4_loop:
+DB	102,15,56,220,209
+DB	102,15,56,220,217
+DB	102,15,56,220,225
+DB	102,15,56,220,233
+	movups	xmm1,XMMWORD PTR [ecx*1+edx]
+	add	ecx,32
+DB	102,15,56,220,208
+DB	102,15,56,220,216
+DB	102,15,56,220,224
+DB	102,15,56,220,232
+	movups	xmm0,XMMWORD PTR [ecx*1+edx-16]
+	jnz	$L006enc4_loop
+DB	102,15,56,220,209
+DB	102,15,56,220,217
+DB	102,15,56,220,225
+DB	102,15,56,220,233
+DB	102,15,56,221,208
+DB	102,15,56,221,216
+DB	102,15,56,221,224
+DB	102,15,56,221,232
+	ret
+__aesni_encrypt4 ENDP
+ALIGN	16
+__aesni_decrypt4	PROC PRIVATE
+	movups	xmm0,XMMWORD PTR [edx]
+	movups	xmm1,XMMWORD PTR 16[edx]
+	shl	ecx,4
+	xorps	xmm2,xmm0
+	pxor	xmm3,xmm0
+	pxor	xmm4,xmm0
+	pxor	xmm5,xmm0
+	movups	xmm0,XMMWORD PTR 32[edx]
+	lea	edx,DWORD PTR 32[ecx*1+edx]
+	neg	ecx
+DB	15,31,64,0
+	add	ecx,16
+$L007dec4_loop:
+DB	102,15,56,222,209
+DB	102,15,56,222,217
+DB	102,15,56,222,225
+DB	102,15,56,222,233
+	movups	xmm1,XMMWORD PTR [ecx*1+edx]
+	add	ecx,32
+DB	102,15,56,222,208
+DB	102,15,56,222,216
+DB	102,15,56,222,224
+DB	102,15,56,222,232
+	movups	xmm0,XMMWORD PTR [ecx*1+edx-16]
+	jnz	$L007dec4_loop
+DB	102,15,56,222,209
+DB	102,15,56,222,217
+DB	102,15,56,222,225
+DB	102,15,56,222,233
+DB	102,15,56,223,208
+DB	102,15,56,223,216
+DB	102,15,56,223,224
+DB	102,15,56,223,232
+	ret
+__aesni_decrypt4 ENDP
+ALIGN	16
+__aesni_encrypt6	PROC PRIVATE
+	movups	xmm0,XMMWORD PTR [edx]
+	shl	ecx,4
+	movups	xmm1,XMMWORD PTR 16[edx]
+	xorps	xmm2,xmm0
+	pxor	xmm3,xmm0
+	pxor	xmm4,xmm0
+DB	102,15,56,220,209
+	pxor	xmm5,xmm0
+	pxor	xmm6,xmm0
+DB	102,15,56,220,217
+	lea	edx,DWORD PTR 32[ecx*1+edx]
+	neg	ecx
+DB	102,15,56,220,225
+	pxor	xmm7,xmm0
+	movups	xmm0,XMMWORD PTR [ecx*1+edx]
+	add	ecx,16
+	jmp	$L008_aesni_encrypt6_inner
+ALIGN	16
+$L009enc6_loop:
+DB	102,15,56,220,209
+DB	102,15,56,220,217
+DB	102,15,56,220,225
+$L008_aesni_encrypt6_inner:
+DB	102,15,56,220,233
+DB	102,15,56,220,241
+DB	102,15,56,220,249
+$L_aesni_encrypt6_enter::
+	movups	xmm1,XMMWORD PTR [ecx*1+edx]
+	add	ecx,32
+DB	102,15,56,220,208
+DB	102,15,56,220,216
+DB	102,15,56,220,224
+DB	102,15,56,220,232
+DB	102,15,56,220,240
+DB	102,15,56,220,248
+	movups	xmm0,XMMWORD PTR [ecx*1+edx-16]
+	jnz	$L009enc6_loop
+DB	102,15,56,220,209
+DB	102,15,56,220,217
+DB	102,15,56,220,225
+DB	102,15,56,220,233
+DB	102,15,56,220,241
+DB	102,15,56,220,249
+DB	102,15,56,221,208
+DB	102,15,56,221,216
+DB	102,15,56,221,224
+DB	102,15,56,221,232
+DB	102,15,56,221,240
+DB	102,15,56,221,248
+	ret
+__aesni_encrypt6 ENDP
+ALIGN	16
+__aesni_decrypt6	PROC PRIVATE
+	movups	xmm0,XMMWORD PTR [edx]
+	shl	ecx,4
+	movups	xmm1,XMMWORD PTR 16[edx]
+	xorps	xmm2,xmm0
+	pxor	xmm3,xmm0
+	pxor	xmm4,xmm0
+DB	102,15,56,222,209
+	pxor	xmm5,xmm0
+	pxor	xmm6,xmm0
+DB	102,15,56,222,217
+	lea	edx,DWORD PTR 32[ecx*1+edx]
+	neg	ecx
+DB	102,15,56,222,225
+	pxor	xmm7,xmm0
+	movups	xmm0,XMMWORD PTR [ecx*1+edx]
+	add	ecx,16
+	jmp	$L010_aesni_decrypt6_inner
+ALIGN	16
+$L011dec6_loop:
+DB	102,15,56,222,209
+DB	102,15,56,222,217
+DB	102,15,56,222,225
+$L010_aesni_decrypt6_inner:
+DB	102,15,56,222,233
+DB	102,15,56,222,241
+DB	102,15,56,222,249
+$L_aesni_decrypt6_enter::
+	movups	xmm1,XMMWORD PTR [ecx*1+edx]
+	add	ecx,32
+DB	102,15,56,222,208
+DB	102,15,56,222,216
+DB	102,15,56,222,224
+DB	102,15,56,222,232
+DB	102,15,56,222,240
+DB	102,15,56,222,248
+	movups	xmm0,XMMWORD PTR [ecx*1+edx-16]
+	jnz	$L011dec6_loop
+DB	102,15,56,222,209
+DB	102,15,56,222,217
+DB	102,15,56,222,225
+DB	102,15,56,222,233
+DB	102,15,56,222,241
+DB	102,15,56,222,249
+DB	102,15,56,223,208
+DB	102,15,56,223,216
+DB	102,15,56,223,224
+DB	102,15,56,223,232
+DB	102,15,56,223,240
+DB	102,15,56,223,248
+	ret
+__aesni_decrypt6 ENDP
+ALIGN	16
+_aesni_ecb_encrypt	PROC PUBLIC
+$L_aesni_ecb_encrypt_begin::
+	push	ebp
+	push	ebx
+	push	esi
+	push	edi
+	mov	esi,DWORD PTR 20[esp]
+	mov	edi,DWORD PTR 24[esp]
+	mov	eax,DWORD PTR 28[esp]
+	mov	edx,DWORD PTR 32[esp]
+	mov	ebx,DWORD PTR 36[esp]
+	and	eax,-16
+	jz	$L012ecb_ret
+	mov	ecx,DWORD PTR 240[edx]
+	test	ebx,ebx
+	jz	$L013ecb_decrypt
+	mov	ebp,edx
+	mov	ebx,ecx
+	cmp	eax,96
+	jb	$L014ecb_enc_tail
+	movdqu	xmm2,XMMWORD PTR [esi]
+	movdqu	xmm3,XMMWORD PTR 16[esi]
+	movdqu	xmm4,XMMWORD PTR 32[esi]
+	movdqu	xmm5,XMMWORD PTR 48[esi]
+	movdqu	xmm6,XMMWORD PTR 64[esi]
+	movdqu	xmm7,XMMWORD PTR 80[esi]
+	lea	esi,DWORD PTR 96[esi]
+	sub	eax,96
+	jmp	$L015ecb_enc_loop6_enter
+ALIGN	16
+$L016ecb_enc_loop6:
+	movups	XMMWORD PTR [edi],xmm2
+	movdqu	xmm2,XMMWORD PTR [esi]
+	movups	XMMWORD PTR 16[edi],xmm3
+	movdqu	xmm3,XMMWORD PTR 16[esi]
+	movups	XMMWORD PTR 32[edi],xmm4
+	movdqu	xmm4,XMMWORD PTR 32[esi]
+	movups	XMMWORD PTR 48[edi],xmm5
+	movdqu	xmm5,XMMWORD PTR 48[esi]
+	movups	XMMWORD PTR 64[edi],xmm6
+	movdqu	xmm6,XMMWORD PTR 64[esi]
+	movups	XMMWORD PTR 80[edi],xmm7
+	lea	edi,DWORD PTR 96[edi]
+	movdqu	xmm7,XMMWORD PTR 80[esi]
+	lea	esi,DWORD PTR 96[esi]
+$L015ecb_enc_loop6_enter:
+	call	__aesni_encrypt6
+	mov	edx,ebp
+	mov	ecx,ebx
+	sub	eax,96
+	jnc	$L016ecb_enc_loop6
+	movups	XMMWORD PTR [edi],xmm2
+	movups	XMMWORD PTR 16[edi],xmm3
+	movups	XMMWORD PTR 32[edi],xmm4
+	movups	XMMWORD PTR 48[edi],xmm5
+	movups	XMMWORD PTR 64[edi],xmm6
+	movups	XMMWORD PTR 80[edi],xmm7
+	lea	edi,DWORD PTR 96[edi]
+	add	eax,96
+	jz	$L012ecb_ret
+$L014ecb_enc_tail:
+	movups	xmm2,XMMWORD PTR [esi]
+	cmp	eax,32
+	jb	$L017ecb_enc_one
+	movups	xmm3,XMMWORD PTR 16[esi]
+	je	$L018ecb_enc_two
+	movups	xmm4,XMMWORD PTR 32[esi]
+	cmp	eax,64
+	jb	$L019ecb_enc_three
+	movups	xmm5,XMMWORD PTR 48[esi]
+	je	$L020ecb_enc_four
+	movups	xmm6,XMMWORD PTR 64[esi]
+	xorps	xmm7,xmm7
+	call	__aesni_encrypt6
+	movups	XMMWORD PTR [edi],xmm2
+	movups	XMMWORD PTR 16[edi],xmm3
+	movups	XMMWORD PTR 32[edi],xmm4
+	movups	XMMWORD PTR 48[edi],xmm5
+	movups	XMMWORD PTR 64[edi],xmm6
+	jmp	$L012ecb_ret
+ALIGN	16
+$L017ecb_enc_one:
+	movups	xmm0,XMMWORD PTR [edx]
+	movups	xmm1,XMMWORD PTR 16[edx]
+	lea	edx,DWORD PTR 32[edx]
+	xorps	xmm2,xmm0
+$L021enc1_loop_3:
+DB	102,15,56,220,209
+	dec	ecx
+	movups	xmm1,XMMWORD PTR [edx]
+	lea	edx,DWORD PTR 16[edx]
+	jnz	$L021enc1_loop_3
+DB	102,15,56,221,209
+	movups	XMMWORD PTR [edi],xmm2
+	jmp	$L012ecb_ret
+ALIGN	16
+$L018ecb_enc_two:
+	call	__aesni_encrypt2
+	movups	XMMWORD PTR [edi],xmm2
+	movups	XMMWORD PTR 16[edi],xmm3
+	jmp	$L012ecb_ret
+ALIGN	16
+$L019ecb_enc_three:
+	call	__aesni_encrypt3
+	movups	XMMWORD PTR [edi],xmm2
+	movups	XMMWORD PTR 16[edi],xmm3
+	movups	XMMWORD PTR 32[edi],xmm4
+	jmp	$L012ecb_ret
+ALIGN	16
+$L020ecb_enc_four:
+	call	__aesni_encrypt4
+	movups	XMMWORD PTR [edi],xmm2
+	movups	XMMWORD PTR 16[edi],xmm3
+	movups	XMMWORD PTR 32[edi],xmm4
+	movups	XMMWORD PTR 48[edi],xmm5
+	jmp	$L012ecb_ret
+ALIGN	16
+$L013ecb_decrypt:
+	mov	ebp,edx
+	mov	ebx,ecx
+	cmp	eax,96
+	jb	$L022ecb_dec_tail
+	movdqu	xmm2,XMMWORD PTR [esi]
+	movdqu	xmm3,XMMWORD PTR 16[esi]
+	movdqu	xmm4,XMMWORD PTR 32[esi]
+	movdqu	xmm5,XMMWORD PTR 48[esi]
+	movdqu	xmm6,XMMWORD PTR 64[esi]
+	movdqu	xmm7,XMMWORD PTR 80[esi]
+	lea	esi,DWORD PTR 96[esi]
+	sub	eax,96
+	jmp	$L023ecb_dec_loop6_enter
+ALIGN	16
+$L024ecb_dec_loop6:
+	movups	XMMWORD PTR [edi],xmm2
+	movdqu	xmm2,XMMWORD PTR [esi]
+	movups	XMMWORD PTR 16[edi],xmm3
+	movdqu	xmm3,XMMWORD PTR 16[esi]
+	movups	XMMWORD PTR 32[edi],xmm4
+	movdqu	xmm4,XMMWORD PTR 32[esi]
+	movups	XMMWORD PTR 48[edi],xmm5
+	movdqu	xmm5,XMMWORD PTR 48[esi]
+	movups	XMMWORD PTR 64[edi],xmm6
+	movdqu	xmm6,XMMWORD PTR 64[esi]
+	movups	XMMWORD PTR 80[edi],xmm7
+	lea	edi,DWORD PTR 96[edi]
+	movdqu	xmm7,XMMWORD PTR 80[esi]
+	lea	esi,DWORD PTR 96[esi]
+$L023ecb_dec_loop6_enter:
+	call	__aesni_decrypt6
+	mov	edx,ebp
+	mov	ecx,ebx
+	sub	eax,96
+	jnc	$L024ecb_dec_loop6
+	movups	XMMWORD PTR [edi],xmm2
+	movups	XMMWORD PTR 16[edi],xmm3
+	movups	XMMWORD PTR 32[edi],xmm4
+	movups	XMMWORD PTR 48[edi],xmm5
+	movups	XMMWORD PTR 64[edi],xmm6
+	movups	XMMWORD PTR 80[edi],xmm7
+	lea	edi,DWORD PTR 96[edi]
+	add	eax,96
+	jz	$L012ecb_ret
+$L022ecb_dec_tail:
+	movups	xmm2,XMMWORD PTR [esi]
+	cmp	eax,32
+	jb	$L025ecb_dec_one
+	movups	xmm3,XMMWORD PTR 16[esi]
+	je	$L026ecb_dec_two
+	movups	xmm4,XMMWORD PTR 32[esi]
+	cmp	eax,64
+	jb	$L027ecb_dec_three
+	movups	xmm5,XMMWORD PTR 48[esi]
+	je	$L028ecb_dec_four
+	movups	xmm6,XMMWORD PTR 64[esi]
+	xorps	xmm7,xmm7
+	call	__aesni_decrypt6
+	movups	XMMWORD PTR [edi],xmm2
+	movups	XMMWORD PTR 16[edi],xmm3
+	movups	XMMWORD PTR 32[edi],xmm4
+	movups	XMMWORD PTR 48[edi],xmm5
+	movups	XMMWORD PTR 64[edi],xmm6
+	jmp	$L012ecb_ret
+ALIGN	16
+$L025ecb_dec_one:
+	movups	xmm0,XMMWORD PTR [edx]
+	movups	xmm1,XMMWORD PTR 16[edx]
+	lea	edx,DWORD PTR 32[edx]
+	xorps	xmm2,xmm0
+$L029dec1_loop_4:
+DB	102,15,56,222,209
+	dec	ecx
+	movups	xmm1,XMMWORD PTR [edx]
+	lea	edx,DWORD PTR 16[edx]
+	jnz	$L029dec1_loop_4
+DB	102,15,56,223,209
+	movups	XMMWORD PTR [edi],xmm2
+	jmp	$L012ecb_ret
+ALIGN	16
+$L026ecb_dec_two:
+	call	__aesni_decrypt2
+	movups	XMMWORD PTR [edi],xmm2
+	movups	XMMWORD PTR 16[edi],xmm3
+	jmp	$L012ecb_ret
+ALIGN	16
+$L027ecb_dec_three:
+	call	__aesni_decrypt3
+	movups	XMMWORD PTR [edi],xmm2
+	movups	XMMWORD PTR 16[edi],xmm3
+	movups	XMMWORD PTR 32[edi],xmm4
+	jmp	$L012ecb_ret
+ALIGN	16
+$L028ecb_dec_four:
+	call	__aesni_decrypt4
+	movups	XMMWORD PTR [edi],xmm2
+	movups	XMMWORD PTR 16[edi],xmm3
+	movups	XMMWORD PTR 32[edi],xmm4
+	movups	XMMWORD PTR 48[edi],xmm5
+$L012ecb_ret:
+	pxor	xmm0,xmm0
+	pxor	xmm1,xmm1
+	pxor	xmm2,xmm2
+	pxor	xmm3,xmm3
+	pxor	xmm4,xmm4
+	pxor	xmm5,xmm5
+	pxor	xmm6,xmm6
+	pxor	xmm7,xmm7
+	pop	edi
+	pop	esi
+	pop	ebx
+	pop	ebp
+	ret
+_aesni_ecb_encrypt ENDP
+ALIGN	16
+_aesni_ccm64_encrypt_blocks	PROC PUBLIC
+$L_aesni_ccm64_encrypt_blocks_begin::
+	push	ebp
+	push	ebx
+	push	esi
+	push	edi
+	mov	esi,DWORD PTR 20[esp]
+	mov	edi,DWORD PTR 24[esp]
+	mov	eax,DWORD PTR 28[esp]
+	mov	edx,DWORD PTR 32[esp]
+	mov	ebx,DWORD PTR 36[esp]
+	mov	ecx,DWORD PTR 40[esp]
+	mov	ebp,esp
+	sub	esp,60
+	and	esp,-16
+	mov	DWORD PTR 48[esp],ebp
+	movdqu	xmm7,XMMWORD PTR [ebx]
+	movdqu	xmm3,XMMWORD PTR [ecx]
+	mov	ecx,DWORD PTR 240[edx]
+	mov	DWORD PTR [esp],202182159
+	mov	DWORD PTR 4[esp],134810123
+	mov	DWORD PTR 8[esp],67438087
+	mov	DWORD PTR 12[esp],66051
+	mov	ebx,1
+	xor	ebp,ebp
+	mov	DWORD PTR 16[esp],ebx
+	mov	DWORD PTR 20[esp],ebp
+	mov	DWORD PTR 24[esp],ebp
+	mov	DWORD PTR 28[esp],ebp
+	shl	ecx,4
+	mov	ebx,16
+	lea	ebp,DWORD PTR [edx]
+	movdqa	xmm5,XMMWORD PTR [esp]
+	movdqa	xmm2,xmm7
+	lea	edx,DWORD PTR 32[ecx*1+edx]
+	sub	ebx,ecx
+DB	102,15,56,0,253
+$L030ccm64_enc_outer:
+	movups	xmm0,XMMWORD PTR [ebp]
+	mov	ecx,ebx
+	movups	xmm6,XMMWORD PTR [esi]
+	xorps	xmm2,xmm0
+	movups	xmm1,XMMWORD PTR 16[ebp]
+	xorps	xmm0,xmm6
+	xorps	xmm3,xmm0
+	movups	xmm0,XMMWORD PTR 32[ebp]
+$L031ccm64_enc2_loop:
+DB	102,15,56,220,209
+DB	102,15,56,220,217
+	movups	xmm1,XMMWORD PTR [ecx*1+edx]
+	add	ecx,32
+DB	102,15,56,220,208
+DB	102,15,56,220,216
+	movups	xmm0,XMMWORD PTR [ecx*1+edx-16]
+	jnz	$L031ccm64_enc2_loop
+DB	102,15,56,220,209
+DB	102,15,56,220,217
+	paddq	xmm7,XMMWORD PTR 16[esp]
+	dec	eax
+DB	102,15,56,221,208
+DB	102,15,56,221,216
+	lea	esi,DWORD PTR 16[esi]
+	xorps	xmm6,xmm2
+	movdqa	xmm2,xmm7
+	movups	XMMWORD PTR [edi],xmm6
+DB	102,15,56,0,213
+	lea	edi,DWORD PTR 16[edi]
+	jnz	$L030ccm64_enc_outer
+	mov	esp,DWORD PTR 48[esp]
+	mov	edi,DWORD PTR 40[esp]
+	movups	XMMWORD PTR [edi],xmm3
+	pxor	xmm0,xmm0
+	pxor	xmm1,xmm1
+	pxor	xmm2,xmm2
+	pxor	xmm3,xmm3
+	pxor	xmm4,xmm4
+	pxor	xmm5,xmm5
+	pxor	xmm6,xmm6
+	pxor	xmm7,xmm7
+	pop	edi
+	pop	esi
+	pop	ebx
+	pop	ebp
+	ret
+_aesni_ccm64_encrypt_blocks ENDP
+ALIGN	16
+_aesni_ccm64_decrypt_blocks	PROC PUBLIC
+$L_aesni_ccm64_decrypt_blocks_begin::
+	push	ebp
+	push	ebx
+	push	esi
+	push	edi
+	mov	esi,DWORD PTR 20[esp]
+	mov	edi,DWORD PTR 24[esp]
+	mov	eax,DWORD PTR 28[esp]
+	mov	edx,DWORD PTR 32[esp]
+	mov	ebx,DWORD PTR 36[esp]
+	mov	ecx,DWORD PTR 40[esp]
+	mov	ebp,esp
+	sub	esp,60
+	and	esp,-16
+	mov	DWORD PTR 48[esp],ebp
+	movdqu	xmm7,XMMWORD PTR [ebx]
+	movdqu	xmm3,XMMWORD PTR [ecx]
+	mov	ecx,DWORD PTR 240[edx]
+	mov	DWORD PTR [esp],202182159
+	mov	DWORD PTR 4[esp],134810123
+	mov	DWORD PTR 8[esp],67438087
+	mov	DWORD PTR 12[esp],66051
+	mov	ebx,1
+	xor	ebp,ebp
+	mov	DWORD PTR 16[esp],ebx
+	mov	DWORD PTR 20[esp],ebp
+	mov	DWORD PTR 24[esp],ebp
+	mov	DWORD PTR 28[esp],ebp
+	movdqa	xmm5,XMMWORD PTR [esp]
+	movdqa	xmm2,xmm7
+	mov	ebp,edx
+	mov	ebx,ecx
+DB	102,15,56,0,253
+	movups	xmm0,XMMWORD PTR [edx]
+	movups	xmm1,XMMWORD PTR 16[edx]
+	lea	edx,DWORD PTR 32[edx]
+	xorps	xmm2,xmm0
+$L032enc1_loop_5:
+DB	102,15,56,220,209
+	dec	ecx
+	movups	xmm1,XMMWORD PTR [edx]
+	lea	edx,DWORD PTR 16[edx]
+	jnz	$L032enc1_loop_5
+DB	102,15,56,221,209
+	shl	ebx,4
+	mov	ecx,16
+	movups	xmm6,XMMWORD PTR [esi]
+	paddq	xmm7,XMMWORD PTR 16[esp]
+	lea	esi,QWORD PTR 16[esi]
+	sub	ecx,ebx
+	lea	edx,DWORD PTR 32[ebx*1+ebp]
+	mov	ebx,ecx
+	jmp	$L033ccm64_dec_outer
+ALIGN	16
+$L033ccm64_dec_outer:
+	xorps	xmm6,xmm2
+	movdqa	xmm2,xmm7
+	movups	XMMWORD PTR [edi],xmm6
+	lea	edi,DWORD PTR 16[edi]
+DB	102,15,56,0,213
+	sub	eax,1
+	jz	$L034ccm64_dec_break
+	movups	xmm0,XMMWORD PTR [ebp]
+	mov	ecx,ebx
+	movups	xmm1,XMMWORD PTR 16[ebp]
+	xorps	xmm6,xmm0
+	xorps	xmm2,xmm0
+	xorps	xmm3,xmm6
+	movups	xmm0,XMMWORD PTR 32[ebp]
+$L035ccm64_dec2_loop:
+DB	102,15,56,220,209
+DB	102,15,56,220,217
+	movups	xmm1,XMMWORD PTR [ecx*1+edx]
+	add	ecx,32
+DB	102,15,56,220,208
+DB	102,15,56,220,216
+	movups	xmm0,XMMWORD PTR [ecx*1+edx-16]
+	jnz	$L035ccm64_dec2_loop
+	movups	xmm6,XMMWORD PTR [esi]
+	paddq	xmm7,XMMWORD PTR 16[esp]
+DB	102,15,56,220,209
+DB	102,15,56,220,217
+DB	102,15,56,221,208
+DB	102,15,56,221,216
+	lea	esi,QWORD PTR 16[esi]
+	jmp	$L033ccm64_dec_outer
+ALIGN	16
+$L034ccm64_dec_break:
+	mov	ecx,DWORD PTR 240[ebp]
+	mov	edx,ebp
+	movups	xmm0,XMMWORD PTR [edx]
+	movups	xmm1,XMMWORD PTR 16[edx]
+	xorps	xmm6,xmm0
+	lea	edx,DWORD PTR 32[edx]
+	xorps	xmm3,xmm6
+$L036enc1_loop_6:
+DB	102,15,56,220,217
+	dec	ecx
+	movups	xmm1,XMMWORD PTR [edx]
+	lea	edx,DWORD PTR 16[edx]
+	jnz	$L036enc1_loop_6
+DB	102,15,56,221,217
+	mov	esp,DWORD PTR 48[esp]
+	mov	edi,DWORD PTR 40[esp]
+	movups	XMMWORD PTR [edi],xmm3
+	pxor	xmm0,xmm0
+	pxor	xmm1,xmm1
+	pxor	xmm2,xmm2
+	pxor	xmm3,xmm3
+	pxor	xmm4,xmm4
+	pxor	xmm5,xmm5
+	pxor	xmm6,xmm6
+	pxor	xmm7,xmm7
+	pop	edi
+	pop	esi
+	pop	ebx
+	pop	ebp
+	ret
+_aesni_ccm64_decrypt_blocks ENDP
+ALIGN	16
+_aesni_ctr32_encrypt_blocks	PROC PUBLIC
+$L_aesni_ctr32_encrypt_blocks_begin::
+	push	ebp
+	push	ebx
+	push	esi
+	push	edi
+	mov	esi,DWORD PTR 20[esp]
+	mov	edi,DWORD PTR 24[esp]
+	mov	eax,DWORD PTR 28[esp]
+	mov	edx,DWORD PTR 32[esp]
+	mov	ebx,DWORD PTR 36[esp]
+	mov	ebp,esp
+	sub	esp,88
+	and	esp,-16
+	mov	DWORD PTR 80[esp],ebp
+	cmp	eax,1
+	je	$L037ctr32_one_shortcut
+	movdqu	xmm7,XMMWORD PTR [ebx]
+	mov	DWORD PTR [esp],202182159
+	mov	DWORD PTR 4[esp],134810123
+	mov	DWORD PTR 8[esp],67438087
+	mov	DWORD PTR 12[esp],66051
+	mov	ecx,6
+	xor	ebp,ebp
+	mov	DWORD PTR 16[esp],ecx
+	mov	DWORD PTR 20[esp],ecx
+	mov	DWORD PTR 24[esp],ecx
+	mov	DWORD PTR 28[esp],ebp
+DB	102,15,58,22,251,3
+DB	102,15,58,34,253,3
+	mov	ecx,DWORD PTR 240[edx]
+	bswap	ebx
+	pxor	xmm0,xmm0
+	pxor	xmm1,xmm1
+	movdqa	xmm2,XMMWORD PTR [esp]
+DB	102,15,58,34,195,0
+	lea	ebp,DWORD PTR 3[ebx]
+DB	102,15,58,34,205,0
+	inc	ebx
+DB	102,15,58,34,195,1
+	inc	ebp
+DB	102,15,58,34,205,1
+	inc	ebx
+DB	102,15,58,34,195,2
+	inc	ebp
+DB	102,15,58,34,205,2
+	movdqa	XMMWORD PTR 48[esp],xmm0
+DB	102,15,56,0,194
+	movdqu	xmm6,XMMWORD PTR [edx]
+	movdqa	XMMWORD PTR 64[esp],xmm1
+DB	102,15,56,0,202
+	pshufd	xmm2,xmm0,192
+	pshufd	xmm3,xmm0,128
+	cmp	eax,6
+	jb	$L038ctr32_tail
+	pxor	xmm7,xmm6
+	shl	ecx,4
+	mov	ebx,16
+	movdqa	XMMWORD PTR 32[esp],xmm7
+	mov	ebp,edx
+	sub	ebx,ecx
+	lea	edx,DWORD PTR 32[ecx*1+edx]
+	sub	eax,6
+	jmp	$L039ctr32_loop6
+ALIGN	16
+$L039ctr32_loop6:
+	pshufd	xmm4,xmm0,64
+	movdqa	xmm0,XMMWORD PTR 32[esp]
+	pshufd	xmm5,xmm1,192
+	pxor	xmm2,xmm0
+	pshufd	xmm6,xmm1,128
+	pxor	xmm3,xmm0
+	pshufd	xmm7,xmm1,64
+	movups	xmm1,XMMWORD PTR 16[ebp]
+	pxor	xmm4,xmm0
+	pxor	xmm5,xmm0
+DB	102,15,56,220,209
+	pxor	xmm6,xmm0
+	pxor	xmm7,xmm0
+DB	102,15,56,220,217
+	movups	xmm0,XMMWORD PTR 32[ebp]
+	mov	ecx,ebx
+DB	102,15,56,220,225
+DB	102,15,56,220,233
+DB	102,15,56,220,241
+DB	102,15,56,220,249
+	call	$L_aesni_encrypt6_enter
+	movups	xmm1,XMMWORD PTR [esi]
+	movups	xmm0,XMMWORD PTR 16[esi]
+	xorps	xmm2,xmm1
+	movups	xmm1,XMMWORD PTR 32[esi]
+	xorps	xmm3,xmm0
+	movups	XMMWORD PTR [edi],xmm2
+	movdqa	xmm0,XMMWORD PTR 16[esp]
+	xorps	xmm4,xmm1
+	movdqa	xmm1,XMMWORD PTR 64[esp]
+	movups	XMMWORD PTR 16[edi],xmm3
+	movups	XMMWORD PTR 32[edi],xmm4
+	paddd	xmm1,xmm0
+	paddd	xmm0,XMMWORD PTR 48[esp]
+	movdqa	xmm2,XMMWORD PTR [esp]
+	movups	xmm3,XMMWORD PTR 48[esi]
+	movups	xmm4,XMMWORD PTR 64[esi]
+	xorps	xmm5,xmm3
+	movups	xmm3,XMMWORD PTR 80[esi]
+	lea	esi,DWORD PTR 96[esi]
+	movdqa	XMMWORD PTR 48[esp],xmm0
+DB	102,15,56,0,194
+	xorps	xmm6,xmm4
+	movups	XMMWORD PTR 48[edi],xmm5
+	xorps	xmm7,xmm3
+	movdqa	XMMWORD PTR 64[esp],xmm1
+DB	102,15,56,0,202
+	movups	XMMWORD PTR 64[edi],xmm6
+	pshufd	xmm2,xmm0,192
+	movups	XMMWORD PTR 80[edi],xmm7
+	lea	edi,DWORD PTR 96[edi]
+	pshufd	xmm3,xmm0,128
+	sub	eax,6
+	jnc	$L039ctr32_loop6
+	add	eax,6
+	jz	$L040ctr32_ret
+	movdqu	xmm7,XMMWORD PTR [ebp]
+	mov	edx,ebp
+	pxor	xmm7,XMMWORD PTR 32[esp]
+	mov	ecx,DWORD PTR 240[ebp]
+$L038ctr32_tail:
+	por	xmm2,xmm7
+	cmp	eax,2
+	jb	$L041ctr32_one
+	pshufd	xmm4,xmm0,64
+	por	xmm3,xmm7
+	je	$L042ctr32_two
+	pshufd	xmm5,xmm1,192
+	por	xmm4,xmm7
+	cmp	eax,4
+	jb	$L043ctr32_three
+	pshufd	xmm6,xmm1,128
+	por	xmm5,xmm7
+	je	$L044ctr32_four
+	por	xmm6,xmm7
+	call	__aesni_encrypt6
+	movups	xmm1,XMMWORD PTR [esi]
+	movups	xmm0,XMMWORD PTR 16[esi]
+	xorps	xmm2,xmm1
+	movups	xmm1,XMMWORD PTR 32[esi]
+	xorps	xmm3,xmm0
+	movups	xmm0,XMMWORD PTR 48[esi]
+	xorps	xmm4,xmm1
+	movups	xmm1,XMMWORD PTR 64[esi]
+	xorps	xmm5,xmm0
+	movups	XMMWORD PTR [edi],xmm2
+	xorps	xmm6,xmm1
+	movups	XMMWORD PTR 16[edi],xmm3
+	movups	XMMWORD PTR 32[edi],xmm4
+	movups	XMMWORD PTR 48[edi],xmm5
+	movups	XMMWORD PTR 64[edi],xmm6
+	jmp	$L040ctr32_ret
+ALIGN	16
+$L037ctr32_one_shortcut:
+	movups	xmm2,XMMWORD PTR [ebx]
+	mov	ecx,DWORD PTR 240[edx]
+$L041ctr32_one:
+	movups	xmm0,XMMWORD PTR [edx]
+	movups	xmm1,XMMWORD PTR 16[edx]
+	lea	edx,DWORD PTR 32[edx]
+	xorps	xmm2,xmm0
+$L045enc1_loop_7:
+DB	102,15,56,220,209
+	dec	ecx
+	movups	xmm1,XMMWORD PTR [edx]
+	lea	edx,DWORD PTR 16[edx]
+	jnz	$L045enc1_loop_7
+DB	102,15,56,221,209
+	movups	xmm6,XMMWORD PTR [esi]
+	xorps	xmm6,xmm2
+	movups	XMMWORD PTR [edi],xmm6
+	jmp	$L040ctr32_ret
+ALIGN	16
+$L042ctr32_two:
+	call	__aesni_encrypt2
+	movups	xmm5,XMMWORD PTR [esi]
+	movups	xmm6,XMMWORD PTR 16[esi]
+	xorps	xmm2,xmm5
+	xorps	xmm3,xmm6
+	movups	XMMWORD PTR [edi],xmm2
+	movups	XMMWORD PTR 16[edi],xmm3
+	jmp	$L040ctr32_ret
+ALIGN	16
+$L043ctr32_three:
+	call	__aesni_encrypt3
+	movups	xmm5,XMMWORD PTR [esi]
+	movups	xmm6,XMMWORD PTR 16[esi]
+	xorps	xmm2,xmm5
+	movups	xmm7,XMMWORD PTR 32[esi]
+	xorps	xmm3,xmm6
+	movups	XMMWORD PTR [edi],xmm2
+	xorps	xmm4,xmm7
+	movups	XMMWORD PTR 16[edi],xmm3
+	movups	XMMWORD PTR 32[edi],xmm4
+	jmp	$L040ctr32_ret
+ALIGN	16
+$L044ctr32_four:
+	call	__aesni_encrypt4
+	movups	xmm6,XMMWORD PTR [esi]
+	movups	xmm7,XMMWORD PTR 16[esi]
+	movups	xmm1,XMMWORD PTR 32[esi]
+	xorps	xmm2,xmm6
+	movups	xmm0,XMMWORD PTR 48[esi]
+	xorps	xmm3,xmm7
+	movups	XMMWORD PTR [edi],xmm2
+	xorps	xmm4,xmm1
+	movups	XMMWORD PTR 16[edi],xmm3
+	xorps	xmm5,xmm0
+	movups	XMMWORD PTR 32[edi],xmm4
+	movups	XMMWORD PTR 48[edi],xmm5
+$L040ctr32_ret:
+	pxor	xmm0,xmm0
+	pxor	xmm1,xmm1
+	pxor	xmm2,xmm2
+	pxor	xmm3,xmm3
+	pxor	xmm4,xmm4
+	movdqa	XMMWORD PTR 32[esp],xmm0
+	pxor	xmm5,xmm5
+	movdqa	XMMWORD PTR 48[esp],xmm0
+	pxor	xmm6,xmm6
+	movdqa	XMMWORD PTR 64[esp],xmm0
+	pxor	xmm7,xmm7
+	mov	esp,DWORD PTR 80[esp]
+	pop	edi
+	pop	esi
+	pop	ebx
+	pop	ebp
+	ret
+_aesni_ctr32_encrypt_blocks ENDP
+ALIGN	16
+_aesni_xts_encrypt	PROC PUBLIC
+$L_aesni_xts_encrypt_begin::
+	push	ebp
+	push	ebx
+	push	esi
+	push	edi
+	mov	edx,DWORD PTR 36[esp]
+	mov	esi,DWORD PTR 40[esp]
+	mov	ecx,DWORD PTR 240[edx]
+	movups	xmm2,XMMWORD PTR [esi]
+	movups	xmm0,XMMWORD PTR [edx]
+	movups	xmm1,XMMWORD PTR 16[edx]
+	lea	edx,DWORD PTR 32[edx]
+	xorps	xmm2,xmm0
+$L046enc1_loop_8:
+DB	102,15,56,220,209
+	dec	ecx
+	movups	xmm1,XMMWORD PTR [edx]
+	lea	edx,DWORD PTR 16[edx]
+	jnz	$L046enc1_loop_8
+DB	102,15,56,221,209
+	mov	esi,DWORD PTR 20[esp]
+	mov	edi,DWORD PTR 24[esp]
+	mov	eax,DWORD PTR 28[esp]
+	mov	edx,DWORD PTR 32[esp]
+	mov	ebp,esp
+	sub	esp,120
+	mov	ecx,DWORD PTR 240[edx]
+	and	esp,-16
+	mov	DWORD PTR 96[esp],135
+	mov	DWORD PTR 100[esp],0
+	mov	DWORD PTR 104[esp],1
+	mov	DWORD PTR 108[esp],0
+	mov	DWORD PTR 112[esp],eax
+	mov	DWORD PTR 116[esp],ebp
+	movdqa	xmm1,xmm2
+	pxor	xmm0,xmm0
+	movdqa	xmm3,XMMWORD PTR 96[esp]
+	pcmpgtd	xmm0,xmm1
+	and	eax,-16
+	mov	ebp,edx
+	mov	ebx,ecx
+	sub	eax,96
+	jc	$L047xts_enc_short
+	shl	ecx,4
+	mov	ebx,16
+	sub	ebx,ecx
+	lea	edx,DWORD PTR 32[ecx*1+edx]
+	jmp	$L048xts_enc_loop6
+ALIGN	16
+$L048xts_enc_loop6:
+	pshufd	xmm2,xmm0,19
+	pxor	xmm0,xmm0
+	movdqa	XMMWORD PTR [esp],xmm1
+	paddq	xmm1,xmm1
+	pand	xmm2,xmm3
+	pcmpgtd	xmm0,xmm1
+	pxor	xmm1,xmm2
+	pshufd	xmm2,xmm0,19
+	pxor	xmm0,xmm0
+	movdqa	XMMWORD PTR 16[esp],xmm1
+	paddq	xmm1,xmm1
+	pand	xmm2,xmm3
+	pcmpgtd	xmm0,xmm1
+	pxor	xmm1,xmm2
+	pshufd	xmm2,xmm0,19
+	pxor	xmm0,xmm0
+	movdqa	XMMWORD PTR 32[esp],xmm1
+	paddq	xmm1,xmm1
+	pand	xmm2,xmm3
+	pcmpgtd	xmm0,xmm1
+	pxor	xmm1,xmm2
+	pshufd	xmm2,xmm0,19
+	pxor	xmm0,xmm0
+	movdqa	XMMWORD PTR 48[esp],xmm1
+	paddq	xmm1,xmm1
+	pand	xmm2,xmm3
+	pcmpgtd	xmm0,xmm1
+	pxor	xmm1,xmm2
+	pshufd	xmm7,xmm0,19
+	movdqa	XMMWORD PTR 64[esp],xmm1
+	paddq	xmm1,xmm1
+	movups	xmm0,XMMWORD PTR [ebp]
+	pand	xmm7,xmm3
+	movups	xmm2,XMMWORD PTR [esi]
+	pxor	xmm7,xmm1
+	mov	ecx,ebx
+	movdqu	xmm3,XMMWORD PTR 16[esi]
+	xorps	xmm2,xmm0
+	movdqu	xmm4,XMMWORD PTR 32[esi]
+	pxor	xmm3,xmm0
+	movdqu	xmm5,XMMWORD PTR 48[esi]
+	pxor	xmm4,xmm0
+	movdqu	xmm6,XMMWORD PTR 64[esi]
+	pxor	xmm5,xmm0
+	movdqu	xmm1,XMMWORD PTR 80[esi]
+	pxor	xmm6,xmm0
+	lea	esi,DWORD PTR 96[esi]
+	pxor	xmm2,XMMWORD PTR [esp]
+	movdqa	XMMWORD PTR 80[esp],xmm7
+	pxor	xmm7,xmm1
+	movups	xmm1,XMMWORD PTR 16[ebp]
+	pxor	xmm3,XMMWORD PTR 16[esp]
+	pxor	xmm4,XMMWORD PTR 32[esp]
+DB	102,15,56,220,209
+	pxor	xmm5,XMMWORD PTR 48[esp]
+	pxor	xmm6,XMMWORD PTR 64[esp]
+DB	102,15,56,220,217
+	pxor	xmm7,xmm0
+	movups	xmm0,XMMWORD PTR 32[ebp]
+DB	102,15,56,220,225
+DB	102,15,56,220,233
+DB	102,15,56,220,241
+DB	102,15,56,220,249
+	call	$L_aesni_encrypt6_enter
+	movdqa	xmm1,XMMWORD PTR 80[esp]
+	pxor	xmm0,xmm0
+	xorps	xmm2,XMMWORD PTR [esp]
+	pcmpgtd	xmm0,xmm1
+	xorps	xmm3,XMMWORD PTR 16[esp]
+	movups	XMMWORD PTR [edi],xmm2
+	xorps	xmm4,XMMWORD PTR 32[esp]
+	movups	XMMWORD PTR 16[edi],xmm3
+	xorps	xmm5,XMMWORD PTR 48[esp]
+	movups	XMMWORD PTR 32[edi],xmm4
+	xorps	xmm6,XMMWORD PTR 64[esp]
+	movups	XMMWORD PTR 48[edi],xmm5
+	xorps	xmm7,xmm1
+	movups	XMMWORD PTR 64[edi],xmm6
+	pshufd	xmm2,xmm0,19
+	movups	XMMWORD PTR 80[edi],xmm7
+	lea	edi,DWORD PTR 96[edi]
+	movdqa	xmm3,XMMWORD PTR 96[esp]
+	pxor	xmm0,xmm0
+	paddq	xmm1,xmm1
+	pand	xmm2,xmm3
+	pcmpgtd	xmm0,xmm1
+	pxor	xmm1,xmm2
+	sub	eax,96
+	jnc	$L048xts_enc_loop6
+	mov	ecx,DWORD PTR 240[ebp]
+	mov	edx,ebp
+	mov	ebx,ecx
+$L047xts_enc_short:
+	add	eax,96
+	jz	$L049xts_enc_done6x
+	movdqa	xmm5,xmm1
+	cmp	eax,32
+	jb	$L050xts_enc_one
+	pshufd	xmm2,xmm0,19
+	pxor	xmm0,xmm0
+	paddq	xmm1,xmm1
+	pand	xmm2,xmm3
+	pcmpgtd	xmm0,xmm1
+	pxor	xmm1,xmm2
+	je	$L051xts_enc_two
+	pshufd	xmm2,xmm0,19
+	pxor	xmm0,xmm0
+	movdqa	xmm6,xmm1
+	paddq	xmm1,xmm1
+	pand	xmm2,xmm3
+	pcmpgtd	xmm0,xmm1
+	pxor	xmm1,xmm2
+	cmp	eax,64
+	jb	$L052xts_enc_three
+	pshufd	xmm2,xmm0,19
+	pxor	xmm0,xmm0
+	movdqa	xmm7,xmm1
+	paddq	xmm1,xmm1
+	pand	xmm2,xmm3
+	pcmpgtd	xmm0,xmm1
+	pxor	xmm1,xmm2
+	movdqa	XMMWORD PTR [esp],xmm5
+	movdqa	XMMWORD PTR 16[esp],xmm6
+	je	$L053xts_enc_four
+	movdqa	XMMWORD PTR 32[esp],xmm7
+	pshufd	xmm7,xmm0,19
+	movdqa	XMMWORD PTR 48[esp],xmm1
+	paddq	xmm1,xmm1
+	pand	xmm7,xmm3
+	pxor	xmm7,xmm1
+	movdqu	xmm2,XMMWORD PTR [esi]
+	movdqu	xmm3,XMMWORD PTR 16[esi]
+	movdqu	xmm4,XMMWORD PTR 32[esi]
+	pxor	xmm2,XMMWORD PTR [esp]
+	movdqu	xmm5,XMMWORD PTR 48[esi]
+	pxor	xmm3,XMMWORD PTR 16[esp]
+	movdqu	xmm6,XMMWORD PTR 64[esi]
+	pxor	xmm4,XMMWORD PTR 32[esp]
+	lea	esi,DWORD PTR 80[esi]
+	pxor	xmm5,XMMWORD PTR 48[esp]
+	movdqa	XMMWORD PTR 64[esp],xmm7
+	pxor	xmm6,xmm7
+	call	__aesni_encrypt6
+	movaps	xmm1,XMMWORD PTR 64[esp]
+	xorps	xmm2,XMMWORD PTR [esp]
+	xorps	xmm3,XMMWORD PTR 16[esp]
+	xorps	xmm4,XMMWORD PTR 32[esp]
+	movups	XMMWORD PTR [edi],xmm2
+	xorps	xmm5,XMMWORD PTR 48[esp]
+	movups	XMMWORD PTR 16[edi],xmm3
+	xorps	xmm6,xmm1
+	movups	XMMWORD PTR 32[edi],xmm4
+	movups	XMMWORD PTR 48[edi],xmm5
+	movups	XMMWORD PTR 64[edi],xmm6
+	lea	edi,DWORD PTR 80[edi]
+	jmp	$L054xts_enc_done
+ALIGN	16
+$L050xts_enc_one:
+	movups	xmm2,XMMWORD PTR [esi]
+	lea	esi,DWORD PTR 16[esi]
+	xorps	xmm2,xmm5
+	movups	xmm0,XMMWORD PTR [edx]
+	movups	xmm1,XMMWORD PTR 16[edx]
+	lea	edx,DWORD PTR 32[edx]
+	xorps	xmm2,xmm0
+$L055enc1_loop_9:
+DB	102,15,56,220,209
+	dec	ecx
+	movups	xmm1,XMMWORD PTR [edx]
+	lea	edx,DWORD PTR 16[edx]
+	jnz	$L055enc1_loop_9
+DB	102,15,56,221,209
+	xorps	xmm2,xmm5
+	movups	XMMWORD PTR [edi],xmm2
+	lea	edi,DWORD PTR 16[edi]
+	movdqa	xmm1,xmm5
+	jmp	$L054xts_enc_done
+ALIGN	16
+$L051xts_enc_two:
+	movaps	xmm6,xmm1
+	movups	xmm2,XMMWORD PTR [esi]
+	movups	xmm3,XMMWORD PTR 16[esi]
+	lea	esi,DWORD PTR 32[esi]
+	xorps	xmm2,xmm5
+	xorps	xmm3,xmm6
+	call	__aesni_encrypt2
+	xorps	xmm2,xmm5
+	xorps	xmm3,xmm6
+	movups	XMMWORD PTR [edi],xmm2
+	movups	XMMWORD PTR 16[edi],xmm3
+	lea	edi,DWORD PTR 32[edi]
+	movdqa	xmm1,xmm6
+	jmp	$L054xts_enc_done
+ALIGN	16
+$L052xts_enc_three:
+	movaps	xmm7,xmm1
+	movups	xmm2,XMMWORD PTR [esi]
+	movups	xmm3,XMMWORD PTR 16[esi]
+	movups	xmm4,XMMWORD PTR 32[esi]
+	lea	esi,DWORD PTR 48[esi]
+	xorps	xmm2,xmm5
+	xorps	xmm3,xmm6
+	xorps	xmm4,xmm7
+	call	__aesni_encrypt3
+	xorps	xmm2,xmm5
+	xorps	xmm3,xmm6
+	xorps	xmm4,xmm7
+	movups	XMMWORD PTR [edi],xmm2
+	movups	XMMWORD PTR 16[edi],xmm3
+	movups	XMMWORD PTR 32[edi],xmm4
+	lea	edi,DWORD PTR 48[edi]
+	movdqa	xmm1,xmm7
+	jmp	$L054xts_enc_done
+ALIGN	16
+$L053xts_enc_four:
+	movaps	xmm6,xmm1
+	movups	xmm2,XMMWORD PTR [esi]
+	movups	xmm3,XMMWORD PTR 16[esi]
+	movups	xmm4,XMMWORD PTR 32[esi]
+	xorps	xmm2,XMMWORD PTR [esp]
+	movups	xmm5,XMMWORD PTR 48[esi]
+	lea	esi,DWORD PTR 64[esi]
+	xorps	xmm3,XMMWORD PTR 16[esp]
+	xorps	xmm4,xmm7
+	xorps	xmm5,xmm6
+	call	__aesni_encrypt4
+	xorps	xmm2,XMMWORD PTR [esp]
+	xorps	xmm3,XMMWORD PTR 16[esp]
+	xorps	xmm4,xmm7
+	movups	XMMWORD PTR [edi],xmm2
+	xorps	xmm5,xmm6
+	movups	XMMWORD PTR 16[edi],xmm3
+	movups	XMMWORD PTR 32[edi],xmm4
+	movups	XMMWORD PTR 48[edi],xmm5
+	lea	edi,DWORD PTR 64[edi]
+	movdqa	xmm1,xmm6
+	jmp	$L054xts_enc_done
+ALIGN	16
+$L049xts_enc_done6x:
+	mov	eax,DWORD PTR 112[esp]
+	and	eax,15
+	jz	$L056xts_enc_ret
+	movdqa	xmm5,xmm1
+	mov	DWORD PTR 112[esp],eax
+	jmp	$L057xts_enc_steal
+ALIGN	16
+$L054xts_enc_done:
+	mov	eax,DWORD PTR 112[esp]
+	pxor	xmm0,xmm0
+	and	eax,15
+	jz	$L056xts_enc_ret
+	pcmpgtd	xmm0,xmm1
+	mov	DWORD PTR 112[esp],eax
+	pshufd	xmm5,xmm0,19
+	paddq	xmm1,xmm1
+	pand	xmm5,XMMWORD PTR 96[esp]
+	pxor	xmm5,xmm1
+$L057xts_enc_steal:
+	movzx	ecx,BYTE PTR [esi]
+	movzx	edx,BYTE PTR [edi-16]
+	lea	esi,DWORD PTR 1[esi]
+	mov	BYTE PTR [edi-16],cl
+	mov	BYTE PTR [edi],dl
+	lea	edi,DWORD PTR 1[edi]
+	sub	eax,1
+	jnz	$L057xts_enc_steal
+	sub	edi,DWORD PTR 112[esp]
+	mov	edx,ebp
+	mov	ecx,ebx
+	movups	xmm2,XMMWORD PTR [edi-16]
+	xorps	xmm2,xmm5
+	movups	xmm0,XMMWORD PTR [edx]
+	movups	xmm1,XMMWORD PTR 16[edx]
+	lea	edx,DWORD PTR 32[edx]
+	xorps	xmm2,xmm0
+$L058enc1_loop_10:
+DB	102,15,56,220,209
+	dec	ecx
+	movups	xmm1,XMMWORD PTR [edx]
+	lea	edx,DWORD PTR 16[edx]
+	jnz	$L058enc1_loop_10
+DB	102,15,56,221,209
+	xorps	xmm2,xmm5
+	movups	XMMWORD PTR [edi-16],xmm2
+$L056xts_enc_ret:
+	pxor	xmm0,xmm0
+	pxor	xmm1,xmm1
+	pxor	xmm2,xmm2
+	movdqa	XMMWORD PTR [esp],xmm0
+	pxor	xmm3,xmm3
+	movdqa	XMMWORD PTR 16[esp],xmm0
+	pxor	xmm4,xmm4
+	movdqa	XMMWORD PTR 32[esp],xmm0
+	pxor	xmm5,xmm5
+	movdqa	XMMWORD PTR 48[esp],xmm0
+	pxor	xmm6,xmm6
+	movdqa	XMMWORD PTR 64[esp],xmm0
+	pxor	xmm7,xmm7
+	movdqa	XMMWORD PTR 80[esp],xmm0
+	mov	esp,DWORD PTR 116[esp]
+	pop	edi
+	pop	esi
+	pop	ebx
+	pop	ebp
+	ret
+_aesni_xts_encrypt ENDP
+ALIGN	16
+_aesni_xts_decrypt	PROC PUBLIC
+$L_aesni_xts_decrypt_begin::
+	push	ebp
+	push	ebx
+	push	esi
+	push	edi
+	mov	edx,DWORD PTR 36[esp]
+	mov	esi,DWORD PTR 40[esp]
+	mov	ecx,DWORD PTR 240[edx]
+	movups	xmm2,XMMWORD PTR [esi]
+	movups	xmm0,XMMWORD PTR [edx]
+	movups	xmm1,XMMWORD PTR 16[edx]
+	lea	edx,DWORD PTR 32[edx]
+	xorps	xmm2,xmm0
+$L059enc1_loop_11:
+DB	102,15,56,220,209
+	dec	ecx
+	movups	xmm1,XMMWORD PTR [edx]
+	lea	edx,DWORD PTR 16[edx]
+	jnz	$L059enc1_loop_11
+DB	102,15,56,221,209
+	mov	esi,DWORD PTR 20[esp]
+	mov	edi,DWORD PTR 24[esp]
+	mov	eax,DWORD PTR 28[esp]
+	mov	edx,DWORD PTR 32[esp]
+	mov	ebp,esp
+	sub	esp,120
+	and	esp,-16
+	xor	ebx,ebx
+	test	eax,15
+	setnz	bl
+	shl	ebx,4
+	sub	eax,ebx
+	mov	DWORD PTR 96[esp],135
+	mov	DWORD PTR 100[esp],0
+	mov	DWORD PTR 104[esp],1
+	mov	DWORD PTR 108[esp],0
+	mov	DWORD PTR 112[esp],eax
+	mov	DWORD PTR 116[esp],ebp
+	mov	ecx,DWORD PTR 240[edx]
+	mov	ebp,edx
+	mov	ebx,ecx
+	movdqa	xmm1,xmm2
+	pxor	xmm0,xmm0
+	movdqa	xmm3,XMMWORD PTR 96[esp]
+	pcmpgtd	xmm0,xmm1
+	and	eax,-16
+	sub	eax,96
+	jc	$L060xts_dec_short
+	shl	ecx,4
+	mov	ebx,16
+	sub	ebx,ecx
+	lea	edx,DWORD PTR 32[ecx*1+edx]
+	jmp	$L061xts_dec_loop6
+ALIGN	16
+$L061xts_dec_loop6:
+	pshufd	xmm2,xmm0,19
+	pxor	xmm0,xmm0
+	movdqa	XMMWORD PTR [esp],xmm1
+	paddq	xmm1,xmm1
+	pand	xmm2,xmm3
+	pcmpgtd	xmm0,xmm1
+	pxor	xmm1,xmm2
+	pshufd	xmm2,xmm0,19
+	pxor	xmm0,xmm0
+	movdqa	XMMWORD PTR 16[esp],xmm1
+	paddq	xmm1,xmm1
+	pand	xmm2,xmm3
+	pcmpgtd	xmm0,xmm1
+	pxor	xmm1,xmm2
+	pshufd	xmm2,xmm0,19
+	pxor	xmm0,xmm0
+	movdqa	XMMWORD PTR 32[esp],xmm1
+	paddq	xmm1,xmm1
+	pand	xmm2,xmm3
+	pcmpgtd	xmm0,xmm1
+	pxor	xmm1,xmm2
+	pshufd	xmm2,xmm0,19
+	pxor	xmm0,xmm0
+	movdqa	XMMWORD PTR 48[esp],xmm1
+	paddq	xmm1,xmm1
+	pand	xmm2,xmm3
+	pcmpgtd	xmm0,xmm1
+	pxor	xmm1,xmm2
+	pshufd	xmm7,xmm0,19
+	movdqa	XMMWORD PTR 64[esp],xmm1
+	paddq	xmm1,xmm1
+	movups	xmm0,XMMWORD PTR [ebp]
+	pand	xmm7,xmm3
+	movups	xmm2,XMMWORD PTR [esi]
+	pxor	xmm7,xmm1
+	mov	ecx,ebx
+	movdqu	xmm3,XMMWORD PTR 16[esi]
+	xorps	xmm2,xmm0
+	movdqu	xmm4,XMMWORD PTR 32[esi]
+	pxor	xmm3,xmm0
+	movdqu	xmm5,XMMWORD PTR 48[esi]
+	pxor	xmm4,xmm0
+	movdqu	xmm6,XMMWORD PTR 64[esi]
+	pxor	xmm5,xmm0
+	movdqu	xmm1,XMMWORD PTR 80[esi]
+	pxor	xmm6,xmm0
+	lea	esi,DWORD PTR 96[esi]
+	pxor	xmm2,XMMWORD PTR [esp]
+	movdqa	XMMWORD PTR 80[esp],xmm7
+	pxor	xmm7,xmm1
+	movups	xmm1,XMMWORD PTR 16[ebp]
+	pxor	xmm3,XMMWORD PTR 16[esp]
+	pxor	xmm4,XMMWORD PTR 32[esp]
+DB	102,15,56,222,209
+	pxor	xmm5,XMMWORD PTR 48[esp]
+	pxor	xmm6,XMMWORD PTR 64[esp]
+DB	102,15,56,222,217
+	pxor	xmm7,xmm0
+	movups	xmm0,XMMWORD PTR 32[ebp]
+DB	102,15,56,222,225
+DB	102,15,56,222,233
+DB	102,15,56,222,241
+DB	102,15,56,222,249
+	call	$L_aesni_decrypt6_enter
+	movdqa	xmm1,XMMWORD PTR 80[esp]
+	pxor	xmm0,xmm0
+	xorps	xmm2,XMMWORD PTR [esp]
+	pcmpgtd	xmm0,xmm1
+	xorps	xmm3,XMMWORD PTR 16[esp]
+	movups	XMMWORD PTR [edi],xmm2
+	xorps	xmm4,XMMWORD PTR 32[esp]
+	movups	XMMWORD PTR 16[edi],xmm3
+	xorps	xmm5,XMMWORD PTR 48[esp]
+	movups	XMMWORD PTR 32[edi],xmm4
+	xorps	xmm6,XMMWORD PTR 64[esp]
+	movups	XMMWORD PTR 48[edi],xmm5
+	xorps	xmm7,xmm1
+	movups	XMMWORD PTR 64[edi],xmm6
+	pshufd	xmm2,xmm0,19
+	movups	XMMWORD PTR 80[edi],xmm7
+	lea	edi,DWORD PTR 96[edi]
+	movdqa	xmm3,XMMWORD PTR 96[esp]
+	pxor	xmm0,xmm0
+	paddq	xmm1,xmm1
+	pand	xmm2,xmm3
+	pcmpgtd	xmm0,xmm1
+	pxor	xmm1,xmm2
+	sub	eax,96
+	jnc	$L061xts_dec_loop6
+	mov	ecx,DWORD PTR 240[ebp]
+	mov	edx,ebp
+	mov	ebx,ecx
+$L060xts_dec_short:
+	add	eax,96
+	jz	$L062xts_dec_done6x
+	movdqa	xmm5,xmm1
+	cmp	eax,32
+	jb	$L063xts_dec_one
+	pshufd	xmm2,xmm0,19
+	pxor	xmm0,xmm0
+	paddq	xmm1,xmm1
+	pand	xmm2,xmm3
+	pcmpgtd	xmm0,xmm1
+	pxor	xmm1,xmm2
+	je	$L064xts_dec_two
+	pshufd	xmm2,xmm0,19
+	pxor	xmm0,xmm0
+	movdqa	xmm6,xmm1
+	paddq	xmm1,xmm1
+	pand	xmm2,xmm3
+	pcmpgtd	xmm0,xmm1
+	pxor	xmm1,xmm2
+	cmp	eax,64
+	jb	$L065xts_dec_three
+	pshufd	xmm2,xmm0,19
+	pxor	xmm0,xmm0
+	movdqa	xmm7,xmm1
+	paddq	xmm1,xmm1
+	pand	xmm2,xmm3
+	pcmpgtd	xmm0,xmm1
+	pxor	xmm1,xmm2
+	movdqa	XMMWORD PTR [esp],xmm5
+	movdqa	XMMWORD PTR 16[esp],xmm6
+	je	$L066xts_dec_four
+	movdqa	XMMWORD PTR 32[esp],xmm7
+	pshufd	xmm7,xmm0,19
+	movdqa	XMMWORD PTR 48[esp],xmm1
+	paddq	xmm1,xmm1
+	pand	xmm7,xmm3
+	pxor	xmm7,xmm1
+	movdqu	xmm2,XMMWORD PTR [esi]
+	movdqu	xmm3,XMMWORD PTR 16[esi]
+	movdqu	xmm4,XMMWORD PTR 32[esi]
+	pxor	xmm2,XMMWORD PTR [esp]
+	movdqu	xmm5,XMMWORD PTR 48[esi]
+	pxor	xmm3,XMMWORD PTR 16[esp]
+	movdqu	xmm6,XMMWORD PTR 64[esi]
+	pxor	xmm4,XMMWORD PTR 32[esp]
+	lea	esi,DWORD PTR 80[esi]
+	pxor	xmm5,XMMWORD PTR 48[esp]
+	movdqa	XMMWORD PTR 64[esp],xmm7
+	pxor	xmm6,xmm7
+	call	__aesni_decrypt6
+	movaps	xmm1,XMMWORD PTR 64[esp]
+	xorps	xmm2,XMMWORD PTR [esp]
+	xorps	xmm3,XMMWORD PTR 16[esp]
+	xorps	xmm4,XMMWORD PTR 32[esp]
+	movups	XMMWORD PTR [edi],xmm2
+	xorps	xmm5,XMMWORD PTR 48[esp]
+	movups	XMMWORD PTR 16[edi],xmm3
+	xorps	xmm6,xmm1
+	movups	XMMWORD PTR 32[edi],xmm4
+	movups	XMMWORD PTR 48[edi],xmm5
+	movups	XMMWORD PTR 64[edi],xmm6
+	lea	edi,DWORD PTR 80[edi]
+	jmp	$L067xts_dec_done
+ALIGN	16
+$L063xts_dec_one:
+	movups	xmm2,XMMWORD PTR [esi]
+	lea	esi,DWORD PTR 16[esi]
+	xorps	xmm2,xmm5
+	movups	xmm0,XMMWORD PTR [edx]
+	movups	xmm1,XMMWORD PTR 16[edx]
+	lea	edx,DWORD PTR 32[edx]
+	xorps	xmm2,xmm0
+$L068dec1_loop_12:
+DB	102,15,56,222,209
+	dec	ecx
+	movups	xmm1,XMMWORD PTR [edx]
+	lea	edx,DWORD PTR 16[edx]
+	jnz	$L068dec1_loop_12
+DB	102,15,56,223,209
+	xorps	xmm2,xmm5
+	movups	XMMWORD PTR [edi],xmm2
+	lea	edi,DWORD PTR 16[edi]
+	movdqa	xmm1,xmm5
+	jmp	$L067xts_dec_done
+ALIGN	16
+$L064xts_dec_two:
+	movaps	xmm6,xmm1
+	movups	xmm2,XMMWORD PTR [esi]
+	movups	xmm3,XMMWORD PTR 16[esi]
+	lea	esi,DWORD PTR 32[esi]
+	xorps	xmm2,xmm5
+	xorps	xmm3,xmm6
+	call	__aesni_decrypt2
+	xorps	xmm2,xmm5
+	xorps	xmm3,xmm6
+	movups	XMMWORD PTR [edi],xmm2
+	movups	XMMWORD PTR 16[edi],xmm3
+	lea	edi,DWORD PTR 32[edi]
+	movdqa	xmm1,xmm6
+	jmp	$L067xts_dec_done
+ALIGN	16
+$L065xts_dec_three:
+	movaps	xmm7,xmm1
+	movups	xmm2,XMMWORD PTR [esi]
+	movups	xmm3,XMMWORD PTR 16[esi]
+	movups	xmm4,XMMWORD PTR 32[esi]
+	lea	esi,DWORD PTR 48[esi]
+	xorps	xmm2,xmm5
+	xorps	xmm3,xmm6
+	xorps	xmm4,xmm7
+	call	__aesni_decrypt3
+	xorps	xmm2,xmm5
+	xorps	xmm3,xmm6
+	xorps	xmm4,xmm7
+	movups	XMMWORD PTR [edi],xmm2
+	movups	XMMWORD PTR 16[edi],xmm3
+	movups	XMMWORD PTR 32[edi],xmm4
+	lea	edi,DWORD PTR 48[edi]
+	movdqa	xmm1,xmm7
+	jmp	$L067xts_dec_done
+ALIGN	16
+$L066xts_dec_four:
+	movaps	xmm6,xmm1
+	movups	xmm2,XMMWORD PTR [esi]
+	movups	xmm3,XMMWORD PTR 16[esi]
+	movups	xmm4,XMMWORD PTR 32[esi]
+	xorps	xmm2,XMMWORD PTR [esp]
+	movups	xmm5,XMMWORD PTR 48[esi]
+	lea	esi,DWORD PTR 64[esi]
+	xorps	xmm3,XMMWORD PTR 16[esp]
+	xorps	xmm4,xmm7
+	xorps	xmm5,xmm6
+	call	__aesni_decrypt4
+	xorps	xmm2,XMMWORD PTR [esp]
+	xorps	xmm3,XMMWORD PTR 16[esp]
+	xorps	xmm4,xmm7
+	movups	XMMWORD PTR [edi],xmm2
+	xorps	xmm5,xmm6
+	movups	XMMWORD PTR 16[edi],xmm3
+	movups	XMMWORD PTR 32[edi],xmm4
+	movups	XMMWORD PTR 48[edi],xmm5
+	lea	edi,DWORD PTR 64[edi]
+	movdqa	xmm1,xmm6
+	jmp	$L067xts_dec_done
+ALIGN	16
+$L062xts_dec_done6x:
+	mov	eax,DWORD PTR 112[esp]
+	and	eax,15
+	jz	$L069xts_dec_ret
+	mov	DWORD PTR 112[esp],eax
+	jmp	$L070xts_dec_only_one_more
+ALIGN	16
+$L067xts_dec_done:
+	mov	eax,DWORD PTR 112[esp]
+	pxor	xmm0,xmm0
+	and	eax,15
+	jz	$L069xts_dec_ret
+	pcmpgtd	xmm0,xmm1
+	mov	DWORD PTR 112[esp],eax
+	pshufd	xmm2,xmm0,19
+	pxor	xmm0,xmm0
+	movdqa	xmm3,XMMWORD PTR 96[esp]
+	paddq	xmm1,xmm1
+	pand	xmm2,xmm3
+	pcmpgtd	xmm0,xmm1
+	pxor	xmm1,xmm2
+$L070xts_dec_only_one_more:
+	pshufd	xmm5,xmm0,19
+	movdqa	xmm6,xmm1
+	paddq	xmm1,xmm1
+	pand	xmm5,xmm3
+	pxor	xmm5,xmm1
+	mov	edx,ebp
+	mov	ecx,ebx
+	movups	xmm2,XMMWORD PTR [esi]
+	xorps	xmm2,xmm5
+	movups	xmm0,XMMWORD PTR [edx]
+	movups	xmm1,XMMWORD PTR 16[edx]
+	lea	edx,DWORD PTR 32[edx]
+	xorps	xmm2,xmm0
+$L071dec1_loop_13:
+DB	102,15,56,222,209
+	dec	ecx
+	movups	xmm1,XMMWORD PTR [edx]
+	lea	edx,DWORD PTR 16[edx]
+	jnz	$L071dec1_loop_13
+DB	102,15,56,223,209
+	xorps	xmm2,xmm5
+	movups	XMMWORD PTR [edi],xmm2
+$L072xts_dec_steal:
+	movzx	ecx,BYTE PTR 16[esi]
+	movzx	edx,BYTE PTR [edi]
+	lea	esi,DWORD PTR 1[esi]
+	mov	BYTE PTR [edi],cl
+	mov	BYTE PTR 16[edi],dl
+	lea	edi,DWORD PTR 1[edi]
+	sub	eax,1
+	jnz	$L072xts_dec_steal
+	sub	edi,DWORD PTR 112[esp]
+	mov	edx,ebp
+	mov	ecx,ebx
+	movups	xmm2,XMMWORD PTR [edi]
+	xorps	xmm2,xmm6
+	movups	xmm0,XMMWORD PTR [edx]
+	movups	xmm1,XMMWORD PTR 16[edx]
+	lea	edx,DWORD PTR 32[edx]
+	xorps	xmm2,xmm0
+$L073dec1_loop_14:
+DB	102,15,56,222,209
+	dec	ecx
+	movups	xmm1,XMMWORD PTR [edx]
+	lea	edx,DWORD PTR 16[edx]
+	jnz	$L073dec1_loop_14
+DB	102,15,56,223,209
+	xorps	xmm2,xmm6
+	movups	XMMWORD PTR [edi],xmm2
+$L069xts_dec_ret:
+	pxor	xmm0,xmm0
+	pxor	xmm1,xmm1
+	pxor	xmm2,xmm2
+	movdqa	XMMWORD PTR [esp],xmm0
+	pxor	xmm3,xmm3
+	movdqa	XMMWORD PTR 16[esp],xmm0
+	pxor	xmm4,xmm4
+	movdqa	XMMWORD PTR 32[esp],xmm0
+	pxor	xmm5,xmm5
+	movdqa	XMMWORD PTR 48[esp],xmm0
+	pxor	xmm6,xmm6
+	movdqa	XMMWORD PTR 64[esp],xmm0
+	pxor	xmm7,xmm7
+	movdqa	XMMWORD PTR 80[esp],xmm0
+	mov	esp,DWORD PTR 116[esp]
+	pop	edi
+	pop	esi
+	pop	ebx
+	pop	ebp
+	ret
+_aesni_xts_decrypt ENDP
+ALIGN	16
+_aesni_ocb_encrypt	PROC PUBLIC
+$L_aesni_ocb_encrypt_begin::
+	push	ebp
+	push	ebx
+	push	esi
+	push	edi
+	mov	ecx,DWORD PTR 40[esp]
+	mov	ebx,DWORD PTR 48[esp]
+	mov	esi,DWORD PTR 20[esp]
+	mov	edi,DWORD PTR 24[esp]
+	mov	eax,DWORD PTR 28[esp]
+	mov	edx,DWORD PTR 32[esp]
+	movdqu	xmm0,XMMWORD PTR [ecx]
+	mov	ebp,DWORD PTR 36[esp]
+	movdqu	xmm1,XMMWORD PTR [ebx]
+	mov	ebx,DWORD PTR 44[esp]
+	mov	ecx,esp
+	sub	esp,132
+	and	esp,-16
+	sub	edi,esi
+	shl	eax,4
+	lea	eax,DWORD PTR [eax*1+esi-96]
+	mov	DWORD PTR 120[esp],edi
+	mov	DWORD PTR 124[esp],eax
+	mov	DWORD PTR 128[esp],ecx
+	mov	ecx,DWORD PTR 240[edx]
+	test	ebp,1
+	jnz	$L074odd
+	bsf	eax,ebp
+	add	ebp,1
+	shl	eax,4
+	movdqu	xmm7,XMMWORD PTR [eax*1+ebx]
+	mov	eax,edx
+	movdqu	xmm2,XMMWORD PTR [esi]
+	lea	esi,DWORD PTR 16[esi]
+	pxor	xmm7,xmm0
+	pxor	xmm1,xmm2
+	pxor	xmm2,xmm7
+	movdqa	xmm6,xmm1
+	movups	xmm0,XMMWORD PTR [edx]
+	movups	xmm1,XMMWORD PTR 16[edx]
+	lea	edx,DWORD PTR 32[edx]
+	xorps	xmm2,xmm0
+$L075enc1_loop_15:
+DB	102,15,56,220,209
+	dec	ecx
+	movups	xmm1,XMMWORD PTR [edx]
+	lea	edx,DWORD PTR 16[edx]
+	jnz	$L075enc1_loop_15
+DB	102,15,56,221,209
+	xorps	xmm2,xmm7
+	movdqa	xmm0,xmm7
+	movdqa	xmm1,xmm6
+	movups	XMMWORD PTR [esi*1+edi-16],xmm2
+	mov	ecx,DWORD PTR 240[eax]
+	mov	edx,eax
+	mov	eax,DWORD PTR 124[esp]
+$L074odd:
+	shl	ecx,4
+	mov	edi,16
+	sub	edi,ecx
+	mov	DWORD PTR 112[esp],edx
+	lea	edx,DWORD PTR 32[ecx*1+edx]
+	mov	DWORD PTR 116[esp],edi
+	cmp	esi,eax
+	ja	$L076short
+	jmp	$L077grandloop
+ALIGN	32
+$L077grandloop:
+	lea	ecx,DWORD PTR 1[ebp]
+	lea	eax,DWORD PTR 3[ebp]
+	lea	edi,DWORD PTR 5[ebp]
+	add	ebp,6
+	bsf	ecx,ecx
+	bsf	eax,eax
+	bsf	edi,edi
+	shl	ecx,4
+	shl	eax,4
+	shl	edi,4
+	movdqu	xmm2,XMMWORD PTR [ebx]
+	movdqu	xmm3,XMMWORD PTR [ecx*1+ebx]
+	mov	ecx,DWORD PTR 116[esp]
+	movdqa	xmm4,xmm2
+	movdqu	xmm5,XMMWORD PTR [eax*1+ebx]
+	movdqa	xmm6,xmm2
+	movdqu	xmm7,XMMWORD PTR [edi*1+ebx]
+	pxor	xmm2,xmm0
+	pxor	xmm3,xmm2
+	movdqa	XMMWORD PTR [esp],xmm2
+	pxor	xmm4,xmm3
+	movdqa	XMMWORD PTR 16[esp],xmm3
+	pxor	xmm5,xmm4
+	movdqa	XMMWORD PTR 32[esp],xmm4
+	pxor	xmm6,xmm5
+	movdqa	XMMWORD PTR 48[esp],xmm5
+	pxor	xmm7,xmm6
+	movdqa	XMMWORD PTR 64[esp],xmm6
+	movdqa	XMMWORD PTR 80[esp],xmm7
+	movups	xmm0,XMMWORD PTR [ecx*1+edx-48]
+	movdqu	xmm2,XMMWORD PTR [esi]
+	movdqu	xmm3,XMMWORD PTR 16[esi]
+	movdqu	xmm4,XMMWORD PTR 32[esi]
+	movdqu	xmm5,XMMWORD PTR 48[esi]
+	movdqu	xmm6,XMMWORD PTR 64[esi]
+	movdqu	xmm7,XMMWORD PTR 80[esi]
+	lea	esi,DWORD PTR 96[esi]
+	pxor	xmm1,xmm2
+	pxor	xmm2,xmm0
+	pxor	xmm1,xmm3
+	pxor	xmm3,xmm0
+	pxor	xmm1,xmm4
+	pxor	xmm4,xmm0
+	pxor	xmm1,xmm5
+	pxor	xmm5,xmm0
+	pxor	xmm1,xmm6
+	pxor	xmm6,xmm0
+	pxor	xmm1,xmm7
+	pxor	xmm7,xmm0
+	movdqa	XMMWORD PTR 96[esp],xmm1
+	movups	xmm1,XMMWORD PTR [ecx*1+edx-32]
+	pxor	xmm2,XMMWORD PTR [esp]
+	pxor	xmm3,XMMWORD PTR 16[esp]
+	pxor	xmm4,XMMWORD PTR 32[esp]
+	pxor	xmm5,XMMWORD PTR 48[esp]
+	pxor	xmm6,XMMWORD PTR 64[esp]
+	pxor	xmm7,XMMWORD PTR 80[esp]
+	movups	xmm0,XMMWORD PTR [ecx*1+edx-16]
+DB	102,15,56,220,209
+DB	102,15,56,220,217
+DB	102,15,56,220,225
+DB	102,15,56,220,233
+DB	102,15,56,220,241
+DB	102,15,56,220,249
+	mov	edi,DWORD PTR 120[esp]
+	mov	eax,DWORD PTR 124[esp]
+	call	$L_aesni_encrypt6_enter
+	movdqa	xmm0,XMMWORD PTR 80[esp]
+	pxor	xmm2,XMMWORD PTR [esp]
+	pxor	xmm3,XMMWORD PTR 16[esp]
+	pxor	xmm4,XMMWORD PTR 32[esp]
+	pxor	xmm5,XMMWORD PTR 48[esp]
+	pxor	xmm6,XMMWORD PTR 64[esp]
+	pxor	xmm7,xmm0
+	movdqa	xmm1,XMMWORD PTR 96[esp]
+	movdqu	XMMWORD PTR [esi*1+edi-96],xmm2
+	movdqu	XMMWORD PTR [esi*1+edi-80],xmm3
+	movdqu	XMMWORD PTR [esi*1+edi-64],xmm4
+	movdqu	XMMWORD PTR [esi*1+edi-48],xmm5
+	movdqu	XMMWORD PTR [esi*1+edi-32],xmm6
+	movdqu	XMMWORD PTR [esi*1+edi-16],xmm7
+	cmp	esi,eax
+	jb	$L077grandloop
+$L076short:
+	add	eax,96
+	sub	eax,esi
+	jz	$L078done
+	cmp	eax,32
+	jb	$L079one
+	je	$L080two
+	cmp	eax,64
+	jb	$L081three
+	je	$L082four
+	lea	ecx,DWORD PTR 1[ebp]
+	lea	eax,DWORD PTR 3[ebp]
+	bsf	ecx,ecx
+	bsf	eax,eax
+	shl	ecx,4
+	shl	eax,4
+	movdqu	xmm2,XMMWORD PTR [ebx]
+	movdqu	xmm3,XMMWORD PTR [ecx*1+ebx]
+	mov	ecx,DWORD PTR 116[esp]
+	movdqa	xmm4,xmm2
+	movdqu	xmm5,XMMWORD PTR [eax*1+ebx]
+	movdqa	xmm6,xmm2
+	pxor	xmm2,xmm0
+	pxor	xmm3,xmm2
+	movdqa	XMMWORD PTR [esp],xmm2
+	pxor	xmm4,xmm3
+	movdqa	XMMWORD PTR 16[esp],xmm3
+	pxor	xmm5,xmm4
+	movdqa	XMMWORD PTR 32[esp],xmm4
+	pxor	xmm6,xmm5
+	movdqa	XMMWORD PTR 48[esp],xmm5
+	pxor	xmm7,xmm6
+	movdqa	XMMWORD PTR 64[esp],xmm6
+	movups	xmm0,XMMWORD PTR [ecx*1+edx-48]
+	movdqu	xmm2,XMMWORD PTR [esi]
+	movdqu	xmm3,XMMWORD PTR 16[esi]
+	movdqu	xmm4,XMMWORD PTR 32[esi]
+	movdqu	xmm5,XMMWORD PTR 48[esi]
+	movdqu	xmm6,XMMWORD PTR 64[esi]
+	pxor	xmm7,xmm7
+	pxor	xmm1,xmm2
+	pxor	xmm2,xmm0
+	pxor	xmm1,xmm3
+	pxor	xmm3,xmm0
+	pxor	xmm1,xmm4
+	pxor	xmm4,xmm0
+	pxor	xmm1,xmm5
+	pxor	xmm5,xmm0
+	pxor	xmm1,xmm6
+	pxor	xmm6,xmm0
+	movdqa	XMMWORD PTR 96[esp],xmm1
+	movups	xmm1,XMMWORD PTR [ecx*1+edx-32]
+	pxor	xmm2,XMMWORD PTR [esp]
+	pxor	xmm3,XMMWORD PTR 16[esp]
+	pxor	xmm4,XMMWORD PTR 32[esp]
+	pxor	xmm5,XMMWORD PTR 48[esp]
+	pxor	xmm6,XMMWORD PTR 64[esp]
+	movups	xmm0,XMMWORD PTR [ecx*1+edx-16]
+DB	102,15,56,220,209
+DB	102,15,56,220,217
+DB	102,15,56,220,225
+DB	102,15,56,220,233
+DB	102,15,56,220,241
+DB	102,15,56,220,249
+	mov	edi,DWORD PTR 120[esp]
+	call	$L_aesni_encrypt6_enter
+	movdqa	xmm0,XMMWORD PTR 64[esp]
+	pxor	xmm2,XMMWORD PTR [esp]
+	pxor	xmm3,XMMWORD PTR 16[esp]
+	pxor	xmm4,XMMWORD PTR 32[esp]
+	pxor	xmm5,XMMWORD PTR 48[esp]
+	pxor	xmm6,xmm0
+	movdqa	xmm1,XMMWORD PTR 96[esp]
+	movdqu	XMMWORD PTR [esi*1+edi],xmm2
+	movdqu	XMMWORD PTR 16[esi*1+edi],xmm3
+	movdqu	XMMWORD PTR 32[esi*1+edi],xmm4
+	movdqu	XMMWORD PTR 48[esi*1+edi],xmm5
+	movdqu	XMMWORD PTR 64[esi*1+edi],xmm6
+	jmp	$L078done
+ALIGN	16
+$L079one:
+	movdqu	xmm7,XMMWORD PTR [ebx]
+	mov	edx,DWORD PTR 112[esp]
+	movdqu	xmm2,XMMWORD PTR [esi]
+	mov	ecx,DWORD PTR 240[edx]
+	pxor	xmm7,xmm0
+	pxor	xmm1,xmm2
+	pxor	xmm2,xmm7
+	movdqa	xmm6,xmm1
+	mov	edi,DWORD PTR 120[esp]
+	movups	xmm0,XMMWORD PTR [edx]
+	movups	xmm1,XMMWORD PTR 16[edx]
+	lea	edx,DWORD PTR 32[edx]
+	xorps	xmm2,xmm0
+$L083enc1_loop_16:
+DB	102,15,56,220,209
+	dec	ecx
+	movups	xmm1,XMMWORD PTR [edx]
+	lea	edx,DWORD PTR 16[edx]
+	jnz	$L083enc1_loop_16
+DB	102,15,56,221,209
+	xorps	xmm2,xmm7
+	movdqa	xmm0,xmm7
+	movdqa	xmm1,xmm6
+	movups	XMMWORD PTR [esi*1+edi],xmm2
+	jmp	$L078done
+ALIGN	16
+$L080two:
+	lea	ecx,DWORD PTR 1[ebp]
+	mov	edx,DWORD PTR 112[esp]
+	bsf	ecx,ecx
+	shl	ecx,4
+	movdqu	xmm6,XMMWORD PTR [ebx]
+	movdqu	xmm7,XMMWORD PTR [ecx*1+ebx]
+	movdqu	xmm2,XMMWORD PTR [esi]
+	movdqu	xmm3,XMMWORD PTR 16[esi]
+	mov	ecx,DWORD PTR 240[edx]
+	pxor	xmm6,xmm0
+	pxor	xmm7,xmm6
+	pxor	xmm1,xmm2
+	pxor	xmm2,xmm6
+	pxor	xmm1,xmm3
+	pxor	xmm3,xmm7
+	movdqa	xmm5,xmm1
+	mov	edi,DWORD PTR 120[esp]
+	call	__aesni_encrypt2
+	xorps	xmm2,xmm6
+	xorps	xmm3,xmm7
+	movdqa	xmm0,xmm7
+	movdqa	xmm1,xmm5
+	movups	XMMWORD PTR [esi*1+edi],xmm2
+	movups	XMMWORD PTR 16[esi*1+edi],xmm3
+	jmp	$L078done
+ALIGN	16
+$L081three:
+	lea	ecx,DWORD PTR 1[ebp]
+	mov	edx,DWORD PTR 112[esp]
+	bsf	ecx,ecx
+	shl	ecx,4
+	movdqu	xmm5,XMMWORD PTR [ebx]
+	movdqu	xmm6,XMMWORD PTR [ecx*1+ebx]
+	movdqa	xmm7,xmm5
+	movdqu	xmm2,XMMWORD PTR [esi]
+	movdqu	xmm3,XMMWORD PTR 16[esi]
+	movdqu	xmm4,XMMWORD PTR 32[esi]
+	mov	ecx,DWORD PTR 240[edx]
+	pxor	xmm5,xmm0
+	pxor	xmm6,xmm5
+	pxor	xmm7,xmm6
+	pxor	xmm1,xmm2
+	pxor	xmm2,xmm5
+	pxor	xmm1,xmm3
+	pxor	xmm3,xmm6
+	pxor	xmm1,xmm4
+	pxor	xmm4,xmm7
+	movdqa	XMMWORD PTR 96[esp],xmm1
+	mov	edi,DWORD PTR 120[esp]
+	call	__aesni_encrypt3
+	xorps	xmm2,xmm5
+	xorps	xmm3,xmm6
+	xorps	xmm4,xmm7
+	movdqa	xmm0,xmm7
+	movdqa	xmm1,XMMWORD PTR 96[esp]
+	movups	XMMWORD PTR [esi*1+edi],xmm2
+	movups	XMMWORD PTR 16[esi*1+edi],xmm3
+	movups	XMMWORD PTR 32[esi*1+edi],xmm4
+	jmp	$L078done
+ALIGN	16
+$L082four:
+	lea	ecx,DWORD PTR 1[ebp]
+	lea	eax,DWORD PTR 3[ebp]
+	bsf	ecx,ecx
+	bsf	eax,eax
+	mov	edx,DWORD PTR 112[esp]
+	shl	ecx,4
+	shl	eax,4
+	movdqu	xmm4,XMMWORD PTR [ebx]
+	movdqu	xmm5,XMMWORD PTR [ecx*1+ebx]
+	movdqa	xmm6,xmm4
+	movdqu	xmm7,XMMWORD PTR [eax*1+ebx]
+	pxor	xmm4,xmm0
+	movdqu	xmm2,XMMWORD PTR [esi]
+	pxor	xmm5,xmm4
+	movdqu	xmm3,XMMWORD PTR 16[esi]
+	pxor	xmm6,xmm5
+	movdqa	XMMWORD PTR [esp],xmm4
+	pxor	xmm7,xmm6
+	movdqa	XMMWORD PTR 16[esp],xmm5
+	movdqu	xmm4,XMMWORD PTR 32[esi]
+	movdqu	xmm5,XMMWORD PTR 48[esi]
+	mov	ecx,DWORD PTR 240[edx]
+	pxor	xmm1,xmm2
+	pxor	xmm2,XMMWORD PTR [esp]
+	pxor	xmm1,xmm3
+	pxor	xmm3,XMMWORD PTR 16[esp]
+	pxor	xmm1,xmm4
+	pxor	xmm4,xmm6
+	pxor	xmm1,xmm5
+	pxor	xmm5,xmm7
+	movdqa	XMMWORD PTR 96[esp],xmm1
+	mov	edi,DWORD PTR 120[esp]
+	call	__aesni_encrypt4
+	xorps	xmm2,XMMWORD PTR [esp]
+	xorps	xmm3,XMMWORD PTR 16[esp]
+	xorps	xmm4,xmm6
+	movups	XMMWORD PTR [esi*1+edi],xmm2
+	xorps	xmm5,xmm7
+	movups	XMMWORD PTR 16[esi*1+edi],xmm3
+	movdqa	xmm0,xmm7
+	movups	XMMWORD PTR 32[esi*1+edi],xmm4
+	movdqa	xmm1,XMMWORD PTR 96[esp]
+	movups	XMMWORD PTR 48[esi*1+edi],xmm5
+$L078done:
+	mov	edx,DWORD PTR 128[esp]
+	pxor	xmm2,xmm2
+	pxor	xmm3,xmm3
+	movdqa	XMMWORD PTR [esp],xmm2
+	pxor	xmm4,xmm4
+	movdqa	XMMWORD PTR 16[esp],xmm2
+	pxor	xmm5,xmm5
+	movdqa	XMMWORD PTR 32[esp],xmm2
+	pxor	xmm6,xmm6
+	movdqa	XMMWORD PTR 48[esp],xmm2
+	pxor	xmm7,xmm7
+	movdqa	XMMWORD PTR 64[esp],xmm2
+	movdqa	XMMWORD PTR 80[esp],xmm2
+	movdqa	XMMWORD PTR 96[esp],xmm2
+	lea	esp,DWORD PTR [edx]
+	mov	ecx,DWORD PTR 40[esp]
+	mov	ebx,DWORD PTR 48[esp]
+	movdqu	XMMWORD PTR [ecx],xmm0
+	pxor	xmm0,xmm0
+	movdqu	XMMWORD PTR [ebx],xmm1
+	pxor	xmm1,xmm1
+	pop	edi
+	pop	esi
+	pop	ebx
+	pop	ebp
+	ret
+_aesni_ocb_encrypt ENDP
+ALIGN	16
+_aesni_ocb_decrypt	PROC PUBLIC
+$L_aesni_ocb_decrypt_begin::
+	push	ebp
+	push	ebx
+	push	esi
+	push	edi
+	mov	ecx,DWORD PTR 40[esp]
+	mov	ebx,DWORD PTR 48[esp]
+	mov	esi,DWORD PTR 20[esp]
+	mov	edi,DWORD PTR 24[esp]
+	mov	eax,DWORD PTR 28[esp]
+	mov	edx,DWORD PTR 32[esp]
+	movdqu	xmm0,XMMWORD PTR [ecx]
+	mov	ebp,DWORD PTR 36[esp]
+	movdqu	xmm1,XMMWORD PTR [ebx]
+	mov	ebx,DWORD PTR 44[esp]
+	mov	ecx,esp
+	sub	esp,132
+	and	esp,-16
+	sub	edi,esi
+	shl	eax,4
+	lea	eax,DWORD PTR [eax*1+esi-96]
+	mov	DWORD PTR 120[esp],edi
+	mov	DWORD PTR 124[esp],eax
+	mov	DWORD PTR 128[esp],ecx
+	mov	ecx,DWORD PTR 240[edx]
+	test	ebp,1
+	jnz	$L084odd
+	bsf	eax,ebp
+	add	ebp,1
+	shl	eax,4
+	movdqu	xmm7,XMMWORD PTR [eax*1+ebx]
+	mov	eax,edx
+	movdqu	xmm2,XMMWORD PTR [esi]
+	lea	esi,DWORD PTR 16[esi]
+	pxor	xmm7,xmm0
+	pxor	xmm2,xmm7
+	movdqa	xmm6,xmm1
+	movups	xmm0,XMMWORD PTR [edx]
+	movups	xmm1,XMMWORD PTR 16[edx]
+	lea	edx,DWORD PTR 32[edx]
+	xorps	xmm2,xmm0
+$L085dec1_loop_17:
+DB	102,15,56,222,209
+	dec	ecx
+	movups	xmm1,XMMWORD PTR [edx]
+	lea	edx,DWORD PTR 16[edx]
+	jnz	$L085dec1_loop_17
+DB	102,15,56,223,209
+	xorps	xmm2,xmm7
+	movaps	xmm1,xmm6
+	movdqa	xmm0,xmm7
+	xorps	xmm1,xmm2
+	movups	XMMWORD PTR [esi*1+edi-16],xmm2
+	mov	ecx,DWORD PTR 240[eax]
+	mov	edx,eax
+	mov	eax,DWORD PTR 124[esp]
+$L084odd:
+	shl	ecx,4
+	mov	edi,16
+	sub	edi,ecx
+	mov	DWORD PTR 112[esp],edx
+	lea	edx,DWORD PTR 32[ecx*1+edx]
+	mov	DWORD PTR 116[esp],edi
+	cmp	esi,eax
+	ja	$L086short
+	jmp	$L087grandloop
+ALIGN	32
+$L087grandloop:
+	lea	ecx,DWORD PTR 1[ebp]
+	lea	eax,DWORD PTR 3[ebp]
+	lea	edi,DWORD PTR 5[ebp]
+	add	ebp,6
+	bsf	ecx,ecx
+	bsf	eax,eax
+	bsf	edi,edi
+	shl	ecx,4
+	shl	eax,4
+	shl	edi,4
+	movdqu	xmm2,XMMWORD PTR [ebx]
+	movdqu	xmm3,XMMWORD PTR [ecx*1+ebx]
+	mov	ecx,DWORD PTR 116[esp]
+	movdqa	xmm4,xmm2
+	movdqu	xmm5,XMMWORD PTR [eax*1+ebx]
+	movdqa	xmm6,xmm2
+	movdqu	xmm7,XMMWORD PTR [edi*1+ebx]
+	pxor	xmm2,xmm0
+	pxor	xmm3,xmm2
+	movdqa	XMMWORD PTR [esp],xmm2
+	pxor	xmm4,xmm3
+	movdqa	XMMWORD PTR 16[esp],xmm3
+	pxor	xmm5,xmm4
+	movdqa	XMMWORD PTR 32[esp],xmm4
+	pxor	xmm6,xmm5
+	movdqa	XMMWORD PTR 48[esp],xmm5
+	pxor	xmm7,xmm6
+	movdqa	XMMWORD PTR 64[esp],xmm6
+	movdqa	XMMWORD PTR 80[esp],xmm7
+	movups	xmm0,XMMWORD PTR [ecx*1+edx-48]
+	movdqu	xmm2,XMMWORD PTR [esi]
+	movdqu	xmm3,XMMWORD PTR 16[esi]
+	movdqu	xmm4,XMMWORD PTR 32[esi]
+	movdqu	xmm5,XMMWORD PTR 48[esi]
+	movdqu	xmm6,XMMWORD PTR 64[esi]
+	movdqu	xmm7,XMMWORD PTR 80[esi]
+	lea	esi,DWORD PTR 96[esi]
+	movdqa	XMMWORD PTR 96[esp],xmm1
+	pxor	xmm2,xmm0
+	pxor	xmm3,xmm0
+	pxor	xmm4,xmm0
+	pxor	xmm5,xmm0
+	pxor	xmm6,xmm0
+	pxor	xmm7,xmm0
+	movups	xmm1,XMMWORD PTR [ecx*1+edx-32]
+	pxor	xmm2,XMMWORD PTR [esp]
+	pxor	xmm3,XMMWORD PTR 16[esp]
+	pxor	xmm4,XMMWORD PTR 32[esp]
+	pxor	xmm5,XMMWORD PTR 48[esp]
+	pxor	xmm6,XMMWORD PTR 64[esp]
+	pxor	xmm7,XMMWORD PTR 80[esp]
+	movups	xmm0,XMMWORD PTR [ecx*1+edx-16]
+DB	102,15,56,222,209
+DB	102,15,56,222,217
+DB	102,15,56,222,225
+DB	102,15,56,222,233
+DB	102,15,56,222,241
+DB	102,15,56,222,249
+	mov	edi,DWORD PTR 120[esp]
+	mov	eax,DWORD PTR 124[esp]
+	call	$L_aesni_decrypt6_enter
+	movdqa	xmm0,XMMWORD PTR 80[esp]
+	pxor	xmm2,XMMWORD PTR [esp]
+	movdqa	xmm1,XMMWORD PTR 96[esp]
+	pxor	xmm3,XMMWORD PTR 16[esp]
+	pxor	xmm4,XMMWORD PTR 32[esp]
+	pxor	xmm5,XMMWORD PTR 48[esp]
+	pxor	xmm6,XMMWORD PTR 64[esp]
+	pxor	xmm7,xmm0
+	pxor	xmm1,xmm2
+	movdqu	XMMWORD PTR [esi*1+edi-96],xmm2
+	pxor	xmm1,xmm3
+	movdqu	XMMWORD PTR [esi*1+edi-80],xmm3
+	pxor	xmm1,xmm4
+	movdqu	XMMWORD PTR [esi*1+edi-64],xmm4
+	pxor	xmm1,xmm5
+	movdqu	XMMWORD PTR [esi*1+edi-48],xmm5
+	pxor	xmm1,xmm6
+	movdqu	XMMWORD PTR [esi*1+edi-32],xmm6
+	pxor	xmm1,xmm7
+	movdqu	XMMWORD PTR [esi*1+edi-16],xmm7
+	cmp	esi,eax
+	jb	$L087grandloop
+$L086short:
+	add	eax,96
+	sub	eax,esi
+	jz	$L088done
+	cmp	eax,32
+	jb	$L089one
+	je	$L090two
+	cmp	eax,64
+	jb	$L091three
+	je	$L092four
+	lea	ecx,DWORD PTR 1[ebp]
+	lea	eax,DWORD PTR 3[ebp]
+	bsf	ecx,ecx
+	bsf	eax,eax
+	shl	ecx,4
+	shl	eax,4
+	movdqu	xmm2,XMMWORD PTR [ebx]
+	movdqu	xmm3,XMMWORD PTR [ecx*1+ebx]
+	mov	ecx,DWORD PTR 116[esp]
+	movdqa	xmm4,xmm2
+	movdqu	xmm5,XMMWORD PTR [eax*1+ebx]
+	movdqa	xmm6,xmm2
+	pxor	xmm2,xmm0
+	pxor	xmm3,xmm2
+	movdqa	XMMWORD PTR [esp],xmm2
+	pxor	xmm4,xmm3
+	movdqa	XMMWORD PTR 16[esp],xmm3
+	pxor	xmm5,xmm4
+	movdqa	XMMWORD PTR 32[esp],xmm4
+	pxor	xmm6,xmm5
+	movdqa	XMMWORD PTR 48[esp],xmm5
+	pxor	xmm7,xmm6
+	movdqa	XMMWORD PTR 64[esp],xmm6
+	movups	xmm0,XMMWORD PTR [ecx*1+edx-48]
+	movdqu	xmm2,XMMWORD PTR [esi]
+	movdqu	xmm3,XMMWORD PTR 16[esi]
+	movdqu	xmm4,XMMWORD PTR 32[esi]
+	movdqu	xmm5,XMMWORD PTR 48[esi]
+	movdqu	xmm6,XMMWORD PTR 64[esi]
+	pxor	xmm7,xmm7
+	movdqa	XMMWORD PTR 96[esp],xmm1
+	pxor	xmm2,xmm0
+	pxor	xmm3,xmm0
+	pxor	xmm4,xmm0
+	pxor	xmm5,xmm0
+	pxor	xmm6,xmm0
+	movups	xmm1,XMMWORD PTR [ecx*1+edx-32]
+	pxor	xmm2,XMMWORD PTR [esp]
+	pxor	xmm3,XMMWORD PTR 16[esp]
+	pxor	xmm4,XMMWORD PTR 32[esp]
+	pxor	xmm5,XMMWORD PTR 48[esp]
+	pxor	xmm6,XMMWORD PTR 64[esp]
+	movups	xmm0,XMMWORD PTR [ecx*1+edx-16]
+DB	102,15,56,222,209
+DB	102,15,56,222,217
+DB	102,15,56,222,225
+DB	102,15,56,222,233
+DB	102,15,56,222,241
+DB	102,15,56,222,249
+	mov	edi,DWORD PTR 120[esp]
+	call	$L_aesni_decrypt6_enter
+	movdqa	xmm0,XMMWORD PTR 64[esp]
+	pxor	xmm2,XMMWORD PTR [esp]
+	movdqa	xmm1,XMMWORD PTR 96[esp]
+	pxor	xmm3,XMMWORD PTR 16[esp]
+	pxor	xmm4,XMMWORD PTR 32[esp]
+	pxor	xmm5,XMMWORD PTR 48[esp]
+	pxor	xmm6,xmm0
+	pxor	xmm1,xmm2
+	movdqu	XMMWORD PTR [esi*1+edi],xmm2
+	pxor	xmm1,xmm3
+	movdqu	XMMWORD PTR 16[esi*1+edi],xmm3
+	pxor	xmm1,xmm4
+	movdqu	XMMWORD PTR 32[esi*1+edi],xmm4
+	pxor	xmm1,xmm5
+	movdqu	XMMWORD PTR 48[esi*1+edi],xmm5
+	pxor	xmm1,xmm6
+	movdqu	XMMWORD PTR 64[esi*1+edi],xmm6
+	jmp	$L088done
+ALIGN	16
+$L089one:
+	movdqu	xmm7,XMMWORD PTR [ebx]
+	mov	edx,DWORD PTR 112[esp]
+	movdqu	xmm2,XMMWORD PTR [esi]
+	mov	ecx,DWORD PTR 240[edx]
+	pxor	xmm7,xmm0
+	pxor	xmm2,xmm7
+	movdqa	xmm6,xmm1
+	mov	edi,DWORD PTR 120[esp]
+	movups	xmm0,XMMWORD PTR [edx]
+	movups	xmm1,XMMWORD PTR 16[edx]
+	lea	edx,DWORD PTR 32[edx]
+	xorps	xmm2,xmm0
+$L093dec1_loop_18:
+DB	102,15,56,222,209
+	dec	ecx
+	movups	xmm1,XMMWORD PTR [edx]
+	lea	edx,DWORD PTR 16[edx]
+	jnz	$L093dec1_loop_18
+DB	102,15,56,223,209
+	xorps	xmm2,xmm7
+	movaps	xmm1,xmm6
+	movdqa	xmm0,xmm7
+	xorps	xmm1,xmm2
+	movups	XMMWORD PTR [esi*1+edi],xmm2
+	jmp	$L088done
+ALIGN	16
+$L090two:
+	lea	ecx,DWORD PTR 1[ebp]
+	mov	edx,DWORD PTR 112[esp]
+	bsf	ecx,ecx
+	shl	ecx,4
+	movdqu	xmm6,XMMWORD PTR [ebx]
+	movdqu	xmm7,XMMWORD PTR [ecx*1+ebx]
+	movdqu	xmm2,XMMWORD PTR [esi]
+	movdqu	xmm3,XMMWORD PTR 16[esi]
+	mov	ecx,DWORD PTR 240[edx]
+	movdqa	xmm5,xmm1
+	pxor	xmm6,xmm0
+	pxor	xmm7,xmm6
+	pxor	xmm2,xmm6
+	pxor	xmm3,xmm7
+	mov	edi,DWORD PTR 120[esp]
+	call	__aesni_decrypt2
+	xorps	xmm2,xmm6
+	xorps	xmm3,xmm7
+	movdqa	xmm0,xmm7
+	xorps	xmm5,xmm2
+	movups	XMMWORD PTR [esi*1+edi],xmm2
+	xorps	xmm5,xmm3
+	movups	XMMWORD PTR 16[esi*1+edi],xmm3
+	movaps	xmm1,xmm5
+	jmp	$L088done
+ALIGN	16
+$L091three:
+	lea	ecx,DWORD PTR 1[ebp]
+	mov	edx,DWORD PTR 112[esp]
+	bsf	ecx,ecx
+	shl	ecx,4
+	movdqu	xmm5,XMMWORD PTR [ebx]
+	movdqu	xmm6,XMMWORD PTR [ecx*1+ebx]
+	movdqa	xmm7,xmm5
+	movdqu	xmm2,XMMWORD PTR [esi]
+	movdqu	xmm3,XMMWORD PTR 16[esi]
+	movdqu	xmm4,XMMWORD PTR 32[esi]
+	mov	ecx,DWORD PTR 240[edx]
+	movdqa	XMMWORD PTR 96[esp],xmm1
+	pxor	xmm5,xmm0
+	pxor	xmm6,xmm5
+	pxor	xmm7,xmm6
+	pxor	xmm2,xmm5
+	pxor	xmm3,xmm6
+	pxor	xmm4,xmm7
+	mov	edi,DWORD PTR 120[esp]
+	call	__aesni_decrypt3
+	movdqa	xmm1,XMMWORD PTR 96[esp]
+	xorps	xmm2,xmm5
+	xorps	xmm3,xmm6
+	xorps	xmm4,xmm7
+	movups	XMMWORD PTR [esi*1+edi],xmm2
+	pxor	xmm1,xmm2
+	movdqa	xmm0,xmm7
+	movups	XMMWORD PTR 16[esi*1+edi],xmm3
+	pxor	xmm1,xmm3
+	movups	XMMWORD PTR 32[esi*1+edi],xmm4
+	pxor	xmm1,xmm4
+	jmp	$L088done
+ALIGN	16
+$L092four:
+	lea	ecx,DWORD PTR 1[ebp]
+	lea	eax,DWORD PTR 3[ebp]
+	bsf	ecx,ecx
+	bsf	eax,eax
+	mov	edx,DWORD PTR 112[esp]
+	shl	ecx,4
+	shl	eax,4
+	movdqu	xmm4,XMMWORD PTR [ebx]
+	movdqu	xmm5,XMMWORD PTR [ecx*1+ebx]
+	movdqa	xmm6,xmm4
+	movdqu	xmm7,XMMWORD PTR [eax*1+ebx]
+	pxor	xmm4,xmm0
+	movdqu	xmm2,XMMWORD PTR [esi]
+	pxor	xmm5,xmm4
+	movdqu	xmm3,XMMWORD PTR 16[esi]
+	pxor	xmm6,xmm5
+	movdqa	XMMWORD PTR [esp],xmm4
+	pxor	xmm7,xmm6
+	movdqa	XMMWORD PTR 16[esp],xmm5
+	movdqu	xmm4,XMMWORD PTR 32[esi]
+	movdqu	xmm5,XMMWORD PTR 48[esi]
+	mov	ecx,DWORD PTR 240[edx]
+	movdqa	XMMWORD PTR 96[esp],xmm1
+	pxor	xmm2,XMMWORD PTR [esp]
+	pxor	xmm3,XMMWORD PTR 16[esp]
+	pxor	xmm4,xmm6
+	pxor	xmm5,xmm7
+	mov	edi,DWORD PTR 120[esp]
+	call	__aesni_decrypt4
+	movdqa	xmm1,XMMWORD PTR 96[esp]
+	xorps	xmm2,XMMWORD PTR [esp]
+	xorps	xmm3,XMMWORD PTR 16[esp]
+	xorps	xmm4,xmm6
+	movups	XMMWORD PTR [esi*1+edi],xmm2
+	pxor	xmm1,xmm2
+	xorps	xmm5,xmm7
+	movups	XMMWORD PTR 16[esi*1+edi],xmm3
+	pxor	xmm1,xmm3
+	movdqa	xmm0,xmm7
+	movups	XMMWORD PTR 32[esi*1+edi],xmm4
+	pxor	xmm1,xmm4
+	movups	XMMWORD PTR 48[esi*1+edi],xmm5
+	pxor	xmm1,xmm5
+$L088done:
+	mov	edx,DWORD PTR 128[esp]
+	pxor	xmm2,xmm2
+	pxor	xmm3,xmm3
+	movdqa	XMMWORD PTR [esp],xmm2
+	pxor	xmm4,xmm4
+	movdqa	XMMWORD PTR 16[esp],xmm2
+	pxor	xmm5,xmm5
+	movdqa	XMMWORD PTR 32[esp],xmm2
+	pxor	xmm6,xmm6
+	movdqa	XMMWORD PTR 48[esp],xmm2
+	pxor	xmm7,xmm7
+	movdqa	XMMWORD PTR 64[esp],xmm2
+	movdqa	XMMWORD PTR 80[esp],xmm2
+	movdqa	XMMWORD PTR 96[esp],xmm2
+	lea	esp,DWORD PTR [edx]
+	mov	ecx,DWORD PTR 40[esp]
+	mov	ebx,DWORD PTR 48[esp]
+	movdqu	XMMWORD PTR [ecx],xmm0
+	pxor	xmm0,xmm0
+	movdqu	XMMWORD PTR [ebx],xmm1
+	pxor	xmm1,xmm1
+	pop	edi
+	pop	esi
+	pop	ebx
+	pop	ebp
+	ret
+_aesni_ocb_decrypt ENDP
+ALIGN	16
+_aesni_cbc_encrypt	PROC PUBLIC
+$L_aesni_cbc_encrypt_begin::
+	push	ebp
+	push	ebx
+	push	esi
+	push	edi
+	mov	esi,DWORD PTR 20[esp]
+	mov	ebx,esp
+	mov	edi,DWORD PTR 24[esp]
+	sub	ebx,24
+	mov	eax,DWORD PTR 28[esp]
+	and	ebx,-16
+	mov	edx,DWORD PTR 32[esp]
+	mov	ebp,DWORD PTR 36[esp]
+	test	eax,eax
+	jz	$L094cbc_abort
+	cmp	DWORD PTR 40[esp],0
+	xchg	ebx,esp
+	movups	xmm7,XMMWORD PTR [ebp]
+	mov	ecx,DWORD PTR 240[edx]
+	mov	ebp,edx
+	mov	DWORD PTR 16[esp],ebx
+	mov	ebx,ecx
+	je	$L095cbc_decrypt
+	movaps	xmm2,xmm7
+	cmp	eax,16
+	jb	$L096cbc_enc_tail
+	sub	eax,16
+	jmp	$L097cbc_enc_loop
+ALIGN	16
+$L097cbc_enc_loop:
+	movups	xmm7,XMMWORD PTR [esi]
+	lea	esi,DWORD PTR 16[esi]
+	movups	xmm0,XMMWORD PTR [edx]
+	movups	xmm1,XMMWORD PTR 16[edx]
+	xorps	xmm7,xmm0
+	lea	edx,DWORD PTR 32[edx]
+	xorps	xmm2,xmm7
+$L098enc1_loop_19:
+DB	102,15,56,220,209
+	dec	ecx
+	movups	xmm1,XMMWORD PTR [edx]
+	lea	edx,DWORD PTR 16[edx]
+	jnz	$L098enc1_loop_19
+DB	102,15,56,221,209
+	mov	ecx,ebx
+	mov	edx,ebp
+	movups	XMMWORD PTR [edi],xmm2
+	lea	edi,DWORD PTR 16[edi]
+	sub	eax,16
+	jnc	$L097cbc_enc_loop
+	add	eax,16
+	jnz	$L096cbc_enc_tail
+	movaps	xmm7,xmm2
+	pxor	xmm2,xmm2
+	jmp	$L099cbc_ret
+$L096cbc_enc_tail:
+	mov	ecx,eax
+DD	2767451785
+	mov	ecx,16
+	sub	ecx,eax
+	xor	eax,eax
+DD	2868115081
+	lea	edi,DWORD PTR [edi-16]
+	mov	ecx,ebx
+	mov	esi,edi
+	mov	edx,ebp
+	jmp	$L097cbc_enc_loop
+ALIGN	16
+$L095cbc_decrypt:
+	cmp	eax,80
+	jbe	$L100cbc_dec_tail
+	movaps	XMMWORD PTR [esp],xmm7
+	sub	eax,80
+	jmp	$L101cbc_dec_loop6_enter
+ALIGN	16
+$L102cbc_dec_loop6:
+	movaps	XMMWORD PTR [esp],xmm0
+	movups	XMMWORD PTR [edi],xmm7
+	lea	edi,DWORD PTR 16[edi]
+$L101cbc_dec_loop6_enter:
+	movdqu	xmm2,XMMWORD PTR [esi]
+	movdqu	xmm3,XMMWORD PTR 16[esi]
+	movdqu	xmm4,XMMWORD PTR 32[esi]
+	movdqu	xmm5,XMMWORD PTR 48[esi]
+	movdqu	xmm6,XMMWORD PTR 64[esi]
+	movdqu	xmm7,XMMWORD PTR 80[esi]
+	call	__aesni_decrypt6
+	movups	xmm1,XMMWORD PTR [esi]
+	movups	xmm0,XMMWORD PTR 16[esi]
+	xorps	xmm2,XMMWORD PTR [esp]
+	xorps	xmm3,xmm1
+	movups	xmm1,XMMWORD PTR 32[esi]
+	xorps	xmm4,xmm0
+	movups	xmm0,XMMWORD PTR 48[esi]
+	xorps	xmm5,xmm1
+	movups	xmm1,XMMWORD PTR 64[esi]
+	xorps	xmm6,xmm0
+	movups	xmm0,XMMWORD PTR 80[esi]
+	xorps	xmm7,xmm1
+	movups	XMMWORD PTR [edi],xmm2
+	movups	XMMWORD PTR 16[edi],xmm3
+	lea	esi,DWORD PTR 96[esi]
+	movups	XMMWORD PTR 32[edi],xmm4
+	mov	ecx,ebx
+	movups	XMMWORD PTR 48[edi],xmm5
+	mov	edx,ebp
+	movups	XMMWORD PTR 64[edi],xmm6
+	lea	edi,DWORD PTR 80[edi]
+	sub	eax,96
+	ja	$L102cbc_dec_loop6
+	movaps	xmm2,xmm7
+	movaps	xmm7,xmm0
+	add	eax,80
+	jle	$L103cbc_dec_clear_tail_collected
+	movups	XMMWORD PTR [edi],xmm2
+	lea	edi,DWORD PTR 16[edi]
+$L100cbc_dec_tail:
+	movups	xmm2,XMMWORD PTR [esi]
+	movaps	xmm6,xmm2
+	cmp	eax,16
+	jbe	$L104cbc_dec_one
+	movups	xmm3,XMMWORD PTR 16[esi]
+	movaps	xmm5,xmm3
+	cmp	eax,32
+	jbe	$L105cbc_dec_two
+	movups	xmm4,XMMWORD PTR 32[esi]
+	cmp	eax,48
+	jbe	$L106cbc_dec_three
+	movups	xmm5,XMMWORD PTR 48[esi]
+	cmp	eax,64
+	jbe	$L107cbc_dec_four
+	movups	xmm6,XMMWORD PTR 64[esi]
+	movaps	XMMWORD PTR [esp],xmm7
+	movups	xmm2,XMMWORD PTR [esi]
+	xorps	xmm7,xmm7
+	call	__aesni_decrypt6
+	movups	xmm1,XMMWORD PTR [esi]
+	movups	xmm0,XMMWORD PTR 16[esi]
+	xorps	xmm2,XMMWORD PTR [esp]
+	xorps	xmm3,xmm1
+	movups	xmm1,XMMWORD PTR 32[esi]
+	xorps	xmm4,xmm0
+	movups	xmm0,XMMWORD PTR 48[esi]
+	xorps	xmm5,xmm1
+	movups	xmm7,XMMWORD PTR 64[esi]
+	xorps	xmm6,xmm0
+	movups	XMMWORD PTR [edi],xmm2
+	movups	XMMWORD PTR 16[edi],xmm3
+	pxor	xmm3,xmm3
+	movups	XMMWORD PTR 32[edi],xmm4
+	pxor	xmm4,xmm4
+	movups	XMMWORD PTR 48[edi],xmm5
+	pxor	xmm5,xmm5
+	lea	edi,DWORD PTR 64[edi]
+	movaps	xmm2,xmm6
+	pxor	xmm6,xmm6
+	sub	eax,80
+	jmp	$L108cbc_dec_tail_collected
+ALIGN	16
+$L104cbc_dec_one:
+	movups	xmm0,XMMWORD PTR [edx]
+	movups	xmm1,XMMWORD PTR 16[edx]
+	lea	edx,DWORD PTR 32[edx]
+	xorps	xmm2,xmm0
+$L109dec1_loop_20:
+DB	102,15,56,222,209
+	dec	ecx
+	movups	xmm1,XMMWORD PTR [edx]
+	lea	edx,DWORD PTR 16[edx]
+	jnz	$L109dec1_loop_20
+DB	102,15,56,223,209
+	xorps	xmm2,xmm7
+	movaps	xmm7,xmm6
+	sub	eax,16
+	jmp	$L108cbc_dec_tail_collected
+ALIGN	16
+$L105cbc_dec_two:
+	call	__aesni_decrypt2
+	xorps	xmm2,xmm7
+	xorps	xmm3,xmm6
+	movups	XMMWORD PTR [edi],xmm2
+	movaps	xmm2,xmm3
+	pxor	xmm3,xmm3
+	lea	edi,DWORD PTR 16[edi]
+	movaps	xmm7,xmm5
+	sub	eax,32
+	jmp	$L108cbc_dec_tail_collected
+ALIGN	16
+$L106cbc_dec_three:
+	call	__aesni_decrypt3
+	xorps	xmm2,xmm7
+	xorps	xmm3,xmm6
+	xorps	xmm4,xmm5
+	movups	XMMWORD PTR [edi],xmm2
+	movaps	xmm2,xmm4
+	pxor	xmm4,xmm4
+	movups	XMMWORD PTR 16[edi],xmm3
+	pxor	xmm3,xmm3
+	lea	edi,DWORD PTR 32[edi]
+	movups	xmm7,XMMWORD PTR 32[esi]
+	sub	eax,48
+	jmp	$L108cbc_dec_tail_collected
+ALIGN	16
+$L107cbc_dec_four:
+	call	__aesni_decrypt4
+	movups	xmm1,XMMWORD PTR 16[esi]
+	movups	xmm0,XMMWORD PTR 32[esi]
+	xorps	xmm2,xmm7
+	movups	xmm7,XMMWORD PTR 48[esi]
+	xorps	xmm3,xmm6
+	movups	XMMWORD PTR [edi],xmm2
+	xorps	xmm4,xmm1
+	movups	XMMWORD PTR 16[edi],xmm3
+	pxor	xmm3,xmm3
+	xorps	xmm5,xmm0
+	movups	XMMWORD PTR 32[edi],xmm4
+	pxor	xmm4,xmm4
+	lea	edi,DWORD PTR 48[edi]
+	movaps	xmm2,xmm5
+	pxor	xmm5,xmm5
+	sub	eax,64
+	jmp	$L108cbc_dec_tail_collected
+ALIGN	16
+$L103cbc_dec_clear_tail_collected:
+	pxor	xmm3,xmm3
+	pxor	xmm4,xmm4
+	pxor	xmm5,xmm5
+	pxor	xmm6,xmm6
+$L108cbc_dec_tail_collected:
+	and	eax,15
+	jnz	$L110cbc_dec_tail_partial
+	movups	XMMWORD PTR [edi],xmm2
+	pxor	xmm0,xmm0
+	jmp	$L099cbc_ret
+ALIGN	16
+$L110cbc_dec_tail_partial:
+	movaps	XMMWORD PTR [esp],xmm2
+	pxor	xmm0,xmm0
+	mov	ecx,16
+	mov	esi,esp
+	sub	ecx,eax
+DD	2767451785
+	movdqa	XMMWORD PTR [esp],xmm2
+$L099cbc_ret:
+	mov	esp,DWORD PTR 16[esp]
+	mov	ebp,DWORD PTR 36[esp]
+	pxor	xmm2,xmm2
+	pxor	xmm1,xmm1
+	movups	XMMWORD PTR [ebp],xmm7
+	pxor	xmm7,xmm7
+$L094cbc_abort:
+	pop	edi
+	pop	esi
+	pop	ebx
+	pop	ebp
+	ret
+_aesni_cbc_encrypt ENDP
+ALIGN	16
+__aesni_set_encrypt_key	PROC PRIVATE
+	push	ebp
+	push	ebx
+	test	eax,eax
+	jz	$L111bad_pointer
+	test	edx,edx
+	jz	$L111bad_pointer
+	call	$L112pic
+$L112pic:
+	pop	ebx
+	lea	ebx,DWORD PTR ($Lkey_const-$L112pic)[ebx]
+	lea	ebp,DWORD PTR _OPENSSL_ia32cap_P
+	movups	xmm0,XMMWORD PTR [eax]
+	xorps	xmm4,xmm4
+	mov	ebp,DWORD PTR 4[ebp]
+	lea	edx,DWORD PTR 16[edx]
+	and	ebp,268437504
+	cmp	ecx,256
+	je	$L11314rounds
+	cmp	ecx,192
+	je	$L11412rounds
+	cmp	ecx,128
+	jne	$L115bad_keybits
+ALIGN	16
+$L11610rounds:
+	cmp	ebp,268435456
+	je	$L11710rounds_alt
+	mov	ecx,9
+	movups	XMMWORD PTR [edx-16],xmm0
+DB	102,15,58,223,200,1
+	call	$L118key_128_cold
+DB	102,15,58,223,200,2
+	call	$L119key_128
+DB	102,15,58,223,200,4
+	call	$L119key_128
+DB	102,15,58,223,200,8
+	call	$L119key_128
+DB	102,15,58,223,200,16
+	call	$L119key_128
+DB	102,15,58,223,200,32
+	call	$L119key_128
+DB	102,15,58,223,200,64
+	call	$L119key_128
+DB	102,15,58,223,200,128
+	call	$L119key_128
+DB	102,15,58,223,200,27
+	call	$L119key_128
+DB	102,15,58,223,200,54
+	call	$L119key_128
+	movups	XMMWORD PTR [edx],xmm0
+	mov	DWORD PTR 80[edx],ecx
+	jmp	$L120good_key
+ALIGN	16
+$L119key_128:
+	movups	XMMWORD PTR [edx],xmm0
+	lea	edx,DWORD PTR 16[edx]
+$L118key_128_cold:
+	shufps	xmm4,xmm0,16
+	xorps	xmm0,xmm4
+	shufps	xmm4,xmm0,140
+	xorps	xmm0,xmm4
+	shufps	xmm1,xmm1,255
+	xorps	xmm0,xmm1
+	ret
+ALIGN	16
+$L11710rounds_alt:
+	movdqa	xmm5,XMMWORD PTR [ebx]
+	mov	ecx,8
+	movdqa	xmm4,XMMWORD PTR 32[ebx]
+	movdqa	xmm2,xmm0
+	movdqu	XMMWORD PTR [edx-16],xmm0
+$L121loop_key128:
+DB	102,15,56,0,197
+DB	102,15,56,221,196
+	pslld	xmm4,1
+	lea	edx,DWORD PTR 16[edx]
+	movdqa	xmm3,xmm2
+	pslldq	xmm2,4
+	pxor	xmm3,xmm2
+	pslldq	xmm2,4
+	pxor	xmm3,xmm2
+	pslldq	xmm2,4
+	pxor	xmm2,xmm3
+	pxor	xmm0,xmm2
+	movdqu	XMMWORD PTR [edx-16],xmm0
+	movdqa	xmm2,xmm0
+	dec	ecx
+	jnz	$L121loop_key128
+	movdqa	xmm4,XMMWORD PTR 48[ebx]
+DB	102,15,56,0,197
+DB	102,15,56,221,196
+	pslld	xmm4,1
+	movdqa	xmm3,xmm2
+	pslldq	xmm2,4
+	pxor	xmm3,xmm2
+	pslldq	xmm2,4
+	pxor	xmm3,xmm2
+	pslldq	xmm2,4
+	pxor	xmm2,xmm3
+	pxor	xmm0,xmm2
+	movdqu	XMMWORD PTR [edx],xmm0
+	movdqa	xmm2,xmm0
+DB	102,15,56,0,197
+DB	102,15,56,221,196
+	movdqa	xmm3,xmm2
+	pslldq	xmm2,4
+	pxor	xmm3,xmm2
+	pslldq	xmm2,4
+	pxor	xmm3,xmm2
+	pslldq	xmm2,4
+	pxor	xmm2,xmm3
+	pxor	xmm0,xmm2
+	movdqu	XMMWORD PTR 16[edx],xmm0
+	mov	ecx,9
+	mov	DWORD PTR 96[edx],ecx
+	jmp	$L120good_key
+ALIGN	16
+$L11412rounds:
+	movq	xmm2,QWORD PTR 16[eax]
+	cmp	ebp,268435456
+	je	$L12212rounds_alt
+	mov	ecx,11
+	movups	XMMWORD PTR [edx-16],xmm0
+DB	102,15,58,223,202,1
+	call	$L123key_192a_cold
+DB	102,15,58,223,202,2
+	call	$L124key_192b
+DB	102,15,58,223,202,4
+	call	$L125key_192a
+DB	102,15,58,223,202,8
+	call	$L124key_192b
+DB	102,15,58,223,202,16
+	call	$L125key_192a
+DB	102,15,58,223,202,32
+	call	$L124key_192b
+DB	102,15,58,223,202,64
+	call	$L125key_192a
+DB	102,15,58,223,202,128
+	call	$L124key_192b
+	movups	XMMWORD PTR [edx],xmm0
+	mov	DWORD PTR 48[edx],ecx
+	jmp	$L120good_key
+ALIGN	16
+$L125key_192a:
+	movups	XMMWORD PTR [edx],xmm0
+	lea	edx,DWORD PTR 16[edx]
+ALIGN	16
+$L123key_192a_cold:
+	movaps	xmm5,xmm2
+$L126key_192b_warm:
+	shufps	xmm4,xmm0,16
+	movdqa	xmm3,xmm2
+	xorps	xmm0,xmm4
+	shufps	xmm4,xmm0,140
+	pslldq	xmm3,4
+	xorps	xmm0,xmm4
+	pshufd	xmm1,xmm1,85
+	pxor	xmm2,xmm3
+	pxor	xmm0,xmm1
+	pshufd	xmm3,xmm0,255
+	pxor	xmm2,xmm3
+	ret
+ALIGN	16
+$L124key_192b:
+	movaps	xmm3,xmm0
+	shufps	xmm5,xmm0,68
+	movups	XMMWORD PTR [edx],xmm5
+	shufps	xmm3,xmm2,78
+	movups	XMMWORD PTR 16[edx],xmm3
+	lea	edx,DWORD PTR 32[edx]
+	jmp	$L126key_192b_warm
+ALIGN	16
+$L12212rounds_alt:
+	movdqa	xmm5,XMMWORD PTR 16[ebx]
+	movdqa	xmm4,XMMWORD PTR 32[ebx]
+	mov	ecx,8
+	movdqu	XMMWORD PTR [edx-16],xmm0
+$L127loop_key192:
+	movq	QWORD PTR [edx],xmm2
+	movdqa	xmm1,xmm2
+DB	102,15,56,0,213
+DB	102,15,56,221,212
+	pslld	xmm4,1
+	lea	edx,DWORD PTR 24[edx]
+	movdqa	xmm3,xmm0
+	pslldq	xmm0,4
+	pxor	xmm3,xmm0
+	pslldq	xmm0,4
+	pxor	xmm3,xmm0
+	pslldq	xmm0,4
+	pxor	xmm0,xmm3
+	pshufd	xmm3,xmm0,255
+	pxor	xmm3,xmm1
+	pslldq	xmm1,4
+	pxor	xmm3,xmm1
+	pxor	xmm0,xmm2
+	pxor	xmm2,xmm3
+	movdqu	XMMWORD PTR [edx-16],xmm0
+	dec	ecx
+	jnz	$L127loop_key192
+	mov	ecx,11
+	mov	DWORD PTR 32[edx],ecx
+	jmp	$L120good_key
+ALIGN	16
+$L11314rounds:
+	movups	xmm2,XMMWORD PTR 16[eax]
+	lea	edx,DWORD PTR 16[edx]
+	cmp	ebp,268435456
+	je	$L12814rounds_alt
+	mov	ecx,13
+	movups	XMMWORD PTR [edx-32],xmm0
+	movups	XMMWORD PTR [edx-16],xmm2
+DB	102,15,58,223,202,1
+	call	$L129key_256a_cold
+DB	102,15,58,223,200,1
+	call	$L130key_256b
+DB	102,15,58,223,202,2
+	call	$L131key_256a
+DB	102,15,58,223,200,2
+	call	$L130key_256b
+DB	102,15,58,223,202,4
+	call	$L131key_256a
+DB	102,15,58,223,200,4
+	call	$L130key_256b
+DB	102,15,58,223,202,8
+	call	$L131key_256a
+DB	102,15,58,223,200,8
+	call	$L130key_256b
+DB	102,15,58,223,202,16
+	call	$L131key_256a
+DB	102,15,58,223,200,16
+	call	$L130key_256b
+DB	102,15,58,223,202,32
+	call	$L131key_256a
+DB	102,15,58,223,200,32
+	call	$L130key_256b
+DB	102,15,58,223,202,64
+	call	$L131key_256a
+	movups	XMMWORD PTR [edx],xmm0
+	mov	DWORD PTR 16[edx],ecx
+	xor	eax,eax
+	jmp	$L120good_key
+ALIGN	16
+$L131key_256a:
+	movups	XMMWORD PTR [edx],xmm2
+	lea	edx,DWORD PTR 16[edx]
+$L129key_256a_cold:
+	shufps	xmm4,xmm0,16
+	xorps	xmm0,xmm4
+	shufps	xmm4,xmm0,140
+	xorps	xmm0,xmm4
+	shufps	xmm1,xmm1,255
+	xorps	xmm0,xmm1
+	ret
+ALIGN	16
+$L130key_256b:
+	movups	XMMWORD PTR [edx],xmm0
+	lea	edx,DWORD PTR 16[edx]
+	shufps	xmm4,xmm2,16
+	xorps	xmm2,xmm4
+	shufps	xmm4,xmm2,140
+	xorps	xmm2,xmm4
+	shufps	xmm1,xmm1,170
+	xorps	xmm2,xmm1
+	ret
+ALIGN	16
+$L12814rounds_alt:
+	movdqa	xmm5,XMMWORD PTR [ebx]
+	movdqa	xmm4,XMMWORD PTR 32[ebx]
+	mov	ecx,7
+	movdqu	XMMWORD PTR [edx-32],xmm0
+	movdqa	xmm1,xmm2
+	movdqu	XMMWORD PTR [edx-16],xmm2
+$L132loop_key256:
+DB	102,15,56,0,213
+DB	102,15,56,221,212
+	movdqa	xmm3,xmm0
+	pslldq	xmm0,4
+	pxor	xmm3,xmm0
+	pslldq	xmm0,4
+	pxor	xmm3,xmm0
+	pslldq	xmm0,4
+	pxor	xmm0,xmm3
+	pslld	xmm4,1
+	pxor	xmm0,xmm2
+	movdqu	XMMWORD PTR [edx],xmm0
+	dec	ecx
+	jz	$L133done_key256
+	pshufd	xmm2,xmm0,255
+	pxor	xmm3,xmm3
+DB	102,15,56,221,211
+	movdqa	xmm3,xmm1
+	pslldq	xmm1,4
+	pxor	xmm3,xmm1
+	pslldq	xmm1,4
+	pxor	xmm3,xmm1
+	pslldq	xmm1,4
+	pxor	xmm1,xmm3
+	pxor	xmm2,xmm1
+	movdqu	XMMWORD PTR 16[edx],xmm2
+	lea	edx,DWORD PTR 32[edx]
+	movdqa	xmm1,xmm2
+	jmp	$L132loop_key256
+$L133done_key256:
+	mov	ecx,13
+	mov	DWORD PTR 16[edx],ecx
+$L120good_key:
+	pxor	xmm0,xmm0
+	pxor	xmm1,xmm1
+	pxor	xmm2,xmm2
+	pxor	xmm3,xmm3
+	pxor	xmm4,xmm4
+	pxor	xmm5,xmm5
+	xor	eax,eax
+	pop	ebx
+	pop	ebp
+	ret
+ALIGN	4
+$L111bad_pointer:
+	mov	eax,-1
+	pop	ebx
+	pop	ebp
+	ret
+ALIGN	4
+$L115bad_keybits:
+	pxor	xmm0,xmm0
+	mov	eax,-2
+	pop	ebx
+	pop	ebp
+	ret
+__aesni_set_encrypt_key ENDP
+ALIGN	16
+_aesni_set_encrypt_key	PROC PUBLIC
+$L_aesni_set_encrypt_key_begin::
+	mov	eax,DWORD PTR 4[esp]
+	mov	ecx,DWORD PTR 8[esp]
+	mov	edx,DWORD PTR 12[esp]
+	call	__aesni_set_encrypt_key
+	ret
+_aesni_set_encrypt_key ENDP
+ALIGN	16
+_aesni_set_decrypt_key	PROC PUBLIC
+$L_aesni_set_decrypt_key_begin::
+	mov	eax,DWORD PTR 4[esp]
+	mov	ecx,DWORD PTR 8[esp]
+	mov	edx,DWORD PTR 12[esp]
+	call	__aesni_set_encrypt_key
+	mov	edx,DWORD PTR 12[esp]
+	shl	ecx,4
+	test	eax,eax
+	jnz	$L134dec_key_ret
+	lea	eax,DWORD PTR 16[ecx*1+edx]
+	movups	xmm0,XMMWORD PTR [edx]
+	movups	xmm1,XMMWORD PTR [eax]
+	movups	XMMWORD PTR [eax],xmm0
+	movups	XMMWORD PTR [edx],xmm1
+	lea	edx,DWORD PTR 16[edx]
+	lea	eax,DWORD PTR [eax-16]
+$L135dec_key_inverse:
+	movups	xmm0,XMMWORD PTR [edx]
+	movups	xmm1,XMMWORD PTR [eax]
+DB	102,15,56,219,192
+DB	102,15,56,219,201
+	lea	edx,DWORD PTR 16[edx]
+	lea	eax,DWORD PTR [eax-16]
+	movups	XMMWORD PTR 16[eax],xmm0
+	movups	XMMWORD PTR [edx-16],xmm1
+	cmp	eax,edx
+	ja	$L135dec_key_inverse
+	movups	xmm0,XMMWORD PTR [edx]
+DB	102,15,56,219,192
+	movups	XMMWORD PTR [edx],xmm0
+	pxor	xmm0,xmm0
+	pxor	xmm1,xmm1
+	xor	eax,eax
+$L134dec_key_ret:
+	ret
+_aesni_set_decrypt_key ENDP
+ALIGN	64
+$Lkey_const::
+DD	202313229,202313229,202313229,202313229
+DD	67569157,67569157,67569157,67569157
+DD	1,1,1,1
+DD	27,27,27,27
+DB	65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69
+DB	83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83
+DB	32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
+DB	115,108,46,111,114,103,62,0
+.text$	ENDS
+.bss	SEGMENT 'BSS'
+COMM	_OPENSSL_ia32cap_P:DWORD:4
+.bss	ENDS
+END

+ 661 - 661
contrib/libs/openssl/asm/windows/crypto/aes/vpaes-x86.masm

@@ -1,661 +1,661 @@
-IF @Version LT 800 
-ECHO MASM version 8.00 or later is strongly recommended. 
-ENDIF 
-.686 
-.XMM 
-IF @Version LT 800 
-XMMWORD STRUCT 16 
-DQ	2 dup (?) 
-XMMWORD	ENDS 
-ENDIF 
- 
-.MODEL	FLAT 
-OPTION	DOTNAME 
-IF @Version LT 800 
-.text$	SEGMENT PAGE 'CODE' 
-ELSE 
-.text$	SEGMENT ALIGN(64) 'CODE' 
-ENDIF 
-ALIGN	64 
-$L_vpaes_consts:: 
-DD	218628480,235210255,168496130,67568393 
-DD	252381056,17041926,33884169,51187212 
-DD	252645135,252645135,252645135,252645135 
-DD	1512730624,3266504856,1377990664,3401244816 
-DD	830229760,1275146365,2969422977,3447763452 
-DD	3411033600,2979783055,338359620,2782886510 
-DD	4209124096,907596821,221174255,1006095553 
-DD	191964160,3799684038,3164090317,1589111125 
-DD	182528256,1777043520,2877432650,3265356744 
-DD	1874708224,3503451415,3305285752,363511674 
-DD	1606117888,3487855781,1093350906,2384367825 
-DD	197121,67569157,134941193,202313229 
-DD	67569157,134941193,202313229,197121 
-DD	134941193,202313229,197121,67569157 
-DD	202313229,197121,67569157,134941193 
-DD	33619971,100992007,168364043,235736079 
-DD	235736079,33619971,100992007,168364043 
-DD	168364043,235736079,33619971,100992007 
-DD	100992007,168364043,235736079,33619971 
-DD	50462976,117835012,185207048,252579084 
-DD	252314880,51251460,117574920,184942860 
-DD	184682752,252054788,50987272,118359308 
-DD	118099200,185467140,251790600,50727180 
-DD	2946363062,528716217,1300004225,1881839624 
-DD	1532713819,1532713819,1532713819,1532713819 
-DD	3602276352,4288629033,3737020424,4153884961 
-DD	1354558464,32357713,2958822624,3775749553 
-DD	1201988352,132424512,1572796698,503232858 
-DD	2213177600,1597421020,4103937655,675398315 
-DD	2749646592,4273543773,1511898873,121693092 
-DD	3040248576,1103263732,2871565598,1608280554 
-DD	2236667136,2588920351,482954393,64377734 
-DD	3069987328,291237287,2117370568,3650299247 
-DD	533321216,3573750986,2572112006,1401264716 
-DD	1339849704,2721158661,548607111,3445553514 
-DD	2128193280,3054596040,2183486460,1257083700 
-DD	655635200,1165381986,3923443150,2344132524 
-DD	190078720,256924420,290342170,357187870 
-DD	1610966272,2263057382,4103205268,309794674 
-DD	2592527872,2233205587,1335446729,3402964816 
-DD	3973531904,3225098121,3002836325,1918774430 
-DD	3870401024,2102906079,2284471353,4117666579 
-DD	617007872,1021508343,366931923,691083277 
-DD	2528395776,3491914898,2968704004,1613121270 
-DD	3445188352,3247741094,844474987,4093578302 
-DD	651481088,1190302358,1689581232,574775300 
-DD	4289380608,206939853,2555985458,2489840491 
-DD	2130264064,327674451,3566485037,3349835193 
-DD	2470714624,316102159,3636825756,3393945945 
-DB	86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105 
-DB	111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83 
-DB	83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117 
-DB	114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105 
-DB	118,101,114,115,105,116,121,41,0 
-ALIGN	64 
-ALIGN	16 
-__vpaes_preheat	PROC PRIVATE 
-	add	ebp,DWORD PTR [esp] 
-	movdqa	xmm7,XMMWORD PTR [ebp-48] 
-	movdqa	xmm6,XMMWORD PTR [ebp-16] 
-	ret 
-__vpaes_preheat ENDP 
-ALIGN	16 
-__vpaes_encrypt_core	PROC PRIVATE 
-	mov	ecx,16 
-	mov	eax,DWORD PTR 240[edx] 
-	movdqa	xmm1,xmm6 
-	movdqa	xmm2,XMMWORD PTR [ebp] 
-	pandn	xmm1,xmm0 
-	pand	xmm0,xmm6 
-	movdqu	xmm5,XMMWORD PTR [edx] 
-DB	102,15,56,0,208 
-	movdqa	xmm0,XMMWORD PTR 16[ebp] 
-	pxor	xmm2,xmm5 
-	psrld	xmm1,4 
-	add	edx,16 
-DB	102,15,56,0,193 
-	lea	ebx,DWORD PTR 192[ebp] 
-	pxor	xmm0,xmm2 
-	jmp	$L000enc_entry 
-ALIGN	16 
-$L001enc_loop: 
-	movdqa	xmm4,XMMWORD PTR 32[ebp] 
-	movdqa	xmm0,XMMWORD PTR 48[ebp] 
-DB	102,15,56,0,226 
-DB	102,15,56,0,195 
-	pxor	xmm4,xmm5 
-	movdqa	xmm5,XMMWORD PTR 64[ebp] 
-	pxor	xmm0,xmm4 
-	movdqa	xmm1,XMMWORD PTR [ecx*1+ebx-64] 
-DB	102,15,56,0,234 
-	movdqa	xmm2,XMMWORD PTR 80[ebp] 
-	movdqa	xmm4,XMMWORD PTR [ecx*1+ebx] 
-DB	102,15,56,0,211 
-	movdqa	xmm3,xmm0 
-	pxor	xmm2,xmm5 
-DB	102,15,56,0,193 
-	add	edx,16 
-	pxor	xmm0,xmm2 
-DB	102,15,56,0,220 
-	add	ecx,16 
-	pxor	xmm3,xmm0 
-DB	102,15,56,0,193 
-	and	ecx,48 
-	sub	eax,1 
-	pxor	xmm0,xmm3 
-$L000enc_entry: 
-	movdqa	xmm1,xmm6 
-	movdqa	xmm5,XMMWORD PTR [ebp-32] 
-	pandn	xmm1,xmm0 
-	psrld	xmm1,4 
-	pand	xmm0,xmm6 
-DB	102,15,56,0,232 
-	movdqa	xmm3,xmm7 
-	pxor	xmm0,xmm1 
-DB	102,15,56,0,217 
-	movdqa	xmm4,xmm7 
-	pxor	xmm3,xmm5 
-DB	102,15,56,0,224 
-	movdqa	xmm2,xmm7 
-	pxor	xmm4,xmm5 
-DB	102,15,56,0,211 
-	movdqa	xmm3,xmm7 
-	pxor	xmm2,xmm0 
-DB	102,15,56,0,220 
-	movdqu	xmm5,XMMWORD PTR [edx] 
-	pxor	xmm3,xmm1 
-	jnz	$L001enc_loop 
-	movdqa	xmm4,XMMWORD PTR 96[ebp] 
-	movdqa	xmm0,XMMWORD PTR 112[ebp] 
-DB	102,15,56,0,226 
-	pxor	xmm4,xmm5 
-DB	102,15,56,0,195 
-	movdqa	xmm1,XMMWORD PTR 64[ecx*1+ebx] 
-	pxor	xmm0,xmm4 
-DB	102,15,56,0,193 
-	ret 
-__vpaes_encrypt_core ENDP 
-ALIGN	16 
-__vpaes_decrypt_core	PROC PRIVATE 
-	lea	ebx,DWORD PTR 608[ebp] 
-	mov	eax,DWORD PTR 240[edx] 
-	movdqa	xmm1,xmm6 
-	movdqa	xmm2,XMMWORD PTR [ebx-64] 
-	pandn	xmm1,xmm0 
-	mov	ecx,eax 
-	psrld	xmm1,4 
-	movdqu	xmm5,XMMWORD PTR [edx] 
-	shl	ecx,4 
-	pand	xmm0,xmm6 
-DB	102,15,56,0,208 
-	movdqa	xmm0,XMMWORD PTR [ebx-48] 
-	xor	ecx,48 
-DB	102,15,56,0,193 
-	and	ecx,48 
-	pxor	xmm2,xmm5 
-	movdqa	xmm5,XMMWORD PTR 176[ebp] 
-	pxor	xmm0,xmm2 
-	add	edx,16 
-	lea	ecx,DWORD PTR [ecx*1+ebx-352] 
-	jmp	$L002dec_entry 
-ALIGN	16 
-$L003dec_loop: 
-	movdqa	xmm4,XMMWORD PTR [ebx-32] 
-	movdqa	xmm1,XMMWORD PTR [ebx-16] 
-DB	102,15,56,0,226 
-DB	102,15,56,0,203 
-	pxor	xmm0,xmm4 
-	movdqa	xmm4,XMMWORD PTR [ebx] 
-	pxor	xmm0,xmm1 
-	movdqa	xmm1,XMMWORD PTR 16[ebx] 
-DB	102,15,56,0,226 
-DB	102,15,56,0,197 
-DB	102,15,56,0,203 
-	pxor	xmm0,xmm4 
-	movdqa	xmm4,XMMWORD PTR 32[ebx] 
-	pxor	xmm0,xmm1 
-	movdqa	xmm1,XMMWORD PTR 48[ebx] 
-DB	102,15,56,0,226 
-DB	102,15,56,0,197 
-DB	102,15,56,0,203 
-	pxor	xmm0,xmm4 
-	movdqa	xmm4,XMMWORD PTR 64[ebx] 
-	pxor	xmm0,xmm1 
-	movdqa	xmm1,XMMWORD PTR 80[ebx] 
-DB	102,15,56,0,226 
-DB	102,15,56,0,197 
-DB	102,15,56,0,203 
-	pxor	xmm0,xmm4 
-	add	edx,16 
-DB	102,15,58,15,237,12 
-	pxor	xmm0,xmm1 
-	sub	eax,1 
-$L002dec_entry: 
-	movdqa	xmm1,xmm6 
-	movdqa	xmm2,XMMWORD PTR [ebp-32] 
-	pandn	xmm1,xmm0 
-	pand	xmm0,xmm6 
-	psrld	xmm1,4 
-DB	102,15,56,0,208 
-	movdqa	xmm3,xmm7 
-	pxor	xmm0,xmm1 
-DB	102,15,56,0,217 
-	movdqa	xmm4,xmm7 
-	pxor	xmm3,xmm2 
-DB	102,15,56,0,224 
-	pxor	xmm4,xmm2 
-	movdqa	xmm2,xmm7 
-DB	102,15,56,0,211 
-	movdqa	xmm3,xmm7 
-	pxor	xmm2,xmm0 
-DB	102,15,56,0,220 
-	movdqu	xmm0,XMMWORD PTR [edx] 
-	pxor	xmm3,xmm1 
-	jnz	$L003dec_loop 
-	movdqa	xmm4,XMMWORD PTR 96[ebx] 
-DB	102,15,56,0,226 
-	pxor	xmm4,xmm0 
-	movdqa	xmm0,XMMWORD PTR 112[ebx] 
-	movdqa	xmm2,XMMWORD PTR [ecx] 
-DB	102,15,56,0,195 
-	pxor	xmm0,xmm4 
-DB	102,15,56,0,194 
-	ret 
-__vpaes_decrypt_core ENDP 
-ALIGN	16 
-__vpaes_schedule_core	PROC PRIVATE 
-	add	ebp,DWORD PTR [esp] 
-	movdqu	xmm0,XMMWORD PTR [esi] 
-	movdqa	xmm2,XMMWORD PTR 320[ebp] 
-	movdqa	xmm3,xmm0 
-	lea	ebx,DWORD PTR [ebp] 
-	movdqa	XMMWORD PTR 4[esp],xmm2 
-	call	__vpaes_schedule_transform 
-	movdqa	xmm7,xmm0 
-	test	edi,edi 
-	jnz	$L004schedule_am_decrypting 
-	movdqu	XMMWORD PTR [edx],xmm0 
-	jmp	$L005schedule_go 
-$L004schedule_am_decrypting: 
-	movdqa	xmm1,XMMWORD PTR 256[ecx*1+ebp] 
-DB	102,15,56,0,217 
-	movdqu	XMMWORD PTR [edx],xmm3 
-	xor	ecx,48 
-$L005schedule_go: 
-	cmp	eax,192 
-	ja	$L006schedule_256 
-	je	$L007schedule_192 
-$L008schedule_128: 
-	mov	eax,10 
-$L009loop_schedule_128: 
-	call	__vpaes_schedule_round 
-	dec	eax 
-	jz	$L010schedule_mangle_last 
-	call	__vpaes_schedule_mangle 
-	jmp	$L009loop_schedule_128 
-ALIGN	16 
-$L007schedule_192: 
-	movdqu	xmm0,XMMWORD PTR 8[esi] 
-	call	__vpaes_schedule_transform 
-	movdqa	xmm6,xmm0 
-	pxor	xmm4,xmm4 
-	movhlps	xmm6,xmm4 
-	mov	eax,4 
-$L011loop_schedule_192: 
-	call	__vpaes_schedule_round 
-DB	102,15,58,15,198,8 
-	call	__vpaes_schedule_mangle 
-	call	__vpaes_schedule_192_smear 
-	call	__vpaes_schedule_mangle 
-	call	__vpaes_schedule_round 
-	dec	eax 
-	jz	$L010schedule_mangle_last 
-	call	__vpaes_schedule_mangle 
-	call	__vpaes_schedule_192_smear 
-	jmp	$L011loop_schedule_192 
-ALIGN	16 
-$L006schedule_256: 
-	movdqu	xmm0,XMMWORD PTR 16[esi] 
-	call	__vpaes_schedule_transform 
-	mov	eax,7 
-$L012loop_schedule_256: 
-	call	__vpaes_schedule_mangle 
-	movdqa	xmm6,xmm0 
-	call	__vpaes_schedule_round 
-	dec	eax 
-	jz	$L010schedule_mangle_last 
-	call	__vpaes_schedule_mangle 
-	pshufd	xmm0,xmm0,255 
-	movdqa	XMMWORD PTR 20[esp],xmm7 
-	movdqa	xmm7,xmm6 
-	call	$L_vpaes_schedule_low_round 
-	movdqa	xmm7,XMMWORD PTR 20[esp] 
-	jmp	$L012loop_schedule_256 
-ALIGN	16 
-$L010schedule_mangle_last: 
-	lea	ebx,DWORD PTR 384[ebp] 
-	test	edi,edi 
-	jnz	$L013schedule_mangle_last_dec 
-	movdqa	xmm1,XMMWORD PTR 256[ecx*1+ebp] 
-DB	102,15,56,0,193 
-	lea	ebx,DWORD PTR 352[ebp] 
-	add	edx,32 
-$L013schedule_mangle_last_dec: 
-	add	edx,-16 
-	pxor	xmm0,XMMWORD PTR 336[ebp] 
-	call	__vpaes_schedule_transform 
-	movdqu	XMMWORD PTR [edx],xmm0 
-	pxor	xmm0,xmm0 
-	pxor	xmm1,xmm1 
-	pxor	xmm2,xmm2 
-	pxor	xmm3,xmm3 
-	pxor	xmm4,xmm4 
-	pxor	xmm5,xmm5 
-	pxor	xmm6,xmm6 
-	pxor	xmm7,xmm7 
-	ret 
-__vpaes_schedule_core ENDP 
-ALIGN	16 
-__vpaes_schedule_192_smear	PROC PRIVATE 
-	pshufd	xmm1,xmm6,128 
-	pshufd	xmm0,xmm7,254 
-	pxor	xmm6,xmm1 
-	pxor	xmm1,xmm1 
-	pxor	xmm6,xmm0 
-	movdqa	xmm0,xmm6 
-	movhlps	xmm6,xmm1 
-	ret 
-__vpaes_schedule_192_smear ENDP 
-ALIGN	16 
-__vpaes_schedule_round	PROC PRIVATE 
-	movdqa	xmm2,XMMWORD PTR 8[esp] 
-	pxor	xmm1,xmm1 
-DB	102,15,58,15,202,15 
-DB	102,15,58,15,210,15 
-	pxor	xmm7,xmm1 
-	pshufd	xmm0,xmm0,255 
-DB	102,15,58,15,192,1 
-	movdqa	XMMWORD PTR 8[esp],xmm2 
-$L_vpaes_schedule_low_round:: 
-	movdqa	xmm1,xmm7 
-	pslldq	xmm7,4 
-	pxor	xmm7,xmm1 
-	movdqa	xmm1,xmm7 
-	pslldq	xmm7,8 
-	pxor	xmm7,xmm1 
-	pxor	xmm7,XMMWORD PTR 336[ebp] 
-	movdqa	xmm4,XMMWORD PTR [ebp-16] 
-	movdqa	xmm5,XMMWORD PTR [ebp-48] 
-	movdqa	xmm1,xmm4 
-	pandn	xmm1,xmm0 
-	psrld	xmm1,4 
-	pand	xmm0,xmm4 
-	movdqa	xmm2,XMMWORD PTR [ebp-32] 
-DB	102,15,56,0,208 
-	pxor	xmm0,xmm1 
-	movdqa	xmm3,xmm5 
-DB	102,15,56,0,217 
-	pxor	xmm3,xmm2 
-	movdqa	xmm4,xmm5 
-DB	102,15,56,0,224 
-	pxor	xmm4,xmm2 
-	movdqa	xmm2,xmm5 
-DB	102,15,56,0,211 
-	pxor	xmm2,xmm0 
-	movdqa	xmm3,xmm5 
-DB	102,15,56,0,220 
-	pxor	xmm3,xmm1 
-	movdqa	xmm4,XMMWORD PTR 32[ebp] 
-DB	102,15,56,0,226 
-	movdqa	xmm0,XMMWORD PTR 48[ebp] 
-DB	102,15,56,0,195 
-	pxor	xmm0,xmm4 
-	pxor	xmm0,xmm7 
-	movdqa	xmm7,xmm0 
-	ret 
-__vpaes_schedule_round ENDP 
-ALIGN	16 
-__vpaes_schedule_transform	PROC PRIVATE 
-	movdqa	xmm2,XMMWORD PTR [ebp-16] 
-	movdqa	xmm1,xmm2 
-	pandn	xmm1,xmm0 
-	psrld	xmm1,4 
-	pand	xmm0,xmm2 
-	movdqa	xmm2,XMMWORD PTR [ebx] 
-DB	102,15,56,0,208 
-	movdqa	xmm0,XMMWORD PTR 16[ebx] 
-DB	102,15,56,0,193 
-	pxor	xmm0,xmm2 
-	ret 
-__vpaes_schedule_transform ENDP 
-ALIGN	16 
-__vpaes_schedule_mangle	PROC PRIVATE 
-	movdqa	xmm4,xmm0 
-	movdqa	xmm5,XMMWORD PTR 128[ebp] 
-	test	edi,edi 
-	jnz	$L014schedule_mangle_dec 
-	add	edx,16 
-	pxor	xmm4,XMMWORD PTR 336[ebp] 
-DB	102,15,56,0,229 
-	movdqa	xmm3,xmm4 
-DB	102,15,56,0,229 
-	pxor	xmm3,xmm4 
-DB	102,15,56,0,229 
-	pxor	xmm3,xmm4 
-	jmp	$L015schedule_mangle_both 
-ALIGN	16 
-$L014schedule_mangle_dec: 
-	movdqa	xmm2,XMMWORD PTR [ebp-16] 
-	lea	esi,DWORD PTR 416[ebp] 
-	movdqa	xmm1,xmm2 
-	pandn	xmm1,xmm4 
-	psrld	xmm1,4 
-	pand	xmm4,xmm2 
-	movdqa	xmm2,XMMWORD PTR [esi] 
-DB	102,15,56,0,212 
-	movdqa	xmm3,XMMWORD PTR 16[esi] 
-DB	102,15,56,0,217 
-	pxor	xmm3,xmm2 
-DB	102,15,56,0,221 
-	movdqa	xmm2,XMMWORD PTR 32[esi] 
-DB	102,15,56,0,212 
-	pxor	xmm2,xmm3 
-	movdqa	xmm3,XMMWORD PTR 48[esi] 
-DB	102,15,56,0,217 
-	pxor	xmm3,xmm2 
-DB	102,15,56,0,221 
-	movdqa	xmm2,XMMWORD PTR 64[esi] 
-DB	102,15,56,0,212 
-	pxor	xmm2,xmm3 
-	movdqa	xmm3,XMMWORD PTR 80[esi] 
-DB	102,15,56,0,217 
-	pxor	xmm3,xmm2 
-DB	102,15,56,0,221 
-	movdqa	xmm2,XMMWORD PTR 96[esi] 
-DB	102,15,56,0,212 
-	pxor	xmm2,xmm3 
-	movdqa	xmm3,XMMWORD PTR 112[esi] 
-DB	102,15,56,0,217 
-	pxor	xmm3,xmm2 
-	add	edx,-16 
-$L015schedule_mangle_both: 
-	movdqa	xmm1,XMMWORD PTR 256[ecx*1+ebp] 
-DB	102,15,56,0,217 
-	add	ecx,-16 
-	and	ecx,48 
-	movdqu	XMMWORD PTR [edx],xmm3 
-	ret 
-__vpaes_schedule_mangle ENDP 
-ALIGN	16 
-_vpaes_set_encrypt_key	PROC PUBLIC 
-$L_vpaes_set_encrypt_key_begin:: 
-	push	ebp 
-	push	ebx 
-	push	esi 
-	push	edi 
-	mov	esi,DWORD PTR 20[esp] 
-	lea	ebx,DWORD PTR [esp-56] 
-	mov	eax,DWORD PTR 24[esp] 
-	and	ebx,-16 
-	mov	edx,DWORD PTR 28[esp] 
-	xchg	ebx,esp 
-	mov	DWORD PTR 48[esp],ebx 
-	mov	ebx,eax 
-	shr	ebx,5 
-	add	ebx,5 
-	mov	DWORD PTR 240[edx],ebx 
-	mov	ecx,48 
-	mov	edi,0 
-	mov	ebp,OFFSET ($L_vpaes_consts+030h-$L016pic_point) 
-	call	__vpaes_schedule_core 
-$L016pic_point: 
-	mov	esp,DWORD PTR 48[esp] 
-	xor	eax,eax 
-	pop	edi 
-	pop	esi 
-	pop	ebx 
-	pop	ebp 
-	ret 
-_vpaes_set_encrypt_key ENDP 
-ALIGN	16 
-_vpaes_set_decrypt_key	PROC PUBLIC 
-$L_vpaes_set_decrypt_key_begin:: 
-	push	ebp 
-	push	ebx 
-	push	esi 
-	push	edi 
-	mov	esi,DWORD PTR 20[esp] 
-	lea	ebx,DWORD PTR [esp-56] 
-	mov	eax,DWORD PTR 24[esp] 
-	and	ebx,-16 
-	mov	edx,DWORD PTR 28[esp] 
-	xchg	ebx,esp 
-	mov	DWORD PTR 48[esp],ebx 
-	mov	ebx,eax 
-	shr	ebx,5 
-	add	ebx,5 
-	mov	DWORD PTR 240[edx],ebx 
-	shl	ebx,4 
-	lea	edx,DWORD PTR 16[ebx*1+edx] 
-	mov	edi,1 
-	mov	ecx,eax 
-	shr	ecx,1 
-	and	ecx,32 
-	xor	ecx,32 
-	mov	ebp,OFFSET ($L_vpaes_consts+030h-$L017pic_point) 
-	call	__vpaes_schedule_core 
-$L017pic_point: 
-	mov	esp,DWORD PTR 48[esp] 
-	xor	eax,eax 
-	pop	edi 
-	pop	esi 
-	pop	ebx 
-	pop	ebp 
-	ret 
-_vpaes_set_decrypt_key ENDP 
-ALIGN	16 
-_vpaes_encrypt	PROC PUBLIC 
-$L_vpaes_encrypt_begin:: 
-	push	ebp 
-	push	ebx 
-	push	esi 
-	push	edi 
-	mov	ebp,OFFSET ($L_vpaes_consts+030h-$L018pic_point) 
-	call	__vpaes_preheat 
-$L018pic_point: 
-	mov	esi,DWORD PTR 20[esp] 
-	lea	ebx,DWORD PTR [esp-56] 
-	mov	edi,DWORD PTR 24[esp] 
-	and	ebx,-16 
-	mov	edx,DWORD PTR 28[esp] 
-	xchg	ebx,esp 
-	mov	DWORD PTR 48[esp],ebx 
-	movdqu	xmm0,XMMWORD PTR [esi] 
-	call	__vpaes_encrypt_core 
-	movdqu	XMMWORD PTR [edi],xmm0 
-	mov	esp,DWORD PTR 48[esp] 
-	pop	edi 
-	pop	esi 
-	pop	ebx 
-	pop	ebp 
-	ret 
-_vpaes_encrypt ENDP 
-ALIGN	16 
-_vpaes_decrypt	PROC PUBLIC 
-$L_vpaes_decrypt_begin:: 
-	push	ebp 
-	push	ebx 
-	push	esi 
-	push	edi 
-	mov	ebp,OFFSET ($L_vpaes_consts+030h-$L019pic_point) 
-	call	__vpaes_preheat 
-$L019pic_point: 
-	mov	esi,DWORD PTR 20[esp] 
-	lea	ebx,DWORD PTR [esp-56] 
-	mov	edi,DWORD PTR 24[esp] 
-	and	ebx,-16 
-	mov	edx,DWORD PTR 28[esp] 
-	xchg	ebx,esp 
-	mov	DWORD PTR 48[esp],ebx 
-	movdqu	xmm0,XMMWORD PTR [esi] 
-	call	__vpaes_decrypt_core 
-	movdqu	XMMWORD PTR [edi],xmm0 
-	mov	esp,DWORD PTR 48[esp] 
-	pop	edi 
-	pop	esi 
-	pop	ebx 
-	pop	ebp 
-	ret 
-_vpaes_decrypt ENDP 
-ALIGN	16 
-_vpaes_cbc_encrypt	PROC PUBLIC 
-$L_vpaes_cbc_encrypt_begin:: 
-	push	ebp 
-	push	ebx 
-	push	esi 
-	push	edi 
-	mov	esi,DWORD PTR 20[esp] 
-	mov	edi,DWORD PTR 24[esp] 
-	mov	eax,DWORD PTR 28[esp] 
-	mov	edx,DWORD PTR 32[esp] 
-	sub	eax,16 
-	jc	$L020cbc_abort 
-	lea	ebx,DWORD PTR [esp-56] 
-	mov	ebp,DWORD PTR 36[esp] 
-	and	ebx,-16 
-	mov	ecx,DWORD PTR 40[esp] 
-	xchg	ebx,esp 
-	movdqu	xmm1,XMMWORD PTR [ebp] 
-	sub	edi,esi 
-	mov	DWORD PTR 48[esp],ebx 
-	mov	DWORD PTR [esp],edi 
-	mov	DWORD PTR 4[esp],edx 
-	mov	DWORD PTR 8[esp],ebp 
-	mov	edi,eax 
-	mov	ebp,OFFSET ($L_vpaes_consts+030h-$L021pic_point) 
-	call	__vpaes_preheat 
-$L021pic_point: 
-	cmp	ecx,0 
-	je	$L022cbc_dec_loop 
-	jmp	$L023cbc_enc_loop 
-ALIGN	16 
-$L023cbc_enc_loop: 
-	movdqu	xmm0,XMMWORD PTR [esi] 
-	pxor	xmm0,xmm1 
-	call	__vpaes_encrypt_core 
-	mov	ebx,DWORD PTR [esp] 
-	mov	edx,DWORD PTR 4[esp] 
-	movdqa	xmm1,xmm0 
-	movdqu	XMMWORD PTR [esi*1+ebx],xmm0 
-	lea	esi,DWORD PTR 16[esi] 
-	sub	edi,16 
-	jnc	$L023cbc_enc_loop 
-	jmp	$L024cbc_done 
-ALIGN	16 
-$L022cbc_dec_loop: 
-	movdqu	xmm0,XMMWORD PTR [esi] 
-	movdqa	XMMWORD PTR 16[esp],xmm1 
-	movdqa	XMMWORD PTR 32[esp],xmm0 
-	call	__vpaes_decrypt_core 
-	mov	ebx,DWORD PTR [esp] 
-	mov	edx,DWORD PTR 4[esp] 
-	pxor	xmm0,XMMWORD PTR 16[esp] 
-	movdqa	xmm1,XMMWORD PTR 32[esp] 
-	movdqu	XMMWORD PTR [esi*1+ebx],xmm0 
-	lea	esi,DWORD PTR 16[esi] 
-	sub	edi,16 
-	jnc	$L022cbc_dec_loop 
-$L024cbc_done: 
-	mov	ebx,DWORD PTR 8[esp] 
-	mov	esp,DWORD PTR 48[esp] 
-	movdqu	XMMWORD PTR [ebx],xmm1 
-$L020cbc_abort: 
-	pop	edi 
-	pop	esi 
-	pop	ebx 
-	pop	ebp 
-	ret 
-_vpaes_cbc_encrypt ENDP 
-.text$	ENDS 
-END 
+IF @Version LT 800
+ECHO MASM version 8.00 or later is strongly recommended.
+ENDIF
+.686
+.XMM
+IF @Version LT 800
+XMMWORD STRUCT 16
+DQ	2 dup (?)
+XMMWORD	ENDS
+ENDIF
+
+.MODEL	FLAT
+OPTION	DOTNAME
+IF @Version LT 800
+.text$	SEGMENT PAGE 'CODE'
+ELSE
+.text$	SEGMENT ALIGN(64) 'CODE'
+ENDIF
+ALIGN	64
+$L_vpaes_consts::
+DD	218628480,235210255,168496130,67568393
+DD	252381056,17041926,33884169,51187212
+DD	252645135,252645135,252645135,252645135
+DD	1512730624,3266504856,1377990664,3401244816
+DD	830229760,1275146365,2969422977,3447763452
+DD	3411033600,2979783055,338359620,2782886510
+DD	4209124096,907596821,221174255,1006095553
+DD	191964160,3799684038,3164090317,1589111125
+DD	182528256,1777043520,2877432650,3265356744
+DD	1874708224,3503451415,3305285752,363511674
+DD	1606117888,3487855781,1093350906,2384367825
+DD	197121,67569157,134941193,202313229
+DD	67569157,134941193,202313229,197121
+DD	134941193,202313229,197121,67569157
+DD	202313229,197121,67569157,134941193
+DD	33619971,100992007,168364043,235736079
+DD	235736079,33619971,100992007,168364043
+DD	168364043,235736079,33619971,100992007
+DD	100992007,168364043,235736079,33619971
+DD	50462976,117835012,185207048,252579084
+DD	252314880,51251460,117574920,184942860
+DD	184682752,252054788,50987272,118359308
+DD	118099200,185467140,251790600,50727180
+DD	2946363062,528716217,1300004225,1881839624
+DD	1532713819,1532713819,1532713819,1532713819
+DD	3602276352,4288629033,3737020424,4153884961
+DD	1354558464,32357713,2958822624,3775749553
+DD	1201988352,132424512,1572796698,503232858
+DD	2213177600,1597421020,4103937655,675398315
+DD	2749646592,4273543773,1511898873,121693092
+DD	3040248576,1103263732,2871565598,1608280554
+DD	2236667136,2588920351,482954393,64377734
+DD	3069987328,291237287,2117370568,3650299247
+DD	533321216,3573750986,2572112006,1401264716
+DD	1339849704,2721158661,548607111,3445553514
+DD	2128193280,3054596040,2183486460,1257083700
+DD	655635200,1165381986,3923443150,2344132524
+DD	190078720,256924420,290342170,357187870
+DD	1610966272,2263057382,4103205268,309794674
+DD	2592527872,2233205587,1335446729,3402964816
+DD	3973531904,3225098121,3002836325,1918774430
+DD	3870401024,2102906079,2284471353,4117666579
+DD	617007872,1021508343,366931923,691083277
+DD	2528395776,3491914898,2968704004,1613121270
+DD	3445188352,3247741094,844474987,4093578302
+DD	651481088,1190302358,1689581232,574775300
+DD	4289380608,206939853,2555985458,2489840491
+DD	2130264064,327674451,3566485037,3349835193
+DD	2470714624,316102159,3636825756,3393945945
+DB	86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105
+DB	111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83
+DB	83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117
+DB	114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105
+DB	118,101,114,115,105,116,121,41,0
+ALIGN	64
+ALIGN	16
+__vpaes_preheat	PROC PRIVATE
+	add	ebp,DWORD PTR [esp]
+	movdqa	xmm7,XMMWORD PTR [ebp-48]
+	movdqa	xmm6,XMMWORD PTR [ebp-16]
+	ret
+__vpaes_preheat ENDP
+ALIGN	16
+__vpaes_encrypt_core	PROC PRIVATE
+	mov	ecx,16
+	mov	eax,DWORD PTR 240[edx]
+	movdqa	xmm1,xmm6
+	movdqa	xmm2,XMMWORD PTR [ebp]
+	pandn	xmm1,xmm0
+	pand	xmm0,xmm6
+	movdqu	xmm5,XMMWORD PTR [edx]
+DB	102,15,56,0,208
+	movdqa	xmm0,XMMWORD PTR 16[ebp]
+	pxor	xmm2,xmm5
+	psrld	xmm1,4
+	add	edx,16
+DB	102,15,56,0,193
+	lea	ebx,DWORD PTR 192[ebp]
+	pxor	xmm0,xmm2
+	jmp	$L000enc_entry
+ALIGN	16
+$L001enc_loop:
+	movdqa	xmm4,XMMWORD PTR 32[ebp]
+	movdqa	xmm0,XMMWORD PTR 48[ebp]
+DB	102,15,56,0,226
+DB	102,15,56,0,195
+	pxor	xmm4,xmm5
+	movdqa	xmm5,XMMWORD PTR 64[ebp]
+	pxor	xmm0,xmm4
+	movdqa	xmm1,XMMWORD PTR [ecx*1+ebx-64]
+DB	102,15,56,0,234
+	movdqa	xmm2,XMMWORD PTR 80[ebp]
+	movdqa	xmm4,XMMWORD PTR [ecx*1+ebx]
+DB	102,15,56,0,211
+	movdqa	xmm3,xmm0
+	pxor	xmm2,xmm5
+DB	102,15,56,0,193
+	add	edx,16
+	pxor	xmm0,xmm2
+DB	102,15,56,0,220
+	add	ecx,16
+	pxor	xmm3,xmm0
+DB	102,15,56,0,193
+	and	ecx,48
+	sub	eax,1
+	pxor	xmm0,xmm3
+$L000enc_entry:
+	movdqa	xmm1,xmm6
+	movdqa	xmm5,XMMWORD PTR [ebp-32]
+	pandn	xmm1,xmm0
+	psrld	xmm1,4
+	pand	xmm0,xmm6
+DB	102,15,56,0,232
+	movdqa	xmm3,xmm7
+	pxor	xmm0,xmm1
+DB	102,15,56,0,217
+	movdqa	xmm4,xmm7
+	pxor	xmm3,xmm5
+DB	102,15,56,0,224
+	movdqa	xmm2,xmm7
+	pxor	xmm4,xmm5
+DB	102,15,56,0,211
+	movdqa	xmm3,xmm7
+	pxor	xmm2,xmm0
+DB	102,15,56,0,220
+	movdqu	xmm5,XMMWORD PTR [edx]
+	pxor	xmm3,xmm1
+	jnz	$L001enc_loop
+	movdqa	xmm4,XMMWORD PTR 96[ebp]
+	movdqa	xmm0,XMMWORD PTR 112[ebp]
+DB	102,15,56,0,226
+	pxor	xmm4,xmm5
+DB	102,15,56,0,195
+	movdqa	xmm1,XMMWORD PTR 64[ecx*1+ebx]
+	pxor	xmm0,xmm4
+DB	102,15,56,0,193
+	ret
+__vpaes_encrypt_core ENDP
+ALIGN	16
+__vpaes_decrypt_core	PROC PRIVATE
+	lea	ebx,DWORD PTR 608[ebp]
+	mov	eax,DWORD PTR 240[edx]
+	movdqa	xmm1,xmm6
+	movdqa	xmm2,XMMWORD PTR [ebx-64]
+	pandn	xmm1,xmm0
+	mov	ecx,eax
+	psrld	xmm1,4
+	movdqu	xmm5,XMMWORD PTR [edx]
+	shl	ecx,4
+	pand	xmm0,xmm6
+DB	102,15,56,0,208
+	movdqa	xmm0,XMMWORD PTR [ebx-48]
+	xor	ecx,48
+DB	102,15,56,0,193
+	and	ecx,48
+	pxor	xmm2,xmm5
+	movdqa	xmm5,XMMWORD PTR 176[ebp]
+	pxor	xmm0,xmm2
+	add	edx,16
+	lea	ecx,DWORD PTR [ecx*1+ebx-352]
+	jmp	$L002dec_entry
+ALIGN	16
+$L003dec_loop:
+	movdqa	xmm4,XMMWORD PTR [ebx-32]
+	movdqa	xmm1,XMMWORD PTR [ebx-16]
+DB	102,15,56,0,226
+DB	102,15,56,0,203
+	pxor	xmm0,xmm4
+	movdqa	xmm4,XMMWORD PTR [ebx]
+	pxor	xmm0,xmm1
+	movdqa	xmm1,XMMWORD PTR 16[ebx]
+DB	102,15,56,0,226
+DB	102,15,56,0,197
+DB	102,15,56,0,203
+	pxor	xmm0,xmm4
+	movdqa	xmm4,XMMWORD PTR 32[ebx]
+	pxor	xmm0,xmm1
+	movdqa	xmm1,XMMWORD PTR 48[ebx]
+DB	102,15,56,0,226
+DB	102,15,56,0,197
+DB	102,15,56,0,203
+	pxor	xmm0,xmm4
+	movdqa	xmm4,XMMWORD PTR 64[ebx]
+	pxor	xmm0,xmm1
+	movdqa	xmm1,XMMWORD PTR 80[ebx]
+DB	102,15,56,0,226
+DB	102,15,56,0,197
+DB	102,15,56,0,203
+	pxor	xmm0,xmm4
+	add	edx,16
+DB	102,15,58,15,237,12
+	pxor	xmm0,xmm1
+	sub	eax,1
+$L002dec_entry:
+	movdqa	xmm1,xmm6
+	movdqa	xmm2,XMMWORD PTR [ebp-32]
+	pandn	xmm1,xmm0
+	pand	xmm0,xmm6
+	psrld	xmm1,4
+DB	102,15,56,0,208
+	movdqa	xmm3,xmm7
+	pxor	xmm0,xmm1
+DB	102,15,56,0,217
+	movdqa	xmm4,xmm7
+	pxor	xmm3,xmm2
+DB	102,15,56,0,224
+	pxor	xmm4,xmm2
+	movdqa	xmm2,xmm7
+DB	102,15,56,0,211
+	movdqa	xmm3,xmm7
+	pxor	xmm2,xmm0
+DB	102,15,56,0,220
+	movdqu	xmm0,XMMWORD PTR [edx]
+	pxor	xmm3,xmm1
+	jnz	$L003dec_loop
+	movdqa	xmm4,XMMWORD PTR 96[ebx]
+DB	102,15,56,0,226
+	pxor	xmm4,xmm0
+	movdqa	xmm0,XMMWORD PTR 112[ebx]
+	movdqa	xmm2,XMMWORD PTR [ecx]
+DB	102,15,56,0,195
+	pxor	xmm0,xmm4
+DB	102,15,56,0,194
+	ret
+__vpaes_decrypt_core ENDP
+ALIGN	16
+__vpaes_schedule_core	PROC PRIVATE
+	add	ebp,DWORD PTR [esp]
+	movdqu	xmm0,XMMWORD PTR [esi]
+	movdqa	xmm2,XMMWORD PTR 320[ebp]
+	movdqa	xmm3,xmm0
+	lea	ebx,DWORD PTR [ebp]
+	movdqa	XMMWORD PTR 4[esp],xmm2
+	call	__vpaes_schedule_transform
+	movdqa	xmm7,xmm0
+	test	edi,edi
+	jnz	$L004schedule_am_decrypting
+	movdqu	XMMWORD PTR [edx],xmm0
+	jmp	$L005schedule_go
+$L004schedule_am_decrypting:
+	movdqa	xmm1,XMMWORD PTR 256[ecx*1+ebp]
+DB	102,15,56,0,217
+	movdqu	XMMWORD PTR [edx],xmm3
+	xor	ecx,48
+$L005schedule_go:
+	cmp	eax,192
+	ja	$L006schedule_256
+	je	$L007schedule_192
+$L008schedule_128:
+	mov	eax,10
+$L009loop_schedule_128:
+	call	__vpaes_schedule_round
+	dec	eax
+	jz	$L010schedule_mangle_last
+	call	__vpaes_schedule_mangle
+	jmp	$L009loop_schedule_128
+ALIGN	16
+$L007schedule_192:
+	movdqu	xmm0,XMMWORD PTR 8[esi]
+	call	__vpaes_schedule_transform
+	movdqa	xmm6,xmm0
+	pxor	xmm4,xmm4
+	movhlps	xmm6,xmm4
+	mov	eax,4
+$L011loop_schedule_192:
+	call	__vpaes_schedule_round
+DB	102,15,58,15,198,8
+	call	__vpaes_schedule_mangle
+	call	__vpaes_schedule_192_smear
+	call	__vpaes_schedule_mangle
+	call	__vpaes_schedule_round
+	dec	eax
+	jz	$L010schedule_mangle_last
+	call	__vpaes_schedule_mangle
+	call	__vpaes_schedule_192_smear
+	jmp	$L011loop_schedule_192
+ALIGN	16
+$L006schedule_256:
+	movdqu	xmm0,XMMWORD PTR 16[esi]
+	call	__vpaes_schedule_transform
+	mov	eax,7
+$L012loop_schedule_256:
+	call	__vpaes_schedule_mangle
+	movdqa	xmm6,xmm0
+	call	__vpaes_schedule_round
+	dec	eax
+	jz	$L010schedule_mangle_last
+	call	__vpaes_schedule_mangle
+	pshufd	xmm0,xmm0,255
+	movdqa	XMMWORD PTR 20[esp],xmm7
+	movdqa	xmm7,xmm6
+	call	$L_vpaes_schedule_low_round
+	movdqa	xmm7,XMMWORD PTR 20[esp]
+	jmp	$L012loop_schedule_256
+ALIGN	16
+$L010schedule_mangle_last:
+	lea	ebx,DWORD PTR 384[ebp]
+	test	edi,edi
+	jnz	$L013schedule_mangle_last_dec
+	movdqa	xmm1,XMMWORD PTR 256[ecx*1+ebp]
+DB	102,15,56,0,193
+	lea	ebx,DWORD PTR 352[ebp]
+	add	edx,32
+$L013schedule_mangle_last_dec:
+	add	edx,-16
+	pxor	xmm0,XMMWORD PTR 336[ebp]
+	call	__vpaes_schedule_transform
+	movdqu	XMMWORD PTR [edx],xmm0
+	pxor	xmm0,xmm0
+	pxor	xmm1,xmm1
+	pxor	xmm2,xmm2
+	pxor	xmm3,xmm3
+	pxor	xmm4,xmm4
+	pxor	xmm5,xmm5
+	pxor	xmm6,xmm6
+	pxor	xmm7,xmm7
+	ret
+__vpaes_schedule_core ENDP
+ALIGN	16
+__vpaes_schedule_192_smear	PROC PRIVATE
+	pshufd	xmm1,xmm6,128
+	pshufd	xmm0,xmm7,254
+	pxor	xmm6,xmm1
+	pxor	xmm1,xmm1
+	pxor	xmm6,xmm0
+	movdqa	xmm0,xmm6
+	movhlps	xmm6,xmm1
+	ret
+__vpaes_schedule_192_smear ENDP
+ALIGN	16
+__vpaes_schedule_round	PROC PRIVATE
+	movdqa	xmm2,XMMWORD PTR 8[esp]
+	pxor	xmm1,xmm1
+DB	102,15,58,15,202,15
+DB	102,15,58,15,210,15
+	pxor	xmm7,xmm1
+	pshufd	xmm0,xmm0,255
+DB	102,15,58,15,192,1
+	movdqa	XMMWORD PTR 8[esp],xmm2
+$L_vpaes_schedule_low_round::
+	movdqa	xmm1,xmm7
+	pslldq	xmm7,4
+	pxor	xmm7,xmm1
+	movdqa	xmm1,xmm7
+	pslldq	xmm7,8
+	pxor	xmm7,xmm1
+	pxor	xmm7,XMMWORD PTR 336[ebp]
+	movdqa	xmm4,XMMWORD PTR [ebp-16]
+	movdqa	xmm5,XMMWORD PTR [ebp-48]
+	movdqa	xmm1,xmm4
+	pandn	xmm1,xmm0
+	psrld	xmm1,4
+	pand	xmm0,xmm4
+	movdqa	xmm2,XMMWORD PTR [ebp-32]
+DB	102,15,56,0,208
+	pxor	xmm0,xmm1
+	movdqa	xmm3,xmm5
+DB	102,15,56,0,217
+	pxor	xmm3,xmm2
+	movdqa	xmm4,xmm5
+DB	102,15,56,0,224
+	pxor	xmm4,xmm2
+	movdqa	xmm2,xmm5
+DB	102,15,56,0,211
+	pxor	xmm2,xmm0
+	movdqa	xmm3,xmm5
+DB	102,15,56,0,220
+	pxor	xmm3,xmm1
+	movdqa	xmm4,XMMWORD PTR 32[ebp]
+DB	102,15,56,0,226
+	movdqa	xmm0,XMMWORD PTR 48[ebp]
+DB	102,15,56,0,195
+	pxor	xmm0,xmm4
+	pxor	xmm0,xmm7
+	movdqa	xmm7,xmm0
+	ret
+__vpaes_schedule_round ENDP
+ALIGN	16
+__vpaes_schedule_transform	PROC PRIVATE
+	movdqa	xmm2,XMMWORD PTR [ebp-16]
+	movdqa	xmm1,xmm2
+	pandn	xmm1,xmm0
+	psrld	xmm1,4
+	pand	xmm0,xmm2
+	movdqa	xmm2,XMMWORD PTR [ebx]
+DB	102,15,56,0,208
+	movdqa	xmm0,XMMWORD PTR 16[ebx]
+DB	102,15,56,0,193
+	pxor	xmm0,xmm2
+	ret
+__vpaes_schedule_transform ENDP
+ALIGN	16
+__vpaes_schedule_mangle	PROC PRIVATE
+	movdqa	xmm4,xmm0
+	movdqa	xmm5,XMMWORD PTR 128[ebp]
+	test	edi,edi
+	jnz	$L014schedule_mangle_dec
+	add	edx,16
+	pxor	xmm4,XMMWORD PTR 336[ebp]
+DB	102,15,56,0,229
+	movdqa	xmm3,xmm4
+DB	102,15,56,0,229
+	pxor	xmm3,xmm4
+DB	102,15,56,0,229
+	pxor	xmm3,xmm4
+	jmp	$L015schedule_mangle_both
+ALIGN	16
+$L014schedule_mangle_dec:
+	movdqa	xmm2,XMMWORD PTR [ebp-16]
+	lea	esi,DWORD PTR 416[ebp]
+	movdqa	xmm1,xmm2
+	pandn	xmm1,xmm4
+	psrld	xmm1,4
+	pand	xmm4,xmm2
+	movdqa	xmm2,XMMWORD PTR [esi]
+DB	102,15,56,0,212
+	movdqa	xmm3,XMMWORD PTR 16[esi]
+DB	102,15,56,0,217
+	pxor	xmm3,xmm2
+DB	102,15,56,0,221
+	movdqa	xmm2,XMMWORD PTR 32[esi]
+DB	102,15,56,0,212
+	pxor	xmm2,xmm3
+	movdqa	xmm3,XMMWORD PTR 48[esi]
+DB	102,15,56,0,217
+	pxor	xmm3,xmm2
+DB	102,15,56,0,221
+	movdqa	xmm2,XMMWORD PTR 64[esi]
+DB	102,15,56,0,212
+	pxor	xmm2,xmm3
+	movdqa	xmm3,XMMWORD PTR 80[esi]
+DB	102,15,56,0,217
+	pxor	xmm3,xmm2
+DB	102,15,56,0,221
+	movdqa	xmm2,XMMWORD PTR 96[esi]
+DB	102,15,56,0,212
+	pxor	xmm2,xmm3
+	movdqa	xmm3,XMMWORD PTR 112[esi]
+DB	102,15,56,0,217
+	pxor	xmm3,xmm2
+	add	edx,-16
+$L015schedule_mangle_both:
+	movdqa	xmm1,XMMWORD PTR 256[ecx*1+ebp]
+DB	102,15,56,0,217
+	add	ecx,-16
+	and	ecx,48
+	movdqu	XMMWORD PTR [edx],xmm3
+	ret
+__vpaes_schedule_mangle ENDP
+ALIGN	16
+_vpaes_set_encrypt_key	PROC PUBLIC
+$L_vpaes_set_encrypt_key_begin::
+	push	ebp
+	push	ebx
+	push	esi
+	push	edi
+	mov	esi,DWORD PTR 20[esp]
+	lea	ebx,DWORD PTR [esp-56]
+	mov	eax,DWORD PTR 24[esp]
+	and	ebx,-16
+	mov	edx,DWORD PTR 28[esp]
+	xchg	ebx,esp
+	mov	DWORD PTR 48[esp],ebx
+	mov	ebx,eax
+	shr	ebx,5
+	add	ebx,5
+	mov	DWORD PTR 240[edx],ebx
+	mov	ecx,48
+	mov	edi,0
+	mov	ebp,OFFSET ($L_vpaes_consts+030h-$L016pic_point)
+	call	__vpaes_schedule_core
+$L016pic_point:
+	mov	esp,DWORD PTR 48[esp]
+	xor	eax,eax
+	pop	edi
+	pop	esi
+	pop	ebx
+	pop	ebp
+	ret
+_vpaes_set_encrypt_key ENDP
+ALIGN	16
+_vpaes_set_decrypt_key	PROC PUBLIC
+$L_vpaes_set_decrypt_key_begin::
+	push	ebp
+	push	ebx
+	push	esi
+	push	edi
+	mov	esi,DWORD PTR 20[esp]
+	lea	ebx,DWORD PTR [esp-56]
+	mov	eax,DWORD PTR 24[esp]
+	and	ebx,-16
+	mov	edx,DWORD PTR 28[esp]
+	xchg	ebx,esp
+	mov	DWORD PTR 48[esp],ebx
+	mov	ebx,eax
+	shr	ebx,5
+	add	ebx,5
+	mov	DWORD PTR 240[edx],ebx
+	shl	ebx,4
+	lea	edx,DWORD PTR 16[ebx*1+edx]
+	mov	edi,1
+	mov	ecx,eax
+	shr	ecx,1
+	and	ecx,32
+	xor	ecx,32
+	mov	ebp,OFFSET ($L_vpaes_consts+030h-$L017pic_point)
+	call	__vpaes_schedule_core
+$L017pic_point:
+	mov	esp,DWORD PTR 48[esp]
+	xor	eax,eax
+	pop	edi
+	pop	esi
+	pop	ebx
+	pop	ebp
+	ret
+_vpaes_set_decrypt_key ENDP
+ALIGN	16
+_vpaes_encrypt	PROC PUBLIC
+$L_vpaes_encrypt_begin::
+	push	ebp
+	push	ebx
+	push	esi
+	push	edi
+	mov	ebp,OFFSET ($L_vpaes_consts+030h-$L018pic_point)
+	call	__vpaes_preheat
+$L018pic_point:
+	mov	esi,DWORD PTR 20[esp]
+	lea	ebx,DWORD PTR [esp-56]
+	mov	edi,DWORD PTR 24[esp]
+	and	ebx,-16
+	mov	edx,DWORD PTR 28[esp]
+	xchg	ebx,esp
+	mov	DWORD PTR 48[esp],ebx
+	movdqu	xmm0,XMMWORD PTR [esi]
+	call	__vpaes_encrypt_core
+	movdqu	XMMWORD PTR [edi],xmm0
+	mov	esp,DWORD PTR 48[esp]
+	pop	edi
+	pop	esi
+	pop	ebx
+	pop	ebp
+	ret
+_vpaes_encrypt ENDP
+ALIGN	16
+_vpaes_decrypt	PROC PUBLIC
+$L_vpaes_decrypt_begin::
+	push	ebp
+	push	ebx
+	push	esi
+	push	edi
+	mov	ebp,OFFSET ($L_vpaes_consts+030h-$L019pic_point)
+	call	__vpaes_preheat
+$L019pic_point:
+	mov	esi,DWORD PTR 20[esp]
+	lea	ebx,DWORD PTR [esp-56]
+	mov	edi,DWORD PTR 24[esp]
+	and	ebx,-16
+	mov	edx,DWORD PTR 28[esp]
+	xchg	ebx,esp
+	mov	DWORD PTR 48[esp],ebx
+	movdqu	xmm0,XMMWORD PTR [esi]
+	call	__vpaes_decrypt_core
+	movdqu	XMMWORD PTR [edi],xmm0
+	mov	esp,DWORD PTR 48[esp]
+	pop	edi
+	pop	esi
+	pop	ebx
+	pop	ebp
+	ret
+_vpaes_decrypt ENDP
+ALIGN	16
+_vpaes_cbc_encrypt	PROC PUBLIC
+$L_vpaes_cbc_encrypt_begin::
+	push	ebp
+	push	ebx
+	push	esi
+	push	edi
+	mov	esi,DWORD PTR 20[esp]
+	mov	edi,DWORD PTR 24[esp]
+	mov	eax,DWORD PTR 28[esp]
+	mov	edx,DWORD PTR 32[esp]
+	sub	eax,16
+	jc	$L020cbc_abort
+	lea	ebx,DWORD PTR [esp-56]
+	mov	ebp,DWORD PTR 36[esp]
+	and	ebx,-16
+	mov	ecx,DWORD PTR 40[esp]
+	xchg	ebx,esp
+	movdqu	xmm1,XMMWORD PTR [ebp]
+	sub	edi,esi
+	mov	DWORD PTR 48[esp],ebx
+	mov	DWORD PTR [esp],edi
+	mov	DWORD PTR 4[esp],edx
+	mov	DWORD PTR 8[esp],ebp
+	mov	edi,eax
+	mov	ebp,OFFSET ($L_vpaes_consts+030h-$L021pic_point)
+	call	__vpaes_preheat
+$L021pic_point:
+	cmp	ecx,0
+	je	$L022cbc_dec_loop
+	jmp	$L023cbc_enc_loop
+ALIGN	16
+$L023cbc_enc_loop:
+	movdqu	xmm0,XMMWORD PTR [esi]
+	pxor	xmm0,xmm1
+	call	__vpaes_encrypt_core
+	mov	ebx,DWORD PTR [esp]
+	mov	edx,DWORD PTR 4[esp]
+	movdqa	xmm1,xmm0
+	movdqu	XMMWORD PTR [esi*1+ebx],xmm0
+	lea	esi,DWORD PTR 16[esi]
+	sub	edi,16
+	jnc	$L023cbc_enc_loop
+	jmp	$L024cbc_done
+ALIGN	16
+$L022cbc_dec_loop:
+	movdqu	xmm0,XMMWORD PTR [esi]
+	movdqa	XMMWORD PTR 16[esp],xmm1
+	movdqa	XMMWORD PTR 32[esp],xmm0
+	call	__vpaes_decrypt_core
+	mov	ebx,DWORD PTR [esp]
+	mov	edx,DWORD PTR 4[esp]
+	pxor	xmm0,XMMWORD PTR 16[esp]
+	movdqa	xmm1,XMMWORD PTR 32[esp]
+	movdqu	XMMWORD PTR [esi*1+ebx],xmm0
+	lea	esi,DWORD PTR 16[esi]
+	sub	edi,16
+	jnc	$L022cbc_dec_loop
+$L024cbc_done:
+	mov	ebx,DWORD PTR 8[esp]
+	mov	esp,DWORD PTR 48[esp]
+	movdqu	XMMWORD PTR [ebx],xmm1
+$L020cbc_abort:
+	pop	edi
+	pop	esi
+	pop	ebx
+	pop	ebp
+	ret
+_vpaes_cbc_encrypt ENDP
+.text$	ENDS
+END

+ 360 - 360
contrib/libs/openssl/asm/windows/crypto/bn/x86-gf2m.masm

@@ -1,360 +1,360 @@
-IF @Version LT 800 
-ECHO MASM version 8.00 or later is strongly recommended. 
-ENDIF 
-.686 
-.XMM 
-IF @Version LT 800 
-XMMWORD STRUCT 16 
-DQ	2 dup (?) 
-XMMWORD	ENDS 
-ENDIF 
- 
-.MODEL	FLAT 
-OPTION	DOTNAME 
-IF @Version LT 800 
-.text$	SEGMENT PAGE 'CODE' 
-ELSE 
-.text$	SEGMENT ALIGN(64) 'CODE' 
-ENDIF 
-;EXTERN	_OPENSSL_ia32cap_P:NEAR 
-ALIGN	16 
-__mul_1x1_mmx	PROC PRIVATE 
-	sub	esp,36 
-	mov	ecx,eax 
-	lea	edx,DWORD PTR [eax*1+eax] 
-	and	ecx,1073741823 
-	lea	ebp,DWORD PTR [edx*1+edx] 
-	mov	DWORD PTR [esp],0 
-	and	edx,2147483647 
-	movd	mm2,eax 
-	movd	mm3,ebx 
-	mov	DWORD PTR 4[esp],ecx 
-	xor	ecx,edx 
-	pxor	mm5,mm5 
-	pxor	mm4,mm4 
-	mov	DWORD PTR 8[esp],edx 
-	xor	edx,ebp 
-	mov	DWORD PTR 12[esp],ecx 
-	pcmpgtd	mm5,mm2 
-	paddd	mm2,mm2 
-	xor	ecx,edx 
-	mov	DWORD PTR 16[esp],ebp 
-	xor	ebp,edx 
-	pand	mm5,mm3 
-	pcmpgtd	mm4,mm2 
-	mov	DWORD PTR 20[esp],ecx 
-	xor	ebp,ecx 
-	psllq	mm5,31 
-	pand	mm4,mm3 
-	mov	DWORD PTR 24[esp],edx 
-	mov	esi,7 
-	mov	DWORD PTR 28[esp],ebp 
-	mov	ebp,esi 
-	and	esi,ebx 
-	shr	ebx,3 
-	mov	edi,ebp 
-	psllq	mm4,30 
-	and	edi,ebx 
-	shr	ebx,3 
-	movd	mm0,DWORD PTR [esi*4+esp] 
-	mov	esi,ebp 
-	and	esi,ebx 
-	shr	ebx,3 
-	movd	mm2,DWORD PTR [edi*4+esp] 
-	mov	edi,ebp 
-	psllq	mm2,3 
-	and	edi,ebx 
-	shr	ebx,3 
-	pxor	mm0,mm2 
-	movd	mm1,DWORD PTR [esi*4+esp] 
-	mov	esi,ebp 
-	psllq	mm1,6 
-	and	esi,ebx 
-	shr	ebx,3 
-	pxor	mm0,mm1 
-	movd	mm2,DWORD PTR [edi*4+esp] 
-	mov	edi,ebp 
-	psllq	mm2,9 
-	and	edi,ebx 
-	shr	ebx,3 
-	pxor	mm0,mm2 
-	movd	mm1,DWORD PTR [esi*4+esp] 
-	mov	esi,ebp 
-	psllq	mm1,12 
-	and	esi,ebx 
-	shr	ebx,3 
-	pxor	mm0,mm1 
-	movd	mm2,DWORD PTR [edi*4+esp] 
-	mov	edi,ebp 
-	psllq	mm2,15 
-	and	edi,ebx 
-	shr	ebx,3 
-	pxor	mm0,mm2 
-	movd	mm1,DWORD PTR [esi*4+esp] 
-	mov	esi,ebp 
-	psllq	mm1,18 
-	and	esi,ebx 
-	shr	ebx,3 
-	pxor	mm0,mm1 
-	movd	mm2,DWORD PTR [edi*4+esp] 
-	mov	edi,ebp 
-	psllq	mm2,21 
-	and	edi,ebx 
-	shr	ebx,3 
-	pxor	mm0,mm2 
-	movd	mm1,DWORD PTR [esi*4+esp] 
-	mov	esi,ebp 
-	psllq	mm1,24 
-	and	esi,ebx 
-	shr	ebx,3 
-	pxor	mm0,mm1 
-	movd	mm2,DWORD PTR [edi*4+esp] 
-	pxor	mm0,mm4 
-	psllq	mm2,27 
-	pxor	mm0,mm2 
-	movd	mm1,DWORD PTR [esi*4+esp] 
-	pxor	mm0,mm5 
-	psllq	mm1,30 
-	add	esp,36 
-	pxor	mm0,mm1 
-	ret 
-__mul_1x1_mmx ENDP 
-ALIGN	16 
-__mul_1x1_ialu	PROC PRIVATE 
-	sub	esp,36 
-	mov	ecx,eax 
-	lea	edx,DWORD PTR [eax*1+eax] 
-	lea	ebp,DWORD PTR [eax*4] 
-	and	ecx,1073741823 
-	lea	edi,DWORD PTR [eax*1+eax] 
-	sar	eax,31 
-	mov	DWORD PTR [esp],0 
-	and	edx,2147483647 
-	mov	DWORD PTR 4[esp],ecx 
-	xor	ecx,edx 
-	mov	DWORD PTR 8[esp],edx 
-	xor	edx,ebp 
-	mov	DWORD PTR 12[esp],ecx 
-	xor	ecx,edx 
-	mov	DWORD PTR 16[esp],ebp 
-	xor	ebp,edx 
-	mov	DWORD PTR 20[esp],ecx 
-	xor	ebp,ecx 
-	sar	edi,31 
-	and	eax,ebx 
-	mov	DWORD PTR 24[esp],edx 
-	and	edi,ebx 
-	mov	DWORD PTR 28[esp],ebp 
-	mov	edx,eax 
-	shl	eax,31 
-	mov	ecx,edi 
-	shr	edx,1 
-	mov	esi,7 
-	shl	edi,30 
-	and	esi,ebx 
-	shr	ecx,2 
-	xor	eax,edi 
-	shr	ebx,3 
-	mov	edi,7 
-	and	edi,ebx 
-	shr	ebx,3 
-	xor	edx,ecx 
-	xor	eax,DWORD PTR [esi*4+esp] 
-	mov	esi,7 
-	and	esi,ebx 
-	shr	ebx,3 
-	mov	ebp,DWORD PTR [edi*4+esp] 
-	mov	edi,7 
-	mov	ecx,ebp 
-	shl	ebp,3 
-	and	edi,ebx 
-	shr	ecx,29 
-	xor	eax,ebp 
-	shr	ebx,3 
-	xor	edx,ecx 
-	mov	ecx,DWORD PTR [esi*4+esp] 
-	mov	esi,7 
-	mov	ebp,ecx 
-	shl	ecx,6 
-	and	esi,ebx 
-	shr	ebp,26 
-	xor	eax,ecx 
-	shr	ebx,3 
-	xor	edx,ebp 
-	mov	ebp,DWORD PTR [edi*4+esp] 
-	mov	edi,7 
-	mov	ecx,ebp 
-	shl	ebp,9 
-	and	edi,ebx 
-	shr	ecx,23 
-	xor	eax,ebp 
-	shr	ebx,3 
-	xor	edx,ecx 
-	mov	ecx,DWORD PTR [esi*4+esp] 
-	mov	esi,7 
-	mov	ebp,ecx 
-	shl	ecx,12 
-	and	esi,ebx 
-	shr	ebp,20 
-	xor	eax,ecx 
-	shr	ebx,3 
-	xor	edx,ebp 
-	mov	ebp,DWORD PTR [edi*4+esp] 
-	mov	edi,7 
-	mov	ecx,ebp 
-	shl	ebp,15 
-	and	edi,ebx 
-	shr	ecx,17 
-	xor	eax,ebp 
-	shr	ebx,3 
-	xor	edx,ecx 
-	mov	ecx,DWORD PTR [esi*4+esp] 
-	mov	esi,7 
-	mov	ebp,ecx 
-	shl	ecx,18 
-	and	esi,ebx 
-	shr	ebp,14 
-	xor	eax,ecx 
-	shr	ebx,3 
-	xor	edx,ebp 
-	mov	ebp,DWORD PTR [edi*4+esp] 
-	mov	edi,7 
-	mov	ecx,ebp 
-	shl	ebp,21 
-	and	edi,ebx 
-	shr	ecx,11 
-	xor	eax,ebp 
-	shr	ebx,3 
-	xor	edx,ecx 
-	mov	ecx,DWORD PTR [esi*4+esp] 
-	mov	esi,7 
-	mov	ebp,ecx 
-	shl	ecx,24 
-	and	esi,ebx 
-	shr	ebp,8 
-	xor	eax,ecx 
-	shr	ebx,3 
-	xor	edx,ebp 
-	mov	ebp,DWORD PTR [edi*4+esp] 
-	mov	ecx,ebp 
-	shl	ebp,27 
-	mov	edi,DWORD PTR [esi*4+esp] 
-	shr	ecx,5 
-	mov	esi,edi 
-	xor	eax,ebp 
-	shl	edi,30 
-	xor	edx,ecx 
-	shr	esi,2 
-	xor	eax,edi 
-	xor	edx,esi 
-	add	esp,36 
-	ret 
-__mul_1x1_ialu ENDP 
-ALIGN	16 
-_bn_GF2m_mul_2x2	PROC PUBLIC 
-$L_bn_GF2m_mul_2x2_begin:: 
-	lea	edx,DWORD PTR _OPENSSL_ia32cap_P 
-	mov	eax,DWORD PTR [edx] 
-	mov	edx,DWORD PTR 4[edx] 
-	test	eax,8388608 
-	jz	$L000ialu 
-	test	eax,16777216 
-	jz	$L001mmx 
-	test	edx,2 
-	jz	$L001mmx 
-	movups	xmm0,XMMWORD PTR 8[esp] 
-	shufps	xmm0,xmm0,177 
-DB	102,15,58,68,192,1 
-	mov	eax,DWORD PTR 4[esp] 
-	movups	XMMWORD PTR [eax],xmm0 
-	ret 
-ALIGN	16 
-$L001mmx: 
-	push	ebp 
-	push	ebx 
-	push	esi 
-	push	edi 
-	mov	eax,DWORD PTR 24[esp] 
-	mov	ebx,DWORD PTR 32[esp] 
-	call	__mul_1x1_mmx 
-	movq	mm7,mm0 
-	mov	eax,DWORD PTR 28[esp] 
-	mov	ebx,DWORD PTR 36[esp] 
-	call	__mul_1x1_mmx 
-	movq	mm6,mm0 
-	mov	eax,DWORD PTR 24[esp] 
-	mov	ebx,DWORD PTR 32[esp] 
-	xor	eax,DWORD PTR 28[esp] 
-	xor	ebx,DWORD PTR 36[esp] 
-	call	__mul_1x1_mmx 
-	pxor	mm0,mm7 
-	mov	eax,DWORD PTR 20[esp] 
-	pxor	mm0,mm6 
-	movq	mm2,mm0 
-	psllq	mm0,32 
-	pop	edi 
-	psrlq	mm2,32 
-	pop	esi 
-	pxor	mm0,mm6 
-	pop	ebx 
-	pxor	mm2,mm7 
-	movq	QWORD PTR [eax],mm0 
-	pop	ebp 
-	movq	QWORD PTR 8[eax],mm2 
-	emms 
-	ret 
-ALIGN	16 
-$L000ialu: 
-	push	ebp 
-	push	ebx 
-	push	esi 
-	push	edi 
-	sub	esp,20 
-	mov	eax,DWORD PTR 44[esp] 
-	mov	ebx,DWORD PTR 52[esp] 
-	call	__mul_1x1_ialu 
-	mov	DWORD PTR 8[esp],eax 
-	mov	DWORD PTR 12[esp],edx 
-	mov	eax,DWORD PTR 48[esp] 
-	mov	ebx,DWORD PTR 56[esp] 
-	call	__mul_1x1_ialu 
-	mov	DWORD PTR [esp],eax 
-	mov	DWORD PTR 4[esp],edx 
-	mov	eax,DWORD PTR 44[esp] 
-	mov	ebx,DWORD PTR 52[esp] 
-	xor	eax,DWORD PTR 48[esp] 
-	xor	ebx,DWORD PTR 56[esp] 
-	call	__mul_1x1_ialu 
-	mov	ebp,DWORD PTR 40[esp] 
-	mov	ebx,DWORD PTR [esp] 
-	mov	ecx,DWORD PTR 4[esp] 
-	mov	edi,DWORD PTR 8[esp] 
-	mov	esi,DWORD PTR 12[esp] 
-	xor	eax,edx 
-	xor	edx,ecx 
-	xor	eax,ebx 
-	mov	DWORD PTR [ebp],ebx 
-	xor	edx,edi 
-	mov	DWORD PTR 12[ebp],esi 
-	xor	eax,esi 
-	add	esp,20 
-	xor	edx,esi 
-	pop	edi 
-	xor	eax,edx 
-	pop	esi 
-	mov	DWORD PTR 8[ebp],edx 
-	pop	ebx 
-	mov	DWORD PTR 4[ebp],eax 
-	pop	ebp 
-	ret 
-_bn_GF2m_mul_2x2 ENDP 
-DB	71,70,40,50,94,109,41,32,77,117,108,116,105,112,108,105 
-DB	99,97,116,105,111,110,32,102,111,114,32,120,56,54,44,32 
-DB	67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97 
-DB	112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103 
-DB	62,0 
-.text$	ENDS 
-.bss	SEGMENT 'BSS' 
-COMM	_OPENSSL_ia32cap_P:DWORD:4 
-.bss	ENDS 
-END 
+IF @Version LT 800
+ECHO MASM version 8.00 or later is strongly recommended.
+ENDIF
+.686
+.XMM
+IF @Version LT 800
+XMMWORD STRUCT 16
+DQ	2 dup (?)
+XMMWORD	ENDS
+ENDIF
+
+.MODEL	FLAT
+OPTION	DOTNAME
+IF @Version LT 800
+.text$	SEGMENT PAGE 'CODE'
+ELSE
+.text$	SEGMENT ALIGN(64) 'CODE'
+ENDIF
+;EXTERN	_OPENSSL_ia32cap_P:NEAR
+ALIGN	16
+__mul_1x1_mmx	PROC PRIVATE
+	sub	esp,36
+	mov	ecx,eax
+	lea	edx,DWORD PTR [eax*1+eax]
+	and	ecx,1073741823
+	lea	ebp,DWORD PTR [edx*1+edx]
+	mov	DWORD PTR [esp],0
+	and	edx,2147483647
+	movd	mm2,eax
+	movd	mm3,ebx
+	mov	DWORD PTR 4[esp],ecx
+	xor	ecx,edx
+	pxor	mm5,mm5
+	pxor	mm4,mm4
+	mov	DWORD PTR 8[esp],edx
+	xor	edx,ebp
+	mov	DWORD PTR 12[esp],ecx
+	pcmpgtd	mm5,mm2
+	paddd	mm2,mm2
+	xor	ecx,edx
+	mov	DWORD PTR 16[esp],ebp
+	xor	ebp,edx
+	pand	mm5,mm3
+	pcmpgtd	mm4,mm2
+	mov	DWORD PTR 20[esp],ecx
+	xor	ebp,ecx
+	psllq	mm5,31
+	pand	mm4,mm3
+	mov	DWORD PTR 24[esp],edx
+	mov	esi,7
+	mov	DWORD PTR 28[esp],ebp
+	mov	ebp,esi
+	and	esi,ebx
+	shr	ebx,3
+	mov	edi,ebp
+	psllq	mm4,30
+	and	edi,ebx
+	shr	ebx,3
+	movd	mm0,DWORD PTR [esi*4+esp]
+	mov	esi,ebp
+	and	esi,ebx
+	shr	ebx,3
+	movd	mm2,DWORD PTR [edi*4+esp]
+	mov	edi,ebp
+	psllq	mm2,3
+	and	edi,ebx
+	shr	ebx,3
+	pxor	mm0,mm2
+	movd	mm1,DWORD PTR [esi*4+esp]
+	mov	esi,ebp
+	psllq	mm1,6
+	and	esi,ebx
+	shr	ebx,3
+	pxor	mm0,mm1
+	movd	mm2,DWORD PTR [edi*4+esp]
+	mov	edi,ebp
+	psllq	mm2,9
+	and	edi,ebx
+	shr	ebx,3
+	pxor	mm0,mm2
+	movd	mm1,DWORD PTR [esi*4+esp]
+	mov	esi,ebp
+	psllq	mm1,12
+	and	esi,ebx
+	shr	ebx,3
+	pxor	mm0,mm1
+	movd	mm2,DWORD PTR [edi*4+esp]
+	mov	edi,ebp
+	psllq	mm2,15
+	and	edi,ebx
+	shr	ebx,3
+	pxor	mm0,mm2
+	movd	mm1,DWORD PTR [esi*4+esp]
+	mov	esi,ebp
+	psllq	mm1,18
+	and	esi,ebx
+	shr	ebx,3
+	pxor	mm0,mm1
+	movd	mm2,DWORD PTR [edi*4+esp]
+	mov	edi,ebp
+	psllq	mm2,21
+	and	edi,ebx
+	shr	ebx,3
+	pxor	mm0,mm2
+	movd	mm1,DWORD PTR [esi*4+esp]
+	mov	esi,ebp
+	psllq	mm1,24
+	and	esi,ebx
+	shr	ebx,3
+	pxor	mm0,mm1
+	movd	mm2,DWORD PTR [edi*4+esp]
+	pxor	mm0,mm4
+	psllq	mm2,27
+	pxor	mm0,mm2
+	movd	mm1,DWORD PTR [esi*4+esp]
+	pxor	mm0,mm5
+	psllq	mm1,30
+	add	esp,36
+	pxor	mm0,mm1
+	ret
+__mul_1x1_mmx ENDP
+ALIGN	16
+__mul_1x1_ialu	PROC PRIVATE
+	sub	esp,36
+	mov	ecx,eax
+	lea	edx,DWORD PTR [eax*1+eax]
+	lea	ebp,DWORD PTR [eax*4]
+	and	ecx,1073741823
+	lea	edi,DWORD PTR [eax*1+eax]
+	sar	eax,31
+	mov	DWORD PTR [esp],0
+	and	edx,2147483647
+	mov	DWORD PTR 4[esp],ecx
+	xor	ecx,edx
+	mov	DWORD PTR 8[esp],edx
+	xor	edx,ebp
+	mov	DWORD PTR 12[esp],ecx
+	xor	ecx,edx
+	mov	DWORD PTR 16[esp],ebp
+	xor	ebp,edx
+	mov	DWORD PTR 20[esp],ecx
+	xor	ebp,ecx
+	sar	edi,31
+	and	eax,ebx
+	mov	DWORD PTR 24[esp],edx
+	and	edi,ebx
+	mov	DWORD PTR 28[esp],ebp
+	mov	edx,eax
+	shl	eax,31
+	mov	ecx,edi
+	shr	edx,1
+	mov	esi,7
+	shl	edi,30
+	and	esi,ebx
+	shr	ecx,2
+	xor	eax,edi
+	shr	ebx,3
+	mov	edi,7
+	and	edi,ebx
+	shr	ebx,3
+	xor	edx,ecx
+	xor	eax,DWORD PTR [esi*4+esp]
+	mov	esi,7
+	and	esi,ebx
+	shr	ebx,3
+	mov	ebp,DWORD PTR [edi*4+esp]
+	mov	edi,7
+	mov	ecx,ebp
+	shl	ebp,3
+	and	edi,ebx
+	shr	ecx,29
+	xor	eax,ebp
+	shr	ebx,3
+	xor	edx,ecx
+	mov	ecx,DWORD PTR [esi*4+esp]
+	mov	esi,7
+	mov	ebp,ecx
+	shl	ecx,6
+	and	esi,ebx
+	shr	ebp,26
+	xor	eax,ecx
+	shr	ebx,3
+	xor	edx,ebp
+	mov	ebp,DWORD PTR [edi*4+esp]
+	mov	edi,7
+	mov	ecx,ebp
+	shl	ebp,9
+	and	edi,ebx
+	shr	ecx,23
+	xor	eax,ebp
+	shr	ebx,3
+	xor	edx,ecx
+	mov	ecx,DWORD PTR [esi*4+esp]
+	mov	esi,7
+	mov	ebp,ecx
+	shl	ecx,12
+	and	esi,ebx
+	shr	ebp,20
+	xor	eax,ecx
+	shr	ebx,3
+	xor	edx,ebp
+	mov	ebp,DWORD PTR [edi*4+esp]
+	mov	edi,7
+	mov	ecx,ebp
+	shl	ebp,15
+	and	edi,ebx
+	shr	ecx,17
+	xor	eax,ebp
+	shr	ebx,3
+	xor	edx,ecx
+	mov	ecx,DWORD PTR [esi*4+esp]
+	mov	esi,7
+	mov	ebp,ecx
+	shl	ecx,18
+	and	esi,ebx
+	shr	ebp,14
+	xor	eax,ecx
+	shr	ebx,3
+	xor	edx,ebp
+	mov	ebp,DWORD PTR [edi*4+esp]
+	mov	edi,7
+	mov	ecx,ebp
+	shl	ebp,21
+	and	edi,ebx
+	shr	ecx,11
+	xor	eax,ebp
+	shr	ebx,3
+	xor	edx,ecx
+	mov	ecx,DWORD PTR [esi*4+esp]
+	mov	esi,7
+	mov	ebp,ecx
+	shl	ecx,24
+	and	esi,ebx
+	shr	ebp,8
+	xor	eax,ecx
+	shr	ebx,3
+	xor	edx,ebp
+	mov	ebp,DWORD PTR [edi*4+esp]
+	mov	ecx,ebp
+	shl	ebp,27
+	mov	edi,DWORD PTR [esi*4+esp]
+	shr	ecx,5
+	mov	esi,edi
+	xor	eax,ebp
+	shl	edi,30
+	xor	edx,ecx
+	shr	esi,2
+	xor	eax,edi
+	xor	edx,esi
+	add	esp,36
+	ret
+__mul_1x1_ialu ENDP
+ALIGN	16
+_bn_GF2m_mul_2x2	PROC PUBLIC
+$L_bn_GF2m_mul_2x2_begin::
+	lea	edx,DWORD PTR _OPENSSL_ia32cap_P
+	mov	eax,DWORD PTR [edx]
+	mov	edx,DWORD PTR 4[edx]
+	test	eax,8388608
+	jz	$L000ialu
+	test	eax,16777216
+	jz	$L001mmx
+	test	edx,2
+	jz	$L001mmx
+	movups	xmm0,XMMWORD PTR 8[esp]
+	shufps	xmm0,xmm0,177
+DB	102,15,58,68,192,1
+	mov	eax,DWORD PTR 4[esp]
+	movups	XMMWORD PTR [eax],xmm0
+	ret
+ALIGN	16
+$L001mmx:
+	push	ebp
+	push	ebx
+	push	esi
+	push	edi
+	mov	eax,DWORD PTR 24[esp]
+	mov	ebx,DWORD PTR 32[esp]
+	call	__mul_1x1_mmx
+	movq	mm7,mm0
+	mov	eax,DWORD PTR 28[esp]
+	mov	ebx,DWORD PTR 36[esp]
+	call	__mul_1x1_mmx
+	movq	mm6,mm0
+	mov	eax,DWORD PTR 24[esp]
+	mov	ebx,DWORD PTR 32[esp]
+	xor	eax,DWORD PTR 28[esp]
+	xor	ebx,DWORD PTR 36[esp]
+	call	__mul_1x1_mmx
+	pxor	mm0,mm7
+	mov	eax,DWORD PTR 20[esp]
+	pxor	mm0,mm6
+	movq	mm2,mm0
+	psllq	mm0,32
+	pop	edi
+	psrlq	mm2,32
+	pop	esi
+	pxor	mm0,mm6
+	pop	ebx
+	pxor	mm2,mm7
+	movq	QWORD PTR [eax],mm0
+	pop	ebp
+	movq	QWORD PTR 8[eax],mm2
+	emms
+	ret
+ALIGN	16
+$L000ialu:
+	push	ebp
+	push	ebx
+	push	esi
+	push	edi
+	sub	esp,20
+	mov	eax,DWORD PTR 44[esp]
+	mov	ebx,DWORD PTR 52[esp]
+	call	__mul_1x1_ialu
+	mov	DWORD PTR 8[esp],eax
+	mov	DWORD PTR 12[esp],edx
+	mov	eax,DWORD PTR 48[esp]
+	mov	ebx,DWORD PTR 56[esp]
+	call	__mul_1x1_ialu
+	mov	DWORD PTR [esp],eax
+	mov	DWORD PTR 4[esp],edx
+	mov	eax,DWORD PTR 44[esp]
+	mov	ebx,DWORD PTR 52[esp]
+	xor	eax,DWORD PTR 48[esp]
+	xor	ebx,DWORD PTR 56[esp]
+	call	__mul_1x1_ialu
+	mov	ebp,DWORD PTR 40[esp]
+	mov	ebx,DWORD PTR [esp]
+	mov	ecx,DWORD PTR 4[esp]
+	mov	edi,DWORD PTR 8[esp]
+	mov	esi,DWORD PTR 12[esp]
+	xor	eax,edx
+	xor	edx,ecx
+	xor	eax,ebx
+	mov	DWORD PTR [ebp],ebx
+	xor	edx,edi
+	mov	DWORD PTR 12[ebp],esi
+	xor	eax,esi
+	add	esp,20
+	xor	edx,esi
+	pop	edi
+	xor	eax,edx
+	pop	esi
+	mov	DWORD PTR 8[ebp],edx
+	pop	ebx
+	mov	DWORD PTR 4[ebp],eax
+	pop	ebp
+	ret
+_bn_GF2m_mul_2x2 ENDP
+DB	71,70,40,50,94,109,41,32,77,117,108,116,105,112,108,105
+DB	99,97,116,105,111,110,32,102,111,114,32,120,56,54,44,32
+DB	67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
+DB	112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
+DB	62,0
+.text$	ENDS
+.bss	SEGMENT 'BSS'
+COMM	_OPENSSL_ia32cap_P:DWORD:4
+.bss	ENDS
+END

+ 492 - 492
contrib/libs/openssl/asm/windows/crypto/bn/x86-mont.masm

@@ -1,492 +1,492 @@
-IF @Version LT 800 
-ECHO MASM version 8.00 or later is strongly recommended. 
-ENDIF 
-.686 
-.XMM 
-IF @Version LT 800 
-XMMWORD STRUCT 16 
-DQ	2 dup (?) 
-XMMWORD	ENDS 
-ENDIF 
- 
-.MODEL	FLAT 
-OPTION	DOTNAME 
-IF @Version LT 800 
-.text$	SEGMENT PAGE 'CODE' 
-ELSE 
-.text$	SEGMENT ALIGN(64) 'CODE' 
-ENDIF 
-;EXTERN	_OPENSSL_ia32cap_P:NEAR 
-ALIGN	16 
-_bn_mul_mont	PROC PUBLIC 
-$L_bn_mul_mont_begin:: 
-	push	ebp 
-	push	ebx 
-	push	esi 
-	push	edi 
-	xor	eax,eax 
-	mov	edi,DWORD PTR 40[esp] 
-	cmp	edi,4 
-	jl	$L000just_leave 
-	lea	esi,DWORD PTR 20[esp] 
-	lea	edx,DWORD PTR 24[esp] 
-	add	edi,2 
-	neg	edi 
-	lea	ebp,DWORD PTR [edi*4+esp-32] 
-	neg	edi 
-	mov	eax,ebp 
-	sub	eax,edx 
-	and	eax,2047 
-	sub	ebp,eax 
-	xor	edx,ebp 
-	and	edx,2048 
-	xor	edx,2048 
-	sub	ebp,edx 
-	and	ebp,-64 
-	mov	eax,esp 
-	sub	eax,ebp 
-	and	eax,-4096 
-	mov	edx,esp 
-	lea	esp,DWORD PTR [eax*1+ebp] 
-	mov	eax,DWORD PTR [esp] 
-	cmp	esp,ebp 
-	ja	$L001page_walk 
-	jmp	$L002page_walk_done 
-ALIGN	16 
-$L001page_walk: 
-	lea	esp,DWORD PTR [esp-4096] 
-	mov	eax,DWORD PTR [esp] 
-	cmp	esp,ebp 
-	ja	$L001page_walk 
-$L002page_walk_done: 
-	mov	eax,DWORD PTR [esi] 
-	mov	ebx,DWORD PTR 4[esi] 
-	mov	ecx,DWORD PTR 8[esi] 
-	mov	ebp,DWORD PTR 12[esi] 
-	mov	esi,DWORD PTR 16[esi] 
-	mov	esi,DWORD PTR [esi] 
-	mov	DWORD PTR 4[esp],eax 
-	mov	DWORD PTR 8[esp],ebx 
-	mov	DWORD PTR 12[esp],ecx 
-	mov	DWORD PTR 16[esp],ebp 
-	mov	DWORD PTR 20[esp],esi 
-	lea	ebx,DWORD PTR [edi-3] 
-	mov	DWORD PTR 24[esp],edx 
-	lea	eax,DWORD PTR _OPENSSL_ia32cap_P 
-	bt	DWORD PTR [eax],26 
-	jnc	$L003non_sse2 
-	mov	eax,-1 
-	movd	mm7,eax 
-	mov	esi,DWORD PTR 8[esp] 
-	mov	edi,DWORD PTR 12[esp] 
-	mov	ebp,DWORD PTR 16[esp] 
-	xor	edx,edx 
-	xor	ecx,ecx 
-	movd	mm4,DWORD PTR [edi] 
-	movd	mm5,DWORD PTR [esi] 
-	movd	mm3,DWORD PTR [ebp] 
-	pmuludq	mm5,mm4 
-	movq	mm2,mm5 
-	movq	mm0,mm5 
-	pand	mm0,mm7 
-	pmuludq	mm5,QWORD PTR 20[esp] 
-	pmuludq	mm3,mm5 
-	paddq	mm3,mm0 
-	movd	mm1,DWORD PTR 4[ebp] 
-	movd	mm0,DWORD PTR 4[esi] 
-	psrlq	mm2,32 
-	psrlq	mm3,32 
-	inc	ecx 
-ALIGN	16 
-$L0041st: 
-	pmuludq	mm0,mm4 
-	pmuludq	mm1,mm5 
-	paddq	mm2,mm0 
-	paddq	mm3,mm1 
-	movq	mm0,mm2 
-	pand	mm0,mm7 
-	movd	mm1,DWORD PTR 4[ecx*4+ebp] 
-	paddq	mm3,mm0 
-	movd	mm0,DWORD PTR 4[ecx*4+esi] 
-	psrlq	mm2,32 
-	movd	DWORD PTR 28[ecx*4+esp],mm3 
-	psrlq	mm3,32 
-	lea	ecx,DWORD PTR 1[ecx] 
-	cmp	ecx,ebx 
-	jl	$L0041st 
-	pmuludq	mm0,mm4 
-	pmuludq	mm1,mm5 
-	paddq	mm2,mm0 
-	paddq	mm3,mm1 
-	movq	mm0,mm2 
-	pand	mm0,mm7 
-	paddq	mm3,mm0 
-	movd	DWORD PTR 28[ecx*4+esp],mm3 
-	psrlq	mm2,32 
-	psrlq	mm3,32 
-	paddq	mm3,mm2 
-	movq	QWORD PTR 32[ebx*4+esp],mm3 
-	inc	edx 
-$L005outer: 
-	xor	ecx,ecx 
-	movd	mm4,DWORD PTR [edx*4+edi] 
-	movd	mm5,DWORD PTR [esi] 
-	movd	mm6,DWORD PTR 32[esp] 
-	movd	mm3,DWORD PTR [ebp] 
-	pmuludq	mm5,mm4 
-	paddq	mm5,mm6 
-	movq	mm0,mm5 
-	movq	mm2,mm5 
-	pand	mm0,mm7 
-	pmuludq	mm5,QWORD PTR 20[esp] 
-	pmuludq	mm3,mm5 
-	paddq	mm3,mm0 
-	movd	mm6,DWORD PTR 36[esp] 
-	movd	mm1,DWORD PTR 4[ebp] 
-	movd	mm0,DWORD PTR 4[esi] 
-	psrlq	mm2,32 
-	psrlq	mm3,32 
-	paddq	mm2,mm6 
-	inc	ecx 
-	dec	ebx 
-$L006inner: 
-	pmuludq	mm0,mm4 
-	pmuludq	mm1,mm5 
-	paddq	mm2,mm0 
-	paddq	mm3,mm1 
-	movq	mm0,mm2 
-	movd	mm6,DWORD PTR 36[ecx*4+esp] 
-	pand	mm0,mm7 
-	movd	mm1,DWORD PTR 4[ecx*4+ebp] 
-	paddq	mm3,mm0 
-	movd	mm0,DWORD PTR 4[ecx*4+esi] 
-	psrlq	mm2,32 
-	movd	DWORD PTR 28[ecx*4+esp],mm3 
-	psrlq	mm3,32 
-	paddq	mm2,mm6 
-	dec	ebx 
-	lea	ecx,DWORD PTR 1[ecx] 
-	jnz	$L006inner 
-	mov	ebx,ecx 
-	pmuludq	mm0,mm4 
-	pmuludq	mm1,mm5 
-	paddq	mm2,mm0 
-	paddq	mm3,mm1 
-	movq	mm0,mm2 
-	pand	mm0,mm7 
-	paddq	mm3,mm0 
-	movd	DWORD PTR 28[ecx*4+esp],mm3 
-	psrlq	mm2,32 
-	psrlq	mm3,32 
-	movd	mm6,DWORD PTR 36[ebx*4+esp] 
-	paddq	mm3,mm2 
-	paddq	mm3,mm6 
-	movq	QWORD PTR 32[ebx*4+esp],mm3 
-	lea	edx,DWORD PTR 1[edx] 
-	cmp	edx,ebx 
-	jle	$L005outer 
-	emms 
-	jmp	$L007common_tail 
-ALIGN	16 
-$L003non_sse2: 
-	mov	esi,DWORD PTR 8[esp] 
-	lea	ebp,DWORD PTR 1[ebx] 
-	mov	edi,DWORD PTR 12[esp] 
-	xor	ecx,ecx 
-	mov	edx,esi 
-	and	ebp,1 
-	sub	edx,edi 
-	lea	eax,DWORD PTR 4[ebx*4+edi] 
-	or	ebp,edx 
-	mov	edi,DWORD PTR [edi] 
-	jz	$L008bn_sqr_mont 
-	mov	DWORD PTR 28[esp],eax 
-	mov	eax,DWORD PTR [esi] 
-	xor	edx,edx 
-ALIGN	16 
-$L009mull: 
-	mov	ebp,edx 
-	mul	edi 
-	add	ebp,eax 
-	lea	ecx,DWORD PTR 1[ecx] 
-	adc	edx,0 
-	mov	eax,DWORD PTR [ecx*4+esi] 
-	cmp	ecx,ebx 
-	mov	DWORD PTR 28[ecx*4+esp],ebp 
-	jl	$L009mull 
-	mov	ebp,edx 
-	mul	edi 
-	mov	edi,DWORD PTR 20[esp] 
-	add	eax,ebp 
-	mov	esi,DWORD PTR 16[esp] 
-	adc	edx,0 
-	imul	edi,DWORD PTR 32[esp] 
-	mov	DWORD PTR 32[ebx*4+esp],eax 
-	xor	ecx,ecx 
-	mov	DWORD PTR 36[ebx*4+esp],edx 
-	mov	DWORD PTR 40[ebx*4+esp],ecx 
-	mov	eax,DWORD PTR [esi] 
-	mul	edi 
-	add	eax,DWORD PTR 32[esp] 
-	mov	eax,DWORD PTR 4[esi] 
-	adc	edx,0 
-	inc	ecx 
-	jmp	$L0102ndmadd 
-ALIGN	16 
-$L0111stmadd: 
-	mov	ebp,edx 
-	mul	edi 
-	add	ebp,DWORD PTR 32[ecx*4+esp] 
-	lea	ecx,DWORD PTR 1[ecx] 
-	adc	edx,0 
-	add	ebp,eax 
-	mov	eax,DWORD PTR [ecx*4+esi] 
-	adc	edx,0 
-	cmp	ecx,ebx 
-	mov	DWORD PTR 28[ecx*4+esp],ebp 
-	jl	$L0111stmadd 
-	mov	ebp,edx 
-	mul	edi 
-	add	eax,DWORD PTR 32[ebx*4+esp] 
-	mov	edi,DWORD PTR 20[esp] 
-	adc	edx,0 
-	mov	esi,DWORD PTR 16[esp] 
-	add	ebp,eax 
-	adc	edx,0 
-	imul	edi,DWORD PTR 32[esp] 
-	xor	ecx,ecx 
-	add	edx,DWORD PTR 36[ebx*4+esp] 
-	mov	DWORD PTR 32[ebx*4+esp],ebp 
-	adc	ecx,0 
-	mov	eax,DWORD PTR [esi] 
-	mov	DWORD PTR 36[ebx*4+esp],edx 
-	mov	DWORD PTR 40[ebx*4+esp],ecx 
-	mul	edi 
-	add	eax,DWORD PTR 32[esp] 
-	mov	eax,DWORD PTR 4[esi] 
-	adc	edx,0 
-	mov	ecx,1 
-ALIGN	16 
-$L0102ndmadd: 
-	mov	ebp,edx 
-	mul	edi 
-	add	ebp,DWORD PTR 32[ecx*4+esp] 
-	lea	ecx,DWORD PTR 1[ecx] 
-	adc	edx,0 
-	add	ebp,eax 
-	mov	eax,DWORD PTR [ecx*4+esi] 
-	adc	edx,0 
-	cmp	ecx,ebx 
-	mov	DWORD PTR 24[ecx*4+esp],ebp 
-	jl	$L0102ndmadd 
-	mov	ebp,edx 
-	mul	edi 
-	add	ebp,DWORD PTR 32[ebx*4+esp] 
-	adc	edx,0 
-	add	ebp,eax 
-	adc	edx,0 
-	mov	DWORD PTR 28[ebx*4+esp],ebp 
-	xor	eax,eax 
-	mov	ecx,DWORD PTR 12[esp] 
-	add	edx,DWORD PTR 36[ebx*4+esp] 
-	adc	eax,DWORD PTR 40[ebx*4+esp] 
-	lea	ecx,DWORD PTR 4[ecx] 
-	mov	DWORD PTR 32[ebx*4+esp],edx 
-	cmp	ecx,DWORD PTR 28[esp] 
-	mov	DWORD PTR 36[ebx*4+esp],eax 
-	je	$L007common_tail 
-	mov	edi,DWORD PTR [ecx] 
-	mov	esi,DWORD PTR 8[esp] 
-	mov	DWORD PTR 12[esp],ecx 
-	xor	ecx,ecx 
-	xor	edx,edx 
-	mov	eax,DWORD PTR [esi] 
-	jmp	$L0111stmadd 
-ALIGN	16 
-$L008bn_sqr_mont: 
-	mov	DWORD PTR [esp],ebx 
-	mov	DWORD PTR 12[esp],ecx 
-	mov	eax,edi 
-	mul	edi 
-	mov	DWORD PTR 32[esp],eax 
-	mov	ebx,edx 
-	shr	edx,1 
-	and	ebx,1 
-	inc	ecx 
-ALIGN	16 
-$L012sqr: 
-	mov	eax,DWORD PTR [ecx*4+esi] 
-	mov	ebp,edx 
-	mul	edi 
-	add	eax,ebp 
-	lea	ecx,DWORD PTR 1[ecx] 
-	adc	edx,0 
-	lea	ebp,DWORD PTR [eax*2+ebx] 
-	shr	eax,31 
-	cmp	ecx,DWORD PTR [esp] 
-	mov	ebx,eax 
-	mov	DWORD PTR 28[ecx*4+esp],ebp 
-	jl	$L012sqr 
-	mov	eax,DWORD PTR [ecx*4+esi] 
-	mov	ebp,edx 
-	mul	edi 
-	add	eax,ebp 
-	mov	edi,DWORD PTR 20[esp] 
-	adc	edx,0 
-	mov	esi,DWORD PTR 16[esp] 
-	lea	ebp,DWORD PTR [eax*2+ebx] 
-	imul	edi,DWORD PTR 32[esp] 
-	shr	eax,31 
-	mov	DWORD PTR 32[ecx*4+esp],ebp 
-	lea	ebp,DWORD PTR [edx*2+eax] 
-	mov	eax,DWORD PTR [esi] 
-	shr	edx,31 
-	mov	DWORD PTR 36[ecx*4+esp],ebp 
-	mov	DWORD PTR 40[ecx*4+esp],edx 
-	mul	edi 
-	add	eax,DWORD PTR 32[esp] 
-	mov	ebx,ecx 
-	adc	edx,0 
-	mov	eax,DWORD PTR 4[esi] 
-	mov	ecx,1 
-ALIGN	16 
-$L0133rdmadd: 
-	mov	ebp,edx 
-	mul	edi 
-	add	ebp,DWORD PTR 32[ecx*4+esp] 
-	adc	edx,0 
-	add	ebp,eax 
-	mov	eax,DWORD PTR 4[ecx*4+esi] 
-	adc	edx,0 
-	mov	DWORD PTR 28[ecx*4+esp],ebp 
-	mov	ebp,edx 
-	mul	edi 
-	add	ebp,DWORD PTR 36[ecx*4+esp] 
-	lea	ecx,DWORD PTR 2[ecx] 
-	adc	edx,0 
-	add	ebp,eax 
-	mov	eax,DWORD PTR [ecx*4+esi] 
-	adc	edx,0 
-	cmp	ecx,ebx 
-	mov	DWORD PTR 24[ecx*4+esp],ebp 
-	jl	$L0133rdmadd 
-	mov	ebp,edx 
-	mul	edi 
-	add	ebp,DWORD PTR 32[ebx*4+esp] 
-	adc	edx,0 
-	add	ebp,eax 
-	adc	edx,0 
-	mov	DWORD PTR 28[ebx*4+esp],ebp 
-	mov	ecx,DWORD PTR 12[esp] 
-	xor	eax,eax 
-	mov	esi,DWORD PTR 8[esp] 
-	add	edx,DWORD PTR 36[ebx*4+esp] 
-	adc	eax,DWORD PTR 40[ebx*4+esp] 
-	mov	DWORD PTR 32[ebx*4+esp],edx 
-	cmp	ecx,ebx 
-	mov	DWORD PTR 36[ebx*4+esp],eax 
-	je	$L007common_tail 
-	mov	edi,DWORD PTR 4[ecx*4+esi] 
-	lea	ecx,DWORD PTR 1[ecx] 
-	mov	eax,edi 
-	mov	DWORD PTR 12[esp],ecx 
-	mul	edi 
-	add	eax,DWORD PTR 32[ecx*4+esp] 
-	adc	edx,0 
-	mov	DWORD PTR 32[ecx*4+esp],eax 
-	xor	ebp,ebp 
-	cmp	ecx,ebx 
-	lea	ecx,DWORD PTR 1[ecx] 
-	je	$L014sqrlast 
-	mov	ebx,edx 
-	shr	edx,1 
-	and	ebx,1 
-ALIGN	16 
-$L015sqradd: 
-	mov	eax,DWORD PTR [ecx*4+esi] 
-	mov	ebp,edx 
-	mul	edi 
-	add	eax,ebp 
-	lea	ebp,DWORD PTR [eax*1+eax] 
-	adc	edx,0 
-	shr	eax,31 
-	add	ebp,DWORD PTR 32[ecx*4+esp] 
-	lea	ecx,DWORD PTR 1[ecx] 
-	adc	eax,0 
-	add	ebp,ebx 
-	adc	eax,0 
-	cmp	ecx,DWORD PTR [esp] 
-	mov	DWORD PTR 28[ecx*4+esp],ebp 
-	mov	ebx,eax 
-	jle	$L015sqradd 
-	mov	ebp,edx 
-	add	edx,edx 
-	shr	ebp,31 
-	add	edx,ebx 
-	adc	ebp,0 
-$L014sqrlast: 
-	mov	edi,DWORD PTR 20[esp] 
-	mov	esi,DWORD PTR 16[esp] 
-	imul	edi,DWORD PTR 32[esp] 
-	add	edx,DWORD PTR 32[ecx*4+esp] 
-	mov	eax,DWORD PTR [esi] 
-	adc	ebp,0 
-	mov	DWORD PTR 32[ecx*4+esp],edx 
-	mov	DWORD PTR 36[ecx*4+esp],ebp 
-	mul	edi 
-	add	eax,DWORD PTR 32[esp] 
-	lea	ebx,DWORD PTR [ecx-1] 
-	adc	edx,0 
-	mov	ecx,1 
-	mov	eax,DWORD PTR 4[esi] 
-	jmp	$L0133rdmadd 
-ALIGN	16 
-$L007common_tail: 
-	mov	ebp,DWORD PTR 16[esp] 
-	mov	edi,DWORD PTR 4[esp] 
-	lea	esi,DWORD PTR 32[esp] 
-	mov	eax,DWORD PTR [esi] 
-	mov	ecx,ebx 
-	xor	edx,edx 
-ALIGN	16 
-$L016sub: 
-	sbb	eax,DWORD PTR [edx*4+ebp] 
-	mov	DWORD PTR [edx*4+edi],eax 
-	dec	ecx 
-	mov	eax,DWORD PTR 4[edx*4+esi] 
-	lea	edx,DWORD PTR 1[edx] 
-	jge	$L016sub 
-	sbb	eax,0 
-	mov	edx,-1 
-	xor	edx,eax 
-	jmp	$L017copy 
-ALIGN	16 
-$L017copy: 
-	mov	esi,DWORD PTR 32[ebx*4+esp] 
-	mov	ebp,DWORD PTR [ebx*4+edi] 
-	mov	DWORD PTR 32[ebx*4+esp],ecx 
-	and	esi,eax 
-	and	ebp,edx 
-	or	ebp,esi 
-	mov	DWORD PTR [ebx*4+edi],ebp 
-	dec	ebx 
-	jge	$L017copy 
-	mov	esp,DWORD PTR 24[esp] 
-	mov	eax,1 
-$L000just_leave: 
-	pop	edi 
-	pop	esi 
-	pop	ebx 
-	pop	ebp 
-	ret 
-_bn_mul_mont ENDP 
-DB	77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105 
-DB	112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56 
-DB	54,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121 
-DB	32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46 
-DB	111,114,103,62,0 
-.text$	ENDS 
-.bss	SEGMENT 'BSS' 
-COMM	_OPENSSL_ia32cap_P:DWORD:4 
-.bss	ENDS 
-END 
+IF @Version LT 800
+ECHO MASM version 8.00 or later is strongly recommended.
+ENDIF
+.686
+.XMM
+IF @Version LT 800
+XMMWORD STRUCT 16
+DQ	2 dup (?)
+XMMWORD	ENDS
+ENDIF
+
+.MODEL	FLAT
+OPTION	DOTNAME
+IF @Version LT 800
+.text$	SEGMENT PAGE 'CODE'
+ELSE
+.text$	SEGMENT ALIGN(64) 'CODE'
+ENDIF
+;EXTERN	_OPENSSL_ia32cap_P:NEAR
+ALIGN	16
+_bn_mul_mont	PROC PUBLIC
+$L_bn_mul_mont_begin::
+	push	ebp
+	push	ebx
+	push	esi
+	push	edi
+	xor	eax,eax
+	mov	edi,DWORD PTR 40[esp]
+	cmp	edi,4
+	jl	$L000just_leave
+	lea	esi,DWORD PTR 20[esp]
+	lea	edx,DWORD PTR 24[esp]
+	add	edi,2
+	neg	edi
+	lea	ebp,DWORD PTR [edi*4+esp-32]
+	neg	edi
+	mov	eax,ebp
+	sub	eax,edx
+	and	eax,2047
+	sub	ebp,eax
+	xor	edx,ebp
+	and	edx,2048
+	xor	edx,2048
+	sub	ebp,edx
+	and	ebp,-64
+	mov	eax,esp
+	sub	eax,ebp
+	and	eax,-4096
+	mov	edx,esp
+	lea	esp,DWORD PTR [eax*1+ebp]
+	mov	eax,DWORD PTR [esp]
+	cmp	esp,ebp
+	ja	$L001page_walk
+	jmp	$L002page_walk_done
+ALIGN	16
+$L001page_walk:
+	lea	esp,DWORD PTR [esp-4096]
+	mov	eax,DWORD PTR [esp]
+	cmp	esp,ebp
+	ja	$L001page_walk
+$L002page_walk_done:
+	mov	eax,DWORD PTR [esi]
+	mov	ebx,DWORD PTR 4[esi]
+	mov	ecx,DWORD PTR 8[esi]
+	mov	ebp,DWORD PTR 12[esi]
+	mov	esi,DWORD PTR 16[esi]
+	mov	esi,DWORD PTR [esi]
+	mov	DWORD PTR 4[esp],eax
+	mov	DWORD PTR 8[esp],ebx
+	mov	DWORD PTR 12[esp],ecx
+	mov	DWORD PTR 16[esp],ebp
+	mov	DWORD PTR 20[esp],esi
+	lea	ebx,DWORD PTR [edi-3]
+	mov	DWORD PTR 24[esp],edx
+	lea	eax,DWORD PTR _OPENSSL_ia32cap_P
+	bt	DWORD PTR [eax],26
+	jnc	$L003non_sse2
+	mov	eax,-1
+	movd	mm7,eax
+	mov	esi,DWORD PTR 8[esp]
+	mov	edi,DWORD PTR 12[esp]
+	mov	ebp,DWORD PTR 16[esp]
+	xor	edx,edx
+	xor	ecx,ecx
+	movd	mm4,DWORD PTR [edi]
+	movd	mm5,DWORD PTR [esi]
+	movd	mm3,DWORD PTR [ebp]
+	pmuludq	mm5,mm4
+	movq	mm2,mm5
+	movq	mm0,mm5
+	pand	mm0,mm7
+	pmuludq	mm5,QWORD PTR 20[esp]
+	pmuludq	mm3,mm5
+	paddq	mm3,mm0
+	movd	mm1,DWORD PTR 4[ebp]
+	movd	mm0,DWORD PTR 4[esi]
+	psrlq	mm2,32
+	psrlq	mm3,32
+	inc	ecx
+ALIGN	16
+$L0041st:
+	pmuludq	mm0,mm4
+	pmuludq	mm1,mm5
+	paddq	mm2,mm0
+	paddq	mm3,mm1
+	movq	mm0,mm2
+	pand	mm0,mm7
+	movd	mm1,DWORD PTR 4[ecx*4+ebp]
+	paddq	mm3,mm0
+	movd	mm0,DWORD PTR 4[ecx*4+esi]
+	psrlq	mm2,32
+	movd	DWORD PTR 28[ecx*4+esp],mm3
+	psrlq	mm3,32
+	lea	ecx,DWORD PTR 1[ecx]
+	cmp	ecx,ebx
+	jl	$L0041st
+	pmuludq	mm0,mm4
+	pmuludq	mm1,mm5
+	paddq	mm2,mm0
+	paddq	mm3,mm1
+	movq	mm0,mm2
+	pand	mm0,mm7
+	paddq	mm3,mm0
+	movd	DWORD PTR 28[ecx*4+esp],mm3
+	psrlq	mm2,32
+	psrlq	mm3,32
+	paddq	mm3,mm2
+	movq	QWORD PTR 32[ebx*4+esp],mm3
+	inc	edx
+$L005outer:
+	xor	ecx,ecx
+	movd	mm4,DWORD PTR [edx*4+edi]
+	movd	mm5,DWORD PTR [esi]
+	movd	mm6,DWORD PTR 32[esp]
+	movd	mm3,DWORD PTR [ebp]
+	pmuludq	mm5,mm4
+	paddq	mm5,mm6
+	movq	mm0,mm5
+	movq	mm2,mm5
+	pand	mm0,mm7
+	pmuludq	mm5,QWORD PTR 20[esp]
+	pmuludq	mm3,mm5
+	paddq	mm3,mm0
+	movd	mm6,DWORD PTR 36[esp]
+	movd	mm1,DWORD PTR 4[ebp]
+	movd	mm0,DWORD PTR 4[esi]
+	psrlq	mm2,32
+	psrlq	mm3,32
+	paddq	mm2,mm6
+	inc	ecx
+	dec	ebx
+$L006inner:
+	pmuludq	mm0,mm4
+	pmuludq	mm1,mm5
+	paddq	mm2,mm0
+	paddq	mm3,mm1
+	movq	mm0,mm2
+	movd	mm6,DWORD PTR 36[ecx*4+esp]
+	pand	mm0,mm7
+	movd	mm1,DWORD PTR 4[ecx*4+ebp]
+	paddq	mm3,mm0
+	movd	mm0,DWORD PTR 4[ecx*4+esi]
+	psrlq	mm2,32
+	movd	DWORD PTR 28[ecx*4+esp],mm3
+	psrlq	mm3,32
+	paddq	mm2,mm6
+	dec	ebx
+	lea	ecx,DWORD PTR 1[ecx]
+	jnz	$L006inner
+	mov	ebx,ecx
+	pmuludq	mm0,mm4
+	pmuludq	mm1,mm5
+	paddq	mm2,mm0
+	paddq	mm3,mm1
+	movq	mm0,mm2
+	pand	mm0,mm7
+	paddq	mm3,mm0
+	movd	DWORD PTR 28[ecx*4+esp],mm3
+	psrlq	mm2,32
+	psrlq	mm3,32
+	movd	mm6,DWORD PTR 36[ebx*4+esp]
+	paddq	mm3,mm2
+	paddq	mm3,mm6
+	movq	QWORD PTR 32[ebx*4+esp],mm3
+	lea	edx,DWORD PTR 1[edx]
+	cmp	edx,ebx
+	jle	$L005outer
+	emms
+	jmp	$L007common_tail
+ALIGN	16
+$L003non_sse2:
+	mov	esi,DWORD PTR 8[esp]
+	lea	ebp,DWORD PTR 1[ebx]
+	mov	edi,DWORD PTR 12[esp]
+	xor	ecx,ecx
+	mov	edx,esi
+	and	ebp,1
+	sub	edx,edi
+	lea	eax,DWORD PTR 4[ebx*4+edi]
+	or	ebp,edx
+	mov	edi,DWORD PTR [edi]
+	jz	$L008bn_sqr_mont
+	mov	DWORD PTR 28[esp],eax
+	mov	eax,DWORD PTR [esi]
+	xor	edx,edx
+ALIGN	16
+$L009mull:
+	mov	ebp,edx
+	mul	edi
+	add	ebp,eax
+	lea	ecx,DWORD PTR 1[ecx]
+	adc	edx,0
+	mov	eax,DWORD PTR [ecx*4+esi]
+	cmp	ecx,ebx
+	mov	DWORD PTR 28[ecx*4+esp],ebp
+	jl	$L009mull
+	mov	ebp,edx
+	mul	edi
+	mov	edi,DWORD PTR 20[esp]
+	add	eax,ebp
+	mov	esi,DWORD PTR 16[esp]
+	adc	edx,0
+	imul	edi,DWORD PTR 32[esp]
+	mov	DWORD PTR 32[ebx*4+esp],eax
+	xor	ecx,ecx
+	mov	DWORD PTR 36[ebx*4+esp],edx
+	mov	DWORD PTR 40[ebx*4+esp],ecx
+	mov	eax,DWORD PTR [esi]
+	mul	edi
+	add	eax,DWORD PTR 32[esp]
+	mov	eax,DWORD PTR 4[esi]
+	adc	edx,0
+	inc	ecx
+	jmp	$L0102ndmadd
+ALIGN	16
+$L0111stmadd:
+	mov	ebp,edx
+	mul	edi
+	add	ebp,DWORD PTR 32[ecx*4+esp]
+	lea	ecx,DWORD PTR 1[ecx]
+	adc	edx,0
+	add	ebp,eax
+	mov	eax,DWORD PTR [ecx*4+esi]
+	adc	edx,0
+	cmp	ecx,ebx
+	mov	DWORD PTR 28[ecx*4+esp],ebp
+	jl	$L0111stmadd
+	mov	ebp,edx
+	mul	edi
+	add	eax,DWORD PTR 32[ebx*4+esp]
+	mov	edi,DWORD PTR 20[esp]
+	adc	edx,0
+	mov	esi,DWORD PTR 16[esp]
+	add	ebp,eax
+	adc	edx,0
+	imul	edi,DWORD PTR 32[esp]
+	xor	ecx,ecx
+	add	edx,DWORD PTR 36[ebx*4+esp]
+	mov	DWORD PTR 32[ebx*4+esp],ebp
+	adc	ecx,0
+	mov	eax,DWORD PTR [esi]
+	mov	DWORD PTR 36[ebx*4+esp],edx
+	mov	DWORD PTR 40[ebx*4+esp],ecx
+	mul	edi
+	add	eax,DWORD PTR 32[esp]
+	mov	eax,DWORD PTR 4[esi]
+	adc	edx,0
+	mov	ecx,1
+ALIGN	16
+$L0102ndmadd:
+	mov	ebp,edx
+	mul	edi
+	add	ebp,DWORD PTR 32[ecx*4+esp]
+	lea	ecx,DWORD PTR 1[ecx]
+	adc	edx,0
+	add	ebp,eax
+	mov	eax,DWORD PTR [ecx*4+esi]
+	adc	edx,0
+	cmp	ecx,ebx
+	mov	DWORD PTR 24[ecx*4+esp],ebp
+	jl	$L0102ndmadd
+	mov	ebp,edx
+	mul	edi
+	add	ebp,DWORD PTR 32[ebx*4+esp]
+	adc	edx,0
+	add	ebp,eax
+	adc	edx,0
+	mov	DWORD PTR 28[ebx*4+esp],ebp
+	xor	eax,eax
+	mov	ecx,DWORD PTR 12[esp]
+	add	edx,DWORD PTR 36[ebx*4+esp]
+	adc	eax,DWORD PTR 40[ebx*4+esp]
+	lea	ecx,DWORD PTR 4[ecx]
+	mov	DWORD PTR 32[ebx*4+esp],edx
+	cmp	ecx,DWORD PTR 28[esp]
+	mov	DWORD PTR 36[ebx*4+esp],eax
+	je	$L007common_tail
+	mov	edi,DWORD PTR [ecx]
+	mov	esi,DWORD PTR 8[esp]
+	mov	DWORD PTR 12[esp],ecx
+	xor	ecx,ecx
+	xor	edx,edx
+	mov	eax,DWORD PTR [esi]
+	jmp	$L0111stmadd
+ALIGN	16
+$L008bn_sqr_mont:
+	mov	DWORD PTR [esp],ebx
+	mov	DWORD PTR 12[esp],ecx
+	mov	eax,edi
+	mul	edi
+	mov	DWORD PTR 32[esp],eax
+	mov	ebx,edx
+	shr	edx,1
+	and	ebx,1
+	inc	ecx
+ALIGN	16
+$L012sqr:
+	mov	eax,DWORD PTR [ecx*4+esi]
+	mov	ebp,edx
+	mul	edi
+	add	eax,ebp
+	lea	ecx,DWORD PTR 1[ecx]
+	adc	edx,0
+	lea	ebp,DWORD PTR [eax*2+ebx]
+	shr	eax,31
+	cmp	ecx,DWORD PTR [esp]
+	mov	ebx,eax
+	mov	DWORD PTR 28[ecx*4+esp],ebp
+	jl	$L012sqr
+	mov	eax,DWORD PTR [ecx*4+esi]
+	mov	ebp,edx
+	mul	edi
+	add	eax,ebp
+	mov	edi,DWORD PTR 20[esp]
+	adc	edx,0
+	mov	esi,DWORD PTR 16[esp]
+	lea	ebp,DWORD PTR [eax*2+ebx]
+	imul	edi,DWORD PTR 32[esp]
+	shr	eax,31
+	mov	DWORD PTR 32[ecx*4+esp],ebp
+	lea	ebp,DWORD PTR [edx*2+eax]
+	mov	eax,DWORD PTR [esi]
+	shr	edx,31
+	mov	DWORD PTR 36[ecx*4+esp],ebp
+	mov	DWORD PTR 40[ecx*4+esp],edx
+	mul	edi
+	add	eax,DWORD PTR 32[esp]
+	mov	ebx,ecx
+	adc	edx,0
+	mov	eax,DWORD PTR 4[esi]
+	mov	ecx,1
+ALIGN	16
+$L0133rdmadd:
+	mov	ebp,edx
+	mul	edi
+	add	ebp,DWORD PTR 32[ecx*4+esp]
+	adc	edx,0
+	add	ebp,eax
+	mov	eax,DWORD PTR 4[ecx*4+esi]
+	adc	edx,0
+	mov	DWORD PTR 28[ecx*4+esp],ebp
+	mov	ebp,edx
+	mul	edi
+	add	ebp,DWORD PTR 36[ecx*4+esp]
+	lea	ecx,DWORD PTR 2[ecx]
+	adc	edx,0
+	add	ebp,eax
+	mov	eax,DWORD PTR [ecx*4+esi]
+	adc	edx,0
+	cmp	ecx,ebx
+	mov	DWORD PTR 24[ecx*4+esp],ebp
+	jl	$L0133rdmadd
+	mov	ebp,edx
+	mul	edi
+	add	ebp,DWORD PTR 32[ebx*4+esp]
+	adc	edx,0
+	add	ebp,eax
+	adc	edx,0
+	mov	DWORD PTR 28[ebx*4+esp],ebp
+	mov	ecx,DWORD PTR 12[esp]
+	xor	eax,eax
+	mov	esi,DWORD PTR 8[esp]
+	add	edx,DWORD PTR 36[ebx*4+esp]
+	adc	eax,DWORD PTR 40[ebx*4+esp]
+	mov	DWORD PTR 32[ebx*4+esp],edx
+	cmp	ecx,ebx
+	mov	DWORD PTR 36[ebx*4+esp],eax
+	je	$L007common_tail
+	mov	edi,DWORD PTR 4[ecx*4+esi]
+	lea	ecx,DWORD PTR 1[ecx]
+	mov	eax,edi
+	mov	DWORD PTR 12[esp],ecx
+	mul	edi
+	add	eax,DWORD PTR 32[ecx*4+esp]
+	adc	edx,0
+	mov	DWORD PTR 32[ecx*4+esp],eax
+	xor	ebp,ebp
+	cmp	ecx,ebx
+	lea	ecx,DWORD PTR 1[ecx]
+	je	$L014sqrlast
+	mov	ebx,edx
+	shr	edx,1
+	and	ebx,1
+ALIGN	16
+$L015sqradd:
+	mov	eax,DWORD PTR [ecx*4+esi]
+	mov	ebp,edx
+	mul	edi
+	add	eax,ebp
+	lea	ebp,DWORD PTR [eax*1+eax]
+	adc	edx,0
+	shr	eax,31
+	add	ebp,DWORD PTR 32[ecx*4+esp]
+	lea	ecx,DWORD PTR 1[ecx]
+	adc	eax,0
+	add	ebp,ebx
+	adc	eax,0
+	cmp	ecx,DWORD PTR [esp]
+	mov	DWORD PTR 28[ecx*4+esp],ebp
+	mov	ebx,eax
+	jle	$L015sqradd
+	mov	ebp,edx
+	add	edx,edx
+	shr	ebp,31
+	add	edx,ebx
+	adc	ebp,0
+$L014sqrlast:
+	mov	edi,DWORD PTR 20[esp]
+	mov	esi,DWORD PTR 16[esp]
+	imul	edi,DWORD PTR 32[esp]
+	add	edx,DWORD PTR 32[ecx*4+esp]
+	mov	eax,DWORD PTR [esi]
+	adc	ebp,0
+	mov	DWORD PTR 32[ecx*4+esp],edx
+	mov	DWORD PTR 36[ecx*4+esp],ebp
+	mul	edi
+	add	eax,DWORD PTR 32[esp]
+	lea	ebx,DWORD PTR [ecx-1]
+	adc	edx,0
+	mov	ecx,1
+	mov	eax,DWORD PTR 4[esi]
+	jmp	$L0133rdmadd
+ALIGN	16
+$L007common_tail:
+	mov	ebp,DWORD PTR 16[esp]
+	mov	edi,DWORD PTR 4[esp]
+	lea	esi,DWORD PTR 32[esp]
+	mov	eax,DWORD PTR [esi]
+	mov	ecx,ebx
+	xor	edx,edx
+ALIGN	16
+$L016sub:
+	sbb	eax,DWORD PTR [edx*4+ebp]
+	mov	DWORD PTR [edx*4+edi],eax
+	dec	ecx
+	mov	eax,DWORD PTR 4[edx*4+esi]
+	lea	edx,DWORD PTR 1[edx]
+	jge	$L016sub
+	sbb	eax,0
+	mov	edx,-1
+	xor	edx,eax
+	jmp	$L017copy
+ALIGN	16
+$L017copy:
+	mov	esi,DWORD PTR 32[ebx*4+esp]
+	mov	ebp,DWORD PTR [ebx*4+edi]
+	mov	DWORD PTR 32[ebx*4+esp],ecx
+	and	esi,eax
+	and	ebp,edx
+	or	ebp,esi
+	mov	DWORD PTR [ebx*4+edi],ebp
+	dec	ebx
+	jge	$L017copy
+	mov	esp,DWORD PTR 24[esp]
+	mov	eax,1
+$L000just_leave:
+	pop	edi
+	pop	esi
+	pop	ebx
+	pop	ebp
+	ret
+_bn_mul_mont ENDP
+DB	77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105
+DB	112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56
+DB	54,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121
+DB	32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46
+DB	111,114,103,62,0
+.text$	ENDS
+.bss	SEGMENT 'BSS'
+COMM	_OPENSSL_ia32cap_P:DWORD:4
+.bss	ENDS
+END

+ 2369 - 2369
contrib/libs/openssl/asm/windows/crypto/camellia/cmll-x86.masm

@@ -1,2369 +1,2369 @@
-IF @Version LT 800 
-ECHO MASM version 8.00 or later is strongly recommended. 
-ENDIF 
-.686 
-.MODEL	FLAT 
-OPTION	DOTNAME 
-IF @Version LT 800 
-.text$	SEGMENT PAGE 'CODE' 
-ELSE 
-.text$	SEGMENT ALIGN(64) 'CODE' 
-ENDIF 
-ALIGN	16 
-_Camellia_EncryptBlock_Rounds	PROC PUBLIC 
-$L_Camellia_EncryptBlock_Rounds_begin:: 
-	push	ebp 
-	push	ebx 
-	push	esi 
-	push	edi 
-	mov	eax,DWORD PTR 20[esp] 
-	mov	esi,DWORD PTR 24[esp] 
-	mov	edi,DWORD PTR 28[esp] 
-	mov	ebx,esp 
-	sub	esp,28 
-	and	esp,-64 
-	lea	ecx,DWORD PTR [edi-127] 
-	sub	ecx,esp 
-	neg	ecx 
-	and	ecx,960 
-	sub	esp,ecx 
-	add	esp,4 
-	shl	eax,6 
-	lea	eax,DWORD PTR [eax*1+edi] 
-	mov	DWORD PTR 20[esp],ebx 
-	mov	DWORD PTR 16[esp],eax 
-	call	$L000pic_point 
-$L000pic_point: 
-	pop	ebp 
-	lea	ebp,DWORD PTR ($LCamellia_SBOX-$L000pic_point)[ebp] 
-	mov	eax,DWORD PTR [esi] 
-	mov	ebx,DWORD PTR 4[esi] 
-	mov	ecx,DWORD PTR 8[esi] 
-	bswap	eax 
-	mov	edx,DWORD PTR 12[esi] 
-	bswap	ebx 
-	bswap	ecx 
-	bswap	edx 
-	call	__x86_Camellia_encrypt 
-	mov	esp,DWORD PTR 20[esp] 
-	bswap	eax 
-	mov	esi,DWORD PTR 32[esp] 
-	bswap	ebx 
-	bswap	ecx 
-	bswap	edx 
-	mov	DWORD PTR [esi],eax 
-	mov	DWORD PTR 4[esi],ebx 
-	mov	DWORD PTR 8[esi],ecx 
-	mov	DWORD PTR 12[esi],edx 
-	pop	edi 
-	pop	esi 
-	pop	ebx 
-	pop	ebp 
-	ret 
-_Camellia_EncryptBlock_Rounds ENDP 
-ALIGN	16 
-_Camellia_EncryptBlock	PROC PUBLIC 
-$L_Camellia_EncryptBlock_begin:: 
-	mov	eax,128 
-	sub	eax,DWORD PTR 4[esp] 
-	mov	eax,3 
-	adc	eax,0 
-	mov	DWORD PTR 4[esp],eax 
-	jmp	$L_Camellia_EncryptBlock_Rounds_begin 
-_Camellia_EncryptBlock ENDP 
-ALIGN	16 
-_Camellia_encrypt	PROC PUBLIC 
-$L_Camellia_encrypt_begin:: 
-	push	ebp 
-	push	ebx 
-	push	esi 
-	push	edi 
-	mov	esi,DWORD PTR 20[esp] 
-	mov	edi,DWORD PTR 28[esp] 
-	mov	ebx,esp 
-	sub	esp,28 
-	and	esp,-64 
-	mov	eax,DWORD PTR 272[edi] 
-	lea	ecx,DWORD PTR [edi-127] 
-	sub	ecx,esp 
-	neg	ecx 
-	and	ecx,960 
-	sub	esp,ecx 
-	add	esp,4 
-	shl	eax,6 
-	lea	eax,DWORD PTR [eax*1+edi] 
-	mov	DWORD PTR 20[esp],ebx 
-	mov	DWORD PTR 16[esp],eax 
-	call	$L001pic_point 
-$L001pic_point: 
-	pop	ebp 
-	lea	ebp,DWORD PTR ($LCamellia_SBOX-$L001pic_point)[ebp] 
-	mov	eax,DWORD PTR [esi] 
-	mov	ebx,DWORD PTR 4[esi] 
-	mov	ecx,DWORD PTR 8[esi] 
-	bswap	eax 
-	mov	edx,DWORD PTR 12[esi] 
-	bswap	ebx 
-	bswap	ecx 
-	bswap	edx 
-	call	__x86_Camellia_encrypt 
-	mov	esp,DWORD PTR 20[esp] 
-	bswap	eax 
-	mov	esi,DWORD PTR 24[esp] 
-	bswap	ebx 
-	bswap	ecx 
-	bswap	edx 
-	mov	DWORD PTR [esi],eax 
-	mov	DWORD PTR 4[esi],ebx 
-	mov	DWORD PTR 8[esi],ecx 
-	mov	DWORD PTR 12[esi],edx 
-	pop	edi 
-	pop	esi 
-	pop	ebx 
-	pop	ebp 
-	ret 
-_Camellia_encrypt ENDP 
-ALIGN	16 
-__x86_Camellia_encrypt	PROC PRIVATE 
-	xor	eax,DWORD PTR [edi] 
-	xor	ebx,DWORD PTR 4[edi] 
-	xor	ecx,DWORD PTR 8[edi] 
-	xor	edx,DWORD PTR 12[edi] 
-	mov	esi,DWORD PTR 16[edi] 
-	mov	DWORD PTR 4[esp],eax 
-	mov	DWORD PTR 8[esp],ebx 
-	mov	DWORD PTR 12[esp],ecx 
-	mov	DWORD PTR 16[esp],edx 
-ALIGN	16 
-$L002loop: 
-	xor	eax,esi 
-	xor	ebx,DWORD PTR 20[edi] 
-	movzx	esi,ah 
-	mov	edx,DWORD PTR 2052[esi*8+ebp] 
-	movzx	esi,al 
-	xor	edx,DWORD PTR 4[esi*8+ebp] 
-	shr	eax,16 
-	movzx	esi,bl 
-	mov	ecx,DWORD PTR [esi*8+ebp] 
-	movzx	esi,ah 
-	xor	edx,DWORD PTR [esi*8+ebp] 
-	movzx	esi,bh 
-	xor	ecx,DWORD PTR 4[esi*8+ebp] 
-	shr	ebx,16 
-	movzx	eax,al 
-	xor	edx,DWORD PTR 2048[eax*8+ebp] 
-	movzx	esi,bh 
-	mov	eax,DWORD PTR 16[esp] 
-	xor	ecx,edx 
-	ror	edx,8 
-	xor	ecx,DWORD PTR 2048[esi*8+ebp] 
-	movzx	esi,bl 
-	mov	ebx,DWORD PTR 12[esp] 
-	xor	edx,eax 
-	xor	ecx,DWORD PTR 2052[esi*8+ebp] 
-	mov	esi,DWORD PTR 24[edi] 
-	xor	edx,ecx 
-	mov	DWORD PTR 16[esp],edx 
-	xor	ecx,ebx 
-	mov	DWORD PTR 12[esp],ecx 
-	xor	ecx,esi 
-	xor	edx,DWORD PTR 28[edi] 
-	movzx	esi,ch 
-	mov	ebx,DWORD PTR 2052[esi*8+ebp] 
-	movzx	esi,cl 
-	xor	ebx,DWORD PTR 4[esi*8+ebp] 
-	shr	ecx,16 
-	movzx	esi,dl 
-	mov	eax,DWORD PTR [esi*8+ebp] 
-	movzx	esi,ch 
-	xor	ebx,DWORD PTR [esi*8+ebp] 
-	movzx	esi,dh 
-	xor	eax,DWORD PTR 4[esi*8+ebp] 
-	shr	edx,16 
-	movzx	ecx,cl 
-	xor	ebx,DWORD PTR 2048[ecx*8+ebp] 
-	movzx	esi,dh 
-	mov	ecx,DWORD PTR 8[esp] 
-	xor	eax,ebx 
-	ror	ebx,8 
-	xor	eax,DWORD PTR 2048[esi*8+ebp] 
-	movzx	esi,dl 
-	mov	edx,DWORD PTR 4[esp] 
-	xor	ebx,ecx 
-	xor	eax,DWORD PTR 2052[esi*8+ebp] 
-	mov	esi,DWORD PTR 32[edi] 
-	xor	ebx,eax 
-	mov	DWORD PTR 8[esp],ebx 
-	xor	eax,edx 
-	mov	DWORD PTR 4[esp],eax 
-	xor	eax,esi 
-	xor	ebx,DWORD PTR 36[edi] 
-	movzx	esi,ah 
-	mov	edx,DWORD PTR 2052[esi*8+ebp] 
-	movzx	esi,al 
-	xor	edx,DWORD PTR 4[esi*8+ebp] 
-	shr	eax,16 
-	movzx	esi,bl 
-	mov	ecx,DWORD PTR [esi*8+ebp] 
-	movzx	esi,ah 
-	xor	edx,DWORD PTR [esi*8+ebp] 
-	movzx	esi,bh 
-	xor	ecx,DWORD PTR 4[esi*8+ebp] 
-	shr	ebx,16 
-	movzx	eax,al 
-	xor	edx,DWORD PTR 2048[eax*8+ebp] 
-	movzx	esi,bh 
-	mov	eax,DWORD PTR 16[esp] 
-	xor	ecx,edx 
-	ror	edx,8 
-	xor	ecx,DWORD PTR 2048[esi*8+ebp] 
-	movzx	esi,bl 
-	mov	ebx,DWORD PTR 12[esp] 
-	xor	edx,eax 
-	xor	ecx,DWORD PTR 2052[esi*8+ebp] 
-	mov	esi,DWORD PTR 40[edi] 
-	xor	edx,ecx 
-	mov	DWORD PTR 16[esp],edx 
-	xor	ecx,ebx 
-	mov	DWORD PTR 12[esp],ecx 
-	xor	ecx,esi 
-	xor	edx,DWORD PTR 44[edi] 
-	movzx	esi,ch 
-	mov	ebx,DWORD PTR 2052[esi*8+ebp] 
-	movzx	esi,cl 
-	xor	ebx,DWORD PTR 4[esi*8+ebp] 
-	shr	ecx,16 
-	movzx	esi,dl 
-	mov	eax,DWORD PTR [esi*8+ebp] 
-	movzx	esi,ch 
-	xor	ebx,DWORD PTR [esi*8+ebp] 
-	movzx	esi,dh 
-	xor	eax,DWORD PTR 4[esi*8+ebp] 
-	shr	edx,16 
-	movzx	ecx,cl 
-	xor	ebx,DWORD PTR 2048[ecx*8+ebp] 
-	movzx	esi,dh 
-	mov	ecx,DWORD PTR 8[esp] 
-	xor	eax,ebx 
-	ror	ebx,8 
-	xor	eax,DWORD PTR 2048[esi*8+ebp] 
-	movzx	esi,dl 
-	mov	edx,DWORD PTR 4[esp] 
-	xor	ebx,ecx 
-	xor	eax,DWORD PTR 2052[esi*8+ebp] 
-	mov	esi,DWORD PTR 48[edi] 
-	xor	ebx,eax 
-	mov	DWORD PTR 8[esp],ebx 
-	xor	eax,edx 
-	mov	DWORD PTR 4[esp],eax 
-	xor	eax,esi 
-	xor	ebx,DWORD PTR 52[edi] 
-	movzx	esi,ah 
-	mov	edx,DWORD PTR 2052[esi*8+ebp] 
-	movzx	esi,al 
-	xor	edx,DWORD PTR 4[esi*8+ebp] 
-	shr	eax,16 
-	movzx	esi,bl 
-	mov	ecx,DWORD PTR [esi*8+ebp] 
-	movzx	esi,ah 
-	xor	edx,DWORD PTR [esi*8+ebp] 
-	movzx	esi,bh 
-	xor	ecx,DWORD PTR 4[esi*8+ebp] 
-	shr	ebx,16 
-	movzx	eax,al 
-	xor	edx,DWORD PTR 2048[eax*8+ebp] 
-	movzx	esi,bh 
-	mov	eax,DWORD PTR 16[esp] 
-	xor	ecx,edx 
-	ror	edx,8 
-	xor	ecx,DWORD PTR 2048[esi*8+ebp] 
-	movzx	esi,bl 
-	mov	ebx,DWORD PTR 12[esp] 
-	xor	edx,eax 
-	xor	ecx,DWORD PTR 2052[esi*8+ebp] 
-	mov	esi,DWORD PTR 56[edi] 
-	xor	edx,ecx 
-	mov	DWORD PTR 16[esp],edx 
-	xor	ecx,ebx 
-	mov	DWORD PTR 12[esp],ecx 
-	xor	ecx,esi 
-	xor	edx,DWORD PTR 60[edi] 
-	movzx	esi,ch 
-	mov	ebx,DWORD PTR 2052[esi*8+ebp] 
-	movzx	esi,cl 
-	xor	ebx,DWORD PTR 4[esi*8+ebp] 
-	shr	ecx,16 
-	movzx	esi,dl 
-	mov	eax,DWORD PTR [esi*8+ebp] 
-	movzx	esi,ch 
-	xor	ebx,DWORD PTR [esi*8+ebp] 
-	movzx	esi,dh 
-	xor	eax,DWORD PTR 4[esi*8+ebp] 
-	shr	edx,16 
-	movzx	ecx,cl 
-	xor	ebx,DWORD PTR 2048[ecx*8+ebp] 
-	movzx	esi,dh 
-	mov	ecx,DWORD PTR 8[esp] 
-	xor	eax,ebx 
-	ror	ebx,8 
-	xor	eax,DWORD PTR 2048[esi*8+ebp] 
-	movzx	esi,dl 
-	mov	edx,DWORD PTR 4[esp] 
-	xor	ebx,ecx 
-	xor	eax,DWORD PTR 2052[esi*8+ebp] 
-	mov	esi,DWORD PTR 64[edi] 
-	xor	ebx,eax 
-	mov	DWORD PTR 8[esp],ebx 
-	xor	eax,edx 
-	mov	DWORD PTR 4[esp],eax 
-	add	edi,64 
-	cmp	edi,DWORD PTR 20[esp] 
-	je	$L003done 
-	and	esi,eax 
-	mov	edx,DWORD PTR 16[esp] 
-	rol	esi,1 
-	mov	ecx,edx 
-	xor	ebx,esi 
-	or	ecx,DWORD PTR 12[edi] 
-	mov	DWORD PTR 8[esp],ebx 
-	xor	ecx,DWORD PTR 12[esp] 
-	mov	esi,DWORD PTR 4[edi] 
-	mov	DWORD PTR 12[esp],ecx 
-	or	esi,ebx 
-	and	ecx,DWORD PTR 8[edi] 
-	xor	eax,esi 
-	rol	ecx,1 
-	mov	DWORD PTR 4[esp],eax 
-	xor	edx,ecx 
-	mov	esi,DWORD PTR 16[edi] 
-	mov	DWORD PTR 16[esp],edx 
-	jmp	$L002loop 
-ALIGN	8 
-$L003done: 
-	mov	ecx,eax 
-	mov	edx,ebx 
-	mov	eax,DWORD PTR 12[esp] 
-	mov	ebx,DWORD PTR 16[esp] 
-	xor	eax,esi 
-	xor	ebx,DWORD PTR 4[edi] 
-	xor	ecx,DWORD PTR 8[edi] 
-	xor	edx,DWORD PTR 12[edi] 
-	ret 
-__x86_Camellia_encrypt ENDP 
-ALIGN	16 
-_Camellia_DecryptBlock_Rounds	PROC PUBLIC 
-$L_Camellia_DecryptBlock_Rounds_begin:: 
-	push	ebp 
-	push	ebx 
-	push	esi 
-	push	edi 
-	mov	eax,DWORD PTR 20[esp] 
-	mov	esi,DWORD PTR 24[esp] 
-	mov	edi,DWORD PTR 28[esp] 
-	mov	ebx,esp 
-	sub	esp,28 
-	and	esp,-64 
-	lea	ecx,DWORD PTR [edi-127] 
-	sub	ecx,esp 
-	neg	ecx 
-	and	ecx,960 
-	sub	esp,ecx 
-	add	esp,4 
-	shl	eax,6 
-	mov	DWORD PTR 16[esp],edi 
-	lea	edi,DWORD PTR [eax*1+edi] 
-	mov	DWORD PTR 20[esp],ebx 
-	call	$L004pic_point 
-$L004pic_point: 
-	pop	ebp 
-	lea	ebp,DWORD PTR ($LCamellia_SBOX-$L004pic_point)[ebp] 
-	mov	eax,DWORD PTR [esi] 
-	mov	ebx,DWORD PTR 4[esi] 
-	mov	ecx,DWORD PTR 8[esi] 
-	bswap	eax 
-	mov	edx,DWORD PTR 12[esi] 
-	bswap	ebx 
-	bswap	ecx 
-	bswap	edx 
-	call	__x86_Camellia_decrypt 
-	mov	esp,DWORD PTR 20[esp] 
-	bswap	eax 
-	mov	esi,DWORD PTR 32[esp] 
-	bswap	ebx 
-	bswap	ecx 
-	bswap	edx 
-	mov	DWORD PTR [esi],eax 
-	mov	DWORD PTR 4[esi],ebx 
-	mov	DWORD PTR 8[esi],ecx 
-	mov	DWORD PTR 12[esi],edx 
-	pop	edi 
-	pop	esi 
-	pop	ebx 
-	pop	ebp 
-	ret 
-_Camellia_DecryptBlock_Rounds ENDP 
-ALIGN	16 
-_Camellia_DecryptBlock	PROC PUBLIC 
-$L_Camellia_DecryptBlock_begin:: 
-	mov	eax,128 
-	sub	eax,DWORD PTR 4[esp] 
-	mov	eax,3 
-	adc	eax,0 
-	mov	DWORD PTR 4[esp],eax 
-	jmp	$L_Camellia_DecryptBlock_Rounds_begin 
-_Camellia_DecryptBlock ENDP 
-ALIGN	16 
-_Camellia_decrypt	PROC PUBLIC 
-$L_Camellia_decrypt_begin:: 
-	push	ebp 
-	push	ebx 
-	push	esi 
-	push	edi 
-	mov	esi,DWORD PTR 20[esp] 
-	mov	edi,DWORD PTR 28[esp] 
-	mov	ebx,esp 
-	sub	esp,28 
-	and	esp,-64 
-	mov	eax,DWORD PTR 272[edi] 
-	lea	ecx,DWORD PTR [edi-127] 
-	sub	ecx,esp 
-	neg	ecx 
-	and	ecx,960 
-	sub	esp,ecx 
-	add	esp,4 
-	shl	eax,6 
-	mov	DWORD PTR 16[esp],edi 
-	lea	edi,DWORD PTR [eax*1+edi] 
-	mov	DWORD PTR 20[esp],ebx 
-	call	$L005pic_point 
-$L005pic_point: 
-	pop	ebp 
-	lea	ebp,DWORD PTR ($LCamellia_SBOX-$L005pic_point)[ebp] 
-	mov	eax,DWORD PTR [esi] 
-	mov	ebx,DWORD PTR 4[esi] 
-	mov	ecx,DWORD PTR 8[esi] 
-	bswap	eax 
-	mov	edx,DWORD PTR 12[esi] 
-	bswap	ebx 
-	bswap	ecx 
-	bswap	edx 
-	call	__x86_Camellia_decrypt 
-	mov	esp,DWORD PTR 20[esp] 
-	bswap	eax 
-	mov	esi,DWORD PTR 24[esp] 
-	bswap	ebx 
-	bswap	ecx 
-	bswap	edx 
-	mov	DWORD PTR [esi],eax 
-	mov	DWORD PTR 4[esi],ebx 
-	mov	DWORD PTR 8[esi],ecx 
-	mov	DWORD PTR 12[esi],edx 
-	pop	edi 
-	pop	esi 
-	pop	ebx 
-	pop	ebp 
-	ret 
-_Camellia_decrypt ENDP 
-ALIGN	16 
-__x86_Camellia_decrypt	PROC PRIVATE 
-	xor	eax,DWORD PTR [edi] 
-	xor	ebx,DWORD PTR 4[edi] 
-	xor	ecx,DWORD PTR 8[edi] 
-	xor	edx,DWORD PTR 12[edi] 
-	mov	esi,DWORD PTR [edi-8] 
-	mov	DWORD PTR 4[esp],eax 
-	mov	DWORD PTR 8[esp],ebx 
-	mov	DWORD PTR 12[esp],ecx 
-	mov	DWORD PTR 16[esp],edx 
-ALIGN	16 
-$L006loop: 
-	xor	eax,esi 
-	xor	ebx,DWORD PTR [edi-4] 
-	movzx	esi,ah 
-	mov	edx,DWORD PTR 2052[esi*8+ebp] 
-	movzx	esi,al 
-	xor	edx,DWORD PTR 4[esi*8+ebp] 
-	shr	eax,16 
-	movzx	esi,bl 
-	mov	ecx,DWORD PTR [esi*8+ebp] 
-	movzx	esi,ah 
-	xor	edx,DWORD PTR [esi*8+ebp] 
-	movzx	esi,bh 
-	xor	ecx,DWORD PTR 4[esi*8+ebp] 
-	shr	ebx,16 
-	movzx	eax,al 
-	xor	edx,DWORD PTR 2048[eax*8+ebp] 
-	movzx	esi,bh 
-	mov	eax,DWORD PTR 16[esp] 
-	xor	ecx,edx 
-	ror	edx,8 
-	xor	ecx,DWORD PTR 2048[esi*8+ebp] 
-	movzx	esi,bl 
-	mov	ebx,DWORD PTR 12[esp] 
-	xor	edx,eax 
-	xor	ecx,DWORD PTR 2052[esi*8+ebp] 
-	mov	esi,DWORD PTR [edi-16] 
-	xor	edx,ecx 
-	mov	DWORD PTR 16[esp],edx 
-	xor	ecx,ebx 
-	mov	DWORD PTR 12[esp],ecx 
-	xor	ecx,esi 
-	xor	edx,DWORD PTR [edi-12] 
-	movzx	esi,ch 
-	mov	ebx,DWORD PTR 2052[esi*8+ebp] 
-	movzx	esi,cl 
-	xor	ebx,DWORD PTR 4[esi*8+ebp] 
-	shr	ecx,16 
-	movzx	esi,dl 
-	mov	eax,DWORD PTR [esi*8+ebp] 
-	movzx	esi,ch 
-	xor	ebx,DWORD PTR [esi*8+ebp] 
-	movzx	esi,dh 
-	xor	eax,DWORD PTR 4[esi*8+ebp] 
-	shr	edx,16 
-	movzx	ecx,cl 
-	xor	ebx,DWORD PTR 2048[ecx*8+ebp] 
-	movzx	esi,dh 
-	mov	ecx,DWORD PTR 8[esp] 
-	xor	eax,ebx 
-	ror	ebx,8 
-	xor	eax,DWORD PTR 2048[esi*8+ebp] 
-	movzx	esi,dl 
-	mov	edx,DWORD PTR 4[esp] 
-	xor	ebx,ecx 
-	xor	eax,DWORD PTR 2052[esi*8+ebp] 
-	mov	esi,DWORD PTR [edi-24] 
-	xor	ebx,eax 
-	mov	DWORD PTR 8[esp],ebx 
-	xor	eax,edx 
-	mov	DWORD PTR 4[esp],eax 
-	xor	eax,esi 
-	xor	ebx,DWORD PTR [edi-20] 
-	movzx	esi,ah 
-	mov	edx,DWORD PTR 2052[esi*8+ebp] 
-	movzx	esi,al 
-	xor	edx,DWORD PTR 4[esi*8+ebp] 
-	shr	eax,16 
-	movzx	esi,bl 
-	mov	ecx,DWORD PTR [esi*8+ebp] 
-	movzx	esi,ah 
-	xor	edx,DWORD PTR [esi*8+ebp] 
-	movzx	esi,bh 
-	xor	ecx,DWORD PTR 4[esi*8+ebp] 
-	shr	ebx,16 
-	movzx	eax,al 
-	xor	edx,DWORD PTR 2048[eax*8+ebp] 
-	movzx	esi,bh 
-	mov	eax,DWORD PTR 16[esp] 
-	xor	ecx,edx 
-	ror	edx,8 
-	xor	ecx,DWORD PTR 2048[esi*8+ebp] 
-	movzx	esi,bl 
-	mov	ebx,DWORD PTR 12[esp] 
-	xor	edx,eax 
-	xor	ecx,DWORD PTR 2052[esi*8+ebp] 
-	mov	esi,DWORD PTR [edi-32] 
-	xor	edx,ecx 
-	mov	DWORD PTR 16[esp],edx 
-	xor	ecx,ebx 
-	mov	DWORD PTR 12[esp],ecx 
-	xor	ecx,esi 
-	xor	edx,DWORD PTR [edi-28] 
-	movzx	esi,ch 
-	mov	ebx,DWORD PTR 2052[esi*8+ebp] 
-	movzx	esi,cl 
-	xor	ebx,DWORD PTR 4[esi*8+ebp] 
-	shr	ecx,16 
-	movzx	esi,dl 
-	mov	eax,DWORD PTR [esi*8+ebp] 
-	movzx	esi,ch 
-	xor	ebx,DWORD PTR [esi*8+ebp] 
-	movzx	esi,dh 
-	xor	eax,DWORD PTR 4[esi*8+ebp] 
-	shr	edx,16 
-	movzx	ecx,cl 
-	xor	ebx,DWORD PTR 2048[ecx*8+ebp] 
-	movzx	esi,dh 
-	mov	ecx,DWORD PTR 8[esp] 
-	xor	eax,ebx 
-	ror	ebx,8 
-	xor	eax,DWORD PTR 2048[esi*8+ebp] 
-	movzx	esi,dl 
-	mov	edx,DWORD PTR 4[esp] 
-	xor	ebx,ecx 
-	xor	eax,DWORD PTR 2052[esi*8+ebp] 
-	mov	esi,DWORD PTR [edi-40] 
-	xor	ebx,eax 
-	mov	DWORD PTR 8[esp],ebx 
-	xor	eax,edx 
-	mov	DWORD PTR 4[esp],eax 
-	xor	eax,esi 
-	xor	ebx,DWORD PTR [edi-36] 
-	movzx	esi,ah 
-	mov	edx,DWORD PTR 2052[esi*8+ebp] 
-	movzx	esi,al 
-	xor	edx,DWORD PTR 4[esi*8+ebp] 
-	shr	eax,16 
-	movzx	esi,bl 
-	mov	ecx,DWORD PTR [esi*8+ebp] 
-	movzx	esi,ah 
-	xor	edx,DWORD PTR [esi*8+ebp] 
-	movzx	esi,bh 
-	xor	ecx,DWORD PTR 4[esi*8+ebp] 
-	shr	ebx,16 
-	movzx	eax,al 
-	xor	edx,DWORD PTR 2048[eax*8+ebp] 
-	movzx	esi,bh 
-	mov	eax,DWORD PTR 16[esp] 
-	xor	ecx,edx 
-	ror	edx,8 
-	xor	ecx,DWORD PTR 2048[esi*8+ebp] 
-	movzx	esi,bl 
-	mov	ebx,DWORD PTR 12[esp] 
-	xor	edx,eax 
-	xor	ecx,DWORD PTR 2052[esi*8+ebp] 
-	mov	esi,DWORD PTR [edi-48] 
-	xor	edx,ecx 
-	mov	DWORD PTR 16[esp],edx 
-	xor	ecx,ebx 
-	mov	DWORD PTR 12[esp],ecx 
-	xor	ecx,esi 
-	xor	edx,DWORD PTR [edi-44] 
-	movzx	esi,ch 
-	mov	ebx,DWORD PTR 2052[esi*8+ebp] 
-	movzx	esi,cl 
-	xor	ebx,DWORD PTR 4[esi*8+ebp] 
-	shr	ecx,16 
-	movzx	esi,dl 
-	mov	eax,DWORD PTR [esi*8+ebp] 
-	movzx	esi,ch 
-	xor	ebx,DWORD PTR [esi*8+ebp] 
-	movzx	esi,dh 
-	xor	eax,DWORD PTR 4[esi*8+ebp] 
-	shr	edx,16 
-	movzx	ecx,cl 
-	xor	ebx,DWORD PTR 2048[ecx*8+ebp] 
-	movzx	esi,dh 
-	mov	ecx,DWORD PTR 8[esp] 
-	xor	eax,ebx 
-	ror	ebx,8 
-	xor	eax,DWORD PTR 2048[esi*8+ebp] 
-	movzx	esi,dl 
-	mov	edx,DWORD PTR 4[esp] 
-	xor	ebx,ecx 
-	xor	eax,DWORD PTR 2052[esi*8+ebp] 
-	mov	esi,DWORD PTR [edi-56] 
-	xor	ebx,eax 
-	mov	DWORD PTR 8[esp],ebx 
-	xor	eax,edx 
-	mov	DWORD PTR 4[esp],eax 
-	sub	edi,64 
-	cmp	edi,DWORD PTR 20[esp] 
-	je	$L007done 
-	and	esi,eax 
-	mov	edx,DWORD PTR 16[esp] 
-	rol	esi,1 
-	mov	ecx,edx 
-	xor	ebx,esi 
-	or	ecx,DWORD PTR 4[edi] 
-	mov	DWORD PTR 8[esp],ebx 
-	xor	ecx,DWORD PTR 12[esp] 
-	mov	esi,DWORD PTR 12[edi] 
-	mov	DWORD PTR 12[esp],ecx 
-	or	esi,ebx 
-	and	ecx,DWORD PTR [edi] 
-	xor	eax,esi 
-	rol	ecx,1 
-	mov	DWORD PTR 4[esp],eax 
-	xor	edx,ecx 
-	mov	esi,DWORD PTR [edi-8] 
-	mov	DWORD PTR 16[esp],edx 
-	jmp	$L006loop 
-ALIGN	8 
-$L007done: 
-	mov	ecx,eax 
-	mov	edx,ebx 
-	mov	eax,DWORD PTR 12[esp] 
-	mov	ebx,DWORD PTR 16[esp] 
-	xor	ecx,esi 
-	xor	edx,DWORD PTR 12[edi] 
-	xor	eax,DWORD PTR [edi] 
-	xor	ebx,DWORD PTR 4[edi] 
-	ret 
-__x86_Camellia_decrypt ENDP 
-ALIGN	16 
-_Camellia_Ekeygen	PROC PUBLIC 
-$L_Camellia_Ekeygen_begin:: 
-	push	ebp 
-	push	ebx 
-	push	esi 
-	push	edi 
-	sub	esp,16 
-	mov	ebp,DWORD PTR 36[esp] 
-	mov	esi,DWORD PTR 40[esp] 
-	mov	edi,DWORD PTR 44[esp] 
-	mov	eax,DWORD PTR [esi] 
-	mov	ebx,DWORD PTR 4[esi] 
-	mov	ecx,DWORD PTR 8[esi] 
-	mov	edx,DWORD PTR 12[esi] 
-	bswap	eax 
-	bswap	ebx 
-	bswap	ecx 
-	bswap	edx 
-	mov	DWORD PTR [edi],eax 
-	mov	DWORD PTR 4[edi],ebx 
-	mov	DWORD PTR 8[edi],ecx 
-	mov	DWORD PTR 12[edi],edx 
-	cmp	ebp,128 
-	je	$L0081st128 
-	mov	eax,DWORD PTR 16[esi] 
-	mov	ebx,DWORD PTR 20[esi] 
-	cmp	ebp,192 
-	je	$L0091st192 
-	mov	ecx,DWORD PTR 24[esi] 
-	mov	edx,DWORD PTR 28[esi] 
-	jmp	$L0101st256 
-ALIGN	4 
-$L0091st192: 
-	mov	ecx,eax 
-	mov	edx,ebx 
-	not	ecx 
-	not	edx 
-ALIGN	4 
-$L0101st256: 
-	bswap	eax 
-	bswap	ebx 
-	bswap	ecx 
-	bswap	edx 
-	mov	DWORD PTR 32[edi],eax 
-	mov	DWORD PTR 36[edi],ebx 
-	mov	DWORD PTR 40[edi],ecx 
-	mov	DWORD PTR 44[edi],edx 
-	xor	eax,DWORD PTR [edi] 
-	xor	ebx,DWORD PTR 4[edi] 
-	xor	ecx,DWORD PTR 8[edi] 
-	xor	edx,DWORD PTR 12[edi] 
-ALIGN	4 
-$L0081st128: 
-	call	$L011pic_point 
-$L011pic_point: 
-	pop	ebp 
-	lea	ebp,DWORD PTR ($LCamellia_SBOX-$L011pic_point)[ebp] 
-	lea	edi,DWORD PTR ($LCamellia_SIGMA-$LCamellia_SBOX)[ebp] 
-	mov	esi,DWORD PTR [edi] 
-	mov	DWORD PTR [esp],eax 
-	mov	DWORD PTR 4[esp],ebx 
-	mov	DWORD PTR 8[esp],ecx 
-	mov	DWORD PTR 12[esp],edx 
-	xor	eax,esi 
-	xor	ebx,DWORD PTR 4[edi] 
-	movzx	esi,ah 
-	mov	edx,DWORD PTR 2052[esi*8+ebp] 
-	movzx	esi,al 
-	xor	edx,DWORD PTR 4[esi*8+ebp] 
-	shr	eax,16 
-	movzx	esi,bl 
-	mov	ecx,DWORD PTR [esi*8+ebp] 
-	movzx	esi,ah 
-	xor	edx,DWORD PTR [esi*8+ebp] 
-	movzx	esi,bh 
-	xor	ecx,DWORD PTR 4[esi*8+ebp] 
-	shr	ebx,16 
-	movzx	eax,al 
-	xor	edx,DWORD PTR 2048[eax*8+ebp] 
-	movzx	esi,bh 
-	mov	eax,DWORD PTR 12[esp] 
-	xor	ecx,edx 
-	ror	edx,8 
-	xor	ecx,DWORD PTR 2048[esi*8+ebp] 
-	movzx	esi,bl 
-	mov	ebx,DWORD PTR 8[esp] 
-	xor	edx,eax 
-	xor	ecx,DWORD PTR 2052[esi*8+ebp] 
-	mov	esi,DWORD PTR 8[edi] 
-	xor	edx,ecx 
-	mov	DWORD PTR 12[esp],edx 
-	xor	ecx,ebx 
-	mov	DWORD PTR 8[esp],ecx 
-	xor	ecx,esi 
-	xor	edx,DWORD PTR 12[edi] 
-	movzx	esi,ch 
-	mov	ebx,DWORD PTR 2052[esi*8+ebp] 
-	movzx	esi,cl 
-	xor	ebx,DWORD PTR 4[esi*8+ebp] 
-	shr	ecx,16 
-	movzx	esi,dl 
-	mov	eax,DWORD PTR [esi*8+ebp] 
-	movzx	esi,ch 
-	xor	ebx,DWORD PTR [esi*8+ebp] 
-	movzx	esi,dh 
-	xor	eax,DWORD PTR 4[esi*8+ebp] 
-	shr	edx,16 
-	movzx	ecx,cl 
-	xor	ebx,DWORD PTR 2048[ecx*8+ebp] 
-	movzx	esi,dh 
-	mov	ecx,DWORD PTR 4[esp] 
-	xor	eax,ebx 
-	ror	ebx,8 
-	xor	eax,DWORD PTR 2048[esi*8+ebp] 
-	movzx	esi,dl 
-	mov	edx,DWORD PTR [esp] 
-	xor	ebx,ecx 
-	xor	eax,DWORD PTR 2052[esi*8+ebp] 
-	mov	esi,DWORD PTR 16[edi] 
-	xor	ebx,eax 
-	mov	DWORD PTR 4[esp],ebx 
-	xor	eax,edx 
-	mov	DWORD PTR [esp],eax 
-	mov	ecx,DWORD PTR 8[esp] 
-	mov	edx,DWORD PTR 12[esp] 
-	mov	esi,DWORD PTR 44[esp] 
-	xor	eax,DWORD PTR [esi] 
-	xor	ebx,DWORD PTR 4[esi] 
-	xor	ecx,DWORD PTR 8[esi] 
-	xor	edx,DWORD PTR 12[esi] 
-	mov	esi,DWORD PTR 16[edi] 
-	mov	DWORD PTR [esp],eax 
-	mov	DWORD PTR 4[esp],ebx 
-	mov	DWORD PTR 8[esp],ecx 
-	mov	DWORD PTR 12[esp],edx 
-	xor	eax,esi 
-	xor	ebx,DWORD PTR 20[edi] 
-	movzx	esi,ah 
-	mov	edx,DWORD PTR 2052[esi*8+ebp] 
-	movzx	esi,al 
-	xor	edx,DWORD PTR 4[esi*8+ebp] 
-	shr	eax,16 
-	movzx	esi,bl 
-	mov	ecx,DWORD PTR [esi*8+ebp] 
-	movzx	esi,ah 
-	xor	edx,DWORD PTR [esi*8+ebp] 
-	movzx	esi,bh 
-	xor	ecx,DWORD PTR 4[esi*8+ebp] 
-	shr	ebx,16 
-	movzx	eax,al 
-	xor	edx,DWORD PTR 2048[eax*8+ebp] 
-	movzx	esi,bh 
-	mov	eax,DWORD PTR 12[esp] 
-	xor	ecx,edx 
-	ror	edx,8 
-	xor	ecx,DWORD PTR 2048[esi*8+ebp] 
-	movzx	esi,bl 
-	mov	ebx,DWORD PTR 8[esp] 
-	xor	edx,eax 
-	xor	ecx,DWORD PTR 2052[esi*8+ebp] 
-	mov	esi,DWORD PTR 24[edi] 
-	xor	edx,ecx 
-	mov	DWORD PTR 12[esp],edx 
-	xor	ecx,ebx 
-	mov	DWORD PTR 8[esp],ecx 
-	xor	ecx,esi 
-	xor	edx,DWORD PTR 28[edi] 
-	movzx	esi,ch 
-	mov	ebx,DWORD PTR 2052[esi*8+ebp] 
-	movzx	esi,cl 
-	xor	ebx,DWORD PTR 4[esi*8+ebp] 
-	shr	ecx,16 
-	movzx	esi,dl 
-	mov	eax,DWORD PTR [esi*8+ebp] 
-	movzx	esi,ch 
-	xor	ebx,DWORD PTR [esi*8+ebp] 
-	movzx	esi,dh 
-	xor	eax,DWORD PTR 4[esi*8+ebp] 
-	shr	edx,16 
-	movzx	ecx,cl 
-	xor	ebx,DWORD PTR 2048[ecx*8+ebp] 
-	movzx	esi,dh 
-	mov	ecx,DWORD PTR 4[esp] 
-	xor	eax,ebx 
-	ror	ebx,8 
-	xor	eax,DWORD PTR 2048[esi*8+ebp] 
-	movzx	esi,dl 
-	mov	edx,DWORD PTR [esp] 
-	xor	ebx,ecx 
-	xor	eax,DWORD PTR 2052[esi*8+ebp] 
-	mov	esi,DWORD PTR 32[edi] 
-	xor	ebx,eax 
-	mov	DWORD PTR 4[esp],ebx 
-	xor	eax,edx 
-	mov	DWORD PTR [esp],eax 
-	mov	ecx,DWORD PTR 8[esp] 
-	mov	edx,DWORD PTR 12[esp] 
-	mov	esi,DWORD PTR 36[esp] 
-	cmp	esi,128 
-	jne	$L0122nd256 
-	mov	edi,DWORD PTR 44[esp] 
-	lea	edi,DWORD PTR 128[edi] 
-	mov	DWORD PTR [edi-112],eax 
-	mov	DWORD PTR [edi-108],ebx 
-	mov	DWORD PTR [edi-104],ecx 
-	mov	DWORD PTR [edi-100],edx 
-	mov	ebp,eax 
-	shl	eax,15 
-	mov	esi,ebx 
-	shr	esi,17 
-	shl	ebx,15 
-	or	eax,esi 
-	mov	esi,ecx 
-	shl	ecx,15 
-	mov	DWORD PTR [edi-80],eax 
-	shr	esi,17 
-	or	ebx,esi 
-	shr	ebp,17 
-	mov	esi,edx 
-	shr	esi,17 
-	mov	DWORD PTR [edi-76],ebx 
-	shl	edx,15 
-	or	ecx,esi 
-	or	edx,ebp 
-	mov	DWORD PTR [edi-72],ecx 
-	mov	DWORD PTR [edi-68],edx 
-	mov	ebp,eax 
-	shl	eax,15 
-	mov	esi,ebx 
-	shr	esi,17 
-	shl	ebx,15 
-	or	eax,esi 
-	mov	esi,ecx 
-	shl	ecx,15 
-	mov	DWORD PTR [edi-64],eax 
-	shr	esi,17 
-	or	ebx,esi 
-	shr	ebp,17 
-	mov	esi,edx 
-	shr	esi,17 
-	mov	DWORD PTR [edi-60],ebx 
-	shl	edx,15 
-	or	ecx,esi 
-	or	edx,ebp 
-	mov	DWORD PTR [edi-56],ecx 
-	mov	DWORD PTR [edi-52],edx 
-	mov	ebp,eax 
-	shl	eax,15 
-	mov	esi,ebx 
-	shr	esi,17 
-	shl	ebx,15 
-	or	eax,esi 
-	mov	esi,ecx 
-	shl	ecx,15 
-	mov	DWORD PTR [edi-32],eax 
-	shr	esi,17 
-	or	ebx,esi 
-	shr	ebp,17 
-	mov	esi,edx 
-	shr	esi,17 
-	mov	DWORD PTR [edi-28],ebx 
-	shl	edx,15 
-	or	ecx,esi 
-	or	edx,ebp 
-	mov	ebp,eax 
-	shl	eax,15 
-	mov	esi,ebx 
-	shr	esi,17 
-	shl	ebx,15 
-	or	eax,esi 
-	mov	esi,ecx 
-	shl	ecx,15 
-	mov	DWORD PTR [edi-16],eax 
-	shr	esi,17 
-	or	ebx,esi 
-	shr	ebp,17 
-	mov	esi,edx 
-	shr	esi,17 
-	mov	DWORD PTR [edi-12],ebx 
-	shl	edx,15 
-	or	ecx,esi 
-	or	edx,ebp 
-	mov	DWORD PTR [edi-8],ecx 
-	mov	DWORD PTR [edi-4],edx 
-	mov	ebp,ebx 
-	shl	ebx,2 
-	mov	esi,ecx 
-	shr	esi,30 
-	shl	ecx,2 
-	or	ebx,esi 
-	mov	esi,edx 
-	shl	edx,2 
-	mov	DWORD PTR 32[edi],ebx 
-	shr	esi,30 
-	or	ecx,esi 
-	shr	ebp,30 
-	mov	esi,eax 
-	shr	esi,30 
-	mov	DWORD PTR 36[edi],ecx 
-	shl	eax,2 
-	or	edx,esi 
-	or	eax,ebp 
-	mov	DWORD PTR 40[edi],edx 
-	mov	DWORD PTR 44[edi],eax 
-	mov	ebp,ebx 
-	shl	ebx,17 
-	mov	esi,ecx 
-	shr	esi,15 
-	shl	ecx,17 
-	or	ebx,esi 
-	mov	esi,edx 
-	shl	edx,17 
-	mov	DWORD PTR 64[edi],ebx 
-	shr	esi,15 
-	or	ecx,esi 
-	shr	ebp,15 
-	mov	esi,eax 
-	shr	esi,15 
-	mov	DWORD PTR 68[edi],ecx 
-	shl	eax,17 
-	or	edx,esi 
-	or	eax,ebp 
-	mov	DWORD PTR 72[edi],edx 
-	mov	DWORD PTR 76[edi],eax 
-	mov	ebx,DWORD PTR [edi-128] 
-	mov	ecx,DWORD PTR [edi-124] 
-	mov	edx,DWORD PTR [edi-120] 
-	mov	eax,DWORD PTR [edi-116] 
-	mov	ebp,ebx 
-	shl	ebx,15 
-	mov	esi,ecx 
-	shr	esi,17 
-	shl	ecx,15 
-	or	ebx,esi 
-	mov	esi,edx 
-	shl	edx,15 
-	mov	DWORD PTR [edi-96],ebx 
-	shr	esi,17 
-	or	ecx,esi 
-	shr	ebp,17 
-	mov	esi,eax 
-	shr	esi,17 
-	mov	DWORD PTR [edi-92],ecx 
-	shl	eax,15 
-	or	edx,esi 
-	or	eax,ebp 
-	mov	DWORD PTR [edi-88],edx 
-	mov	DWORD PTR [edi-84],eax 
-	mov	ebp,ebx 
-	shl	ebx,30 
-	mov	esi,ecx 
-	shr	esi,2 
-	shl	ecx,30 
-	or	ebx,esi 
-	mov	esi,edx 
-	shl	edx,30 
-	mov	DWORD PTR [edi-48],ebx 
-	shr	esi,2 
-	or	ecx,esi 
-	shr	ebp,2 
-	mov	esi,eax 
-	shr	esi,2 
-	mov	DWORD PTR [edi-44],ecx 
-	shl	eax,30 
-	or	edx,esi 
-	or	eax,ebp 
-	mov	DWORD PTR [edi-40],edx 
-	mov	DWORD PTR [edi-36],eax 
-	mov	ebp,ebx 
-	shl	ebx,15 
-	mov	esi,ecx 
-	shr	esi,17 
-	shl	ecx,15 
-	or	ebx,esi 
-	mov	esi,edx 
-	shl	edx,15 
-	shr	esi,17 
-	or	ecx,esi 
-	shr	ebp,17 
-	mov	esi,eax 
-	shr	esi,17 
-	shl	eax,15 
-	or	edx,esi 
-	or	eax,ebp 
-	mov	DWORD PTR [edi-24],edx 
-	mov	DWORD PTR [edi-20],eax 
-	mov	ebp,ebx 
-	shl	ebx,17 
-	mov	esi,ecx 
-	shr	esi,15 
-	shl	ecx,17 
-	or	ebx,esi 
-	mov	esi,edx 
-	shl	edx,17 
-	mov	DWORD PTR [edi],ebx 
-	shr	esi,15 
-	or	ecx,esi 
-	shr	ebp,15 
-	mov	esi,eax 
-	shr	esi,15 
-	mov	DWORD PTR 4[edi],ecx 
-	shl	eax,17 
-	or	edx,esi 
-	or	eax,ebp 
-	mov	DWORD PTR 8[edi],edx 
-	mov	DWORD PTR 12[edi],eax 
-	mov	ebp,ebx 
-	shl	ebx,17 
-	mov	esi,ecx 
-	shr	esi,15 
-	shl	ecx,17 
-	or	ebx,esi 
-	mov	esi,edx 
-	shl	edx,17 
-	mov	DWORD PTR 16[edi],ebx 
-	shr	esi,15 
-	or	ecx,esi 
-	shr	ebp,15 
-	mov	esi,eax 
-	shr	esi,15 
-	mov	DWORD PTR 20[edi],ecx 
-	shl	eax,17 
-	or	edx,esi 
-	or	eax,ebp 
-	mov	DWORD PTR 24[edi],edx 
-	mov	DWORD PTR 28[edi],eax 
-	mov	ebp,ebx 
-	shl	ebx,17 
-	mov	esi,ecx 
-	shr	esi,15 
-	shl	ecx,17 
-	or	ebx,esi 
-	mov	esi,edx 
-	shl	edx,17 
-	mov	DWORD PTR 48[edi],ebx 
-	shr	esi,15 
-	or	ecx,esi 
-	shr	ebp,15 
-	mov	esi,eax 
-	shr	esi,15 
-	mov	DWORD PTR 52[edi],ecx 
-	shl	eax,17 
-	or	edx,esi 
-	or	eax,ebp 
-	mov	DWORD PTR 56[edi],edx 
-	mov	DWORD PTR 60[edi],eax 
-	mov	eax,3 
-	jmp	$L013done 
-ALIGN	16 
-$L0122nd256: 
-	mov	esi,DWORD PTR 44[esp] 
-	mov	DWORD PTR 48[esi],eax 
-	mov	DWORD PTR 52[esi],ebx 
-	mov	DWORD PTR 56[esi],ecx 
-	mov	DWORD PTR 60[esi],edx 
-	xor	eax,DWORD PTR 32[esi] 
-	xor	ebx,DWORD PTR 36[esi] 
-	xor	ecx,DWORD PTR 40[esi] 
-	xor	edx,DWORD PTR 44[esi] 
-	mov	esi,DWORD PTR 32[edi] 
-	mov	DWORD PTR [esp],eax 
-	mov	DWORD PTR 4[esp],ebx 
-	mov	DWORD PTR 8[esp],ecx 
-	mov	DWORD PTR 12[esp],edx 
-	xor	eax,esi 
-	xor	ebx,DWORD PTR 36[edi] 
-	movzx	esi,ah 
-	mov	edx,DWORD PTR 2052[esi*8+ebp] 
-	movzx	esi,al 
-	xor	edx,DWORD PTR 4[esi*8+ebp] 
-	shr	eax,16 
-	movzx	esi,bl 
-	mov	ecx,DWORD PTR [esi*8+ebp] 
-	movzx	esi,ah 
-	xor	edx,DWORD PTR [esi*8+ebp] 
-	movzx	esi,bh 
-	xor	ecx,DWORD PTR 4[esi*8+ebp] 
-	shr	ebx,16 
-	movzx	eax,al 
-	xor	edx,DWORD PTR 2048[eax*8+ebp] 
-	movzx	esi,bh 
-	mov	eax,DWORD PTR 12[esp] 
-	xor	ecx,edx 
-	ror	edx,8 
-	xor	ecx,DWORD PTR 2048[esi*8+ebp] 
-	movzx	esi,bl 
-	mov	ebx,DWORD PTR 8[esp] 
-	xor	edx,eax 
-	xor	ecx,DWORD PTR 2052[esi*8+ebp] 
-	mov	esi,DWORD PTR 40[edi] 
-	xor	edx,ecx 
-	mov	DWORD PTR 12[esp],edx 
-	xor	ecx,ebx 
-	mov	DWORD PTR 8[esp],ecx 
-	xor	ecx,esi 
-	xor	edx,DWORD PTR 44[edi] 
-	movzx	esi,ch 
-	mov	ebx,DWORD PTR 2052[esi*8+ebp] 
-	movzx	esi,cl 
-	xor	ebx,DWORD PTR 4[esi*8+ebp] 
-	shr	ecx,16 
-	movzx	esi,dl 
-	mov	eax,DWORD PTR [esi*8+ebp] 
-	movzx	esi,ch 
-	xor	ebx,DWORD PTR [esi*8+ebp] 
-	movzx	esi,dh 
-	xor	eax,DWORD PTR 4[esi*8+ebp] 
-	shr	edx,16 
-	movzx	ecx,cl 
-	xor	ebx,DWORD PTR 2048[ecx*8+ebp] 
-	movzx	esi,dh 
-	mov	ecx,DWORD PTR 4[esp] 
-	xor	eax,ebx 
-	ror	ebx,8 
-	xor	eax,DWORD PTR 2048[esi*8+ebp] 
-	movzx	esi,dl 
-	mov	edx,DWORD PTR [esp] 
-	xor	ebx,ecx 
-	xor	eax,DWORD PTR 2052[esi*8+ebp] 
-	mov	esi,DWORD PTR 48[edi] 
-	xor	ebx,eax 
-	mov	DWORD PTR 4[esp],ebx 
-	xor	eax,edx 
-	mov	DWORD PTR [esp],eax 
-	mov	ecx,DWORD PTR 8[esp] 
-	mov	edx,DWORD PTR 12[esp] 
-	mov	edi,DWORD PTR 44[esp] 
-	lea	edi,DWORD PTR 128[edi] 
-	mov	DWORD PTR [edi-112],eax 
-	mov	DWORD PTR [edi-108],ebx 
-	mov	DWORD PTR [edi-104],ecx 
-	mov	DWORD PTR [edi-100],edx 
-	mov	ebp,eax 
-	shl	eax,30 
-	mov	esi,ebx 
-	shr	esi,2 
-	shl	ebx,30 
-	or	eax,esi 
-	mov	esi,ecx 
-	shl	ecx,30 
-	mov	DWORD PTR [edi-48],eax 
-	shr	esi,2 
-	or	ebx,esi 
-	shr	ebp,2 
-	mov	esi,edx 
-	shr	esi,2 
-	mov	DWORD PTR [edi-44],ebx 
-	shl	edx,30 
-	or	ecx,esi 
-	or	edx,ebp 
-	mov	DWORD PTR [edi-40],ecx 
-	mov	DWORD PTR [edi-36],edx 
-	mov	ebp,eax 
-	shl	eax,30 
-	mov	esi,ebx 
-	shr	esi,2 
-	shl	ebx,30 
-	or	eax,esi 
-	mov	esi,ecx 
-	shl	ecx,30 
-	mov	DWORD PTR 32[edi],eax 
-	shr	esi,2 
-	or	ebx,esi 
-	shr	ebp,2 
-	mov	esi,edx 
-	shr	esi,2 
-	mov	DWORD PTR 36[edi],ebx 
-	shl	edx,30 
-	or	ecx,esi 
-	or	edx,ebp 
-	mov	DWORD PTR 40[edi],ecx 
-	mov	DWORD PTR 44[edi],edx 
-	mov	ebp,ebx 
-	shl	ebx,19 
-	mov	esi,ecx 
-	shr	esi,13 
-	shl	ecx,19 
-	or	ebx,esi 
-	mov	esi,edx 
-	shl	edx,19 
-	mov	DWORD PTR 128[edi],ebx 
-	shr	esi,13 
-	or	ecx,esi 
-	shr	ebp,13 
-	mov	esi,eax 
-	shr	esi,13 
-	mov	DWORD PTR 132[edi],ecx 
-	shl	eax,19 
-	or	edx,esi 
-	or	eax,ebp 
-	mov	DWORD PTR 136[edi],edx 
-	mov	DWORD PTR 140[edi],eax 
-	mov	ebx,DWORD PTR [edi-96] 
-	mov	ecx,DWORD PTR [edi-92] 
-	mov	edx,DWORD PTR [edi-88] 
-	mov	eax,DWORD PTR [edi-84] 
-	mov	ebp,ebx 
-	shl	ebx,15 
-	mov	esi,ecx 
-	shr	esi,17 
-	shl	ecx,15 
-	or	ebx,esi 
-	mov	esi,edx 
-	shl	edx,15 
-	mov	DWORD PTR [edi-96],ebx 
-	shr	esi,17 
-	or	ecx,esi 
-	shr	ebp,17 
-	mov	esi,eax 
-	shr	esi,17 
-	mov	DWORD PTR [edi-92],ecx 
-	shl	eax,15 
-	or	edx,esi 
-	or	eax,ebp 
-	mov	DWORD PTR [edi-88],edx 
-	mov	DWORD PTR [edi-84],eax 
-	mov	ebp,ebx 
-	shl	ebx,15 
-	mov	esi,ecx 
-	shr	esi,17 
-	shl	ecx,15 
-	or	ebx,esi 
-	mov	esi,edx 
-	shl	edx,15 
-	mov	DWORD PTR [edi-64],ebx 
-	shr	esi,17 
-	or	ecx,esi 
-	shr	ebp,17 
-	mov	esi,eax 
-	shr	esi,17 
-	mov	DWORD PTR [edi-60],ecx 
-	shl	eax,15 
-	or	edx,esi 
-	or	eax,ebp 
-	mov	DWORD PTR [edi-56],edx 
-	mov	DWORD PTR [edi-52],eax 
-	mov	ebp,ebx 
-	shl	ebx,30 
-	mov	esi,ecx 
-	shr	esi,2 
-	shl	ecx,30 
-	or	ebx,esi 
-	mov	esi,edx 
-	shl	edx,30 
-	mov	DWORD PTR 16[edi],ebx 
-	shr	esi,2 
-	or	ecx,esi 
-	shr	ebp,2 
-	mov	esi,eax 
-	shr	esi,2 
-	mov	DWORD PTR 20[edi],ecx 
-	shl	eax,30 
-	or	edx,esi 
-	or	eax,ebp 
-	mov	DWORD PTR 24[edi],edx 
-	mov	DWORD PTR 28[edi],eax 
-	mov	ebp,ecx 
-	shl	ecx,2 
-	mov	esi,edx 
-	shr	esi,30 
-	shl	edx,2 
-	or	ecx,esi 
-	mov	esi,eax 
-	shl	eax,2 
-	mov	DWORD PTR 80[edi],ecx 
-	shr	esi,30 
-	or	edx,esi 
-	shr	ebp,30 
-	mov	esi,ebx 
-	shr	esi,30 
-	mov	DWORD PTR 84[edi],edx 
-	shl	ebx,2 
-	or	eax,esi 
-	or	ebx,ebp 
-	mov	DWORD PTR 88[edi],eax 
-	mov	DWORD PTR 92[edi],ebx 
-	mov	ecx,DWORD PTR [edi-80] 
-	mov	edx,DWORD PTR [edi-76] 
-	mov	eax,DWORD PTR [edi-72] 
-	mov	ebx,DWORD PTR [edi-68] 
-	mov	ebp,ecx 
-	shl	ecx,15 
-	mov	esi,edx 
-	shr	esi,17 
-	shl	edx,15 
-	or	ecx,esi 
-	mov	esi,eax 
-	shl	eax,15 
-	mov	DWORD PTR [edi-80],ecx 
-	shr	esi,17 
-	or	edx,esi 
-	shr	ebp,17 
-	mov	esi,ebx 
-	shr	esi,17 
-	mov	DWORD PTR [edi-76],edx 
-	shl	ebx,15 
-	or	eax,esi 
-	or	ebx,ebp 
-	mov	DWORD PTR [edi-72],eax 
-	mov	DWORD PTR [edi-68],ebx 
-	mov	ebp,ecx 
-	shl	ecx,30 
-	mov	esi,edx 
-	shr	esi,2 
-	shl	edx,30 
-	or	ecx,esi 
-	mov	esi,eax 
-	shl	eax,30 
-	mov	DWORD PTR [edi-16],ecx 
-	shr	esi,2 
-	or	edx,esi 
-	shr	ebp,2 
-	mov	esi,ebx 
-	shr	esi,2 
-	mov	DWORD PTR [edi-12],edx 
-	shl	ebx,30 
-	or	eax,esi 
-	or	ebx,ebp 
-	mov	DWORD PTR [edi-8],eax 
-	mov	DWORD PTR [edi-4],ebx 
-	mov	DWORD PTR 64[edi],edx 
-	mov	DWORD PTR 68[edi],eax 
-	mov	DWORD PTR 72[edi],ebx 
-	mov	DWORD PTR 76[edi],ecx 
-	mov	ebp,edx 
-	shl	edx,17 
-	mov	esi,eax 
-	shr	esi,15 
-	shl	eax,17 
-	or	edx,esi 
-	mov	esi,ebx 
-	shl	ebx,17 
-	mov	DWORD PTR 96[edi],edx 
-	shr	esi,15 
-	or	eax,esi 
-	shr	ebp,15 
-	mov	esi,ecx 
-	shr	esi,15 
-	mov	DWORD PTR 100[edi],eax 
-	shl	ecx,17 
-	or	ebx,esi 
-	or	ecx,ebp 
-	mov	DWORD PTR 104[edi],ebx 
-	mov	DWORD PTR 108[edi],ecx 
-	mov	edx,DWORD PTR [edi-128] 
-	mov	eax,DWORD PTR [edi-124] 
-	mov	ebx,DWORD PTR [edi-120] 
-	mov	ecx,DWORD PTR [edi-116] 
-	mov	ebp,eax 
-	shl	eax,13 
-	mov	esi,ebx 
-	shr	esi,19 
-	shl	ebx,13 
-	or	eax,esi 
-	mov	esi,ecx 
-	shl	ecx,13 
-	mov	DWORD PTR [edi-32],eax 
-	shr	esi,19 
-	or	ebx,esi 
-	shr	ebp,19 
-	mov	esi,edx 
-	shr	esi,19 
-	mov	DWORD PTR [edi-28],ebx 
-	shl	edx,13 
-	or	ecx,esi 
-	or	edx,ebp 
-	mov	DWORD PTR [edi-24],ecx 
-	mov	DWORD PTR [edi-20],edx 
-	mov	ebp,eax 
-	shl	eax,15 
-	mov	esi,ebx 
-	shr	esi,17 
-	shl	ebx,15 
-	or	eax,esi 
-	mov	esi,ecx 
-	shl	ecx,15 
-	mov	DWORD PTR [edi],eax 
-	shr	esi,17 
-	or	ebx,esi 
-	shr	ebp,17 
-	mov	esi,edx 
-	shr	esi,17 
-	mov	DWORD PTR 4[edi],ebx 
-	shl	edx,15 
-	or	ecx,esi 
-	or	edx,ebp 
-	mov	DWORD PTR 8[edi],ecx 
-	mov	DWORD PTR 12[edi],edx 
-	mov	ebp,eax 
-	shl	eax,17 
-	mov	esi,ebx 
-	shr	esi,15 
-	shl	ebx,17 
-	or	eax,esi 
-	mov	esi,ecx 
-	shl	ecx,17 
-	mov	DWORD PTR 48[edi],eax 
-	shr	esi,15 
-	or	ebx,esi 
-	shr	ebp,15 
-	mov	esi,edx 
-	shr	esi,15 
-	mov	DWORD PTR 52[edi],ebx 
-	shl	edx,17 
-	or	ecx,esi 
-	or	edx,ebp 
-	mov	DWORD PTR 56[edi],ecx 
-	mov	DWORD PTR 60[edi],edx 
-	mov	ebp,ebx 
-	shl	ebx,2 
-	mov	esi,ecx 
-	shr	esi,30 
-	shl	ecx,2 
-	or	ebx,esi 
-	mov	esi,edx 
-	shl	edx,2 
-	mov	DWORD PTR 112[edi],ebx 
-	shr	esi,30 
-	or	ecx,esi 
-	shr	ebp,30 
-	mov	esi,eax 
-	shr	esi,30 
-	mov	DWORD PTR 116[edi],ecx 
-	shl	eax,2 
-	or	edx,esi 
-	or	eax,ebp 
-	mov	DWORD PTR 120[edi],edx 
-	mov	DWORD PTR 124[edi],eax 
-	mov	eax,4 
-$L013done: 
-	lea	edx,DWORD PTR 144[edi] 
-	add	esp,16 
-	pop	edi 
-	pop	esi 
-	pop	ebx 
-	pop	ebp 
-	ret 
-_Camellia_Ekeygen ENDP 
-ALIGN	16 
-_Camellia_set_key	PROC PUBLIC 
-$L_Camellia_set_key_begin:: 
-	push	ebx 
-	mov	ecx,DWORD PTR 8[esp] 
-	mov	ebx,DWORD PTR 12[esp] 
-	mov	edx,DWORD PTR 16[esp] 
-	mov	eax,-1 
-	test	ecx,ecx 
-	jz	$L014done 
-	test	edx,edx 
-	jz	$L014done 
-	mov	eax,-2 
-	cmp	ebx,256 
-	je	$L015arg_ok 
-	cmp	ebx,192 
-	je	$L015arg_ok 
-	cmp	ebx,128 
-	jne	$L014done 
-ALIGN	4 
-$L015arg_ok: 
-	push	edx 
-	push	ecx 
-	push	ebx 
-	call	$L_Camellia_Ekeygen_begin 
-	add	esp,12 
-	mov	DWORD PTR [edx],eax 
-	xor	eax,eax 
-ALIGN	4 
-$L014done: 
-	pop	ebx 
-	ret 
-_Camellia_set_key ENDP 
-ALIGN	64 
-$LCamellia_SIGMA:: 
-DD	2694735487,1003262091,3061508184,1286239154 
-DD	3337565999,3914302142,1426019237,4057165596 
-DD	283453434,3731369245,2958461122,3018244605 
-DD	0,0,0,0 
-ALIGN	64 
-$LCamellia_SBOX:: 
-DD	1886416896,1886388336 
-DD	2189591040,741081132 
-DD	741092352,3014852787 
-DD	3974949888,3233808576 
-DD	3014898432,3840147684 
-DD	656877312,1465319511 
-DD	3233857536,3941204202 
-DD	3857048832,2930639022 
-DD	3840205824,589496355 
-DD	2240120064,1802174571 
-DD	1465341696,1162149957 
-DD	892679424,2779054245 
-DD	3941263872,3991732461 
-DD	202116096,1330577487 
-DD	2930683392,488439837 
-DD	1094795520,2459041938 
-DD	589505280,2256928902 
-DD	4025478912,2947481775 
-DD	1802201856,2088501372 
-DD	2475922176,522125343 
-DD	1162167552,1044250686 
-DD	421075200,3705405660 
-DD	2779096320,1583218782 
-DD	555819264,185270283 
-DD	3991792896,2795896998 
-DD	235802112,960036921 
-DD	1330597632,3587506389 
-DD	1313754624,1566376029 
-DD	488447232,3654877401 
-DD	1701143808,1515847770 
-DD	2459079168,1364262993 
-DD	3183328512,1819017324 
-DD	2256963072,2341142667 
-DD	3099113472,2593783962 
-DD	2947526400,4227531003 
-DD	2408550144,2964324528 
-DD	2088532992,1953759348 
-DD	3958106880,724238379 
-DD	522133248,4042260720 
-DD	3469659648,2223243396 
-DD	1044266496,3755933919 
-DD	808464384,3419078859 
-DD	3705461760,875823156 
-DD	1600085760,1987444854 
-DD	1583242752,1835860077 
-DD	3318072576,2846425257 
-DD	185273088,3520135377 
-DD	437918208,67371012 
-DD	2795939328,336855060 
-DD	3789676800,976879674 
-DD	960051456,3739091166 
-DD	3402287616,286326801 
-DD	3587560704,842137650 
-DD	1195853568,2627469468 
-DD	1566399744,1397948499 
-DD	1027423488,4075946226 
-DD	3654932736,4278059262 
-DD	16843008,3486449871 
-DD	1515870720,3284336835 
-DD	3604403712,2054815866 
-DD	1364283648,606339108 
-DD	1448498688,3907518696 
-DD	1819044864,1616904288 
-DD	1296911616,1768489065 
-DD	2341178112,2863268010 
-DD	218959104,2694840480 
-DD	2593823232,2711683233 
-DD	1717986816,1650589794 
-DD	4227595008,1414791252 
-DD	3435973632,505282590 
-DD	2964369408,3772776672 
-DD	757935360,1684275300 
-DD	1953788928,269484048 
-DD	303174144,0 
-DD	724249344,2745368739 
-DD	538976256,1970602101 
-DD	4042321920,2324299914 
-DD	2981212416,3873833190 
-DD	2223277056,151584777 
-DD	2576980224,3722248413 
-DD	3755990784,2273771655 
-DD	1280068608,2206400643 
-DD	3419130624,3452764365 
-DD	3267543552,2425356432 
-DD	875836416,1936916595 
-DD	2122219008,4143317238 
-DD	1987474944,2644312221 
-DD	84215040,3216965823 
-DD	1835887872,1381105746 
-DD	3082270464,3638034648 
-DD	2846468352,3368550600 
-DD	825307392,3334865094 
-DD	3520188672,2172715137 
-DD	387389184,1869545583 
-DD	67372032,320012307 
-DD	3621246720,1667432547 
-DD	336860160,3924361449 
-DD	1482184704,2812739751 
-DD	976894464,2677997727 
-DD	1633771776,3166437564 
-DD	3739147776,690552873 
-DD	454761216,4193845497 
-DD	286331136,791609391 
-DD	471604224,3031695540 
-DD	842150400,2021130360 
-DD	252645120,101056518 
-DD	2627509248,3890675943 
-DD	370546176,1903231089 
-DD	1397969664,3570663636 
-DD	404232192,2880110763 
-DD	4076007936,2290614408 
-DD	572662272,2374828173 
-DD	4278124032,1920073842 
-DD	1145324544,3115909305 
-DD	3486502656,4177002744 
-DD	2998055424,2896953516 
-DD	3284386560,909508662 
-DD	3048584448,707395626 
-DD	2054846976,1010565180 
-DD	2442236160,4059103473 
-DD	606348288,1077936192 
-DD	134744064,3553820883 
-DD	3907577856,3149594811 
-DD	2829625344,1128464451 
-DD	1616928768,353697813 
-DD	4244438016,2913796269 
-DD	1768515840,2004287607 
-DD	1347440640,2155872384 
-DD	2863311360,2189557890 
-DD	3503345664,3974889708 
-DD	2694881280,656867367 
-DD	2105376000,3856990437 
-DD	2711724288,2240086149 
-DD	2307492096,892665909 
-DD	1650614784,202113036 
-DD	2543294208,1094778945 
-DD	1414812672,4025417967 
-DD	1532713728,2475884691 
-DD	505290240,421068825 
-DD	2509608192,555810849 
-DD	3772833792,235798542 
-DD	4294967040,1313734734 
-DD	1684300800,1701118053 
-DD	3537031680,3183280317 
-DD	269488128,3099066552 
-DD	3301229568,2408513679 
-DD	0,3958046955 
-DD	1212696576,3469607118 
-DD	2745410304,808452144 
-DD	4160222976,1600061535 
-DD	1970631936,3318022341 
-DD	3688618752,437911578 
-DD	2324335104,3789619425 
-DD	50529024,3402236106 
-DD	3873891840,1195835463 
-DD	3671775744,1027407933 
-DD	151587072,16842753 
-DD	1061109504,3604349142 
-DD	3722304768,1448476758 
-DD	2492765184,1296891981 
-DD	2273806080,218955789 
-DD	1549556736,1717960806 
-DD	2206434048,3435921612 
-DD	33686016,757923885 
-DD	3452816640,303169554 
-DD	1246382592,538968096 
-DD	2425393152,2981167281 
-DD	858993408,2576941209 
-DD	1936945920,1280049228 
-DD	1734829824,3267494082 
-DD	4143379968,2122186878 
-DD	4092850944,84213765 
-DD	2644352256,3082223799 
-DD	2139062016,825294897 
-DD	3217014528,387383319 
-DD	3806519808,3621191895 
-DD	1381126656,1482162264 
-DD	2610666240,1633747041 
-DD	3638089728,454754331 
-DD	640034304,471597084 
-DD	3368601600,252641295 
-DD	926365440,370540566 
-DD	3334915584,404226072 
-DD	993737472,572653602 
-DD	2172748032,1145307204 
-DD	2526451200,2998010034 
-DD	1869573888,3048538293 
-DD	1263225600,2442199185 
-DD	320017152,134742024 
-DD	3200171520,2829582504 
-DD	1667457792,4244373756 
-DD	774778368,1347420240 
-DD	3924420864,3503292624 
-DD	2038003968,2105344125 
-DD	2812782336,2307457161 
-DD	2358021120,2543255703 
-DD	2678038272,1532690523 
-DD	1852730880,2509570197 
-DD	3166485504,4294902015 
-DD	2391707136,3536978130 
-DD	690563328,3301179588 
-DD	4126536960,1212678216 
-DD	4193908992,4160159991 
-DD	3065427456,3688562907 
-DD	791621376,50528259 
-DD	4261281024,3671720154 
-DD	3031741440,1061093439 
-DD	1499027712,2492727444 
-DD	2021160960,1549533276 
-DD	2560137216,33685506 
-DD	101058048,1246363722 
-DD	1785358848,858980403 
-DD	3890734848,1734803559 
-DD	1179010560,4092788979 
-DD	1903259904,2139029631 
-DD	3132799488,3806462178 
-DD	3570717696,2610626715 
-DD	623191296,640024614 
-DD	2880154368,926351415 
-DD	1111638528,993722427 
-DD	2290649088,2526412950 
-DD	2728567296,1263206475 
-DD	2374864128,3200123070 
-DD	4210752000,774766638 
-DD	1920102912,2037973113 
-DD	117901056,2357985420 
-DD	3115956480,1852702830 
-DD	1431655680,2391670926 
-DD	4177065984,4126474485 
-DD	4008635904,3065381046 
-DD	2896997376,4261216509 
-DD	168430080,1499005017 
-DD	909522432,2560098456 
-DD	1229539584,1785331818 
-DD	707406336,1178992710 
-DD	1751672832,3132752058 
-DD	1010580480,623181861 
-DD	943208448,1111621698 
-DD	4059164928,2728525986 
-DD	2762253312,4210688250 
-DD	1077952512,117899271 
-DD	673720320,1431634005 
-DD	3553874688,4008575214 
-DD	2071689984,168427530 
-DD	3149642496,1229520969 
-DD	3385444608,1751646312 
-DD	1128481536,943194168 
-DD	3250700544,2762211492 
-DD	353703168,673710120 
-DD	3823362816,2071658619 
-DD	2913840384,3385393353 
-DD	4109693952,3250651329 
-DD	2004317952,3823304931 
-DD	3351758592,4109631732 
-DD	2155905024,3351707847 
-DD	2661195264,2661154974 
-DD	14737632,939538488 
-DD	328965,1090535745 
-DD	5789784,369104406 
-DD	14277081,1979741814 
-DD	6776679,3640711641 
-DD	5131854,2466288531 
-DD	8487297,1610637408 
-DD	13355979,4060148466 
-DD	13224393,1912631922 
-DD	723723,3254829762 
-DD	11447982,2868947883 
-DD	6974058,2583730842 
-DD	14013909,1962964341 
-DD	1579032,100664838 
-DD	6118749,1459640151 
-DD	8553090,2684395680 
-DD	4605510,2432733585 
-DD	14671839,4144035831 
-DD	14079702,3036722613 
-DD	2565927,3372272073 
-DD	9079434,2717950626 
-DD	3289650,2348846220 
-DD	4934475,3523269330 
-DD	4342338,2415956112 
-DD	14408667,4127258358 
-DD	1842204,117442311 
-DD	10395294,2801837991 
-DD	10263708,654321447 
-DD	3815994,2382401166 
-DD	13290186,2986390194 
-DD	2434341,1224755529 
-DD	8092539,3724599006 
-DD	855309,1124090691 
-DD	7434609,1543527516 
-DD	6250335,3607156695 
-DD	2039583,3338717127 
-DD	16316664,1040203326 
-DD	14145495,4110480885 
-DD	4079166,2399178639 
-DD	10329501,1728079719 
-DD	8158332,520101663 
-DD	6316128,402659352 
-DD	12171705,1845522030 
-DD	12500670,2936057775 
-DD	12369084,788541231 
-DD	9145227,3791708898 
-DD	1447446,2231403909 
-DD	3421236,218107149 
-DD	5066061,1392530259 
-DD	12829635,4026593520 
-DD	7500402,2617285788 
-DD	9803157,1694524773 
-DD	11250603,3925928682 
-DD	9342606,2734728099 
-DD	12237498,2919280302 
-DD	8026746,2650840734 
-DD	11776947,3959483628 
-DD	131586,2147516544 
-DD	11842740,754986285 
-DD	11382189,1795189611 
-DD	10658466,2818615464 
-DD	11316396,721431339 
-DD	14211288,905983542 
-DD	10132122,2785060518 
-DD	1513239,3305162181 
-DD	1710618,2248181382 
-DD	3487029,1291865421 
-DD	13421772,855651123 
-DD	16250871,4244700669 
-DD	10066329,1711302246 
-DD	6381921,1476417624 
-DD	5921370,2516620950 
-DD	15263976,973093434 
-DD	2368548,150997257 
-DD	5658198,2499843477 
-DD	4210752,268439568 
-DD	14803425,2013296760 
-DD	6513507,3623934168 
-DD	592137,1107313218 
-DD	3355443,3422604492 
-DD	12566463,4009816047 
-DD	10000536,637543974 
-DD	9934743,3842041317 
-DD	8750469,1627414881 
-DD	6842472,436214298 
-DD	16579836,1056980799 
-DD	15527148,989870907 
-DD	657930,2181071490 
-DD	14342874,3053500086 
-DD	7303023,3674266587 
-DD	5460819,3556824276 
-DD	6447714,2550175896 
-DD	10724259,3892373736 
-DD	3026478,2332068747 
-DD	526344,33554946 
-DD	11513775,3942706155 
-DD	2631720,167774730 
-DD	11579568,738208812 
-DD	7631988,486546717 
-DD	12763842,2952835248 
-DD	12434877,1862299503 
-DD	3552822,2365623693 
-DD	2236962,2281736328 
-DD	3684408,234884622 
-DD	6579300,419436825 
-DD	1973790,2264958855 
-DD	3750201,1308642894 
-DD	2894892,184552203 
-DD	10921638,2835392937 
-DD	3158064,201329676 
-DD	15066597,2030074233 
-DD	4473924,285217041 
-DD	16645629,2130739071 
-DD	8947848,570434082 
-DD	10461087,3875596263 
-DD	6645093,1493195097 
-DD	8882055,3774931425 
-DD	7039851,3657489114 
-DD	16053492,1023425853 
-DD	2302755,3355494600 
-DD	4737096,301994514 
-DD	1052688,67109892 
-DD	13750737,1946186868 
-DD	5329233,1409307732 
-DD	12632256,805318704 
-DD	16382457,2113961598 
-DD	13816530,3019945140 
-DD	10526880,671098920 
-DD	5592405,1426085205 
-DD	10592673,1744857192 
-DD	4276545,1342197840 
-DD	16448250,3187719870 
-DD	4408131,3489714384 
-DD	1250067,3288384708 
-DD	12895428,822096177 
-DD	3092271,3405827019 
-DD	11053224,704653866 
-DD	11974326,2902502829 
-DD	3947580,251662095 
-DD	2829099,3389049546 
-DD	12698049,1879076976 
-DD	16777215,4278255615 
-DD	13158600,838873650 
-DD	10855845,1761634665 
-DD	2105376,134219784 
-DD	9013641,1644192354 
-DD	0,0 
-DD	9474192,603989028 
-DD	4671303,3506491857 
-DD	15724527,4211145723 
-DD	15395562,3120609978 
-DD	12040119,3976261101 
-DD	1381653,1157645637 
-DD	394758,2164294017 
-DD	13487565,1929409395 
-DD	11908533,1828744557 
-DD	1184274,2214626436 
-DD	8289918,2667618207 
-DD	12303291,3993038574 
-DD	2697513,1241533002 
-DD	986895,3271607235 
-DD	12105912,771763758 
-DD	460551,3238052289 
-DD	263172,16777473 
-DD	10197915,3858818790 
-DD	9737364,620766501 
-DD	2171169,1207978056 
-DD	6710886,2566953369 
-DD	15132390,3103832505 
-DD	13553358,3003167667 
-DD	15592941,2063629179 
-DD	15198183,4177590777 
-DD	3881787,3456159438 
-DD	16711422,3204497343 
-DD	8355711,3741376479 
-DD	12961221,1895854449 
-DD	10790052,687876393 
-DD	3618615,3439381965 
-DD	11645361,1811967084 
-DD	5000268,318771987 
-DD	9539985,1677747300 
-DD	7237230,2600508315 
-DD	9276813,1660969827 
-DD	7763574,2634063261 
-DD	197379,3221274816 
-DD	2960685,1258310475 
-DD	14606046,3070277559 
-DD	9868950,2768283045 
-DD	2500134,2298513801 
-DD	8224125,1593859935 
-DD	13027014,2969612721 
-DD	6052956,385881879 
-DD	13882323,4093703412 
-DD	15921906,3154164924 
-DD	5197647,3540046803 
-DD	1644825,1174423110 
-DD	4144959,3472936911 
-DD	14474460,922761015 
-DD	7960953,1577082462 
-DD	1907997,1191200583 
-DD	5395026,2483066004 
-DD	15461355,4194368250 
-DD	15987699,4227923196 
-DD	7171437,1526750043 
-DD	6184542,2533398423 
-DD	16514043,4261478142 
-DD	6908265,1509972570 
-DD	11711154,2885725356 
-DD	15790320,1006648380 
-DD	3223857,1275087948 
-DD	789516,50332419 
-DD	13948116,889206069 
-DD	13619151,4076925939 
-DD	9211020,587211555 
-DD	14869218,3087055032 
-DD	7697781,1560304989 
-DD	11119017,1778412138 
-DD	4868682,2449511058 
-DD	5723991,3573601749 
-DD	8684676,553656609 
-DD	1118481,1140868164 
-DD	4539717,1358975313 
-DD	1776411,3321939654 
-DD	16119285,2097184125 
-DD	15000804,956315961 
-DD	921102,2197848963 
-DD	7566195,3691044060 
-DD	11184810,2852170410 
-DD	15856113,2080406652 
-DD	14540253,1996519287 
-DD	5855577,1442862678 
-DD	1315860,83887365 
-DD	7105644,452991771 
-DD	9605778,2751505572 
-DD	5526612,352326933 
-DD	13684944,872428596 
-DD	7895160,503324190 
-DD	7368816,469769244 
-DD	14935011,4160813304 
-DD	4802889,1375752786 
-DD	8421504,536879136 
-DD	5263440,335549460 
-DD	10987431,3909151209 
-DD	16185078,3170942397 
-DD	7829367,3707821533 
-DD	9671571,3825263844 
-DD	8816262,2701173153 
-DD	8618883,3758153952 
-DD	2763306,2315291274 
-DD	13092807,4043370993 
-DD	5987163,3590379222 
-DD	15329769,2046851706 
-DD	15658734,3137387451 
-DD	9408399,3808486371 
-DD	65793,1073758272 
-DD	4013373,1325420367 
-ALIGN	16 
-_Camellia_cbc_encrypt	PROC PUBLIC 
-$L_Camellia_cbc_encrypt_begin:: 
-	push	ebp 
-	push	ebx 
-	push	esi 
-	push	edi 
-	mov	ecx,DWORD PTR 28[esp] 
-	cmp	ecx,0 
-	je	$L016enc_out 
-	pushfd 
-	cld 
-	mov	eax,DWORD PTR 24[esp] 
-	mov	ebx,DWORD PTR 28[esp] 
-	mov	edx,DWORD PTR 36[esp] 
-	mov	ebp,DWORD PTR 40[esp] 
-	lea	esi,DWORD PTR [esp-64] 
-	and	esi,-64 
-	lea	edi,DWORD PTR [edx-127] 
-	sub	edi,esi 
-	neg	edi 
-	and	edi,960 
-	sub	esi,edi 
-	mov	edi,DWORD PTR 44[esp] 
-	xchg	esp,esi 
-	add	esp,4 
-	mov	DWORD PTR 20[esp],esi 
-	mov	DWORD PTR 24[esp],eax 
-	mov	DWORD PTR 28[esp],ebx 
-	mov	DWORD PTR 32[esp],ecx 
-	mov	DWORD PTR 36[esp],edx 
-	mov	DWORD PTR 40[esp],ebp 
-	call	$L017pic_point 
-$L017pic_point: 
-	pop	ebp 
-	lea	ebp,DWORD PTR ($LCamellia_SBOX-$L017pic_point)[ebp] 
-	mov	esi,32 
-ALIGN	4 
-$L018prefetch_sbox: 
-	mov	eax,DWORD PTR [ebp] 
-	mov	ebx,DWORD PTR 32[ebp] 
-	mov	ecx,DWORD PTR 64[ebp] 
-	mov	edx,DWORD PTR 96[ebp] 
-	lea	ebp,DWORD PTR 128[ebp] 
-	dec	esi 
-	jnz	$L018prefetch_sbox 
-	mov	eax,DWORD PTR 36[esp] 
-	sub	ebp,4096 
-	mov	esi,DWORD PTR 24[esp] 
-	mov	edx,DWORD PTR 272[eax] 
-	cmp	edi,0 
-	je	$L019DECRYPT 
-	mov	ecx,DWORD PTR 32[esp] 
-	mov	edi,DWORD PTR 40[esp] 
-	shl	edx,6 
-	lea	edx,DWORD PTR [edx*1+eax] 
-	mov	DWORD PTR 16[esp],edx 
-	test	ecx,4294967280 
-	jz	$L020enc_tail 
-	mov	eax,DWORD PTR [edi] 
-	mov	ebx,DWORD PTR 4[edi] 
-ALIGN	4 
-$L021enc_loop: 
-	mov	ecx,DWORD PTR 8[edi] 
-	mov	edx,DWORD PTR 12[edi] 
-	xor	eax,DWORD PTR [esi] 
-	xor	ebx,DWORD PTR 4[esi] 
-	xor	ecx,DWORD PTR 8[esi] 
-	bswap	eax 
-	xor	edx,DWORD PTR 12[esi] 
-	bswap	ebx 
-	mov	edi,DWORD PTR 36[esp] 
-	bswap	ecx 
-	bswap	edx 
-	call	__x86_Camellia_encrypt 
-	mov	esi,DWORD PTR 24[esp] 
-	mov	edi,DWORD PTR 28[esp] 
-	bswap	eax 
-	bswap	ebx 
-	bswap	ecx 
-	mov	DWORD PTR [edi],eax 
-	bswap	edx 
-	mov	DWORD PTR 4[edi],ebx 
-	mov	DWORD PTR 8[edi],ecx 
-	mov	DWORD PTR 12[edi],edx 
-	mov	ecx,DWORD PTR 32[esp] 
-	lea	esi,DWORD PTR 16[esi] 
-	mov	DWORD PTR 24[esp],esi 
-	lea	edx,DWORD PTR 16[edi] 
-	mov	DWORD PTR 28[esp],edx 
-	sub	ecx,16 
-	test	ecx,4294967280 
-	mov	DWORD PTR 32[esp],ecx 
-	jnz	$L021enc_loop 
-	test	ecx,15 
-	jnz	$L020enc_tail 
-	mov	esi,DWORD PTR 40[esp] 
-	mov	ecx,DWORD PTR 8[edi] 
-	mov	edx,DWORD PTR 12[edi] 
-	mov	DWORD PTR [esi],eax 
-	mov	DWORD PTR 4[esi],ebx 
-	mov	DWORD PTR 8[esi],ecx 
-	mov	DWORD PTR 12[esi],edx 
-	mov	esp,DWORD PTR 20[esp] 
-	popfd 
-$L016enc_out: 
-	pop	edi 
-	pop	esi 
-	pop	ebx 
-	pop	ebp 
-	ret 
-	pushfd 
-ALIGN	4 
-$L020enc_tail: 
-	mov	eax,edi 
-	mov	edi,DWORD PTR 28[esp] 
-	push	eax 
-	mov	ebx,16 
-	sub	ebx,ecx 
-	cmp	edi,esi 
-	je	$L022enc_in_place 
-ALIGN	4 
-DD	2767451785 
-	jmp	$L023enc_skip_in_place 
-$L022enc_in_place: 
-	lea	edi,DWORD PTR [ecx*1+edi] 
-$L023enc_skip_in_place: 
-	mov	ecx,ebx 
-	xor	eax,eax 
-ALIGN	4 
-DD	2868115081 
-	pop	edi 
-	mov	esi,DWORD PTR 28[esp] 
-	mov	eax,DWORD PTR [edi] 
-	mov	ebx,DWORD PTR 4[edi] 
-	mov	DWORD PTR 32[esp],16 
-	jmp	$L021enc_loop 
-ALIGN	16 
-$L019DECRYPT: 
-	shl	edx,6 
-	lea	edx,DWORD PTR [edx*1+eax] 
-	mov	DWORD PTR 16[esp],eax 
-	mov	DWORD PTR 36[esp],edx 
-	cmp	esi,DWORD PTR 28[esp] 
-	je	$L024dec_in_place 
-	mov	edi,DWORD PTR 40[esp] 
-	mov	DWORD PTR 44[esp],edi 
-ALIGN	4 
-$L025dec_loop: 
-	mov	eax,DWORD PTR [esi] 
-	mov	ebx,DWORD PTR 4[esi] 
-	mov	ecx,DWORD PTR 8[esi] 
-	bswap	eax 
-	mov	edx,DWORD PTR 12[esi] 
-	bswap	ebx 
-	mov	edi,DWORD PTR 36[esp] 
-	bswap	ecx 
-	bswap	edx 
-	call	__x86_Camellia_decrypt 
-	mov	edi,DWORD PTR 44[esp] 
-	mov	esi,DWORD PTR 32[esp] 
-	bswap	eax 
-	bswap	ebx 
-	bswap	ecx 
-	xor	eax,DWORD PTR [edi] 
-	bswap	edx 
-	xor	ebx,DWORD PTR 4[edi] 
-	xor	ecx,DWORD PTR 8[edi] 
-	xor	edx,DWORD PTR 12[edi] 
-	sub	esi,16 
-	jc	$L026dec_partial 
-	mov	DWORD PTR 32[esp],esi 
-	mov	esi,DWORD PTR 24[esp] 
-	mov	edi,DWORD PTR 28[esp] 
-	mov	DWORD PTR [edi],eax 
-	mov	DWORD PTR 4[edi],ebx 
-	mov	DWORD PTR 8[edi],ecx 
-	mov	DWORD PTR 12[edi],edx 
-	mov	DWORD PTR 44[esp],esi 
-	lea	esi,DWORD PTR 16[esi] 
-	mov	DWORD PTR 24[esp],esi 
-	lea	edi,DWORD PTR 16[edi] 
-	mov	DWORD PTR 28[esp],edi 
-	jnz	$L025dec_loop 
-	mov	edi,DWORD PTR 44[esp] 
-$L027dec_end: 
-	mov	esi,DWORD PTR 40[esp] 
-	mov	eax,DWORD PTR [edi] 
-	mov	ebx,DWORD PTR 4[edi] 
-	mov	ecx,DWORD PTR 8[edi] 
-	mov	edx,DWORD PTR 12[edi] 
-	mov	DWORD PTR [esi],eax 
-	mov	DWORD PTR 4[esi],ebx 
-	mov	DWORD PTR 8[esi],ecx 
-	mov	DWORD PTR 12[esi],edx 
-	jmp	$L028dec_out 
-ALIGN	4 
-$L026dec_partial: 
-	lea	edi,DWORD PTR 44[esp] 
-	mov	DWORD PTR [edi],eax 
-	mov	DWORD PTR 4[edi],ebx 
-	mov	DWORD PTR 8[edi],ecx 
-	mov	DWORD PTR 12[edi],edx 
-	lea	ecx,DWORD PTR 16[esi] 
-	mov	esi,edi 
-	mov	edi,DWORD PTR 28[esp] 
-DD	2767451785 
-	mov	edi,DWORD PTR 24[esp] 
-	jmp	$L027dec_end 
-ALIGN	4 
-$L024dec_in_place: 
-$L029dec_in_place_loop: 
-	lea	edi,DWORD PTR 44[esp] 
-	mov	eax,DWORD PTR [esi] 
-	mov	ebx,DWORD PTR 4[esi] 
-	mov	ecx,DWORD PTR 8[esi] 
-	mov	edx,DWORD PTR 12[esi] 
-	mov	DWORD PTR [edi],eax 
-	mov	DWORD PTR 4[edi],ebx 
-	mov	DWORD PTR 8[edi],ecx 
-	bswap	eax 
-	mov	DWORD PTR 12[edi],edx 
-	bswap	ebx 
-	mov	edi,DWORD PTR 36[esp] 
-	bswap	ecx 
-	bswap	edx 
-	call	__x86_Camellia_decrypt 
-	mov	edi,DWORD PTR 40[esp] 
-	mov	esi,DWORD PTR 28[esp] 
-	bswap	eax 
-	bswap	ebx 
-	bswap	ecx 
-	xor	eax,DWORD PTR [edi] 
-	bswap	edx 
-	xor	ebx,DWORD PTR 4[edi] 
-	xor	ecx,DWORD PTR 8[edi] 
-	xor	edx,DWORD PTR 12[edi] 
-	mov	DWORD PTR [esi],eax 
-	mov	DWORD PTR 4[esi],ebx 
-	mov	DWORD PTR 8[esi],ecx 
-	mov	DWORD PTR 12[esi],edx 
-	lea	esi,DWORD PTR 16[esi] 
-	mov	DWORD PTR 28[esp],esi 
-	lea	esi,DWORD PTR 44[esp] 
-	mov	eax,DWORD PTR [esi] 
-	mov	ebx,DWORD PTR 4[esi] 
-	mov	ecx,DWORD PTR 8[esi] 
-	mov	edx,DWORD PTR 12[esi] 
-	mov	DWORD PTR [edi],eax 
-	mov	DWORD PTR 4[edi],ebx 
-	mov	DWORD PTR 8[edi],ecx 
-	mov	DWORD PTR 12[edi],edx 
-	mov	esi,DWORD PTR 24[esp] 
-	lea	esi,DWORD PTR 16[esi] 
-	mov	DWORD PTR 24[esp],esi 
-	mov	ecx,DWORD PTR 32[esp] 
-	sub	ecx,16 
-	jc	$L030dec_in_place_partial 
-	mov	DWORD PTR 32[esp],ecx 
-	jnz	$L029dec_in_place_loop 
-	jmp	$L028dec_out 
-ALIGN	4 
-$L030dec_in_place_partial: 
-	mov	edi,DWORD PTR 28[esp] 
-	lea	esi,DWORD PTR 44[esp] 
-	lea	edi,DWORD PTR [ecx*1+edi] 
-	lea	esi,DWORD PTR 16[ecx*1+esi] 
-	neg	ecx 
-DD	2767451785 
-ALIGN	4 
-$L028dec_out: 
-	mov	esp,DWORD PTR 20[esp] 
-	popfd 
-	pop	edi 
-	pop	esi 
-	pop	ebx 
-	pop	ebp 
-	ret 
-_Camellia_cbc_encrypt ENDP 
-DB	67,97,109,101,108,108,105,97,32,102,111,114,32,120,56,54 
-DB	32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115 
-DB	115,108,46,111,114,103,62,0 
-.text$	ENDS 
-END 
+IF @Version LT 800
+ECHO MASM version 8.00 or later is strongly recommended.
+ENDIF
+.686
+.MODEL	FLAT
+OPTION	DOTNAME
+IF @Version LT 800
+.text$	SEGMENT PAGE 'CODE'
+ELSE
+.text$	SEGMENT ALIGN(64) 'CODE'
+ENDIF
+ALIGN	16
+_Camellia_EncryptBlock_Rounds	PROC PUBLIC
+$L_Camellia_EncryptBlock_Rounds_begin::
+	push	ebp
+	push	ebx
+	push	esi
+	push	edi
+	mov	eax,DWORD PTR 20[esp]
+	mov	esi,DWORD PTR 24[esp]
+	mov	edi,DWORD PTR 28[esp]
+	mov	ebx,esp
+	sub	esp,28
+	and	esp,-64
+	lea	ecx,DWORD PTR [edi-127]
+	sub	ecx,esp
+	neg	ecx
+	and	ecx,960
+	sub	esp,ecx
+	add	esp,4
+	shl	eax,6
+	lea	eax,DWORD PTR [eax*1+edi]
+	mov	DWORD PTR 20[esp],ebx
+	mov	DWORD PTR 16[esp],eax
+	call	$L000pic_point
+$L000pic_point:
+	pop	ebp
+	lea	ebp,DWORD PTR ($LCamellia_SBOX-$L000pic_point)[ebp]
+	mov	eax,DWORD PTR [esi]
+	mov	ebx,DWORD PTR 4[esi]
+	mov	ecx,DWORD PTR 8[esi]
+	bswap	eax
+	mov	edx,DWORD PTR 12[esi]
+	bswap	ebx
+	bswap	ecx
+	bswap	edx
+	call	__x86_Camellia_encrypt
+	mov	esp,DWORD PTR 20[esp]
+	bswap	eax
+	mov	esi,DWORD PTR 32[esp]
+	bswap	ebx
+	bswap	ecx
+	bswap	edx
+	mov	DWORD PTR [esi],eax
+	mov	DWORD PTR 4[esi],ebx
+	mov	DWORD PTR 8[esi],ecx
+	mov	DWORD PTR 12[esi],edx
+	pop	edi
+	pop	esi
+	pop	ebx
+	pop	ebp
+	ret
+_Camellia_EncryptBlock_Rounds ENDP
+ALIGN	16
+_Camellia_EncryptBlock	PROC PUBLIC
+$L_Camellia_EncryptBlock_begin::
+	mov	eax,128
+	sub	eax,DWORD PTR 4[esp]
+	mov	eax,3
+	adc	eax,0
+	mov	DWORD PTR 4[esp],eax
+	jmp	$L_Camellia_EncryptBlock_Rounds_begin
+_Camellia_EncryptBlock ENDP
+ALIGN	16
+_Camellia_encrypt	PROC PUBLIC
+$L_Camellia_encrypt_begin::
+	push	ebp
+	push	ebx
+	push	esi
+	push	edi
+	mov	esi,DWORD PTR 20[esp]
+	mov	edi,DWORD PTR 28[esp]
+	mov	ebx,esp
+	sub	esp,28
+	and	esp,-64
+	mov	eax,DWORD PTR 272[edi]
+	lea	ecx,DWORD PTR [edi-127]
+	sub	ecx,esp
+	neg	ecx
+	and	ecx,960
+	sub	esp,ecx
+	add	esp,4
+	shl	eax,6
+	lea	eax,DWORD PTR [eax*1+edi]
+	mov	DWORD PTR 20[esp],ebx
+	mov	DWORD PTR 16[esp],eax
+	call	$L001pic_point
+$L001pic_point:
+	pop	ebp
+	lea	ebp,DWORD PTR ($LCamellia_SBOX-$L001pic_point)[ebp]
+	mov	eax,DWORD PTR [esi]
+	mov	ebx,DWORD PTR 4[esi]
+	mov	ecx,DWORD PTR 8[esi]
+	bswap	eax
+	mov	edx,DWORD PTR 12[esi]
+	bswap	ebx
+	bswap	ecx
+	bswap	edx
+	call	__x86_Camellia_encrypt
+	mov	esp,DWORD PTR 20[esp]
+	bswap	eax
+	mov	esi,DWORD PTR 24[esp]
+	bswap	ebx
+	bswap	ecx
+	bswap	edx
+	mov	DWORD PTR [esi],eax
+	mov	DWORD PTR 4[esi],ebx
+	mov	DWORD PTR 8[esi],ecx
+	mov	DWORD PTR 12[esi],edx
+	pop	edi
+	pop	esi
+	pop	ebx
+	pop	ebp
+	ret
+_Camellia_encrypt ENDP
+ALIGN	16
+__x86_Camellia_encrypt	PROC PRIVATE
+	xor	eax,DWORD PTR [edi]
+	xor	ebx,DWORD PTR 4[edi]
+	xor	ecx,DWORD PTR 8[edi]
+	xor	edx,DWORD PTR 12[edi]
+	mov	esi,DWORD PTR 16[edi]
+	mov	DWORD PTR 4[esp],eax
+	mov	DWORD PTR 8[esp],ebx
+	mov	DWORD PTR 12[esp],ecx
+	mov	DWORD PTR 16[esp],edx
+ALIGN	16
+$L002loop:
+	xor	eax,esi
+	xor	ebx,DWORD PTR 20[edi]
+	movzx	esi,ah
+	mov	edx,DWORD PTR 2052[esi*8+ebp]
+	movzx	esi,al
+	xor	edx,DWORD PTR 4[esi*8+ebp]
+	shr	eax,16
+	movzx	esi,bl
+	mov	ecx,DWORD PTR [esi*8+ebp]
+	movzx	esi,ah
+	xor	edx,DWORD PTR [esi*8+ebp]
+	movzx	esi,bh
+	xor	ecx,DWORD PTR 4[esi*8+ebp]
+	shr	ebx,16
+	movzx	eax,al
+	xor	edx,DWORD PTR 2048[eax*8+ebp]
+	movzx	esi,bh
+	mov	eax,DWORD PTR 16[esp]
+	xor	ecx,edx
+	ror	edx,8
+	xor	ecx,DWORD PTR 2048[esi*8+ebp]
+	movzx	esi,bl
+	mov	ebx,DWORD PTR 12[esp]
+	xor	edx,eax
+	xor	ecx,DWORD PTR 2052[esi*8+ebp]
+	mov	esi,DWORD PTR 24[edi]
+	xor	edx,ecx
+	mov	DWORD PTR 16[esp],edx
+	xor	ecx,ebx
+	mov	DWORD PTR 12[esp],ecx
+	xor	ecx,esi
+	xor	edx,DWORD PTR 28[edi]
+	movzx	esi,ch
+	mov	ebx,DWORD PTR 2052[esi*8+ebp]
+	movzx	esi,cl
+	xor	ebx,DWORD PTR 4[esi*8+ebp]
+	shr	ecx,16
+	movzx	esi,dl
+	mov	eax,DWORD PTR [esi*8+ebp]
+	movzx	esi,ch
+	xor	ebx,DWORD PTR [esi*8+ebp]
+	movzx	esi,dh
+	xor	eax,DWORD PTR 4[esi*8+ebp]
+	shr	edx,16
+	movzx	ecx,cl
+	xor	ebx,DWORD PTR 2048[ecx*8+ebp]
+	movzx	esi,dh
+	mov	ecx,DWORD PTR 8[esp]
+	xor	eax,ebx
+	ror	ebx,8
+	xor	eax,DWORD PTR 2048[esi*8+ebp]
+	movzx	esi,dl
+	mov	edx,DWORD PTR 4[esp]
+	xor	ebx,ecx
+	xor	eax,DWORD PTR 2052[esi*8+ebp]
+	mov	esi,DWORD PTR 32[edi]
+	xor	ebx,eax
+	mov	DWORD PTR 8[esp],ebx
+	xor	eax,edx
+	mov	DWORD PTR 4[esp],eax
+	xor	eax,esi
+	xor	ebx,DWORD PTR 36[edi]
+	movzx	esi,ah
+	mov	edx,DWORD PTR 2052[esi*8+ebp]
+	movzx	esi,al
+	xor	edx,DWORD PTR 4[esi*8+ebp]
+	shr	eax,16
+	movzx	esi,bl
+	mov	ecx,DWORD PTR [esi*8+ebp]
+	movzx	esi,ah
+	xor	edx,DWORD PTR [esi*8+ebp]
+	movzx	esi,bh
+	xor	ecx,DWORD PTR 4[esi*8+ebp]
+	shr	ebx,16
+	movzx	eax,al
+	xor	edx,DWORD PTR 2048[eax*8+ebp]
+	movzx	esi,bh
+	mov	eax,DWORD PTR 16[esp]
+	xor	ecx,edx
+	ror	edx,8
+	xor	ecx,DWORD PTR 2048[esi*8+ebp]
+	movzx	esi,bl
+	mov	ebx,DWORD PTR 12[esp]
+	xor	edx,eax
+	xor	ecx,DWORD PTR 2052[esi*8+ebp]
+	mov	esi,DWORD PTR 40[edi]
+	xor	edx,ecx
+	mov	DWORD PTR 16[esp],edx
+	xor	ecx,ebx
+	mov	DWORD PTR 12[esp],ecx
+	xor	ecx,esi
+	xor	edx,DWORD PTR 44[edi]
+	movzx	esi,ch
+	mov	ebx,DWORD PTR 2052[esi*8+ebp]
+	movzx	esi,cl
+	xor	ebx,DWORD PTR 4[esi*8+ebp]
+	shr	ecx,16
+	movzx	esi,dl
+	mov	eax,DWORD PTR [esi*8+ebp]
+	movzx	esi,ch
+	xor	ebx,DWORD PTR [esi*8+ebp]
+	movzx	esi,dh
+	xor	eax,DWORD PTR 4[esi*8+ebp]
+	shr	edx,16
+	movzx	ecx,cl
+	xor	ebx,DWORD PTR 2048[ecx*8+ebp]
+	movzx	esi,dh
+	mov	ecx,DWORD PTR 8[esp]
+	xor	eax,ebx
+	ror	ebx,8
+	xor	eax,DWORD PTR 2048[esi*8+ebp]
+	movzx	esi,dl
+	mov	edx,DWORD PTR 4[esp]
+	xor	ebx,ecx
+	xor	eax,DWORD PTR 2052[esi*8+ebp]
+	mov	esi,DWORD PTR 48[edi]
+	xor	ebx,eax
+	mov	DWORD PTR 8[esp],ebx
+	xor	eax,edx
+	mov	DWORD PTR 4[esp],eax
+	xor	eax,esi
+	xor	ebx,DWORD PTR 52[edi]
+	movzx	esi,ah
+	mov	edx,DWORD PTR 2052[esi*8+ebp]
+	movzx	esi,al
+	xor	edx,DWORD PTR 4[esi*8+ebp]
+	shr	eax,16
+	movzx	esi,bl
+	mov	ecx,DWORD PTR [esi*8+ebp]
+	movzx	esi,ah
+	xor	edx,DWORD PTR [esi*8+ebp]
+	movzx	esi,bh
+	xor	ecx,DWORD PTR 4[esi*8+ebp]
+	shr	ebx,16
+	movzx	eax,al
+	xor	edx,DWORD PTR 2048[eax*8+ebp]
+	movzx	esi,bh
+	mov	eax,DWORD PTR 16[esp]
+	xor	ecx,edx
+	ror	edx,8
+	xor	ecx,DWORD PTR 2048[esi*8+ebp]
+	movzx	esi,bl
+	mov	ebx,DWORD PTR 12[esp]
+	xor	edx,eax
+	xor	ecx,DWORD PTR 2052[esi*8+ebp]
+	mov	esi,DWORD PTR 56[edi]
+	xor	edx,ecx
+	mov	DWORD PTR 16[esp],edx
+	xor	ecx,ebx
+	mov	DWORD PTR 12[esp],ecx
+	xor	ecx,esi
+	xor	edx,DWORD PTR 60[edi]
+	movzx	esi,ch
+	mov	ebx,DWORD PTR 2052[esi*8+ebp]
+	movzx	esi,cl
+	xor	ebx,DWORD PTR 4[esi*8+ebp]
+	shr	ecx,16
+	movzx	esi,dl
+	mov	eax,DWORD PTR [esi*8+ebp]
+	movzx	esi,ch
+	xor	ebx,DWORD PTR [esi*8+ebp]
+	movzx	esi,dh
+	xor	eax,DWORD PTR 4[esi*8+ebp]
+	shr	edx,16
+	movzx	ecx,cl
+	xor	ebx,DWORD PTR 2048[ecx*8+ebp]
+	movzx	esi,dh
+	mov	ecx,DWORD PTR 8[esp]
+	xor	eax,ebx
+	ror	ebx,8
+	xor	eax,DWORD PTR 2048[esi*8+ebp]
+	movzx	esi,dl
+	mov	edx,DWORD PTR 4[esp]
+	xor	ebx,ecx
+	xor	eax,DWORD PTR 2052[esi*8+ebp]
+	mov	esi,DWORD PTR 64[edi]
+	xor	ebx,eax
+	mov	DWORD PTR 8[esp],ebx
+	xor	eax,edx
+	mov	DWORD PTR 4[esp],eax
+	add	edi,64
+	cmp	edi,DWORD PTR 20[esp]
+	je	$L003done
+	and	esi,eax
+	mov	edx,DWORD PTR 16[esp]
+	rol	esi,1
+	mov	ecx,edx
+	xor	ebx,esi
+	or	ecx,DWORD PTR 12[edi]
+	mov	DWORD PTR 8[esp],ebx
+	xor	ecx,DWORD PTR 12[esp]
+	mov	esi,DWORD PTR 4[edi]
+	mov	DWORD PTR 12[esp],ecx
+	or	esi,ebx
+	and	ecx,DWORD PTR 8[edi]
+	xor	eax,esi
+	rol	ecx,1
+	mov	DWORD PTR 4[esp],eax
+	xor	edx,ecx
+	mov	esi,DWORD PTR 16[edi]
+	mov	DWORD PTR 16[esp],edx
+	jmp	$L002loop
+ALIGN	8
+$L003done:
+	mov	ecx,eax
+	mov	edx,ebx
+	mov	eax,DWORD PTR 12[esp]
+	mov	ebx,DWORD PTR 16[esp]
+	xor	eax,esi
+	xor	ebx,DWORD PTR 4[edi]
+	xor	ecx,DWORD PTR 8[edi]
+	xor	edx,DWORD PTR 12[edi]
+	ret
+__x86_Camellia_encrypt ENDP
+ALIGN	16
+_Camellia_DecryptBlock_Rounds	PROC PUBLIC
+$L_Camellia_DecryptBlock_Rounds_begin::
+	push	ebp
+	push	ebx
+	push	esi
+	push	edi
+	mov	eax,DWORD PTR 20[esp]
+	mov	esi,DWORD PTR 24[esp]
+	mov	edi,DWORD PTR 28[esp]
+	mov	ebx,esp
+	sub	esp,28
+	and	esp,-64
+	lea	ecx,DWORD PTR [edi-127]
+	sub	ecx,esp
+	neg	ecx
+	and	ecx,960
+	sub	esp,ecx
+	add	esp,4
+	shl	eax,6
+	mov	DWORD PTR 16[esp],edi
+	lea	edi,DWORD PTR [eax*1+edi]
+	mov	DWORD PTR 20[esp],ebx
+	call	$L004pic_point
+$L004pic_point:
+	pop	ebp
+	lea	ebp,DWORD PTR ($LCamellia_SBOX-$L004pic_point)[ebp]
+	mov	eax,DWORD PTR [esi]
+	mov	ebx,DWORD PTR 4[esi]
+	mov	ecx,DWORD PTR 8[esi]
+	bswap	eax
+	mov	edx,DWORD PTR 12[esi]
+	bswap	ebx
+	bswap	ecx
+	bswap	edx
+	call	__x86_Camellia_decrypt
+	mov	esp,DWORD PTR 20[esp]
+	bswap	eax
+	mov	esi,DWORD PTR 32[esp]
+	bswap	ebx
+	bswap	ecx
+	bswap	edx
+	mov	DWORD PTR [esi],eax
+	mov	DWORD PTR 4[esi],ebx
+	mov	DWORD PTR 8[esi],ecx
+	mov	DWORD PTR 12[esi],edx
+	pop	edi
+	pop	esi
+	pop	ebx
+	pop	ebp
+	ret
+_Camellia_DecryptBlock_Rounds ENDP
+ALIGN	16
+_Camellia_DecryptBlock	PROC PUBLIC
+$L_Camellia_DecryptBlock_begin::
+	mov	eax,128
+	sub	eax,DWORD PTR 4[esp]
+	mov	eax,3
+	adc	eax,0
+	mov	DWORD PTR 4[esp],eax
+	jmp	$L_Camellia_DecryptBlock_Rounds_begin
+_Camellia_DecryptBlock ENDP
+ALIGN	16
+_Camellia_decrypt	PROC PUBLIC
+$L_Camellia_decrypt_begin::
+	push	ebp
+	push	ebx
+	push	esi
+	push	edi
+	mov	esi,DWORD PTR 20[esp]
+	mov	edi,DWORD PTR 28[esp]
+	mov	ebx,esp
+	sub	esp,28
+	and	esp,-64
+	mov	eax,DWORD PTR 272[edi]
+	lea	ecx,DWORD PTR [edi-127]
+	sub	ecx,esp
+	neg	ecx
+	and	ecx,960
+	sub	esp,ecx
+	add	esp,4
+	shl	eax,6
+	mov	DWORD PTR 16[esp],edi
+	lea	edi,DWORD PTR [eax*1+edi]
+	mov	DWORD PTR 20[esp],ebx
+	call	$L005pic_point
+$L005pic_point:
+	pop	ebp
+	lea	ebp,DWORD PTR ($LCamellia_SBOX-$L005pic_point)[ebp]
+	mov	eax,DWORD PTR [esi]
+	mov	ebx,DWORD PTR 4[esi]
+	mov	ecx,DWORD PTR 8[esi]
+	bswap	eax
+	mov	edx,DWORD PTR 12[esi]
+	bswap	ebx
+	bswap	ecx
+	bswap	edx
+	call	__x86_Camellia_decrypt
+	mov	esp,DWORD PTR 20[esp]
+	bswap	eax
+	mov	esi,DWORD PTR 24[esp]
+	bswap	ebx
+	bswap	ecx
+	bswap	edx
+	mov	DWORD PTR [esi],eax
+	mov	DWORD PTR 4[esi],ebx
+	mov	DWORD PTR 8[esi],ecx
+	mov	DWORD PTR 12[esi],edx
+	pop	edi
+	pop	esi
+	pop	ebx
+	pop	ebp
+	ret
+_Camellia_decrypt ENDP
+ALIGN	16
+__x86_Camellia_decrypt	PROC PRIVATE
+	xor	eax,DWORD PTR [edi]
+	xor	ebx,DWORD PTR 4[edi]
+	xor	ecx,DWORD PTR 8[edi]
+	xor	edx,DWORD PTR 12[edi]
+	mov	esi,DWORD PTR [edi-8]
+	mov	DWORD PTR 4[esp],eax
+	mov	DWORD PTR 8[esp],ebx
+	mov	DWORD PTR 12[esp],ecx
+	mov	DWORD PTR 16[esp],edx
+ALIGN	16
+$L006loop:
+	xor	eax,esi
+	xor	ebx,DWORD PTR [edi-4]
+	movzx	esi,ah
+	mov	edx,DWORD PTR 2052[esi*8+ebp]
+	movzx	esi,al
+	xor	edx,DWORD PTR 4[esi*8+ebp]
+	shr	eax,16
+	movzx	esi,bl
+	mov	ecx,DWORD PTR [esi*8+ebp]
+	movzx	esi,ah
+	xor	edx,DWORD PTR [esi*8+ebp]
+	movzx	esi,bh
+	xor	ecx,DWORD PTR 4[esi*8+ebp]
+	shr	ebx,16
+	movzx	eax,al
+	xor	edx,DWORD PTR 2048[eax*8+ebp]
+	movzx	esi,bh
+	mov	eax,DWORD PTR 16[esp]
+	xor	ecx,edx
+	ror	edx,8
+	xor	ecx,DWORD PTR 2048[esi*8+ebp]
+	movzx	esi,bl
+	mov	ebx,DWORD PTR 12[esp]
+	xor	edx,eax
+	xor	ecx,DWORD PTR 2052[esi*8+ebp]
+	mov	esi,DWORD PTR [edi-16]
+	xor	edx,ecx
+	mov	DWORD PTR 16[esp],edx
+	xor	ecx,ebx
+	mov	DWORD PTR 12[esp],ecx
+	xor	ecx,esi
+	xor	edx,DWORD PTR [edi-12]
+	movzx	esi,ch
+	mov	ebx,DWORD PTR 2052[esi*8+ebp]
+	movzx	esi,cl
+	xor	ebx,DWORD PTR 4[esi*8+ebp]
+	shr	ecx,16
+	movzx	esi,dl
+	mov	eax,DWORD PTR [esi*8+ebp]
+	movzx	esi,ch
+	xor	ebx,DWORD PTR [esi*8+ebp]
+	movzx	esi,dh
+	xor	eax,DWORD PTR 4[esi*8+ebp]
+	shr	edx,16
+	movzx	ecx,cl
+	xor	ebx,DWORD PTR 2048[ecx*8+ebp]
+	movzx	esi,dh
+	mov	ecx,DWORD PTR 8[esp]
+	xor	eax,ebx
+	ror	ebx,8
+	xor	eax,DWORD PTR 2048[esi*8+ebp]
+	movzx	esi,dl
+	mov	edx,DWORD PTR 4[esp]
+	xor	ebx,ecx
+	xor	eax,DWORD PTR 2052[esi*8+ebp]
+	mov	esi,DWORD PTR [edi-24]
+	xor	ebx,eax
+	mov	DWORD PTR 8[esp],ebx
+	xor	eax,edx
+	mov	DWORD PTR 4[esp],eax
+	xor	eax,esi
+	xor	ebx,DWORD PTR [edi-20]
+	movzx	esi,ah
+	mov	edx,DWORD PTR 2052[esi*8+ebp]
+	movzx	esi,al
+	xor	edx,DWORD PTR 4[esi*8+ebp]
+	shr	eax,16
+	movzx	esi,bl
+	mov	ecx,DWORD PTR [esi*8+ebp]
+	movzx	esi,ah
+	xor	edx,DWORD PTR [esi*8+ebp]
+	movzx	esi,bh
+	xor	ecx,DWORD PTR 4[esi*8+ebp]
+	shr	ebx,16
+	movzx	eax,al
+	xor	edx,DWORD PTR 2048[eax*8+ebp]
+	movzx	esi,bh
+	mov	eax,DWORD PTR 16[esp]
+	xor	ecx,edx
+	ror	edx,8
+	xor	ecx,DWORD PTR 2048[esi*8+ebp]
+	movzx	esi,bl
+	mov	ebx,DWORD PTR 12[esp]
+	xor	edx,eax
+	xor	ecx,DWORD PTR 2052[esi*8+ebp]
+	mov	esi,DWORD PTR [edi-32]
+	xor	edx,ecx
+	mov	DWORD PTR 16[esp],edx
+	xor	ecx,ebx
+	mov	DWORD PTR 12[esp],ecx
+	xor	ecx,esi
+	xor	edx,DWORD PTR [edi-28]
+	movzx	esi,ch
+	mov	ebx,DWORD PTR 2052[esi*8+ebp]
+	movzx	esi,cl
+	xor	ebx,DWORD PTR 4[esi*8+ebp]
+	shr	ecx,16
+	movzx	esi,dl
+	mov	eax,DWORD PTR [esi*8+ebp]
+	movzx	esi,ch
+	xor	ebx,DWORD PTR [esi*8+ebp]
+	movzx	esi,dh
+	xor	eax,DWORD PTR 4[esi*8+ebp]
+	shr	edx,16
+	movzx	ecx,cl
+	xor	ebx,DWORD PTR 2048[ecx*8+ebp]
+	movzx	esi,dh
+	mov	ecx,DWORD PTR 8[esp]
+	xor	eax,ebx
+	ror	ebx,8
+	xor	eax,DWORD PTR 2048[esi*8+ebp]
+	movzx	esi,dl
+	mov	edx,DWORD PTR 4[esp]
+	xor	ebx,ecx
+	xor	eax,DWORD PTR 2052[esi*8+ebp]
+	mov	esi,DWORD PTR [edi-40]
+	xor	ebx,eax
+	mov	DWORD PTR 8[esp],ebx
+	xor	eax,edx
+	mov	DWORD PTR 4[esp],eax
+	xor	eax,esi
+	xor	ebx,DWORD PTR [edi-36]
+	movzx	esi,ah
+	mov	edx,DWORD PTR 2052[esi*8+ebp]
+	movzx	esi,al
+	xor	edx,DWORD PTR 4[esi*8+ebp]
+	shr	eax,16
+	movzx	esi,bl
+	mov	ecx,DWORD PTR [esi*8+ebp]
+	movzx	esi,ah
+	xor	edx,DWORD PTR [esi*8+ebp]
+	movzx	esi,bh
+	xor	ecx,DWORD PTR 4[esi*8+ebp]
+	shr	ebx,16
+	movzx	eax,al
+	xor	edx,DWORD PTR 2048[eax*8+ebp]
+	movzx	esi,bh
+	mov	eax,DWORD PTR 16[esp]
+	xor	ecx,edx
+	ror	edx,8
+	xor	ecx,DWORD PTR 2048[esi*8+ebp]
+	movzx	esi,bl
+	mov	ebx,DWORD PTR 12[esp]
+	xor	edx,eax
+	xor	ecx,DWORD PTR 2052[esi*8+ebp]
+	mov	esi,DWORD PTR [edi-48]
+	xor	edx,ecx
+	mov	DWORD PTR 16[esp],edx
+	xor	ecx,ebx
+	mov	DWORD PTR 12[esp],ecx
+	xor	ecx,esi
+	xor	edx,DWORD PTR [edi-44]
+	movzx	esi,ch
+	mov	ebx,DWORD PTR 2052[esi*8+ebp]
+	movzx	esi,cl
+	xor	ebx,DWORD PTR 4[esi*8+ebp]
+	shr	ecx,16
+	movzx	esi,dl
+	mov	eax,DWORD PTR [esi*8+ebp]
+	movzx	esi,ch
+	xor	ebx,DWORD PTR [esi*8+ebp]
+	movzx	esi,dh
+	xor	eax,DWORD PTR 4[esi*8+ebp]
+	shr	edx,16
+	movzx	ecx,cl
+	xor	ebx,DWORD PTR 2048[ecx*8+ebp]
+	movzx	esi,dh
+	mov	ecx,DWORD PTR 8[esp]
+	xor	eax,ebx
+	ror	ebx,8
+	xor	eax,DWORD PTR 2048[esi*8+ebp]
+	movzx	esi,dl
+	mov	edx,DWORD PTR 4[esp]
+	xor	ebx,ecx
+	xor	eax,DWORD PTR 2052[esi*8+ebp]
+	mov	esi,DWORD PTR [edi-56]
+	xor	ebx,eax
+	mov	DWORD PTR 8[esp],ebx
+	xor	eax,edx
+	mov	DWORD PTR 4[esp],eax
+	sub	edi,64
+	cmp	edi,DWORD PTR 20[esp]
+	je	$L007done
+	and	esi,eax
+	mov	edx,DWORD PTR 16[esp]
+	rol	esi,1
+	mov	ecx,edx
+	xor	ebx,esi
+	or	ecx,DWORD PTR 4[edi]
+	mov	DWORD PTR 8[esp],ebx
+	xor	ecx,DWORD PTR 12[esp]
+	mov	esi,DWORD PTR 12[edi]
+	mov	DWORD PTR 12[esp],ecx
+	or	esi,ebx
+	and	ecx,DWORD PTR [edi]
+	xor	eax,esi
+	rol	ecx,1
+	mov	DWORD PTR 4[esp],eax
+	xor	edx,ecx
+	mov	esi,DWORD PTR [edi-8]
+	mov	DWORD PTR 16[esp],edx
+	jmp	$L006loop
+ALIGN	8
+$L007done:
+	mov	ecx,eax
+	mov	edx,ebx
+	mov	eax,DWORD PTR 12[esp]
+	mov	ebx,DWORD PTR 16[esp]
+	xor	ecx,esi
+	xor	edx,DWORD PTR 12[edi]
+	xor	eax,DWORD PTR [edi]
+	xor	ebx,DWORD PTR 4[edi]
+	ret
+__x86_Camellia_decrypt ENDP
+ALIGN	16
+_Camellia_Ekeygen	PROC PUBLIC
+$L_Camellia_Ekeygen_begin::
+	push	ebp
+	push	ebx
+	push	esi
+	push	edi
+	sub	esp,16
+	mov	ebp,DWORD PTR 36[esp]
+	mov	esi,DWORD PTR 40[esp]
+	mov	edi,DWORD PTR 44[esp]
+	mov	eax,DWORD PTR [esi]
+	mov	ebx,DWORD PTR 4[esi]
+	mov	ecx,DWORD PTR 8[esi]
+	mov	edx,DWORD PTR 12[esi]
+	bswap	eax
+	bswap	ebx
+	bswap	ecx
+	bswap	edx
+	mov	DWORD PTR [edi],eax
+	mov	DWORD PTR 4[edi],ebx
+	mov	DWORD PTR 8[edi],ecx
+	mov	DWORD PTR 12[edi],edx
+	cmp	ebp,128
+	je	$L0081st128
+	mov	eax,DWORD PTR 16[esi]
+	mov	ebx,DWORD PTR 20[esi]
+	cmp	ebp,192
+	je	$L0091st192
+	mov	ecx,DWORD PTR 24[esi]
+	mov	edx,DWORD PTR 28[esi]
+	jmp	$L0101st256
+ALIGN	4
+$L0091st192:
+	mov	ecx,eax
+	mov	edx,ebx
+	not	ecx
+	not	edx
+ALIGN	4
+$L0101st256:
+	bswap	eax
+	bswap	ebx
+	bswap	ecx
+	bswap	edx
+	mov	DWORD PTR 32[edi],eax
+	mov	DWORD PTR 36[edi],ebx
+	mov	DWORD PTR 40[edi],ecx
+	mov	DWORD PTR 44[edi],edx
+	xor	eax,DWORD PTR [edi]
+	xor	ebx,DWORD PTR 4[edi]
+	xor	ecx,DWORD PTR 8[edi]
+	xor	edx,DWORD PTR 12[edi]
+ALIGN	4
+$L0081st128:
+	call	$L011pic_point
+$L011pic_point:
+	pop	ebp
+	lea	ebp,DWORD PTR ($LCamellia_SBOX-$L011pic_point)[ebp]
+	lea	edi,DWORD PTR ($LCamellia_SIGMA-$LCamellia_SBOX)[ebp]
+	mov	esi,DWORD PTR [edi]
+	mov	DWORD PTR [esp],eax
+	mov	DWORD PTR 4[esp],ebx
+	mov	DWORD PTR 8[esp],ecx
+	mov	DWORD PTR 12[esp],edx
+	xor	eax,esi
+	xor	ebx,DWORD PTR 4[edi]
+	movzx	esi,ah
+	mov	edx,DWORD PTR 2052[esi*8+ebp]
+	movzx	esi,al
+	xor	edx,DWORD PTR 4[esi*8+ebp]
+	shr	eax,16
+	movzx	esi,bl
+	mov	ecx,DWORD PTR [esi*8+ebp]
+	movzx	esi,ah
+	xor	edx,DWORD PTR [esi*8+ebp]
+	movzx	esi,bh
+	xor	ecx,DWORD PTR 4[esi*8+ebp]
+	shr	ebx,16
+	movzx	eax,al
+	xor	edx,DWORD PTR 2048[eax*8+ebp]
+	movzx	esi,bh
+	mov	eax,DWORD PTR 12[esp]
+	xor	ecx,edx
+	ror	edx,8
+	xor	ecx,DWORD PTR 2048[esi*8+ebp]
+	movzx	esi,bl
+	mov	ebx,DWORD PTR 8[esp]
+	xor	edx,eax
+	xor	ecx,DWORD PTR 2052[esi*8+ebp]
+	mov	esi,DWORD PTR 8[edi]
+	xor	edx,ecx
+	mov	DWORD PTR 12[esp],edx
+	xor	ecx,ebx
+	mov	DWORD PTR 8[esp],ecx
+	xor	ecx,esi
+	xor	edx,DWORD PTR 12[edi]
+	movzx	esi,ch
+	mov	ebx,DWORD PTR 2052[esi*8+ebp]
+	movzx	esi,cl
+	xor	ebx,DWORD PTR 4[esi*8+ebp]
+	shr	ecx,16
+	movzx	esi,dl
+	mov	eax,DWORD PTR [esi*8+ebp]
+	movzx	esi,ch
+	xor	ebx,DWORD PTR [esi*8+ebp]
+	movzx	esi,dh
+	xor	eax,DWORD PTR 4[esi*8+ebp]
+	shr	edx,16
+	movzx	ecx,cl
+	xor	ebx,DWORD PTR 2048[ecx*8+ebp]
+	movzx	esi,dh
+	mov	ecx,DWORD PTR 4[esp]
+	xor	eax,ebx
+	ror	ebx,8
+	xor	eax,DWORD PTR 2048[esi*8+ebp]
+	movzx	esi,dl
+	mov	edx,DWORD PTR [esp]
+	xor	ebx,ecx
+	xor	eax,DWORD PTR 2052[esi*8+ebp]
+	mov	esi,DWORD PTR 16[edi]
+	xor	ebx,eax
+	mov	DWORD PTR 4[esp],ebx
+	xor	eax,edx
+	mov	DWORD PTR [esp],eax
+	mov	ecx,DWORD PTR 8[esp]
+	mov	edx,DWORD PTR 12[esp]
+	mov	esi,DWORD PTR 44[esp]
+	xor	eax,DWORD PTR [esi]
+	xor	ebx,DWORD PTR 4[esi]
+	xor	ecx,DWORD PTR 8[esi]
+	xor	edx,DWORD PTR 12[esi]
+	mov	esi,DWORD PTR 16[edi]
+	mov	DWORD PTR [esp],eax
+	mov	DWORD PTR 4[esp],ebx
+	mov	DWORD PTR 8[esp],ecx
+	mov	DWORD PTR 12[esp],edx
+	xor	eax,esi
+	xor	ebx,DWORD PTR 20[edi]
+	movzx	esi,ah
+	mov	edx,DWORD PTR 2052[esi*8+ebp]
+	movzx	esi,al
+	xor	edx,DWORD PTR 4[esi*8+ebp]
+	shr	eax,16
+	movzx	esi,bl
+	mov	ecx,DWORD PTR [esi*8+ebp]
+	movzx	esi,ah
+	xor	edx,DWORD PTR [esi*8+ebp]
+	movzx	esi,bh
+	xor	ecx,DWORD PTR 4[esi*8+ebp]
+	shr	ebx,16
+	movzx	eax,al
+	xor	edx,DWORD PTR 2048[eax*8+ebp]
+	movzx	esi,bh
+	mov	eax,DWORD PTR 12[esp]
+	xor	ecx,edx
+	ror	edx,8
+	xor	ecx,DWORD PTR 2048[esi*8+ebp]
+	movzx	esi,bl
+	mov	ebx,DWORD PTR 8[esp]
+	xor	edx,eax
+	xor	ecx,DWORD PTR 2052[esi*8+ebp]
+	mov	esi,DWORD PTR 24[edi]
+	xor	edx,ecx
+	mov	DWORD PTR 12[esp],edx
+	xor	ecx,ebx
+	mov	DWORD PTR 8[esp],ecx
+	xor	ecx,esi
+	xor	edx,DWORD PTR 28[edi]
+	movzx	esi,ch
+	mov	ebx,DWORD PTR 2052[esi*8+ebp]
+	movzx	esi,cl
+	xor	ebx,DWORD PTR 4[esi*8+ebp]
+	shr	ecx,16
+	movzx	esi,dl
+	mov	eax,DWORD PTR [esi*8+ebp]
+	movzx	esi,ch
+	xor	ebx,DWORD PTR [esi*8+ebp]
+	movzx	esi,dh
+	xor	eax,DWORD PTR 4[esi*8+ebp]
+	shr	edx,16
+	movzx	ecx,cl
+	xor	ebx,DWORD PTR 2048[ecx*8+ebp]
+	movzx	esi,dh
+	mov	ecx,DWORD PTR 4[esp]
+	xor	eax,ebx
+	ror	ebx,8
+	xor	eax,DWORD PTR 2048[esi*8+ebp]
+	movzx	esi,dl
+	mov	edx,DWORD PTR [esp]
+	xor	ebx,ecx
+	xor	eax,DWORD PTR 2052[esi*8+ebp]
+	mov	esi,DWORD PTR 32[edi]
+	xor	ebx,eax
+	mov	DWORD PTR 4[esp],ebx
+	xor	eax,edx
+	mov	DWORD PTR [esp],eax
+	mov	ecx,DWORD PTR 8[esp]
+	mov	edx,DWORD PTR 12[esp]
+	mov	esi,DWORD PTR 36[esp]
+	cmp	esi,128
+	jne	$L0122nd256
+	mov	edi,DWORD PTR 44[esp]
+	lea	edi,DWORD PTR 128[edi]
+	mov	DWORD PTR [edi-112],eax
+	mov	DWORD PTR [edi-108],ebx
+	mov	DWORD PTR [edi-104],ecx
+	mov	DWORD PTR [edi-100],edx
+	mov	ebp,eax
+	shl	eax,15
+	mov	esi,ebx
+	shr	esi,17
+	shl	ebx,15
+	or	eax,esi
+	mov	esi,ecx
+	shl	ecx,15
+	mov	DWORD PTR [edi-80],eax
+	shr	esi,17
+	or	ebx,esi
+	shr	ebp,17
+	mov	esi,edx
+	shr	esi,17
+	mov	DWORD PTR [edi-76],ebx
+	shl	edx,15
+	or	ecx,esi
+	or	edx,ebp
+	mov	DWORD PTR [edi-72],ecx
+	mov	DWORD PTR [edi-68],edx
+	mov	ebp,eax
+	shl	eax,15
+	mov	esi,ebx
+	shr	esi,17
+	shl	ebx,15
+	or	eax,esi
+	mov	esi,ecx
+	shl	ecx,15
+	mov	DWORD PTR [edi-64],eax
+	shr	esi,17
+	or	ebx,esi
+	shr	ebp,17
+	mov	esi,edx
+	shr	esi,17
+	mov	DWORD PTR [edi-60],ebx
+	shl	edx,15
+	or	ecx,esi
+	or	edx,ebp
+	mov	DWORD PTR [edi-56],ecx
+	mov	DWORD PTR [edi-52],edx
+	mov	ebp,eax
+	shl	eax,15
+	mov	esi,ebx
+	shr	esi,17
+	shl	ebx,15
+	or	eax,esi
+	mov	esi,ecx
+	shl	ecx,15
+	mov	DWORD PTR [edi-32],eax
+	shr	esi,17
+	or	ebx,esi
+	shr	ebp,17
+	mov	esi,edx
+	shr	esi,17
+	mov	DWORD PTR [edi-28],ebx
+	shl	edx,15
+	or	ecx,esi
+	or	edx,ebp
+	mov	ebp,eax
+	shl	eax,15
+	mov	esi,ebx
+	shr	esi,17
+	shl	ebx,15
+	or	eax,esi
+	mov	esi,ecx
+	shl	ecx,15
+	mov	DWORD PTR [edi-16],eax
+	shr	esi,17
+	or	ebx,esi
+	shr	ebp,17
+	mov	esi,edx
+	shr	esi,17
+	mov	DWORD PTR [edi-12],ebx
+	shl	edx,15
+	or	ecx,esi
+	or	edx,ebp
+	mov	DWORD PTR [edi-8],ecx
+	mov	DWORD PTR [edi-4],edx
+	mov	ebp,ebx
+	shl	ebx,2
+	mov	esi,ecx
+	shr	esi,30
+	shl	ecx,2
+	or	ebx,esi
+	mov	esi,edx
+	shl	edx,2
+	mov	DWORD PTR 32[edi],ebx
+	shr	esi,30
+	or	ecx,esi
+	shr	ebp,30
+	mov	esi,eax
+	shr	esi,30
+	mov	DWORD PTR 36[edi],ecx
+	shl	eax,2
+	or	edx,esi
+	or	eax,ebp
+	mov	DWORD PTR 40[edi],edx
+	mov	DWORD PTR 44[edi],eax
+	mov	ebp,ebx
+	shl	ebx,17
+	mov	esi,ecx
+	shr	esi,15
+	shl	ecx,17
+	or	ebx,esi
+	mov	esi,edx
+	shl	edx,17
+	mov	DWORD PTR 64[edi],ebx
+	shr	esi,15
+	or	ecx,esi
+	shr	ebp,15
+	mov	esi,eax
+	shr	esi,15
+	mov	DWORD PTR 68[edi],ecx
+	shl	eax,17
+	or	edx,esi
+	or	eax,ebp
+	mov	DWORD PTR 72[edi],edx
+	mov	DWORD PTR 76[edi],eax
+	mov	ebx,DWORD PTR [edi-128]
+	mov	ecx,DWORD PTR [edi-124]
+	mov	edx,DWORD PTR [edi-120]
+	mov	eax,DWORD PTR [edi-116]
+	mov	ebp,ebx
+	shl	ebx,15
+	mov	esi,ecx
+	shr	esi,17
+	shl	ecx,15
+	or	ebx,esi
+	mov	esi,edx
+	shl	edx,15
+	mov	DWORD PTR [edi-96],ebx
+	shr	esi,17
+	or	ecx,esi
+	shr	ebp,17
+	mov	esi,eax
+	shr	esi,17
+	mov	DWORD PTR [edi-92],ecx
+	shl	eax,15
+	or	edx,esi
+	or	eax,ebp
+	mov	DWORD PTR [edi-88],edx
+	mov	DWORD PTR [edi-84],eax
+	mov	ebp,ebx
+	shl	ebx,30
+	mov	esi,ecx
+	shr	esi,2
+	shl	ecx,30
+	or	ebx,esi
+	mov	esi,edx
+	shl	edx,30
+	mov	DWORD PTR [edi-48],ebx
+	shr	esi,2
+	or	ecx,esi
+	shr	ebp,2
+	mov	esi,eax
+	shr	esi,2
+	mov	DWORD PTR [edi-44],ecx
+	shl	eax,30
+	or	edx,esi
+	or	eax,ebp
+	mov	DWORD PTR [edi-40],edx
+	mov	DWORD PTR [edi-36],eax
+	mov	ebp,ebx
+	shl	ebx,15
+	mov	esi,ecx
+	shr	esi,17
+	shl	ecx,15
+	or	ebx,esi
+	mov	esi,edx
+	shl	edx,15
+	shr	esi,17
+	or	ecx,esi
+	shr	ebp,17
+	mov	esi,eax
+	shr	esi,17
+	shl	eax,15
+	or	edx,esi
+	or	eax,ebp
+	mov	DWORD PTR [edi-24],edx
+	mov	DWORD PTR [edi-20],eax
+	mov	ebp,ebx
+	shl	ebx,17
+	mov	esi,ecx
+	shr	esi,15
+	shl	ecx,17
+	or	ebx,esi
+	mov	esi,edx
+	shl	edx,17
+	mov	DWORD PTR [edi],ebx
+	shr	esi,15
+	or	ecx,esi
+	shr	ebp,15
+	mov	esi,eax
+	shr	esi,15
+	mov	DWORD PTR 4[edi],ecx
+	shl	eax,17
+	or	edx,esi
+	or	eax,ebp
+	mov	DWORD PTR 8[edi],edx
+	mov	DWORD PTR 12[edi],eax
+	mov	ebp,ebx
+	shl	ebx,17
+	mov	esi,ecx
+	shr	esi,15
+	shl	ecx,17
+	or	ebx,esi
+	mov	esi,edx
+	shl	edx,17
+	mov	DWORD PTR 16[edi],ebx
+	shr	esi,15
+	or	ecx,esi
+	shr	ebp,15
+	mov	esi,eax
+	shr	esi,15
+	mov	DWORD PTR 20[edi],ecx
+	shl	eax,17
+	or	edx,esi
+	or	eax,ebp
+	mov	DWORD PTR 24[edi],edx
+	mov	DWORD PTR 28[edi],eax
+	mov	ebp,ebx
+	shl	ebx,17
+	mov	esi,ecx
+	shr	esi,15
+	shl	ecx,17
+	or	ebx,esi
+	mov	esi,edx
+	shl	edx,17
+	mov	DWORD PTR 48[edi],ebx
+	shr	esi,15
+	or	ecx,esi
+	shr	ebp,15
+	mov	esi,eax
+	shr	esi,15
+	mov	DWORD PTR 52[edi],ecx
+	shl	eax,17
+	or	edx,esi
+	or	eax,ebp
+	mov	DWORD PTR 56[edi],edx
+	mov	DWORD PTR 60[edi],eax
+	mov	eax,3
+	jmp	$L013done
+ALIGN	16
+$L0122nd256:
+	mov	esi,DWORD PTR 44[esp]
+	mov	DWORD PTR 48[esi],eax
+	mov	DWORD PTR 52[esi],ebx
+	mov	DWORD PTR 56[esi],ecx
+	mov	DWORD PTR 60[esi],edx
+	xor	eax,DWORD PTR 32[esi]
+	xor	ebx,DWORD PTR 36[esi]
+	xor	ecx,DWORD PTR 40[esi]
+	xor	edx,DWORD PTR 44[esi]
+	mov	esi,DWORD PTR 32[edi]
+	mov	DWORD PTR [esp],eax
+	mov	DWORD PTR 4[esp],ebx
+	mov	DWORD PTR 8[esp],ecx
+	mov	DWORD PTR 12[esp],edx
+	xor	eax,esi
+	xor	ebx,DWORD PTR 36[edi]
+	movzx	esi,ah
+	mov	edx,DWORD PTR 2052[esi*8+ebp]
+	movzx	esi,al
+	xor	edx,DWORD PTR 4[esi*8+ebp]
+	shr	eax,16
+	movzx	esi,bl
+	mov	ecx,DWORD PTR [esi*8+ebp]
+	movzx	esi,ah
+	xor	edx,DWORD PTR [esi*8+ebp]
+	movzx	esi,bh
+	xor	ecx,DWORD PTR 4[esi*8+ebp]
+	shr	ebx,16
+	movzx	eax,al
+	xor	edx,DWORD PTR 2048[eax*8+ebp]
+	movzx	esi,bh
+	mov	eax,DWORD PTR 12[esp]
+	xor	ecx,edx
+	ror	edx,8
+	xor	ecx,DWORD PTR 2048[esi*8+ebp]
+	movzx	esi,bl
+	mov	ebx,DWORD PTR 8[esp]
+	xor	edx,eax
+	xor	ecx,DWORD PTR 2052[esi*8+ebp]
+	mov	esi,DWORD PTR 40[edi]
+	xor	edx,ecx
+	mov	DWORD PTR 12[esp],edx
+	xor	ecx,ebx
+	mov	DWORD PTR 8[esp],ecx
+	xor	ecx,esi
+	xor	edx,DWORD PTR 44[edi]
+	movzx	esi,ch
+	mov	ebx,DWORD PTR 2052[esi*8+ebp]
+	movzx	esi,cl
+	xor	ebx,DWORD PTR 4[esi*8+ebp]
+	shr	ecx,16
+	movzx	esi,dl
+	mov	eax,DWORD PTR [esi*8+ebp]
+	movzx	esi,ch
+	xor	ebx,DWORD PTR [esi*8+ebp]
+	movzx	esi,dh
+	xor	eax,DWORD PTR 4[esi*8+ebp]
+	shr	edx,16
+	movzx	ecx,cl
+	xor	ebx,DWORD PTR 2048[ecx*8+ebp]
+	movzx	esi,dh
+	mov	ecx,DWORD PTR 4[esp]
+	xor	eax,ebx
+	ror	ebx,8
+	xor	eax,DWORD PTR 2048[esi*8+ebp]
+	movzx	esi,dl
+	mov	edx,DWORD PTR [esp]
+	xor	ebx,ecx
+	xor	eax,DWORD PTR 2052[esi*8+ebp]
+	mov	esi,DWORD PTR 48[edi]
+	xor	ebx,eax
+	mov	DWORD PTR 4[esp],ebx
+	xor	eax,edx
+	mov	DWORD PTR [esp],eax
+	mov	ecx,DWORD PTR 8[esp]
+	mov	edx,DWORD PTR 12[esp]
+	mov	edi,DWORD PTR 44[esp]
+	lea	edi,DWORD PTR 128[edi]
+	mov	DWORD PTR [edi-112],eax
+	mov	DWORD PTR [edi-108],ebx
+	mov	DWORD PTR [edi-104],ecx
+	mov	DWORD PTR [edi-100],edx
+	mov	ebp,eax
+	shl	eax,30
+	mov	esi,ebx
+	shr	esi,2
+	shl	ebx,30
+	or	eax,esi
+	mov	esi,ecx
+	shl	ecx,30
+	mov	DWORD PTR [edi-48],eax
+	shr	esi,2
+	or	ebx,esi
+	shr	ebp,2
+	mov	esi,edx
+	shr	esi,2
+	mov	DWORD PTR [edi-44],ebx
+	shl	edx,30
+	or	ecx,esi
+	or	edx,ebp
+	mov	DWORD PTR [edi-40],ecx
+	mov	DWORD PTR [edi-36],edx
+	mov	ebp,eax
+	shl	eax,30
+	mov	esi,ebx
+	shr	esi,2
+	shl	ebx,30
+	or	eax,esi
+	mov	esi,ecx
+	shl	ecx,30
+	mov	DWORD PTR 32[edi],eax
+	shr	esi,2
+	or	ebx,esi
+	shr	ebp,2
+	mov	esi,edx
+	shr	esi,2
+	mov	DWORD PTR 36[edi],ebx
+	shl	edx,30
+	or	ecx,esi
+	or	edx,ebp
+	mov	DWORD PTR 40[edi],ecx
+	mov	DWORD PTR 44[edi],edx
+	mov	ebp,ebx
+	shl	ebx,19
+	mov	esi,ecx
+	shr	esi,13
+	shl	ecx,19
+	or	ebx,esi
+	mov	esi,edx
+	shl	edx,19
+	mov	DWORD PTR 128[edi],ebx
+	shr	esi,13
+	or	ecx,esi
+	shr	ebp,13
+	mov	esi,eax
+	shr	esi,13
+	mov	DWORD PTR 132[edi],ecx
+	shl	eax,19
+	or	edx,esi
+	or	eax,ebp
+	mov	DWORD PTR 136[edi],edx
+	mov	DWORD PTR 140[edi],eax
+	mov	ebx,DWORD PTR [edi-96]
+	mov	ecx,DWORD PTR [edi-92]
+	mov	edx,DWORD PTR [edi-88]
+	mov	eax,DWORD PTR [edi-84]
+	mov	ebp,ebx
+	shl	ebx,15
+	mov	esi,ecx
+	shr	esi,17
+	shl	ecx,15
+	or	ebx,esi
+	mov	esi,edx
+	shl	edx,15
+	mov	DWORD PTR [edi-96],ebx
+	shr	esi,17
+	or	ecx,esi
+	shr	ebp,17
+	mov	esi,eax
+	shr	esi,17
+	mov	DWORD PTR [edi-92],ecx
+	shl	eax,15
+	or	edx,esi
+	or	eax,ebp
+	mov	DWORD PTR [edi-88],edx
+	mov	DWORD PTR [edi-84],eax
+	mov	ebp,ebx
+	shl	ebx,15
+	mov	esi,ecx
+	shr	esi,17
+	shl	ecx,15
+	or	ebx,esi
+	mov	esi,edx
+	shl	edx,15
+	mov	DWORD PTR [edi-64],ebx
+	shr	esi,17
+	or	ecx,esi
+	shr	ebp,17
+	mov	esi,eax
+	shr	esi,17
+	mov	DWORD PTR [edi-60],ecx
+	shl	eax,15
+	or	edx,esi
+	or	eax,ebp
+	mov	DWORD PTR [edi-56],edx
+	mov	DWORD PTR [edi-52],eax
+	mov	ebp,ebx
+	shl	ebx,30
+	mov	esi,ecx
+	shr	esi,2
+	shl	ecx,30
+	or	ebx,esi
+	mov	esi,edx
+	shl	edx,30
+	mov	DWORD PTR 16[edi],ebx
+	shr	esi,2
+	or	ecx,esi
+	shr	ebp,2
+	mov	esi,eax
+	shr	esi,2
+	mov	DWORD PTR 20[edi],ecx
+	shl	eax,30
+	or	edx,esi
+	or	eax,ebp
+	mov	DWORD PTR 24[edi],edx
+	mov	DWORD PTR 28[edi],eax
+	mov	ebp,ecx
+	shl	ecx,2
+	mov	esi,edx
+	shr	esi,30
+	shl	edx,2
+	or	ecx,esi
+	mov	esi,eax
+	shl	eax,2
+	mov	DWORD PTR 80[edi],ecx
+	shr	esi,30
+	or	edx,esi
+	shr	ebp,30
+	mov	esi,ebx
+	shr	esi,30
+	mov	DWORD PTR 84[edi],edx
+	shl	ebx,2
+	or	eax,esi
+	or	ebx,ebp
+	mov	DWORD PTR 88[edi],eax
+	mov	DWORD PTR 92[edi],ebx
+	mov	ecx,DWORD PTR [edi-80]
+	mov	edx,DWORD PTR [edi-76]
+	mov	eax,DWORD PTR [edi-72]
+	mov	ebx,DWORD PTR [edi-68]
+	mov	ebp,ecx
+	shl	ecx,15
+	mov	esi,edx
+	shr	esi,17
+	shl	edx,15
+	or	ecx,esi
+	mov	esi,eax
+	shl	eax,15
+	mov	DWORD PTR [edi-80],ecx
+	shr	esi,17
+	or	edx,esi
+	shr	ebp,17
+	mov	esi,ebx
+	shr	esi,17
+	mov	DWORD PTR [edi-76],edx
+	shl	ebx,15
+	or	eax,esi
+	or	ebx,ebp
+	mov	DWORD PTR [edi-72],eax
+	mov	DWORD PTR [edi-68],ebx
+	mov	ebp,ecx
+	shl	ecx,30
+	mov	esi,edx
+	shr	esi,2
+	shl	edx,30
+	or	ecx,esi
+	mov	esi,eax
+	shl	eax,30
+	mov	DWORD PTR [edi-16],ecx
+	shr	esi,2
+	or	edx,esi
+	shr	ebp,2
+	mov	esi,ebx
+	shr	esi,2
+	mov	DWORD PTR [edi-12],edx
+	shl	ebx,30
+	or	eax,esi
+	or	ebx,ebp
+	mov	DWORD PTR [edi-8],eax
+	mov	DWORD PTR [edi-4],ebx
+	mov	DWORD PTR 64[edi],edx
+	mov	DWORD PTR 68[edi],eax
+	mov	DWORD PTR 72[edi],ebx
+	mov	DWORD PTR 76[edi],ecx
+	mov	ebp,edx
+	shl	edx,17
+	mov	esi,eax
+	shr	esi,15
+	shl	eax,17
+	or	edx,esi
+	mov	esi,ebx
+	shl	ebx,17
+	mov	DWORD PTR 96[edi],edx
+	shr	esi,15
+	or	eax,esi
+	shr	ebp,15
+	mov	esi,ecx
+	shr	esi,15
+	mov	DWORD PTR 100[edi],eax
+	shl	ecx,17
+	or	ebx,esi
+	or	ecx,ebp
+	mov	DWORD PTR 104[edi],ebx
+	mov	DWORD PTR 108[edi],ecx
+	mov	edx,DWORD PTR [edi-128]
+	mov	eax,DWORD PTR [edi-124]
+	mov	ebx,DWORD PTR [edi-120]
+	mov	ecx,DWORD PTR [edi-116]
+	mov	ebp,eax
+	shl	eax,13
+	mov	esi,ebx
+	shr	esi,19
+	shl	ebx,13
+	or	eax,esi
+	mov	esi,ecx
+	shl	ecx,13
+	mov	DWORD PTR [edi-32],eax
+	shr	esi,19
+	or	ebx,esi
+	shr	ebp,19
+	mov	esi,edx
+	shr	esi,19
+	mov	DWORD PTR [edi-28],ebx
+	shl	edx,13
+	or	ecx,esi
+	or	edx,ebp
+	mov	DWORD PTR [edi-24],ecx
+	mov	DWORD PTR [edi-20],edx
+	mov	ebp,eax
+	shl	eax,15
+	mov	esi,ebx
+	shr	esi,17
+	shl	ebx,15
+	or	eax,esi
+	mov	esi,ecx
+	shl	ecx,15
+	mov	DWORD PTR [edi],eax
+	shr	esi,17
+	or	ebx,esi
+	shr	ebp,17
+	mov	esi,edx
+	shr	esi,17
+	mov	DWORD PTR 4[edi],ebx
+	shl	edx,15
+	or	ecx,esi
+	or	edx,ebp
+	mov	DWORD PTR 8[edi],ecx
+	mov	DWORD PTR 12[edi],edx
+	mov	ebp,eax
+	shl	eax,17
+	mov	esi,ebx
+	shr	esi,15
+	shl	ebx,17
+	or	eax,esi
+	mov	esi,ecx
+	shl	ecx,17
+	mov	DWORD PTR 48[edi],eax
+	shr	esi,15
+	or	ebx,esi
+	shr	ebp,15
+	mov	esi,edx
+	shr	esi,15
+	mov	DWORD PTR 52[edi],ebx
+	shl	edx,17
+	or	ecx,esi
+	or	edx,ebp
+	mov	DWORD PTR 56[edi],ecx
+	mov	DWORD PTR 60[edi],edx
+	mov	ebp,ebx
+	shl	ebx,2
+	mov	esi,ecx
+	shr	esi,30
+	shl	ecx,2
+	or	ebx,esi
+	mov	esi,edx
+	shl	edx,2
+	mov	DWORD PTR 112[edi],ebx
+	shr	esi,30
+	or	ecx,esi
+	shr	ebp,30
+	mov	esi,eax
+	shr	esi,30
+	mov	DWORD PTR 116[edi],ecx
+	shl	eax,2
+	or	edx,esi
+	or	eax,ebp
+	mov	DWORD PTR 120[edi],edx
+	mov	DWORD PTR 124[edi],eax
+	mov	eax,4
+$L013done:
+	lea	edx,DWORD PTR 144[edi]
+	add	esp,16
+	pop	edi
+	pop	esi
+	pop	ebx
+	pop	ebp
+	ret
+_Camellia_Ekeygen ENDP
+ALIGN	16
+_Camellia_set_key	PROC PUBLIC
+$L_Camellia_set_key_begin::
+	push	ebx
+	mov	ecx,DWORD PTR 8[esp]
+	mov	ebx,DWORD PTR 12[esp]
+	mov	edx,DWORD PTR 16[esp]
+	mov	eax,-1
+	test	ecx,ecx
+	jz	$L014done
+	test	edx,edx
+	jz	$L014done
+	mov	eax,-2
+	cmp	ebx,256
+	je	$L015arg_ok
+	cmp	ebx,192
+	je	$L015arg_ok
+	cmp	ebx,128
+	jne	$L014done
+ALIGN	4
+$L015arg_ok:
+	push	edx
+	push	ecx
+	push	ebx
+	call	$L_Camellia_Ekeygen_begin
+	add	esp,12
+	mov	DWORD PTR [edx],eax
+	xor	eax,eax
+ALIGN	4
+$L014done:
+	pop	ebx
+	ret
+_Camellia_set_key ENDP
+ALIGN	64
+$LCamellia_SIGMA::
+DD	2694735487,1003262091,3061508184,1286239154
+DD	3337565999,3914302142,1426019237,4057165596
+DD	283453434,3731369245,2958461122,3018244605
+DD	0,0,0,0
+ALIGN	64
+$LCamellia_SBOX::
+DD	1886416896,1886388336
+DD	2189591040,741081132
+DD	741092352,3014852787
+DD	3974949888,3233808576
+DD	3014898432,3840147684
+DD	656877312,1465319511
+DD	3233857536,3941204202
+DD	3857048832,2930639022
+DD	3840205824,589496355
+DD	2240120064,1802174571
+DD	1465341696,1162149957
+DD	892679424,2779054245
+DD	3941263872,3991732461
+DD	202116096,1330577487
+DD	2930683392,488439837
+DD	1094795520,2459041938
+DD	589505280,2256928902
+DD	4025478912,2947481775
+DD	1802201856,2088501372
+DD	2475922176,522125343
+DD	1162167552,1044250686
+DD	421075200,3705405660
+DD	2779096320,1583218782
+DD	555819264,185270283
+DD	3991792896,2795896998
+DD	235802112,960036921
+DD	1330597632,3587506389
+DD	1313754624,1566376029
+DD	488447232,3654877401
+DD	1701143808,1515847770
+DD	2459079168,1364262993
+DD	3183328512,1819017324
+DD	2256963072,2341142667
+DD	3099113472,2593783962
+DD	2947526400,4227531003
+DD	2408550144,2964324528
+DD	2088532992,1953759348
+DD	3958106880,724238379
+DD	522133248,4042260720
+DD	3469659648,2223243396
+DD	1044266496,3755933919
+DD	808464384,3419078859
+DD	3705461760,875823156
+DD	1600085760,1987444854
+DD	1583242752,1835860077
+DD	3318072576,2846425257
+DD	185273088,3520135377
+DD	437918208,67371012
+DD	2795939328,336855060
+DD	3789676800,976879674
+DD	960051456,3739091166
+DD	3402287616,286326801
+DD	3587560704,842137650
+DD	1195853568,2627469468
+DD	1566399744,1397948499
+DD	1027423488,4075946226
+DD	3654932736,4278059262
+DD	16843008,3486449871
+DD	1515870720,3284336835
+DD	3604403712,2054815866
+DD	1364283648,606339108
+DD	1448498688,3907518696
+DD	1819044864,1616904288
+DD	1296911616,1768489065
+DD	2341178112,2863268010
+DD	218959104,2694840480
+DD	2593823232,2711683233
+DD	1717986816,1650589794
+DD	4227595008,1414791252
+DD	3435973632,505282590
+DD	2964369408,3772776672
+DD	757935360,1684275300
+DD	1953788928,269484048
+DD	303174144,0
+DD	724249344,2745368739
+DD	538976256,1970602101
+DD	4042321920,2324299914
+DD	2981212416,3873833190
+DD	2223277056,151584777
+DD	2576980224,3722248413
+DD	3755990784,2273771655
+DD	1280068608,2206400643
+DD	3419130624,3452764365
+DD	3267543552,2425356432
+DD	875836416,1936916595
+DD	2122219008,4143317238
+DD	1987474944,2644312221
+DD	84215040,3216965823
+DD	1835887872,1381105746
+DD	3082270464,3638034648
+DD	2846468352,3368550600
+DD	825307392,3334865094
+DD	3520188672,2172715137
+DD	387389184,1869545583
+DD	67372032,320012307
+DD	3621246720,1667432547
+DD	336860160,3924361449
+DD	1482184704,2812739751
+DD	976894464,2677997727
+DD	1633771776,3166437564
+DD	3739147776,690552873
+DD	454761216,4193845497
+DD	286331136,791609391
+DD	471604224,3031695540
+DD	842150400,2021130360
+DD	252645120,101056518
+DD	2627509248,3890675943
+DD	370546176,1903231089
+DD	1397969664,3570663636
+DD	404232192,2880110763
+DD	4076007936,2290614408
+DD	572662272,2374828173
+DD	4278124032,1920073842
+DD	1145324544,3115909305
+DD	3486502656,4177002744
+DD	2998055424,2896953516
+DD	3284386560,909508662
+DD	3048584448,707395626
+DD	2054846976,1010565180
+DD	2442236160,4059103473
+DD	606348288,1077936192
+DD	134744064,3553820883
+DD	3907577856,3149594811
+DD	2829625344,1128464451
+DD	1616928768,353697813
+DD	4244438016,2913796269
+DD	1768515840,2004287607
+DD	1347440640,2155872384
+DD	2863311360,2189557890
+DD	3503345664,3974889708
+DD	2694881280,656867367
+DD	2105376000,3856990437
+DD	2711724288,2240086149
+DD	2307492096,892665909
+DD	1650614784,202113036
+DD	2543294208,1094778945
+DD	1414812672,4025417967
+DD	1532713728,2475884691
+DD	505290240,421068825
+DD	2509608192,555810849
+DD	3772833792,235798542
+DD	4294967040,1313734734
+DD	1684300800,1701118053
+DD	3537031680,3183280317
+DD	269488128,3099066552
+DD	3301229568,2408513679
+DD	0,3958046955
+DD	1212696576,3469607118
+DD	2745410304,808452144
+DD	4160222976,1600061535
+DD	1970631936,3318022341
+DD	3688618752,437911578
+DD	2324335104,3789619425
+DD	50529024,3402236106
+DD	3873891840,1195835463
+DD	3671775744,1027407933
+DD	151587072,16842753
+DD	1061109504,3604349142
+DD	3722304768,1448476758
+DD	2492765184,1296891981
+DD	2273806080,218955789
+DD	1549556736,1717960806
+DD	2206434048,3435921612
+DD	33686016,757923885
+DD	3452816640,303169554
+DD	1246382592,538968096
+DD	2425393152,2981167281
+DD	858993408,2576941209
+DD	1936945920,1280049228
+DD	1734829824,3267494082
+DD	4143379968,2122186878
+DD	4092850944,84213765
+DD	2644352256,3082223799
+DD	2139062016,825294897
+DD	3217014528,387383319
+DD	3806519808,3621191895
+DD	1381126656,1482162264
+DD	2610666240,1633747041
+DD	3638089728,454754331
+DD	640034304,471597084
+DD	3368601600,252641295
+DD	926365440,370540566
+DD	3334915584,404226072
+DD	993737472,572653602
+DD	2172748032,1145307204
+DD	2526451200,2998010034
+DD	1869573888,3048538293
+DD	1263225600,2442199185
+DD	320017152,134742024
+DD	3200171520,2829582504
+DD	1667457792,4244373756
+DD	774778368,1347420240
+DD	3924420864,3503292624
+DD	2038003968,2105344125
+DD	2812782336,2307457161
+DD	2358021120,2543255703
+DD	2678038272,1532690523
+DD	1852730880,2509570197
+DD	3166485504,4294902015
+DD	2391707136,3536978130
+DD	690563328,3301179588
+DD	4126536960,1212678216
+DD	4193908992,4160159991
+DD	3065427456,3688562907
+DD	791621376,50528259
+DD	4261281024,3671720154
+DD	3031741440,1061093439
+DD	1499027712,2492727444
+DD	2021160960,1549533276
+DD	2560137216,33685506
+DD	101058048,1246363722
+DD	1785358848,858980403
+DD	3890734848,1734803559
+DD	1179010560,4092788979
+DD	1903259904,2139029631
+DD	3132799488,3806462178
+DD	3570717696,2610626715
+DD	623191296,640024614
+DD	2880154368,926351415
+DD	1111638528,993722427
+DD	2290649088,2526412950
+DD	2728567296,1263206475
+DD	2374864128,3200123070
+DD	4210752000,774766638
+DD	1920102912,2037973113
+DD	117901056,2357985420
+DD	3115956480,1852702830
+DD	1431655680,2391670926
+DD	4177065984,4126474485
+DD	4008635904,3065381046
+DD	2896997376,4261216509
+DD	168430080,1499005017
+DD	909522432,2560098456
+DD	1229539584,1785331818
+DD	707406336,1178992710
+DD	1751672832,3132752058
+DD	1010580480,623181861
+DD	943208448,1111621698
+DD	4059164928,2728525986
+DD	2762253312,4210688250
+DD	1077952512,117899271
+DD	673720320,1431634005
+DD	3553874688,4008575214
+DD	2071689984,168427530
+DD	3149642496,1229520969
+DD	3385444608,1751646312
+DD	1128481536,943194168
+DD	3250700544,2762211492
+DD	353703168,673710120
+DD	3823362816,2071658619
+DD	2913840384,3385393353
+DD	4109693952,3250651329
+DD	2004317952,3823304931
+DD	3351758592,4109631732
+DD	2155905024,3351707847
+DD	2661195264,2661154974
+DD	14737632,939538488
+DD	328965,1090535745
+DD	5789784,369104406
+DD	14277081,1979741814
+DD	6776679,3640711641
+DD	5131854,2466288531
+DD	8487297,1610637408
+DD	13355979,4060148466
+DD	13224393,1912631922
+DD	723723,3254829762
+DD	11447982,2868947883
+DD	6974058,2583730842
+DD	14013909,1962964341
+DD	1579032,100664838
+DD	6118749,1459640151
+DD	8553090,2684395680
+DD	4605510,2432733585
+DD	14671839,4144035831
+DD	14079702,3036722613
+DD	2565927,3372272073
+DD	9079434,2717950626
+DD	3289650,2348846220
+DD	4934475,3523269330
+DD	4342338,2415956112
+DD	14408667,4127258358
+DD	1842204,117442311
+DD	10395294,2801837991
+DD	10263708,654321447
+DD	3815994,2382401166
+DD	13290186,2986390194
+DD	2434341,1224755529
+DD	8092539,3724599006
+DD	855309,1124090691
+DD	7434609,1543527516
+DD	6250335,3607156695
+DD	2039583,3338717127
+DD	16316664,1040203326
+DD	14145495,4110480885
+DD	4079166,2399178639
+DD	10329501,1728079719
+DD	8158332,520101663
+DD	6316128,402659352
+DD	12171705,1845522030
+DD	12500670,2936057775
+DD	12369084,788541231
+DD	9145227,3791708898
+DD	1447446,2231403909
+DD	3421236,218107149
+DD	5066061,1392530259
+DD	12829635,4026593520
+DD	7500402,2617285788
+DD	9803157,1694524773
+DD	11250603,3925928682
+DD	9342606,2734728099
+DD	12237498,2919280302
+DD	8026746,2650840734
+DD	11776947,3959483628
+DD	131586,2147516544
+DD	11842740,754986285
+DD	11382189,1795189611
+DD	10658466,2818615464
+DD	11316396,721431339
+DD	14211288,905983542
+DD	10132122,2785060518
+DD	1513239,3305162181
+DD	1710618,2248181382
+DD	3487029,1291865421
+DD	13421772,855651123
+DD	16250871,4244700669
+DD	10066329,1711302246
+DD	6381921,1476417624
+DD	5921370,2516620950
+DD	15263976,973093434
+DD	2368548,150997257
+DD	5658198,2499843477
+DD	4210752,268439568
+DD	14803425,2013296760
+DD	6513507,3623934168
+DD	592137,1107313218
+DD	3355443,3422604492
+DD	12566463,4009816047
+DD	10000536,637543974
+DD	9934743,3842041317
+DD	8750469,1627414881
+DD	6842472,436214298
+DD	16579836,1056980799
+DD	15527148,989870907
+DD	657930,2181071490
+DD	14342874,3053500086
+DD	7303023,3674266587
+DD	5460819,3556824276
+DD	6447714,2550175896
+DD	10724259,3892373736
+DD	3026478,2332068747
+DD	526344,33554946
+DD	11513775,3942706155
+DD	2631720,167774730
+DD	11579568,738208812
+DD	7631988,486546717
+DD	12763842,2952835248
+DD	12434877,1862299503
+DD	3552822,2365623693
+DD	2236962,2281736328
+DD	3684408,234884622
+DD	6579300,419436825
+DD	1973790,2264958855
+DD	3750201,1308642894
+DD	2894892,184552203
+DD	10921638,2835392937
+DD	3158064,201329676
+DD	15066597,2030074233
+DD	4473924,285217041
+DD	16645629,2130739071
+DD	8947848,570434082
+DD	10461087,3875596263
+DD	6645093,1493195097
+DD	8882055,3774931425
+DD	7039851,3657489114
+DD	16053492,1023425853
+DD	2302755,3355494600
+DD	4737096,301994514
+DD	1052688,67109892
+DD	13750737,1946186868
+DD	5329233,1409307732
+DD	12632256,805318704
+DD	16382457,2113961598
+DD	13816530,3019945140
+DD	10526880,671098920
+DD	5592405,1426085205
+DD	10592673,1744857192
+DD	4276545,1342197840
+DD	16448250,3187719870
+DD	4408131,3489714384
+DD	1250067,3288384708
+DD	12895428,822096177
+DD	3092271,3405827019
+DD	11053224,704653866
+DD	11974326,2902502829
+DD	3947580,251662095
+DD	2829099,3389049546
+DD	12698049,1879076976
+DD	16777215,4278255615
+DD	13158600,838873650
+DD	10855845,1761634665
+DD	2105376,134219784
+DD	9013641,1644192354
+DD	0,0
+DD	9474192,603989028
+DD	4671303,3506491857
+DD	15724527,4211145723
+DD	15395562,3120609978
+DD	12040119,3976261101
+DD	1381653,1157645637
+DD	394758,2164294017
+DD	13487565,1929409395
+DD	11908533,1828744557
+DD	1184274,2214626436
+DD	8289918,2667618207
+DD	12303291,3993038574
+DD	2697513,1241533002
+DD	986895,3271607235
+DD	12105912,771763758
+DD	460551,3238052289
+DD	263172,16777473
+DD	10197915,3858818790
+DD	9737364,620766501
+DD	2171169,1207978056
+DD	6710886,2566953369
+DD	15132390,3103832505
+DD	13553358,3003167667
+DD	15592941,2063629179
+DD	15198183,4177590777
+DD	3881787,3456159438
+DD	16711422,3204497343
+DD	8355711,3741376479
+DD	12961221,1895854449
+DD	10790052,687876393
+DD	3618615,3439381965
+DD	11645361,1811967084
+DD	5000268,318771987
+DD	9539985,1677747300
+DD	7237230,2600508315
+DD	9276813,1660969827
+DD	7763574,2634063261
+DD	197379,3221274816
+DD	2960685,1258310475
+DD	14606046,3070277559
+DD	9868950,2768283045
+DD	2500134,2298513801
+DD	8224125,1593859935
+DD	13027014,2969612721
+DD	6052956,385881879
+DD	13882323,4093703412
+DD	15921906,3154164924
+DD	5197647,3540046803
+DD	1644825,1174423110
+DD	4144959,3472936911
+DD	14474460,922761015
+DD	7960953,1577082462
+DD	1907997,1191200583
+DD	5395026,2483066004
+DD	15461355,4194368250
+DD	15987699,4227923196
+DD	7171437,1526750043
+DD	6184542,2533398423
+DD	16514043,4261478142
+DD	6908265,1509972570
+DD	11711154,2885725356
+DD	15790320,1006648380
+DD	3223857,1275087948
+DD	789516,50332419
+DD	13948116,889206069
+DD	13619151,4076925939
+DD	9211020,587211555
+DD	14869218,3087055032
+DD	7697781,1560304989
+DD	11119017,1778412138
+DD	4868682,2449511058
+DD	5723991,3573601749
+DD	8684676,553656609
+DD	1118481,1140868164
+DD	4539717,1358975313
+DD	1776411,3321939654
+DD	16119285,2097184125
+DD	15000804,956315961
+DD	921102,2197848963
+DD	7566195,3691044060
+DD	11184810,2852170410
+DD	15856113,2080406652
+DD	14540253,1996519287
+DD	5855577,1442862678
+DD	1315860,83887365
+DD	7105644,452991771
+DD	9605778,2751505572
+DD	5526612,352326933
+DD	13684944,872428596
+DD	7895160,503324190
+DD	7368816,469769244
+DD	14935011,4160813304
+DD	4802889,1375752786
+DD	8421504,536879136
+DD	5263440,335549460
+DD	10987431,3909151209
+DD	16185078,3170942397
+DD	7829367,3707821533
+DD	9671571,3825263844
+DD	8816262,2701173153
+DD	8618883,3758153952
+DD	2763306,2315291274
+DD	13092807,4043370993
+DD	5987163,3590379222
+DD	15329769,2046851706
+DD	15658734,3137387451
+DD	9408399,3808486371
+DD	65793,1073758272
+DD	4013373,1325420367
+ALIGN	16
+_Camellia_cbc_encrypt	PROC PUBLIC
+$L_Camellia_cbc_encrypt_begin::
+	push	ebp
+	push	ebx
+	push	esi
+	push	edi
+	mov	ecx,DWORD PTR 28[esp]
+	cmp	ecx,0
+	je	$L016enc_out
+	pushfd
+	cld
+	mov	eax,DWORD PTR 24[esp]
+	mov	ebx,DWORD PTR 28[esp]
+	mov	edx,DWORD PTR 36[esp]
+	mov	ebp,DWORD PTR 40[esp]
+	lea	esi,DWORD PTR [esp-64]
+	and	esi,-64
+	lea	edi,DWORD PTR [edx-127]
+	sub	edi,esi
+	neg	edi
+	and	edi,960
+	sub	esi,edi
+	mov	edi,DWORD PTR 44[esp]
+	xchg	esp,esi
+	add	esp,4
+	mov	DWORD PTR 20[esp],esi
+	mov	DWORD PTR 24[esp],eax
+	mov	DWORD PTR 28[esp],ebx
+	mov	DWORD PTR 32[esp],ecx
+	mov	DWORD PTR 36[esp],edx
+	mov	DWORD PTR 40[esp],ebp
+	call	$L017pic_point
+$L017pic_point:
+	pop	ebp
+	lea	ebp,DWORD PTR ($LCamellia_SBOX-$L017pic_point)[ebp]
+	mov	esi,32
+ALIGN	4
+$L018prefetch_sbox:
+	mov	eax,DWORD PTR [ebp]
+	mov	ebx,DWORD PTR 32[ebp]
+	mov	ecx,DWORD PTR 64[ebp]
+	mov	edx,DWORD PTR 96[ebp]
+	lea	ebp,DWORD PTR 128[ebp]
+	dec	esi
+	jnz	$L018prefetch_sbox
+	mov	eax,DWORD PTR 36[esp]
+	sub	ebp,4096
+	mov	esi,DWORD PTR 24[esp]
+	mov	edx,DWORD PTR 272[eax]
+	cmp	edi,0
+	je	$L019DECRYPT
+	mov	ecx,DWORD PTR 32[esp]
+	mov	edi,DWORD PTR 40[esp]
+	shl	edx,6
+	lea	edx,DWORD PTR [edx*1+eax]
+	mov	DWORD PTR 16[esp],edx
+	test	ecx,4294967280
+	jz	$L020enc_tail
+	mov	eax,DWORD PTR [edi]
+	mov	ebx,DWORD PTR 4[edi]
+ALIGN	4
+$L021enc_loop:
+	mov	ecx,DWORD PTR 8[edi]
+	mov	edx,DWORD PTR 12[edi]
+	xor	eax,DWORD PTR [esi]
+	xor	ebx,DWORD PTR 4[esi]
+	xor	ecx,DWORD PTR 8[esi]
+	bswap	eax
+	xor	edx,DWORD PTR 12[esi]
+	bswap	ebx
+	mov	edi,DWORD PTR 36[esp]
+	bswap	ecx
+	bswap	edx
+	call	__x86_Camellia_encrypt
+	mov	esi,DWORD PTR 24[esp]
+	mov	edi,DWORD PTR 28[esp]
+	bswap	eax
+	bswap	ebx
+	bswap	ecx
+	mov	DWORD PTR [edi],eax
+	bswap	edx
+	mov	DWORD PTR 4[edi],ebx
+	mov	DWORD PTR 8[edi],ecx
+	mov	DWORD PTR 12[edi],edx
+	mov	ecx,DWORD PTR 32[esp]
+	lea	esi,DWORD PTR 16[esi]
+	mov	DWORD PTR 24[esp],esi
+	lea	edx,DWORD PTR 16[edi]
+	mov	DWORD PTR 28[esp],edx
+	sub	ecx,16
+	test	ecx,4294967280
+	mov	DWORD PTR 32[esp],ecx
+	jnz	$L021enc_loop
+	test	ecx,15
+	jnz	$L020enc_tail
+	mov	esi,DWORD PTR 40[esp]
+	mov	ecx,DWORD PTR 8[edi]
+	mov	edx,DWORD PTR 12[edi]
+	mov	DWORD PTR [esi],eax
+	mov	DWORD PTR 4[esi],ebx
+	mov	DWORD PTR 8[esi],ecx
+	mov	DWORD PTR 12[esi],edx
+	mov	esp,DWORD PTR 20[esp]
+	popfd
+$L016enc_out:
+	pop	edi
+	pop	esi
+	pop	ebx
+	pop	ebp
+	ret
+	pushfd
+ALIGN	4
+$L020enc_tail:
+	mov	eax,edi
+	mov	edi,DWORD PTR 28[esp]
+	push	eax
+	mov	ebx,16
+	sub	ebx,ecx
+	cmp	edi,esi
+	je	$L022enc_in_place
+ALIGN	4
+DD	2767451785
+	jmp	$L023enc_skip_in_place
+$L022enc_in_place:
+	lea	edi,DWORD PTR [ecx*1+edi]
+$L023enc_skip_in_place:
+	mov	ecx,ebx
+	xor	eax,eax
+ALIGN	4
+DD	2868115081
+	pop	edi
+	mov	esi,DWORD PTR 28[esp]
+	mov	eax,DWORD PTR [edi]
+	mov	ebx,DWORD PTR 4[edi]
+	mov	DWORD PTR 32[esp],16
+	jmp	$L021enc_loop
+ALIGN	16
+$L019DECRYPT:
+	shl	edx,6
+	lea	edx,DWORD PTR [edx*1+eax]
+	mov	DWORD PTR 16[esp],eax
+	mov	DWORD PTR 36[esp],edx
+	cmp	esi,DWORD PTR 28[esp]
+	je	$L024dec_in_place
+	mov	edi,DWORD PTR 40[esp]
+	mov	DWORD PTR 44[esp],edi
+ALIGN	4
+$L025dec_loop:
+	mov	eax,DWORD PTR [esi]
+	mov	ebx,DWORD PTR 4[esi]
+	mov	ecx,DWORD PTR 8[esi]
+	bswap	eax
+	mov	edx,DWORD PTR 12[esi]
+	bswap	ebx
+	mov	edi,DWORD PTR 36[esp]
+	bswap	ecx
+	bswap	edx
+	call	__x86_Camellia_decrypt
+	mov	edi,DWORD PTR 44[esp]
+	mov	esi,DWORD PTR 32[esp]
+	bswap	eax
+	bswap	ebx
+	bswap	ecx
+	xor	eax,DWORD PTR [edi]
+	bswap	edx
+	xor	ebx,DWORD PTR 4[edi]
+	xor	ecx,DWORD PTR 8[edi]
+	xor	edx,DWORD PTR 12[edi]
+	sub	esi,16
+	jc	$L026dec_partial
+	mov	DWORD PTR 32[esp],esi
+	mov	esi,DWORD PTR 24[esp]
+	mov	edi,DWORD PTR 28[esp]
+	mov	DWORD PTR [edi],eax
+	mov	DWORD PTR 4[edi],ebx
+	mov	DWORD PTR 8[edi],ecx
+	mov	DWORD PTR 12[edi],edx
+	mov	DWORD PTR 44[esp],esi
+	lea	esi,DWORD PTR 16[esi]
+	mov	DWORD PTR 24[esp],esi
+	lea	edi,DWORD PTR 16[edi]
+	mov	DWORD PTR 28[esp],edi
+	jnz	$L025dec_loop
+	mov	edi,DWORD PTR 44[esp]
+$L027dec_end:
+	mov	esi,DWORD PTR 40[esp]
+	mov	eax,DWORD PTR [edi]
+	mov	ebx,DWORD PTR 4[edi]
+	mov	ecx,DWORD PTR 8[edi]
+	mov	edx,DWORD PTR 12[edi]
+	mov	DWORD PTR [esi],eax
+	mov	DWORD PTR 4[esi],ebx
+	mov	DWORD PTR 8[esi],ecx
+	mov	DWORD PTR 12[esi],edx
+	jmp	$L028dec_out
+ALIGN	4
+$L026dec_partial:
+	lea	edi,DWORD PTR 44[esp]
+	mov	DWORD PTR [edi],eax
+	mov	DWORD PTR 4[edi],ebx
+	mov	DWORD PTR 8[edi],ecx
+	mov	DWORD PTR 12[edi],edx
+	lea	ecx,DWORD PTR 16[esi]
+	mov	esi,edi
+	mov	edi,DWORD PTR 28[esp]
+DD	2767451785
+	mov	edi,DWORD PTR 24[esp]
+	jmp	$L027dec_end
+ALIGN	4
+$L024dec_in_place:
+$L029dec_in_place_loop:
+	lea	edi,DWORD PTR 44[esp]
+	mov	eax,DWORD PTR [esi]
+	mov	ebx,DWORD PTR 4[esi]
+	mov	ecx,DWORD PTR 8[esi]
+	mov	edx,DWORD PTR 12[esi]
+	mov	DWORD PTR [edi],eax
+	mov	DWORD PTR 4[edi],ebx
+	mov	DWORD PTR 8[edi],ecx
+	bswap	eax
+	mov	DWORD PTR 12[edi],edx
+	bswap	ebx
+	mov	edi,DWORD PTR 36[esp]
+	bswap	ecx
+	bswap	edx
+	call	__x86_Camellia_decrypt
+	mov	edi,DWORD PTR 40[esp]
+	mov	esi,DWORD PTR 28[esp]
+	bswap	eax
+	bswap	ebx
+	bswap	ecx
+	xor	eax,DWORD PTR [edi]
+	bswap	edx
+	xor	ebx,DWORD PTR 4[edi]
+	xor	ecx,DWORD PTR 8[edi]
+	xor	edx,DWORD PTR 12[edi]
+	mov	DWORD PTR [esi],eax
+	mov	DWORD PTR 4[esi],ebx
+	mov	DWORD PTR 8[esi],ecx
+	mov	DWORD PTR 12[esi],edx
+	lea	esi,DWORD PTR 16[esi]
+	mov	DWORD PTR 28[esp],esi
+	lea	esi,DWORD PTR 44[esp]
+	mov	eax,DWORD PTR [esi]
+	mov	ebx,DWORD PTR 4[esi]
+	mov	ecx,DWORD PTR 8[esi]
+	mov	edx,DWORD PTR 12[esi]
+	mov	DWORD PTR [edi],eax
+	mov	DWORD PTR 4[edi],ebx
+	mov	DWORD PTR 8[edi],ecx
+	mov	DWORD PTR 12[edi],edx
+	mov	esi,DWORD PTR 24[esp]
+	lea	esi,DWORD PTR 16[esi]
+	mov	DWORD PTR 24[esp],esi
+	mov	ecx,DWORD PTR 32[esp]
+	sub	ecx,16
+	jc	$L030dec_in_place_partial
+	mov	DWORD PTR 32[esp],ecx
+	jnz	$L029dec_in_place_loop
+	jmp	$L028dec_out
+ALIGN	4
+$L030dec_in_place_partial:
+	mov	edi,DWORD PTR 28[esp]
+	lea	esi,DWORD PTR 44[esp]
+	lea	edi,DWORD PTR [ecx*1+edi]
+	lea	esi,DWORD PTR 16[ecx*1+esi]
+	neg	ecx
+DD	2767451785
+ALIGN	4
+$L028dec_out:
+	mov	esp,DWORD PTR 20[esp]
+	popfd
+	pop	edi
+	pop	esi
+	pop	ebx
+	pop	ebp
+	ret
+_Camellia_cbc_encrypt ENDP
+DB	67,97,109,101,108,108,105,97,32,102,111,114,32,120,56,54
+DB	32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
+DB	115,108,46,111,114,103,62,0
+.text$	ENDS
+END

+ 1023 - 1023
contrib/libs/openssl/asm/windows/crypto/chacha/chacha-x86.masm

@@ -1,1023 +1,1023 @@
-IF @Version LT 800 
-ECHO MASM version 8.00 or later is strongly recommended. 
-ENDIF 
-.686 
-.XMM 
-IF @Version LT 800 
-XMMWORD STRUCT 16 
-DQ	2 dup (?) 
-XMMWORD	ENDS 
-ENDIF 
- 
-.MODEL	FLAT 
-OPTION	DOTNAME 
-IF @Version LT 800 
-.text$	SEGMENT PAGE 'CODE' 
-ELSE 
-.text$	SEGMENT ALIGN(64) 'CODE' 
-ENDIF 
-ALIGN	16 
-_ChaCha20_ctr32	PROC PUBLIC 
-$L_ChaCha20_ctr32_begin:: 
-	push	ebp 
-	push	ebx 
-	push	esi 
-	push	edi 
-	xor	eax,eax 
-	cmp	eax,DWORD PTR 28[esp] 
-	je	$L000no_data 
-	call	$Lpic_point 
-$Lpic_point:: 
-	pop	eax 
-	lea	ebp,DWORD PTR _OPENSSL_ia32cap_P 
-	test	DWORD PTR [ebp],16777216 
-	jz	$L001x86 
-	test	DWORD PTR 4[ebp],512 
-	jz	$L001x86 
-	jmp	$Lssse3_shortcut 
-$L001x86: 
-	mov	esi,DWORD PTR 32[esp] 
-	mov	edi,DWORD PTR 36[esp] 
-	sub	esp,132 
-	mov	eax,DWORD PTR [esi] 
-	mov	ebx,DWORD PTR 4[esi] 
-	mov	ecx,DWORD PTR 8[esi] 
-	mov	edx,DWORD PTR 12[esi] 
-	mov	DWORD PTR 80[esp],eax 
-	mov	DWORD PTR 84[esp],ebx 
-	mov	DWORD PTR 88[esp],ecx 
-	mov	DWORD PTR 92[esp],edx 
-	mov	eax,DWORD PTR 16[esi] 
-	mov	ebx,DWORD PTR 20[esi] 
-	mov	ecx,DWORD PTR 24[esi] 
-	mov	edx,DWORD PTR 28[esi] 
-	mov	DWORD PTR 96[esp],eax 
-	mov	DWORD PTR 100[esp],ebx 
-	mov	DWORD PTR 104[esp],ecx 
-	mov	DWORD PTR 108[esp],edx 
-	mov	eax,DWORD PTR [edi] 
-	mov	ebx,DWORD PTR 4[edi] 
-	mov	ecx,DWORD PTR 8[edi] 
-	mov	edx,DWORD PTR 12[edi] 
-	sub	eax,1 
-	mov	DWORD PTR 112[esp],eax 
-	mov	DWORD PTR 116[esp],ebx 
-	mov	DWORD PTR 120[esp],ecx 
-	mov	DWORD PTR 124[esp],edx 
-	jmp	$L002entry 
-ALIGN	16 
-$L003outer_loop: 
-	mov	DWORD PTR 156[esp],ebx 
-	mov	DWORD PTR 152[esp],eax 
-	mov	DWORD PTR 160[esp],ecx 
-$L002entry: 
-	mov	eax,1634760805 
-	mov	DWORD PTR 4[esp],857760878 
-	mov	DWORD PTR 8[esp],2036477234 
-	mov	DWORD PTR 12[esp],1797285236 
-	mov	ebx,DWORD PTR 84[esp] 
-	mov	ebp,DWORD PTR 88[esp] 
-	mov	ecx,DWORD PTR 104[esp] 
-	mov	esi,DWORD PTR 108[esp] 
-	mov	edx,DWORD PTR 116[esp] 
-	mov	edi,DWORD PTR 120[esp] 
-	mov	DWORD PTR 20[esp],ebx 
-	mov	DWORD PTR 24[esp],ebp 
-	mov	DWORD PTR 40[esp],ecx 
-	mov	DWORD PTR 44[esp],esi 
-	mov	DWORD PTR 52[esp],edx 
-	mov	DWORD PTR 56[esp],edi 
-	mov	ebx,DWORD PTR 92[esp] 
-	mov	edi,DWORD PTR 124[esp] 
-	mov	edx,DWORD PTR 112[esp] 
-	mov	ebp,DWORD PTR 80[esp] 
-	mov	ecx,DWORD PTR 96[esp] 
-	mov	esi,DWORD PTR 100[esp] 
-	add	edx,1 
-	mov	DWORD PTR 28[esp],ebx 
-	mov	DWORD PTR 60[esp],edi 
-	mov	DWORD PTR 112[esp],edx 
-	mov	ebx,10 
-	jmp	$L004loop 
-ALIGN	16 
-$L004loop: 
-	add	eax,ebp 
-	mov	DWORD PTR 128[esp],ebx 
-	mov	ebx,ebp 
-	xor	edx,eax 
-	rol	edx,16 
-	add	ecx,edx 
-	xor	ebx,ecx 
-	mov	edi,DWORD PTR 52[esp] 
-	rol	ebx,12 
-	mov	ebp,DWORD PTR 20[esp] 
-	add	eax,ebx 
-	xor	edx,eax 
-	mov	DWORD PTR [esp],eax 
-	rol	edx,8 
-	mov	eax,DWORD PTR 4[esp] 
-	add	ecx,edx 
-	mov	DWORD PTR 48[esp],edx 
-	xor	ebx,ecx 
-	add	eax,ebp 
-	rol	ebx,7 
-	xor	edi,eax 
-	mov	DWORD PTR 32[esp],ecx 
-	rol	edi,16 
-	mov	DWORD PTR 16[esp],ebx 
-	add	esi,edi 
-	mov	ecx,DWORD PTR 40[esp] 
-	xor	ebp,esi 
-	mov	edx,DWORD PTR 56[esp] 
-	rol	ebp,12 
-	mov	ebx,DWORD PTR 24[esp] 
-	add	eax,ebp 
-	xor	edi,eax 
-	mov	DWORD PTR 4[esp],eax 
-	rol	edi,8 
-	mov	eax,DWORD PTR 8[esp] 
-	add	esi,edi 
-	mov	DWORD PTR 52[esp],edi 
-	xor	ebp,esi 
-	add	eax,ebx 
-	rol	ebp,7 
-	xor	edx,eax 
-	mov	DWORD PTR 36[esp],esi 
-	rol	edx,16 
-	mov	DWORD PTR 20[esp],ebp 
-	add	ecx,edx 
-	mov	esi,DWORD PTR 44[esp] 
-	xor	ebx,ecx 
-	mov	edi,DWORD PTR 60[esp] 
-	rol	ebx,12 
-	mov	ebp,DWORD PTR 28[esp] 
-	add	eax,ebx 
-	xor	edx,eax 
-	mov	DWORD PTR 8[esp],eax 
-	rol	edx,8 
-	mov	eax,DWORD PTR 12[esp] 
-	add	ecx,edx 
-	mov	DWORD PTR 56[esp],edx 
-	xor	ebx,ecx 
-	add	eax,ebp 
-	rol	ebx,7 
-	xor	edi,eax 
-	rol	edi,16 
-	mov	DWORD PTR 24[esp],ebx 
-	add	esi,edi 
-	xor	ebp,esi 
-	rol	ebp,12 
-	mov	ebx,DWORD PTR 20[esp] 
-	add	eax,ebp 
-	xor	edi,eax 
-	mov	DWORD PTR 12[esp],eax 
-	rol	edi,8 
-	mov	eax,DWORD PTR [esp] 
-	add	esi,edi 
-	mov	edx,edi 
-	xor	ebp,esi 
-	add	eax,ebx 
-	rol	ebp,7 
-	xor	edx,eax 
-	rol	edx,16 
-	mov	DWORD PTR 28[esp],ebp 
-	add	ecx,edx 
-	xor	ebx,ecx 
-	mov	edi,DWORD PTR 48[esp] 
-	rol	ebx,12 
-	mov	ebp,DWORD PTR 24[esp] 
-	add	eax,ebx 
-	xor	edx,eax 
-	mov	DWORD PTR [esp],eax 
-	rol	edx,8 
-	mov	eax,DWORD PTR 4[esp] 
-	add	ecx,edx 
-	mov	DWORD PTR 60[esp],edx 
-	xor	ebx,ecx 
-	add	eax,ebp 
-	rol	ebx,7 
-	xor	edi,eax 
-	mov	DWORD PTR 40[esp],ecx 
-	rol	edi,16 
-	mov	DWORD PTR 20[esp],ebx 
-	add	esi,edi 
-	mov	ecx,DWORD PTR 32[esp] 
-	xor	ebp,esi 
-	mov	edx,DWORD PTR 52[esp] 
-	rol	ebp,12 
-	mov	ebx,DWORD PTR 28[esp] 
-	add	eax,ebp 
-	xor	edi,eax 
-	mov	DWORD PTR 4[esp],eax 
-	rol	edi,8 
-	mov	eax,DWORD PTR 8[esp] 
-	add	esi,edi 
-	mov	DWORD PTR 48[esp],edi 
-	xor	ebp,esi 
-	add	eax,ebx 
-	rol	ebp,7 
-	xor	edx,eax 
-	mov	DWORD PTR 44[esp],esi 
-	rol	edx,16 
-	mov	DWORD PTR 24[esp],ebp 
-	add	ecx,edx 
-	mov	esi,DWORD PTR 36[esp] 
-	xor	ebx,ecx 
-	mov	edi,DWORD PTR 56[esp] 
-	rol	ebx,12 
-	mov	ebp,DWORD PTR 16[esp] 
-	add	eax,ebx 
-	xor	edx,eax 
-	mov	DWORD PTR 8[esp],eax 
-	rol	edx,8 
-	mov	eax,DWORD PTR 12[esp] 
-	add	ecx,edx 
-	mov	DWORD PTR 52[esp],edx 
-	xor	ebx,ecx 
-	add	eax,ebp 
-	rol	ebx,7 
-	xor	edi,eax 
-	rol	edi,16 
-	mov	DWORD PTR 28[esp],ebx 
-	add	esi,edi 
-	xor	ebp,esi 
-	mov	edx,DWORD PTR 48[esp] 
-	rol	ebp,12 
-	mov	ebx,DWORD PTR 128[esp] 
-	add	eax,ebp 
-	xor	edi,eax 
-	mov	DWORD PTR 12[esp],eax 
-	rol	edi,8 
-	mov	eax,DWORD PTR [esp] 
-	add	esi,edi 
-	mov	DWORD PTR 56[esp],edi 
-	xor	ebp,esi 
-	rol	ebp,7 
-	dec	ebx 
-	jnz	$L004loop 
-	mov	ebx,DWORD PTR 160[esp] 
-	add	eax,1634760805 
-	add	ebp,DWORD PTR 80[esp] 
-	add	ecx,DWORD PTR 96[esp] 
-	add	esi,DWORD PTR 100[esp] 
-	cmp	ebx,64 
-	jb	$L005tail 
-	mov	ebx,DWORD PTR 156[esp] 
-	add	edx,DWORD PTR 112[esp] 
-	add	edi,DWORD PTR 120[esp] 
-	xor	eax,DWORD PTR [ebx] 
-	xor	ebp,DWORD PTR 16[ebx] 
-	mov	DWORD PTR [esp],eax 
-	mov	eax,DWORD PTR 152[esp] 
-	xor	ecx,DWORD PTR 32[ebx] 
-	xor	esi,DWORD PTR 36[ebx] 
-	xor	edx,DWORD PTR 48[ebx] 
-	xor	edi,DWORD PTR 56[ebx] 
-	mov	DWORD PTR 16[eax],ebp 
-	mov	DWORD PTR 32[eax],ecx 
-	mov	DWORD PTR 36[eax],esi 
-	mov	DWORD PTR 48[eax],edx 
-	mov	DWORD PTR 56[eax],edi 
-	mov	ebp,DWORD PTR 4[esp] 
-	mov	ecx,DWORD PTR 8[esp] 
-	mov	esi,DWORD PTR 12[esp] 
-	mov	edx,DWORD PTR 20[esp] 
-	mov	edi,DWORD PTR 24[esp] 
-	add	ebp,857760878 
-	add	ecx,2036477234 
-	add	esi,1797285236 
-	add	edx,DWORD PTR 84[esp] 
-	add	edi,DWORD PTR 88[esp] 
-	xor	ebp,DWORD PTR 4[ebx] 
-	xor	ecx,DWORD PTR 8[ebx] 
-	xor	esi,DWORD PTR 12[ebx] 
-	xor	edx,DWORD PTR 20[ebx] 
-	xor	edi,DWORD PTR 24[ebx] 
-	mov	DWORD PTR 4[eax],ebp 
-	mov	DWORD PTR 8[eax],ecx 
-	mov	DWORD PTR 12[eax],esi 
-	mov	DWORD PTR 20[eax],edx 
-	mov	DWORD PTR 24[eax],edi 
-	mov	ebp,DWORD PTR 28[esp] 
-	mov	ecx,DWORD PTR 40[esp] 
-	mov	esi,DWORD PTR 44[esp] 
-	mov	edx,DWORD PTR 52[esp] 
-	mov	edi,DWORD PTR 60[esp] 
-	add	ebp,DWORD PTR 92[esp] 
-	add	ecx,DWORD PTR 104[esp] 
-	add	esi,DWORD PTR 108[esp] 
-	add	edx,DWORD PTR 116[esp] 
-	add	edi,DWORD PTR 124[esp] 
-	xor	ebp,DWORD PTR 28[ebx] 
-	xor	ecx,DWORD PTR 40[ebx] 
-	xor	esi,DWORD PTR 44[ebx] 
-	xor	edx,DWORD PTR 52[ebx] 
-	xor	edi,DWORD PTR 60[ebx] 
-	lea	ebx,DWORD PTR 64[ebx] 
-	mov	DWORD PTR 28[eax],ebp 
-	mov	ebp,DWORD PTR [esp] 
-	mov	DWORD PTR 40[eax],ecx 
-	mov	ecx,DWORD PTR 160[esp] 
-	mov	DWORD PTR 44[eax],esi 
-	mov	DWORD PTR 52[eax],edx 
-	mov	DWORD PTR 60[eax],edi 
-	mov	DWORD PTR [eax],ebp 
-	lea	eax,DWORD PTR 64[eax] 
-	sub	ecx,64 
-	jnz	$L003outer_loop 
-	jmp	$L006done 
-$L005tail: 
-	add	edx,DWORD PTR 112[esp] 
-	add	edi,DWORD PTR 120[esp] 
-	mov	DWORD PTR [esp],eax 
-	mov	DWORD PTR 16[esp],ebp 
-	mov	DWORD PTR 32[esp],ecx 
-	mov	DWORD PTR 36[esp],esi 
-	mov	DWORD PTR 48[esp],edx 
-	mov	DWORD PTR 56[esp],edi 
-	mov	ebp,DWORD PTR 4[esp] 
-	mov	ecx,DWORD PTR 8[esp] 
-	mov	esi,DWORD PTR 12[esp] 
-	mov	edx,DWORD PTR 20[esp] 
-	mov	edi,DWORD PTR 24[esp] 
-	add	ebp,857760878 
-	add	ecx,2036477234 
-	add	esi,1797285236 
-	add	edx,DWORD PTR 84[esp] 
-	add	edi,DWORD PTR 88[esp] 
-	mov	DWORD PTR 4[esp],ebp 
-	mov	DWORD PTR 8[esp],ecx 
-	mov	DWORD PTR 12[esp],esi 
-	mov	DWORD PTR 20[esp],edx 
-	mov	DWORD PTR 24[esp],edi 
-	mov	ebp,DWORD PTR 28[esp] 
-	mov	ecx,DWORD PTR 40[esp] 
-	mov	esi,DWORD PTR 44[esp] 
-	mov	edx,DWORD PTR 52[esp] 
-	mov	edi,DWORD PTR 60[esp] 
-	add	ebp,DWORD PTR 92[esp] 
-	add	ecx,DWORD PTR 104[esp] 
-	add	esi,DWORD PTR 108[esp] 
-	add	edx,DWORD PTR 116[esp] 
-	add	edi,DWORD PTR 124[esp] 
-	mov	DWORD PTR 28[esp],ebp 
-	mov	ebp,DWORD PTR 156[esp] 
-	mov	DWORD PTR 40[esp],ecx 
-	mov	ecx,DWORD PTR 152[esp] 
-	mov	DWORD PTR 44[esp],esi 
-	xor	esi,esi 
-	mov	DWORD PTR 52[esp],edx 
-	mov	DWORD PTR 60[esp],edi 
-	xor	eax,eax 
-	xor	edx,edx 
-$L007tail_loop: 
-	mov	al,BYTE PTR [ebp*1+esi] 
-	mov	dl,BYTE PTR [esi*1+esp] 
-	lea	esi,DWORD PTR 1[esi] 
-	xor	al,dl 
-	mov	BYTE PTR [esi*1+ecx-1],al 
-	dec	ebx 
-	jnz	$L007tail_loop 
-$L006done: 
-	add	esp,132 
-$L000no_data: 
-	pop	edi 
-	pop	esi 
-	pop	ebx 
-	pop	ebp 
-	ret 
-_ChaCha20_ctr32 ENDP 
-ALIGN	16 
-_ChaCha20_ssse3	PROC PUBLIC 
-$L_ChaCha20_ssse3_begin:: 
-	push	ebp 
-	push	ebx 
-	push	esi 
-	push	edi 
-$Lssse3_shortcut:: 
-	test	DWORD PTR 4[ebp],2048 
-	jnz	$Lxop_shortcut 
-	mov	edi,DWORD PTR 20[esp] 
-	mov	esi,DWORD PTR 24[esp] 
-	mov	ecx,DWORD PTR 28[esp] 
-	mov	edx,DWORD PTR 32[esp] 
-	mov	ebx,DWORD PTR 36[esp] 
-	mov	ebp,esp 
-	sub	esp,524 
-	and	esp,-64 
-	mov	DWORD PTR 512[esp],ebp 
-	lea	eax,DWORD PTR ($Lssse3_data-$Lpic_point)[eax] 
-	movdqu	xmm3,XMMWORD PTR [ebx] 
-$L0081x: 
-	movdqa	xmm0,XMMWORD PTR 32[eax] 
-	movdqu	xmm1,XMMWORD PTR [edx] 
-	movdqu	xmm2,XMMWORD PTR 16[edx] 
-	movdqa	xmm6,XMMWORD PTR [eax] 
-	movdqa	xmm7,XMMWORD PTR 16[eax] 
-	mov	DWORD PTR 48[esp],ebp 
-	movdqa	XMMWORD PTR [esp],xmm0 
-	movdqa	XMMWORD PTR 16[esp],xmm1 
-	movdqa	XMMWORD PTR 32[esp],xmm2 
-	movdqa	XMMWORD PTR 48[esp],xmm3 
-	mov	edx,10 
-	jmp	$L009loop1x 
-ALIGN	16 
-$L010outer1x: 
-	movdqa	xmm3,XMMWORD PTR 80[eax] 
-	movdqa	xmm0,XMMWORD PTR [esp] 
-	movdqa	xmm1,XMMWORD PTR 16[esp] 
-	movdqa	xmm2,XMMWORD PTR 32[esp] 
-	paddd	xmm3,XMMWORD PTR 48[esp] 
-	mov	edx,10 
-	movdqa	XMMWORD PTR 48[esp],xmm3 
-	jmp	$L009loop1x 
-ALIGN	16 
-$L009loop1x: 
-	paddd	xmm0,xmm1 
-	pxor	xmm3,xmm0 
-DB	102,15,56,0,222 
-	paddd	xmm2,xmm3 
-	pxor	xmm1,xmm2 
-	movdqa	xmm4,xmm1 
-	psrld	xmm1,20 
-	pslld	xmm4,12 
-	por	xmm1,xmm4 
-	paddd	xmm0,xmm1 
-	pxor	xmm3,xmm0 
-DB	102,15,56,0,223 
-	paddd	xmm2,xmm3 
-	pxor	xmm1,xmm2 
-	movdqa	xmm4,xmm1 
-	psrld	xmm1,25 
-	pslld	xmm4,7 
-	por	xmm1,xmm4 
-	pshufd	xmm2,xmm2,78 
-	pshufd	xmm1,xmm1,57 
-	pshufd	xmm3,xmm3,147 
-	nop 
-	paddd	xmm0,xmm1 
-	pxor	xmm3,xmm0 
-DB	102,15,56,0,222 
-	paddd	xmm2,xmm3 
-	pxor	xmm1,xmm2 
-	movdqa	xmm4,xmm1 
-	psrld	xmm1,20 
-	pslld	xmm4,12 
-	por	xmm1,xmm4 
-	paddd	xmm0,xmm1 
-	pxor	xmm3,xmm0 
-DB	102,15,56,0,223 
-	paddd	xmm2,xmm3 
-	pxor	xmm1,xmm2 
-	movdqa	xmm4,xmm1 
-	psrld	xmm1,25 
-	pslld	xmm4,7 
-	por	xmm1,xmm4 
-	pshufd	xmm2,xmm2,78 
-	pshufd	xmm1,xmm1,147 
-	pshufd	xmm3,xmm3,57 
-	dec	edx 
-	jnz	$L009loop1x 
-	paddd	xmm0,XMMWORD PTR [esp] 
-	paddd	xmm1,XMMWORD PTR 16[esp] 
-	paddd	xmm2,XMMWORD PTR 32[esp] 
-	paddd	xmm3,XMMWORD PTR 48[esp] 
-	cmp	ecx,64 
-	jb	$L011tail 
-	movdqu	xmm4,XMMWORD PTR [esi] 
-	movdqu	xmm5,XMMWORD PTR 16[esi] 
-	pxor	xmm0,xmm4 
-	movdqu	xmm4,XMMWORD PTR 32[esi] 
-	pxor	xmm1,xmm5 
-	movdqu	xmm5,XMMWORD PTR 48[esi] 
-	pxor	xmm2,xmm4 
-	pxor	xmm3,xmm5 
-	lea	esi,DWORD PTR 64[esi] 
-	movdqu	XMMWORD PTR [edi],xmm0 
-	movdqu	XMMWORD PTR 16[edi],xmm1 
-	movdqu	XMMWORD PTR 32[edi],xmm2 
-	movdqu	XMMWORD PTR 48[edi],xmm3 
-	lea	edi,DWORD PTR 64[edi] 
-	sub	ecx,64 
-	jnz	$L010outer1x 
-	jmp	$L012done 
-$L011tail: 
-	movdqa	XMMWORD PTR [esp],xmm0 
-	movdqa	XMMWORD PTR 16[esp],xmm1 
-	movdqa	XMMWORD PTR 32[esp],xmm2 
-	movdqa	XMMWORD PTR 48[esp],xmm3 
-	xor	eax,eax 
-	xor	edx,edx 
-	xor	ebp,ebp 
-$L013tail_loop: 
-	mov	al,BYTE PTR [ebp*1+esp] 
-	mov	dl,BYTE PTR [ebp*1+esi] 
-	lea	ebp,DWORD PTR 1[ebp] 
-	xor	al,dl 
-	mov	BYTE PTR [ebp*1+edi-1],al 
-	dec	ecx 
-	jnz	$L013tail_loop 
-$L012done: 
-	mov	esp,DWORD PTR 512[esp] 
-	pop	edi 
-	pop	esi 
-	pop	ebx 
-	pop	ebp 
-	ret 
-_ChaCha20_ssse3 ENDP 
-ALIGN	64 
-$Lssse3_data:: 
-DB	2,3,0,1,6,7,4,5,10,11,8,9,14,15,12,13 
-DB	3,0,1,2,7,4,5,6,11,8,9,10,15,12,13,14 
-DD	1634760805,857760878,2036477234,1797285236 
-DD	0,1,2,3 
-DD	4,4,4,4 
-DD	1,0,0,0 
-DD	4,0,0,0 
-DD	0,-1,-1,-1 
-ALIGN	64 
-DB	67,104,97,67,104,97,50,48,32,102,111,114,32,120,56,54 
-DB	44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32 
-DB	60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111 
-DB	114,103,62,0 
-ALIGN	16 
-_ChaCha20_xop	PROC PUBLIC 
-$L_ChaCha20_xop_begin:: 
-	push	ebp 
-	push	ebx 
-	push	esi 
-	push	edi 
-$Lxop_shortcut:: 
-	mov	edi,DWORD PTR 20[esp] 
-	mov	esi,DWORD PTR 24[esp] 
-	mov	ecx,DWORD PTR 28[esp] 
-	mov	edx,DWORD PTR 32[esp] 
-	mov	ebx,DWORD PTR 36[esp] 
-	vzeroupper 
-	mov	ebp,esp 
-	sub	esp,524 
-	and	esp,-64 
-	mov	DWORD PTR 512[esp],ebp 
-	lea	eax,DWORD PTR ($Lssse3_data-$Lpic_point)[eax] 
-	vmovdqu	xmm3,XMMWORD PTR [ebx] 
-	cmp	ecx,256 
-	jb	$L0141x 
-	mov	DWORD PTR 516[esp],edx 
-	mov	DWORD PTR 520[esp],ebx 
-	sub	ecx,256 
-	lea	ebp,DWORD PTR 384[esp] 
-	vmovdqu	xmm7,XMMWORD PTR [edx] 
-	vpshufd	xmm0,xmm3,0 
-	vpshufd	xmm1,xmm3,85 
-	vpshufd	xmm2,xmm3,170 
-	vpshufd	xmm3,xmm3,255 
-	vpaddd	xmm0,xmm0,XMMWORD PTR 48[eax] 
-	vpshufd	xmm4,xmm7,0 
-	vpshufd	xmm5,xmm7,85 
-	vpsubd	xmm0,xmm0,XMMWORD PTR 64[eax] 
-	vpshufd	xmm6,xmm7,170 
-	vpshufd	xmm7,xmm7,255 
-	vmovdqa	XMMWORD PTR 64[ebp],xmm0 
-	vmovdqa	XMMWORD PTR 80[ebp],xmm1 
-	vmovdqa	XMMWORD PTR 96[ebp],xmm2 
-	vmovdqa	XMMWORD PTR 112[ebp],xmm3 
-	vmovdqu	xmm3,XMMWORD PTR 16[edx] 
-	vmovdqa	XMMWORD PTR [ebp-64],xmm4 
-	vmovdqa	XMMWORD PTR [ebp-48],xmm5 
-	vmovdqa	XMMWORD PTR [ebp-32],xmm6 
-	vmovdqa	XMMWORD PTR [ebp-16],xmm7 
-	vmovdqa	xmm7,XMMWORD PTR 32[eax] 
-	lea	ebx,DWORD PTR 128[esp] 
-	vpshufd	xmm0,xmm3,0 
-	vpshufd	xmm1,xmm3,85 
-	vpshufd	xmm2,xmm3,170 
-	vpshufd	xmm3,xmm3,255 
-	vpshufd	xmm4,xmm7,0 
-	vpshufd	xmm5,xmm7,85 
-	vpshufd	xmm6,xmm7,170 
-	vpshufd	xmm7,xmm7,255 
-	vmovdqa	XMMWORD PTR [ebp],xmm0 
-	vmovdqa	XMMWORD PTR 16[ebp],xmm1 
-	vmovdqa	XMMWORD PTR 32[ebp],xmm2 
-	vmovdqa	XMMWORD PTR 48[ebp],xmm3 
-	vmovdqa	XMMWORD PTR [ebp-128],xmm4 
-	vmovdqa	XMMWORD PTR [ebp-112],xmm5 
-	vmovdqa	XMMWORD PTR [ebp-96],xmm6 
-	vmovdqa	XMMWORD PTR [ebp-80],xmm7 
-	lea	esi,DWORD PTR 128[esi] 
-	lea	edi,DWORD PTR 128[edi] 
-	jmp	$L015outer_loop 
-ALIGN	32 
-$L015outer_loop: 
-	vmovdqa	xmm1,XMMWORD PTR [ebp-112] 
-	vmovdqa	xmm2,XMMWORD PTR [ebp-96] 
-	vmovdqa	xmm3,XMMWORD PTR [ebp-80] 
-	vmovdqa	xmm5,XMMWORD PTR [ebp-48] 
-	vmovdqa	xmm6,XMMWORD PTR [ebp-32] 
-	vmovdqa	xmm7,XMMWORD PTR [ebp-16] 
-	vmovdqa	XMMWORD PTR [ebx-112],xmm1 
-	vmovdqa	XMMWORD PTR [ebx-96],xmm2 
-	vmovdqa	XMMWORD PTR [ebx-80],xmm3 
-	vmovdqa	XMMWORD PTR [ebx-48],xmm5 
-	vmovdqa	XMMWORD PTR [ebx-32],xmm6 
-	vmovdqa	XMMWORD PTR [ebx-16],xmm7 
-	vmovdqa	xmm2,XMMWORD PTR 32[ebp] 
-	vmovdqa	xmm3,XMMWORD PTR 48[ebp] 
-	vmovdqa	xmm4,XMMWORD PTR 64[ebp] 
-	vmovdqa	xmm5,XMMWORD PTR 80[ebp] 
-	vmovdqa	xmm6,XMMWORD PTR 96[ebp] 
-	vmovdqa	xmm7,XMMWORD PTR 112[ebp] 
-	vpaddd	xmm4,xmm4,XMMWORD PTR 64[eax] 
-	vmovdqa	XMMWORD PTR 32[ebx],xmm2 
-	vmovdqa	XMMWORD PTR 48[ebx],xmm3 
-	vmovdqa	XMMWORD PTR 64[ebx],xmm4 
-	vmovdqa	XMMWORD PTR 80[ebx],xmm5 
-	vmovdqa	XMMWORD PTR 96[ebx],xmm6 
-	vmovdqa	XMMWORD PTR 112[ebx],xmm7 
-	vmovdqa	XMMWORD PTR 64[ebp],xmm4 
-	vmovdqa	xmm0,XMMWORD PTR [ebp-128] 
-	vmovdqa	xmm6,xmm4 
-	vmovdqa	xmm3,XMMWORD PTR [ebp-64] 
-	vmovdqa	xmm4,XMMWORD PTR [ebp] 
-	vmovdqa	xmm5,XMMWORD PTR 16[ebp] 
-	mov	edx,10 
-	nop 
-ALIGN	32 
-$L016loop: 
-	vpaddd	xmm0,xmm0,xmm3 
-	vpxor	xmm6,xmm6,xmm0 
-DB	143,232,120,194,246,16 
-	vpaddd	xmm4,xmm4,xmm6 
-	vpxor	xmm2,xmm3,xmm4 
-	vmovdqa	xmm1,XMMWORD PTR [ebx-112] 
-DB	143,232,120,194,210,12 
-	vmovdqa	xmm3,XMMWORD PTR [ebx-48] 
-	vpaddd	xmm0,xmm0,xmm2 
-	vmovdqa	xmm7,XMMWORD PTR 80[ebx] 
-	vpxor	xmm6,xmm6,xmm0 
-	vpaddd	xmm1,xmm1,xmm3 
-DB	143,232,120,194,246,8 
-	vmovdqa	XMMWORD PTR [ebx-128],xmm0 
-	vpaddd	xmm4,xmm4,xmm6 
-	vmovdqa	XMMWORD PTR 64[ebx],xmm6 
-	vpxor	xmm2,xmm2,xmm4 
-	vpxor	xmm7,xmm7,xmm1 
-DB	143,232,120,194,210,7 
-	vmovdqa	XMMWORD PTR [ebx],xmm4 
-DB	143,232,120,194,255,16 
-	vmovdqa	XMMWORD PTR [ebx-64],xmm2 
-	vpaddd	xmm5,xmm5,xmm7 
-	vmovdqa	xmm4,XMMWORD PTR 32[ebx] 
-	vpxor	xmm3,xmm3,xmm5 
-	vmovdqa	xmm0,XMMWORD PTR [ebx-96] 
-DB	143,232,120,194,219,12 
-	vmovdqa	xmm2,XMMWORD PTR [ebx-32] 
-	vpaddd	xmm1,xmm1,xmm3 
-	vmovdqa	xmm6,XMMWORD PTR 96[ebx] 
-	vpxor	xmm7,xmm7,xmm1 
-	vpaddd	xmm0,xmm0,xmm2 
-DB	143,232,120,194,255,8 
-	vmovdqa	XMMWORD PTR [ebx-112],xmm1 
-	vpaddd	xmm5,xmm5,xmm7 
-	vmovdqa	XMMWORD PTR 80[ebx],xmm7 
-	vpxor	xmm3,xmm3,xmm5 
-	vpxor	xmm6,xmm6,xmm0 
-DB	143,232,120,194,219,7 
-	vmovdqa	XMMWORD PTR 16[ebx],xmm5 
-DB	143,232,120,194,246,16 
-	vmovdqa	XMMWORD PTR [ebx-48],xmm3 
-	vpaddd	xmm4,xmm4,xmm6 
-	vmovdqa	xmm5,XMMWORD PTR 48[ebx] 
-	vpxor	xmm2,xmm2,xmm4 
-	vmovdqa	xmm1,XMMWORD PTR [ebx-80] 
-DB	143,232,120,194,210,12 
-	vmovdqa	xmm3,XMMWORD PTR [ebx-16] 
-	vpaddd	xmm0,xmm0,xmm2 
-	vmovdqa	xmm7,XMMWORD PTR 112[ebx] 
-	vpxor	xmm6,xmm6,xmm0 
-	vpaddd	xmm1,xmm1,xmm3 
-DB	143,232,120,194,246,8 
-	vmovdqa	XMMWORD PTR [ebx-96],xmm0 
-	vpaddd	xmm4,xmm4,xmm6 
-	vmovdqa	XMMWORD PTR 96[ebx],xmm6 
-	vpxor	xmm2,xmm2,xmm4 
-	vpxor	xmm7,xmm7,xmm1 
-DB	143,232,120,194,210,7 
-DB	143,232,120,194,255,16 
-	vmovdqa	XMMWORD PTR [ebx-32],xmm2 
-	vpaddd	xmm5,xmm5,xmm7 
-	vpxor	xmm3,xmm3,xmm5 
-	vmovdqa	xmm0,XMMWORD PTR [ebx-128] 
-DB	143,232,120,194,219,12 
-	vmovdqa	xmm2,XMMWORD PTR [ebx-48] 
-	vpaddd	xmm1,xmm1,xmm3 
-	vpxor	xmm7,xmm7,xmm1 
-	vpaddd	xmm0,xmm0,xmm2 
-DB	143,232,120,194,255,8 
-	vmovdqa	XMMWORD PTR [ebx-80],xmm1 
-	vpaddd	xmm5,xmm5,xmm7 
-	vpxor	xmm3,xmm3,xmm5 
-	vpxor	xmm6,xmm7,xmm0 
-DB	143,232,120,194,219,7 
-DB	143,232,120,194,246,16 
-	vmovdqa	XMMWORD PTR [ebx-16],xmm3 
-	vpaddd	xmm4,xmm4,xmm6 
-	vpxor	xmm2,xmm2,xmm4 
-	vmovdqa	xmm1,XMMWORD PTR [ebx-112] 
-DB	143,232,120,194,210,12 
-	vmovdqa	xmm3,XMMWORD PTR [ebx-32] 
-	vpaddd	xmm0,xmm0,xmm2 
-	vmovdqa	xmm7,XMMWORD PTR 64[ebx] 
-	vpxor	xmm6,xmm6,xmm0 
-	vpaddd	xmm1,xmm1,xmm3 
-DB	143,232,120,194,246,8 
-	vmovdqa	XMMWORD PTR [ebx-128],xmm0 
-	vpaddd	xmm4,xmm4,xmm6 
-	vmovdqa	XMMWORD PTR 112[ebx],xmm6 
-	vpxor	xmm2,xmm2,xmm4 
-	vpxor	xmm7,xmm7,xmm1 
-DB	143,232,120,194,210,7 
-	vmovdqa	XMMWORD PTR 32[ebx],xmm4 
-DB	143,232,120,194,255,16 
-	vmovdqa	XMMWORD PTR [ebx-48],xmm2 
-	vpaddd	xmm5,xmm5,xmm7 
-	vmovdqa	xmm4,XMMWORD PTR [ebx] 
-	vpxor	xmm3,xmm3,xmm5 
-	vmovdqa	xmm0,XMMWORD PTR [ebx-96] 
-DB	143,232,120,194,219,12 
-	vmovdqa	xmm2,XMMWORD PTR [ebx-16] 
-	vpaddd	xmm1,xmm1,xmm3 
-	vmovdqa	xmm6,XMMWORD PTR 80[ebx] 
-	vpxor	xmm7,xmm7,xmm1 
-	vpaddd	xmm0,xmm0,xmm2 
-DB	143,232,120,194,255,8 
-	vmovdqa	XMMWORD PTR [ebx-112],xmm1 
-	vpaddd	xmm5,xmm5,xmm7 
-	vmovdqa	XMMWORD PTR 64[ebx],xmm7 
-	vpxor	xmm3,xmm3,xmm5 
-	vpxor	xmm6,xmm6,xmm0 
-DB	143,232,120,194,219,7 
-	vmovdqa	XMMWORD PTR 48[ebx],xmm5 
-DB	143,232,120,194,246,16 
-	vmovdqa	XMMWORD PTR [ebx-32],xmm3 
-	vpaddd	xmm4,xmm4,xmm6 
-	vmovdqa	xmm5,XMMWORD PTR 16[ebx] 
-	vpxor	xmm2,xmm2,xmm4 
-	vmovdqa	xmm1,XMMWORD PTR [ebx-80] 
-DB	143,232,120,194,210,12 
-	vmovdqa	xmm3,XMMWORD PTR [ebx-64] 
-	vpaddd	xmm0,xmm0,xmm2 
-	vmovdqa	xmm7,XMMWORD PTR 96[ebx] 
-	vpxor	xmm6,xmm6,xmm0 
-	vpaddd	xmm1,xmm1,xmm3 
-DB	143,232,120,194,246,8 
-	vmovdqa	XMMWORD PTR [ebx-96],xmm0 
-	vpaddd	xmm4,xmm4,xmm6 
-	vmovdqa	XMMWORD PTR 80[ebx],xmm6 
-	vpxor	xmm2,xmm2,xmm4 
-	vpxor	xmm7,xmm7,xmm1 
-DB	143,232,120,194,210,7 
-DB	143,232,120,194,255,16 
-	vmovdqa	XMMWORD PTR [ebx-16],xmm2 
-	vpaddd	xmm5,xmm5,xmm7 
-	vpxor	xmm3,xmm3,xmm5 
-	vmovdqa	xmm0,XMMWORD PTR [ebx-128] 
-DB	143,232,120,194,219,12 
-	vpaddd	xmm1,xmm1,xmm3 
-	vmovdqa	xmm6,XMMWORD PTR 64[ebx] 
-	vpxor	xmm7,xmm7,xmm1 
-DB	143,232,120,194,255,8 
-	vmovdqa	XMMWORD PTR [ebx-80],xmm1 
-	vpaddd	xmm5,xmm5,xmm7 
-	vmovdqa	XMMWORD PTR 96[ebx],xmm7 
-	vpxor	xmm3,xmm3,xmm5 
-DB	143,232,120,194,219,7 
-	dec	edx 
-	jnz	$L016loop 
-	vmovdqa	XMMWORD PTR [ebx-64],xmm3 
-	vmovdqa	XMMWORD PTR [ebx],xmm4 
-	vmovdqa	XMMWORD PTR 16[ebx],xmm5 
-	vmovdqa	XMMWORD PTR 64[ebx],xmm6 
-	vmovdqa	XMMWORD PTR 96[ebx],xmm7 
-	vmovdqa	xmm1,XMMWORD PTR [ebx-112] 
-	vmovdqa	xmm2,XMMWORD PTR [ebx-96] 
-	vmovdqa	xmm3,XMMWORD PTR [ebx-80] 
-	vpaddd	xmm0,xmm0,XMMWORD PTR [ebp-128] 
-	vpaddd	xmm1,xmm1,XMMWORD PTR [ebp-112] 
-	vpaddd	xmm2,xmm2,XMMWORD PTR [ebp-96] 
-	vpaddd	xmm3,xmm3,XMMWORD PTR [ebp-80] 
-	vpunpckldq	xmm6,xmm0,xmm1 
-	vpunpckldq	xmm7,xmm2,xmm3 
-	vpunpckhdq	xmm0,xmm0,xmm1 
-	vpunpckhdq	xmm2,xmm2,xmm3 
-	vpunpcklqdq	xmm1,xmm6,xmm7 
-	vpunpckhqdq	xmm6,xmm6,xmm7 
-	vpunpcklqdq	xmm7,xmm0,xmm2 
-	vpunpckhqdq	xmm3,xmm0,xmm2 
-	vpxor	xmm4,xmm1,XMMWORD PTR [esi-128] 
-	vpxor	xmm5,xmm6,XMMWORD PTR [esi-64] 
-	vpxor	xmm6,xmm7,XMMWORD PTR [esi] 
-	vpxor	xmm7,xmm3,XMMWORD PTR 64[esi] 
-	lea	esi,QWORD PTR 16[esi] 
-	vmovdqa	xmm0,XMMWORD PTR [ebx-64] 
-	vmovdqa	xmm1,XMMWORD PTR [ebx-48] 
-	vmovdqa	xmm2,XMMWORD PTR [ebx-32] 
-	vmovdqa	xmm3,XMMWORD PTR [ebx-16] 
-	vmovdqu	XMMWORD PTR [edi-128],xmm4 
-	vmovdqu	XMMWORD PTR [edi-64],xmm5 
-	vmovdqu	XMMWORD PTR [edi],xmm6 
-	vmovdqu	XMMWORD PTR 64[edi],xmm7 
-	lea	edi,QWORD PTR 16[edi] 
-	vpaddd	xmm0,xmm0,XMMWORD PTR [ebp-64] 
-	vpaddd	xmm1,xmm1,XMMWORD PTR [ebp-48] 
-	vpaddd	xmm2,xmm2,XMMWORD PTR [ebp-32] 
-	vpaddd	xmm3,xmm3,XMMWORD PTR [ebp-16] 
-	vpunpckldq	xmm6,xmm0,xmm1 
-	vpunpckldq	xmm7,xmm2,xmm3 
-	vpunpckhdq	xmm0,xmm0,xmm1 
-	vpunpckhdq	xmm2,xmm2,xmm3 
-	vpunpcklqdq	xmm1,xmm6,xmm7 
-	vpunpckhqdq	xmm6,xmm6,xmm7 
-	vpunpcklqdq	xmm7,xmm0,xmm2 
-	vpunpckhqdq	xmm3,xmm0,xmm2 
-	vpxor	xmm4,xmm1,XMMWORD PTR [esi-128] 
-	vpxor	xmm5,xmm6,XMMWORD PTR [esi-64] 
-	vpxor	xmm6,xmm7,XMMWORD PTR [esi] 
-	vpxor	xmm7,xmm3,XMMWORD PTR 64[esi] 
-	lea	esi,QWORD PTR 16[esi] 
-	vmovdqa	xmm0,XMMWORD PTR [ebx] 
-	vmovdqa	xmm1,XMMWORD PTR 16[ebx] 
-	vmovdqa	xmm2,XMMWORD PTR 32[ebx] 
-	vmovdqa	xmm3,XMMWORD PTR 48[ebx] 
-	vmovdqu	XMMWORD PTR [edi-128],xmm4 
-	vmovdqu	XMMWORD PTR [edi-64],xmm5 
-	vmovdqu	XMMWORD PTR [edi],xmm6 
-	vmovdqu	XMMWORD PTR 64[edi],xmm7 
-	lea	edi,QWORD PTR 16[edi] 
-	vpaddd	xmm0,xmm0,XMMWORD PTR [ebp] 
-	vpaddd	xmm1,xmm1,XMMWORD PTR 16[ebp] 
-	vpaddd	xmm2,xmm2,XMMWORD PTR 32[ebp] 
-	vpaddd	xmm3,xmm3,XMMWORD PTR 48[ebp] 
-	vpunpckldq	xmm6,xmm0,xmm1 
-	vpunpckldq	xmm7,xmm2,xmm3 
-	vpunpckhdq	xmm0,xmm0,xmm1 
-	vpunpckhdq	xmm2,xmm2,xmm3 
-	vpunpcklqdq	xmm1,xmm6,xmm7 
-	vpunpckhqdq	xmm6,xmm6,xmm7 
-	vpunpcklqdq	xmm7,xmm0,xmm2 
-	vpunpckhqdq	xmm3,xmm0,xmm2 
-	vpxor	xmm4,xmm1,XMMWORD PTR [esi-128] 
-	vpxor	xmm5,xmm6,XMMWORD PTR [esi-64] 
-	vpxor	xmm6,xmm7,XMMWORD PTR [esi] 
-	vpxor	xmm7,xmm3,XMMWORD PTR 64[esi] 
-	lea	esi,QWORD PTR 16[esi] 
-	vmovdqa	xmm0,XMMWORD PTR 64[ebx] 
-	vmovdqa	xmm1,XMMWORD PTR 80[ebx] 
-	vmovdqa	xmm2,XMMWORD PTR 96[ebx] 
-	vmovdqa	xmm3,XMMWORD PTR 112[ebx] 
-	vmovdqu	XMMWORD PTR [edi-128],xmm4 
-	vmovdqu	XMMWORD PTR [edi-64],xmm5 
-	vmovdqu	XMMWORD PTR [edi],xmm6 
-	vmovdqu	XMMWORD PTR 64[edi],xmm7 
-	lea	edi,QWORD PTR 16[edi] 
-	vpaddd	xmm0,xmm0,XMMWORD PTR 64[ebp] 
-	vpaddd	xmm1,xmm1,XMMWORD PTR 80[ebp] 
-	vpaddd	xmm2,xmm2,XMMWORD PTR 96[ebp] 
-	vpaddd	xmm3,xmm3,XMMWORD PTR 112[ebp] 
-	vpunpckldq	xmm6,xmm0,xmm1 
-	vpunpckldq	xmm7,xmm2,xmm3 
-	vpunpckhdq	xmm0,xmm0,xmm1 
-	vpunpckhdq	xmm2,xmm2,xmm3 
-	vpunpcklqdq	xmm1,xmm6,xmm7 
-	vpunpckhqdq	xmm6,xmm6,xmm7 
-	vpunpcklqdq	xmm7,xmm0,xmm2 
-	vpunpckhqdq	xmm3,xmm0,xmm2 
-	vpxor	xmm4,xmm1,XMMWORD PTR [esi-128] 
-	vpxor	xmm5,xmm6,XMMWORD PTR [esi-64] 
-	vpxor	xmm6,xmm7,XMMWORD PTR [esi] 
-	vpxor	xmm7,xmm3,XMMWORD PTR 64[esi] 
-	lea	esi,QWORD PTR 208[esi] 
-	vmovdqu	XMMWORD PTR [edi-128],xmm4 
-	vmovdqu	XMMWORD PTR [edi-64],xmm5 
-	vmovdqu	XMMWORD PTR [edi],xmm6 
-	vmovdqu	XMMWORD PTR 64[edi],xmm7 
-	lea	edi,QWORD PTR 208[edi] 
-	sub	ecx,256 
-	jnc	$L015outer_loop 
-	add	ecx,256 
-	jz	$L017done 
-	mov	ebx,DWORD PTR 520[esp] 
-	lea	esi,DWORD PTR [esi-128] 
-	mov	edx,DWORD PTR 516[esp] 
-	lea	edi,DWORD PTR [edi-128] 
-	vmovd	xmm2,DWORD PTR 64[ebp] 
-	vmovdqu	xmm3,XMMWORD PTR [ebx] 
-	vpaddd	xmm2,xmm2,XMMWORD PTR 96[eax] 
-	vpand	xmm3,xmm3,XMMWORD PTR 112[eax] 
-	vpor	xmm3,xmm3,xmm2 
-$L0141x: 
-	vmovdqa	xmm0,XMMWORD PTR 32[eax] 
-	vmovdqu	xmm1,XMMWORD PTR [edx] 
-	vmovdqu	xmm2,XMMWORD PTR 16[edx] 
-	vmovdqa	xmm6,XMMWORD PTR [eax] 
-	vmovdqa	xmm7,XMMWORD PTR 16[eax] 
-	mov	DWORD PTR 48[esp],ebp 
-	vmovdqa	XMMWORD PTR [esp],xmm0 
-	vmovdqa	XMMWORD PTR 16[esp],xmm1 
-	vmovdqa	XMMWORD PTR 32[esp],xmm2 
-	vmovdqa	XMMWORD PTR 48[esp],xmm3 
-	mov	edx,10 
-	jmp	$L018loop1x 
-ALIGN	16 
-$L019outer1x: 
-	vmovdqa	xmm3,XMMWORD PTR 80[eax] 
-	vmovdqa	xmm0,XMMWORD PTR [esp] 
-	vmovdqa	xmm1,XMMWORD PTR 16[esp] 
-	vmovdqa	xmm2,XMMWORD PTR 32[esp] 
-	vpaddd	xmm3,xmm3,XMMWORD PTR 48[esp] 
-	mov	edx,10 
-	vmovdqa	XMMWORD PTR 48[esp],xmm3 
-	jmp	$L018loop1x 
-ALIGN	16 
-$L018loop1x: 
-	vpaddd	xmm0,xmm0,xmm1 
-	vpxor	xmm3,xmm3,xmm0 
-DB	143,232,120,194,219,16 
-	vpaddd	xmm2,xmm2,xmm3 
-	vpxor	xmm1,xmm1,xmm2 
-DB	143,232,120,194,201,12 
-	vpaddd	xmm0,xmm0,xmm1 
-	vpxor	xmm3,xmm3,xmm0 
-DB	143,232,120,194,219,8 
-	vpaddd	xmm2,xmm2,xmm3 
-	vpxor	xmm1,xmm1,xmm2 
-DB	143,232,120,194,201,7 
-	vpshufd	xmm2,xmm2,78 
-	vpshufd	xmm1,xmm1,57 
-	vpshufd	xmm3,xmm3,147 
-	vpaddd	xmm0,xmm0,xmm1 
-	vpxor	xmm3,xmm3,xmm0 
-DB	143,232,120,194,219,16 
-	vpaddd	xmm2,xmm2,xmm3 
-	vpxor	xmm1,xmm1,xmm2 
-DB	143,232,120,194,201,12 
-	vpaddd	xmm0,xmm0,xmm1 
-	vpxor	xmm3,xmm3,xmm0 
-DB	143,232,120,194,219,8 
-	vpaddd	xmm2,xmm2,xmm3 
-	vpxor	xmm1,xmm1,xmm2 
-DB	143,232,120,194,201,7 
-	vpshufd	xmm2,xmm2,78 
-	vpshufd	xmm1,xmm1,147 
-	vpshufd	xmm3,xmm3,57 
-	dec	edx 
-	jnz	$L018loop1x 
-	vpaddd	xmm0,xmm0,XMMWORD PTR [esp] 
-	vpaddd	xmm1,xmm1,XMMWORD PTR 16[esp] 
-	vpaddd	xmm2,xmm2,XMMWORD PTR 32[esp] 
-	vpaddd	xmm3,xmm3,XMMWORD PTR 48[esp] 
-	cmp	ecx,64 
-	jb	$L020tail 
-	vpxor	xmm0,xmm0,XMMWORD PTR [esi] 
-	vpxor	xmm1,xmm1,XMMWORD PTR 16[esi] 
-	vpxor	xmm2,xmm2,XMMWORD PTR 32[esi] 
-	vpxor	xmm3,xmm3,XMMWORD PTR 48[esi] 
-	lea	esi,DWORD PTR 64[esi] 
-	vmovdqu	XMMWORD PTR [edi],xmm0 
-	vmovdqu	XMMWORD PTR 16[edi],xmm1 
-	vmovdqu	XMMWORD PTR 32[edi],xmm2 
-	vmovdqu	XMMWORD PTR 48[edi],xmm3 
-	lea	edi,DWORD PTR 64[edi] 
-	sub	ecx,64 
-	jnz	$L019outer1x 
-	jmp	$L017done 
-$L020tail: 
-	vmovdqa	XMMWORD PTR [esp],xmm0 
-	vmovdqa	XMMWORD PTR 16[esp],xmm1 
-	vmovdqa	XMMWORD PTR 32[esp],xmm2 
-	vmovdqa	XMMWORD PTR 48[esp],xmm3 
-	xor	eax,eax 
-	xor	edx,edx 
-	xor	ebp,ebp 
-$L021tail_loop: 
-	mov	al,BYTE PTR [ebp*1+esp] 
-	mov	dl,BYTE PTR [ebp*1+esi] 
-	lea	ebp,DWORD PTR 1[ebp] 
-	xor	al,dl 
-	mov	BYTE PTR [ebp*1+edi-1],al 
-	dec	ecx 
-	jnz	$L021tail_loop 
-$L017done: 
-	vzeroupper 
-	mov	esp,DWORD PTR 512[esp] 
-	pop	edi 
-	pop	esi 
-	pop	ebx 
-	pop	ebp 
-	ret 
-_ChaCha20_xop ENDP 
-.text$	ENDS 
-.bss	SEGMENT 'BSS' 
-COMM	_OPENSSL_ia32cap_P:DWORD:4 
-.bss	ENDS 
-END 
+IF @Version LT 800
+ECHO MASM version 8.00 or later is strongly recommended.
+ENDIF
+.686
+.XMM
+IF @Version LT 800
+XMMWORD STRUCT 16
+DQ	2 dup (?)
+XMMWORD	ENDS
+ENDIF
+
+.MODEL	FLAT
+OPTION	DOTNAME
+IF @Version LT 800
+.text$	SEGMENT PAGE 'CODE'
+ELSE
+.text$	SEGMENT ALIGN(64) 'CODE'
+ENDIF
+ALIGN	16
+_ChaCha20_ctr32	PROC PUBLIC
+$L_ChaCha20_ctr32_begin::
+	push	ebp
+	push	ebx
+	push	esi
+	push	edi
+	xor	eax,eax
+	cmp	eax,DWORD PTR 28[esp]
+	je	$L000no_data
+	call	$Lpic_point
+$Lpic_point::
+	pop	eax
+	lea	ebp,DWORD PTR _OPENSSL_ia32cap_P
+	test	DWORD PTR [ebp],16777216
+	jz	$L001x86
+	test	DWORD PTR 4[ebp],512
+	jz	$L001x86
+	jmp	$Lssse3_shortcut
+$L001x86:
+	mov	esi,DWORD PTR 32[esp]
+	mov	edi,DWORD PTR 36[esp]
+	sub	esp,132
+	mov	eax,DWORD PTR [esi]
+	mov	ebx,DWORD PTR 4[esi]
+	mov	ecx,DWORD PTR 8[esi]
+	mov	edx,DWORD PTR 12[esi]
+	mov	DWORD PTR 80[esp],eax
+	mov	DWORD PTR 84[esp],ebx
+	mov	DWORD PTR 88[esp],ecx
+	mov	DWORD PTR 92[esp],edx
+	mov	eax,DWORD PTR 16[esi]
+	mov	ebx,DWORD PTR 20[esi]
+	mov	ecx,DWORD PTR 24[esi]
+	mov	edx,DWORD PTR 28[esi]
+	mov	DWORD PTR 96[esp],eax
+	mov	DWORD PTR 100[esp],ebx
+	mov	DWORD PTR 104[esp],ecx
+	mov	DWORD PTR 108[esp],edx
+	mov	eax,DWORD PTR [edi]
+	mov	ebx,DWORD PTR 4[edi]
+	mov	ecx,DWORD PTR 8[edi]
+	mov	edx,DWORD PTR 12[edi]
+	sub	eax,1
+	mov	DWORD PTR 112[esp],eax
+	mov	DWORD PTR 116[esp],ebx
+	mov	DWORD PTR 120[esp],ecx
+	mov	DWORD PTR 124[esp],edx
+	jmp	$L002entry
+ALIGN	16
+$L003outer_loop:
+	mov	DWORD PTR 156[esp],ebx
+	mov	DWORD PTR 152[esp],eax
+	mov	DWORD PTR 160[esp],ecx
+$L002entry:
+	mov	eax,1634760805
+	mov	DWORD PTR 4[esp],857760878
+	mov	DWORD PTR 8[esp],2036477234
+	mov	DWORD PTR 12[esp],1797285236
+	mov	ebx,DWORD PTR 84[esp]
+	mov	ebp,DWORD PTR 88[esp]
+	mov	ecx,DWORD PTR 104[esp]
+	mov	esi,DWORD PTR 108[esp]
+	mov	edx,DWORD PTR 116[esp]
+	mov	edi,DWORD PTR 120[esp]
+	mov	DWORD PTR 20[esp],ebx
+	mov	DWORD PTR 24[esp],ebp
+	mov	DWORD PTR 40[esp],ecx
+	mov	DWORD PTR 44[esp],esi
+	mov	DWORD PTR 52[esp],edx
+	mov	DWORD PTR 56[esp],edi
+	mov	ebx,DWORD PTR 92[esp]
+	mov	edi,DWORD PTR 124[esp]
+	mov	edx,DWORD PTR 112[esp]
+	mov	ebp,DWORD PTR 80[esp]
+	mov	ecx,DWORD PTR 96[esp]
+	mov	esi,DWORD PTR 100[esp]
+	add	edx,1
+	mov	DWORD PTR 28[esp],ebx
+	mov	DWORD PTR 60[esp],edi
+	mov	DWORD PTR 112[esp],edx
+	mov	ebx,10
+	jmp	$L004loop
+ALIGN	16
+$L004loop:
+	add	eax,ebp
+	mov	DWORD PTR 128[esp],ebx
+	mov	ebx,ebp
+	xor	edx,eax
+	rol	edx,16
+	add	ecx,edx
+	xor	ebx,ecx
+	mov	edi,DWORD PTR 52[esp]
+	rol	ebx,12
+	mov	ebp,DWORD PTR 20[esp]
+	add	eax,ebx
+	xor	edx,eax
+	mov	DWORD PTR [esp],eax
+	rol	edx,8
+	mov	eax,DWORD PTR 4[esp]
+	add	ecx,edx
+	mov	DWORD PTR 48[esp],edx
+	xor	ebx,ecx
+	add	eax,ebp
+	rol	ebx,7
+	xor	edi,eax
+	mov	DWORD PTR 32[esp],ecx
+	rol	edi,16
+	mov	DWORD PTR 16[esp],ebx
+	add	esi,edi
+	mov	ecx,DWORD PTR 40[esp]
+	xor	ebp,esi
+	mov	edx,DWORD PTR 56[esp]
+	rol	ebp,12
+	mov	ebx,DWORD PTR 24[esp]
+	add	eax,ebp
+	xor	edi,eax
+	mov	DWORD PTR 4[esp],eax
+	rol	edi,8
+	mov	eax,DWORD PTR 8[esp]
+	add	esi,edi
+	mov	DWORD PTR 52[esp],edi
+	xor	ebp,esi
+	add	eax,ebx
+	rol	ebp,7
+	xor	edx,eax
+	mov	DWORD PTR 36[esp],esi
+	rol	edx,16
+	mov	DWORD PTR 20[esp],ebp
+	add	ecx,edx
+	mov	esi,DWORD PTR 44[esp]
+	xor	ebx,ecx
+	mov	edi,DWORD PTR 60[esp]
+	rol	ebx,12
+	mov	ebp,DWORD PTR 28[esp]
+	add	eax,ebx
+	xor	edx,eax
+	mov	DWORD PTR 8[esp],eax
+	rol	edx,8
+	mov	eax,DWORD PTR 12[esp]
+	add	ecx,edx
+	mov	DWORD PTR 56[esp],edx
+	xor	ebx,ecx
+	add	eax,ebp
+	rol	ebx,7
+	xor	edi,eax
+	rol	edi,16
+	mov	DWORD PTR 24[esp],ebx
+	add	esi,edi
+	xor	ebp,esi
+	rol	ebp,12
+	mov	ebx,DWORD PTR 20[esp]
+	add	eax,ebp
+	xor	edi,eax
+	mov	DWORD PTR 12[esp],eax
+	rol	edi,8
+	mov	eax,DWORD PTR [esp]
+	add	esi,edi
+	mov	edx,edi
+	xor	ebp,esi
+	add	eax,ebx
+	rol	ebp,7
+	xor	edx,eax
+	rol	edx,16
+	mov	DWORD PTR 28[esp],ebp
+	add	ecx,edx
+	xor	ebx,ecx
+	mov	edi,DWORD PTR 48[esp]
+	rol	ebx,12
+	mov	ebp,DWORD PTR 24[esp]
+	add	eax,ebx
+	xor	edx,eax
+	mov	DWORD PTR [esp],eax
+	rol	edx,8
+	mov	eax,DWORD PTR 4[esp]
+	add	ecx,edx
+	mov	DWORD PTR 60[esp],edx
+	xor	ebx,ecx
+	add	eax,ebp
+	rol	ebx,7
+	xor	edi,eax
+	mov	DWORD PTR 40[esp],ecx
+	rol	edi,16
+	mov	DWORD PTR 20[esp],ebx
+	add	esi,edi
+	mov	ecx,DWORD PTR 32[esp]
+	xor	ebp,esi
+	mov	edx,DWORD PTR 52[esp]
+	rol	ebp,12
+	mov	ebx,DWORD PTR 28[esp]
+	add	eax,ebp
+	xor	edi,eax
+	mov	DWORD PTR 4[esp],eax
+	rol	edi,8
+	mov	eax,DWORD PTR 8[esp]
+	add	esi,edi
+	mov	DWORD PTR 48[esp],edi
+	xor	ebp,esi
+	add	eax,ebx
+	rol	ebp,7
+	xor	edx,eax
+	mov	DWORD PTR 44[esp],esi
+	rol	edx,16
+	mov	DWORD PTR 24[esp],ebp
+	add	ecx,edx
+	mov	esi,DWORD PTR 36[esp]
+	xor	ebx,ecx
+	mov	edi,DWORD PTR 56[esp]
+	rol	ebx,12
+	mov	ebp,DWORD PTR 16[esp]
+	add	eax,ebx
+	xor	edx,eax
+	mov	DWORD PTR 8[esp],eax
+	rol	edx,8
+	mov	eax,DWORD PTR 12[esp]
+	add	ecx,edx
+	mov	DWORD PTR 52[esp],edx
+	xor	ebx,ecx
+	add	eax,ebp
+	rol	ebx,7
+	xor	edi,eax
+	rol	edi,16
+	mov	DWORD PTR 28[esp],ebx
+	add	esi,edi
+	xor	ebp,esi
+	mov	edx,DWORD PTR 48[esp]
+	rol	ebp,12
+	mov	ebx,DWORD PTR 128[esp]
+	add	eax,ebp
+	xor	edi,eax
+	mov	DWORD PTR 12[esp],eax
+	rol	edi,8
+	mov	eax,DWORD PTR [esp]
+	add	esi,edi
+	mov	DWORD PTR 56[esp],edi
+	xor	ebp,esi
+	rol	ebp,7
+	dec	ebx
+	jnz	$L004loop
+	mov	ebx,DWORD PTR 160[esp]
+	add	eax,1634760805
+	add	ebp,DWORD PTR 80[esp]
+	add	ecx,DWORD PTR 96[esp]
+	add	esi,DWORD PTR 100[esp]
+	cmp	ebx,64
+	jb	$L005tail
+	mov	ebx,DWORD PTR 156[esp]
+	add	edx,DWORD PTR 112[esp]
+	add	edi,DWORD PTR 120[esp]
+	xor	eax,DWORD PTR [ebx]
+	xor	ebp,DWORD PTR 16[ebx]
+	mov	DWORD PTR [esp],eax
+	mov	eax,DWORD PTR 152[esp]
+	xor	ecx,DWORD PTR 32[ebx]
+	xor	esi,DWORD PTR 36[ebx]
+	xor	edx,DWORD PTR 48[ebx]
+	xor	edi,DWORD PTR 56[ebx]
+	mov	DWORD PTR 16[eax],ebp
+	mov	DWORD PTR 32[eax],ecx
+	mov	DWORD PTR 36[eax],esi
+	mov	DWORD PTR 48[eax],edx
+	mov	DWORD PTR 56[eax],edi
+	mov	ebp,DWORD PTR 4[esp]
+	mov	ecx,DWORD PTR 8[esp]
+	mov	esi,DWORD PTR 12[esp]
+	mov	edx,DWORD PTR 20[esp]
+	mov	edi,DWORD PTR 24[esp]
+	add	ebp,857760878
+	add	ecx,2036477234
+	add	esi,1797285236
+	add	edx,DWORD PTR 84[esp]
+	add	edi,DWORD PTR 88[esp]
+	xor	ebp,DWORD PTR 4[ebx]
+	xor	ecx,DWORD PTR 8[ebx]
+	xor	esi,DWORD PTR 12[ebx]
+	xor	edx,DWORD PTR 20[ebx]
+	xor	edi,DWORD PTR 24[ebx]
+	mov	DWORD PTR 4[eax],ebp
+	mov	DWORD PTR 8[eax],ecx
+	mov	DWORD PTR 12[eax],esi
+	mov	DWORD PTR 20[eax],edx
+	mov	DWORD PTR 24[eax],edi
+	mov	ebp,DWORD PTR 28[esp]
+	mov	ecx,DWORD PTR 40[esp]
+	mov	esi,DWORD PTR 44[esp]
+	mov	edx,DWORD PTR 52[esp]
+	mov	edi,DWORD PTR 60[esp]
+	add	ebp,DWORD PTR 92[esp]
+	add	ecx,DWORD PTR 104[esp]
+	add	esi,DWORD PTR 108[esp]
+	add	edx,DWORD PTR 116[esp]
+	add	edi,DWORD PTR 124[esp]
+	xor	ebp,DWORD PTR 28[ebx]
+	xor	ecx,DWORD PTR 40[ebx]
+	xor	esi,DWORD PTR 44[ebx]
+	xor	edx,DWORD PTR 52[ebx]
+	xor	edi,DWORD PTR 60[ebx]
+	lea	ebx,DWORD PTR 64[ebx]
+	mov	DWORD PTR 28[eax],ebp
+	mov	ebp,DWORD PTR [esp]
+	mov	DWORD PTR 40[eax],ecx
+	mov	ecx,DWORD PTR 160[esp]
+	mov	DWORD PTR 44[eax],esi
+	mov	DWORD PTR 52[eax],edx
+	mov	DWORD PTR 60[eax],edi
+	mov	DWORD PTR [eax],ebp
+	lea	eax,DWORD PTR 64[eax]
+	sub	ecx,64
+	jnz	$L003outer_loop
+	jmp	$L006done
+$L005tail:
+	add	edx,DWORD PTR 112[esp]
+	add	edi,DWORD PTR 120[esp]
+	mov	DWORD PTR [esp],eax
+	mov	DWORD PTR 16[esp],ebp
+	mov	DWORD PTR 32[esp],ecx
+	mov	DWORD PTR 36[esp],esi
+	mov	DWORD PTR 48[esp],edx
+	mov	DWORD PTR 56[esp],edi
+	mov	ebp,DWORD PTR 4[esp]
+	mov	ecx,DWORD PTR 8[esp]
+	mov	esi,DWORD PTR 12[esp]
+	mov	edx,DWORD PTR 20[esp]
+	mov	edi,DWORD PTR 24[esp]
+	add	ebp,857760878
+	add	ecx,2036477234
+	add	esi,1797285236
+	add	edx,DWORD PTR 84[esp]
+	add	edi,DWORD PTR 88[esp]
+	mov	DWORD PTR 4[esp],ebp
+	mov	DWORD PTR 8[esp],ecx
+	mov	DWORD PTR 12[esp],esi
+	mov	DWORD PTR 20[esp],edx
+	mov	DWORD PTR 24[esp],edi
+	mov	ebp,DWORD PTR 28[esp]
+	mov	ecx,DWORD PTR 40[esp]
+	mov	esi,DWORD PTR 44[esp]
+	mov	edx,DWORD PTR 52[esp]
+	mov	edi,DWORD PTR 60[esp]
+	add	ebp,DWORD PTR 92[esp]
+	add	ecx,DWORD PTR 104[esp]
+	add	esi,DWORD PTR 108[esp]
+	add	edx,DWORD PTR 116[esp]
+	add	edi,DWORD PTR 124[esp]
+	mov	DWORD PTR 28[esp],ebp
+	mov	ebp,DWORD PTR 156[esp]
+	mov	DWORD PTR 40[esp],ecx
+	mov	ecx,DWORD PTR 152[esp]
+	mov	DWORD PTR 44[esp],esi
+	xor	esi,esi
+	mov	DWORD PTR 52[esp],edx
+	mov	DWORD PTR 60[esp],edi
+	xor	eax,eax
+	xor	edx,edx
+$L007tail_loop:
+	mov	al,BYTE PTR [ebp*1+esi]
+	mov	dl,BYTE PTR [esi*1+esp]
+	lea	esi,DWORD PTR 1[esi]
+	xor	al,dl
+	mov	BYTE PTR [esi*1+ecx-1],al
+	dec	ebx
+	jnz	$L007tail_loop
+$L006done:
+	add	esp,132
+$L000no_data:
+	pop	edi
+	pop	esi
+	pop	ebx
+	pop	ebp
+	ret
+_ChaCha20_ctr32 ENDP
+ALIGN	16
+_ChaCha20_ssse3	PROC PUBLIC
+$L_ChaCha20_ssse3_begin::
+	push	ebp
+	push	ebx
+	push	esi
+	push	edi
+$Lssse3_shortcut::
+	test	DWORD PTR 4[ebp],2048
+	jnz	$Lxop_shortcut
+	mov	edi,DWORD PTR 20[esp]
+	mov	esi,DWORD PTR 24[esp]
+	mov	ecx,DWORD PTR 28[esp]
+	mov	edx,DWORD PTR 32[esp]
+	mov	ebx,DWORD PTR 36[esp]
+	mov	ebp,esp
+	sub	esp,524
+	and	esp,-64
+	mov	DWORD PTR 512[esp],ebp
+	lea	eax,DWORD PTR ($Lssse3_data-$Lpic_point)[eax]
+	movdqu	xmm3,XMMWORD PTR [ebx]
+$L0081x:
+	movdqa	xmm0,XMMWORD PTR 32[eax]
+	movdqu	xmm1,XMMWORD PTR [edx]
+	movdqu	xmm2,XMMWORD PTR 16[edx]
+	movdqa	xmm6,XMMWORD PTR [eax]
+	movdqa	xmm7,XMMWORD PTR 16[eax]
+	mov	DWORD PTR 48[esp],ebp
+	movdqa	XMMWORD PTR [esp],xmm0
+	movdqa	XMMWORD PTR 16[esp],xmm1
+	movdqa	XMMWORD PTR 32[esp],xmm2
+	movdqa	XMMWORD PTR 48[esp],xmm3
+	mov	edx,10
+	jmp	$L009loop1x
+ALIGN	16
+$L010outer1x:
+	movdqa	xmm3,XMMWORD PTR 80[eax]
+	movdqa	xmm0,XMMWORD PTR [esp]
+	movdqa	xmm1,XMMWORD PTR 16[esp]
+	movdqa	xmm2,XMMWORD PTR 32[esp]
+	paddd	xmm3,XMMWORD PTR 48[esp]
+	mov	edx,10
+	movdqa	XMMWORD PTR 48[esp],xmm3
+	jmp	$L009loop1x
+ALIGN	16
+$L009loop1x:
+	paddd	xmm0,xmm1
+	pxor	xmm3,xmm0
+DB	102,15,56,0,222
+	paddd	xmm2,xmm3
+	pxor	xmm1,xmm2
+	movdqa	xmm4,xmm1
+	psrld	xmm1,20
+	pslld	xmm4,12
+	por	xmm1,xmm4
+	paddd	xmm0,xmm1
+	pxor	xmm3,xmm0
+DB	102,15,56,0,223
+	paddd	xmm2,xmm3
+	pxor	xmm1,xmm2
+	movdqa	xmm4,xmm1
+	psrld	xmm1,25
+	pslld	xmm4,7
+	por	xmm1,xmm4
+	pshufd	xmm2,xmm2,78
+	pshufd	xmm1,xmm1,57
+	pshufd	xmm3,xmm3,147
+	nop
+	paddd	xmm0,xmm1
+	pxor	xmm3,xmm0
+DB	102,15,56,0,222
+	paddd	xmm2,xmm3
+	pxor	xmm1,xmm2
+	movdqa	xmm4,xmm1
+	psrld	xmm1,20
+	pslld	xmm4,12
+	por	xmm1,xmm4
+	paddd	xmm0,xmm1
+	pxor	xmm3,xmm0
+DB	102,15,56,0,223
+	paddd	xmm2,xmm3
+	pxor	xmm1,xmm2
+	movdqa	xmm4,xmm1
+	psrld	xmm1,25
+	pslld	xmm4,7
+	por	xmm1,xmm4
+	pshufd	xmm2,xmm2,78
+	pshufd	xmm1,xmm1,147
+	pshufd	xmm3,xmm3,57
+	dec	edx
+	jnz	$L009loop1x
+	paddd	xmm0,XMMWORD PTR [esp]
+	paddd	xmm1,XMMWORD PTR 16[esp]
+	paddd	xmm2,XMMWORD PTR 32[esp]
+	paddd	xmm3,XMMWORD PTR 48[esp]
+	cmp	ecx,64
+	jb	$L011tail
+	movdqu	xmm4,XMMWORD PTR [esi]
+	movdqu	xmm5,XMMWORD PTR 16[esi]
+	pxor	xmm0,xmm4
+	movdqu	xmm4,XMMWORD PTR 32[esi]
+	pxor	xmm1,xmm5
+	movdqu	xmm5,XMMWORD PTR 48[esi]
+	pxor	xmm2,xmm4
+	pxor	xmm3,xmm5
+	lea	esi,DWORD PTR 64[esi]
+	movdqu	XMMWORD PTR [edi],xmm0
+	movdqu	XMMWORD PTR 16[edi],xmm1
+	movdqu	XMMWORD PTR 32[edi],xmm2
+	movdqu	XMMWORD PTR 48[edi],xmm3
+	lea	edi,DWORD PTR 64[edi]
+	sub	ecx,64
+	jnz	$L010outer1x
+	jmp	$L012done
+$L011tail:
+	movdqa	XMMWORD PTR [esp],xmm0
+	movdqa	XMMWORD PTR 16[esp],xmm1
+	movdqa	XMMWORD PTR 32[esp],xmm2
+	movdqa	XMMWORD PTR 48[esp],xmm3
+	xor	eax,eax
+	xor	edx,edx
+	xor	ebp,ebp
+$L013tail_loop:
+	mov	al,BYTE PTR [ebp*1+esp]
+	mov	dl,BYTE PTR [ebp*1+esi]
+	lea	ebp,DWORD PTR 1[ebp]
+	xor	al,dl
+	mov	BYTE PTR [ebp*1+edi-1],al
+	dec	ecx
+	jnz	$L013tail_loop
+$L012done:
+	mov	esp,DWORD PTR 512[esp]
+	pop	edi
+	pop	esi
+	pop	ebx
+	pop	ebp
+	ret
+_ChaCha20_ssse3 ENDP
+ALIGN	64
+$Lssse3_data::
+DB	2,3,0,1,6,7,4,5,10,11,8,9,14,15,12,13
+DB	3,0,1,2,7,4,5,6,11,8,9,10,15,12,13,14
+DD	1634760805,857760878,2036477234,1797285236
+DD	0,1,2,3
+DD	4,4,4,4
+DD	1,0,0,0
+DD	4,0,0,0
+DD	0,-1,-1,-1
+ALIGN	64
+DB	67,104,97,67,104,97,50,48,32,102,111,114,32,120,56,54
+DB	44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32
+DB	60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111
+DB	114,103,62,0
+ALIGN	16
+_ChaCha20_xop	PROC PUBLIC
+$L_ChaCha20_xop_begin::
+	push	ebp
+	push	ebx
+	push	esi
+	push	edi
+$Lxop_shortcut::
+	mov	edi,DWORD PTR 20[esp]
+	mov	esi,DWORD PTR 24[esp]
+	mov	ecx,DWORD PTR 28[esp]
+	mov	edx,DWORD PTR 32[esp]
+	mov	ebx,DWORD PTR 36[esp]
+	vzeroupper
+	mov	ebp,esp
+	sub	esp,524
+	and	esp,-64
+	mov	DWORD PTR 512[esp],ebp
+	lea	eax,DWORD PTR ($Lssse3_data-$Lpic_point)[eax]
+	vmovdqu	xmm3,XMMWORD PTR [ebx]
+	cmp	ecx,256
+	jb	$L0141x
+	mov	DWORD PTR 516[esp],edx
+	mov	DWORD PTR 520[esp],ebx
+	sub	ecx,256
+	lea	ebp,DWORD PTR 384[esp]
+	vmovdqu	xmm7,XMMWORD PTR [edx]
+	vpshufd	xmm0,xmm3,0
+	vpshufd	xmm1,xmm3,85
+	vpshufd	xmm2,xmm3,170
+	vpshufd	xmm3,xmm3,255
+	vpaddd	xmm0,xmm0,XMMWORD PTR 48[eax]
+	vpshufd	xmm4,xmm7,0
+	vpshufd	xmm5,xmm7,85
+	vpsubd	xmm0,xmm0,XMMWORD PTR 64[eax]
+	vpshufd	xmm6,xmm7,170
+	vpshufd	xmm7,xmm7,255
+	vmovdqa	XMMWORD PTR 64[ebp],xmm0
+	vmovdqa	XMMWORD PTR 80[ebp],xmm1
+	vmovdqa	XMMWORD PTR 96[ebp],xmm2
+	vmovdqa	XMMWORD PTR 112[ebp],xmm3
+	vmovdqu	xmm3,XMMWORD PTR 16[edx]
+	vmovdqa	XMMWORD PTR [ebp-64],xmm4
+	vmovdqa	XMMWORD PTR [ebp-48],xmm5
+	vmovdqa	XMMWORD PTR [ebp-32],xmm6
+	vmovdqa	XMMWORD PTR [ebp-16],xmm7
+	vmovdqa	xmm7,XMMWORD PTR 32[eax]
+	lea	ebx,DWORD PTR 128[esp]
+	vpshufd	xmm0,xmm3,0
+	vpshufd	xmm1,xmm3,85
+	vpshufd	xmm2,xmm3,170
+	vpshufd	xmm3,xmm3,255
+	vpshufd	xmm4,xmm7,0
+	vpshufd	xmm5,xmm7,85
+	vpshufd	xmm6,xmm7,170
+	vpshufd	xmm7,xmm7,255
+	vmovdqa	XMMWORD PTR [ebp],xmm0
+	vmovdqa	XMMWORD PTR 16[ebp],xmm1
+	vmovdqa	XMMWORD PTR 32[ebp],xmm2
+	vmovdqa	XMMWORD PTR 48[ebp],xmm3
+	vmovdqa	XMMWORD PTR [ebp-128],xmm4
+	vmovdqa	XMMWORD PTR [ebp-112],xmm5
+	vmovdqa	XMMWORD PTR [ebp-96],xmm6
+	vmovdqa	XMMWORD PTR [ebp-80],xmm7
+	lea	esi,DWORD PTR 128[esi]
+	lea	edi,DWORD PTR 128[edi]
+	jmp	$L015outer_loop
+ALIGN	32
+$L015outer_loop:
+	vmovdqa	xmm1,XMMWORD PTR [ebp-112]
+	vmovdqa	xmm2,XMMWORD PTR [ebp-96]
+	vmovdqa	xmm3,XMMWORD PTR [ebp-80]
+	vmovdqa	xmm5,XMMWORD PTR [ebp-48]
+	vmovdqa	xmm6,XMMWORD PTR [ebp-32]
+	vmovdqa	xmm7,XMMWORD PTR [ebp-16]
+	vmovdqa	XMMWORD PTR [ebx-112],xmm1
+	vmovdqa	XMMWORD PTR [ebx-96],xmm2
+	vmovdqa	XMMWORD PTR [ebx-80],xmm3
+	vmovdqa	XMMWORD PTR [ebx-48],xmm5
+	vmovdqa	XMMWORD PTR [ebx-32],xmm6
+	vmovdqa	XMMWORD PTR [ebx-16],xmm7
+	vmovdqa	xmm2,XMMWORD PTR 32[ebp]
+	vmovdqa	xmm3,XMMWORD PTR 48[ebp]
+	vmovdqa	xmm4,XMMWORD PTR 64[ebp]
+	vmovdqa	xmm5,XMMWORD PTR 80[ebp]
+	vmovdqa	xmm6,XMMWORD PTR 96[ebp]
+	vmovdqa	xmm7,XMMWORD PTR 112[ebp]
+	vpaddd	xmm4,xmm4,XMMWORD PTR 64[eax]
+	vmovdqa	XMMWORD PTR 32[ebx],xmm2
+	vmovdqa	XMMWORD PTR 48[ebx],xmm3
+	vmovdqa	XMMWORD PTR 64[ebx],xmm4
+	vmovdqa	XMMWORD PTR 80[ebx],xmm5
+	vmovdqa	XMMWORD PTR 96[ebx],xmm6
+	vmovdqa	XMMWORD PTR 112[ebx],xmm7
+	vmovdqa	XMMWORD PTR 64[ebp],xmm4
+	vmovdqa	xmm0,XMMWORD PTR [ebp-128]
+	vmovdqa	xmm6,xmm4
+	vmovdqa	xmm3,XMMWORD PTR [ebp-64]
+	vmovdqa	xmm4,XMMWORD PTR [ebp]
+	vmovdqa	xmm5,XMMWORD PTR 16[ebp]
+	mov	edx,10
+	nop
+ALIGN	32
+$L016loop:
+	vpaddd	xmm0,xmm0,xmm3
+	vpxor	xmm6,xmm6,xmm0
+DB	143,232,120,194,246,16
+	vpaddd	xmm4,xmm4,xmm6
+	vpxor	xmm2,xmm3,xmm4
+	vmovdqa	xmm1,XMMWORD PTR [ebx-112]
+DB	143,232,120,194,210,12
+	vmovdqa	xmm3,XMMWORD PTR [ebx-48]
+	vpaddd	xmm0,xmm0,xmm2
+	vmovdqa	xmm7,XMMWORD PTR 80[ebx]
+	vpxor	xmm6,xmm6,xmm0
+	vpaddd	xmm1,xmm1,xmm3
+DB	143,232,120,194,246,8
+	vmovdqa	XMMWORD PTR [ebx-128],xmm0
+	vpaddd	xmm4,xmm4,xmm6
+	vmovdqa	XMMWORD PTR 64[ebx],xmm6
+	vpxor	xmm2,xmm2,xmm4
+	vpxor	xmm7,xmm7,xmm1
+DB	143,232,120,194,210,7
+	vmovdqa	XMMWORD PTR [ebx],xmm4
+DB	143,232,120,194,255,16
+	vmovdqa	XMMWORD PTR [ebx-64],xmm2
+	vpaddd	xmm5,xmm5,xmm7
+	vmovdqa	xmm4,XMMWORD PTR 32[ebx]
+	vpxor	xmm3,xmm3,xmm5
+	vmovdqa	xmm0,XMMWORD PTR [ebx-96]
+DB	143,232,120,194,219,12
+	vmovdqa	xmm2,XMMWORD PTR [ebx-32]
+	vpaddd	xmm1,xmm1,xmm3
+	vmovdqa	xmm6,XMMWORD PTR 96[ebx]
+	vpxor	xmm7,xmm7,xmm1
+	vpaddd	xmm0,xmm0,xmm2
+DB	143,232,120,194,255,8
+	vmovdqa	XMMWORD PTR [ebx-112],xmm1
+	vpaddd	xmm5,xmm5,xmm7
+	vmovdqa	XMMWORD PTR 80[ebx],xmm7
+	vpxor	xmm3,xmm3,xmm5
+	vpxor	xmm6,xmm6,xmm0
+DB	143,232,120,194,219,7
+	vmovdqa	XMMWORD PTR 16[ebx],xmm5
+DB	143,232,120,194,246,16
+	vmovdqa	XMMWORD PTR [ebx-48],xmm3
+	vpaddd	xmm4,xmm4,xmm6
+	vmovdqa	xmm5,XMMWORD PTR 48[ebx]
+	vpxor	xmm2,xmm2,xmm4
+	vmovdqa	xmm1,XMMWORD PTR [ebx-80]
+DB	143,232,120,194,210,12
+	vmovdqa	xmm3,XMMWORD PTR [ebx-16]
+	vpaddd	xmm0,xmm0,xmm2
+	vmovdqa	xmm7,XMMWORD PTR 112[ebx]
+	vpxor	xmm6,xmm6,xmm0
+	vpaddd	xmm1,xmm1,xmm3
+DB	143,232,120,194,246,8
+	vmovdqa	XMMWORD PTR [ebx-96],xmm0
+	vpaddd	xmm4,xmm4,xmm6
+	vmovdqa	XMMWORD PTR 96[ebx],xmm6
+	vpxor	xmm2,xmm2,xmm4
+	vpxor	xmm7,xmm7,xmm1
+DB	143,232,120,194,210,7
+DB	143,232,120,194,255,16
+	vmovdqa	XMMWORD PTR [ebx-32],xmm2
+	vpaddd	xmm5,xmm5,xmm7
+	vpxor	xmm3,xmm3,xmm5
+	vmovdqa	xmm0,XMMWORD PTR [ebx-128]
+DB	143,232,120,194,219,12
+	vmovdqa	xmm2,XMMWORD PTR [ebx-48]
+	vpaddd	xmm1,xmm1,xmm3
+	vpxor	xmm7,xmm7,xmm1
+	vpaddd	xmm0,xmm0,xmm2
+DB	143,232,120,194,255,8
+	vmovdqa	XMMWORD PTR [ebx-80],xmm1
+	vpaddd	xmm5,xmm5,xmm7
+	vpxor	xmm3,xmm3,xmm5
+	vpxor	xmm6,xmm7,xmm0
+DB	143,232,120,194,219,7
+DB	143,232,120,194,246,16
+	vmovdqa	XMMWORD PTR [ebx-16],xmm3
+	vpaddd	xmm4,xmm4,xmm6
+	vpxor	xmm2,xmm2,xmm4
+	vmovdqa	xmm1,XMMWORD PTR [ebx-112]
+DB	143,232,120,194,210,12
+	vmovdqa	xmm3,XMMWORD PTR [ebx-32]
+	vpaddd	xmm0,xmm0,xmm2
+	vmovdqa	xmm7,XMMWORD PTR 64[ebx]
+	vpxor	xmm6,xmm6,xmm0
+	vpaddd	xmm1,xmm1,xmm3
+DB	143,232,120,194,246,8
+	vmovdqa	XMMWORD PTR [ebx-128],xmm0
+	vpaddd	xmm4,xmm4,xmm6
+	vmovdqa	XMMWORD PTR 112[ebx],xmm6
+	vpxor	xmm2,xmm2,xmm4
+	vpxor	xmm7,xmm7,xmm1
+DB	143,232,120,194,210,7
+	vmovdqa	XMMWORD PTR 32[ebx],xmm4
+DB	143,232,120,194,255,16
+	vmovdqa	XMMWORD PTR [ebx-48],xmm2
+	vpaddd	xmm5,xmm5,xmm7
+	vmovdqa	xmm4,XMMWORD PTR [ebx]
+	vpxor	xmm3,xmm3,xmm5
+	vmovdqa	xmm0,XMMWORD PTR [ebx-96]
+DB	143,232,120,194,219,12
+	vmovdqa	xmm2,XMMWORD PTR [ebx-16]
+	vpaddd	xmm1,xmm1,xmm3
+	vmovdqa	xmm6,XMMWORD PTR 80[ebx]
+	vpxor	xmm7,xmm7,xmm1
+	vpaddd	xmm0,xmm0,xmm2
+DB	143,232,120,194,255,8
+	vmovdqa	XMMWORD PTR [ebx-112],xmm1
+	vpaddd	xmm5,xmm5,xmm7
+	vmovdqa	XMMWORD PTR 64[ebx],xmm7
+	vpxor	xmm3,xmm3,xmm5
+	vpxor	xmm6,xmm6,xmm0
+DB	143,232,120,194,219,7
+	vmovdqa	XMMWORD PTR 48[ebx],xmm5
+DB	143,232,120,194,246,16
+	vmovdqa	XMMWORD PTR [ebx-32],xmm3
+	vpaddd	xmm4,xmm4,xmm6
+	vmovdqa	xmm5,XMMWORD PTR 16[ebx]
+	vpxor	xmm2,xmm2,xmm4
+	vmovdqa	xmm1,XMMWORD PTR [ebx-80]
+DB	143,232,120,194,210,12
+	vmovdqa	xmm3,XMMWORD PTR [ebx-64]
+	vpaddd	xmm0,xmm0,xmm2
+	vmovdqa	xmm7,XMMWORD PTR 96[ebx]
+	vpxor	xmm6,xmm6,xmm0
+	vpaddd	xmm1,xmm1,xmm3
+DB	143,232,120,194,246,8
+	vmovdqa	XMMWORD PTR [ebx-96],xmm0
+	vpaddd	xmm4,xmm4,xmm6
+	vmovdqa	XMMWORD PTR 80[ebx],xmm6
+	vpxor	xmm2,xmm2,xmm4
+	vpxor	xmm7,xmm7,xmm1
+DB	143,232,120,194,210,7
+DB	143,232,120,194,255,16
+	vmovdqa	XMMWORD PTR [ebx-16],xmm2
+	vpaddd	xmm5,xmm5,xmm7
+	vpxor	xmm3,xmm3,xmm5
+	vmovdqa	xmm0,XMMWORD PTR [ebx-128]
+DB	143,232,120,194,219,12
+	vpaddd	xmm1,xmm1,xmm3
+	vmovdqa	xmm6,XMMWORD PTR 64[ebx]
+	vpxor	xmm7,xmm7,xmm1
+DB	143,232,120,194,255,8
+	vmovdqa	XMMWORD PTR [ebx-80],xmm1
+	vpaddd	xmm5,xmm5,xmm7
+	vmovdqa	XMMWORD PTR 96[ebx],xmm7
+	vpxor	xmm3,xmm3,xmm5
+DB	143,232,120,194,219,7
+	dec	edx
+	jnz	$L016loop
+	vmovdqa	XMMWORD PTR [ebx-64],xmm3
+	vmovdqa	XMMWORD PTR [ebx],xmm4
+	vmovdqa	XMMWORD PTR 16[ebx],xmm5
+	vmovdqa	XMMWORD PTR 64[ebx],xmm6
+	vmovdqa	XMMWORD PTR 96[ebx],xmm7
+	vmovdqa	xmm1,XMMWORD PTR [ebx-112]
+	vmovdqa	xmm2,XMMWORD PTR [ebx-96]
+	vmovdqa	xmm3,XMMWORD PTR [ebx-80]
+	vpaddd	xmm0,xmm0,XMMWORD PTR [ebp-128]
+	vpaddd	xmm1,xmm1,XMMWORD PTR [ebp-112]
+	vpaddd	xmm2,xmm2,XMMWORD PTR [ebp-96]
+	vpaddd	xmm3,xmm3,XMMWORD PTR [ebp-80]
+	vpunpckldq	xmm6,xmm0,xmm1
+	vpunpckldq	xmm7,xmm2,xmm3
+	vpunpckhdq	xmm0,xmm0,xmm1
+	vpunpckhdq	xmm2,xmm2,xmm3
+	vpunpcklqdq	xmm1,xmm6,xmm7
+	vpunpckhqdq	xmm6,xmm6,xmm7
+	vpunpcklqdq	xmm7,xmm0,xmm2
+	vpunpckhqdq	xmm3,xmm0,xmm2
+	vpxor	xmm4,xmm1,XMMWORD PTR [esi-128]
+	vpxor	xmm5,xmm6,XMMWORD PTR [esi-64]
+	vpxor	xmm6,xmm7,XMMWORD PTR [esi]
+	vpxor	xmm7,xmm3,XMMWORD PTR 64[esi]
+	lea	esi,QWORD PTR 16[esi]
+	vmovdqa	xmm0,XMMWORD PTR [ebx-64]
+	vmovdqa	xmm1,XMMWORD PTR [ebx-48]
+	vmovdqa	xmm2,XMMWORD PTR [ebx-32]
+	vmovdqa	xmm3,XMMWORD PTR [ebx-16]
+	vmovdqu	XMMWORD PTR [edi-128],xmm4
+	vmovdqu	XMMWORD PTR [edi-64],xmm5
+	vmovdqu	XMMWORD PTR [edi],xmm6
+	vmovdqu	XMMWORD PTR 64[edi],xmm7
+	lea	edi,QWORD PTR 16[edi]
+	vpaddd	xmm0,xmm0,XMMWORD PTR [ebp-64]
+	vpaddd	xmm1,xmm1,XMMWORD PTR [ebp-48]
+	vpaddd	xmm2,xmm2,XMMWORD PTR [ebp-32]
+	vpaddd	xmm3,xmm3,XMMWORD PTR [ebp-16]
+	vpunpckldq	xmm6,xmm0,xmm1
+	vpunpckldq	xmm7,xmm2,xmm3
+	vpunpckhdq	xmm0,xmm0,xmm1
+	vpunpckhdq	xmm2,xmm2,xmm3
+	vpunpcklqdq	xmm1,xmm6,xmm7
+	vpunpckhqdq	xmm6,xmm6,xmm7
+	vpunpcklqdq	xmm7,xmm0,xmm2
+	vpunpckhqdq	xmm3,xmm0,xmm2
+	vpxor	xmm4,xmm1,XMMWORD PTR [esi-128]
+	vpxor	xmm5,xmm6,XMMWORD PTR [esi-64]
+	vpxor	xmm6,xmm7,XMMWORD PTR [esi]
+	vpxor	xmm7,xmm3,XMMWORD PTR 64[esi]
+	lea	esi,QWORD PTR 16[esi]
+	vmovdqa	xmm0,XMMWORD PTR [ebx]
+	vmovdqa	xmm1,XMMWORD PTR 16[ebx]
+	vmovdqa	xmm2,XMMWORD PTR 32[ebx]
+	vmovdqa	xmm3,XMMWORD PTR 48[ebx]
+	vmovdqu	XMMWORD PTR [edi-128],xmm4
+	vmovdqu	XMMWORD PTR [edi-64],xmm5
+	vmovdqu	XMMWORD PTR [edi],xmm6
+	vmovdqu	XMMWORD PTR 64[edi],xmm7
+	lea	edi,QWORD PTR 16[edi]
+	vpaddd	xmm0,xmm0,XMMWORD PTR [ebp]
+	vpaddd	xmm1,xmm1,XMMWORD PTR 16[ebp]
+	vpaddd	xmm2,xmm2,XMMWORD PTR 32[ebp]
+	vpaddd	xmm3,xmm3,XMMWORD PTR 48[ebp]
+	vpunpckldq	xmm6,xmm0,xmm1
+	vpunpckldq	xmm7,xmm2,xmm3
+	vpunpckhdq	xmm0,xmm0,xmm1
+	vpunpckhdq	xmm2,xmm2,xmm3
+	vpunpcklqdq	xmm1,xmm6,xmm7
+	vpunpckhqdq	xmm6,xmm6,xmm7
+	vpunpcklqdq	xmm7,xmm0,xmm2
+	vpunpckhqdq	xmm3,xmm0,xmm2
+	vpxor	xmm4,xmm1,XMMWORD PTR [esi-128]
+	vpxor	xmm5,xmm6,XMMWORD PTR [esi-64]
+	vpxor	xmm6,xmm7,XMMWORD PTR [esi]
+	vpxor	xmm7,xmm3,XMMWORD PTR 64[esi]
+	lea	esi,QWORD PTR 16[esi]
+	vmovdqa	xmm0,XMMWORD PTR 64[ebx]
+	vmovdqa	xmm1,XMMWORD PTR 80[ebx]
+	vmovdqa	xmm2,XMMWORD PTR 96[ebx]
+	vmovdqa	xmm3,XMMWORD PTR 112[ebx]
+	vmovdqu	XMMWORD PTR [edi-128],xmm4
+	vmovdqu	XMMWORD PTR [edi-64],xmm5
+	vmovdqu	XMMWORD PTR [edi],xmm6
+	vmovdqu	XMMWORD PTR 64[edi],xmm7
+	lea	edi,QWORD PTR 16[edi]
+	vpaddd	xmm0,xmm0,XMMWORD PTR 64[ebp]
+	vpaddd	xmm1,xmm1,XMMWORD PTR 80[ebp]
+	vpaddd	xmm2,xmm2,XMMWORD PTR 96[ebp]
+	vpaddd	xmm3,xmm3,XMMWORD PTR 112[ebp]
+	vpunpckldq	xmm6,xmm0,xmm1
+	vpunpckldq	xmm7,xmm2,xmm3
+	vpunpckhdq	xmm0,xmm0,xmm1
+	vpunpckhdq	xmm2,xmm2,xmm3
+	vpunpcklqdq	xmm1,xmm6,xmm7
+	vpunpckhqdq	xmm6,xmm6,xmm7
+	vpunpcklqdq	xmm7,xmm0,xmm2
+	vpunpckhqdq	xmm3,xmm0,xmm2
+	vpxor	xmm4,xmm1,XMMWORD PTR [esi-128]
+	vpxor	xmm5,xmm6,XMMWORD PTR [esi-64]
+	vpxor	xmm6,xmm7,XMMWORD PTR [esi]
+	vpxor	xmm7,xmm3,XMMWORD PTR 64[esi]
+	lea	esi,QWORD PTR 208[esi]
+	vmovdqu	XMMWORD PTR [edi-128],xmm4
+	vmovdqu	XMMWORD PTR [edi-64],xmm5
+	vmovdqu	XMMWORD PTR [edi],xmm6
+	vmovdqu	XMMWORD PTR 64[edi],xmm7
+	lea	edi,QWORD PTR 208[edi]
+	sub	ecx,256
+	jnc	$L015outer_loop
+	add	ecx,256
+	jz	$L017done
+	mov	ebx,DWORD PTR 520[esp]
+	lea	esi,DWORD PTR [esi-128]
+	mov	edx,DWORD PTR 516[esp]
+	lea	edi,DWORD PTR [edi-128]
+	vmovd	xmm2,DWORD PTR 64[ebp]
+	vmovdqu	xmm3,XMMWORD PTR [ebx]
+	vpaddd	xmm2,xmm2,XMMWORD PTR 96[eax]
+	vpand	xmm3,xmm3,XMMWORD PTR 112[eax]
+	vpor	xmm3,xmm3,xmm2
+$L0141x:
+	vmovdqa	xmm0,XMMWORD PTR 32[eax]
+	vmovdqu	xmm1,XMMWORD PTR [edx]
+	vmovdqu	xmm2,XMMWORD PTR 16[edx]
+	vmovdqa	xmm6,XMMWORD PTR [eax]
+	vmovdqa	xmm7,XMMWORD PTR 16[eax]
+	mov	DWORD PTR 48[esp],ebp
+	vmovdqa	XMMWORD PTR [esp],xmm0
+	vmovdqa	XMMWORD PTR 16[esp],xmm1
+	vmovdqa	XMMWORD PTR 32[esp],xmm2
+	vmovdqa	XMMWORD PTR 48[esp],xmm3
+	mov	edx,10
+	jmp	$L018loop1x
+ALIGN	16
+$L019outer1x:
+	vmovdqa	xmm3,XMMWORD PTR 80[eax]
+	vmovdqa	xmm0,XMMWORD PTR [esp]
+	vmovdqa	xmm1,XMMWORD PTR 16[esp]
+	vmovdqa	xmm2,XMMWORD PTR 32[esp]
+	vpaddd	xmm3,xmm3,XMMWORD PTR 48[esp]
+	mov	edx,10
+	vmovdqa	XMMWORD PTR 48[esp],xmm3
+	jmp	$L018loop1x
+ALIGN	16
+$L018loop1x:
+	vpaddd	xmm0,xmm0,xmm1
+	vpxor	xmm3,xmm3,xmm0
+DB	143,232,120,194,219,16
+	vpaddd	xmm2,xmm2,xmm3
+	vpxor	xmm1,xmm1,xmm2
+DB	143,232,120,194,201,12
+	vpaddd	xmm0,xmm0,xmm1
+	vpxor	xmm3,xmm3,xmm0
+DB	143,232,120,194,219,8
+	vpaddd	xmm2,xmm2,xmm3
+	vpxor	xmm1,xmm1,xmm2
+DB	143,232,120,194,201,7
+	vpshufd	xmm2,xmm2,78
+	vpshufd	xmm1,xmm1,57
+	vpshufd	xmm3,xmm3,147
+	vpaddd	xmm0,xmm0,xmm1
+	vpxor	xmm3,xmm3,xmm0
+DB	143,232,120,194,219,16
+	vpaddd	xmm2,xmm2,xmm3
+	vpxor	xmm1,xmm1,xmm2
+DB	143,232,120,194,201,12
+	vpaddd	xmm0,xmm0,xmm1
+	vpxor	xmm3,xmm3,xmm0
+DB	143,232,120,194,219,8
+	vpaddd	xmm2,xmm2,xmm3
+	vpxor	xmm1,xmm1,xmm2
+DB	143,232,120,194,201,7
+	vpshufd	xmm2,xmm2,78
+	vpshufd	xmm1,xmm1,147
+	vpshufd	xmm3,xmm3,57
+	dec	edx
+	jnz	$L018loop1x
+	vpaddd	xmm0,xmm0,XMMWORD PTR [esp]
+	vpaddd	xmm1,xmm1,XMMWORD PTR 16[esp]
+	vpaddd	xmm2,xmm2,XMMWORD PTR 32[esp]
+	vpaddd	xmm3,xmm3,XMMWORD PTR 48[esp]
+	cmp	ecx,64
+	jb	$L020tail
+	vpxor	xmm0,xmm0,XMMWORD PTR [esi]
+	vpxor	xmm1,xmm1,XMMWORD PTR 16[esi]
+	vpxor	xmm2,xmm2,XMMWORD PTR 32[esi]
+	vpxor	xmm3,xmm3,XMMWORD PTR 48[esi]
+	lea	esi,DWORD PTR 64[esi]
+	vmovdqu	XMMWORD PTR [edi],xmm0
+	vmovdqu	XMMWORD PTR 16[edi],xmm1
+	vmovdqu	XMMWORD PTR 32[edi],xmm2
+	vmovdqu	XMMWORD PTR 48[edi],xmm3
+	lea	edi,DWORD PTR 64[edi]
+	sub	ecx,64
+	jnz	$L019outer1x
+	jmp	$L017done
+$L020tail:
+	vmovdqa	XMMWORD PTR [esp],xmm0
+	vmovdqa	XMMWORD PTR 16[esp],xmm1
+	vmovdqa	XMMWORD PTR 32[esp],xmm2
+	vmovdqa	XMMWORD PTR 48[esp],xmm3
+	xor	eax,eax
+	xor	edx,edx
+	xor	ebp,ebp
+$L021tail_loop:
+	mov	al,BYTE PTR [ebp*1+esp]
+	mov	dl,BYTE PTR [ebp*1+esi]
+	lea	ebp,DWORD PTR 1[ebp]
+	xor	al,dl
+	mov	BYTE PTR [ebp*1+edi-1],al
+	dec	ecx
+	jnz	$L021tail_loop
+$L017done:
+	vzeroupper
+	mov	esp,DWORD PTR 512[esp]
+	pop	edi
+	pop	esi
+	pop	ebx
+	pop	ebp
+	ret
+_ChaCha20_xop ENDP
+.text$	ENDS
+.bss	SEGMENT 'BSS'
+COMM	_OPENSSL_ia32cap_P:DWORD:4
+.bss	ENDS
+END

+ 688 - 688
contrib/libs/openssl/asm/windows/crypto/md5/md5-586.masm

@@ -1,688 +1,688 @@
-IF @Version LT 800 
-ECHO MASM version 8.00 or later is strongly recommended. 
-ENDIF 
-.686 
-.MODEL	FLAT 
-OPTION	DOTNAME 
-IF @Version LT 800 
-.text$	SEGMENT PAGE 'CODE' 
-ELSE 
-.text$	SEGMENT ALIGN(64) 'CODE' 
-ENDIF 
-ALIGN	16 
-_md5_block_asm_data_order	PROC PUBLIC 
-$L_md5_block_asm_data_order_begin:: 
-	push	esi 
-	push	edi 
-	mov	edi,DWORD PTR 12[esp] 
-	mov	esi,DWORD PTR 16[esp] 
-	mov	ecx,DWORD PTR 20[esp] 
-	push	ebp 
-	shl	ecx,6 
-	push	ebx 
-	add	ecx,esi 
-	sub	ecx,64 
-	mov	eax,DWORD PTR [edi] 
-	push	ecx 
-	mov	ebx,DWORD PTR 4[edi] 
-	mov	ecx,DWORD PTR 8[edi] 
-	mov	edx,DWORD PTR 12[edi] 
-$L000start: 
-	;  
-	; R0 section 
-	mov	edi,ecx 
-	mov	ebp,DWORD PTR [esi] 
-	; R0 0 
-	xor	edi,edx 
-	and	edi,ebx 
-	lea	eax,DWORD PTR 3614090360[ebp*1+eax] 
-	xor	edi,edx 
-	mov	ebp,DWORD PTR 4[esi] 
-	add	eax,edi 
-	rol	eax,7 
-	mov	edi,ebx 
-	add	eax,ebx 
-	; R0 1 
-	xor	edi,ecx 
-	and	edi,eax 
-	lea	edx,DWORD PTR 3905402710[ebp*1+edx] 
-	xor	edi,ecx 
-	mov	ebp,DWORD PTR 8[esi] 
-	add	edx,edi 
-	rol	edx,12 
-	mov	edi,eax 
-	add	edx,eax 
-	; R0 2 
-	xor	edi,ebx 
-	and	edi,edx 
-	lea	ecx,DWORD PTR 606105819[ebp*1+ecx] 
-	xor	edi,ebx 
-	mov	ebp,DWORD PTR 12[esi] 
-	add	ecx,edi 
-	rol	ecx,17 
-	mov	edi,edx 
-	add	ecx,edx 
-	; R0 3 
-	xor	edi,eax 
-	and	edi,ecx 
-	lea	ebx,DWORD PTR 3250441966[ebp*1+ebx] 
-	xor	edi,eax 
-	mov	ebp,DWORD PTR 16[esi] 
-	add	ebx,edi 
-	rol	ebx,22 
-	mov	edi,ecx 
-	add	ebx,ecx 
-	; R0 4 
-	xor	edi,edx 
-	and	edi,ebx 
-	lea	eax,DWORD PTR 4118548399[ebp*1+eax] 
-	xor	edi,edx 
-	mov	ebp,DWORD PTR 20[esi] 
-	add	eax,edi 
-	rol	eax,7 
-	mov	edi,ebx 
-	add	eax,ebx 
-	; R0 5 
-	xor	edi,ecx 
-	and	edi,eax 
-	lea	edx,DWORD PTR 1200080426[ebp*1+edx] 
-	xor	edi,ecx 
-	mov	ebp,DWORD PTR 24[esi] 
-	add	edx,edi 
-	rol	edx,12 
-	mov	edi,eax 
-	add	edx,eax 
-	; R0 6 
-	xor	edi,ebx 
-	and	edi,edx 
-	lea	ecx,DWORD PTR 2821735955[ebp*1+ecx] 
-	xor	edi,ebx 
-	mov	ebp,DWORD PTR 28[esi] 
-	add	ecx,edi 
-	rol	ecx,17 
-	mov	edi,edx 
-	add	ecx,edx 
-	; R0 7 
-	xor	edi,eax 
-	and	edi,ecx 
-	lea	ebx,DWORD PTR 4249261313[ebp*1+ebx] 
-	xor	edi,eax 
-	mov	ebp,DWORD PTR 32[esi] 
-	add	ebx,edi 
-	rol	ebx,22 
-	mov	edi,ecx 
-	add	ebx,ecx 
-	; R0 8 
-	xor	edi,edx 
-	and	edi,ebx 
-	lea	eax,DWORD PTR 1770035416[ebp*1+eax] 
-	xor	edi,edx 
-	mov	ebp,DWORD PTR 36[esi] 
-	add	eax,edi 
-	rol	eax,7 
-	mov	edi,ebx 
-	add	eax,ebx 
-	; R0 9 
-	xor	edi,ecx 
-	and	edi,eax 
-	lea	edx,DWORD PTR 2336552879[ebp*1+edx] 
-	xor	edi,ecx 
-	mov	ebp,DWORD PTR 40[esi] 
-	add	edx,edi 
-	rol	edx,12 
-	mov	edi,eax 
-	add	edx,eax 
-	; R0 10 
-	xor	edi,ebx 
-	and	edi,edx 
-	lea	ecx,DWORD PTR 4294925233[ebp*1+ecx] 
-	xor	edi,ebx 
-	mov	ebp,DWORD PTR 44[esi] 
-	add	ecx,edi 
-	rol	ecx,17 
-	mov	edi,edx 
-	add	ecx,edx 
-	; R0 11 
-	xor	edi,eax 
-	and	edi,ecx 
-	lea	ebx,DWORD PTR 2304563134[ebp*1+ebx] 
-	xor	edi,eax 
-	mov	ebp,DWORD PTR 48[esi] 
-	add	ebx,edi 
-	rol	ebx,22 
-	mov	edi,ecx 
-	add	ebx,ecx 
-	; R0 12 
-	xor	edi,edx 
-	and	edi,ebx 
-	lea	eax,DWORD PTR 1804603682[ebp*1+eax] 
-	xor	edi,edx 
-	mov	ebp,DWORD PTR 52[esi] 
-	add	eax,edi 
-	rol	eax,7 
-	mov	edi,ebx 
-	add	eax,ebx 
-	; R0 13 
-	xor	edi,ecx 
-	and	edi,eax 
-	lea	edx,DWORD PTR 4254626195[ebp*1+edx] 
-	xor	edi,ecx 
-	mov	ebp,DWORD PTR 56[esi] 
-	add	edx,edi 
-	rol	edx,12 
-	mov	edi,eax 
-	add	edx,eax 
-	; R0 14 
-	xor	edi,ebx 
-	and	edi,edx 
-	lea	ecx,DWORD PTR 2792965006[ebp*1+ecx] 
-	xor	edi,ebx 
-	mov	ebp,DWORD PTR 60[esi] 
-	add	ecx,edi 
-	rol	ecx,17 
-	mov	edi,edx 
-	add	ecx,edx 
-	; R0 15 
-	xor	edi,eax 
-	and	edi,ecx 
-	lea	ebx,DWORD PTR 1236535329[ebp*1+ebx] 
-	xor	edi,eax 
-	mov	ebp,DWORD PTR 4[esi] 
-	add	ebx,edi 
-	rol	ebx,22 
-	mov	edi,ecx 
-	add	ebx,ecx 
-	;  
-	; R1 section 
-	; R1 16 
-	xor	edi,ebx 
-	and	edi,edx 
-	lea	eax,DWORD PTR 4129170786[ebp*1+eax] 
-	xor	edi,ecx 
-	mov	ebp,DWORD PTR 24[esi] 
-	add	eax,edi 
-	mov	edi,ebx 
-	rol	eax,5 
-	add	eax,ebx 
-	; R1 17 
-	xor	edi,eax 
-	and	edi,ecx 
-	lea	edx,DWORD PTR 3225465664[ebp*1+edx] 
-	xor	edi,ebx 
-	mov	ebp,DWORD PTR 44[esi] 
-	add	edx,edi 
-	mov	edi,eax 
-	rol	edx,9 
-	add	edx,eax 
-	; R1 18 
-	xor	edi,edx 
-	and	edi,ebx 
-	lea	ecx,DWORD PTR 643717713[ebp*1+ecx] 
-	xor	edi,eax 
-	mov	ebp,DWORD PTR [esi] 
-	add	ecx,edi 
-	mov	edi,edx 
-	rol	ecx,14 
-	add	ecx,edx 
-	; R1 19 
-	xor	edi,ecx 
-	and	edi,eax 
-	lea	ebx,DWORD PTR 3921069994[ebp*1+ebx] 
-	xor	edi,edx 
-	mov	ebp,DWORD PTR 20[esi] 
-	add	ebx,edi 
-	mov	edi,ecx 
-	rol	ebx,20 
-	add	ebx,ecx 
-	; R1 20 
-	xor	edi,ebx 
-	and	edi,edx 
-	lea	eax,DWORD PTR 3593408605[ebp*1+eax] 
-	xor	edi,ecx 
-	mov	ebp,DWORD PTR 40[esi] 
-	add	eax,edi 
-	mov	edi,ebx 
-	rol	eax,5 
-	add	eax,ebx 
-	; R1 21 
-	xor	edi,eax 
-	and	edi,ecx 
-	lea	edx,DWORD PTR 38016083[ebp*1+edx] 
-	xor	edi,ebx 
-	mov	ebp,DWORD PTR 60[esi] 
-	add	edx,edi 
-	mov	edi,eax 
-	rol	edx,9 
-	add	edx,eax 
-	; R1 22 
-	xor	edi,edx 
-	and	edi,ebx 
-	lea	ecx,DWORD PTR 3634488961[ebp*1+ecx] 
-	xor	edi,eax 
-	mov	ebp,DWORD PTR 16[esi] 
-	add	ecx,edi 
-	mov	edi,edx 
-	rol	ecx,14 
-	add	ecx,edx 
-	; R1 23 
-	xor	edi,ecx 
-	and	edi,eax 
-	lea	ebx,DWORD PTR 3889429448[ebp*1+ebx] 
-	xor	edi,edx 
-	mov	ebp,DWORD PTR 36[esi] 
-	add	ebx,edi 
-	mov	edi,ecx 
-	rol	ebx,20 
-	add	ebx,ecx 
-	; R1 24 
-	xor	edi,ebx 
-	and	edi,edx 
-	lea	eax,DWORD PTR 568446438[ebp*1+eax] 
-	xor	edi,ecx 
-	mov	ebp,DWORD PTR 56[esi] 
-	add	eax,edi 
-	mov	edi,ebx 
-	rol	eax,5 
-	add	eax,ebx 
-	; R1 25 
-	xor	edi,eax 
-	and	edi,ecx 
-	lea	edx,DWORD PTR 3275163606[ebp*1+edx] 
-	xor	edi,ebx 
-	mov	ebp,DWORD PTR 12[esi] 
-	add	edx,edi 
-	mov	edi,eax 
-	rol	edx,9 
-	add	edx,eax 
-	; R1 26 
-	xor	edi,edx 
-	and	edi,ebx 
-	lea	ecx,DWORD PTR 4107603335[ebp*1+ecx] 
-	xor	edi,eax 
-	mov	ebp,DWORD PTR 32[esi] 
-	add	ecx,edi 
-	mov	edi,edx 
-	rol	ecx,14 
-	add	ecx,edx 
-	; R1 27 
-	xor	edi,ecx 
-	and	edi,eax 
-	lea	ebx,DWORD PTR 1163531501[ebp*1+ebx] 
-	xor	edi,edx 
-	mov	ebp,DWORD PTR 52[esi] 
-	add	ebx,edi 
-	mov	edi,ecx 
-	rol	ebx,20 
-	add	ebx,ecx 
-	; R1 28 
-	xor	edi,ebx 
-	and	edi,edx 
-	lea	eax,DWORD PTR 2850285829[ebp*1+eax] 
-	xor	edi,ecx 
-	mov	ebp,DWORD PTR 8[esi] 
-	add	eax,edi 
-	mov	edi,ebx 
-	rol	eax,5 
-	add	eax,ebx 
-	; R1 29 
-	xor	edi,eax 
-	and	edi,ecx 
-	lea	edx,DWORD PTR 4243563512[ebp*1+edx] 
-	xor	edi,ebx 
-	mov	ebp,DWORD PTR 28[esi] 
-	add	edx,edi 
-	mov	edi,eax 
-	rol	edx,9 
-	add	edx,eax 
-	; R1 30 
-	xor	edi,edx 
-	and	edi,ebx 
-	lea	ecx,DWORD PTR 1735328473[ebp*1+ecx] 
-	xor	edi,eax 
-	mov	ebp,DWORD PTR 48[esi] 
-	add	ecx,edi 
-	mov	edi,edx 
-	rol	ecx,14 
-	add	ecx,edx 
-	; R1 31 
-	xor	edi,ecx 
-	and	edi,eax 
-	lea	ebx,DWORD PTR 2368359562[ebp*1+ebx] 
-	xor	edi,edx 
-	mov	ebp,DWORD PTR 20[esi] 
-	add	ebx,edi 
-	mov	edi,ecx 
-	rol	ebx,20 
-	add	ebx,ecx 
-	;  
-	; R2 section 
-	; R2 32 
-	xor	edi,edx 
-	xor	edi,ebx 
-	lea	eax,DWORD PTR 4294588738[ebp*1+eax] 
-	add	eax,edi 
-	mov	ebp,DWORD PTR 32[esi] 
-	rol	eax,4 
-	mov	edi,ebx 
-	; R2 33 
-	add	eax,ebx 
-	xor	edi,ecx 
-	lea	edx,DWORD PTR 2272392833[ebp*1+edx] 
-	xor	edi,eax 
-	mov	ebp,DWORD PTR 44[esi] 
-	add	edx,edi 
-	mov	edi,eax 
-	rol	edx,11 
-	add	edx,eax 
-	; R2 34 
-	xor	edi,ebx 
-	xor	edi,edx 
-	lea	ecx,DWORD PTR 1839030562[ebp*1+ecx] 
-	add	ecx,edi 
-	mov	ebp,DWORD PTR 56[esi] 
-	rol	ecx,16 
-	mov	edi,edx 
-	; R2 35 
-	add	ecx,edx 
-	xor	edi,eax 
-	lea	ebx,DWORD PTR 4259657740[ebp*1+ebx] 
-	xor	edi,ecx 
-	mov	ebp,DWORD PTR 4[esi] 
-	add	ebx,edi 
-	mov	edi,ecx 
-	rol	ebx,23 
-	add	ebx,ecx 
-	; R2 36 
-	xor	edi,edx 
-	xor	edi,ebx 
-	lea	eax,DWORD PTR 2763975236[ebp*1+eax] 
-	add	eax,edi 
-	mov	ebp,DWORD PTR 16[esi] 
-	rol	eax,4 
-	mov	edi,ebx 
-	; R2 37 
-	add	eax,ebx 
-	xor	edi,ecx 
-	lea	edx,DWORD PTR 1272893353[ebp*1+edx] 
-	xor	edi,eax 
-	mov	ebp,DWORD PTR 28[esi] 
-	add	edx,edi 
-	mov	edi,eax 
-	rol	edx,11 
-	add	edx,eax 
-	; R2 38 
-	xor	edi,ebx 
-	xor	edi,edx 
-	lea	ecx,DWORD PTR 4139469664[ebp*1+ecx] 
-	add	ecx,edi 
-	mov	ebp,DWORD PTR 40[esi] 
-	rol	ecx,16 
-	mov	edi,edx 
-	; R2 39 
-	add	ecx,edx 
-	xor	edi,eax 
-	lea	ebx,DWORD PTR 3200236656[ebp*1+ebx] 
-	xor	edi,ecx 
-	mov	ebp,DWORD PTR 52[esi] 
-	add	ebx,edi 
-	mov	edi,ecx 
-	rol	ebx,23 
-	add	ebx,ecx 
-	; R2 40 
-	xor	edi,edx 
-	xor	edi,ebx 
-	lea	eax,DWORD PTR 681279174[ebp*1+eax] 
-	add	eax,edi 
-	mov	ebp,DWORD PTR [esi] 
-	rol	eax,4 
-	mov	edi,ebx 
-	; R2 41 
-	add	eax,ebx 
-	xor	edi,ecx 
-	lea	edx,DWORD PTR 3936430074[ebp*1+edx] 
-	xor	edi,eax 
-	mov	ebp,DWORD PTR 12[esi] 
-	add	edx,edi 
-	mov	edi,eax 
-	rol	edx,11 
-	add	edx,eax 
-	; R2 42 
-	xor	edi,ebx 
-	xor	edi,edx 
-	lea	ecx,DWORD PTR 3572445317[ebp*1+ecx] 
-	add	ecx,edi 
-	mov	ebp,DWORD PTR 24[esi] 
-	rol	ecx,16 
-	mov	edi,edx 
-	; R2 43 
-	add	ecx,edx 
-	xor	edi,eax 
-	lea	ebx,DWORD PTR 76029189[ebp*1+ebx] 
-	xor	edi,ecx 
-	mov	ebp,DWORD PTR 36[esi] 
-	add	ebx,edi 
-	mov	edi,ecx 
-	rol	ebx,23 
-	add	ebx,ecx 
-	; R2 44 
-	xor	edi,edx 
-	xor	edi,ebx 
-	lea	eax,DWORD PTR 3654602809[ebp*1+eax] 
-	add	eax,edi 
-	mov	ebp,DWORD PTR 48[esi] 
-	rol	eax,4 
-	mov	edi,ebx 
-	; R2 45 
-	add	eax,ebx 
-	xor	edi,ecx 
-	lea	edx,DWORD PTR 3873151461[ebp*1+edx] 
-	xor	edi,eax 
-	mov	ebp,DWORD PTR 60[esi] 
-	add	edx,edi 
-	mov	edi,eax 
-	rol	edx,11 
-	add	edx,eax 
-	; R2 46 
-	xor	edi,ebx 
-	xor	edi,edx 
-	lea	ecx,DWORD PTR 530742520[ebp*1+ecx] 
-	add	ecx,edi 
-	mov	ebp,DWORD PTR 8[esi] 
-	rol	ecx,16 
-	mov	edi,edx 
-	; R2 47 
-	add	ecx,edx 
-	xor	edi,eax 
-	lea	ebx,DWORD PTR 3299628645[ebp*1+ebx] 
-	xor	edi,ecx 
-	mov	ebp,DWORD PTR [esi] 
-	add	ebx,edi 
-	mov	edi,-1 
-	rol	ebx,23 
-	add	ebx,ecx 
-	;  
-	; R3 section 
-	; R3 48 
-	xor	edi,edx 
-	or	edi,ebx 
-	lea	eax,DWORD PTR 4096336452[ebp*1+eax] 
-	xor	edi,ecx 
-	mov	ebp,DWORD PTR 28[esi] 
-	add	eax,edi 
-	mov	edi,-1 
-	rol	eax,6 
-	xor	edi,ecx 
-	add	eax,ebx 
-	; R3 49 
-	or	edi,eax 
-	lea	edx,DWORD PTR 1126891415[ebp*1+edx] 
-	xor	edi,ebx 
-	mov	ebp,DWORD PTR 56[esi] 
-	add	edx,edi 
-	mov	edi,-1 
-	rol	edx,10 
-	xor	edi,ebx 
-	add	edx,eax 
-	; R3 50 
-	or	edi,edx 
-	lea	ecx,DWORD PTR 2878612391[ebp*1+ecx] 
-	xor	edi,eax 
-	mov	ebp,DWORD PTR 20[esi] 
-	add	ecx,edi 
-	mov	edi,-1 
-	rol	ecx,15 
-	xor	edi,eax 
-	add	ecx,edx 
-	; R3 51 
-	or	edi,ecx 
-	lea	ebx,DWORD PTR 4237533241[ebp*1+ebx] 
-	xor	edi,edx 
-	mov	ebp,DWORD PTR 48[esi] 
-	add	ebx,edi 
-	mov	edi,-1 
-	rol	ebx,21 
-	xor	edi,edx 
-	add	ebx,ecx 
-	; R3 52 
-	or	edi,ebx 
-	lea	eax,DWORD PTR 1700485571[ebp*1+eax] 
-	xor	edi,ecx 
-	mov	ebp,DWORD PTR 12[esi] 
-	add	eax,edi 
-	mov	edi,-1 
-	rol	eax,6 
-	xor	edi,ecx 
-	add	eax,ebx 
-	; R3 53 
-	or	edi,eax 
-	lea	edx,DWORD PTR 2399980690[ebp*1+edx] 
-	xor	edi,ebx 
-	mov	ebp,DWORD PTR 40[esi] 
-	add	edx,edi 
-	mov	edi,-1 
-	rol	edx,10 
-	xor	edi,ebx 
-	add	edx,eax 
-	; R3 54 
-	or	edi,edx 
-	lea	ecx,DWORD PTR 4293915773[ebp*1+ecx] 
-	xor	edi,eax 
-	mov	ebp,DWORD PTR 4[esi] 
-	add	ecx,edi 
-	mov	edi,-1 
-	rol	ecx,15 
-	xor	edi,eax 
-	add	ecx,edx 
-	; R3 55 
-	or	edi,ecx 
-	lea	ebx,DWORD PTR 2240044497[ebp*1+ebx] 
-	xor	edi,edx 
-	mov	ebp,DWORD PTR 32[esi] 
-	add	ebx,edi 
-	mov	edi,-1 
-	rol	ebx,21 
-	xor	edi,edx 
-	add	ebx,ecx 
-	; R3 56 
-	or	edi,ebx 
-	lea	eax,DWORD PTR 1873313359[ebp*1+eax] 
-	xor	edi,ecx 
-	mov	ebp,DWORD PTR 60[esi] 
-	add	eax,edi 
-	mov	edi,-1 
-	rol	eax,6 
-	xor	edi,ecx 
-	add	eax,ebx 
-	; R3 57 
-	or	edi,eax 
-	lea	edx,DWORD PTR 4264355552[ebp*1+edx] 
-	xor	edi,ebx 
-	mov	ebp,DWORD PTR 24[esi] 
-	add	edx,edi 
-	mov	edi,-1 
-	rol	edx,10 
-	xor	edi,ebx 
-	add	edx,eax 
-	; R3 58 
-	or	edi,edx 
-	lea	ecx,DWORD PTR 2734768916[ebp*1+ecx] 
-	xor	edi,eax 
-	mov	ebp,DWORD PTR 52[esi] 
-	add	ecx,edi 
-	mov	edi,-1 
-	rol	ecx,15 
-	xor	edi,eax 
-	add	ecx,edx 
-	; R3 59 
-	or	edi,ecx 
-	lea	ebx,DWORD PTR 1309151649[ebp*1+ebx] 
-	xor	edi,edx 
-	mov	ebp,DWORD PTR 16[esi] 
-	add	ebx,edi 
-	mov	edi,-1 
-	rol	ebx,21 
-	xor	edi,edx 
-	add	ebx,ecx 
-	; R3 60 
-	or	edi,ebx 
-	lea	eax,DWORD PTR 4149444226[ebp*1+eax] 
-	xor	edi,ecx 
-	mov	ebp,DWORD PTR 44[esi] 
-	add	eax,edi 
-	mov	edi,-1 
-	rol	eax,6 
-	xor	edi,ecx 
-	add	eax,ebx 
-	; R3 61 
-	or	edi,eax 
-	lea	edx,DWORD PTR 3174756917[ebp*1+edx] 
-	xor	edi,ebx 
-	mov	ebp,DWORD PTR 8[esi] 
-	add	edx,edi 
-	mov	edi,-1 
-	rol	edx,10 
-	xor	edi,ebx 
-	add	edx,eax 
-	; R3 62 
-	or	edi,edx 
-	lea	ecx,DWORD PTR 718787259[ebp*1+ecx] 
-	xor	edi,eax 
-	mov	ebp,DWORD PTR 36[esi] 
-	add	ecx,edi 
-	mov	edi,-1 
-	rol	ecx,15 
-	xor	edi,eax 
-	add	ecx,edx 
-	; R3 63 
-	or	edi,ecx 
-	lea	ebx,DWORD PTR 3951481745[ebp*1+ebx] 
-	xor	edi,edx 
-	mov	ebp,DWORD PTR 24[esp] 
-	add	ebx,edi 
-	add	esi,64 
-	rol	ebx,21 
-	mov	edi,DWORD PTR [ebp] 
-	add	ebx,ecx 
-	add	eax,edi 
-	mov	edi,DWORD PTR 4[ebp] 
-	add	ebx,edi 
-	mov	edi,DWORD PTR 8[ebp] 
-	add	ecx,edi 
-	mov	edi,DWORD PTR 12[ebp] 
-	add	edx,edi 
-	mov	DWORD PTR [ebp],eax 
-	mov	DWORD PTR 4[ebp],ebx 
-	mov	edi,DWORD PTR [esp] 
-	mov	DWORD PTR 8[ebp],ecx 
-	mov	DWORD PTR 12[ebp],edx 
-	cmp	edi,esi 
-	jae	$L000start 
-	pop	eax 
-	pop	ebx 
-	pop	ebp 
-	pop	edi 
-	pop	esi 
-	ret 
-_md5_block_asm_data_order ENDP 
-.text$	ENDS 
-END 
+IF @Version LT 800
+ECHO MASM version 8.00 or later is strongly recommended.
+ENDIF
+.686
+.MODEL	FLAT
+OPTION	DOTNAME
+IF @Version LT 800
+.text$	SEGMENT PAGE 'CODE'
+ELSE
+.text$	SEGMENT ALIGN(64) 'CODE'
+ENDIF
+ALIGN	16
+_md5_block_asm_data_order	PROC PUBLIC
+$L_md5_block_asm_data_order_begin::
+	push	esi
+	push	edi
+	mov	edi,DWORD PTR 12[esp]
+	mov	esi,DWORD PTR 16[esp]
+	mov	ecx,DWORD PTR 20[esp]
+	push	ebp
+	shl	ecx,6
+	push	ebx
+	add	ecx,esi
+	sub	ecx,64
+	mov	eax,DWORD PTR [edi]
+	push	ecx
+	mov	ebx,DWORD PTR 4[edi]
+	mov	ecx,DWORD PTR 8[edi]
+	mov	edx,DWORD PTR 12[edi]
+$L000start:
+	; 
+	; R0 section
+	mov	edi,ecx
+	mov	ebp,DWORD PTR [esi]
+	; R0 0
+	xor	edi,edx
+	and	edi,ebx
+	lea	eax,DWORD PTR 3614090360[ebp*1+eax]
+	xor	edi,edx
+	mov	ebp,DWORD PTR 4[esi]
+	add	eax,edi
+	rol	eax,7
+	mov	edi,ebx
+	add	eax,ebx
+	; R0 1
+	xor	edi,ecx
+	and	edi,eax
+	lea	edx,DWORD PTR 3905402710[ebp*1+edx]
+	xor	edi,ecx
+	mov	ebp,DWORD PTR 8[esi]
+	add	edx,edi
+	rol	edx,12
+	mov	edi,eax
+	add	edx,eax
+	; R0 2
+	xor	edi,ebx
+	and	edi,edx
+	lea	ecx,DWORD PTR 606105819[ebp*1+ecx]
+	xor	edi,ebx
+	mov	ebp,DWORD PTR 12[esi]
+	add	ecx,edi
+	rol	ecx,17
+	mov	edi,edx
+	add	ecx,edx
+	; R0 3
+	xor	edi,eax
+	and	edi,ecx
+	lea	ebx,DWORD PTR 3250441966[ebp*1+ebx]
+	xor	edi,eax
+	mov	ebp,DWORD PTR 16[esi]
+	add	ebx,edi
+	rol	ebx,22
+	mov	edi,ecx
+	add	ebx,ecx
+	; R0 4
+	xor	edi,edx
+	and	edi,ebx
+	lea	eax,DWORD PTR 4118548399[ebp*1+eax]
+	xor	edi,edx
+	mov	ebp,DWORD PTR 20[esi]
+	add	eax,edi
+	rol	eax,7
+	mov	edi,ebx
+	add	eax,ebx
+	; R0 5
+	xor	edi,ecx
+	and	edi,eax
+	lea	edx,DWORD PTR 1200080426[ebp*1+edx]
+	xor	edi,ecx
+	mov	ebp,DWORD PTR 24[esi]
+	add	edx,edi
+	rol	edx,12
+	mov	edi,eax
+	add	edx,eax
+	; R0 6
+	xor	edi,ebx
+	and	edi,edx
+	lea	ecx,DWORD PTR 2821735955[ebp*1+ecx]
+	xor	edi,ebx
+	mov	ebp,DWORD PTR 28[esi]
+	add	ecx,edi
+	rol	ecx,17
+	mov	edi,edx
+	add	ecx,edx
+	; R0 7
+	xor	edi,eax
+	and	edi,ecx
+	lea	ebx,DWORD PTR 4249261313[ebp*1+ebx]
+	xor	edi,eax
+	mov	ebp,DWORD PTR 32[esi]
+	add	ebx,edi
+	rol	ebx,22
+	mov	edi,ecx
+	add	ebx,ecx
+	; R0 8
+	xor	edi,edx
+	and	edi,ebx
+	lea	eax,DWORD PTR 1770035416[ebp*1+eax]
+	xor	edi,edx
+	mov	ebp,DWORD PTR 36[esi]
+	add	eax,edi
+	rol	eax,7
+	mov	edi,ebx
+	add	eax,ebx
+	; R0 9
+	xor	edi,ecx
+	and	edi,eax
+	lea	edx,DWORD PTR 2336552879[ebp*1+edx]
+	xor	edi,ecx
+	mov	ebp,DWORD PTR 40[esi]
+	add	edx,edi
+	rol	edx,12
+	mov	edi,eax
+	add	edx,eax
+	; R0 10
+	xor	edi,ebx
+	and	edi,edx
+	lea	ecx,DWORD PTR 4294925233[ebp*1+ecx]
+	xor	edi,ebx
+	mov	ebp,DWORD PTR 44[esi]
+	add	ecx,edi
+	rol	ecx,17
+	mov	edi,edx
+	add	ecx,edx
+	; R0 11
+	xor	edi,eax
+	and	edi,ecx
+	lea	ebx,DWORD PTR 2304563134[ebp*1+ebx]
+	xor	edi,eax
+	mov	ebp,DWORD PTR 48[esi]
+	add	ebx,edi
+	rol	ebx,22
+	mov	edi,ecx
+	add	ebx,ecx
+	; R0 12
+	xor	edi,edx
+	and	edi,ebx
+	lea	eax,DWORD PTR 1804603682[ebp*1+eax]
+	xor	edi,edx
+	mov	ebp,DWORD PTR 52[esi]
+	add	eax,edi
+	rol	eax,7
+	mov	edi,ebx
+	add	eax,ebx
+	; R0 13
+	xor	edi,ecx
+	and	edi,eax
+	lea	edx,DWORD PTR 4254626195[ebp*1+edx]
+	xor	edi,ecx
+	mov	ebp,DWORD PTR 56[esi]
+	add	edx,edi
+	rol	edx,12
+	mov	edi,eax
+	add	edx,eax
+	; R0 14
+	xor	edi,ebx
+	and	edi,edx
+	lea	ecx,DWORD PTR 2792965006[ebp*1+ecx]
+	xor	edi,ebx
+	mov	ebp,DWORD PTR 60[esi]
+	add	ecx,edi
+	rol	ecx,17
+	mov	edi,edx
+	add	ecx,edx
+	; R0 15
+	xor	edi,eax
+	and	edi,ecx
+	lea	ebx,DWORD PTR 1236535329[ebp*1+ebx]
+	xor	edi,eax
+	mov	ebp,DWORD PTR 4[esi]
+	add	ebx,edi
+	rol	ebx,22
+	mov	edi,ecx
+	add	ebx,ecx
+	; 
+	; R1 section
+	; R1 16
+	xor	edi,ebx
+	and	edi,edx
+	lea	eax,DWORD PTR 4129170786[ebp*1+eax]
+	xor	edi,ecx
+	mov	ebp,DWORD PTR 24[esi]
+	add	eax,edi
+	mov	edi,ebx
+	rol	eax,5
+	add	eax,ebx
+	; R1 17
+	xor	edi,eax
+	and	edi,ecx
+	lea	edx,DWORD PTR 3225465664[ebp*1+edx]
+	xor	edi,ebx
+	mov	ebp,DWORD PTR 44[esi]
+	add	edx,edi
+	mov	edi,eax
+	rol	edx,9
+	add	edx,eax
+	; R1 18
+	xor	edi,edx
+	and	edi,ebx
+	lea	ecx,DWORD PTR 643717713[ebp*1+ecx]
+	xor	edi,eax
+	mov	ebp,DWORD PTR [esi]
+	add	ecx,edi
+	mov	edi,edx
+	rol	ecx,14
+	add	ecx,edx
+	; R1 19
+	xor	edi,ecx
+	and	edi,eax
+	lea	ebx,DWORD PTR 3921069994[ebp*1+ebx]
+	xor	edi,edx
+	mov	ebp,DWORD PTR 20[esi]
+	add	ebx,edi
+	mov	edi,ecx
+	rol	ebx,20
+	add	ebx,ecx
+	; R1 20
+	xor	edi,ebx
+	and	edi,edx
+	lea	eax,DWORD PTR 3593408605[ebp*1+eax]
+	xor	edi,ecx
+	mov	ebp,DWORD PTR 40[esi]
+	add	eax,edi
+	mov	edi,ebx
+	rol	eax,5
+	add	eax,ebx
+	; R1 21
+	xor	edi,eax
+	and	edi,ecx
+	lea	edx,DWORD PTR 38016083[ebp*1+edx]
+	xor	edi,ebx
+	mov	ebp,DWORD PTR 60[esi]
+	add	edx,edi
+	mov	edi,eax
+	rol	edx,9
+	add	edx,eax
+	; R1 22
+	xor	edi,edx
+	and	edi,ebx
+	lea	ecx,DWORD PTR 3634488961[ebp*1+ecx]
+	xor	edi,eax
+	mov	ebp,DWORD PTR 16[esi]
+	add	ecx,edi
+	mov	edi,edx
+	rol	ecx,14
+	add	ecx,edx
+	; R1 23
+	xor	edi,ecx
+	and	edi,eax
+	lea	ebx,DWORD PTR 3889429448[ebp*1+ebx]
+	xor	edi,edx
+	mov	ebp,DWORD PTR 36[esi]
+	add	ebx,edi
+	mov	edi,ecx
+	rol	ebx,20
+	add	ebx,ecx
+	; R1 24
+	xor	edi,ebx
+	and	edi,edx
+	lea	eax,DWORD PTR 568446438[ebp*1+eax]
+	xor	edi,ecx
+	mov	ebp,DWORD PTR 56[esi]
+	add	eax,edi
+	mov	edi,ebx
+	rol	eax,5
+	add	eax,ebx
+	; R1 25
+	xor	edi,eax
+	and	edi,ecx
+	lea	edx,DWORD PTR 3275163606[ebp*1+edx]
+	xor	edi,ebx
+	mov	ebp,DWORD PTR 12[esi]
+	add	edx,edi
+	mov	edi,eax
+	rol	edx,9
+	add	edx,eax
+	; R1 26
+	xor	edi,edx
+	and	edi,ebx
+	lea	ecx,DWORD PTR 4107603335[ebp*1+ecx]
+	xor	edi,eax
+	mov	ebp,DWORD PTR 32[esi]
+	add	ecx,edi
+	mov	edi,edx
+	rol	ecx,14
+	add	ecx,edx
+	; R1 27
+	xor	edi,ecx
+	and	edi,eax
+	lea	ebx,DWORD PTR 1163531501[ebp*1+ebx]
+	xor	edi,edx
+	mov	ebp,DWORD PTR 52[esi]
+	add	ebx,edi
+	mov	edi,ecx
+	rol	ebx,20
+	add	ebx,ecx
+	; R1 28
+	xor	edi,ebx
+	and	edi,edx
+	lea	eax,DWORD PTR 2850285829[ebp*1+eax]
+	xor	edi,ecx
+	mov	ebp,DWORD PTR 8[esi]
+	add	eax,edi
+	mov	edi,ebx
+	rol	eax,5
+	add	eax,ebx
+	; R1 29
+	xor	edi,eax
+	and	edi,ecx
+	lea	edx,DWORD PTR 4243563512[ebp*1+edx]
+	xor	edi,ebx
+	mov	ebp,DWORD PTR 28[esi]
+	add	edx,edi
+	mov	edi,eax
+	rol	edx,9
+	add	edx,eax
+	; R1 30
+	xor	edi,edx
+	and	edi,ebx
+	lea	ecx,DWORD PTR 1735328473[ebp*1+ecx]
+	xor	edi,eax
+	mov	ebp,DWORD PTR 48[esi]
+	add	ecx,edi
+	mov	edi,edx
+	rol	ecx,14
+	add	ecx,edx
+	; R1 31
+	xor	edi,ecx
+	and	edi,eax
+	lea	ebx,DWORD PTR 2368359562[ebp*1+ebx]
+	xor	edi,edx
+	mov	ebp,DWORD PTR 20[esi]
+	add	ebx,edi
+	mov	edi,ecx
+	rol	ebx,20
+	add	ebx,ecx
+	; 
+	; R2 section
+	; R2 32
+	xor	edi,edx
+	xor	edi,ebx
+	lea	eax,DWORD PTR 4294588738[ebp*1+eax]
+	add	eax,edi
+	mov	ebp,DWORD PTR 32[esi]
+	rol	eax,4
+	mov	edi,ebx
+	; R2 33
+	add	eax,ebx
+	xor	edi,ecx
+	lea	edx,DWORD PTR 2272392833[ebp*1+edx]
+	xor	edi,eax
+	mov	ebp,DWORD PTR 44[esi]
+	add	edx,edi
+	mov	edi,eax
+	rol	edx,11
+	add	edx,eax
+	; R2 34
+	xor	edi,ebx
+	xor	edi,edx
+	lea	ecx,DWORD PTR 1839030562[ebp*1+ecx]
+	add	ecx,edi
+	mov	ebp,DWORD PTR 56[esi]
+	rol	ecx,16
+	mov	edi,edx
+	; R2 35
+	add	ecx,edx
+	xor	edi,eax
+	lea	ebx,DWORD PTR 4259657740[ebp*1+ebx]
+	xor	edi,ecx
+	mov	ebp,DWORD PTR 4[esi]
+	add	ebx,edi
+	mov	edi,ecx
+	rol	ebx,23
+	add	ebx,ecx
+	; R2 36
+	xor	edi,edx
+	xor	edi,ebx
+	lea	eax,DWORD PTR 2763975236[ebp*1+eax]
+	add	eax,edi
+	mov	ebp,DWORD PTR 16[esi]
+	rol	eax,4
+	mov	edi,ebx
+	; R2 37
+	add	eax,ebx
+	xor	edi,ecx
+	lea	edx,DWORD PTR 1272893353[ebp*1+edx]
+	xor	edi,eax
+	mov	ebp,DWORD PTR 28[esi]
+	add	edx,edi
+	mov	edi,eax
+	rol	edx,11
+	add	edx,eax
+	; R2 38
+	xor	edi,ebx
+	xor	edi,edx
+	lea	ecx,DWORD PTR 4139469664[ebp*1+ecx]
+	add	ecx,edi
+	mov	ebp,DWORD PTR 40[esi]
+	rol	ecx,16
+	mov	edi,edx
+	; R2 39
+	add	ecx,edx
+	xor	edi,eax
+	lea	ebx,DWORD PTR 3200236656[ebp*1+ebx]
+	xor	edi,ecx
+	mov	ebp,DWORD PTR 52[esi]
+	add	ebx,edi
+	mov	edi,ecx
+	rol	ebx,23
+	add	ebx,ecx
+	; R2 40
+	xor	edi,edx
+	xor	edi,ebx
+	lea	eax,DWORD PTR 681279174[ebp*1+eax]
+	add	eax,edi
+	mov	ebp,DWORD PTR [esi]
+	rol	eax,4
+	mov	edi,ebx
+	; R2 41
+	add	eax,ebx
+	xor	edi,ecx
+	lea	edx,DWORD PTR 3936430074[ebp*1+edx]
+	xor	edi,eax
+	mov	ebp,DWORD PTR 12[esi]
+	add	edx,edi
+	mov	edi,eax
+	rol	edx,11
+	add	edx,eax
+	; R2 42
+	xor	edi,ebx
+	xor	edi,edx
+	lea	ecx,DWORD PTR 3572445317[ebp*1+ecx]
+	add	ecx,edi
+	mov	ebp,DWORD PTR 24[esi]
+	rol	ecx,16
+	mov	edi,edx
+	; R2 43
+	add	ecx,edx
+	xor	edi,eax
+	lea	ebx,DWORD PTR 76029189[ebp*1+ebx]
+	xor	edi,ecx
+	mov	ebp,DWORD PTR 36[esi]
+	add	ebx,edi
+	mov	edi,ecx
+	rol	ebx,23
+	add	ebx,ecx
+	; R2 44
+	xor	edi,edx
+	xor	edi,ebx
+	lea	eax,DWORD PTR 3654602809[ebp*1+eax]
+	add	eax,edi
+	mov	ebp,DWORD PTR 48[esi]
+	rol	eax,4
+	mov	edi,ebx
+	; R2 45
+	add	eax,ebx
+	xor	edi,ecx
+	lea	edx,DWORD PTR 3873151461[ebp*1+edx]
+	xor	edi,eax
+	mov	ebp,DWORD PTR 60[esi]
+	add	edx,edi
+	mov	edi,eax
+	rol	edx,11
+	add	edx,eax
+	; R2 46
+	xor	edi,ebx
+	xor	edi,edx
+	lea	ecx,DWORD PTR 530742520[ebp*1+ecx]
+	add	ecx,edi
+	mov	ebp,DWORD PTR 8[esi]
+	rol	ecx,16
+	mov	edi,edx
+	; R2 47
+	add	ecx,edx
+	xor	edi,eax
+	lea	ebx,DWORD PTR 3299628645[ebp*1+ebx]
+	xor	edi,ecx
+	mov	ebp,DWORD PTR [esi]
+	add	ebx,edi
+	mov	edi,-1
+	rol	ebx,23
+	add	ebx,ecx
+	; 
+	; R3 section
+	; R3 48
+	xor	edi,edx
+	or	edi,ebx
+	lea	eax,DWORD PTR 4096336452[ebp*1+eax]
+	xor	edi,ecx
+	mov	ebp,DWORD PTR 28[esi]
+	add	eax,edi
+	mov	edi,-1
+	rol	eax,6
+	xor	edi,ecx
+	add	eax,ebx
+	; R3 49
+	or	edi,eax
+	lea	edx,DWORD PTR 1126891415[ebp*1+edx]
+	xor	edi,ebx
+	mov	ebp,DWORD PTR 56[esi]
+	add	edx,edi
+	mov	edi,-1
+	rol	edx,10
+	xor	edi,ebx
+	add	edx,eax
+	; R3 50
+	or	edi,edx
+	lea	ecx,DWORD PTR 2878612391[ebp*1+ecx]
+	xor	edi,eax
+	mov	ebp,DWORD PTR 20[esi]
+	add	ecx,edi
+	mov	edi,-1
+	rol	ecx,15
+	xor	edi,eax
+	add	ecx,edx
+	; R3 51
+	or	edi,ecx
+	lea	ebx,DWORD PTR 4237533241[ebp*1+ebx]
+	xor	edi,edx
+	mov	ebp,DWORD PTR 48[esi]
+	add	ebx,edi
+	mov	edi,-1
+	rol	ebx,21
+	xor	edi,edx
+	add	ebx,ecx
+	; R3 52
+	or	edi,ebx
+	lea	eax,DWORD PTR 1700485571[ebp*1+eax]
+	xor	edi,ecx
+	mov	ebp,DWORD PTR 12[esi]
+	add	eax,edi
+	mov	edi,-1
+	rol	eax,6
+	xor	edi,ecx
+	add	eax,ebx
+	; R3 53
+	or	edi,eax
+	lea	edx,DWORD PTR 2399980690[ebp*1+edx]
+	xor	edi,ebx
+	mov	ebp,DWORD PTR 40[esi]
+	add	edx,edi
+	mov	edi,-1
+	rol	edx,10
+	xor	edi,ebx
+	add	edx,eax
+	; R3 54
+	or	edi,edx
+	lea	ecx,DWORD PTR 4293915773[ebp*1+ecx]
+	xor	edi,eax
+	mov	ebp,DWORD PTR 4[esi]
+	add	ecx,edi
+	mov	edi,-1
+	rol	ecx,15
+	xor	edi,eax
+	add	ecx,edx
+	; R3 55
+	or	edi,ecx
+	lea	ebx,DWORD PTR 2240044497[ebp*1+ebx]
+	xor	edi,edx
+	mov	ebp,DWORD PTR 32[esi]
+	add	ebx,edi
+	mov	edi,-1
+	rol	ebx,21
+	xor	edi,edx
+	add	ebx,ecx
+	; R3 56
+	or	edi,ebx
+	lea	eax,DWORD PTR 1873313359[ebp*1+eax]
+	xor	edi,ecx
+	mov	ebp,DWORD PTR 60[esi]
+	add	eax,edi
+	mov	edi,-1
+	rol	eax,6
+	xor	edi,ecx
+	add	eax,ebx
+	; R3 57
+	or	edi,eax
+	lea	edx,DWORD PTR 4264355552[ebp*1+edx]
+	xor	edi,ebx
+	mov	ebp,DWORD PTR 24[esi]
+	add	edx,edi
+	mov	edi,-1
+	rol	edx,10
+	xor	edi,ebx
+	add	edx,eax
+	; R3 58
+	or	edi,edx
+	lea	ecx,DWORD PTR 2734768916[ebp*1+ecx]
+	xor	edi,eax
+	mov	ebp,DWORD PTR 52[esi]
+	add	ecx,edi
+	mov	edi,-1
+	rol	ecx,15
+	xor	edi,eax
+	add	ecx,edx
+	; R3 59
+	or	edi,ecx
+	lea	ebx,DWORD PTR 1309151649[ebp*1+ebx]
+	xor	edi,edx
+	mov	ebp,DWORD PTR 16[esi]
+	add	ebx,edi
+	mov	edi,-1
+	rol	ebx,21
+	xor	edi,edx
+	add	ebx,ecx
+	; R3 60
+	or	edi,ebx
+	lea	eax,DWORD PTR 4149444226[ebp*1+eax]
+	xor	edi,ecx
+	mov	ebp,DWORD PTR 44[esi]
+	add	eax,edi
+	mov	edi,-1
+	rol	eax,6
+	xor	edi,ecx
+	add	eax,ebx
+	; R3 61
+	or	edi,eax
+	lea	edx,DWORD PTR 3174756917[ebp*1+edx]
+	xor	edi,ebx
+	mov	ebp,DWORD PTR 8[esi]
+	add	edx,edi
+	mov	edi,-1
+	rol	edx,10
+	xor	edi,ebx
+	add	edx,eax
+	; R3 62
+	or	edi,edx
+	lea	ecx,DWORD PTR 718787259[ebp*1+ecx]
+	xor	edi,eax
+	mov	ebp,DWORD PTR 36[esi]
+	add	ecx,edi
+	mov	edi,-1
+	rol	ecx,15
+	xor	edi,eax
+	add	ecx,edx
+	; R3 63
+	or	edi,ecx
+	lea	ebx,DWORD PTR 3951481745[ebp*1+ebx]
+	xor	edi,edx
+	mov	ebp,DWORD PTR 24[esp]
+	add	ebx,edi
+	add	esi,64
+	rol	ebx,21
+	mov	edi,DWORD PTR [ebp]
+	add	ebx,ecx
+	add	eax,edi
+	mov	edi,DWORD PTR 4[ebp]
+	add	ebx,edi
+	mov	edi,DWORD PTR 8[ebp]
+	add	ecx,edi
+	mov	edi,DWORD PTR 12[ebp]
+	add	edx,edi
+	mov	DWORD PTR [ebp],eax
+	mov	DWORD PTR 4[ebp],ebx
+	mov	edi,DWORD PTR [esp]
+	mov	DWORD PTR 8[ebp],ecx
+	mov	DWORD PTR 12[ebp],edx
+	cmp	edi,esi
+	jae	$L000start
+	pop	eax
+	pop	ebx
+	pop	ebp
+	pop	edi
+	pop	esi
+	ret
+_md5_block_asm_data_order ENDP
+.text$	ENDS
+END

+ 1273 - 1273
contrib/libs/openssl/asm/windows/crypto/modes/ghash-x86.masm

@@ -1,1273 +1,1273 @@
-IF @Version LT 800 
-ECHO MASM version 8.00 or later is strongly recommended. 
-ENDIF 
-.686 
-.XMM 
-IF @Version LT 800 
-XMMWORD STRUCT 16 
-DQ	2 dup (?) 
-XMMWORD	ENDS 
-ENDIF 
- 
-.MODEL	FLAT 
-OPTION	DOTNAME 
-IF @Version LT 800 
-.text$	SEGMENT PAGE 'CODE' 
-ELSE 
-.text$	SEGMENT ALIGN(64) 'CODE' 
-ENDIF 
-ALIGN	16 
-_gcm_gmult_4bit_x86	PROC PUBLIC 
-$L_gcm_gmult_4bit_x86_begin:: 
-	push	ebp 
-	push	ebx 
-	push	esi 
-	push	edi 
-	sub	esp,84 
-	mov	edi,DWORD PTR 104[esp] 
-	mov	esi,DWORD PTR 108[esp] 
-	mov	ebp,DWORD PTR [edi] 
-	mov	edx,DWORD PTR 4[edi] 
-	mov	ecx,DWORD PTR 8[edi] 
-	mov	ebx,DWORD PTR 12[edi] 
-	mov	DWORD PTR 16[esp],0 
-	mov	DWORD PTR 20[esp],471859200 
-	mov	DWORD PTR 24[esp],943718400 
-	mov	DWORD PTR 28[esp],610271232 
-	mov	DWORD PTR 32[esp],1887436800 
-	mov	DWORD PTR 36[esp],1822425088 
-	mov	DWORD PTR 40[esp],1220542464 
-	mov	DWORD PTR 44[esp],1423966208 
-	mov	DWORD PTR 48[esp],3774873600 
-	mov	DWORD PTR 52[esp],4246732800 
-	mov	DWORD PTR 56[esp],3644850176 
-	mov	DWORD PTR 60[esp],3311403008 
-	mov	DWORD PTR 64[esp],2441084928 
-	mov	DWORD PTR 68[esp],2376073216 
-	mov	DWORD PTR 72[esp],2847932416 
-	mov	DWORD PTR 76[esp],3051356160 
-	mov	DWORD PTR [esp],ebp 
-	mov	DWORD PTR 4[esp],edx 
-	mov	DWORD PTR 8[esp],ecx 
-	mov	DWORD PTR 12[esp],ebx 
-	shr	ebx,20 
-	and	ebx,240 
-	mov	ebp,DWORD PTR 4[ebx*1+esi] 
-	mov	edx,DWORD PTR [ebx*1+esi] 
-	mov	ecx,DWORD PTR 12[ebx*1+esi] 
-	mov	ebx,DWORD PTR 8[ebx*1+esi] 
-	xor	eax,eax 
-	mov	edi,15 
-	jmp	$L000x86_loop 
-ALIGN	16 
-$L000x86_loop: 
-	mov	al,bl 
-	shrd	ebx,ecx,4 
-	and	al,15 
-	shrd	ecx,edx,4 
-	shrd	edx,ebp,4 
-	shr	ebp,4 
-	xor	ebp,DWORD PTR 16[eax*4+esp] 
-	mov	al,BYTE PTR [edi*1+esp] 
-	and	al,240 
-	xor	ebx,DWORD PTR 8[eax*1+esi] 
-	xor	ecx,DWORD PTR 12[eax*1+esi] 
-	xor	edx,DWORD PTR [eax*1+esi] 
-	xor	ebp,DWORD PTR 4[eax*1+esi] 
-	dec	edi 
-	js	$L001x86_break 
-	mov	al,bl 
-	shrd	ebx,ecx,4 
-	and	al,15 
-	shrd	ecx,edx,4 
-	shrd	edx,ebp,4 
-	shr	ebp,4 
-	xor	ebp,DWORD PTR 16[eax*4+esp] 
-	mov	al,BYTE PTR [edi*1+esp] 
-	shl	al,4 
-	xor	ebx,DWORD PTR 8[eax*1+esi] 
-	xor	ecx,DWORD PTR 12[eax*1+esi] 
-	xor	edx,DWORD PTR [eax*1+esi] 
-	xor	ebp,DWORD PTR 4[eax*1+esi] 
-	jmp	$L000x86_loop 
-ALIGN	16 
-$L001x86_break: 
-	bswap	ebx 
-	bswap	ecx 
-	bswap	edx 
-	bswap	ebp 
-	mov	edi,DWORD PTR 104[esp] 
-	mov	DWORD PTR 12[edi],ebx 
-	mov	DWORD PTR 8[edi],ecx 
-	mov	DWORD PTR 4[edi],edx 
-	mov	DWORD PTR [edi],ebp 
-	add	esp,84 
-	pop	edi 
-	pop	esi 
-	pop	ebx 
-	pop	ebp 
-	ret 
-_gcm_gmult_4bit_x86 ENDP 
-ALIGN	16 
-_gcm_ghash_4bit_x86	PROC PUBLIC 
-$L_gcm_ghash_4bit_x86_begin:: 
-	push	ebp 
-	push	ebx 
-	push	esi 
-	push	edi 
-	sub	esp,84 
-	mov	ebx,DWORD PTR 104[esp] 
-	mov	esi,DWORD PTR 108[esp] 
-	mov	edi,DWORD PTR 112[esp] 
-	mov	ecx,DWORD PTR 116[esp] 
-	add	ecx,edi 
-	mov	DWORD PTR 116[esp],ecx 
-	mov	ebp,DWORD PTR [ebx] 
-	mov	edx,DWORD PTR 4[ebx] 
-	mov	ecx,DWORD PTR 8[ebx] 
-	mov	ebx,DWORD PTR 12[ebx] 
-	mov	DWORD PTR 16[esp],0 
-	mov	DWORD PTR 20[esp],471859200 
-	mov	DWORD PTR 24[esp],943718400 
-	mov	DWORD PTR 28[esp],610271232 
-	mov	DWORD PTR 32[esp],1887436800 
-	mov	DWORD PTR 36[esp],1822425088 
-	mov	DWORD PTR 40[esp],1220542464 
-	mov	DWORD PTR 44[esp],1423966208 
-	mov	DWORD PTR 48[esp],3774873600 
-	mov	DWORD PTR 52[esp],4246732800 
-	mov	DWORD PTR 56[esp],3644850176 
-	mov	DWORD PTR 60[esp],3311403008 
-	mov	DWORD PTR 64[esp],2441084928 
-	mov	DWORD PTR 68[esp],2376073216 
-	mov	DWORD PTR 72[esp],2847932416 
-	mov	DWORD PTR 76[esp],3051356160 
-ALIGN	16 
-$L002x86_outer_loop: 
-	xor	ebx,DWORD PTR 12[edi] 
-	xor	ecx,DWORD PTR 8[edi] 
-	xor	edx,DWORD PTR 4[edi] 
-	xor	ebp,DWORD PTR [edi] 
-	mov	DWORD PTR 12[esp],ebx 
-	mov	DWORD PTR 8[esp],ecx 
-	mov	DWORD PTR 4[esp],edx 
-	mov	DWORD PTR [esp],ebp 
-	shr	ebx,20 
-	and	ebx,240 
-	mov	ebp,DWORD PTR 4[ebx*1+esi] 
-	mov	edx,DWORD PTR [ebx*1+esi] 
-	mov	ecx,DWORD PTR 12[ebx*1+esi] 
-	mov	ebx,DWORD PTR 8[ebx*1+esi] 
-	xor	eax,eax 
-	mov	edi,15 
-	jmp	$L003x86_loop 
-ALIGN	16 
-$L003x86_loop: 
-	mov	al,bl 
-	shrd	ebx,ecx,4 
-	and	al,15 
-	shrd	ecx,edx,4 
-	shrd	edx,ebp,4 
-	shr	ebp,4 
-	xor	ebp,DWORD PTR 16[eax*4+esp] 
-	mov	al,BYTE PTR [edi*1+esp] 
-	and	al,240 
-	xor	ebx,DWORD PTR 8[eax*1+esi] 
-	xor	ecx,DWORD PTR 12[eax*1+esi] 
-	xor	edx,DWORD PTR [eax*1+esi] 
-	xor	ebp,DWORD PTR 4[eax*1+esi] 
-	dec	edi 
-	js	$L004x86_break 
-	mov	al,bl 
-	shrd	ebx,ecx,4 
-	and	al,15 
-	shrd	ecx,edx,4 
-	shrd	edx,ebp,4 
-	shr	ebp,4 
-	xor	ebp,DWORD PTR 16[eax*4+esp] 
-	mov	al,BYTE PTR [edi*1+esp] 
-	shl	al,4 
-	xor	ebx,DWORD PTR 8[eax*1+esi] 
-	xor	ecx,DWORD PTR 12[eax*1+esi] 
-	xor	edx,DWORD PTR [eax*1+esi] 
-	xor	ebp,DWORD PTR 4[eax*1+esi] 
-	jmp	$L003x86_loop 
-ALIGN	16 
-$L004x86_break: 
-	bswap	ebx 
-	bswap	ecx 
-	bswap	edx 
-	bswap	ebp 
-	mov	edi,DWORD PTR 112[esp] 
-	lea	edi,DWORD PTR 16[edi] 
-	cmp	edi,DWORD PTR 116[esp] 
-	mov	DWORD PTR 112[esp],edi 
-	jb	$L002x86_outer_loop 
-	mov	edi,DWORD PTR 104[esp] 
-	mov	DWORD PTR 12[edi],ebx 
-	mov	DWORD PTR 8[edi],ecx 
-	mov	DWORD PTR 4[edi],edx 
-	mov	DWORD PTR [edi],ebp 
-	add	esp,84 
-	pop	edi 
-	pop	esi 
-	pop	ebx 
-	pop	ebp 
-	ret 
-_gcm_ghash_4bit_x86 ENDP 
-ALIGN	16 
-_gcm_gmult_4bit_mmx	PROC PUBLIC 
-$L_gcm_gmult_4bit_mmx_begin:: 
-	push	ebp 
-	push	ebx 
-	push	esi 
-	push	edi 
-	mov	edi,DWORD PTR 20[esp] 
-	mov	esi,DWORD PTR 24[esp] 
-	call	$L005pic_point 
-$L005pic_point: 
-	pop	eax 
-	lea	eax,DWORD PTR ($Lrem_4bit-$L005pic_point)[eax] 
-	movzx	ebx,BYTE PTR 15[edi] 
-	xor	ecx,ecx 
-	mov	edx,ebx 
-	mov	cl,dl 
-	mov	ebp,14 
-	shl	cl,4 
-	and	edx,240 
-	movq	mm0,QWORD PTR 8[ecx*1+esi] 
-	movq	mm1,QWORD PTR [ecx*1+esi] 
-	movd	ebx,mm0 
-	jmp	$L006mmx_loop 
-ALIGN	16 
-$L006mmx_loop: 
-	psrlq	mm0,4 
-	and	ebx,15 
-	movq	mm2,mm1 
-	psrlq	mm1,4 
-	pxor	mm0,QWORD PTR 8[edx*1+esi] 
-	mov	cl,BYTE PTR [ebp*1+edi] 
-	psllq	mm2,60 
-	pxor	mm1,QWORD PTR [ebx*8+eax] 
-	dec	ebp 
-	movd	ebx,mm0 
-	pxor	mm1,QWORD PTR [edx*1+esi] 
-	mov	edx,ecx 
-	pxor	mm0,mm2 
-	js	$L007mmx_break 
-	shl	cl,4 
-	and	ebx,15 
-	psrlq	mm0,4 
-	and	edx,240 
-	movq	mm2,mm1 
-	psrlq	mm1,4 
-	pxor	mm0,QWORD PTR 8[ecx*1+esi] 
-	psllq	mm2,60 
-	pxor	mm1,QWORD PTR [ebx*8+eax] 
-	movd	ebx,mm0 
-	pxor	mm1,QWORD PTR [ecx*1+esi] 
-	pxor	mm0,mm2 
-	jmp	$L006mmx_loop 
-ALIGN	16 
-$L007mmx_break: 
-	shl	cl,4 
-	and	ebx,15 
-	psrlq	mm0,4 
-	and	edx,240 
-	movq	mm2,mm1 
-	psrlq	mm1,4 
-	pxor	mm0,QWORD PTR 8[ecx*1+esi] 
-	psllq	mm2,60 
-	pxor	mm1,QWORD PTR [ebx*8+eax] 
-	movd	ebx,mm0 
-	pxor	mm1,QWORD PTR [ecx*1+esi] 
-	pxor	mm0,mm2 
-	psrlq	mm0,4 
-	and	ebx,15 
-	movq	mm2,mm1 
-	psrlq	mm1,4 
-	pxor	mm0,QWORD PTR 8[edx*1+esi] 
-	psllq	mm2,60 
-	pxor	mm1,QWORD PTR [ebx*8+eax] 
-	movd	ebx,mm0 
-	pxor	mm1,QWORD PTR [edx*1+esi] 
-	pxor	mm0,mm2 
-	psrlq	mm0,32 
-	movd	edx,mm1 
-	psrlq	mm1,32 
-	movd	ecx,mm0 
-	movd	ebp,mm1 
-	bswap	ebx 
-	bswap	edx 
-	bswap	ecx 
-	bswap	ebp 
-	emms 
-	mov	DWORD PTR 12[edi],ebx 
-	mov	DWORD PTR 4[edi],edx 
-	mov	DWORD PTR 8[edi],ecx 
-	mov	DWORD PTR [edi],ebp 
-	pop	edi 
-	pop	esi 
-	pop	ebx 
-	pop	ebp 
-	ret 
-_gcm_gmult_4bit_mmx ENDP 
-ALIGN	16 
-_gcm_ghash_4bit_mmx	PROC PUBLIC 
-$L_gcm_ghash_4bit_mmx_begin:: 
-	push	ebp 
-	push	ebx 
-	push	esi 
-	push	edi 
-	mov	eax,DWORD PTR 20[esp] 
-	mov	ebx,DWORD PTR 24[esp] 
-	mov	ecx,DWORD PTR 28[esp] 
-	mov	edx,DWORD PTR 32[esp] 
-	mov	ebp,esp 
-	call	$L008pic_point 
-$L008pic_point: 
-	pop	esi 
-	lea	esi,DWORD PTR ($Lrem_8bit-$L008pic_point)[esi] 
-	sub	esp,544 
-	and	esp,-64 
-	sub	esp,16 
-	add	edx,ecx 
-	mov	DWORD PTR 544[esp],eax 
-	mov	DWORD PTR 552[esp],edx 
-	mov	DWORD PTR 556[esp],ebp 
-	add	ebx,128 
-	lea	edi,DWORD PTR 144[esp] 
-	lea	ebp,DWORD PTR 400[esp] 
-	mov	edx,DWORD PTR [ebx-120] 
-	movq	mm0,QWORD PTR [ebx-120] 
-	movq	mm3,QWORD PTR [ebx-128] 
-	shl	edx,4 
-	mov	BYTE PTR [esp],dl 
-	mov	edx,DWORD PTR [ebx-104] 
-	movq	mm2,QWORD PTR [ebx-104] 
-	movq	mm5,QWORD PTR [ebx-112] 
-	movq	QWORD PTR [edi-128],mm0 
-	psrlq	mm0,4 
-	movq	QWORD PTR [edi],mm3 
-	movq	mm7,mm3 
-	psrlq	mm3,4 
-	shl	edx,4 
-	mov	BYTE PTR 1[esp],dl 
-	mov	edx,DWORD PTR [ebx-88] 
-	movq	mm1,QWORD PTR [ebx-88] 
-	psllq	mm7,60 
-	movq	mm4,QWORD PTR [ebx-96] 
-	por	mm0,mm7 
-	movq	QWORD PTR [edi-120],mm2 
-	psrlq	mm2,4 
-	movq	QWORD PTR 8[edi],mm5 
-	movq	mm6,mm5 
-	movq	QWORD PTR [ebp-128],mm0 
-	psrlq	mm5,4 
-	movq	QWORD PTR [ebp],mm3 
-	shl	edx,4 
-	mov	BYTE PTR 2[esp],dl 
-	mov	edx,DWORD PTR [ebx-72] 
-	movq	mm0,QWORD PTR [ebx-72] 
-	psllq	mm6,60 
-	movq	mm3,QWORD PTR [ebx-80] 
-	por	mm2,mm6 
-	movq	QWORD PTR [edi-112],mm1 
-	psrlq	mm1,4 
-	movq	QWORD PTR 16[edi],mm4 
-	movq	mm7,mm4 
-	movq	QWORD PTR [ebp-120],mm2 
-	psrlq	mm4,4 
-	movq	QWORD PTR 8[ebp],mm5 
-	shl	edx,4 
-	mov	BYTE PTR 3[esp],dl 
-	mov	edx,DWORD PTR [ebx-56] 
-	movq	mm2,QWORD PTR [ebx-56] 
-	psllq	mm7,60 
-	movq	mm5,QWORD PTR [ebx-64] 
-	por	mm1,mm7 
-	movq	QWORD PTR [edi-104],mm0 
-	psrlq	mm0,4 
-	movq	QWORD PTR 24[edi],mm3 
-	movq	mm6,mm3 
-	movq	QWORD PTR [ebp-112],mm1 
-	psrlq	mm3,4 
-	movq	QWORD PTR 16[ebp],mm4 
-	shl	edx,4 
-	mov	BYTE PTR 4[esp],dl 
-	mov	edx,DWORD PTR [ebx-40] 
-	movq	mm1,QWORD PTR [ebx-40] 
-	psllq	mm6,60 
-	movq	mm4,QWORD PTR [ebx-48] 
-	por	mm0,mm6 
-	movq	QWORD PTR [edi-96],mm2 
-	psrlq	mm2,4 
-	movq	QWORD PTR 32[edi],mm5 
-	movq	mm7,mm5 
-	movq	QWORD PTR [ebp-104],mm0 
-	psrlq	mm5,4 
-	movq	QWORD PTR 24[ebp],mm3 
-	shl	edx,4 
-	mov	BYTE PTR 5[esp],dl 
-	mov	edx,DWORD PTR [ebx-24] 
-	movq	mm0,QWORD PTR [ebx-24] 
-	psllq	mm7,60 
-	movq	mm3,QWORD PTR [ebx-32] 
-	por	mm2,mm7 
-	movq	QWORD PTR [edi-88],mm1 
-	psrlq	mm1,4 
-	movq	QWORD PTR 40[edi],mm4 
-	movq	mm6,mm4 
-	movq	QWORD PTR [ebp-96],mm2 
-	psrlq	mm4,4 
-	movq	QWORD PTR 32[ebp],mm5 
-	shl	edx,4 
-	mov	BYTE PTR 6[esp],dl 
-	mov	edx,DWORD PTR [ebx-8] 
-	movq	mm2,QWORD PTR [ebx-8] 
-	psllq	mm6,60 
-	movq	mm5,QWORD PTR [ebx-16] 
-	por	mm1,mm6 
-	movq	QWORD PTR [edi-80],mm0 
-	psrlq	mm0,4 
-	movq	QWORD PTR 48[edi],mm3 
-	movq	mm7,mm3 
-	movq	QWORD PTR [ebp-88],mm1 
-	psrlq	mm3,4 
-	movq	QWORD PTR 40[ebp],mm4 
-	shl	edx,4 
-	mov	BYTE PTR 7[esp],dl 
-	mov	edx,DWORD PTR 8[ebx] 
-	movq	mm1,QWORD PTR 8[ebx] 
-	psllq	mm7,60 
-	movq	mm4,QWORD PTR [ebx] 
-	por	mm0,mm7 
-	movq	QWORD PTR [edi-72],mm2 
-	psrlq	mm2,4 
-	movq	QWORD PTR 56[edi],mm5 
-	movq	mm6,mm5 
-	movq	QWORD PTR [ebp-80],mm0 
-	psrlq	mm5,4 
-	movq	QWORD PTR 48[ebp],mm3 
-	shl	edx,4 
-	mov	BYTE PTR 8[esp],dl 
-	mov	edx,DWORD PTR 24[ebx] 
-	movq	mm0,QWORD PTR 24[ebx] 
-	psllq	mm6,60 
-	movq	mm3,QWORD PTR 16[ebx] 
-	por	mm2,mm6 
-	movq	QWORD PTR [edi-64],mm1 
-	psrlq	mm1,4 
-	movq	QWORD PTR 64[edi],mm4 
-	movq	mm7,mm4 
-	movq	QWORD PTR [ebp-72],mm2 
-	psrlq	mm4,4 
-	movq	QWORD PTR 56[ebp],mm5 
-	shl	edx,4 
-	mov	BYTE PTR 9[esp],dl 
-	mov	edx,DWORD PTR 40[ebx] 
-	movq	mm2,QWORD PTR 40[ebx] 
-	psllq	mm7,60 
-	movq	mm5,QWORD PTR 32[ebx] 
-	por	mm1,mm7 
-	movq	QWORD PTR [edi-56],mm0 
-	psrlq	mm0,4 
-	movq	QWORD PTR 72[edi],mm3 
-	movq	mm6,mm3 
-	movq	QWORD PTR [ebp-64],mm1 
-	psrlq	mm3,4 
-	movq	QWORD PTR 64[ebp],mm4 
-	shl	edx,4 
-	mov	BYTE PTR 10[esp],dl 
-	mov	edx,DWORD PTR 56[ebx] 
-	movq	mm1,QWORD PTR 56[ebx] 
-	psllq	mm6,60 
-	movq	mm4,QWORD PTR 48[ebx] 
-	por	mm0,mm6 
-	movq	QWORD PTR [edi-48],mm2 
-	psrlq	mm2,4 
-	movq	QWORD PTR 80[edi],mm5 
-	movq	mm7,mm5 
-	movq	QWORD PTR [ebp-56],mm0 
-	psrlq	mm5,4 
-	movq	QWORD PTR 72[ebp],mm3 
-	shl	edx,4 
-	mov	BYTE PTR 11[esp],dl 
-	mov	edx,DWORD PTR 72[ebx] 
-	movq	mm0,QWORD PTR 72[ebx] 
-	psllq	mm7,60 
-	movq	mm3,QWORD PTR 64[ebx] 
-	por	mm2,mm7 
-	movq	QWORD PTR [edi-40],mm1 
-	psrlq	mm1,4 
-	movq	QWORD PTR 88[edi],mm4 
-	movq	mm6,mm4 
-	movq	QWORD PTR [ebp-48],mm2 
-	psrlq	mm4,4 
-	movq	QWORD PTR 80[ebp],mm5 
-	shl	edx,4 
-	mov	BYTE PTR 12[esp],dl 
-	mov	edx,DWORD PTR 88[ebx] 
-	movq	mm2,QWORD PTR 88[ebx] 
-	psllq	mm6,60 
-	movq	mm5,QWORD PTR 80[ebx] 
-	por	mm1,mm6 
-	movq	QWORD PTR [edi-32],mm0 
-	psrlq	mm0,4 
-	movq	QWORD PTR 96[edi],mm3 
-	movq	mm7,mm3 
-	movq	QWORD PTR [ebp-40],mm1 
-	psrlq	mm3,4 
-	movq	QWORD PTR 88[ebp],mm4 
-	shl	edx,4 
-	mov	BYTE PTR 13[esp],dl 
-	mov	edx,DWORD PTR 104[ebx] 
-	movq	mm1,QWORD PTR 104[ebx] 
-	psllq	mm7,60 
-	movq	mm4,QWORD PTR 96[ebx] 
-	por	mm0,mm7 
-	movq	QWORD PTR [edi-24],mm2 
-	psrlq	mm2,4 
-	movq	QWORD PTR 104[edi],mm5 
-	movq	mm6,mm5 
-	movq	QWORD PTR [ebp-32],mm0 
-	psrlq	mm5,4 
-	movq	QWORD PTR 96[ebp],mm3 
-	shl	edx,4 
-	mov	BYTE PTR 14[esp],dl 
-	mov	edx,DWORD PTR 120[ebx] 
-	movq	mm0,QWORD PTR 120[ebx] 
-	psllq	mm6,60 
-	movq	mm3,QWORD PTR 112[ebx] 
-	por	mm2,mm6 
-	movq	QWORD PTR [edi-16],mm1 
-	psrlq	mm1,4 
-	movq	QWORD PTR 112[edi],mm4 
-	movq	mm7,mm4 
-	movq	QWORD PTR [ebp-24],mm2 
-	psrlq	mm4,4 
-	movq	QWORD PTR 104[ebp],mm5 
-	shl	edx,4 
-	mov	BYTE PTR 15[esp],dl 
-	psllq	mm7,60 
-	por	mm1,mm7 
-	movq	QWORD PTR [edi-8],mm0 
-	psrlq	mm0,4 
-	movq	QWORD PTR 120[edi],mm3 
-	movq	mm6,mm3 
-	movq	QWORD PTR [ebp-16],mm1 
-	psrlq	mm3,4 
-	movq	QWORD PTR 112[ebp],mm4 
-	psllq	mm6,60 
-	por	mm0,mm6 
-	movq	QWORD PTR [ebp-8],mm0 
-	movq	QWORD PTR 120[ebp],mm3 
-	movq	mm6,QWORD PTR [eax] 
-	mov	ebx,DWORD PTR 8[eax] 
-	mov	edx,DWORD PTR 12[eax] 
-ALIGN	16 
-$L009outer: 
-	xor	edx,DWORD PTR 12[ecx] 
-	xor	ebx,DWORD PTR 8[ecx] 
-	pxor	mm6,QWORD PTR [ecx] 
-	lea	ecx,DWORD PTR 16[ecx] 
-	mov	DWORD PTR 536[esp],ebx 
-	movq	QWORD PTR 528[esp],mm6 
-	mov	DWORD PTR 548[esp],ecx 
-	xor	eax,eax 
-	rol	edx,8 
-	mov	al,dl 
-	mov	ebp,eax 
-	and	al,15 
-	shr	ebp,4 
-	pxor	mm0,mm0 
-	rol	edx,8 
-	pxor	mm1,mm1 
-	pxor	mm2,mm2 
-	movq	mm7,QWORD PTR 16[eax*8+esp] 
-	movq	mm6,QWORD PTR 144[eax*8+esp] 
-	mov	al,dl 
-	movd	ebx,mm7 
-	psrlq	mm7,8 
-	movq	mm3,mm6 
-	mov	edi,eax 
-	psrlq	mm6,8 
-	pxor	mm7,QWORD PTR 272[ebp*8+esp] 
-	and	al,15 
-	psllq	mm3,56 
-	shr	edi,4 
-	pxor	mm7,QWORD PTR 16[eax*8+esp] 
-	rol	edx,8 
-	pxor	mm6,QWORD PTR 144[eax*8+esp] 
-	pxor	mm7,mm3 
-	pxor	mm6,QWORD PTR 400[ebp*8+esp] 
-	xor	bl,BYTE PTR [ebp*1+esp] 
-	mov	al,dl 
-	movd	ecx,mm7 
-	movzx	ebx,bl 
-	psrlq	mm7,8 
-	movq	mm3,mm6 
-	mov	ebp,eax 
-	psrlq	mm6,8 
-	pxor	mm7,QWORD PTR 272[edi*8+esp] 
-	and	al,15 
-	psllq	mm3,56 
-	shr	ebp,4 
-	pinsrw	mm2,WORD PTR [ebx*2+esi],2 
-	pxor	mm7,QWORD PTR 16[eax*8+esp] 
-	rol	edx,8 
-	pxor	mm6,QWORD PTR 144[eax*8+esp] 
-	pxor	mm7,mm3 
-	pxor	mm6,QWORD PTR 400[edi*8+esp] 
-	xor	cl,BYTE PTR [edi*1+esp] 
-	mov	al,dl 
-	mov	edx,DWORD PTR 536[esp] 
-	movd	ebx,mm7 
-	movzx	ecx,cl 
-	psrlq	mm7,8 
-	movq	mm3,mm6 
-	mov	edi,eax 
-	psrlq	mm6,8 
-	pxor	mm7,QWORD PTR 272[ebp*8+esp] 
-	and	al,15 
-	psllq	mm3,56 
-	pxor	mm6,mm2 
-	shr	edi,4 
-	pinsrw	mm1,WORD PTR [ecx*2+esi],2 
-	pxor	mm7,QWORD PTR 16[eax*8+esp] 
-	rol	edx,8 
-	pxor	mm6,QWORD PTR 144[eax*8+esp] 
-	pxor	mm7,mm3 
-	pxor	mm6,QWORD PTR 400[ebp*8+esp] 
-	xor	bl,BYTE PTR [ebp*1+esp] 
-	mov	al,dl 
-	movd	ecx,mm7 
-	movzx	ebx,bl 
-	psrlq	mm7,8 
-	movq	mm3,mm6 
-	mov	ebp,eax 
-	psrlq	mm6,8 
-	pxor	mm7,QWORD PTR 272[edi*8+esp] 
-	and	al,15 
-	psllq	mm3,56 
-	pxor	mm6,mm1 
-	shr	ebp,4 
-	pinsrw	mm0,WORD PTR [ebx*2+esi],2 
-	pxor	mm7,QWORD PTR 16[eax*8+esp] 
-	rol	edx,8 
-	pxor	mm6,QWORD PTR 144[eax*8+esp] 
-	pxor	mm7,mm3 
-	pxor	mm6,QWORD PTR 400[edi*8+esp] 
-	xor	cl,BYTE PTR [edi*1+esp] 
-	mov	al,dl 
-	movd	ebx,mm7 
-	movzx	ecx,cl 
-	psrlq	mm7,8 
-	movq	mm3,mm6 
-	mov	edi,eax 
-	psrlq	mm6,8 
-	pxor	mm7,QWORD PTR 272[ebp*8+esp] 
-	and	al,15 
-	psllq	mm3,56 
-	pxor	mm6,mm0 
-	shr	edi,4 
-	pinsrw	mm2,WORD PTR [ecx*2+esi],2 
-	pxor	mm7,QWORD PTR 16[eax*8+esp] 
-	rol	edx,8 
-	pxor	mm6,QWORD PTR 144[eax*8+esp] 
-	pxor	mm7,mm3 
-	pxor	mm6,QWORD PTR 400[ebp*8+esp] 
-	xor	bl,BYTE PTR [ebp*1+esp] 
-	mov	al,dl 
-	movd	ecx,mm7 
-	movzx	ebx,bl 
-	psrlq	mm7,8 
-	movq	mm3,mm6 
-	mov	ebp,eax 
-	psrlq	mm6,8 
-	pxor	mm7,QWORD PTR 272[edi*8+esp] 
-	and	al,15 
-	psllq	mm3,56 
-	pxor	mm6,mm2 
-	shr	ebp,4 
-	pinsrw	mm1,WORD PTR [ebx*2+esi],2 
-	pxor	mm7,QWORD PTR 16[eax*8+esp] 
-	rol	edx,8 
-	pxor	mm6,QWORD PTR 144[eax*8+esp] 
-	pxor	mm7,mm3 
-	pxor	mm6,QWORD PTR 400[edi*8+esp] 
-	xor	cl,BYTE PTR [edi*1+esp] 
-	mov	al,dl 
-	mov	edx,DWORD PTR 532[esp] 
-	movd	ebx,mm7 
-	movzx	ecx,cl 
-	psrlq	mm7,8 
-	movq	mm3,mm6 
-	mov	edi,eax 
-	psrlq	mm6,8 
-	pxor	mm7,QWORD PTR 272[ebp*8+esp] 
-	and	al,15 
-	psllq	mm3,56 
-	pxor	mm6,mm1 
-	shr	edi,4 
-	pinsrw	mm0,WORD PTR [ecx*2+esi],2 
-	pxor	mm7,QWORD PTR 16[eax*8+esp] 
-	rol	edx,8 
-	pxor	mm6,QWORD PTR 144[eax*8+esp] 
-	pxor	mm7,mm3 
-	pxor	mm6,QWORD PTR 400[ebp*8+esp] 
-	xor	bl,BYTE PTR [ebp*1+esp] 
-	mov	al,dl 
-	movd	ecx,mm7 
-	movzx	ebx,bl 
-	psrlq	mm7,8 
-	movq	mm3,mm6 
-	mov	ebp,eax 
-	psrlq	mm6,8 
-	pxor	mm7,QWORD PTR 272[edi*8+esp] 
-	and	al,15 
-	psllq	mm3,56 
-	pxor	mm6,mm0 
-	shr	ebp,4 
-	pinsrw	mm2,WORD PTR [ebx*2+esi],2 
-	pxor	mm7,QWORD PTR 16[eax*8+esp] 
-	rol	edx,8 
-	pxor	mm6,QWORD PTR 144[eax*8+esp] 
-	pxor	mm7,mm3 
-	pxor	mm6,QWORD PTR 400[edi*8+esp] 
-	xor	cl,BYTE PTR [edi*1+esp] 
-	mov	al,dl 
-	movd	ebx,mm7 
-	movzx	ecx,cl 
-	psrlq	mm7,8 
-	movq	mm3,mm6 
-	mov	edi,eax 
-	psrlq	mm6,8 
-	pxor	mm7,QWORD PTR 272[ebp*8+esp] 
-	and	al,15 
-	psllq	mm3,56 
-	pxor	mm6,mm2 
-	shr	edi,4 
-	pinsrw	mm1,WORD PTR [ecx*2+esi],2 
-	pxor	mm7,QWORD PTR 16[eax*8+esp] 
-	rol	edx,8 
-	pxor	mm6,QWORD PTR 144[eax*8+esp] 
-	pxor	mm7,mm3 
-	pxor	mm6,QWORD PTR 400[ebp*8+esp] 
-	xor	bl,BYTE PTR [ebp*1+esp] 
-	mov	al,dl 
-	movd	ecx,mm7 
-	movzx	ebx,bl 
-	psrlq	mm7,8 
-	movq	mm3,mm6 
-	mov	ebp,eax 
-	psrlq	mm6,8 
-	pxor	mm7,QWORD PTR 272[edi*8+esp] 
-	and	al,15 
-	psllq	mm3,56 
-	pxor	mm6,mm1 
-	shr	ebp,4 
-	pinsrw	mm0,WORD PTR [ebx*2+esi],2 
-	pxor	mm7,QWORD PTR 16[eax*8+esp] 
-	rol	edx,8 
-	pxor	mm6,QWORD PTR 144[eax*8+esp] 
-	pxor	mm7,mm3 
-	pxor	mm6,QWORD PTR 400[edi*8+esp] 
-	xor	cl,BYTE PTR [edi*1+esp] 
-	mov	al,dl 
-	mov	edx,DWORD PTR 528[esp] 
-	movd	ebx,mm7 
-	movzx	ecx,cl 
-	psrlq	mm7,8 
-	movq	mm3,mm6 
-	mov	edi,eax 
-	psrlq	mm6,8 
-	pxor	mm7,QWORD PTR 272[ebp*8+esp] 
-	and	al,15 
-	psllq	mm3,56 
-	pxor	mm6,mm0 
-	shr	edi,4 
-	pinsrw	mm2,WORD PTR [ecx*2+esi],2 
-	pxor	mm7,QWORD PTR 16[eax*8+esp] 
-	rol	edx,8 
-	pxor	mm6,QWORD PTR 144[eax*8+esp] 
-	pxor	mm7,mm3 
-	pxor	mm6,QWORD PTR 400[ebp*8+esp] 
-	xor	bl,BYTE PTR [ebp*1+esp] 
-	mov	al,dl 
-	movd	ecx,mm7 
-	movzx	ebx,bl 
-	psrlq	mm7,8 
-	movq	mm3,mm6 
-	mov	ebp,eax 
-	psrlq	mm6,8 
-	pxor	mm7,QWORD PTR 272[edi*8+esp] 
-	and	al,15 
-	psllq	mm3,56 
-	pxor	mm6,mm2 
-	shr	ebp,4 
-	pinsrw	mm1,WORD PTR [ebx*2+esi],2 
-	pxor	mm7,QWORD PTR 16[eax*8+esp] 
-	rol	edx,8 
-	pxor	mm6,QWORD PTR 144[eax*8+esp] 
-	pxor	mm7,mm3 
-	pxor	mm6,QWORD PTR 400[edi*8+esp] 
-	xor	cl,BYTE PTR [edi*1+esp] 
-	mov	al,dl 
-	movd	ebx,mm7 
-	movzx	ecx,cl 
-	psrlq	mm7,8 
-	movq	mm3,mm6 
-	mov	edi,eax 
-	psrlq	mm6,8 
-	pxor	mm7,QWORD PTR 272[ebp*8+esp] 
-	and	al,15 
-	psllq	mm3,56 
-	pxor	mm6,mm1 
-	shr	edi,4 
-	pinsrw	mm0,WORD PTR [ecx*2+esi],2 
-	pxor	mm7,QWORD PTR 16[eax*8+esp] 
-	rol	edx,8 
-	pxor	mm6,QWORD PTR 144[eax*8+esp] 
-	pxor	mm7,mm3 
-	pxor	mm6,QWORD PTR 400[ebp*8+esp] 
-	xor	bl,BYTE PTR [ebp*1+esp] 
-	mov	al,dl 
-	movd	ecx,mm7 
-	movzx	ebx,bl 
-	psrlq	mm7,8 
-	movq	mm3,mm6 
-	mov	ebp,eax 
-	psrlq	mm6,8 
-	pxor	mm7,QWORD PTR 272[edi*8+esp] 
-	and	al,15 
-	psllq	mm3,56 
-	pxor	mm6,mm0 
-	shr	ebp,4 
-	pinsrw	mm2,WORD PTR [ebx*2+esi],2 
-	pxor	mm7,QWORD PTR 16[eax*8+esp] 
-	rol	edx,8 
-	pxor	mm6,QWORD PTR 144[eax*8+esp] 
-	pxor	mm7,mm3 
-	pxor	mm6,QWORD PTR 400[edi*8+esp] 
-	xor	cl,BYTE PTR [edi*1+esp] 
-	mov	al,dl 
-	mov	edx,DWORD PTR 524[esp] 
-	movd	ebx,mm7 
-	movzx	ecx,cl 
-	psrlq	mm7,8 
-	movq	mm3,mm6 
-	mov	edi,eax 
-	psrlq	mm6,8 
-	pxor	mm7,QWORD PTR 272[ebp*8+esp] 
-	and	al,15 
-	psllq	mm3,56 
-	pxor	mm6,mm2 
-	shr	edi,4 
-	pinsrw	mm1,WORD PTR [ecx*2+esi],2 
-	pxor	mm7,QWORD PTR 16[eax*8+esp] 
-	pxor	mm6,QWORD PTR 144[eax*8+esp] 
-	xor	bl,BYTE PTR [ebp*1+esp] 
-	pxor	mm7,mm3 
-	pxor	mm6,QWORD PTR 400[ebp*8+esp] 
-	movzx	ebx,bl 
-	pxor	mm2,mm2 
-	psllq	mm1,4 
-	movd	ecx,mm7 
-	psrlq	mm7,4 
-	movq	mm3,mm6 
-	psrlq	mm6,4 
-	shl	ecx,4 
-	pxor	mm7,QWORD PTR 16[edi*8+esp] 
-	psllq	mm3,60 
-	movzx	ecx,cl 
-	pxor	mm7,mm3 
-	pxor	mm6,QWORD PTR 144[edi*8+esp] 
-	pinsrw	mm0,WORD PTR [ebx*2+esi],2 
-	pxor	mm6,mm1 
-	movd	edx,mm7 
-	pinsrw	mm2,WORD PTR [ecx*2+esi],3 
-	psllq	mm0,12 
-	pxor	mm6,mm0 
-	psrlq	mm7,32 
-	pxor	mm6,mm2 
-	mov	ecx,DWORD PTR 548[esp] 
-	movd	ebx,mm7 
-	movq	mm3,mm6 
-	psllw	mm6,8 
-	psrlw	mm3,8 
-	por	mm6,mm3 
-	bswap	edx 
-	pshufw	mm6,mm6,27 
-	bswap	ebx 
-	cmp	ecx,DWORD PTR 552[esp] 
-	jne	$L009outer 
-	mov	eax,DWORD PTR 544[esp] 
-	mov	DWORD PTR 12[eax],edx 
-	mov	DWORD PTR 8[eax],ebx 
-	movq	QWORD PTR [eax],mm6 
-	mov	esp,DWORD PTR 556[esp] 
-	emms 
-	pop	edi 
-	pop	esi 
-	pop	ebx 
-	pop	ebp 
-	ret 
-_gcm_ghash_4bit_mmx ENDP 
-ALIGN	16 
-_gcm_init_clmul	PROC PUBLIC 
-$L_gcm_init_clmul_begin:: 
-	mov	edx,DWORD PTR 4[esp] 
-	mov	eax,DWORD PTR 8[esp] 
-	call	$L010pic 
-$L010pic: 
-	pop	ecx 
-	lea	ecx,DWORD PTR ($Lbswap-$L010pic)[ecx] 
-	movdqu	xmm2,XMMWORD PTR [eax] 
-	pshufd	xmm2,xmm2,78 
-	pshufd	xmm4,xmm2,255 
-	movdqa	xmm3,xmm2 
-	psllq	xmm2,1 
-	pxor	xmm5,xmm5 
-	psrlq	xmm3,63 
-	pcmpgtd	xmm5,xmm4 
-	pslldq	xmm3,8 
-	por	xmm2,xmm3 
-	pand	xmm5,XMMWORD PTR 16[ecx] 
-	pxor	xmm2,xmm5 
-	movdqa	xmm0,xmm2 
-	movdqa	xmm1,xmm0 
-	pshufd	xmm3,xmm0,78 
-	pshufd	xmm4,xmm2,78 
-	pxor	xmm3,xmm0 
-	pxor	xmm4,xmm2 
-DB	102,15,58,68,194,0 
-DB	102,15,58,68,202,17 
-DB	102,15,58,68,220,0 
-	xorps	xmm3,xmm0 
-	xorps	xmm3,xmm1 
-	movdqa	xmm4,xmm3 
-	psrldq	xmm3,8 
-	pslldq	xmm4,8 
-	pxor	xmm1,xmm3 
-	pxor	xmm0,xmm4 
-	movdqa	xmm4,xmm0 
-	movdqa	xmm3,xmm0 
-	psllq	xmm0,5 
-	pxor	xmm3,xmm0 
-	psllq	xmm0,1 
-	pxor	xmm0,xmm3 
-	psllq	xmm0,57 
-	movdqa	xmm3,xmm0 
-	pslldq	xmm0,8 
-	psrldq	xmm3,8 
-	pxor	xmm0,xmm4 
-	pxor	xmm1,xmm3 
-	movdqa	xmm4,xmm0 
-	psrlq	xmm0,1 
-	pxor	xmm1,xmm4 
-	pxor	xmm4,xmm0 
-	psrlq	xmm0,5 
-	pxor	xmm0,xmm4 
-	psrlq	xmm0,1 
-	pxor	xmm0,xmm1 
-	pshufd	xmm3,xmm2,78 
-	pshufd	xmm4,xmm0,78 
-	pxor	xmm3,xmm2 
-	movdqu	XMMWORD PTR [edx],xmm2 
-	pxor	xmm4,xmm0 
-	movdqu	XMMWORD PTR 16[edx],xmm0 
-DB	102,15,58,15,227,8 
-	movdqu	XMMWORD PTR 32[edx],xmm4 
-	ret 
-_gcm_init_clmul ENDP 
-ALIGN	16 
-_gcm_gmult_clmul	PROC PUBLIC 
-$L_gcm_gmult_clmul_begin:: 
-	mov	eax,DWORD PTR 4[esp] 
-	mov	edx,DWORD PTR 8[esp] 
-	call	$L011pic 
-$L011pic: 
-	pop	ecx 
-	lea	ecx,DWORD PTR ($Lbswap-$L011pic)[ecx] 
-	movdqu	xmm0,XMMWORD PTR [eax] 
-	movdqa	xmm5,XMMWORD PTR [ecx] 
-	movups	xmm2,XMMWORD PTR [edx] 
-DB	102,15,56,0,197 
-	movups	xmm4,XMMWORD PTR 32[edx] 
-	movdqa	xmm1,xmm0 
-	pshufd	xmm3,xmm0,78 
-	pxor	xmm3,xmm0 
-DB	102,15,58,68,194,0 
-DB	102,15,58,68,202,17 
-DB	102,15,58,68,220,0 
-	xorps	xmm3,xmm0 
-	xorps	xmm3,xmm1 
-	movdqa	xmm4,xmm3 
-	psrldq	xmm3,8 
-	pslldq	xmm4,8 
-	pxor	xmm1,xmm3 
-	pxor	xmm0,xmm4 
-	movdqa	xmm4,xmm0 
-	movdqa	xmm3,xmm0 
-	psllq	xmm0,5 
-	pxor	xmm3,xmm0 
-	psllq	xmm0,1 
-	pxor	xmm0,xmm3 
-	psllq	xmm0,57 
-	movdqa	xmm3,xmm0 
-	pslldq	xmm0,8 
-	psrldq	xmm3,8 
-	pxor	xmm0,xmm4 
-	pxor	xmm1,xmm3 
-	movdqa	xmm4,xmm0 
-	psrlq	xmm0,1 
-	pxor	xmm1,xmm4 
-	pxor	xmm4,xmm0 
-	psrlq	xmm0,5 
-	pxor	xmm0,xmm4 
-	psrlq	xmm0,1 
-	pxor	xmm0,xmm1 
-DB	102,15,56,0,197 
-	movdqu	XMMWORD PTR [eax],xmm0 
-	ret 
-_gcm_gmult_clmul ENDP 
-ALIGN	16 
-_gcm_ghash_clmul	PROC PUBLIC 
-$L_gcm_ghash_clmul_begin:: 
-	push	ebp 
-	push	ebx 
-	push	esi 
-	push	edi 
-	mov	eax,DWORD PTR 20[esp] 
-	mov	edx,DWORD PTR 24[esp] 
-	mov	esi,DWORD PTR 28[esp] 
-	mov	ebx,DWORD PTR 32[esp] 
-	call	$L012pic 
-$L012pic: 
-	pop	ecx 
-	lea	ecx,DWORD PTR ($Lbswap-$L012pic)[ecx] 
-	movdqu	xmm0,XMMWORD PTR [eax] 
-	movdqa	xmm5,XMMWORD PTR [ecx] 
-	movdqu	xmm2,XMMWORD PTR [edx] 
-DB	102,15,56,0,197 
-	sub	ebx,16 
-	jz	$L013odd_tail 
-	movdqu	xmm3,XMMWORD PTR [esi] 
-	movdqu	xmm6,XMMWORD PTR 16[esi] 
-DB	102,15,56,0,221 
-DB	102,15,56,0,245 
-	movdqu	xmm5,XMMWORD PTR 32[edx] 
-	pxor	xmm0,xmm3 
-	pshufd	xmm3,xmm6,78 
-	movdqa	xmm7,xmm6 
-	pxor	xmm3,xmm6 
-	lea	esi,DWORD PTR 32[esi] 
-DB	102,15,58,68,242,0 
-DB	102,15,58,68,250,17 
-DB	102,15,58,68,221,0 
-	movups	xmm2,XMMWORD PTR 16[edx] 
-	nop 
-	sub	ebx,32 
-	jbe	$L014even_tail 
-	jmp	$L015mod_loop 
-ALIGN	32 
-$L015mod_loop: 
-	pshufd	xmm4,xmm0,78 
-	movdqa	xmm1,xmm0 
-	pxor	xmm4,xmm0 
-	nop 
-DB	102,15,58,68,194,0 
-DB	102,15,58,68,202,17 
-DB	102,15,58,68,229,16 
-	movups	xmm2,XMMWORD PTR [edx] 
-	xorps	xmm0,xmm6 
-	movdqa	xmm5,XMMWORD PTR [ecx] 
-	xorps	xmm1,xmm7 
-	movdqu	xmm7,XMMWORD PTR [esi] 
-	pxor	xmm3,xmm0 
-	movdqu	xmm6,XMMWORD PTR 16[esi] 
-	pxor	xmm3,xmm1 
-DB	102,15,56,0,253 
-	pxor	xmm4,xmm3 
-	movdqa	xmm3,xmm4 
-	psrldq	xmm4,8 
-	pslldq	xmm3,8 
-	pxor	xmm1,xmm4 
-	pxor	xmm0,xmm3 
-DB	102,15,56,0,245 
-	pxor	xmm1,xmm7 
-	movdqa	xmm7,xmm6 
-	movdqa	xmm4,xmm0 
-	movdqa	xmm3,xmm0 
-	psllq	xmm0,5 
-	pxor	xmm3,xmm0 
-	psllq	xmm0,1 
-	pxor	xmm0,xmm3 
-DB	102,15,58,68,242,0 
-	movups	xmm5,XMMWORD PTR 32[edx] 
-	psllq	xmm0,57 
-	movdqa	xmm3,xmm0 
-	pslldq	xmm0,8 
-	psrldq	xmm3,8 
-	pxor	xmm0,xmm4 
-	pxor	xmm1,xmm3 
-	pshufd	xmm3,xmm7,78 
-	movdqa	xmm4,xmm0 
-	psrlq	xmm0,1 
-	pxor	xmm3,xmm7 
-	pxor	xmm1,xmm4 
-DB	102,15,58,68,250,17 
-	movups	xmm2,XMMWORD PTR 16[edx] 
-	pxor	xmm4,xmm0 
-	psrlq	xmm0,5 
-	pxor	xmm0,xmm4 
-	psrlq	xmm0,1 
-	pxor	xmm0,xmm1 
-DB	102,15,58,68,221,0 
-	lea	esi,DWORD PTR 32[esi] 
-	sub	ebx,32 
-	ja	$L015mod_loop 
-$L014even_tail: 
-	pshufd	xmm4,xmm0,78 
-	movdqa	xmm1,xmm0 
-	pxor	xmm4,xmm0 
-DB	102,15,58,68,194,0 
-DB	102,15,58,68,202,17 
-DB	102,15,58,68,229,16 
-	movdqa	xmm5,XMMWORD PTR [ecx] 
-	xorps	xmm0,xmm6 
-	xorps	xmm1,xmm7 
-	pxor	xmm3,xmm0 
-	pxor	xmm3,xmm1 
-	pxor	xmm4,xmm3 
-	movdqa	xmm3,xmm4 
-	psrldq	xmm4,8 
-	pslldq	xmm3,8 
-	pxor	xmm1,xmm4 
-	pxor	xmm0,xmm3 
-	movdqa	xmm4,xmm0 
-	movdqa	xmm3,xmm0 
-	psllq	xmm0,5 
-	pxor	xmm3,xmm0 
-	psllq	xmm0,1 
-	pxor	xmm0,xmm3 
-	psllq	xmm0,57 
-	movdqa	xmm3,xmm0 
-	pslldq	xmm0,8 
-	psrldq	xmm3,8 
-	pxor	xmm0,xmm4 
-	pxor	xmm1,xmm3 
-	movdqa	xmm4,xmm0 
-	psrlq	xmm0,1 
-	pxor	xmm1,xmm4 
-	pxor	xmm4,xmm0 
-	psrlq	xmm0,5 
-	pxor	xmm0,xmm4 
-	psrlq	xmm0,1 
-	pxor	xmm0,xmm1 
-	test	ebx,ebx 
-	jnz	$L016done 
-	movups	xmm2,XMMWORD PTR [edx] 
-$L013odd_tail: 
-	movdqu	xmm3,XMMWORD PTR [esi] 
-DB	102,15,56,0,221 
-	pxor	xmm0,xmm3 
-	movdqa	xmm1,xmm0 
-	pshufd	xmm3,xmm0,78 
-	pshufd	xmm4,xmm2,78 
-	pxor	xmm3,xmm0 
-	pxor	xmm4,xmm2 
-DB	102,15,58,68,194,0 
-DB	102,15,58,68,202,17 
-DB	102,15,58,68,220,0 
-	xorps	xmm3,xmm0 
-	xorps	xmm3,xmm1 
-	movdqa	xmm4,xmm3 
-	psrldq	xmm3,8 
-	pslldq	xmm4,8 
-	pxor	xmm1,xmm3 
-	pxor	xmm0,xmm4 
-	movdqa	xmm4,xmm0 
-	movdqa	xmm3,xmm0 
-	psllq	xmm0,5 
-	pxor	xmm3,xmm0 
-	psllq	xmm0,1 
-	pxor	xmm0,xmm3 
-	psllq	xmm0,57 
-	movdqa	xmm3,xmm0 
-	pslldq	xmm0,8 
-	psrldq	xmm3,8 
-	pxor	xmm0,xmm4 
-	pxor	xmm1,xmm3 
-	movdqa	xmm4,xmm0 
-	psrlq	xmm0,1 
-	pxor	xmm1,xmm4 
-	pxor	xmm4,xmm0 
-	psrlq	xmm0,5 
-	pxor	xmm0,xmm4 
-	psrlq	xmm0,1 
-	pxor	xmm0,xmm1 
-$L016done: 
-DB	102,15,56,0,197 
-	movdqu	XMMWORD PTR [eax],xmm0 
-	pop	edi 
-	pop	esi 
-	pop	ebx 
-	pop	ebp 
-	ret 
-_gcm_ghash_clmul ENDP 
-ALIGN	64 
-$Lbswap:: 
-DB	15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 
-DB	1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,194 
-ALIGN	64 
-$Lrem_8bit:: 
-DW	0,450,900,582,1800,1738,1164,1358 
-DW	3600,4050,3476,3158,2328,2266,2716,2910 
-DW	7200,7650,8100,7782,6952,6890,6316,6510 
-DW	4656,5106,4532,4214,5432,5370,5820,6014 
-DW	14400,14722,15300,14854,16200,16010,15564,15630 
-DW	13904,14226,13780,13334,12632,12442,13020,13086 
-DW	9312,9634,10212,9766,9064,8874,8428,8494 
-DW	10864,11186,10740,10294,11640,11450,12028,12094 
-DW	28800,28994,29444,29382,30600,30282,29708,30158 
-DW	32400,32594,32020,31958,31128,30810,31260,31710 
-DW	27808,28002,28452,28390,27560,27242,26668,27118 
-DW	25264,25458,24884,24822,26040,25722,26172,26622 
-DW	18624,18690,19268,19078,20424,19978,19532,19854 
-DW	18128,18194,17748,17558,16856,16410,16988,17310 
-DW	21728,21794,22372,22182,21480,21034,20588,20910 
-DW	23280,23346,22900,22710,24056,23610,24188,24510 
-DW	57600,57538,57988,58182,58888,59338,58764,58446 
-DW	61200,61138,60564,60758,59416,59866,60316,59998 
-DW	64800,64738,65188,65382,64040,64490,63916,63598 
-DW	62256,62194,61620,61814,62520,62970,63420,63102 
-DW	55616,55426,56004,56070,56904,57226,56780,56334 
-DW	55120,54930,54484,54550,53336,53658,54236,53790 
-DW	50528,50338,50916,50982,49768,50090,49644,49198 
-DW	52080,51890,51444,51510,52344,52666,53244,52798 
-DW	37248,36930,37380,37830,38536,38730,38156,38094 
-DW	40848,40530,39956,40406,39064,39258,39708,39646 
-DW	36256,35938,36388,36838,35496,35690,35116,35054 
-DW	33712,33394,32820,33270,33976,34170,34620,34558 
-DW	43456,43010,43588,43910,44744,44810,44364,44174 
-DW	42960,42514,42068,42390,41176,41242,41820,41630 
-DW	46560,46114,46692,47014,45800,45866,45420,45230 
-DW	48112,47666,47220,47542,48376,48442,49020,48830 
-ALIGN	64 
-$Lrem_4bit:: 
-DD	0,0,0,471859200 
-DD	0,943718400,0,610271232 
-DD	0,1887436800,0,1822425088 
-DD	0,1220542464,0,1423966208 
-DD	0,3774873600,0,4246732800 
-DD	0,3644850176,0,3311403008 
-DD	0,2441084928,0,2376073216 
-DD	0,2847932416,0,3051356160 
-DB	71,72,65,83,72,32,102,111,114,32,120,56,54,44,32,67 
-DB	82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112 
-DB	112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62 
-DB	0 
-.text$	ENDS 
-END 
+IF @Version LT 800
+ECHO MASM version 8.00 or later is strongly recommended.
+ENDIF
+.686
+.XMM
+IF @Version LT 800
+XMMWORD STRUCT 16
+DQ	2 dup (?)
+XMMWORD	ENDS
+ENDIF
+
+.MODEL	FLAT
+OPTION	DOTNAME
+IF @Version LT 800
+.text$	SEGMENT PAGE 'CODE'
+ELSE
+.text$	SEGMENT ALIGN(64) 'CODE'
+ENDIF
+ALIGN	16
+_gcm_gmult_4bit_x86	PROC PUBLIC
+$L_gcm_gmult_4bit_x86_begin::
+	push	ebp
+	push	ebx
+	push	esi
+	push	edi
+	sub	esp,84
+	mov	edi,DWORD PTR 104[esp]
+	mov	esi,DWORD PTR 108[esp]
+	mov	ebp,DWORD PTR [edi]
+	mov	edx,DWORD PTR 4[edi]
+	mov	ecx,DWORD PTR 8[edi]
+	mov	ebx,DWORD PTR 12[edi]
+	mov	DWORD PTR 16[esp],0
+	mov	DWORD PTR 20[esp],471859200
+	mov	DWORD PTR 24[esp],943718400
+	mov	DWORD PTR 28[esp],610271232
+	mov	DWORD PTR 32[esp],1887436800
+	mov	DWORD PTR 36[esp],1822425088
+	mov	DWORD PTR 40[esp],1220542464
+	mov	DWORD PTR 44[esp],1423966208
+	mov	DWORD PTR 48[esp],3774873600
+	mov	DWORD PTR 52[esp],4246732800
+	mov	DWORD PTR 56[esp],3644850176
+	mov	DWORD PTR 60[esp],3311403008
+	mov	DWORD PTR 64[esp],2441084928
+	mov	DWORD PTR 68[esp],2376073216
+	mov	DWORD PTR 72[esp],2847932416
+	mov	DWORD PTR 76[esp],3051356160
+	mov	DWORD PTR [esp],ebp
+	mov	DWORD PTR 4[esp],edx
+	mov	DWORD PTR 8[esp],ecx
+	mov	DWORD PTR 12[esp],ebx
+	shr	ebx,20
+	and	ebx,240
+	mov	ebp,DWORD PTR 4[ebx*1+esi]
+	mov	edx,DWORD PTR [ebx*1+esi]
+	mov	ecx,DWORD PTR 12[ebx*1+esi]
+	mov	ebx,DWORD PTR 8[ebx*1+esi]
+	xor	eax,eax
+	mov	edi,15
+	jmp	$L000x86_loop
+ALIGN	16
+$L000x86_loop:
+	mov	al,bl
+	shrd	ebx,ecx,4
+	and	al,15
+	shrd	ecx,edx,4
+	shrd	edx,ebp,4
+	shr	ebp,4
+	xor	ebp,DWORD PTR 16[eax*4+esp]
+	mov	al,BYTE PTR [edi*1+esp]
+	and	al,240
+	xor	ebx,DWORD PTR 8[eax*1+esi]
+	xor	ecx,DWORD PTR 12[eax*1+esi]
+	xor	edx,DWORD PTR [eax*1+esi]
+	xor	ebp,DWORD PTR 4[eax*1+esi]
+	dec	edi
+	js	$L001x86_break
+	mov	al,bl
+	shrd	ebx,ecx,4
+	and	al,15
+	shrd	ecx,edx,4
+	shrd	edx,ebp,4
+	shr	ebp,4
+	xor	ebp,DWORD PTR 16[eax*4+esp]
+	mov	al,BYTE PTR [edi*1+esp]
+	shl	al,4
+	xor	ebx,DWORD PTR 8[eax*1+esi]
+	xor	ecx,DWORD PTR 12[eax*1+esi]
+	xor	edx,DWORD PTR [eax*1+esi]
+	xor	ebp,DWORD PTR 4[eax*1+esi]
+	jmp	$L000x86_loop
+ALIGN	16
+$L001x86_break:
+	bswap	ebx
+	bswap	ecx
+	bswap	edx
+	bswap	ebp
+	mov	edi,DWORD PTR 104[esp]
+	mov	DWORD PTR 12[edi],ebx
+	mov	DWORD PTR 8[edi],ecx
+	mov	DWORD PTR 4[edi],edx
+	mov	DWORD PTR [edi],ebp
+	add	esp,84
+	pop	edi
+	pop	esi
+	pop	ebx
+	pop	ebp
+	ret
+_gcm_gmult_4bit_x86 ENDP
+ALIGN	16
+_gcm_ghash_4bit_x86	PROC PUBLIC
+$L_gcm_ghash_4bit_x86_begin::
+	push	ebp
+	push	ebx
+	push	esi
+	push	edi
+	sub	esp,84
+	mov	ebx,DWORD PTR 104[esp]
+	mov	esi,DWORD PTR 108[esp]
+	mov	edi,DWORD PTR 112[esp]
+	mov	ecx,DWORD PTR 116[esp]
+	add	ecx,edi
+	mov	DWORD PTR 116[esp],ecx
+	mov	ebp,DWORD PTR [ebx]
+	mov	edx,DWORD PTR 4[ebx]
+	mov	ecx,DWORD PTR 8[ebx]
+	mov	ebx,DWORD PTR 12[ebx]
+	mov	DWORD PTR 16[esp],0
+	mov	DWORD PTR 20[esp],471859200
+	mov	DWORD PTR 24[esp],943718400
+	mov	DWORD PTR 28[esp],610271232
+	mov	DWORD PTR 32[esp],1887436800
+	mov	DWORD PTR 36[esp],1822425088
+	mov	DWORD PTR 40[esp],1220542464
+	mov	DWORD PTR 44[esp],1423966208
+	mov	DWORD PTR 48[esp],3774873600
+	mov	DWORD PTR 52[esp],4246732800
+	mov	DWORD PTR 56[esp],3644850176
+	mov	DWORD PTR 60[esp],3311403008
+	mov	DWORD PTR 64[esp],2441084928
+	mov	DWORD PTR 68[esp],2376073216
+	mov	DWORD PTR 72[esp],2847932416
+	mov	DWORD PTR 76[esp],3051356160
+ALIGN	16
+$L002x86_outer_loop:
+	xor	ebx,DWORD PTR 12[edi]
+	xor	ecx,DWORD PTR 8[edi]
+	xor	edx,DWORD PTR 4[edi]
+	xor	ebp,DWORD PTR [edi]
+	mov	DWORD PTR 12[esp],ebx
+	mov	DWORD PTR 8[esp],ecx
+	mov	DWORD PTR 4[esp],edx
+	mov	DWORD PTR [esp],ebp
+	shr	ebx,20
+	and	ebx,240
+	mov	ebp,DWORD PTR 4[ebx*1+esi]
+	mov	edx,DWORD PTR [ebx*1+esi]
+	mov	ecx,DWORD PTR 12[ebx*1+esi]
+	mov	ebx,DWORD PTR 8[ebx*1+esi]
+	xor	eax,eax
+	mov	edi,15
+	jmp	$L003x86_loop
+ALIGN	16
+$L003x86_loop:
+	mov	al,bl
+	shrd	ebx,ecx,4
+	and	al,15
+	shrd	ecx,edx,4
+	shrd	edx,ebp,4
+	shr	ebp,4
+	xor	ebp,DWORD PTR 16[eax*4+esp]
+	mov	al,BYTE PTR [edi*1+esp]
+	and	al,240
+	xor	ebx,DWORD PTR 8[eax*1+esi]
+	xor	ecx,DWORD PTR 12[eax*1+esi]
+	xor	edx,DWORD PTR [eax*1+esi]
+	xor	ebp,DWORD PTR 4[eax*1+esi]
+	dec	edi
+	js	$L004x86_break
+	mov	al,bl
+	shrd	ebx,ecx,4
+	and	al,15
+	shrd	ecx,edx,4
+	shrd	edx,ebp,4
+	shr	ebp,4
+	xor	ebp,DWORD PTR 16[eax*4+esp]
+	mov	al,BYTE PTR [edi*1+esp]
+	shl	al,4
+	xor	ebx,DWORD PTR 8[eax*1+esi]
+	xor	ecx,DWORD PTR 12[eax*1+esi]
+	xor	edx,DWORD PTR [eax*1+esi]
+	xor	ebp,DWORD PTR 4[eax*1+esi]
+	jmp	$L003x86_loop
+ALIGN	16
+$L004x86_break:
+	bswap	ebx
+	bswap	ecx
+	bswap	edx
+	bswap	ebp
+	mov	edi,DWORD PTR 112[esp]
+	lea	edi,DWORD PTR 16[edi]
+	cmp	edi,DWORD PTR 116[esp]
+	mov	DWORD PTR 112[esp],edi
+	jb	$L002x86_outer_loop
+	mov	edi,DWORD PTR 104[esp]
+	mov	DWORD PTR 12[edi],ebx
+	mov	DWORD PTR 8[edi],ecx
+	mov	DWORD PTR 4[edi],edx
+	mov	DWORD PTR [edi],ebp
+	add	esp,84
+	pop	edi
+	pop	esi
+	pop	ebx
+	pop	ebp
+	ret
+_gcm_ghash_4bit_x86 ENDP
+ALIGN	16
+_gcm_gmult_4bit_mmx	PROC PUBLIC
+$L_gcm_gmult_4bit_mmx_begin::
+	push	ebp
+	push	ebx
+	push	esi
+	push	edi
+	mov	edi,DWORD PTR 20[esp]
+	mov	esi,DWORD PTR 24[esp]
+	call	$L005pic_point
+$L005pic_point:
+	pop	eax
+	lea	eax,DWORD PTR ($Lrem_4bit-$L005pic_point)[eax]
+	movzx	ebx,BYTE PTR 15[edi]
+	xor	ecx,ecx
+	mov	edx,ebx
+	mov	cl,dl
+	mov	ebp,14
+	shl	cl,4
+	and	edx,240
+	movq	mm0,QWORD PTR 8[ecx*1+esi]
+	movq	mm1,QWORD PTR [ecx*1+esi]
+	movd	ebx,mm0
+	jmp	$L006mmx_loop
+ALIGN	16
+$L006mmx_loop:
+	psrlq	mm0,4
+	and	ebx,15
+	movq	mm2,mm1
+	psrlq	mm1,4
+	pxor	mm0,QWORD PTR 8[edx*1+esi]
+	mov	cl,BYTE PTR [ebp*1+edi]
+	psllq	mm2,60
+	pxor	mm1,QWORD PTR [ebx*8+eax]
+	dec	ebp
+	movd	ebx,mm0
+	pxor	mm1,QWORD PTR [edx*1+esi]
+	mov	edx,ecx
+	pxor	mm0,mm2
+	js	$L007mmx_break
+	shl	cl,4
+	and	ebx,15
+	psrlq	mm0,4
+	and	edx,240
+	movq	mm2,mm1
+	psrlq	mm1,4
+	pxor	mm0,QWORD PTR 8[ecx*1+esi]
+	psllq	mm2,60
+	pxor	mm1,QWORD PTR [ebx*8+eax]
+	movd	ebx,mm0
+	pxor	mm1,QWORD PTR [ecx*1+esi]
+	pxor	mm0,mm2
+	jmp	$L006mmx_loop
+ALIGN	16
+$L007mmx_break:
+	shl	cl,4
+	and	ebx,15
+	psrlq	mm0,4
+	and	edx,240
+	movq	mm2,mm1
+	psrlq	mm1,4
+	pxor	mm0,QWORD PTR 8[ecx*1+esi]
+	psllq	mm2,60
+	pxor	mm1,QWORD PTR [ebx*8+eax]
+	movd	ebx,mm0
+	pxor	mm1,QWORD PTR [ecx*1+esi]
+	pxor	mm0,mm2
+	psrlq	mm0,4
+	and	ebx,15
+	movq	mm2,mm1
+	psrlq	mm1,4
+	pxor	mm0,QWORD PTR 8[edx*1+esi]
+	psllq	mm2,60
+	pxor	mm1,QWORD PTR [ebx*8+eax]
+	movd	ebx,mm0
+	pxor	mm1,QWORD PTR [edx*1+esi]
+	pxor	mm0,mm2
+	psrlq	mm0,32
+	movd	edx,mm1
+	psrlq	mm1,32
+	movd	ecx,mm0
+	movd	ebp,mm1
+	bswap	ebx
+	bswap	edx
+	bswap	ecx
+	bswap	ebp
+	emms
+	mov	DWORD PTR 12[edi],ebx
+	mov	DWORD PTR 4[edi],edx
+	mov	DWORD PTR 8[edi],ecx
+	mov	DWORD PTR [edi],ebp
+	pop	edi
+	pop	esi
+	pop	ebx
+	pop	ebp
+	ret
+_gcm_gmult_4bit_mmx ENDP
+ALIGN	16
+_gcm_ghash_4bit_mmx	PROC PUBLIC
+$L_gcm_ghash_4bit_mmx_begin::
+	push	ebp
+	push	ebx
+	push	esi
+	push	edi
+	mov	eax,DWORD PTR 20[esp]
+	mov	ebx,DWORD PTR 24[esp]
+	mov	ecx,DWORD PTR 28[esp]
+	mov	edx,DWORD PTR 32[esp]
+	mov	ebp,esp
+	call	$L008pic_point
+$L008pic_point:
+	pop	esi
+	lea	esi,DWORD PTR ($Lrem_8bit-$L008pic_point)[esi]
+	sub	esp,544
+	and	esp,-64
+	sub	esp,16
+	add	edx,ecx
+	mov	DWORD PTR 544[esp],eax
+	mov	DWORD PTR 552[esp],edx
+	mov	DWORD PTR 556[esp],ebp
+	add	ebx,128
+	lea	edi,DWORD PTR 144[esp]
+	lea	ebp,DWORD PTR 400[esp]
+	mov	edx,DWORD PTR [ebx-120]
+	movq	mm0,QWORD PTR [ebx-120]
+	movq	mm3,QWORD PTR [ebx-128]
+	shl	edx,4
+	mov	BYTE PTR [esp],dl
+	mov	edx,DWORD PTR [ebx-104]
+	movq	mm2,QWORD PTR [ebx-104]
+	movq	mm5,QWORD PTR [ebx-112]
+	movq	QWORD PTR [edi-128],mm0
+	psrlq	mm0,4
+	movq	QWORD PTR [edi],mm3
+	movq	mm7,mm3
+	psrlq	mm3,4
+	shl	edx,4
+	mov	BYTE PTR 1[esp],dl
+	mov	edx,DWORD PTR [ebx-88]
+	movq	mm1,QWORD PTR [ebx-88]
+	psllq	mm7,60
+	movq	mm4,QWORD PTR [ebx-96]
+	por	mm0,mm7
+	movq	QWORD PTR [edi-120],mm2
+	psrlq	mm2,4
+	movq	QWORD PTR 8[edi],mm5
+	movq	mm6,mm5
+	movq	QWORD PTR [ebp-128],mm0
+	psrlq	mm5,4
+	movq	QWORD PTR [ebp],mm3
+	shl	edx,4
+	mov	BYTE PTR 2[esp],dl
+	mov	edx,DWORD PTR [ebx-72]
+	movq	mm0,QWORD PTR [ebx-72]
+	psllq	mm6,60
+	movq	mm3,QWORD PTR [ebx-80]
+	por	mm2,mm6
+	movq	QWORD PTR [edi-112],mm1
+	psrlq	mm1,4
+	movq	QWORD PTR 16[edi],mm4
+	movq	mm7,mm4
+	movq	QWORD PTR [ebp-120],mm2
+	psrlq	mm4,4
+	movq	QWORD PTR 8[ebp],mm5
+	shl	edx,4
+	mov	BYTE PTR 3[esp],dl
+	mov	edx,DWORD PTR [ebx-56]
+	movq	mm2,QWORD PTR [ebx-56]
+	psllq	mm7,60
+	movq	mm5,QWORD PTR [ebx-64]
+	por	mm1,mm7
+	movq	QWORD PTR [edi-104],mm0
+	psrlq	mm0,4
+	movq	QWORD PTR 24[edi],mm3
+	movq	mm6,mm3
+	movq	QWORD PTR [ebp-112],mm1
+	psrlq	mm3,4
+	movq	QWORD PTR 16[ebp],mm4
+	shl	edx,4
+	mov	BYTE PTR 4[esp],dl
+	mov	edx,DWORD PTR [ebx-40]
+	movq	mm1,QWORD PTR [ebx-40]
+	psllq	mm6,60
+	movq	mm4,QWORD PTR [ebx-48]
+	por	mm0,mm6
+	movq	QWORD PTR [edi-96],mm2
+	psrlq	mm2,4
+	movq	QWORD PTR 32[edi],mm5
+	movq	mm7,mm5
+	movq	QWORD PTR [ebp-104],mm0
+	psrlq	mm5,4
+	movq	QWORD PTR 24[ebp],mm3
+	shl	edx,4
+	mov	BYTE PTR 5[esp],dl
+	mov	edx,DWORD PTR [ebx-24]
+	movq	mm0,QWORD PTR [ebx-24]
+	psllq	mm7,60
+	movq	mm3,QWORD PTR [ebx-32]
+	por	mm2,mm7
+	movq	QWORD PTR [edi-88],mm1
+	psrlq	mm1,4
+	movq	QWORD PTR 40[edi],mm4
+	movq	mm6,mm4
+	movq	QWORD PTR [ebp-96],mm2
+	psrlq	mm4,4
+	movq	QWORD PTR 32[ebp],mm5
+	shl	edx,4
+	mov	BYTE PTR 6[esp],dl
+	mov	edx,DWORD PTR [ebx-8]
+	movq	mm2,QWORD PTR [ebx-8]
+	psllq	mm6,60
+	movq	mm5,QWORD PTR [ebx-16]
+	por	mm1,mm6
+	movq	QWORD PTR [edi-80],mm0
+	psrlq	mm0,4
+	movq	QWORD PTR 48[edi],mm3
+	movq	mm7,mm3
+	movq	QWORD PTR [ebp-88],mm1
+	psrlq	mm3,4
+	movq	QWORD PTR 40[ebp],mm4
+	shl	edx,4
+	mov	BYTE PTR 7[esp],dl
+	mov	edx,DWORD PTR 8[ebx]
+	movq	mm1,QWORD PTR 8[ebx]
+	psllq	mm7,60
+	movq	mm4,QWORD PTR [ebx]
+	por	mm0,mm7
+	movq	QWORD PTR [edi-72],mm2
+	psrlq	mm2,4
+	movq	QWORD PTR 56[edi],mm5
+	movq	mm6,mm5
+	movq	QWORD PTR [ebp-80],mm0
+	psrlq	mm5,4
+	movq	QWORD PTR 48[ebp],mm3
+	shl	edx,4
+	mov	BYTE PTR 8[esp],dl
+	mov	edx,DWORD PTR 24[ebx]
+	movq	mm0,QWORD PTR 24[ebx]
+	psllq	mm6,60
+	movq	mm3,QWORD PTR 16[ebx]
+	por	mm2,mm6
+	movq	QWORD PTR [edi-64],mm1
+	psrlq	mm1,4
+	movq	QWORD PTR 64[edi],mm4
+	movq	mm7,mm4
+	movq	QWORD PTR [ebp-72],mm2
+	psrlq	mm4,4
+	movq	QWORD PTR 56[ebp],mm5
+	shl	edx,4
+	mov	BYTE PTR 9[esp],dl
+	mov	edx,DWORD PTR 40[ebx]
+	movq	mm2,QWORD PTR 40[ebx]
+	psllq	mm7,60
+	movq	mm5,QWORD PTR 32[ebx]
+	por	mm1,mm7
+	movq	QWORD PTR [edi-56],mm0
+	psrlq	mm0,4
+	movq	QWORD PTR 72[edi],mm3
+	movq	mm6,mm3
+	movq	QWORD PTR [ebp-64],mm1
+	psrlq	mm3,4
+	movq	QWORD PTR 64[ebp],mm4
+	shl	edx,4
+	mov	BYTE PTR 10[esp],dl
+	mov	edx,DWORD PTR 56[ebx]
+	movq	mm1,QWORD PTR 56[ebx]
+	psllq	mm6,60
+	movq	mm4,QWORD PTR 48[ebx]
+	por	mm0,mm6
+	movq	QWORD PTR [edi-48],mm2
+	psrlq	mm2,4
+	movq	QWORD PTR 80[edi],mm5
+	movq	mm7,mm5
+	movq	QWORD PTR [ebp-56],mm0
+	psrlq	mm5,4
+	movq	QWORD PTR 72[ebp],mm3
+	shl	edx,4
+	mov	BYTE PTR 11[esp],dl
+	mov	edx,DWORD PTR 72[ebx]
+	movq	mm0,QWORD PTR 72[ebx]
+	psllq	mm7,60
+	movq	mm3,QWORD PTR 64[ebx]
+	por	mm2,mm7
+	movq	QWORD PTR [edi-40],mm1
+	psrlq	mm1,4
+	movq	QWORD PTR 88[edi],mm4
+	movq	mm6,mm4
+	movq	QWORD PTR [ebp-48],mm2
+	psrlq	mm4,4
+	movq	QWORD PTR 80[ebp],mm5
+	shl	edx,4
+	mov	BYTE PTR 12[esp],dl
+	mov	edx,DWORD PTR 88[ebx]
+	movq	mm2,QWORD PTR 88[ebx]
+	psllq	mm6,60
+	movq	mm5,QWORD PTR 80[ebx]
+	por	mm1,mm6
+	movq	QWORD PTR [edi-32],mm0
+	psrlq	mm0,4
+	movq	QWORD PTR 96[edi],mm3
+	movq	mm7,mm3
+	movq	QWORD PTR [ebp-40],mm1
+	psrlq	mm3,4
+	movq	QWORD PTR 88[ebp],mm4
+	shl	edx,4
+	mov	BYTE PTR 13[esp],dl
+	mov	edx,DWORD PTR 104[ebx]
+	movq	mm1,QWORD PTR 104[ebx]
+	psllq	mm7,60
+	movq	mm4,QWORD PTR 96[ebx]
+	por	mm0,mm7
+	movq	QWORD PTR [edi-24],mm2
+	psrlq	mm2,4
+	movq	QWORD PTR 104[edi],mm5
+	movq	mm6,mm5
+	movq	QWORD PTR [ebp-32],mm0
+	psrlq	mm5,4
+	movq	QWORD PTR 96[ebp],mm3
+	shl	edx,4
+	mov	BYTE PTR 14[esp],dl
+	mov	edx,DWORD PTR 120[ebx]
+	movq	mm0,QWORD PTR 120[ebx]
+	psllq	mm6,60
+	movq	mm3,QWORD PTR 112[ebx]
+	por	mm2,mm6
+	movq	QWORD PTR [edi-16],mm1
+	psrlq	mm1,4
+	movq	QWORD PTR 112[edi],mm4
+	movq	mm7,mm4
+	movq	QWORD PTR [ebp-24],mm2
+	psrlq	mm4,4
+	movq	QWORD PTR 104[ebp],mm5
+	shl	edx,4
+	mov	BYTE PTR 15[esp],dl
+	psllq	mm7,60
+	por	mm1,mm7
+	movq	QWORD PTR [edi-8],mm0
+	psrlq	mm0,4
+	movq	QWORD PTR 120[edi],mm3
+	movq	mm6,mm3
+	movq	QWORD PTR [ebp-16],mm1
+	psrlq	mm3,4
+	movq	QWORD PTR 112[ebp],mm4
+	psllq	mm6,60
+	por	mm0,mm6
+	movq	QWORD PTR [ebp-8],mm0
+	movq	QWORD PTR 120[ebp],mm3
+	movq	mm6,QWORD PTR [eax]
+	mov	ebx,DWORD PTR 8[eax]
+	mov	edx,DWORD PTR 12[eax]
+ALIGN	16
+$L009outer:
+	xor	edx,DWORD PTR 12[ecx]
+	xor	ebx,DWORD PTR 8[ecx]
+	pxor	mm6,QWORD PTR [ecx]
+	lea	ecx,DWORD PTR 16[ecx]
+	mov	DWORD PTR 536[esp],ebx
+	movq	QWORD PTR 528[esp],mm6
+	mov	DWORD PTR 548[esp],ecx
+	xor	eax,eax
+	rol	edx,8
+	mov	al,dl
+	mov	ebp,eax
+	and	al,15
+	shr	ebp,4
+	pxor	mm0,mm0
+	rol	edx,8
+	pxor	mm1,mm1
+	pxor	mm2,mm2
+	movq	mm7,QWORD PTR 16[eax*8+esp]
+	movq	mm6,QWORD PTR 144[eax*8+esp]
+	mov	al,dl
+	movd	ebx,mm7
+	psrlq	mm7,8
+	movq	mm3,mm6
+	mov	edi,eax
+	psrlq	mm6,8
+	pxor	mm7,QWORD PTR 272[ebp*8+esp]
+	and	al,15
+	psllq	mm3,56
+	shr	edi,4
+	pxor	mm7,QWORD PTR 16[eax*8+esp]
+	rol	edx,8
+	pxor	mm6,QWORD PTR 144[eax*8+esp]
+	pxor	mm7,mm3
+	pxor	mm6,QWORD PTR 400[ebp*8+esp]
+	xor	bl,BYTE PTR [ebp*1+esp]
+	mov	al,dl
+	movd	ecx,mm7
+	movzx	ebx,bl
+	psrlq	mm7,8
+	movq	mm3,mm6
+	mov	ebp,eax
+	psrlq	mm6,8
+	pxor	mm7,QWORD PTR 272[edi*8+esp]
+	and	al,15
+	psllq	mm3,56
+	shr	ebp,4
+	pinsrw	mm2,WORD PTR [ebx*2+esi],2
+	pxor	mm7,QWORD PTR 16[eax*8+esp]
+	rol	edx,8
+	pxor	mm6,QWORD PTR 144[eax*8+esp]
+	pxor	mm7,mm3
+	pxor	mm6,QWORD PTR 400[edi*8+esp]
+	xor	cl,BYTE PTR [edi*1+esp]
+	mov	al,dl
+	mov	edx,DWORD PTR 536[esp]
+	movd	ebx,mm7
+	movzx	ecx,cl
+	psrlq	mm7,8
+	movq	mm3,mm6
+	mov	edi,eax
+	psrlq	mm6,8
+	pxor	mm7,QWORD PTR 272[ebp*8+esp]
+	and	al,15
+	psllq	mm3,56
+	pxor	mm6,mm2
+	shr	edi,4
+	pinsrw	mm1,WORD PTR [ecx*2+esi],2
+	pxor	mm7,QWORD PTR 16[eax*8+esp]
+	rol	edx,8
+	pxor	mm6,QWORD PTR 144[eax*8+esp]
+	pxor	mm7,mm3
+	pxor	mm6,QWORD PTR 400[ebp*8+esp]
+	xor	bl,BYTE PTR [ebp*1+esp]
+	mov	al,dl
+	movd	ecx,mm7
+	movzx	ebx,bl
+	psrlq	mm7,8
+	movq	mm3,mm6
+	mov	ebp,eax
+	psrlq	mm6,8
+	pxor	mm7,QWORD PTR 272[edi*8+esp]
+	and	al,15
+	psllq	mm3,56
+	pxor	mm6,mm1
+	shr	ebp,4
+	pinsrw	mm0,WORD PTR [ebx*2+esi],2
+	pxor	mm7,QWORD PTR 16[eax*8+esp]
+	rol	edx,8
+	pxor	mm6,QWORD PTR 144[eax*8+esp]
+	pxor	mm7,mm3
+	pxor	mm6,QWORD PTR 400[edi*8+esp]
+	xor	cl,BYTE PTR [edi*1+esp]
+	mov	al,dl
+	movd	ebx,mm7
+	movzx	ecx,cl
+	psrlq	mm7,8
+	movq	mm3,mm6
+	mov	edi,eax
+	psrlq	mm6,8
+	pxor	mm7,QWORD PTR 272[ebp*8+esp]
+	and	al,15
+	psllq	mm3,56
+	pxor	mm6,mm0
+	shr	edi,4
+	pinsrw	mm2,WORD PTR [ecx*2+esi],2
+	pxor	mm7,QWORD PTR 16[eax*8+esp]
+	rol	edx,8
+	pxor	mm6,QWORD PTR 144[eax*8+esp]
+	pxor	mm7,mm3
+	pxor	mm6,QWORD PTR 400[ebp*8+esp]
+	xor	bl,BYTE PTR [ebp*1+esp]
+	mov	al,dl
+	movd	ecx,mm7
+	movzx	ebx,bl
+	psrlq	mm7,8
+	movq	mm3,mm6
+	mov	ebp,eax
+	psrlq	mm6,8
+	pxor	mm7,QWORD PTR 272[edi*8+esp]
+	and	al,15
+	psllq	mm3,56
+	pxor	mm6,mm2
+	shr	ebp,4
+	pinsrw	mm1,WORD PTR [ebx*2+esi],2
+	pxor	mm7,QWORD PTR 16[eax*8+esp]
+	rol	edx,8
+	pxor	mm6,QWORD PTR 144[eax*8+esp]
+	pxor	mm7,mm3
+	pxor	mm6,QWORD PTR 400[edi*8+esp]
+	xor	cl,BYTE PTR [edi*1+esp]
+	mov	al,dl
+	mov	edx,DWORD PTR 532[esp]
+	movd	ebx,mm7
+	movzx	ecx,cl
+	psrlq	mm7,8
+	movq	mm3,mm6
+	mov	edi,eax
+	psrlq	mm6,8
+	pxor	mm7,QWORD PTR 272[ebp*8+esp]
+	and	al,15
+	psllq	mm3,56
+	pxor	mm6,mm1
+	shr	edi,4
+	pinsrw	mm0,WORD PTR [ecx*2+esi],2
+	pxor	mm7,QWORD PTR 16[eax*8+esp]
+	rol	edx,8
+	pxor	mm6,QWORD PTR 144[eax*8+esp]
+	pxor	mm7,mm3
+	pxor	mm6,QWORD PTR 400[ebp*8+esp]
+	xor	bl,BYTE PTR [ebp*1+esp]
+	mov	al,dl
+	movd	ecx,mm7
+	movzx	ebx,bl
+	psrlq	mm7,8
+	movq	mm3,mm6
+	mov	ebp,eax
+	psrlq	mm6,8
+	pxor	mm7,QWORD PTR 272[edi*8+esp]
+	and	al,15
+	psllq	mm3,56
+	pxor	mm6,mm0
+	shr	ebp,4
+	pinsrw	mm2,WORD PTR [ebx*2+esi],2
+	pxor	mm7,QWORD PTR 16[eax*8+esp]
+	rol	edx,8
+	pxor	mm6,QWORD PTR 144[eax*8+esp]
+	pxor	mm7,mm3
+	pxor	mm6,QWORD PTR 400[edi*8+esp]
+	xor	cl,BYTE PTR [edi*1+esp]
+	mov	al,dl
+	movd	ebx,mm7
+	movzx	ecx,cl
+	psrlq	mm7,8
+	movq	mm3,mm6
+	mov	edi,eax
+	psrlq	mm6,8
+	pxor	mm7,QWORD PTR 272[ebp*8+esp]
+	and	al,15
+	psllq	mm3,56
+	pxor	mm6,mm2
+	shr	edi,4
+	pinsrw	mm1,WORD PTR [ecx*2+esi],2
+	pxor	mm7,QWORD PTR 16[eax*8+esp]
+	rol	edx,8
+	pxor	mm6,QWORD PTR 144[eax*8+esp]
+	pxor	mm7,mm3
+	pxor	mm6,QWORD PTR 400[ebp*8+esp]
+	xor	bl,BYTE PTR [ebp*1+esp]
+	mov	al,dl
+	movd	ecx,mm7
+	movzx	ebx,bl
+	psrlq	mm7,8
+	movq	mm3,mm6
+	mov	ebp,eax
+	psrlq	mm6,8
+	pxor	mm7,QWORD PTR 272[edi*8+esp]
+	and	al,15
+	psllq	mm3,56
+	pxor	mm6,mm1
+	shr	ebp,4
+	pinsrw	mm0,WORD PTR [ebx*2+esi],2
+	pxor	mm7,QWORD PTR 16[eax*8+esp]
+	rol	edx,8
+	pxor	mm6,QWORD PTR 144[eax*8+esp]
+	pxor	mm7,mm3
+	pxor	mm6,QWORD PTR 400[edi*8+esp]
+	xor	cl,BYTE PTR [edi*1+esp]
+	mov	al,dl
+	mov	edx,DWORD PTR 528[esp]
+	movd	ebx,mm7
+	movzx	ecx,cl
+	psrlq	mm7,8
+	movq	mm3,mm6
+	mov	edi,eax
+	psrlq	mm6,8
+	pxor	mm7,QWORD PTR 272[ebp*8+esp]
+	and	al,15
+	psllq	mm3,56
+	pxor	mm6,mm0
+	shr	edi,4
+	pinsrw	mm2,WORD PTR [ecx*2+esi],2
+	pxor	mm7,QWORD PTR 16[eax*8+esp]
+	rol	edx,8
+	pxor	mm6,QWORD PTR 144[eax*8+esp]
+	pxor	mm7,mm3
+	pxor	mm6,QWORD PTR 400[ebp*8+esp]
+	xor	bl,BYTE PTR [ebp*1+esp]
+	mov	al,dl
+	movd	ecx,mm7
+	movzx	ebx,bl
+	psrlq	mm7,8
+	movq	mm3,mm6
+	mov	ebp,eax
+	psrlq	mm6,8
+	pxor	mm7,QWORD PTR 272[edi*8+esp]
+	and	al,15
+	psllq	mm3,56
+	pxor	mm6,mm2
+	shr	ebp,4
+	pinsrw	mm1,WORD PTR [ebx*2+esi],2
+	pxor	mm7,QWORD PTR 16[eax*8+esp]
+	rol	edx,8
+	pxor	mm6,QWORD PTR 144[eax*8+esp]
+	pxor	mm7,mm3
+	pxor	mm6,QWORD PTR 400[edi*8+esp]
+	xor	cl,BYTE PTR [edi*1+esp]
+	mov	al,dl
+	movd	ebx,mm7
+	movzx	ecx,cl
+	psrlq	mm7,8
+	movq	mm3,mm6
+	mov	edi,eax
+	psrlq	mm6,8
+	pxor	mm7,QWORD PTR 272[ebp*8+esp]
+	and	al,15
+	psllq	mm3,56
+	pxor	mm6,mm1
+	shr	edi,4
+	pinsrw	mm0,WORD PTR [ecx*2+esi],2
+	pxor	mm7,QWORD PTR 16[eax*8+esp]
+	rol	edx,8
+	pxor	mm6,QWORD PTR 144[eax*8+esp]
+	pxor	mm7,mm3
+	pxor	mm6,QWORD PTR 400[ebp*8+esp]
+	xor	bl,BYTE PTR [ebp*1+esp]
+	mov	al,dl
+	movd	ecx,mm7
+	movzx	ebx,bl
+	psrlq	mm7,8
+	movq	mm3,mm6
+	mov	ebp,eax
+	psrlq	mm6,8
+	pxor	mm7,QWORD PTR 272[edi*8+esp]
+	and	al,15
+	psllq	mm3,56
+	pxor	mm6,mm0
+	shr	ebp,4
+	pinsrw	mm2,WORD PTR [ebx*2+esi],2
+	pxor	mm7,QWORD PTR 16[eax*8+esp]
+	rol	edx,8
+	pxor	mm6,QWORD PTR 144[eax*8+esp]
+	pxor	mm7,mm3
+	pxor	mm6,QWORD PTR 400[edi*8+esp]
+	xor	cl,BYTE PTR [edi*1+esp]
+	mov	al,dl
+	mov	edx,DWORD PTR 524[esp]
+	movd	ebx,mm7
+	movzx	ecx,cl
+	psrlq	mm7,8
+	movq	mm3,mm6
+	mov	edi,eax
+	psrlq	mm6,8
+	pxor	mm7,QWORD PTR 272[ebp*8+esp]
+	and	al,15
+	psllq	mm3,56
+	pxor	mm6,mm2
+	shr	edi,4
+	pinsrw	mm1,WORD PTR [ecx*2+esi],2
+	pxor	mm7,QWORD PTR 16[eax*8+esp]
+	pxor	mm6,QWORD PTR 144[eax*8+esp]
+	xor	bl,BYTE PTR [ebp*1+esp]
+	pxor	mm7,mm3
+	pxor	mm6,QWORD PTR 400[ebp*8+esp]
+	movzx	ebx,bl
+	pxor	mm2,mm2
+	psllq	mm1,4
+	movd	ecx,mm7
+	psrlq	mm7,4
+	movq	mm3,mm6
+	psrlq	mm6,4
+	shl	ecx,4
+	pxor	mm7,QWORD PTR 16[edi*8+esp]
+	psllq	mm3,60
+	movzx	ecx,cl
+	pxor	mm7,mm3
+	pxor	mm6,QWORD PTR 144[edi*8+esp]
+	pinsrw	mm0,WORD PTR [ebx*2+esi],2
+	pxor	mm6,mm1
+	movd	edx,mm7
+	pinsrw	mm2,WORD PTR [ecx*2+esi],3
+	psllq	mm0,12
+	pxor	mm6,mm0
+	psrlq	mm7,32
+	pxor	mm6,mm2
+	mov	ecx,DWORD PTR 548[esp]
+	movd	ebx,mm7
+	movq	mm3,mm6
+	psllw	mm6,8
+	psrlw	mm3,8
+	por	mm6,mm3
+	bswap	edx
+	pshufw	mm6,mm6,27
+	bswap	ebx
+	cmp	ecx,DWORD PTR 552[esp]
+	jne	$L009outer
+	mov	eax,DWORD PTR 544[esp]
+	mov	DWORD PTR 12[eax],edx
+	mov	DWORD PTR 8[eax],ebx
+	movq	QWORD PTR [eax],mm6
+	mov	esp,DWORD PTR 556[esp]
+	emms
+	pop	edi
+	pop	esi
+	pop	ebx
+	pop	ebp
+	ret
+_gcm_ghash_4bit_mmx ENDP
+ALIGN	16
+_gcm_init_clmul	PROC PUBLIC
+$L_gcm_init_clmul_begin::
+	mov	edx,DWORD PTR 4[esp]
+	mov	eax,DWORD PTR 8[esp]
+	call	$L010pic
+$L010pic:
+	pop	ecx
+	lea	ecx,DWORD PTR ($Lbswap-$L010pic)[ecx]
+	movdqu	xmm2,XMMWORD PTR [eax]
+	pshufd	xmm2,xmm2,78
+	pshufd	xmm4,xmm2,255
+	movdqa	xmm3,xmm2
+	psllq	xmm2,1
+	pxor	xmm5,xmm5
+	psrlq	xmm3,63
+	pcmpgtd	xmm5,xmm4
+	pslldq	xmm3,8
+	por	xmm2,xmm3
+	pand	xmm5,XMMWORD PTR 16[ecx]
+	pxor	xmm2,xmm5
+	movdqa	xmm0,xmm2
+	movdqa	xmm1,xmm0
+	pshufd	xmm3,xmm0,78
+	pshufd	xmm4,xmm2,78
+	pxor	xmm3,xmm0
+	pxor	xmm4,xmm2
+DB	102,15,58,68,194,0
+DB	102,15,58,68,202,17
+DB	102,15,58,68,220,0
+	xorps	xmm3,xmm0
+	xorps	xmm3,xmm1
+	movdqa	xmm4,xmm3
+	psrldq	xmm3,8
+	pslldq	xmm4,8
+	pxor	xmm1,xmm3
+	pxor	xmm0,xmm4
+	movdqa	xmm4,xmm0
+	movdqa	xmm3,xmm0
+	psllq	xmm0,5
+	pxor	xmm3,xmm0
+	psllq	xmm0,1
+	pxor	xmm0,xmm3
+	psllq	xmm0,57
+	movdqa	xmm3,xmm0
+	pslldq	xmm0,8
+	psrldq	xmm3,8
+	pxor	xmm0,xmm4
+	pxor	xmm1,xmm3
+	movdqa	xmm4,xmm0
+	psrlq	xmm0,1
+	pxor	xmm1,xmm4
+	pxor	xmm4,xmm0
+	psrlq	xmm0,5
+	pxor	xmm0,xmm4
+	psrlq	xmm0,1
+	pxor	xmm0,xmm1
+	pshufd	xmm3,xmm2,78
+	pshufd	xmm4,xmm0,78
+	pxor	xmm3,xmm2
+	movdqu	XMMWORD PTR [edx],xmm2
+	pxor	xmm4,xmm0
+	movdqu	XMMWORD PTR 16[edx],xmm0
+DB	102,15,58,15,227,8
+	movdqu	XMMWORD PTR 32[edx],xmm4
+	ret
+_gcm_init_clmul ENDP
+ALIGN	16
+_gcm_gmult_clmul	PROC PUBLIC
+$L_gcm_gmult_clmul_begin::
+	mov	eax,DWORD PTR 4[esp]
+	mov	edx,DWORD PTR 8[esp]
+	call	$L011pic
+$L011pic:
+	pop	ecx
+	lea	ecx,DWORD PTR ($Lbswap-$L011pic)[ecx]
+	movdqu	xmm0,XMMWORD PTR [eax]
+	movdqa	xmm5,XMMWORD PTR [ecx]
+	movups	xmm2,XMMWORD PTR [edx]
+DB	102,15,56,0,197
+	movups	xmm4,XMMWORD PTR 32[edx]
+	movdqa	xmm1,xmm0
+	pshufd	xmm3,xmm0,78
+	pxor	xmm3,xmm0
+DB	102,15,58,68,194,0
+DB	102,15,58,68,202,17
+DB	102,15,58,68,220,0
+	xorps	xmm3,xmm0
+	xorps	xmm3,xmm1
+	movdqa	xmm4,xmm3
+	psrldq	xmm3,8
+	pslldq	xmm4,8
+	pxor	xmm1,xmm3
+	pxor	xmm0,xmm4
+	movdqa	xmm4,xmm0
+	movdqa	xmm3,xmm0
+	psllq	xmm0,5
+	pxor	xmm3,xmm0
+	psllq	xmm0,1
+	pxor	xmm0,xmm3
+	psllq	xmm0,57
+	movdqa	xmm3,xmm0
+	pslldq	xmm0,8
+	psrldq	xmm3,8
+	pxor	xmm0,xmm4
+	pxor	xmm1,xmm3
+	movdqa	xmm4,xmm0
+	psrlq	xmm0,1
+	pxor	xmm1,xmm4
+	pxor	xmm4,xmm0
+	psrlq	xmm0,5
+	pxor	xmm0,xmm4
+	psrlq	xmm0,1
+	pxor	xmm0,xmm1
+DB	102,15,56,0,197
+	movdqu	XMMWORD PTR [eax],xmm0
+	ret
+_gcm_gmult_clmul ENDP
+ALIGN	16
+_gcm_ghash_clmul	PROC PUBLIC
+$L_gcm_ghash_clmul_begin::
+	push	ebp
+	push	ebx
+	push	esi
+	push	edi
+	mov	eax,DWORD PTR 20[esp]
+	mov	edx,DWORD PTR 24[esp]
+	mov	esi,DWORD PTR 28[esp]
+	mov	ebx,DWORD PTR 32[esp]
+	call	$L012pic
+$L012pic:
+	pop	ecx
+	lea	ecx,DWORD PTR ($Lbswap-$L012pic)[ecx]
+	movdqu	xmm0,XMMWORD PTR [eax]
+	movdqa	xmm5,XMMWORD PTR [ecx]
+	movdqu	xmm2,XMMWORD PTR [edx]
+DB	102,15,56,0,197
+	sub	ebx,16
+	jz	$L013odd_tail
+	movdqu	xmm3,XMMWORD PTR [esi]
+	movdqu	xmm6,XMMWORD PTR 16[esi]
+DB	102,15,56,0,221
+DB	102,15,56,0,245
+	movdqu	xmm5,XMMWORD PTR 32[edx]
+	pxor	xmm0,xmm3
+	pshufd	xmm3,xmm6,78
+	movdqa	xmm7,xmm6
+	pxor	xmm3,xmm6
+	lea	esi,DWORD PTR 32[esi]
+DB	102,15,58,68,242,0
+DB	102,15,58,68,250,17
+DB	102,15,58,68,221,0
+	movups	xmm2,XMMWORD PTR 16[edx]
+	nop
+	sub	ebx,32
+	jbe	$L014even_tail
+	jmp	$L015mod_loop
+ALIGN	32
+$L015mod_loop:
+	pshufd	xmm4,xmm0,78
+	movdqa	xmm1,xmm0
+	pxor	xmm4,xmm0
+	nop
+DB	102,15,58,68,194,0
+DB	102,15,58,68,202,17
+DB	102,15,58,68,229,16
+	movups	xmm2,XMMWORD PTR [edx]
+	xorps	xmm0,xmm6
+	movdqa	xmm5,XMMWORD PTR [ecx]
+	xorps	xmm1,xmm7
+	movdqu	xmm7,XMMWORD PTR [esi]
+	pxor	xmm3,xmm0
+	movdqu	xmm6,XMMWORD PTR 16[esi]
+	pxor	xmm3,xmm1
+DB	102,15,56,0,253
+	pxor	xmm4,xmm3
+	movdqa	xmm3,xmm4
+	psrldq	xmm4,8
+	pslldq	xmm3,8
+	pxor	xmm1,xmm4
+	pxor	xmm0,xmm3
+DB	102,15,56,0,245
+	pxor	xmm1,xmm7
+	movdqa	xmm7,xmm6
+	movdqa	xmm4,xmm0
+	movdqa	xmm3,xmm0
+	psllq	xmm0,5
+	pxor	xmm3,xmm0
+	psllq	xmm0,1
+	pxor	xmm0,xmm3
+DB	102,15,58,68,242,0
+	movups	xmm5,XMMWORD PTR 32[edx]
+	psllq	xmm0,57
+	movdqa	xmm3,xmm0
+	pslldq	xmm0,8
+	psrldq	xmm3,8
+	pxor	xmm0,xmm4
+	pxor	xmm1,xmm3
+	pshufd	xmm3,xmm7,78
+	movdqa	xmm4,xmm0
+	psrlq	xmm0,1
+	pxor	xmm3,xmm7
+	pxor	xmm1,xmm4
+DB	102,15,58,68,250,17
+	movups	xmm2,XMMWORD PTR 16[edx]
+	pxor	xmm4,xmm0
+	psrlq	xmm0,5
+	pxor	xmm0,xmm4
+	psrlq	xmm0,1
+	pxor	xmm0,xmm1
+DB	102,15,58,68,221,0
+	lea	esi,DWORD PTR 32[esi]
+	sub	ebx,32
+	ja	$L015mod_loop
+$L014even_tail:
+	pshufd	xmm4,xmm0,78
+	movdqa	xmm1,xmm0
+	pxor	xmm4,xmm0
+DB	102,15,58,68,194,0
+DB	102,15,58,68,202,17
+DB	102,15,58,68,229,16
+	movdqa	xmm5,XMMWORD PTR [ecx]
+	xorps	xmm0,xmm6
+	xorps	xmm1,xmm7
+	pxor	xmm3,xmm0
+	pxor	xmm3,xmm1
+	pxor	xmm4,xmm3
+	movdqa	xmm3,xmm4
+	psrldq	xmm4,8
+	pslldq	xmm3,8
+	pxor	xmm1,xmm4
+	pxor	xmm0,xmm3
+	movdqa	xmm4,xmm0
+	movdqa	xmm3,xmm0
+	psllq	xmm0,5
+	pxor	xmm3,xmm0
+	psllq	xmm0,1
+	pxor	xmm0,xmm3
+	psllq	xmm0,57
+	movdqa	xmm3,xmm0
+	pslldq	xmm0,8
+	psrldq	xmm3,8
+	pxor	xmm0,xmm4
+	pxor	xmm1,xmm3
+	movdqa	xmm4,xmm0
+	psrlq	xmm0,1
+	pxor	xmm1,xmm4
+	pxor	xmm4,xmm0
+	psrlq	xmm0,5
+	pxor	xmm0,xmm4
+	psrlq	xmm0,1
+	pxor	xmm0,xmm1
+	test	ebx,ebx
+	jnz	$L016done
+	movups	xmm2,XMMWORD PTR [edx]
+$L013odd_tail:
+	movdqu	xmm3,XMMWORD PTR [esi]
+DB	102,15,56,0,221
+	pxor	xmm0,xmm3
+	movdqa	xmm1,xmm0
+	pshufd	xmm3,xmm0,78
+	pshufd	xmm4,xmm2,78
+	pxor	xmm3,xmm0
+	pxor	xmm4,xmm2
+DB	102,15,58,68,194,0
+DB	102,15,58,68,202,17
+DB	102,15,58,68,220,0
+	xorps	xmm3,xmm0
+	xorps	xmm3,xmm1
+	movdqa	xmm4,xmm3
+	psrldq	xmm3,8
+	pslldq	xmm4,8
+	pxor	xmm1,xmm3
+	pxor	xmm0,xmm4
+	movdqa	xmm4,xmm0
+	movdqa	xmm3,xmm0
+	psllq	xmm0,5
+	pxor	xmm3,xmm0
+	psllq	xmm0,1
+	pxor	xmm0,xmm3
+	psllq	xmm0,57
+	movdqa	xmm3,xmm0
+	pslldq	xmm0,8
+	psrldq	xmm3,8
+	pxor	xmm0,xmm4
+	pxor	xmm1,xmm3
+	movdqa	xmm4,xmm0
+	psrlq	xmm0,1
+	pxor	xmm1,xmm4
+	pxor	xmm4,xmm0
+	psrlq	xmm0,5
+	pxor	xmm0,xmm4
+	psrlq	xmm0,1
+	pxor	xmm0,xmm1
+$L016done:
+DB	102,15,56,0,197
+	movdqu	XMMWORD PTR [eax],xmm0
+	pop	edi
+	pop	esi
+	pop	ebx
+	pop	ebp
+	ret
+_gcm_ghash_clmul ENDP
+ALIGN	64
+$Lbswap::
+DB	15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
+DB	1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,194
+ALIGN	64
+$Lrem_8bit::
+DW	0,450,900,582,1800,1738,1164,1358
+DW	3600,4050,3476,3158,2328,2266,2716,2910
+DW	7200,7650,8100,7782,6952,6890,6316,6510
+DW	4656,5106,4532,4214,5432,5370,5820,6014
+DW	14400,14722,15300,14854,16200,16010,15564,15630
+DW	13904,14226,13780,13334,12632,12442,13020,13086
+DW	9312,9634,10212,9766,9064,8874,8428,8494
+DW	10864,11186,10740,10294,11640,11450,12028,12094
+DW	28800,28994,29444,29382,30600,30282,29708,30158
+DW	32400,32594,32020,31958,31128,30810,31260,31710
+DW	27808,28002,28452,28390,27560,27242,26668,27118
+DW	25264,25458,24884,24822,26040,25722,26172,26622
+DW	18624,18690,19268,19078,20424,19978,19532,19854
+DW	18128,18194,17748,17558,16856,16410,16988,17310
+DW	21728,21794,22372,22182,21480,21034,20588,20910
+DW	23280,23346,22900,22710,24056,23610,24188,24510
+DW	57600,57538,57988,58182,58888,59338,58764,58446
+DW	61200,61138,60564,60758,59416,59866,60316,59998
+DW	64800,64738,65188,65382,64040,64490,63916,63598
+DW	62256,62194,61620,61814,62520,62970,63420,63102
+DW	55616,55426,56004,56070,56904,57226,56780,56334
+DW	55120,54930,54484,54550,53336,53658,54236,53790
+DW	50528,50338,50916,50982,49768,50090,49644,49198
+DW	52080,51890,51444,51510,52344,52666,53244,52798
+DW	37248,36930,37380,37830,38536,38730,38156,38094
+DW	40848,40530,39956,40406,39064,39258,39708,39646
+DW	36256,35938,36388,36838,35496,35690,35116,35054
+DW	33712,33394,32820,33270,33976,34170,34620,34558
+DW	43456,43010,43588,43910,44744,44810,44364,44174
+DW	42960,42514,42068,42390,41176,41242,41820,41630
+DW	46560,46114,46692,47014,45800,45866,45420,45230
+DW	48112,47666,47220,47542,48376,48442,49020,48830
+ALIGN	64
+$Lrem_4bit::
+DD	0,0,0,471859200
+DD	0,943718400,0,610271232
+DD	0,1887436800,0,1822425088
+DD	0,1220542464,0,1423966208
+DD	0,3774873600,0,4246732800
+DD	0,3644850176,0,3311403008
+DD	0,2441084928,0,2376073216
+DD	0,2847932416,0,3051356160
+DB	71,72,65,83,72,32,102,111,114,32,120,56,54,44,32,67
+DB	82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112
+DB	112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62
+DB	0
+.text$	ENDS
+END

Some files were not shown because too many files changed in this diff