1 # RUN: llvm-mc -triple=hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s
2 # Hexagon Programmer's Reference Manual 11.8 ST
6 memd(r17 + r21<<#3) = r31:30
10 # CHECK-NEXT: 28 d4 c0 48
12 memd(r17+#168) = r21:20
14 memd(r17 ++ I:circ(m1)) = r21:20
16 memd(r17 ++ #40:circ(m1)) = r21:20
18 memd(r17++#40) = r21:20
20 # CHECK-NEXT: d5 fe d1 ad
21 memd(r17<<#3 + ##21) = r31:30
22 memd(r17++m1) = r21:20
24 memd(r17 ++ m1:brev) = r21:20
26 # Store doubleword conditionally
28 if (p3) memd(r17+r21<<#3) = r31:30
30 if (!p3) memd(r17+r21<<#3) = r31:30
32 # CHECK-NEXT: fe f5 d1 36
34 if (p3.new) memd(r17+r21<<#3) = r31:30 }
36 # CHECK-NEXT: fe f5 d1 37
38 if (!p3.new) memd(r17+r21<<#3) = r31:30 }
40 if (p3) memd(r17+#168) = r31:30
42 if (!p3) memd(r17+#168) = r31:30
44 # CHECK-NEXT: ab de d1 42
46 if (p3.new) memd(r17+#168) = r31:30 }
48 # CHECK-NEXT: ab de d1 46
50 if (!p3.new) memd(r17+#168) = r31:30 }
52 if (p3) memd(r17++#40) = r21:20
54 if (!p3) memd(r17++#40) = r21:20
56 # CHECK-NEXT: ab f4 d1 ab
58 if (p3.new) memd(r17++#40) = r21:20 }
60 # CHECK-NEXT: af f4 d1 ab
62 if (!p3.new) memd(r17++#40) = r21:20 }
64 # CHECK-NEXT: c3 d4 c2 af
65 if (p3) memd(##168) = r21:20
67 # CHECK-NEXT: c7 d4 c2 af
68 if (!p3) memd(##168) = r21:20
70 # CHECK-NEXT: 02 40 00 00
71 # CHECK-NEXT: c3 f4 c2 af
73 if (p3.new) memd(##168) = r21:20 }
75 # CHECK-NEXT: 02 40 00 00
76 # CHECK-NEXT: c7 f4 c2 af
78 if (!p3.new) memd(##168) = r21:20 }
82 memb(r17 + r21<<#3) = r31
88 # CHECK-NEXT: 15 d5 00 48
93 memb(r17 ++ I:circ(m1)) = r21
95 memb(r17 ++ #5:circ(m1)) = r21
99 # CHECK-NEXT: d5 ff 11 ad
100 memb(r17<<#3 + ##21) = r31
104 memb(r17 ++ m1:brev) = r21
106 # Store byte conditionally
108 if (p3) memb(r17+r21<<#3) = r31
110 if (!p3) memb(r17+r21<<#3) = r31
112 # CHECK-NEXT: ff f5 11 36
114 if (p3.new) memb(r17+r21<<#3) = r31 }
116 # CHECK-NEXT: ff f5 11 37
118 if (!p3.new) memb(r17+r21<<#3) = r31 }
120 if (p3) memb(r17+#21)=#31
122 if (!p3) memb(r17+#21)=#31
124 # CHECK-NEXT: ff ca 11 39
126 if (p3.new) memb(r17+#21)=#31 }
128 # CHECK-NEXT: ff ca 91 39
130 if (!p3.new) memb(r17+#21)=#31 }
132 if (p3) memb(r17+#21) = r31
134 if (!p3) memb(r17+#21) = r31
136 # CHECK-NEXT: ab df 11 42
138 if (p3.new) memb(r17+#21) = r31 }
140 # CHECK-NEXT: ab df 11 46
142 if (!p3.new) memb(r17+#21) = r31 }
144 if (p3) memb(r17++#5) = r21
146 if (!p3) memb(r17++#5) = r21
148 # CHECK-NEXT: ab f5 11 ab
150 if (p3.new) memb(r17++#5) = r21 }
152 # CHECK-NEXT: af f5 11 ab
154 if (!p3.new) memb(r17++#5) = r21 }
156 # CHECK-NEXT: ab d5 01 af
157 if (p3) memb(##21) = r21
159 # CHECK-NEXT: af d5 01 af
160 if (!p3) memb(##21) = r21
162 # CHECK-NEXT: 00 40 00 00
163 # CHECK-NEXT: ab f5 01 af
165 if (p3.new) memb(##21) = r21 }
167 # CHECK-NEXT: 00 40 00 00
168 # CHECK-NEXT: af f5 01 af
170 if (!p3.new) memb(##21) = r21 }
174 memh(r17 + r21<<#3) = r31
176 memh(r17 + r21<<#3) = r31.h
180 # CHECK-NEXT: 2a d5 40 48
183 # CHECK-NEXT: 2a d5 60 48
192 memh(r17+#42) = r31.h
194 memh(r17 ++ I:circ(m1)) = r21
196 memh(r17 ++ #10:circ(m1)) = r21
198 memh(r17 ++ I:circ(m1)) = r21.h
200 memh(r17 ++ #10:circ(m1)) = r21.h
204 # CHECK-NEXT: d5 ff 51 ad
205 memh(r17<<#3 + ##21) = r31
207 memh(r17++#10) = r21.h
209 # CHECK-NEXT: d5 ff 71 ad
210 memh(r17<<#3 + ##21) = r31.h
214 memh(r17++m1) = r21.h
216 memh(r17 ++ m1:brev) = r21
218 memh(r17 ++ m1:brev) = r21.h
220 # Store halfword conditionally
222 if (p3) memh(r17+r21<<#3) = r31
224 if (p3) memh(r17+r21<<#3) = r31.h
226 if (!p3) memh(r17+r21<<#3) = r31
228 if (!p3) memh(r17+r21<<#3) = r31.h
230 # CHECK-NEXT: ff f5 51 36
232 if (p3.new) memh(r17+r21<<#3) = r31 }
234 # CHECK-NEXT: ff f5 71 36
236 if (p3.new) memh(r17+r21<<#3) = r31.h }
238 # CHECK-NEXT: ff f5 51 37
240 if (!p3.new) memh(r17+r21<<#3) = r31 }
242 # CHECK-NEXT: ff f5 71 37
244 if (!p3.new) memh(r17+r21<<#3) = r31.h }
246 if (p3) memh(r17+#62)=#21
248 if (!p3) memh(r17+#62)=#21
250 # CHECK-NEXT: f5 cf 31 39
252 if (p3.new) memh(r17+#62)=#21 }
254 # CHECK-NEXT: f5 cf b1 39
256 if (!p3.new) memh(r17+#62)=#21 }
258 if (p3) memh(r17+#62) = r21
260 if (p3) memh(r17+#62) = r21.h
262 if (!p3) memh(r17+#62) = r21
264 if (!p3) memh(r17+#62) = r21.h
266 # CHECK-NEXT: fb d5 51 42
268 if (p3.new) memh(r17+#62) = r21 }
270 # CHECK-NEXT: fb d5 71 42
272 if (p3.new) memh(r17+#62) = r21.h }
274 # CHECK-NEXT: fb d5 51 46
276 if (!p3.new) memh(r17+#62) = r21 }
278 # CHECK-NEXT: fb d5 71 46
280 if (!p3.new) memh(r17+#62) = r21.h }
282 if (p3) memh(r17++#10) = r21
284 if (!p3) memh(r17++#10) = r21
286 # CHECK-NEXT: ab f5 51 ab
288 if (p3.new) memh(r17++#10) = r21 }
290 # CHECK-NEXT: af f5 51 ab
292 if (!p3.new) memh(r17++#10) = r21 }
294 if (p3) memh(r17++#10) = r21.h
296 if (!p3) memh(r17++#10) = r21.h
298 # CHECK-NEXT: ab f5 71 ab
300 if (p3.new) memh(r17++#10) = r21.h }
302 # CHECK-NEXT: af f5 71 ab
304 if (!p3.new) memh(r17++#10) = r21.h }
306 # CHECK-NEXT: d3 d5 42 af
307 if (p3) memh(##42) = r21
309 # CHECK-NEXT: d3 d5 62 af
310 if (p3) memh(##42) = r21.h
312 # CHECK-NEXT: d7 d5 42 af
313 if (!p3) memh(##42) = r21
315 # CHECK-NEXT: d7 d5 62 af
316 if (!p3) memh(##42) = r21.h
318 # CHECK-NEXT: 00 40 00 00
319 # CHECK-NEXT: d3 f5 42 af
321 if (p3.new) memh(##42) = r21 }
323 # CHECK-NEXT: 00 40 00 00
324 # CHECK-NEXT: d3 f5 62 af
326 if (p3.new) memh(##42) = r21.h }
328 # CHECK-NEXT: 00 40 00 00
329 # CHECK-NEXT: d7 f5 42 af
331 if (!p3.new) memh(##42) = r21 }
333 # CHECK-NEXT: 00 40 00 00
334 # CHECK-NEXT: d7 f5 62 af
336 if (!p3.new) memh(##42) = r21.h }
340 memw(r17 + r21<<#3) = r31
346 # CHECK-NEXT: 14 d5 80 48
353 memw(r17 ++ I:circ(m1)) = r21
355 memw(r17 ++ #20:circ(m1)) = r21
359 # CHECK-NEXT: d5 ff 91 ad
360 memw(r17<<#3 + ##21) = r31
364 memw(r17 ++ m1:brev) = r21
366 # Store word conditionally
368 if (p3) memw(r17+r21<<#3) = r31
370 if (!p3) memw(r17+r21<<#3) = r31
372 # CHECK-NEXT: ff f5 91 36
374 if (p3.new) memw(r17+r21<<#3) = r31 }
376 # CHECK-NEXT: ff f5 91 37
378 if (!p3.new) memw(r17+r21<<#3) = r31 }
380 if (p3) memw(r17+#84)=#31
382 if (!p3) memw(r17+#84)=#31
384 # CHECK-NEXT: ff ca 51 39
386 if (p3.new) memw(r17+#84)=#31 }
388 # CHECK-NEXT: ff ca d1 39
390 if (!p3.new) memw(r17+#84)=#31 }
392 if (p3) memw(r17+#84) = r31
394 if (!p3) memw(r17+#84) = r31
396 # CHECK-NEXT: ab df 91 42
398 if (p3.new) memw(r17+#84) = r31 }
400 # CHECK-NEXT: ab df 91 46
402 if (!p3.new) memw(r17+#84) = r31 }
404 if (p3) memw(r17++#20) = r21
406 if (!p3) memw(r17++#20) = r21
408 # CHECK-NEXT: af f5 91 ab
410 if (!p3.new) memw(r17++#20) = r21 }
412 # CHECK-NEXT: ab f5 91 ab
414 if (p3.new) memw(r17++#20) = r21 }
416 # CHECK-NEXT: a3 d5 81 af
417 if (p3) memw(##84) = r21
419 # CHECK-NEXT: a7 d5 81 af
420 if (!p3) memw(##84) = r21
422 # CHECK-NEXT: 01 40 00 00
423 # CHECK-NEXT: a3 f5 81 af
425 if (p3.new) memw(##84) = r21 }
427 # CHECK-NEXT: 01 40 00 00
428 # CHECK-NEXT: a7 f5 81 af
430 if (!p3.new) memw(##84) = r21 }
432 # Allocate stack frame