cbfa7799f83b29c92da7d918c1ab0c760389dd35
[oota-llvm.git] / test / MC / Hexagon / instructions / ld.s
1 # RUN: llvm-mc -triple hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s
2 # Hexagon Programmer's Reference Manual 11.5 LD
3 # XFAIL: *
4
5 # Load doubleword
6 # CHECK: 90 ff d5 3a
7 r17:16 = memd(r21 + r31<<#3)
8 # CHECK: b0 c2 c0 49
9 r17:16 = memd(#168)
10 # CHECK: 02 40 00 00
11 # CHECK-NEXT: 10 c5 c0 49
12 r17:16 = memd(##168)
13 # CHECK: d0 c0 d5 91
14 r17:16 = memd(r21 + #48)
15 # CHECK: b0 e0 d5 99
16 r17:16 = memd(r21 ++ #40:circ(m1))
17 # CHECK: 10 e2 d5 99
18 r17:16 = memd(r21 ++ I:circ(m1))
19 # CHECK: 00 40 00 00
20 # CHECK-NEXT: 70 d7 d5 9b
21 r17:16 = memd(r21 = ##31)
22 # CHECK: b0 c0 d5 9b
23 r17:16 = memd(r21++#40)
24 # CHECK: 10 e0 d5 9d
25 r17:16 = memd(r21++m1)
26 # CHECK: 10 e0 d5 9f
27 r17:16 = memd(r21 ++ m1:brev)
28
29 # Load doubleword conditionally
30 # CHECK: f0 ff d5 30
31 if (p3) r17:16 = memd(r21+r31<<#3)
32 # CHECK: f0 ff d5 31
33 if (!p3) r17:16 = memd(r21+r31<<#3)
34 # CHECK: 03 40 45 85
35 # CHECK-NEXT: f0 ff d5 32
36 { p3 = r5
37   if (p3.new) r17:16 = memd(r21+r31<<#3) }
38 # CHECK: 03 40 45 85
39 # CHECK-NEXT: f0 ff d5 33
40 { p3 = r5
41   if (!p3.new) r17:16 = memd(r21+r31<<#3) }
42 # CHECK: 70 d8 d5 41
43 if (p3) r17:16 = memd(r21 + #24)
44 # CHECK: 03 40 45 85
45 # CHECK-NEXT: 70 d8 d5 43
46 { p3 = r5
47   if (p3.new) r17:16 = memd(r21 + #24) }
48 # CHECK: 70 d8 d5 45
49 if (!p3) r17:16 = memd(r21 + #24)
50 # CHECK: 03 40 45 85
51 # CHECK-NEXT: 70 d8 d5 47
52 { p3 = r5
53   if (!p3.new) r17:16 = memd(r21 + #24) }
54 # CHECK: b0 e6 d5 9b
55 if (p3) r17:16 = memd(r21++#40)
56 # CHECK: b0 ee d5 9b
57 if (!p3) r17:16 = memd(r21++#40)
58 # CHECK: 03 40 45 85
59 # CHECK-NEXT: b0 f6 d5 9b
60 { p3 = r5
61   if (p3.new) r17:16 = memd(r21++#40) }
62 # CHECK: 03 40 45 85
63 # CHECK-NEXT: b0 fe d5 9b
64 { p3 = r5
65   if (!p3.new) r17:16 = memd(r21++#40) }
66
67 # Load byte
68 # CHECK: 91 ff 15 3a
69 r17 = memb(r21 + r31<<#3)
70 # CHECK: b1 c2 00 49
71 r17 = memb(#21)
72 # CHECK: 00 40 00 00
73 # CHECK-NEXT: b1 c2 00 49
74 r17 = memb(##21)
75 # CHECK: f1 c3 15 91
76 r17 = memb(r21 + #31)
77 # CHECK: b1 e0 15 99
78 r17 = memb(r21 ++ #5:circ(m1))
79 # CHECK: 11 e2 15 99
80 r17 = memb(r21 ++ I:circ(m1))
81 # CHECK: 00 40 00 00
82 # CHECK-NEXT: 71 d7 15 9b
83 r17 = memb(r21 = ##31)
84 # CHECK: b1 c0 15 9b
85 r17 = memb(r21++#5)
86 # CHECK: 11 e0 15 9d
87 r17 = memb(r21++m1)
88 # CHECK: 11 e0 15 9f
89 r17 = memb(r21 ++ m1:brev)
90
91 # Load byte conditionally
92 # CHECK: f1 ff 15 30
93 if (p3) r17 = memb(r21+r31<<#3)
94 # CHECK: f1 ff 15 31
95 if (!p3) r17 = memb(r21+r31<<#3)
96 # CHECK: 03 40 45 85
97 # CHECK-NEXT: f1 ff 15 32
98 { p3 = r5
99   if (p3.new) r17 = memb(r21+r31<<#3) }
100 # CHECK: 03 40 45 85
101 # CHECK-NEXT: f1 ff 15 33
102 { p3 = r5
103   if (!p3.new) r17 = memb(r21+r31<<#3) }
104 # CHECK: 91 dd 15 41
105 if (p3) r17 = memb(r21 + #44)
106 # CHECK: 03 40 45 85
107 # CHECK-NEXT: 91 dd 15 43
108 { p3 = r5
109   if (p3.new) r17 = memb(r21 + #44) }
110 # CHECK: 91 dd 15 45
111 if (!p3) r17 = memb(r21 + #44)
112 # CHECK: 03 40 45 85
113 # CHECK-NEXT: 91 dd 15 47
114 { p3 = r5
115   if (!p3.new) r17 = memb(r21 + #44) }
116 # CHECK: b1 e6 15 9b
117 if (p3) r17 = memb(r21++#5)
118 # CHECK: b1 ee 15 9b
119 if (!p3) r17 = memb(r21++#5)
120 # CHECK: 03 40 45 85
121 # CHECK-NEXT: b1 f6 15 9b
122 { p3 = r5
123   if (p3.new) r17 = memb(r21++#5) }
124 # CHECK: 03 40 45 85
125 # CHECK-NEXT: b1 fe 15 9b
126 { p3 = r5
127   if (!p3.new) r17 = memb(r21++#5) }
128
129 # Load byte into shifted vector
130 # CHECK: f0 c3 95 90
131 r17:16 = memb_fifo(r21 + #31)
132 # CHECK: b0 e0 95 98
133 r17:16 = memb_fifo(r21 ++ #5:circ(m1))
134 # CHECK: 10 e2 95 98
135 r17:16 = memb_fifo(r21 ++ I:circ(m1))
136
137 # Load half into shifted vector
138 # CHECK: f0 c3 55 90
139 r17:16 = memh_fifo(r21 + #62)
140 # CHECK: b0 e0 55 98
141 r17:16 = memh_fifo(r21 ++ #10:circ(m1))
142 # CHECK: 10 e2 55 98
143 r17:16 = memh_fifo(r21 ++ I:circ(m1))
144
145 # Load halfword
146 # CHECK: 91 ff 55 3a
147 r17 = memh(r21 + r31<<#3)
148 # CHECK: b1 c2 40 49
149 r17 = memh(#42)
150 # CHECK: 00 40 00 00
151 # CHECK-NEXT: 51 c5 40 49
152 r17 = memh(##42)
153 # CHECK: f1 c3 55 91
154 r17 = memh(r21 + #62)
155 # CHECK: b1 e0 55 99
156 r17 = memh(r21 ++ #10:circ(m1))
157 # CHECK: 11 e2 55 99
158 r17 = memh(r21 ++ I:circ(m1))
159 # CHECK: 00 40 00 00
160 # CHECK-NEXT: 71 d7 55 9b
161 r17 = memh(r21 = ##31)
162 # CHECK: b1 c0 55 9b
163 r17 = memh(r21++#10)
164 # CHECK: 11 e0 55 9d
165 r17 = memh(r21++m1)
166 # CHECK: 11 e0 55 9f
167 r17 = memh(r21 ++ m1:brev)
168
169 # Load halfword conditionally
170 # CHECK: f1 ff 55 30
171 if (p3) r17 = memh(r21+r31<<#3)
172 # CHECK: f1 ff 55 31
173 if (!p3) r17 = memh(r21+r31<<#3)
174 # CHECK: 03 40 45 85
175 # CHECK-NEXT: f1 ff 55 32
176 { p3 = r5
177   if (p3.new) r17 = memh(r21+r31<<#3) }
178 # CHECK: 03 40 45 85
179 # CHECK-NEXT: f1 ff 55 33
180 { p3 = r5
181   if (!p3.new) r17 = memh(r21+r31<<#3) }
182 # CHECK: b1 e6 55 9b
183 if (p3) r17 = memh(r21++#10)
184 # CHECK: b1 ee 55 9b
185 if (!p3) r17 = memh(r21++#10)
186 # CHECK: 03 40 45 85
187 # CHECK-NEXT: b1 f6 55 9b
188 { p3 = r5
189   if (p3.new) r17 = memh(r21++#10) }
190 # CHECK: 03 40 45 85
191 # CHECK-NEXT: b1 fe 55 9b
192 { p3 = r5
193   if (!p3.new) r17 = memh(r21++#10) }
194 # CHECK: f1 db 55 41
195 if (p3) r17 = memh(r21 + #62)
196 # CHECK: f1 db 55 45
197 if (!p3) r17 = memh(r21 + #62)
198 # CHECK: 03 40 45 85
199 # CHECK-NEXT: f1 db 55 43
200 { p3 = r5
201   if (p3.new) r17 = memh(r21 + #62) }
202 # CHECK: 03 40 45 85
203 # CHECK-NEXT: f1 db 55 47
204 { p3 = r5
205   if (!p3.new) r17 = memh(r21 + #62) }
206
207 # Load unsigned byte
208 # CHECK: 91 ff 35 3a
209 r17 = memub(r21 + r31<<#3)
210 # CHECK: b1 c2 20 49
211 r17 = memub(#21)
212 # CHECK: 00 40 00 00
213 # CHECK-NEXT: b1 c2 20 49
214 r17 = memub(##21)
215 # CHECK: f1 c3 35 91
216 r17 = memub(r21 + #31)
217 # CHECK: b1 e0 35 99
218 r17 = memub(r21 ++ #5:circ(m1))
219 # CHECK: 11 e2 35 99
220 r17 = memub(r21 ++ I:circ(m1))
221 # CHECK: 00 40 00 00
222 # CHECK-NEXT: 71 d7 35 9b
223 r17 = memub(r21 = ##31)
224 # CHECK: b1 c0 35 9b
225 r17 = memub(r21++#5)
226 # CHECK: 11 e0 35 9d
227 r17 = memub(r21++m1)
228 # CHECK: 11 e0 35 9f
229 r17 = memub(r21 ++ m1:brev)
230
231 # Load unsigned byte conditionally
232 # CHECK: f1 ff 35 30
233 if (p3) r17 = memub(r21+r31<<#3)
234 # CHECK: f1 ff 35 31
235 if (!p3) r17 = memub(r21+r31<<#3)
236 # CHECK: 03 40 45 85
237 # CHECK-NEXT: f1 ff 35 32
238 { p3 = r5
239   if (p3.new) r17 = memub(r21+r31<<#3) }
240 # CHECK: 03 40 45 85
241 # CHECK-NEXT: f1 ff 35 33
242 { p3 = r5
243   if (!p3.new) r17 = memub(r21+r31<<#3) }
244 # CHECK: f1 db 35 41
245 if (p3) r17 = memub(r21 + #31)
246 # CHECK: 03 40 45 85
247 # CHECK-NEXT: f1 db 35 43
248 { p3 = r5
249   if (p3.new) r17 = memub(r21 + #31) }
250 # CHECK: f1 db 35 45
251 if (!p3) r17 = memub(r21 + #31)
252 # CHECK: 03 40 45 85
253 # CHECK-NEXT: f1 db 35 47
254 { p3 = r5
255   if (!p3.new) r17 = memub(r21 + #31) }
256 # CHECK: b1 e6 35 9b
257 if (p3) r17 = memub(r21++#5)
258 # CHECK: b1 ee 35 9b
259 if (!p3) r17 = memub(r21++#5)
260 # CHECK: 03 40 45 85
261 # CHECK-NEXT: b1 f6 35 9b
262 { p3 = r5
263   if (p3.new) r17 = memub(r21++#5) }
264 # CHECK: 03 40 45 85
265 # CHECK-NEXT: b1 fe 35 9b
266 { p3 = r5
267   if (!p3.new) r17 = memub(r21++#5) }
268
269 # Load unsigned halfword
270 # CHECK: 91 ff 75 3a
271 r17 = memuh(r21 + r31<<#3)
272 # CHECK: b1 c2 60 49
273 r17 = memuh(#42)
274 # CHECK: 00 40 00 00
275 # CHECK-NEXT: 51 c5 60 49
276 r17 = memuh(##42)
277 # CHECK: b1 c2 75 91
278 r17 = memuh(r21 + #42)
279 # CHECK: b1 e0 75 99
280 r17 = memuh(r21 ++ #10:circ(m1))
281 # CHECK: 11 e2 75 99
282 r17 = memuh(r21 ++ I:circ(m1))
283 # CHECK: 00 40 00 00
284 # CHECK-NEXT: 71 d7 75 9b
285 r17 = memuh(r21 = ##31)
286 # CHECK: b1 c0 75 9b
287 r17 = memuh(r21++#10)
288 # CHECK: 11 e0 75 9d
289 r17 = memuh(r21++m1)
290 # CHECK: 11 e0 75 9f
291 r17 = memuh(r21 ++ m1:brev)
292
293 # Load unsigned halfword conditionally
294 # CHECK: f1 ff 75 30
295 if (p3) r17 = memuh(r21+r31<<#3)
296 # CHECK: f1 ff 75 31
297 if (!p3) r17 = memuh(r21+r31<<#3)
298 # CHECK: 03 40 45 85
299 # CHECK-NEXT: f1 ff 75 32
300 { p3 = r5
301   if (p3.new) r17 = memuh(r21+r31<<#3) }
302 # CHECK: 03 40 45 85
303 # CHECK-NEXT: f1 ff 75 33
304 { p3 = r5
305   if (!p3.new) r17 = memuh(r21+r31<<#3) }
306 # CHECK: b1 da 75 41
307 if (p3) r17 = memuh(r21 + #42)
308 # CHECK: b1 da 75 45
309 if (!p3) r17 = memuh(r21 + #42)
310 # CHECK: 03 40 45 85
311 # CHECK-NEXT: b1 da 75 43
312 { p3 = r5
313   if (p3.new) r17 = memuh(r21 + #42) }
314 # CHECK: 03 40 45 85
315 # CHECK-NEXT: b1 da 75 47
316 { p3 = r5
317   if (!p3.new) r17 = memuh(r21 + #42) }
318 # CHECK: b1 e6 75 9b
319 if (p3) r17 = memuh(r21++#10)
320 # CHECK: b1 ee 75 9b
321 if (!p3) r17 = memuh(r21++#10)
322 # CHECK: 03 40 45 85
323 # CHECK-NEXT: b1 f6 75 9b
324 { p3 = r5
325   if (p3.new) r17 = memuh(r21++#10) }
326 # CHECK: 03 40 45 85
327 # CHECK-NEXT: b1 fe 75 9b
328 { p3 = r5
329   if (!p3.new) r17 = memuh(r21++#10) }
330
331 # Load word
332 # CHECK: 91 ff 95 3a
333 r17 = memw(r21 + r31<<#3)
334 # CHECK: b1 c2 80 49
335 r17 = memw(#84)
336 # CHECK: 01 40 00 00
337 # CHECK-NEXT: 91 c2 80 49
338 r17 = memw(##84)
339 # CHECK: b1 c2 95 91
340 r17 = memw(r21 + #84)
341 # CHECK: b1 e0 95 99
342 r17 = memw(r21 ++ #20:circ(m1))
343 # CHECK: 11 e2 95 99
344 r17 = memw(r21 ++ I:circ(m1))
345 # CHECK: 00 40 00 00
346 # CHECK-NEXT: 71 d7 95 9b
347 r17 = memw(r21 = ##31)
348 # CHECK: b1 c0 95 9b
349 r17 = memw(r21++#20)
350 # CHECK: 11 e0 95 9d
351 r17 = memw(r21++m1)
352 # CHECK: 11 e0 95 9f
353 r17 = memw(r21 ++ m1:brev)
354
355 # Load word conditionally
356 # CHECK: f1 ff 95 30
357 if (p3) r17 = memw(r21+r31<<#3)
358 # CHECK: f1 ff 95 31
359 if (!p3) r17 = memw(r21+r31<<#3)
360 # CHECK: 03 40 45 85
361 # CHECK-NEXT: f1 ff 95 32
362 { p3 = r5
363   if (p3.new) r17 = memw(r21+r31<<#3) }
364 # CHECK: 03 40 45 85
365 # CHECK-NEXT: f1 ff 95 33
366 { p3 = r5
367   if (!p3.new) r17 = memw(r21+r31<<#3) }
368 # CHECK: b1 da 95 41
369 if (p3) r17 = memw(r21 + #84)
370 # CHECK: b1 da 95 45
371 if (!p3) r17 = memw(r21 + #84)
372 # CHECK: 03 40 45 85
373 # CHECK-NEXT: b1 da 95 43
374 { p3 = r5
375   if (p3.new) r17 = memw(r21 + #84) }
376 # CHECK: 03 40 45 85
377 # CHECK-NEXT: b1 da 95 47
378 { p3 = r5
379   if (!p3.new) r17 = memw(r21 + #84) }
380 # CHECK: b1 e6 95 9b
381 if (p3) r17 = memw(r21++#20)
382 # CHECK: b1 ee 95 9b
383 if (!p3) r17 = memw(r21++#20)
384 # CHECK: 03 40 45 85
385 # CHECK-NEXT: b1 f6 95 9b
386 { p3 = r5
387   if (p3.new) r17 = memw(r21++#20) }
388 # CHECK: 03 40 45 85
389 # CHECK-NEXT: b1 fe 95 9b
390 { p3 = r5
391   if (!p3.new) r17 = memw(r21++#20) }
392
393 # Deallocate stack frame
394 # CHECK: 1e c0 1e 90
395 deallocframe
396
397 # Deallocate stack frame and return
398 # CHECK: 1e c0 1e 96
399 dealloc_return
400 # CHECK: 03 40 45 85
401 # CHECK-NEXT: 1e cb 1e 96
402 { p3 = r5
403   if (p3.new) dealloc_return:nt }
404 # CHECK: 1e d3 1e 96
405 if (p3) dealloc_return
406 # CHECK: 03 40 45 85
407 # CHECK-NEXT: 1e db 1e 96
408 { p3 = r5
409   if (p3.new) dealloc_return:t }
410 # CHECK: 03 40 45 85
411 # CHECK-NEXT: 1e eb 1e 96
412 { p3 = r5
413   if (!p3.new) dealloc_return:nt }
414 # CHECK: 1e f3 1e 96
415 if (!p3) dealloc_return
416 # CHECK: 03 40 45 85
417 # CHECK-NEXT: 1e fb 1e 96
418 { p3 = r5
419   if (!p3.new) dealloc_return:t }
420
421 # Load and unpack bytes to halfwords
422 # CHECK: f1 c3 35 90
423 r17 = membh(r21 + #62)
424 # CHECK: f1 c3 75 90
425 r17 = memubh(r21 + #62)
426 # CHECK: f0 c3 b5 90
427 r17:16 = memubh(r21 + #124)
428 # CHECK: f0 c3 f5 90
429 r17:16 = membh(r21 + #124)
430 # CHECK: b1 e0 35 98
431 r17 = membh(r21 ++ #10:circ(m1))
432 # CHECK: 11 e2 35 98
433 r17 = membh(r21 ++ I:circ(m1))
434 # CHECK: b1 e0 75 98
435 r17 = memubh(r21 ++ #10:circ(m1))
436 # CHECK: 11 e2 75 98
437 r17 = memubh(r21 ++ I:circ(m1))
438 # CHECK: b0 e0 f5 98
439 r17:16 = membh(r21 ++ #20:circ(m1))
440 # CHECK: 10 e2 f5 98
441 r17:16 = membh(r21 ++ I:circ(m1))
442 # CHECK: b0 e0 b5 98
443 r17:16 = memubh(r21 ++ #20:circ(m1))
444 # CHECK: 10 e2 b5 98
445 r17:16 = memubh(r21 ++ I:circ(m1))
446 # CHECK: 00 40 00 00
447 # CHECK-NEXT: 71 d7 35 9a
448 r17 = membh(r21 = ##31)
449 # CHECK: b1 c0 35 9a
450 r17 = membh(r21++#10)
451 # CHECK: 00 40 00 00
452 # CHECK-NEXT: 71 d7 75 9a
453 r17 = memubh(r21 = ##31)
454 # CHECK: b1 c0 75 9a
455 r17 = memubh(r21++#10)
456 # CHECK: 00 40 00 00
457 # CHECK-NEXT: 70 d7 b5 9a
458 r17:16 = memubh(r21 = ##31)
459 # CHECK: b0 c0 b5 9a
460 r17:16 = memubh(r21++#20)
461 # CHECK: 00 40 00 00
462 # CHECK-NEXT: 70 d7 f5 9a
463 r17:16 = membh(r21 = ##31)
464 # CHECK: b0 c0 f5 9a
465 r17:16 = membh(r21++#20)
466 # CHECK: 00 40 00 00
467 # CHECK-NEXT: f1 f7 35 9c
468 r17 = membh(r21<<#3 + ##31)
469 # CHECK: 11 e0 35 9c
470 r17 = membh(r21++m1)
471 # CHECK: 00 40 00 00
472 # CHECK-NEXT: f1 f7 75 9c
473 r17 = memubh(r21<<#3 + ##31)
474 # CHECK: 11 e0 75 9c
475 r17 = memubh(r21++m1)
476 # CHECK: 00 40 00 00
477 # CHECK-NEXT: f0 f7 f5 9c
478 r17:16 = membh(r21<<#3 + ##31)
479 # CHECK: 10 e0 f5 9c
480 r17:16 = membh(r21++m1)
481 # CHECK: 00 40 00 00
482 # CHECK-NEXT: f0 f7 b5 9c
483 r17:16 = memubh(r21<<#3 + ##31)
484 # CHECK: 11 e0 35 9c
485 r17 = membh(r21++m1)
486 # CHECK: 11 e0 75 9c
487 r17 = memubh(r21++m1)
488 # CHECK: 10 e0 f5 9c
489 r17:16 = membh(r21++m1)
490 # CHECK: 10 e0 b5 9c
491 r17:16 = memubh(r21++m1)
492 # CHECK: 11 e0 35 9e
493 r17 = membh(r21 ++ m1:brev)
494 # CHECK: 11 e0 75 9e
495 r17 = memubh(r21 ++ m1:brev)
496 # CHECK: 10 e0 b5 9e
497 r17:16 = memubh(r21 ++ m1:brev)
498 # CHECK: 10 e0 f5 9e
499 r17:16 = membh(r21 ++ m1:brev)