diff options
author | Adhemerval Zanella <azanella@linux.vnet.ibm.com> | 2012-07-19 17:04:04 -0300 |
---|---|---|
committer | Adhemerval Zanella <azanella@linux.vnet.ibm.com> | 2012-07-19 17:04:04 -0300 |
commit | d37cbdaa86f484dc5be58be391da739df862bf96 (patch) | |
tree | 3363fbb96de6e8a33e2612f3474f81241ed85fcd /sysdeps/powerpc/powerpc64/tls-macros.h | |
parent | 46f85fc22637213e4a97b306f40a64ae09f82f18 (diff) | |
download | glibc-d37cbdaa86f484dc5be58be391da739df862bf96.tar.gz glibc-d37cbdaa86f484dc5be58be391da739df862bf96.tar.xz glibc-d37cbdaa86f484dc5be58be391da739df862bf96.zip |
Split tls-macros.h in sysdeps directories.
Split PowerPC definitions in PPC32 and PPC64 headers.
Diffstat (limited to 'sysdeps/powerpc/powerpc64/tls-macros.h')
-rw-r--r-- | sysdeps/powerpc/powerpc64/tls-macros.h | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/sysdeps/powerpc/powerpc64/tls-macros.h b/sysdeps/powerpc/powerpc64/tls-macros.h new file mode 100644 index 0000000000..198215d5f2 --- /dev/null +++ b/sysdeps/powerpc/powerpc64/tls-macros.h @@ -0,0 +1,46 @@ +/* Include sysdeps/powerpc/tls-macros.h for __TLS_CALL_CLOBBERS */ +#include_next "tls-macros.h" + +/* 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; \ + }) +#ifdef HAVE_ASM_GLOBAL_DOT_NAME +# define __TLS_GET_ADDR ".__tls_get_addr" +#else +# define __TLS_GET_ADDR "__tls_get_addr" +#endif +/* 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; \ + }) |