1570af302Sopenharmony_ci#if ((__ARM_ARCH_6K__ || __ARM_ARCH_6KZ__ || __ARM_ARCH_6ZK__) && !__thumb__) \
2570af302Sopenharmony_ci || __ARM_ARCH_7A__ || __ARM_ARCH_7R__ || __ARM_ARCH >= 7
3570af302Sopenharmony_ci
4570af302Sopenharmony_cistatic inline uintptr_t __get_tp()
5570af302Sopenharmony_ci{
6570af302Sopenharmony_ci	uintptr_t tp;
7570af302Sopenharmony_ci	__asm__ ( "mrc p15,0,%0,c13,c0,3" : "=r"(tp) );
8570af302Sopenharmony_ci	return tp;
9570af302Sopenharmony_ci}
10570af302Sopenharmony_ci
11570af302Sopenharmony_ci#else
12570af302Sopenharmony_ci
13570af302Sopenharmony_ci#if __ARM_ARCH_4__ || __ARM_ARCH_4T__ || __ARM_ARCH == 4
14570af302Sopenharmony_ci#define BLX "mov lr,pc\n\tbx"
15570af302Sopenharmony_ci#else
16570af302Sopenharmony_ci#define BLX "blx"
17570af302Sopenharmony_ci#endif
18570af302Sopenharmony_ci
19570af302Sopenharmony_cistatic inline uintptr_t __get_tp()
20570af302Sopenharmony_ci{
21570af302Sopenharmony_ci	extern hidden uintptr_t __a_gettp_ptr;
22570af302Sopenharmony_ci	register uintptr_t tp __asm__("r0");
23570af302Sopenharmony_ci	__asm__ ( BLX " %1" : "=r"(tp) : "r"(__a_gettp_ptr) : "cc", "lr" );
24570af302Sopenharmony_ci	return tp;
25570af302Sopenharmony_ci}
26570af302Sopenharmony_ci
27570af302Sopenharmony_ci#endif
28570af302Sopenharmony_ci
29570af302Sopenharmony_ci#ifdef __LITEOS_A__
30570af302Sopenharmony_ciextern pthread_t __pthread_self();
31570af302Sopenharmony_ci#endif
32570af302Sopenharmony_ci#define TLS_ABOVE_TP
33570af302Sopenharmony_ci#define GAP_ABOVE_TP 8
34570af302Sopenharmony_ci
35570af302Sopenharmony_ci#define MC_PC arm_pc
36