1# RUN: llvm-mc -triple=hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s
2# Hexagon Programmer's Reference Manual 11.8 ST
3
4# Store doubleword
5# CHECK: 9e f5 d1 3b
6memd(r17 + r21<<#3) = r31:30
7# CHECK: 28 d4 c0 48
8memd(gp+#320) = r21:20
9# CHECK: 02 40 00 00
10# CHECK-NEXT: 28 d4 c0 48
11memd(##168) = r21:20
12memd(r17+#168) = r21:20
13# CHECK: 02 f4 d1 a9
14memd(r17 ++ I:circ(m1)) = r21:20
15# CHECK: 28 f4 d1 a9
16memd(r17 ++ #40:circ(m1)) = r21:20
17# CHECK: 28 d4 d1 ab
18memd(r17++#40) = r21:20
19# CHECK: 00 40 00 00
20# CHECK-NEXT: d5 fe d1 ad
21memd(r17<<#3 + ##21) = r31:30
22memd(r17++m1) = r21:20
23# CHECK: 00 f4 d1 af
24memd(r17 ++ m1:brev) = r21:20
25
26# Store doubleword conditionally
27# CHECK: fe f5 d1 34
28if (p3) memd(r17+r21<<#3) = r31:30
29# CHECK: fe f5 d1 35
30if (!p3) memd(r17+r21<<#3) = r31:30
31# CHECK: 03 40 45 85
32# CHECK-NEXT: fe f5 d1 36
33{ p3 = r5
34  if (p3.new) memd(r17+r21<<#3) = r31:30 }
35# CHECK: 03 40 45 85
36# CHECK-NEXT: fe f5 d1 37
37{ p3 = r5
38  if (!p3.new) memd(r17+r21<<#3) = r31:30 }
39# CHECK: ab de d1 40
40if (p3) memd(r17+#168) = r31:30
41# CHECK: ab de d1 44
42if (!p3) memd(r17+#168) = r31:30
43# CHECK: 03 40 45 85
44# CHECK-NEXT: ab de d1 42
45{ p3 = r5
46  if (p3.new) memd(r17+#168) = r31:30 }
47# CHECK: 03 40 45 85
48# CHECK-NEXT: ab de d1 46
49{ p3 = r5
50  if (!p3.new) memd(r17+#168) = r31:30 }
51# CHECK: 2b f4 d1 ab
52if (p3) memd(r17++#40) = r21:20
53# CHECK: 2f f4 d1 ab
54if (!p3) memd(r17++#40) = r21:20
55# CHECK: 03 40 45 85
56# CHECK-NEXT: ab f4 d1 ab
57{ p3 = r5
58  if (p3.new) memd(r17++#40) = r21:20 }
59# CHECK: 03 40 45 85
60# CHECK-NEXT: af f4 d1 ab
61{ p3 = r5
62  if (!p3.new) memd(r17++#40) = r21:20 }
63# CHECK: 02 40 00 00
64# CHECK-NEXT: c3 d4 c2 af
65if (p3) memd(##168) = r21:20
66# CHECK: 02 40 00 00
67# CHECK-NEXT: c7 d4 c2 af
68if (!p3) memd(##168) = r21:20
69# CHECK: 03 40 45 85
70# CHECK-NEXT: 02 40 00 00
71# CHECK-NEXT: c3 f4 c2 af
72{ p3 = r5
73  if (p3.new) memd(##168) = r21:20 }
74# CHECK: 03 40 45 85
75# CHECK-NEXT: 02 40 00 00
76# CHECK-NEXT: c7 f4 c2 af
77{ p3 = r5
78  if (!p3.new) memd(##168) = r21:20 }
79
80# Store byte
81# CHECK: 9f f5 11 3b
82memb(r17 + r21<<#3) = r31
83# CHECK: 9f ca 11 3c
84memb(r17+#21)=#31
85# CHECK: 15 d5 00 48
86memb(gp+#21) = r21
87# CHECK: 00 40 00 00
88# CHECK-NEXT: 15 d5 00 48
89memb(##21) = r21
90# CHECK: 15 d5 11 a1
91memb(r17+#21) = r21
92# CHECK: 02 f5 11 a9
93memb(r17 ++ I:circ(m1)) = r21
94# CHECK: 28 f5 11 a9
95memb(r17 ++ #5:circ(m1)) = r21
96# CHECK: 28 d5 11 ab
97memb(r17++#5) = r21
98# CHECK: 00 40 00 00
99# CHECK-NEXT: d5 ff 11 ad
100memb(r17<<#3 + ##21) = r31
101# CHECK: 00 f5 11 ad
102memb(r17++m1) = r21
103# CHECK: 00 f5 11 af
104memb(r17 ++ m1:brev) = r21
105
106# Store byte conditionally
107# CHECK: ff f5 11 34
108if (p3) memb(r17+r21<<#3) = r31
109# CHECK: ff f5 11 35
110if (!p3) memb(r17+r21<<#3) = r31
111# CHECK: 03 40 45 85
112# CHECK-NEXT: ff f5 11 36
113{ p3 = r5
114  if (p3.new) memb(r17+r21<<#3) = r31 }
115# CHECK: 03 40 45 85
116# CHECK-NEXT: ff f5 11 37
117{ p3 = r5
118  if (!p3.new) memb(r17+r21<<#3) = r31 }
119# CHECK: ff ca 11 38
120if (p3) memb(r17+#21)=#31
121# CHECK: ff ca 91 38
122if (!p3) memb(r17+#21)=#31
123# CHECK: 03 40 45 85
124# CHECK-NEXT: ff ca 11 39
125{ p3 = r5
126  if (p3.new) memb(r17+#21)=#31 }
127# CHECK: 03 40 45 85
128# CHECK-NEXT: ff ca 91 39
129{ p3 = r5
130  if (!p3.new) memb(r17+#21)=#31 }
131# CHECK: ab df 11 40
132if (p3) memb(r17+#21) = r31
133# CHECK: ab df 11 44
134if (!p3) memb(r17+#21) = r31
135# CHECK: 03 40 45 85
136# CHECK-NEXT: ab df 11 42
137{ p3 = r5
138  if (p3.new) memb(r17+#21) = r31 }
139# CHECK: 03 40 45 85
140# CHECK-NEXT: ab df 11 46
141{ p3 = r5
142  if (!p3.new) memb(r17+#21) = r31 }
143# CHECK: 2b f5 11 ab
144if (p3) memb(r17++#5) = r21
145# CHECK: 2f f5 11 ab
146if (!p3) memb(r17++#5) = r21
147# CHECK: 03 40 45 85
148# CHECK-NEXT: ab f5 11 ab
149{ p3 = r5
150  if (p3.new) memb(r17++#5) = r21 }
151# CHECK: 03 40 45 85
152# CHECK-NEXT: af f5 11 ab
153{ p3 = r5
154  if (!p3.new) memb(r17++#5) = r21 }
155# CHECK: 00 40 00 00
156# CHECK-NEXT: ab d5 01 af
157if (p3) memb(##21) = r21
158# CHECK: 00 40 00 00
159# CHECK-NEXT: af d5 01 af
160if (!p3) memb(##21) = r21
161# CHECK: 03 40 45 85
162# CHECK-NEXT: 00 40 00 00
163# CHECK-NEXT: ab f5 01 af
164{ p3 = r5
165  if (p3.new) memb(##21) = r21 }
166# CHECK: 03 40 45 85
167# CHECK-NEXT: 00 40 00 00
168# CHECK-NEXT: af f5 01 af
169{ p3 = r5
170  if (!p3.new) memb(##21) = r21 }
171
172# Store halfword
173# CHECK: 9f f5 51 3b
174memh(r17 + r21<<#3) = r31
175# CHECK: 9f f5 71 3b
176memh(r17 + r21<<#3) = r31.h
177# CHECK: 95 cf 31 3c
178memh(r17+#62)=#21
179# CHECK: 00 40 00 00
180# CHECK-NEXT: 2a d5 40 48
181memh(##42) = r21
182# CHECK: 00 40 00 00
183# CHECK-NEXT: 2a d5 60 48
184memh(##42) = r21.h
185# CHECK: 2a d5 40 48
186memh(gp+#84) = r21
187# CHECK: 2a d5 60 48
188memh(gp+#84) = r21.h
189# CHECK: 15 df 51 a1
190memh(r17+#42) = r31
191# CHECK: 15 df 71 a1
192memh(r17+#42) = r31.h
193# CHECK: 02 f5 51 a9
194memh(r17 ++ I:circ(m1)) = r21
195# CHECK: 28 f5 51 a9
196memh(r17 ++ #10:circ(m1)) = r21
197# CHECK: 02 f5 71 a9
198memh(r17 ++ I:circ(m1)) = r21.h
199# CHECK: 28 f5 71 a9
200memh(r17 ++ #10:circ(m1)) = r21.h
201# CHECK: 28 d5 51 ab
202memh(r17++#10) = r21
203# CHECK: 00 40 00 00
204# CHECK-NEXT: d5 ff 51 ad
205memh(r17<<#3 + ##21) = r31
206# CHECK: 28 d5 71 ab
207memh(r17++#10) = r21.h
208# CHECK: 00 40 00 00
209# CHECK-NEXT: d5 ff 71 ad
210memh(r17<<#3 + ##21) = r31.h
211# CHECK: 00 f5 51 ad
212memh(r17++m1) = r21
213# CHECK: 00 f5 71 ad
214memh(r17++m1) = r21.h
215# CHECK: 00 f5 51 af
216memh(r17 ++ m1:brev) = r21
217# CHECK: 00 f5 71 af
218memh(r17 ++ m1:brev) = r21.h
219
220# Store halfword conditionally
221# CHECK: ff f5 51 34
222if (p3) memh(r17+r21<<#3) = r31
223# CHECK: ff f5 71 34
224if (p3) memh(r17+r21<<#3) = r31.h
225# CHECK: ff f5 51 35
226if (!p3) memh(r17+r21<<#3) = r31
227# CHECK: ff f5 71 35
228if (!p3) memh(r17+r21<<#3) = r31.h
229# CHECK: 03 40 45 85
230# CHECK-NEXT: ff f5 51 36
231{ p3 = r5
232  if (p3.new) memh(r17+r21<<#3) = r31 }
233# CHECK: 03 40 45 85
234# CHECK-NEXT: ff f5 71 36
235{ p3 = r5
236  if (p3.new) memh(r17+r21<<#3) = r31.h }
237# CHECK: 03 40 45 85
238# CHECK-NEXT: ff f5 51 37
239{ p3 = r5
240  if (!p3.new) memh(r17+r21<<#3) = r31 }
241# CHECK: 03 40 45 85
242# CHECK-NEXT: ff f5 71 37
243{ p3 = r5
244  if (!p3.new) memh(r17+r21<<#3) = r31.h }
245# CHECK: f5 cf 31 38
246if (p3) memh(r17+#62)=#21
247# CHECK: f5 cf b1 38
248if (!p3) memh(r17+#62)=#21
249# CHECK: 03 40 45 85
250# CHECK-NEXT: f5 cf 31 39
251{ p3 = r5
252  if (p3.new) memh(r17+#62)=#21 }
253# CHECK: 03 40 45 85
254# CHECK-NEXT: f5 cf b1 39
255{ p3 = r5
256  if (!p3.new) memh(r17+#62)=#21 }
257# CHECK: fb d5 51 40
258if (p3) memh(r17+#62) = r21
259# CHECK: fb d5 71 40
260if (p3) memh(r17+#62) = r21.h
261# CHECK: fb d5 51 44
262if (!p3) memh(r17+#62) = r21
263# CHECK: fb d5 71 44
264if (!p3) memh(r17+#62) = r21.h
265# CHECK: 03 40 45 85
266# CHECK-NEXT: fb d5 51 42
267{ p3 = r5
268  if (p3.new) memh(r17+#62) = r21 }
269# CHECK: 03 40 45 85
270# CHECK-NEXT: fb d5 71 42
271{ p3 = r5
272  if (p3.new) memh(r17+#62) = r21.h }
273# CHECK: 03 40 45 85
274# CHECK-NEXT: fb d5 51 46
275{ p3 = r5
276  if (!p3.new) memh(r17+#62) = r21 }
277# CHECK: 03 40 45 85
278# CHECK-NEXT: fb d5 71 46
279{ p3 = r5
280  if (!p3.new) memh(r17+#62) = r21.h }
281# CHECK: 2b f5 51 ab
282if (p3) memh(r17++#10) = r21
283# CHECK: 2f f5 51 ab
284if (!p3) memh(r17++#10) = r21
285# CHECK: 03 40 45 85
286# CHECK-NEXT: ab f5 51 ab
287{ p3 = r5
288  if (p3.new) memh(r17++#10) = r21 }
289# CHECK: 03 40 45 85
290# CHECK-NEXT: af f5 51 ab
291{ p3 = r5
292  if (!p3.new) memh(r17++#10) = r21 }
293# CHECK: 2b f5 71 ab
294if (p3) memh(r17++#10) = r21.h
295# CHECK: 2f f5 71 ab
296if (!p3) memh(r17++#10) = r21.h
297# CHECK: 03 40 45 85
298# CHECK-NEXT: ab f5 71 ab
299{ p3 = r5
300  if (p3.new) memh(r17++#10) = r21.h }
301# CHECK: 03 40 45 85
302# CHECK-NEXT: af f5 71 ab
303{ p3 = r5
304  if (!p3.new) memh(r17++#10) = r21.h }
305# CHECK: 00 40 00 00
306# CHECK-NEXT: d3 d5 42 af
307if (p3) memh(##42) = r21
308# CHECK: 00 40 00 00
309# CHECK-NEXT: d3 d5 62 af
310if (p3) memh(##42) = r21.h
311# CHECK: 00 40 00 00
312# CHECK-NEXT: d7 d5 42 af
313if (!p3) memh(##42) = r21
314# CHECK: 00 40 00 00
315# CHECK-NEXT: d7 d5 62 af
316if (!p3) memh(##42) = r21.h
317# CHECK: 03 40 45 85
318# CHECK-NEXT: 00 40 00 00
319# CHECK-NEXT: d3 f5 42 af
320{ p3 = r5
321  if (p3.new) memh(##42) = r21 }
322# CHECK: 03 40 45 85
323# CHECK-NEXT: 00 40 00 00
324# CHECK-NEXT: d3 f5 62 af
325{ p3 = r5
326  if (p3.new) memh(##42) = r21.h }
327# CHECK: 03 40 45 85
328# CHECK-NEXT: 00 40 00 00
329# CHECK-NEXT: d7 f5 42 af
330{ p3 = r5
331  if (!p3.new) memh(##42) = r21 }
332# CHECK: 03 40 45 85
333# CHECK-NEXT: 00 40 00 00
334# CHECK-NEXT: d7 f5 62 af
335{ p3 = r5
336  if (!p3.new) memh(##42) = r21.h }
337
338# Store word
339# CHECK: 9f f5 91 3b
340memw(r17 + r21<<#3) = r31
341# CHECK: 9f ca 51 3c
342memw(r17+#84)=#31
343# CHECK: 15 df 80 48
344memw(gp+#84) = r31
345# CHECK: 01 40 00 00
346# CHECK-NEXT: 14 d5 80 48
347memw(##84) = r21
348# CHECK: 9f ca 51 3c
349memw(r17+#84)=#31
350# CHECK: 15 df 91 a1
351memw(r17+#84) = r31
352# CHECK: 02 f5 91 a9
353memw(r17 ++ I:circ(m1)) = r21
354# CHECK: 28 f5 91 a9
355memw(r17 ++ #20:circ(m1)) = r21
356# CHECK: 28 d5 91 ab
357memw(r17++#20) = r21
358# CHECK: 00 40 00 00
359# CHECK-NEXT: d5 ff 91 ad
360memw(r17<<#3 + ##21) = r31
361# CHECK: 00 f5 91 ad
362memw(r17++m1) = r21
363# CHECK: 00 f5 91 af
364memw(r17 ++ m1:brev) = r21
365
366# Store word conditionally
367# CHECK: ff f5 91 34
368if (p3) memw(r17+r21<<#3) = r31
369# CHECK: ff f5 91 35
370if (!p3) memw(r17+r21<<#3) = r31
371# CHECK: 03 40 45 85
372# CHECK-NEXT: ff f5 91 36
373{ p3 = r5
374  if (p3.new) memw(r17+r21<<#3) = r31 }
375# CHECK: 03 40 45 85
376# CHECK-NEXT: ff f5 91 37
377{ p3 = r5
378  if (!p3.new) memw(r17+r21<<#3) = r31 }
379# CHECK: ff ca 51 38
380if (p3) memw(r17+#84)=#31
381# CHECK: ff ca d1 38
382if (!p3) memw(r17+#84)=#31
383# CHECK: 03 40 45 85
384# CHECK-NEXT: ff ca 51 39
385{ p3 = r5
386  if (p3.new) memw(r17+#84)=#31 }
387# CHECK: 03 40 45 85
388# CHECK-NEXT: ff ca d1 39
389{ p3 = r5
390  if (!p3.new) memw(r17+#84)=#31 }
391# CHECK: ab df 91 40
392if (p3) memw(r17+#84) = r31
393# CHECK: ab df 91 44
394if (!p3) memw(r17+#84) = r31
395# CHECK: 03 40 45 85
396# CHECK-NEXT: ab df 91 42
397{ p3 = r5
398  if (p3.new) memw(r17+#84) = r31 }
399# CHECK: 03 40 45 85
400# CHECK-NEXT: ab df 91 46
401{ p3 = r5
402  if (!p3.new) memw(r17+#84) = r31 }
403# CHECK: 2b f5 91 ab
404if (p3) memw(r17++#20) = r21
405# CHECK: 2f f5 91 ab
406if (!p3) memw(r17++#20) = r21
407# CHECK: 03 40 45 85
408# CHECK-NEXT: af f5 91 ab
409{ p3 = r5
410  if (!p3.new) memw(r17++#20) = r21 }
411# CHECK: 03 40 45 85
412# CHECK-NEXT: ab f5 91 ab
413{ p3 = r5
414  if (p3.new) memw(r17++#20) = r21 }
415# CHECK: 01 40 00 00
416# CHECK-NEXT: a3 d5 81 af
417if (p3) memw(##84) = r21
418# CHECK: 01 40 00 00
419# CHECK-NEXT: a7 d5 81 af
420if (!p3) memw(##84) = r21
421# CHECK: 03 40 45 85
422# CHECK-NEXT: 01 40 00 00
423# CHECK-NEXT: a3 f5 81 af
424{ p3 = r5
425  if (p3.new) memw(##84) = r21 }
426# CHECK: 03 40 45 85
427# CHECK-NEXT: 01 40 00 00
428# CHECK-NEXT: a7 f5 81 af
429{ p3 = r5
430  if (!p3.new) memw(##84) = r21 }
431
432# Allocate stack frame
433# CHECK: 1f c0 9d a0
434allocframe(#248)
435