setjmp.s

来自「T-kernel 的extension源代码」· S 代码 · 共 93 行

S
93
字号
/* *---------------------------------------------------------------------- *    T-Kernel / Standard Extension * *    Copyright (C) 2006 by Ken Sakamura. All rights reserved. *    T-Kernel / Standard Extension is distributed  *      under the T-License for T-Kernel / Standard Extension. *---------------------------------------------------------------------- * *    Version:   1.00.00 *    Released by T-Engine Forum(http://www.t-engine.org) at 2006/8/11. * *---------------------------------------------------------------------- *//* *	setjmp.S (libtkse) * *	setjmp/longjmp (MIPS) */#include <machine.h>#include <tk/asm.h>/* *	typedef	long long jmp_buf[12] * *	Registers to be saved in jmp_buf *	jmp_buf[0]	$16	s0 *	jmp_buf[1]	$17	s1 *	jmp_buf[2]	$18	s2 *	jmp_buf[3]	$19	s3 *	jmp_buf[4]	$20	s4 *	jmp_buf[5]	$21	s5 *	jmp_buf[6]	$22	s6 *	jmp_buf[7]	$23	s7 *	jmp_buf[8]	$28	gp *	jmp_buf[9]	$29	sp *	jmp_buf[10]	$30	fp *	jmp_buf[11]	$31	ra *//* * int __setjmp( jmp_buf env ) */	.text	.balign	4	.globl	Csym(__setjmp)	.type	Csym(__setjmp), @functionCsym(__setjmp):	sd	$s0,  0*8($a0)		// Save general purpose register	sd	$s1,  1*8($a0)	sd	$s2,  2*8($a0)	sd	$s3,  3*8($a0)	sd	$s4,  4*8($a0)	sd	$s5,  5*8($a0)	sd	$s6,  6*8($a0)	sd	$s7,  7*8($a0)	sd	$gp,  8*8($a0)	sd	$sp,  9*8($a0)	sd	$fp, 10*8($a0)	sd	$ra, 11*8($a0)	li	$v0, 0	jr	$ra/* * void longjmp( jmp_buf env, int rval ) */	.text	.align	4	.globl	Csym(longjmp)	.type	Csym(longjmp), @functionCsym(longjmp):	ld	$s0,  0*8($a0)		// Restore general purpose register	ld	$s1,  1*8($a0)	ld	$s2,  2*8($a0)	ld	$s3,  3*8($a0)	ld	$s4,  4*8($a0)	ld	$s5,  5*8($a0)	ld	$s6,  6*8($a0)	ld	$s7,  7*8($a0)	ld	$gp,  8*8($a0)	ld	$sp,  9*8($a0)	ld	$fp, 10*8($a0)	ld	$ra, 11*8($a0)	move	$v0, $a1	bnez	$a1, l1			// if ( rval == 0 ) rval = 1	li	$v0, 1  l1:	jr	$ra

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?