mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 06:27:45 +00:00
LibX86: Disassemble most FPU instructions starting with D9
Some of these don't just use the REG bits of the mod/rm byte as slashes, but also the R/M bits to have up to 9 different instructions per opcode/slash combination (1 opcode requires that MOD is != 11, the other 8 have MODE == 11). This is done by making the slashes table two levels deep for these cases. Some of this is cosmetic (e.g "FST st0" has no effect already, but its bit pattern gets disassembled as "FNOP"), but for most uses it isn't. FSTENV and FSTCW have an extraordinary 0x9b prefix. This is not yet handled in this patch.
This commit is contained in:
parent
6f12ab3ced
commit
c99a3efc5b
5 changed files with 209 additions and 13 deletions
|
@ -164,6 +164,42 @@ public:
|
|||
virtual void FSUBR_RM32(const Instruction&) = 0;
|
||||
virtual void FDIV_RM32(const Instruction&) = 0;
|
||||
virtual void FDIVR_RM32(const Instruction&) = 0;
|
||||
virtual void FLD_RM32(const Instruction&) = 0;
|
||||
virtual void FXCH(const Instruction&) = 0;
|
||||
virtual void FST_RM32(const Instruction&) = 0;
|
||||
virtual void FNOP(const Instruction&) = 0;
|
||||
virtual void FSTP_RM32(const Instruction&) = 0;
|
||||
virtual void FLDENV(const Instruction&) = 0;
|
||||
virtual void FCHS(const Instruction&) = 0;
|
||||
virtual void FABS(const Instruction&) = 0;
|
||||
virtual void FTST(const Instruction&) = 0;
|
||||
virtual void FXAM(const Instruction&) = 0;
|
||||
virtual void FLDCW(const Instruction&) = 0;
|
||||
virtual void FLD1(const Instruction&) = 0;
|
||||
virtual void FLDL2T(const Instruction&) = 0;
|
||||
virtual void FLDL2E(const Instruction&) = 0;
|
||||
virtual void FLDPI(const Instruction&) = 0;
|
||||
virtual void FLDLG2(const Instruction&) = 0;
|
||||
virtual void FLDLN2(const Instruction&) = 0;
|
||||
virtual void FLDZ(const Instruction&) = 0;
|
||||
virtual void FNSTENV(const Instruction&) = 0;
|
||||
virtual void F2XM1(const Instruction&) = 0;
|
||||
virtual void FYL2X(const Instruction&) = 0;
|
||||
virtual void FPTAN(const Instruction&) = 0;
|
||||
virtual void FPATAN(const Instruction&) = 0;
|
||||
virtual void FXTRACT(const Instruction&) = 0;
|
||||
virtual void FPREM1(const Instruction&) = 0;
|
||||
virtual void FDECSTP(const Instruction&) = 0;
|
||||
virtual void FINCSTP(const Instruction&) = 0;
|
||||
virtual void FNSTCW(const Instruction&) = 0;
|
||||
virtual void FPREM(const Instruction&) = 0;
|
||||
virtual void FYL2XP1(const Instruction&) = 0;
|
||||
virtual void FSQRT(const Instruction&) = 0;
|
||||
virtual void FSINCOS(const Instruction&) = 0;
|
||||
virtual void FRNDINT(const Instruction&) = 0;
|
||||
virtual void FSCALE(const Instruction&) = 0;
|
||||
virtual void FSIN(const Instruction&) = 0;
|
||||
virtual void FCOS(const Instruction&) = 0;
|
||||
virtual void FADD_RM64(const Instruction&) = 0;
|
||||
virtual void FMUL_RM64(const Instruction&) = 0;
|
||||
virtual void FCOM_RM64(const Instruction&) = 0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue