diff options
author | Joern Rennecke <joern.rennecke@embecosm.com> | 2016-04-28 18:21:42 +0000 |
---|---|---|
committer | Joern Rennecke <amylaar@gcc.gnu.org> | 2016-04-28 19:21:42 +0100 |
commit | 4d03dc2fdfb459f6ff9f5a913d7d48588ca48bf9 (patch) | |
tree | c92cdbd7e8ce52f3a6b0c28d4df390eee9b2fad1 /gcc/config/arc/constraints.md | |
parent | c0b47f4bf9e1a6be6371d715640c2f4a39f1167b (diff) | |
download | gcc-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.md | 14 |
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")) - |