diff options
author | davem <davem@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-04-09 14:52:03 +0000 |
---|---|---|
committer | davem <davem@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-04-09 14:52:03 +0000 |
commit | 3dcaebebccfa825eece24e28666022871dc1bc54 (patch) | |
tree | efa0a6f3d5c2bc42fc719890f937e9b7962f8061 /gcc/config/sparc/sparc.h | |
parent | c8453490f7995ca56ed6762174aab0cfbb23b736 (diff) | |
download | ppe42-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.h | 41 |
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 |