+/* determine if one operator is an Imm */
+ir_node *get_immediate_op(ir_node *op1, ir_node *op2) {
+ if (op1)
+ return is_Imm(op1) ? op1 : (is_Imm(op2) ? op2 : NULL);
+ else return is_Imm(op2) ? op2 : NULL;
+}
+
+/* determine if one operator is not an Imm */
+ir_node *get_expr_op(ir_node *op1, ir_node *op2) {
+ return !is_Imm(op1) ? op1 : (!is_Imm(op2) ? op2 : NULL);
+}
+
+
+
+/**
+ * Creates an ia32 Add with immediate.
+ *
+ * @param dbg firm dbg
+ * @param block the block the new node should belong to
+ * @param expr_op operator
+ * @param mode node mode
+ * @return the created ia23 Add_i node
+ */
+ir_node *gen_imm_Add(dbg_info *dbg, ir_node *block, ir_node *expr_op, ir_mode *mode) {
+ return new_rd_ia32_Add_i(dbg, current_ir_graph, block, expr_op, mode);
+}
+
+/**
+ * Creates an ia32 Add.
+ *
+ * @param dbg firm node dbg
+ * @param block the block the new node should belong to
+ * @param op1 first operator
+ * @param op2 second operator
+ * @param mode node mode
+ * @return the created ia32 Add node
+ */
+ir_node *gen_Add(dbg_info *dbg, ir_node *block, ir_node *op1, ir_node *op2, ir_mode *mode) {
+ return new_rd_ia32_Add(dbg, current_ir_graph, block, op1, op2, mode);
+}
+
+
+
+/**
+ * Creates an ia32 Mul with immediate.
+ *
+ * @param dbg firm dbg
+ * @param block the block the new node should belong to
+ * @param expr_op operator
+ * @param mode node mode
+ * @return the created ia23 Mul_i node
+ */
+ir_node *gen_imm_Mul(dbg_info *dbg, ir_node *block, ir_node *expr_op, ir_mode *mode) {
+ return new_rd_ia32_Mul_i(dbg, current_ir_graph, block, expr_op, mode);
+}
+
+/**
+ * Creates an ia32 Mul.
+ *
+ * @param dbg firm node dbg
+ * @param block the block the new node should belong to
+ * @param op1 first operator
+ * @param op2 second operator
+ * @param mode node mode
+ * @return the created ia32 Mul node
+ */
+ir_node *gen_Mul(dbg_info *dbg, ir_node *block, ir_node *op1, ir_node *op2, ir_mode *mode) {
+ return new_rd_ia32_Mul(dbg, current_ir_graph, block, op1, op2, mode);
+}
+
+
+
+/**
+ * Creates an ia32 And with immediate.
+ *
+ * @param dbg firm dbg
+ * @param block the block the new node should belong to
+ * @param expr_op operator
+ * @param mode node mode
+ * @return the created ia23 And_i node
+ */
+ir_node *gen_imm_And(dbg_info *dbg, ir_node *block, ir_node *expr_op, ir_mode *mode) {
+ return new_rd_ia32_And_i(dbg, current_ir_graph, block, expr_op, mode);
+}
+
+/**
+ * Creates an ia32 And.
+ *
+ * @param dbg firm node dbg
+ * @param block the block the new node should belong to
+ * @param op1 first operator
+ * @param op2 second operator
+ * @param mode node mode
+ * @return the created ia32 And node
+ */
+ir_node *gen_And(dbg_info *dbg, ir_node *block, ir_node *op1, ir_node *op2, ir_mode *mode) {
+ return new_rd_ia32_And(dbg, current_ir_graph, block, op1, op2, mode);
+}
+
+
+
+/**
+ * Creates an ia32 Or with immediate.
+ *
+ * @param dbg firm dbg
+ * @param block the block the new node should belong to
+ * @param expr_op operator
+ * @param mode node mode
+ * @return the created ia23 Or_i node
+ */
+ir_node *gen_imm_Or(dbg_info *dbg, ir_node *block, ir_node *expr_op, ir_mode *mode) {
+ return new_rd_ia32_Or_i(dbg, current_ir_graph, block, expr_op, mode);
+}
+
+/**
+ * Creates an ia32 Or.
+ *
+ * @param dbg firm node dbg
+ * @param block the block the new node should belong to
+ * @param op1 first operator
+ * @param op2 second operator
+ * @param mode node mode
+ * @return the created ia32 Or node
+ */
+ir_node *gen_Or(dbg_info *dbg, ir_node *block, ir_node *op1, ir_node *op2, ir_mode *mode) {
+ return new_rd_ia32_Or(dbg, current_ir_graph, block, op1, op2, mode);
+}
+
+
+
+/**
+ * Creates an ia32 Eor with immediate.
+ *
+ * @param dbg firm dbg
+ * @param block the block the new node should belong to
+ * @param expr_op operator
+ * @param mode node mode
+ * @return the created ia23 Eor_i node
+ */
+ir_node *gen_imm_Eor(dbg_info *dbg, ir_node *block, ir_node *expr_op, ir_mode *mode) {
+ return new_rd_ia32_Eor_i(dbg, current_ir_graph, block, expr_op, mode);
+}
+
+/**
+ * Creates an ia32 Eor.
+ *
+ * @param dbg firm node dbg
+ * @param block the block the new node should belong to
+ * @param op1 first operator
+ * @param op2 second operator
+ * @param mode node mode
+ * @return the created ia32 Eor node
+ */
+ir_node *gen_Eor(dbg_info *dbg, ir_node *block, ir_node *op1, ir_node *op2, ir_mode *mode) {
+ return new_rd_ia32_Eor(dbg, current_ir_graph, block, op1, op2, mode);
+}
+
+
+
+/**
+ * Creates an ia32 Cmp with immediate.
+ *
+ * @param dbg firm dbg
+ * @param block the block the new node should belong to
+ * @param expr_op operator
+ * @param mode node mode
+ * @return the created ia23 Cmp_i node
+ */
+ir_node *gen_imm_Cmp(dbg_info *dbg, ir_node *block, ir_node *expr_op, ir_mode *mode) {
+ return new_rd_ia32_Cmp_i(dbg, current_ir_graph, block, expr_op, mode);
+}
+
+/**
+ * Creates an ia32 Cmp.
+ *
+ * @param dbg firm node dbg
+ * @param block the block the new node should belong to
+ * @param op1 first operator
+ * @param op2 second operator
+ * @param mode node mode
+ * @return the created ia32 Cmp node
+ */
+ir_node *gen_Cmp(dbg_info *dbg, ir_node *block, ir_node *op1, ir_node *op2, ir_mode *mode) {
+ return new_rd_ia32_Cmp(dbg, current_ir_graph, block, op1, op2, mode);
+}
+
+
+
+/**
+ * Creates an ia32 Sub with immediate.
+ *
+ * @param dbg firm dbg
+ * @param block the block the new node should belong to
+ * @param expr_op operator
+ * @param mode node mode
+ * @return the created ia23 Sub_i node
+ */
+ir_node *gen_imm_Sub(dbg_info *dbg, ir_node *block, ir_node *expr_op, ir_mode *mode) {
+ return new_rd_ia32_Sub_i(dbg, current_ir_graph, block, expr_op, mode);
+}
+
+/**
+ * Creates an ia32 Sub.
+ *
+ * @param dbg firm node dbg
+ * @param block the block the new node should belong to
+ * @param op1 first operator
+ * @param op2 second operator
+ * @param mode node mode
+ * @return the created ia32 Sub node
+ */
+ir_node *gen_Sub(dbg_info *dbg, ir_node *block, ir_node *op1, ir_node *op2, ir_mode *mode) {
+ return new_rd_ia32_Sub(dbg, current_ir_graph, block, op1, op2, mode);
+}
+
+
+
+/**
+ * Creates an ia32 Mod with immediate.
+ *
+ * @param dbg firm dbg
+ * @param block the block the new node should belong to
+ * @param expr_op operator
+ * @param mode node mode
+ * @return the created ia23 Mod_i node
+ */
+ir_node *gen_imm_Mod(dbg_info *dbg, ir_node *block, ir_node *expr_op, ir_mode *mode) {
+ return new_rd_ia32_Mod_i(dbg, current_ir_graph, block, expr_op, mode);
+}
+
+/**
+ * Creates an ia32 Mod.
+ *
+ * @param dbg firm node dbg
+ * @param block the block the new node should belong to
+ * @param op1 first operator
+ * @param op2 second operator
+ * @param mode node mode
+ * @return the created ia32 Mod node
+ */
+ir_node *gen_Mod(dbg_info *dbg, ir_node *block, ir_node *op1, ir_node *op2, ir_mode *mode) {
+ return new_rd_ia32_Mod(dbg, current_ir_graph, block, op1, op2, mode);
+}
+
+
+
+/**
+ * Creates an ia32 Shl with immediate.
+ *
+ * @param dbg firm dbg
+ * @param block the block the new node should belong to
+ * @param expr_op operator
+ * @param mode node mode
+ * @return the created ia23 Shl_i node
+ */
+ir_node *gen_imm_Shl(dbg_info *dbg, ir_node *block, ir_node *expr_op, ir_mode *mode) {
+ return new_rd_ia32_Shl_i(dbg, current_ir_graph, block, expr_op, mode);
+}
+
+/**
+ * Creates an ia32 Shl.
+ *
+ * @param dbg firm node dbg
+ * @param block the block the new node should belong to
+ * @param op1 first operator
+ * @param op2 second operator
+ * @param mode node mode
+ * @return the created ia32 Shl node
+ */
+ir_node *gen_Shl(dbg_info *dbg, ir_node *block, ir_node *op1, ir_node *op2, ir_mode *mode) {
+ return new_rd_ia32_Shl(dbg, current_ir_graph, block, op1, op2, mode);
+}
+
+
+
+/**
+ * Creates an ia32 Shr with immediate.
+ *
+ * @param dbg firm dbg
+ * @param block the block the new node should belong to
+ * @param expr_op operator
+ * @param mode node mode
+ * @return the created ia23 Shr_i node
+ */
+ir_node *gen_imm_Shr(dbg_info *dbg, ir_node *block, ir_node *expr_op, ir_mode *mode) {
+ return new_rd_ia32_Shr_i(dbg, current_ir_graph, block, expr_op, mode);
+}
+
+/**
+ * Creates an ia32 Shr.
+ *
+ * @param dbg firm node dbg
+ * @param block the block the new node should belong to
+ * @param op1 first operator
+ * @param op2 second operator
+ * @param mode node mode
+ * @return the created ia32 Shr node
+ */
+ir_node *gen_Shr(dbg_info *dbg, ir_node *block, ir_node *op1, ir_node *op2, ir_mode *mode) {
+ return new_rd_ia32_Shr(dbg, current_ir_graph, block, op1, op2, mode);
+}
+
+
+
+/**
+ * Creates an ia32 Shrs with immediate.
+ *
+ * @param dbg firm dbg
+ * @param block the block the new node should belong to
+ * @param expr_op operator
+ * @param mode node mode
+ * @return the created ia23 Shrs_i node
+ */
+ir_node *gen_imm_Shrs(dbg_info *dbg, ir_node *block, ir_node *expr_op, ir_mode *mode) {
+ return new_rd_ia32_Shrs_i(dbg, current_ir_graph, block, expr_op, mode);
+}
+
+/**
+ * Creates an ia32 Shrs.
+ *
+ * @param dbg firm node dbg
+ * @param block the block the new node should belong to
+ * @param op1 first operator
+ * @param op2 second operator
+ * @param mode node mode
+ * @return the created ia32 Shrs node
+ */
+ir_node *gen_Shrs(dbg_info *dbg, ir_node *block, ir_node *op1, ir_node *op2, ir_mode *mode) {
+ return new_rd_ia32_Shrs(dbg, current_ir_graph, block, op1, op2, mode);
+}
+
+
+
+/**
+ * Creates an ia32 Rot with immediate.
+ *
+ * @param dbg firm dbg
+ * @param block the block the new node should belong to
+ * @param expr_op operator
+ * @param mode node mode
+ * @return the created ia23 Rot_i node
+ */
+ir_node *gen_imm_Rot(dbg_info *dbg, ir_node *block, ir_node *expr_op, ir_mode *mode) {
+ return new_rd_ia32_Rot_i(dbg, current_ir_graph, block, expr_op, mode);
+}
+
+/**
+ * Creates an ia32 Rot.
+ *
+ * @param dbg firm node dbg
+ * @param block the block the new node should belong to
+ * @param op1 first operator
+ * @param op2 second operator
+ * @param mode node mode
+ * @return the created ia32 Rot node
+ */
+ir_node *gen_Rot(dbg_info *dbg, ir_node *block, ir_node *op1, ir_node *op2, ir_mode *mode) {
+ return new_rd_ia32_Rot(dbg, current_ir_graph, block, op1, op2, mode);
+}
+
+
+
+/**
+ * Transforms a Conv node.
+ *
+ * @param mod the debug module
+ * @param block the block the new node should belong to
+ * @param node the ir Conv node
+ * @param op operator
+ * @param mode node mode
+ * @return the created ia32 Conv node
+ */
+ir_node *gen_Conv(firm_dbg_module_t *mod, ir_node *block, ir_node *node, ir_node *op, ir_mode *mode) {
+ return new_rd_ia32_Conv(get_irn_dbg_info(node), current_ir_graph, block, op, mode);
+}
+
+
+
+/**
+ * Transforms commutative operations (op_Add, op_Mul, op_And, op_Or, op_Eor, op_Cmp)
+ * and non-commutative operations with com == 0 (op_Sub, op_Mod, op_Shl, op_Shr, op_Shrs, op_Rot)
+ *
+ * @param mod the debug module
+ * @param block the block node belongs to
+ * @param node the node to transform
+ * @param op1 first operator
+ * @param op2 second operator
+ * @param mode node mode
+ * @param com flag if op is commutative
+ * @return the created assembler node
+ */
+ir_node *gen_arith_Op(firm_dbg_module_t *mod, ir_node *block, ir_node *node, ir_node *op1, ir_node *op2, ir_mode *mode, int com) {
+ dbg_info *dbg = get_irn_dbg_info(node);
+ ir_node *imm_op = NULL;