Skip to content

Commit

Permalink
LibX86+UserspaceEmulator: Add MMX insns prototypes
Browse files Browse the repository at this point in the history
  • Loading branch information
Hendiadyoin1 authored and linusg committed May 1, 2021
1 parent 38fe67a commit f6aad70
Show file tree
Hide file tree
Showing 5 changed files with 220 additions and 0 deletions.
51 changes: 51 additions & 0 deletions Userland/DevTools/UserspaceEmulator/SoftCPU.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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&)
{
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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<typename T, bool cf>
ALWAYS_INLINE static T op_rcl_impl(SoftCPU& cpu, T data, ValueWithShadow<u8> steps)
{
Expand Down
49 changes: 49 additions & 0 deletions Userland/DevTools/UserspaceEmulator/SoftCPU.h
Original file line number Diff line number Diff line change
Expand Up @@ -848,9 +848,27 @@ class SoftCPU final
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;
Expand All @@ -864,6 +882,36 @@ class SoftCPU final
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;
Expand All @@ -882,6 +930,7 @@ class SoftCPU final
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;
Expand Down
69 changes: 69 additions & 0 deletions Userland/Libraries/LibX86/Instruction.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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();
Expand Down
2 changes: 2 additions & 0 deletions Userland/Libraries/LibX86/Instruction.h
Original file line number Diff line number Diff line change
Expand Up @@ -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,

Expand Down
49 changes: 49 additions & 0 deletions Userland/Libraries/LibX86/Interpreter.h
Original file line number Diff line number Diff line change
Expand Up @@ -396,9 +396,27 @@ class Interpreter {
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;
Expand All @@ -412,6 +430,36 @@ class Interpreter {
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;
Expand All @@ -430,6 +478,7 @@ class Interpreter {
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;
Expand Down

0 comments on commit f6aad70

Please sign in to comment.