annotate gcc/config/aarch64/constraints.md @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children 1830386684a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 ;; Machine description for AArch64 architecture.
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2 ;; Copyright (C) 2009-2018 Free Software Foundation, Inc.
111
kono
parents:
diff changeset
3 ;; Contributed by ARM Ltd.
kono
parents:
diff changeset
4 ;;
kono
parents:
diff changeset
5 ;; This file is part of GCC.
kono
parents:
diff changeset
6 ;;
kono
parents:
diff changeset
7 ;; GCC is free software; you can redistribute it and/or modify it
kono
parents:
diff changeset
8 ;; under the terms of the GNU General Public License as published by
kono
parents:
diff changeset
9 ;; the Free Software Foundation; either version 3, or (at your option)
kono
parents:
diff changeset
10 ;; any later version.
kono
parents:
diff changeset
11 ;;
kono
parents:
diff changeset
12 ;; GCC is distributed in the hope that it will be useful, but
kono
parents:
diff changeset
13 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
kono
parents:
diff changeset
14 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
kono
parents:
diff changeset
15 ;; General Public License for more details.
kono
parents:
diff changeset
16 ;;
kono
parents:
diff changeset
17 ;; You should have received a copy of the GNU General Public License
kono
parents:
diff changeset
18 ;; along with GCC; see the file COPYING3. If not see
kono
parents:
diff changeset
19 ;; <http://www.gnu.org/licenses/>.
kono
parents:
diff changeset
20
kono
parents:
diff changeset
21 (define_register_constraint "k" "STACK_REG"
kono
parents:
diff changeset
22 "@internal The stack register.")
kono
parents:
diff changeset
23
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
24 (define_register_constraint "Ucs" "TAILCALL_ADDR_REGS"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
25 "@internal Registers suitable for an indirect tail call")
111
kono
parents:
diff changeset
26
kono
parents:
diff changeset
27 (define_register_constraint "w" "FP_REGS"
kono
parents:
diff changeset
28 "Floating point and SIMD vector registers.")
kono
parents:
diff changeset
29
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
30 (define_register_constraint "Upa" "PR_REGS"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
31 "SVE predicate registers p0 - p15.")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
32
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
33 (define_register_constraint "Upl" "PR_LO_REGS"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
34 "SVE predicate registers p0 - p7.")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
35
111
kono
parents:
diff changeset
36 (define_register_constraint "x" "FP_LO_REGS"
kono
parents:
diff changeset
37 "Floating point and SIMD vector registers V0 - V15.")
kono
parents:
diff changeset
38
kono
parents:
diff changeset
39 (define_constraint "I"
kono
parents:
diff changeset
40 "A constant that can be used with an ADD operation."
kono
parents:
diff changeset
41 (and (match_code "const_int")
kono
parents:
diff changeset
42 (match_test "aarch64_uimm12_shift (ival)")))
kono
parents:
diff changeset
43
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
44 (define_constraint "Uaa"
111
kono
parents:
diff changeset
45 "@internal A constant that matches two uses of add instructions."
kono
parents:
diff changeset
46 (and (match_code "const_int")
kono
parents:
diff changeset
47 (match_test "aarch64_pluslong_strict_immedate (op, VOIDmode)")))
kono
parents:
diff changeset
48
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
49 (define_constraint "Uav"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
50 "@internal
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
51 A constraint that matches a VG-based constant that can be added by
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
52 a single ADDVL or ADDPL."
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
53 (match_operand 0 "aarch64_sve_addvl_addpl_immediate"))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
54
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
55 (define_constraint "Uat"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
56 "@internal
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
57 A constraint that matches a VG-based constant that can be added by
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
58 using multiple instructions, with one temporary register."
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
59 (match_operand 0 "aarch64_split_add_offset_immediate"))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
60
111
kono
parents:
diff changeset
61 (define_constraint "J"
kono
parents:
diff changeset
62 "A constant that can be used with a SUB operation (once negated)."
kono
parents:
diff changeset
63 (and (match_code "const_int")
kono
parents:
diff changeset
64 (match_test "aarch64_uimm12_shift (-ival)")))
kono
parents:
diff changeset
65
kono
parents:
diff changeset
66 ;; We can't use the mode of a CONST_INT to determine the context in
kono
parents:
diff changeset
67 ;; which it is being used, so we must have a separate constraint for
kono
parents:
diff changeset
68 ;; each context.
kono
parents:
diff changeset
69
kono
parents:
diff changeset
70 (define_constraint "K"
kono
parents:
diff changeset
71 "A constant that can be used with a 32-bit logical operation."
kono
parents:
diff changeset
72 (and (match_code "const_int")
kono
parents:
diff changeset
73 (match_test "aarch64_bitmask_imm (ival, SImode)")))
kono
parents:
diff changeset
74
kono
parents:
diff changeset
75 (define_constraint "L"
kono
parents:
diff changeset
76 "A constant that can be used with a 64-bit logical operation."
kono
parents:
diff changeset
77 (and (match_code "const_int")
kono
parents:
diff changeset
78 (match_test "aarch64_bitmask_imm (ival, DImode)")))
kono
parents:
diff changeset
79
kono
parents:
diff changeset
80 (define_constraint "M"
kono
parents:
diff changeset
81 "A constant that can be used with a 32-bit MOV immediate operation."
kono
parents:
diff changeset
82 (and (match_code "const_int")
kono
parents:
diff changeset
83 (match_test "aarch64_move_imm (ival, SImode)")))
kono
parents:
diff changeset
84
kono
parents:
diff changeset
85 (define_constraint "N"
kono
parents:
diff changeset
86 "A constant that can be used with a 64-bit MOV immediate operation."
kono
parents:
diff changeset
87 (and (match_code "const_int")
kono
parents:
diff changeset
88 (match_test "aarch64_move_imm (ival, DImode)")))
kono
parents:
diff changeset
89
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
90 (define_constraint "Uti"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
91 "A constant that can be used with a 128-bit MOV immediate operation."
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
92 (and (ior (match_code "const_int")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
93 (match_code "const_wide_int"))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
94 (match_test "aarch64_mov128_immediate (op)")))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
95
111
kono
parents:
diff changeset
96 (define_constraint "UsO"
kono
parents:
diff changeset
97 "A constant that can be used with a 32-bit and operation."
kono
parents:
diff changeset
98 (and (match_code "const_int")
kono
parents:
diff changeset
99 (match_test "aarch64_and_bitmask_imm (ival, SImode)")))
kono
parents:
diff changeset
100
kono
parents:
diff changeset
101 (define_constraint "UsP"
kono
parents:
diff changeset
102 "A constant that can be used with a 64-bit and operation."
kono
parents:
diff changeset
103 (and (match_code "const_int")
kono
parents:
diff changeset
104 (match_test "aarch64_and_bitmask_imm (ival, DImode)")))
kono
parents:
diff changeset
105
kono
parents:
diff changeset
106 (define_constraint "S"
kono
parents:
diff changeset
107 "A constraint that matches an absolute symbolic address."
kono
parents:
diff changeset
108 (and (match_code "const,symbol_ref,label_ref")
kono
parents:
diff changeset
109 (match_test "aarch64_symbolic_address_p (op)")))
kono
parents:
diff changeset
110
kono
parents:
diff changeset
111 (define_constraint "Y"
kono
parents:
diff changeset
112 "Floating point constant zero."
kono
parents:
diff changeset
113 (and (match_code "const_double")
kono
parents:
diff changeset
114 (match_test "aarch64_float_const_zero_rtx_p (op)")))
kono
parents:
diff changeset
115
kono
parents:
diff changeset
116 (define_constraint "Z"
kono
parents:
diff changeset
117 "Integer constant zero."
kono
parents:
diff changeset
118 (match_test "op == const0_rtx"))
kono
parents:
diff changeset
119
kono
parents:
diff changeset
120 (define_constraint "Ush"
kono
parents:
diff changeset
121 "A constraint that matches an absolute symbolic address high part."
kono
parents:
diff changeset
122 (and (match_code "high")
kono
parents:
diff changeset
123 (match_test "aarch64_valid_symref (XEXP (op, 0), GET_MODE (XEXP (op, 0)))")))
kono
parents:
diff changeset
124
kono
parents:
diff changeset
125 (define_constraint "Usa"
kono
parents:
diff changeset
126 "@internal
kono
parents:
diff changeset
127 A constraint that matches an absolute symbolic address that can be
kono
parents:
diff changeset
128 loaded by a single ADR."
kono
parents:
diff changeset
129 (and (match_code "const,symbol_ref,label_ref")
kono
parents:
diff changeset
130 (match_test "aarch64_symbolic_address_p (op)")
kono
parents:
diff changeset
131 (match_test "aarch64_mov_operand_p (op, GET_MODE (op))")))
kono
parents:
diff changeset
132
kono
parents:
diff changeset
133 (define_constraint "Uss"
kono
parents:
diff changeset
134 "@internal
kono
parents:
diff changeset
135 A constraint that matches an immediate shift constant in SImode."
kono
parents:
diff changeset
136 (and (match_code "const_int")
kono
parents:
diff changeset
137 (match_test "(unsigned HOST_WIDE_INT) ival < 32")))
kono
parents:
diff changeset
138
kono
parents:
diff changeset
139 (define_constraint "Usn"
kono
parents:
diff changeset
140 "A constant that can be used with a CCMN operation (once negated)."
kono
parents:
diff changeset
141 (and (match_code "const_int")
kono
parents:
diff changeset
142 (match_test "IN_RANGE (ival, -31, 0)")))
kono
parents:
diff changeset
143
kono
parents:
diff changeset
144 (define_constraint "Usd"
kono
parents:
diff changeset
145 "@internal
kono
parents:
diff changeset
146 A constraint that matches an immediate shift constant in DImode."
kono
parents:
diff changeset
147 (and (match_code "const_int")
kono
parents:
diff changeset
148 (match_test "(unsigned HOST_WIDE_INT) ival < 64")))
kono
parents:
diff changeset
149
kono
parents:
diff changeset
150 (define_constraint "Usf"
kono
parents:
diff changeset
151 "@internal Usf is a symbol reference under the context where plt stub allowed."
kono
parents:
diff changeset
152 (and (match_code "symbol_ref")
kono
parents:
diff changeset
153 (match_test "!(aarch64_is_noplt_call_p (op)
kono
parents:
diff changeset
154 || aarch64_is_long_call_p (op))")))
kono
parents:
diff changeset
155
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
156 (define_constraint "Usg"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
157 "@internal
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
158 A constraint that matches an immediate right shift constant in SImode
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
159 suitable for a SISD instruction."
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
160 (and (match_code "const_int")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
161 (match_test "IN_RANGE (ival, 1, 31)")))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
162
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
163 (define_constraint "Usj"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
164 "@internal
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
165 A constraint that matches an immediate right shift constant in DImode
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
166 suitable for a SISD instruction."
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
167 (and (match_code "const_int")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
168 (match_test "IN_RANGE (ival, 1, 63)")))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
169
111
kono
parents:
diff changeset
170 (define_constraint "UsM"
kono
parents:
diff changeset
171 "@internal
kono
parents:
diff changeset
172 A constraint that matches the immediate constant -1."
kono
parents:
diff changeset
173 (match_test "op == constm1_rtx"))
kono
parents:
diff changeset
174
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
175 (define_constraint "Ulc"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
176 "@internal
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
177 A constraint that matches a constant integer whose bits are consecutive ones
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
178 from the MSB."
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
179 (and (match_code "const_int")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
180 (match_test "aarch64_high_bits_all_ones_p (ival)")))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
181
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
182 (define_constraint "Usv"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
183 "@internal
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
184 A constraint that matches a VG-based constant that can be loaded by
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
185 a single CNT[BHWD]."
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
186 (match_operand 0 "aarch64_sve_cnt_immediate"))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
187
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
188 (define_constraint "Usi"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
189 "@internal
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
190 A constraint that matches an immediate operand valid for
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
191 the SVE INDEX instruction."
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
192 (match_operand 0 "aarch64_sve_index_immediate"))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
193
111
kono
parents:
diff changeset
194 (define_constraint "Ui1"
kono
parents:
diff changeset
195 "@internal
kono
parents:
diff changeset
196 A constraint that matches the immediate constant +1."
kono
parents:
diff changeset
197 (match_test "op == const1_rtx"))
kono
parents:
diff changeset
198
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
199 (define_constraint "Ui2"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
200 "@internal
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
201 A constraint that matches the integers 0...3."
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
202 (and (match_code "const_int")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
203 (match_test "(unsigned HOST_WIDE_INT) ival <= 3")))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
204
111
kono
parents:
diff changeset
205 (define_constraint "Ui3"
kono
parents:
diff changeset
206 "@internal
kono
parents:
diff changeset
207 A constraint that matches the integers 0...4."
kono
parents:
diff changeset
208 (and (match_code "const_int")
kono
parents:
diff changeset
209 (match_test "(unsigned HOST_WIDE_INT) ival <= 4")))
kono
parents:
diff changeset
210
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
211 (define_constraint "Ui7"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
212 "@internal
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
213 A constraint that matches the integers 0...7."
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
214 (and (match_code "const_int")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
215 (match_test "(unsigned HOST_WIDE_INT) ival <= 7")))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
216
111
kono
parents:
diff changeset
217 (define_constraint "Up3"
kono
parents:
diff changeset
218 "@internal
kono
parents:
diff changeset
219 A constraint that matches the integers 2^(0...4)."
kono
parents:
diff changeset
220 (and (match_code "const_int")
kono
parents:
diff changeset
221 (match_test "(unsigned) exact_log2 (ival) <= 4")))
kono
parents:
diff changeset
222
kono
parents:
diff changeset
223 (define_memory_constraint "Q"
kono
parents:
diff changeset
224 "A memory address which uses a single base register with no offset."
kono
parents:
diff changeset
225 (and (match_code "mem")
kono
parents:
diff changeset
226 (match_test "REG_P (XEXP (op, 0))")))
kono
parents:
diff changeset
227
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
228 (define_memory_constraint "Ust"
111
kono
parents:
diff changeset
229 "@internal
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
230 A memory address with 9bit unscaled offset."
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
231 (match_operand 0 "aarch64_9bit_offset_memory_operand"))
111
kono
parents:
diff changeset
232
kono
parents:
diff changeset
233 (define_memory_constraint "Ump"
kono
parents:
diff changeset
234 "@internal
kono
parents:
diff changeset
235 A memory address suitable for a load/store pair operation."
kono
parents:
diff changeset
236 (and (match_code "mem")
kono
parents:
diff changeset
237 (match_test "aarch64_legitimate_address_p (GET_MODE (op), XEXP (op, 0),
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
238 true, ADDR_QUERY_LDP_STP)")))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
239
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
240 ;; Used for storing or loading pairs in an AdvSIMD register using an STP/LDP
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
241 ;; as a vector-concat. The address mode uses the same constraints as if it
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
242 ;; were for a single value.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
243 (define_memory_constraint "Umn"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
244 "@internal
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
245 A memory address suitable for a load/store pair operation."
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
246 (and (match_code "mem")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
247 (match_test "aarch64_legitimate_address_p (GET_MODE (op), XEXP (op, 0),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
248 true,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
249 ADDR_QUERY_LDP_STP_N)")))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
250
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
251 (define_memory_constraint "Utr"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
252 "@internal
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
253 An address valid for SVE LDR and STR instructions (as distinct from
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
254 LD[1234] and ST[1234] patterns)."
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
255 (and (match_code "mem")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
256 (match_test "aarch64_sve_ldr_operand_p (op)")))
111
kono
parents:
diff changeset
257
kono
parents:
diff changeset
258 (define_memory_constraint "Utv"
kono
parents:
diff changeset
259 "@internal
kono
parents:
diff changeset
260 An address valid for loading/storing opaque structure
kono
parents:
diff changeset
261 types wider than TImode."
kono
parents:
diff changeset
262 (and (match_code "mem")
kono
parents:
diff changeset
263 (match_test "aarch64_simd_mem_operand_p (op)")))
kono
parents:
diff changeset
264
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
265 (define_memory_constraint "Utq"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
266 "@internal
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
267 An address valid for loading or storing a 128-bit AdvSIMD register"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
268 (and (match_code "mem")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
269 (match_test "aarch64_legitimate_address_p (V2DImode,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
270 XEXP (op, 0), 1)")))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
271
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
272 (define_memory_constraint "Uty"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
273 "@internal
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
274 An address valid for SVE LD1Rs."
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
275 (and (match_code "mem")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
276 (match_test "aarch64_sve_ld1r_operand_p (op)")))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
277
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
278 (define_memory_constraint "Utx"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
279 "@internal
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
280 An address valid for SVE structure mov patterns (as distinct from
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
281 LD[234] and ST[234] patterns)."
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
282 (match_operand 0 "aarch64_sve_struct_memory_operand"))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
283
111
kono
parents:
diff changeset
284 (define_constraint "Ufc"
kono
parents:
diff changeset
285 "A floating point constant which can be used with an\
kono
parents:
diff changeset
286 FMOV immediate operation."
kono
parents:
diff changeset
287 (and (match_code "const_double")
kono
parents:
diff changeset
288 (match_test "aarch64_float_const_representable_p (op)")))
kono
parents:
diff changeset
289
kono
parents:
diff changeset
290 (define_constraint "Uvi"
kono
parents:
diff changeset
291 "A floating point constant which can be used with a\
kono
parents:
diff changeset
292 MOVI immediate operation."
kono
parents:
diff changeset
293 (and (match_code "const_double")
kono
parents:
diff changeset
294 (match_test "aarch64_can_const_movi_rtx_p (op, GET_MODE (op))")))
kono
parents:
diff changeset
295
kono
parents:
diff changeset
296 (define_constraint "Do"
kono
parents:
diff changeset
297 "@internal
kono
parents:
diff changeset
298 A constraint that matches vector of immediates for orr."
kono
parents:
diff changeset
299 (and (match_code "const_vector")
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
300 (match_test "aarch64_simd_valid_immediate (op, NULL,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
301 AARCH64_CHECK_ORR)")))
111
kono
parents:
diff changeset
302
kono
parents:
diff changeset
303 (define_constraint "Db"
kono
parents:
diff changeset
304 "@internal
kono
parents:
diff changeset
305 A constraint that matches vector of immediates for bic."
kono
parents:
diff changeset
306 (and (match_code "const_vector")
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
307 (match_test "aarch64_simd_valid_immediate (op, NULL,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
308 AARCH64_CHECK_BIC)")))
111
kono
parents:
diff changeset
309
kono
parents:
diff changeset
310 (define_constraint "Dn"
kono
parents:
diff changeset
311 "@internal
kono
parents:
diff changeset
312 A constraint that matches vector of immediates."
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
313 (and (match_code "const,const_vector")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
314 (match_test "aarch64_simd_valid_immediate (op, NULL)")))
111
kono
parents:
diff changeset
315
kono
parents:
diff changeset
316 (define_constraint "Dh"
kono
parents:
diff changeset
317 "@internal
kono
parents:
diff changeset
318 A constraint that matches an immediate operand valid for\
kono
parents:
diff changeset
319 AdvSIMD scalar move in HImode."
kono
parents:
diff changeset
320 (and (match_code "const_int")
kono
parents:
diff changeset
321 (match_test "aarch64_simd_scalar_immediate_valid_for_move (op,
kono
parents:
diff changeset
322 HImode)")))
kono
parents:
diff changeset
323
kono
parents:
diff changeset
324 (define_constraint "Dq"
kono
parents:
diff changeset
325 "@internal
kono
parents:
diff changeset
326 A constraint that matches an immediate operand valid for\
kono
parents:
diff changeset
327 AdvSIMD scalar move in QImode."
kono
parents:
diff changeset
328 (and (match_code "const_int")
kono
parents:
diff changeset
329 (match_test "aarch64_simd_scalar_immediate_valid_for_move (op,
kono
parents:
diff changeset
330 QImode)")))
kono
parents:
diff changeset
331
kono
parents:
diff changeset
332 (define_constraint "Dl"
kono
parents:
diff changeset
333 "@internal
kono
parents:
diff changeset
334 A constraint that matches vector of immediates for left shifts."
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
335 (and (match_code "const,const_vector")
111
kono
parents:
diff changeset
336 (match_test "aarch64_simd_shift_imm_p (op, GET_MODE (op),
kono
parents:
diff changeset
337 true)")))
kono
parents:
diff changeset
338
kono
parents:
diff changeset
339 (define_constraint "Dr"
kono
parents:
diff changeset
340 "@internal
kono
parents:
diff changeset
341 A constraint that matches vector of immediates for right shifts."
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
342 (and (match_code "const,const_vector")
111
kono
parents:
diff changeset
343 (match_test "aarch64_simd_shift_imm_p (op, GET_MODE (op),
kono
parents:
diff changeset
344 false)")))
kono
parents:
diff changeset
345 (define_constraint "Dz"
kono
parents:
diff changeset
346 "@internal
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
347 A constraint that matches a vector of immediate zero."
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
348 (and (match_code "const,const_vector")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
349 (match_test "op == CONST0_RTX (GET_MODE (op))")))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
350
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
351 (define_constraint "Dm"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
352 "@internal
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
353 A constraint that matches a vector of immediate minus one."
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
354 (and (match_code "const,const_vector")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
355 (match_test "op == CONST1_RTX (GET_MODE (op))")))
111
kono
parents:
diff changeset
356
kono
parents:
diff changeset
357 (define_constraint "Dd"
kono
parents:
diff changeset
358 "@internal
kono
parents:
diff changeset
359 A constraint that matches an integer immediate operand valid\
kono
parents:
diff changeset
360 for AdvSIMD scalar operations in DImode."
kono
parents:
diff changeset
361 (and (match_code "const_int")
kono
parents:
diff changeset
362 (match_test "aarch64_can_const_movi_rtx_p (op, DImode)")))
kono
parents:
diff changeset
363
kono
parents:
diff changeset
364 (define_constraint "Ds"
kono
parents:
diff changeset
365 "@internal
kono
parents:
diff changeset
366 A constraint that matches an integer immediate operand valid\
kono
parents:
diff changeset
367 for AdvSIMD scalar operations in SImode."
kono
parents:
diff changeset
368 (and (match_code "const_int")
kono
parents:
diff changeset
369 (match_test "aarch64_can_const_movi_rtx_p (op, SImode)")))
kono
parents:
diff changeset
370
kono
parents:
diff changeset
371 (define_address_constraint "Dp"
kono
parents:
diff changeset
372 "@internal
kono
parents:
diff changeset
373 An address valid for a prefetch instruction."
kono
parents:
diff changeset
374 (match_test "aarch64_address_valid_for_prefetch_p (op, true)"))
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
375
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
376 (define_constraint "vsa"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
377 "@internal
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
378 A constraint that matches an immediate operand valid for SVE
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
379 arithmetic instructions."
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
380 (match_operand 0 "aarch64_sve_arith_immediate"))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
381
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
382 (define_constraint "vsc"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
383 "@internal
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
384 A constraint that matches a signed immediate operand valid for SVE
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
385 CMP instructions."
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
386 (match_operand 0 "aarch64_sve_cmp_vsc_immediate"))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
387
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
388 (define_constraint "vsd"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
389 "@internal
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
390 A constraint that matches an unsigned immediate operand valid for SVE
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
391 CMP instructions."
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
392 (match_operand 0 "aarch64_sve_cmp_vsd_immediate"))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
393
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
394 (define_constraint "vsi"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
395 "@internal
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
396 A constraint that matches a vector count operand valid for SVE INC and
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
397 DEC instructions."
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
398 (match_operand 0 "aarch64_sve_inc_dec_immediate"))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
399
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
400 (define_constraint "vsn"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
401 "@internal
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
402 A constraint that matches an immediate operand whose negative
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
403 is valid for SVE SUB instructions."
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
404 (match_operand 0 "aarch64_sve_sub_arith_immediate"))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
405
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
406 (define_constraint "vsl"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
407 "@internal
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
408 A constraint that matches an immediate operand valid for SVE logical
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
409 operations."
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
410 (match_operand 0 "aarch64_sve_logical_immediate"))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
411
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
412 (define_constraint "vsm"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
413 "@internal
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
414 A constraint that matches an immediate operand valid for SVE MUL
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
415 operations."
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
416 (match_operand 0 "aarch64_sve_mul_immediate"))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
417
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
418 (define_constraint "vsA"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
419 "@internal
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
420 A constraint that matches an immediate operand valid for SVE FADD
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
421 and FSUB operations."
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
422 (match_operand 0 "aarch64_sve_float_arith_immediate"))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
423
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
424 (define_constraint "vsM"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
425 "@internal
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
426 A constraint that matches an imediate operand valid for SVE FMUL
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
427 operations."
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
428 (match_operand 0 "aarch64_sve_float_mul_immediate"))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
429
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
430 (define_constraint "vsN"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
431 "@internal
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
432 A constraint that matches the negative of vsA"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
433 (match_operand 0 "aarch64_sve_float_arith_with_sub_immediate"))