Loading crypto/perlasm/x86_64-xlate.pl +1 −0 Original line number Diff line number Diff line Loading @@ -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"); } Loading crypto/perlasm/x86asm.pl +17 −0 Original line number Diff line number Diff line Loading @@ -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"; Loading crypto/perlasm/x86masm.pl +5 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading
crypto/perlasm/x86_64-xlate.pl +1 −0 Original line number Diff line number Diff line Loading @@ -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"); } Loading
crypto/perlasm/x86asm.pl +17 −0 Original line number Diff line number Diff line Loading @@ -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"; Loading
crypto/perlasm/x86masm.pl +5 −3 Original line number Diff line number Diff line Loading @@ -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; Loading