1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 06:47:34 +00:00

LibX86: Support SSE2 :^)

This allows disassembly of binaries with SSE2 instructions in them.
SSE2 also extends all MMX instructions without affecting the mnemonic,
therefore these are just directed to the same function for now.
The UserspaceEmulator does not know this as of
this commit.
This commit is contained in:
Hendiadyoin1 2022-04-06 15:51:48 +02:00 committed by Andreas Kling
parent 5987f0a8f5
commit 3e3b677852
5 changed files with 414 additions and 35 deletions

View file

@ -1188,6 +1188,80 @@ private:
virtual void PSADBB_xmm1_xmm2m128(X86::Instruction const&) override;
virtual void MASKMOVQ_mm1_mm2m64(X86::Instruction const&) override;
virtual void MOVUPD_xmm1_xmm2m128(X86::Instruction const&) override;
virtual void MOVSD_xmm1_xmm2m32(X86::Instruction const&) override;
virtual void MOVUPD_xmm1m128_xmm2(X86::Instruction const&) override;
virtual void MOVSD_xmm1m32_xmm2(X86::Instruction const&) override;
virtual void MOVLPD_xmm1_m64(X86::Instruction const&) override;
virtual void MOVLPD_m64_xmm2(X86::Instruction const&) override;
virtual void UNPCKLPD_xmm1_xmm2m128(X86::Instruction const&) override;
virtual void UNPCKHPD_xmm1_xmm2m128(X86::Instruction const&) override;
virtual void MOVHPD_xmm1_xmm2m64(X86::Instruction const&) override;
virtual void MOVAPD_xmm1_xmm2m128(X86::Instruction const&) override;
virtual void MOVAPD_xmm1m128_xmm2(X86::Instruction const&) override;
virtual void CVTPI2PD_xmm1_mm2m64(X86::Instruction const&) override;
virtual void CVTSI2SD_xmm1_rm32(X86::Instruction const&) override;
virtual void CVTTPD2PI_mm1_xmm2m128(X86::Instruction const&) override;
virtual void CVTTSS2SI_r32_xmm2m64(X86::Instruction const&) override;
virtual void CVTPD2PI_xmm1_mm2m128(X86::Instruction const&) override;
virtual void CVTSD2SI_xmm1_rm64(X86::Instruction const&) override;
virtual void UCOMISD_xmm1_xmm2m64(X86::Instruction const&) override;
virtual void COMISD_xmm1_xmm2m64(X86::Instruction const&) override;
virtual void MOVMSKPD_reg_xmm(X86::Instruction const&) override;
virtual void SQRTPD_xmm1_xmm2m128(X86::Instruction const&) override;
virtual void SQRTSD_xmm1_xmm2m32(X86::Instruction const&) override;
virtual void ANDPD_xmm1_xmm2m128(X86::Instruction const&) override;
virtual void ANDNPD_xmm1_xmm2m128(X86::Instruction const&) override;
virtual void ORPD_xmm1_xmm2m128(X86::Instruction const&) override;
virtual void XORPD_xmm1_xmm2m128(X86::Instruction const&) override;
virtual void ADDPD_xmm1_xmm2m128(X86::Instruction const&) override;
virtual void ADDSD_xmm1_xmm2m32(X86::Instruction const&) override;
virtual void MULPD_xmm1_xmm2m128(X86::Instruction const&) override;
virtual void MULSD_xmm1_xmm2m32(X86::Instruction const&) override;
virtual void CVTPS2PD_xmm1_xmm2m64(X86::Instruction const&) override;
virtual void CVTPD2PS_xmm1_xmm2m128(X86::Instruction const&) override;
virtual void CVTSS2SD_xmm1_xmm2m32(X86::Instruction const&) override;
virtual void CVTSD2SS_xmm1_xmm2m64(X86::Instruction const&) override;
virtual void CVTDQ2PS_xmm1_xmm2m128(X86::Instruction const&) override;
virtual void CVTPS2DQ_xmm1_xmm2m128(X86::Instruction const&) override;
virtual void CVTTPS2DQ_xmm1_xmm2m128(X86::Instruction const&) override;
virtual void SUBPD_xmm1_xmm2m128(X86::Instruction const&) override;
virtual void SUBSD_xmm1_xmm2m32(X86::Instruction const&) override;
virtual void MINPD_xmm1_xmm2m128(X86::Instruction const&) override;
virtual void MINSD_xmm1_xmm2m32(X86::Instruction const&) override;
virtual void DIVPD_xmm1_xmm2m128(X86::Instruction const&) override;
virtual void DIVSD_xmm1_xmm2m32(X86::Instruction const&) override;
virtual void MAXPD_xmm1_xmm2m128(X86::Instruction const&) override;
virtual void MAXSD_xmm1_xmm2m32(X86::Instruction const&) override;
virtual void PUNPCKLQDQ_xmm1_xmm2m128(X86::Instruction const&) override;
virtual void PUNPCKHQDQ_xmm1_xmm2m128(X86::Instruction const&) override;
virtual void MOVDQA_xmm1_xmm2m128(X86::Instruction const&) override;
virtual void MOVDQU_xmm1_xmm2m128(X86::Instruction const&) override;
virtual void PSHUFD_xmm1_xmm2m128_imm8(X86::Instruction const&) override;
virtual void PSHUFHW_xmm1_xmm2m128_imm8(X86::Instruction const&) override;
virtual void PSHUFLW_xmm1_xmm2m128_imm8(X86::Instruction const&) override;
virtual void PSRLQ_xmm1_imm8(X86::Instruction const&) override;
virtual void PSRLDQ_xmm1_imm8(X86::Instruction const&) override;
virtual void PSLLQ_xmm1_imm8(X86::Instruction const&) override;
virtual void PSLLDQ_xmm1_imm8(X86::Instruction const&) override;
virtual void MOVD_rm32_xmm2(X86::Instruction const&) override;
virtual void MOVQ_xmm1_xmm2m128(X86::Instruction const&) override;
virtual void MOVDQA_xmm1m128_xmm2(X86::Instruction const&) override;
virtual void MOVDQU_xmm1m128_xmm2(X86::Instruction const&) override;
virtual void CMPPD_xmm1_xmm2m128_imm8(X86::Instruction const&) override;
virtual void CMPSD_xmm1_xmm2m32_imm8(X86::Instruction const&) override;
virtual void SHUFPD_xmm1_xmm2m128_imm8(X86::Instruction const&) override;
virtual void PADDQ_mm1_mm2m64(X86::Instruction const&) override;
virtual void MOVQ_xmm1m128_xmm2(X86::Instruction const&) override;
virtual void MOVQ2DQ_xmm_mm(X86::Instruction const&) override;
virtual void MOVDQ2Q_mm_xmm(X86::Instruction const&) override;
virtual void CVTTPD2DQ_xmm1_xmm2m128(X86::Instruction const&) override;
virtual void CVTPD2DQ_xmm1_xmm2m128(X86::Instruction const&) override;
virtual void CVTDQ2PD_xmm1_xmm2m64(X86::Instruction const&) override;
virtual void PMULUDQ_mm1_mm2m64(X86::Instruction const&) override;
virtual void PMULUDQ_mm1_mm2m128(X86::Instruction const&) override;
virtual void PSUBQ_mm1_mm2m64(X86::Instruction const&) override;
virtual void wrap_0xC0(const X86::Instruction&) override;
virtual void wrap_0xC1_16(const X86::Instruction&) override;
virtual void wrap_0xC1_32(const X86::Instruction&) override;