xref: /aosp_15_r20/external/llvm/test/MC/AArch64/arm64-tls-relocs.s (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker// RUN: llvm-mc -triple=arm64-none-linux-gnu -show-encoding < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker// RUN: llvm-mc -triple=arm64-none-linux-gnu -filetype=obj < %s -o - | \
3*9880d681SAndroid Build Coastguard Worker// RUN:   llvm-readobj -r -t | FileCheck --check-prefix=CHECK-ELF %s
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Worker////////////////////////////////////////////////////////////////////////////////
7*9880d681SAndroid Build Coastguard Worker// TLS initial-exec forms
8*9880d681SAndroid Build Coastguard Worker////////////////////////////////////////////////////////////////////////////////
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Worker        movz x15, #:gottprel_g1:var
11*9880d681SAndroid Build Coastguard Worker// CHECK: movz    x15, #:gottprel_g1:var  // encoding: [0bAAA01111,A,0b101AAAAA,0x92]
12*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :gottprel_g1:var, kind: fixup_aarch64_movw
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Worker// CHECK-ELF:     {{0x[0-9A-F]+}} R_AARCH64_TLSIE_MOVW_GOTTPREL_G1 [[VARSYM:[^ ]+]]
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Worker        movk x13, #:gottprel_g0_nc:var
18*9880d681SAndroid Build Coastguard Worker// CHECK: movk    x13, #:gottprel_g0_nc:var // encoding: [0bAAA01101,A,0b100AAAAA,0xf2]
19*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :gottprel_g0_nc:var, kind: fixup_aarch64_movw
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC [[VARSYM]]
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Worker        adrp x11, :gottprel:var
25*9880d681SAndroid Build Coastguard Worker        ldr x10, [x0, #:gottprel_lo12:var]
26*9880d681SAndroid Build Coastguard Worker        ldr x9, :gottprel:var
27*9880d681SAndroid Build Coastguard Worker// CHECK: adrp    x11, :gottprel:var      // encoding: [0x0b'A',A,A,0x90'A']
28*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :gottprel:var, kind: fixup_aarch64_pcrel_adrp_imm21
29*9880d681SAndroid Build Coastguard Worker// CHECK: ldr     x10, [x0, :gottprel_lo12:var] // encoding: [0x0a,0bAAAAAA00,0b01AAAAAA,0xf9]
30*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :gottprel_lo12:var, kind: fixup_aarch64_ldst_imm12_scale8
31*9880d681SAndroid Build Coastguard Worker// CHECK: ldr     x9, :gottprel:var       // encoding: [0bAAA01001,A,A,0x58]
32*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :gottprel:var, kind: fixup_aarch64_ldr_pcrel_imm19
33*9880d681SAndroid Build Coastguard Worker
34*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 [[VARSYM]]
35*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC [[VARSYM]]
36*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSIE_LD_GOTTPREL_PREL19 [[VARSYM]]
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Worker////////////////////////////////////////////////////////////////////////////////
40*9880d681SAndroid Build Coastguard Worker// TLS local-exec forms
41*9880d681SAndroid Build Coastguard Worker////////////////////////////////////////////////////////////////////////////////
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Worker        movz x3, #:tprel_g2:var
44*9880d681SAndroid Build Coastguard Worker        movn x4, #:tprel_g2:var
45*9880d681SAndroid Build Coastguard Worker// CHECK: movz    x3, #:tprel_g2:var      // encoding: [0bAAA00011,A,0b110AAAAA,0x92]
46*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g2:var, kind: fixup_aarch64_movw
47*9880d681SAndroid Build Coastguard Worker// CHECK: movn    x4, #:tprel_g2:var      // encoding: [0bAAA00100,A,0b110AAAAA,0x92]
48*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g2:var, kind: fixup_aarch64_movw
49*9880d681SAndroid Build Coastguard Worker
50*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLE_MOVW_TPREL_G2 [[VARSYM]]
51*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLE_MOVW_TPREL_G2 [[VARSYM]]
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Worker
54*9880d681SAndroid Build Coastguard Worker        movz x5, #:tprel_g1:var
55*9880d681SAndroid Build Coastguard Worker        movn x6, #:tprel_g1:var
56*9880d681SAndroid Build Coastguard Worker        movz w7, #:tprel_g1:var
57*9880d681SAndroid Build Coastguard Worker// CHECK: movz    x5, #:tprel_g1:var      // encoding: [0bAAA00101,A,0b101AAAAA,0x92]
58*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g1:var, kind: fixup_aarch64_movw
59*9880d681SAndroid Build Coastguard Worker// CHECK: movn    x6, #:tprel_g1:var      // encoding: [0bAAA00110,A,0b101AAAAA,0x92]
60*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g1:var, kind: fixup_aarch64_movw
61*9880d681SAndroid Build Coastguard Worker// CHECK: movz    w7, #:tprel_g1:var      // encoding: [0bAAA00111,A,0b101AAAAA,0x12]
62*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g1:var, kind: fixup_aarch64_movw
63*9880d681SAndroid Build Coastguard Worker
64*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLE_MOVW_TPREL_G1 [[VARSYM]]
65*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLE_MOVW_TPREL_G1 [[VARSYM]]
66*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLE_MOVW_TPREL_G1 [[VARSYM]]
67*9880d681SAndroid Build Coastguard Worker
68*9880d681SAndroid Build Coastguard Worker
69*9880d681SAndroid Build Coastguard Worker        movk x9, #:tprel_g1_nc:var
70*9880d681SAndroid Build Coastguard Worker        movk w10, #:tprel_g1_nc:var
71*9880d681SAndroid Build Coastguard Worker// CHECK: movk    x9, #:tprel_g1_nc:var   // encoding: [0bAAA01001,A,0b101AAAAA,0xf2]
72*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g1_nc:var, kind: fixup_aarch64_movw
73*9880d681SAndroid Build Coastguard Worker// CHECK: movk    w10, #:tprel_g1_nc:var  // encoding: [0bAAA01010,A,0b101AAAAA,0x72]
74*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g1_nc:var, kind: fixup_aarch64_movw
75*9880d681SAndroid Build Coastguard Worker
76*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLE_MOVW_TPREL_G1_NC [[VARSYM]]
77*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLE_MOVW_TPREL_G1_NC [[VARSYM]]
78*9880d681SAndroid Build Coastguard Worker
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Worker        movz x11, #:tprel_g0:var
81*9880d681SAndroid Build Coastguard Worker        movn x12, #:tprel_g0:var
82*9880d681SAndroid Build Coastguard Worker        movz w13, #:tprel_g0:var
83*9880d681SAndroid Build Coastguard Worker// CHECK: movz    x11, #:tprel_g0:var     // encoding: [0bAAA01011,A,0b100AAAAA,0x92]
84*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g0:var, kind: fixup_aarch64_movw
85*9880d681SAndroid Build Coastguard Worker// CHECK: movn    x12, #:tprel_g0:var     // encoding: [0bAAA01100,A,0b100AAAAA,0x92]
86*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g0:var, kind: fixup_aarch64_movw
87*9880d681SAndroid Build Coastguard Worker// CHECK: movz    w13, #:tprel_g0:var     // encoding: [0bAAA01101,A,0b100AAAAA,0x12]
88*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g0:var, kind: fixup_aarch64_movw
89*9880d681SAndroid Build Coastguard Worker
90*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLE_MOVW_TPREL_G0 [[VARSYM]]
91*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLE_MOVW_TPREL_G0 [[VARSYM]]
92*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLE_MOVW_TPREL_G0 [[VARSYM]]
93*9880d681SAndroid Build Coastguard Worker
94*9880d681SAndroid Build Coastguard Worker
95*9880d681SAndroid Build Coastguard Worker        movk x15, #:tprel_g0_nc:var
96*9880d681SAndroid Build Coastguard Worker        movk w16, #:tprel_g0_nc:var
97*9880d681SAndroid Build Coastguard Worker// CHECK: movk    x15, #:tprel_g0_nc:var  // encoding: [0bAAA01111,A,0b100AAAAA,0xf2]
98*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g0_nc:var, kind: fixup_aarch64_movw
99*9880d681SAndroid Build Coastguard Worker// CHECK: movk    w16, #:tprel_g0_nc:var  // encoding: [0bAAA10000,A,0b100AAAAA,0x72]
100*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g0_nc:var, kind: fixup_aarch64_movw
101*9880d681SAndroid Build Coastguard Worker
102*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLE_MOVW_TPREL_G0_NC [[VARSYM]]
103*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLE_MOVW_TPREL_G0_NC [[VARSYM]]
104*9880d681SAndroid Build Coastguard Worker
105*9880d681SAndroid Build Coastguard Worker
106*9880d681SAndroid Build Coastguard Worker        add x21, x22, #:tprel_lo12:var
107*9880d681SAndroid Build Coastguard Worker// CHECK: add     x21, x22, :tprel_lo12:var // encoding: [0xd5,0bAAAAAA10,0b00AAAAAA,0x91]
108*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12:var, kind: fixup_aarch64_add_imm12
109*9880d681SAndroid Build Coastguard Worker
110*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLE_ADD_TPREL_LO12 [[VARSYM]]
111*9880d681SAndroid Build Coastguard Worker
112*9880d681SAndroid Build Coastguard Worker
113*9880d681SAndroid Build Coastguard Worker        add x25, x26, #:tprel_lo12_nc:var
114*9880d681SAndroid Build Coastguard Worker// CHECK: add     x25, x26, :tprel_lo12_nc:var // encoding: [0x59,0bAAAAAA11,0b00AAAAAA,0x91]
115*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12_nc:var, kind: fixup_aarch64_add_imm12
116*9880d681SAndroid Build Coastguard Worker
117*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLE_ADD_TPREL_LO12_NC [[VARSYM]]
118*9880d681SAndroid Build Coastguard Worker
119*9880d681SAndroid Build Coastguard Worker
120*9880d681SAndroid Build Coastguard Worker        ldrb w29, [x30, #:tprel_lo12:var]
121*9880d681SAndroid Build Coastguard Worker        ldrsb x29, [x28, #:tprel_lo12_nc:var]
122*9880d681SAndroid Build Coastguard Worker// CHECK: ldrb    w29, [x30, :tprel_lo12:var] // encoding: [0xdd,0bAAAAAA11,0b01AAAAAA,0x39]
123*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12:var, kind: fixup_aarch64_ldst_imm12_scale1
124*9880d681SAndroid Build Coastguard Worker// CHECK: ldrsb   x29, [x28, :tprel_lo12_nc:var] // encoding: [0x9d,0bAAAAAA11,0b10AAAAAA,0x39]
125*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12_nc:var, kind: fixup_aarch64_ldst_imm12_scale1
126*9880d681SAndroid Build Coastguard Worker
127*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLE_LDST8_TPREL_LO12 [[VARSYM]]
128*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC [[VARSYM]]
129*9880d681SAndroid Build Coastguard Worker
130*9880d681SAndroid Build Coastguard Worker
131*9880d681SAndroid Build Coastguard Worker        strh w27, [x26, #:tprel_lo12:var]
132*9880d681SAndroid Build Coastguard Worker        ldrsh x25, [x24, #:tprel_lo12_nc:var]
133*9880d681SAndroid Build Coastguard Worker// CHECK: strh    w27, [x26, :tprel_lo12:var] // encoding: [0x5b,0bAAAAAA11,0b00AAAAAA,0x79]
134*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12:var, kind: fixup_aarch64_ldst_imm12_scale2
135*9880d681SAndroid Build Coastguard Worker// CHECK: ldrsh   x25, [x24, :tprel_lo12_nc:var] // encoding: [0x19,0bAAAAAA11,0b10AAAAAA,0x79]
136*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12_nc:var, kind: fixup_aarch64_ldst_imm12_scale2
137*9880d681SAndroid Build Coastguard Worker
138*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLE_LDST16_TPREL_LO12 [[VARSYM]]
139*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC [[VARSYM]]
140*9880d681SAndroid Build Coastguard Worker
141*9880d681SAndroid Build Coastguard Worker
142*9880d681SAndroid Build Coastguard Worker        ldr w23, [x22, #:tprel_lo12:var]
143*9880d681SAndroid Build Coastguard Worker        ldrsw x21, [x20, #:tprel_lo12_nc:var]
144*9880d681SAndroid Build Coastguard Worker// CHECK: ldr     w23, [x22, :tprel_lo12:var] // encoding: [0xd7,0bAAAAAA10,0b01AAAAAA,0xb9]
145*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12:var, kind: fixup_aarch64_ldst_imm12_scale4
146*9880d681SAndroid Build Coastguard Worker// CHECK: ldrsw   x21, [x20, :tprel_lo12_nc:var] // encoding: [0x95,0bAAAAAA10,0b10AAAAAA,0xb9]
147*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12_nc:var, kind: fixup_aarch64_ldst_imm12_scale4
148*9880d681SAndroid Build Coastguard Worker
149*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLE_LDST32_TPREL_LO12 [[VARSYM]]
150*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC [[VARSYM]]
151*9880d681SAndroid Build Coastguard Worker
152*9880d681SAndroid Build Coastguard Worker        ldr x19, [x18, #:tprel_lo12:var]
153*9880d681SAndroid Build Coastguard Worker        str x17, [x16, #:tprel_lo12_nc:var]
154*9880d681SAndroid Build Coastguard Worker// CHECK: ldr     x19, [x18, :tprel_lo12:var] // encoding: [0x53,0bAAAAAA10,0b01AAAAAA,0xf9]
155*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12:var, kind: fixup_aarch64_ldst_imm12_scale8
156*9880d681SAndroid Build Coastguard Worker// CHECK: str     x17, [x16, :tprel_lo12_nc:var] // encoding: [0x11,0bAAAAAA10,0b00AAAAAA,0xf9]
157*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12_nc:var, kind: fixup_aarch64_ldst_imm12_scale8
158*9880d681SAndroid Build Coastguard Worker
159*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLE_LDST64_TPREL_LO12 [[VARSYM]]
160*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC [[VARSYM]]
161*9880d681SAndroid Build Coastguard Worker
162*9880d681SAndroid Build Coastguard Worker
163*9880d681SAndroid Build Coastguard Worker////////////////////////////////////////////////////////////////////////////////
164*9880d681SAndroid Build Coastguard Worker// TLS local-dynamic forms
165*9880d681SAndroid Build Coastguard Worker////////////////////////////////////////////////////////////////////////////////
166*9880d681SAndroid Build Coastguard Worker
167*9880d681SAndroid Build Coastguard Worker        movz x3, #:dtprel_g2:var
168*9880d681SAndroid Build Coastguard Worker        movn x4, #:dtprel_g2:var
169*9880d681SAndroid Build Coastguard Worker// CHECK: movz    x3, #:dtprel_g2:var      // encoding: [0bAAA00011,A,0b110AAAAA,0x92]
170*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g2:var, kind: fixup_aarch64_movw
171*9880d681SAndroid Build Coastguard Worker// CHECK: movn    x4, #:dtprel_g2:var      // encoding: [0bAAA00100,A,0b110AAAAA,0x92]
172*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g2:var, kind: fixup_aarch64_movw
173*9880d681SAndroid Build Coastguard Worker
174*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G2 [[VARSYM]]
175*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G2 [[VARSYM]]
176*9880d681SAndroid Build Coastguard Worker
177*9880d681SAndroid Build Coastguard Worker
178*9880d681SAndroid Build Coastguard Worker        movz x5, #:dtprel_g1:var
179*9880d681SAndroid Build Coastguard Worker        movn x6, #:dtprel_g1:var
180*9880d681SAndroid Build Coastguard Worker        movz w7, #:dtprel_g1:var
181*9880d681SAndroid Build Coastguard Worker// CHECK: movz    x5, #:dtprel_g1:var      // encoding: [0bAAA00101,A,0b101AAAAA,0x92]
182*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g1:var, kind: fixup_aarch64_movw
183*9880d681SAndroid Build Coastguard Worker// CHECK: movn    x6, #:dtprel_g1:var      // encoding: [0bAAA00110,A,0b101AAAAA,0x92]
184*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g1:var, kind: fixup_aarch64_movw
185*9880d681SAndroid Build Coastguard Worker// CHECK: movz    w7, #:dtprel_g1:var      // encoding: [0bAAA00111,A,0b101AAAAA,0x12]
186*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g1:var, kind: fixup_aarch64_movw
187*9880d681SAndroid Build Coastguard Worker
188*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G1 [[VARSYM]]
189*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G1 [[VARSYM]]
190*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G1 [[VARSYM]]
191*9880d681SAndroid Build Coastguard Worker
192*9880d681SAndroid Build Coastguard Worker
193*9880d681SAndroid Build Coastguard Worker        movk x9, #:dtprel_g1_nc:var
194*9880d681SAndroid Build Coastguard Worker        movk w10, #:dtprel_g1_nc:var
195*9880d681SAndroid Build Coastguard Worker// CHECK: movk    x9, #:dtprel_g1_nc:var   // encoding: [0bAAA01001,A,0b101AAAAA,0xf2]
196*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g1_nc:var, kind: fixup_aarch64_movw
197*9880d681SAndroid Build Coastguard Worker// CHECK: movk    w10, #:dtprel_g1_nc:var  // encoding: [0bAAA01010,A,0b101AAAAA,0x72]
198*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g1_nc:var, kind: fixup_aarch64_movw
199*9880d681SAndroid Build Coastguard Worker
200*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC [[VARSYM]]
201*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC [[VARSYM]]
202*9880d681SAndroid Build Coastguard Worker
203*9880d681SAndroid Build Coastguard Worker
204*9880d681SAndroid Build Coastguard Worker        movz x11, #:dtprel_g0:var
205*9880d681SAndroid Build Coastguard Worker        movn x12, #:dtprel_g0:var
206*9880d681SAndroid Build Coastguard Worker        movz w13, #:dtprel_g0:var
207*9880d681SAndroid Build Coastguard Worker// CHECK: movz    x11, #:dtprel_g0:var     // encoding: [0bAAA01011,A,0b100AAAAA,0x92]
208*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g0:var, kind: fixup_aarch64_movw
209*9880d681SAndroid Build Coastguard Worker// CHECK: movn    x12, #:dtprel_g0:var     // encoding: [0bAAA01100,A,0b100AAAAA,0x92]
210*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g0:var, kind: fixup_aarch64_movw
211*9880d681SAndroid Build Coastguard Worker// CHECK: movz    w13, #:dtprel_g0:var     // encoding: [0bAAA01101,A,0b100AAAAA,0x12]
212*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g0:var, kind: fixup_aarch64_movw
213*9880d681SAndroid Build Coastguard Worker
214*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G0 [[VARSYM]]
215*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G0 [[VARSYM]]
216*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G0 [[VARSYM]]
217*9880d681SAndroid Build Coastguard Worker
218*9880d681SAndroid Build Coastguard Worker
219*9880d681SAndroid Build Coastguard Worker        movk x15, #:dtprel_g0_nc:var
220*9880d681SAndroid Build Coastguard Worker        movk w16, #:dtprel_g0_nc:var
221*9880d681SAndroid Build Coastguard Worker// CHECK: movk    x15, #:dtprel_g0_nc:var  // encoding: [0bAAA01111,A,0b100AAAAA,0xf2]
222*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g0_nc:var, kind: fixup_aarch64_movw
223*9880d681SAndroid Build Coastguard Worker// CHECK: movk    w16, #:dtprel_g0_nc:var  // encoding: [0bAAA10000,A,0b100AAAAA,0x72]
224*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g0_nc:var, kind: fixup_aarch64_movw
225*9880d681SAndroid Build Coastguard Worker
226*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC [[VARSYM]]
227*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC [[VARSYM]]
228*9880d681SAndroid Build Coastguard Worker
229*9880d681SAndroid Build Coastguard Worker
230*9880d681SAndroid Build Coastguard Worker        add x21, x22, #:dtprel_lo12:var
231*9880d681SAndroid Build Coastguard Worker// CHECK: add     x21, x22, :dtprel_lo12:var // encoding: [0xd5,0bAAAAAA10,0b00AAAAAA,0x91]
232*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12:var, kind: fixup_aarch64_add_imm12
233*9880d681SAndroid Build Coastguard Worker
234*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLD_ADD_DTPREL_LO12 [[VARSYM]]
235*9880d681SAndroid Build Coastguard Worker
236*9880d681SAndroid Build Coastguard Worker
237*9880d681SAndroid Build Coastguard Worker        add x25, x26, #:dtprel_lo12_nc:var
238*9880d681SAndroid Build Coastguard Worker// CHECK: add     x25, x26, :dtprel_lo12_nc:var // encoding: [0x59,0bAAAAAA11,0b00AAAAAA,0x91]
239*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12_nc:var, kind: fixup_aarch64_add_imm12
240*9880d681SAndroid Build Coastguard Worker
241*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC [[VARSYM]]
242*9880d681SAndroid Build Coastguard Worker
243*9880d681SAndroid Build Coastguard Worker
244*9880d681SAndroid Build Coastguard Worker        ldrb w29, [x30, #:dtprel_lo12:var]
245*9880d681SAndroid Build Coastguard Worker        ldrsb x29, [x28, #:dtprel_lo12_nc:var]
246*9880d681SAndroid Build Coastguard Worker// CHECK: ldrb    w29, [x30, :dtprel_lo12:var] // encoding: [0xdd,0bAAAAAA11,0b01AAAAAA,0x39]
247*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12:var, kind: fixup_aarch64_ldst_imm12_scale1
248*9880d681SAndroid Build Coastguard Worker// CHECK: ldrsb   x29, [x28, :dtprel_lo12_nc:var] // encoding: [0x9d,0bAAAAAA11,0b10AAAAAA,0x39]
249*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12_nc:var, kind: fixup_aarch64_ldst_imm12_scale1
250*9880d681SAndroid Build Coastguard Worker
251*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLD_LDST8_DTPREL_LO12 [[VARSYM]]
252*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC [[VARSYM]]
253*9880d681SAndroid Build Coastguard Worker
254*9880d681SAndroid Build Coastguard Worker
255*9880d681SAndroid Build Coastguard Worker        strh w27, [x26, #:dtprel_lo12:var]
256*9880d681SAndroid Build Coastguard Worker        ldrsh x25, [x24, #:dtprel_lo12_nc:var]
257*9880d681SAndroid Build Coastguard Worker// CHECK: strh    w27, [x26, :dtprel_lo12:var] // encoding: [0x5b,0bAAAAAA11,0b00AAAAAA,0x79]
258*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12:var, kind: fixup_aarch64_ldst_imm12_scale2
259*9880d681SAndroid Build Coastguard Worker// CHECK: ldrsh   x25, [x24, :dtprel_lo12_nc:var] // encoding: [0x19,0bAAAAAA11,0b10AAAAAA,0x79]
260*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12_nc:var, kind: fixup_aarch64_ldst_imm12_scale2
261*9880d681SAndroid Build Coastguard Worker
262*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLD_LDST16_DTPREL_LO12 [[VARSYM]]
263*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC [[VARSYM]]
264*9880d681SAndroid Build Coastguard Worker
265*9880d681SAndroid Build Coastguard Worker
266*9880d681SAndroid Build Coastguard Worker        ldr w23, [x22, #:dtprel_lo12:var]
267*9880d681SAndroid Build Coastguard Worker        ldrsw x21, [x20, #:dtprel_lo12_nc:var]
268*9880d681SAndroid Build Coastguard Worker// CHECK: ldr     w23, [x22, :dtprel_lo12:var] // encoding: [0xd7,0bAAAAAA10,0b01AAAAAA,0xb9]
269*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12:var, kind: fixup_aarch64_ldst_imm12_scale4
270*9880d681SAndroid Build Coastguard Worker// CHECK: ldrsw   x21, [x20, :dtprel_lo12_nc:var] // encoding: [0x95,0bAAAAAA10,0b10AAAAAA,0xb9]
271*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12_nc:var, kind: fixup_aarch64_ldst_imm12_scale4
272*9880d681SAndroid Build Coastguard Worker
273*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLD_LDST32_DTPREL_LO12 [[VARSYM]]
274*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC [[VARSYM]]
275*9880d681SAndroid Build Coastguard Worker
276*9880d681SAndroid Build Coastguard Worker        ldr x19, [x18, #:dtprel_lo12:var]
277*9880d681SAndroid Build Coastguard Worker        str x17, [x16, #:dtprel_lo12_nc:var]
278*9880d681SAndroid Build Coastguard Worker// CHECK: ldr     x19, [x18, :dtprel_lo12:var] // encoding: [0x53,0bAAAAAA10,0b01AAAAAA,0xf9]
279*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12:var, kind: fixup_aarch64_ldst_imm12_scale8
280*9880d681SAndroid Build Coastguard Worker// CHECK: str     x17, [x16, :dtprel_lo12_nc:var] // encoding: [0x11,0bAAAAAA10,0b00AAAAAA,0xf9]
281*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12_nc:var, kind: fixup_aarch64_ldst_imm12_scale8
282*9880d681SAndroid Build Coastguard Worker
283*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLD_LDST64_DTPREL_LO12 [[VARSYM]]
284*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC [[VARSYM]]
285*9880d681SAndroid Build Coastguard Worker
286*9880d681SAndroid Build Coastguard Worker////////////////////////////////////////////////////////////////////////////////
287*9880d681SAndroid Build Coastguard Worker// TLS descriptor forms
288*9880d681SAndroid Build Coastguard Worker////////////////////////////////////////////////////////////////////////////////
289*9880d681SAndroid Build Coastguard Worker
290*9880d681SAndroid Build Coastguard Worker        adrp x8, :tlsdesc:var
291*9880d681SAndroid Build Coastguard Worker        ldr x7, [x6, #:tlsdesc_lo12:var]
292*9880d681SAndroid Build Coastguard Worker        add x5, x4, #:tlsdesc_lo12:var
293*9880d681SAndroid Build Coastguard Worker        .tlsdesccall var
294*9880d681SAndroid Build Coastguard Worker        blr x3
295*9880d681SAndroid Build Coastguard Worker
296*9880d681SAndroid Build Coastguard Worker// CHECK: adrp    x8, :tlsdesc:var        // encoding: [0x08'A',A,A,0x90'A']
297*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tlsdesc:var, kind: fixup_aarch64_pcrel_adrp_imm21
298*9880d681SAndroid Build Coastguard Worker// CHECK: ldr     x7, [x6, :tlsdesc_lo12:var] // encoding: [0xc7,0bAAAAAA00,0b01AAAAAA,0xf9]
299*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tlsdesc_lo12:var, kind: fixup_aarch64_ldst_imm12_scale8
300*9880d681SAndroid Build Coastguard Worker// CHECK: add     x5, x4, :tlsdesc_lo12:var // encoding: [0x85,0bAAAAAA00,0b00AAAAAA,0x91]
301*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tlsdesc_lo12:var, kind: fixup_aarch64_add_imm12
302*9880d681SAndroid Build Coastguard Worker// CHECK: .tlsdesccall var                // encoding: []
303*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:                                 //   fixup A - offset: 0, value: var, kind: fixup_aarch64_tlsdesc_call
304*9880d681SAndroid Build Coastguard Worker// CHECK: blr     x3                      // encoding: [0x60,0x00,0x3f,0xd6]
305*9880d681SAndroid Build Coastguard Worker
306*9880d681SAndroid Build Coastguard Worker
307*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSDESC_ADR_PAGE21 [[VARSYM]]
308*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSDESC_LD64_LO12_NC [[VARSYM]]
309*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSDESC_ADD_LO12_NC [[VARSYM]]
310*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     {{0x[0-9A-F]+}} R_AARCH64_TLSDESC_CALL [[VARSYM]]
311*9880d681SAndroid Build Coastguard Worker
312*9880d681SAndroid Build Coastguard Worker        // Make sure symbol 5 has type STT_TLS:
313*9880d681SAndroid Build Coastguard Worker
314*9880d681SAndroid Build Coastguard Worker// CHECK-ELF:      Symbols [
315*9880d681SAndroid Build Coastguard Worker// CHECK-ELF:        Symbol {
316*9880d681SAndroid Build Coastguard Worker// CHECK-ELF:          Name: var
317*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     Value:
318*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     Size:
319*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     Binding: Global
320*9880d681SAndroid Build Coastguard Worker// CHECK-ELF-NEXT:     Type: TLS
321