CPU-x86_64-InstructionWriter
view release on metacpan or search on metacpan
lib/CPU/x86_64/InstructionWriter.pm view on Meta::CPAN
$rex |= ($xreg1 & 8) >> 1 | ($xreg2 & 8) >> 3;
my $modrm= 0xC0 | ($xreg1 & 7) << 3 | ($xreg2 & 7);
$_[0]{_buf} .= !$rex? pack('a*CCC', $prefix, $opcode >> 8, $opcode & 0xFF, $modrm)
: pack('a*CCCC', $prefix, 0x40|$rex, $opcode >> 8, $opcode & 0xFF, $modrm);
$_[0]
}
sub _append_op128_xreg_reg {
my ($self, $prefix, $rex, $opcode, $xreg, $reg)= @_;
$xreg= $regnum128{$xreg} // croak("$xreg is not a 128-bit register");
if (defined(my $regid= $regnum64{$reg})) {
$rex |= 8;
$reg= $regid;
} elsif (defined($regid= $regnum32{$reg})) {
$reg= $regid;
} else {
croak("$reg is not a 32 or 64-bit register");
}
$rex |= ($xreg & 8) >> 1 | ($reg & 8) >> 3;
my $modrm= 0xC0 | ($xreg & 7) << 3 | ($reg & 7);
$_[0]{_buf} .= !$rex? pack('a*CCC', $prefix, $opcode >> 8, $opcode & 0xFF, $modrm)
: pack('a*CCCC', $prefix, 0x40|$rex, $opcode >> 8, $opcode & 0xFF, $modrm);
$_[0]
}
( run in 0.943 second using v1.01-cache-2.11-cpan-97f6503c9c8 )