]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/config/arm/constraints.md
[ARM][GCC][3/2x]: MVE intrinsics with binary operands.
[thirdparty/gcc.git] / gcc / config / arm / constraints.md
CommitLineData
ce92b223 1;; Constraint definitions for ARM and Thumb
8d9254fc 2;; Copyright (C) 2006-2020 Free Software Foundation, Inc.
ce92b223
RE
3;; Contributed by ARM Ltd.
4
5;; This file is part of GCC.
6
7;; GCC is free software; you can redistribute it and/or modify it
8;; under the terms of the GNU General Public License as published
2f83c7d6 9;; by the Free Software Foundation; either version 3, or (at your
ce92b223
RE
10;; option) any later version.
11
12;; GCC is distributed in the hope that it will be useful, but WITHOUT
13;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
15;; License for more details.
16
17;; You should have received a copy of the GNU General Public License
2f83c7d6
NC
18;; along with GCC; see the file COPYING3. If not see
19;; <http://www.gnu.org/licenses/>.
ce92b223
RE
20
21;; The following register constraints have been used:
dae840fc 22;; - in ARM/Thumb-2 state: t, w, x, y, z
f5c630c3 23;; - in Thumb state: h, b
e36dbdfe 24;; - in both states: l, c, k, q, Cs, Ts, US
ce92b223 25;; In ARM state, 'l' is an alias for 'r'
dae840fc 26;; 'f' and 'v' were previously used for FPA and MAVERICK registers.
ce92b223
RE
27
28;; The following normal constraints have been used:
dae840fc 29;; in ARM/Thumb-2 state: G, I, j, J, K, L, M
5b3e6663 30;; in Thumb-1 state: I, J, K, L, M, N, O
dae840fc 31;; 'H' was previously used for FPA.
ce92b223
RE
32
33;; The following multi-letter normal constraints have been used:
e009dfb3
MM
34;; in ARM/Thumb-2 state: Da, Db, Dc, Dd, Dn, DN, Dm, Dl, DL, Do, Dv, Dy, Di,
35;; Dt, Dp, Dz, Tu
572a49c8 36;; in Thumb-1 state: Pa, Pb, Pc, Pd, Pe
f166a8cd 37;; in Thumb-2 state: Ha, Pj, PJ, Ps, Pt, Pu, Pv, Pw, Px, Py, Pz, Rd, Rf, Rb
a968a40c 38;; in all states: Pf, Pg
ce92b223
RE
39
40;; The following memory constraints have been used:
c7be0832 41;; in ARM/Thumb-2 state: Uh, Ut, Uv, Uy, Un, Um, Us, Up, Uf
5b3e6663 42;; in ARM state: Uq
86b60116 43;; in Thumb state: Uu, Uw
84c20253 44;; in all states: Q
ce92b223 45
63c8f7d6
SP
46(define_register_constraint "Up" "TARGET_HAVE_MVE ? VPR_REG : NO_REGS"
47 "MVE VPR register")
ce92b223 48
c7be0832
SP
49(define_register_constraint "Uf" "TARGET_HAVE_MVE ? VFPCC_REG : NO_REGS"
50 "MVE FPCCR register")
51
6df4618c
SP
52(define_register_constraint "e" "TARGET_HAVE_MVE ? EVEN_REG : NO_REGS"
53 "MVE EVEN registers @code{r0}, @code{r2}, @code{r4}, @code{r6}, @code{r8},
54 @code{r10}, @code{r12}, @code{r14}")
55
4be8cf77
SP
56(define_constraint "Rd"
57 "@internal In Thumb-2 state a constant in range 1 to 16"
58 (and (match_code "const_int")
59 (match_test "TARGET_HAVE_MVE && ival >= 1 && ival <= 16")))
60
f166a8cd
SP
61(define_constraint "Rb"
62 "@internal In Thumb-2 state a constant in range 1 to 8"
63 (and (match_code "const_int")
64 (match_test "TARGET_HAVE_MVE && ival >= 1 && ival <= 8")))
65
66(define_constraint "Rf"
67 "@internal In Thumb-2 state a constant in range 1 to 32"
68 (and (match_code "const_int")
69 (match_test "TARGET_HAVE_MVE && ival >= 1 && ival <= 32")))
70
f1adb0a9
JB
71(define_register_constraint "t" "TARGET_32BIT ? VFP_LO_REGS : NO_REGS"
72 "The VFP registers @code{s0}-@code{s31}.")
73
f1adb0a9 74(define_register_constraint "w"
302c3d8e 75 "TARGET_32BIT ? (TARGET_VFPD32 ? VFP_REGS : VFP_LO_REGS) : NO_REGS"
f1adb0a9
JB
76 "The VFP registers @code{d0}-@code{d15}, or @code{d0}-@code{d31} for VFPv3.")
77
78(define_register_constraint "x" "TARGET_32BIT ? VFP_D0_D7_REGS : NO_REGS"
79 "The VFP registers @code{d0}-@code{d7}.")
ce92b223
RE
80
81(define_register_constraint "y" "TARGET_REALLY_IWMMXT ? IWMMXT_REGS : NO_REGS"
82 "The Intel iWMMX co-processor registers.")
83
84(define_register_constraint "z"
85 "TARGET_REALLY_IWMMXT ? IWMMXT_GR_REGS : NO_REGS"
86 "The Intel iWMMX GR registers.")
87
88(define_register_constraint "l" "TARGET_THUMB ? LO_REGS : GENERAL_REGS"
89 "In Thumb state the core registers @code{r0}-@code{r7}.")
90
91(define_register_constraint "h" "TARGET_THUMB ? HI_REGS : NO_REGS"
92 "In Thumb state the core registers @code{r8}-@code{r15}.")
93
d58bc084
NS
94(define_constraint "j"
95 "A constant suitable for a MOVW instruction. (ARM/Thumb-2)"
33427b46 96 (and (match_test "TARGET_HAVE_MOVT")
6ce43645
RL
97 (ior (and (match_code "high")
98 (match_test "arm_valid_symbolic_address_p (XEXP (op, 0))"))
d58bc084
NS
99 (and (match_code "const_int")
100 (match_test "(ival & 0xffff0000) == 0")))))
101
c2b640a7
AS
102(define_constraint "Pj"
103 "@internal A 12-bit constant suitable for an ADDW or SUBW instruction. (Thumb-2)"
104 (and (match_code "const_int")
105 (and (match_test "TARGET_THUMB2")
106 (match_test "(ival & 0xfffff000) == 0"))))
107
108(define_constraint "PJ"
109 "@internal A constant that satisfies the Pj constrant if negated."
110 (and (match_code "const_int")
111 (and (match_test "TARGET_THUMB2")
112 (match_test "((-ival) & 0xfffff000) == 0"))))
113
f5c630c3
PB
114(define_register_constraint "k" "STACK_REG"
115 "@internal The stack register.")
ce92b223
RE
116
117(define_register_constraint "b" "TARGET_THUMB ? BASE_REGS : NO_REGS"
118 "@internal
119 Thumb only. The union of the low registers and the stack register.")
120
0be72bfa
RH
121(define_constraint "c"
122 "@internal The condition code register."
123 (match_operand 0 "cc_register"))
ce92b223 124
9adcfa3c
RR
125(define_register_constraint "Cs" "CALLER_SAVE_REGS"
126 "@internal The caller save registers. Useful for sibcalls.")
127
ce92b223 128(define_constraint "I"
5b3e6663
PB
129 "In ARM/Thumb-2 state a constant that can be used as an immediate value in a
130 Data Processing instruction. In Thumb-1 state a constant in the range
131 0-255."
ce92b223 132 (and (match_code "const_int")
5b3e6663 133 (match_test "TARGET_32BIT ? const_ok_for_arm (ival)
ce92b223
RE
134 : ival >= 0 && ival <= 255")))
135
136(define_constraint "J"
5b3e6663
PB
137 "In ARM/Thumb-2 state a constant in the range @minus{}4095-4095. In Thumb-1
138 state a constant in the range @minus{}255-@minus{}1."
ce92b223 139 (and (match_code "const_int")
5b3e6663 140 (match_test "TARGET_32BIT ? (ival >= -4095 && ival <= 4095)
ce92b223
RE
141 : (ival >= -255 && ival <= -1)")))
142
143(define_constraint "K"
5b3e6663
PB
144 "In ARM/Thumb-2 state a constant that satisfies the @code{I} constraint if
145 inverted. In Thumb-1 state a constant that satisfies the @code{I}
146 constraint multiplied by any power of 2."
ce92b223 147 (and (match_code "const_int")
5b3e6663 148 (match_test "TARGET_32BIT ? const_ok_for_arm (~ival)
ce92b223
RE
149 : thumb_shiftable_const (ival)")))
150
151(define_constraint "L"
5b3e6663
PB
152 "In ARM/Thumb-2 state a constant that satisfies the @code{I} constraint if
153 negated. In Thumb-1 state a constant in the range @minus{}7-7."
ce92b223 154 (and (match_code "const_int")
5b3e6663 155 (match_test "TARGET_32BIT ? const_ok_for_arm (-ival)
ce92b223
RE
156 : (ival >= -7 && ival <= 7)")))
157
158;; The ARM state version is internal...
5b3e6663
PB
159;; @internal In ARM/Thumb-2 state a constant in the range 0-32 or any
160;; power of 2.
ce92b223 161(define_constraint "M"
5b3e6663 162 "In Thumb-1 state a constant that is a multiple of 4 in the range 0-1020."
ce92b223 163 (and (match_code "const_int")
5b3e6663 164 (match_test "TARGET_32BIT ? ((ival >= 0 && ival <= 32)
29b40d79 165 || (((ival & (ival - 1)) & 0xFFFFFFFF) == 0))
16737e76 166 : ival >= 0 && ival <= 1020 && (ival & 3) == 0")))
ce92b223
RE
167
168(define_constraint "N"
d58bc084 169 "Thumb-1 state a constant in the range 0-31."
ce92b223 170 (and (match_code "const_int")
d58bc084 171 (match_test "!TARGET_32BIT && (ival >= 0 && ival <= 31)")))
ce92b223
RE
172
173(define_constraint "O"
5b3e6663 174 "In Thumb-1 state a constant that is a multiple of 4 in the range
ce92b223
RE
175 @minus{}508-508."
176 (and (match_code "const_int")
5b3e6663 177 (match_test "TARGET_THUMB1 && ival >= -508 && ival <= 508
ce92b223
RE
178 && ((ival & 3) == 0)")))
179
81beb031
RE
180(define_constraint "Pa"
181 "@internal In Thumb-1 state a constant in the range -510 to +510"
182 (and (match_code "const_int")
183 (match_test "TARGET_THUMB1 && ival >= -510 && ival <= 510
184 && (ival > 255 || ival < -255)")))
185
186(define_constraint "Pb"
187 "@internal In Thumb-1 state a constant in the range -262 to +262"
188 (and (match_code "const_int")
189 (match_test "TARGET_THUMB1 && ival >= -262 && ival <= 262
190 && (ival > 255 || ival < -255)")))
191
16737e76
BS
192(define_constraint "Pc"
193 "@internal In Thumb-1 state a constant that is in the range 1021 to 1275"
194 (and (match_code "const_int")
195 (match_test "TARGET_THUMB1
196 && ival > 1020 && ival <= 1275")))
197
906668bb 198(define_constraint "Pd"
5e5f7673 199 "@internal In Thumb state a constant in the range 0 to 7"
906668bb 200 (and (match_code "const_int")
5e5f7673 201 (match_test "TARGET_THUMB && ival >= 0 && ival <= 7")))
906668bb 202
572a49c8
JY
203(define_constraint "Pe"
204 "@internal In Thumb-1 state a constant in the range 256 to +510"
205 (and (match_code "const_int")
206 (match_test "TARGET_THUMB1 && ival >= 256 && ival <= 510")))
207
84c20253
TP
208(define_constraint "Pf"
209 "Memory models except relaxed, consume or release ones."
210 (and (match_code "const_int")
211 (match_test "!is_mm_relaxed (memmodel_from_int (ival))
212 && !is_mm_consume (memmodel_from_int (ival))
213 && !is_mm_release (memmodel_from_int (ival))")))
214
a968a40c
MI
215(define_constraint "Pg"
216 "@internal In Thumb-2 state a constant in range 1 to 32"
217 (and (match_code "const_int")
218 (match_test "TARGET_THUMB2 && ival >= 1 && ival <= 32")))
219
85f28bf1
JB
220(define_constraint "Ps"
221 "@internal In Thumb-2 state a constant in the range -255 to +255"
222 (and (match_code "const_int")
223 (match_test "TARGET_THUMB2 && ival >= -255 && ival <= 255")))
224
225(define_constraint "Pt"
226 "@internal In Thumb-2 state a constant in the range -7 to +7"
227 (and (match_code "const_int")
228 (match_test "TARGET_THUMB2 && ival >= -7 && ival <= 7")))
229
ee4e1706
WG
230(define_constraint "Pu"
231 "@internal In Thumb-2 state a constant in the range +1 to +8"
232 (and (match_code "const_int")
233 (match_test "TARGET_THUMB2 && ival >= 1 && ival <= 8")))
234
dcd8b2ee
JB
235(define_constraint "Pv"
236 "@internal In Thumb-2 state a constant in the range -255 to 0"
237 (and (match_code "const_int")
238 (match_test "TARGET_THUMB2 && ival >= -255 && ival <= 0")))
239
e6bfe8a2
RE
240(define_constraint "Pw"
241 "@internal In Thumb-2 state a constant in the range -255 to -1"
242 (and (match_code "const_int")
243 (match_test "TARGET_THUMB2 && ival >= -255 && ival <= -1")))
244
245(define_constraint "Px"
246 "@internal In Thumb-2 state a constant in the range -7 to -1"
247 (and (match_code "const_int")
248 (match_test "TARGET_THUMB2 && ival >= -7 && ival <= -1")))
249
4925d0d5
WG
250(define_constraint "Py"
251 "@internal In Thumb-2 state a constant in the range 0 to 255"
252 (and (match_code "const_int")
253 (match_test "TARGET_THUMB2 && ival >= 0 && ival <= 255")))
254
5e5f7673
KT
255(define_constraint "Pz"
256 "@internal In Thumb-2 state the constant 0"
257 (and (match_code "const_int")
258 (match_test "TARGET_THUMB2 && (ival == 0)")))
259
ce92b223 260(define_constraint "G"
dae840fc 261 "In ARM/Thumb-2 state the floating-point constant 0."
ce92b223 262 (and (match_code "const_double")
5b3e6663 263 (match_test "TARGET_32BIT && arm_const_double_rtx (op)")))
ce92b223 264
8d33eae8
TP
265(define_constraint "Ha"
266 "@internal In ARM / Thumb-2 a float constant iff literal pools are allowed."
267 (and (match_code "const_double")
268 (match_test "satisfies_constraint_E (op)")
269 (match_test "!arm_disable_literal_pool")))
270
5bfc5baa
JB
271(define_constraint "Dz"
272 "@internal
273 In ARM/Thumb-2 state a vector of constant zeros."
274 (and (match_code "const_vector")
275 (match_test "TARGET_NEON && op == CONST0_RTX (mode)")))
276
ce92b223
RE
277(define_constraint "Da"
278 "@internal
5b3e6663 279 In ARM/Thumb-2 state a const_int, const_double or const_vector that can
ce92b223
RE
280 be generated with two Data Processing insns."
281 (and (match_code "const_double,const_int,const_vector")
5b3e6663 282 (match_test "TARGET_32BIT && arm_const_double_inline_cost (op) == 2")))
ce92b223
RE
283
284(define_constraint "Db"
285 "@internal
5b3e6663 286 In ARM/Thumb-2 state a const_int, const_double or const_vector that can
ce92b223
RE
287 be generated with three Data Processing insns."
288 (and (match_code "const_double,const_int,const_vector")
5b3e6663 289 (match_test "TARGET_32BIT && arm_const_double_inline_cost (op) == 3")))
ce92b223
RE
290
291(define_constraint "Dc"
292 "@internal
5b3e6663 293 In ARM/Thumb-2 state a const_int, const_double or const_vector that can
ce92b223
RE
294 be generated with four Data Processing insns. This pattern is disabled
295 if optimizing for space or when we have load-delay slots to fill."
296 (and (match_code "const_double,const_int,const_vector")
5b3e6663 297 (match_test "TARGET_32BIT && arm_const_double_inline_cost (op) == 4
ce92b223
RE
298 && !(optimize_size || arm_ld_sched)")))
299
44cd6810
WG
300(define_constraint "Dd"
301 "@internal
302 In ARM/Thumb-2 state a const_int that can be used by insn adddi."
303 (and (match_code "const_int")
304 (match_test "TARGET_32BIT && const_ok_for_dimode_op (ival, PLUS)")))
305
73160ba9
DJ
306(define_constraint "Di"
307 "@internal
308 In ARM/Thumb-2 state a const_int or const_double where both the high
309 and low SImode words can be generated as immediates in 32-bit instructions."
310 (and (match_code "const_double,const_int")
311 (match_test "TARGET_32BIT && arm_const_double_by_immediates (op)")))
312
e009dfb3 313(define_constraint "Dm"
88f77cba 314 "@internal
e009dfb3
MM
315 In ARM/Thumb-2 state a const_vector which can be loaded with a Neon vmov
316 immediate instruction."
317 (and (match_code "const_vector")
88f77cba
JB
318 (match_test "TARGET_32BIT
319 && imm_for_neon_mov_operand (op, GET_MODE (op))")))
320
e009dfb3
MM
321(define_constraint "Dn"
322 "@internal
323 In ARM/Thumb-2 state a DImode const_int which can be loaded with a Neon vmov
324 immediate instruction."
325 (and (match_code "const_int")
326 (match_test "TARGET_32BIT && imm_for_neon_mov_operand (op, DImode)")))
327
328(define_constraint "DN"
329 "@internal
330 In ARM/Thumb-2 state a TImode const_int which can be loaded with a Neon vmov
331 immediate instruction."
332 (and (match_code "const_int")
333 (match_test "TARGET_32BIT && imm_for_neon_mov_operand (op, TImode)")))
334
88f77cba
JB
335(define_constraint "Dl"
336 "@internal
337 In ARM/Thumb-2 state a const_vector which can be used with a Neon vorr or
338 vbic instruction."
339 (and (match_code "const_vector")
340 (match_test "TARGET_32BIT
341 && imm_for_neon_logic_operand (op, GET_MODE (op))")))
342
343(define_constraint "DL"
344 "@internal
345 In ARM/Thumb-2 state a const_vector which can be used with a Neon vorn or
346 vand instruction."
347 (and (match_code "const_vector")
348 (match_test "TARGET_32BIT
349 && imm_for_neon_inv_logic_operand (op, GET_MODE (op))")))
350
56289ed2
SD
351(define_constraint "Do"
352 "@internal
353 In ARM/Thumb2 state valid offset for an ldrd/strd instruction."
354 (and (match_code "const_int")
355 (match_test "TARGET_LDRD && offset_ok_for_ldrd_strd (ival)")))
356
f1adb0a9
JB
357(define_constraint "Dv"
358 "@internal
359 In ARM/Thumb-2 state a const_double which can be used with a VFP fconsts
e0dc3601 360 instruction."
f1adb0a9
JB
361 (and (match_code "const_double")
362 (match_test "TARGET_32BIT && vfp3_const_double_rtx (op)")))
363
e0dc3601
PB
364(define_constraint "Dy"
365 "@internal
366 In ARM/Thumb-2 state a const_double which can be used with a VFP fconstd
367 instruction."
368 (and (match_code "const_double")
369 (match_test "TARGET_32BIT && TARGET_VFP_DOUBLE && vfp3_const_double_rtx (op)")))
370
c75d51aa 371(define_constraint "Dt"
7f3d8f56
RR
372 "@internal
373 In ARM/ Thumb2 a const_double which can be used with a vcvt.f32.s32 with fract bits operation"
374 (and (match_code "const_double")
00ea1506 375 (match_test "TARGET_32BIT && vfp3_const_double_for_fract_bits (op)")))
7f3d8f56 376
c75d51aa
RL
377(define_constraint "Dp"
378 "@internal
379 In ARM/ Thumb2 a const_double which can be used with a vcvt.s32.f32 with bits operation"
380 (and (match_code "const_double")
00ea1506 381 (match_test "TARGET_32BIT
85f5231d 382 && vfp3_const_double_for_bits (op) > 0")))
c75d51aa 383
8d33eae8
TP
384(define_constraint "Tu"
385 "@internal In ARM / Thumb-2 an integer constant iff literal pools are
386 allowed."
387 (and (match_test "CONSTANT_P (op)")
388 (match_test "!arm_disable_literal_pool")))
389
956a95a5
KT
390(define_register_constraint "Ts" "(arm_restrict_it) ? LO_REGS : GENERAL_REGS"
391 "For arm_restrict_it the core registers @code{r0}-@code{r7}. GENERAL_REGS otherwise.")
392
18f0fe6b
RH
393(define_memory_constraint "Ua"
394 "@internal
395 An address valid for loading/storing register exclusive"
396 (match_operand 0 "mem_noofs_operand"))
397
aed773a2
CB
398(define_memory_constraint "Uh"
399 "@internal
400 An address suitable for byte and half-word loads which does not point inside a constant pool"
401 (and (match_code "mem")
402 (match_test "arm_legitimate_address_p (GET_MODE (op), XEXP (op, 0), false) && !arm_is_constant_pool_ref (op)")))
403
88f77cba
JB
404(define_memory_constraint "Ut"
405 "@internal
406 In ARM/Thumb-2 state an address valid for loading/storing opaque structure
407 types wider than TImode."
408 (and (match_code "mem")
409 (match_test "TARGET_32BIT && neon_struct_mem_operand (op)")))
410
ce92b223
RE
411(define_memory_constraint "Uv"
412 "@internal
5b3e6663 413 In ARM/Thumb-2 state a valid VFP load/store address."
ce92b223 414 (and (match_code "mem")
5b3e6663 415 (match_test "TARGET_32BIT && arm_coproc_mem_operand (op, FALSE)")))
ce92b223
RE
416
417(define_memory_constraint "Uy"
418 "@internal
5b3e6663 419 In ARM/Thumb-2 state a valid iWMMX load/store address."
ce92b223 420 (and (match_code "mem")
5b3e6663 421 (match_test "TARGET_32BIT && arm_coproc_mem_operand (op, TRUE)")))
ce92b223 422
88f77cba 423(define_memory_constraint "Un"
dc34db56
PB
424 "@internal
425 In ARM/Thumb-2 state a valid address for Neon doubleword vector
426 load/store instructions."
427 (and (match_code "mem")
33255ae3 428 (match_test "TARGET_32BIT && neon_vector_mem_operand (op, 0, true)")))
dc34db56
PB
429
430(define_memory_constraint "Um"
88f77cba
JB
431 "@internal
432 In ARM/Thumb-2 state a valid address for Neon element and structure
433 load/store instructions."
434 (and (match_code "mem")
33255ae3 435 (match_test "TARGET_32BIT && neon_vector_mem_operand (op, 2, true)")))
88f77cba
JB
436
437(define_memory_constraint "Us"
438 "@internal
439 In ARM/Thumb-2 state a valid address for non-offset loads/stores of
440 quad-word values in four ARM registers."
441 (and (match_code "mem")
33255ae3 442 (match_test "TARGET_32BIT && neon_vector_mem_operand (op, 1, true)")))
88f77cba 443
ce92b223
RE
444(define_memory_constraint "Uq"
445 "@internal
446 In ARM state an address valid in ldrsb instructions."
447 (and (match_code "mem")
448 (match_test "TARGET_ARM
c6c3dba9 449 && arm_legitimate_address_outer_p (GET_MODE (op), XEXP (op, 0),
aed773a2
CB
450 SIGN_EXTEND, 0)
451 && !arm_is_constant_pool_ref (op)")))
ce92b223
RE
452
453(define_memory_constraint "Q"
454 "@internal
84c20253 455 An address that is a single base register."
ce92b223
RE
456 (and (match_code "mem")
457 (match_test "REG_P (XEXP (op, 0))")))
458
363ee90e
WG
459(define_memory_constraint "Uu"
460 "@internal
461 In Thumb state an address that is valid in 16bit encoding."
462 (and (match_code "mem")
463 (match_test "TARGET_THUMB
464 && thumb1_legitimate_address_p (GET_MODE (op), XEXP (op, 0),
465 0)")))
466
86b60116
JB
467; The 16-bit post-increment LDR/STR accepted by thumb1_legitimate_address_p
468; are actually LDM/STM instructions, so cannot be used to access unaligned
469; data.
470(define_memory_constraint "Uw"
471 "@internal
472 In Thumb state an address that is valid in 16bit encoding, and that can be
473 used for unaligned accesses."
474 (and (match_code "mem")
475 (match_test "TARGET_THUMB
476 && thumb1_legitimate_address_p (GET_MODE (op), XEXP (op, 0),
477 0)
478 && GET_CODE (XEXP (op, 0)) != POST_INC")))
479
0b93d3b6
RR
480(define_constraint "US"
481 "@internal
482 US is a symbol reference."
483 (match_code "symbol_ref")
484)
485
3811581f
AV
486(define_memory_constraint "Uz"
487 "@internal
488 A memory access that is accessible as an LDC/STC operand"
489 (and (match_code "mem")
490 (match_test "arm_coproc_ldc_stc_legitimate_address (op)")))
491
ce92b223
RE
492;; We used to have constraint letters for S and R in ARM state, but
493;; all uses of these now appear to have been removed.
494
495;; Additionally, we used to have a Q constraint in Thumb state, but
496;; this wasn't really a valid memory constraint. Again, all uses of
497;; this now seem to have been removed.
9adcfa3c 498