-
-/* Constructs a Block with a fixed number of predecessors.
- Does not set current_block. Can not 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);
- set_Block_matured(res, 1);
- set_Block_block_visited(res, 0);
-
- /* res->attr.block.exc = exc_normal; */
- /* res->attr.block.handler_entry = 0; */
- res->attr.block.dead = 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;
-
- IRN_VRFY_IRG(res, irg);
- return res;
-}
-
-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);
- /* res->attr.start.irg = irg; */
-
- IRN_VRFY_IRG(res, irg);
- return res;
+/* 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 = 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); \