1 # RUN: llvm-mc -triple hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s
2 # Hexagon Programmer's Reference Manual 11.5 LD
7 r17:16 = memd(r21 + r31<<#3)
11 # CHECK-NEXT: 10 c5 c0 49
14 r17:16 = memd(r21 + #48)
16 r17:16 = memd(r21 ++ #40:circ(m1))
18 r17:16 = memd(r21 ++ I:circ(m1))
20 # CHECK-NEXT: 70 d7 d5 9b
21 r17:16 = memd(r21 = ##31)
23 r17:16 = memd(r21++#40)
25 r17:16 = memd(r21++m1)
27 r17:16 = memd(r21 ++ m1:brev)
29 # Load doubleword conditionally
31 if (p3) r17:16 = memd(r21+r31<<#3)
33 if (!p3) r17:16 = memd(r21+r31<<#3)
35 # CHECK-NEXT: f0 ff d5 32
37 if (p3.new) r17:16 = memd(r21+r31<<#3) }
39 # CHECK-NEXT: f0 ff d5 33
41 if (!p3.new) r17:16 = memd(r21+r31<<#3) }
43 if (p3) r17:16 = memd(r21 + #24)
45 # CHECK-NEXT: 70 d8 d5 43
47 if (p3.new) r17:16 = memd(r21 + #24) }
49 if (!p3) r17:16 = memd(r21 + #24)
51 # CHECK-NEXT: 70 d8 d5 47
53 if (!p3.new) r17:16 = memd(r21 + #24) }
55 if (p3) r17:16 = memd(r21++#40)
57 if (!p3) r17:16 = memd(r21++#40)
59 # CHECK-NEXT: b0 f6 d5 9b
61 if (p3.new) r17:16 = memd(r21++#40) }
63 # CHECK-NEXT: b0 fe d5 9b
65 if (!p3.new) r17:16 = memd(r21++#40) }
69 r17 = memb(r21 + r31<<#3)
73 # CHECK-NEXT: b1 c2 00 49
78 r17 = memb(r21 ++ #5:circ(m1))
80 r17 = memb(r21 ++ I:circ(m1))
82 # CHECK-NEXT: 71 d7 15 9b
83 r17 = memb(r21 = ##31)
89 r17 = memb(r21 ++ m1:brev)
91 # Load byte conditionally
93 if (p3) r17 = memb(r21+r31<<#3)
95 if (!p3) r17 = memb(r21+r31<<#3)
97 # CHECK-NEXT: f1 ff 15 32
99 if (p3.new) r17 = memb(r21+r31<<#3) }
101 # CHECK-NEXT: f1 ff 15 33
103 if (!p3.new) r17 = memb(r21+r31<<#3) }
105 if (p3) r17 = memb(r21 + #44)
107 # CHECK-NEXT: 91 dd 15 43
109 if (p3.new) r17 = memb(r21 + #44) }
111 if (!p3) r17 = memb(r21 + #44)
113 # CHECK-NEXT: 91 dd 15 47
115 if (!p3.new) r17 = memb(r21 + #44) }
117 if (p3) r17 = memb(r21++#5)
119 if (!p3) r17 = memb(r21++#5)
121 # CHECK-NEXT: b1 f6 15 9b
123 if (p3.new) r17 = memb(r21++#5) }
125 # CHECK-NEXT: b1 fe 15 9b
127 if (!p3.new) r17 = memb(r21++#5) }
129 # Load byte into shifted vector
131 r17:16 = memb_fifo(r21 + #31)
133 r17:16 = memb_fifo(r21 ++ #5:circ(m1))
135 r17:16 = memb_fifo(r21 ++ I:circ(m1))
137 # Load half into shifted vector
139 r17:16 = memh_fifo(r21 + #62)
141 r17:16 = memh_fifo(r21 ++ #10:circ(m1))
143 r17:16 = memh_fifo(r21 ++ I:circ(m1))
147 r17 = memh(r21 + r31<<#3)
151 # CHECK-NEXT: 51 c5 40 49
154 r17 = memh(r21 + #62)
156 r17 = memh(r21 ++ #10:circ(m1))
158 r17 = memh(r21 ++ I:circ(m1))
160 # CHECK-NEXT: 71 d7 55 9b
161 r17 = memh(r21 = ##31)
167 r17 = memh(r21 ++ m1:brev)
169 # Load halfword conditionally
171 if (p3) r17 = memh(r21+r31<<#3)
173 if (!p3) r17 = memh(r21+r31<<#3)
175 # CHECK-NEXT: f1 ff 55 32
177 if (p3.new) r17 = memh(r21+r31<<#3) }
179 # CHECK-NEXT: f1 ff 55 33
181 if (!p3.new) r17 = memh(r21+r31<<#3) }
183 if (p3) r17 = memh(r21++#10)
185 if (!p3) r17 = memh(r21++#10)
187 # CHECK-NEXT: b1 f6 55 9b
189 if (p3.new) r17 = memh(r21++#10) }
191 # CHECK-NEXT: b1 fe 55 9b
193 if (!p3.new) r17 = memh(r21++#10) }
195 if (p3) r17 = memh(r21 + #62)
197 if (!p3) r17 = memh(r21 + #62)
199 # CHECK-NEXT: f1 db 55 43
201 if (p3.new) r17 = memh(r21 + #62) }
203 # CHECK-NEXT: f1 db 55 47
205 if (!p3.new) r17 = memh(r21 + #62) }
209 r17 = memub(r21 + r31<<#3)
213 # CHECK-NEXT: b1 c2 20 49
216 r17 = memub(r21 + #31)
218 r17 = memub(r21 ++ #5:circ(m1))
220 r17 = memub(r21 ++ I:circ(m1))
222 # CHECK-NEXT: 71 d7 35 9b
223 r17 = memub(r21 = ##31)
229 r17 = memub(r21 ++ m1:brev)
231 # Load unsigned byte conditionally
233 if (p3) r17 = memub(r21+r31<<#3)
235 if (!p3) r17 = memub(r21+r31<<#3)
237 # CHECK-NEXT: f1 ff 35 32
239 if (p3.new) r17 = memub(r21+r31<<#3) }
241 # CHECK-NEXT: f1 ff 35 33
243 if (!p3.new) r17 = memub(r21+r31<<#3) }
245 if (p3) r17 = memub(r21 + #31)
247 # CHECK-NEXT: f1 db 35 43
249 if (p3.new) r17 = memub(r21 + #31) }
251 if (!p3) r17 = memub(r21 + #31)
253 # CHECK-NEXT: f1 db 35 47
255 if (!p3.new) r17 = memub(r21 + #31) }
257 if (p3) r17 = memub(r21++#5)
259 if (!p3) r17 = memub(r21++#5)
261 # CHECK-NEXT: b1 f6 35 9b
263 if (p3.new) r17 = memub(r21++#5) }
265 # CHECK-NEXT: b1 fe 35 9b
267 if (!p3.new) r17 = memub(r21++#5) }
269 # Load unsigned halfword
271 r17 = memuh(r21 + r31<<#3)
275 # CHECK-NEXT: 51 c5 60 49
278 r17 = memuh(r21 + #42)
280 r17 = memuh(r21 ++ #10:circ(m1))
282 r17 = memuh(r21 ++ I:circ(m1))
284 # CHECK-NEXT: 71 d7 75 9b
285 r17 = memuh(r21 = ##31)
287 r17 = memuh(r21++#10)
291 r17 = memuh(r21 ++ m1:brev)
293 # Load unsigned halfword conditionally
295 if (p3) r17 = memuh(r21+r31<<#3)
297 if (!p3) r17 = memuh(r21+r31<<#3)
299 # CHECK-NEXT: f1 ff 75 32
301 if (p3.new) r17 = memuh(r21+r31<<#3) }
303 # CHECK-NEXT: f1 ff 75 33
305 if (!p3.new) r17 = memuh(r21+r31<<#3) }
307 if (p3) r17 = memuh(r21 + #42)
309 if (!p3) r17 = memuh(r21 + #42)
311 # CHECK-NEXT: b1 da 75 43
313 if (p3.new) r17 = memuh(r21 + #42) }
315 # CHECK-NEXT: b1 da 75 47
317 if (!p3.new) r17 = memuh(r21 + #42) }
319 if (p3) r17 = memuh(r21++#10)
321 if (!p3) r17 = memuh(r21++#10)
323 # CHECK-NEXT: b1 f6 75 9b
325 if (p3.new) r17 = memuh(r21++#10) }
327 # CHECK-NEXT: b1 fe 75 9b
329 if (!p3.new) r17 = memuh(r21++#10) }
333 r17 = memw(r21 + r31<<#3)
337 # CHECK-NEXT: 91 c2 80 49
340 r17 = memw(r21 + #84)
342 r17 = memw(r21 ++ #20:circ(m1))
344 r17 = memw(r21 ++ I:circ(m1))
346 # CHECK-NEXT: 71 d7 95 9b
347 r17 = memw(r21 = ##31)
353 r17 = memw(r21 ++ m1:brev)
355 # Load word conditionally
357 if (p3) r17 = memw(r21+r31<<#3)
359 if (!p3) r17 = memw(r21+r31<<#3)
361 # CHECK-NEXT: f1 ff 95 32
363 if (p3.new) r17 = memw(r21+r31<<#3) }
365 # CHECK-NEXT: f1 ff 95 33
367 if (!p3.new) r17 = memw(r21+r31<<#3) }
369 if (p3) r17 = memw(r21 + #84)
371 if (!p3) r17 = memw(r21 + #84)
373 # CHECK-NEXT: b1 da 95 43
375 if (p3.new) r17 = memw(r21 + #84) }
377 # CHECK-NEXT: b1 da 95 47
379 if (!p3.new) r17 = memw(r21 + #84) }
381 if (p3) r17 = memw(r21++#20)
383 if (!p3) r17 = memw(r21++#20)
385 # CHECK-NEXT: b1 f6 95 9b
387 if (p3.new) r17 = memw(r21++#20) }
389 # CHECK-NEXT: b1 fe 95 9b
391 if (!p3.new) r17 = memw(r21++#20) }
393 # Deallocate stack frame
397 # Deallocate stack frame and return
401 # CHECK-NEXT: 1e cb 1e 96
403 if (p3.new) dealloc_return:nt }
405 if (p3) dealloc_return
407 # CHECK-NEXT: 1e db 1e 96
409 if (p3.new) dealloc_return:t }
411 # CHECK-NEXT: 1e eb 1e 96
413 if (!p3.new) dealloc_return:nt }
415 if (!p3) dealloc_return
417 # CHECK-NEXT: 1e fb 1e 96
419 if (!p3.new) dealloc_return:t }
421 # Load and unpack bytes to halfwords
423 r17 = membh(r21 + #62)
425 r17 = memubh(r21 + #62)
427 r17:16 = memubh(r21 + #124)
429 r17:16 = membh(r21 + #124)
431 r17 = membh(r21 ++ #10:circ(m1))
433 r17 = membh(r21 ++ I:circ(m1))
435 r17 = memubh(r21 ++ #10:circ(m1))
437 r17 = memubh(r21 ++ I:circ(m1))
439 r17:16 = membh(r21 ++ #20:circ(m1))
441 r17:16 = membh(r21 ++ I:circ(m1))
443 r17:16 = memubh(r21 ++ #20:circ(m1))
445 r17:16 = memubh(r21 ++ I:circ(m1))
447 # CHECK-NEXT: 71 d7 35 9a
448 r17 = membh(r21 = ##31)
450 r17 = membh(r21++#10)
452 # CHECK-NEXT: 71 d7 75 9a
453 r17 = memubh(r21 = ##31)
455 r17 = memubh(r21++#10)
457 # CHECK-NEXT: 70 d7 b5 9a
458 r17:16 = memubh(r21 = ##31)
460 r17:16 = memubh(r21++#20)
462 # CHECK-NEXT: 70 d7 f5 9a
463 r17:16 = membh(r21 = ##31)
465 r17:16 = membh(r21++#20)
467 # CHECK-NEXT: f1 f7 35 9c
468 r17 = membh(r21<<#3 + ##31)
472 # CHECK-NEXT: f1 f7 75 9c
473 r17 = memubh(r21<<#3 + ##31)
475 r17 = memubh(r21++m1)
477 # CHECK-NEXT: f0 f7 f5 9c
478 r17:16 = membh(r21<<#3 + ##31)
480 r17:16 = membh(r21++m1)
482 # CHECK-NEXT: f0 f7 b5 9c
483 r17:16 = memubh(r21<<#3 + ##31)
487 r17 = memubh(r21++m1)
489 r17:16 = membh(r21++m1)
491 r17:16 = memubh(r21++m1)
493 r17 = membh(r21 ++ m1:brev)
495 r17 = memubh(r21 ++ m1:brev)
497 r17:16 = memubh(r21 ++ m1:brev)
499 r17:16 = membh(r21 ++ m1:brev)