update main-with-bazel from master branch

This commit is contained in:
BoringSSL Robot
2024-05-03 20:36:17 +00:00
6 changed files with 223 additions and 118 deletions
+47 -16
View File
@@ -66,8 +66,6 @@ open STDOUT,">$output";
$sse2=1;
&external_label("OPENSSL_ia32cap_P") if ($sse2);
$Tlo=&DWP(0,"esp"); $Thi=&DWP(4,"esp");
$Alo=&DWP(8,"esp"); $Ahi=&DWP(8+4,"esp");
$Blo=&DWP(16,"esp"); $Bhi=&DWP(16+4,"esp");
@@ -290,8 +288,9 @@ sub BODY_00_15_x86 {
&lea ($K512,&DWP(8,$K512)); # K++
}
&static_label("K512");
&function_begin("sha512_block_data_order");
&function_begin("sha512_block_data_order_nohw");
&mov ("esi",wparam(0)); # ctx
&mov ("edi",wparam(1)); # inp
&mov ("eax",wparam(2)); # num
@@ -313,27 +312,24 @@ sub BODY_00_15_x86 {
&mov (&DWP(12,"esp"),"ebx"); # saved sp
if ($sse2) {
&picmeup("edx","OPENSSL_ia32cap_P",$K512,&label("K512"));
&mov ("ecx",&DWP(0,"edx"));
&mov ("edx",&DWP(4,"edx"));
# load ctx->h[0-7]
&movq ($A,&QWP(0,"esi"));
&and ("ecx",1<<24); # XMM registers availability
&movq ("mm1",&QWP(8,"esi"));
&and ("edx",1<<9); # SSSE3 bit
&movq ($BxC,&QWP(16,"esi"));
&or ("ecx","edx");
&movq ("mm3",&QWP(24,"esi"));
&movq ($E,&QWP(32,"esi"));
&movq ("mm5",&QWP(40,"esi"));
&movq ("mm6",&QWP(48,"esi"));
&movq ("mm7",&QWP(56,"esi"));
&cmp ("ecx",1<<24|1<<9);
&je (&label("SSSE3"));
&sub ("esp",8*10);
&jmp (&label("loop_sse2"));
# TODO(davidben): The preamble above this point comes from the original
# merged sha512_block_data_order function, which performed some common
# setup and then jumped to the particular SHA-512 implementation. The
# parts of the preamble that do not apply to this function can be
# removed.
&set_label("loop_sse2",16);
#&movq ($Asse2,$A);
&movq ($Bsse2,"mm1");
@@ -458,14 +454,50 @@ if ($sse2) {
&mov ("esp",&DWP(8*10+12,"esp")); # restore sp
&emms ();
&function_end_A();
&function_end("sha512_block_data_order_nohw");
&set_label("SSSE3",32);
{ my ($cnt,$frame)=("ecx","edx");
my @X=map("xmm$_",(0..7));
my $j;
my $i=0;
&function_begin("sha512_block_data_order_ssse3");
&mov ("esi",wparam(0)); # ctx
&mov ("edi",wparam(1)); # inp
&mov ("eax",wparam(2)); # num
&mov ("ebx","esp"); # saved sp
&call (&label("pic_point")); # make it PIC!
&set_label("pic_point");
&blindpop($K512);
&lea ($K512,&DWP(&label("K512")."-".&label("pic_point"),$K512));
&sub ("esp",16);
&and ("esp",-64);
&shl ("eax",7);
&add ("eax","edi");
&mov (&DWP(0,"esp"),"esi"); # ctx
&mov (&DWP(4,"esp"),"edi"); # inp
&mov (&DWP(8,"esp"),"eax"); # inp+num*128
&mov (&DWP(12,"esp"),"ebx"); # saved sp
# load ctx->h[0-7]
&movq ($A,&QWP(0,"esi"));
&movq ("mm1",&QWP(8,"esi"));
&movq ($BxC,&QWP(16,"esi"));
&movq ("mm3",&QWP(24,"esi"));
&movq ($E,&QWP(32,"esi"));
&movq ("mm5",&QWP(40,"esi"));
&movq ("mm6",&QWP(48,"esi"));
&movq ("mm7",&QWP(56,"esi"));
# TODO(davidben): The preamble above this point comes from the original
# merged sha512_block_data_order function, which performed some common
# setup and then jumped to the particular SHA-512 implementation. The
# parts of the preamble that do not apply to this function can be
# removed.
&lea ($frame,&DWP(-64,"esp"));
&sub ("esp",256);
@@ -683,7 +715,7 @@ sub BODY_00_15_ssse3 { # "phase-less" copy of BODY_00_15_sse2
&mov ("esp",&DWP(64+12,$frame)); # restore sp
&emms ();
}
&function_end_A();
&function_end("sha512_block_data_order_ssse3");
}
&set_label("K512",64); # Yes! I keep it in the code segment!
@@ -770,7 +802,6 @@ sub BODY_00_15_ssse3 { # "phase-less" copy of BODY_00_15_sse2
&data_word(0x04050607,0x00010203); # byte swap
&data_word(0x0c0d0e0f,0x08090a0b); # mask
&function_end_B("sha512_block_data_order");
&asciz("SHA512 block transform for x86, CRYPTOGAMS by <appro\@openssl.org>");
&asm_finish();
+9 -4
View File
@@ -80,6 +80,7 @@ OPENSSL_INLINE int sha512_hw_capable(void) {
#define SHA1_ASM_NOHW
#define SHA256_ASM_NOHW
#define SHA512_ASM_NOHW
#define SHA1_ASM_SSSE3
OPENSSL_INLINE int sha1_ssse3_capable(void) {
@@ -127,10 +128,14 @@ OPENSSL_INLINE int sha256_avx_capable(void) {
void sha256_block_data_order_avx(uint32_t state[8], const uint8_t *data,
size_t num);
// TODO(crbug.com/boringssl/673): Move the remaining CPU dispatch to C.
#define SHA512_ASM
void sha512_block_data_order(uint64_t state[8], const uint8_t *data,
size_t num_blocks);
#define SHA512_ASM_SSSE3
OPENSSL_INLINE int sha512_ssse3_capable(void) {
// TODO(davidben): Do we need to check the FXSR bit? The Intel manual does not
// say to.
return CRYPTO_is_SSSE3_capable() && CRYPTO_is_FXSR_capable();
}
void sha512_block_data_order_ssse3(uint64_t state[8], const uint8_t *data,
size_t num);
#elif !defined(OPENSSL_NO_ASM) && defined(OPENSSL_X86_64)
+6
View File
@@ -516,6 +516,12 @@ static void sha512_block_data_order(uint64_t state[8], const uint8_t *data,
return;
}
#endif
#if defined(SHA512_ASM_SSSE3)
if (sha512_ssse3_capable()) {
sha512_block_data_order_ssse3(state, data, num);
return;
}
#endif
#if defined(SHA512_ASM_NEON)
if (CRYPTO_is_NEON_capable()) {
sha512_block_data_order_neon(state, data, num);
+53 -34
View File
@@ -5,11 +5,11 @@
#if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_X86) && defined(__APPLE__)
.text
.globl _sha512_block_data_order
.private_extern _sha512_block_data_order
.globl _sha512_block_data_order_nohw
.private_extern _sha512_block_data_order_nohw
.align 4
_sha512_block_data_order:
L_sha512_block_data_order_begin:
_sha512_block_data_order_nohw:
L_sha512_block_data_order_nohw_begin:
pushl %ebp
pushl %ebx
pushl %esi
@@ -21,7 +21,7 @@ L_sha512_block_data_order_begin:
call L000pic_point
L000pic_point:
popl %ebp
leal L001K512-L000pic_point(%ebp),%ebp
leal LK512-L000pic_point(%ebp),%ebp
subl $16,%esp
andl $-64,%esp
shll $7,%eax
@@ -30,26 +30,18 @@ L000pic_point:
movl %edi,4(%esp)
movl %eax,8(%esp)
movl %ebx,12(%esp)
movl L_OPENSSL_ia32cap_P$non_lazy_ptr-L001K512(%ebp),%edx
movl (%edx),%ecx
movl 4(%edx),%edx
movq (%esi),%mm0
andl $16777216,%ecx
movq 8(%esi),%mm1
andl $512,%edx
movq 16(%esi),%mm2
orl %edx,%ecx
movq 24(%esi),%mm3
movq 32(%esi),%mm4
movq 40(%esi),%mm5
movq 48(%esi),%mm6
movq 56(%esi),%mm7
cmpl $16777728,%ecx
je L002SSSE3
subl $80,%esp
jmp L003loop_sse2
jmp L001loop_sse2
.align 4,0x90
L003loop_sse2:
L001loop_sse2:
movq %mm1,8(%esp)
movq %mm2,16(%esp)
movq %mm3,24(%esp)
@@ -64,9 +56,9 @@ L003loop_sse2:
movl $15,%edx
bswap %eax
bswap %ebx
jmp L00400_14_sse2
jmp L00200_14_sse2
.align 4,0x90
L00400_14_sse2:
L00200_14_sse2:
movd %eax,%mm1
movl (%edi),%eax
movd %ebx,%mm7
@@ -127,7 +119,7 @@ L00400_14_sse2:
paddq %mm6,%mm3
movq 48(%esp),%mm6
decl %edx
jnz L00400_14_sse2
jnz L00200_14_sse2
movd %eax,%mm1
movd %ebx,%mm7
punpckldq %mm1,%mm7
@@ -183,9 +175,9 @@ L00400_14_sse2:
paddq %mm6,%mm3
pxor %mm0,%mm0
movl $32,%edx
jmp L00516_79_sse2
jmp L00316_79_sse2
.align 4,0x90
L00516_79_sse2:
L00316_79_sse2:
movq 88(%esp),%mm5
movq %mm7,%mm1
psrlq $1,%mm7
@@ -339,7 +331,7 @@ L00516_79_sse2:
paddq %mm6,%mm0
addl $8,%ebp
decl %edx
jnz L00516_79_sse2
jnz L00316_79_sse2
paddq %mm3,%mm0
movq 8(%esp),%mm1
movq 24(%esp),%mm3
@@ -367,7 +359,7 @@ L00516_79_sse2:
leal (%esp,%eax,1),%esp
subl %eax,%ebp
cmpl 88(%esp),%edi
jb L003loop_sse2
jb L001loop_sse2
movl 92(%esp),%esp
emms
popl %edi
@@ -375,8 +367,39 @@ L00516_79_sse2:
popl %ebx
popl %ebp
ret
.align 5,0x90
L002SSSE3:
.globl _sha512_block_data_order_ssse3
.private_extern _sha512_block_data_order_ssse3
.align 4
_sha512_block_data_order_ssse3:
L_sha512_block_data_order_ssse3_begin:
pushl %ebp
pushl %ebx
pushl %esi
pushl %edi
movl 20(%esp),%esi
movl 24(%esp),%edi
movl 28(%esp),%eax
movl %esp,%ebx
call L004pic_point
L004pic_point:
popl %ebp
leal LK512-L004pic_point(%ebp),%ebp
subl $16,%esp
andl $-64,%esp
shll $7,%eax
addl %edi,%eax
movl %esi,(%esp)
movl %edi,4(%esp)
movl %eax,8(%esp)
movl %ebx,12(%esp)
movq (%esi),%mm0
movq 8(%esi),%mm1
movq 16(%esi),%mm2
movq 24(%esi),%mm3
movq 32(%esi),%mm4
movq 40(%esi),%mm5
movq 48(%esi),%mm6
movq 56(%esi),%mm7
leal -64(%esp),%edx
subl $256,%esp
movdqa 640(%ebp),%xmm1
@@ -433,7 +456,7 @@ L002SSSE3:
movdqa %xmm2,-16(%edx)
nop
.align 5,0x90
L006loop_ssse3:
L005loop_ssse3:
movdqa 16(%edx),%xmm2
movdqa %xmm3,48(%edx)
leal 128(%ebp),%ebp
@@ -450,9 +473,9 @@ L006loop_ssse3:
pxor %mm1,%mm2
movq %mm7,56(%esp)
pxor %mm3,%mm3
jmp L00700_47_ssse3
jmp L00600_47_ssse3
.align 5,0x90
L00700_47_ssse3:
L00600_47_ssse3:
movdqa %xmm5,%xmm3
movdqa %xmm2,%xmm1
.byte 102,15,58,15,208,8
@@ -1471,7 +1494,7 @@ L00700_47_ssse3:
movdqa %xmm1,-16(%edx)
leal 128(%ebp),%ebp
decl %ecx
jnz L00700_47_ssse3
jnz L00600_47_ssse3
movdqa (%ebp),%xmm1
leal -640(%ebp),%ebp
movdqu (%ebx),%xmm0
@@ -2283,7 +2306,7 @@ L00700_47_ssse3:
movq %mm6,48(%esi)
movq %mm7,56(%esi)
cmpl %eax,%edi
jb L006loop_ssse3
jb L005loop_ssse3
movl 76(%edx),%esp
emms
popl %edi
@@ -2292,7 +2315,7 @@ L00700_47_ssse3:
popl %ebp
ret
.align 6,0x90
L001K512:
LK512:
.long 3609767458,1116352408
.long 602891725,1899447441
.long 3964484399,3049323471
@@ -2380,8 +2403,4 @@ L001K512:
.byte 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
.byte 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
.byte 62,0
.section __IMPORT,__pointers,non_lazy_symbol_pointers
L_OPENSSL_ia32cap_P$non_lazy_ptr:
.indirect_symbol _OPENSSL_ia32cap_P
.long 0
#endif // !defined(OPENSSL_NO_ASM) && defined(OPENSSL_X86) && defined(__APPLE__)
+57 -32
View File
@@ -5,12 +5,12 @@
#if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_X86) && defined(__ELF__)
.text
.globl sha512_block_data_order
.hidden sha512_block_data_order
.type sha512_block_data_order,@function
.globl sha512_block_data_order_nohw
.hidden sha512_block_data_order_nohw
.type sha512_block_data_order_nohw,@function
.align 16
sha512_block_data_order:
.L_sha512_block_data_order_begin:
sha512_block_data_order_nohw:
.L_sha512_block_data_order_nohw_begin:
pushl %ebp
pushl %ebx
pushl %esi
@@ -22,7 +22,7 @@ sha512_block_data_order:
call .L000pic_point
.L000pic_point:
popl %ebp
leal .L001K512-.L000pic_point(%ebp),%ebp
leal .LK512-.L000pic_point(%ebp),%ebp
subl $16,%esp
andl $-64,%esp
shll $7,%eax
@@ -31,26 +31,18 @@ sha512_block_data_order:
movl %edi,4(%esp)
movl %eax,8(%esp)
movl %ebx,12(%esp)
leal OPENSSL_ia32cap_P-.L001K512(%ebp),%edx
movl (%edx),%ecx
movl 4(%edx),%edx
movq (%esi),%mm0
andl $16777216,%ecx
movq 8(%esi),%mm1
andl $512,%edx
movq 16(%esi),%mm2
orl %edx,%ecx
movq 24(%esi),%mm3
movq 32(%esi),%mm4
movq 40(%esi),%mm5
movq 48(%esi),%mm6
movq 56(%esi),%mm7
cmpl $16777728,%ecx
je .L002SSSE3
subl $80,%esp
jmp .L003loop_sse2
jmp .L001loop_sse2
.align 16
.L003loop_sse2:
.L001loop_sse2:
movq %mm1,8(%esp)
movq %mm2,16(%esp)
movq %mm3,24(%esp)
@@ -65,9 +57,9 @@ sha512_block_data_order:
movl $15,%edx
bswap %eax
bswap %ebx
jmp .L00400_14_sse2
jmp .L00200_14_sse2
.align 16
.L00400_14_sse2:
.L00200_14_sse2:
movd %eax,%mm1
movl (%edi),%eax
movd %ebx,%mm7
@@ -128,7 +120,7 @@ sha512_block_data_order:
paddq %mm6,%mm3
movq 48(%esp),%mm6
decl %edx
jnz .L00400_14_sse2
jnz .L00200_14_sse2
movd %eax,%mm1
movd %ebx,%mm7
punpckldq %mm1,%mm7
@@ -184,9 +176,9 @@ sha512_block_data_order:
paddq %mm6,%mm3
pxor %mm0,%mm0
movl $32,%edx
jmp .L00516_79_sse2
jmp .L00316_79_sse2
.align 16
.L00516_79_sse2:
.L00316_79_sse2:
movq 88(%esp),%mm5
movq %mm7,%mm1
psrlq $1,%mm7
@@ -340,7 +332,7 @@ sha512_block_data_order:
paddq %mm6,%mm0
addl $8,%ebp
decl %edx
jnz .L00516_79_sse2
jnz .L00316_79_sse2
paddq %mm3,%mm0
movq 8(%esp),%mm1
movq 24(%esp),%mm3
@@ -368,7 +360,7 @@ sha512_block_data_order:
leal (%esp,%eax,1),%esp
subl %eax,%ebp
cmpl 88(%esp),%edi
jb .L003loop_sse2
jb .L001loop_sse2
movl 92(%esp),%esp
emms
popl %edi
@@ -376,8 +368,41 @@ sha512_block_data_order:
popl %ebx
popl %ebp
ret
.align 32
.L002SSSE3:
.size sha512_block_data_order_nohw,.-.L_sha512_block_data_order_nohw_begin
.globl sha512_block_data_order_ssse3
.hidden sha512_block_data_order_ssse3
.type sha512_block_data_order_ssse3,@function
.align 16
sha512_block_data_order_ssse3:
.L_sha512_block_data_order_ssse3_begin:
pushl %ebp
pushl %ebx
pushl %esi
pushl %edi
movl 20(%esp),%esi
movl 24(%esp),%edi
movl 28(%esp),%eax
movl %esp,%ebx
call .L004pic_point
.L004pic_point:
popl %ebp
leal .LK512-.L004pic_point(%ebp),%ebp
subl $16,%esp
andl $-64,%esp
shll $7,%eax
addl %edi,%eax
movl %esi,(%esp)
movl %edi,4(%esp)
movl %eax,8(%esp)
movl %ebx,12(%esp)
movq (%esi),%mm0
movq 8(%esi),%mm1
movq 16(%esi),%mm2
movq 24(%esi),%mm3
movq 32(%esi),%mm4
movq 40(%esi),%mm5
movq 48(%esi),%mm6
movq 56(%esi),%mm7
leal -64(%esp),%edx
subl $256,%esp
movdqa 640(%ebp),%xmm1
@@ -434,7 +459,7 @@ sha512_block_data_order:
movdqa %xmm2,-16(%edx)
nop
.align 32
.L006loop_ssse3:
.L005loop_ssse3:
movdqa 16(%edx),%xmm2
movdqa %xmm3,48(%edx)
leal 128(%ebp),%ebp
@@ -451,9 +476,9 @@ sha512_block_data_order:
pxor %mm1,%mm2
movq %mm7,56(%esp)
pxor %mm3,%mm3
jmp .L00700_47_ssse3
jmp .L00600_47_ssse3
.align 32
.L00700_47_ssse3:
.L00600_47_ssse3:
movdqa %xmm5,%xmm3
movdqa %xmm2,%xmm1
.byte 102,15,58,15,208,8
@@ -1472,7 +1497,7 @@ sha512_block_data_order:
movdqa %xmm1,-16(%edx)
leal 128(%ebp),%ebp
decl %ecx
jnz .L00700_47_ssse3
jnz .L00600_47_ssse3
movdqa (%ebp),%xmm1
leal -640(%ebp),%ebp
movdqu (%ebx),%xmm0
@@ -2284,7 +2309,7 @@ sha512_block_data_order:
movq %mm6,48(%esi)
movq %mm7,56(%esi)
cmpl %eax,%edi
jb .L006loop_ssse3
jb .L005loop_ssse3
movl 76(%edx),%esp
emms
popl %edi
@@ -2292,8 +2317,9 @@ sha512_block_data_order:
popl %ebx
popl %ebp
ret
.size sha512_block_data_order_ssse3,.-.L_sha512_block_data_order_ssse3_begin
.align 64
.L001K512:
.LK512:
.long 3609767458,1116352408
.long 602891725,1899447441
.long 3964484399,3049323471
@@ -2376,7 +2402,6 @@ sha512_block_data_order:
.long 1246189591,1816402316
.long 67438087,66051
.long 202182159,134810123
.size sha512_block_data_order,.-.L_sha512_block_data_order_begin
.byte 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97
.byte 110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32
.byte 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
+51 -32
View File
@@ -13,11 +13,10 @@ section .text code align=64
%else
section .text code
%endif
;extern _OPENSSL_ia32cap_P
global _sha512_block_data_order
global _sha512_block_data_order_nohw
align 16
_sha512_block_data_order:
L$_sha512_block_data_order_begin:
_sha512_block_data_order_nohw:
L$_sha512_block_data_order_nohw_begin:
push ebp
push ebx
push esi
@@ -29,7 +28,7 @@ L$_sha512_block_data_order_begin:
call L$000pic_point
L$000pic_point:
pop ebp
lea ebp,[(L$001K512-L$000pic_point)+ebp]
lea ebp,[(L$K512-L$000pic_point)+ebp]
sub esp,16
and esp,-64
shl eax,7
@@ -38,26 +37,18 @@ L$000pic_point:
mov DWORD [4+esp],edi
mov DWORD [8+esp],eax
mov DWORD [12+esp],ebx
lea edx,[_OPENSSL_ia32cap_P]
mov ecx,DWORD [edx]
mov edx,DWORD [4+edx]
movq mm0,[esi]
and ecx,16777216
movq mm1,[8+esi]
and edx,512
movq mm2,[16+esi]
or ecx,edx
movq mm3,[24+esi]
movq mm4,[32+esi]
movq mm5,[40+esi]
movq mm6,[48+esi]
movq mm7,[56+esi]
cmp ecx,16777728
je NEAR L$002SSSE3
sub esp,80
jmp NEAR L$003loop_sse2
jmp NEAR L$001loop_sse2
align 16
L$003loop_sse2:
L$001loop_sse2:
movq [8+esp],mm1
movq [16+esp],mm2
movq [24+esp],mm3
@@ -72,9 +63,9 @@ L$003loop_sse2:
mov edx,15
bswap eax
bswap ebx
jmp NEAR L$00400_14_sse2
jmp NEAR L$00200_14_sse2
align 16
L$00400_14_sse2:
L$00200_14_sse2:
movd mm1,eax
mov eax,DWORD [edi]
movd mm7,ebx
@@ -135,7 +126,7 @@ L$00400_14_sse2:
paddq mm3,mm6
movq mm6,[48+esp]
dec edx
jnz NEAR L$00400_14_sse2
jnz NEAR L$00200_14_sse2
movd mm1,eax
movd mm7,ebx
punpckldq mm7,mm1
@@ -191,9 +182,9 @@ L$00400_14_sse2:
paddq mm3,mm6
pxor mm0,mm0
mov edx,32
jmp NEAR L$00516_79_sse2
jmp NEAR L$00316_79_sse2
align 16
L$00516_79_sse2:
L$00316_79_sse2:
movq mm5,[88+esp]
movq mm1,mm7
psrlq mm7,1
@@ -347,7 +338,7 @@ L$00516_79_sse2:
paddq mm0,mm6
add ebp,8
dec edx
jnz NEAR L$00516_79_sse2
jnz NEAR L$00316_79_sse2
paddq mm0,mm3
movq mm1,[8+esp]
movq mm3,[24+esp]
@@ -375,7 +366,7 @@ L$00516_79_sse2:
lea esp,[eax*1+esp]
sub ebp,eax
cmp edi,DWORD [88+esp]
jb NEAR L$003loop_sse2
jb NEAR L$001loop_sse2
mov esp,DWORD [92+esp]
emms
pop edi
@@ -383,8 +374,38 @@ L$00516_79_sse2:
pop ebx
pop ebp
ret
align 32
L$002SSSE3:
global _sha512_block_data_order_ssse3
align 16
_sha512_block_data_order_ssse3:
L$_sha512_block_data_order_ssse3_begin:
push ebp
push ebx
push esi
push edi
mov esi,DWORD [20+esp]
mov edi,DWORD [24+esp]
mov eax,DWORD [28+esp]
mov ebx,esp
call L$004pic_point
L$004pic_point:
pop ebp
lea ebp,[(L$K512-L$004pic_point)+ebp]
sub esp,16
and esp,-64
shl eax,7
add eax,edi
mov DWORD [esp],esi
mov DWORD [4+esp],edi
mov DWORD [8+esp],eax
mov DWORD [12+esp],ebx
movq mm0,[esi]
movq mm1,[8+esi]
movq mm2,[16+esi]
movq mm3,[24+esi]
movq mm4,[32+esi]
movq mm5,[40+esi]
movq mm6,[48+esi]
movq mm7,[56+esi]
lea edx,[esp-64]
sub esp,256
movdqa xmm1,[640+ebp]
@@ -441,7 +462,7 @@ db 102,15,56,0,248
movdqa [edx-16],xmm2
nop
align 32
L$006loop_ssse3:
L$005loop_ssse3:
movdqa xmm2,[16+edx]
movdqa [48+edx],xmm3
lea ebp,[128+ebp]
@@ -458,9 +479,9 @@ L$006loop_ssse3:
pxor mm2,mm1
movq [56+esp],mm7
pxor mm3,mm3
jmp NEAR L$00700_47_ssse3
jmp NEAR L$00600_47_ssse3
align 32
L$00700_47_ssse3:
L$00600_47_ssse3:
movdqa xmm3,xmm5
movdqa xmm1,xmm2
db 102,15,58,15,208,8
@@ -1479,7 +1500,7 @@ db 102,15,58,15,211,8
movdqa [edx-16],xmm1
lea ebp,[128+ebp]
dec ecx
jnz NEAR L$00700_47_ssse3
jnz NEAR L$00600_47_ssse3
movdqa xmm1,[ebp]
lea ebp,[ebp-640]
movdqu xmm0,[ebx]
@@ -2291,7 +2312,7 @@ db 102,15,56,0,248
movq [48+esi],mm6
movq [56+esi],mm7
cmp edi,eax
jb NEAR L$006loop_ssse3
jb NEAR L$005loop_ssse3
mov esp,DWORD [76+edx]
emms
pop edi
@@ -2300,7 +2321,7 @@ db 102,15,56,0,248
pop ebp
ret
align 64
L$001K512:
L$K512:
dd 3609767458,1116352408
dd 602891725,1899447441
dd 3964484399,3049323471
@@ -2388,8 +2409,6 @@ db 110,115,102,111,114,109,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
segment .bss
common _OPENSSL_ia32cap_P 16
%else
; Work around https://bugzilla.nasm.us/show_bug.cgi?id=3392738
ret