summaryrefslogtreecommitdiffstats
path: root/gcc/config/sparc/sparc.h
diff options
context:
space:
mode:
authordavem <davem@138bc75d-0d04-0410-961f-82ee72b054a4>2002-04-09 14:52:03 +0000
committerdavem <davem@138bc75d-0d04-0410-961f-82ee72b054a4>2002-04-09 14:52:03 +0000
commit3dcaebebccfa825eece24e28666022871dc1bc54 (patch)
treeefa0a6f3d5c2bc42fc719890f937e9b7962f8061 /gcc/config/sparc/sparc.h
parentc8453490f7995ca56ed6762174aab0cfbb23b736 (diff)
downloadppe42-gcc-3dcaebebccfa825eece24e28666022871dc1bc54.tar.gz
ppe42-gcc-3dcaebebccfa825eece24e28666022871dc1bc54.zip
2002-04-09 David S. Miller <davem@redhat.com>
* config/sparc/sparc.c (sparc_extra_constraint_check): New function, implementing EXTRA_CONSTRAINTS. For memory constraints, allow reloading pseudos. * config/sparc/sparc.h (EXTRA_CONSTRAINTS): Use it. * config/sparc/sparc-protos.h: Declare it. * config/sparc/sparc.c (const64_is_2insns): Kill signed vs. unsigned comparison warning. (output_restore_regs): Mark leaf_function as unused. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@52080 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/sparc/sparc.h')
-rw-r--r--gcc/config/sparc/sparc.h41
1 files changed, 9 insertions, 32 deletions
diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h
index fbbb96cf8aa..3ebe6267e63 100644
--- a/gcc/config/sparc/sparc.h
+++ b/gcc/config/sparc/sparc.h
@@ -2104,12 +2104,6 @@ do { \
'W' handles the memory operand when moving operands in/out
of 'e' constraint floating point registers. */
-#define EXTRA_CONSTRAINT_BASE(OP, C) \
- ((C) == 'Q' ? fp_sethi_p(OP) \
- : (C) == 'R' ? fp_mov_p(OP) \
- : (C) == 'S' ? fp_high_losum_p(OP) \
- : 0)
-
#ifndef REG_OK_STRICT
/* Nonzero if X is a hard reg that can be used as an index
@@ -2124,18 +2118,13 @@ do { \
#define REG_OK_FOR_BASE_P(X) REG_OK_FOR_INDEX_P (X)
/* 'T', 'U' are for aligned memory loads which aren't needed for arch64.
- 'W' is like 'T' but is assumed true on arch64. */
-
-#define EXTRA_CONSTRAINT(OP, C) \
- (EXTRA_CONSTRAINT_BASE(OP, C) \
- || ((! TARGET_ARCH64 && (C) == 'T') \
- ? (mem_min_alignment (OP, 8)) \
- : ((! TARGET_ARCH64 && (C) == 'U') \
- ? (register_ok_for_ldd (OP)) \
- : ((C) == 'W' \
- ? ((TARGET_ARCH64 && GET_CODE (OP) == MEM) \
- || mem_min_alignment (OP, 8)) \
- : 0))))
+ 'W' is like 'T' but is assumed true on arch64.
+
+ Remember to accept pseudo-registers for memory constraints if reload is
+ in progress. */
+
+#define EXTRA_CONSTRAINT(OP, C) \
+ sparc_extra_constraint_check(OP, C, 0)
#else
@@ -2144,20 +2133,8 @@ do { \
/* 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) \
- (EXTRA_CONSTRAINT_BASE(OP, C) \
- || ((! TARGET_ARCH64 && (C) == 'T') \
- ? mem_min_alignment (OP, 8) && strict_memory_address_p (Pmode, XEXP (OP, 0)) \
- : ((! TARGET_ARCH64 && (C) == 'U') \
- ? (GET_CODE (OP) == REG \
- && (REGNO (OP) < FIRST_PSEUDO_REGISTER \
- || reg_renumber[REGNO (OP)] >= 0) \
- && register_ok_for_ldd (OP)) \
- : ((C) == 'W' \
- ? (((TARGET_ARCH64 && GET_CODE (OP) == MEM) \
- || mem_min_alignment (OP, 8)) \
- && strict_memory_address_p (Pmode, XEXP (OP, 0))) \
- : 0))))
+#define EXTRA_CONSTRAINT(OP, C) \
+ sparc_extra_constraint_check(OP, C, 1)
#endif
OpenPOWER on IntegriCloud