diff options
author | Richard Stallman <rms@gnu.org> | 1992-03-28 20:30:51 +0000 |
---|---|---|
committer | Richard Stallman <rms@gnu.org> | 1992-03-28 20:30:51 +0000 |
commit | 47c95231c3eba90771d739d36e608cb206c118e6 (patch) | |
tree | 4273bd8a5dc402d85737c76741cea7dda98bd7bf /gcc/config/ns32k/ns32k.h | |
parent | 88fe15a1861bd630c70d7a7027d7b3523194d08a (diff) | |
download | gcc-47c95231c3eba90771d739d36e608cb206c118e6.zip gcc-47c95231c3eba90771d739d36e608cb206c118e6.tar.gz gcc-47c95231c3eba90771d739d36e608cb206c118e6.tar.bz2 |
*** empty log message ***
From-SVN: r613
Diffstat (limited to 'gcc/config/ns32k/ns32k.h')
-rw-r--r-- | gcc/config/ns32k/ns32k.h | 41 |
1 files changed, 22 insertions, 19 deletions
diff --git a/gcc/config/ns32k/ns32k.h b/gcc/config/ns32k/ns32k.h index 92cda86..b970085 100644 --- a/gcc/config/ns32k/ns32k.h +++ b/gcc/config/ns32k/ns32k.h @@ -826,32 +826,25 @@ __transfer_from_trampoline () \ && REG_OK_FOR_BASE_P (XEXP (X, 0)) \ && CONSTANT_ADDRESS_P (XEXP (X, 1)))) +/* Check for frame pointer or stack pointer. */ #define MEM_REG(X) \ - ((GET_CODE (X) == REG && (REGNO (X) ^ 16) < 2) \ - || (TARGET_SB && CONSTANT_ADDRESS_P (X))) + (GET_CODE (X) == REG && (REGNO (X) ^ 16) < 2) +/* A memory ref whose address is the FP or SP, with optional integer offset, + or (on certain machines) a constant address. */ #define INDIRECTABLE_2_ADDRESS_P(X) \ (GET_CODE (X) == MEM \ && (((xfoo0 = XEXP (X, 0), MEM_REG (xfoo0)) \ || (GET_CODE (xfoo0) == PLUS \ - && GET_CODE (XEXP (xfoo0, 0)) == REG \ && MEM_REG (XEXP (xfoo0, 0)) \ && CONSTANT_ADDRESS_NO_LABEL_P (XEXP (xfoo0, 1)))) \ || (TARGET_SB && CONSTANT_ADDRESS_P (xfoo0)))) -#define INDIRECTABLE_ADDRESS_P(X) \ - (INDIRECTABLE_1_ADDRESS_P(X) \ - || INDIRECTABLE_2_ADDRESS_P (X) \ - || (GET_CODE (X) == PLUS \ - && CONSTANT_ADDRESS_NO_LABEL_P (XEXP (X, 1)) \ - && INDIRECTABLE_2_ADDRESS_P (XEXP (X, 0)))) - /* Go to ADDR if X is a valid address not using indexing. (This much is the easy part.) */ #define GO_IF_NONINDEXED_ADDRESS(X, ADDR) \ { register rtx xfoob = (X); \ - if (GET_CODE (xfoob) == REG && REG_OK_FOR_BASE_P (xfoob)) goto ADDR; \ - if (INDIRECTABLE_1_ADDRESS_P(X)) goto ADDR; \ + if (INDIRECTABLE_1_ADDRESS_P (X)) goto ADDR; \ if (INDIRECTABLE_2_ADDRESS_P (X)) goto ADDR; \ if (GET_CODE (X) == PLUS) \ if (CONSTANT_ADDRESS_NO_LABEL_P (XEXP (X, 1))) \ @@ -859,6 +852,20 @@ __transfer_from_trampoline () \ goto ADDR; \ } +/* Go to ADDR if X is a valid address not using indexing. + (This much is the easy part.) */ +#define GO_IF_INDEXING(X, ADDR) \ +{ register rtx xfoob = (X); \ + if (GET_CODE (xfoob) == PLUS && INDEX_TERM_P (XEXP (xfoob, 0))) \ + GO_IF_INDEXABLE_ADDRESS (XEXP (xfoob, 1), ADDR); \ + if (GET_CODE (xfoob) == PLUS && INDEX_TERM_P (XEXP (xfoob, 1))) \ + GO_IF_INDEXABLE_ADDRESS (XEXP (xfoob, 0), ADDR); } \ + +#define GO_IF_INDEXABLE_ADDRESS(X, ADDR) \ +{ if (GET_CODE (X) == REG && REG_OK_FOR_BASE_P (X)) goto ADDR; \ + if (INDIRECTABLE_2_ADDRESS_P (X)) goto ADDR; \ +} + /* 1 if PROD is either a reg times size of mode MODE or just a reg, if MODE is just one byte. Actually, on the ns32k, since the index mode is independent of the operand size, @@ -879,8 +886,9 @@ __transfer_from_trampoline () \ ((xfoo2 = (unsigned)(X)-1), \ ((xfoo2 < 4 && xfoo2 != 2) || xfoo2 == 7)) +/* Note that xfoo0, xfoo1, xfoo2 are used in some of the submacros above. */ #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \ -{ register rtx xfooy, xfooz, xfoo0, xfoo1; \ +{ register rtx xfooy, xfoo0, xfoo1; \ unsigned xfoo2; \ xfooy = X; \ GO_IF_NONINDEXED_ADDRESS (xfooy, ADDR); \ @@ -892,12 +900,7 @@ __transfer_from_trampoline () \ else if (CONSTANT_ADDRESS_NO_LABEL_P (XEXP (xfooy, 0)) \ && GET_CODE (XEXP (xfooy, 1)) == PLUS) \ xfooy = XEXP (xfooy, 1); \ - xfooz = XEXP (xfooy, 1); \ - if (INDEX_TERM_P (xfooz, MODE)) \ - { rtx t = XEXP (xfooy, 0); GO_IF_NONINDEXED_ADDRESS (t, ADDR); }\ - xfooz = XEXP (xfooy, 0); \ - if (INDEX_TERM_P (xfooz, MODE)) \ - { rtx t = XEXP (xfooy, 1); GO_IF_NONINDEXED_ADDRESS (t, ADDR); }\ + GO_IF_INDEXING (xfooy, ADDR); \ } \ else if (INDEX_TERM_P (xfooy, MODE)) \ goto ADDR; \ |