================ @@ -0,0 +1,115 @@ +# REQUIRES: loongarch + +# RUN: llvm-mc --filetype=obj --triple=loongarch32 -mattr=+relax --defsym ELF32=1 %s -o %t.32.o +# RUN: llvm-mc --filetype=obj --triple=loongarch64 -mattr=+relax %s -o %t.64.o + +# RUN: ld.lld %t.32.o -o %t.32 +# RUN: llvm-objdump -d --no-show-raw-insn %t.32 | FileCheck --check-prefixes=RELAX32 %s + +# RUN: ld.lld %t.64.o -o %t.64 +# RUN: llvm-objdump -d --no-show-raw-insn %t.64 | FileCheck --check-prefixes=RELAX64 %s + +# RELAX32-LABEL: <_start>: +## .LANCHOR0@tprel = 8 +# RELAX32-NEXT: addi.w $a0, $tp, 8 +# RELAX32-NEXT: ld.w $a1, $a0, 0 +# RELAX32-NEXT: ld.w $a2, $tp, 8 +## .a@tprel - 4 = 0x7fc +# RELAX32-NEXT: addi.w $a1, $zero, 1 +# RELAX32-NEXT: addi.w $a1, $a1, 2 +# RELAX32-NEXT: st.w $a1, $tp, 2044 +## .a@tprel = 0x800 +# RELAX32-NEXT: lu12i.w $a0, 1 +# RELAX32-NEXT: add.w $a0, $a0, $tp +# RELAX32-NEXT: addi.w $a0, $a0, -2048 + +# RELAX64-LABEL: <_start>: +## .LANCHOR0@tprel = 8 +# RELAX64-NEXT: addi.d $a0, $tp, 8 +# RELAX64-NEXT: ld.d $a1, $a0, 0 +# RELAX64-NEXT: ld.d $a2, $tp, 8 +## .a@tprel - 4 = 0x7fc +# RELAX64-NEXT: addi.d $a1, $zero, 1 +# RELAX64-NEXT: addi.d $a1, $a1, 2 +# RELAX64-NEXT: st.d $a1, $tp, 2044 +## .a@tprel = 0x800 +# RELAX64-NEXT: lu12i.w $a0, 1 +# RELAX64-NEXT: add.d $a0, $a0, $tp +# RELAX64-NEXT: addi.d $a0, $a0, -2048 + +.macro add dst, src1, src2, src3 +.ifdef ELF32 +add.w \dst, \src1, \src2, \src3 +.else +add.d \dst, \src1, \src2, \src3 +.endif +.endm +.macro inst op dst, src1, src2 +.ifdef ELF32 + .ifc \op, addi + addi.w \dst, \src1, \src2 + .else; .ifc \op, ld + ld.w \dst, \src1, \src2 + .else; .ifc \op, st + st.w \dst, \src1, \src2 + .else; .ifc \op, ldptr + ldptr.w \dst, \src1, \src2 + .else + .error "Unknown op in ELF32 mode" + .endif; .endif; .endif; .endif +.else + .ifc \op, addi + addi.d \dst, \src1, \src2 + .else; .ifc \op, ld + ld.d \dst, \src1, \src2 + .else; .ifc \op, st + st.d \dst, \src1, \src2 + .else; .ifc \op, ldptr + ldptr.d \dst, \src1, \src2 + .else + .error "Unknown op in ELF64 mode" + .endif; .endif; .endif; .endif +.endif +.endm + +.macro addi dst, src1, src2 +inst addi \dst, \src1, \src2 +.endm +.macro ld dst, src1, src2 +inst ld \dst, \src1, \src2 +.endm +.macro st dst, src1, src2 +inst st \dst, \src1, \src2 +.endm +.macro ldptr dst, src1, src2 +inst ldptr \dst, \src1, \src2 +.endm + +_start: +## Test instructions not in pairs. +lu12i.w $a0, %le_hi20_r(.LANCHOR0) ---------------- xen0n wrote:
Yeah, the instructions should be indented by 2 or 4 spaces for readability. We should re-format some test cases e.g. `loongarch-tlsdesc.s` as well in a separate change. https://github.com/llvm/llvm-project/pull/123600 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits