setjmp.c
来自「优龙2410linux2.6.8内核源代码」· C语言 代码 · 共 78 行
C
78 行
/* * Copyright (C) 1996 Paul Mackerras. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. * * NB this file must be compiled with -O2. */intxmon_setjmp(long *buf) /* NOTE: assert(sizeof(buf) > 184) */{ /* XXX should save fp regs as well */ asm volatile ( "mflr 0; std 0,0(%0)\n\ std 1,8(%0)\n\ std 2,16(%0)\n\ mfcr 0; std 0,24(%0)\n\ std 13,32(%0)\n\ std 14,40(%0)\n\ std 15,48(%0)\n\ std 16,56(%0)\n\ std 17,64(%0)\n\ std 18,72(%0)\n\ std 19,80(%0)\n\ std 20,88(%0)\n\ std 21,96(%0)\n\ std 22,104(%0)\n\ std 23,112(%0)\n\ std 24,120(%0)\n\ std 25,128(%0)\n\ std 26,136(%0)\n\ std 27,144(%0)\n\ std 28,152(%0)\n\ std 29,160(%0)\n\ std 30,168(%0)\n\ std 31,176(%0)\n\ " : : "r" (buf)); return 0;}voidxmon_longjmp(long *buf, int val){ if (val == 0) val = 1; asm volatile ( "ld 13,32(%0)\n\ ld 14,40(%0)\n\ ld 15,48(%0)\n\ ld 16,56(%0)\n\ ld 17,64(%0)\n\ ld 18,72(%0)\n\ ld 19,80(%0)\n\ ld 20,88(%0)\n\ ld 21,96(%0)\n\ ld 22,104(%0)\n\ ld 23,112(%0)\n\ ld 24,120(%0)\n\ ld 25,128(%0)\n\ ld 26,136(%0)\n\ ld 27,144(%0)\n\ ld 28,152(%0)\n\ ld 29,160(%0)\n\ ld 30,168(%0)\n\ ld 31,176(%0)\n\ ld 0,24(%0)\n\ mtcrf 0x38,0\n\ ld 0,0(%0)\n\ ld 1,8(%0)\n\ ld 2,16(%0)\n\ mtlr 0\n\ mr 3,%1\n\ " : : "r" (buf), "r" (val));}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?