From bf6fcd59d1ff51584a703b1d78c9e8fd4f808917 Mon Sep 17 00:00:00 2001 From: Fabrice Fontaine Date: Sat, 28 Nov 2020 11:44:00 +0100 Subject: add nios2 tls macros from glibc Retrieved from https://github.com/bminor/glibc/blob/master/sysdeps/nios2/tls-macros.h Signed-off-by: Fabrice Fontaine --- test/tls/tls-macros-nios2.h | 46 +++++++++++++++++++++++++++++++++++++++++++++ test/tls/tls-macros.h | 4 ++++ 2 files changed, 50 insertions(+) create mode 100644 test/tls/tls-macros-nios2.h diff --git a/test/tls/tls-macros-nios2.h b/test/tls/tls-macros-nios2.h new file mode 100644 index 0000000..7029530 --- /dev/null +++ b/test/tls/tls-macros-nios2.h @@ -0,0 +1,46 @@ +#define TLS_LE(x) \ + ({ int *__result; \ + asm ("addi %0, r23, %%tls_le(" #x ")" \ + : "=r" (__result)); \ + __result; }) + +#define TLS_IE(x) \ + ({ int *__result; \ + int __tmp; \ + asm ("nextpc %0 ; " \ + "1: movhi %1, %%hiadj(_gp_got - 1b) ; " \ + "addi %1, %1, %%lo(_gp_got - 1b) ; " \ + "add %0, %0, %1 ; " \ + "ldw %1, %%tls_ie(" #x ")(%0) ; " \ + "add %1, r23, %1" \ + : "=&r" (__tmp), "=&r" (__result)); \ + __result; }) + +#define TLS_LD(x) \ + ({ char *__result; \ + char *__result2; \ + int *__result3; \ + int __tmp; \ + extern void *__tls_get_addr (void *); \ + asm ("nextpc %0 ; " \ + "1: movhi %1, %%hiadj(_gp_got - 1b) ; " \ + "addi %1, %1, %%lo(_gp_got - 1b) ; " \ + "add %0, %0, %1 ; " \ + "addi %0, %0, %%tls_ldm(" #x ")" \ + : "=r" (__result), "=r" (__tmp)); \ + __result2 = (char *)__tls_get_addr (__result); \ + asm ("addi %0, %1, %%tls_ldo(" #x ")" \ + : "=r" (__result3) : "r" (__result2)); \ + __result3; }) + +#define TLS_GD(x) \ + ({ int *__result; \ + int __tmp; \ + extern void *__tls_get_addr (void *); \ + asm ("nextpc %0 ; " \ + "1: movhi %1, %%hiadj(_gp_got - 1b) ; " \ + "addi %1, %1, %%lo(_gp_got - 1b) ; " \ + "add %0, %0, %1 ; " \ + "addi %0, %0, %%tls_gd(" #x ")" \ + : "=r" (__result), "=r" (__tmp)); \ + (int *)__tls_get_addr (__result); }) diff --git a/test/tls/tls-macros.h b/test/tls/tls-macros.h index 4a4e916..087b365 100644 --- a/test/tls/tls-macros.h +++ b/test/tls/tls-macros.h @@ -64,6 +64,10 @@ #include #endif +#ifdef __nios2__ +#include +#endif + #if defined(__powerpc__) && !defined(__powerpc64__) #include #endif -- cgit v1.2.3