+/**
+ * Translate a Mux.
+ */
+static void lower_Mux(ir_node *mux, ir_mode *mode, lower_env_t *env) {
+ ir_node *block, *val;
+ ir_node *true_l, *true_h, *false_l, *false_h, *sel;
+ dbg_info *dbg;
+ int idx;
+
+ val = get_Mux_true(mux);
+ idx = get_irn_idx(val);
+ if (env->entries[idx]->low_word) {
+ /* Values already build */
+ true_l = env->entries[idx]->low_word;
+ true_h = env->entries[idx]->high_word;
+ } else {
+ /* still not ready */
+ pdeq_putr(env->waitq, mux);
+ return;
+ } /* if */
+
+ val = get_Mux_false(mux);
+ idx = get_irn_idx(val);
+ if (env->entries[idx]->low_word) {
+ /* Values already build */
+ false_l = env->entries[idx]->low_word;
+ false_h = env->entries[idx]->high_word;
+ } else {
+ /* still not ready */
+ pdeq_putr(env->waitq, mux);
+ return;
+ } /* if */
+
+
+ sel = get_Mux_sel(mux);
+
+ dbg = get_irn_dbg_info(mux);
+ block = get_nodes_block(mux);
+
+ idx = get_irn_idx(mux);
+ assert(idx < env->n_entries);
+ env->entries[idx]->low_word = new_rd_Mux(dbg, block, sel, false_l, true_l, mode);
+ env->entries[idx]->high_word = new_rd_Mux(dbg, block, sel, false_h, true_h, mode);
+} /* lower_Mux */
+
+/**
+ * Translate an ASM node.
+ */
+static void lower_ASM(ir_node *asmn, ir_mode *mode, lower_env_t *env) {
+ ir_mode *his = env->params->high_signed;
+ ir_mode *hiu = env->params->high_unsigned;
+ int i;
+ ir_node *n;
+
+ (void)mode;
+
+ for (i = get_irn_arity(asmn) - 1; i >= 0; --i) {
+ ir_mode *op_mode = get_irn_mode(get_irn_n(asmn, i));
+ if (op_mode == his || op_mode == hiu) {
+ panic("lowering ASM unimplemented");
+ } /* if */
+ } /* for */
+
+ for (n = asmn;;) {
+ ir_mode *proj_mode;
+
+ n = get_irn_link(n);
+ if (n == NULL)
+ break;
+
+ proj_mode = get_irn_mode(n);
+ if (proj_mode == his || proj_mode == hiu) {
+ panic("lowering ASM unimplemented");
+ } /* if */
+ } /* for */
+} /* lower_ASM */
+
+/**
+ * Translate a Sel node.
+ */
+static void lower_Sel(ir_node *sel, ir_mode *mode, lower_env_t *env) {
+ (void) mode;
+
+ /* we must only lower value parameter Sels if we change the
+ value parameter type. */
+ if (env->value_param_tp != NULL) {
+ ir_entity *ent = get_Sel_entity(sel);
+ if (get_entity_owner(ent) == env->value_param_tp) {
+ int pos = PTR_TO_INT(get_entity_link(ent));
+
+ ent = get_method_value_param_ent(env->l_mtp, pos);
+ set_Sel_entity(sel, ent);
+ } /* if */
+ } /* if */
+} /* lower_Sel */
+