+#endif /* NDEBUG */
+
+/**
+ * Language dependent variable initialization callback.
+ */
+static uninitialized_local_variable_func_t *default_initialize_local_variable = NULL;
+
+/* creates a bd constructor for a binop */
+#define NEW_BD_BINOP(instr) \
+static ir_node * \
+new_bd_##instr(dbg_info *db, ir_node *block, \
+ ir_node *op1, ir_node *op2, ir_mode *mode) \
+{ \
+ ir_node *in[2]; \
+ ir_node *res; \
+ ir_graph *irg = current_ir_graph; \
+ in[0] = op1; \
+ in[1] = op2; \
+ res = new_ir_node(db, irg, block, op_##instr, mode, 2, in); \
+ res = optimize_node(res); \
+ IRN_VRFY_IRG(res, irg); \
+ return res; \
+}
+
+/* creates a bd constructor for an unop */
+#define NEW_BD_UNOP(instr) \
+static ir_node * \
+new_bd_##instr(dbg_info *db, ir_node *block, \
+ ir_node *op, ir_mode *mode) \
+{ \
+ ir_node *res; \
+ ir_graph *irg = current_ir_graph; \
+ res = new_ir_node(db, irg, block, op_##instr, mode, 1, &op); \
+ res = optimize_node(res); \
+ IRN_VRFY_IRG(res, irg); \
+ return res; \
+}
+
+/* creates a bd constructor for an divop */
+#define NEW_BD_DIVOP(instr) \
+static ir_node * \
+new_bd_##instr(dbg_info *db, ir_node *block, \
+ ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state) \
+{ \
+ ir_node *in[3]; \
+ ir_node *res; \
+ ir_graph *irg = current_ir_graph; \
+ in[0] = memop; \
+ in[1] = op1; \
+ in[2] = op2; \
+ res = new_ir_node(db, irg, block, op_##instr, mode_T, 3, in); \
+ res->attr.divmod.exc.pin_state = state; \
+ res->attr.divmod.res_mode = mode; \
+ res->attr.divmod.no_remainder = 0; \
+ res = optimize_node(res); \
+ IRN_VRFY_IRG(res, irg); \
+ return res; \
+}
+
+/* creates a rd constructor for a binop */
+#define NEW_RD_BINOP(instr) \
+ir_node * \
+new_rd_##instr(dbg_info *db, ir_graph *irg, ir_node *block, \
+ ir_node *op1, ir_node *op2, ir_mode *mode) \
+{ \
+ ir_node *res; \
+ ir_graph *rem = current_ir_graph; \
+ current_ir_graph = irg; \
+ res = new_bd_##instr(db, block, op1, op2, mode); \
+ current_ir_graph = rem; \
+ return res; \
+}
+
+/* creates a rd constructor for an unop */
+#define NEW_RD_UNOP(instr) \
+ir_node * \
+new_rd_##instr(dbg_info *db, ir_graph *irg, ir_node *block, \
+ ir_node *op, ir_mode *mode) \
+{ \
+ ir_node *res; \
+ ir_graph *rem = current_ir_graph; \
+ current_ir_graph = irg; \
+ res = new_bd_##instr(db, block, op, mode); \
+ current_ir_graph = rem; \
+ return res; \
+}
+
+/* creates a rd constructor for an divop */
+#define NEW_RD_DIVOP(instr) \
+ir_node * \
+new_rd_##instr(dbg_info *db, ir_graph *irg, ir_node *block, \
+ ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state) \
+{ \
+ ir_node *res; \
+ ir_graph *rem = current_ir_graph; \
+ current_ir_graph = irg; \
+ res = new_bd_##instr(db, block, memop, op1, op2, mode, state);\
+ current_ir_graph = rem; \
+ return res; \
+}
+
+/* creates a d constructor for an binop */
+#define NEW_D_BINOP(instr) \
+ir_node * \
+new_d_##instr(dbg_info *db, ir_node *op1, ir_node *op2, ir_mode *mode) { \
+ return new_bd_##instr(db, current_ir_graph->current_block, op1, op2, mode); \
+}
+
+/* creates a d constructor for an unop */
+#define NEW_D_UNOP(instr) \
+ir_node * \
+new_d_##instr(dbg_info *db, ir_node *op, ir_mode *mode) { \
+ return new_bd_##instr(db, current_ir_graph->current_block, op, mode); \
+}
+
+#ifndef USE_ORIGINAL
+#include "gen_ir_cons.c.inl"
+#else
+
+/**
+ * Constructs a Block with a fixed number of predecessors.
+ * Does not set current_block. Cannot be used with automatic
+ * Phi node construction.
+ */
+static ir_node *
+new_bd_Block(dbg_info *db, int arity, ir_node **in) {
+ ir_node *res;
+ ir_graph *irg = current_ir_graph;
+
+ res = new_ir_node(db, irg, NULL, op_Block, mode_BB, arity, in);
+
+ /* macroblock header */
+ res->in[0] = res;
+
+ res->attr.block.is_dead = 0;
+ res->attr.block.is_mb_head = 1;
+ res->attr.block.has_label = 0;
+ res->attr.block.irg = irg;
+ res->attr.block.backedge = new_backedge_arr(irg->obst, arity);
+ res->attr.block.in_cg = NULL;
+ res->attr.block.cg_backedge = NULL;
+ res->attr.block.extblk = NULL;
+ res->attr.block.mb_depth = 0;
+ res->attr.block.label = 0;
+
+ set_Block_matured(res, 1);
+ set_Block_block_visited(res, 0);
+
+ IRN_VRFY_IRG(res, irg);
+ return res;
+} /* new_bd_Block */
+
+static ir_node *
+new_bd_Start(dbg_info *db, ir_node *block) {
+ ir_node *res;
+ ir_graph *irg = current_ir_graph;
+
+ res = new_ir_node(db, irg, block, op_Start, mode_T, 0, NULL);
+
+ IRN_VRFY_IRG(res, irg);
+ return res;
+} /* new_bd_Start */
+
+static ir_node *
+new_bd_End(dbg_info *db, ir_node *block) {
+ ir_node *res;
+ ir_graph *irg = current_ir_graph;
+
+ res = new_ir_node(db, irg, block, op_End, mode_X, -1, NULL);
+
+ IRN_VRFY_IRG(res, irg);
+ return res;
+} /* new_bd_End */