1 1.1 jmcneill /* $NetBSD: setjmp.S,v 1.1.1.1 2021/09/30 18:50:09 jmcneill Exp $ */ 2 1.1 jmcneill 3 1.1 jmcneill // SPDX-License-Identifier: GPL-2.0+ 4 1.1 jmcneill /* 5 1.1 jmcneill * Copyright Heinrich Schuchardt <xypron.glpk (at) gmx.de> 6 1.1 jmcneill */ 7 1.1 jmcneill 8 1.1 jmcneill .text 9 1.1 jmcneill .p2align 3 10 1.1 jmcneill 11 1.1 jmcneill #define GREG_LIST \ 12 1.1 jmcneill REG_ONE(s0, 0); \ 13 1.1 jmcneill REG_ONE(s1, 8); \ 14 1.1 jmcneill REG_ONE(s2, 16); \ 15 1.1 jmcneill REG_ONE(s3, 24); \ 16 1.1 jmcneill REG_ONE(s4, 32); \ 17 1.1 jmcneill REG_ONE(s5, 40); \ 18 1.1 jmcneill REG_ONE(s6, 48); \ 19 1.1 jmcneill REG_ONE(s7, 56); \ 20 1.1 jmcneill REG_ONE(s8, 64); \ 21 1.1 jmcneill REG_ONE(s9, 72); \ 22 1.1 jmcneill REG_ONE(s10, 80); \ 23 1.1 jmcneill REG_ONE(s11, 88); \ 24 1.1 jmcneill REG_ONE(sp, 96); \ 25 1.1 jmcneill REG_ONE(ra, 104); 26 1.1 jmcneill 27 1.1 jmcneill #define FREG_LIST \ 28 1.1 jmcneill FREG_ONE(fs0, 112); \ 29 1.1 jmcneill FREG_ONE(fs1, 120); \ 30 1.1 jmcneill FREG_ONE(fs2, 128); \ 31 1.1 jmcneill FREG_ONE(fs3, 136); \ 32 1.1 jmcneill FREG_ONE(fs4, 144); \ 33 1.1 jmcneill FREG_ONE(fs5, 152); \ 34 1.1 jmcneill FREG_ONE(fs6, 160); \ 35 1.1 jmcneill FREG_ONE(fs7, 168); \ 36 1.1 jmcneill FREG_ONE(fs8, 176); \ 37 1.1 jmcneill FREG_ONE(fs9, 184); \ 38 1.1 jmcneill FREG_ONE(fs10, 192); \ 39 1.1 jmcneill FREG_ONE(fs11, 200); 40 1.1 jmcneill 41 1.1 jmcneill #define REG_ONE(R, P) sd R, P(a0) 42 1.1 jmcneill #define FREG_ONE(R, P) fsd R, P(a0) 43 1.1 jmcneill 44 1.1 jmcneill .globl setjmp 45 1.1 jmcneill .type setjmp, @function 46 1.1 jmcneill 47 1.1 jmcneill setjmp: 48 1.1 jmcneill GREG_LIST 49 1.1 jmcneill #ifndef __riscv_float_abi_soft 50 1.1 jmcneill FREG_LIST 51 1.1 jmcneill #endif 52 1.1 jmcneill li a0, 0 53 1.1 jmcneill ret 54 1.1 jmcneill 55 1.1 jmcneill #undef REG_ONE 56 1.1 jmcneill #undef FREG_ONE 57 1.1 jmcneill 58 1.1 jmcneill #define REG_ONE(R, P) ld R, P(a0) 59 1.1 jmcneill #define FREG_ONE(R, P) fld R, P(a0) 60 1.1 jmcneill 61 1.1 jmcneill .globl longjmp 62 1.1 jmcneill .type longjmp, @function 63 1.1 jmcneill 64 1.1 jmcneill longjmp: 65 1.1 jmcneill GREG_LIST 66 1.1 jmcneill #ifndef __riscv_float_abi_soft 67 1.1 jmcneill FREG_LIST 68 1.1 jmcneill #endif 69 1.1 jmcneill seqz a0, a1 70 1.1 jmcneill add a0, a0, a1 71 1.1 jmcneill ret 72