Loading crypto/perlasm/x86_64-xlate.pl +39 −0 Original line number Diff line number Diff line Loading @@ -772,6 +772,45 @@ my $rdrand = sub { } }; sub rxb { local *opcode=shift; my ($dst,$src1,$src2,$rxb)=@_; $rxb|=0x7<<5; $rxb&=~(0x04<<5) if($dst>=8); $rxb&=~(0x01<<5) if($src1>=8); $rxb&=~(0x02<<5) if($src2>=8); push @opcode,$rxb; } my $vprotd = sub { if (shift =~ /\$([x0-9a-f]+),\s*%xmm([0-9]+),\s*%xmm([0-9]+)/) { my @opcode=(0x8f); rxb(\@opcode,$3,$2,-1,0x08); push @opcode,0x78,0xc2; push @opcode,0xc0|($2&7)|(($3&7)<<3); # ModR/M my $c=$1; push @opcode,$c=~/^0/?oct($c):$c; @opcode; } else { (); } }; my $vprotq = sub { if (shift =~ /\$([x0-9a-f]+),\s*%xmm([0-9]+),\s*%xmm([0-9]+)/) { my @opcode=(0x8f); rxb(\@opcode,$3,$2,-1,0x08); push @opcode,0x78,0xc3; push @opcode,0xc0|($2&7)|(($3&7)<<3); # ModR/M my $c=$1; push @opcode,$c=~/^0/?oct($c):$c; @opcode; } else { (); } }; if ($nasm) { print <<___; default rel Loading crypto/sha/asm/sha512-x86_64.pl +5 −5 Original line number Diff line number Diff line Loading @@ -95,13 +95,13 @@ die "can't locate x86_64-xlate.pl"; $avx=1 if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1` =~ /GNU assembler version ([2-9]\.[0-9]+)/ && (($xop = $1>=2.21) || $1>=2.19)); $1>=2.19); $avx=1 if (!$avx && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) && `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)/ && ($xop = $1>=2.09)); $1>=2.09); $avx=1 if (!$avx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) && `ml64 2>&1` =~ /Version ([0-9]+)\./ && ($xop = $1>=10)); $1>=10); open STDOUT,"| \"$^X\" $xlate $flavour $output"; Loading Loading @@ -237,7 +237,7 @@ $code.=<<___ if ($SZ==4 || $avx); mov 0(%r11),%r10d mov 4(%r11),%r11d ___ $code.=<<___ if ($avx && $xop && $SZ==8); $code.=<<___ if ($avx && $SZ==8); test \$`1<<11`,%r11d # check for XOP jnz .Lxop_shortcut ___ Loading Loading @@ -824,7 +824,7 @@ if ($avx) {{ ###################################################################### # XOP code path # if ($xop && $SZ==8) { # SHA512 only if ($SZ==8) { # SHA512 only $code.=<<___; .type ${func}_xop,\@function,4 .align 64 Loading Loading
crypto/perlasm/x86_64-xlate.pl +39 −0 Original line number Diff line number Diff line Loading @@ -772,6 +772,45 @@ my $rdrand = sub { } }; sub rxb { local *opcode=shift; my ($dst,$src1,$src2,$rxb)=@_; $rxb|=0x7<<5; $rxb&=~(0x04<<5) if($dst>=8); $rxb&=~(0x01<<5) if($src1>=8); $rxb&=~(0x02<<5) if($src2>=8); push @opcode,$rxb; } my $vprotd = sub { if (shift =~ /\$([x0-9a-f]+),\s*%xmm([0-9]+),\s*%xmm([0-9]+)/) { my @opcode=(0x8f); rxb(\@opcode,$3,$2,-1,0x08); push @opcode,0x78,0xc2; push @opcode,0xc0|($2&7)|(($3&7)<<3); # ModR/M my $c=$1; push @opcode,$c=~/^0/?oct($c):$c; @opcode; } else { (); } }; my $vprotq = sub { if (shift =~ /\$([x0-9a-f]+),\s*%xmm([0-9]+),\s*%xmm([0-9]+)/) { my @opcode=(0x8f); rxb(\@opcode,$3,$2,-1,0x08); push @opcode,0x78,0xc3; push @opcode,0xc0|($2&7)|(($3&7)<<3); # ModR/M my $c=$1; push @opcode,$c=~/^0/?oct($c):$c; @opcode; } else { (); } }; if ($nasm) { print <<___; default rel Loading
crypto/sha/asm/sha512-x86_64.pl +5 −5 Original line number Diff line number Diff line Loading @@ -95,13 +95,13 @@ die "can't locate x86_64-xlate.pl"; $avx=1 if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1` =~ /GNU assembler version ([2-9]\.[0-9]+)/ && (($xop = $1>=2.21) || $1>=2.19)); $1>=2.19); $avx=1 if (!$avx && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) && `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)/ && ($xop = $1>=2.09)); $1>=2.09); $avx=1 if (!$avx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) && `ml64 2>&1` =~ /Version ([0-9]+)\./ && ($xop = $1>=10)); $1>=10); open STDOUT,"| \"$^X\" $xlate $flavour $output"; Loading Loading @@ -237,7 +237,7 @@ $code.=<<___ if ($SZ==4 || $avx); mov 0(%r11),%r10d mov 4(%r11),%r11d ___ $code.=<<___ if ($avx && $xop && $SZ==8); $code.=<<___ if ($avx && $SZ==8); test \$`1<<11`,%r11d # check for XOP jnz .Lxop_shortcut ___ Loading Loading @@ -824,7 +824,7 @@ if ($avx) {{ ###################################################################### # XOP code path # if ($xop && $SZ==8) { # SHA512 only if ($SZ==8) { # SHA512 only $code.=<<___; .type ${func}_xop,\@function,4 .align 64 Loading