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;
- int parmBytes;
union
{
struct symbol *symOperand; /* operand is of type symbol */
#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
{
argLabel;
char *inlineAsm; /* pointer to inline assembler code */
+ literalList *arrayInitList; /* point to array initializer list. */
int lineno; /* file & lineno for debug information */
char *filename;
+
+ int parmBytes; /* if call/pcall, count of parameter bytes
+ on stack */
}
iCode;
x->op == IPOP || \
x->op == JUMPTABLE || \
x->op == RECEIVE || \
+ x->op == ARRAYINIT || \
SKIP_IC1(x)|| \
x->op == SEND )
int isOperandVolatile (operand *, bool);
int isOperandGlobal (operand *);
void printiCChain (iCode *, FILE *);
-operand *ast2iCode (ast *);
+operand *ast2iCode (ast *,int);
operand *geniCodeCast (sym_link *, operand *, bool);
operand *geniCodePtrPtrSubtract (operand *, operand *);
void initiCode ();
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 *);