📄 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 */#include <machine.h>/* * typedef int jmp_buf[10] * * Registers to be saved in jmp_buf * jmp_buf[0] pr * jmp_buf[1] gbr * jmp_buf[2] r15 * jmp_buf[3] r14 * jmp_buf[4] r13 * jmp_buf[5] r12 * jmp_buf[6] r11 * jmp_buf[7] r10 * jmp_buf[8] r9 * jmp_buf[9] r8 * * jmp_buf[11] fr14 * jmp_buf[12] fr13 * jmp_buf[13] fr12 *//* * int __setjmp( jmp_buf env ) */ .text .align 2 .globl Csym(__setjmp) .type Csym(__setjmp), @functionCsym(__setjmp): add #10*4, r4 mov.l r8, @-r4 // r8 -> env[9] mov.l r9, @-r4 // r9 -> env[8] mov.l r10, @-r4 // r10 -> env[7] mov.l r11, @-r4 // r11 -> env[6] mov.l r12, @-r4 // r12 -> env[5] mov.l r13, @-r4 // r13 -> env[4] mov.l r14, @-r4 // r14 -> env[3] mov.l r15, @-r4 // r15 -> env[2] stc.l gbr, @-r4 // gbr -> env[1] sts.l pr, @-r4 // pr -> env[0] rts mov #0, r0/* * void longjmp( jmp_buf env, int rval ) */ .text .align 2 .globl Csym(longjmp) .type Csym(longjmp), @functionCsym(longjmp): tst r5, r5 // if ( rval == 0 ) rval = 1 bf/s l1: mov r5, r0 mov #1, r0 l1: lds.l @r4+, pr // env[0] -> pr ldc.l @r4+, gbr // env[1] -> gbr mov.l @r4+, r15 // env[2] -> r15 mov.l @r4+, r14 // env[3] -> r14 mov.l @r4+, r13 // env[4] -> r13 mov.l @r4+, r12 // env[5] -> r12 mov.l @r4+, r11 // env[6] -> r11 mov.l @r4+, r10 // env[7] -> r10 mov.l @r4+, r9 // env[8] -> r9 mov.l @r4+, r8 // env[9] -> r8 rts nop
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -