Fix country_post "Country Postal Abbreviations"
[glibc.git] / sysdeps / i386 / tls-macros.h
blob053cba05d1694fb7ba87ddbb8c2e822ad92edfae
1 #include <features.h> /* For __GNUC_PREREQ. */
3 #define TLS_LE(x) \
4 ({ int *__l; \
5 asm ("movl %%gs:0,%0\n\t" \
6 "subl $" #x "@tpoff,%0" \
7 : "=r" (__l)); \
8 __l; })
10 #if defined PIC && !__GNUC_PREREQ (5,0)
11 # define TLS_IE(x) \
12 ({ int *__l; \
13 asm ("movl %%gs:0,%0\n\t" \
14 "subl " #x "@gottpoff(%%ebx),%0" \
15 : "=r" (__l)); \
16 __l; })
17 #else
18 # define TLS_IE(x) \
19 ({ int *__l, __b; \
20 asm ("call 1f\n\t" \
21 ".subsection 1\n" \
22 "1:\tmovl (%%esp), %%ebx\n\t" \
23 "ret\n\t" \
24 ".previous\n\t" \
25 "addl $_GLOBAL_OFFSET_TABLE_, %%ebx\n\t" \
26 "movl %%gs:0,%0\n\t" \
27 "subl " #x "@gottpoff(%%ebx),%0" \
28 : "=r" (__l), "=&b" (__b)); \
29 __l; })
30 #endif
32 #if defined PIC && !__GNUC_PREREQ (5,0)
33 # define TLS_LD(x) \
34 ({ int *__l, __c, __d; \
35 asm ("leal " #x "@tlsldm(%%ebx),%%eax\n\t" \
36 "call ___tls_get_addr@plt\n\t" \
37 "leal " #x "@dtpoff(%%eax), %%eax" \
38 : "=a" (__l), "=&c" (__c), "=&d" (__d)); \
39 __l; })
40 #else
41 # define TLS_LD(x) \
42 ({ int *__l, __b, __c, __d; \
43 asm ("call 1f\n\t" \
44 ".subsection 1\n" \
45 "1:\tmovl (%%esp), %%ebx\n\t" \
46 "ret\n\t" \
47 ".previous\n\t" \
48 "addl $_GLOBAL_OFFSET_TABLE_, %%ebx\n\t" \
49 "leal " #x "@tlsldm(%%ebx),%%eax\n\t" \
50 "call ___tls_get_addr@plt\n\t" \
51 "leal " #x "@dtpoff(%%eax), %%eax" \
52 : "=a" (__l), "=&b" (__b), "=&c" (__c), "=&d" (__d)); \
53 __l; })
54 #endif
56 #if defined PIC && !__GNUC_PREREQ (5,0)
57 # define TLS_GD(x) \
58 ({ int *__l, __c, __d; \
59 asm ("leal " #x "@tlsgd(%%ebx),%%eax\n\t" \
60 "call ___tls_get_addr@plt\n\t" \
61 "nop" \
62 : "=a" (__l), "=&c" (__c), "=&d" (__d)); \
63 __l; })
64 #else
65 # define TLS_GD(x) \
66 ({ int *__l, __b, __c, __d; \
67 asm ("call 1f\n\t" \
68 ".subsection 1\n" \
69 "1:\tmovl (%%esp), %%ebx\n\t" \
70 "ret\n\t" \
71 ".previous\n\t" \
72 "addl $_GLOBAL_OFFSET_TABLE_, %%ebx\n\t" \
73 "leal " #x "@tlsgd(%%ebx),%%eax\n\t" \
74 "call ___tls_get_addr@plt\n\t" \
75 "nop" \
76 : "=a" (__l), "=&b" (__b), "=&c" (__c), "=&d" (__d)); \
77 __l; })
78 #endif