2 ({ unsigned long __offset; \
4 "0:\t.quad " #x "@ntpoff\n" \
6 : "=a" (__offset) : : "cc" ); \
7 (int *) (__builtin_thread_pointer() + __offset); })
11 ({ unsigned long __offset; \
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); })
20 ({ unsigned long __offset; \
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); })
31 ({ unsigned long __offset, __save12; \
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" \
38 "brasl %%r14,__tls_get_offset@plt:tls_ldcall:" #x "\n\t" \
42 : "=&a" (__offset), "=&a" (__save12) \
43 : : "cc", "0", "1", "2", "3", "4", "5", "14" ); \
44 (int *) (__builtin_thread_pointer() + __offset); })
47 ({ unsigned long __offset; \
49 "0:\t.quad " #x "@tlsldm\n\t" \
50 ".quad " #x "@dtpoff\n" \
51 "1:\tlarl %%r12,_GLOBAL_OFFSET_TABLE_\n\t" \
53 "brasl %%r14,__tls_get_offset@plt:tls_ldcall:" #x "\n\t" \
57 : : "cc", "0", "1", "2", "3", "4", "5", "12", "14" ); \
58 (int *) (__builtin_thread_pointer() + __offset); })
63 ({ unsigned long __offset, __save12; \
65 "0:\t.quad " #x "@tlsgd\n" \
66 "1:\tlgr %1,%%r12\n\t" \
67 "larl %%r12,_GLOBAL_OFFSET_TABLE_\n\t" \
69 "brasl %%r14,__tls_get_offset@plt:tls_gdcall:" #x "\n\t" \
72 : "=&a" (__offset), "=&a" (__save12) \
73 : : "cc", "0", "1", "2", "3", "4", "5", "14" ); \
74 (int *) (__builtin_thread_pointer() + __offset); })
77 ({ unsigned long __offset; \
79 "0:\t.quad " #x "@tlsgd\n" \
80 "1:\tlarl %%r12,_GLOBAL_OFFSET_TABLE_\n\t" \
82 "brasl %%r14,__tls_get_offset@plt:tls_gdcall:" #x "\n\t" \
85 : : "cc", "0", "1", "2", "3", "4", "5", "12", "14" ); \
86 (int *) (__builtin_thread_pointer() + __offset); })