Browse Source

add tls test macros for xtensa

http://lists.linux-xtensa.org/pipermail/linux-xtensa/Week-of-Mon-20130819/001153.html
Waldemar Brodkorb 10 years ago
parent
commit
4a076a061e
1 changed files with 37 additions and 0 deletions
  1. 37 0
      test/tls/tls-macros.h

+ 37 - 0
test/tls/tls-macros.h

@@ -885,6 +885,43 @@ register void *__gp __asm__("$29");
 	  : "=&r" (__result) : "r" (tp));		\
      __result; })
 
+#elif defined __xtensa__
+
+#define TLS_GD(x)							\
+  ({ int *__l;								\
+     asm ("movi  a8, " #x "@TLSFUNC\n\t"				\
+	  "movi a10, " #x "@TLSARG\n\t"					\
+	  "callx8.tls a8, " #x "@TLSCALL\n\t"				\
+	  "mov %0, a10\n\t"						\
+	  : "=r" (__l)							\
+	  :								\
+	  : "a8", "a9", "a10", "a11", "a12", "a13", "a14", "a15");	\
+      __l; })
+
+#define TLS_LD(x)							\
+  ({ int *__l;								\
+     asm ("movi  a8, " #x "@TLSFUNC\n\t"				\
+	  "movi a10, " #x "@TLSARG\n\t"					\
+	  "callx8.tls a8, " #x "@TLSCALL\n\t"				\
+	  "movi %0, " #x "@TPOFF\n\t"					\
+	  "add %0, %0, a10\n\t"						\
+	  : "=r" (__l)							\
+	  :								\
+	  : "a8", "a9", "a10", "a11", "a12", "a13", "a14", "a15");	\
+      __l; })
+
+#define TLS_IE(x) TLS_LE(x)
+
+#define TLS_LE(x)							\
+  ({ int *__l;								\
+     int __t;								\
+     asm ("rur %0, threadptr\n\t"					\
+	  "movi %1, " #x "@TPOFF\n\t"					\
+	  "add %0, %0, %1\n\t"						\
+	  : "=r" (__l), "=r" (__t) );					\
+     __l; });								\
+
+
 #elif !defined TLS_LE || !defined TLS_IE \
       || !defined TLS_LD || !defined TLS_GD
 # error "No support for this architecture so far."