Update copyright dates with scripts/update-copyrights.
[glibc.git] / sysdeps / s390 / s390-64 / tls-macros.h
blob3c59436341391fb7d8b315241cd997a9419b1742
1 #define TLS_LE(x) \
2 ({ unsigned long __offset; \
3 asm ("bras %0,1f\n" \
4 "0:\t.quad " #x "@ntpoff\n" \
5 "1:\tlg %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,0f\n\t" \
13 ".quad " #x "@gotntpoff\n" \
14 "0:\tlarl %1,_GLOBAL_OFFSET_TABLE_\n\t" \
15 "lg %0,0(%0)\n\t" \
16 "lg %0,0(%0,%1):tls_load:" #x "\n" \
17 : "=&a" (__offset), "=&a" (__got) : : "cc" ); \
18 (int *) (__builtin_thread_pointer() + __offset); })
19 #else
20 # define TLS_IE(x) \
21 ({ unsigned long __offset; \
22 asm ("bras %0,1f\n" \
23 "0:\t.quad " #x "@indntpoff\n" \
24 "1:\t lg %0,0(%0)\n\t" \
25 "lg %0,0(%0):tls_load:" #x \
26 : "=&a" (__offset) : : "cc" ); \
27 (int *) (__builtin_thread_pointer() + __offset); })
28 #endif
30 #ifdef PIC
31 # define TLS_LD(x) \
32 ({ unsigned long __offset, __save12; \
33 asm ("bras %0,1f\n" \
34 "0:\t.quad " #x "@tlsldm\n\t" \
35 ".quad " #x "@dtpoff\n" \
36 "1:\tlgr %1,%%r12\n\t" \
37 "larl %%r12,_GLOBAL_OFFSET_TABLE_\n\t" \
38 "lg %%r2,0(%0)\n\t" \
39 "brasl %%r14,__tls_get_offset@plt:tls_ldcall:" #x "\n\t" \
40 "lg %0,8(%0)\n\t" \
41 "algr %0,%%r2\n\t" \
42 "lgr %%r12,%1" \
43 : "=&a" (__offset), "=&a" (__save12) \
44 : : "cc", "0", "1", "2", "3", "4", "5", "14" ); \
45 (int *) (__builtin_thread_pointer() + __offset); })
46 #else
47 # define TLS_LD(x) \
48 ({ unsigned long __offset; \
49 asm ("bras %0,1f\n" \
50 "0:\t.quad " #x "@tlsldm\n\t" \
51 ".quad " #x "@dtpoff\n" \
52 "1:\tlarl %%r12,_GLOBAL_OFFSET_TABLE_\n\t" \
53 "lg %%r2,0(%0)\n\t" \
54 "brasl %%r14,__tls_get_offset@plt:tls_ldcall:" #x "\n\t" \
55 "lg %0,8(%0)\n\t" \
56 "algr %0,%%r2" \
57 : "=&a" (__offset) \
58 : : "cc", "0", "1", "2", "3", "4", "5", "12", "14" ); \
59 (int *) (__builtin_thread_pointer() + __offset); })
60 #endif
62 #ifdef PIC
63 # define TLS_GD(x) \
64 ({ unsigned long __offset, __save12; \
65 asm ("bras %0,1f\n" \
66 "0:\t.quad " #x "@tlsgd\n" \
67 "1:\tlgr %1,%%r12\n\t" \
68 "larl %%r12,_GLOBAL_OFFSET_TABLE_\n\t" \
69 "lg %%r2,0(%0)\n\t" \
70 "brasl %%r14,__tls_get_offset@plt:tls_gdcall:" #x "\n\t" \
71 "lgr %0,%%r2\n\t" \
72 "lgr %%r12,%1" \
73 : "=&a" (__offset), "=&a" (__save12) \
74 : : "cc", "0", "1", "2", "3", "4", "5", "14" ); \
75 (int *) (__builtin_thread_pointer() + __offset); })
76 #else
77 # define TLS_GD(x) \
78 ({ unsigned long __offset; \
79 asm ("bras %0,1f\n" \
80 "0:\t.quad " #x "@tlsgd\n" \
81 "1:\tlarl %%r12,_GLOBAL_OFFSET_TABLE_\n\t" \
82 "lg %%r2,0(%0)\n\t" \
83 "brasl %%r14,__tls_get_offset@plt:tls_gdcall:" #x "\n\t" \
84 "lgr %0,%%r2" \
85 : "=&a" (__offset) \
86 : : "cc", "0", "1", "2", "3", "4", "5", "12", "14" ); \
87 (int *) (__builtin_thread_pointer() + __offset); })
88 #endif