162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci#include <linux/linkage.h>
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci.text
562306a36Sopenharmony_ci.type perf_regs_load,%function
662306a36Sopenharmony_ci#define STR_REG(r)	str x##r, [x0, 8 * r]
762306a36Sopenharmony_ci#define LDR_REG(r)	ldr x##r, [x0, 8 * r]
862306a36Sopenharmony_ci#define SP	(8 * 31)
962306a36Sopenharmony_ci#define PC	(8 * 32)
1062306a36Sopenharmony_ciSYM_FUNC_START(perf_regs_load)
1162306a36Sopenharmony_ci	STR_REG(0)
1262306a36Sopenharmony_ci	STR_REG(1)
1362306a36Sopenharmony_ci	STR_REG(2)
1462306a36Sopenharmony_ci	STR_REG(3)
1562306a36Sopenharmony_ci	STR_REG(4)
1662306a36Sopenharmony_ci	STR_REG(5)
1762306a36Sopenharmony_ci	STR_REG(6)
1862306a36Sopenharmony_ci	STR_REG(7)
1962306a36Sopenharmony_ci	STR_REG(8)
2062306a36Sopenharmony_ci	STR_REG(9)
2162306a36Sopenharmony_ci	STR_REG(10)
2262306a36Sopenharmony_ci	STR_REG(11)
2362306a36Sopenharmony_ci	STR_REG(12)
2462306a36Sopenharmony_ci	STR_REG(13)
2562306a36Sopenharmony_ci	STR_REG(14)
2662306a36Sopenharmony_ci	STR_REG(15)
2762306a36Sopenharmony_ci	STR_REG(16)
2862306a36Sopenharmony_ci	STR_REG(17)
2962306a36Sopenharmony_ci	STR_REG(18)
3062306a36Sopenharmony_ci	STR_REG(19)
3162306a36Sopenharmony_ci	STR_REG(20)
3262306a36Sopenharmony_ci	STR_REG(21)
3362306a36Sopenharmony_ci	STR_REG(22)
3462306a36Sopenharmony_ci	STR_REG(23)
3562306a36Sopenharmony_ci	STR_REG(24)
3662306a36Sopenharmony_ci	STR_REG(25)
3762306a36Sopenharmony_ci	STR_REG(26)
3862306a36Sopenharmony_ci	STR_REG(27)
3962306a36Sopenharmony_ci	STR_REG(28)
4062306a36Sopenharmony_ci	STR_REG(29)
4162306a36Sopenharmony_ci	STR_REG(30)
4262306a36Sopenharmony_ci	mov x1, sp
4362306a36Sopenharmony_ci	str x1, [x0, #SP]
4462306a36Sopenharmony_ci	str x30, [x0, #PC]
4562306a36Sopenharmony_ci	LDR_REG(1)
4662306a36Sopenharmony_ci	ret
4762306a36Sopenharmony_ciSYM_FUNC_END(perf_regs_load)
48