From 7ee233ad06639bb7f81a1fd81fcb04fc9634963b Mon Sep 17 00:00:00 2001 From: Michael Beck Date: Tue, 28 Aug 2007 12:15:34 +0000 Subject: [PATCH] fixed lowering of Conv from I->L (fixed fehler72.c) [r15615] --- ir/lower/lower_dw.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/ir/lower/lower_dw.c b/ir/lower/lower_dw.c index 991fa3610..10b194186 100644 --- a/ir/lower/lower_dw.c +++ b/ir/lower/lower_dw.c @@ -1459,8 +1459,13 @@ static void lower_Conv_to_Ls(ir_node *node, lower_env_t *env) { 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 (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) - 1), dst_mode); + } else { + env->entries[idx]->high_word = new_Const(dst_mode, get_mode_null(dst_mode)); + } /* if */ } /* if */ } else { ir_node *irn, *call; @@ -1509,7 +1514,13 @@ static void lower_Conv_to_Lu(ir_node *node, lower_env_t *env) { op = new_rd_Conv(dbg, irg, block, op, dst_mode); env->entries[idx]->low_word = op; - env->entries[idx]->high_word = new_Const(dst_mode, get_mode_null(dst_mode)); + + 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) - 1), dst_mode); + } else { + env->entries[idx]->high_word = new_Const(dst_mode, get_mode_null(dst_mode)); + } /* if */ } /* if */ } else { ir_node *irn, *call; -- 2.20.1