[ARM] Adjust how NEON shifts are lowered
[llvm-core.git] / test / ExecutionEngine / RuntimeDyld / AArch64 / ELF_ARM64_PIC_relocations.s
blob9d24903f65beebac64180c3581d0d8b6b0c17823
1 # RUN: rm -rf %t && mkdir -p %t
2 # RUN: llvm-mc -triple=arm64-none-linux-gnu -filetype=obj -o %t/pic-reloc.o %s
3 # RUN: llvm-rtdyld -triple=arm64-none-linux-gnu -verify -check=%s %t/pic-reloc.o \
4 # RUN: -map-section pic-reloc.o,.got=0x20000 -dummy-extern f=0x1234 -dummy-extern g=0x5678
6 _s:
7 nop
8 _a1:
9 adrp x8, :got:f
10 _a2:
11 adrp x9, :got:g
12 _a3:
13 adrp x10, :got:_s
14 _l1:
15 ldr x8, [x8, :got_lo12:f]
16 _l2:
17 ldr x9, [x9, :got_lo12:g]
18 _l3:
19 ldr x10, [x10, :got_lo12:_s]
22 ## We'll end up having two sections .text and .got,
23 ## each is located on the start of a memory page
25 ## Test that .got section has three entries pointing to f, g and _s
26 # *{8}section_addr(pic-reloc.o, .got) = f
27 # *{8}(section_addr(pic-reloc.o, .got) + 8) = g
28 # *{8}(section_addr(pic-reloc.o, .got) + 16) = _s
30 ## Test that first adrp instruction really takes address of
31 ## the .got section (_s label is on the start of a page)
32 # rtdyld-check: _s + (((*{4}_a1)[30:29] + ((*{4}_a1)[23:5] << 2)) << 12) = section_addr(pic-reloc.o, .got)
34 ## Test that second adrp takes address of .got
35 # rtdyld-check: _s + (((*{4}_a2)[30:29] + ((*{4}_a2)[23:5] << 2)) << 12) = section_addr(pic-reloc.o, .got)
37 ## Test that third adrp takes address of .got
38 # rtdyld-check: _s + (((*{4}_a3)[30:29] + ((*{4}_a3)[23:5] << 2)) << 12) = section_addr(pic-reloc.o, .got)
40 ## Test that first ldr immediate value is 0 >> 3 = 0 (1st .got entry)
41 # rtdyld-check: (*{4}_l1)[21:10] = 0
43 ## Test that second ldr immediate value is 8 >> 3 = 1 (2nd .got entry)
44 # rtdyld-check: (*{4}_l2)[21:10] = 1
46 ## Test that third ldr immediate value is 16 >> 3 = 2 (3rd .got entry, addend is 0)
47 # rtdyld-check: (*{4}_l3)[21:10] = 2