162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci#ifndef __ASM_SPARC_PERF_EVENT_H
362306a36Sopenharmony_ci#define __ASM_SPARC_PERF_EVENT_H
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#ifdef CONFIG_PERF_EVENTS
662306a36Sopenharmony_ci#include <asm/ptrace.h>
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#define perf_arch_fetch_caller_regs(regs, ip)		\
962306a36Sopenharmony_cido {							\
1062306a36Sopenharmony_ci	unsigned long _pstate, _asi, _pil, _i7, _fp;	\
1162306a36Sopenharmony_ci	__asm__ __volatile__("rdpr %%pstate, %0\n\t"	\
1262306a36Sopenharmony_ci			     "rd %%asi, %1\n\t"		\
1362306a36Sopenharmony_ci			     "rdpr %%pil, %2\n\t"	\
1462306a36Sopenharmony_ci			     "mov %%i7, %3\n\t"		\
1562306a36Sopenharmony_ci			     "mov %%i6, %4\n\t"		\
1662306a36Sopenharmony_ci			     : "=r" (_pstate),		\
1762306a36Sopenharmony_ci			       "=r" (_asi),		\
1862306a36Sopenharmony_ci			       "=r" (_pil),		\
1962306a36Sopenharmony_ci			       "=r" (_i7),		\
2062306a36Sopenharmony_ci			       "=r" (_fp));		\
2162306a36Sopenharmony_ci	(regs)->tstate = (_pstate << 8) |		\
2262306a36Sopenharmony_ci		(_asi << 24) | (_pil << 20);		\
2362306a36Sopenharmony_ci	(regs)->tpc = (ip);				\
2462306a36Sopenharmony_ci	(regs)->tnpc = (regs)->tpc + 4;			\
2562306a36Sopenharmony_ci	(regs)->u_regs[UREG_I6] = _fp;			\
2662306a36Sopenharmony_ci	(regs)->u_regs[UREG_I7] = _i7;			\
2762306a36Sopenharmony_ci} while (0)
2862306a36Sopenharmony_ci#endif
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci#endif
31