Browse Source

powerpc64: add missing tls macros

Signed-off-by: Yann Sionneau <yann@sionneau.net>
Yann Sionneau 4 years ago
parent
commit
a2c48a52d2
2 changed files with 48 additions and 1 deletions
  1. 43 0
      test/tls/tls-macros-powerpc64.h
  2. 5 1
      test/tls/tls-macros.h

+ 43 - 0
test/tls/tls-macros-powerpc64.h

@@ -0,0 +1,43 @@
+#define __TLS_CALL_CLOBBERS						\
+	"0", "4", "5", "6", "7", "8", "9", "10", "11", "12",	\
+	"lr", "ctr", "cr0", "cr1", "cr5", "cr6", "cr7"
+
+/* PowerPC64 Local Exec TLS access.  */
+#define TLS_LE(x)							      \
+  ({ int * __result;							      \
+     asm ("addis %0,13," #x "@tprel@ha\n\t"				      \
+	  "addi  %0,%0," #x "@tprel@l"					      \
+	  : "=b" (__result) );						      \
+     __result;								      \
+  })
+/* PowerPC64 Initial Exec TLS access.  */
+#define TLS_IE(x)							      \
+  ({ int * __result;							      \
+     asm ("ld  %0," #x "@got@tprel(2)\n\t"				      \
+	  "add %0,%0," #x "@tls"					      \
+	  : "=r" (__result) );						      \
+     __result;								      \
+  })
+
+/* PowerPC64 Local Dynamic TLS access.  */
+#define TLS_LD(x)							      \
+  ({ int * __result;							      \
+     asm ("addi  3,2," #x "@got@tlsld\n\t"				      \
+	  "bl    __tls_get_addr\n\t"					      \
+	  "nop   \n\t"							      \
+	  "addis %0,3," #x "@dtprel@ha\n\t"				      \
+	  "addi  %0,%0," #x "@dtprel@l"					      \
+	  : "=b" (__result) :						      \
+	  : "3", __TLS_CALL_CLOBBERS);					      \
+     __result;								      \
+  })
+/* PowerPC64 General Dynamic TLS access.  */
+#define TLS_GD(x)							      \
+  ({ register int *__result __asm__ ("r3");				      \
+     asm ("addi  3,2," #x "@got@tlsgd\n\t"				      \
+	  "bl    __tls_get_addr\n\t"					      \
+	  "nop   "							      \
+	  : "=r" (__result) :						      \
+	  : __TLS_CALL_CLOBBERS);					      \
+     __result;								      \
+  })

+ 5 - 1
test/tls/tls-macros.h

@@ -56,10 +56,14 @@
 #include <tls-macros-mips.h>
 #endif
 
-#ifdef __powerpc__
+#if defined(__powerpc__) && !defined(__powerpc64__)
 #include <tls-macros-powerpc.h>
 #endif
 
+#if defined(__powerpc__) && defined(__powerpc64__)
+#include <tls-macros-powerpc64.h>
+#endif
+
 #ifdef __sh__
 #include <tls-macros-sh.h>
 #endif