1 # RUN: llvm-mc -triple=hexagon -disassemble < %s | FileCheck %s
2 # Hexagon Programmer's Reference Manual 11.8 ST
6 # CHECK: memd(r17 + r21<<#3) = r31:30
8 # CHECK: memd(##320) = r21:20
10 # CHECK: memd(r17+#168) = r21:20
12 # CHECK: memd(r17 ++ I:circ(m1)) = r21:20
14 # CHECK: memd(r17 ++ #40:circ(m1)) = r21:20
16 # CHECK: memd(r17++#40) = r21:20
18 # CHECK: memd(r17++m1) = r21:20
20 # CHECK: memd(r17 ++ m1:brev) = r21:20
22 # Store doubleword conditionally
24 # CHECK: if (p3) memd(r17+r21<<#3) = r31:30
26 # CHECK: if (!p3) memd(r17+r21<<#3) = r31:30
27 0x03 0x40 0x45 0x85 0xfe 0xf5 0xd1 0x36
29 # CHECK-NEXT: if (p3.new) memd(r17+r21<<#3) = r31:30
30 0x03 0x40 0x45 0x85 0xfe 0xf5 0xd1 0x37
32 # CHECK-NEXT: if (!p3.new) memd(r17+r21<<#3) = r31:30
34 # CHECK: if (p3) memd(r17+#168) = r31:30
36 # CHECK: if (!p3) memd(r17+#168) = r31:30
37 0x03 0x40 0x45 0x85 0xab 0xde 0xd1 0x42
39 # CHECK-NEXT: if (p3.new) memd(r17+#168) = r31:30
40 0x03 0x40 0x45 0x85 0xab 0xde 0xd1 0x46
42 # CHECK-NEXT: if (!p3.new) memd(r17+#168) = r31:30
44 # CHECK: if (p3) memd(r17++#40) = r21:20
46 # CHECK: if (!p3) memd(r17++#40) = r21:20
47 0x03 0x40 0x45 0x85 0xab 0xf4 0xd1 0xab
49 # CHECK-NEXT: if (p3.new) memd(r17++#40) = r21:20
50 0x03 0x40 0x45 0x85 0xaf 0xf4 0xd1 0xab
52 # CHECK-NEXT: if (!p3.new) memd(r17++#40) = r21:20
56 # CHECK: memb(r17 + r21<<#3) = r31
58 # CHECK: memb(r17+#21)=#31
60 # CHECK: memb(##21) = r21
62 # CHECK: memb(r17+#21) = r21
64 # CHECK: memb(r17 ++ I:circ(m1)) = r21
66 # CHECK: memb(r17 ++ #5:circ(m1)) = r21
68 # CHECK: memb(r17++#5) = r21
70 # CHECK: memb(r17++m1) = r21
72 # CHECK: memb(r17 ++ m1:brev) = r21
74 # Store byte conditionally
76 # CHECK: if (p3) memb(r17+r21<<#3) = r31
78 # CHECK: if (!p3) memb(r17+r21<<#3) = r31
79 0x03 0x40 0x45 0x85 0xff 0xf5 0x11 0x36
81 # CHECK-NEXT: if (p3.new) memb(r17+r21<<#3) = r31
82 0x03 0x40 0x45 0x85 0xff 0xf5 0x11 0x37
84 # CHECK-NEXT: if (!p3.new) memb(r17+r21<<#3) = r31
86 # CHECK: if (p3) memb(r17+#21)=#31
88 # CHECK: if (!p3) memb(r17+#21)=#31
89 0x03 0x40 0x45 0x85 0xff 0xca 0x11 0x39
91 # CHECK-NEXT: if (p3.new) memb(r17+#21)=#31
92 0x03 0x40 0x45 0x85 0xff 0xca 0x91 0x39
94 # CHECK-NEXT: if (!p3.new) memb(r17+#21)=#31
96 # CHECK: if (p3) memb(r17+#21) = r31
98 # CHECK: if (!p3) memb(r17+#21) = r31
99 0x03 0x40 0x45 0x85 0xab 0xdf 0x11 0x42
101 # CHECK-NEXT: if (p3.new) memb(r17+#21) = r31
102 0x03 0x40 0x45 0x85 0xab 0xdf 0x11 0x46
104 # CHECK-NEXT: if (!p3.new) memb(r17+#21) = r31
106 # CHECK: if (p3) memb(r17++#5) = r21
108 # CHECK: if (!p3) memb(r17++#5) = r21
109 0x03 0x40 0x45 0x85 0xab 0xf5 0x11 0xab
111 # CHECK-NEXT: if (p3.new) memb(r17++#5) = r21
112 0x03 0x40 0x45 0x85 0xaf 0xf5 0x11 0xab
114 # CHECK-NEXT: if (!p3.new) memb(r17++#5) = r21
118 # CHECK: memh(r17 + r21<<#3) = r31
120 # CHECK: memh(r17 + r21<<#3) = r31.h
122 # CHECK: memh(r17+#62)=#21
124 # CHECK: memh(##84) = r21
126 # CHECK: memh(##84) = r21.h
128 # CHECK: memh(r17+#42) = r31
130 # CHECK: memh(r17+#42) = r31.h
132 # CHECK: memh(r17 ++ I:circ(m1)) = r21
134 # CHECK: memh(r17 ++ #10:circ(m1)) = r21
136 # CHECK: memh(r17 ++ I:circ(m1)) = r21.h
138 # CHECK: memh(r17 ++ #10:circ(m1)) = r21.h
140 # CHECK: memh(r17++#10) = r21
142 # CHECK: memh(r17++#10) = r21.h
144 # CHECK: memh(r17++m1) = r21
146 # CHECK: memh(r17++m1) = r21.h
148 # CHECK: memh(r17 ++ m1:brev) = r21
150 # CHECK: memh(r17 ++ m1:brev) = r21.h
152 # Store halfword conditionally
154 # CHECK: if (p3) memh(r17+r21<<#3) = r31
156 # CHECK: if (p3) memh(r17+r21<<#3) = r31.h
158 # CHECK: if (!p3) memh(r17+r21<<#3) = r31
160 # CHECK: if (!p3) memh(r17+r21<<#3) = r31.h
161 0x03 0x40 0x45 0x85 0xff 0xf5 0x51 0x36
163 # CHECK-NEXT: if (p3.new) memh(r17+r21<<#3) = r31
164 0x03 0x40 0x45 0x85 0xff 0xf5 0x71 0x36
166 # CHECK-NEXT: if (p3.new) memh(r17+r21<<#3) = r31.h
167 0x03 0x40 0x45 0x85 0xff 0xf5 0x51 0x37
169 # CHECK-NEXT: if (!p3.new) memh(r17+r21<<#3) = r31
170 0x03 0x40 0x45 0x85 0xff 0xf5 0x71 0x37
172 # CHECK-NEXT: if (!p3.new) memh(r17+r21<<#3) = r31.h
174 # CHECK: if (p3) memh(r17+#62)=#21
176 # CHECK: if (!p3) memh(r17+#62)=#21
177 0x03 0x40 0x45 0x85 0xf5 0xcf 0x31 0x39
179 # CHECK-NEXT: if (p3.new) memh(r17+#62)=#21
180 0x03 0x40 0x45 0x85 0xf5 0xcf 0xb1 0x39
182 # CHECK-NEXT: if (!p3.new) memh(r17+#62)=#21
184 # CHECK: if (p3) memh(r17+#62) = r21
186 # CHECK: if (p3) memh(r17+#62) = r21.h
188 # CHECK: if (!p3) memh(r17+#62) = r21
190 # CHECK: if (!p3) memh(r17+#62) = r21.h
191 0x03 0x40 0x45 0x85 0xfb 0xd5 0x51 0x42
193 # CHECK-NEXT: if (p3.new) memh(r17+#62) = r21
194 0x03 0x40 0x45 0x85 0xfb 0xd5 0x71 0x42
196 # CHECK-NEXT: if (p3.new) memh(r17+#62) = r21.h
197 0x03 0x40 0x45 0x85 0xfb 0xd5 0x51 0x46
199 # CHECK-NEXT: if (!p3.new) memh(r17+#62) = r21
200 0x03 0x40 0x45 0x85 0xfb 0xd5 0x71 0x46
202 # CHECK-NEXT: if (!p3.new) memh(r17+#62) = r21.h
204 # CHECK: if (p3) memh(r17++#10) = r21
206 # CHECK: if (!p3) memh(r17++#10) = r21
207 0x03 0x40 0x45 0x85 0xab 0xf5 0x51 0xab
209 # CHECK-NEXT: if (p3.new) memh(r17++#10) = r21
210 0x03 0x40 0x45 0x85 0xaf 0xf5 0x51 0xab
212 # CHECK-NEXT: if (!p3.new) memh(r17++#10) = r21
214 # CHECK: if (p3) memh(r17++#10) = r21.h
216 # CHECK: if (!p3) memh(r17++#10) = r21.h
217 0x03 0x40 0x45 0x85 0xab 0xf5 0x71 0xab
219 # CHECK-NEXT: if (p3.new) memh(r17++#10) = r21.h
220 0x03 0x40 0x45 0x85 0xaf 0xf5 0x71 0xab
222 # CHECK-NEXT: if (!p3.new) memh(r17++#10) = r21.h
226 # CHECK: memw(r17 + r21<<#3) = r31
228 # CHECK: memw(r17+#84)=#31
230 # CHECK: memw(r17+#84) = r31
232 # CHECK: memw(##80) = r21
234 # CHECK: memw(r17 ++ I:circ(m1)) = r21
236 # CHECK: memw(r17 ++ #20:circ(m1)) = r21
238 # CHECK: memw(r17++#20) = r21
240 # CHECK: memw(r17++m1) = r21
242 # CHECK: memw(r17 ++ m1:brev) = r21
244 # Store word conditionally
246 # CHECK: if (p3) memw(r17+r21<<#3) = r31
248 # CHECK: if (!p3) memw(r17+r21<<#3) = r31
249 0x03 0x40 0x45 0x85 0xff 0xf5 0x91 0x36
251 # CHECK-NEXT: if (p3.new) memw(r17+r21<<#3) = r31
252 0x03 0x40 0x45 0x85 0xff 0xf5 0x91 0x37
254 # CHECK-NEXT: if (!p3.new) memw(r17+r21<<#3) = r31
256 # CHECK: if (p3) memw(r17+#84)=#31
258 # CHECK: if (!p3) memw(r17+#84)=#31
259 0x03 0x40 0x45 0x85 0xff 0xca 0x51 0x39
261 # CHECK-NEXT: if (p3.new) memw(r17+#84)=#31
262 0x03 0x40 0x45 0x85 0xff 0xca 0xd1 0x39
264 # CHECK-NEXT: if (!p3.new) memw(r17+#84)=#31
266 # CHECK: if (p3) memw(r17+#84) = r31
268 # CHECK: if (!p3) memw(r17+#84) = r31
269 0x03 0x40 0x45 0x85 0xab 0xdf 0x91 0x42
271 # CHECK-NEXT: if (p3.new) memw(r17+#84) = r31
272 0x03 0x40 0x45 0x85 0xab 0xdf 0x91 0x46
274 # CHECK-NEXT: if (!p3.new) memw(r17+#84) = r31
276 # CHECK: if (p3) memw(r17++#20) = r21
278 # CHECK: if (!p3) memw(r17++#20) = r21
279 0x03 0x40 0x45 0x85 0xaf 0xf5 0x91 0xab
281 # CHECK-NEXT: if (!p3.new) memw(r17++#20) = r21
282 0x03 0x40 0x45 0x85 0xab 0xf5 0x91 0xab
284 # CHECK-NEXT: if (p3.new) memw(r17++#20) = r21
286 # Allocate stack frame
288 # CHECK: allocframe(#248)