-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 = 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);
- env->entries[idx]->high_word = new_rd_Conv(dbg, irg, block, env->entries[op_idx]->high_word, dst_mode);
- } else {
- /* simple case: create a high word */
- if (imode != dst_mode)
- op = new_rd_Conv(dbg, irg, block, op, dst_mode);
-
- env->entries[idx]->low_word = op;
- env->entries[idx]->high_word = new_rd_Shrs(dbg, irg, block, op,
- new_Const_long(mode_Iu, get_mode_size_bits(dst_mode) - 1), dst_mode);
- } /* 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, 0);
- env->entries[idx]->high_word = new_r_Proj(irg, block, irn, dst_mode, 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);
+static void lower_Conv_to_Ll(ir_node *node, lower_env_t *env)
+{
+ ir_mode *omode = get_irn_mode(node);
+ ir_node *op = get_Conv_op(node);
+ ir_mode *imode = get_irn_mode(op);
+ 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);
+ node_entry_t *entry = env->entries[idx];
+ ir_mode *low_unsigned = env->params->low_unsigned;
+ ir_mode *low_signed
+ = mode_is_signed(omode) ? env->params->low_signed : low_unsigned;