Path: blob/main/sys/contrib/openzfs/module/lua/setjmp/setjmp_rv64g.S
48535 views
// SPDX-License-Identifier: BSD-2-Clause1/*-2* Copyright (c) 2015-2016 Ruslan Bukin <[email protected]>3* All rights reserved.4*5* Portions of this software were developed by SRI International and the6* University of Cambridge Computer Laboratory under DARPA/AFRL contract7* 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 Cambridge10* Computer Laboratory as part of the CTSRD Project, with support from the11* UK Higher Education Innovation Fund (HEIF).12*13* Redistribution and use in source and binary forms, with or without14* modification, are permitted provided that the following conditions15* are met:16* 1. Redistributions of source code must retain the above copyright17* notice, this list of conditions and the following disclaimer.18* 2. Redistributions in binary form must reproduce the above copyright19* notice, this list of conditions and the following disclaimer in the20* documentation and/or other materials provided with the distribution.21*22* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND23* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE24* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE25* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE26* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL27* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS28* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)29* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT30* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY31* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF32* SUCH DAMAGE.33*/3435#define ENTRY(sym) \36.text; .globl sym; .type sym,@function; sym:37#define END(sym) .size sym, . - sym383940ENTRY(setjmp)41/* Store the stack pointer */42sd sp, (0 * 8)(a0)43addi a0, a0, (1 * 8)4445/* Store the general purpose registers and ra */46sd s0, (0 * 8)(a0)47sd s1, (1 * 8)(a0)48sd s2, (2 * 8)(a0)49sd s3, (3 * 8)(a0)50sd s4, (4 * 8)(a0)51sd s5, (5 * 8)(a0)52sd s6, (6 * 8)(a0)53sd s7, (7 * 8)(a0)54sd s8, (8 * 8)(a0)55sd s9, (9 * 8)(a0)56sd s10, (10 * 8)(a0)57sd s11, (11 * 8)(a0)58sd ra, (12 * 8)(a0)59addi a0, a0, (13 * 8)6061/* Return value */62li a0, 063ret64END(setjmp)6566ENTRY(longjmp)67/* Restore the stack pointer */68ld t0, 0(a0)69mv sp, t070addi a0, a0, (1 * 8)7172/* Restore the general purpose registers and ra */73ld s0, (0 * 8)(a0)74ld s1, (1 * 8)(a0)75ld s2, (2 * 8)(a0)76ld s3, (3 * 8)(a0)77ld s4, (4 * 8)(a0)78ld s5, (5 * 8)(a0)79ld s6, (6 * 8)(a0)80ld s7, (7 * 8)(a0)81ld s8, (8 * 8)(a0)82ld s9, (9 * 8)(a0)83ld s10, (10 * 8)(a0)84ld s11, (11 * 8)(a0)85ld ra, (12 * 8)(a0)86addi a0, a0, (13 * 8)8788/* Load the return value */89mv a0, a190ret91END(longjmp)929394