merge from gcc
[external/binutils.git] / gas / testsuite / gas / ia64 / tls.s
1         .section ".tdata", "awT", @progbits
2         .align 16
3         .global x#, y#, z#, a#, b#, c#
4         .protected a#, b#, c#
5         .type   x#,@object
6         .size   x#,4
7 x:      data4   1
8         .type   y#,@object
9         .size   y#,4
10 y:      data4   2
11         .type   z#,@object
12         .size   z#,4
13 z:      data4   3
14         .align  8
15         .type   a#,@object
16         .size   a#,8
17 a:      data8   4
18         .type   b#,@object
19         .size   b#,8
20 b:      data8   5
21         .type   c#,@object
22         .size   c#,1
23 c:      data1   6
24
25         .text
26         .align 16
27         .global foo#
28         .proc foo#
29 foo:
30         .prologue
31         alloc r36 = ar.pfs, 0, 5, 3, 0
32         .body
33         addl    loc0 = @ltoff(@tprel(x)), gp;;
34         ld8     loc0 = [loc0];;
35         add     loc1 = loc0, r13;;
36
37         mov     r2 = r13;;
38         addl    loc1 = @tprel(y), r2;;
39
40         mov     loc0 = gp
41         addl    out0 = @ltoff(@dtpmod(z)), gp
42         addl    out1 = @ltoff(@dtprel(z)), gp;;
43         ld8     out0 = [out0]
44         ld8     out1 = [out1]
45         br.call.sptk.many       b0 = __tls_get_addr;;
46         mov     gp = loc0;;
47
48         addl    out0 = @ltoff(@dtpmod(a)), gp
49         addl    out1 = @dtprel(a), r0;;
50         ld8     out0 = [out0]
51         br.call.sptk.many       b0 = __tls_get_addr;;
52         mov     gp = loc0;;
53
54         addl    out0 = @ltoff(@dtpmod(b)), gp
55         mov     out1 = r0;;
56         ld8     out0 = [out0]
57         br.call.sptk.many       b0 = __tls_get_addr;;
58         mov     gp = loc0
59         mov     r2 = ret0;;
60         addl    loc1 = @dtprel(b), r2
61         addl    loc2 = @dtprel(c), r2
62
63         br.ret.sptk.many b0
64         .endp foo#