summaryrefslogtreecommitdiff
path: root/test/tls/tls-macros-arc.h
blob: 2f621d5a87836305c108139f27c7acb95c6e6609 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/* For now */
#define TLS_LD(x)	TLS_IE(x)

#define TLS_GD(x)					\
  ({ void *__result;					\
     extern void *__tls_get_addr (void *);      \
     __asm__ ("add %0, pcl, @" #x "@tlsgd \n"     \
        ".tls_gd_ld " #x " \n"    \
      : "=r" (__result));		\
     (int *)__tls_get_addr(__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; })