aboutsummaryrefslogtreecommitdiff
path: root/gcc/reload.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@cygnus.com>1998-08-25 05:23:51 -0700
committerRichard Henderson <rth@gcc.gnu.org>1998-08-25 05:23:51 -0700
commit91bb873f6a9999799bfc4242b9bd4e13c47bf820 (patch)
treee0bd10855584387801668f18203fd9790527c2e3 /gcc/reload.c
parent264fac3496eefa6bcd2d82e9dd55b53ad5df545e (diff)
downloadgcc-91bb873f6a9999799bfc4242b9bd4e13c47bf820.zip
gcc-91bb873f6a9999799bfc4242b9bd4e13c47bf820.tar.gz
gcc-91bb873f6a9999799bfc4242b9bd4e13c47bf820.tar.bz2
reload.c (operands_match_p): Handle rtvecs.
* reload.c (operands_match_p): Handle rtvecs. * i386.c (legitimate_pic_address_disp_p): New. (legitimate_address_p): Use it. (legitimize_pic_address): Use unspecs to represent @GOT and @GOTOFF. Handle constant pool symbols just like statics. (emit_pic_move): Use Pmode not SImode for clarity. (output_pic_addr_const) [SYMBOL_REF]: Remove @GOT and @GOTOFF hacks. [UNSPEC]: New, handling what we killed above. [PLUS]: Detect and abort on invalid symbol arithmetic. * i386.h (CONSTANT_ADDRESS_P): Remove HIGH. From-SVN: r21968
Diffstat (limited to 'gcc/reload.c')
-rw-r--r--gcc/reload.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/gcc/reload.c b/gcc/reload.c
index b1483d1..d3dc14f 100644
--- a/gcc/reload.c
+++ b/gcc/reload.c
@@ -2031,7 +2031,7 @@ operands_match_p (x, y)
fmt = GET_RTX_FORMAT (code);
for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
{
- int val;
+ int val, j;
switch (fmt[i])
{
case 'w':
@@ -2057,6 +2057,19 @@ operands_match_p (x, y)
case '0':
break;
+ case 'E':
+ if (XVECLEN (x, i) != XVECLEN (y, i))
+ return 0;
+ for (j = XVECLEN (x, i) - 1; j >= 0; --j)
+ {
+ val = operands_match_p (XVECEXP (x, i, j), XVECEXP (y, i, j));
+ if (val == 0)
+ return 0;
+ if (val == 2)
+ success_2 = 1;
+ }
+ break;
+
/* It is believed that rtx's at this level will never
contain anything but integers and other rtx's,
except for within LABEL_REFs and SYMBOL_REFs. */