xref: /rk3399_rockchip-uboot/arch/arm/lib/setjmp_aarch64.S (revision 9563e87b414d247aa89015c100c1fdfec5a7ea29)
1c1da286aSPhilipp Tomsich/*
2c1da286aSPhilipp Tomsich * (C) 2017 Theobroma Systems Design und Consulting GmbH
3c1da286aSPhilipp Tomsich *
4c1da286aSPhilipp Tomsich * SPDX-License-Identifier:	GPL-2.0+
5c1da286aSPhilipp Tomsich */
6c1da286aSPhilipp Tomsich
7c1da286aSPhilipp Tomsich#include <config.h>
8c1da286aSPhilipp Tomsich#include <asm/macro.h>
9c1da286aSPhilipp Tomsich#include <linux/linkage.h>
10c1da286aSPhilipp Tomsich
11c1da286aSPhilipp Tomsich.pushsection .text.setjmp, "ax"
12c1da286aSPhilipp TomsichENTRY(setjmp)
13c1da286aSPhilipp Tomsich	/* Preserve all callee-saved registers and the SP */
14c1da286aSPhilipp Tomsich	stp  x19, x20, [x0,#0]
15c1da286aSPhilipp Tomsich	stp  x21, x22, [x0,#16]
16c1da286aSPhilipp Tomsich	stp  x23, x24, [x0,#32]
17c1da286aSPhilipp Tomsich	stp  x25, x26, [x0,#48]
18c1da286aSPhilipp Tomsich	stp  x27, x28, [x0,#64]
19c1da286aSPhilipp Tomsich	stp  x29, x30, [x0,#80]
20c1da286aSPhilipp Tomsich	mov  x2, sp
21c1da286aSPhilipp Tomsich	str  x2, [x0, #96]
22c1da286aSPhilipp Tomsich	mov  x0, #0
23c1da286aSPhilipp Tomsich	ret
24c1da286aSPhilipp TomsichENDPROC(setjmp)
25c1da286aSPhilipp Tomsich.popsection
26c1da286aSPhilipp Tomsich
27c1da286aSPhilipp Tomsich.pushsection .text.longjmp, "ax"
28c1da286aSPhilipp TomsichENTRY(longjmp)
29c1da286aSPhilipp Tomsich	ldp  x19, x20, [x0,#0]
30c1da286aSPhilipp Tomsich	ldp  x21, x22, [x0,#16]
31c1da286aSPhilipp Tomsich	ldp  x23, x24, [x0,#32]
32c1da286aSPhilipp Tomsich	ldp  x25, x26, [x0,#48]
33c1da286aSPhilipp Tomsich	ldp  x27, x28, [x0,#64]
34c1da286aSPhilipp Tomsich	ldp  x29, x30, [x0,#80]
35c1da286aSPhilipp Tomsich	ldr  x2, [x0,#96]
36c1da286aSPhilipp Tomsich	mov  sp, x2
37c1da286aSPhilipp Tomsich	/* Move the return value in place, but return 1 if passed 0. */
38c1da286aSPhilipp Tomsich	adds x0, xzr, x1
39c1da286aSPhilipp Tomsich	csinc x0, x0, xzr, ne
40*9563e87bSZhihuan He	/* invalid icache for cortex a35 */
41*9563e87bSZhihuan Hebranch_if_a35_core x1, __asm_invalidate_icache_all
42c1da286aSPhilipp Tomsich	ret
43c1da286aSPhilipp TomsichENDPROC(longjmp)
44c1da286aSPhilipp Tomsich.popsection
45