1/* SPDX-License-Identifier: BSD-2-Clause */ 2/* 3 * Copyright (c) 2023 Andes Technology Corporation 4 * Copyright 2022-2023 NXP 5 */ 6#include <asm.S> 7 8/* int setjmp (jmp_buf) */ 9FUNC setjmp , : 10 STR s0, REGOFF(0)(a0) 11 STR s1, REGOFF(1)(a0) 12 STR s2, REGOFF(2)(a0) 13 STR s3, REGOFF(3)(a0) 14 STR s4, REGOFF(4)(a0) 15 STR s5, REGOFF(5)(a0) 16 STR s6, REGOFF(6)(a0) 17 STR s7, REGOFF(7)(a0) 18 STR s8, REGOFF(8)(a0) 19 STR s9, REGOFF(9)(a0) 20 STR s10, REGOFF(10)(a0) 21 STR s11, REGOFF(11)(a0) 22 STR ra, REGOFF(12)(a0) 23 STR sp, REGOFF(13)(a0) 24#ifdef CFG_FTRACE_SUPPORT 25 addi sp, sp, -16 26#ifdef RV32 27 STR ra, REGOFF(3)(sp) 28 STR s0, REGOFF(2)(sp) 29#else 30 STR ra, REGOFF(1)(sp) 31 STR s0, REGOFF(0)(sp) 32#endif 33 addi s0, sp, 16 34 addi a0, a0, REGOFF(14) 35 call ftrace_setjmp 36#ifdef RV32 37 LDR s0, REGOFF(2)(sp) 38 LDR ra, REGOFF(3)(sp) 39#else 40 LDR s0, REGOFF(0)(sp) 41 LDR ra, REGOFF(1)(sp) 42#endif 43 addi sp, sp, 16 44#endif 45 li a0, 0 46 ret 47END_FUNC setjmp 48 49/* void longjmp (jmp_buf, int) __attribute__ ((noreturn)) */ 50FUNC longjmp , : 51#ifdef CFG_FTRACE_SUPPORT 52 addi sp, sp, -REGOFF(4) 53 STR a0, REGOFF(0)(sp) 54 STR a1, REGOFF(1)(sp) 55 STR s0, REGOFF(2)(sp) 56 STR ra, REGOFF(3)(sp) 57 addi s0, sp, REGOFF(4) 58 addi a0, a0, REGOFF(14) 59 call ftrace_longjmp 60 LDR a0, REGOFF(0)(sp) 61 LDR a1, REGOFF(1)(sp) 62 LDR s0, REGOFF(2)(sp) 63 LDR ra, REGOFF(3)(sp) 64 addi sp, sp, REGOFF(4) 65#endif 66 LDR s0, REGOFF(0)(a0) 67 LDR s1, REGOFF(1)(a0) 68 LDR s2, REGOFF(2)(a0) 69 LDR s3, REGOFF(3)(a0) 70 LDR s4, REGOFF(4)(a0) 71 LDR s5, REGOFF(5)(a0) 72 LDR s6, REGOFF(6)(a0) 73 LDR s7, REGOFF(7)(a0) 74 LDR s8, REGOFF(8)(a0) 75 LDR s9, REGOFF(9)(a0) 76 LDR s10, REGOFF(10)(a0) 77 LDR s11, REGOFF(11)(a0) 78 LDR ra, REGOFF(12)(a0) 79 LDR sp, REGOFF(13)(a0) 80 seqz a0, a1 81 add a0, a0, a1 82 ret 83END_FUNC longjmp 84