[machinst x64]: add shuffle implementation
This commit is contained in:
@@ -425,6 +425,7 @@ pub enum SseOpcode {
|
||||
Pmulld,
|
||||
Pmullw,
|
||||
Pmuludq,
|
||||
Pshufb,
|
||||
Pshufd,
|
||||
Psllw,
|
||||
Pslld,
|
||||
@@ -557,7 +558,7 @@ impl SseOpcode {
|
||||
| SseOpcode::Ucomisd
|
||||
| SseOpcode::Xorpd => SSE2,
|
||||
|
||||
SseOpcode::Pabsb | SseOpcode::Pabsw | SseOpcode::Pabsd => SSSE3,
|
||||
SseOpcode::Pabsb | SseOpcode::Pabsw | SseOpcode::Pabsd | SseOpcode::Pshufb => SSSE3,
|
||||
|
||||
SseOpcode::Insertps
|
||||
| SseOpcode::Pextrb
|
||||
@@ -672,6 +673,7 @@ impl fmt::Debug for SseOpcode {
|
||||
SseOpcode::Pmulld => "pmulld",
|
||||
SseOpcode::Pmullw => "pmullw",
|
||||
SseOpcode::Pmuludq => "pmuludq",
|
||||
SseOpcode::Pshufb => "pshufb",
|
||||
SseOpcode::Pshufd => "pshufd",
|
||||
SseOpcode::Psllw => "psllw",
|
||||
SseOpcode::Pslld => "pslld",
|
||||
|
||||
@@ -1797,6 +1797,7 @@ pub(crate) fn emit(
|
||||
SseOpcode::Pmulld => (LegacyPrefixes::_66, 0x0F3840, 3),
|
||||
SseOpcode::Pmullw => (LegacyPrefixes::_66, 0x0FD5, 2),
|
||||
SseOpcode::Pmuludq => (LegacyPrefixes::_66, 0x0FF4, 2),
|
||||
SseOpcode::Pshufb => (LegacyPrefixes::_66, 0x0F3800, 3),
|
||||
SseOpcode::Psubb => (LegacyPrefixes::_66, 0x0FF8, 2),
|
||||
SseOpcode::Psubd => (LegacyPrefixes::_66, 0x0FFA, 2),
|
||||
SseOpcode::Psubq => (LegacyPrefixes::_66, 0x0FFB, 2),
|
||||
|
||||
@@ -3243,6 +3243,12 @@ fn test_x64_emit() {
|
||||
"pxor %xmm11, %xmm2",
|
||||
));
|
||||
|
||||
insns.push((
|
||||
Inst::xmm_rm_r(SseOpcode::Pshufb, RegMem::reg(xmm11), w_xmm2),
|
||||
"66410F3800D3",
|
||||
"pshufb %xmm11, %xmm2",
|
||||
));
|
||||
|
||||
// XMM_Mov_R_M: float stores
|
||||
insns.push((
|
||||
Inst::xmm_mov_r_m(SseOpcode::Movss, xmm15, Amode::imm_reg(128, r12), None),
|
||||
|
||||
Reference in New Issue
Block a user