OPTYPE;
#define IS_SYMOP(op) (op && op->type == SYMBOL)
+#define IS_VALOP(op) (op && op->type == VALUE)
#define ADDTOCHAIN(x) addSetHead(&iCodeChain,x)
#define LRFTYPE sym_link *ltype = operandType(left), \
#define OP_SYMBOL(op) op->operand.symOperand
#define OP_SYM_TYPE(op) op->operand.symOperand->type
#define OP_SYM_ETYPE(op) op->operand.symOperand->etype
+#define OP_VALUE(op) op->operand.valOperand
#define SPIL_LOC(op) op->operand.symOperand->usl.spillLoc
#define OP_LIVEFROM(op) op->operand.symOperand->liveFrom
#define OP_LIVETO(op) op->operand.symOperand->liveTo
unsigned int isGptr:1; /* is a generic pointer */
unsigned int isParm:1; /* is a parameter */
unsigned int isLiteral:1; /* operand is literal */
- unsigned int noSpilLoc:1; /* cannot be assigned a spil location */
unsigned key;
union
#define IC_JTCOND(x) (x)->ulrrcnd.jmpTab.condition
#define IC_JTLABELS(x) (x)->ulrrcnd.jmpTab.labels
#define IC_INLINE(x) (x)->inlineAsm
+#define IC_ARRAYILIST(x) (x)->arrayInitList
typedef struct iCode
{
union
{
symbol *label; /* for a goto statement */
- value *args;
+ value *args; /* for a function */
}
argLabel;
char *inlineAsm; /* pointer to inline assembler code */
+ literalList *arrayInitList; /* point to array initializer list. */
int lineno; /* file & lineno for debug information */
char *filename;
x->op == IPOP || \
x->op == JUMPTABLE || \
x->op == RECEIVE || \
+ x->op == ARRAYINIT || \
SKIP_IC1(x)|| \
x->op == SEND )
int isOperandLiteral (operand *);
operand *operandOperation (operand *, operand *, int, sym_link *);
double operandLitValue (operand *);
-operand *operandFromLit (float);
+operand *operandFromLit (double);
operand *operandFromOperand (operand *);
int isParameterToCall (value *, operand *);
iCode *newiCodeLabelGoto (int, symbol *);