1 # RUN: llvm-mc -triple hexagon -disassemble < %s | FileCheck %s
2 # Hexagon Programmer's Reference Manual 11.5 LD
6 # CHECK: r17:16 = memd(r21 + r31<<#3)
8 # CHECK: r17:16 = memd(##320)
10 # CHECK: r17:16 = memd(r21 ++ #40:circ(m1))
12 # CHECK: r17:16 = memd(r21 ++ I:circ(m1))
14 # CHECK: r17:16 = memd(r21++#40)
16 # CHECK: r17:16 = memd(r21++m1)
18 # CHECK: r17:16 = memd(r21 ++ m1:brev)
20 # Load doubleword conditionally
22 # CHECK: if (p3) r17:16 = memd(r21+r31<<#3)
24 # CHECK: if (!p3) r17:16 = memd(r21+r31<<#3)
25 0x03 0x40 0x45 0x85 0xf0 0xff 0xd5 0x32
27 # CHECK-NEXT: if (p3.new) r17:16 = memd(r21+r31<<#3)
28 0x03 0x40 0x45 0x85 0xf0 0xff 0xd5 0x33
30 # CHECK-NEXT: if (!p3.new) r17:16 = memd(r21+r31<<#3)
32 # CHECK: if (p3) r17:16 = memd(r21 + #24)
33 0x03 0x40 0x45 0x85 0x70 0xd8 0xd5 0x43
35 # CHECK-NEXT: if (p3.new) r17:16 = memd(r21 + #24)
37 # CHECK: if (!p3) r17:16 = memd(r21 + #24)
38 0x03 0x40 0x45 0x85 0x70 0xd8 0xd5 0x47
40 # CHECK-NEXT: if (!p3.new) r17:16 = memd(r21 + #24)
42 # CHECK: if (p3) r17:16 = memd(r21++#40)
44 # CHECK: if (!p3) r17:16 = memd(r21++#40)
45 0x03 0x40 0x45 0x85 0xb0 0xf6 0xd5 0x9b
47 # CHECK-NEXT: if (p3.new) r17:16 = memd(r21++#40)
48 0x03 0x40 0x45 0x85 0xb0 0xfe 0xd5 0x9b
50 # CHECK-NEXT: if (!p3.new) r17:16 = memd(r21++#40)
54 # CHECK: r17 = memb(r21 + r31<<#3)
56 # CHECK: r17 = memb(##21)
58 # CHECK: r17 = memb(r21 + #31)
60 # CHECK: r17 = memb(r21 ++ #5:circ(m1))
62 # CHECK: r17 = memb(r21 ++ I:circ(m1))
64 # CHECK: r17 = memb(r21++#5)
66 # CHECK: r17 = memb(r21++m1)
68 # CHECK: r17 = memb(r21 ++ m1:brev)
70 # Load byte conditionally
72 # CHECK: if (p3) r17 = memb(r21+r31<<#3)
74 # CHECK: if (!p3) r17 = memb(r21+r31<<#3)
75 0x03 0x40 0x45 0x85 0xf1 0xff 0x15 0x32
77 # CHECK-NEXT: if (p3.new) r17 = memb(r21+r31<<#3)
78 0x03 0x40 0x45 0x85 0xf1 0xff 0x15 0x33
80 # CHECK-NEXT: if (!p3.new) r17 = memb(r21+r31<<#3)
82 # CHECK: if (p3) r17 = memb(r21 + #44)
83 0x03 0x40 0x45 0x85 0x91 0xdd 0x15 0x43
85 # CHECK-NEXT: if (p3.new) r17 = memb(r21 + #44)
87 # CHECK: if (!p3) r17 = memb(r21 + #44)
88 0x03 0x40 0x45 0x85 0x91 0xdd 0x15 0x47
90 # CHECK-NEXT: if (!p3.new) r17 = memb(r21 + #44)
92 # CHECK: if (p3) r17 = memb(r21++#5)
94 # CHECK: if (!p3) r17 = memb(r21++#5)
95 0x03 0x40 0x45 0x85 0xb1 0xf6 0x15 0x9b
97 # CHECK-NEXT: if (p3.new) r17 = memb(r21++#5)
98 0x03 0x40 0x45 0x85 0xb1 0xfe 0x15 0x9b
100 # CHECK-NEXT: if (!p3.new) r17 = memb(r21++#5)
104 # CHECK: r17 = memh(r21 + r31<<#3)
106 # CHECK: r17 = memh(##84)
108 # CHECK: r17 = memh(r21 + #62)
110 # CHECK: r17 = memh(r21 ++ #10:circ(m1))
112 # CHECK: r17 = memh(r21 ++ I:circ(m1))
114 # CHECK: r17 = memh(r21++#10)
116 # CHECK: r17 = memh(r21++m1)
118 # CHECK: r17 = memh(r21 ++ m1:brev)
120 # Load halfword conditionally
122 # CHECK: if (p3) r17 = memh(r21+r31<<#3)
124 # CHECK: if (!p3) r17 = memh(r21+r31<<#3)
125 0x03 0x40 0x45 0x85 0xf1 0xff 0x55 0x32
127 # CHECK-NEXT: if (p3.new) r17 = memh(r21+r31<<#3)
128 0x03 0x40 0x45 0x85 0xf1 0xff 0x55 0x33
130 # CHECK-NEXT: if (!p3.new) r17 = memh(r21+r31<<#3)
132 # CHECK: if (p3) r17 = memh(r21++#10)
134 # CHECK: if (!p3) r17 = memh(r21++#10)
135 0x03 0x40 0x45 0x85 0xb1 0xf6 0x55 0x9b
137 # CHECK-NEXT: if (p3.new) r17 = memh(r21++#10)
138 0x03 0x40 0x45 0x85 0xb1 0xfe 0x55 0x9b
140 # CHECK-NEXT: if (!p3.new) r17 = memh(r21++#10)
144 # CHECK: r17 = memub(r21 + r31<<#3)
146 # CHECK: r17 = memub(##21)
148 # CHECK: r17 = memub(r21 + #31)
150 # CHECK: r17 = memub(r21 ++ #5:circ(m1))
152 # CHECK: r17 = memub(r21 ++ I:circ(m1))
154 # CHECK: r17 = memub(r21++#5)
156 # CHECK: r17 = memub(r21++m1)
158 # CHECK: r17 = memub(r21 ++ m1:brev)
160 # Load unsigned byte conditionally
162 # CHECK: if (p3) r17 = memub(r21+r31<<#3)
164 # CHECK: if (!p3) r17 = memub(r21+r31<<#3)
165 0x03 0x40 0x45 0x85 0xf1 0xff 0x35 0x32
167 # CHECK-NEXT: if (p3.new) r17 = memub(r21+r31<<#3)
168 0x03 0x40 0x45 0x85 0xf1 0xff 0x35 0x33
170 # CHECK-NEXT: if (!p3.new) r17 = memub(r21+r31<<#3)
172 # CHECK: if (p3) r17 = memub(r21 + #31)
173 0x03 0x40 0x45 0x85 0xf1 0xdb 0x35 0x43
175 # CHECK-NEXT: if (p3.new) r17 = memub(r21 + #31)
177 # CHECK: if (!p3) r17 = memub(r21 + #31)
178 0x03 0x40 0x45 0x85 0xf1 0xdb 0x35 0x47
180 # CHECK-NEXT: if (!p3.new) r17 = memub(r21 + #31)
182 # CHECK: if (p3) r17 = memub(r21++#5)
184 # CHECK: if (!p3) r17 = memub(r21++#5)
185 0x03 0x40 0x45 0x85 0xb1 0xf6 0x35 0x9b
187 # CHECK-NEXT: if (p3.new) r17 = memub(r21++#5)
188 0x03 0x40 0x45 0x85 0xb1 0xfe 0x35 0x9b
190 # CHECK-NEXT: if (!p3.new) r17 = memub(r21++#5)
192 # Load unsigned halfword
194 # CHECK: r17 = memuh(r21 + r31<<#3)
196 # CHECK: r17 = memuh(##84)
198 # CHECK: r17 = memuh(r21 + #42)
200 # CHECK: r17 = memuh(r21 ++ #10:circ(m1))
202 # CHECK: r17 = memuh(r21 ++ I:circ(m1))
204 # CHECK: r17 = memuh(r21++#10)
206 # CHECK: r17 = memuh(r21++m1)
208 # CHECK: r17 = memuh(r21 ++ m1:brev)
210 # Load unsigned halfword conditionally
212 # CHECK: if (p3) r17 = memuh(r21+r31<<#3)
214 # CHECK: if (!p3) r17 = memuh(r21+r31<<#3)
215 0x03 0x40 0x45 0x85 0xf1 0xff 0x75 0x32
217 # CHECK-NEXT: if (p3.new) r17 = memuh(r21+r31<<#3)
218 0x03 0x40 0x45 0x85 0xf1 0xff 0x75 0x33
220 # CHECK-NEXT: if (!p3.new) r17 = memuh(r21+r31<<#3)
222 # CHECK: if (p3) r17 = memuh(r21 + #42)
224 # CHECK: if (!p3) r17 = memuh(r21 + #42)
225 0x03 0x40 0x45 0x85 0xb1 0xda 0x75 0x43
227 # CHECK-NEXT: if (p3.new) r17 = memuh(r21 + #42)
228 0x03 0x40 0x45 0x85 0xb1 0xda 0x75 0x47
230 # CHECK-NEXT: if (!p3.new) r17 = memuh(r21 + #42)
232 # CHECK: if (p3) r17 = memuh(r21++#10)
234 # CHECK: if (!p3) r17 = memuh(r21++#10)
235 0x03 0x40 0x45 0x85 0xb1 0xf6 0x75 0x9b
237 # CHECK-NEXT: if (p3.new) r17 = memuh(r21++#10)
238 0x03 0x40 0x45 0x85 0xb1 0xfe 0x75 0x9b
240 # CHECK-NEXT: if (!p3.new) r17 = memuh(r21++#10)
244 # CHECK: r17 = memw(r21 + r31<<#3)
246 # CHECK: r17 = memw(##80)
248 # CHECK: r17 = memw(r21 + #84)
250 # CHECK: r17 = memw(r21 ++ #20:circ(m1))
252 # CHECK: r17 = memw(r21 ++ I:circ(m1))
254 # CHECK: r17 = memw(r21++#20)
256 # CHECK: r17 = memw(r21++m1)
258 # CHECK: r17 = memw(r21 ++ m1:brev)
260 # Load word conditionally
262 # CHECK: if (p3) r17 = memw(r21+r31<<#3)
264 # CHECK: if (!p3) r17 = memw(r21+r31<<#3)
265 0x03 0x40 0x45 0x85 0xf1 0xff 0x95 0x32
267 # CHECK-NEXT: if (p3.new) r17 = memw(r21+r31<<#3)
268 0x03 0x40 0x45 0x85 0xf1 0xff 0x95 0x33
270 # CHECK-NEXT: if (!p3.new) r17 = memw(r21+r31<<#3)
272 # CHECK: if (p3) r17 = memw(r21 + #84)
274 # CHECK: if (!p3) r17 = memw(r21 + #84)
275 0x03 0x40 0x45 0x85 0xb1 0xda 0x95 0x43
277 # CHECK-NEXT: if (p3.new) r17 = memw(r21 + #84)
278 0x03 0x40 0x45 0x85 0xb1 0xda 0x95 0x47
280 # CHECK-NEXT: if (!p3.new) r17 = memw(r21 + #84)
282 # CHECK: if (p3) r17 = memw(r21++#20)
284 # CHECK: if (!p3) r17 = memw(r21++#20)
285 0x03 0x40 0x45 0x85 0xb1 0xf6 0x95 0x9b
287 # CHECK-NEXT: if (p3.new) r17 = memw(r21++#20)
288 0x03 0x40 0x45 0x85 0xb1 0xfe 0x95 0x9b
290 # CHECK-NEXT: if (!p3.new) r17 = memw(r21++#20)
292 # Deallocate stack frame
294 # CHECK: deallocframe
296 # Deallocate stack frame and return
298 # CHECK: dealloc_return
299 0x03 0x40 0x45 0x85 0x1e 0xcb 0x1e 0x96
301 # CHECK-NEXT: if (p3.new) dealloc_return:nt
303 # CHECK: if (p3) dealloc_return
304 0x03 0x40 0x45 0x85 0x1e 0xdb 0x1e 0x96
306 # CHECK-NEXT: if (p3.new) dealloc_return:t
307 0x03 0x40 0x45 0x85 0x1e 0xeb 0x1e 0x96
309 # CHECK-NEXT: if (!p3.new) dealloc_return:nt
311 # CHECK: if (!p3) dealloc_return
312 0x03 0x40 0x45 0x85 0x1e 0xfb 0x1e 0x96
314 # CHECK-NEXT: if (!p3.new) dealloc_return:t
316 # Load and unpack bytes to halfwords
318 # CHECK: r17 = membh(r21 + #62)
320 # CHECK: r17 = memubh(r21 + #62)
322 # CHECK: r17:16 = memubh(r21 + #124)
324 # CHECK: r17:16 = membh(r21 + #124)
326 # CHECK: r17 = membh(r21 ++ #10:circ(m1))
328 # CHECK: r17 = membh(r21 ++ I:circ(m1))
330 # CHECK: r17 = memubh(r21 ++ #10:circ(m1))
332 # CHECK: r17 = memubh(r21 ++ I:circ(m1))
334 # CHECK: r17:16 = membh(r21 ++ #20:circ(m1))
336 # CHECK: r17:16 = membh(r21 ++ I:circ(m1))
338 # CHECK: r17:16 = memubh(r21 ++ #20:circ(m1))
340 # CHECK: r17:16 = memubh(r21 ++ I:circ(m1))
342 # CHECK: r17 = membh(r21++#10)
344 # CHECK: r17 = memubh(r21++#10)
346 # CHECK: r17:16 = memubh(r21++#20)
348 # CHECK: r17:16 = membh(r21++#20)
350 # CHECK: r17 = membh(r21++m1)
352 # CHECK: r17 = memubh(r21++m1)
354 # CHECK: r17:16 = membh(r21++m1)
356 # CHECK: r17:16 = memubh(r21++m1)
358 # CHECK: r17 = membh(r21 ++ m1:brev)
360 # CHECK: r17 = memubh(r21 ++ m1:brev)
362 # CHECK: r17:16 = memubh(r21 ++ m1:brev)
364 # CHECK: r17:16 = membh(r21 ++ m1:brev)