diff --git a/Userland/DevTools/UserspaceEmulator/SoftCPU.cpp b/Userland/DevTools/UserspaceEmulator/SoftCPU.cpp index 63ffa379ea..f6fcdab9e2 100644 --- a/Userland/DevTools/UserspaceEmulator/SoftCPU.cpp +++ b/Userland/DevTools/UserspaceEmulator/SoftCPU.cpp @@ -2815,9 +2815,27 @@ void SoftCPU::OUT_DX_EAX(const X86::Instruction&) { TODO_INSN(); } void SoftCPU::OUT_imm8_AL(const X86::Instruction&) { TODO_INSN(); } void SoftCPU::OUT_imm8_AX(const X86::Instruction&) { TODO_INSN(); } void SoftCPU::OUT_imm8_EAX(const X86::Instruction&) { TODO_INSN(); } +void SoftCPU::PACKSSDW_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); } +void SoftCPU::PACKSSWB_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); } +void SoftCPU::PACKUSWB_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); } void SoftCPU::PADDB_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); } void SoftCPU::PADDW_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); } void SoftCPU::PADDD_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); } +void SoftCPU::PADDSB_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); } +void SoftCPU::PADDSW_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); } +void SoftCPU::PADDUSB_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); } +void SoftCPU::PADDUSW_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); } +void SoftCPU::PAND_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); } +void SoftCPU::PANDN_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); } +void SoftCPU::PCMPEQB_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); } +void SoftCPU::PCMPEQW_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); } +void SoftCPU::PCMPEQD_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); } +void SoftCPU::PCMPGTB_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); } +void SoftCPU::PCMPGTW_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); } +void SoftCPU::PCMPGTD_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); } +void SoftCPU::PMADDWD_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); } +void SoftCPU::PMULHW_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); } +void SoftCPU::PMULLW_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); } void SoftCPU::POPA(const X86::Instruction&) { @@ -2890,6 +2908,37 @@ void SoftCPU::POP_reg32(const X86::Instruction& insn) gpr32(insn.reg32()) = pop32(); } +void SoftCPU::POR_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); }; +void SoftCPU::PSLLW_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); }; +void SoftCPU::PSLLW_mm1_imm8(const X86::Instruction&) { TODO_INSN(); }; +void SoftCPU::PSLLD_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); }; +void SoftCPU::PSLLD_mm1_imm8(const X86::Instruction&) { TODO_INSN(); }; +void SoftCPU::PSLLQ_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); }; +void SoftCPU::PSLLQ_mm1_imm8(const X86::Instruction&) { TODO_INSN(); }; +void SoftCPU::PSRAW_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); }; +void SoftCPU::PSRAW_mm1_imm8(const X86::Instruction&) { TODO_INSN(); }; +void SoftCPU::PSRAD_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); }; +void SoftCPU::PSRAD_mm1_imm8(const X86::Instruction&) { TODO_INSN(); }; +void SoftCPU::PSRLW_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); }; +void SoftCPU::PSRLW_mm1_imm8(const X86::Instruction&) { TODO_INSN(); }; +void SoftCPU::PSRLD_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); }; +void SoftCPU::PSRLD_mm1_imm8(const X86::Instruction&) { TODO_INSN(); }; +void SoftCPU::PSRLQ_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); }; +void SoftCPU::PSRLQ_mm1_imm8(const X86::Instruction&) { TODO_INSN(); }; +void SoftCPU::PSUBB_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); }; +void SoftCPU::PSUBW_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); }; +void SoftCPU::PSUBD_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); }; +void SoftCPU::PSUBSB_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); }; +void SoftCPU::PSUBSW_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); }; +void SoftCPU::PSUBUSB_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); }; +void SoftCPU::PSUBUSW_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); }; +void SoftCPU::PUNPCKHBW_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); }; +void SoftCPU::PUNPCKHWD_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); }; +void SoftCPU::PUNPCKHDQ_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); }; +void SoftCPU::PUNPCKLBW_mm1_mm2m32(const X86::Instruction&) { TODO_INSN(); }; +void SoftCPU::PUNPCKLWD_mm1_mm2m32(const X86::Instruction&) { TODO_INSN(); }; +void SoftCPU::PUNPCKLDQ_mm1_mm2m32(const X86::Instruction&) { TODO_INSN(); }; + void SoftCPU::PUSHA(const X86::Instruction&) { auto temp = sp(); @@ -2979,6 +3028,8 @@ void SoftCPU::PUSH_reg32(const X86::Instruction& insn) push32(gpr32(insn.reg32())); } +void SoftCPU::PXOR_mm1_mm2m64(const X86::Instruction&) { TODO_INSN(); }; + template ALWAYS_INLINE static T op_rcl_impl(SoftCPU& cpu, T data, ValueWithShadow steps) { diff --git a/Userland/DevTools/UserspaceEmulator/SoftCPU.h b/Userland/DevTools/UserspaceEmulator/SoftCPU.h index 54f03204b5..eb8b55d039 100644 --- a/Userland/DevTools/UserspaceEmulator/SoftCPU.h +++ b/Userland/DevTools/UserspaceEmulator/SoftCPU.h @@ -848,9 +848,27 @@ private: virtual void OUT_imm8_AL(const X86::Instruction&) override; virtual void OUT_imm8_AX(const X86::Instruction&) override; virtual void OUT_imm8_EAX(const X86::Instruction&) override; + virtual void PACKSSDW_mm1_mm2m64(const X86::Instruction&) override; + virtual void PACKSSWB_mm1_mm2m64(const X86::Instruction&) override; + virtual void PACKUSWB_mm1_mm2m64(const X86::Instruction&) override; virtual void PADDB_mm1_mm2m64(const X86::Instruction&) override; virtual void PADDW_mm1_mm2m64(const X86::Instruction&) override; virtual void PADDD_mm1_mm2m64(const X86::Instruction&) override; + virtual void PADDSB_mm1_mm2m64(const X86::Instruction&) override; + virtual void PADDSW_mm1_mm2m64(const X86::Instruction&) override; + virtual void PADDUSB_mm1_mm2m64(const X86::Instruction&) override; + virtual void PADDUSW_mm1_mm2m64(const X86::Instruction&) override; + virtual void PAND_mm1_mm2m64(const X86::Instruction&) override; + virtual void PANDN_mm1_mm2m64(const X86::Instruction&) override; + virtual void PCMPEQB_mm1_mm2m64(const X86::Instruction&) override; + virtual void PCMPEQW_mm1_mm2m64(const X86::Instruction&) override; + virtual void PCMPEQD_mm1_mm2m64(const X86::Instruction&) override; + virtual void PCMPGTB_mm1_mm2m64(const X86::Instruction&) override; + virtual void PCMPGTW_mm1_mm2m64(const X86::Instruction&) override; + virtual void PCMPGTD_mm1_mm2m64(const X86::Instruction&) override; + virtual void PMADDWD_mm1_mm2m64(const X86::Instruction&) override; + virtual void PMULHW_mm1_mm2m64(const X86::Instruction&) override; + virtual void PMULLW_mm1_mm2m64(const X86::Instruction&) override; virtual void POPA(const X86::Instruction&) override; virtual void POPAD(const X86::Instruction&) override; virtual void POPF(const X86::Instruction&) override; @@ -864,6 +882,36 @@ private: virtual void POP_SS(const X86::Instruction&) override; virtual void POP_reg16(const X86::Instruction&) override; virtual void POP_reg32(const X86::Instruction&) override; + virtual void POR_mm1_mm2m64(const X86::Instruction&) override; + virtual void PSLLW_mm1_mm2m64(const X86::Instruction&) override; + virtual void PSLLW_mm1_imm8(const X86::Instruction&) override; + virtual void PSLLD_mm1_mm2m64(const X86::Instruction&) override; + virtual void PSLLD_mm1_imm8(const X86::Instruction&) override; + virtual void PSLLQ_mm1_mm2m64(const X86::Instruction&) override; + virtual void PSLLQ_mm1_imm8(const X86::Instruction&) override; + virtual void PSRAW_mm1_mm2m64(const X86::Instruction&) override; + virtual void PSRAW_mm1_imm8(const X86::Instruction&) override; + virtual void PSRAD_mm1_mm2m64(const X86::Instruction&) override; + virtual void PSRAD_mm1_imm8(const X86::Instruction&) override; + virtual void PSRLW_mm1_mm2m64(const X86::Instruction&) override; + virtual void PSRLW_mm1_imm8(const X86::Instruction&) override; + virtual void PSRLD_mm1_mm2m64(const X86::Instruction&) override; + virtual void PSRLD_mm1_imm8(const X86::Instruction&) override; + virtual void PSRLQ_mm1_mm2m64(const X86::Instruction&) override; + virtual void PSRLQ_mm1_imm8(const X86::Instruction&) override; + virtual void PSUBB_mm1_mm2m64(const X86::Instruction&) override; + virtual void PSUBW_mm1_mm2m64(const X86::Instruction&) override; + virtual void PSUBD_mm1_mm2m64(const X86::Instruction&) override; + virtual void PSUBSB_mm1_mm2m64(const X86::Instruction&) override; + virtual void PSUBSW_mm1_mm2m64(const X86::Instruction&) override; + virtual void PSUBUSB_mm1_mm2m64(const X86::Instruction&) override; + virtual void PSUBUSW_mm1_mm2m64(const X86::Instruction&) override; + virtual void PUNPCKHBW_mm1_mm2m64(const X86::Instruction&) override; + virtual void PUNPCKHWD_mm1_mm2m64(const X86::Instruction&) override; + virtual void PUNPCKHDQ_mm1_mm2m64(const X86::Instruction&) override; + virtual void PUNPCKLBW_mm1_mm2m32(const X86::Instruction&) override; + virtual void PUNPCKLWD_mm1_mm2m32(const X86::Instruction&) override; + virtual void PUNPCKLDQ_mm1_mm2m32(const X86::Instruction&) override; virtual void PUSHA(const X86::Instruction&) override; virtual void PUSHAD(const X86::Instruction&) override; virtual void PUSHF(const X86::Instruction&) override; @@ -882,6 +930,7 @@ private: virtual void PUSH_imm8(const X86::Instruction&) override; virtual void PUSH_reg16(const X86::Instruction&) override; virtual void PUSH_reg32(const X86::Instruction&) override; + virtual void PXOR_mm1_mm2m64(const X86::Instruction&) override; virtual void RCL_RM16_1(const X86::Instruction&) override; virtual void RCL_RM16_CL(const X86::Instruction&) override; virtual void RCL_RM16_imm8(const X86::Instruction&) override; diff --git a/Userland/Libraries/LibX86/Instruction.cpp b/Userland/Libraries/LibX86/Instruction.cpp index 7c2a171424..bbb9802711 100644 --- a/Userland/Libraries/LibX86/Instruction.cpp +++ b/Userland/Libraries/LibX86/Instruction.cpp @@ -62,6 +62,7 @@ static void build(InstructionDescriptor* table, u8 op, const char* mnemonic, Ins case OP_imm8_EAX: case OP_RM16_reg16_imm8: case OP_RM32_reg32_imm8: + case OP_mm1_imm8: d.imm1_bytes = 1; break; case OP_reg16_RM16_imm16: @@ -142,6 +143,7 @@ static void build(InstructionDescriptor* table, u8 op, const char* mnemonic, Ins case OP_reg16_RM8: case OP_reg32_RM8: case OP_mm1_mm2m64: + case OP_mm1_mm2m32: case OP_mm1m64_mm2: case __EndFormatsWithRMByte: case OP_CS: @@ -796,7 +798,34 @@ static void build_slash_reg(u8 op, u8 slash, const char* mnemonic, InstructionFo build_0f(0x4E, "CMOVNG", OP_reg16_RM16, &Interpreter::CMOVcc_reg16_RM16, OP_reg32_RM32, &Interpreter::CMOVcc_reg32_RM32); build_0f(0x4F, "CMOVG", OP_reg16_RM16, &Interpreter::CMOVcc_reg16_RM16, OP_reg32_RM32, &Interpreter::CMOVcc_reg32_RM32); + build_0f(0x60, "PUNPCKLBW", OP_mm1_mm2m32, &Interpreter::PUNPCKLBW_mm1_mm2m32); + build_0f(0x61, "PUNPCKLWD", OP_mm1_mm2m32, &Interpreter::PUNPCKLWD_mm1_mm2m32); + build_0f(0x62, "PUNPCKLDQ", OP_mm1_mm2m32, &Interpreter::PUNPCKLDQ_mm1_mm2m32); + build_0f(0x63, "PACKSSWB", OP_mm1_mm2m64, &Interpreter::PACKSSWB_mm1_mm2m64); + build_0f(0x64, "PCMPGTB", OP_mm1_mm2m64, &Interpreter::PCMPGTB_mm1_mm2m64); + build_0f(0x65, "PCMPGTW", OP_mm1_mm2m64, &Interpreter::PCMPGTW_mm1_mm2m64); + build_0f(0x66, "PCMPGTD", OP_mm1_mm2m64, &Interpreter::PCMPGTD_mm1_mm2m64); + build_0f(0x67, "PACKUSWB", OP_mm1_mm2m64, &Interpreter::PACKUSWB_mm1_mm2m64); + build_0f(0x68, "PUNPCKHBW", OP_mm1_mm2m64, &Interpreter::PUNPCKHBW_mm1_mm2m64); + build_0f(0x69, "PUNPCKHWD", OP_mm1_mm2m64, &Interpreter::PUNPCKHWD_mm1_mm2m64); + build_0f(0x6A, "PUNPCKHDQ", OP_mm1_mm2m64, &Interpreter::PUNPCKHDQ_mm1_mm2m64); + build_0f(0x6B, "PACKSSDW", OP_mm1_mm2m64, &Interpreter::PACKSSDW_mm1_mm2m64); build_0f(0x6F, "MOVQ", OP_mm1_mm2m64, &Interpreter::MOVQ_mm1_mm2m64); + + build_0f_slash(0x71, 2, "PSRLW", OP_mm1_imm8, &Interpreter::PSRLW_mm1_mm2m64); + build_0f_slash(0x71, 4, "PSRAW", OP_mm1_imm8, &Interpreter::PSRAW_mm1_imm8); + build_0f_slash(0x71, 6, "PSLLW", OP_mm1_imm8, &Interpreter::PSLLD_mm1_imm8); + + build_0f_slash(0x72, 2, "PSRLD", OP_mm1_imm8, &Interpreter::PSRLD_mm1_mm2m64); + build_0f_slash(0x72, 4, "PSRAD", OP_mm1_imm8, &Interpreter::PSRAD_mm1_imm8); + build_0f_slash(0x72, 6, "PSLLW", OP_mm1_imm8, &Interpreter::PSLLW_mm1_imm8); + + build_0f_slash(0x73, 2, "PSRLQ", OP_mm1_imm8, &Interpreter::PSRLQ_mm1_mm2m64); + build_0f_slash(0x73, 6, "PSLLQ", OP_mm1_imm8, &Interpreter::PSLLQ_mm1_imm8); + + build_0f(0x74, "PCMPEQB", OP_mm1_mm2m64, &Interpreter::PCMPEQB_mm1_mm2m64); + build_0f(0x76, "PCMPEQD", OP_mm1_mm2m64, &Interpreter::PCMPEQD_mm1_mm2m64); + build_0f(0x75, "PCMPEQW", OP_mm1_mm2m64, &Interpreter::PCMPEQW_mm1_mm2m64); build_0f(0x77, "EMMS", OP, &Interpreter::EMMS); build_0f(0x7F, "MOVQ", OP_mm1m64_mm2, &Interpreter::MOVQ_mm1_m64_mm2); @@ -866,6 +895,34 @@ static void build_slash_reg(u8 op, u8 slash, const char* mnemonic, InstructionFo for (u8 i = 0xc8; i <= 0xcf; ++i) build_0f(i, "BSWAP", OP_reg32, &Interpreter::BSWAP_reg32); + build_0f(0xD1, "PSRLW", OP_mm1_mm2m64, &Interpreter::PSRLW_mm1_mm2m64); + build_0f(0xD2, "PSRLD", OP_mm1_mm2m64, &Interpreter::PSRLD_mm1_mm2m64); + build_0f(0xD3, "PSRLQ", OP_mm1_mm2m64, &Interpreter::PSRLQ_mm1_mm2m64); + build_0f(0xD5, "PMULLW", OP_mm1_mm2m64, &Interpreter::PMULLW_mm1_mm2m64); + build_0f(0xDB, "PAND", OP_mm1_mm2m64, &Interpreter::PAND_mm1_mm2m64); + build_0f(0xD8, "PSUBUSB", OP_mm1_mm2m64, &Interpreter::PSUBUSB_mm1_mm2m64); + build_0f(0xD9, "PSUBUSW", OP_mm1_mm2m64, &Interpreter::PSUBUSW_mm1_mm2m64); + build_0f(0xDC, "PADDUSB", OP_mm1_mm2m64, &Interpreter::PADDUSB_mm1_mm2m64); + build_0f(0xDD, "PADDUSW", OP_mm1_mm2m64, &Interpreter::PADDUSW_mm1_mm2m64); + build_0f(0xDF, "PANDN", OP_mm1_mm2m64, &Interpreter::PANDN_mm1_mm2m64); + + build_0f(0xE5, "PMULHW", OP_mm1_mm2m64, &Interpreter::PMULHW_mm1_mm2m64); + build_0f(0xEB, "POR", OP_mm1_mm2m64, &Interpreter::POR_mm1_mm2m64); + build_0f(0xE1, "PSRAW", OP_mm1_mm2m64, &Interpreter::PSRAW_mm1_mm2m64); + build_0f(0xE2, "PSRAD", OP_mm1_mm2m64, &Interpreter::PSRAD_mm1_mm2m64); + build_0f(0xE8, "PSUBSB", OP_mm1_mm2m64, &Interpreter::PSUBSB_mm1_mm2m64); + build_0f(0xE9, "PSUBSW", OP_mm1_mm2m64, &Interpreter::PSUBSW_mm1_mm2m64); + build_0f(0xEC, "PADDSB", OP_mm1_mm2m64, &Interpreter::PADDSB_mm1_mm2m64); + build_0f(0xED, "PADDSW", OP_mm1_mm2m64, &Interpreter::PADDSW_mm1_mm2m64); + build_0f(0xEF, "PXOR", OP_mm1_mm2m64, &Interpreter::PXOR_mm1_mm2m64); + + build_0f(0xF1, "PSLLW", OP_mm1_mm2m64, &Interpreter::PSLLW_mm1_mm2m64); + build_0f(0xF2, "PSLLD", OP_mm1_mm2m64, &Interpreter::PSLLD_mm1_mm2m64); + build_0f(0xF3, "PSLLQ", OP_mm1_mm2m64, &Interpreter::PSLLQ_mm1_mm2m64); + build_0f(0xF5, "PMADDWD", OP_mm1_mm2m64, &Interpreter::PMADDWD_mm1_mm2m64); + build_0f(0xF8, "PSUBB", OP_mm1_mm2m64, &Interpreter::PSUBB_mm1_mm2m64); + build_0f(0xF9, "PSUBW", OP_mm1_mm2m64, &Interpreter::PSUBW_mm1_mm2m64); + build_0f(0xFA, "PSUBD", OP_mm1_mm2m64, &Interpreter::PSUBD_mm1_mm2m64); build_0f(0xFC, "PADDB", OP_mm1_mm2m64, &Interpreter::PADDB_mm1_mm2m64); build_0f(0xFD, "PADDW", OP_mm1_mm2m64, &Interpreter::PADDW_mm1_mm2m64); build_0f(0xFE, "PADDD", OP_mm1_mm2m64, &Interpreter::PADDD_mm1_mm2m64); @@ -1777,6 +1834,18 @@ void Instruction::to_string_internal(StringBuilder& builder, u32 origin, const S append_reg32(); append(", cl"); break; + case OP_mm1_imm8: + append_mnemonic_space(); + append_mm(); + append(", "); + append_imm8(); + break; + case OP_mm1_mm2m32: + append_mnemonic_space(); + append_mm(); + append(", "); + append_rm32(); + break; case OP_mm1_mm2m64: append_mnemonic_space(); append_mm(); diff --git a/Userland/Libraries/LibX86/Instruction.h b/Userland/Libraries/LibX86/Instruction.h index fed65d3593..b65b573e26 100644 --- a/Userland/Libraries/LibX86/Instruction.h +++ b/Userland/Libraries/LibX86/Instruction.h @@ -104,6 +104,8 @@ enum InstructionFormat { OP_RM16_reg16_CL, OP_RM32_reg32_CL, OP_mm1_mm2m64, + OP_mm1_mm2m32, + OP_mm1_imm8, OP_mm1m64_mm2, __EndFormatsWithRMByte, diff --git a/Userland/Libraries/LibX86/Interpreter.h b/Userland/Libraries/LibX86/Interpreter.h index 546b7c379f..78a990b478 100644 --- a/Userland/Libraries/LibX86/Interpreter.h +++ b/Userland/Libraries/LibX86/Interpreter.h @@ -396,9 +396,27 @@ public: virtual void OUT_imm8_AL(const Instruction&) = 0; virtual void OUT_imm8_AX(const Instruction&) = 0; virtual void OUT_imm8_EAX(const Instruction&) = 0; + virtual void PACKSSDW_mm1_mm2m64(const Instruction&) = 0; + virtual void PACKSSWB_mm1_mm2m64(const Instruction&) = 0; + virtual void PACKUSWB_mm1_mm2m64(const Instruction&) = 0; virtual void PADDB_mm1_mm2m64(const Instruction&) = 0; virtual void PADDW_mm1_mm2m64(const Instruction&) = 0; virtual void PADDD_mm1_mm2m64(const Instruction&) = 0; + virtual void PADDSB_mm1_mm2m64(const Instruction&) = 0; + virtual void PADDSW_mm1_mm2m64(const Instruction&) = 0; + virtual void PADDUSB_mm1_mm2m64(const Instruction&) = 0; + virtual void PADDUSW_mm1_mm2m64(const Instruction&) = 0; + virtual void PAND_mm1_mm2m64(const Instruction&) = 0; + virtual void PANDN_mm1_mm2m64(const Instruction&) = 0; + virtual void PCMPEQB_mm1_mm2m64(const Instruction&) = 0; + virtual void PCMPEQW_mm1_mm2m64(const Instruction&) = 0; + virtual void PCMPEQD_mm1_mm2m64(const Instruction&) = 0; + virtual void PCMPGTB_mm1_mm2m64(const Instruction&) = 0; + virtual void PCMPGTW_mm1_mm2m64(const Instruction&) = 0; + virtual void PCMPGTD_mm1_mm2m64(const Instruction&) = 0; + virtual void PMADDWD_mm1_mm2m64(const Instruction&) = 0; + virtual void PMULHW_mm1_mm2m64(const Instruction&) = 0; + virtual void PMULLW_mm1_mm2m64(const Instruction&) = 0; virtual void POPA(const Instruction&) = 0; virtual void POPAD(const Instruction&) = 0; virtual void POPF(const Instruction&) = 0; @@ -412,6 +430,36 @@ public: virtual void POP_SS(const Instruction&) = 0; virtual void POP_reg16(const Instruction&) = 0; virtual void POP_reg32(const Instruction&) = 0; + virtual void POR_mm1_mm2m64(const Instruction&) = 0; + virtual void PSLLW_mm1_mm2m64(const Instruction&) = 0; + virtual void PSLLW_mm1_imm8(const Instruction&) = 0; + virtual void PSLLD_mm1_mm2m64(const Instruction&) = 0; + virtual void PSLLD_mm1_imm8(const Instruction&) = 0; + virtual void PSLLQ_mm1_mm2m64(const Instruction&) = 0; + virtual void PSLLQ_mm1_imm8(const Instruction&) = 0; + virtual void PSRAW_mm1_mm2m64(const Instruction&) = 0; + virtual void PSRAW_mm1_imm8(const Instruction&) = 0; + virtual void PSRAD_mm1_mm2m64(const Instruction&) = 0; + virtual void PSRAD_mm1_imm8(const Instruction&) = 0; + virtual void PSRLW_mm1_mm2m64(const Instruction&) = 0; + virtual void PSRLW_mm1_imm8(const Instruction&) = 0; + virtual void PSRLD_mm1_mm2m64(const Instruction&) = 0; + virtual void PSRLD_mm1_imm8(const Instruction&) = 0; + virtual void PSRLQ_mm1_mm2m64(const Instruction&) = 0; + virtual void PSRLQ_mm1_imm8(const Instruction&) = 0; + virtual void PSUBB_mm1_mm2m64(const Instruction&) = 0; + virtual void PSUBW_mm1_mm2m64(const Instruction&) = 0; + virtual void PSUBD_mm1_mm2m64(const Instruction&) = 0; + virtual void PSUBSB_mm1_mm2m64(const Instruction&) = 0; + virtual void PSUBSW_mm1_mm2m64(const Instruction&) = 0; + virtual void PSUBUSB_mm1_mm2m64(const Instruction&) = 0; + virtual void PSUBUSW_mm1_mm2m64(const Instruction&) = 0; + virtual void PUNPCKHBW_mm1_mm2m64(const Instruction&) = 0; + virtual void PUNPCKHWD_mm1_mm2m64(const Instruction&) = 0; + virtual void PUNPCKHDQ_mm1_mm2m64(const Instruction&) = 0; + virtual void PUNPCKLBW_mm1_mm2m32(const Instruction&) = 0; + virtual void PUNPCKLWD_mm1_mm2m32(const Instruction&) = 0; + virtual void PUNPCKLDQ_mm1_mm2m32(const Instruction&) = 0; virtual void PUSHA(const Instruction&) = 0; virtual void PUSHAD(const Instruction&) = 0; virtual void PUSHF(const Instruction&) = 0; @@ -430,6 +478,7 @@ public: virtual void PUSH_imm8(const Instruction&) = 0; virtual void PUSH_reg16(const Instruction&) = 0; virtual void PUSH_reg32(const Instruction&) = 0; + virtual void PXOR_mm1_mm2m64(const Instruction&) = 0; virtual void RCL_RM16_1(const Instruction&) = 0; virtual void RCL_RM16_CL(const Instruction&) = 0; virtual void RCL_RM16_imm8(const Instruction&) = 0;