iCodeTable;
/* useful macros */
-#define SKIP_IC2(x) (x->op == GOTO || \
- x->op == LABEL || \
- x->op == FUNCTION || \
- x->op == INLINEASM || \
- x->op == ENDFUNCTION )
+#define SKIP_IC2(x) (x->op == GOTO || \
+ x->op == LABEL || \
+ x->op == FUNCTION || \
+ x->op == INLINEASM || \
+ x->op == ENDFUNCTION )
-#define SKIP_IC1(x) (x->op == CALL || \
+#define SKIP_IC1(x) (x->op == CALL || \
SKIP_IC2(x) )
-#define SKIP_IC(x) (x->op == PCALL || \
- x->op == IPUSH || \
- x->op == IPOP || \
- x->op == JUMPTABLE || \
- x->op == RECEIVE || \
- x->op == ARRAYINIT || \
- SKIP_IC1(x)|| \
+#define SKIP_IC(x) (x->op == PCALL || \
+ x->op == IPUSH || \
+ x->op == IPOP || \
+ x->op == JUMPTABLE || \
+ x->op == RECEIVE || \
+ x->op == ARRAYINIT || \
+ SKIP_IC1(x) || \
+ x->op == CRITICAL || \
+ x->op == ENDCRITICAL || \
x->op == SEND )
-#define SKIP_IC3(x) (SKIP_IC2(x) || \
+#define SKIP_IC3(x) (SKIP_IC2(x) || \
x->op == JUMPTABLE )
#define IS_CONDITIONAL(x) (x->op == EQ_OP || \
x->op == '|' || \
x->op == '^'))
+#define IS_ASSOCIATIVE(x) (x && (x->op == EQ_OP || \
+ x->op == NE_OP || \
+ x->op == '+' || \
+ x->op == '*' || \
+ x->op == BITWISEAND || \
+ x->op == '|' || \
+ x->op == '^'))
+
#define ASSIGNMENT(ic) ( ic && ic->op == '=')
#define ASSIGN_SYM_TO_ITEMP(ic) (ic && ic->op == '=' && \
iCode *newiCodeLabelGoto (int, symbol *);
symbol *newiTemp (char *);
symbol *newiTempLabel (char *);
-symbol *newiTempPreheaderLabel ();
+#define LOOPEXITLBL "loopExitLbl"
+symbol *newiTempLoopHeaderLabel (bool);
iCode *newiCode (int, operand *, operand *);
sym_link *operandType (operand *);
operand *operandFromValue (value *);
int printOperand (operand *, FILE *);
void setOperandType (operand *, sym_link *);
bool isOperandInFarSpace (operand *);
+bool isOperandInPagedSpace (operand *);
bool isOperandInDirSpace (operand *);
bool isOperandInCodeSpace (operand *);
operand *opFromOpWithDU (operand *, bitVect *, bitVect *);