222 lines · plain
1# REQUIRES: hexagon2# RUN: llvm-mc -filetype=obj -triple=hexagon-unknown-elf %s -o %t.o3# RUN: llvm-readobj -r %t.o | FileCheck --check-prefix=RELOC %s4# RUN: ld.lld %t.o -o %t5# RUN: llvm-objdump -d --print-imm-hex %t | FileCheck %s6 7# R_HEX_6_X@TPREL tests:8# One test for each mask in the lookup table.9 10#0x3800000011if (!P0) memw(r0+#8)=##a@TPREL12# RELOC: 0x0 R_HEX_TPREL_32_6_X a 0x013# RELOC-NEXT: 0x4 R_HEX_TPREL_16_X a 0x014# CHECK: { immext(#0xffffffc0)15# CHECK-NEXT: if (!p0) memw(r0+#0x8) = ##-0x4 }16 17#0x3900000018{ p0 = p119 if (!P0.new) memw(r0+#0)=##a@TPREL }20# RELOC-NEXT: 0xC R_HEX_TPREL_32_6_X a 0x021# RELOC-NEXT: 0x10 R_HEX_TPREL_16_X a 0x022# CHECK: immext(#0xffffffc0)23# CHECK-NEXT: if (!p0.new) memw(r0+#0x0) = ##-0x4 }24 25#0x3e00000026memw(r0+##a@TPREL)+=r127# RELOC-NEXT: 0x14 R_HEX_TPREL_32_6_X a 0x028# RELOC-NEXT: 0x18 R_HEX_TPREL_16_X a 0x029# CHECK: { immext(#0xffffffc0)30# CHECK-NEXT: memw(r0+##0xfffffffc) += r1 }31 32#0x3f00000033memw(r0+##a@TPREL)+=#434# RELOC-NEXT: 0x1C R_HEX_TPREL_32_6_X a 0x035# RELOC-NEXT: 0x20 R_HEX_TPREL_16_X a 0x036# CHECK: { immext(#0xffffffc0)37# CHECK-NEXT: memw(r0+##0xfffffffc) += #0x4 }38 39 40#0x4000000041{ r0 = r142 if (p0) memb(r0+##a@TPREL)=r0.new }43# RELOC-NEXT: 0x28 R_HEX_TPREL_32_6_X a 0x044# RELOC-NEXT: 0x2C R_HEX_TPREL_16_X a 0x045# CHECK: immext(#0xffffffc0)46# CHECK-NEXT: if (p0) memb(r0+##0xfffffffc) = r0.new }47 48#0x4100000049if (p0) r0=memb(r1+##a@TPREL)50# RELOC-NEXT: 0x30 R_HEX_TPREL_32_6_X a 0x051# RELOC-NEXT: 0x34 R_HEX_TPREL_16_X a 0x052# CHECK: { immext(#0xffffffc0)53# CHECK-NEXT: if (p0) r0 = memb(r1+##0xfffffffc) }54 55#0x4200000056{ r0 = r157 p0 = p158 if (p0.new) memb(r0+##a@TPREL)=r0.new }59# RELOC-NEXT: 0x40 R_HEX_TPREL_32_6_X a 0x060# RELOC-NEXT: 0x44 R_HEX_TPREL_16_X a 0x061# CHECK: immext(#0xffffffc0)62# CHECK-NEXT: if (p0.new) memb(r0+##0xfffffffc) = r0.new }63 64#0x4300000065{ p0 = p166 if (P0.new) r0=memb(r0+##a@TPREL) }67# RELOC-NEXT: 0x4C R_HEX_TPREL_32_6_X a 0x068# RELOC-NEXT: 0x50 R_HEX_TPREL_16_X a 0x069# CHECK: immext(#0xffffffc0)70# CHECK-NEXT: if (p0.new) r0 = memb(r0+##0xfffffffc) }71 72#0x4400000073if (!p0) memb(r0+##a@TPREL)=r174# RELOC-NEXT: 0x54 R_HEX_TPREL_32_6_X a 0x075# RELOC-NEXT: 0x58 R_HEX_TPREL_16_X a 0x076# CHECK: { immext(#0xffffffc0)77# CHECK-NEXT: if (!p0) memb(r0+##0xfffffffc) = r1 }78 79#0x4500000080if (!p0) r0=memb(r1+##a@TPREL)81# RELOC-NEXT: 0x5C R_HEX_TPREL_32_6_X a 0x082# RELOC-NEXT: 0x60 R_HEX_TPREL_16_X a 0x083# CHECK: { immext(#0xffffffc0)84# CHECK-NEXT: if (!p0) r0 = memb(r1+##0xfffffffc) }85 86 87#0x4600000088{ p0 = p189 if (!p0.new) memb(r0+##a@TPREL)=r1 }90# RELOC-NEXT: 0x68 R_HEX_TPREL_32_6_X a 0x091# RELOC-NEXT: 0x6C R_HEX_TPREL_16_X a 0x092# CHECK: immext(#0xffffffc0)93# CHECK-NEXT: if (!p0.new) memb(r0+##0xfffffffc) = r1 }94 95#0x4700000096{ p0 = p197 if (!p0.new) r0=memb(r1+##a@TPREL) }98# RELOC-NEXT: 0x74 R_HEX_TPREL_32_6_X a 0x099# RELOC-NEXT: 0x78 R_HEX_TPREL_16_X a 0x0100# CHECK: immext(#0xffffffc0)101# CHECK-NEXT: if (!p0.new) r0 = memb(r1+##0xfffffffc) }102 103#0x7c000000104r1:0=combine(#8,##a@TPREL)105# RELOC-NEXT: 0x7C R_HEX_TPREL_32_6_X a 0x0106# RELOC-NEXT: 0x80 R_HEX_TPREL_16_X a 0x0107# CHECK: { immext(#0xffffffc0)108# CHECK-NEXT: r1:0 = combine(#0x8,##0xfffffffc) }109 110 111#0x9a000000112r1:0=memb_fifo(r2=##a@TPREL)113# RELOC-NEXT: 0x84 R_HEX_TPREL_32_6_X a 0x0114# RELOC-NEXT: 0x88 R_HEX_TPREL_16_X a 0x0115# CHECK: { immext(#0xffffffc0)116# CHECK-NEXT: r1:0 = memb_fifo(r2=##0xfffffffc) }117 118 119#0x9b000000120r0=memb(r1=##a@TPREL)121# RELOC-NEXT: 0x8C R_HEX_TPREL_32_6_X a 0x0122# RELOC-NEXT: 0x90 R_HEX_TPREL_16_X a 0x0123# CHECK: { immext(#0xffffffc0)124# CHECK-NEXT: r0 = memb(r1=##0xfffffffc) }125 126 127#0x9c000000128r1:0=memb_fifo(r2<<#2+##a@TPREL)129# RELOC-NEXT: 0x94 R_HEX_TPREL_32_6_X a 0x0130# RELOC-NEXT: 0x98 R_HEX_TPREL_16_X a 0x0131# CHECK: { immext(#0xffffffc0)132# CHECK-NEXT: r1:0 = memb_fifo(r2<<#0x2+##0xfffffffc) }133 134 135#0x9d000000136r0=memb(r1<<#2+##a@TPREL)137# RELOC-NEXT: 0x9C R_HEX_TPREL_32_6_X a 0x0138# RELOC-NEXT: 0xA0 R_HEX_TPREL_16_X a 0x0139# CHECK: { immext(#0xffffffc0)140# CHECK-NEXT: r0 = memb(r1<<#0x2+##0xfffffffc) }141 142 143#0x9f000000144if (!p0) r0=memb(##a@TPREL)145# RELOC-NEXT: 0xA4 R_HEX_TPREL_32_6_X a 0x0146# RELOC-NEXT: 0xA8 R_HEX_TPREL_16_X a 0x0147# CHECK: { immext(#0xffffffc0)148# CHECK-NEXT: if (!p0) r0 = memb(##0xfffffffc) }149 150 151#0xab000000152memb(r0=##a@TPREL)=r1153# RELOC-NEXT: 0xAC R_HEX_TPREL_32_6_X a 0x0154# RELOC-NEXT: 0xB0 R_HEX_TPREL_16_X a 0x0155# CHECK: { immext(#0xffffffc0)156# CHECK-NEXT: memb(r0=##0xfffffffc) = r1 }157 158 159#0xad000000160memb(r0<<#2+##a@TPREL)=r1161# RELOC-NEXT: 0xB4 R_HEX_TPREL_32_6_X a 0x0162# RELOC-NEXT: 0xB8 R_HEX_TPREL_16_X a 0x0163# CHECK: { immext(#0xffffffc0)164# CHECK-NEXT: memb(r0<<#0x2+##0xfffffffc) = r1 }165 166 167#0xaf000000168if (!p0) memb(##a@TPREL)=r1169# RELOC-NEXT: 0xBC R_HEX_TPREL_32_6_X a 0x0170# RELOC-NEXT: 0xC0 R_HEX_TPREL_16_X a 0x0171# CHECK: { immext(#0xffffffc0)172# CHECK-NEXT: if (!p0) memb(##0xfffffffc) = r1 }173 174 175#0xd7000000176r0=add(##a@TPREL,mpyi(r1,r2))177# RELOC-NEXT: 0xC4 R_HEX_TPREL_32_6_X a 0x0178# RELOC-NEXT: 0xC8 R_HEX_TPREL_16_X a 0x0179# CHECK: { immext(#0xffffffc0)180# CHECK-NEXT: r0 = add(##0xfffffffc,mpyi(r1,r2)) }181 182 183#0xd8000000184R0=add(##a@TPREL,mpyi(r0,#2))185# RELOC-NEXT: 0xCC R_HEX_TPREL_32_6_X a 0x0186# RELOC-NEXT: 0xD0 R_HEX_TPREL_16_X a 0x0187# CHECK: { immext(#0xffffffc0)188# CHECK-NEXT: r0 = add(##0xfffffffc,mpyi(r0,#0x2)) }189 190 191#0xdb000000192r0=add(r1,add(r2,##a@TPREL))193# RELOC-NEXT: 0xD4 R_HEX_TPREL_32_6_X a 0x0194# RELOC-NEXT: 0xD8 R_HEX_TPREL_16_X a 0x0195# CHECK: { immext(#0xffffffc0)196# CHECK-NEXT: r0 = add(r1,add(r2,##-0x4)) }197 198 199#0xdf000000200r0=add(r1,mpyi(r2,##a@TPREL))201# RELOC-NEXT: 0xDC R_HEX_TPREL_32_6_X a 0x0202# RELOC-NEXT: 0xE0 R_HEX_TPREL_16_X a 0x0203# CHECK: { immext(#0xffffffc0)204# CHECK-NEXT: r0 = add(r1,mpyi(r2,##0xfffffffc)) }205 206 207# Duplex form of R_HEX_6_X208# R_HEX_32_6_X209# R_HEX_6_X210{ r0 = ##a@TPREL; r2 = r16 }211# RELOC-NEXT: 0xE4 R_HEX_TPREL_32_6_X a 0x0212# RELOC-NEXT: 0xE8 R_HEX_TPREL_16_X a 0x0213# CHECK: { immext(#0xffffffc0)214# CHECK-NEXT: r0 = ##0xfffffffc; r2 = r16 }215 216 .section .tdata,"awT",@progbits217 .globl a218 .p2align 2219a:220 .word 1221 .size a, 4222