1# REQUIRES: hexagon 2# RUN: llvm-mc -filetype=obj -triple=hexagon-unknown-elf %s -o %t.o 3# RUN: llvm-readobj -r %t.o | FileCheck --check-prefix=RELOC %s 4# RUN: ld.lld %t.o -o %t 5# RUN: llvm-objdump -d --print-imm-hex %t | FileCheck %s 6 7# R_HEX_6_X@TPREL tests: 8# One test for each mask in the lookup table. 9 10#0x38000000 11if (!P0) memw(r0+#8)=##a@TPREL 12# RELOC: 0x0 R_HEX_TPREL_32_6_X a 0x0 13# RELOC-NEXT: 0x4 R_HEX_TPREL_16_X a 0x0 14# CHECK: { immext(#0xffffffc0) 15# CHECK-NEXT: if (!p0) memw(r0+#0x8) = ##-0x4 } 16 17#0x39000000 18{ p0 = p1 19 if (!P0.new) memw(r0+#0)=##a@TPREL } 20# RELOC-NEXT: 0xC R_HEX_TPREL_32_6_X a 0x0 21# RELOC-NEXT: 0x10 R_HEX_TPREL_16_X a 0x0 22# CHECK: immext(#0xffffffc0) 23# CHECK-NEXT: if (!p0.new) memw(r0+#0x0) = ##-0x4 } 24 25#0x3e000000 26memw(r0+##a@TPREL)+=r1 27# RELOC-NEXT: 0x14 R_HEX_TPREL_32_6_X a 0x0 28# RELOC-NEXT: 0x18 R_HEX_TPREL_16_X a 0x0 29# CHECK: { immext(#0xffffffc0) 30# CHECK-NEXT: memw(r0+##0xfffffffc) += r1 } 31 32#0x3f000000 33memw(r0+##a@TPREL)+=#4 34# RELOC-NEXT: 0x1C R_HEX_TPREL_32_6_X a 0x0 35# RELOC-NEXT: 0x20 R_HEX_TPREL_16_X a 0x0 36# CHECK: { immext(#0xffffffc0) 37# CHECK-NEXT: memw(r0+##0xfffffffc) += #0x4 } 38 39 40#0x40000000 41{ r0 = r1 42 if (p0) memb(r0+##a@TPREL)=r0.new } 43# RELOC-NEXT: 0x28 R_HEX_TPREL_32_6_X a 0x0 44# RELOC-NEXT: 0x2C R_HEX_TPREL_16_X a 0x0 45# CHECK: immext(#0xffffffc0) 46# CHECK-NEXT: if (p0) memb(r0+##0xfffffffc) = r0.new } 47 48#0x41000000 49if (p0) r0=memb(r1+##a@TPREL) 50# RELOC-NEXT: 0x30 R_HEX_TPREL_32_6_X a 0x0 51# RELOC-NEXT: 0x34 R_HEX_TPREL_16_X a 0x0 52# CHECK: { immext(#0xffffffc0) 53# CHECK-NEXT: if (p0) r0 = memb(r1+##0xfffffffc) } 54 55#0x42000000 56{ r0 = r1 57 p0 = p1 58 if (p0.new) memb(r0+##a@TPREL)=r0.new } 59# RELOC-NEXT: 0x40 R_HEX_TPREL_32_6_X a 0x0 60# RELOC-NEXT: 0x44 R_HEX_TPREL_16_X a 0x0 61# CHECK: immext(#0xffffffc0) 62# CHECK-NEXT: if (p0.new) memb(r0+##0xfffffffc) = r0.new } 63 64#0x43000000 65{ p0 = p1 66 if (P0.new) r0=memb(r0+##a@TPREL) } 67# RELOC-NEXT: 0x4C R_HEX_TPREL_32_6_X a 0x0 68# RELOC-NEXT: 0x50 R_HEX_TPREL_16_X a 0x0 69# CHECK: immext(#0xffffffc0) 70# CHECK-NEXT: if (p0.new) r0 = memb(r0+##0xfffffffc) } 71 72#0x44000000 73if (!p0) memb(r0+##a@TPREL)=r1 74# RELOC-NEXT: 0x54 R_HEX_TPREL_32_6_X a 0x0 75# RELOC-NEXT: 0x58 R_HEX_TPREL_16_X a 0x0 76# CHECK: { immext(#0xffffffc0) 77# CHECK-NEXT: if (!p0) memb(r0+##0xfffffffc) = r1 } 78 79#0x45000000 80if (!p0) r0=memb(r1+##a@TPREL) 81# RELOC-NEXT: 0x5C R_HEX_TPREL_32_6_X a 0x0 82# RELOC-NEXT: 0x60 R_HEX_TPREL_16_X a 0x0 83# CHECK: { immext(#0xffffffc0) 84# CHECK-NEXT: if (!p0) r0 = memb(r1+##0xfffffffc) } 85 86 87#0x46000000 88{ p0 = p1 89 if (!p0.new) memb(r0+##a@TPREL)=r1 } 90# RELOC-NEXT: 0x68 R_HEX_TPREL_32_6_X a 0x0 91# RELOC-NEXT: 0x6C R_HEX_TPREL_16_X a 0x0 92# CHECK: immext(#0xffffffc0) 93# CHECK-NEXT: if (!p0.new) memb(r0+##0xfffffffc) = r1 } 94 95#0x47000000 96{ p0 = p1 97 if (!p0.new) r0=memb(r1+##a@TPREL) } 98# RELOC-NEXT: 0x74 R_HEX_TPREL_32_6_X a 0x0 99# RELOC-NEXT: 0x78 R_HEX_TPREL_16_X a 0x0 100# CHECK: immext(#0xffffffc0) 101# CHECK-NEXT: if (!p0.new) r0 = memb(r1+##0xfffffffc) } 102 103#0x7c000000 104r1:0=combine(#8,##a@TPREL) 105# RELOC-NEXT: 0x7C R_HEX_TPREL_32_6_X a 0x0 106# RELOC-NEXT: 0x80 R_HEX_TPREL_16_X a 0x0 107# CHECK: { immext(#0xffffffc0) 108# CHECK-NEXT: r1:0 = combine(#0x8,##0xfffffffc) } 109 110 111#0x9a000000 112r1:0=memb_fifo(r2=##a@TPREL) 113# RELOC-NEXT: 0x84 R_HEX_TPREL_32_6_X a 0x0 114# RELOC-NEXT: 0x88 R_HEX_TPREL_16_X a 0x0 115# CHECK: { immext(#0xffffffc0) 116# CHECK-NEXT: r1:0 = memb_fifo(r2=##0xfffffffc) } 117 118 119#0x9b000000 120r0=memb(r1=##a@TPREL) 121# RELOC-NEXT: 0x8C R_HEX_TPREL_32_6_X a 0x0 122# RELOC-NEXT: 0x90 R_HEX_TPREL_16_X a 0x0 123# CHECK: { immext(#0xffffffc0) 124# CHECK-NEXT: r0 = memb(r1=##0xfffffffc) } 125 126 127#0x9c000000 128r1:0=memb_fifo(r2<<#2+##a@TPREL) 129# RELOC-NEXT: 0x94 R_HEX_TPREL_32_6_X a 0x0 130# RELOC-NEXT: 0x98 R_HEX_TPREL_16_X a 0x0 131# CHECK: { immext(#0xffffffc0) 132# CHECK-NEXT: r1:0 = memb_fifo(r2<<#0x2+##0xfffffffc) } 133 134 135#0x9d000000 136r0=memb(r1<<#2+##a@TPREL) 137# RELOC-NEXT: 0x9C R_HEX_TPREL_32_6_X a 0x0 138# RELOC-NEXT: 0xA0 R_HEX_TPREL_16_X a 0x0 139# CHECK: { immext(#0xffffffc0) 140# CHECK-NEXT: r0 = memb(r1<<#0x2+##0xfffffffc) } 141 142 143#0x9f000000 144if (!p0) r0=memb(##a@TPREL) 145# RELOC-NEXT: 0xA4 R_HEX_TPREL_32_6_X a 0x0 146# RELOC-NEXT: 0xA8 R_HEX_TPREL_16_X a 0x0 147# CHECK: { immext(#0xffffffc0) 148# CHECK-NEXT: if (!p0) r0 = memb(##0xfffffffc) } 149 150 151#0xab000000 152memb(r0=##a@TPREL)=r1 153# RELOC-NEXT: 0xAC R_HEX_TPREL_32_6_X a 0x0 154# RELOC-NEXT: 0xB0 R_HEX_TPREL_16_X a 0x0 155# CHECK: { immext(#0xffffffc0) 156# CHECK-NEXT: memb(r0=##0xfffffffc) = r1 } 157 158 159#0xad000000 160memb(r0<<#2+##a@TPREL)=r1 161# RELOC-NEXT: 0xB4 R_HEX_TPREL_32_6_X a 0x0 162# RELOC-NEXT: 0xB8 R_HEX_TPREL_16_X a 0x0 163# CHECK: { immext(#0xffffffc0) 164# CHECK-NEXT: memb(r0<<#0x2+##0xfffffffc) = r1 } 165 166 167#0xaf000000 168if (!p0) memb(##a@TPREL)=r1 169# RELOC-NEXT: 0xBC R_HEX_TPREL_32_6_X a 0x0 170# RELOC-NEXT: 0xC0 R_HEX_TPREL_16_X a 0x0 171# CHECK: { immext(#0xffffffc0) 172# CHECK-NEXT: if (!p0) memb(##0xfffffffc) = r1 } 173 174 175#0xd7000000 176r0=add(##a@TPREL,mpyi(r1,r2)) 177# RELOC-NEXT: 0xC4 R_HEX_TPREL_32_6_X a 0x0 178# RELOC-NEXT: 0xC8 R_HEX_TPREL_16_X a 0x0 179# CHECK: { immext(#0xffffffc0) 180# CHECK-NEXT: r0 = add(##0xfffffffc,mpyi(r1,r2)) } 181 182 183#0xd8000000 184R0=add(##a@TPREL,mpyi(r0,#2)) 185# RELOC-NEXT: 0xCC R_HEX_TPREL_32_6_X a 0x0 186# RELOC-NEXT: 0xD0 R_HEX_TPREL_16_X a 0x0 187# CHECK: { immext(#0xffffffc0) 188# CHECK-NEXT: r0 = add(##0xfffffffc,mpyi(r0,#0x2)) } 189 190 191#0xdb000000 192r0=add(r1,add(r2,##a@TPREL)) 193# RELOC-NEXT: 0xD4 R_HEX_TPREL_32_6_X a 0x0 194# RELOC-NEXT: 0xD8 R_HEX_TPREL_16_X a 0x0 195# CHECK: { immext(#0xffffffc0) 196# CHECK-NEXT: r0 = add(r1,add(r2,##-0x4)) } 197 198 199#0xdf000000 200r0=add(r1,mpyi(r2,##a@TPREL)) 201# RELOC-NEXT: 0xDC R_HEX_TPREL_32_6_X a 0x0 202# RELOC-NEXT: 0xE0 R_HEX_TPREL_16_X a 0x0 203# CHECK: { immext(#0xffffffc0) 204# CHECK-NEXT: r0 = add(r1,mpyi(r2,##0xfffffffc)) } 205 206 207# Duplex form of R_HEX_6_X 208# R_HEX_32_6_X 209# R_HEX_6_X 210{ r0 = ##a@TPREL; r2 = r16 } 211# RELOC-NEXT: 0xE4 R_HEX_TPREL_32_6_X a 0x0 212# RELOC-NEXT: 0xE8 R_HEX_TPREL_16_X a 0x0 213# CHECK: { immext(#0xffffffc0) 214# CHECK-NEXT: r0 = ##0xfffffffc; r2 = r16 } 215 216 .section .tdata,"awT",@progbits 217 .globl a 218 .p2align 2 219a: 220 .word 1 221 .size a, 4 222