summaryrefslogtreecommitdiff
path: root/gcc/config/ia64
diff options
context:
space:
mode:
authorwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>2000-09-26 00:40:42 +0000
committerwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>2000-09-26 00:40:42 +0000
commit7a458ac266850ca4ee2936dd6bb33bc44c15b01f (patch)
tree61a5669d1e5f6c5c1d12177b6cb7ffe27a28de0d /gcc/config/ia64
parent66914e49b166758e90e5eaa59ca2485c8ed59954 (diff)
downloadgcc-7a458ac266850ca4ee2936dd6bb33bc44c15b01f.tar.gz
Fix bad use of FP reg in post-modify address.
* config/ia64/ia64.h (INDEX_REG_CLASS): Define to GENERAL_REGS. (REGNO_OK_FOR_INDEX_P): Define to REGNO_OK_FOR_BASE_P. (LEGITIMATE_ADDRESS_DISP): Use LEGITIMATE_ADDRESS_REG. (REG_OK_FOR_INDEX): Define to REG_OK_FOR_BASE_P. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@36640 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/ia64')
-rw-r--r--gcc/config/ia64/ia64.h15
1 files changed, 8 insertions, 7 deletions
diff --git a/gcc/config/ia64/ia64.h b/gcc/config/ia64/ia64.h
index 68fa3fb6ae6..6f13d8cbd57 100644
--- a/gcc/config/ia64/ia64.h
+++ b/gcc/config/ia64/ia64.h
@@ -978,8 +978,8 @@ enum reg_class
/* A macro whose definition is the name of the class to which a valid index
register must belong. An index register is one used in an address where its
value is either multiplied by a scale factor or added to another register
- (as well as added to a displacement). */
-#define INDEX_REG_CLASS NO_REGS
+ (as well as added to a displacement). This is needed for POST_MODIFY. */
+#define INDEX_REG_CLASS GENERAL_REGS
/* A C expression which defines the machine-dependent operand constraint
letters for register classes. If CHAR is such a letter, the value should be
@@ -1004,8 +1004,9 @@ enum reg_class
/* A C expression which is nonzero if register number NUM is suitable for use
as an index register in operand addresses. It may be either a suitable hard
- register or a pseudo register that has been allocated such a hard reg. */
-#define REGNO_OK_FOR_INDEX_P(NUM) 0
+ register or a pseudo register that has been allocated such a hard reg.
+ This is needed for POST_MODIFY. */
+#define REGNO_OK_FOR_INDEX_P(NUM) REGNO_OK_FOR_BASE_P (NUM)
/* A C expression that places additional restrictions on the register class to
use when it is necessary to copy value X into a register in class CLASS.
@@ -1743,7 +1744,7 @@ do { \
#define LEGITIMATE_ADDRESS_DISP(R, X) \
(GET_CODE (X) == PLUS \
&& rtx_equal_p (R, XEXP (X, 0)) \
- && (GET_CODE (XEXP (X, 1)) == REG \
+ && (LEGITIMATE_ADDRESS_REG (XEXP (X, 1)) \
|| (GET_CODE (XEXP (X, 1)) == CONST_INT \
&& INTVAL (XEXP (X, 1)) >= -256 \
&& INTVAL (XEXP (X, 1)) < 256)))
@@ -1774,9 +1775,9 @@ do { \
#endif
/* A C expression that is nonzero if X (assumed to be a `reg' RTX) is valid for
- use as an index register. */
+ use as an index register. This is needed for POST_MODIFY. */
-#define REG_OK_FOR_INDEX_P(X) 0
+#define REG_OK_FOR_INDEX_P(X) REG_OK_FOR_BASE_P (X)
/* A C compound statement that attempts to replace X with a valid memory
address for an operand of mode MODE.