: "=r" (__l)); \
__l; })
-# ifdef PIC
+# ifdef __PIC__
# define TLS_IE(x) \
({ int *__l; \
__asm__ ("movl %%gs:0,%0\n\t" \
__l; })
# endif
-# ifdef PIC
+# ifdef __PIC__
# define TLS_LD(x) \
({ int *__l, __c, __d; \
__asm__ ("leal " #x "@tlsldm(%%ebx),%%eax\n\t" \
__l; })
# endif
-# ifdef PIC
+# ifdef __PIC__
# define TLS_GD(x) \
({ int *__l, __c, __d; \
__asm__ ("leal " #x "@tlsgd(%%ebx),%%eax\n\t" \
: "=r" (__l), "=r" (__tp)); \
__l; })
-# ifdef PIC
+# ifdef __PIC__
# define TLS_IE(x) \
({ int *__l; void *__tp; \
register void *__gp __asm__("r12"); \
__l; })
#endif
-# ifdef PIC
+# ifdef __PIC__
# define TLS_LD(x) \
({ int *__l; \
register void *__gp __asm__("r12"); \
__l; })
#endif
-# ifdef PIC
+# ifdef __PIC__
# define TLS_GD(x) \
({ int *__l; \
register void *__gp __asm__("r12"); \
: "=a" (__offset) : : "cc" ); \
(int *) (__builtin_thread_pointer() + __offset); })
-# ifdef PIC
+# ifdef __PIC__
# define TLS_IE(x) \
({ unsigned long __offset; \
__asm__ ("bras %0,1f\n" \
(int *) (__builtin_thread_pointer() + __offset); })
# endif
-# ifdef PIC
+# ifdef __PIC__
# define TLS_LD(x) \
({ unsigned long __offset, __save12; \
__asm__ ("bras %0,1f\n" \
(int *) (__builtin_thread_pointer() + __offset); })
# endif
-# ifdef PIC
+# ifdef __PIC__
# define TLS_GD(x) \
({ unsigned long __offset, __save12; \
__asm__ ("bras %0,1f\n" \
: "=a" (__offset) : : "cc" ); \
(int *) (__builtin_thread_pointer() + __offset); })
-# ifdef PIC
+# ifdef __PIC__
# define TLS_IE(x) \
({ unsigned long __offset; \
__asm__ ("bras %0,1f\n" \
(int *) (__builtin_thread_pointer() + __offset); })
# endif
-# ifdef PIC
+# ifdef __PIC__
# define TLS_LD(x) \
({ unsigned long __offset, __save12; \
__asm__ ("bras %0,1f\n" \
(int *) (__builtin_thread_pointer() + __offset); })
# endif
-# ifdef PIC
+# ifdef __PIC__
# define TLS_GD(x) \
({ unsigned long __offset, __save12; \
__asm__ ("bras %0,1f\n" \
#elif defined __powerpc__ && !defined __powerpc64__
-#include "config.h"
+/*#include "config.h"*/
# define __TLS_CALL_CLOBBERS \
"0", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", \
__result; \
})
+#elif defined __arc__
+
+/* For now */
+#define TLS_LD(x) TLS_IE(x)
+
+#define TLS_GD(x) \
+ ({ int *__result; \
+ __asm__ ("add r0, pcl, @" #x "@tlsgd \n" \
+ ".tls_gd_ld " #x "`bl __tls_get_addr@plt \n" \
+ "mov %0, r0 \n" \
+ : "=&r" (__result) \
+ ::"r0","r1","r2","r3","r4","r5","r6","r7", \
+ "r8","r9","r10","r11","r12"); \
+ __result; })
+
+#define TLS_LE(x) \
+ ({ int *__result; \
+ void *tp = __builtin_thread_pointer(); \
+ __asm__ ("add %0, %1, @" #x "@tpoff \n" \
+ : "=r" (__result) : "r"(tp)); \
+ __result; })
+
+#define TLS_IE(x) \
+ ({ int *__result; \
+ void *tp = __builtin_thread_pointer(); \
+ __asm__ ("ld %0, [pcl, @" #x "@tlsie] \n" \
+ "add %0, %1, %0 \n" \
+ : "=&r" (__result) : "r" (tp)); \
+ __result; })
+
#elif !defined TLS_LE || !defined TLS_IE \
|| !defined TLS_LD || !defined TLS_GD
# error "No support for this architecture so far."