]> git.sur5r.net Git - u-boot/blob - arch/arm/lib/setjmp_aarch64.S
Merge git://git.denx.de/u-boot-rockchip
[u-boot] / arch / arm / lib / setjmp_aarch64.S
1 /*
2  * (C) 2017 Theobroma Systems Design und Consulting GmbH
3  *
4  * SPDX-License-Identifier:     GPL-2.0+
5  */
6
7 #include <config.h>
8 #include <asm/macro.h>
9 #include <linux/linkage.h>
10
11 .pushsection .text.setjmp, "ax"
12 ENTRY(setjmp)
13         /* Preserve all callee-saved registers and the SP */
14         stp  x19, x20, [x0,#0]
15         stp  x21, x22, [x0,#16]
16         stp  x23, x24, [x0,#32]
17         stp  x25, x26, [x0,#48]
18         stp  x27, x28, [x0,#64]
19         stp  x29, x30, [x0,#80]
20         mov  x2, sp
21         str  x2, [x0, #96]
22         mov  x0, #0
23         ret
24 ENDPROC(setjmp)
25 .popsection
26
27 .pushsection .text.longjmp, "ax"
28 ENTRY(longjmp)
29         ldp  x19, x20, [x0,#0]
30         ldp  x21, x22, [x0,#16]
31         ldp  x23, x24, [x0,#32]
32         ldp  x25, x26, [x0,#48]
33         ldp  x27, x28, [x0,#64]
34         ldp  x29, x30, [x0,#80]
35         ldr  x2, [x0,#96]
36         mov  sp, x2
37         /* Move the return value in place, but return 1 if passed 0. */
38         adds x0, xzr, x1
39         csinc x0, x0, xzr, ne
40         ret
41 ENDPROC(longjmp)
42 .popsection