Notes: lexpr is LHS sub-expression. rexpr is RHS sub-expression. iconst is generic int value. sconst is generic string value LABEL(sconst) generate code label JUMP(sconst) jump to global sconst JUMPT(lexpr,sconst) jump to sconst if INT lexpr<>0 JUMPF(lexpr,sconst) jump to sconst if INT lexpr==0 JUMPGE(lexpr,rexpr,sconst) jump to sconst if INT lexpr>=INT rexpr SEQ(lexpr,rexpr) execute lexpr, rexpr in any order. results not used. MOVE(lexpr,rexpr) move lexpr to rexpr. rexpr always a MEM. MEM(lexpr) contents of mem in lexpr - except for RHS of MOVE. LOCAL(iconst) address of local var at offset iconst GLOBAL(sconst) address of global var at sconst ARG(iconst) address of argument var at offset iconst CONST(iconst) constant CALL(lexpr,rexpr,iconst) create argframe of size iconst. eval rexpr and discard result. call address in lexpr. destroy argframe. RETURN(lexpr,sconst) eval INT lexpr into int return reg and jump to sconst CAST(lexpr) convert FP lexpr to INT. NEG,NOT, INT unary expressions. lexpr always int. result int. AND,OR,EOR,SHL,SHR,ASR,ADD,SUB,MUL,DIV INT binary expressions. lexpr and rexpr always int. result int. SETEQ,SETNE,SETLT,SETGT,SETLE,SETGE INT releational expressions. result '1' if INT lexpr,rexpr comparison true else '0'. FCALL like CALL but result is in FP return reg. FRETURN(lexpr) like RETURN, but put result into FP return reg. lexpr always FP. FCAST(lexpr) convert INT lexpr to FP. FNEG FP unary operators. lexpr always FP, result FP. FADD,FSUB,FMUL,FDIV, FP binary operators. lexpr, rexpr always FP, result FP FSETEQ,FSETNE,FSETLT,FSETGT,FSETLE,FSETGE, FP relational operators. lexpr, rexpr always FP. result INT!