constraints.md revision 1.3 1 1.1 mrg ;; Constraint definitions for ARM and Thumb
2 1.3 mrg ;; Copyright (C) 2006-2013 Free Software Foundation, Inc.
3 1.1 mrg ;; Contributed by ARM Ltd.
4 1.1 mrg
5 1.1 mrg ;; This file is part of GCC.
6 1.1 mrg
7 1.1 mrg ;; GCC is free software; you can redistribute it and/or modify it
8 1.1 mrg ;; under the terms of the GNU General Public License as published
9 1.1 mrg ;; by the Free Software Foundation; either version 3, or (at your
10 1.1 mrg ;; option) any later version.
11 1.1 mrg
12 1.1 mrg ;; GCC is distributed in the hope that it will be useful, but WITHOUT
13 1.1 mrg ;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 1.1 mrg ;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
15 1.1 mrg ;; License for more details.
16 1.1 mrg
17 1.1 mrg ;; You should have received a copy of the GNU General Public License
18 1.1 mrg ;; along with GCC; see the file COPYING3. If not see
19 1.1 mrg ;; <http://www.gnu.org/licenses/>.
20 1.1 mrg
21 1.1 mrg ;; The following register constraints have been used:
22 1.3 mrg ;; - in ARM/Thumb-2 state: t, w, x, y, z
23 1.1 mrg ;; - in Thumb state: h, b
24 1.1 mrg ;; - in both states: l, c, k
25 1.1 mrg ;; In ARM state, 'l' is an alias for 'r'
26 1.3 mrg ;; 'f' and 'v' were previously used for FPA and MAVERICK registers.
27 1.1 mrg
28 1.1 mrg ;; The following normal constraints have been used:
29 1.3 mrg ;; in ARM/Thumb-2 state: G, I, j, J, K, L, M
30 1.1 mrg ;; in Thumb-1 state: I, J, K, L, M, N, O
31 1.3 mrg ;; 'H' was previously used for FPA.
32 1.1 mrg
33 1.1 mrg ;; The following multi-letter normal constraints have been used:
34 1.3 mrg ;; in ARM/Thumb-2 state: Da, Db, Dc, Dd, Dn, Dl, DL, Do, Dv, Dy, Di, Dt, Dz
35 1.3 mrg ;; in Thumb-1 state: Pa, Pb, Pc, Pd, Pe
36 1.3 mrg ;; in Thumb-2 state: Pj, PJ, Ps, Pt, Pu, Pv, Pw, Px, Py
37 1.1 mrg
38 1.1 mrg ;; The following memory constraints have been used:
39 1.3 mrg ;; in ARM/Thumb-2 state: Q, Uh, Ut, Uv, Uy, Un, Um, Us
40 1.1 mrg ;; in ARM state: Uq
41 1.3 mrg ;; in Thumb state: Uu, Uw
42 1.1 mrg
43 1.1 mrg
44 1.1 mrg (define_register_constraint "t" "TARGET_32BIT ? VFP_LO_REGS : NO_REGS"
45 1.1 mrg "The VFP registers @code{s0}-@code{s31}.")
46 1.1 mrg
47 1.1 mrg (define_register_constraint "w"
48 1.1 mrg "TARGET_32BIT ? (TARGET_VFPD32 ? VFP_REGS : VFP_LO_REGS) : NO_REGS"
49 1.1 mrg "The VFP registers @code{d0}-@code{d15}, or @code{d0}-@code{d31} for VFPv3.")
50 1.1 mrg
51 1.1 mrg (define_register_constraint "x" "TARGET_32BIT ? VFP_D0_D7_REGS : NO_REGS"
52 1.1 mrg "The VFP registers @code{d0}-@code{d7}.")
53 1.1 mrg
54 1.1 mrg (define_register_constraint "y" "TARGET_REALLY_IWMMXT ? IWMMXT_REGS : NO_REGS"
55 1.1 mrg "The Intel iWMMX co-processor registers.")
56 1.1 mrg
57 1.1 mrg (define_register_constraint "z"
58 1.1 mrg "TARGET_REALLY_IWMMXT ? IWMMXT_GR_REGS : NO_REGS"
59 1.1 mrg "The Intel iWMMX GR registers.")
60 1.1 mrg
61 1.1 mrg (define_register_constraint "l" "TARGET_THUMB ? LO_REGS : GENERAL_REGS"
62 1.1 mrg "In Thumb state the core registers @code{r0}-@code{r7}.")
63 1.1 mrg
64 1.1 mrg (define_register_constraint "h" "TARGET_THUMB ? HI_REGS : NO_REGS"
65 1.1 mrg "In Thumb state the core registers @code{r8}-@code{r15}.")
66 1.1 mrg
67 1.1 mrg (define_constraint "j"
68 1.1 mrg "A constant suitable for a MOVW instruction. (ARM/Thumb-2)"
69 1.1 mrg (and (match_test "TARGET_32BIT && arm_arch_thumb2")
70 1.1 mrg (ior (match_code "high")
71 1.1 mrg (and (match_code "const_int")
72 1.1 mrg (match_test "(ival & 0xffff0000) == 0")))))
73 1.1 mrg
74 1.3 mrg (define_constraint "Pj"
75 1.3 mrg "@internal A 12-bit constant suitable for an ADDW or SUBW instruction. (Thumb-2)"
76 1.3 mrg (and (match_code "const_int")
77 1.3 mrg (and (match_test "TARGET_THUMB2")
78 1.3 mrg (match_test "(ival & 0xfffff000) == 0"))))
79 1.3 mrg
80 1.3 mrg (define_constraint "PJ"
81 1.3 mrg "@internal A constant that satisfies the Pj constrant if negated."
82 1.3 mrg (and (match_code "const_int")
83 1.3 mrg (and (match_test "TARGET_THUMB2")
84 1.3 mrg (match_test "((-ival) & 0xfffff000) == 0"))))
85 1.3 mrg
86 1.1 mrg (define_register_constraint "k" "STACK_REG"
87 1.1 mrg "@internal The stack register.")
88 1.1 mrg
89 1.1 mrg (define_register_constraint "b" "TARGET_THUMB ? BASE_REGS : NO_REGS"
90 1.1 mrg "@internal
91 1.1 mrg Thumb only. The union of the low registers and the stack register.")
92 1.1 mrg
93 1.1 mrg (define_register_constraint "c" "CC_REG"
94 1.1 mrg "@internal The condition code register.")
95 1.1 mrg
96 1.1 mrg (define_constraint "I"
97 1.1 mrg "In ARM/Thumb-2 state a constant that can be used as an immediate value in a
98 1.1 mrg Data Processing instruction. In Thumb-1 state a constant in the range
99 1.1 mrg 0-255."
100 1.1 mrg (and (match_code "const_int")
101 1.1 mrg (match_test "TARGET_32BIT ? const_ok_for_arm (ival)
102 1.1 mrg : ival >= 0 && ival <= 255")))
103 1.1 mrg
104 1.1 mrg (define_constraint "J"
105 1.1 mrg "In ARM/Thumb-2 state a constant in the range @minus{}4095-4095. In Thumb-1
106 1.1 mrg state a constant in the range @minus{}255-@minus{}1."
107 1.1 mrg (and (match_code "const_int")
108 1.1 mrg (match_test "TARGET_32BIT ? (ival >= -4095 && ival <= 4095)
109 1.1 mrg : (ival >= -255 && ival <= -1)")))
110 1.1 mrg
111 1.1 mrg (define_constraint "K"
112 1.1 mrg "In ARM/Thumb-2 state a constant that satisfies the @code{I} constraint if
113 1.1 mrg inverted. In Thumb-1 state a constant that satisfies the @code{I}
114 1.1 mrg constraint multiplied by any power of 2."
115 1.1 mrg (and (match_code "const_int")
116 1.1 mrg (match_test "TARGET_32BIT ? const_ok_for_arm (~ival)
117 1.1 mrg : thumb_shiftable_const (ival)")))
118 1.1 mrg
119 1.1 mrg (define_constraint "L"
120 1.1 mrg "In ARM/Thumb-2 state a constant that satisfies the @code{I} constraint if
121 1.1 mrg negated. In Thumb-1 state a constant in the range @minus{}7-7."
122 1.1 mrg (and (match_code "const_int")
123 1.1 mrg (match_test "TARGET_32BIT ? const_ok_for_arm (-ival)
124 1.1 mrg : (ival >= -7 && ival <= 7)")))
125 1.1 mrg
126 1.1 mrg ;; The ARM state version is internal...
127 1.1 mrg ;; @internal In ARM/Thumb-2 state a constant in the range 0-32 or any
128 1.1 mrg ;; power of 2.
129 1.1 mrg (define_constraint "M"
130 1.1 mrg "In Thumb-1 state a constant that is a multiple of 4 in the range 0-1020."
131 1.1 mrg (and (match_code "const_int")
132 1.1 mrg (match_test "TARGET_32BIT ? ((ival >= 0 && ival <= 32)
133 1.3 mrg || (((ival & (ival - 1)) & 0xFFFFFFFF) == 0))
134 1.3 mrg : ival >= 0 && ival <= 1020 && (ival & 3) == 0")))
135 1.1 mrg
136 1.1 mrg (define_constraint "N"
137 1.1 mrg "Thumb-1 state a constant in the range 0-31."
138 1.1 mrg (and (match_code "const_int")
139 1.1 mrg (match_test "!TARGET_32BIT && (ival >= 0 && ival <= 31)")))
140 1.1 mrg
141 1.1 mrg (define_constraint "O"
142 1.1 mrg "In Thumb-1 state a constant that is a multiple of 4 in the range
143 1.1 mrg @minus{}508-508."
144 1.1 mrg (and (match_code "const_int")
145 1.1 mrg (match_test "TARGET_THUMB1 && ival >= -508 && ival <= 508
146 1.1 mrg && ((ival & 3) == 0)")))
147 1.1 mrg
148 1.1 mrg (define_constraint "Pa"
149 1.1 mrg "@internal In Thumb-1 state a constant in the range -510 to +510"
150 1.1 mrg (and (match_code "const_int")
151 1.1 mrg (match_test "TARGET_THUMB1 && ival >= -510 && ival <= 510
152 1.1 mrg && (ival > 255 || ival < -255)")))
153 1.1 mrg
154 1.1 mrg (define_constraint "Pb"
155 1.1 mrg "@internal In Thumb-1 state a constant in the range -262 to +262"
156 1.1 mrg (and (match_code "const_int")
157 1.1 mrg (match_test "TARGET_THUMB1 && ival >= -262 && ival <= 262
158 1.1 mrg && (ival > 255 || ival < -255)")))
159 1.1 mrg
160 1.3 mrg (define_constraint "Pc"
161 1.3 mrg "@internal In Thumb-1 state a constant that is in the range 1021 to 1275"
162 1.3 mrg (and (match_code "const_int")
163 1.3 mrg (match_test "TARGET_THUMB1
164 1.3 mrg && ival > 1020 && ival <= 1275")))
165 1.3 mrg
166 1.3 mrg (define_constraint "Pd"
167 1.3 mrg "@internal In Thumb-1 state a constant in the range 0 to 7"
168 1.3 mrg (and (match_code "const_int")
169 1.3 mrg (match_test "TARGET_THUMB1 && ival >= 0 && ival <= 7")))
170 1.3 mrg
171 1.3 mrg (define_constraint "Pe"
172 1.3 mrg "@internal In Thumb-1 state a constant in the range 256 to +510"
173 1.3 mrg (and (match_code "const_int")
174 1.3 mrg (match_test "TARGET_THUMB1 && ival >= 256 && ival <= 510")))
175 1.3 mrg
176 1.1 mrg (define_constraint "Ps"
177 1.1 mrg "@internal In Thumb-2 state a constant in the range -255 to +255"
178 1.1 mrg (and (match_code "const_int")
179 1.1 mrg (match_test "TARGET_THUMB2 && ival >= -255 && ival <= 255")))
180 1.1 mrg
181 1.1 mrg (define_constraint "Pt"
182 1.1 mrg "@internal In Thumb-2 state a constant in the range -7 to +7"
183 1.1 mrg (and (match_code "const_int")
184 1.1 mrg (match_test "TARGET_THUMB2 && ival >= -7 && ival <= 7")))
185 1.1 mrg
186 1.3 mrg (define_constraint "Pu"
187 1.3 mrg "@internal In Thumb-2 state a constant in the range +1 to +8"
188 1.3 mrg (and (match_code "const_int")
189 1.3 mrg (match_test "TARGET_THUMB2 && ival >= 1 && ival <= 8")))
190 1.3 mrg
191 1.3 mrg (define_constraint "Pv"
192 1.3 mrg "@internal In Thumb-2 state a constant in the range -255 to 0"
193 1.3 mrg (and (match_code "const_int")
194 1.3 mrg (match_test "TARGET_THUMB2 && ival >= -255 && ival <= 0")))
195 1.3 mrg
196 1.3 mrg (define_constraint "Pw"
197 1.3 mrg "@internal In Thumb-2 state a constant in the range -255 to -1"
198 1.3 mrg (and (match_code "const_int")
199 1.3 mrg (match_test "TARGET_THUMB2 && ival >= -255 && ival <= -1")))
200 1.3 mrg
201 1.3 mrg (define_constraint "Px"
202 1.3 mrg "@internal In Thumb-2 state a constant in the range -7 to -1"
203 1.3 mrg (and (match_code "const_int")
204 1.3 mrg (match_test "TARGET_THUMB2 && ival >= -7 && ival <= -1")))
205 1.3 mrg
206 1.3 mrg (define_constraint "Py"
207 1.3 mrg "@internal In Thumb-2 state a constant in the range 0 to 255"
208 1.3 mrg (and (match_code "const_int")
209 1.3 mrg (match_test "TARGET_THUMB2 && ival >= 0 && ival <= 255")))
210 1.3 mrg
211 1.1 mrg (define_constraint "G"
212 1.3 mrg "In ARM/Thumb-2 state the floating-point constant 0."
213 1.1 mrg (and (match_code "const_double")
214 1.1 mrg (match_test "TARGET_32BIT && arm_const_double_rtx (op)")))
215 1.1 mrg
216 1.3 mrg (define_constraint "Dz"
217 1.3 mrg "@internal
218 1.3 mrg In ARM/Thumb-2 state a vector of constant zeros."
219 1.3 mrg (and (match_code "const_vector")
220 1.3 mrg (match_test "TARGET_NEON && op == CONST0_RTX (mode)")))
221 1.1 mrg
222 1.1 mrg (define_constraint "Da"
223 1.1 mrg "@internal
224 1.1 mrg In ARM/Thumb-2 state a const_int, const_double or const_vector that can
225 1.1 mrg be generated with two Data Processing insns."
226 1.1 mrg (and (match_code "const_double,const_int,const_vector")
227 1.1 mrg (match_test "TARGET_32BIT && arm_const_double_inline_cost (op) == 2")))
228 1.1 mrg
229 1.1 mrg (define_constraint "Db"
230 1.1 mrg "@internal
231 1.1 mrg In ARM/Thumb-2 state a const_int, const_double or const_vector that can
232 1.1 mrg be generated with three Data Processing insns."
233 1.1 mrg (and (match_code "const_double,const_int,const_vector")
234 1.1 mrg (match_test "TARGET_32BIT && arm_const_double_inline_cost (op) == 3")))
235 1.1 mrg
236 1.1 mrg (define_constraint "Dc"
237 1.1 mrg "@internal
238 1.1 mrg In ARM/Thumb-2 state a const_int, const_double or const_vector that can
239 1.1 mrg be generated with four Data Processing insns. This pattern is disabled
240 1.1 mrg if optimizing for space or when we have load-delay slots to fill."
241 1.1 mrg (and (match_code "const_double,const_int,const_vector")
242 1.1 mrg (match_test "TARGET_32BIT && arm_const_double_inline_cost (op) == 4
243 1.1 mrg && !(optimize_size || arm_ld_sched)")))
244 1.1 mrg
245 1.3 mrg (define_constraint "Dd"
246 1.3 mrg "@internal
247 1.3 mrg In ARM/Thumb-2 state a const_int that can be used by insn adddi."
248 1.3 mrg (and (match_code "const_int")
249 1.3 mrg (match_test "TARGET_32BIT && const_ok_for_dimode_op (ival, PLUS)")))
250 1.3 mrg
251 1.3 mrg (define_constraint "Di"
252 1.3 mrg "@internal
253 1.3 mrg In ARM/Thumb-2 state a const_int or const_double where both the high
254 1.3 mrg and low SImode words can be generated as immediates in 32-bit instructions."
255 1.3 mrg (and (match_code "const_double,const_int")
256 1.3 mrg (match_test "TARGET_32BIT && arm_const_double_by_immediates (op)")))
257 1.3 mrg
258 1.1 mrg (define_constraint "Dn"
259 1.1 mrg "@internal
260 1.3 mrg In ARM/Thumb-2 state a const_vector or const_int which can be loaded with a
261 1.3 mrg Neon vmov immediate instruction."
262 1.3 mrg (and (match_code "const_vector,const_int")
263 1.1 mrg (match_test "TARGET_32BIT
264 1.1 mrg && imm_for_neon_mov_operand (op, GET_MODE (op))")))
265 1.1 mrg
266 1.1 mrg (define_constraint "Dl"
267 1.1 mrg "@internal
268 1.1 mrg In ARM/Thumb-2 state a const_vector which can be used with a Neon vorr or
269 1.1 mrg vbic instruction."
270 1.1 mrg (and (match_code "const_vector")
271 1.1 mrg (match_test "TARGET_32BIT
272 1.1 mrg && imm_for_neon_logic_operand (op, GET_MODE (op))")))
273 1.1 mrg
274 1.1 mrg (define_constraint "DL"
275 1.1 mrg "@internal
276 1.1 mrg In ARM/Thumb-2 state a const_vector which can be used with a Neon vorn or
277 1.1 mrg vand instruction."
278 1.1 mrg (and (match_code "const_vector")
279 1.1 mrg (match_test "TARGET_32BIT
280 1.1 mrg && imm_for_neon_inv_logic_operand (op, GET_MODE (op))")))
281 1.1 mrg
282 1.3 mrg (define_constraint "Do"
283 1.3 mrg "@internal
284 1.3 mrg In ARM/Thumb2 state valid offset for an ldrd/strd instruction."
285 1.3 mrg (and (match_code "const_int")
286 1.3 mrg (match_test "TARGET_LDRD && offset_ok_for_ldrd_strd (ival)")))
287 1.3 mrg
288 1.1 mrg (define_constraint "Dv"
289 1.1 mrg "@internal
290 1.1 mrg In ARM/Thumb-2 state a const_double which can be used with a VFP fconsts
291 1.1 mrg instruction."
292 1.1 mrg (and (match_code "const_double")
293 1.1 mrg (match_test "TARGET_32BIT && vfp3_const_double_rtx (op)")))
294 1.1 mrg
295 1.1 mrg (define_constraint "Dy"
296 1.1 mrg "@internal
297 1.1 mrg In ARM/Thumb-2 state a const_double which can be used with a VFP fconstd
298 1.1 mrg instruction."
299 1.1 mrg (and (match_code "const_double")
300 1.1 mrg (match_test "TARGET_32BIT && TARGET_VFP_DOUBLE && vfp3_const_double_rtx (op)")))
301 1.1 mrg
302 1.3 mrg (define_constraint "Dt"
303 1.3 mrg "@internal
304 1.3 mrg In ARM/ Thumb2 a const_double which can be used with a vcvt.f32.s32 with fract bits operation"
305 1.3 mrg (and (match_code "const_double")
306 1.3 mrg (match_test "TARGET_32BIT && TARGET_VFP && vfp3_const_double_for_fract_bits (op)")))
307 1.3 mrg
308 1.3 mrg (define_memory_constraint "Ua"
309 1.3 mrg "@internal
310 1.3 mrg An address valid for loading/storing register exclusive"
311 1.3 mrg (match_operand 0 "mem_noofs_operand"))
312 1.3 mrg
313 1.3 mrg (define_memory_constraint "Uh"
314 1.3 mrg "@internal
315 1.3 mrg An address suitable for byte and half-word loads which does not point inside a constant pool"
316 1.3 mrg (and (match_code "mem")
317 1.3 mrg (match_test "arm_legitimate_address_p (GET_MODE (op), XEXP (op, 0), false) && !arm_is_constant_pool_ref (op)")))
318 1.3 mrg
319 1.1 mrg (define_memory_constraint "Ut"
320 1.1 mrg "@internal
321 1.1 mrg In ARM/Thumb-2 state an address valid for loading/storing opaque structure
322 1.1 mrg types wider than TImode."
323 1.1 mrg (and (match_code "mem")
324 1.1 mrg (match_test "TARGET_32BIT && neon_struct_mem_operand (op)")))
325 1.1 mrg
326 1.1 mrg (define_memory_constraint "Uv"
327 1.1 mrg "@internal
328 1.1 mrg In ARM/Thumb-2 state a valid VFP load/store address."
329 1.1 mrg (and (match_code "mem")
330 1.1 mrg (match_test "TARGET_32BIT && arm_coproc_mem_operand (op, FALSE)")))
331 1.1 mrg
332 1.1 mrg (define_memory_constraint "Uy"
333 1.1 mrg "@internal
334 1.1 mrg In ARM/Thumb-2 state a valid iWMMX load/store address."
335 1.1 mrg (and (match_code "mem")
336 1.1 mrg (match_test "TARGET_32BIT && arm_coproc_mem_operand (op, TRUE)")))
337 1.1 mrg
338 1.1 mrg (define_memory_constraint "Un"
339 1.1 mrg "@internal
340 1.1 mrg In ARM/Thumb-2 state a valid address for Neon doubleword vector
341 1.1 mrg load/store instructions."
342 1.1 mrg (and (match_code "mem")
343 1.1 mrg (match_test "TARGET_32BIT && neon_vector_mem_operand (op, 0)")))
344 1.1 mrg
345 1.1 mrg (define_memory_constraint "Um"
346 1.1 mrg "@internal
347 1.1 mrg In ARM/Thumb-2 state a valid address for Neon element and structure
348 1.1 mrg load/store instructions."
349 1.1 mrg (and (match_code "mem")
350 1.1 mrg (match_test "TARGET_32BIT && neon_vector_mem_operand (op, 2)")))
351 1.1 mrg
352 1.1 mrg (define_memory_constraint "Us"
353 1.1 mrg "@internal
354 1.1 mrg In ARM/Thumb-2 state a valid address for non-offset loads/stores of
355 1.1 mrg quad-word values in four ARM registers."
356 1.1 mrg (and (match_code "mem")
357 1.1 mrg (match_test "TARGET_32BIT && neon_vector_mem_operand (op, 1)")))
358 1.1 mrg
359 1.1 mrg (define_memory_constraint "Uq"
360 1.1 mrg "@internal
361 1.1 mrg In ARM state an address valid in ldrsb instructions."
362 1.1 mrg (and (match_code "mem")
363 1.1 mrg (match_test "TARGET_ARM
364 1.1 mrg && arm_legitimate_address_outer_p (GET_MODE (op), XEXP (op, 0),
365 1.3 mrg SIGN_EXTEND, 0)
366 1.3 mrg && !arm_is_constant_pool_ref (op)")))
367 1.1 mrg
368 1.1 mrg (define_memory_constraint "Q"
369 1.1 mrg "@internal
370 1.1 mrg In ARM/Thumb-2 state an address that is a single base register."
371 1.1 mrg (and (match_code "mem")
372 1.1 mrg (match_test "REG_P (XEXP (op, 0))")))
373 1.1 mrg
374 1.3 mrg (define_memory_constraint "Uu"
375 1.3 mrg "@internal
376 1.3 mrg In Thumb state an address that is valid in 16bit encoding."
377 1.3 mrg (and (match_code "mem")
378 1.3 mrg (match_test "TARGET_THUMB
379 1.3 mrg && thumb1_legitimate_address_p (GET_MODE (op), XEXP (op, 0),
380 1.3 mrg 0)")))
381 1.3 mrg
382 1.3 mrg ; The 16-bit post-increment LDR/STR accepted by thumb1_legitimate_address_p
383 1.3 mrg ; are actually LDM/STM instructions, so cannot be used to access unaligned
384 1.3 mrg ; data.
385 1.3 mrg (define_memory_constraint "Uw"
386 1.3 mrg "@internal
387 1.3 mrg In Thumb state an address that is valid in 16bit encoding, and that can be
388 1.3 mrg used for unaligned accesses."
389 1.3 mrg (and (match_code "mem")
390 1.3 mrg (match_test "TARGET_THUMB
391 1.3 mrg && thumb1_legitimate_address_p (GET_MODE (op), XEXP (op, 0),
392 1.3 mrg 0)
393 1.3 mrg && GET_CODE (XEXP (op, 0)) != POST_INC")))
394 1.3 mrg
395 1.1 mrg ;; We used to have constraint letters for S and R in ARM state, but
396 1.1 mrg ;; all uses of these now appear to have been removed.
397 1.1 mrg
398 1.1 mrg ;; Additionally, we used to have a Q constraint in Thumb state, but
399 1.1 mrg ;; this wasn't really a valid memory constraint. Again, all uses of
400 1.1 mrg ;; this now seem to have been removed.
401