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