test: reorganize tls macros in separate architecture files
[uclibc-ng.git] / test / tls / tls-macros-xtensa.h
blob179dc5e57ce521a50d152c51aced946146cbef8b
1 #if defined(__XTENSA_WINDOWED_ABI__)
2 #define TLS_GD(x) \
3 ({ int *__l; \
4 __asm__ ("movi a8, " #x "@TLSFUNC\n\t" \
5 "movi a10, " #x "@TLSARG\n\t" \
6 "callx8.tls a8, " #x "@TLSCALL\n\t" \
7 "mov %0, a10\n\t" \
8 : "=r" (__l) \
9 : \
10 : "a8", "a9", "a10", "a11", "a12", "a13", "a14", "a15"); \
11 __l; })
13 #define TLS_LD(x) \
14 ({ int *__l; \
15 __asm__ ("movi a8, _TLS_MODULE_BASE_@TLSFUNC\n\t" \
16 "movi a10, _TLS_MODULE_BASE_@TLSARG\n\t" \
17 "callx8.tls a8, _TLS_MODULE_BASE_@TLSCALL\n\t" \
18 "movi %0, " #x "@TPOFF\n\t" \
19 "add %0, %0, a10\n\t" \
20 : "=r" (__l) \
21 : \
22 : "a8", "a9", "a10", "a11", "a12", "a13", "a14", "a15"); \
23 __l; })
24 #elif defined(__XTENSA_CALL0_ABI__)
25 #define TLS_GD(x) \
26 ({ int *__l; \
27 __asm__ ("movi a0, " #x "@TLSFUNC\n\t" \
28 "movi a2, " #x "@TLSARG\n\t" \
29 "callx0.tls a0, " #x "@TLSCALL\n\t" \
30 "mov %0, a2\n\t" \
31 : "=r" (__l) \
32 : \
33 : "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11");\
34 __l; })
36 #define TLS_LD(x) \
37 ({ int *__l; \
38 __asm__ ("movi a0, _TLS_MODULE_BASE_@TLSFUNC\n\t" \
39 "movi a2, _TLS_MODULE_BASE_@TLSARG\n\t" \
40 "callx0.tls a0, _TLS_MODULE_BASE_@TLSCALL\n\t" \
41 "movi %0, " #x "@TPOFF\n\t" \
42 "add %0, %0, a2\n\t" \
43 : "=r" (__l) \
44 : \
45 : "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11");\
46 __l; })
47 #else
48 #error Unsupported Xtensa ABI
49 #endif
51 #define TLS_IE(x) TLS_LE(x)
53 #define TLS_LE(x) \
54 ({ int *__l; \
55 int __t; \
56 __asm__ ("rur %0, threadptr\n\t" \
57 "movi %1, " #x "@TPOFF\n\t" \
58 "add %0, %0, %1\n\t" \
59 : "=r" (__l), "=r" (__t) ); \
60 __l; }); \