mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-08 03:36:44 +08:00
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:
parent
ed396e6800
commit
2b28d92ef6
@ -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
|
||||
|
16
gcc/expr.c
16
gcc/expr.c
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user