1 # RUN: llvm-mc -triple=hexagon -disassemble < %s | FileCheck %s
2 # Hexagon Programmer's Reference Manual 11.8 ST
7 # CHECK: memd(r17 + r21<<#3) = r31:30
9 # CHECK: memd(#320) = r21:20
10 0x02 0x40 0x00 0x00 0x28 0xd4 0xc0 0x48
11 # CHECK: memd(##168) = r21:20
13 # CHECK: memd(r17+#168) = r21:20
15 # CHECK: memd(r17 ++ I:circ(m1)) = r21:20
17 # CHECK: memd(r17 ++ #40:circ(m1)) = r21:20
19 # CHECK: memd(r17++#40) = r21:20
20 0x00 0x40 0x00 0x00 0xd5 0xfe 0xd1 0xad
21 # CHECK: memd(r17<<#3 + ##21) = r31:30
23 # CHECK: memd(r17++m1) = r21:20
25 # CHECK: memd(r17 ++ m1:brev) = r21:20
27 # Store doubleword conditionally
29 # CHECK: if (p3) memd(r17+r21<<#3) = r31:30
31 # CHECK: if (!p3) memd(r17+r21<<#3) = r31:30
32 0x03 0x40 0x45 0x85 0xfe 0xf5 0xd1 0x36
34 # CHECK-NEXT: if (p3.new) memd(r17+r21<<#3) = r31:30
35 0x03 0x40 0x45 0x85 0xfe 0xf5 0xd1 0x37
37 # CHECK-NEXT: if (!p3.new) memd(r17+r21<<#3) = r31:30
39 # CHECK: if (p3) memd(r17+#168) = r31:30
41 # CHECK: if (!p3) memd(r17+#168) = r31:30
42 0x03 0x40 0x45 0x85 0xab 0xde 0xd1 0x42
44 # CHECK-NEXT: if (p3.new) memd(r17+#168) = r31:30
45 0x03 0x40 0x45 0x85 0xab 0xde 0xd1 0x46
47 # CHECK-NEXT: if (!p3.new) memd(r17+#168) = r31:30
49 # CHECK: if (p3) memd(r17++#40) = r21:20
51 # CHECK: if (!p3) memd(r17++#40) = r21:20
52 0x03 0x40 0x45 0x85 0xab 0xf4 0xd1 0xab
54 # CHECK-NEXT: if (p3.new) memd(r17++#40) = r21:20
55 0x03 0x40 0x45 0x85 0xaf 0xf4 0xd1 0xab
57 # CHECK-NEXT: if (!p3.new) memd(r17++#40) = r21:20
58 0x02 0x40 0x00 0x00 0xc3 0xd4 0xc2 0xaf
59 # CHECK: if (p3) memd(##168) = r21:20
60 0x02 0x40 0x00 0x00 0xc7 0xd4 0xc2 0xaf
61 # CHECK: if (!p3) memd(##168) = r21:20
62 0x03 0x40 0x45 0x85 0x02 0x40 0x00 0x00 0xc3 0xf4 0xc2 0xaf
64 # CHECK-NEXT: if (p3.new) memd(##168) = r21:20
65 0x03 0x40 0x45 0x85 0x02 0x40 0x00 0x00 0xc7 0xf4 0xc2 0xaf
67 # CHECK-NEXT: if (!p3.new) memd(##168) = r21:20
71 # CHECK: memb(r17 + r21<<#3) = r31
73 # CHECK: memb(r17+#21)=#31
75 # CHECK: memb(#21) = r21
76 0x00 0x40 0x00 0x00 0x15 0xd5 0x00 0x48
77 # CHECK: memb(##21) = r21
79 # CHECK: memb(r17+#21) = r21
81 # CHECK: memb(r17 ++ I:circ(m1)) = r21
83 # CHECK: memb(r17 ++ #5:circ(m1)) = r21
85 # CHECK: memb(r17++#5) = r21
86 0x00 0x40 0x00 0x00 0xd5 0xff 0x11 0xad
87 # CHECK: memb(r17<<#3 + ##21) = r31
89 # CHECK: memb(r17++m1) = r21
91 # CHECK: memb(r17 ++ m1:brev) = r21
93 # Store byte conditionally
95 # CHECK: if (p3) memb(r17+r21<<#3) = r31
97 # CHECK: if (!p3) memb(r17+r21<<#3) = r31
98 0x03 0x40 0x45 0x85 0xff 0xf5 0x11 0x36
100 # CHECK-NEXT: if (p3.new) memb(r17+r21<<#3) = r31
101 0x03 0x40 0x45 0x85 0xff 0xf5 0x11 0x37
103 # CHECK-NEXT: if (!p3.new) memb(r17+r21<<#3) = r31
105 # CHECK: if (p3) memb(r17+#21)=#31
107 # CHECK: if (!p3) memb(r17+#21)=#31
108 0x03 0x40 0x45 0x85 0xff 0xca 0x11 0x39
110 # CHECK-NEXT: if (p3.new) memb(r17+#21)=#31
111 0x03 0x40 0x45 0x85 0xff 0xca 0x91 0x39
113 # CHECK-NEXT: if (!p3.new) memb(r17+#21)=#31
115 # CHECK: if (p3) memb(r17+#21) = r31
117 # CHECK: if (!p3) memb(r17+#21) = r31
118 0x03 0x40 0x45 0x85 0xab 0xdf 0x11 0x42
120 # CHECK-NEXT: if (p3.new) memb(r17+#21) = r31
121 0x03 0x40 0x45 0x85 0xab 0xdf 0x11 0x46
123 # CHECK-NEXT: if (!p3.new) memb(r17+#21) = r31
125 # CHECK: if (p3) memb(r17++#5) = r21
127 # CHECK: if (!p3) memb(r17++#5) = r21
128 0x03 0x40 0x45 0x85 0xab 0xf5 0x11 0xab
130 # CHECK-NEXT: if (p3.new) memb(r17++#5) = r21
131 0x03 0x40 0x45 0x85 0xaf 0xf5 0x11 0xab
133 # CHECK-NEXT: if (!p3.new) memb(r17++#5) = r21
134 0x00 0x40 0x00 0x00 0xab 0xd5 0x01 0xaf
135 # CHECK: if (p3) memb(##21) = r21
136 0x00 0x40 0x00 0x00 0xaf 0xd5 0x01 0xaf
137 # CHECK: if (!p3) memb(##21) = r21
138 0x03 0x40 0x45 0x85 0x00 0x40 0x00 0x00 0xab 0xf5 0x01 0xaf
140 # CHECK-NEXT: if (p3.new) memb(##21) = r21
141 0x03 0x40 0x45 0x85 0x00 0x40 0x00 0x00 0xaf 0xf5 0x01 0xaf
143 # CHECK-NEXT: if (!p3.new) memb(##21) = r21
147 # CHECK: memh(r17 + r21<<#3) = r31
149 # CHECK: memh(r17 + r21<<#3) = r31.h
151 # CHECK: memh(r17+#62)=#21
152 0x00 0x40 0x00 0x00 0x2a 0xd5 0x40 0x48
153 # CHECK: memh(##42) = r21
154 0x00 0x40 0x00 0x00 0x2a 0xd5 0x60 0x48
155 # CHECK: memh(##42) = r21.h
157 # CHECK: memh(#84) = r21
159 # CHECK: memh(#84) = r21.h
161 # CHECK: memh(r17+#42) = r31
163 # CHECK: memh(r17+#42) = r31.h
165 # CHECK: memh(r17 ++ I:circ(m1)) = r21
167 # CHECK: memh(r17 ++ #10:circ(m1)) = r21
169 # CHECK: memh(r17 ++ I:circ(m1)) = r21.h
171 # CHECK: memh(r17 ++ #10:circ(m1)) = r21.h
173 # CHECK: memh(r17++#10) = r21
174 0x00 0x40 0x00 0x00 0xd5 0xff 0x51 0xad
175 # CHECK: memh(r17<<#3 + ##21) = r31
177 # CHECK: memh(r17++#10) = r21.h
178 0x00 0x40 0x00 0x00 0xd5 0xff 0x71 0xad
179 # CHECK: memh(r17<<#3 + ##21) = r31.h
181 # CHECK: memh(r17++m1) = r21
183 # CHECK: memh(r17++m1) = r21.h
185 # CHECK: memh(r17 ++ m1:brev) = r21
187 # CHECK: memh(r17 ++ m1:brev) = r21.h
189 # Store halfword conditionally
191 # CHECK: if (p3) memh(r17+r21<<#3) = r31
193 # CHECK: if (p3) memh(r17+r21<<#3) = r31.h
195 # CHECK: if (!p3) memh(r17+r21<<#3) = r31
197 # CHECK: if (!p3) memh(r17+r21<<#3) = r31.h
198 0x03 0x40 0x45 0x85 0xff 0xf5 0x51 0x36
200 # CHECK-NEXT: if (p3.new) memh(r17+r21<<#3) = r31
201 0x03 0x40 0x45 0x85 0xff 0xf5 0x71 0x36
203 # CHECK-NEXT: if (p3.new) memh(r17+r21<<#3) = r31.h
204 0x03 0x40 0x45 0x85 0xff 0xf5 0x51 0x37
206 # CHECK-NEXT: if (!p3.new) memh(r17+r21<<#3) = r31
207 0x03 0x40 0x45 0x85 0xff 0xf5 0x71 0x37
209 # CHECK-NEXT: if (!p3.new) memh(r17+r21<<#3) = r31.h
211 # CHECK: if (p3) memh(r17+#62)=#21
213 # CHECK: if (!p3) memh(r17+#62)=#21
214 0x03 0x40 0x45 0x85 0xf5 0xcf 0x31 0x39
216 # CHECK-NEXT: if (p3.new) memh(r17+#62)=#21
217 0x03 0x40 0x45 0x85 0xf5 0xcf 0xb1 0x39
219 # CHECK-NEXT: if (!p3.new) memh(r17+#62)=#21
221 # CHECK: if (p3) memh(r17+#62) = r21
223 # CHECK: if (p3) memh(r17+#62) = r21.h
225 # CHECK: if (!p3) memh(r17+#62) = r21
227 # CHECK: if (!p3) memh(r17+#62) = r21.h
228 0x03 0x40 0x45 0x85 0xfb 0xd5 0x51 0x42
230 # CHECK-NEXT: if (p3.new) memh(r17+#62) = r21
231 0x03 0x40 0x45 0x85 0xfb 0xd5 0x71 0x42
233 # CHECK-NEXT: if (p3.new) memh(r17+#62) = r21.h
234 0x03 0x40 0x45 0x85 0xfb 0xd5 0x51 0x46
236 # CHECK-NEXT: if (!p3.new) memh(r17+#62) = r21
237 0x03 0x40 0x45 0x85 0xfb 0xd5 0x71 0x46
239 # CHECK-NEXT: if (!p3.new) memh(r17+#62) = r21.h
241 # CHECK: if (p3) memh(r17++#10) = r21
243 # CHECK: if (!p3) memh(r17++#10) = r21
244 0x03 0x40 0x45 0x85 0xab 0xf5 0x51 0xab
246 # CHECK-NEXT: if (p3.new) memh(r17++#10) = r21
247 0x03 0x40 0x45 0x85 0xaf 0xf5 0x51 0xab
249 # CHECK-NEXT: if (!p3.new) memh(r17++#10) = r21
251 # CHECK: if (p3) memh(r17++#10) = r21.h
253 # CHECK: if (!p3) memh(r17++#10) = r21.h
254 0x03 0x40 0x45 0x85 0xab 0xf5 0x71 0xab
256 # CHECK-NEXT: if (p3.new) memh(r17++#10) = r21.h
257 0x03 0x40 0x45 0x85 0xaf 0xf5 0x71 0xab
259 # CHECK-NEXT: if (!p3.new) memh(r17++#10) = r21.h
260 0x00 0x40 0x00 0x00 0xd3 0xd5 0x42 0xaf
261 # CHECK: if (p3) memh(##42) = r21
262 0x00 0x40 0x00 0x00 0xd3 0xd5 0x62 0xaf
263 # CHECK: if (p3) memh(##42) = r21.h
264 0x00 0x40 0x00 0x00 0xd7 0xd5 0x42 0xaf
265 # CHECK: if (!p3) memh(##42) = r21
266 0x00 0x40 0x00 0x00 0xd7 0xd5 0x62 0xaf
267 # CHECK: if (!p3) memh(##42) = r21.h
268 0x03 0x40 0x45 0x85 0x00 0x40 0x00 0x00 0xd3 0xf5 0x42 0xaf
270 # CHECK-NEXT: if (p3.new) memh(##42) = r21
271 0x03 0x40 0x45 0x85 0x00 0x40 0x00 0x00 0xd3 0xf5 0x62 0xaf
273 # CHECK-NEXT: if (p3.new) memh(##42) = r21.h
274 0x03 0x40 0x45 0x85 0x00 0x40 0x00 0x00 0xd7 0xf5 0x42 0xaf
276 # CHECK-NEXT: if (!p3.new) memh(##42) = r21
277 0x03 0x40 0x45 0x85 0x00 0x40 0x00 0x00 0xd7 0xf5 0x62 0xaf
279 # CHECK-NEXT: if (!p3.new) memh(##42) = r21.h
283 # CHECK: memw(r17 + r21<<#3) = r31
285 # CHECK: memw(r17{{ *}}+{{ *}}#84)=#31
287 # CHECK: memw(#84) = r31
288 0x01 0x40 0x00 0x00 0x14 0xd5 0x80 0x48
289 # CHECK: memw(##84) = r21
291 # CHECK: memw(r17+#84)=#31
293 # CHECK: memw(r17+#84) = r31
295 # CHECK: memw(r17 ++ I:circ(m1)) = r21
297 # CHECK: memw(r17 ++ #20:circ(m1)) = r21
299 # CHECK: memw(r17++#20) = r21
300 0x00 0x40 0x00 0x00 0xd5 0xff 0x91 0xad
301 # CHECK: memw(r17<<#3 + ##21) = r31
303 # CHECK: memw(r17++m1) = r21
305 # CHECK: memw(r17 ++ m1:brev) = r21
307 # Store word conditionally
309 # CHECK: if (p3) memw(r17+r21<<#3) = r31
311 # CHECK: if (!p3) memw(r17+r21<<#3) = r31
312 0x03 0x40 0x45 0x85 0xff 0xf5 0x91 0x36
314 # CHECK-NEXT: if (p3.new) memw(r17+r21<<#3) = r31
315 0x03 0x40 0x45 0x85 0xff 0xf5 0x91 0x37
317 # CHECK-NEXT: if (!p3.new) memw(r17+r21<<#3) = r31
319 # CHECK: if (p3) memw(r17+#84)=#31
321 # CHECK: if (!p3) memw(r17+#84)=#31
322 0x03 0x40 0x45 0x85 0xff 0xca 0x51 0x39
324 # CHECK-NEXT: if (p3.new) memw(r17+#84)=#31
325 0x03 0x40 0x45 0x85 0xff 0xca 0xd1 0x39
327 # CHECK-NEXT: if (!p3.new) memw(r17+#84)=#31
329 # CHECK: if (p3) memw(r17+#84) = r31
331 # CHECK: if (!p3) memw(r17+#84) = r31
332 0x03 0x40 0x45 0x85 0xab 0xdf 0x91 0x42
334 # CHECK-NEXT: if (p3.new) memw(r17+#84) = r31
335 0x03 0x40 0x45 0x85 0xab 0xdf 0x91 0x46
337 # CHECK-NEXT: if (!p3.new) memw(r17+#84) = r31
339 # CHECK: if (p3) memw(r17++#20) = r21
341 # CHECK: if (!p3) memw(r17++#20) = r21
342 0x03 0x40 0x45 0x85 0xaf 0xf5 0x91 0xab
344 # CHECK-NEXT: if (!p3.new) memw(r17++#20) = r21
345 0x03 0x40 0x45 0x85 0xab 0xf5 0x91 0xab
347 # CHECK-NEXT: if (p3.new) memw(r17++#20) = r21
348 0x01 0x40 0x00 0x00 0xa3 0xd5 0x81 0xaf
349 # CHECK: if (p3) memw(##84) = r21
350 0x01 0x40 0x00 0x00 0xa7 0xd5 0x81 0xaf
351 # CHECK: if (!p3) memw(##84) = r21
352 0x03 0x40 0x45 0x85 0x01 0x40 0x00 0x00 0xa3 0xf5 0x81 0xaf
354 # CHECK-NEXT: if (p3.new) memw(##84) = r21
355 0x03 0x40 0x45 0x85 0x01 0x40 0x00 0x00 0xa7 0xf5 0x81 0xaf
357 # CHECK-NEXT: if (!p3.new) memw(##84) = r21
359 # Allocate stack frame
361 # CHECK: allocframe(#248)