aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeff Law <law@gcc.gnu.org>1993-03-15 18:50:54 -0700
committerJeff Law <law@gcc.gnu.org>1993-03-15 18:50:54 -0700
commitec241c19a4c26c936bb2c4f812d476b5d3b2d8e0 (patch)
tree01c7977e12f58db2bb2393a8cdd9d0e78b52a80f /gcc
parentb2fb324cbfb09352c24371289122455a62830138 (diff)
downloadgcc-ec241c19a4c26c936bb2c4f812d476b5d3b2d8e0.zip
gcc-ec241c19a4c26c936bb2c4f812d476b5d3b2d8e0.tar.gz
gcc-ec241c19a4c26c936bb2c4f812d476b5d3b2d8e0.tar.bz2
pa.h (EXTRA_CONSTRAINT, case 'S'): Do not accept CONSTANTP if TARGET_LONG_CALLS.
* pa.h (EXTRA_CONSTRAINT, case 'S'): Do not accept CONSTANTP if TARGET_LONG_CALLS. * pa.h (EXTRA_CONSTRAINT): Merge strict and non-strict variants. Delete 'R' constraint. From-SVN: r3751
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/pa/pa.h53
1 files changed, 24 insertions, 29 deletions
diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h
index c4acb3d..e50ce45 100644
--- a/gcc/config/pa/pa.h
+++ b/gcc/config/pa/pa.h
@@ -1050,12 +1050,35 @@ extern union tree_node *current_function_decl;
these things in insns and then not re-recognize the insns, causing
constrain_operands to fail.
- `R' handles the LO_SUM which can be an address for `Q'.
+ `R' is unused.
`S' handles constraints for calls.
`T' is for fp load and store addresses.*/
+#define EXTRA_CONSTRAINT(OP, C) \
+ ((C) == 'Q' ? \
+ ((GET_CODE (OP) == MEM \
+ && memory_address_p (GET_MODE (OP), XEXP (OP, 0)) \
+ && ! symbolic_memory_operand (OP, VOIDmode)) \
+ || (GET_CODE (OP) == REG \
+ && REGNO (OP) >= FIRST_PSEUDO_REGISTER \
+ && reg_renumber[REGNO (OP)] < 0)) \
+ : ((C) == 'S' ? \
+ ((CONSTANT_P (OP) && ! TARGET_LONG_CALLS) \
+ || (reload_in_progress \
+ ? strict_memory_address_p (Pmode, OP) \
+ : memory_address_p (Pmode, OP)) \
+ || (reload_in_progress \
+ && GET_CODE (OP) == REG \
+ && reg_renumber[REGNO (OP)] > 0)) \
+ : ((C) == 'T' ? \
+ ((GET_CODE (OP) == MEM \
+ && short_memory_operand (OP, VOIDmode)) \
+ || (GET_CODE (OP) == REG \
+ && REGNO (OP) >= FIRST_PSEUDO_REGISTER \
+ && reg_renumber[REGNO (OP)] < 0)) : 0)))
+
#ifndef REG_OK_STRICT
/* Nonzero if X is a hard reg that can be used as an index
@@ -1067,20 +1090,6 @@ extern union tree_node *current_function_decl;
#define REG_OK_FOR_BASE_P(X) \
(REGNO (X) && (REGNO (X) < 32 || REGNO (X) >= FIRST_PSEUDO_REGISTER))
-#define EXTRA_CONSTRAINT(OP, C) \
- ((C) == 'Q' ? \
- ((GET_CODE (OP) == MEM \
- && memory_address_p (GET_MODE (OP), XEXP (OP, 0)) \
- && ! symbolic_memory_operand (OP, VOIDmode))) \
- : ((C) == 'R' ? \
- (GET_CODE (OP) == LO_SUM \
- && GET_CODE (XEXP (OP, 0)) == REG \
- && REG_OK_FOR_BASE_P (XEXP (OP, 0))) \
- : ((C) == 'S' \
- ? CONSTANT_P (OP) || memory_address_p (Pmode, OP)\
- : ((C) == 'T' ? short_memory_operand (OP, VOIDmode) : 0))))\
-
-
#else
/* Nonzero if X is a hard reg that can be used as an index. */
@@ -1088,20 +1097,6 @@ extern union tree_node *current_function_decl;
/* Nonzero if X is a hard reg that can be used as a base reg. */
#define REG_OK_FOR_BASE_P(X) REGNO_OK_FOR_BASE_P (REGNO (X))
-#define EXTRA_CONSTRAINT(OP, C) \
- (((C) == 'Q' || (C) == 'T') ? \
- (GET_CODE (OP) == REG ? \
- (REGNO (OP) >= FIRST_PSEUDO_REGISTER \
- && reg_renumber[REGNO (OP)] < 0) \
- : GET_CODE (OP) == MEM) \
- : ((C) == 'R' ? \
- (GET_CODE (OP) == LO_SUM \
- && GET_CODE (XEXP (OP, 0)) == REG \
- && REG_OK_FOR_BASE_P (XEXP (OP, 0))) \
- : (CONSTANT_P (OP) \
- || (GET_CODE (OP) == REG && reg_renumber[REGNO (OP)] > 0)\
- || strict_memory_address_p (Pmode, OP))))
-
#endif
/* GO_IF_LEGITIMATE_ADDRESS recognizes an RTL expression