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