Home | History | Annotate | Download | only in AArch64
      1 // RUN: llvm-mc -arch=aarch64 -show-encoding < %s | FileCheck %s
      2 // RUN: llvm-mc -arch=aarch64 -filetype=obj < %s -o %t
      3 // RUN: elf-dump %t | FileCheck --check-prefix=CHECK-ELF %s
      4 // RUN: llvm-objdump -r %t | FileCheck --check-prefix=CHECK-ELF-NAMES %s
      5 
      6 // CHECK-ELF:  .rela.text
      7 
      8         // TLS local-dynamic forms
      9         movz x1, #:dtprel_g2:var
     10         movn x2, #:dtprel_g2:var
     11         movz x3, #:dtprel_g2:var
     12         movn x4, #:dtprel_g2:var
     13 // CHECK: movz    x1, #:dtprel_g2:var     // encoding: [0x01'A',A,0xc0'A',0x92'A']
     14 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g2:var, kind: fixup_a64_movw_dtprel_g2
     15 // CHECK-NEXT: movn    x2, #:dtprel_g2:var     // encoding: [0x02'A',A,0xc0'A',0x92'A']
     16 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g2:var, kind: fixup_a64_movw_dtprel_g2
     17 // CHECK-NEXT: movz    x3, #:dtprel_g2:var     // encoding: [0x03'A',A,0xc0'A',0x92'A']
     18 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g2:var, kind: fixup_a64_movw_dtprel_g2
     19 // CHECK-NEXT: movn    x4, #:dtprel_g2:var     // encoding: [0x04'A',A,0xc0'A',0x92'A']
     20 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g2:var, kind: fixup_a64_movw_dtprel_g2
     21 
     22 // CHECK-ELF: # Relocation 0
     23 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000000)
     24 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM:0x[0-9a-f]+]])
     25 // CHECK-ELF-NEXT:  ('r_type', 0x0000020b)
     26 // CHECK-ELF: # Relocation 1
     27 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000004)
     28 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
     29 // CHECK-ELF-NEXT:  ('r_type', 0x0000020b)
     30 // CHECK-ELF: # Relocation 2
     31 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000008)
     32 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
     33 // CHECK-ELF-NEXT:  ('r_type', 0x0000020b)
     34 // CHECK-ELF: # Relocation 3
     35 // CHECK-ELF-NEXT: (('r_offset', 0x000000000000000c)
     36 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
     37 // CHECK-ELF-NEXT:  ('r_type', 0x0000020b)
     38 
     39 // CHECK-ELF-NAMES: 0 R_AARCH64_TLSLD_MOVW_DTPREL_G2
     40 // CHECK-ELF-NAMES: 4 R_AARCH64_TLSLD_MOVW_DTPREL_G2
     41 // CHECK-ELF-NAMES: 8 R_AARCH64_TLSLD_MOVW_DTPREL_G2
     42 // CHECK-ELF-NAMES: 12 R_AARCH64_TLSLD_MOVW_DTPREL_G2
     43 
     44         movz x5, #:dtprel_g1:var
     45         movn x6, #:dtprel_g1:var
     46         movz w7, #:dtprel_g1:var
     47         movn w8, #:dtprel_g1:var
     48 // CHECK: movz    x5, #:dtprel_g1:var     // encoding: [0x05'A',A,0xa0'A',0x92'A']
     49 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g1:var, kind: fixup_a64_movw_dtprel_g1
     50 // CHECK-NEXT: movn    x6, #:dtprel_g1:var     // encoding: [0x06'A',A,0xa0'A',0x92'A']
     51 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g1:var, kind: fixup_a64_movw_dtprel_g1
     52 // CHECK-NEXT: movz    w7, #:dtprel_g1:var     // encoding: [0x07'A',A,0xa0'A',0x12'A']
     53 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g1:var, kind: fixup_a64_movw_dtprel_g1
     54 // CHECK-NEXT: movn    w8, #:dtprel_g1:var     // encoding: [0x08'A',A,0xa0'A',0x12'A']
     55 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g1:var, kind: fixup_a64_movw_dtprel_g1
     56 
     57 // CHECK-ELF: # Relocation 4
     58 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000010)
     59 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
     60 // CHECK-ELF-NEXT:  ('r_type', 0x0000020c)
     61 // CHECK-ELF: # Relocation 5
     62 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000014)
     63 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
     64 // CHECK-ELF-NEXT:  ('r_type', 0x0000020c)
     65 // CHECK-ELF: # Relocation 6
     66 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000018)
     67 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
     68 // CHECK-ELF-NEXT:  ('r_type', 0x0000020c)
     69 // CHECK-ELF: # Relocation 7
     70 // CHECK-ELF-NEXT: (('r_offset', 0x000000000000001c)
     71 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
     72 // CHECK-ELF-NEXT:  ('r_type', 0x0000020c)
     73 
     74 // CHECK-ELF-NAMES: 16 R_AARCH64_TLSLD_MOVW_DTPREL_G1
     75 // CHECK-ELF-NAMES: 20 R_AARCH64_TLSLD_MOVW_DTPREL_G1
     76 // CHECK-ELF-NAMES: 24 R_AARCH64_TLSLD_MOVW_DTPREL_G1
     77 // CHECK-ELF-NAMES: 28 R_AARCH64_TLSLD_MOVW_DTPREL_G1
     78 
     79         movk x9, #:dtprel_g1_nc:var
     80         movk w10, #:dtprel_g1_nc:var
     81 // CHECK: movk    x9, #:dtprel_g1_nc:var  // encoding: [0x09'A',A,0xa0'A',0xf2'A']
     82 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g1_nc:var, kind: fixup_a64_movw_dtprel_g1_nc
     83 // CHECK-NEXT: movk    w10, #:dtprel_g1_nc:var // encoding: [0x0a'A',A,0xa0'A',0x72'A']
     84 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g1_nc:var, kind: fixup_a64_movw_dtprel_g1_nc
     85 
     86 // CHECK-ELF: # Relocation 8
     87 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000020)
     88 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
     89 // CHECK-ELF-NEXT:  ('r_type', 0x0000020d)
     90 // CHECK-ELF: # Relocation 9
     91 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000024)
     92 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
     93 // CHECK-ELF-NEXT:  ('r_type', 0x0000020d)
     94 
     95 // CHECK-ELF-NAMES: 32 R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC
     96 // CHECK-ELF-NAMES: 36 R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC
     97 
     98         movz x11, #:dtprel_g0:var
     99         movn x12, #:dtprel_g0:var
    100         movz w13, #:dtprel_g0:var
    101         movn w14, #:dtprel_g0:var
    102 // CHECK: movz    x11, #:dtprel_g0:var    // encoding: [0x0b'A',A,0x80'A',0x92'A']
    103 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g0:var, kind: fixup_a64_movw_dtprel_g0
    104 // CHECK-NEXT: movn    x12, #:dtprel_g0:var    // encoding: [0x0c'A',A,0x80'A',0x92'A']
    105 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g0:var, kind: fixup_a64_movw_dtprel_g0
    106 // CHECK-NEXT: movz    w13, #:dtprel_g0:var    // encoding: [0x0d'A',A,0x80'A',0x12'A']
    107 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g0:var, kind: fixup_a64_movw_dtprel_g0
    108 // CHECK-NEXT: movn    w14, #:dtprel_g0:var    // encoding: [0x0e'A',A,0x80'A',0x12'A']
    109 
    110 
    111 // CHECK-ELF: # Relocation 10
    112 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000028)
    113 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    114 // CHECK-ELF-NEXT:  ('r_type', 0x0000020e)
    115 // CHECK-ELF: # Relocation 11
    116 // CHECK-ELF-NEXT: (('r_offset', 0x000000000000002c)
    117 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    118 // CHECK-ELF-NEXT:  ('r_type', 0x0000020e)
    119 // CHECK-ELF: # Relocation 12
    120 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000030)
    121 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    122 // CHECK-ELF-NEXT:  ('r_type', 0x0000020e)
    123 // CHECK-ELF: # Relocation 13
    124 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000034)
    125 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    126 // CHECK-ELF-NEXT:  ('r_type', 0x0000020e)
    127 
    128 // CHECK-ELF-NAMES: 40 R_AARCH64_TLSLD_MOVW_DTPREL_G0
    129 // CHECK-ELF-NAMES: 44 R_AARCH64_TLSLD_MOVW_DTPREL_G0
    130 // CHECK-ELF-NAMES: 48 R_AARCH64_TLSLD_MOVW_DTPREL_G0
    131 // CHECK-ELF-NAMES: 52 R_AARCH64_TLSLD_MOVW_DTPREL_G0
    132 
    133 
    134         movk x15, #:dtprel_g0_nc:var
    135         movk w16, #:dtprel_g0_nc:var
    136 // CHECK: movk    x15, #:dtprel_g0_nc:var // encoding: [0x0f'A',A,0x80'A',0xf2'A']
    137 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g0_nc:var, kind: fixup_a64_movw_dtprel_g0_nc
    138 // CHECK-NEXT: movk    w16, #:dtprel_g0_nc:var // encoding: [0x10'A',A,0x80'A',0x72'A']
    139 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g0_nc:var, kind: fixup_a64_movw_dtprel_g0_nc
    140 
    141 // CHECK-ELF: # Relocation 14
    142 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000038)
    143 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    144 // CHECK-ELF-NEXT:  ('r_type', 0x0000020f)
    145 // CHECK-ELF: # Relocation 15
    146 // CHECK-ELF-NEXT: (('r_offset', 0x000000000000003c)
    147 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    148 // CHECK-ELF-NEXT:  ('r_type', 0x0000020f)
    149 
    150 // CHECK-ELF-NAMES: 56 R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC
    151 // CHECK-ELF-NAMES: 60 R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC
    152 
    153         add x17, x18, #:dtprel_hi12:var, lsl #12
    154         add w19, w20, #:dtprel_hi12:var, lsl #12
    155 // CHECK: add     x17, x18, #:dtprel_hi12:var, lsl #12 // encoding: [0x51'A',0x02'A',0x40'A',0x91'A']
    156 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_hi12:var, kind: fixup_a64_add_dtprel_hi12
    157 // CHECK-NEXT: add     w19, w20, #:dtprel_hi12:var, lsl #12 // encoding: [0x93'A',0x02'A',0x40'A',0x11'A']
    158 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_hi12:var, kind: fixup_a64_add_dtprel_hi12
    159 
    160 // CHECK-ELF: # Relocation 16
    161 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000040)
    162 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    163 // CHECK-ELF-NEXT:  ('r_type', 0x00000210)
    164 // CHECK-ELF: # Relocation 17
    165 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000044)
    166 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    167 // CHECK-ELF-NEXT:  ('r_type', 0x00000210)
    168 
    169 // CHECK-ELF-NAMES: 64 R_AARCH64_TLSLD_ADD_DTPREL_HI12
    170 // CHECK-ELF-NAMES: 68 R_AARCH64_TLSLD_ADD_DTPREL_HI12
    171 
    172 
    173         add x21, x22, #:dtprel_lo12:var
    174         add w23, w24, #:dtprel_lo12:var
    175 // CHECK: add     x21, x22, #:dtprel_lo12:var // encoding: [0xd5'A',0x02'A',A,0x91'A']
    176 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12:var, kind: fixup_a64_add_dtprel_lo12
    177 // CHECK-NEXT: add     w23, w24, #:dtprel_lo12:var // encoding: [0x17'A',0x03'A',A,0x11'A']
    178 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12:var, kind: fixup_a64_add_dtprel_lo12
    179 
    180 // CHECK-ELF: # Relocation 18
    181 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000048)
    182 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    183 // CHECK-ELF-NEXT:  ('r_type', 0x00000211)
    184 // CHECK-ELF: # Relocation 19
    185 // CHECK-ELF-NEXT: (('r_offset', 0x000000000000004c)
    186 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    187 // CHECK-ELF-NEXT:  ('r_type', 0x00000211)
    188 
    189 // CHECK-ELF-NAMES: 72 R_AARCH64_TLSLD_ADD_DTPREL_LO12
    190 // CHECK-ELF-NAMES: 76 R_AARCH64_TLSLD_ADD_DTPREL_LO12
    191 
    192         add x25, x26, #:dtprel_lo12_nc:var
    193         add w27, w28, #:dtprel_lo12_nc:var
    194 // CHECK: add     x25, x26, #:dtprel_lo12_nc:var // encoding: [0x59'A',0x03'A',A,0x91'A']
    195 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12_nc:var, kind: fixup_a64_add_dtprel_lo12_nc
    196 // CHECK-NEXT: add     w27, w28, #:dtprel_lo12_nc:var // encoding: [0x9b'A',0x03'A',A,0x11'A']
    197 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12_nc:var, kind: fixup_a64_add_dtprel_lo12_nc
    198 
    199 // CHECK-ELF: # Relocation 20
    200 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000050)
    201 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    202 // CHECK-ELF-NEXT:  ('r_type', 0x00000212)
    203 // CHECK-ELF: # Relocation 21
    204 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000054)
    205 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    206 // CHECK-ELF-NEXT:  ('r_type', 0x00000212)
    207 
    208 // CHECK-ELF-NAMES: 80 R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC
    209 // CHECK-ELF-NAMES: 84 R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC
    210 
    211         ldrb w29, [x30, #:dtprel_lo12:var]
    212         ldrsb x29, [x28, #:dtprel_lo12_nc:var]
    213 // CHECK: ldrb    w29, [x30, #:dtprel_lo12:var] // encoding: [0xdd'A',0x03'A',0x40'A',0x39'A']
    214 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12:var, kind: fixup_a64_ldst8_dtprel_lo12
    215 // CHECK-NEXT: ldrsb   x29, [x28, #:dtprel_lo12_nc:var] // encoding: [0x9d'A',0x03'A',0x80'A',0x39'A']
    216 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12_nc:var, kind: fixup_a64_ldst8_dtprel_lo12_nc
    217 
    218 // CHECK-ELF: # Relocation 22
    219 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000058)
    220 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    221 // CHECK-ELF-NEXT:  ('r_type', 0x00000213)
    222 // CHECK-ELF: # Relocation 23
    223 // CHECK-ELF-NEXT: (('r_offset', 0x000000000000005c)
    224 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    225 // CHECK-ELF-NEXT:  ('r_type', 0x00000214)
    226 
    227 // CHECK-ELF-NAMES: 88 R_AARCH64_TLSLD_LDST8_DTPREL_LO12
    228 // CHECK-ELF-NAMES: 92 R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC
    229 
    230         strh w27, [x26, #:dtprel_lo12:var]
    231         ldrsh x25, [x24, #:dtprel_lo12_nc:var]
    232 // CHECK: strh    w27, [x26, #:dtprel_lo12:var] // encoding: [0x5b'A',0x03'A',A,0x79'A']
    233 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12:var, kind: fixup_a64_ldst16_dtprel_lo12
    234 // CHECK-NEXT: ldrsh   x25, [x24, #:dtprel_lo12_nc:var] // encoding: [0x19'A',0x03'A',0x80'A',0x79'A']
    235 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12_nc:var, kind: fixup_a64_ldst16_dtprel_lo12_n
    236 
    237 // CHECK-ELF: # Relocation 24
    238 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000060)
    239 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    240 // CHECK-ELF-NEXT:  ('r_type', 0x00000215)
    241 // CHECK-ELF: # Relocation 25
    242 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000064)
    243 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    244 // CHECK-ELF-NEXT:  ('r_type', 0x00000216)
    245 
    246 // CHECK-ELF-NAMES: 96 R_AARCH64_TLSLD_LDST16_DTPREL_LO12
    247 // CHECK-ELF-NAMES: 100 R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC
    248 
    249         ldr w23, [x22, #:dtprel_lo12:var]
    250         ldrsw x21, [x20, #:dtprel_lo12_nc:var]
    251 // CHECK: ldr     w23, [x22, #:dtprel_lo12:var] // encoding: [0xd7'A',0x02'A',0x40'A',0xb9'A']
    252 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12:var, kind: fixup_a64_ldst32_dtprel_lo12
    253 // CHECK-NEXT: ldrsw   x21, [x20, #:dtprel_lo12_nc:var] // encoding: [0x95'A',0x02'A',0x80'A',0xb9'A']
    254 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12_nc:var, kind: fixup_a64_ldst32_dtprel_lo12_n
    255 
    256 // CHECK-ELF: # Relocation 26
    257 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000068)
    258 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    259 // CHECK-ELF-NEXT:  ('r_type', 0x00000217)
    260 // CHECK-ELF: # Relocation 27
    261 // CHECK-ELF-NEXT: (('r_offset', 0x000000000000006c)
    262 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    263 // CHECK-ELF-NEXT:  ('r_type', 0x00000218)
    264 
    265 // CHECK-ELF-NAMES: 104 R_AARCH64_TLSLD_LDST32_DTPREL_LO12
    266 // CHECK-ELF-NAMES: 108 R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC
    267 
    268         ldr x19, [x18, #:dtprel_lo12:var]
    269         str x17, [x16, #:dtprel_lo12_nc:var]
    270 // CHECK: ldr     x19, [x18, #:dtprel_lo12:var] // encoding: [0x53'A',0x02'A',0x40'A',0xf9'A']
    271 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12:var, kind: fixup_a64_ldst64_dtprel_lo12
    272 // CHECK-NEXT: str     x17, [x16, #:dtprel_lo12_nc:var] // encoding: [0x11'A',0x02'A',A,0xf9'A']
    273 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12_nc:var, kind: fixup_a64_ldst64_dtprel_lo12_nc
    274 
    275 
    276 // CHECK-ELF: # Relocation 28
    277 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000070)
    278 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    279 // CHECK-ELF-NEXT:  ('r_type', 0x00000219)
    280 // CHECK-ELF: # Relocation 29
    281 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000074)
    282 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    283 // CHECK-ELF-NEXT:  ('r_type', 0x0000021a)
    284 
    285 // CHECK-ELF-NAMES: 112 R_AARCH64_TLSLD_LDST64_DTPREL_LO12
    286 // CHECK-ELF-NAMES: 116 R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC
    287 
    288         // TLS initial-exec forms
    289         movz x15, #:gottprel_g1:var
    290         movz w14, #:gottprel_g1:var
    291 // CHECK: movz    x15, #:gottprel_g1:var  // encoding: [0x0f'A',A,0xa0'A',0x92'A']
    292 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :gottprel_g1:var, kind: fixup_a64_movw_gottprel_g1
    293 // CHECK-NEXT: movz    w14, #:gottprel_g1:var  // encoding: [0x0e'A',A,0xa0'A',0x12'A']
    294 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :gottprel_g1:var, kind: fixup_a64_movw_gottprel_g1
    295 
    296 // CHECK-ELF: # Relocation 30
    297 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000078)
    298 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    299 // CHECK-ELF-NEXT:  ('r_type', 0x0000021b)
    300 // CHECK-ELF: # Relocation 31
    301 // CHECK-ELF-NEXT: (('r_offset', 0x000000000000007c)
    302 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    303 // CHECK-ELF-NEXT:  ('r_type', 0x0000021b)
    304 
    305 // CHECK-ELF-NAMES: 120 R_AARCH64_TLSIE_MOVW_GOTTPREL_G1
    306 // CHECK-ELF-NAMES: 124 R_AARCH64_TLSIE_MOVW_GOTTPREL_G1
    307 
    308         movk x13, #:gottprel_g0_nc:var
    309         movk w12, #:gottprel_g0_nc:var
    310 // CHECK: movk    x13, #:gottprel_g0_nc:var // encoding: [0x0d'A',A,0x80'A',0xf2'A']
    311 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :gottprel_g0_nc:var, kind: fixup_a64_movw_gottprel_g0_nc
    312 // CHECK-NEXT: movk    w12, #:gottprel_g0_nc:var // encoding: [0x0c'A',A,0x80'A',0x72'A']
    313 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :gottprel_g0_nc:var, kind: fixup_a64_movw_gottprel_g0_nc
    314 
    315 // CHECK-ELF: # Relocation 32
    316 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000080)
    317 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    318 // CHECK-ELF-NEXT:  ('r_type', 0x0000021c)
    319 // CHECK-ELF: # Relocation 33
    320 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000084)
    321 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    322 // CHECK-ELF-NEXT:  ('r_type', 0x0000021c)
    323 
    324 // CHECK-ELF-NAMES: 128 R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC
    325 // CHECK-ELF-NAMES: 132 R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC
    326 
    327         adrp x11, :gottprel:var
    328         ldr x10, [x0, #:gottprel_lo12:var]
    329         ldr x9, :gottprel:var
    330 // CHECK: adrp    x11, :gottprel:var      // encoding: [0x0b'A',A,A,0x90'A']
    331 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :gottprel:var, kind: fixup_a64_adr_gottprel_page
    332 // CHECK-NEXT: ldr     x10, [x0, #:gottprel_lo12:var] // encoding: [0x0a'A',A,0x40'A',0xf9'A']
    333 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :gottprel_lo12:var, kind: fixup_a64_ld64_gottprel_lo12_nc
    334 // CHECK-NEXT: ldr     x9, :gottprel:var       // encoding: [0x09'A',A,A,0x58'A']
    335 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :gottprel:var, kind: fixup_a64_ld_gottprel_prel19
    336 
    337 // CHECK-ELF: # Relocation 34
    338 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000088)
    339 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    340 // CHECK-ELF-NEXT:  ('r_type', 0x0000021d)
    341 // CHECK-ELF: # Relocation 35
    342 // CHECK-ELF-NEXT: (('r_offset', 0x000000000000008c)
    343 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    344 // CHECK-ELF-NEXT:  ('r_type', 0x0000021e)
    345 // CHECK-ELF: # Relocation 36
    346 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000090)
    347 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    348 // CHECK-ELF-NEXT:  ('r_type', 0x0000021f)
    349 
    350 // CHECK-ELF-NAMES: 136 R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE
    351 // CHECK-ELF-NAMES: 140 R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC
    352 // CHECK-ELF-NAMES: 144 R_AARCH64_TLSIE_LD_GOTTPREL_PREL19
    353 
    354         // TLS local-exec forms
    355         movz x3, #:tprel_g2:var
    356         movn x4, #:tprel_g2:var
    357 // CHECK: movz    x3, #:tprel_g2:var      // encoding: [0x03'A',A,0xc0'A',0x92'A']
    358 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g2:var, kind: fixup_a64_movw_tprel_g2
    359 // CHECK-NEXT: movn    x4, #:tprel_g2:var      // encoding: [0x04'A',A,0xc0'A',0x92'A']
    360 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g2:var, kind: fixup_a64_movw_tprel_g2
    361 
    362 // CHECK-ELF: # Relocation 37
    363 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000094)
    364 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    365 // CHECK-ELF-NEXT:  ('r_type', 0x00000220)
    366 // CHECK-ELF: # Relocation 38
    367 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000098)
    368 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    369 // CHECK-ELF-NEXT:  ('r_type', 0x00000220)
    370 
    371 // CHECK-ELF-NAMES: 148 R_AARCH64_TLSLE_MOVW_TPREL_G2
    372 // CHECK-ELF-NAMES: 152 R_AARCH64_TLSLE_MOVW_TPREL_G2
    373 
    374         movz x5, #:tprel_g1:var
    375         movn x6, #:tprel_g1:var
    376         movz w7, #:tprel_g1:var
    377         movn w8, #:tprel_g1:var
    378 // CHECK: movz    x5, #:tprel_g1:var      // encoding: [0x05'A',A,0xa0'A',0x92'A']
    379 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g1:var, kind: fixup_a64_movw_tprel_g1
    380 // CHECK-NEXT: movn    x6, #:tprel_g1:var      // encoding: [0x06'A',A,0xa0'A',0x92'A']
    381 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g1:var, kind: fixup_a64_movw_tprel_g1
    382 // CHECK-NEXT: movz    w7, #:tprel_g1:var      // encoding: [0x07'A',A,0xa0'A',0x12'A']
    383 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g1:var, kind: fixup_a64_movw_tprel_g1
    384 // CHECK-NEXT: movn    w8, #:tprel_g1:var      // encoding: [0x08'A',A,0xa0'A',0x12'A']
    385 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g1:var, kind: fixup_a64_movw_tprel_g1
    386 
    387 // CHECK-ELF: # Relocation 39
    388 // CHECK-ELF-NEXT: (('r_offset', 0x000000000000009c)
    389 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    390 // CHECK-ELF-NEXT:  ('r_type', 0x00000221)
    391 // CHECK-ELF: # Relocation 40
    392 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000a0)
    393 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    394 // CHECK-ELF-NEXT:  ('r_type', 0x00000221)
    395 // CHECK-ELF: # Relocation 41
    396 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000a4)
    397 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    398 // CHECK-ELF-NEXT:  ('r_type', 0x00000221)
    399 // CHECK-ELF: # Relocation 42
    400 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000a8)
    401 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    402 // CHECK-ELF-NEXT:  ('r_type', 0x00000221)
    403 
    404 // CHECK-ELF-NAMES: 156 R_AARCH64_TLSLE_MOVW_TPREL_G1
    405 // CHECK-ELF-NAMES: 160 R_AARCH64_TLSLE_MOVW_TPREL_G1
    406 // CHECK-ELF-NAMES: 164 R_AARCH64_TLSLE_MOVW_TPREL_G1
    407 // CHECK-ELF-NAMES: 168 R_AARCH64_TLSLE_MOVW_TPREL_G1
    408 
    409         movk x9, #:tprel_g1_nc:var
    410         movk w10, #:tprel_g1_nc:var
    411 // CHECK: movk    x9, #:tprel_g1_nc:var   // encoding: [0x09'A',A,0xa0'A',0xf2'A']
    412 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g1_nc:var, kind: fixup_a64_movw_tprel_g1_nc
    413 // CHECK-NEXT: movk    w10, #:tprel_g1_nc:var  // encoding: [0x0a'A',A,0xa0'A',0x72'A']
    414 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g1_nc:var, kind: fixup_a64_movw_tprel_g1_nc
    415 
    416 // CHECK-ELF: # Relocation 43
    417 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000ac)
    418 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    419 // CHECK-ELF-NEXT:  ('r_type', 0x00000222)
    420 // CHECK-ELF: # Relocation 44
    421 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000b0)
    422 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    423 // CHECK-ELF-NEXT:  ('r_type', 0x00000222)
    424 
    425 // CHECK-ELF-NAMES: 172 R_AARCH64_TLSLE_MOVW_TPREL_G1_NC
    426 // CHECK-ELF-NAMES: 176 R_AARCH64_TLSLE_MOVW_TPREL_G1_NC
    427 
    428         movz x11, #:tprel_g0:var
    429         movn x12, #:tprel_g0:var
    430         movz w13, #:tprel_g0:var
    431         movn w14, #:tprel_g0:var
    432 // CHECK: movz    x11, #:tprel_g0:var     // encoding: [0x0b'A',A,0x80'A',0x92'A']
    433 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g0:var, kind: fixup_a64_movw_tprel_g0
    434 // CHECK-NEXT: movn    x12, #:tprel_g0:var     // encoding: [0x0c'A',A,0x80'A',0x92'A']
    435 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g0:var, kind: fixup_a64_movw_tprel_g0
    436 // CHECK-NEXT: movz    w13, #:tprel_g0:var     // encoding: [0x0d'A',A,0x80'A',0x12'A']
    437 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g0:var, kind: fixup_a64_movw_tprel_g0
    438 // CHECK-NEXT: movn    w14, #:tprel_g0:var     // encoding: [0x0e'A',A,0x80'A',0x12'A']
    439 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g0:var, kind: fixup_a64_movw_tprel_g0
    440 
    441 // CHECK-ELF: # Relocation 45
    442 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000b4)
    443 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    444 // CHECK-ELF-NEXT:  ('r_type', 0x00000223)
    445 // CHECK-ELF: # Relocation 46
    446 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000b8)
    447 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    448 // CHECK-ELF-NEXT:  ('r_type', 0x00000223)
    449 // CHECK-ELF: # Relocation 47
    450 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000bc)
    451 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    452 // CHECK-ELF-NEXT:  ('r_type', 0x00000223)
    453 // CHECK-ELF: # Relocation 48
    454 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000c0)
    455 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    456 // CHECK-ELF-NEXT:  ('r_type', 0x00000223)
    457 
    458 // CHECK-ELF-NAMES: 180 R_AARCH64_TLSLE_MOVW_TPREL_G0
    459 // CHECK-ELF-NAMES: 184 R_AARCH64_TLSLE_MOVW_TPREL_G0
    460 // CHECK-ELF-NAMES: 188 R_AARCH64_TLSLE_MOVW_TPREL_G0
    461 // CHECK-ELF-NAMES: 192 R_AARCH64_TLSLE_MOVW_TPREL_G0
    462 
    463         movk x15, #:tprel_g0_nc:var
    464         movk w16, #:tprel_g0_nc:var
    465 // CHECK: movk    x15, #:tprel_g0_nc:var  // encoding: [0x0f'A',A,0x80'A',0xf2'A']
    466 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g0_nc:var, kind: fixup_a64_movw_tprel_g0_nc
    467 // CHECK-NEXT: movk    w16, #:tprel_g0_nc:var  // encoding: [0x10'A',A,0x80'A',0x72'A']
    468 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g0_nc:var, kind: fixup_a64_movw_tprel_g0_nc
    469 
    470 // CHECK-ELF: # Relocation 49
    471 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000c4)
    472 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    473 // CHECK-ELF-NEXT:  ('r_type', 0x00000224)
    474 // CHECK-ELF: # Relocation 50
    475 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000c8)
    476 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    477 // CHECK-ELF-NEXT:  ('r_type', 0x00000224)
    478 
    479 // CHECK-ELF-NAMES: 196 R_AARCH64_TLSLE_MOVW_TPREL_G0_NC
    480 // CHECK-ELF-NAMES: 200 R_AARCH64_TLSLE_MOVW_TPREL_G0_NC
    481 
    482         add x17, x18, #:tprel_hi12:var, lsl #12
    483         add w19, w20, #:tprel_hi12:var, lsl #12
    484 // CHECK: add     x17, x18, #:tprel_hi12:var, lsl #12 // encoding: [0x51'A',0x02'A',0x40'A',0x91'A']
    485 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_hi12:var, kind: fixup_a64_add_tprel_hi12
    486 // CHECK-NEXT: add     w19, w20, #:tprel_hi12:var, lsl #12 // encoding: [0x93'A',0x02'A',0x40'A',0x11'A']
    487 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_hi12:var, kind: fixup_a64_add_tprel_hi12
    488 
    489 // CHECK-ELF: # Relocation 51
    490 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000cc)
    491 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    492 // CHECK-ELF-NEXT:  ('r_type', 0x00000225)
    493 // CHECK-ELF: # Relocation 52
    494 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000d0)
    495 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    496 // CHECK-ELF-NEXT:  ('r_type', 0x00000225)
    497 
    498 // CHECK-ELF-NAMES: 204 R_AARCH64_TLSLE_ADD_TPREL_HI12
    499 // CHECK-ELF-NAMES: 208 R_AARCH64_TLSLE_ADD_TPREL_HI12
    500 
    501         add x21, x22, #:tprel_lo12:var
    502         add w23, w24, #:tprel_lo12:var
    503 // CHECK: add     x21, x22, #:tprel_lo12:var // encoding: [0xd5'A',0x02'A',A,0x91'A']
    504 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12:var, kind: fixup_a64_add_tprel_lo12
    505 // CHECK-NEXT: add     w23, w24, #:tprel_lo12:var // encoding: [0x17'A',0x03'A',A,0x11'A']
    506 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12:var, kind: fixup_a64_add_tprel_lo12
    507 
    508 // CHECK-ELF: # Relocation 53
    509 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000d4)
    510 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    511 // CHECK-ELF-NEXT:  ('r_type', 0x00000226)
    512 // CHECK-ELF: # Relocation 54
    513 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000d8)
    514 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    515 // CHECK-ELF-NEXT:  ('r_type', 0x00000226)
    516 
    517 // CHECK-ELF-NAMES: 212 R_AARCH64_TLSLE_ADD_TPREL_LO12
    518 // CHECK-ELF-NAMES: 216 R_AARCH64_TLSLE_ADD_TPREL_LO12
    519 
    520         add x25, x26, #:tprel_lo12_nc:var
    521         add w27, w28, #:tprel_lo12_nc:var
    522 // CHECK: add     x25, x26, #:tprel_lo12_nc:var // encoding: [0x59'A',0x03'A',A,0x91'A']
    523 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12_nc:var, kind: fixup_a64_add_tprel_lo12_nc
    524 // CHECK-NEXT: add     w27, w28, #:tprel_lo12_nc:var // encoding: [0x9b'A',0x03'A',A,0x11'A']
    525 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12_nc:var, kind: fixup_a64_add_tprel_lo12_nc
    526 
    527 // CHECK-ELF: # Relocation 55
    528 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000dc)
    529 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    530 // CHECK-ELF-NEXT:  ('r_type', 0x00000227)
    531 // CHECK-ELF: # Relocation 56
    532 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000e0)
    533 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    534 // CHECK-ELF-NEXT:  ('r_type', 0x00000227)
    535 
    536 
    537 // CHECK-ELF-NAMES: 220 R_AARCH64_TLSLE_ADD_TPREL_LO12_NC
    538 // CHECK-ELF-NAMES: 224 R_AARCH64_TLSLE_ADD_TPREL_LO12_NC
    539 
    540         ldrb w29, [x30, #:tprel_lo12:var]
    541         ldrsb x29, [x28, #:tprel_lo12_nc:var]
    542 // CHECK: ldrb    w29, [x30, #:tprel_lo12:var] // encoding: [0xdd'A',0x03'A',0x40'A',0x39'A']
    543 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12:var, kind: fixup_a64_ldst8_tprel_lo12
    544 // CHECK-NEXT: ldrsb   x29, [x28, #:tprel_lo12_nc:var] // encoding: [0x9d'A',0x03'A',0x80'A',0x39'A']
    545 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12_nc:var, kind: fixup_a64_ldst8_tprel_lo12_nc
    546 
    547 // CHECK-ELF: # Relocation 57
    548 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000e4)
    549 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    550 // CHECK-ELF-NEXT:  ('r_type', 0x00000228)
    551 // CHECK-ELF: # Relocation 58
    552 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000e8)
    553 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    554 // CHECK-ELF-NEXT:  ('r_type', 0x00000229)
    555 
    556 // CHECK-ELF-NAMES: 228 R_AARCH64_TLSLE_LDST8_TPREL_LO12
    557 // CHECK-ELF-NAMES: 232 R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC
    558 
    559         strh w27, [x26, #:tprel_lo12:var]
    560         ldrsh x25, [x24, #:tprel_lo12_nc:var]
    561 // CHECK: strh    w27, [x26, #:tprel_lo12:var] // encoding: [0x5b'A',0x03'A',A,0x79'A']
    562 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12:var, kind: fixup_a64_ldst16_tprel_lo12
    563 // CHECK-NEXT: ldrsh   x25, [x24, #:tprel_lo12_nc:var] // encoding: [0x19'A',0x03'A',0x80'A',0x79'A']
    564 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12_nc:var, kind: fixup_a64_ldst16_tprel_lo12_n
    565 
    566 // CHECK-ELF: # Relocation 59
    567 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000ec)
    568 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    569 // CHECK-ELF-NEXT:  ('r_type', 0x0000022a)
    570 // CHECK-ELF: # Relocation 60
    571 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000f0)
    572 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    573 // CHECK-ELF-NEXT:  ('r_type', 0x0000022b)
    574 
    575 // CHECK-ELF-NAMES: 236 R_AARCH64_TLSLE_LDST16_TPREL_LO12
    576 // CHECK-ELF-NAMES: 240 R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC
    577 
    578         ldr w23, [x22, #:tprel_lo12:var]
    579         ldrsw x21, [x20, #:tprel_lo12_nc:var]
    580 // CHECK: ldr     w23, [x22, #:tprel_lo12:var] // encoding: [0xd7'A',0x02'A',0x40'A',0xb9'A']
    581 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12:var, kind: fixup_a64_ldst32_tprel_lo12
    582 // CHECK-NEXT: ldrsw   x21, [x20, #:tprel_lo12_nc:var] // encoding: [0x95'A',0x02'A',0x80'A',0xb9'A']
    583 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12_nc:var, kind: fixup_a64_ldst32_tprel_lo12_n
    584 
    585 // CHECK-ELF: # Relocation 61
    586 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000f4)
    587 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    588 // CHECK-ELF-NEXT:  ('r_type', 0x0000022c)
    589 // CHECK-ELF: # Relocation 62
    590 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000f8)
    591 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    592 // CHECK-ELF-NEXT:  ('r_type', 0x0000022d)
    593 
    594 // CHECK-ELF-NAMES: 244 R_AARCH64_TLSLE_LDST32_TPREL_LO12
    595 // CHECK-ELF-NAMES: 248 R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC
    596 
    597         ldr x19, [x18, #:tprel_lo12:var]
    598         str x17, [x16, #:tprel_lo12_nc:var]
    599 // CHECK: ldr     x19, [x18, #:tprel_lo12:var] // encoding: [0x53'A',0x02'A',0x40'A',0xf9'A']
    600 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12:var, kind: fixup_a64_ldst64_tprel_lo12
    601 // CHECK-NEXT: str     x17, [x16, #:tprel_lo12_nc:var] // encoding: [0x11'A',0x02'A',A,0xf9'A']
    602 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12_nc:var, kind: fixup_a64_ldst64_tprel_lo12_nc
    603 
    604 // CHECK-ELF: # Relocation 63
    605 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000fc)
    606 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    607 // CHECK-ELF-NEXT:  ('r_type', 0x0000022e)
    608 // CHECK-ELF: # Relocation 64
    609 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000100)
    610 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    611 // CHECK-ELF-NEXT:  ('r_type', 0x0000022f)
    612 
    613 // CHECK-ELF-NAMES: 252 R_AARCH64_TLSLE_LDST64_TPREL_LO12
    614 // CHECK-ELF-NAMES: 256 R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC
    615 
    616         // TLS descriptor forms
    617         adrp x8, :tlsdesc:var
    618         ldr x7, [x6, :tlsdesc_lo12:var]
    619         add x5, x4, #:tlsdesc_lo12:var
    620         .tlsdesccall var
    621         blr x3
    622 
    623 // CHECK: adrp    x8, :tlsdesc:var        // encoding: [0x08'A',A,A,0x90'A']
    624 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tlsdesc:var, kind: fixup_a64_tlsdesc_adr_page
    625 // CHECK-NEXT: ldr     x7, [x6, #:tlsdesc_lo12:var] // encoding: [0xc7'A',A,0x40'A',0xf9'A']
    626 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tlsdesc_lo12:var, kind: fixup_a64_tlsdesc_ld64_lo12_nc
    627 // CHECK-NEXT: add     x5, x4, #:tlsdesc_lo12:var // encoding: [0x85'A',A,A,0x91'A']
    628 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tlsdesc_lo12:var, kind: fixup_a64_tlsdesc_add_lo12_nc
    629 // CHECK-NEXT: .tlsdesccall var                // encoding: []
    630 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tlsdesc:var, kind: fixup_a64_tlsdesc_call
    631 // CHECK: blr     x3                      // encoding: [0x60,0x00,0x3f,0xd6]
    632 
    633 
    634 // CHECK-ELF: # Relocation 65
    635 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000104)
    636 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    637 // CHECK-ELF-NEXT:  ('r_type', 0x00000232)
    638 // CHECK-ELF: # Relocation 66
    639 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000108)
    640 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    641 // CHECK-ELF-NEXT:  ('r_type', 0x00000233)
    642 // CHECK-ELF: # Relocation 67
    643 // CHECK-ELF-NEXT: (('r_offset', 0x000000000000010c)
    644 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    645 // CHECK-ELF-NEXT:  ('r_type', 0x00000234)
    646 // CHECK-ELF: # Relocation 68
    647 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000110)
    648 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
    649 // CHECK-ELF-NEXT:  ('r_type', 0x00000239)
    650 
    651 // CHECK-ELF-NAMES: 260 R_AARCH64_TLSDESC_ADR_PAGE
    652 // CHECK-ELF-NAMES: 264 R_AARCH64_TLSDESC_LD64_LO12_NC
    653 // CHECK-ELF-NAMES: 268 R_AARCH64_TLSDESC_ADD_LO12_NC
    654 // CHECK-ELF-NAMES: 272 R_AARCH64_TLSDESC_CALL
    655 
    656 
    657 // Make sure symbol 5 has type STT_TLS:
    658 
    659 // CHECK-ELF: # Symbol 5
    660 // CHECK-ELF-NEXT: (('st_name', 0x00000006) # 'var'
    661 // CHECK-ELF-NEXT:  ('st_bind', 0x1)
    662 // CHECK-ELF-NEXT:  ('st_type', 0x6)
    663