Commit 6c8b9259 authored by Andy Polyakov's avatar Andy Polyakov
Browse files

AESNI perlasm update.

parent 75d448dd
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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");
	    }
+17 −0
Original line number Diff line number Diff line
@@ -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";
+5 −3
Original line number Diff line number Diff line
@@ -16,9 +16,11 @@ sub ::generic
    # fix hexadecimal constants
    for (@arg) { s/0x([0-9a-f]+)/0$1h/oi; }

    # fix xmm references
    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;