xref: /llvm-project/compiler-rt/test/orc/TestCases/Darwin/arm64/trivial-tlv.S (revision 3d13ee28914d88a839a57c54b1f7eeae6b0ef4ca)
1// Test that basic MachO TLVs work by adding together TLVs with values
2// 0, 1, and -1, and returning the result (0 for success). This setup
3// tests both zero-initialized (__thread_bss) and non-zero-initialized
4// (__thread_data) secitons.
5//
6// RUN: %clang -c -o %t %s
7// RUN: %llvm_jitlink %t
8
9  .section  __TEXT,__text,regular,pure_instructions
10  .build_version macos, 12, 0 sdk_version 12, 0
11  .globl  _main                           ; -- Begin function main
12  .p2align  2
13_main:                                  ; @main
14  .cfi_startproc
15; %bb.0:
16  sub sp, sp, #32                     ; =32
17  stp x29, x30, [sp, #16]             ; 16-byte Folded Spill
18  add x29, sp, #16                    ; =16
19  .cfi_def_cfa w29, 16
20  .cfi_offset w30, -8
21  .cfi_offset w29, -16
22  adrp  x0, _x@TLVPPAGE
23  ldr x0, [x0, _x@TLVPPAGEOFF]
24  ldr x8, [x0]
25  blr x8
26  mov x8, x0
27  adrp  x0, _y@TLVPPAGE
28  ldr x0, [x0, _y@TLVPPAGEOFF]
29  ldr x9, [x0]
30  blr x9
31  mov x9, x0
32  adrp  x0, _z@TLVPPAGE
33  ldr x0, [x0, _z@TLVPPAGEOFF]
34  ldr x10, [x0]
35  blr x10
36  stur  wzr, [x29, #-4]
37  ldr w8, [x8]
38  ldr w9, [x9]
39  add w8, w8, w9
40  ldr w9, [x0]
41  add w0, w8, w9
42  ldp x29, x30, [sp, #16]             ; 16-byte Folded Reload
43  add sp, sp, #32                     ; =32
44  ret
45  .cfi_endproc
46                                        ; -- End function
47.tbss _x$tlv$init, 4, 2                 ; @x
48
49  .section  __DATA,__thread_vars,thread_local_variables
50  .globl  _x
51_x:
52  .quad __tlv_bootstrap
53  .quad 0
54  .quad _x$tlv$init
55
56  .section  __DATA,__thread_data,thread_local_regular
57  .p2align  2                               ; @y
58_y$tlv$init:
59  .long 4294967295                      ; 0xffffffff
60
61  .section  __DATA,__thread_vars,thread_local_variables
62  .globl  _y
63_y:
64  .quad __tlv_bootstrap
65  .quad 0
66  .quad _y$tlv$init
67
68  .section  __DATA,__thread_data,thread_local_regular
69  .p2align  2                               ; @z
70_z$tlv$init:
71  .long 1                               ; 0x1
72
73  .section  __DATA,__thread_vars,thread_local_variables
74  .globl  _z
75_z:
76  .quad __tlv_bootstrap
77  .quad 0
78  .quad _z$tlv$init
79
80.subsections_via_symbols
81