xref: /aosp_15_r20/external/linux-kselftest/tools/testing/selftests/rseq/rseq-ppc-thread-pointer.h (revision 053f45be4e351dfd5e965df293cd45b779f579ee)
1*053f45beSAndroid Build Coastguard Worker /* SPDX-License-Identifier: LGPL-2.1-only OR MIT */
2*053f45beSAndroid Build Coastguard Worker /*
3*053f45beSAndroid Build Coastguard Worker  * rseq-ppc-thread-pointer.h
4*053f45beSAndroid Build Coastguard Worker  *
5*053f45beSAndroid Build Coastguard Worker  * (C) Copyright 2021 - Mathieu Desnoyers <[email protected]>
6*053f45beSAndroid Build Coastguard Worker  */
7*053f45beSAndroid Build Coastguard Worker 
8*053f45beSAndroid Build Coastguard Worker #ifndef _RSEQ_PPC_THREAD_POINTER
9*053f45beSAndroid Build Coastguard Worker #define _RSEQ_PPC_THREAD_POINTER
10*053f45beSAndroid Build Coastguard Worker 
11*053f45beSAndroid Build Coastguard Worker #ifdef __cplusplus
12*053f45beSAndroid Build Coastguard Worker extern "C" {
13*053f45beSAndroid Build Coastguard Worker #endif
14*053f45beSAndroid Build Coastguard Worker 
rseq_thread_pointer(void)15*053f45beSAndroid Build Coastguard Worker static inline void *rseq_thread_pointer(void)
16*053f45beSAndroid Build Coastguard Worker {
17*053f45beSAndroid Build Coastguard Worker #ifdef __powerpc64__
18*053f45beSAndroid Build Coastguard Worker 	register void *__result asm ("r13");
19*053f45beSAndroid Build Coastguard Worker #else
20*053f45beSAndroid Build Coastguard Worker 	register void *__result asm ("r2");
21*053f45beSAndroid Build Coastguard Worker #endif
22*053f45beSAndroid Build Coastguard Worker 	asm ("" : "=r" (__result));
23*053f45beSAndroid Build Coastguard Worker 	return __result;
24*053f45beSAndroid Build Coastguard Worker }
25*053f45beSAndroid Build Coastguard Worker 
26*053f45beSAndroid Build Coastguard Worker #ifdef __cplusplus
27*053f45beSAndroid Build Coastguard Worker }
28*053f45beSAndroid Build Coastguard Worker #endif
29*053f45beSAndroid Build Coastguard Worker 
30*053f45beSAndroid Build Coastguard Worker #endif
31