expr.c (emit_group_load): extract_bit_field requires a REG or MEM as an argument.
* expr.c (emit_group_load): extract_bit_field requires a REG or MEM as an argument. From-SVN: r41950
This commit is contained in:
parent
3f19b4396a
commit
f3ce87a905
2 changed files with 22 additions and 14 deletions
|
@ -1,3 +1,8 @@
|
|||
2001-05-10 David Edelsohn <edelsohn@gnu.org>
|
||||
|
||||
* expr.c (emit_group_load): extract_bit_field requires a REG or
|
||||
MEM as an argument.
|
||||
|
||||
Thu May 10 14:45:44 2001 Jeffrey A Law (law@cygnus.com)
|
||||
|
||||
* jump.c (jump_optimize_1): Do not wrap the new jump target
|
||||
|
|
31
gcc/expr.c
31
gcc/expr.c
|
@ -1959,18 +1959,6 @@ emit_group_load (dst, orig_src, ssize, align)
|
|||
|
||||
tmps = (rtx *) alloca (sizeof (rtx) * XVECLEN (dst, 0));
|
||||
|
||||
/* If we won't be loading directly from memory, protect the real source
|
||||
from strange tricks we might play. */
|
||||
src = orig_src;
|
||||
if (GET_CODE (src) != MEM && ! CONSTANT_P (src))
|
||||
{
|
||||
if (GET_MODE (src) == VOIDmode)
|
||||
src = gen_reg_rtx (GET_MODE (dst));
|
||||
else
|
||||
src = gen_reg_rtx (GET_MODE (orig_src));
|
||||
emit_move_insn (src, orig_src);
|
||||
}
|
||||
|
||||
/* Process the pieces. */
|
||||
for (i = start; i < XVECLEN (dst, 0); i++)
|
||||
{
|
||||
|
@ -1988,6 +1976,22 @@ emit_group_load (dst, orig_src, ssize, align)
|
|||
abort ();
|
||||
}
|
||||
|
||||
/* If we won't be loading directly from memory, protect the real source
|
||||
from strange tricks we might play; but make sure that the source can
|
||||
be loaded directly into the destination. */
|
||||
src = orig_src;
|
||||
if (GET_CODE (orig_src) != MEM
|
||||
&& (!CONSTANT_P (orig_src)
|
||||
|| (GET_MODE (orig_src) != mode
|
||||
&& GET_MODE (orig_src) != VOIDmode)))
|
||||
{
|
||||
if (GET_MODE (orig_src) == VOIDmode)
|
||||
src = gen_reg_rtx (mode);
|
||||
else
|
||||
src = gen_reg_rtx (GET_MODE (orig_src));
|
||||
emit_move_insn (src, orig_src);
|
||||
}
|
||||
|
||||
/* Optimize the access just a bit. */
|
||||
if (GET_CODE (src) == MEM
|
||||
&& align >= GET_MODE_ALIGNMENT (mode)
|
||||
|
@ -2011,8 +2015,7 @@ emit_group_load (dst, orig_src, ssize, align)
|
|||
else
|
||||
abort ();
|
||||
}
|
||||
else if ((CONSTANT_P (src)
|
||||
&& (GET_MODE (src) == VOIDmode || GET_MODE (src) == mode))
|
||||
else if (CONSTANT_P (src)
|
||||
|| (GET_CODE (src) == REG && GET_MODE (src) == mode))
|
||||
tmps[i] = src;
|
||||
else
|
||||
|
|
Loading…
Add table
Reference in a new issue