Commit d2c92f5a by J"orn Rennecke Committed by Jeff Law

reload.c (push_reload): If WORD_REGISTER_OPERATIONS...

        * reload.c (push_reload): If WORD_REGISTER_OPERATIONS, reload the
        SUBREG_REG if the word count is unchanged, also in the input reload
        case.  Disable non-applicable sanity checks.

From-SVN: r17541
parent 90ad3ab7
Wed Jan 28 20:11:06 1998 J"orn Rennecke <amylaar@cygnus.co.uk>
* reload.c (push_reload): If WORD_REGISTER_OPERATIONS, reload the
SUBREG_REG if the word count is unchanged, also in the input reload
case. Disable non-applicable sanity checks.
Wed Jan 28 20:08:26 1998 Jeffrey A Law (law@cygnus.com) Wed Jan 28 20:08:26 1998 Jeffrey A Law (law@cygnus.com)
* config/t-svr4 (TARGET_LIBGCC2_CFLAGS): Add -fPIC. * config/t-svr4 (TARGET_LIBGCC2_CFLAGS): Add -fPIC.
......
...@@ -886,6 +886,13 @@ push_reload (in, out, inloc, outloc, class, ...@@ -886,6 +886,13 @@ push_reload (in, out, inloc, outloc, class,
&& INTEGRAL_MODE_P (GET_MODE (SUBREG_REG (in))) && INTEGRAL_MODE_P (GET_MODE (SUBREG_REG (in)))
&& LOAD_EXTEND_OP (GET_MODE (SUBREG_REG (in))) != NIL) && LOAD_EXTEND_OP (GET_MODE (SUBREG_REG (in))) != NIL)
#endif #endif
#ifdef WORD_REGISTER_OPERATIONS
|| ((GET_MODE_SIZE (inmode)
< GET_MODE_SIZE (GET_MODE (SUBREG_REG (in))))
&& ((GET_MODE_SIZE (inmode) - 1) / UNITS_PER_WORD ==
((GET_MODE_SIZE (GET_MODE (SUBREG_REG (in))) - 1)
/ UNITS_PER_WORD)))
#endif
)) ))
|| (GET_CODE (SUBREG_REG (in)) == REG || (GET_CODE (SUBREG_REG (in)) == REG
&& REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER && REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER
...@@ -923,7 +930,7 @@ push_reload (in, out, inloc, outloc, class, ...@@ -923,7 +930,7 @@ push_reload (in, out, inloc, outloc, class,
in_subreg_loc = inloc; in_subreg_loc = inloc;
inloc = &SUBREG_REG (in); inloc = &SUBREG_REG (in);
in = *inloc; in = *inloc;
#ifndef LOAD_EXTEND_OP #if ! defined (LOAD_EXTEND_OP) && ! defined (WORD_REGISTER_OPERATIONS)
if (GET_CODE (in) == MEM) if (GET_CODE (in) == MEM)
/* This is supposed to happen only for paradoxical subregs made by /* This is supposed to happen only for paradoxical subregs made by
combine.c. (SUBREG (MEM)) isn't supposed to occur other ways. */ combine.c. (SUBREG (MEM)) isn't supposed to occur other ways. */
...@@ -1027,7 +1034,7 @@ push_reload (in, out, inloc, outloc, class, ...@@ -1027,7 +1034,7 @@ push_reload (in, out, inloc, outloc, class,
out_subreg_loc = outloc; out_subreg_loc = outloc;
outloc = &SUBREG_REG (out); outloc = &SUBREG_REG (out);
out = *outloc; out = *outloc;
#ifndef LOAD_EXTEND_OP #if ! defined (LOAD_EXTEND_OP) && ! defined (WORD_REGISTER_OPERATIONS)
if (GET_CODE (out) == MEM if (GET_CODE (out) == MEM
&& GET_MODE_SIZE (GET_MODE (out)) > GET_MODE_SIZE (outmode)) && GET_MODE_SIZE (GET_MODE (out)) > GET_MODE_SIZE (outmode))
abort (); abort ();
......
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