1 # RUN: llvm-mc -triple hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s
2 # Hexagon Programmer's Reference Manual 11.5 LD
5 # CHECK-NEXT: 10 c5 c0 49
8 r17:16 = memd(r21 + #48)
10 r17:16 = memd(r21 ++ #40:circ(m1))
12 r17:16 = memd(r21 ++ I:circ(m1))
14 # CHECK-NEXT: 70 d7 d5 9b
15 r17:16 = memd(r21 = ##31)
17 r17:16 = memd(r21++#40)
19 r17:16 = memd(r21++m1)
21 r17:16 = memd(r21 ++ m1:brev)
23 # Load doubleword conditionally
25 if (p3) r17:16 = memd(r21+r31<<#3)
27 if (!p3) r17:16 = memd(r21+r31<<#3)
29 # CHECK-NEXT: f0 ff d5 32
31 if (p3.new) r17:16 = memd(r21+r31<<#3) }
33 # CHECK-NEXT: f0 ff d5 33
35 if (!p3.new) r17:16 = memd(r21+r31<<#3) }
37 if (p3) r17:16 = memd(r21 + #24)
39 # CHECK-NEXT: 70 d8 d5 43
41 if (p3.new) r17:16 = memd(r21 + #24) }
43 if (!p3) r17:16 = memd(r21 + #24)
45 # CHECK-NEXT: 70 d8 d5 47
47 if (!p3.new) r17:16 = memd(r21 + #24) }
49 if (p3) r17:16 = memd(r21++#40)
51 if (!p3) r17:16 = memd(r21++#40)
53 # CHECK-NEXT: b0 f6 d5 9b
55 if (p3.new) r17:16 = memd(r21++#40) }
57 # CHECK-NEXT: b0 fe d5 9b
59 if (!p3.new) r17:16 = memd(r21++#40) }
63 r17 = memb(r21 + r31<<#3)
67 # CHECK-NEXT: b1 c2 00 49
72 r17 = memb(r21 ++ #5:circ(m1))
74 r17 = memb(r21 ++ I:circ(m1))
76 # CHECK-NEXT: 71 d7 15 9b
77 r17 = memb(r21 = ##31)
83 r17 = memb(r21 ++ m1:brev)
85 # Load byte conditionally
87 if (p3) r17 = memb(r21+r31<<#3)
89 if (!p3) r17 = memb(r21+r31<<#3)
91 # CHECK-NEXT: f1 ff 15 32
93 if (p3.new) r17 = memb(r21+r31<<#3) }
95 # CHECK-NEXT: f1 ff 15 33
97 if (!p3.new) r17 = memb(r21+r31<<#3) }
99 if (p3) r17 = memb(r21 + #44)
101 # CHECK-NEXT: 91 dd 15 43
103 if (p3.new) r17 = memb(r21 + #44) }
105 if (!p3) r17 = memb(r21 + #44)
107 # CHECK-NEXT: 91 dd 15 47
109 if (!p3.new) r17 = memb(r21 + #44) }
111 if (p3) r17 = memb(r21++#5)
113 if (!p3) r17 = memb(r21++#5)
115 # CHECK-NEXT: b1 f6 15 9b
117 if (p3.new) r17 = memb(r21++#5) }
119 # CHECK-NEXT: b1 fe 15 9b
121 if (!p3.new) r17 = memb(r21++#5) }
123 # Load byte into shifted vector
125 r17:16 = memb_fifo(r21 + #31)
127 r17:16 = memb_fifo(r21 ++ #5:circ(m1))
129 r17:16 = memb_fifo(r21 ++ I:circ(m1))
131 # Load half into shifted vector
133 r17:16 = memh_fifo(r21 + #62)
135 r17:16 = memh_fifo(r21 ++ #10:circ(m1))
137 r17:16 = memh_fifo(r21 ++ I:circ(m1))
141 r17 = memh(r21 + r31<<#3)
145 # CHECK-NEXT: 51 c5 40 49
148 r17 = memh(r21 + #62)
150 r17 = memh(r21 ++ #10:circ(m1))
152 r17 = memh(r21 ++ I:circ(m1))
154 # CHECK-NEXT: 71 d7 55 9b
155 r17 = memh(r21 = ##31)
161 r17 = memh(r21 ++ m1:brev)
163 # Load halfword conditionally
165 if (p3) r17 = memh(r21+r31<<#3)
167 if (!p3) r17 = memh(r21+r31<<#3)
169 # CHECK-NEXT: f1 ff 55 32
171 if (p3.new) r17 = memh(r21+r31<<#3) }
173 # CHECK-NEXT: f1 ff 55 33
175 if (!p3.new) r17 = memh(r21+r31<<#3) }
177 if (p3) r17 = memh(r21++#10)
179 if (!p3) r17 = memh(r21++#10)
181 # CHECK-NEXT: b1 f6 55 9b
183 if (p3.new) r17 = memh(r21++#10) }
185 # CHECK-NEXT: b1 fe 55 9b
187 if (!p3.new) r17 = memh(r21++#10) }
189 if (p3) r17 = memh(r21 + #62)
191 if (!p3) r17 = memh(r21 + #62)
193 # CHECK-NEXT: f1 db 55 43
195 if (p3.new) r17 = memh(r21 + #62) }
197 # CHECK-NEXT: f1 db 55 47
199 if (!p3.new) r17 = memh(r21 + #62) }
203 r17 = memub(r21 + r31<<#3)
207 # CHECK-NEXT: b1 c2 20 49
210 r17 = memub(r21 + #31)
212 r17 = memub(r21 ++ #5:circ(m1))
214 r17 = memub(r21 ++ I:circ(m1))
216 # CHECK-NEXT: 71 d7 35 9b
217 r17 = memub(r21 = ##31)
223 r17 = memub(r21 ++ m1:brev)
225 # Load unsigned byte conditionally
227 if (p3) r17 = memub(r21+r31<<#3)
229 if (!p3) r17 = memub(r21+r31<<#3)
231 # CHECK-NEXT: f1 ff 35 32
233 if (p3.new) r17 = memub(r21+r31<<#3) }
235 # CHECK-NEXT: f1 ff 35 33
237 if (!p3.new) r17 = memub(r21+r31<<#3) }
239 if (p3) r17 = memub(r21 + #31)
241 # CHECK-NEXT: f1 db 35 43
243 if (p3.new) r17 = memub(r21 + #31) }
245 if (!p3) r17 = memub(r21 + #31)
247 # CHECK-NEXT: f1 db 35 47
249 if (!p3.new) r17 = memub(r21 + #31) }
251 if (p3) r17 = memub(r21++#5)
253 if (!p3) r17 = memub(r21++#5)
255 # CHECK-NEXT: b1 f6 35 9b
257 if (p3.new) r17 = memub(r21++#5) }
259 # CHECK-NEXT: b1 fe 35 9b
261 if (!p3.new) r17 = memub(r21++#5) }
263 # Load unsigned halfword
265 r17 = memuh(r21 + r31<<#3)
269 # CHECK-NEXT: 51 c5 60 49
272 r17 = memuh(r21 + #42)
274 r17 = memuh(r21 ++ #10:circ(m1))
276 r17 = memuh(r21 ++ I:circ(m1))
278 # CHECK-NEXT: 71 d7 75 9b
279 r17 = memuh(r21 = ##31)
281 r17 = memuh(r21++#10)
285 r17 = memuh(r21 ++ m1:brev)
287 # Load unsigned halfword conditionally
289 if (p3) r17 = memuh(r21+r31<<#3)
291 if (!p3) r17 = memuh(r21+r31<<#3)
293 # CHECK-NEXT: f1 ff 75 32
295 if (p3.new) r17 = memuh(r21+r31<<#3) }
297 # CHECK-NEXT: f1 ff 75 33
299 if (!p3.new) r17 = memuh(r21+r31<<#3) }
301 if (p3) r17 = memuh(r21 + #42)
303 if (!p3) r17 = memuh(r21 + #42)
305 # CHECK-NEXT: b1 da 75 43
307 if (p3.new) r17 = memuh(r21 + #42) }
309 # CHECK-NEXT: b1 da 75 47
311 if (!p3.new) r17 = memuh(r21 + #42) }
313 if (p3) r17 = memuh(r21++#10)
315 if (!p3) r17 = memuh(r21++#10)
317 # CHECK-NEXT: b1 f6 75 9b
319 if (p3.new) r17 = memuh(r21++#10) }
321 # CHECK-NEXT: b1 fe 75 9b
323 if (!p3.new) r17 = memuh(r21++#10) }
327 r17 = memw(r21 + r31<<#3)
331 # CHECK-NEXT: 91 c2 80 49
334 r17 = memw(r21 + #84)
336 r17 = memw(r21 ++ #20:circ(m1))
338 r17 = memw(r21 ++ I:circ(m1))
340 # CHECK-NEXT: 71 d7 95 9b
341 r17 = memw(r21 = ##31)
347 r17 = memw(r21 ++ m1:brev)
349 # Load word conditionally
351 if (p3) r17 = memw(r21+r31<<#3)
353 if (!p3) r17 = memw(r21+r31<<#3)
355 # CHECK-NEXT: f1 ff 95 32
357 if (p3.new) r17 = memw(r21+r31<<#3) }
359 # CHECK-NEXT: f1 ff 95 33
361 if (!p3.new) r17 = memw(r21+r31<<#3) }
363 if (p3) r17 = memw(r21 + #84)
365 if (!p3) r17 = memw(r21 + #84)
367 # CHECK-NEXT: b1 da 95 43
369 if (p3.new) r17 = memw(r21 + #84) }
371 # CHECK-NEXT: b1 da 95 47
373 if (!p3.new) r17 = memw(r21 + #84) }
375 if (p3) r17 = memw(r21++#20)
377 if (!p3) r17 = memw(r21++#20)
379 # CHECK-NEXT: b1 f6 95 9b
381 if (p3.new) r17 = memw(r21++#20) }
383 # CHECK-NEXT: b1 fe 95 9b
385 if (!p3.new) r17 = memw(r21++#20) }
387 # Deallocate stack frame
391 # Deallocate stack frame and return
395 # CHECK-NEXT: 1e cb 1e 96
397 if (p3.new) dealloc_return:nt }
399 if (p3) dealloc_return
401 # CHECK-NEXT: 1e db 1e 96
403 if (p3.new) dealloc_return:t }
405 # CHECK-NEXT: 1e eb 1e 96
407 if (!p3.new) dealloc_return:nt }
409 if (!p3) dealloc_return
411 # CHECK-NEXT: 1e fb 1e 96
413 if (!p3.new) dealloc_return:t }
415 # Load and unpack bytes to halfwords
417 r17 = membh(r21 + #62)
419 r17 = memubh(r21 + #62)
421 r17:16 = memubh(r21 + #124)
423 r17:16 = membh(r21 + #124)
425 r17 = membh(r21 ++ #10:circ(m1))
427 r17 = membh(r21 ++ I:circ(m1))
429 r17 = memubh(r21 ++ #10:circ(m1))
431 r17 = memubh(r21 ++ I:circ(m1))
433 r17:16 = membh(r21 ++ #20:circ(m1))
435 r17:16 = membh(r21 ++ I:circ(m1))
437 r17:16 = memubh(r21 ++ #20:circ(m1))
439 r17:16 = memubh(r21 ++ I:circ(m1))
441 # CHECK-NEXT: 71 d7 35 9a
442 r17 = membh(r21 = ##31)
444 r17 = membh(r21++#10)
446 # CHECK-NEXT: 71 d7 75 9a
447 r17 = memubh(r21 = ##31)
449 r17 = memubh(r21++#10)
451 # CHECK-NEXT: 70 d7 b5 9a
452 r17:16 = memubh(r21 = ##31)
454 r17:16 = memubh(r21++#20)
456 # CHECK-NEXT: 70 d7 f5 9a
457 r17:16 = membh(r21 = ##31)
459 r17:16 = membh(r21++#20)
461 # CHECK-NEXT: f1 f7 35 9c
462 r17 = membh(r21<<#3 + ##31)
466 # CHECK-NEXT: f1 f7 75 9c
467 r17 = memubh(r21<<#3 + ##31)
469 r17 = memubh(r21++m1)
471 # CHECK-NEXT: f0 f7 f5 9c
472 r17:16 = membh(r21<<#3 + ##31)
474 r17:16 = membh(r21++m1)
476 # CHECK-NEXT: f0 f7 b5 9c
477 r17:16 = memubh(r21<<#3 + ##31)
481 r17 = memubh(r21++m1)
483 r17:16 = membh(r21++m1)
485 r17:16 = memubh(r21++m1)
487 r17 = membh(r21 ++ m1:brev)
489 r17 = memubh(r21 ++ m1:brev)
491 r17:16 = memubh(r21 ++ m1:brev)
493 r17:16 = membh(r21 ++ m1:brev)