# REQUIRES: loongarch
# RUN: llvm-mc --filetype=obj --triple=loongarch32-unknown-elf %s -o %t.la32.o
# RUN: llvm-mc --filetype=obj --triple=loongarch64-unknown-elf %s -o %t.la64.o
# RUN: ld.lld %t.la32.o -o %t.la32
# RUN: ld.lld %t.la64.o -o %t.la64
# RUN: llvm-objdump -d --no-show-raw-insn %t.la32 | FileCheck %s
# RUN: llvm-objdump -d --no-show-raw-insn %t.la64 | FileCheck %s
# CHECK: pcalau12i $t0, -1
# CHECK-NEXT: jirl $ra, $t0, 564
# CHECK-NEXT: pcalau12i $t0, 0
# CHECK-NEXT: jirl $zero, $t0, -1348
## PLT shouldn't get generated in this case.
# CHECK-NOT: Disassembly of section .plt:
.p2align 12
.org 0x234
.global foo
foo:
li.w $a0, 42
ret
.org 0xabc
.global bar
bar:
li.w $a7, 94
syscall 0
.org 0x1000
.global _start
_start:
## The nops are for pushing the relocs off page boundary, to better see the
## page-aligned semantics in action.
nop
nop
nop
pcalau12i $t0, %pc_hi20(foo)
jirl $ra, $t0, %pc_lo12(foo)
pcalau12i $t0, %pc_hi20(bar)
jirl $zero, $t0, %pc_lo12(bar)