Add support for palignr for X86_64 vcode backend

This commit is contained in:
Johnnie Birch
2020-11-22 21:55:37 -08:00
parent f9937575d6
commit 124096735b
3 changed files with 13 additions and 1 deletions

View File

@@ -476,6 +476,7 @@ pub enum SseOpcode {
Paddsw, Paddsw,
Paddusb, Paddusb,
Paddusw, Paddusw,
Palignr,
Pand, Pand,
Pandn, Pandn,
Pavgb, Pavgb,
@@ -688,7 +689,11 @@ impl SseOpcode {
| SseOpcode::Ucomisd | SseOpcode::Ucomisd
| SseOpcode::Xorpd => SSE2, | SseOpcode::Xorpd => SSE2,
SseOpcode::Pabsb | SseOpcode::Pabsw | SseOpcode::Pabsd | SseOpcode::Pshufb => SSSE3, SseOpcode::Pabsb
| SseOpcode::Pabsw
| SseOpcode::Pabsd
| SseOpcode::Palignr
| SseOpcode::Pshufb => SSSE3,
SseOpcode::Insertps SseOpcode::Insertps
| SseOpcode::Pcmpeqq | SseOpcode::Pcmpeqq
@@ -805,6 +810,7 @@ impl fmt::Debug for SseOpcode {
SseOpcode::Paddsw => "paddsw", SseOpcode::Paddsw => "paddsw",
SseOpcode::Paddusb => "paddusb", SseOpcode::Paddusb => "paddusb",
SseOpcode::Paddusw => "paddusw", SseOpcode::Paddusw => "paddusw",
SseOpcode::Palignr => "palignr",
SseOpcode::Pand => "pand", SseOpcode::Pand => "pand",
SseOpcode::Pandn => "pandn", SseOpcode::Pandn => "pandn",
SseOpcode::Pavgb => "pavgb", SseOpcode::Pavgb => "pavgb",

View File

@@ -1970,6 +1970,7 @@ pub(crate) fn emit(
SseOpcode::Cmpss => (LegacyPrefixes::_F3, 0x0FC2, 2), SseOpcode::Cmpss => (LegacyPrefixes::_F3, 0x0FC2, 2),
SseOpcode::Cmpsd => (LegacyPrefixes::_F2, 0x0FC2, 2), SseOpcode::Cmpsd => (LegacyPrefixes::_F2, 0x0FC2, 2),
SseOpcode::Insertps => (LegacyPrefixes::_66, 0x0F3A21, 3), SseOpcode::Insertps => (LegacyPrefixes::_66, 0x0F3A21, 3),
SseOpcode::Palignr => (LegacyPrefixes::_66, 0x0F3A0F, 3),
SseOpcode::Pinsrb => (LegacyPrefixes::_66, 0x0F3A20, 3), SseOpcode::Pinsrb => (LegacyPrefixes::_66, 0x0F3A20, 3),
SseOpcode::Pinsrw => (LegacyPrefixes::_66, 0x0FC4, 2), SseOpcode::Pinsrw => (LegacyPrefixes::_66, 0x0FC4, 2),
SseOpcode::Pinsrd => (LegacyPrefixes::_66, 0x0F3A22, 3), SseOpcode::Pinsrd => (LegacyPrefixes::_66, 0x0F3A22, 3),

View File

@@ -3481,6 +3481,11 @@ fn test_x64_emit() {
"410FC2FF00", "410FC2FF00",
"cmpps $0, %xmm15, %xmm7", "cmpps $0, %xmm15, %xmm7",
)); ));
insns.push((
Inst::xmm_rm_r_imm(SseOpcode::Palignr, RegMem::reg(xmm1), w_xmm9, 3, false),
"66440F3A0FC903",
"palignr $3, %xmm1, %xmm9",
));
// ======================================================== // ========================================================
// Pertaining to atomics. // Pertaining to atomics.