aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Law <law@gcc.gnu.org>1992-07-22 14:01:13 -0600
committerJeff Law <law@gcc.gnu.org>1992-07-22 14:01:13 -0600
commit198586008bed3f282b57bc5ef40030f0534e293a (patch)
treee55a726e67f4c4f2b047fd887516731c8c7b3427
parent0fb5ac6f94849fe7d5e4091a1cd3615f499d108b (diff)
downloadgcc-198586008bed3f282b57bc5ef40030f0534e293a.zip
gcc-198586008bed3f282b57bc5ef40030f0534e293a.tar.gz
gcc-198586008bed3f282b57bc5ef40030f0534e293a.tar.bz2
(EXTRA_CONSTRAINT): Add new 'T' and 'U' constraints
which check for aligned accesses to memory and register pairs. From-SVN: r1661
-rw-r--r--gcc/config/sparc/sparc.h12
1 files changed, 10 insertions, 2 deletions
diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h
index c3c9614..b4f5f69 100644
--- a/gcc/config/sparc/sparc.h
+++ b/gcc/config/sparc/sparc.h
@@ -1090,8 +1090,12 @@ extern union tree_node *current_function_decl;
&& REG_OK_FOR_BASE_P (XEXP (OP, 0))) \
: (C) == 'S' \
? (CONSTANT_P (OP) || memory_address_p (Pmode, OP)) \
+ : (C) == 'T' \
+ ? (mem_aligned_8 (OP)) \
+ : (C) == 'U' \
+ ? (register_ok_for_ldd (OP)) \
: 0)
-
+
#else
/* Nonzero if X is a hard reg that can be used as an index. */
@@ -1112,7 +1116,11 @@ extern union tree_node *current_function_decl;
: ((C) == 'S' \
? (CONSTANT_P (OP) \
|| (GET_CODE (OP) == REG && reg_renumber[REGNO (OP)] > 0)\
- || strict_memory_address_p (Pmode, OP)) : 0)))
+ || strict_memory_address_p (Pmode, OP)) \
+ : ((C) == 'T' ? \
+ mem_aligned_8 (OP) && strict_memory_address_p (Pmode, OP) \
+ : ((C) == 'U' ? \
+ register_ok_for_ldd (OP) : 0)))))
#endif
/* GO_IF_LEGITIMATE_ADDRESS recognizes an RTL expression