dmd.backend.cgxmm

Compiler implementation of the D programming language.

Members

Functions

REGSIZE
int REGSIZE()
Undocumented in source but is binding to C++. You might be able to learn more by searching the web for its name.
cdvecfill
void cdvecfill(CodeBuilder cdb, elem* e, regm_t* pretregs)

Generate code for OPvecfill (broadcast). OPvecfill takes the single value in e1 and fills the vector type with it.

cdvecsto
void cdvecsto(CodeBuilder cdb, elem* e, regm_t* pretregs)

Generate code for vector "store" operations. The tree e must look like: (op1 OPvecsto (op OPparam op2)) where op is the store instruction STOxxxx.

cdvector
void cdvector(CodeBuilder cdb, elem* e, regm_t* pretregs)
Undocumented in source. Be warned that the author may not have intended to support it.
checkSetVex
void checkSetVex(code* c, tym_t ty)

Determine if operation should be rewritten as a VEX operation; and do so.

checkSetVex3
void checkSetVex3(code* c)

VEX prefixes can be 2 or 3 bytes. If it must be 3 bytes, set the CFvex3 flag.

cloadxmm
void cloadxmm(CodeBuilder cdb, elem* e, regm_t* pretregs)

Load complex operand into XMM registers or flags or both.

isXMMstore
bool isXMMstore(opcode_t op)

Is operator a store operator?

mask
uint mask(uint m)
Undocumented in source but is binding to C++. You might be able to learn more by searching the web for its name.
orthxmm
void orthxmm(CodeBuilder cdb, elem* e, regm_t* pretregs)

Do simple orthogonal operators for XMM registers.

xmmIsAligned
bool xmmIsAligned(elem* e)

Determine if lvalue e is a vector aligned on a 16/32 byte boundary. Assume it to be aligned unless can prove it is not.

xmmabs
void xmmabs(CodeBuilder cdb, elem* e, regm_t* pretregs)

Absolute value operator OPabs

xmmcnvt
void xmmcnvt(CodeBuilder cdb, elem* e, regm_t* pretregs)

Generate code for conversion using SSE2 instructions.

xmmeq
void xmmeq(CodeBuilder cdb, elem* e, opcode_t op, elem* e1, elem* e2, regm_t* pretregs)

Generate code for an assignment using XMM registers.

xmmload
opcode_t xmmload(tym_t tym, bool aligned)

Get correct load operator based on type. It is important to use the right one even if the number of bits moved is the same, as there are performance consequences for using the wrong one.

xmmneg
void xmmneg(CodeBuilder cdb, elem* e, regm_t* pretregs)

Negate operator

xmmopass
void xmmopass(CodeBuilder cdb, elem* e, regm_t* pretregs)

Generate code for op=

xmmpost
void xmmpost(CodeBuilder cdb, elem* e, regm_t* pretregs)

Generate code for post increment and post decrement.

xmmstore
opcode_t xmmstore(tym_t tym, bool aligned)

Get correct store operator based on type.

Meta