x86_64 assembly pack: make Windows build more robust [from master].
PR: 2963 and a number of others
This commit is contained in:
parent
2a2df2e9f2
commit
b286a96811
@ -36,7 +36,8 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
|
|||||||
( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
|
( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
|
||||||
die "can't locate x86_64-xlate.pl";
|
die "can't locate x86_64-xlate.pl";
|
||||||
|
|
||||||
open STDOUT,"| \"$^X\" $xlate $flavour $output";
|
open OUT,"| \"$^X\" $xlate $flavour $output";
|
||||||
|
*STDOUT=*OUT;
|
||||||
|
|
||||||
$verticalspin=1; # unlike 32-bit version $verticalspin performs
|
$verticalspin=1; # unlike 32-bit version $verticalspin performs
|
||||||
# ~15% better on both AMD and Intel cores
|
# ~15% better on both AMD and Intel cores
|
||||||
|
@ -69,7 +69,8 @@ $avx=1 if (!$avx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) &&
|
|||||||
`ml64 2>&1` =~ /Version ([0-9]+)\./ &&
|
`ml64 2>&1` =~ /Version ([0-9]+)\./ &&
|
||||||
$1>=10);
|
$1>=10);
|
||||||
|
|
||||||
open STDOUT,"| \"$^X\" $xlate $flavour $output";
|
open OUT,"| \"$^X\" $xlate $flavour $output";
|
||||||
|
*STDOUT=*OUT;
|
||||||
|
|
||||||
# void aesni_cbc_sha1_enc(const void *inp,
|
# void aesni_cbc_sha1_enc(const void *inp,
|
||||||
# void *out,
|
# void *out,
|
||||||
|
@ -172,7 +172,8 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
|
|||||||
( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
|
( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
|
||||||
die "can't locate x86_64-xlate.pl";
|
die "can't locate x86_64-xlate.pl";
|
||||||
|
|
||||||
open STDOUT,"| \"$^X\" $xlate $flavour $output";
|
open OUT,"| \"$^X\" $xlate $flavour $output";
|
||||||
|
*STDOUT=*OUT;
|
||||||
|
|
||||||
$movkey = $PREFIX eq "aesni" ? "movups" : "movups";
|
$movkey = $PREFIX eq "aesni" ? "movups" : "movups";
|
||||||
@_4args=$win64? ("%rcx","%rdx","%r8", "%r9") : # Win64 order
|
@_4args=$win64? ("%rcx","%rdx","%r8", "%r9") : # Win64 order
|
||||||
|
@ -105,7 +105,8 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
|
|||||||
( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
|
( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
|
||||||
die "can't locate x86_64-xlate.pl";
|
die "can't locate x86_64-xlate.pl";
|
||||||
|
|
||||||
open STDOUT,"| \"$^X\" $xlate $flavour $output";
|
open OUT,"| \"$^X\" $xlate $flavour $output";
|
||||||
|
*STDOUT=*OUT;
|
||||||
|
|
||||||
my ($inp,$out,$len,$key,$ivp)=("%rdi","%rsi","%rdx","%rcx");
|
my ($inp,$out,$len,$key,$ivp)=("%rdi","%rsi","%rdx","%rcx");
|
||||||
my @XMM=map("%xmm$_",(15,0..14)); # best on Atom, +10% over (0..15)
|
my @XMM=map("%xmm$_",(15,0..14)); # best on Atom, +10% over (0..15)
|
||||||
|
@ -56,7 +56,8 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
|
|||||||
( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
|
( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
|
||||||
die "can't locate x86_64-xlate.pl";
|
die "can't locate x86_64-xlate.pl";
|
||||||
|
|
||||||
open STDOUT,"| \"$^X\" $xlate $flavour $output";
|
open OUT,"| \"$^X\" $xlate $flavour $output";
|
||||||
|
*STDOUT=*OUT;
|
||||||
|
|
||||||
$PREFIX="vpaes";
|
$PREFIX="vpaes";
|
||||||
|
|
||||||
|
@ -68,7 +68,8 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
|
|||||||
( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
|
( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
|
||||||
die "can't locate x86_64-xlate.pl";
|
die "can't locate x86_64-xlate.pl";
|
||||||
|
|
||||||
open STDOUT,"| \"$^X\" $xlate $flavour $output";
|
open OUT,"| \"$^X\" $xlate $flavour $output";
|
||||||
|
*STDOUT=*OUT;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
my $code=".text\n\n";
|
my $code=".text\n\n";
|
||||||
|
@ -40,7 +40,8 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
|
|||||||
( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
|
( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
|
||||||
die "can't locate x86_64-xlate.pl";
|
die "can't locate x86_64-xlate.pl";
|
||||||
|
|
||||||
open STDOUT,"| \"$^X\" $xlate $flavour $output";
|
open OUT,"| \"$^X\" $xlate $flavour $output";
|
||||||
|
*STDOUT=*OUT;
|
||||||
|
|
||||||
sub hi() { my $r=shift; $r =~ s/%[er]([a-d])x/%\1h/; $r; }
|
sub hi() { my $r=shift; $r =~ s/%[er]([a-d])x/%\1h/; $r; }
|
||||||
sub lo() { my $r=shift; $r =~ s/%[er]([a-d])x/%\1l/;
|
sub lo() { my $r=shift; $r =~ s/%[er]([a-d])x/%\1l/;
|
||||||
|
@ -120,7 +120,8 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; my $dir=$1; my $xlate;
|
|||||||
die "can't locate x86_64-xlate.pl";
|
die "can't locate x86_64-xlate.pl";
|
||||||
|
|
||||||
no warnings qw(uninitialized);
|
no warnings qw(uninitialized);
|
||||||
open STDOUT,"| \"$^X\" $xlate $flavour $output";
|
open OUT,"| \"$^X\" $xlate $flavour $output";
|
||||||
|
*STDOUT=*OUT;
|
||||||
|
|
||||||
$code .= <<EOF;
|
$code .= <<EOF;
|
||||||
.text
|
.text
|
||||||
|
@ -50,7 +50,8 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
|
|||||||
( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
|
( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
|
||||||
die "can't locate x86_64-xlate.pl";
|
die "can't locate x86_64-xlate.pl";
|
||||||
|
|
||||||
open STDOUT,"| \"$^X\" $xlate $flavour $output";
|
open OUT,"| \"$^X\" $xlate $flavour $output";
|
||||||
|
*STDOUT=*OUT;
|
||||||
|
|
||||||
# common register layout
|
# common register layout
|
||||||
$nlo="%rax";
|
$nlo="%rax";
|
||||||
|
@ -51,7 +51,8 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; my $dir=$1; my $xlate;
|
|||||||
( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
|
( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
|
||||||
die "can't locate x86_64-xlate.pl";
|
die "can't locate x86_64-xlate.pl";
|
||||||
|
|
||||||
open STDOUT,"| \"$^X\" $xlate $flavour $output";
|
open OUT,"| \"$^X\" $xlate $flavour $output";
|
||||||
|
*STDOUT=*OUT;
|
||||||
|
|
||||||
my ($dat,$in0,$out,$ctx,$inp,$len, $func,$nargs);
|
my ($dat,$in0,$out,$ctx,$inp,$len, $func,$nargs);
|
||||||
|
|
||||||
|
@ -112,7 +112,8 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
|
|||||||
( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
|
( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
|
||||||
die "can't locate x86_64-xlate.pl";
|
die "can't locate x86_64-xlate.pl";
|
||||||
|
|
||||||
open STDOUT,"| \"$^X\" $xlate $flavour $output";
|
open OUT,"| \"$^X\" $xlate $flavour $output";
|
||||||
|
*STDOUT=*OUT;
|
||||||
|
|
||||||
$dat="%rdi"; # arg1
|
$dat="%rdi"; # arg1
|
||||||
$len="%rsi"; # arg2
|
$len="%rsi"; # arg2
|
||||||
|
@ -82,7 +82,8 @@ $avx=1 if (!$avx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) &&
|
|||||||
`ml64 2>&1` =~ /Version ([0-9]+)\./ &&
|
`ml64 2>&1` =~ /Version ([0-9]+)\./ &&
|
||||||
$1>=10);
|
$1>=10);
|
||||||
|
|
||||||
open STDOUT,"| \"$^X\" $xlate $flavour $output";
|
open OUT,"| \"$^X\" $xlate $flavour $output";
|
||||||
|
*STDOUT=*OUT;
|
||||||
|
|
||||||
$ctx="%rdi"; # 1st arg
|
$ctx="%rdi"; # 1st arg
|
||||||
$inp="%rsi"; # 2nd arg
|
$inp="%rsi"; # 2nd arg
|
||||||
|
@ -51,7 +51,8 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
|
|||||||
( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
|
( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
|
||||||
die "can't locate x86_64-xlate.pl";
|
die "can't locate x86_64-xlate.pl";
|
||||||
|
|
||||||
open STDOUT,"| \"$^X\" $xlate $flavour $output";
|
open OUT,"| \"$^X\" $xlate $flavour $output";
|
||||||
|
*STDOUT=*OUT;
|
||||||
|
|
||||||
if ($output =~ /512/) {
|
if ($output =~ /512/) {
|
||||||
$func="sha512_block_data_order";
|
$func="sha512_block_data_order";
|
||||||
|
@ -41,7 +41,8 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; my $dir=$1; my $xlate;
|
|||||||
( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
|
( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
|
||||||
die "can't locate x86_64-xlate.pl";
|
die "can't locate x86_64-xlate.pl";
|
||||||
|
|
||||||
open STDOUT,"| \"$^X\" $xlate $flavour $output";
|
open OUT,"| \"$^X\" $xlate $flavour $output";
|
||||||
|
*STDOUT=*OUT;
|
||||||
|
|
||||||
sub L() { $code.=".byte ".join(',',@_)."\n"; }
|
sub L() { $code.=".byte ".join(',',@_)."\n"; }
|
||||||
sub LL(){ $code.=".byte ".join(',',@_).",".join(',',@_)."\n"; }
|
sub LL(){ $code.=".byte ".join(',',@_).",".join(',',@_)."\n"; }
|
||||||
|
@ -11,7 +11,8 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
|
|||||||
( $xlate="${dir}perlasm/x86_64-xlate.pl" and -f $xlate) or
|
( $xlate="${dir}perlasm/x86_64-xlate.pl" and -f $xlate) or
|
||||||
die "can't locate x86_64-xlate.pl";
|
die "can't locate x86_64-xlate.pl";
|
||||||
|
|
||||||
open STDOUT,"| \"$^X\" $xlate $flavour $output";
|
open OUT,"| \"$^X\" $xlate $flavour $output";
|
||||||
|
*STDOUT=*OUT;
|
||||||
|
|
||||||
($arg1,$arg2,$arg3,$arg4)=$win64?("%rcx","%rdx","%r8", "%r9") : # Win64 order
|
($arg1,$arg2,$arg3,$arg4)=$win64?("%rcx","%rdx","%r8", "%r9") : # Win64 order
|
||||||
("%rdi","%rsi","%rdx","%rcx"); # Unix order
|
("%rdi","%rsi","%rdx","%rcx"); # Unix order
|
||||||
|
@ -2,7 +2,8 @@
|
|||||||
|
|
||||||
$output=shift;
|
$output=shift;
|
||||||
$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
|
$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
|
||||||
open STDOUT,"| \"$^X\" ${dir}../crypto/perlasm/x86_64-xlate.pl $output";
|
open OUT,"| \"$^X\" ${dir}../crypto/perlasm/x86_64-xlate.pl $output";
|
||||||
|
*STDOUT=*OUT;
|
||||||
push(@INC,"${dir}.");
|
push(@INC,"${dir}.");
|
||||||
|
|
||||||
require "uplink-common.pl";
|
require "uplink-common.pl";
|
||||||
|
Loading…
x
Reference in New Issue
Block a user