diff options
author | Richard Henderson <rth@cygnus.com> | 1998-08-25 05:23:51 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 1998-08-25 05:23:51 -0700 |
commit | 91bb873f6a9999799bfc4242b9bd4e13c47bf820 (patch) | |
tree | e0bd10855584387801668f18203fd9790527c2e3 /gcc/reload.c | |
parent | 264fac3496eefa6bcd2d82e9dd55b53ad5df545e (diff) | |
download | gcc-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.c | 15 |
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. */ |