Browse Source

tests/tls: Implement TLS macros for metag

Implement the TLS macros in tls-macros.h for metag.

Signed-off-by: James Hogan <james.hogan@imgtec.com>
James Hogan 9 years ago
parent
commit
5aa5761498
1 changed files with 39 additions and 0 deletions
  1. 39 0
      test/tls/tls-macros.h

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

@@ -948,6 +948,45 @@ register void *__gp __asm__("$29");
 	  : "=r" (__l), "=r" (__t) );					\
      __l; });								\
 
+#elif defined __metag__
+
+# define TLS_GD(x)					\
+  ({ void *__result;					\
+     extern void *__tls_get_addr (void *);		\
+     __asm__ ("MOV %0, A1LbP\n\t"			\
+	  "ADD %0, %0, #(" #x "@TLSGD)"			\
+	  : "=d" (__result));				\
+     (int *)__tls_get_addr (__result); })
+
+# define TLS_LD(x)					\
+  ({ void *__result;					\
+     extern void *__tls_get_addr (void *);		\
+     __asm__ ("MOV %0, A1LbP\n\t"			\
+	  "ADD %0, %0, #(" #x "@TLSLDM)"		\
+	  : "=d" (__result));				\
+     __result = __tls_get_addr (__result);		\
+     __asm__ ("ADDT %0,%0,#HI(" #x "@TLSLDO)\n\t"	\
+	  "ADD %0,%0,#LO(" #x "@TLSLDO)"		\
+	  : "+d" (__result));				\
+     __result; })
+
+# define TLS_IE(x)					\
+  ({ void *__result;					\
+     unsigned long __rel;				\
+     extern void *__metag_load_tp (void);		\
+     __asm__ ("GETD %0,[A1LbP+#(" #x "@TLSIE)]"		\
+	  : "=d" (__rel));				\
+     __result = __metag_load_tp();			\
+     __result + __rel; })
+
+# define TLS_LE(x)					\
+  ({ void *__result;					\
+     extern void *__metag_load_tp (void);		\
+     __result = __metag_load_tp();			\
+     __asm__ ("ADDT %0,%0,#HI(" #x "@TLSLE)\n\t"	\
+	  "ADD %0,%0,#LO(" #x "@TLSLE)"			\
+	  : "+d" (__result));				\
+     __result; })
 
 #elif !defined TLS_LE || !defined TLS_IE \
       || !defined TLS_LD || !defined TLS_GD