Taints the non-acquire RMW's store address with the load part
[oota-llvm.git] / test / MC / Hexagon / instructions / st.s
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
6 memd(r17 + r21<<#3) = r31:30
7 # CHECK: 28 d4 c0 48
8 memd(#320) = r21:20
9 # CHECK: 02 40 00 00
10 # CHECK-NEXT: 28 d4 c0 48
11 memd(##168) = r21:20
12 memd(r17+#168) = r21:20
13 # CHECK: 02 f4 d1 a9
14 memd(r17 ++ I:circ(m1)) = r21:20
15 # CHECK: 28 f4 d1 a9
16 memd(r17 ++ #40:circ(m1)) = r21:20
17 # CHECK: 28 d4 d1 ab
18 memd(r17++#40) = r21:20
19 # CHECK: 00 40 00 00
20 # CHECK-NEXT: d5 fe d1 ad
21 memd(r17<<#3 + ##21) = r31:30
22 memd(r17++m1) = r21:20
23 # CHECK: 00 f4 d1 af
24 memd(r17 ++ m1:brev) = r21:20
25
26 # Store doubleword conditionally
27 # CHECK: fe f5 d1 34
28 if (p3) memd(r17+r21<<#3) = r31:30
29 # CHECK: fe f5 d1 35
30 if (!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
40 if (p3) memd(r17+#168) = r31:30
41 # CHECK: ab de d1 44
42 if (!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
52 if (p3) memd(r17++#40) = r21:20
53 # CHECK: 2f f4 d1 ab
54 if (!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
65 if (p3) memd(##168) = r21:20
66 # CHECK: 02 40 00 00
67 # CHECK-NEXT: c7 d4 c2 af
68 if (!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
82 memb(r17 + r21<<#3) = r31
83 # CHECK: 9f ca 11 3c
84 memb(r17+#21)=#31
85 # CHECK: 15 d5 00 48
86 memb(#21) = r21
87 # CHECK: 00 40 00 00
88 # CHECK-NEXT: 15 d5 00 48
89 memb(##21) = r21
90 # CHECK: 15 d5 11 a1
91 memb(r17+#21) = r21
92 # CHECK: 02 f5 11 a9
93 memb(r17 ++ I:circ(m1)) = r21
94 # CHECK: 28 f5 11 a9
95 memb(r17 ++ #5:circ(m1)) = r21
96 # CHECK: 28 d5 11 ab
97 memb(r17++#5) = r21
98 # CHECK: 00 40 00 00
99 # CHECK-NEXT: d5 ff 11 ad
100 memb(r17<<#3 + ##21) = r31
101 # CHECK: 00 f5 11 ad
102 memb(r17++m1) = r21
103 # CHECK: 00 f5 11 af
104 memb(r17 ++ m1:brev) = r21
105
106 # Store byte conditionally
107 # CHECK: ff f5 11 34
108 if (p3) memb(r17+r21<<#3) = r31
109 # CHECK: ff f5 11 35
110 if (!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
120 if (p3) memb(r17+#21)=#31
121 # CHECK: ff ca 91 38
122 if (!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
132 if (p3) memb(r17+#21) = r31
133 # CHECK: ab df 11 44
134 if (!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
144 if (p3) memb(r17++#5) = r21
145 # CHECK: 2f f5 11 ab
146 if (!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
157 if (p3) memb(##21) = r21
158 # CHECK: 00 40 00 00
159 # CHECK-NEXT: af d5 01 af
160 if (!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
174 memh(r17 + r21<<#3) = r31
175 # CHECK: 9f f5 71 3b
176 memh(r17 + r21<<#3) = r31.h
177 # CHECK: 95 cf 31 3c
178 memh(r17+#62)=#21
179 # CHECK: 00 40 00 00
180 # CHECK-NEXT: 2a d5 40 48
181 memh(##42) = r21
182 # CHECK: 00 40 00 00
183 # CHECK-NEXT: 2a d5 60 48
184 memh(##42) = r21.h
185 # CHECK: 2a d5 40 48
186 memh(#84) = r21
187 # CHECK: 2a d5 60 48
188 memh(#84) = r21.h
189 # CHECK: 15 df 51 a1
190 memh(r17+#42) = r31
191 # CHECK: 15 df 71 a1
192 memh(r17+#42) = r31.h
193 # CHECK: 02 f5 51 a9
194 memh(r17 ++ I:circ(m1)) = r21
195 # CHECK: 28 f5 51 a9
196 memh(r17 ++ #10:circ(m1)) = r21
197 # CHECK: 02 f5 71 a9
198 memh(r17 ++ I:circ(m1)) = r21.h
199 # CHECK: 28 f5 71 a9
200 memh(r17 ++ #10:circ(m1)) = r21.h
201 # CHECK: 28 d5 51 ab
202 memh(r17++#10) = r21
203 # CHECK: 00 40 00 00
204 # CHECK-NEXT: d5 ff 51 ad
205 memh(r17<<#3 + ##21) = r31
206 # CHECK: 28 d5 71 ab
207 memh(r17++#10) = r21.h
208 # CHECK: 00 40 00 00
209 # CHECK-NEXT: d5 ff 71 ad
210 memh(r17<<#3 + ##21) = r31.h
211 # CHECK: 00 f5 51 ad
212 memh(r17++m1) = r21
213 # CHECK: 00 f5 71 ad
214 memh(r17++m1) = r21.h
215 # CHECK: 00 f5 51 af
216 memh(r17 ++ m1:brev) = r21
217 # CHECK: 00 f5 71 af
218 memh(r17 ++ m1:brev) = r21.h
219
220 # Store halfword conditionally
221 # CHECK: ff f5 51 34
222 if (p3) memh(r17+r21<<#3) = r31
223 # CHECK: ff f5 71 34
224 if (p3) memh(r17+r21<<#3) = r31.h
225 # CHECK: ff f5 51 35
226 if (!p3) memh(r17+r21<<#3) = r31
227 # CHECK: ff f5 71 35
228 if (!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
246 if (p3) memh(r17+#62)=#21
247 # CHECK: f5 cf b1 38
248 if (!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
258 if (p3) memh(r17+#62) = r21
259 # CHECK: fb d5 71 40
260 if (p3) memh(r17+#62) = r21.h
261 # CHECK: fb d5 51 44
262 if (!p3) memh(r17+#62) = r21
263 # CHECK: fb d5 71 44
264 if (!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
282 if (p3) memh(r17++#10) = r21
283 # CHECK: 2f f5 51 ab
284 if (!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
294 if (p3) memh(r17++#10) = r21.h
295 # CHECK: 2f f5 71 ab
296 if (!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
307 if (p3) memh(##42) = r21
308 # CHECK: 00 40 00 00
309 # CHECK-NEXT: d3 d5 62 af
310 if (p3) memh(##42) = r21.h
311 # CHECK: 00 40 00 00
312 # CHECK-NEXT: d7 d5 42 af
313 if (!p3) memh(##42) = r21
314 # CHECK: 00 40 00 00
315 # CHECK-NEXT: d7 d5 62 af
316 if (!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
340 memw(r17 + r21<<#3) = r31
341 # CHECK: 9f ca 51 3c
342 memw(r17+#84)=#31
343 # CHECK: 15 df 80 48
344 memw(#84) = r31
345 # CHECK: 01 40 00 00
346 # CHECK-NEXT: 14 d5 80 48
347 memw(##84) = r21
348 # CHECK: 9f ca 51 3c
349 memw(r17+#84)=#31
350 # CHECK: 15 df 91 a1
351 memw(r17+#84) = r31
352 # CHECK: 02 f5 91 a9
353 memw(r17 ++ I:circ(m1)) = r21
354 # CHECK: 28 f5 91 a9
355 memw(r17 ++ #20:circ(m1)) = r21
356 # CHECK: 28 d5 91 ab
357 memw(r17++#20) = r21
358 # CHECK: 00 40 00 00
359 # CHECK-NEXT: d5 ff 91 ad
360 memw(r17<<#3 + ##21) = r31
361 # CHECK: 00 f5 91 ad
362 memw(r17++m1) = r21
363 # CHECK: 00 f5 91 af
364 memw(r17 ++ m1:brev) = r21
365
366 # Store word conditionally
367 # CHECK: ff f5 91 34
368 if (p3) memw(r17+r21<<#3) = r31
369 # CHECK: ff f5 91 35
370 if (!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
380 if (p3) memw(r17+#84)=#31
381 # CHECK: ff ca d1 38
382 if (!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
392 if (p3) memw(r17+#84) = r31
393 # CHECK: ab df 91 44 
394 if (!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
404 if (p3) memw(r17++#20) = r21
405 # CHECK: 2f f5 91 ab
406 if (!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
417 if (p3) memw(##84) = r21
418 # CHECK: 01 40 00 00
419 # CHECK-NEXT: a7 d5 81 af
420 if (!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
434 allocframe(#248)