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