#define IS_SYMOP(op) (op && op->type == SYMBOL)
#define IS_VALOP(op) (op && op->type == VALUE)
+#define IS_TYPOP(op) (op && op->type == TYPE)
+
#define ADDTOCHAIN(x) addSetHead(&iCodeChain,x)
#define LRFTYPE sym_link *ltype = operandType(left), \
#define OP_LIVETO(op) op->operand.symOperand->liveTo
#define OP_REQV(op) op->operand.symOperand->reqv
#define OP_ISLIVE_FCALL(op) (IS_ITEMP(op) && OP_SYMBOL(op)->isLiveFcall)
+#define SYM_SPIL_LOC(sym) sym->usl.spillLoc
/* typedef for operand */
typedef struct operand
unsigned supportRtn:1; /* will cause a call to a support routine */
unsigned regsSaved:1; /* registers have been saved */
unsigned bankSaved:1; /* register bank has been saved */
+ unsigned builtinSEND:1; /* SEND for parameter of builtin function */
struct iCode *next; /* next in chain */
struct iCode *prev; /* previous in chain */
int parmBytes; /* if call/pcall, count of parameter bytes
on stack */
+ int argreg; /* argument regno for SEND/RECEIVE */
+ int eBBlockNum; /* belongs to which eBBlock */
}
iCode;
SKIP_IC1(x)|| \
x->op == SEND )
+#define SKIP_IC3(x) (SKIP_IC2(x) || \
+ x->op == JUMPTABLE )
+
#define IS_CONDITIONAL(x) (x->op == EQ_OP || \
x->op == '<' || \
x->op == '>' || \
#define ASSIGNMENT_TO_SELF(ic) (!POINTER_SET(ic) && !POINTER_GET(ic) && \
ic->op == '=' && IC_RESULT(ic)->key == IC_RIGHT(ic)->key )
+#define IS_CAST_ICODE(ic) (ic && ic->op == CAST)
#define SET_ISADDR(op,v) {op = operandFromOperand(op); op->isaddr = v;}
#define SET_RESULT_RIGHT(ic) {SET_ISADDR(IC_RIGHT(ic),0); SET_ISADDR(IC_RESULT(ic),0);}
+#define IS_ASSIGN_ICODE(ic) (ASSIGNMENT(ic) && !POINTER_SET(ic))
#define OP_DEFS(op) op->operand.symOperand->defs
#define OP_USES(op) op->operand.symOperand->uses
int printOperand (operand *, FILE *);
void setOperandType (operand *, sym_link *);
bool isOperandInFarSpace (operand *);
+bool isOperandInDirSpace (operand *);
+bool isOperandInCodeSpace (operand *);
operand *opFromOpWithDU (operand *, bitVect *, bitVect *);
iCode *copyiCode (iCode *);
operand *newiTempFromOp (operand *);
+iCode *getBuiltinParms (iCode *,int *, operand **);
/*-----------------------------------------------------------------*/
/* declaration of exported variables */
/*-----------------------------------------------------------------*/