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