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