Commit f3ce87a9 by David Edelsohn Committed by David Edelsohn

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
parent 3f19b439
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) 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 * jump.c (jump_optimize_1): Do not wrap the new jump target
......
...@@ -1959,18 +1959,6 @@ emit_group_load (dst, orig_src, ssize, align) ...@@ -1959,18 +1959,6 @@ emit_group_load (dst, orig_src, ssize, align)
tmps = (rtx *) alloca (sizeof (rtx) * XVECLEN (dst, 0)); 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. */ /* Process the pieces. */
for (i = start; i < XVECLEN (dst, 0); i++) for (i = start; i < XVECLEN (dst, 0); i++)
{ {
...@@ -1988,6 +1976,22 @@ emit_group_load (dst, orig_src, ssize, align) ...@@ -1988,6 +1976,22 @@ emit_group_load (dst, orig_src, ssize, align)
abort (); 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. */ /* Optimize the access just a bit. */
if (GET_CODE (src) == MEM if (GET_CODE (src) == MEM
&& align >= GET_MODE_ALIGNMENT (mode) && align >= GET_MODE_ALIGNMENT (mode)
...@@ -2011,8 +2015,7 @@ emit_group_load (dst, orig_src, ssize, align) ...@@ -2011,8 +2015,7 @@ emit_group_load (dst, orig_src, ssize, align)
else else
abort (); abort ();
} }
else if ((CONSTANT_P (src) else if (CONSTANT_P (src)
&& (GET_MODE (src) == VOIDmode || GET_MODE (src) == mode))
|| (GET_CODE (src) == REG && GET_MODE (src) == mode)) || (GET_CODE (src) == REG && GET_MODE (src) == mode))
tmps[i] = src; tmps[i] = src;
else else
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment