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