mirror of
https://github.com/netwide-assembler/nasm.git
synced 2025-03-19 18:00:23 +08:00
BR 993895: Support zero-operand floating-point insn
Support the zero-operand form of floating-point instructions. Note that in most cases, the form generated is actually the "popping" form, e.g. "FADD" becomes "FADDP st0,st1". This is in accordance with the Intel documentation. "FADDP" is also supported.
This commit is contained in:
parent
428fd671ec
commit
7812644665
39
insns.dat
39
insns.dat
@ -313,8 +313,10 @@ FADD fpureg|to \1\xDC\10\xC0 8086,FPU
|
||||
FADD fpureg \1\xD8\10\xC0 8086,FPU
|
||||
FADD fpureg,fpu0 \1\xDC\10\xC0 8086,FPU
|
||||
FADD fpu0,fpureg \1\xD8\11\xC0 8086,FPU
|
||||
FADD void \2\xDE\xC1 8086,FPU,ND
|
||||
FADDP fpureg \1\xDE\10\xC0 8086,FPU
|
||||
FADDP fpureg,fpu0 \1\xDE\10\xC0 8086,FPU
|
||||
FADDP void \2\xDE\xC1 8086,FPU,ND
|
||||
FBLD mem80 \1\xDF\204 8086,FPU
|
||||
FBLD mem \1\xDF\204 8086,FPU
|
||||
FBSTP mem80 \1\xDF\206 8086,FPU
|
||||
@ -323,32 +325,44 @@ FCHS void \2\xD9\xE0 8086,FPU
|
||||
FCLEX void \3\x9B\xDB\xE2 8086,FPU
|
||||
FCMOVB fpureg \1\xDA\10\xC0 P6,FPU
|
||||
FCMOVB fpu0,fpureg \1\xDA\11\xC0 P6,FPU
|
||||
FCMOVB void \2\xDA\xC1 P6,FPU,ND
|
||||
FCMOVBE fpureg \1\xDA\10\xD0 P6,FPU
|
||||
FCMOVBE fpu0,fpureg \1\xDA\11\xD0 P6,FPU
|
||||
FCMOVBE void \2\xDA\xD1 P6,FPU,ND
|
||||
FCMOVE fpureg \1\xDA\10\xC8 P6,FPU
|
||||
FCMOVE fpu0,fpureg \1\xDA\11\xC8 P6,FPU
|
||||
FCMOVE void \2\xDA\xC9 P6,FPU,ND
|
||||
FCMOVNB fpureg \1\xDB\10\xC0 P6,FPU
|
||||
FCMOVNB fpu0,fpureg \1\xDB\11\xC0 P6,FPU
|
||||
FCMOVNB void \2\xDB\xC1 P6,FPU,ND
|
||||
FCMOVNBE fpureg \1\xDB\10\xD0 P6,FPU
|
||||
FCMOVNBE fpu0,fpureg \1\xDB\11\xD0 P6,FPU
|
||||
FCMOVNBE void \2\xDB\xD1 P6,FPU,ND
|
||||
FCMOVNE fpureg \1\xDB\10\xC8 P6,FPU
|
||||
FCMOVNE fpu0,fpureg \1\xDB\11\xC8 P6,FPU
|
||||
FCMOVNE void \2\xDB\xC9 P6,FPU,ND
|
||||
FCMOVNU fpureg \1\xDB\10\xD8 P6,FPU
|
||||
FCMOVNU fpu0,fpureg \1\xDB\11\xD8 P6,FPU
|
||||
FCMOVNU void \2\xDB\xD9 P6,FPU,ND
|
||||
FCMOVU fpureg \1\xDA\10\xD8 P6,FPU
|
||||
FCMOVU fpu0,fpureg \1\xDA\11\xD8 P6,FPU
|
||||
FCMOVU void \2\xDA\xD9 P6,FPU,ND
|
||||
FCOM mem32 \1\xD8\202 8086,FPU
|
||||
FCOM mem64 \1\xDC\202 8086,FPU
|
||||
FCOM fpureg \1\xD8\10\xD0 8086,FPU
|
||||
FCOM fpu0,fpureg \1\xD8\11\xD0 8086,FPU
|
||||
FCOM void \2\xD8\xD1 8086,FPU,ND
|
||||
FCOMI fpureg \1\xDB\10\xF0 P6,FPU
|
||||
FCOMI fpu0,fpureg \1\xDB\11\xF0 P6,FPU
|
||||
FCOMI void \2\xDB\xF1 P6,FPU,ND
|
||||
FCOMIP fpureg \1\xDF\10\xF0 P6,FPU
|
||||
FCOMIP fpu0,fpureg \1\xDF\11\xF0 P6,FPU
|
||||
FCOMIP void \2\xDF\xF1 P6,FPU,ND
|
||||
FCOMP mem32 \1\xD8\203 8086,FPU
|
||||
FCOMP mem64 \1\xDC\203 8086,FPU
|
||||
FCOMP fpureg \1\xD8\10\xD8 8086,FPU
|
||||
FCOMP fpu0,fpureg \1\xD8\11\xD8 8086,FPU
|
||||
FCOMP void \2\xD8\xD9 8086,FPU,ND
|
||||
FCOMPP void \2\xDE\xD9 8086,FPU
|
||||
FCOS void \2\xD9\xFF 386,FPU
|
||||
FDECSTP void \2\xD9\xF6 8086,FPU
|
||||
@ -356,23 +370,29 @@ FDISI void \3\x9B\xDB\xE1 8086,FPU
|
||||
FDIV mem32 \1\xD8\206 8086,FPU
|
||||
FDIV mem64 \1\xDC\206 8086,FPU
|
||||
FDIV fpureg|to \1\xDC\10\xF8 8086,FPU
|
||||
FDIV fpureg,fpu0 \1\xDC\10\xF8 8086,FPU
|
||||
FDIV fpureg \1\xD8\10\xF0 8086,FPU
|
||||
FDIV fpureg,fpu0 \1\xDC\10\xF8 8086,FPU
|
||||
FDIV fpu0,fpureg \1\xD8\11\xF0 8086,FPU
|
||||
FDIVP fpureg,fpu0 \1\xDE\10\xF8 8086,FPU
|
||||
FDIV void \2\xDE\xF9 8086,FPU,ND
|
||||
FDIVP fpureg \1\xDE\10\xF8 8086,FPU
|
||||
FDIVP fpureg,fpu0 \1\xDE\10\xF8 8086,FPU
|
||||
FDIVP void \2\xDE\xF9 8086,FPU,ND
|
||||
FDIVR mem32 \1\xD8\207 8086,FPU
|
||||
FDIVR mem64 \1\xDC\207 8086,FPU
|
||||
FDIVR fpureg|to \1\xDC\10\xF0 8086,FPU
|
||||
FDIVR fpureg,fpu0 \1\xDC\10\xF0 8086,FPU
|
||||
FDIVR fpureg \1\xD8\10\xF8 8086,FPU
|
||||
FDIVR fpu0,fpureg \1\xD8\11\xF8 8086,FPU
|
||||
FDIVR void \2\xDE\xF1 8086,FPU,ND
|
||||
FDIVRP fpureg \1\xDE\10\xF0 8086,FPU
|
||||
FDIVRP fpureg,fpu0 \1\xDE\10\xF0 8086,FPU
|
||||
FDIVRP void \2\xDE\xF1 8086,FPU,ND
|
||||
FEMMS void \2\x0F\x0E PENT,3DNOW
|
||||
FENI void \3\x9B\xDB\xE0 8086,FPU
|
||||
FFREE fpureg \1\xDD\10\xC0 8086,FPU
|
||||
FFREE void \2\xDD\xC1 8086,FPU
|
||||
FFREEP fpureg \1\xDF\10\xC0 286,FPU,UNDOC
|
||||
FFREEP void \2\xDF\xC1 286,FPU,UNDOC
|
||||
FIADD mem32 \1\xDA\200 8086,FPU
|
||||
FIADD mem16 \1\xDE\200 8086,FPU
|
||||
FICOM mem32 \1\xDA\202 8086,FPU
|
||||
@ -406,6 +426,7 @@ FLD mem32 \1\xD9\200 8086,FPU
|
||||
FLD mem64 \1\xDD\200 8086,FPU
|
||||
FLD mem80 \1\xDB\205 8086,FPU
|
||||
FLD fpureg \1\xD9\10\xC0 8086,FPU
|
||||
FLD void \2\xD9\xC1 8086,FPU,ND
|
||||
FLD1 void \2\xD9\xE8 8086,FPU
|
||||
FLDCW mem \1\xD9\205 8086,FPU,SW
|
||||
FLDENV mem \1\xD9\204 8086,FPU
|
||||
@ -421,8 +442,10 @@ FMUL fpureg|to \1\xDC\10\xC8 8086,FPU
|
||||
FMUL fpureg,fpu0 \1\xDC\10\xC8 8086,FPU
|
||||
FMUL fpureg \1\xD8\10\xC8 8086,FPU
|
||||
FMUL fpu0,fpureg \1\xD8\11\xC8 8086,FPU
|
||||
FMUL void \2\xDE\xC9 8086,FPU,ND
|
||||
FMULP fpureg \1\xDE\10\xC8 8086,FPU
|
||||
FMULP fpureg,fpu0 \1\xDE\10\xC8 8086,FPU
|
||||
FMULP void \2\xDE\xC9 8086,FPU,ND
|
||||
FNCLEX void \2\xDB\xE2 8086,FPU
|
||||
FNDISI void \2\xDB\xE1 8086,FPU
|
||||
FNENI void \2\xDB\xE0 8086,FPU
|
||||
@ -448,12 +471,14 @@ FSQRT void \2\xD9\xFA 8086,FPU
|
||||
FST mem32 \1\xD9\202 8086,FPU
|
||||
FST mem64 \1\xDD\202 8086,FPU
|
||||
FST fpureg \1\xDD\10\xD0 8086,FPU
|
||||
FST void \2\xDD\xD1 8086,FPU,ND
|
||||
FSTCW mem \2\x9B\xD9\207 8086,FPU,SW
|
||||
FSTENV mem \2\x9B\xD9\206 8086,FPU
|
||||
FSTP mem32 \1\xD9\203 8086,FPU
|
||||
FSTP mem64 \1\xDD\203 8086,FPU
|
||||
FSTP mem80 \1\xDB\207 8086,FPU
|
||||
FSTP fpureg \1\xDD\10\xD8 8086,FPU
|
||||
FSTP void \2\xDD\xD9 8086,FPU,ND
|
||||
FSTSW mem \2\x9B\xDD\207 8086,FPU,SW
|
||||
FSTSW reg_ax \3\x9B\xDF\xE0 286,FPU
|
||||
FSUB mem32 \1\xD8\204 8086,FPU
|
||||
@ -462,31 +487,39 @@ FSUB fpureg|to \1\xDC\10\xE8 8086,FPU
|
||||
FSUB fpureg,fpu0 \1\xDC\10\xE8 8086,FPU
|
||||
FSUB fpureg \1\xD8\10\xE0 8086,FPU
|
||||
FSUB fpu0,fpureg \1\xD8\11\xE0 8086,FPU
|
||||
FSUB void \2\xDE\xE9 8086,FPU,ND
|
||||
FSUBP fpureg \1\xDE\10\xE8 8086,FPU
|
||||
FSUBP fpureg,fpu0 \1\xDE\10\xE8 8086,FPU
|
||||
FSUBP void \2\xDE\xE9 8086,FPU,ND
|
||||
FSUBR mem32 \1\xD8\205 8086,FPU
|
||||
FSUBR mem64 \1\xDC\205 8086,FPU
|
||||
FSUBR fpureg|to \1\xDC\10\xE0 8086,FPU
|
||||
FSUBR fpureg,fpu0 \1\xDC\10\xE0 8086,FPU
|
||||
FSUBR fpureg \1\xD8\10\xE8 8086,FPU
|
||||
FSUBR fpu0,fpureg \1\xD8\11\xE8 8086,FPU
|
||||
FSUBR void \2\xDE\xE1 8086,FPU,ND
|
||||
FSUBRP fpureg \1\xDE\10\xE0 8086,FPU
|
||||
FSUBRP fpureg,fpu0 \1\xDE\10\xE0 8086,FPU
|
||||
FSUBRP void \2\xDE\xE1 8086,FPU,ND
|
||||
FTST void \2\xD9\xE4 8086,FPU
|
||||
FUCOM fpureg \1\xDD\10\xE0 386,FPU
|
||||
FUCOM fpu0,fpureg \1\xDD\11\xE0 386,FPU
|
||||
FUCOM void \2\xDD\xE1 386,FPU,ND
|
||||
FUCOMI fpureg \1\xDB\10\xE8 P6,FPU
|
||||
FUCOMI fpu0,fpureg \1\xDB\11\xE8 P6,FPU
|
||||
FUCOMI void \2\xDB\xE9 P6,FPU,ND
|
||||
FUCOMIP fpureg \1\xDF\10\xE8 P6,FPU
|
||||
FUCOMIP fpu0,fpureg \1\xDF\11\xE8 P6,FPU
|
||||
FUCOMIP void \2\xDF\xE9 P6,FPU,ND
|
||||
FUCOMP fpureg \1\xDD\10\xE8 386,FPU
|
||||
FUCOMP fpu0,fpureg \1\xDD\11\xE8 386,FPU
|
||||
FUCOMP void \2\xDD\xE9 386,FPU,ND
|
||||
FUCOMPP void \2\xDA\xE9 386,FPU
|
||||
FXAM void \2\xD9\xE5 8086,FPU
|
||||
FXCH void \2\xD9\xC9 8086,FPU
|
||||
FXCH fpureg \1\xD9\10\xC8 8086,FPU
|
||||
FXCH fpureg,fpu0 \1\xD9\10\xC8 8086,FPU
|
||||
FXCH fpu0,fpureg \1\xD9\11\xC8 8086,FPU
|
||||
FXCH void \2\xD9\xC9 8086,FPU,ND
|
||||
FXTRACT void \2\xD9\xF4 8086,FPU
|
||||
FYL2X void \2\xD9\xF1 8086,FPU
|
||||
FYL2XP1 void \2\xD9\xF9 8086,FPU
|
||||
|
125
test/fpu.asm
Normal file
125
test/fpu.asm
Normal file
@ -0,0 +1,125 @@
|
||||
; relaxed encodings for FPU instructions, which NASM should support
|
||||
; -----------------------------------------------------------------
|
||||
|
||||
%define void
|
||||
%define reg_fpu0 st0
|
||||
%define reg_fpu st1
|
||||
|
||||
; no operands instead of one operand:
|
||||
|
||||
; F(U)COM(P), FCOM2, FCOMP3, FCOMP5
|
||||
|
||||
FCOM void
|
||||
FCOMP void
|
||||
FUCOM void
|
||||
FUCOMP void
|
||||
; FCOM2 void
|
||||
; FCOMP3 void
|
||||
; FCOMP5 void
|
||||
|
||||
; FLD, FST, FSTP, FSTP1, FSTP8, FSTP9
|
||||
|
||||
FLD void
|
||||
FST void
|
||||
FSTP void
|
||||
; FSTP1 void
|
||||
; FSTP8 void
|
||||
; FSTP9 void
|
||||
|
||||
; FXCH, FXCH4, FXCH7, FFREE, FFREEP
|
||||
|
||||
FXCH void
|
||||
; FXCH4 void
|
||||
; FXCH7 void
|
||||
FFREE void
|
||||
FFREEP void
|
||||
|
||||
; no operands instead of two operands:
|
||||
|
||||
; FADD(P), FMUL(P), FSUBR(P), FSUB(P), FDIVR(P), FDIV(P)
|
||||
|
||||
FADD void
|
||||
FADDP void
|
||||
FMUL void
|
||||
FMULP void
|
||||
FSUBR void
|
||||
FSUBRP void
|
||||
FSUB void
|
||||
FSUBP void
|
||||
FDIVR void
|
||||
FDIVRP void
|
||||
FDIV void
|
||||
FDIVP void
|
||||
|
||||
; one operand instead of two operands:
|
||||
|
||||
; FADD, FMUL, FSUB, FSUBR, FDIV, FDIVR
|
||||
|
||||
FADD reg_fpu
|
||||
FMUL reg_fpu
|
||||
FSUB reg_fpu
|
||||
FSUBR reg_fpu
|
||||
FDIV reg_fpu
|
||||
FDIVR reg_fpu
|
||||
|
||||
; FADD, FMUL, FSUBR, FSUB, FDIVR, FDIV (with TO qualifier)
|
||||
|
||||
FADD to reg_fpu
|
||||
FMUL to reg_fpu
|
||||
FSUBR to reg_fpu
|
||||
FSUB to reg_fpu
|
||||
FDIVR to reg_fpu
|
||||
FDIV to reg_fpu
|
||||
|
||||
; FADDP, FMULP, FSUBRP, FSUBP, FDIVRP, FDIVP
|
||||
|
||||
FADDP reg_fpu
|
||||
FMULP reg_fpu
|
||||
FSUBRP reg_fpu
|
||||
FSUBP reg_fpu
|
||||
FDIVRP reg_fpu
|
||||
FDIVP reg_fpu
|
||||
|
||||
; FCMOV(N)B, FCMOV(N)E, FCMOV(N)BE, FCMOV(N)U, and F(U)COMI(P)
|
||||
|
||||
FCMOVB reg_fpu
|
||||
FCMOVNB reg_fpu
|
||||
FCMOVE reg_fpu
|
||||
FCMOVNE reg_fpu
|
||||
FCMOVBE reg_fpu
|
||||
FCMOVNBE reg_fpu
|
||||
FCMOVU reg_fpu
|
||||
FCMOVNU reg_fpu
|
||||
FCOMI reg_fpu
|
||||
FCOMIP reg_fpu
|
||||
FUCOMI reg_fpu
|
||||
FUCOMIP reg_fpu
|
||||
|
||||
; two operands instead of one operand:
|
||||
|
||||
; these don't really exist, and thus are _NOT_ supported:
|
||||
|
||||
; FCOM reg_fpu,reg_fpu0
|
||||
; FCOM reg_fpu0,reg_fpu
|
||||
; FUCOM reg_fpu,reg_fpu0
|
||||
; FUCOM reg_fpu0,reg_fpu
|
||||
; FCOMP reg_fpu,reg_fpu0
|
||||
; FCOMP reg_fpu0,reg_fpu
|
||||
; FUCOMP reg_fpu,reg_fpu0
|
||||
; FUCOMP reg_fpu0,reg_fpu
|
||||
|
||||
; FCOM2 reg_fpu,reg_fpu0
|
||||
; FCOM2 reg_fpu0,reg_fpu
|
||||
; FCOMP3 reg_fpu,reg_fpu0
|
||||
; FCOMP3 reg_fpu0,reg_fpu
|
||||
; FCOMP5 reg_fpu,reg_fpu0
|
||||
; FCOMP5 reg_fpu0,reg_fpu
|
||||
|
||||
; FXCH reg_fpu,reg_fpu0
|
||||
; FXCH reg_fpu0,reg_fpu
|
||||
; FXCH4 reg_fpu,reg_fpu0
|
||||
; FXCH4 reg_fpu0,reg_fpu
|
||||
; FXCH7 reg_fpu,reg_fpu0
|
||||
; FXCH7 reg_fpu0,reg_fpu
|
||||
|
||||
; EOF
|
Loading…
x
Reference in New Issue
Block a user