aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/arc/constraints.md
diff options
context:
space:
mode:
authorJoern Rennecke <joern.rennecke@embecosm.com>2016-04-28 18:21:42 +0000
committerJoern Rennecke <amylaar@gcc.gnu.org>2016-04-28 19:21:42 +0100
commit4d03dc2fdfb459f6ff9f5a913d7d48588ca48bf9 (patch)
treec92cdbd7e8ce52f3a6b0c28d4df390eee9b2fad1 /gcc/config/arc/constraints.md
parentc0b47f4bf9e1a6be6371d715640c2f4a39f1167b (diff)
downloadgcc-4d03dc2fdfb459f6ff9f5a913d7d48588ca48bf9.zip
gcc-4d03dc2fdfb459f6ff9f5a913d7d48588ca48bf9.tar.gz
gcc-4d03dc2fdfb459f6ff9f5a913d7d48588ca48bf9.tar.bz2
arc.h (SYMBOL_FLAG_CMEM): Define.
2016-04-28 Joern Rennecke <joern.rennecke@embecosm.com> Andrew Burgess <andrew.burgess@embecosm.com> gcc: * config/arc/arc.h (SYMBOL_FLAG_CMEM): Define. (TARGET_NPS_CMEM_DEFAULT): Provide default definition. * config/arc/arc.c (arc_address_cost): Return 0 for cmem_address. (arc_encode_section_info): Set SYMBOL_FLAG_CMEM where indicated. * config/arc/arc.opt (mcmem): New option. * config/arc/arc.md (*extendqihi2_i): Add r/Uex alternative, supply length for r/m alternative. (*extendqisi2_ac): Likewise. (*extendhisi2_i): Add r/Uex alternative, supply length for r/m and r/Uex alternative. (movqi_insn): Add r/Ucm and Ucm/?Rac alternatives. (movhi_insn): Likewise. (movsi_insn): Add r/Ucm,Ucm/w alternatives. (*zero_extendqihi2_i): Add r/Ucm alternative. (*zero_extendqisi2_ac): Likewise. (*zero_extendhisi2_i): Likewise. * config/arc/constraints.md (Uex): New memory constraint. (Ucm): New define_constraint. * config/arc/predicates.md (long_immediate_loadstore_operand): Return 0 for MEM with cmem_address address. (cmem_address_0): New predicates. (cmem_address_1): Likewise. (cmem_address_2): Likewise. (cmem_address): Likewise. gcc/testsuite: * gcc.target/arc/cmem-1.c: New file. * gcc.target/arc/cmem-2.c: New file. * gcc.target/arc/cmem-3.c: New file. * gcc.target/arc/cmem-4.c: New file. * gcc.target/arc/cmem-5.c: New file. * gcc.target/arc/cmem-6.c: New file. * gcc.target/arc/cmem-7.c: New file. * gcc.target/arc/cmem-ld.inc: New file. * gcc.target/arc/cmem-st.inc: New file. Co-Authored-By: Andrew Burgess <andrew.burgess@embecosm.com> From-SVN: r235590
Diffstat (limited to 'gcc/config/arc/constraints.md')
-rw-r--r--gcc/config/arc/constraints.md14
1 files changed, 13 insertions, 1 deletions
diff --git a/gcc/config/arc/constraints.md b/gcc/config/arc/constraints.md
index b6954ad..c2992c9 100644
--- a/gcc/config/arc/constraints.md
+++ b/gcc/config/arc/constraints.md
@@ -269,6 +269,13 @@
(and (match_code "mem")
(match_test "compact_store_memory_operand (op, VOIDmode)")))
+(define_memory_constraint "Uex"
+ "@internal
+ A valid memory operand for limm-free extend instructions"
+ (and (match_code "mem")
+ (match_test "!cmem_address (XEXP (op, 0), SImode)")
+ (not (match_operand 0 "long_immediate_loadstore_operand"))))
+
; Don't use define_memory_constraint here as the relocation patching
; for small data symbols only works within a ld/st instruction and
; define_memory_constraint may result in the address being calculated
@@ -303,6 +310,12 @@
(match_test "REG_P (XEXP (XEXP (op, 0), 0))")
(match_test "REGNO (XEXP (XEXP (op, 0), 0)) == SP_REG")))
+(define_constraint "Ucm"
+ "@internal
+ cmem access"
+ (and (match_code "mem")
+ (match_test "TARGET_NPS_CMEM && cmem_address (XEXP (op, 0), VOIDmode)")))
+
;; General constraints
(define_constraint "Cbr"
@@ -430,4 +443,3 @@
(define_memory_constraint "ATO"
"A memory with only a base register"
(match_operand 0 "mem_noofs_operand"))
-