mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-30 17:35:05 +08:00
xtensa.h (GO_IF_MODE_DEPENDENT_ADDRESS): Treat constant-pool addresses as "mode-dependent".
* config/xtensa/xtensa.h (GO_IF_MODE_DEPENDENT_ADDRESS): Treat constant-pool addresses as "mode-dependent". (GO_IF_LEGITIMATE_ADDRESS): Rename macro arguments. From-SVN: r50984
This commit is contained in:
parent
71c6877d3e
commit
eb8e00ea23
@ -1,3 +1,9 @@
|
||||
2002-03-18 Bob Wilson <bob.wilson@acm.org>
|
||||
|
||||
* config/xtensa/xtensa.h (GO_IF_MODE_DEPENDENT_ADDRESS): Treat
|
||||
constant-pool addresses as "mode-dependent".
|
||||
(GO_IF_LEGITIMATE_ADDRESS): Rename macro arguments.
|
||||
|
||||
2002-03-18 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR target/5740
|
||||
|
@ -1145,21 +1145,21 @@ typedef struct xtensa_args {
|
||||
#define MAX_REGS_PER_ADDRESS 1
|
||||
|
||||
/* Identify valid Xtensa addresses. */
|
||||
#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
|
||||
#define GO_IF_LEGITIMATE_ADDRESS(MODE, ADDR, LABEL) \
|
||||
do { \
|
||||
rtx xinsn = (X); \
|
||||
rtx xinsn = (ADDR); \
|
||||
\
|
||||
/* allow constant pool addresses */ \
|
||||
if ((MODE) != BLKmode && GET_MODE_SIZE (MODE) >= UNITS_PER_WORD \
|
||||
&& constantpool_address_p (xinsn)) \
|
||||
goto ADDR; \
|
||||
goto LABEL; \
|
||||
\
|
||||
while (GET_CODE (xinsn) == SUBREG) \
|
||||
xinsn = SUBREG_REG (xinsn); \
|
||||
\
|
||||
/* allow base registers */ \
|
||||
if (GET_CODE (xinsn) == REG && REG_OK_FOR_BASE_P (xinsn)) \
|
||||
goto ADDR; \
|
||||
goto LABEL; \
|
||||
\
|
||||
/* check for "register + offset" addressing */ \
|
||||
if (GET_CODE (xinsn) == PLUS) \
|
||||
@ -1190,7 +1190,7 @@ typedef struct xtensa_args {
|
||||
&& code1 == CONST_INT \
|
||||
&& xtensa_mem_offset (INTVAL (xplus1), (MODE))) \
|
||||
{ \
|
||||
goto ADDR; \
|
||||
goto LABEL; \
|
||||
} \
|
||||
} \
|
||||
} while (0)
|
||||
@ -1249,7 +1249,19 @@ typedef struct xtensa_args {
|
||||
} while (0)
|
||||
|
||||
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL) {}
|
||||
/* Treat constant-pool references as "mode dependent" since they can
|
||||
only be accessed with SImode loads. This works around a bug in the
|
||||
combiner where a constant pool reference is temporarily converted
|
||||
to an HImode load, which is then assumed to zero-extend based on
|
||||
our definition of LOAD_EXTEND_OP. This is wrong because the high
|
||||
bits of a 16-bit value in the constant pool are now sign-extended
|
||||
by default. */
|
||||
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL) \
|
||||
do { \
|
||||
if (constantpool_address_p (ADDR)) \
|
||||
goto LABEL; \
|
||||
} while (0)
|
||||
|
||||
/* If we are referencing a function that is static, make the SYMBOL_REF
|
||||
special so that we can generate direct calls to it even with -fpic. */
|
||||
|
Loading…
Reference in New Issue
Block a user