1 # RUN: llvm-mc -triple=hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s
2 # Hexagon Programmer's Reference Manual 11.8 ST
7 memd(r17 + r21<<#3) = r31:30
11 # CHECK-NEXT: 28 d4 c0 48
13 memd(r17+#168) = r21:20
15 memd(r17 ++ I:circ(m1)) = r21:20
17 memd(r17 ++ #40:circ(m1)) = r21:20
19 memd(r17++#40) = r21:20
21 # CHECK-NEXT: d5 fe d1 ad
22 memd(r17<<#3 + ##21) = r31:30
23 memd(r17++m1) = r21:20
25 memd(r17 ++ m1:brev) = r21:20
27 # Store doubleword conditionally
29 if (p3) memd(r17+r21<<#3) = r31:30
31 if (!p3) memd(r17+r21<<#3) = r31:30
33 # CHECK-NEXT: fe f5 d1 36
35 if (p3.new) memd(r17+r21<<#3) = r31:30 }
37 # CHECK-NEXT: fe f5 d1 37
39 if (!p3.new) memd(r17+r21<<#3) = r31:30 }
41 if (p3) memd(r17+#168) = r31:30
43 if (!p3) memd(r17+#168) = r31:30
45 # CHECK-NEXT: ab de d1 42
47 if (p3.new) memd(r17+#168) = r31:30 }
49 # CHECK-NEXT: ab de d1 46
51 if (!p3.new) memd(r17+#168) = r31:30 }
53 if (p3) memd(r17++#40) = r21:20
55 if (!p3) memd(r17++#40) = r21:20
57 # CHECK-NEXT: ab f4 d1 ab
59 if (p3.new) memd(r17++#40) = r21:20 }
61 # CHECK-NEXT: af f4 d1 ab
63 if (!p3.new) memd(r17++#40) = r21:20 }
65 # CHECK-NEXT: c3 d4 c2 af
66 if (p3) memd(##168) = r21:20
68 # CHECK-NEXT: c7 d4 c2 af
69 if (!p3) memd(##168) = r21:20
71 # CHECK-NEXT: 02 40 00 00
72 # CHECK-NEXT: c3 f4 c2 af
74 if (p3.new) memd(##168) = r21:20 }
76 # CHECK-NEXT: 02 40 00 00
77 # CHECK-NEXT: c7 f4 c2 af
79 if (!p3.new) memd(##168) = r21:20 }
83 memb(r17 + r21<<#3) = r31
89 # CHECK-NEXT: 15 d5 00 48
94 memb(r17 ++ I:circ(m1)) = r21
96 memb(r17 ++ #5:circ(m1)) = r21
100 # CHECK-NEXT: d5 ff 11 ad
101 memb(r17<<#3 + ##21) = r31
105 memb(r17 ++ m1:brev) = r21
107 # Store byte conditionally
109 if (p3) memb(r17+r21<<#3) = r31
111 if (!p3) memb(r17+r21<<#3) = r31
113 # CHECK-NEXT: ff f5 11 36
115 if (p3.new) memb(r17+r21<<#3) = r31 }
117 # CHECK-NEXT: ff f5 11 37
119 if (!p3.new) memb(r17+r21<<#3) = r31 }
121 if (p3) memb(r17+#21)=#31
123 if (!p3) memb(r17+#21)=#31
125 # CHECK-NEXT: ff ca 11 39
127 if (p3.new) memb(r17+#21)=#31 }
129 # CHECK-NEXT: ff ca 91 39
131 if (!p3.new) memb(r17+#21)=#31 }
133 if (p3) memb(r17+#21) = r31
135 if (!p3) memb(r17+#21) = r31
137 # CHECK-NEXT: ab df 11 42
139 if (p3.new) memb(r17+#21) = r31 }
141 # CHECK-NEXT: ab df 11 46
143 if (!p3.new) memb(r17+#21) = r31 }
145 if (p3) memb(r17++#5) = r21
147 if (!p3) memb(r17++#5) = r21
149 # CHECK-NEXT: ab f5 11 ab
151 if (p3.new) memb(r17++#5) = r21 }
153 # CHECK-NEXT: af f5 11 ab
155 if (!p3.new) memb(r17++#5) = r21 }
157 # CHECK-NEXT: ab d5 01 af
158 if (p3) memb(##21) = r21
160 # CHECK-NEXT: af d5 01 af
161 if (!p3) memb(##21) = r21
163 # CHECK-NEXT: 00 40 00 00
164 # CHECK-NEXT: ab f5 01 af
166 if (p3.new) memb(##21) = r21 }
168 # CHECK-NEXT: 00 40 00 00
169 # CHECK-NEXT: af f5 01 af
171 if (!p3.new) memb(##21) = r21 }
175 memh(r17 + r21<<#3) = r31
177 memh(r17 + r21<<#3) = r31.h
181 # CHECK-NEXT: 2a d5 40 48
184 # CHECK-NEXT: 2a d5 60 48
193 memh(r17+#42) = r31.h
195 memh(r17 ++ I:circ(m1)) = r21
197 memh(r17 ++ #10:circ(m1)) = r21
199 memh(r17 ++ I:circ(m1)) = r21.h
201 memh(r17 ++ #10:circ(m1)) = r21.h
205 # CHECK-NEXT: d5 ff 51 ad
206 memh(r17<<#3 + ##21) = r31
208 memh(r17++#10) = r21.h
210 # CHECK-NEXT: d5 ff 71 ad
211 memh(r17<<#3 + ##21) = r31.h
215 memh(r17++m1) = r21.h
217 memh(r17 ++ m1:brev) = r21
219 memh(r17 ++ m1:brev) = r21.h
221 # Store halfword conditionally
223 if (p3) memh(r17+r21<<#3) = r31
225 if (p3) memh(r17+r21<<#3) = r31.h
227 if (!p3) memh(r17+r21<<#3) = r31
229 if (!p3) memh(r17+r21<<#3) = r31.h
231 # CHECK-NEXT: ff f5 51 36
233 if (p3.new) memh(r17+r21<<#3) = r31 }
235 # CHECK-NEXT: ff f5 71 36
237 if (p3.new) memh(r17+r21<<#3) = r31.h }
239 # CHECK-NEXT: ff f5 51 37
241 if (!p3.new) memh(r17+r21<<#3) = r31 }
243 # CHECK-NEXT: ff f5 71 37
245 if (!p3.new) memh(r17+r21<<#3) = r31.h }
247 if (p3) memh(r17+#62)=#21
249 if (!p3) memh(r17+#62)=#21
251 # CHECK-NEXT: f5 cf 31 39
253 if (p3.new) memh(r17+#62)=#21 }
255 # CHECK-NEXT: f5 cf b1 39
257 if (!p3.new) memh(r17+#62)=#21 }
259 if (p3) memh(r17+#62) = r21
261 if (p3) memh(r17+#62) = r21.h
263 if (!p3) memh(r17+#62) = r21
265 if (!p3) memh(r17+#62) = r21.h
267 # CHECK-NEXT: fb d5 51 42
269 if (p3.new) memh(r17+#62) = r21 }
271 # CHECK-NEXT: fb d5 71 42
273 if (p3.new) memh(r17+#62) = r21.h }
275 # CHECK-NEXT: fb d5 51 46
277 if (!p3.new) memh(r17+#62) = r21 }
279 # CHECK-NEXT: fb d5 71 46
281 if (!p3.new) memh(r17+#62) = r21.h }
283 if (p3) memh(r17++#10) = r21
285 if (!p3) memh(r17++#10) = r21
287 # CHECK-NEXT: ab f5 51 ab
289 if (p3.new) memh(r17++#10) = r21 }
291 # CHECK-NEXT: af f5 51 ab
293 if (!p3.new) memh(r17++#10) = r21 }
295 if (p3) memh(r17++#10) = r21.h
297 if (!p3) memh(r17++#10) = r21.h
299 # CHECK-NEXT: ab f5 71 ab
301 if (p3.new) memh(r17++#10) = r21.h }
303 # CHECK-NEXT: af f5 71 ab
305 if (!p3.new) memh(r17++#10) = r21.h }
307 # CHECK-NEXT: d3 d5 42 af
308 if (p3) memh(##42) = r21
310 # CHECK-NEXT: d3 d5 62 af
311 if (p3) memh(##42) = r21.h
313 # CHECK-NEXT: d7 d5 42 af
314 if (!p3) memh(##42) = r21
316 # CHECK-NEXT: d7 d5 62 af
317 if (!p3) memh(##42) = r21.h
319 # CHECK-NEXT: 00 40 00 00
320 # CHECK-NEXT: d3 f5 42 af
322 if (p3.new) memh(##42) = r21 }
324 # CHECK-NEXT: 00 40 00 00
325 # CHECK-NEXT: d3 f5 62 af
327 if (p3.new) memh(##42) = r21.h }
329 # CHECK-NEXT: 00 40 00 00
330 # CHECK-NEXT: d7 f5 42 af
332 if (!p3.new) memh(##42) = r21 }
334 # CHECK-NEXT: 00 40 00 00
335 # CHECK-NEXT: d7 f5 62 af
337 if (!p3.new) memh(##42) = r21.h }
341 memw(r17 + r21<<#3) = r31
347 # CHECK-NEXT: 14 d5 80 48
354 memw(r17 ++ I:circ(m1)) = r21
356 memw(r17 ++ #20:circ(m1)) = r21
360 # CHECK-NEXT: d5 ff 91 ad
361 memw(r17<<#3 + ##21) = r31
365 memw(r17 ++ m1:brev) = r21
367 # Store word conditionally
369 if (p3) memw(r17+r21<<#3) = r31
371 if (!p3) memw(r17+r21<<#3) = r31
373 # CHECK-NEXT: ff f5 91 36
375 if (p3.new) memw(r17+r21<<#3) = r31 }
377 # CHECK-NEXT: ff f5 91 37
379 if (!p3.new) memw(r17+r21<<#3) = r31 }
381 if (p3) memw(r17+#84)=#31
383 if (!p3) memw(r17+#84)=#31
385 # CHECK-NEXT: ff ca 51 39
387 if (p3.new) memw(r17+#84)=#31 }
389 # CHECK-NEXT: ff ca d1 39
391 if (!p3.new) memw(r17+#84)=#31 }
393 if (p3) memw(r17+#84) = r31
395 if (!p3) memw(r17+#84) = r31
397 # CHECK-NEXT: ab df 91 42
399 if (p3.new) memw(r17+#84) = r31 }
401 # CHECK-NEXT: ab df 91 46
403 if (!p3.new) memw(r17+#84) = r31 }
405 if (p3) memw(r17++#20) = r21
407 if (!p3) memw(r17++#20) = r21
409 # CHECK-NEXT: af f5 91 ab
411 if (!p3.new) memw(r17++#20) = r21 }
413 # CHECK-NEXT: ab f5 91 ab
415 if (p3.new) memw(r17++#20) = r21 }
417 # CHECK-NEXT: a3 d5 81 af
418 if (p3) memw(##84) = r21
420 # CHECK-NEXT: a7 d5 81 af
421 if (!p3) memw(##84) = r21
423 # CHECK-NEXT: 01 40 00 00
424 # CHECK-NEXT: a3 f5 81 af
426 if (p3.new) memw(##84) = r21 }
428 # CHECK-NEXT: 01 40 00 00
429 # CHECK-NEXT: a7 f5 81 af
431 if (!p3.new) memw(##84) = r21 }
433 # Allocate stack frame