Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/contrib/openzfs/module/lua/setjmp/setjmp_aarch64.S
48535 views
1
// SPDX-License-Identifier: BSD-2-Clause
2
/*-
3
* Copyright (c) 2014 Andrew Turner
4
* Copyright (c) 2014-2015 The FreeBSD Foundation
5
* All rights reserved.
6
*
7
* Portions of this software were developed by Andrew Turner
8
* under sponsorship from the FreeBSD Foundation
9
*
10
* Redistribution and use in source and binary forms, with or without
11
* modification, are permitted provided that the following conditions
12
* are met:
13
* 1. Redistributions of source code must retain the above copyright
14
* notice, this list of conditions and the following disclaimer.
15
* 2. Redistributions in binary form must reproduce the above copyright
16
* notice, this list of conditions and the following disclaimer in the
17
* documentation and/or other materials provided with the distribution.
18
*
19
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
20
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
23
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29
* SUCH DAMAGE.
30
*
31
*/
32
33
34
#ifdef __aarch64__
35
36
#define ENTRY(sym) \
37
.text; \
38
.globl sym; \
39
.balign 2; \
40
.type sym,#function; \
41
sym:
42
43
#define END(sym) \
44
.size sym, . - sym
45
46
47
ENTRY(setjmp)
48
/* Store the stack pointer */
49
mov x8, sp
50
str x8, [x0], #8
51
52
/* Store the general purpose registers and lr */
53
stp x19, x20, [x0], #16
54
stp x21, x22, [x0], #16
55
stp x23, x24, [x0], #16
56
stp x25, x26, [x0], #16
57
stp x27, x28, [x0], #16
58
stp x29, x30, [x0], #16
59
60
/* Return value */
61
mov x0, #0
62
ret
63
END(setjmp)
64
65
ENTRY(longjmp)
66
/* Restore the stack pointer */
67
ldr x8, [x0], #8
68
mov sp, x8
69
70
/* Restore the general purpose registers and lr */
71
ldp x19, x20, [x0], #16
72
ldp x21, x22, [x0], #16
73
ldp x23, x24, [x0], #16
74
ldp x25, x26, [x0], #16
75
ldp x27, x28, [x0], #16
76
ldp x29, x30, [x0], #16
77
78
/* Load the return value */
79
mov x0, x1
80
ret
81
END(longjmp)
82
83
#ifdef __ELF__
84
.section .note.GNU-stack,"",%progbits
85
#endif
86
87
#endif /* __aarch64__ */
88
89