Signed-off-by: Yann Sionneau <[email protected]>
---
 test/tls/tls-macros-powerpc64.h | 43 +++++++++++++++++++++++++++++++++
 test/tls/tls-macros.h           |  6 ++++-
 2 files changed, 48 insertions(+), 1 deletion(-)
 create mode 100644 test/tls/tls-macros-powerpc64.h

diff --git a/test/tls/tls-macros-powerpc64.h b/test/tls/tls-macros-powerpc64.h
new file mode 100644
index 0000000..6021664
--- /dev/null
+++ b/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;                                                               \
+  })
diff --git a/test/tls/tls-macros.h b/test/tls/tls-macros.h
index 71e8ef4..47e0b22 100644
--- a/test/tls/tls-macros.h
+++ b/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
-- 
2.17.1

_______________________________________________
devel mailing list
[email protected]
https://mailman.uclibc-ng.org/cgi-bin/mailman/listinfo/devel

Reply via email to