Merge remote branch 'origin/master'
[binutils/dougsmingw.git] / ld / testsuite / ld-sparc / tlssunpic64.s
blob14e110dd820054bf12198cb60b7b0a1d2d83ac37
1 .data
2 .align 4096
3 .section ".tdata", #alloc, #write, #tls
4 .align 4
5 .globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
6 .globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
7 .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
8 sg1: .word 17
9 sg2: .word 18
10 sg3: .word 19
11 sg4: .word 20
12 sg5: .word 21
13 sg6: .word 22
14 sg7: .word 23
15 sg8: .word 24
16 sl1: .word 65
17 sl2: .word 66
18 sl3: .word 67
19 sl4: .word 68
20 sl5: .word 69
21 sl6: .word 70
22 sl7: .word 71
23 sl8: .word 72
24 sh1: .word 257
25 sh2: .word 258
26 sh3: .word 259
27 sh4: .word 260
28 sh5: .word 261
29 sh6: .word 262
30 sh7: .word 263
31 sh8: .word 264
33 .text
34 .align 4096
35 .LLGETPC0:
36 retl
37 add %o7, %l7, %l7
39 .globl fn1
40 .type fn1,#function
41 .proc 04
42 fn1:
43 save %sp, -160, %sp
44 sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %l7
45 call .LLGETPC0
46 add %l7, %lo(_GLOBAL_OFFSET_TABLE_+4), %l7
47 nop;nop;nop;nop
49 /* GD */
50 sethi %tgd_hi22(sg1), %l1
51 nop
52 add %l1, %tgd_lo10(sg1), %l2
53 nop
54 add %l7, %l2, %o0, %tgd_add(sg1)
55 nop
56 call __tls_get_addr, %tgd_call(sg1)
57 nop
58 nop;nop;nop;nop
60 /* GD -> IE because variable is referenced through IE too */
61 sethi %tgd_hi22(sg2), %o0
62 add %o0, %tgd_lo10(sg2), %o1
63 add %l7, %o1, %o0, %tgd_add(sg2)
64 call __tls_get_addr, %tgd_call(sg2)
65 nop
66 nop;nop;nop;nop
68 /* GD against local variable */
69 sethi %tgd_hi22(sl1), %o4
70 add %o4, %tgd_lo10(sl1), %o4
71 add %l7, %o4, %o0, %tgd_add(sl1)
72 call __tls_get_addr, %tgd_call(sl1)
73 nop
74 nop;nop;nop;nop
76 /* GD -> IE against local variable referenced through IE too */
77 sethi %tgd_hi22(sl2), %o0
78 add %o0, %tgd_lo10(sl2), %o0
79 add %l7, %o0, %o0, %tgd_add(sl2)
80 call __tls_get_addr, %tgd_call(sl2)
81 nop
82 nop;nop;nop;nop
84 /* GD against hidden and local variable */
85 sethi %tgd_hi22(sh1), %o4
86 add %o4, %tgd_lo10(sh1), %o4
87 add %l7, %o4, %o0, %tgd_add(sh1)
88 call __tls_get_addr, %tgd_call(sh1)
89 nop
90 nop;nop;nop;nop
92 /* GD -> IE against hidden and local variable referenced through
93 IE too */
94 sethi %tgd_hi22(sh2), %o0
95 add %o0, %tgd_lo10(sh2), %o0
96 add %l7, %o0, %o0, %tgd_add(sh2)
97 call __tls_get_addr, %tgd_call(sh2)
98 nop
99 nop;nop;nop;nop
101 /* GD against hidden but not local variable */
102 sethi %tgd_hi22(sH1), %o4
103 add %o4, %tgd_lo10(sH1), %o4
104 add %l7, %o4, %o0, %tgd_add(sH1)
105 call __tls_get_addr, %tgd_call(sH1)
107 nop;nop;nop;nop
109 /* GD -> IE against hidden but not local variable referenced through
110 IE too */
111 sethi %tgd_hi22(sH2), %o0
112 add %o0, %tgd_lo10(sH2), %o0
113 add %l7, %o0, %o0, %tgd_add(sH2)
114 call __tls_get_addr, %tgd_call(sH2)
116 nop;nop;nop;nop
118 /* LD */
119 sethi %tldm_hi22(sl1), %l1
121 add %l1, %tldm_lo10(sl1), %l2
123 add %l7, %l2, %o0, %tldm_add(sl1)
125 call __tls_get_addr, %tldm_call(sl1)
127 sethi %tldo_hix22(sl1), %l3
129 xor %l3, %tldo_lox10(sl1), %l4
131 add %o0, %l4, %l5, %tldo_add(sl1)
133 sethi %tldo_hix22(sl2 + 2), %l2
135 xor %l2, %tldo_lox10(sl2 + 2), %l3
137 lduh [%o0 + %l3], %l6, %tldo_add(sl2 + 2)
138 nop;nop;nop;nop
140 /* LD against hidden and local variables */
141 sethi %tldm_hi22(sh1), %o1
142 sethi %tldo_hix22(sh1), %l3
143 add %o1, %tldm_lo10(sh1), %o2
144 sethi %tldo_hix22(sh2 + 1), %l2
145 add %l7, %o2, %o0, %tldm_add(sh1)
146 xor %l3, %tldo_lox10(sh1), %l4
147 call __tls_get_addr, %tldm_call(sh1)
148 xor %l2, %tldo_lox10(sh2 + 1), %l3
149 ldx [%o0 + %l4], %l5, %tldo_add(sh1)
150 add %o0, %l3, %l6, %tldo_add(sh2 + 1)
151 nop;nop;nop;nop
153 /* LD against hidden but not local variables */
154 sethi %tldm_hi22(sH1), %o1
155 sethi %tldo_hix22(sH1 + 3), %l3
156 add %o1, %tldm_lo10(sH1), %o2
157 sethi %tldo_hix22(sH2), %l2
158 add %l7, %o2, %o0, %tldm_add(sH1)
159 xor %l3, %tldo_lox10(sH1 + 3), %l4
160 call __tls_get_addr, %tldm_call(sH1)
161 xor %l2, %tldo_lox10(sH2), %l3
162 add %o0, %l4, %l5, %tldo_add(sH1 + 3)
163 ld [%o0 + %l3], %l6, %tldo_add(sH2)
164 nop;nop;nop;nop
166 /* IE against global var */
167 sethi %tie_hi22(sg2), %l1
169 add %l1, %tie_lo10(sg2), %l2
171 ldx [%l7 + %l2], %l2, %tie_ldx(sg2)
173 add %g7, %l2, %l2, %tie_add(sg2)
174 nop;nop;nop;nop
176 /* IE against local var */
177 sethi %tie_hi22(sl2), %o3
178 add %o3, %tie_lo10(sl2), %o3
179 ldx [%l7 + %o3], %o2, %tie_ldx(sl2)
180 add %g7, %o2, %o4, %tie_add(sl2)
181 nop;nop;nop;nop
183 /* IE against hidden and local var */
184 sethi %tie_hi22(sh2), %l1
185 add %l1, %tie_lo10(sh2), %l2
186 ldx [%l7 + %l2], %l2, %tie_ldx(sh2)
187 add %g7, %l2, %l2, %tie_add(sh2)
188 nop;nop;nop;nop
190 /* IE against hidden but not local var */
191 sethi %tie_hi22(sH2), %l1
192 add %l1, %tie_lo10(sH2), %l2
193 ldx [%l7 + %l2], %l2, %tie_ldx(sH2)
194 add %g7, %l2, %l2, %tie_add(sH2)
195 nop;nop;nop;nop
197 /* Direct access through %g7 */
199 /* IE against global var */
200 sethi %tie_hi22(sg5), %l1
201 add %l1, %tie_lo10(sg5), %l2
202 ldx [%l7 + %l2], %l2, %tie_ldx(sg5)
203 ldx [%g7 + %l2], %l2, %tie_add(sg5)
204 nop;nop;nop;nop
206 /* IE against local var */
207 sethi %tie_hi22(sl5), %o3
208 add %o3, %tie_lo10(sl5), %o4
209 ldx [%l7 + %o4], %o5, %tie_ldx(sl5)
210 stb %l2, [%g7 + %o5], %tie_add(sl5)
211 nop;nop;nop;nop
213 /* IE against hidden and local var */
214 sethi %tie_hi22(sh5), %o3
215 add %o3, %tie_lo10(sh5), %o4
216 ldx [%l7 + %o4], %o5, %tie_ldx(sh5)
217 stx %l2, [%g7 + %o5], %tie_add(sh5)
218 nop;nop;nop;nop
220 /* IE against hidden but not local var */
221 sethi %tie_hi22(sH5), %o3
222 add %o3, %tie_lo10(sH5), %o4
223 ldx [%l7 + %o4], %o5, %tie_ldx(sH5)
224 st %l2, [%g7 + %o5], %tie_add(sH5)
225 nop;nop;nop;nop
227 return %i7 + 8