AESNI perlasm update.
This commit is contained in:
parent
75d448dde4
commit
6c8b9259fc
@ -662,6 +662,7 @@ while($line=<>) {
|
||||
$insn = $opcode->out($#args>=1?$args[$#args]->size():$sz);
|
||||
} else {
|
||||
$insn = $opcode->out();
|
||||
$insn .= $sz if (map($_->out() =~ /xmm|mmx/,@args));
|
||||
@args = reverse(@args);
|
||||
undef $sz if ($nasm && $opcode->mnemonic() eq "lea");
|
||||
}
|
||||
|
@ -80,6 +80,23 @@ sub ::movq
|
||||
{ &::generic("movq",@_); }
|
||||
}
|
||||
|
||||
# AESNI extenstion
|
||||
sub ::aeskeygenassist
|
||||
{ my($dst,$src,$imm)=@_;
|
||||
if ("$dst:$src" =~ /xmm([0-7]):xmm([0-7])/)
|
||||
{ &data_byte(0x66,0x0f,0x3a,0xdf,0xc0|($1<<3)|$2,$imm); }
|
||||
}
|
||||
sub ::aescommon
|
||||
{ my($opcodelet,$dst,$src)=@_;
|
||||
if ("$dst:$src" =~ /xmm([0-7]):xmm([0-7])/)
|
||||
{ &data_byte(0x66,0x0f,0x38,$opcodelet,0xc0|($1<<3)|$2); }
|
||||
}
|
||||
sub ::aesimc { ::aescommon(0xdb,@_); }
|
||||
sub ::aesenc { ::aescommon(0xdc,@_); }
|
||||
sub ::aesenclast { ::aescommon(0xdd,@_); }
|
||||
sub ::aesdec { ::aescommon(0xde,@_); }
|
||||
sub ::aesdeclast { ::aescommon(0xdf,@_); }
|
||||
|
||||
# label management
|
||||
$lbdecor="L"; # local label decoration, set by package
|
||||
$label="000";
|
||||
|
@ -16,9 +16,11 @@ sub ::generic
|
||||
# fix hexadecimal constants
|
||||
for (@arg) { s/0x([0-9a-f]+)/0$1h/oi; }
|
||||
|
||||
# fix xmm references
|
||||
$arg[0] =~ s/\b[A-Z]+WORD\s+PTR/XMMWORD PTR/i if ($arg[1]=~/\bxmm[0-7]\b/i);
|
||||
$arg[1] =~ s/\b[A-Z]+WORD\s+PTR/XMMWORD PTR/i if ($arg[0]=~/\bxmm[0-7]\b/i);
|
||||
if ($opcode !~ /movq/)
|
||||
{ # fix xmm references
|
||||
$arg[0] =~ s/\b[A-Z]+WORD\s+PTR/XMMWORD PTR/i if ($arg[1]=~/\bxmm[0-7]\b/i);
|
||||
$arg[1] =~ s/\b[A-Z]+WORD\s+PTR/XMMWORD PTR/i if ($arg[0]=~/\bxmm[0-7]\b/i);
|
||||
}
|
||||
|
||||
&::emit($opcode,@arg);
|
||||
1;
|
||||
|
Loading…
x
Reference in New Issue
Block a user