18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci#include <linux/linkage.h>
38c2ecf20Sopenharmony_ci
48c2ecf20Sopenharmony_ci/* Offset is based on macros from arch/powerpc/include/uapi/asm/ptrace.h. */
58c2ecf20Sopenharmony_ci#define R0	 0
68c2ecf20Sopenharmony_ci#define R1	 1 * 8
78c2ecf20Sopenharmony_ci#define R2	 2 * 8
88c2ecf20Sopenharmony_ci#define R3	 3 * 8
98c2ecf20Sopenharmony_ci#define R4	 4 * 8
108c2ecf20Sopenharmony_ci#define R5	 5 * 8
118c2ecf20Sopenharmony_ci#define R6	 6 * 8
128c2ecf20Sopenharmony_ci#define R7	 7 * 8
138c2ecf20Sopenharmony_ci#define R8	 8 * 8
148c2ecf20Sopenharmony_ci#define R9	 9 * 8
158c2ecf20Sopenharmony_ci#define R10	10 * 8
168c2ecf20Sopenharmony_ci#define R11	11 * 8
178c2ecf20Sopenharmony_ci#define R12	12 * 8
188c2ecf20Sopenharmony_ci#define R13	13 * 8
198c2ecf20Sopenharmony_ci#define R14	14 * 8
208c2ecf20Sopenharmony_ci#define R15	15 * 8
218c2ecf20Sopenharmony_ci#define R16	16 * 8
228c2ecf20Sopenharmony_ci#define R17	17 * 8
238c2ecf20Sopenharmony_ci#define R18	18 * 8
248c2ecf20Sopenharmony_ci#define R19	19 * 8
258c2ecf20Sopenharmony_ci#define R20	20 * 8
268c2ecf20Sopenharmony_ci#define R21	21 * 8
278c2ecf20Sopenharmony_ci#define R22	22 * 8
288c2ecf20Sopenharmony_ci#define R23	23 * 8
298c2ecf20Sopenharmony_ci#define R24	24 * 8
308c2ecf20Sopenharmony_ci#define R25	25 * 8
318c2ecf20Sopenharmony_ci#define R26	26 * 8
328c2ecf20Sopenharmony_ci#define R27	27 * 8
338c2ecf20Sopenharmony_ci#define R28	28 * 8
348c2ecf20Sopenharmony_ci#define R29	29 * 8
358c2ecf20Sopenharmony_ci#define R30	30 * 8
368c2ecf20Sopenharmony_ci#define R31	31 * 8
378c2ecf20Sopenharmony_ci#define NIP	32 * 8
388c2ecf20Sopenharmony_ci#define CTR	35 * 8
398c2ecf20Sopenharmony_ci#define LINK	36 * 8
408c2ecf20Sopenharmony_ci#define XER	37 * 8
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ci.globl perf_regs_load
438c2ecf20Sopenharmony_ciperf_regs_load:
448c2ecf20Sopenharmony_ci	std 0, R0(3)
458c2ecf20Sopenharmony_ci	std 1, R1(3)
468c2ecf20Sopenharmony_ci	std 2, R2(3)
478c2ecf20Sopenharmony_ci	std 3, R3(3)
488c2ecf20Sopenharmony_ci	std 4, R4(3)
498c2ecf20Sopenharmony_ci	std 5, R5(3)
508c2ecf20Sopenharmony_ci	std 6, R6(3)
518c2ecf20Sopenharmony_ci	std 7, R7(3)
528c2ecf20Sopenharmony_ci	std 8, R8(3)
538c2ecf20Sopenharmony_ci	std 9, R9(3)
548c2ecf20Sopenharmony_ci	std 10, R10(3)
558c2ecf20Sopenharmony_ci	std 11, R11(3)
568c2ecf20Sopenharmony_ci	std 12, R12(3)
578c2ecf20Sopenharmony_ci	std 13, R13(3)
588c2ecf20Sopenharmony_ci	std 14, R14(3)
598c2ecf20Sopenharmony_ci	std 15, R15(3)
608c2ecf20Sopenharmony_ci	std 16, R16(3)
618c2ecf20Sopenharmony_ci	std 17, R17(3)
628c2ecf20Sopenharmony_ci	std 18, R18(3)
638c2ecf20Sopenharmony_ci	std 19, R19(3)
648c2ecf20Sopenharmony_ci	std 20, R20(3)
658c2ecf20Sopenharmony_ci	std 21, R21(3)
668c2ecf20Sopenharmony_ci	std 22, R22(3)
678c2ecf20Sopenharmony_ci	std 23, R23(3)
688c2ecf20Sopenharmony_ci	std 24, R24(3)
698c2ecf20Sopenharmony_ci	std 25, R25(3)
708c2ecf20Sopenharmony_ci	std 26, R26(3)
718c2ecf20Sopenharmony_ci	std 27, R27(3)
728c2ecf20Sopenharmony_ci	std 28, R28(3)
738c2ecf20Sopenharmony_ci	std 29, R29(3)
748c2ecf20Sopenharmony_ci	std 30, R30(3)
758c2ecf20Sopenharmony_ci	std 31, R31(3)
768c2ecf20Sopenharmony_ci
778c2ecf20Sopenharmony_ci	/* store NIP */
788c2ecf20Sopenharmony_ci	mflr 4
798c2ecf20Sopenharmony_ci	std 4, NIP(3)
808c2ecf20Sopenharmony_ci
818c2ecf20Sopenharmony_ci	/* Store LR */
828c2ecf20Sopenharmony_ci	std 4, LINK(3)
838c2ecf20Sopenharmony_ci
848c2ecf20Sopenharmony_ci	/* Store XER */
858c2ecf20Sopenharmony_ci	mfxer 4
868c2ecf20Sopenharmony_ci	std 4, XER(3)
878c2ecf20Sopenharmony_ci
888c2ecf20Sopenharmony_ci	/* Store CTR */
898c2ecf20Sopenharmony_ci	mfctr 4
908c2ecf20Sopenharmony_ci	std 4, CTR(3)
918c2ecf20Sopenharmony_ci
928c2ecf20Sopenharmony_ci	/* Restore original value of r4 */
938c2ecf20Sopenharmony_ci	ld 4, R4(3)
948c2ecf20Sopenharmony_ci
958c2ecf20Sopenharmony_ci	blr
96