Add code written by rth to generate use shifts to perform an extension if no

suitable extend patterns can be found.

From-SVN: r23398
This commit is contained in:
Nick Clifton 1998-10-28 10:30:46 +00:00 committed by Nick Clifton
parent ed396e6800
commit 2b28d92ef6
2 changed files with 20 additions and 2 deletions

View File

@ -1,3 +1,9 @@
Wed Oct 28 10:29:09 1998 Nick Clifton <nickc@cygnus.com>
* expr.c (convert_move): Use shifts to perform the move if a
suitable extend pattern cannot be found. Code written by
Richard Henderson <rth@cygnus.com>.
Wed Oct 28 03:59:29 1998 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* regclass.c (renumber, regno_allocated): New static variables, moved

View File

@ -1100,6 +1100,8 @@ convert_move (to, from, unsignedp)
else
{
enum machine_mode intermediate;
rtx tmp;
tree shift_amount;
/* Search for a mode to convert via. */
for (intermediate = from_mode; intermediate != VOIDmode;
@ -1116,8 +1118,18 @@ convert_move (to, from, unsignedp)
return;
}
/* No suitable intermediate mode. */
abort ();
/* No suitable intermediate mode.
Generate what we need with shifts. */
shift_amount = build_int_2 (GET_MODE_BITSIZE (to_mode)
- GET_MODE_BITSIZE (from_mode), 0);
from = gen_lowpart (to_mode, force_reg (from_mode, from));
tmp = expand_shift (LSHIFT_EXPR, to_mode, from, shift_amount,
to, unsignedp);
tmp = expand_shift (RSHIFT_EXPR, to_mode, tmp, shift_amount,
to, unsignedp);
if (tmp != to)
emit_move_insn (to, tmp);
return;
}
}