1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 16:17:45 +00:00

LibX86: Disassemble most remaining FPU instructions

Some of the remaining instructions have different behavior for
register and non-register ops.  Since we already have the
two-level flags tables, model this by setting all handlers in
the two-level table to the register op handler, while the
first-level flags table stores the action for the non-reg handler.
This commit is contained in:
Nico Weber 2020-07-28 17:05:57 -04:00 committed by Andreas Kling
parent 06c59cce6f
commit 8593bdb711
5 changed files with 350 additions and 9 deletions

View file

@ -618,6 +618,36 @@ private:
virtual void FSCALE(const X86::Instruction&) override;
virtual void FSIN(const X86::Instruction&) override;
virtual void FCOS(const X86::Instruction&) override;
virtual void FIADD_RM32(const X86::Instruction&) override;
virtual void FCMOVB(const X86::Instruction&) override;
virtual void FIMUL_RM32(const X86::Instruction&) override;
virtual void FCMOVE(const X86::Instruction&) override;
virtual void FICOM_RM32(const X86::Instruction&) override;
virtual void FCMOVBE(const X86::Instruction&) override;
virtual void FICOMP_RM32(const X86::Instruction&) override;
virtual void FCMOVU(const X86::Instruction&) override;
virtual void FISUB_RM32(const X86::Instruction&) override;
virtual void FISUBR_RM32(const X86::Instruction&) override;
virtual void FUCOMPP(const X86::Instruction&) override;
virtual void FIDIV_RM32(const X86::Instruction&) override;
virtual void FIDIVR_RM32(const X86::Instruction&) override;
virtual void FILD_RM32(const X86::Instruction&) override;
virtual void FCMOVNB(const X86::Instruction&) override;
virtual void FISTTP_RM32(const X86::Instruction&) override;
virtual void FCMOVNE(const X86::Instruction&) override;
virtual void FIST_RM32(const X86::Instruction&) override;
virtual void FCMOVNBE(const X86::Instruction&) override;
virtual void FISTP_RM32(const X86::Instruction&) override;
virtual void FCMOVNU(const X86::Instruction&) override;
virtual void FNENI(const X86::Instruction&) override;
virtual void FNDISI(const X86::Instruction&) override;
virtual void FNCLEX(const X86::Instruction&) override;
virtual void FNINIT(const X86::Instruction&) override;
virtual void FNSETPM(const X86::Instruction&) override;
virtual void FLD_RM80(const X86::Instruction&) override;
virtual void FUCOMI(const X86::Instruction&) override;
virtual void FCOMI(const X86::Instruction&) override;
virtual void FSTP_RM80(const X86::Instruction&) override;
virtual void FADD_RM64(const X86::Instruction&) override;
virtual void FMUL_RM64(const X86::Instruction&) override;
virtual void FCOM_RM64(const X86::Instruction&) override;
@ -626,6 +656,43 @@ private:
virtual void FSUBR_RM64(const X86::Instruction&) override;
virtual void FDIV_RM64(const X86::Instruction&) override;
virtual void FDIVR_RM64(const X86::Instruction&) override;
virtual void FLD_RM64(const X86::Instruction&) override;
virtual void FFREE(const X86::Instruction&) override;
virtual void FISTTP_RM64(const X86::Instruction&) override;
virtual void FST_RM64(const X86::Instruction&) override;
virtual void FSTP_RM64(const X86::Instruction&) override;
virtual void FRSTOR(const X86::Instruction&) override;
virtual void FUCOM(const X86::Instruction&) override;
virtual void FUCOMP(const X86::Instruction&) override;
virtual void FNSAVE(const X86::Instruction&) override;
virtual void FNSTSW(const X86::Instruction&) override;
virtual void FIADD_RM16(const X86::Instruction&) override;
virtual void FADDP(const X86::Instruction&) override;
virtual void FIMUL_RM16(const X86::Instruction&) override;
virtual void FMULP(const X86::Instruction&) override;
virtual void FICOM_RM16(const X86::Instruction&) override;
virtual void FICOMP_RM16(const X86::Instruction&) override;
virtual void FCOMPP(const X86::Instruction&) override;
virtual void FISUB_RM16(const X86::Instruction&) override;
virtual void FSUBRP(const X86::Instruction&) override;
virtual void FISUBR_RM16(const X86::Instruction&) override;
virtual void FSUBP(const X86::Instruction&) override;
virtual void FIDIV_RM16(const X86::Instruction&) override;
virtual void FDIVRP(const X86::Instruction&) override;
virtual void FIDIVR_RM16(const X86::Instruction&) override;
virtual void FDIVP(const X86::Instruction&) override;
virtual void FILD_RM16(const X86::Instruction&) override;
virtual void FFREEP(const X86::Instruction&) override;
virtual void FISTTP_RM16(const X86::Instruction&) override;
virtual void FIST_RM16(const X86::Instruction&) override;
virtual void FISTP_RM16(const X86::Instruction&) override;
virtual void FBLD_M80(const X86::Instruction&) override;
virtual void FNSTSW_AX(const X86::Instruction&) override;
virtual void FILD_RM64(const X86::Instruction&) override;
virtual void FUCOMIP(const X86::Instruction&) override;
virtual void FBSTP_M80(const X86::Instruction&) override;
virtual void FCOMIP(const X86::Instruction&) override;
virtual void FISTP_RM64(const X86::Instruction&) override;
virtual void HLT(const X86::Instruction&) override;
virtual void IDIV_RM16(const X86::Instruction&) override;
virtual void IDIV_RM32(const X86::Instruction&) override;