-static void lower_Conv_to_Ls(ir_node *node, lower_env_t *env) {
- ir_node *op = get_Conv_op(node);
- ir_mode *imode = get_irn_mode(op);
- ir_mode *dst_mode_l = env->params->low_unsigned;
- ir_mode *dst_mode_h = env->params->low_signed;
- int idx = get_irn_idx(node);
- ir_graph *irg = current_ir_graph;
- ir_node *block = get_nodes_block(node);
- dbg_info *dbg = get_irn_dbg_info(node);
-
- assert(idx < env->n_entries);
-
- if (mode_is_int(imode) || mode_is_reference(imode)) {
- if (imode == env->params->high_unsigned) {
- /* a Conv from Lu to Ls */
- int op_idx = get_irn_idx(op);
-
- if (! env->entries[op_idx]->low_word) {
- /* not ready yet, wait */
- pdeq_putr(env->waitq, node);
- return;
- } /* if */
- env->entries[idx]->low_word = new_rd_Conv(dbg, irg, block, env->entries[op_idx]->low_word, dst_mode_l);
- env->entries[idx]->high_word = new_rd_Conv(dbg, irg, block, env->entries[op_idx]->high_word, dst_mode_h);
- } else {
- /* simple case: create a high word */
- if (imode != dst_mode_l)
- op = new_rd_Conv(dbg, irg, block, op, dst_mode_l);
-
- env->entries[idx]->low_word = op;
-
- if (mode_is_signed(imode)) {
- env->entries[idx]->high_word = new_rd_Shrs(dbg, irg, block, op,
- new_Const_long(mode_Iu, get_mode_size_bits(dst_mode_h) - 1), dst_mode_h);
- } else {
- env->entries[idx]->high_word = new_Const(dst_mode_h, get_mode_null(dst_mode_h));
- } /* if */
- } /* if */
- } else {
- ir_node *irn, *call;
- ir_mode *omode = env->params->high_signed;
- ir_type *mtp = get_conv_type(imode, omode, env);
-
- irn = get_intrinsic_address(mtp, get_irn_op(node), imode, omode, block, env);
- call = new_rd_Call(dbg, irg, block, get_irg_no_mem(irg), irn, 1, &op, mtp);
- set_irn_pinned(call, get_irn_pinned(node));
- irn = new_r_Proj(irg, block, call, mode_T, pn_Call_T_result);
-
- env->entries[idx]->low_word = new_r_Proj(irg, block, irn, dst_mode_l, 0);
- env->entries[idx]->high_word = new_r_Proj(irg, block, irn, dst_mode_h, 1);
- } /* if */
-} /* lower_Conv_to_Ls */
-
-/**
- * Translate a Conv to higher_unsigned
- */
-static void lower_Conv_to_Lu(ir_node *node, lower_env_t *env) {
- ir_node *op = get_Conv_op(node);
- ir_mode *imode = get_irn_mode(op);
- ir_mode *dst_mode = env->params->low_unsigned;
- int idx = get_irn_idx(node);
- ir_graph *irg = current_ir_graph;
- ir_node *block = get_nodes_block(node);
- dbg_info *dbg = get_irn_dbg_info(node);