sha/asm/*-x86_64.pl: add CFI annotations.
Reviewed-by: Rich Salz <rsalz@openssl.org>
This commit is contained in:
parent
ed874fac63
commit
399976c7ba
3 changed files with 183 additions and 1 deletions
|
@ -363,6 +363,7 @@ $code.=<<___;
|
|||
.type sha1_multi_block,\@function,3
|
||||
.align 32
|
||||
sha1_multi_block:
|
||||
.cfi_startproc
|
||||
mov OPENSSL_ia32cap_P+4(%rip),%rcx
|
||||
bt \$61,%rcx # check SHA bit
|
||||
jc _shaext_shortcut
|
||||
|
@ -373,8 +374,11 @@ $code.=<<___ if ($avx);
|
|||
___
|
||||
$code.=<<___;
|
||||
mov %rsp,%rax
|
||||
.cfi_def_cfa_register %rax
|
||||
push %rbx
|
||||
.cfi_push %rbx
|
||||
push %rbp
|
||||
.cfi_push %rbx
|
||||
___
|
||||
$code.=<<___ if ($win64);
|
||||
lea -0xa8(%rsp),%rsp
|
||||
|
@ -393,6 +397,7 @@ $code.=<<___;
|
|||
sub \$`$REG_SZ*18`,%rsp
|
||||
and \$-256,%rsp
|
||||
mov %rax,`$REG_SZ*17`(%rsp) # original %rsp
|
||||
.cfi_cfa_expression %rsp+`$REG_SZ*17`,deref,+8
|
||||
.Lbody:
|
||||
lea K_XX_XX(%rip),$Tbl
|
||||
lea `$REG_SZ*16`(%rsp),%rbx
|
||||
|
@ -487,6 +492,7 @@ $code.=<<___;
|
|||
|
||||
.Ldone:
|
||||
mov `$REG_SZ*17`(%rsp),%rax # original %rsp
|
||||
.cfi_def_cfa %rax,8
|
||||
___
|
||||
$code.=<<___ if ($win64);
|
||||
movaps -0xb8(%rax),%xmm6
|
||||
|
@ -502,10 +508,14 @@ $code.=<<___ if ($win64);
|
|||
___
|
||||
$code.=<<___;
|
||||
mov -16(%rax),%rbp
|
||||
.cfi_restore %rbp
|
||||
mov -8(%rax),%rbx
|
||||
.cfi_restore %rbx
|
||||
lea (%rax),%rsp
|
||||
.cfi_def_cfa_register %rsp
|
||||
.Lepilogue:
|
||||
ret
|
||||
.cfi_endproc
|
||||
.size sha1_multi_block,.-sha1_multi_block
|
||||
___
|
||||
{{{
|
||||
|
@ -517,10 +527,14 @@ $code.=<<___;
|
|||
.type sha1_multi_block_shaext,\@function,3
|
||||
.align 32
|
||||
sha1_multi_block_shaext:
|
||||
.cfi_startproc
|
||||
_shaext_shortcut:
|
||||
mov %rsp,%rax
|
||||
.cfi_def_cfa_register %rax
|
||||
push %rbx
|
||||
.cfi_push %rbx
|
||||
push %rbp
|
||||
.cfi_push %rbp
|
||||
___
|
||||
$code.=<<___ if ($win64);
|
||||
lea -0xa8(%rsp),%rsp
|
||||
|
@ -756,10 +770,14 @@ $code.=<<___ if ($win64);
|
|||
___
|
||||
$code.=<<___;
|
||||
mov -16(%rax),%rbp
|
||||
.cfi_restore %rbp
|
||||
mov -8(%rax),%rbx
|
||||
.cfi_restore %rbx
|
||||
lea (%rax),%rsp
|
||||
.cfi_def_cfa_register %rsp
|
||||
.Lepilogue_shaext:
|
||||
ret
|
||||
.cfi_endproc
|
||||
.size sha1_multi_block_shaext,.-sha1_multi_block_shaext
|
||||
___
|
||||
}}}
|
||||
|
@ -1002,6 +1020,7 @@ $code.=<<___;
|
|||
.type sha1_multi_block_avx,\@function,3
|
||||
.align 32
|
||||
sha1_multi_block_avx:
|
||||
.cfi_startproc
|
||||
_avx_shortcut:
|
||||
___
|
||||
$code.=<<___ if ($avx>1);
|
||||
|
@ -1016,8 +1035,11 @@ $code.=<<___ if ($avx>1);
|
|||
___
|
||||
$code.=<<___;
|
||||
mov %rsp,%rax
|
||||
.cfi_def_cfa_register %rax
|
||||
push %rbx
|
||||
.cfi_push %rbx
|
||||
push %rbp
|
||||
.cfi_push %rbp
|
||||
___
|
||||
$code.=<<___ if ($win64);
|
||||
lea -0xa8(%rsp),%rsp
|
||||
|
@ -1036,6 +1058,7 @@ $code.=<<___;
|
|||
sub \$`$REG_SZ*18`, %rsp
|
||||
and \$-256,%rsp
|
||||
mov %rax,`$REG_SZ*17`(%rsp) # original %rsp
|
||||
.cfi_cfa_expression %rsp+`$REG_SZ*17`,deref,+8
|
||||
.Lbody_avx:
|
||||
lea K_XX_XX(%rip),$Tbl
|
||||
lea `$REG_SZ*16`(%rsp),%rbx
|
||||
|
@ -1125,6 +1148,7 @@ $code.=<<___;
|
|||
|
||||
.Ldone_avx:
|
||||
mov `$REG_SZ*17`(%rsp),%rax # original %rsp
|
||||
.cfi_def_cfa %rax,8
|
||||
vzeroupper
|
||||
___
|
||||
$code.=<<___ if ($win64);
|
||||
|
@ -1141,10 +1165,14 @@ $code.=<<___ if ($win64);
|
|||
___
|
||||
$code.=<<___;
|
||||
mov -16(%rax),%rbp
|
||||
.cfi_restore %rbp
|
||||
mov -8(%rax),%rbx
|
||||
.cfi_restore %rbx
|
||||
lea (%rax),%rsp
|
||||
.cfi_def_cfa_register %rsp
|
||||
.Lepilogue_avx:
|
||||
ret
|
||||
.cfi_endproc
|
||||
.size sha1_multi_block_avx,.-sha1_multi_block_avx
|
||||
___
|
||||
|
||||
|
@ -1164,14 +1192,22 @@ $code.=<<___;
|
|||
.type sha1_multi_block_avx2,\@function,3
|
||||
.align 32
|
||||
sha1_multi_block_avx2:
|
||||
.cfi_startproc
|
||||
_avx2_shortcut:
|
||||
mov %rsp,%rax
|
||||
.cfi_def_cfa_register %rax
|
||||
push %rbx
|
||||
.cfi_push %rbx
|
||||
push %rbp
|
||||
.cfi_push %rbp
|
||||
push %r12
|
||||
.cfi_push %r12
|
||||
push %r13
|
||||
.cfi_push %r13
|
||||
push %r14
|
||||
.cfi_push %r14
|
||||
push %r15
|
||||
.cfi_push %r15
|
||||
___
|
||||
$code.=<<___ if ($win64);
|
||||
lea -0xa8(%rsp),%rsp
|
||||
|
@ -1190,6 +1226,7 @@ $code.=<<___;
|
|||
sub \$`$REG_SZ*18`, %rsp
|
||||
and \$-256,%rsp
|
||||
mov %rax,`$REG_SZ*17`(%rsp) # original %rsp
|
||||
.cfi_cfa_expression %rsp+`$REG_SZ*17`,deref,+8
|
||||
.Lbody_avx2:
|
||||
lea K_XX_XX(%rip),$Tbl
|
||||
shr \$1,$num
|
||||
|
@ -1280,6 +1317,7 @@ $code.=<<___;
|
|||
|
||||
.Ldone_avx2:
|
||||
mov `$REG_SZ*17`(%rsp),%rax # original %rsp
|
||||
.cfi_def_cfa %rax,8
|
||||
vzeroupper
|
||||
___
|
||||
$code.=<<___ if ($win64);
|
||||
|
@ -1296,14 +1334,22 @@ $code.=<<___ if ($win64);
|
|||
___
|
||||
$code.=<<___;
|
||||
mov -48(%rax),%r15
|
||||
.cfi_restore %r15
|
||||
mov -40(%rax),%r14
|
||||
.cfi_restore %r14
|
||||
mov -32(%rax),%r13
|
||||
.cfi_restore %r13
|
||||
mov -24(%rax),%r12
|
||||
.cfi_restore %r12
|
||||
mov -16(%rax),%rbp
|
||||
.cfi_restore %rbp
|
||||
mov -8(%rax),%rbx
|
||||
.cfi_restore %rbx
|
||||
lea (%rax),%rsp
|
||||
.cfi_def_cfa_register %rsp
|
||||
.Lepilogue_avx2:
|
||||
ret
|
||||
.cfi_endproc
|
||||
.size sha1_multi_block_avx2,.-sha1_multi_block_avx2
|
||||
___
|
||||
} }}}
|
||||
|
|
|
@ -244,6 +244,7 @@ $code.=<<___;
|
|||
.type sha256_multi_block,\@function,3
|
||||
.align 32
|
||||
sha256_multi_block:
|
||||
.cfi_startproc
|
||||
mov OPENSSL_ia32cap_P+4(%rip),%rcx
|
||||
bt \$61,%rcx # check SHA bit
|
||||
jc _shaext_shortcut
|
||||
|
@ -254,8 +255,11 @@ $code.=<<___ if ($avx);
|
|||
___
|
||||
$code.=<<___;
|
||||
mov %rsp,%rax
|
||||
.cfi_def_cfa_register %rax
|
||||
push %rbx
|
||||
.cfi_push %rbx
|
||||
push %rbp
|
||||
.cfi_push %rbp
|
||||
___
|
||||
$code.=<<___ if ($win64);
|
||||
lea -0xa8(%rsp),%rsp
|
||||
|
@ -274,6 +278,7 @@ $code.=<<___;
|
|||
sub \$`$REG_SZ*18`, %rsp
|
||||
and \$-256,%rsp
|
||||
mov %rax,`$REG_SZ*17`(%rsp) # original %rsp
|
||||
.cfi_cfa_expression %rsp+`$REG_SZ*17`,deref,+8
|
||||
.Lbody:
|
||||
lea K256+128(%rip),$Tbl
|
||||
lea `$REG_SZ*16`(%rsp),%rbx
|
||||
|
@ -391,6 +396,7 @@ $code.=<<___;
|
|||
|
||||
.Ldone:
|
||||
mov `$REG_SZ*17`(%rsp),%rax # original %rsp
|
||||
.cfi_def_cfa %rax,8
|
||||
___
|
||||
$code.=<<___ if ($win64);
|
||||
movaps -0xb8(%rax),%xmm6
|
||||
|
@ -406,10 +412,14 @@ $code.=<<___ if ($win64);
|
|||
___
|
||||
$code.=<<___;
|
||||
mov -16(%rax),%rbp
|
||||
.cfi_restore %rbp
|
||||
mov -8(%rax),%rbx
|
||||
.cfi_restore %rbx
|
||||
lea (%rax),%rsp
|
||||
.cfi_def_cfa_register %rsp
|
||||
.Lepilogue:
|
||||
ret
|
||||
.cfi_endproc
|
||||
.size sha256_multi_block,.-sha256_multi_block
|
||||
___
|
||||
{{{
|
||||
|
@ -421,10 +431,14 @@ $code.=<<___;
|
|||
.type sha256_multi_block_shaext,\@function,3
|
||||
.align 32
|
||||
sha256_multi_block_shaext:
|
||||
.cfi_startproc
|
||||
_shaext_shortcut:
|
||||
mov %rsp,%rax
|
||||
.cfi_def_cfa_register %rax
|
||||
push %rbx
|
||||
.cfi_push %rbx
|
||||
push %rbp
|
||||
.cfi_push %rbp
|
||||
___
|
||||
$code.=<<___ if ($win64);
|
||||
lea -0xa8(%rsp),%rsp
|
||||
|
@ -758,10 +772,14 @@ $code.=<<___ if ($win64);
|
|||
___
|
||||
$code.=<<___;
|
||||
mov -16(%rax),%rbp
|
||||
.cfi_restore %rbp
|
||||
mov -8(%rax),%rbx
|
||||
.cfi_restore %rbx
|
||||
lea (%rax),%rsp
|
||||
.cfi_def_cfa_register %rsp
|
||||
.Lepilogue_shaext:
|
||||
ret
|
||||
.cfi_endproc
|
||||
.size sha256_multi_block_shaext,.-sha256_multi_block_shaext
|
||||
___
|
||||
}}}
|
||||
|
@ -921,6 +939,7 @@ $code.=<<___;
|
|||
.type sha256_multi_block_avx,\@function,3
|
||||
.align 32
|
||||
sha256_multi_block_avx:
|
||||
.cfi_startproc
|
||||
_avx_shortcut:
|
||||
___
|
||||
$code.=<<___ if ($avx>1);
|
||||
|
@ -935,8 +954,11 @@ $code.=<<___ if ($avx>1);
|
|||
___
|
||||
$code.=<<___;
|
||||
mov %rsp,%rax
|
||||
.cfi_def_cfa_register %rax
|
||||
push %rbx
|
||||
.cfi_push %rbx
|
||||
push %rbp
|
||||
.cfi_push %rbp
|
||||
___
|
||||
$code.=<<___ if ($win64);
|
||||
lea -0xa8(%rsp),%rsp
|
||||
|
@ -955,6 +977,7 @@ $code.=<<___;
|
|||
sub \$`$REG_SZ*18`, %rsp
|
||||
and \$-256,%rsp
|
||||
mov %rax,`$REG_SZ*17`(%rsp) # original %rsp
|
||||
.cfi_cfa_expression %rsp+`$REG_SZ*17`,deref,+8
|
||||
.Lbody_avx:
|
||||
lea K256+128(%rip),$Tbl
|
||||
lea `$REG_SZ*16`(%rsp),%rbx
|
||||
|
@ -1070,6 +1093,7 @@ $code.=<<___;
|
|||
|
||||
.Ldone_avx:
|
||||
mov `$REG_SZ*17`(%rsp),%rax # original %rsp
|
||||
.cfi_def_cfa %rax,8
|
||||
vzeroupper
|
||||
___
|
||||
$code.=<<___ if ($win64);
|
||||
|
@ -1086,10 +1110,14 @@ $code.=<<___ if ($win64);
|
|||
___
|
||||
$code.=<<___;
|
||||
mov -16(%rax),%rbp
|
||||
.cfi_restore %rbp
|
||||
mov -8(%rax),%rbx
|
||||
.cfi_restore %rbx
|
||||
lea (%rax),%rsp
|
||||
.cfi_def_cfa_register %rsp
|
||||
.Lepilogue_avx:
|
||||
ret
|
||||
.cfi_endproc
|
||||
.size sha256_multi_block_avx,.-sha256_multi_block_avx
|
||||
___
|
||||
if ($avx>1) {
|
||||
|
@ -1105,14 +1133,22 @@ $code.=<<___;
|
|||
.type sha256_multi_block_avx2,\@function,3
|
||||
.align 32
|
||||
sha256_multi_block_avx2:
|
||||
.cfi_startproc
|
||||
_avx2_shortcut:
|
||||
mov %rsp,%rax
|
||||
.cfi_def_cfa_register %rax
|
||||
push %rbx
|
||||
.cfi_push %rbx
|
||||
push %rbp
|
||||
.cfi_push %rbp
|
||||
push %r12
|
||||
.cfi_push %r12
|
||||
push %r13
|
||||
.cfi_push %r13
|
||||
push %r14
|
||||
.cfi_push %r14
|
||||
push %r15
|
||||
.cfi_push %r15
|
||||
___
|
||||
$code.=<<___ if ($win64);
|
||||
lea -0xa8(%rsp),%rsp
|
||||
|
@ -1131,6 +1167,7 @@ $code.=<<___;
|
|||
sub \$`$REG_SZ*18`, %rsp
|
||||
and \$-256,%rsp
|
||||
mov %rax,`$REG_SZ*17`(%rsp) # original %rsp
|
||||
.cfi_cfa_expression %rsp+`$REG_SZ*17`,deref,+8
|
||||
.Lbody_avx2:
|
||||
lea K256+128(%rip),$Tbl
|
||||
lea 0x80($ctx),$ctx # size optimization
|
||||
|
@ -1246,6 +1283,7 @@ $code.=<<___;
|
|||
|
||||
.Ldone_avx2:
|
||||
mov `$REG_SZ*17`(%rsp),%rax # original %rsp
|
||||
.cfi_def_cfa %rax,8
|
||||
vzeroupper
|
||||
___
|
||||
$code.=<<___ if ($win64);
|
||||
|
@ -1262,14 +1300,22 @@ $code.=<<___ if ($win64);
|
|||
___
|
||||
$code.=<<___;
|
||||
mov -48(%rax),%r15
|
||||
.cfi_restore %r15
|
||||
mov -40(%rax),%r14
|
||||
.cfi_restore %r14
|
||||
mov -32(%rax),%r13
|
||||
.cfi_restore %r13
|
||||
mov -24(%rax),%r12
|
||||
.cfi_restore %r12
|
||||
mov -16(%rax),%rbp
|
||||
.cfi_restore %rbp
|
||||
mov -8(%rax),%rbx
|
||||
.cfi_restore %rbx
|
||||
lea (%rax),%rsp
|
||||
.cfi_def_cfa_register %rsp
|
||||
.Lepilogue_avx2:
|
||||
ret
|
||||
.cfi_endproc
|
||||
.size sha256_multi_block_avx2,.-sha256_multi_block_avx2
|
||||
___
|
||||
} }}}
|
||||
|
|
|
@ -176,7 +176,7 @@ $Tbl="%rbp";
|
|||
$_ctx="16*$SZ+0*8(%rsp)";
|
||||
$_inp="16*$SZ+1*8(%rsp)";
|
||||
$_end="16*$SZ+2*8(%rsp)";
|
||||
$_rsp="16*$SZ+3*8(%rsp)";
|
||||
$_rsp="`16*$SZ+3*8`(%rsp)";
|
||||
$framesz="16*$SZ+4*8";
|
||||
|
||||
|
||||
|
@ -269,6 +269,7 @@ $code=<<___;
|
|||
.type $func,\@function,3
|
||||
.align 16
|
||||
$func:
|
||||
.cfi_startproc
|
||||
___
|
||||
$code.=<<___ if ($SZ==4 || $avx);
|
||||
lea OPENSSL_ia32cap_P(%rip),%r11
|
||||
|
@ -302,12 +303,19 @@ $code.=<<___ if ($SZ==4);
|
|||
___
|
||||
$code.=<<___;
|
||||
mov %rsp,%rax # copy %rsp
|
||||
.cfi_def_cfa_register %rax
|
||||
push %rbx
|
||||
.cfi_push %rbx
|
||||
push %rbp
|
||||
.cfi_push %rbp
|
||||
push %r12
|
||||
.cfi_push %r12
|
||||
push %r13
|
||||
.cfi_push %r13
|
||||
push %r14
|
||||
.cfi_push %r14
|
||||
push %r15
|
||||
.cfi_push %r15
|
||||
shl \$4,%rdx # num*16
|
||||
sub \$$framesz,%rsp
|
||||
lea ($inp,%rdx,$SZ),%rdx # inp+num*16*$SZ
|
||||
|
@ -316,6 +324,7 @@ $code.=<<___;
|
|||
mov $inp,$_inp # save inp, 2nd arh
|
||||
mov %rdx,$_end # save end pointer, "3rd" arg
|
||||
mov %rax,$_rsp # save copy of %rsp
|
||||
.cfi_cfa_expression $_rsp,deref,+8
|
||||
.Lprologue:
|
||||
|
||||
mov $SZ*0($ctx),$A
|
||||
|
@ -382,15 +391,24 @@ $code.=<<___;
|
|||
jb .Lloop
|
||||
|
||||
mov $_rsp,%rsi
|
||||
.cfi_def_cfa %rsi,8
|
||||
mov -48(%rsi),%r15
|
||||
.cfi_restore %r15
|
||||
mov -40(%rsi),%r14
|
||||
.cfi_restore %r14
|
||||
mov -32(%rsi),%r13
|
||||
.cfi_restore %r13
|
||||
mov -24(%rsi),%r12
|
||||
.cfi_restore %r12
|
||||
mov -16(%rsi),%rbp
|
||||
.cfi_restore %rbp
|
||||
mov -8(%rsi),%rbx
|
||||
.cfi_restore %rbx
|
||||
lea (%rsi),%rsp
|
||||
.cfi_def_cfa_register %rsp
|
||||
.Lepilogue:
|
||||
ret
|
||||
.cfi_endproc
|
||||
.size $func,.-$func
|
||||
___
|
||||
|
||||
|
@ -760,14 +778,22 @@ $code.=<<___;
|
|||
.type ${func}_ssse3,\@function,3
|
||||
.align 64
|
||||
${func}_ssse3:
|
||||
.cfi_startproc
|
||||
.Lssse3_shortcut:
|
||||
mov %rsp,%rax # copy %rsp
|
||||
.cfi_def_cfa_register %rax
|
||||
push %rbx
|
||||
.cfi_push %rbx
|
||||
push %rbp
|
||||
.cfi_push %rbp
|
||||
push %r12
|
||||
.cfi_push %r12
|
||||
push %r13
|
||||
.cfi_push %r13
|
||||
push %r14
|
||||
.cfi_push %r14
|
||||
push %r15
|
||||
.cfi_push %r15
|
||||
shl \$4,%rdx # num*16
|
||||
sub \$`$framesz+$win64*16*4`,%rsp
|
||||
lea ($inp,%rdx,$SZ),%rdx # inp+num*16*$SZ
|
||||
|
@ -776,6 +802,7 @@ ${func}_ssse3:
|
|||
mov $inp,$_inp # save inp, 2nd arh
|
||||
mov %rdx,$_end # save end pointer, "3rd" arg
|
||||
mov %rax,$_rsp # save copy of %rsp
|
||||
.cfi_cfa_expression $_rsp,deref,+8
|
||||
___
|
||||
$code.=<<___ if ($win64);
|
||||
movaps %xmm6,16*$SZ+32(%rsp)
|
||||
|
@ -1074,6 +1101,7 @@ $code.=<<___;
|
|||
jb .Lloop_ssse3
|
||||
|
||||
mov $_rsp,%rsi
|
||||
.cfi_def_cfa %rsi,8
|
||||
___
|
||||
$code.=<<___ if ($win64);
|
||||
movaps 16*$SZ+32(%rsp),%xmm6
|
||||
|
@ -1083,14 +1111,22 @@ $code.=<<___ if ($win64);
|
|||
___
|
||||
$code.=<<___;
|
||||
mov -48(%rsi),%r15
|
||||
.cfi_restore %r15
|
||||
mov -40(%rsi),%r14
|
||||
.cfi_restore %r14
|
||||
mov -32(%rsi),%r13
|
||||
.cfi_restore %r13
|
||||
mov -24(%rsi),%r12
|
||||
.cfi_restore %r12
|
||||
mov -16(%rsi),%rbp
|
||||
.cfi_restore %rbp
|
||||
mov -8(%rsi),%rbx
|
||||
.cfi_restore %rbx
|
||||
lea (%rsi),%rsp
|
||||
.cfi_def_cfa_register %rsp
|
||||
.Lepilogue_ssse3:
|
||||
ret
|
||||
.cfi_endproc
|
||||
.size ${func}_ssse3,.-${func}_ssse3
|
||||
___
|
||||
}
|
||||
|
@ -1104,14 +1140,22 @@ $code.=<<___;
|
|||
.type ${func}_xop,\@function,3
|
||||
.align 64
|
||||
${func}_xop:
|
||||
.cfi_startproc
|
||||
.Lxop_shortcut:
|
||||
mov %rsp,%rax # copy %rsp
|
||||
.cfi_def_cfa_register %rax
|
||||
push %rbx
|
||||
.cfi_push %rbx
|
||||
push %rbp
|
||||
.cfi_push %rbp
|
||||
push %r12
|
||||
.cfi_push %r12
|
||||
push %r13
|
||||
.cfi_push %r13
|
||||
push %r14
|
||||
.cfi_push %r14
|
||||
push %r15
|
||||
.cfi_push %r15
|
||||
shl \$4,%rdx # num*16
|
||||
sub \$`$framesz+$win64*16*($SZ==4?4:6)`,%rsp
|
||||
lea ($inp,%rdx,$SZ),%rdx # inp+num*16*$SZ
|
||||
|
@ -1120,6 +1164,7 @@ ${func}_xop:
|
|||
mov $inp,$_inp # save inp, 2nd arh
|
||||
mov %rdx,$_end # save end pointer, "3rd" arg
|
||||
mov %rax,$_rsp # save copy of %rsp
|
||||
.cfi_cfa_expression $_rsp,deref,+8
|
||||
___
|
||||
$code.=<<___ if ($win64);
|
||||
movaps %xmm6,16*$SZ+32(%rsp)
|
||||
|
@ -1446,6 +1491,7 @@ $code.=<<___;
|
|||
jb .Lloop_xop
|
||||
|
||||
mov $_rsp,%rsi
|
||||
.cfi_def_cfa %rsi,8
|
||||
vzeroupper
|
||||
___
|
||||
$code.=<<___ if ($win64);
|
||||
|
@ -1460,14 +1506,22 @@ $code.=<<___ if ($win64 && $SZ>4);
|
|||
___
|
||||
$code.=<<___;
|
||||
mov -48(%rsi),%r15
|
||||
.cfi_restore %r15
|
||||
mov -40(%rsi),%r14
|
||||
.cfi_restore %r14
|
||||
mov -32(%rsi),%r13
|
||||
.cfi_restore %r13
|
||||
mov -24(%rsi),%r12
|
||||
.cfi_restore %r12
|
||||
mov -16(%rsi),%rbp
|
||||
.cfi_restore %rbp
|
||||
mov -8(%rsi),%rbx
|
||||
.cfi_restore %rbx
|
||||
lea (%rsi),%rsp
|
||||
.cfi_def_cfa_register %rsp
|
||||
.Lepilogue_xop:
|
||||
ret
|
||||
.cfi_endproc
|
||||
.size ${func}_xop,.-${func}_xop
|
||||
___
|
||||
}
|
||||
|
@ -1480,14 +1534,22 @@ $code.=<<___;
|
|||
.type ${func}_avx,\@function,3
|
||||
.align 64
|
||||
${func}_avx:
|
||||
.cfi_startproc
|
||||
.Lavx_shortcut:
|
||||
mov %rsp,%rax # copy %rsp
|
||||
.cfi_def_cfa_register %rax
|
||||
push %rbx
|
||||
.cfi_push %rbx
|
||||
push %rbp
|
||||
.cfi_push %rbp
|
||||
push %r12
|
||||
.cfi_push %r12
|
||||
push %r13
|
||||
.cfi_push %r13
|
||||
push %r14
|
||||
.cfi_push %r14
|
||||
push %r15
|
||||
.cfi_push %r15
|
||||
shl \$4,%rdx # num*16
|
||||
sub \$`$framesz+$win64*16*($SZ==4?4:6)`,%rsp
|
||||
lea ($inp,%rdx,$SZ),%rdx # inp+num*16*$SZ
|
||||
|
@ -1496,6 +1558,7 @@ ${func}_avx:
|
|||
mov $inp,$_inp # save inp, 2nd arh
|
||||
mov %rdx,$_end # save end pointer, "3rd" arg
|
||||
mov %rax,$_rsp # save copy of %rsp
|
||||
.cfi_cfa_expression $_rsp,deref,+8
|
||||
___
|
||||
$code.=<<___ if ($win64);
|
||||
movaps %xmm6,16*$SZ+32(%rsp)
|
||||
|
@ -1754,6 +1817,7 @@ $code.=<<___;
|
|||
jb .Lloop_avx
|
||||
|
||||
mov $_rsp,%rsi
|
||||
.cfi_def_cfa %rsi,8
|
||||
vzeroupper
|
||||
___
|
||||
$code.=<<___ if ($win64);
|
||||
|
@ -1768,14 +1832,22 @@ $code.=<<___ if ($win64 && $SZ>4);
|
|||
___
|
||||
$code.=<<___;
|
||||
mov -48(%rsi),%r15
|
||||
.cfi_restore %r15
|
||||
mov -40(%rsi),%r14
|
||||
.cfi_restore %r14
|
||||
mov -32(%rsi),%r13
|
||||
.cfi_restore %r13
|
||||
mov -24(%rsi),%r12
|
||||
.cfi_restore %r12
|
||||
mov -16(%rsi),%rbp
|
||||
.cfi_restore %rbp
|
||||
mov -8(%rsi),%rbx
|
||||
.cfi_restore %rbx
|
||||
lea (%rsi),%rsp
|
||||
.cfi_def_cfa_register %rsp
|
||||
.Lepilogue_avx:
|
||||
ret
|
||||
.cfi_endproc
|
||||
.size ${func}_avx,.-${func}_avx
|
||||
___
|
||||
|
||||
|
@ -1831,14 +1903,22 @@ $code.=<<___;
|
|||
.type ${func}_avx2,\@function,3
|
||||
.align 64
|
||||
${func}_avx2:
|
||||
.cfi_startproc
|
||||
.Lavx2_shortcut:
|
||||
mov %rsp,%rax # copy %rsp
|
||||
.cfi_def_cfa_register %rax
|
||||
push %rbx
|
||||
.cfi_push %rbx
|
||||
push %rbp
|
||||
.cfi_push %rbp
|
||||
push %r12
|
||||
.cfi_push %r12
|
||||
push %r13
|
||||
.cfi_push %r13
|
||||
push %r14
|
||||
.cfi_push %r14
|
||||
push %r15
|
||||
.cfi_push %r15
|
||||
sub \$`2*$SZ*$rounds+4*8+$win64*16*($SZ==4?4:6)`,%rsp
|
||||
shl \$4,%rdx # num*16
|
||||
and \$-256*$SZ,%rsp # align stack frame
|
||||
|
@ -1848,6 +1928,7 @@ ${func}_avx2:
|
|||
mov $inp,$_inp # save inp, 2nd arh
|
||||
mov %rdx,$_end # save end pointer, "3rd" arg
|
||||
mov %rax,$_rsp # save copy of %rsp
|
||||
.cfi_cfa_expression $_rsp,deref,+8
|
||||
___
|
||||
$code.=<<___ if ($win64);
|
||||
movaps %xmm6,16*$SZ+32(%rsp)
|
||||
|
@ -2128,6 +2209,7 @@ $code.=<<___;
|
|||
.Ldone_avx2:
|
||||
lea ($Tbl),%rsp
|
||||
mov $_rsp,%rsi
|
||||
.cfi_def_cfa %rsi,8
|
||||
vzeroupper
|
||||
___
|
||||
$code.=<<___ if ($win64);
|
||||
|
@ -2142,14 +2224,22 @@ $code.=<<___ if ($win64 && $SZ>4);
|
|||
___
|
||||
$code.=<<___;
|
||||
mov -48(%rsi),%r15
|
||||
.cfi_restore %r15
|
||||
mov -40(%rsi),%r14
|
||||
.cfi_restore %r14
|
||||
mov -32(%rsi),%r13
|
||||
.cfi_restore %r13
|
||||
mov -24(%rsi),%r12
|
||||
.cfi_restore %r12
|
||||
mov -16(%rsi),%rbp
|
||||
.cfi_restore %rbp
|
||||
mov -8(%rsi),%rbx
|
||||
.cfi_restore %rbx
|
||||
lea (%rsi),%rsp
|
||||
.cfi_def_cfa_register %rsp
|
||||
.Lepilogue_avx2:
|
||||
ret
|
||||
.cfi_endproc
|
||||
.size ${func}_avx2,.-${func}_avx2
|
||||
___
|
||||
}}
|
||||
|
|
Loading…
Reference in a new issue