dmd.backend.cod4

Compiler implementation of the D programming language.

Members

Functions

cdaddass
void cdaddass(ref CodeBuilder cdb, elem* e, regm_t* pretregs)

Generate code for += -= &= |= ^= negass

cdasm
void cdasm(ref CodeBuilder cdb, elem* e, regm_t* pretregs)

Generate code for an asm elem.

cdbscan
void cdbscan(ref CodeBuilder cdb, elem* e, regm_t* pretregs)

Generate code for OPbsf and OPbsr.

cdbt
void cdbt(ref CodeBuilder cdb, elem* e, regm_t* pretregs)

Generate code for OPbt, OPbtc, OPbtr, OPbts

cdbtst
void cdbtst(ref CodeBuilder cdb, elem* e, regm_t* pretregs)

Generate code for OPbtst

cdbyteint
void cdbyteint(ref CodeBuilder cdb, elem* e, regm_t* pretregs)

Convert byte to int. For OPu8_16 and OPs8_16.

cdcmp
void cdcmp(ref CodeBuilder cdb, elem* e, regm_t* pretregs)

Generate code for compares. Handles lt,gt,le,ge,eqeq,ne for all data types.

cdcmpxchg
void cdcmpxchg(ref CodeBuilder cdb, elem* e, regm_t* pretregs)

Generate code for OPcmpxchg

cdcnvt
void cdcnvt(ref CodeBuilder cdb, elem* e, regm_t* pretregs)

Do conversions. Depends on OPd_s32 and CLIB.dbllng being in sequence.

cdeq
void cdeq(ref CodeBuilder cdb, elem* e, regm_t* pretregs)

Generate code for an assignment.

cdfar16
void cdfar16(ref CodeBuilder cdb, elem* e, regm_t* pretregs)

Generate code for OPnp_f16p and OPf16p_np.

cdlngsht
void cdlngsht(ref CodeBuilder cdb, elem* e, regm_t* pretregs)

Convert long to short (OP32_16). Get offset of far pointer (OPoffset). Convert int to byte (OP16_8). Convert long long to long (OP64_32). OP128_64

cdmsw
void cdmsw(ref CodeBuilder cdb, elem* e, regm_t* pretregs)

Get top 32 bits of 64 bit value (I32) or top 16 bits of 32 bit value (I16) or top 64 bits of 128 bit value (I64). OPmsw

cdmulass
void cdmulass(ref CodeBuilder cdb, elem* e, regm_t* pretregs)

Generate code for *= /= %=

cdpair
void cdpair(ref CodeBuilder cdb, elem* e, regm_t* pretregs)

Generate code for OPpair, OPrpair.

cdpopcnt
void cdpopcnt(ref CodeBuilder cdb, elem* e, regm_t* pretregs)

OPpopcnt operator

cdport
void cdport(ref CodeBuilder cdb, elem* e, regm_t* pretregs)

Handle operators OPinp and OPoutp.

cdprefetch
void cdprefetch(ref CodeBuilder cdb, elem* e, regm_t* pretregs)

Generate code for OPprefetch

cdshass
void cdshass(ref CodeBuilder cdb, elem* e, regm_t* pretregs)

Generate code for <<= and >>=

cdshtlng
void cdshtlng(ref CodeBuilder cdb, elem* e, regm_t* pretregs)

Convert short to long. For OPs16_32, OPu16_32, OPnp_fp, OPu32_64, OPs32_64, OPu64_128, OPs64_128

doinreg
int doinreg(Symbol* s, elem* e)

Determine if expression e can be evaluated directly into register variable s. Have to be careful about things like x=x+x+x, and x=a+x.

longcmp
void longcmp(ref CodeBuilder cdb, elem* e, bool jcond, uint fltarg, code* targ)

Generate code for signed compare of longs. Input: targ block* or code*

modEA
void modEA(ref CodeBuilder cdb, code* c)

Return code for saving common subexpressions if EA turns out to be a register. This is called just before modifying an EA.

Meta