Home | History | Annotate | Line # | Download | only in riscv64
      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