提交 a87ff751 编写于 作者: A Andy Polyakov

Add so called Vector Permutation AES x86[_64] assembler, see

http://crypto.stanford.edu/vpaes/ for background information.
It's not integrated into build system yet.
上级 288fe07a
此差异已折叠。
此差异已折叠。
...@@ -666,14 +666,14 @@ my %regrm = ( "%eax"=>0, "%ecx"=>1, "%edx"=>2, "%ebx"=>3, ...@@ -666,14 +666,14 @@ my %regrm = ( "%eax"=>0, "%ecx"=>1, "%edx"=>2, "%ebx"=>3,
my $movq = sub { # elderly gas can't handle inter-register movq my $movq = sub { # elderly gas can't handle inter-register movq
my $arg = shift; my $arg = shift;
my @opcode=(0x66); my @opcode=(0x66);
if ($arg =~ /%xmm([0-9]+),%r(\w+)/) { if ($arg =~ /%xmm([0-9]+),\s*%r(\w+)/) {
my ($src,$dst)=($1,$2); my ($src,$dst)=($1,$2);
if ($dst !~ /[0-9]+/) { $dst = $regrm{"%e$dst"}; } if ($dst !~ /[0-9]+/) { $dst = $regrm{"%e$dst"}; }
rex(\@opcode,$src,$dst,0x8); rex(\@opcode,$src,$dst,0x8);
push @opcode,0x0f,0x7e; push @opcode,0x0f,0x7e;
push @opcode,0xc0|(($src&7)<<3)|($dst&7); # ModR/M push @opcode,0xc0|(($src&7)<<3)|($dst&7); # ModR/M
@opcode; @opcode;
} elsif ($arg =~ /%r(\w+),%xmm([0-9]+)/) { } elsif ($arg =~ /%r(\w+),\s*%xmm([0-9]+)/) {
my ($src,$dst)=($2,$1); my ($src,$dst)=($2,$1);
if ($dst !~ /[0-9]+/) { $dst = $regrm{"%e$dst"}; } if ($dst !~ /[0-9]+/) { $dst = $regrm{"%e$dst"}; }
rex(\@opcode,$src,$dst,0x8); rex(\@opcode,$src,$dst,0x8);
...@@ -686,7 +686,7 @@ my $movq = sub { # elderly gas can't handle inter-register movq ...@@ -686,7 +686,7 @@ my $movq = sub { # elderly gas can't handle inter-register movq
}; };
my $pextrd = sub { my $pextrd = sub {
if (shift =~ /\$([0-9]+),%xmm([0-9]+),(%\w+)/) { if (shift =~ /\$([0-9]+),\s*%xmm([0-9]+),\s*(%\w+)/) {
my @opcode=(0x66); my @opcode=(0x66);
$imm=$1; $imm=$1;
$src=$2; $src=$2;
...@@ -704,7 +704,7 @@ my $pextrd = sub { ...@@ -704,7 +704,7 @@ my $pextrd = sub {
}; };
my $pinsrd = sub { my $pinsrd = sub {
if (shift =~ /\$([0-9]+),(%\w+),%xmm([0-9]+)/) { if (shift =~ /\$([0-9]+),\s*(%\w+),\s*%xmm([0-9]+)/) {
my @opcode=(0x66); my @opcode=(0x66);
$imm=$1; $imm=$1;
$src=$2; $src=$2;
...@@ -722,7 +722,7 @@ my $pinsrd = sub { ...@@ -722,7 +722,7 @@ my $pinsrd = sub {
}; };
my $pshufb = sub { my $pshufb = sub {
if (shift =~ /%xmm([0-9]+),%xmm([0-9]+)/) { if (shift =~ /%xmm([0-9]+),\s*%xmm([0-9]+)/) {
my @opcode=(0x66); my @opcode=(0x66);
rex(\@opcode,$2,$1); rex(\@opcode,$2,$1);
push @opcode,0x0f,0x38,0x00; push @opcode,0x0f,0x38,0x00;
...@@ -734,7 +734,7 @@ my $pshufb = sub { ...@@ -734,7 +734,7 @@ my $pshufb = sub {
}; };
my $palignr = sub { my $palignr = sub {
if (shift =~ /\$([0-9]+),%xmm([0-9]+),%xmm([0-9]+)/) { if (shift =~ /\$([0-9]+),\s*%xmm([0-9]+),\s*%xmm([0-9]+)/) {
my @opcode=(0x66); my @opcode=(0x66);
rex(\@opcode,$3,$2); rex(\@opcode,$3,$2);
push @opcode,0x0f,0x3a,0x0f; push @opcode,0x0f,0x3a,0x0f;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册