diff options
author | Jim Wilson <wilson@gcc.gnu.org> | 1993-07-06 13:45:59 -0700 |
---|---|---|
committer | Jim Wilson <wilson@gcc.gnu.org> | 1993-07-06 13:45:59 -0700 |
commit | 22291e2f95b19681852cbc2d5ab14b4b5f8af251 (patch) | |
tree | 48b8006565abfc83928187b9f02cc8b5c5b488d4 /gcc | |
parent | b165d4711a22ec9aa68b0a60126291034639168f (diff) | |
download | gcc-22291e2f95b19681852cbc2d5ab14b4b5f8af251.zip gcc-22291e2f95b19681852cbc2d5ab14b4b5f8af251.tar.gz gcc-22291e2f95b19681852cbc2d5ab14b4b5f8af251.tar.bz2 |
(LEGITIMATE_BASE_REG_P): New macro.
(INDIRECTABLE_1_ADDRESS_P, GO_IF_INDEXABLE_BASE,
LEGITIMATE_INDEX_REG_P): Accept SUBREG everywhere REG is accepted.
From-SVN: r4863
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/config/m68k/m68k.h | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/gcc/config/m68k/m68k.h b/gcc/config/m68k/m68k.h index 66f3737..7a24ae3 100644 --- a/gcc/config/m68k/m68k.h +++ b/gcc/config/m68k/m68k.h @@ -1120,14 +1120,23 @@ __transfer_from_trampoline () \ The other macros defined here are used only in GO_IF_LEGITIMATE_ADDRESS. */ +/* Allow SUBREG everywhere we allow REG. This results in better code. It + also makes function inlining work when inline functions are called with + arguments that are SUBREGs. */ + +#define LEGITIMATE_BASE_REG_P(X) \ + ((GET_CODE (X) == REG && REG_OK_FOR_BASE_P (X)) \ + || (GET_CODE (X) == SUBREG \ + && GET_CODE (SUBREG_REG (X)) == REG \ + && REG_OK_FOR_BASE_P (SUBREG_REG (X)))) + #define INDIRECTABLE_1_ADDRESS_P(X) \ ((CONSTANT_ADDRESS_P (X) && (!flag_pic || LEGITIMATE_PIC_OPERAND_P (X))) \ - || (GET_CODE (X) == REG && REG_OK_FOR_BASE_P (X)) \ + || LEGITIMATE_BASE_REG_P (X) \ || ((GET_CODE (X) == PRE_DEC || GET_CODE (X) == POST_INC) \ - && REG_P (XEXP (X, 0)) \ - && REG_OK_FOR_BASE_P (XEXP (X, 0))) \ + && LEGITIMATE_BASE_REG_P (XEXP (X, 0))) \ || (GET_CODE (X) == PLUS \ - && REG_P (XEXP (X, 0)) && REG_OK_FOR_BASE_P (XEXP (X, 0)) \ + && LEGITIMATE_BASE_REG_P (XEXP (X, 0)) \ && GET_CODE (XEXP (X, 1)) == CONST_INT \ && ((unsigned) INTVAL (XEXP (X, 1)) + 0x8000) < 0x10000) \ || (GET_CODE (X) == PLUS && XEXP (X, 0) == pic_offset_table_rtx \ @@ -1156,7 +1165,7 @@ __transfer_from_trampoline () \ && (GET_CODE (PATTERN (temp)) == ADDR_VEC \ || GET_CODE (PATTERN (temp)) == ADDR_DIFF_VEC)) \ goto ADDR; \ - if (GET_CODE (X) == REG && REG_OK_FOR_BASE_P (X)) goto ADDR; } + if (LEGITIMATE_BASE_REG_P (X)) goto ADDR; } #define GO_IF_INDEXING(X, ADDR) \ { if (GET_CODE (X) == PLUS && LEGITIMATE_INDEX_P (XEXP (X, 0))) \ @@ -1179,7 +1188,10 @@ __transfer_from_trampoline () \ || (GET_CODE (X) == SIGN_EXTEND \ && GET_CODE (XEXP (X, 0)) == REG \ && GET_MODE (XEXP (X, 0)) == HImode \ - && REG_OK_FOR_INDEX_P (XEXP (X, 0)))) + && REG_OK_FOR_INDEX_P (XEXP (X, 0))) \ + || (GET_CODE (X) == SUBREG \ + && GET_CODE (SUBREG_REG (X)) == REG \ + && REG_OK_FOR_INDEX_P (SUBREG_REG (X)))) #define LEGITIMATE_INDEX_P(X) \ (LEGITIMATE_INDEX_REG_P (X) \ |