Update copyright notices with scripts/update-copyrights
[glibc.git] / sysdeps / s390 / s390-32 / tls-macros.h
bloba592d81585cdc4b979ea113b640105bc8bc3ac9a
1 #define TLS_LE(x) \
2 ({ unsigned long __offset; \
3 asm ("bras %0,1f\n" \
4 "0:\t.long " #x "@ntpoff\n" \
5 "1:\tl %0,0(%0)" \
6 : "=a" (__offset) : : "cc" ); \
7 (int *) (__builtin_thread_pointer() + __offset); })
9 #ifdef PIC
10 # define TLS_IE(x) \
11 ({ unsigned long __offset, __got; \
12 asm ("bras %0,1f\n" \
13 "0:\t.long _GLOBAL_OFFSET_TABLE_-0b\n\t" \
14 ".long " #x "@gotntpoff\n" \
15 "1:\tl %1,0(%0)\n\t" \
16 "la %1,0(%1,%0)\n\t" \
17 "l %0,4(%0)\n\t" \
18 "l %0,0(%0,%1):tls_load:" #x "\n" \
19 : "=&a" (__offset), "=&a" (__got) : : "cc" ); \
20 (int *) (__builtin_thread_pointer() + __offset); })
21 #else
22 # define TLS_IE(x) \
23 ({ unsigned long __offset; \
24 asm ("bras %0,1f\n" \
25 "0:\t.long " #x "@indntpoff\n" \
26 "1:\t l %0,0(%0)\n\t" \
27 "l %0,0(%0):tls_load:" #x \
28 : "=&a" (__offset) : : "cc" ); \
29 (int *) (__builtin_thread_pointer() + __offset); })
30 #endif
32 #ifdef PIC
33 # define TLS_LD(x) \
34 ({ unsigned long __offset, __save12; \
35 asm ("bras %0,1f\n" \
36 "0:\t.long _GLOBAL_OFFSET_TABLE_-0b\n\t" \
37 ".long __tls_get_offset@plt-0b\n\t" \
38 ".long " #x "@tlsldm\n\t" \
39 ".long " #x "@dtpoff\n" \
40 "1:\tlr %1,%%r12\n\t" \
41 "l %%r12,0(%0)\n\t" \
42 "la %%r12,0(%%r12,%0)\n\t" \
43 "l %%r1,4(%0)\n\t" \
44 "l %%r2,8(%0)\n\t" \
45 "bas %%r14,0(%%r1,%0):tls_ldcall:" #x "\n\t" \
46 "l %0,12(%0)\n\t" \
47 "alr %0,%%r2\n\t" \
48 "lr %%r12,%1" \
49 : "=&a" (__offset), "=&a" (__save12) \
50 : : "cc", "0", "1", "2", "3", "4", "5" ); \
51 (int *) (__builtin_thread_pointer() + __offset); })
52 #else
53 # define TLS_LD(x) \
54 ({ unsigned long __offset; \
55 asm ("bras %0,1f\n" \
56 "0:\t.long _GLOBAL_OFFSET_TABLE_\n\t" \
57 ".long __tls_get_offset@plt\n\t" \
58 ".long " #x "@tlsldm\n\t" \
59 ".long " #x "@dtpoff\n" \
60 "1:\tl %%r12,0(%0)\n\t" \
61 "l %%r1,4(%0)\n\t" \
62 "l %%r2,8(%0)\n\t" \
63 "bas %%r14,0(%%r1):tls_ldcall:" #x "\n\t" \
64 "l %0,12(%0)\n\t" \
65 "alr %0,%%r2" \
66 : "=&a" (__offset) : : "cc", "0", "1", "2", "3", "4", "5", "12" ); \
67 (int *) (__builtin_thread_pointer() + __offset); })
68 #endif
70 #ifdef PIC
71 # define TLS_GD(x) \
72 ({ unsigned long __offset, __save12; \
73 asm ("bras %0,1f\n" \
74 "0:\t.long _GLOBAL_OFFSET_TABLE_-0b\n\t" \
75 ".long __tls_get_offset@plt-0b\n\t" \
76 ".long " #x "@tlsgd\n" \
77 "1:\tlr %1,%%r12\n\t" \
78 "l %%r12,0(%0)\n\t" \
79 "la %%r12,0(%%r12,%0)\n\t" \
80 "l %%r1,4(%0)\n\t" \
81 "l %%r2,8(%0)\n\t" \
82 "bas %%r14,0(%%r1,%0):tls_gdcall:" #x "\n\t" \
83 "lr %0,%%r2\n\t" \
84 "lr %%r12,%1" \
85 : "=&a" (__offset), "=&a" (__save12) \
86 : : "cc", "0", "1", "2", "3", "4", "5" ); \
87 (int *) (__builtin_thread_pointer() + __offset); })
88 #else
89 # define TLS_GD(x) \
90 ({ unsigned long __offset; \
91 asm ("bras %0,1f\n" \
92 "0:\t.long _GLOBAL_OFFSET_TABLE_\n\t" \
93 ".long __tls_get_offset@plt\n\t" \
94 ".long " #x "@tlsgd\n" \
95 "1:\tl %%r12,0(%0)\n\t" \
96 "l %%r1,4(%0)\n\t" \
97 "l %%r2,8(%0)\n\t" \
98 "bas %%r14,0(%%r1):tls_gdcall:" #x "\n\t" \
99 "lr %0,%%r2" \
100 : "=&a" (__offset) : : "cc", "0", "1", "2", "3", "4", "5", "12" ); \
101 (int *) (__builtin_thread_pointer() + __offset); })
102 #endif