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