1 # RUN: llvm-mc -triple=hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s
2 # Hexagon Programmer's Reference Manual 11.8 ST
6 memd
(r17 + r21<<#3) = r31:30
10 # CHECK-NEXT: 28 d4 c0 48
12 memd
(r17+
#168) = r21:20
14 memd
(r17 ++ I
:circ
(m1
)) = r21:20
16 memd
(r17 ++ #40:circ(m1)) = r21:20
18 memd
(r17+
+#40) = r21:20
20 # CHECK-NEXT: d5 fe d1 ad
21 memd
(r17<<#3 + ##21) = r31:30
22 memd
(r17+
+m1
) = r21:20
24 memd
(r17 ++ m1
:brev
) = r21:20
26 # Store doubleword conditionally
28 if
(p3
) memd
(r17+
r21<<#3) = r31:30
30 if
(!p3
) memd
(r17+
r21<<#3) = r31:30
32 # CHECK-NEXT: fe f5 d1 36
34 if
(p3.new
) memd
(r17+
r21<<#3) = r31:30 }
36 # CHECK-NEXT: fe f5 d1 37
38 if
(!p3.new
) memd
(r17+
r21<<#3) = r31:30 }
40 if
(p3
) memd
(r17+
#168) = r31:30
42 if
(!p3
) memd
(r17+
#168) = r31:30
44 # CHECK-NEXT: ab de d1 42
46 if
(p3.new
) memd
(r17+
#168) = r31:30 }
48 # CHECK-NEXT: ab de d1 46
50 if
(!p3.new
) memd
(r17+
#168) = r31:30 }
52 if
(p3
) memd
(r17+
+#40) = r21:20
54 if
(!p3
) memd
(r17+
+#40) = r21:20
56 # CHECK-NEXT: ab f4 d1 ab
58 if
(p3.new
) memd
(r17+
+#40) = r21:20 }
60 # CHECK-NEXT: af f4 d1 ab
62 if
(!p3.new
) memd
(r17+
+#40) = r21:20 }
64 # CHECK-NEXT: c3 d4 c2 af
65 if
(p3
) memd
(##168) = r21:20
67 # CHECK-NEXT: c7 d4 c2 af
68 if
(!p3
) memd
(##168) = r21:20
70 # CHECK-NEXT: 02 40 00 00
71 # CHECK-NEXT: c3 f4 c2 af
73 if
(p3.new
) memd
(##168) = r21:20 }
75 # CHECK-NEXT: 02 40 00 00
76 # CHECK-NEXT: c7 f4 c2 af
78 if
(!p3.new
) memd
(##168) = r21:20 }
82 memb
(r17 + r21<<#3) = r31
88 # CHECK-NEXT: 15 d5 00 48
93 memb
(r17 ++ I
:circ
(m1
)) = r21
95 memb
(r17 ++ #5:circ(m1)) = r21
99 # CHECK-NEXT: d5 ff 11 ad
100 memb
(r17<<#3 + ##21) = r31
104 memb
(r17 ++ m1
:brev
) = r21
106 # Store byte conditionally
108 if
(p3
) memb
(r17+
r21<<#3) = r31
110 if
(!p3
) memb
(r17+
r21<<#3) = r31
112 # CHECK-NEXT: ff f5 11 36
114 if
(p3.new
) memb
(r17+
r21<<#3) = r31 }
116 # CHECK-NEXT: ff f5 11 37
118 if
(!p3.new
) memb
(r17+
r21<<#3) = r31 }
120 if
(p3
) memb
(r17+
#21)=#31
122 if
(!p3
) memb
(r17+
#21)=#31
124 # CHECK-NEXT: ff ca 11 39
126 if
(p3.new
) memb
(r17+
#21)=#31 }
128 # CHECK-NEXT: ff ca 91 39
130 if
(!p3.new
) memb
(r17+
#21)=#31 }
132 if
(p3
) memb
(r17+
#21) = r31
134 if
(!p3
) memb
(r17+
#21) = r31
136 # CHECK-NEXT: ab df 11 42
138 if
(p3.new
) memb
(r17+
#21) = r31 }
140 # CHECK-NEXT: ab df 11 46
142 if
(!p3.new
) memb
(r17+
#21) = r31 }
144 if
(p3
) memb
(r17+
+#5) = r21
146 if
(!p3
) memb
(r17+
+#5) = r21
148 # CHECK-NEXT: ab f5 11 ab
150 if
(p3.new
) memb
(r17+
+#5) = r21 }
152 # CHECK-NEXT: af f5 11 ab
154 if
(!p3.new
) memb
(r17+
+#5) = r21 }
156 # CHECK-NEXT: ab d5 01 af
157 if
(p3
) memb
(##21) = r21
159 # CHECK-NEXT: af d5 01 af
160 if
(!p3
) memb
(##21) = r21
162 # CHECK-NEXT: 00 40 00 00
163 # CHECK-NEXT: ab f5 01 af
165 if
(p3.new
) memb
(##21) = r21 }
167 # CHECK-NEXT: 00 40 00 00
168 # CHECK-NEXT: af f5 01 af
170 if
(!p3.new
) memb
(##21) = r21 }
174 memh
(r17 + r21<<#3) = r31
176 memh
(r17 + r21<<#3) = r31.h
180 # CHECK-NEXT: 2a d5 40 48
183 # CHECK-NEXT: 2a d5 60 48
192 memh
(r17+
#42) = r31.h
194 memh
(r17 ++ I
:circ
(m1
)) = r21
196 memh
(r17 ++ #10:circ(m1)) = r21
198 memh
(r17 ++ I
:circ
(m1
)) = r21.h
200 memh
(r17 ++ #10:circ(m1)) = r21.h
204 # CHECK-NEXT: d5 ff 51 ad
205 memh
(r17<<#3 + ##21) = r31
207 memh
(r17+
+#10) = r21.h
209 # CHECK-NEXT: d5 ff 71 ad
210 memh
(r17<<#3 + ##21) = r31.h
214 memh
(r17+
+m1
) = r21.h
216 memh
(r17 ++ m1
:brev
) = r21
218 memh
(r17 ++ m1
:brev
) = r21.h
220 # Store halfword conditionally
222 if
(p3
) memh
(r17+
r21<<#3) = r31
224 if
(p3
) memh
(r17+
r21<<#3) = r31.h
226 if
(!p3
) memh
(r17+
r21<<#3) = r31
228 if
(!p3
) memh
(r17+
r21<<#3) = r31.h
230 # CHECK-NEXT: ff f5 51 36
232 if
(p3.new
) memh
(r17+
r21<<#3) = r31 }
234 # CHECK-NEXT: ff f5 71 36
236 if
(p3.new
) memh
(r17+
r21<<#3) = r31.h }
238 # CHECK-NEXT: ff f5 51 37
240 if
(!p3.new
) memh
(r17+
r21<<#3) = r31 }
242 # CHECK-NEXT: ff f5 71 37
244 if
(!p3.new
) memh
(r17+
r21<<#3) = r31.h }
246 if
(p3
) memh
(r17+
#62)=#21
248 if
(!p3
) memh
(r17+
#62)=#21
250 # CHECK-NEXT: f5 cf 31 39
252 if
(p3.new
) memh
(r17+
#62)=#21 }
254 # CHECK-NEXT: f5 cf b1 39
256 if
(!p3.new
) memh
(r17+
#62)=#21 }
258 if
(p3
) memh
(r17+
#62) = r21
260 if
(p3
) memh
(r17+
#62) = r21.h
262 if
(!p3
) memh
(r17+
#62) = r21
264 if
(!p3
) memh
(r17+
#62) = r21.h
266 # CHECK-NEXT: fb d5 51 42
268 if
(p3.new
) memh
(r17+
#62) = r21 }
270 # CHECK-NEXT: fb d5 71 42
272 if
(p3.new
) memh
(r17+
#62) = r21.h }
274 # CHECK-NEXT: fb d5 51 46
276 if
(!p3.new
) memh
(r17+
#62) = r21 }
278 # CHECK-NEXT: fb d5 71 46
280 if
(!p3.new
) memh
(r17+
#62) = r21.h }
282 if
(p3
) memh
(r17+
+#10) = r21
284 if
(!p3
) memh
(r17+
+#10) = r21
286 # CHECK-NEXT: ab f5 51 ab
288 if
(p3.new
) memh
(r17+
+#10) = r21 }
290 # CHECK-NEXT: af f5 51 ab
292 if
(!p3.new
) memh
(r17+
+#10) = r21 }
294 if
(p3
) memh
(r17+
+#10) = r21.h
296 if
(!p3
) memh
(r17+
+#10) = r21.h
298 # CHECK-NEXT: ab f5 71 ab
300 if
(p3.new
) memh
(r17+
+#10) = r21.h }
302 # CHECK-NEXT: af f5 71 ab
304 if
(!p3.new
) memh
(r17+
+#10) = r21.h }
306 # CHECK-NEXT: d3 d5 42 af
307 if
(p3
) memh
(##42) = r21
309 # CHECK-NEXT: d3 d5 62 af
310 if
(p3
) memh
(##42) = r21.h
312 # CHECK-NEXT: d7 d5 42 af
313 if
(!p3
) memh
(##42) = r21
315 # CHECK-NEXT: d7 d5 62 af
316 if
(!p3
) memh
(##42) = r21.h
318 # CHECK-NEXT: 00 40 00 00
319 # CHECK-NEXT: d3 f5 42 af
321 if
(p3.new
) memh
(##42) = r21 }
323 # CHECK-NEXT: 00 40 00 00
324 # CHECK-NEXT: d3 f5 62 af
326 if
(p3.new
) memh
(##42) = r21.h }
328 # CHECK-NEXT: 00 40 00 00
329 # CHECK-NEXT: d7 f5 42 af
331 if
(!p3.new
) memh
(##42) = r21 }
333 # CHECK-NEXT: 00 40 00 00
334 # CHECK-NEXT: d7 f5 62 af
336 if
(!p3.new
) memh
(##42) = r21.h }
340 memw
(r17 + r21<<#3) = r31
346 # CHECK-NEXT: 14 d5 80 48
353 memw
(r17 ++ I
:circ
(m1
)) = r21
355 memw
(r17 ++ #20:circ(m1)) = r21
359 # CHECK-NEXT: d5 ff 91 ad
360 memw
(r17<<#3 + ##21) = r31
364 memw
(r17 ++ m1
:brev
) = r21
366 # Store word conditionally
368 if
(p3
) memw
(r17+
r21<<#3) = r31
370 if
(!p3
) memw
(r17+
r21<<#3) = r31
372 # CHECK-NEXT: ff f5 91 36
374 if
(p3.new
) memw
(r17+
r21<<#3) = r31 }
376 # CHECK-NEXT: ff f5 91 37
378 if
(!p3.new
) memw
(r17+
r21<<#3) = r31 }
380 if
(p3
) memw
(r17+
#84)=#31
382 if
(!p3
) memw
(r17+
#84)=#31
384 # CHECK-NEXT: ff ca 51 39
386 if
(p3.new
) memw
(r17+
#84)=#31 }
388 # CHECK-NEXT: ff ca d1 39
390 if
(!p3.new
) memw
(r17+
#84)=#31 }
392 if
(p3
) memw
(r17+
#84) = r31
394 if
(!p3
) memw
(r17+
#84) = r31
396 # CHECK-NEXT: ab df 91 42
398 if
(p3.new
) memw
(r17+
#84) = r31 }
400 # CHECK-NEXT: ab df 91 46
402 if
(!p3.new
) memw
(r17+
#84) = r31 }
404 if
(p3
) memw
(r17+
+#20) = r21
406 if
(!p3
) memw
(r17+
+#20) = r21
408 # CHECK-NEXT: af f5 91 ab
410 if
(!p3.new
) memw
(r17+
+#20) = r21 }
412 # CHECK-NEXT: ab f5 91 ab
414 if
(p3.new
) memw
(r17+
+#20) = r21 }
416 # CHECK-NEXT: a3 d5 81 af
417 if
(p3
) memw
(##84) = r21
419 # CHECK-NEXT: a7 d5 81 af
420 if
(!p3
) memw
(##84) = r21
422 # CHECK-NEXT: 01 40 00 00
423 # CHECK-NEXT: a3 f5 81 af
425 if
(p3.new
) memw
(##84) = r21 }
427 # CHECK-NEXT: 01 40 00 00
428 # CHECK-NEXT: a7 f5 81 af
430 if
(!p3.new
) memw
(##84) = r21 }
432 # Allocate stack frame