96 lines · plain
1# REQUIRES: loongarch2# RUN: rm -rf %t && split-file %s %t && cd %t3 4# RUN: llvm-mc --filetype=obj --triple=loongarch32 -mattr=+relax a.s -o a.32.o5# RUN: llvm-mc --filetype=obj --triple=loongarch64 -mattr=+relax a.s -o a.64.o6 7# RUN: ld.lld --section-start=.text=0x10000 --section-start=.data=0x14000 a.32.o -o a.328# RUN: ld.lld --section-start=.text=0x10000 --section-start=.data=0x14000 a.64.o -o a.649# RUN: llvm-objdump -td --no-show-raw-insn a.32 | FileCheck --check-prefixes=RELAX %s10# RUN: llvm-objdump -td --no-show-raw-insn a.64 | FileCheck --check-prefixes=RELAX %s11 12# RUN: ld.lld --section-start=.text=0x10000 --section-start=.data=0x14000 a.32.o -shared -o a.32s13# RUN: ld.lld --section-start=.text=0x10000 --section-start=.data=0x14000 a.64.o -shared -o a.64s14# RUN: llvm-objdump -td --no-show-raw-insn a.32s | FileCheck --check-prefixes=RELAX %s15# RUN: llvm-objdump -td --no-show-raw-insn a.64s | FileCheck --check-prefixes=RELAX %s16 17# RUN: ld.lld --section-start=.text=0x10000 --section-start=.data=0x410000 a.32.o -o a.32o18# RUN: ld.lld --section-start=.text=0x10000 --section-start=.data=0x410000 a.64.o -o a.64o19# RUN: llvm-objdump -td --no-show-raw-insn a.32o | FileCheck --check-prefixes=NORELAX32 %s20# RUN: llvm-objdump -td --no-show-raw-insn a.64o | FileCheck --check-prefixes=NORELAX64 %s21 22# RELAX-LABEL: <_start>:23## offset = 0x14000 - 0x10000 = 4096<<224# RELAX-NEXT: 10000: pcaddi $a0, 409625# RELAX-NEXT: pcaddi $a0, 409526# RELAX-NEXT: pcaddi $a0, 409427# RELAX-NEXT: pcaddi $a0, 409328 29# NORELAX32-LABEL: <_start>:30## offset exceed range of pcaddi31## offset = 0x410000 - 0x10000: 0x400 pages, page offset 032# NORELAX32-NEXT: 10000: pcalau12i $a0, 102433# NORELAX32-NEXT: addi.w $a0, $a0, 034## Not relaxation, convertion to PCRel.35# NORELAX32-NEXT: pcalau12i $a0, 102436# NORELAX32-NEXT: addi.w $a0, $a0, 037# NORELAX32-NEXT: pcalau12i $a0, 102438# NORELAX32-NEXT: addi.w $a0, $a0, 039# NORELAX32-NEXT: pcalau12i $a0, 102440# NORELAX32-NEXT: addi.w $a0, $a0, 041 42# NORELAX64-LABEL: <_start>:43## offset exceed range of pcaddi44## offset = 0x410000 - 0x10000: 0x400 pages, page offset 045# NORELAX64-NEXT: 10000: pcalau12i $a0, 102446# NORELAX64-NEXT: addi.d $a0, $a0, 047## Not relaxation, convertion to PCRel.48# NORELAX64-NEXT: pcalau12i $a0, 102449# NORELAX64-NEXT: addi.d $a0, $a0, 050# NORELAX64-NEXT: pcalau12i $a0, 102451# NORELAX64-NEXT: addi.d $a0, $a0, 052# NORELAX64-NEXT: pcalau12i $a0, 102453# NORELAX64-NEXT: addi.d $a0, $a0, 054 55 56## GOT references with non-zero addends. No relaxation.57# RUN: llvm-mc --filetype=obj --triple=loongarch32 -mattr=+relax nonzero.s -o nonzero.32.o58# RUN: llvm-mc --filetype=obj --triple=loongarch64 -mattr=+relax nonzero.s -o nonzero.64.o59# RUN: ld.lld --section-start=.text=0x10000 --section-start=.data=0x14000 nonzero.32.o -o nonzero.3260# RUN: ld.lld --section-start=.text=0x10000 --section-start=.data=0x14000 nonzero.64.o -o nonzero.6461# RUN: llvm-objdump -td --no-show-raw-insn nonzero.32 | FileCheck --check-prefixes=NONZERO32 %s62# RUN: llvm-objdump -td --no-show-raw-insn nonzero.64 | FileCheck --check-prefixes=NONZERO64 %s63 64# NONZERO32-LABEL: <_start>:65# NONZERO32-NEXT: 10000: pcalau12i $a0, 466# NONZERO32-NEXT: ld.w $a0, $a0, 867 68# NONZERO64-LABEL: <_start>:69# NONZERO64-NEXT: 10000: pcalau12i $a0, 470# NONZERO64-NEXT: ld.d $a0, $a0, 1271 72 73#--- a.s74.section .text75.global _start76_start:77 la.local $a0, sym78 la.global $a0, sym79 la.pcrel $a0, sym80 la.got $a0, sym81 82.section .data83sym:84 .zero 485 86 87#--- nonzero.s88.section .text89.global _start90_start:91 la.got $a0, sym+492 93.section .data94sym:95 .zero 496