18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci#ifndef __ASM_SPARC_PERF_EVENT_H
38c2ecf20Sopenharmony_ci#define __ASM_SPARC_PERF_EVENT_H
48c2ecf20Sopenharmony_ci
58c2ecf20Sopenharmony_ci#ifdef CONFIG_PERF_EVENTS
68c2ecf20Sopenharmony_ci#include <asm/ptrace.h>
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci#define perf_arch_fetch_caller_regs(regs, ip)		\
98c2ecf20Sopenharmony_cido {							\
108c2ecf20Sopenharmony_ci	unsigned long _pstate, _asi, _pil, _i7, _fp;	\
118c2ecf20Sopenharmony_ci	__asm__ __volatile__("rdpr %%pstate, %0\n\t"	\
128c2ecf20Sopenharmony_ci			     "rd %%asi, %1\n\t"		\
138c2ecf20Sopenharmony_ci			     "rdpr %%pil, %2\n\t"	\
148c2ecf20Sopenharmony_ci			     "mov %%i7, %3\n\t"		\
158c2ecf20Sopenharmony_ci			     "mov %%i6, %4\n\t"		\
168c2ecf20Sopenharmony_ci			     : "=r" (_pstate),		\
178c2ecf20Sopenharmony_ci			       "=r" (_asi),		\
188c2ecf20Sopenharmony_ci			       "=r" (_pil),		\
198c2ecf20Sopenharmony_ci			       "=r" (_i7),		\
208c2ecf20Sopenharmony_ci			       "=r" (_fp));		\
218c2ecf20Sopenharmony_ci	(regs)->tstate = (_pstate << 8) |		\
228c2ecf20Sopenharmony_ci		(_asi << 24) | (_pil << 20);		\
238c2ecf20Sopenharmony_ci	(regs)->tpc = (ip);				\
248c2ecf20Sopenharmony_ci	(regs)->tnpc = (regs)->tpc + 4;			\
258c2ecf20Sopenharmony_ci	(regs)->u_regs[UREG_I6] = _fp;			\
268c2ecf20Sopenharmony_ci	(regs)->u_regs[UREG_I7] = _i7;			\
278c2ecf20Sopenharmony_ci} while (0)
288c2ecf20Sopenharmony_ci#endif
298c2ecf20Sopenharmony_ci
308c2ecf20Sopenharmony_ci#endif
31