]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - module/lua/setjmp/setjmp_rv64g.S
Vendor import of openzfs master @ 184df27eef0abdc7ab2105b21257f753834b936b
[FreeBSD/FreeBSD.git] / module / lua / setjmp / setjmp_rv64g.S
1 /*-
2  * Copyright (c) 2015-2016 Ruslan Bukin <br@bsdpad.com>
3  * All rights reserved.
4  *
5  * Portions of this software were developed by SRI International and the
6  * University of Cambridge Computer Laboratory under DARPA/AFRL contract
7  * FA8750-10-C-0237 ("CTSRD"), as part of the DARPA CRASH research programme.
8  *
9  * Portions of this software were developed by the University of Cambridge
10  * Computer Laboratory as part of the CTSRD Project, with support from the
11  * UK Higher Education Innovation Fund (HEIF).
12  *
13  * Redistribution and use in source and binary forms, with or without
14  * modification, are permitted provided that the following conditions
15  * are met:
16  * 1. Redistributions of source code must retain the above copyright
17  *    notice, this list of conditions and the following disclaimer.
18  * 2. Redistributions in binary form must reproduce the above copyright
19  *    notice, this list of conditions and the following disclaimer in the
20  *    documentation and/or other materials provided with the distribution.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
23  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
26  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32  * SUCH DAMAGE.
33  */
34
35 #define ENTRY(sym)                                              \
36         .text; .globl sym; .type sym,@function; sym:
37 #define END(sym) .size sym, . - sym
38
39
40 ENTRY(setjmp)
41         /* Store the stack pointer */
42         sd      sp, (0 * 8)(a0)
43         addi    a0, a0, (1 * 8)
44
45         /* Store the general purpose registers and ra */
46         sd      s0, (0 * 8)(a0)
47         sd      s1, (1 * 8)(a0)
48         sd      s2, (2 * 8)(a0)
49         sd      s3, (3 * 8)(a0)
50         sd      s4, (4 * 8)(a0)
51         sd      s5, (5 * 8)(a0)
52         sd      s6, (6 * 8)(a0)
53         sd      s7, (7 * 8)(a0)
54         sd      s8, (8 * 8)(a0)
55         sd      s9, (9 * 8)(a0)
56         sd      s10, (10 * 8)(a0)
57         sd      s11, (11 * 8)(a0)
58         sd      ra, (12 * 8)(a0)
59         addi    a0, a0, (13 * 8)
60
61         /* Return value */
62         li      a0, 0
63         ret
64 END(setjmp)
65
66 ENTRY(longjmp)
67         /* Restore the stack pointer */
68         ld      t0, 0(a0)
69         mv      sp, t0
70         addi    a0, a0, (1 * 8)
71
72         /* Restore the general purpose registers and ra */
73         ld      s0, (0 * 8)(a0)
74         ld      s1, (1 * 8)(a0)
75         ld      s2, (2 * 8)(a0)
76         ld      s3, (3 * 8)(a0)
77         ld      s4, (4 * 8)(a0)
78         ld      s5, (5 * 8)(a0)
79         ld      s6, (6 * 8)(a0)
80         ld      s7, (7 * 8)(a0)
81         ld      s8, (8 * 8)(a0)
82         ld      s9, (9 * 8)(a0)
83         ld      s10, (10 * 8)(a0)
84         ld      s11, (11 * 8)(a0)
85         ld      ra, (12 * 8)(a0)
86         addi    a0, a0, (13 * 8)
87
88         /* Load the return value */
89         mv      a0, a1
90         ret
91 END(longjmp)