+ ir_mode *mode = config.lowered_mode;
+ tarval *tv_one = get_tarval_one(mode);
+ ir_node *one = new_d_Const(dbgi, mode, tv_one);
+
+ return new_rd_Eor(dbgi, irg, block, node, one, mode);
+}
+
+static ir_node *create_convb(ir_node *node)
+{
+ ir_graph *irg = current_ir_graph;
+ ir_node *block = get_nodes_block(node);
+ ir_node *conv = new_rd_Conv(NULL, irg, block, node, mode_b);
+
+ return conv;
+}
+
+static ir_type *create_lowered_type(void)
+{
+ if(lowered_type == NULL) {
+ lowered_type = new_type_primitive(new_id_from_str("__lowered_mode_b"),
+ config.lowered_mode);
+ }
+ return lowered_type;
+}
+
+/**
+ * creates a "set" node that produces a 0 or 1 based on a Cmp result
+ */
+static ir_node *create_set(ir_node *node)
+{
+ ir_graph *irg = current_ir_graph;
+ dbg_info *dbgi = get_irn_dbg_info(node);
+ ir_mode *mode = config.lowered_set_mode;
+ tarval *tv_one = get_tarval_one(mode);
+ ir_node *one = new_d_Const(dbgi, mode, tv_one);
+ ir_node *block = get_nodes_block(node);
+ tarval *tv_zero = get_tarval_null(mode);
+ ir_node *zero = new_d_Const(dbgi, mode, tv_zero);
+
+ ir_node *set = new_rd_Mux(dbgi, irg, block, node, zero, one, mode);
+
+ if (mode != config.lowered_mode) {
+ set = new_r_Conv(irg, block, set, config.lowered_mode);
+ }
+
+ return set;
+}