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
8sg1:	.word 17
9sg2:	.word 18
10sg3:	.word 19
11sg4:	.word 20
12sg5:	.word 21
13sg6:	.word 22
14sg7:	.word 23
15sg8:	.word 24
16sl1:	.word 65
17sl2:	.word 66
18sl3:	.word 67
19sl4:	.word 68
20sl5:	.word 69
21sl6:	.word 70
22sl7:	.word 71
23sl8:	.word 72
24sh1:	.word 257
25sh2:	.word 258
26sh3:	.word 259
27sh4:	.word 260
28sh5:	.word 261
29sh6:	.word 262
30sh7:	.word 263
31sh8:	.word 264
32
33	.text
34	.align	4096
35.LLGETPC0:
36	retl
37	add	%o7, %l7, %l7
38
39	.globl	fn1
40	.type	fn1,#function
41	.proc	04
42fn1:
43	save	%sp, -104, %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
48
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
59
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
67
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
75
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
83
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
91
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
100
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)
106	nop
107	nop;nop;nop;nop
108
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)
115	nop
116	nop;nop;nop;nop
117
118	/* LD */
119	sethi	%tldm_hi22(sl1), %l1
120	nop
121	add	%l1, %tldm_lo10(sl1), %l2
122	nop
123	add	%l7, %l2, %o0, %tldm_add(sl1)
124	nop
125	call	__tls_get_addr, %tldm_call(sl1)
126	nop
127	sethi	%tldo_hix22(sl1), %l3
128	nop
129	xor	%l3, %tldo_lox10(sl1), %l4
130	nop
131	add	%o0, %l4, %l5, %tldo_add(sl1)
132	nop
133	sethi	%tldo_hix22(sl2 + 2), %l2
134	nop
135	xor	%l2, %tldo_lox10(sl2 + 2), %l3
136	nop
137	lduh	[%o0 + %l3], %l6, %tldo_add(sl2 + 2)
138	nop;nop;nop;nop
139
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	add	%o0, %l4, %l5, %tldo_add(sh1)
150	ldub	[%o0 + %l3], %l6, %tldo_add(sh2 + 1)
151	nop;nop;nop;nop
152
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
165
166	/* IE against global var  */
167	sethi	%tie_hi22(sg2), %l1
168	nop
169	add	%l1, %tie_lo10(sg2), %l2
170	nop
171	ld	[%l7 + %l2], %l2, %tie_ld(sg2)
172	nop
173	add	%g7, %l2, %l2, %tie_add(sg2)
174	nop;nop;nop;nop
175
176	/* IE against local var  */
177	sethi	%tie_hi22(sl2), %o3
178	add	%o3, %tie_lo10(sl2), %o3
179	ld	[%l7 + %o3], %o2, %tie_ld(sl2)
180	add	%g7, %o2, %o4, %tie_add(sl2)
181	nop;nop;nop;nop
182
183	/* IE against hidden and local var  */
184	sethi	%tie_hi22(sh2), %l1
185	add	%l1, %tie_lo10(sh2), %l2
186	ld	[%l7 + %l2], %l2, %tie_ld(sh2)
187	add	%g7, %l2, %l2, %tie_add(sh2)
188	nop;nop;nop;nop
189
190	/* IE against hidden but not local var  */
191	sethi	%tie_hi22(sH2), %l1
192	add	%l1, %tie_lo10(sH2), %l2
193	ld	[%l7 + %l2], %l2, %tie_ld(sH2)
194	add	%g7, %l2, %l2, %tie_add(sH2)
195	nop;nop;nop;nop
196
197	/* Direct access through %g7  */
198
199	/* IE against global var  */
200	sethi	%tie_hi22(sg5), %l1
201	add	%l1, %tie_lo10(sg5), %l2
202	ld	[%l7 + %l2], %l2, %tie_ld(sg5)
203	ld	[%g7 + %l2], %l2, %tie_add(sg5)
204	nop;nop;nop;nop
205
206	/* IE against local var  */
207	sethi	%tie_hi22(sl5), %o3
208	add	%o3, %tie_lo10(sl5), %o4
209	ld	[%l7 + %o4], %o5, %tie_ld(sl5)
210	stb	%l2, [%g7 + %o5], %tie_add(sl5)
211	nop;nop;nop;nop
212
213	/* IE against hidden and local var  */
214	sethi	%tie_hi22(sh5), %o3
215	add	%o3, %tie_lo10(sh5), %o4
216	ld	[%l7 + %o4], %o5, %tie_ld(sh5)
217	lduh	[%g7 + %o5], %l2, %tie_add(sh5)
218	nop;nop;nop;nop
219
220	/* IE against hidden but not local var  */
221	sethi	%tie_hi22(sH5), %o3
222	add	%o3, %tie_lo10(sH5), %o4
223	ld	[%l7 + %o4], %o5, %tie_ld(sH5)
224	st	%l2, [%g7 + %o5], %tie_add(sH5)
225	nop;nop;nop;nop
226
227	ret
228	restore
229