📄 setjmp.s
字号:
/* *---------------------------------------------------------------------- * 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -