Sid Manning | 95b0c2e | 2018-06-13 18:45:25 | [diff] [blame] | 1 | # REQUIRES: hexagon |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 2 | # 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 Manning | 95b0c2e | 2018-06-13 18:45:25 | [diff] [blame] | 6 | |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 7 | # Note: 131648 == 0x20240 |
Sid Manning | bff6719 | 2018-07-29 11:59:38 | [diff] [blame] | 8 | # R_HEX_32_6_X |
| 9 | # R_HEX_12_X |
| 10 | if (p0) r0 = ##_start |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 11 | # CHECK: immext(#131648) |
| 12 | # CHECK: if (p0) r0 = ##131648 |
Sid Manning | bff6719 | 2018-07-29 11:59:38 | [diff] [blame] | 13 | |
Sid Manning | 690b544 | 2018-07-19 20:27:43 | [diff] [blame] | 14 | # R_HEX_B15_PCREL |
| 15 | if (p0) jump:nt #_start |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 16 | # CHECK: if (p0) jump:nt 0x20240 |
Sid Manning | 690b544 | 2018-07-19 20:27:43 | [diff] [blame] | 17 | |
Sid Manning | 3241724 | 2018-07-24 15:08:13 | [diff] [blame] | 18 | # R_HEX_B32_PCREL_X |
| 19 | # R_HEX_B15_PCREL_X |
| 20 | if (p0) jump:nt ##_start |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 21 | # CHECK: if (p0) jump:nt 0x20240 |
Sid Manning | 3241724 | 2018-07-24 15:08:13 | [diff] [blame] | 22 | |
Sid Manning | 95b0c2e | 2018-06-13 18:45:25 | [diff] [blame] | 23 | # R_HEX_B22_PCREL |
| 24 | call #_start |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 25 | # CHECK: call 0x20240 |
Sid Manning | bdd71f3 | 2018-07-19 19:10:56 | [diff] [blame] | 26 | |
| 27 | # R_HEX_B32_PCREL_X |
| 28 | # R_HEX_B22_PCREL_X |
| 29 | call ##_start |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 30 | # CHECK: immext(#320) |
| 31 | # CHECK: call 0x20240 |
Sid Manning | 1785820 | 2018-08-09 12:00:10 | [diff] [blame] | 32 | |
| 33 | # R_HEX_6_X tests: |
| 34 | # One test for each mask in the lookup table. |
| 35 | |
| 36 | #0x38000000 |
| 37 | if (!P0) memw(r0+#8)=##_start |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 38 | # CHECK: 38c0c100 if (!p0) memw(r0+#8) = ##131648 } |
Sid Manning | 1785820 | 2018-08-09 12:00:10 | [diff] [blame] | 39 | |
| 40 | #0x39000000 |
| 41 | { p0 = p1 |
| 42 | if (!P0.new) memw(r0+#0)=##_start } |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 43 | # CHECK: 39c0c000 if (!p0.new) memw(r0+#0) = ##131648 } |
Sid Manning | 1785820 | 2018-08-09 12:00:10 | [diff] [blame] | 44 | |
| 45 | #0x3e000000 |
| 46 | memw(r0+##_start)+=r1 |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 47 | # CHECK: 3e40c001 memw(r0+##131648) += r1 } |
Sid Manning | 1785820 | 2018-08-09 12:00:10 | [diff] [blame] | 48 | |
| 49 | #0x3f000000 |
| 50 | memw(r0+##_start)+=#4 |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 51 | # CHECK: 3f40c004 memw(r0+##131648) += #4 } |
Sid Manning | 1785820 | 2018-08-09 12:00:10 | [diff] [blame] | 52 | |
| 53 | #0x40000000 |
| 54 | { r0 = r1 |
| 55 | if (p0) memb(r0+##_start)=r0.new } |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 56 | # CHECK: 40a0c200 if (p0) memb(r0+##131648) = r0.new } |
Sid Manning | 1785820 | 2018-08-09 12:00:10 | [diff] [blame] | 57 | |
| 58 | #0x41000000 |
| 59 | if (p0) r0=memb(r1+##_start) |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 60 | # CHECK: 4101c000 if (p0) r0 = memb(r1+##131648) } |
Sid Manning | 1785820 | 2018-08-09 12:00:10 | [diff] [blame] | 61 | |
| 62 | #0x42000000 |
| 63 | { r0 = r1 |
| 64 | p0 = p1 |
| 65 | if (p0.new) memb(r0+##_start)=r0.new } |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 66 | # CHECK: 42a0c200 if (p0.new) memb(r0+##131648) = r0.new } |
Sid Manning | 1785820 | 2018-08-09 12:00:10 | [diff] [blame] | 67 | |
| 68 | #0x43000000 |
| 69 | { p0 = p1 |
| 70 | if (P0.new) r0=memb(r0+##_start) } |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 71 | # CHECK: 4300c000 if (p0.new) r0 = memb(r0+##131648) } |
Sid Manning | 1785820 | 2018-08-09 12:00:10 | [diff] [blame] | 72 | |
| 73 | #0x44000000 |
| 74 | if (!p0) memb(r0+##_start)=r1 |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 75 | # CHECK: 4400c100 if (!p0) memb(r0+##131648) = r1 } |
Sid Manning | 1785820 | 2018-08-09 12:00:10 | [diff] [blame] | 76 | |
| 77 | #0x45000000 |
| 78 | if (!p0) r0=memb(r1+##_start) |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 79 | # CHECK: 4501c000 if (!p0) r0 = memb(r1+##131648) } |
Sid Manning | 1785820 | 2018-08-09 12:00:10 | [diff] [blame] | 80 | |
| 81 | #0x46000000 |
| 82 | { p0 = p1 |
| 83 | if (!p0.new) memb(r0+##_start)=r1 } |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 84 | # CHECK: 4600c100 if (!p0.new) memb(r0+##131648) = r1 } |
Sid Manning | 1785820 | 2018-08-09 12:00:10 | [diff] [blame] | 85 | |
| 86 | #0x47000000 |
| 87 | { p0 = p1 |
| 88 | if (!p0.new) r0=memb(r1+##_start) } |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 89 | # CHECK: 4701c000 if (!p0.new) r0 = memb(r1+##131648) } |
Sid Manning | 1785820 | 2018-08-09 12:00:10 | [diff] [blame] | 90 | |
| 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 |
| 94 | r0=add(pc,##_start@pcrel) |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 95 | # CHECK: 6a49d800 r0 = add(pc,##240) } |
Sid Manning | 1785820 | 2018-08-09 12:00:10 | [diff] [blame] | 96 | |
| 97 | #0x7c000000 |
| 98 | r1:0=combine(#8,##_start) |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 99 | # CHECK: 7c80c100 r1:0 = combine(#8,##131648) } |
Sid Manning | 1785820 | 2018-08-09 12:00:10 | [diff] [blame] | 100 | |
| 101 | #0x9a000000 |
| 102 | r1:0=memb_fifo(r2=##_start) |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 103 | # CHECK: 9a82d000 r1:0 = memb_fifo(r2=##131648) } |
Sid Manning | 1785820 | 2018-08-09 12:00:10 | [diff] [blame] | 104 | |
| 105 | #0x9b000000 |
| 106 | r0=memb(r1=##_start) |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 107 | # CHECK: 9b01d000 r0 = memb(r1=##131648) } |
Sid Manning | 1785820 | 2018-08-09 12:00:10 | [diff] [blame] | 108 | |
| 109 | #0x9c000000 |
| 110 | r1:0=memb_fifo(r2<<#2+##_start) |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 111 | # CHECK: 9c82f000 r1:0 = memb_fifo(r2<<#2+##131648) } |
Sid Manning | 1785820 | 2018-08-09 12:00:10 | [diff] [blame] | 112 | |
| 113 | #0x9d000000 |
| 114 | r0=memb(r1<<#2+##_start) |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 115 | # CHECK: 9d01f000 r0 = memb(r1<<#2+##131648) } |
Sid Manning | 1785820 | 2018-08-09 12:00:10 | [diff] [blame] | 116 | |
| 117 | #0x9f000000 |
| 118 | if (!p0) r0=memb(##_start) |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 119 | # CHECK: 9f00e880 if (!p0) r0 = memb(##131648) } |
Sid Manning | 1785820 | 2018-08-09 12:00:10 | [diff] [blame] | 120 | |
| 121 | #0xab000000 |
| 122 | memb(r0=##_start)=r1 |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 123 | # CHECK: ab00c180 memb(r0=##131648) = r1 } |
Sid Manning | 1785820 | 2018-08-09 12:00:10 | [diff] [blame] | 124 | |
| 125 | #0xad000000 |
| 126 | memb(r0<<#2+##_start)=r1 |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 127 | # CHECK: ad00e180 memb(r0<<#2+##131648) = r1 } |
Sid Manning | 1785820 | 2018-08-09 12:00:10 | [diff] [blame] | 128 | |
| 129 | #0xaf000000 |
| 130 | if (!p0) memb(##_start)=r1 |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 131 | # CHECK: af00c184 if (!p0) memb(##131648) = r1 } |
Sid Manning | 1785820 | 2018-08-09 12:00:10 | [diff] [blame] | 132 | |
| 133 | #0xd7000000 |
| 134 | r0=add(##_start,mpyi(r1,r2)) |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 135 | # CHECK: d701c200 r0 = add(##131648,mpyi(r1,r2)) } |
Sid Manning | 1785820 | 2018-08-09 12:00:10 | [diff] [blame] | 136 | |
| 137 | #0xd8000000 |
| 138 | R0=add(##_start,mpyi(r0,#2)) |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 139 | # CHECK: d800c002 r0 = add(##131648,mpyi(r0,#2)) } |
Sid Manning | 1785820 | 2018-08-09 12:00:10 | [diff] [blame] | 140 | |
| 141 | #0xdb000000 |
| 142 | r0=add(r1,add(r2,##_start)) |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 143 | # CHECK: db01c002 r0 = add(r1,add(r2,##131648)) } |
Sid Manning | 1785820 | 2018-08-09 12:00:10 | [diff] [blame] | 144 | |
| 145 | #0xdf000000 |
| 146 | r0=add(r1,mpyi(r2,##_start)) |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 147 | # CHECK: df82c001 r0 = add(r1,mpyi(r2,##131648)) } |
Sid Manning | 1785820 | 2018-08-09 12:00:10 | [diff] [blame] | 148 | |
| 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 Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 153 | # CHECK: 28003082 r0 = ##131648; r2 = r16 } |
Sid Manning | c53078a | 2018-08-09 20:04:53 | [diff] [blame] | 154 | |
| 155 | # R_HEX_HI16 |
| 156 | r0.h = #HI(_start) |
Sid Manning | 6d0e4fc | 2018-09-20 16:32:19 | [diff] [blame] | 157 | # CHECK: r0.h = #2 |
Sid Manning | c53078a | 2018-08-09 20:04:53 | [diff] [blame] | 158 | |
| 159 | # R_HEX_LO16 |
| 160 | r0.l = #LO(_start) |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 161 | # CHECK: r0.l = #576 |
Sid Manning | 07e541a | 2018-08-10 21:48:40 | [diff] [blame] | 162 | |
| 163 | # R_HEX_8_X has 3 relocation mask variations |
| 164 | #0xde000000 |
Sid Manning | 2e20df3 | 2018-08-10 23:46:11 | [diff] [blame] | 165 | r0=sub(##_start, asl(r0, #1)) |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 166 | # CHECK: de40c106 r0 = sub(##131648,asl(r0,#1)) } |
Sid Manning | 07e541a | 2018-08-10 21:48:40 | [diff] [blame] | 167 | |
| 168 | #0x3c000000 |
| 169 | memw(r0+#0) = ##_start |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 170 | # CHECK: 3c40c040 memw(r0+#0) = ##131648 } |
Sid Manning | 07e541a | 2018-08-10 21:48:40 | [diff] [blame] | 171 | |
| 172 | # The rest: |
| 173 | r1:0=combine(r2,##_start); |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 174 | # CHECK: 7302e800 r1:0 = combine(r2,##131648) } |
Sid Manning | 5b0141c | 2018-08-14 13:52:38 | [diff] [blame] | 175 | |
| 176 | # R_HEX_32: |
| 177 | r_hex_32: |
| 178 | .word _start |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 179 | # CHECK: 00020240 |
Sid Manning | 564e65a | 2018-08-22 15:25:15 | [diff] [blame] | 180 | |
| 181 | # R_HEX_16_X has 4 relocation mask variations |
| 182 | # 0x48000000 |
| 183 | memw(##_start) = r0 |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 184 | # CHECK: 4880c000 memw(##131648) = r0 } |
Sid Manning | 564e65a | 2018-08-22 15:25:15 | [diff] [blame] | 185 | |
| 186 | # 0x49000000 |
| 187 | r0 = memw(##_start) |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 188 | # CHECK: 4980c000 r0 = memw(##131648) |
Sid Manning | 564e65a | 2018-08-22 15:25:15 | [diff] [blame] | 189 | |
| 190 | # 0x78000000 |
| 191 | r0 = ##_start |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 192 | # CHECK: 7800c000 r0 = ##131648 } |
Sid Manning | 564e65a | 2018-08-22 15:25:15 | [diff] [blame] | 193 | |
| 194 | # 0xb0000000 |
| 195 | r0 = add(r1, ##_start) |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 196 | # CHECK: b001c000 r0 = add(r1,##131648) } |
Sid Manning | 6d0415e | 2018-08-25 21:25:35 | [diff] [blame] | 197 | |
| 198 | # R_HEX_B9_PCREL: |
| 199 | {r0=#1 ; jump #_start} |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 200 | # CHECK: jump 0x20240 |
Sid Manning | 6d0415e | 2018-08-25 21:25:35 | [diff] [blame] | 201 | |
| 202 | # R_HEX_B9_PCREL_X: |
| 203 | {r0=#1 ; jump ##_start} |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 204 | # CHECK: jump 0x20240 |
Sid Manning | 2c3d4b3 | 2018-08-25 23:16:37 | [diff] [blame] | 205 | |
| 206 | # R_HEX_B13_PCREL |
| 207 | if (r0 == #0) jump:t #_start |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 208 | # CHECK: if (r0==#0) jump:t 0x20240 |
Sid Manning | 569a56d | 2018-08-27 12:55:28 | [diff] [blame] | 209 | |
| 210 | # R_HEX_9_X |
| 211 | p0 = !cmp.gtu(r0, ##_start) |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 212 | # CHECK: p0 = !cmp.gtu(r0,##131648) |
Sid Manning | 569a56d | 2018-08-27 12:55:28 | [diff] [blame] | 213 | |
| 214 | # R_HEX_10_X |
| 215 | p0 = !cmp.gt(r0, ##_start) |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 216 | # CHECK: p0 = !cmp.gt(r0,##131648) |
Sid Manning | 569a56d | 2018-08-27 12:55:28 | [diff] [blame] | 217 | |
| 218 | # R_HEX_11_X |
| 219 | r0 = memw(r1+##_start) |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 220 | # CHECK: r0 = memw(r1+##131648) |
Sid Manning | 569a56d | 2018-08-27 12:55:28 | [diff] [blame] | 221 | |
| 222 | memw(r0+##_start) = r1 |
Fangrui Song | 4816e51 | 2019-09-17 02:45:38 | [diff] [blame] | 223 | # CHECK: memw(r0+##131648) = r1 |