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.762 second using v1.01-cache-2.11-cpan-97f6503c9c8 )