brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.3 KiB · 6c5307c Raw
232 lines · plain
1# RUN: llvm-mc %s -triple=riscv32 \2# RUN:     | FileCheck %s --check-prefixes=CHECK,CHECK-NOPIC,CHECK-RV323# RUN: llvm-mc %s -triple=riscv64 \4# RUN:     | FileCheck %s --check-prefixes=CHECK,CHECK-NOPIC,CHECK-RV645# RUN: llvm-mc %s -triple=riscv32 -position-independent \6# RUN:   | FileCheck %s --check-prefixes=CHECK,CHECK-PIC,CHECK-RV32,CHECK-PIC-RV327# RUN: llvm-mc %s -triple=riscv64 -position-independent \8# RUN:   | FileCheck %s --check-prefixes=CHECK,CHECK-PIC,CHECK-RV64,CHECK-PIC-RV649 10# CHECK: .Lpcrel_hi0:11# CHECK: auipc a0, %pcrel_hi(a_symbol)12# CHECK: addi  a0, a0, %pcrel_lo(.Lpcrel_hi0)13lla a0, a_symbol14 15# CHECK: .Lpcrel_hi1:16# CHECK: auipc a1, %pcrel_hi(another_symbol)17# CHECK: addi  a1, a1, %pcrel_lo(.Lpcrel_hi1)18lla a1, another_symbol19 20# Check that we can load the address of symbols that are spelled like a register21# CHECK: .Lpcrel_hi2:22# CHECK: auipc a2, %pcrel_hi(zero)23# CHECK: addi  a2, a2, %pcrel_lo(.Lpcrel_hi2)24lla a2, zero25 26# CHECK: .Lpcrel_hi3:27# CHECK: auipc a3, %pcrel_hi(ra)28# CHECK: addi  a3, a3, %pcrel_lo(.Lpcrel_hi3)29lla a3, ra30 31# CHECK: .Lpcrel_hi4:32# CHECK: auipc a4, %pcrel_hi(f1)33# CHECK: addi  a4, a4, %pcrel_lo(.Lpcrel_hi4)34lla a4, f135 36# CHECK: .Lpcrel_hi5:37# CHECK: auipc a5, %pcrel_hi(a_symbol+2040)38# CHECK: addi  a5, a5, %pcrel_lo(.Lpcrel_hi5)39lla a5, a_symbol + (0xFF << 3)40 41# CHECK:      .Lpcrel_hi6:42# CHECK:      auipc a0, %got_pcrel_hi(a_symbol)43# CHECK-RV32: lw    a0, %pcrel_lo(.Lpcrel_hi6)(a0)44# CHECK-RV64: ld    a0, %pcrel_lo(.Lpcrel_hi6)(a0)45lga a0, a_symbol46 47# CHECK:      .Lpcrel_hi7:48# CHECK:      auipc a1, %got_pcrel_hi(another_symbol)49# CHECK-RV32: lw    a1, %pcrel_lo(.Lpcrel_hi7)(a1)50# CHECK-RV64: ld    a1, %pcrel_lo(.Lpcrel_hi7)(a1)51lga a1, another_symbol52 53# CHECK:      .Lpcrel_hi8:54# CHECK:      auipc a2, %got_pcrel_hi(zero)55# CHECK-RV32: lw    a2, %pcrel_lo(.Lpcrel_hi8)(a2)56# CHECK-RV64: ld    a2, %pcrel_lo(.Lpcrel_hi8)(a2)57lga a2, zero58 59# CHECK:      .Lpcrel_hi9:60# CHECK:      auipc a3, %got_pcrel_hi(ra)61# CHECK-RV32: lw    a3, %pcrel_lo(.Lpcrel_hi9)(a3)62# CHECK-RV64: ld    a3, %pcrel_lo(.Lpcrel_hi9)(a3)63lga a3, ra64 65# CHECK:      .Lpcrel_hi10:66# CHECK:      auipc a4, %got_pcrel_hi(f1)67# CHECK-RV32: lw    a4, %pcrel_lo(.Lpcrel_hi10)(a4)68# CHECK-RV64: ld    a4, %pcrel_lo(.Lpcrel_hi10)(a4)69lga a4, f170 71# CHECK:      .Lpcrel_hi11:72# CHECK:      auipc a5, %got_pcrel_hi(a_symbol+2040)73# CHECK-RV32: lw    a5, %pcrel_lo(.Lpcrel_hi11)(a5)74# CHECK-RV64: ld    a5, %pcrel_lo(.Lpcrel_hi11)(a5)75lga a5, a_symbol + (0xFF << 3)76 77# CHECK: .Lpcrel_hi12:78# CHECK-NOPIC: auipc a0, %pcrel_hi(a_symbol)79# CHECK-NOPIC: addi  a0, a0, %pcrel_lo(.Lpcrel_hi12)80# CHECK-PIC:      auipc a0, %got_pcrel_hi(a_symbol)81# CHECK-PIC-RV32: lw    a0, %pcrel_lo(.Lpcrel_hi12)(a0)82# CHECK-PIC-RV64: ld    a0, %pcrel_lo(.Lpcrel_hi12)(a0)83la a0, a_symbol84 85# CHECK: .Lpcrel_hi13:86# CHECK-NOPIC: auipc a1, %pcrel_hi(another_symbol)87# CHECK-NOPIC: addi  a1, a1, %pcrel_lo(.Lpcrel_hi13)88# CHECK-PIC:      auipc a1, %got_pcrel_hi(another_symbol)89# CHECK-PIC-RV32: lw    a1, %pcrel_lo(.Lpcrel_hi13)(a1)90# CHECK-PIC-RV64: ld    a1, %pcrel_lo(.Lpcrel_hi13)(a1)91la a1, another_symbol92 93# Check that we can load the address of symbols that are spelled like a register94# CHECK: .Lpcrel_hi14:95# CHECK-NOPIC: auipc a2, %pcrel_hi(zero)96# CHECK-NOPIC: addi  a2, a2, %pcrel_lo(.Lpcrel_hi14)97# CHECK-PIC:      auipc a2, %got_pcrel_hi(zero)98# CHECK-PIC-RV32: lw    a2, %pcrel_lo(.Lpcrel_hi14)(a2)99# CHECK-PIC-RV64: ld    a2, %pcrel_lo(.Lpcrel_hi14)(a2)100la a2, zero101 102# CHECK: .Lpcrel_hi15:103# CHECK-NOPIC: auipc a3, %pcrel_hi(ra)104# CHECK-NOPIC: addi  a3, a3, %pcrel_lo(.Lpcrel_hi15)105# CHECK-PIC:      auipc a3, %got_pcrel_hi(ra)106# CHECK-PIC-RV32: lw    a3, %pcrel_lo(.Lpcrel_hi15)(a3)107# CHECK-PIC-RV64: ld    a3, %pcrel_lo(.Lpcrel_hi15)(a3)108la a3, ra109 110# CHECK: .Lpcrel_hi16:111# CHECK-NOPIC: auipc a4, %pcrel_hi(f1)112# CHECK-NOPIC: addi  a4, a4, %pcrel_lo(.Lpcrel_hi16)113# CHECK-PIC:      auipc a4, %got_pcrel_hi(f1)114# CHECK-PIC-RV32: lw    a4, %pcrel_lo(.Lpcrel_hi16)(a4)115# CHECK-PIC-RV64: ld    a4, %pcrel_lo(.Lpcrel_hi16)(a4)116la a4, f1117 118# CHECK: .Lpcrel_hi17:119# CHECK: auipc a0, %tls_ie_pcrel_hi(a_symbol)120# CHECK-RV32: lw    a0, %pcrel_lo(.Lpcrel_hi17)(a0)121# CHECK-RV64: ld    a0, %pcrel_lo(.Lpcrel_hi17)(a0)122la.tls.ie a0, a_symbol123 124# CHECK: .Lpcrel_hi18:125# CHECK: auipc a1, %tls_ie_pcrel_hi(another_symbol)126# CHECK-RV32: lw    a1, %pcrel_lo(.Lpcrel_hi18)(a1)127# CHECK-RV64: ld    a1, %pcrel_lo(.Lpcrel_hi18)(a1)128la.tls.ie a1, another_symbol129 130# Check that we can load the address of symbols that are spelled like a register131# CHECK: .Lpcrel_hi19:132# CHECK: auipc a2, %tls_ie_pcrel_hi(zero)133# CHECK-RV32: lw    a2, %pcrel_lo(.Lpcrel_hi19)(a2)134# CHECK-RV64: ld    a2, %pcrel_lo(.Lpcrel_hi19)(a2)135la.tls.ie a2, zero136 137# CHECK: .Lpcrel_hi20:138# CHECK: auipc a3, %tls_ie_pcrel_hi(ra)139# CHECK-RV32: lw    a3, %pcrel_lo(.Lpcrel_hi20)(a3)140# CHECK-RV64: ld    a3, %pcrel_lo(.Lpcrel_hi20)(a3)141la.tls.ie a3, ra142 143# CHECK: .Lpcrel_hi21:144# CHECK: auipc a4, %tls_ie_pcrel_hi(f1)145# CHECK-RV32: lw    a4, %pcrel_lo(.Lpcrel_hi21)(a4)146# CHECK-RV64: ld    a4, %pcrel_lo(.Lpcrel_hi21)(a4)147la.tls.ie a4, f1148 149# CHECK: .Lpcrel_hi22:150# CHECK: auipc a0, %tls_gd_pcrel_hi(a_symbol)151# CHECK: addi  a0, a0, %pcrel_lo(.Lpcrel_hi22)152la.tls.gd a0, a_symbol153 154# CHECK: .Lpcrel_hi23:155# CHECK: auipc a1, %tls_gd_pcrel_hi(another_symbol)156# CHECK: addi  a1, a1, %pcrel_lo(.Lpcrel_hi23)157la.tls.gd a1, another_symbol158 159# Check that we can load the address of symbols that are spelled like a register160# CHECK: .Lpcrel_hi24:161# CHECK: auipc a2, %tls_gd_pcrel_hi(zero)162# CHECK: addi  a2, a2, %pcrel_lo(.Lpcrel_hi24)163la.tls.gd a2, zero164 165# CHECK: .Lpcrel_hi25:166# CHECK: auipc a3, %tls_gd_pcrel_hi(ra)167# CHECK: addi  a3, a3, %pcrel_lo(.Lpcrel_hi25)168la.tls.gd a3, ra169 170# CHECK: .Lpcrel_hi26:171# CHECK: auipc a4, %tls_gd_pcrel_hi(f1)172# CHECK: addi  a4, a4, %pcrel_lo(.Lpcrel_hi26)173la.tls.gd a4, f1174 175# CHECK: .Lpcrel_hi27:176# CHECK: auipc a0, %pcrel_hi(a_symbol)177# CHECK: lb  a0, %pcrel_lo(.Lpcrel_hi27)(a0)178lb a0, a_symbol179 180# CHECK: .Lpcrel_hi28:181# CHECK: auipc a1, %pcrel_hi(a_symbol)182# CHECK: lh  a1, %pcrel_lo(.Lpcrel_hi28)(a1)183lh a1, a_symbol184 185# CHECK: .Lpcrel_hi29:186# CHECK: auipc a2, %pcrel_hi(a_symbol)187# CHECK: lhu  a2, %pcrel_lo(.Lpcrel_hi29)(a2)188lhu a2, a_symbol189 190# CHECK: .Lpcrel_hi30:191# CHECK: auipc a3, %pcrel_hi(a_symbol)192# CHECK: lw  a3, %pcrel_lo(.Lpcrel_hi30)(a3)193lw a3, a_symbol194 195# CHECK: .Lpcrel_hi31:196# CHECK: auipc a4, %pcrel_hi(a_symbol)197# CHECK: sb  a3, %pcrel_lo(.Lpcrel_hi31)(a4)198sb a3, a_symbol, a4199 200# CHECK: .Lpcrel_hi32:201# CHECK: auipc a4, %pcrel_hi(a_symbol)202# CHECK: sh  a3, %pcrel_lo(.Lpcrel_hi32)(a4)203sh a3, a_symbol, a4204 205# CHECK: .Lpcrel_hi33:206# CHECK: auipc a4, %pcrel_hi(a_symbol)207# CHECK: sw  a3, %pcrel_lo(.Lpcrel_hi33)(a4)208sw a3, a_symbol, a4209 210# Check that we can load the address of symbols that are spelled like a register211# CHECK: .Lpcrel_hi34:212# CHECK: auipc a2, %pcrel_hi(zero)213# CHECK: lw  a2, %pcrel_lo(.Lpcrel_hi34)(a2)214lw a2, zero215 216# CHECK: .Lpcrel_hi35:217# CHECK: auipc a4, %pcrel_hi(zero)218# CHECK: sw  a3, %pcrel_lo(.Lpcrel_hi35)(a4)219sw a3, zero, a4220 221## Check that a complex expression can be simplified and matched.222# CHECK: .Lpcrel_hi36:223# CHECK: auipc a5, %pcrel_hi(255+a_symbol-4)224# CHECK: addi  a5, a5, %pcrel_lo(.Lpcrel_hi36)225lla a5, (0xFF + a_symbol) - 4226 227## Check that we don't double-parse a top-level minus.228# CHECK: .Lpcrel_hi37:229# CHECK: auipc a5, %pcrel_hi(a_symbol-4)230# CHECK: addi  a5, a5, %pcrel_lo(.Lpcrel_hi37)231lla a5, a_symbol - 4232