- cdconvt87
void cdconvt87(CodeBuilder cdb, elem* e, regm_t* pretregs)
Operators OPc_r and OPc_i
- cdd_u32
void cdd_u32(CodeBuilder cdb, elem* e, regm_t* pretregs)
Do the following opcodes:
OPd_u32
- cdd_u64
void cdd_u64(CodeBuilder cdb, elem* e, regm_t* pretregs)
Do the following opcodes:
OPd_u64
OPld_u64
- cdind87
void cdind87(CodeBuilder cdb, elem* e, regm_t* pretregs)
- cdnegass87
void cdnegass87(CodeBuilder cdb, elem* e, regm_t* pretregs)
- cdrndtol
void cdrndtol(CodeBuilder cdb, elem* e, regm_t* pretregs)
- cdscale
void cdscale(CodeBuilder cdb, elem* e, regm_t* pretregs)
Do OPscale, OPyl2x, OPyl2xp1.
- cdtoprec
void cdtoprec(CodeBuilder cdb, elem* e, regm_t* pretregs)
Round 80 bit precision to 32 or 64 bits.
OPtoprec
- cg87_reset
void cg87_reset()
Reset statics for another .obj file.
- cload87
void cload87(CodeBuilder cdb, elem* e, regm_t* pretregs)
Load complex operand into ST01 or flags or both.
- cmporder87
int cmporder87(elem* e)
Determine if a compare is to be done forwards (return 0)
or backwards (return 1).
Must follow same logic as load87().
- cnvt87
void cnvt87(CodeBuilder cdb, elem* e, regm_t* pretregs)
Do the following opcodes:
OPd_s16
OPd_s32
OPd_u16
OPd_s64
- complex_eq87
void complex_eq87(CodeBuilder cdb, elem* e, regm_t* pretregs)
Perform an assignment to a long double/double/float.
- comsub87
void comsub87(CodeBuilder cdb, elem* e, regm_t* pretregs)
Reload common subexpression.
- eq87
void eq87(CodeBuilder cdb, elem* e, regm_t* pretregs)
Perform an assignment to a long double/double/float.
- fixresult87
void fixresult87(CodeBuilder cdb, elem* e, regm_t retregs, regm_t* pretregs, bool isReturnValue)
Given the result of an expression is in retregs,
generate necessary code to return result in *pretregs.
- fixresult_complex87
void fixresult_complex87(CodeBuilder cdb, elem* e, regm_t retregs, regm_t* pretregs, bool isReturnValue)
Given the result of an expression is in retregs,
generate necessary code to return result in *pretregs.
- genfwait
void genfwait(CodeBuilder cdb)
Decide if we need to gen an FWAIT.
- gensaverestore87
void gensaverestore87(regm_t regm, CodeBuilder cdbsave, CodeBuilder cdbrestore)
- load87
void load87(CodeBuilder cdb, elem* e, uint eoffset, regm_t* pretregs, elem* eleft, OPER op)
If op == -1, load expression e into ST0.
else compute (eleft op e), eleft is in ST0.
Must follow same logic as cmporder87();
- loadPair87
void loadPair87(CodeBuilder cdb, elem* e, regm_t* pretregs)
Load OPpair or OPrpair into mST01
- loadconst
ubyte loadconst(elem* e, int im)
Determine if there is a special 8087 instruction to load
constant e.
Input:
im 0 load real part
1 load imaginary part
- neg87
void neg87(CodeBuilder cdb, elem* e, regm_t* pretregs)
Unary -, absolute value, square root, sine, cosine
- neg_complex87
void neg_complex87(CodeBuilder cdb, elem* e, regm_t* pretregs)
Unary - for complex operands
- note87
void note87(elem* e, uint offset, int i)
Note elem e as being in ST(i) as being a value we want to keep.
- opass87
void opass87(CodeBuilder cdb, elem* e, regm_t* pretregs)
Perform +=, -=, *= and /= for doubles.
- pop87
void pop87()
- post87
void post87(CodeBuilder cdb, elem* e, regm_t* pretregs)
Take care of OPpostinc and OPpostdec.
- push87
void push87(CodeBuilder cdb)
Push 8087 stack. Generate and return any code
necessary to preserve anything that might run off the end of the stack.
- save87
void save87(CodeBuilder cdb)
Save in memory any values in the 8087 that we want to keep.
- save87regs
void save87regs(CodeBuilder cdb, uint n)
Save any noted values that would be destroyed by n pushes
- xchg87
void xchg87(int i, int j)
Exchange two entries in 8087 stack.
x87 FPU code generation
Compiler implementation of the D programming language.