19324ced7SMarouene Boubakri/* SPDX-License-Identifier: BSD-2-Clause */ 29324ced7SMarouene Boubakri/* 3*bc12b0e9SAlvin Chang * Copyright (c) 2023 Andes Technology Corporation 49324ced7SMarouene Boubakri * Copyright 2022-2023 NXP 59324ced7SMarouene Boubakri */ 69324ced7SMarouene Boubakri#include <asm.S> 79324ced7SMarouene Boubakri 89324ced7SMarouene Boubakri/* int setjmp (jmp_buf) */ 99324ced7SMarouene BoubakriFUNC setjmp , : 109324ced7SMarouene Boubakri STR s0, REGOFF(0)(a0) 119324ced7SMarouene Boubakri STR s1, REGOFF(1)(a0) 129324ced7SMarouene Boubakri STR s2, REGOFF(2)(a0) 139324ced7SMarouene Boubakri STR s3, REGOFF(3)(a0) 149324ced7SMarouene Boubakri STR s4, REGOFF(4)(a0) 159324ced7SMarouene Boubakri STR s5, REGOFF(5)(a0) 169324ced7SMarouene Boubakri STR s6, REGOFF(6)(a0) 179324ced7SMarouene Boubakri STR s7, REGOFF(7)(a0) 189324ced7SMarouene Boubakri STR s8, REGOFF(8)(a0) 199324ced7SMarouene Boubakri STR s9, REGOFF(9)(a0) 209324ced7SMarouene Boubakri STR s10, REGOFF(10)(a0) 219324ced7SMarouene Boubakri STR s11, REGOFF(11)(a0) 229324ced7SMarouene Boubakri STR ra, REGOFF(12)(a0) 239324ced7SMarouene Boubakri STR sp, REGOFF(13)(a0) 249324ced7SMarouene Boubakri#ifdef CFG_FTRACE_SUPPORT 259324ced7SMarouene Boubakri addi sp, sp, -16 26*bc12b0e9SAlvin Chang#ifdef RV32 27*bc12b0e9SAlvin Chang STR ra, REGOFF(3)(sp) 28*bc12b0e9SAlvin Chang STR s0, REGOFF(2)(sp) 29*bc12b0e9SAlvin Chang#else 30*bc12b0e9SAlvin Chang STR ra, REGOFF(1)(sp) 31*bc12b0e9SAlvin Chang STR s0, REGOFF(0)(sp) 32*bc12b0e9SAlvin Chang#endif 33*bc12b0e9SAlvin Chang addi s0, sp, 16 34*bc12b0e9SAlvin Chang addi a0, a0, REGOFF(14) 35*bc12b0e9SAlvin Chang call ftrace_setjmp 36*bc12b0e9SAlvin Chang#ifdef RV32 37*bc12b0e9SAlvin Chang LDR s0, REGOFF(2)(sp) 38*bc12b0e9SAlvin Chang LDR ra, REGOFF(3)(sp) 39*bc12b0e9SAlvin Chang#else 40*bc12b0e9SAlvin Chang LDR s0, REGOFF(0)(sp) 41*bc12b0e9SAlvin Chang LDR ra, REGOFF(1)(sp) 42*bc12b0e9SAlvin Chang#endif 439324ced7SMarouene Boubakri addi sp, sp, 16 449324ced7SMarouene Boubakri#endif 459324ced7SMarouene Boubakri li a0, 0 469324ced7SMarouene Boubakri ret 479324ced7SMarouene BoubakriEND_FUNC setjmp 489324ced7SMarouene Boubakri 499324ced7SMarouene Boubakri/* void longjmp (jmp_buf, int) __attribute__ ((noreturn)) */ 509324ced7SMarouene BoubakriFUNC longjmp , : 519324ced7SMarouene Boubakri#ifdef CFG_FTRACE_SUPPORT 52*bc12b0e9SAlvin Chang addi sp, sp, -REGOFF(4) 539324ced7SMarouene Boubakri STR a0, REGOFF(0)(sp) 549324ced7SMarouene Boubakri STR a1, REGOFF(1)(sp) 55*bc12b0e9SAlvin Chang STR s0, REGOFF(2)(sp) 56*bc12b0e9SAlvin Chang STR ra, REGOFF(3)(sp) 57*bc12b0e9SAlvin Chang addi s0, sp, REGOFF(4) 58*bc12b0e9SAlvin Chang addi a0, a0, REGOFF(14) 59*bc12b0e9SAlvin Chang call ftrace_longjmp 609324ced7SMarouene Boubakri LDR a0, REGOFF(0)(sp) 619324ced7SMarouene Boubakri LDR a1, REGOFF(1)(sp) 62*bc12b0e9SAlvin Chang LDR s0, REGOFF(2)(sp) 63*bc12b0e9SAlvin Chang LDR ra, REGOFF(3)(sp) 64*bc12b0e9SAlvin Chang addi sp, sp, REGOFF(4) 659324ced7SMarouene Boubakri#endif 669324ced7SMarouene Boubakri LDR s0, REGOFF(0)(a0) 679324ced7SMarouene Boubakri LDR s1, REGOFF(1)(a0) 689324ced7SMarouene Boubakri LDR s2, REGOFF(2)(a0) 699324ced7SMarouene Boubakri LDR s3, REGOFF(3)(a0) 709324ced7SMarouene Boubakri LDR s4, REGOFF(4)(a0) 719324ced7SMarouene Boubakri LDR s5, REGOFF(5)(a0) 729324ced7SMarouene Boubakri LDR s6, REGOFF(6)(a0) 739324ced7SMarouene Boubakri LDR s7, REGOFF(7)(a0) 749324ced7SMarouene Boubakri LDR s8, REGOFF(8)(a0) 759324ced7SMarouene Boubakri LDR s9, REGOFF(9)(a0) 769324ced7SMarouene Boubakri LDR s10, REGOFF(10)(a0) 779324ced7SMarouene Boubakri LDR s11, REGOFF(11)(a0) 789324ced7SMarouene Boubakri LDR ra, REGOFF(12)(a0) 799324ced7SMarouene Boubakri LDR sp, REGOFF(13)(a0) 809324ced7SMarouene Boubakri seqz a0, a1 819324ced7SMarouene Boubakri add a0, a0, a1 829324ced7SMarouene Boubakri ret 839324ced7SMarouene BoubakriEND_FUNC longjmp 84