diff options
Diffstat (limited to 'test/ELF/ppc64-got-off.s')
-rw-r--r-- | test/ELF/ppc64-got-off.s | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/test/ELF/ppc64-got-off.s b/test/ELF/ppc64-got-off.s new file mode 100644 index 000000000000..d3dff2262502 --- /dev/null +++ b/test/ELF/ppc64-got-off.s @@ -0,0 +1,67 @@ +# REQUIRES: ppc + +# RUN: llvm-mc -filetype=obj -triple=powerpc64le-unknown-linux %s -o %t.o +# RUN: ld.lld -shared --no-toc-optimize %t.o -o %t +# RUN: llvm-objdump -d %t | FileCheck %s + +# RUN: llvm-mc -filetype=obj -triple=powerpc64-unknown-linux %s -o %t.o +# RUN: ld.lld -shared --no-toc-optimize %t.o -o %t +# RUN: llvm-objdump -d %t | FileCheck %s + +# RUN: llvm-mc -filetype=obj -triple=powerpc64le-unknown-linux %s -o %t.o +# RUN: ld.lld -shared %t.o -o %t +# RUN: llvm-objdump -d %t | FileCheck --check-prefix=OPT %s + +# RUN: llvm-mc -filetype=obj -triple=powerpc64-unknown-linux %s -o %t.o +# RUN: ld.lld -shared %t.o -o %t +# RUN: llvm-objdump -d %t | FileCheck --check-prefix=OPT %s + + .abiversion 2 + .section ".text" + + .p2align 2 + .global func + .type func, @function +func: +.Lfunc_gep: + addis 2, 12, .TOC.-.Lfunc_gep@ha + addi 2, 2, .TOC.-.Lfunc_gep@l +.Lfunc_lep: + .localentry func, .-func + addis 3, 2, a@got@ha + ld 3, a@got@l(3) + ld 4, a@got(2) + lis 5, a@got@h + ori 5, 5, a@got@l + li 6, 0 + ori 6, 6, a@got + blr + +# CHECK-LABEL: func +# CHECK: addis 3, 2, 0 +# CHECK-NEXT: ld 3, -32760(3) +# CHECK-NEXT: ld 4, -32760(2) +# CHECK-NEXT: lis 5, -1 +# CHECK-NEXT: ori 5, 5, 32776 +# CHECK-NEXT: li 6, 0 +# CHECK-NEXT: ori 6, 6, 32776 + +# OPT-LABEL: func +# OPT: nop +# OPT-NEXT: ld 3, -32760(2) +# OPT-NEXT: ld 4, -32760(2) +# OPT-NEXT: lis 5, -1 +# OPT-NEXT: ori 5, 5, 32776 +# OPT-NEXT: li 6, 0 +# OPT-NEXT: ori 6, 6, 32776 + +# Since the got entry for a is .got[1] and the TOC base points to +# .got + 0x8000, the offset for a@got is -0x7FF8 --> -32760 + + .section ".data" + .global a + .type a, @object + .size a, 4 + .p2align 2 +a: + .long 0x1000 |