xref: /aosp_15_r20/external/musl/arch/arm/pthread_arch.h (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
1*c9945492SAndroid Build Coastguard Worker #if ((__ARM_ARCH_6K__ || __ARM_ARCH_6KZ__ || __ARM_ARCH_6ZK__) && !__thumb__) \
2*c9945492SAndroid Build Coastguard Worker  || __ARM_ARCH_7A__ || __ARM_ARCH_7R__ || __ARM_ARCH >= 7
3*c9945492SAndroid Build Coastguard Worker 
__get_tp()4*c9945492SAndroid Build Coastguard Worker static inline uintptr_t __get_tp()
5*c9945492SAndroid Build Coastguard Worker {
6*c9945492SAndroid Build Coastguard Worker 	uintptr_t tp;
7*c9945492SAndroid Build Coastguard Worker 	__asm__ ( "mrc p15,0,%0,c13,c0,3" : "=r"(tp) );
8*c9945492SAndroid Build Coastguard Worker 	return tp;
9*c9945492SAndroid Build Coastguard Worker }
10*c9945492SAndroid Build Coastguard Worker 
11*c9945492SAndroid Build Coastguard Worker #else
12*c9945492SAndroid Build Coastguard Worker 
13*c9945492SAndroid Build Coastguard Worker #if __ARM_ARCH_4__ || __ARM_ARCH_4T__ || __ARM_ARCH == 4
14*c9945492SAndroid Build Coastguard Worker #define BLX "mov lr,pc\n\tbx"
15*c9945492SAndroid Build Coastguard Worker #else
16*c9945492SAndroid Build Coastguard Worker #define BLX "blx"
17*c9945492SAndroid Build Coastguard Worker #endif
18*c9945492SAndroid Build Coastguard Worker 
__get_tp()19*c9945492SAndroid Build Coastguard Worker static inline uintptr_t __get_tp()
20*c9945492SAndroid Build Coastguard Worker {
21*c9945492SAndroid Build Coastguard Worker 	extern hidden uintptr_t __a_gettp_ptr;
22*c9945492SAndroid Build Coastguard Worker 	register uintptr_t tp __asm__("r0");
23*c9945492SAndroid Build Coastguard Worker 	__asm__ ( BLX " %1" : "=r"(tp) : "r"(__a_gettp_ptr) : "cc", "lr" );
24*c9945492SAndroid Build Coastguard Worker 	return tp;
25*c9945492SAndroid Build Coastguard Worker }
26*c9945492SAndroid Build Coastguard Worker 
27*c9945492SAndroid Build Coastguard Worker #endif
28*c9945492SAndroid Build Coastguard Worker 
29*c9945492SAndroid Build Coastguard Worker #define TLS_ABOVE_TP
30*c9945492SAndroid Build Coastguard Worker #define GAP_ABOVE_TP 8
31*c9945492SAndroid Build Coastguard Worker 
32*c9945492SAndroid Build Coastguard Worker #define MC_PC arm_pc
33