Adds x64 packed negation for the new backend
This commit is contained in:
@@ -412,6 +412,7 @@ pub enum SseOpcode {
|
||||
Psubd,
|
||||
Psubq,
|
||||
Psubw,
|
||||
Pxor,
|
||||
Rcpss,
|
||||
Roundss,
|
||||
Roundsd,
|
||||
@@ -512,6 +513,7 @@ impl SseOpcode {
|
||||
| SseOpcode::Psubd
|
||||
| SseOpcode::Psubq
|
||||
| SseOpcode::Psubw
|
||||
| SseOpcode::Pxor
|
||||
| SseOpcode::Sqrtpd
|
||||
| SseOpcode::Sqrtsd
|
||||
| SseOpcode::Subpd
|
||||
@@ -607,6 +609,7 @@ impl fmt::Debug for SseOpcode {
|
||||
SseOpcode::Psubd => "psubd",
|
||||
SseOpcode::Psubq => "psubq",
|
||||
SseOpcode::Psubw => "psubw",
|
||||
SseOpcode::Pxor => "pxor",
|
||||
SseOpcode::Rcpss => "rcpss",
|
||||
SseOpcode::Roundss => "roundss",
|
||||
SseOpcode::Roundsd => "roundsd",
|
||||
|
||||
@@ -1703,6 +1703,7 @@ pub(crate) fn emit(
|
||||
SseOpcode::Psubd => (LegacyPrefixes::_66, 0x0FFA, 2),
|
||||
SseOpcode::Psubq => (LegacyPrefixes::_66, 0x0FFB, 2),
|
||||
SseOpcode::Psubw => (LegacyPrefixes::_66, 0x0FF9, 2),
|
||||
SseOpcode::Pxor => (LegacyPrefixes::_66, 0x0FEF, 2),
|
||||
SseOpcode::Subps => (LegacyPrefixes::None, 0x0F5C, 2),
|
||||
SseOpcode::Subpd => (LegacyPrefixes::_66, 0x0F5C, 2),
|
||||
SseOpcode::Subss => (LegacyPrefixes::_F3, 0x0F5C, 2),
|
||||
|
||||
@@ -3083,6 +3083,12 @@ fn test_x64_emit() {
|
||||
"pmuludq %xmm8, %xmm9",
|
||||
));
|
||||
|
||||
insns.push((
|
||||
Inst::xmm_rm_r(SseOpcode::Pxor, RegMem::reg(xmm11), w_xmm2),
|
||||
"66410FEFD3",
|
||||
"pxor %xmm11, %xmm2",
|
||||
));
|
||||
|
||||
// XMM_Mov_R_M: float stores
|
||||
insns.push((
|
||||
Inst::xmm_mov_r_m(SseOpcode::Movss, xmm15, Amode::imm_reg(128, r12), None),
|
||||
|
||||
@@ -1101,7 +1101,9 @@ impl Inst {
|
||||
|
||||
Self::XMM_RM_R { op, src, dst, .. } => {
|
||||
src.to_reg() == Some(dst.to_reg())
|
||||
&& (*op == SseOpcode::Xorps || *op == SseOpcode::Xorpd)
|
||||
&& (*op == SseOpcode::Xorps
|
||||
|| *op == SseOpcode::Xorpd
|
||||
|| *op == SseOpcode::Pxor)
|
||||
}
|
||||
|
||||
Self::XmmRmRImm { op, src, dst, imm } => {
|
||||
|
||||
Reference in New Issue
Block a user