aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1993-05-02 14:01:55 +0000
committerRichard Stallman <rms@gnu.org>1993-05-02 14:01:55 +0000
commite05a9da8f93fd0298d26a88ab163848c872fd049 (patch)
tree8ede9b9f8f3dba9ff05b692626cf0f30ee18196e /gcc
parenta3b75c072c06a26573736ab8a4cfa08e2b1614fd (diff)
downloadgcc-e05a9da8f93fd0298d26a88ab163848c872fd049.zip
gcc-e05a9da8f93fd0298d26a88ab163848c872fd049.tar.gz
gcc-e05a9da8f93fd0298d26a88ab163848c872fd049.tar.bz2
(push_reload): Allow non-paradoxical SUBREGs of MEM
on machines that extend byte loads. From-SVN: r4305
Diffstat (limited to 'gcc')
-rw-r--r--gcc/reload.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/gcc/reload.c b/gcc/reload.c
index 2053591..944b9a2 100644
--- a/gcc/reload.c
+++ b/gcc/reload.c
@@ -657,11 +657,13 @@ push_reload (in, out, inloc, outloc, class,
in_subreg_loc = inloc;
inloc = &SUBREG_REG (in);
in = *inloc;
+#if ! defined(BYTE_LOADS_ZERO_EXTEND) && ! defined(BYTE_LOADS_SIGN_EXTEND)
if (GET_CODE (in) == MEM)
/* This is supposed to happen only for paradoxical subregs made by
combine.c. (SUBREG (MEM)) isn't supposed to occur other ways. */
if (GET_MODE_SIZE (GET_MODE (in)) > GET_MODE_SIZE (inmode))
abort ();
+#endif
inmode = GET_MODE (in);
}
@@ -699,10 +701,12 @@ push_reload (in, out, inloc, outloc, class,
{
out_subreg_loc = outloc;
outloc = &SUBREG_REG (out);
- out = *outloc;
- if (GET_CODE (out) == MEM
+ out = *outloc;
+#if ! defined(BYTE_LOADS_ZERO_EXTEND) && ! defined(BYTE_LOADS_SIGN_EXTEND)
+ if (GET_CODE (out) == MEM
&& GET_MODE_SIZE (GET_MODE (out)) > GET_MODE_SIZE (outmode))
abort ();
+#endif
outmode = GET_MODE (out);
}