From 124096735bba3072b02e319d92d66fc683d38b83 Mon Sep 17 00:00:00 2001 From: Johnnie Birch <45402135+jlb6740@users.noreply.github.com> Date: Sun, 22 Nov 2020 21:55:37 -0800 Subject: [PATCH] Add support for palignr for X86_64 vcode backend --- cranelift/codegen/src/isa/x64/inst/args.rs | 8 +++++++- cranelift/codegen/src/isa/x64/inst/emit.rs | 1 + cranelift/codegen/src/isa/x64/inst/emit_tests.rs | 5 +++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/cranelift/codegen/src/isa/x64/inst/args.rs b/cranelift/codegen/src/isa/x64/inst/args.rs index 2958dd56d0..feede2e063 100644 --- a/cranelift/codegen/src/isa/x64/inst/args.rs +++ b/cranelift/codegen/src/isa/x64/inst/args.rs @@ -476,6 +476,7 @@ pub enum SseOpcode { Paddsw, Paddusb, Paddusw, + Palignr, Pand, Pandn, Pavgb, @@ -688,7 +689,11 @@ impl SseOpcode { | SseOpcode::Ucomisd | 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::Pcmpeqq @@ -805,6 +810,7 @@ impl fmt::Debug for SseOpcode { SseOpcode::Paddsw => "paddsw", SseOpcode::Paddusb => "paddusb", SseOpcode::Paddusw => "paddusw", + SseOpcode::Palignr => "palignr", SseOpcode::Pand => "pand", SseOpcode::Pandn => "pandn", SseOpcode::Pavgb => "pavgb", diff --git a/cranelift/codegen/src/isa/x64/inst/emit.rs b/cranelift/codegen/src/isa/x64/inst/emit.rs index 7d04e0e800..ec46d27744 100644 --- a/cranelift/codegen/src/isa/x64/inst/emit.rs +++ b/cranelift/codegen/src/isa/x64/inst/emit.rs @@ -1970,6 +1970,7 @@ pub(crate) fn emit( SseOpcode::Cmpss => (LegacyPrefixes::_F3, 0x0FC2, 2), SseOpcode::Cmpsd => (LegacyPrefixes::_F2, 0x0FC2, 2), SseOpcode::Insertps => (LegacyPrefixes::_66, 0x0F3A21, 3), + SseOpcode::Palignr => (LegacyPrefixes::_66, 0x0F3A0F, 3), SseOpcode::Pinsrb => (LegacyPrefixes::_66, 0x0F3A20, 3), SseOpcode::Pinsrw => (LegacyPrefixes::_66, 0x0FC4, 2), SseOpcode::Pinsrd => (LegacyPrefixes::_66, 0x0F3A22, 3), diff --git a/cranelift/codegen/src/isa/x64/inst/emit_tests.rs b/cranelift/codegen/src/isa/x64/inst/emit_tests.rs index bfcd7a401f..59560cd4ef 100644 --- a/cranelift/codegen/src/isa/x64/inst/emit_tests.rs +++ b/cranelift/codegen/src/isa/x64/inst/emit_tests.rs @@ -3481,6 +3481,11 @@ fn test_x64_emit() { "410FC2FF00", "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.