275 lines · plain
1# RUN: llvm-mc --triple=loongarch64 %s --show-encoding \2# RUN: | FileCheck --check-prefix=INSTR %s3# RUN: llvm-mc --filetype=obj --triple=loongarch64 %s \4# RUN: | llvm-readobj -r - | FileCheck --check-prefix=RELOC %s5 6## Check prefixes:7## RELOC - Check the relocation in the object.8## INSTR - Check the instruction is handled properly by the ASMPrinter.9 10.long foo11# RELOC: R_LARCH_32 foo12 13.quad foo14# RELOC: R_LARCH_64 foo15 16bne $t1, $t2, %b16(foo)17# RELOC: R_LARCH_B1618# INSTR: bne $t1, $t2, %b16(foo)19 20bnez $t1, %b21(foo)21# RELOC: R_LARCH_B2122# INSTR: bnez $t1, %b21(foo)23 24bl %plt(foo)25# RELOC: R_LARCH_B2626# INSTR: bl foo27 28bl foo29# RELOC: R_LARCH_B2630# INSTR: bl foo31 32lu12i.w $t1, %abs_hi20(foo)33# RELOC: R_LARCH_ABS_HI20 foo 0x034# INSTR: lu12i.w $t1, %abs_hi20(foo)35 36ori $t1, $t1, %abs_lo12(foo)37# RELOC: R_LARCH_ABS_LO12 foo 0x038# INSTR: ori $t1, $t1, %abs_lo12(foo)39 40lu32i.d $t1, %abs64_lo20(foo)41# RELOC: R_LARCH_ABS64_LO20 foo 0x042# INSTR: lu32i.d $t1, %abs64_lo20(foo)43 44lu52i.d $t1, $t1, %abs64_hi12(foo)45# RELOC: R_LARCH_ABS64_HI12 foo 0x046# INSTR: lu52i.d $t1, $t1, %abs64_hi12(foo)47 48pcalau12i $t1, %pc_hi20(foo)49# RELOC: R_LARCH_PCALA_HI20 foo 0x050# INSTR: pcalau12i $t1, %pc_hi20(foo)51 52pcalau12i $t1, %pc_hi20(foo+4)53# RELOC: R_LARCH_PCALA_HI20 foo 0x454# INSTR: pcalau12i $t1, %pc_hi20(foo+4)55 56addi.d $t1, $t1, %pc_lo12(foo)57# RELOC: R_LARCH_PCALA_LO12 foo 0x058# INSTR: addi.d $t1, $t1, %pc_lo12(foo)59 60addi.d $t1, $t1, %pc_lo12(foo+4)61# RELOC: R_LARCH_PCALA_LO12 foo 0x462# INSTR: addi.d $t1, $t1, %pc_lo12(foo+4)63 64jirl $zero, $t1, %pc_lo12(foo)65# RELOC: R_LARCH_PCALA_LO12 foo 0x066# INSTR: jirl $zero, $t1, %pc_lo12(foo)67 68st.b $t1, $a2, %pc_lo12(foo)69# RELOC: R_LARCH_PCALA_LO12 foo 0x070# INSTR: st.b $t1, $a2, %pc_lo12(foo)71 72st.b $t1, $a2, %pc_lo12(foo+4)73# RELOC: R_LARCH_PCALA_LO12 foo 0x474# INSTR: st.b $t1, $a2, %pc_lo12(foo+4)75 76lu32i.d $t1, %pc64_lo20(foo)77# RELOC: R_LARCH_PCALA64_LO20 foo 0x078# INSTR: lu32i.d $t1, %pc64_lo20(foo)79 80lu52i.d $t1, $t1, %pc64_hi12(foo)81# RELOC: R_LARCH_PCALA64_HI12 foo 0x082# INSTR: lu52i.d $t1, $t1, %pc64_hi12(foo)83 84pcalau12i $t1, %got_pc_hi20(foo)85# RELOC: R_LARCH_GOT_PC_HI20 foo 0x086# INSTR: pcalau12i $t1, %got_pc_hi20(foo)87 88ld.d $t1, $a2, %got_pc_lo12(foo)89# RELOC: R_LARCH_GOT_PC_LO12 foo 0x090# INSTR: ld.d $t1, $a2, %got_pc_lo12(foo)91 92lu32i.d $t1, %got64_pc_lo20(foo)93# RELOC: R_LARCH_GOT64_PC_LO20 foo 0x094# INSTR: lu32i.d $t1, %got64_pc_lo20(foo)95 96lu52i.d $t1, $t1, %got64_pc_hi12(foo)97# RELOC: R_LARCH_GOT64_PC_HI12 foo 0x098# INSTR: lu52i.d $t1, $t1, %got64_pc_hi12(foo)99 100lu12i.w $t1, %got_hi20(foo)101# RELOC: R_LARCH_GOT_HI20 foo 0x0102# INSTR: lu12i.w $t1, %got_hi20(foo)103 104ori $t1, $a2, %got_lo12(foo)105# RELOC: R_LARCH_GOT_LO12 foo 0x0106# INSTR: ori $t1, $a2, %got_lo12(foo)107 108lu32i.d $t1, %got64_lo20(foo)109# RELOC: R_LARCH_GOT64_LO20 foo 0x0110# INSTR: lu32i.d $t1, %got64_lo20(foo)111 112lu52i.d $t1, $t1, %got64_hi12(foo)113# RELOC: R_LARCH_GOT64_HI12 foo 0x0114# INSTR: lu52i.d $t1, $t1, %got64_hi12(foo)115 116lu12i.w $t1, %le_hi20(foo)117# RELOC: R_LARCH_TLS_LE_HI20 foo 0x0118# INSTR: lu12i.w $t1, %le_hi20(foo)119 120ori $t1, $a2, %le_lo12(foo)121# RELOC: R_LARCH_TLS_LE_LO12 foo 0x0122# INSTR: ori $t1, $a2, %le_lo12(foo)123 124lu32i.d $t1, %le64_lo20(foo)125# RELOC: R_LARCH_TLS_LE64_LO20 foo 0x0126# INSTR: lu32i.d $t1, %le64_lo20(foo)127 128lu52i.d $t1, $t1, %le64_hi12(foo)129# RELOC: R_LARCH_TLS_LE64_HI12 foo 0x0130# INSTR: lu52i.d $t1, $t1, %le64_hi12(foo)131 132pcalau12i $t1, %ie_pc_hi20(foo)133# RELOC: R_LARCH_TLS_IE_PC_HI20 foo 0x0134# INSTR: pcalau12i $t1, %ie_pc_hi20(foo)135 136ld.d $t1, $a2, %ie_pc_lo12(foo)137# RELOC: R_LARCH_TLS_IE_PC_LO12 foo 0x0138# INSTR: ld.d $t1, $a2, %ie_pc_lo12(foo)139 140lu32i.d $t1, %ie64_pc_lo20(foo)141# RELOC: R_LARCH_TLS_IE64_PC_LO20 foo 0x0142# INSTR: lu32i.d $t1, %ie64_pc_lo20(foo)143 144lu52i.d $t1, $t1, %ie64_pc_hi12(foo)145# RELOC: R_LARCH_TLS_IE64_PC_HI12 foo 0x0146# INSTR: lu52i.d $t1, $t1, %ie64_pc_hi12(foo)147 148lu12i.w $t1, %ie_hi20(foo)149# RELOC: R_LARCH_TLS_IE_HI20 foo 0x0150# INSTR: lu12i.w $t1, %ie_hi20(foo)151 152ori $t1, $a2, %ie_lo12(foo)153# RELOC: R_LARCH_TLS_IE_LO12 foo 0x0154# INSTR: ori $t1, $a2, %ie_lo12(foo)155 156lu32i.d $t1, %ie64_lo20(foo)157# RELOC: R_LARCH_TLS_IE64_LO20 foo 0x0158# INSTR: lu32i.d $t1, %ie64_lo20(foo)159 160lu52i.d $t1, $t1, %ie64_hi12(foo)161# RELOC: R_LARCH_TLS_IE64_HI12 foo 0x0162# INSTR: lu52i.d $t1, $t1, %ie64_hi12(foo)163 164pcalau12i $t1, %ld_pc_hi20(foo)165# RELOC: R_LARCH_TLS_LD_PC_HI20 foo 0x0166# INSTR: pcalau12i $t1, %ld_pc_hi20(foo)167 168lu12i.w $t1, %ld_hi20(foo)169# RELOC: R_LARCH_TLS_LD_HI20 foo 0x0170# INSTR: lu12i.w $t1, %ld_hi20(foo)171 172pcalau12i $t1, %gd_pc_hi20(foo)173# RELOC: R_LARCH_TLS_GD_PC_HI20 foo 0x0174# INSTR: pcalau12i $t1, %gd_pc_hi20(foo)175 176lu12i.w $t1, %gd_hi20(foo)177# RELOC: R_LARCH_TLS_GD_HI20 foo 0x0178# INSTR: lu12i.w $t1, %gd_hi20(foo)179 180pcaddu18i $t1, %call36(foo)181# RELOC: R_LARCH_CALL36 foo 0x0182# INSTR: pcaddu18i $t1, %call36(foo)183 184pcalau12i $t1, %desc_pc_hi20(foo)185# RELOC: R_LARCH_TLS_DESC_PC_HI20 foo 0x0186# INSTR: pcalau12i $t1, %desc_pc_hi20(foo)187 188addi.d $t1, $t1, %desc_pc_lo12(foo)189# RELOC: R_LARCH_TLS_DESC_PC_LO12 foo 0x0190# INSTR: addi.d $t1, $t1, %desc_pc_lo12(foo)191 192lu32i.d $t1, %desc64_pc_lo20(foo)193# RELOC: R_LARCH_TLS_DESC64_PC_LO20 foo 0x0194# INSTR: lu32i.d $t1, %desc64_pc_lo20(foo)195 196lu52i.d $t1, $t1, %desc64_pc_hi12(foo)197# RELOC: R_LARCH_TLS_DESC64_PC_HI12 foo 0x0198# INSTR: lu52i.d $t1, $t1, %desc64_pc_hi12(foo)199 200ld.d $ra, $t1, %desc_ld(foo)201# RELOC: R_LARCH_TLS_DESC_LD foo 0x0202# INSTR: ld.d $ra, $t1, %desc_ld(foo)203 204jirl $ra, $ra, %desc_call(foo)205# RELOC: R_LARCH_TLS_DESC_CALL foo 0x0206# INSTR: jirl $ra, $ra, %desc_call(foo)207 208lu12i.w $t1, %desc_hi20(foo)209# RELOC: R_LARCH_TLS_DESC_HI20 foo 0x0210# INSTR: lu12i.w $t1, %desc_hi20(foo)211 212ori $t1, $t1, %desc_lo12(foo)213# RELOC: R_LARCH_TLS_DESC_LO12 foo 0x0214# INSTR: ori $t1, $t1, %desc_lo12(foo)215 216lu32i.d $t1, %desc64_lo20(foo)217# RELOC: R_LARCH_TLS_DESC64_LO20 foo 0x0218# INSTR: lu32i.d $t1, %desc64_lo20(foo)219 220lu52i.d $t1, $t1, %desc64_hi12(foo)221# RELOC: R_LARCH_TLS_DESC64_HI12 foo 0x0222# INSTR: lu52i.d $t1, $t1, %desc64_hi12(foo)223 224lu12i.w $t1, %le_hi20_r(foo)225# RELOC: R_LARCH_TLS_LE_HI20_R foo 0x0226# INSTR: lu12i.w $t1, %le_hi20_r(foo)227 228add.d $t1, $t2, $tp, %le_add_r(foo)229# RELOC: R_LARCH_TLS_LE_ADD_R foo 0x0230# INSTR: add.d $t1, $t2, $tp, %le_add_r(foo)231 232addi.d $t1, $a2, %le_lo12_r(foo)233# RELOC: R_LARCH_TLS_LE_LO12_R foo 0x0234# INSTR: addi.d $t1, $a2, %le_lo12_r(foo)235 236pcaddi $t1, %pcrel_20(foo)237# RELOC: R_LARCH_PCREL20_S2 foo 0x0238# INSTR: pcaddi $t1, %pcrel_20(foo)239 240pcaddi $t1, %ld_pcrel_20(foo)241# RELOC: R_LARCH_TLS_LD_PCREL20_S2 foo 0x0242# INSTR: pcaddi $t1, %ld_pcrel_20(foo)243 244pcaddi $t1, %gd_pcrel_20(foo)245# RELOC: R_LARCH_TLS_GD_PCREL20_S2 foo 0x0246# INSTR: pcaddi $t1, %gd_pcrel_20(foo)247 248pcaddi $t1, %desc_pcrel_20(foo)249# RELOC: R_LARCH_TLS_DESC_PCREL20_S2 foo 0x0250# INSTR: pcaddi $t1, %desc_pcrel_20(foo)251 252fld.s $ft1, $a0, %pc_lo12(foo)253# RELOC: R_LARCH_PCALA_LO12 foo 0x0254# INSTR: fld.s $ft1, $a0, %pc_lo12(foo)255 256fst.d $ft1, $a0, %pc_lo12(foo)257# RELOC: R_LARCH_PCALA_LO12 foo 0x0258# INSTR: fst.d $ft1, $a0, %pc_lo12(foo)259 260vld $vr9, $a0, %pc_lo12(foo)261# RELOC: R_LARCH_PCALA_LO12 foo 0x0262# INSTR: vld $vr9, $a0, %pc_lo12(foo)263 264vst $vr9, $a0, %pc_lo12(foo)265# RELOC: R_LARCH_PCALA_LO12 foo 0x0266# INSTR: vst $vr9, $a0, %pc_lo12(foo)267 268xvld $xr9, $a0, %pc_lo12(foo)269# RELOC: R_LARCH_PCALA_LO12 foo 0x0270# INSTR: xvld $xr9, $a0, %pc_lo12(foo)271 272xvst $xr9, $a0, %pc_lo12(foo)273# RELOC: R_LARCH_PCALA_LO12 foo 0x0274# INSTR: xvst $xr9, $a0, %pc_lo12(foo)275