blob: 394e6f00600bf8d259f5d1de28ccf95350e16630 [file] [log] [blame]
Sid Manning95b0c2e2018-06-13 18:45:251# REQUIRES: hexagon
Fangrui Song4816e512019-09-17 02:45:382# RUN: llvm-mc -filetype=obj -triple=hexagon-unknown-elf %s -o %t.o
3# RUN: llvm-mc -filetype=obj -triple=hexagon-unknown-elf %S/Inputs/hexagon.s -o %t1.o
4# RUN: ld.lld %t.o %t1.o -o %t
5# RUN: llvm-objdump -d %t | FileCheck %s
Sid Manning95b0c2e2018-06-13 18:45:256
Fangrui Song4816e512019-09-17 02:45:387# Note: 131648 == 0x20240
Sid Manningbff67192018-07-29 11:59:388# R_HEX_32_6_X
9# R_HEX_12_X
10if (p0) r0 = ##_start
Fangrui Song4816e512019-09-17 02:45:3811# CHECK: immext(#131648)
12# CHECK: if (p0) r0 = ##131648
Sid Manningbff67192018-07-29 11:59:3813
Sid Manning690b5442018-07-19 20:27:4314# R_HEX_B15_PCREL
15if (p0) jump:nt #_start
Fangrui Song4816e512019-09-17 02:45:3816# CHECK: if (p0) jump:nt 0x20240
Sid Manning690b5442018-07-19 20:27:4317
Sid Manning32417242018-07-24 15:08:1318# R_HEX_B32_PCREL_X
19# R_HEX_B15_PCREL_X
20if (p0) jump:nt ##_start
Fangrui Song4816e512019-09-17 02:45:3821# CHECK: if (p0) jump:nt 0x20240
Sid Manning32417242018-07-24 15:08:1322
Sid Manning95b0c2e2018-06-13 18:45:2523# R_HEX_B22_PCREL
24call #_start
Fangrui Song4816e512019-09-17 02:45:3825# CHECK: call 0x20240
Sid Manningbdd71f32018-07-19 19:10:5626
27# R_HEX_B32_PCREL_X
28# R_HEX_B22_PCREL_X
29call ##_start
Fangrui Song4816e512019-09-17 02:45:3830# CHECK: immext(#320)
31# CHECK: call 0x20240
Sid Manning17858202018-08-09 12:00:1032
33# R_HEX_6_X tests:
34# One test for each mask in the lookup table.
35
36#0x38000000
37if (!P0) memw(r0+#8)=##_start
Fangrui Song4816e512019-09-17 02:45:3838# CHECK: 38c0c100 if (!p0) memw(r0+#8) = ##131648 }
Sid Manning17858202018-08-09 12:00:1039
40#0x39000000
41{ p0 = p1
42 if (!P0.new) memw(r0+#0)=##_start }
Fangrui Song4816e512019-09-17 02:45:3843# CHECK: 39c0c000 if (!p0.new) memw(r0+#0) = ##131648 }
Sid Manning17858202018-08-09 12:00:1044
45#0x3e000000
46memw(r0+##_start)+=r1
Fangrui Song4816e512019-09-17 02:45:3847# CHECK: 3e40c001 memw(r0+##131648) += r1 }
Sid Manning17858202018-08-09 12:00:1048
49#0x3f000000
50memw(r0+##_start)+=#4
Fangrui Song4816e512019-09-17 02:45:3851# CHECK: 3f40c004 memw(r0+##131648) += #4 }
Sid Manning17858202018-08-09 12:00:1052
53#0x40000000
54{ r0 = r1
55 if (p0) memb(r0+##_start)=r0.new }
Fangrui Song4816e512019-09-17 02:45:3856# CHECK: 40a0c200 if (p0) memb(r0+##131648) = r0.new }
Sid Manning17858202018-08-09 12:00:1057
58#0x41000000
59if (p0) r0=memb(r1+##_start)
Fangrui Song4816e512019-09-17 02:45:3860# CHECK: 4101c000 if (p0) r0 = memb(r1+##131648) }
Sid Manning17858202018-08-09 12:00:1061
62#0x42000000
63{ r0 = r1
64 p0 = p1
65 if (p0.new) memb(r0+##_start)=r0.new }
Fangrui Song4816e512019-09-17 02:45:3866# CHECK: 42a0c200 if (p0.new) memb(r0+##131648) = r0.new }
Sid Manning17858202018-08-09 12:00:1067
68#0x43000000
69{ p0 = p1
70 if (P0.new) r0=memb(r0+##_start) }
Fangrui Song4816e512019-09-17 02:45:3871# CHECK: 4300c000 if (p0.new) r0 = memb(r0+##131648) }
Sid Manning17858202018-08-09 12:00:1072
73#0x44000000
74if (!p0) memb(r0+##_start)=r1
Fangrui Song4816e512019-09-17 02:45:3875# CHECK: 4400c100 if (!p0) memb(r0+##131648) = r1 }
Sid Manning17858202018-08-09 12:00:1076
77#0x45000000
78if (!p0) r0=memb(r1+##_start)
Fangrui Song4816e512019-09-17 02:45:3879# CHECK: 4501c000 if (!p0) r0 = memb(r1+##131648) }
Sid Manning17858202018-08-09 12:00:1080
81#0x46000000
82{ p0 = p1
83 if (!p0.new) memb(r0+##_start)=r1 }
Fangrui Song4816e512019-09-17 02:45:3884# CHECK: 4600c100 if (!p0.new) memb(r0+##131648) = r1 }
Sid Manning17858202018-08-09 12:00:1085
86#0x47000000
87{ p0 = p1
88 if (!p0.new) r0=memb(r1+##_start) }
Fangrui Song4816e512019-09-17 02:45:3889# CHECK: 4701c000 if (!p0.new) r0 = memb(r1+##131648) }
Sid Manning17858202018-08-09 12:00:1090
91#0x6a000000 -- Note 4294967132 == -0xa4 the distance between
92# here and _start, so this will change if
93# tests are added between here and _start
94r0=add(pc,##_start@pcrel)
Fangrui Song4816e512019-09-17 02:45:3895# CHECK: 6a49d800 r0 = add(pc,##240) }
Sid Manning17858202018-08-09 12:00:1096
97#0x7c000000
98r1:0=combine(#8,##_start)
Fangrui Song4816e512019-09-17 02:45:3899# CHECK: 7c80c100 r1:0 = combine(#8,##131648) }
Sid Manning17858202018-08-09 12:00:10100
101#0x9a000000
102r1:0=memb_fifo(r2=##_start)
Fangrui Song4816e512019-09-17 02:45:38103# CHECK: 9a82d000 r1:0 = memb_fifo(r2=##131648) }
Sid Manning17858202018-08-09 12:00:10104
105#0x9b000000
106r0=memb(r1=##_start)
Fangrui Song4816e512019-09-17 02:45:38107# CHECK: 9b01d000 r0 = memb(r1=##131648) }
Sid Manning17858202018-08-09 12:00:10108
109#0x9c000000
110r1:0=memb_fifo(r2<<#2+##_start)
Fangrui Song4816e512019-09-17 02:45:38111# CHECK: 9c82f000 r1:0 = memb_fifo(r2<<#2+##131648) }
Sid Manning17858202018-08-09 12:00:10112
113#0x9d000000
114r0=memb(r1<<#2+##_start)
Fangrui Song4816e512019-09-17 02:45:38115# CHECK: 9d01f000 r0 = memb(r1<<#2+##131648) }
Sid Manning17858202018-08-09 12:00:10116
117#0x9f000000
118if (!p0) r0=memb(##_start)
Fangrui Song4816e512019-09-17 02:45:38119# CHECK: 9f00e880 if (!p0) r0 = memb(##131648) }
Sid Manning17858202018-08-09 12:00:10120
121#0xab000000
122memb(r0=##_start)=r1
Fangrui Song4816e512019-09-17 02:45:38123# CHECK: ab00c180 memb(r0=##131648) = r1 }
Sid Manning17858202018-08-09 12:00:10124
125#0xad000000
126memb(r0<<#2+##_start)=r1
Fangrui Song4816e512019-09-17 02:45:38127# CHECK: ad00e180 memb(r0<<#2+##131648) = r1 }
Sid Manning17858202018-08-09 12:00:10128
129#0xaf000000
130if (!p0) memb(##_start)=r1
Fangrui Song4816e512019-09-17 02:45:38131# CHECK: af00c184 if (!p0) memb(##131648) = r1 }
Sid Manning17858202018-08-09 12:00:10132
133#0xd7000000
134r0=add(##_start,mpyi(r1,r2))
Fangrui Song4816e512019-09-17 02:45:38135# CHECK: d701c200 r0 = add(##131648,mpyi(r1,r2)) }
Sid Manning17858202018-08-09 12:00:10136
137#0xd8000000
138R0=add(##_start,mpyi(r0,#2))
Fangrui Song4816e512019-09-17 02:45:38139# CHECK: d800c002 r0 = add(##131648,mpyi(r0,#2)) }
Sid Manning17858202018-08-09 12:00:10140
141#0xdb000000
142r0=add(r1,add(r2,##_start))
Fangrui Song4816e512019-09-17 02:45:38143# CHECK: db01c002 r0 = add(r1,add(r2,##131648)) }
Sid Manning17858202018-08-09 12:00:10144
145#0xdf000000
146r0=add(r1,mpyi(r2,##_start))
Fangrui Song4816e512019-09-17 02:45:38147# CHECK: df82c001 r0 = add(r1,mpyi(r2,##131648)) }
Sid Manning17858202018-08-09 12:00:10148
149# Duplex form of R_HEX_6_X
150# R_HEX_32_6_X
151# R_HEX_6_X
152{ r0 = ##_start; r2 = r16 }
Fangrui Song4816e512019-09-17 02:45:38153# CHECK: 28003082 r0 = ##131648; r2 = r16 }
Sid Manningc53078a2018-08-09 20:04:53154
155# R_HEX_HI16
156r0.h = #HI(_start)
Sid Manning6d0e4fc2018-09-20 16:32:19157# CHECK: r0.h = #2
Sid Manningc53078a2018-08-09 20:04:53158
159# R_HEX_LO16
160r0.l = #LO(_start)
Fangrui Song4816e512019-09-17 02:45:38161# CHECK: r0.l = #576
Sid Manning07e541a2018-08-10 21:48:40162
163# R_HEX_8_X has 3 relocation mask variations
164#0xde000000
Sid Manning2e20df32018-08-10 23:46:11165r0=sub(##_start, asl(r0, #1))
Fangrui Song4816e512019-09-17 02:45:38166# CHECK: de40c106 r0 = sub(##131648,asl(r0,#1)) }
Sid Manning07e541a2018-08-10 21:48:40167
168#0x3c000000
169memw(r0+#0) = ##_start
Fangrui Song4816e512019-09-17 02:45:38170# CHECK: 3c40c040 memw(r0+#0) = ##131648 }
Sid Manning07e541a2018-08-10 21:48:40171
172# The rest:
173r1:0=combine(r2,##_start);
Fangrui Song4816e512019-09-17 02:45:38174# CHECK: 7302e800 r1:0 = combine(r2,##131648) }
Sid Manning5b0141c2018-08-14 13:52:38175
176# R_HEX_32:
177r_hex_32:
178.word _start
Fangrui Song4816e512019-09-17 02:45:38179# CHECK: 00020240
Sid Manning564e65a2018-08-22 15:25:15180
181# R_HEX_16_X has 4 relocation mask variations
182# 0x48000000
183memw(##_start) = r0
Fangrui Song4816e512019-09-17 02:45:38184# CHECK: 4880c000 memw(##131648) = r0 }
Sid Manning564e65a2018-08-22 15:25:15185
186# 0x49000000
187r0 = memw(##_start)
Fangrui Song4816e512019-09-17 02:45:38188# CHECK: 4980c000 r0 = memw(##131648)
Sid Manning564e65a2018-08-22 15:25:15189
190# 0x78000000
191r0 = ##_start
Fangrui Song4816e512019-09-17 02:45:38192# CHECK: 7800c000 r0 = ##131648 }
Sid Manning564e65a2018-08-22 15:25:15193
194# 0xb0000000
195r0 = add(r1, ##_start)
Fangrui Song4816e512019-09-17 02:45:38196# CHECK: b001c000 r0 = add(r1,##131648) }
Sid Manning6d0415e2018-08-25 21:25:35197
198# R_HEX_B9_PCREL:
199{r0=#1 ; jump #_start}
Fangrui Song4816e512019-09-17 02:45:38200# CHECK: jump 0x20240
Sid Manning6d0415e2018-08-25 21:25:35201
202# R_HEX_B9_PCREL_X:
203{r0=#1 ; jump ##_start}
Fangrui Song4816e512019-09-17 02:45:38204# CHECK: jump 0x20240
Sid Manning2c3d4b32018-08-25 23:16:37205
206# R_HEX_B13_PCREL
207if (r0 == #0) jump:t #_start
Fangrui Song4816e512019-09-17 02:45:38208# CHECK: if (r0==#0) jump:t 0x20240
Sid Manning569a56d2018-08-27 12:55:28209
210# R_HEX_9_X
211p0 = !cmp.gtu(r0, ##_start)
Fangrui Song4816e512019-09-17 02:45:38212# CHECK: p0 = !cmp.gtu(r0,##131648)
Sid Manning569a56d2018-08-27 12:55:28213
214# R_HEX_10_X
215p0 = !cmp.gt(r0, ##_start)
Fangrui Song4816e512019-09-17 02:45:38216# CHECK: p0 = !cmp.gt(r0,##131648)
Sid Manning569a56d2018-08-27 12:55:28217
218# R_HEX_11_X
219r0 = memw(r1+##_start)
Fangrui Song4816e512019-09-17 02:45:38220# CHECK: r0 = memw(r1+##131648)
Sid Manning569a56d2018-08-27 12:55:28221
222memw(r0+##_start) = r1
Fangrui Song4816e512019-09-17 02:45:38223# CHECK: memw(r0+##131648) = r1