30 lines
525 B
C
30 lines
525 B
C
|
/*
|
||
|
* Copyright (C) 1996 Paul Mackerras.
|
||
|
*
|
||
|
* NB this file must be compiled with -O2.
|
||
|
*/
|
||
|
|
||
|
int
|
||
|
xmon_setjmp(long *buf)
|
||
|
{
|
||
|
asm ("mflr 0; stw 0,0(%0);"
|
||
|
"stw 1,4(%0); stw 2,8(%0);"
|
||
|
"mfcr 0; stw 0,12(%0);"
|
||
|
"stmw 13,16(%0)"
|
||
|
: : "r" (buf));
|
||
|
/* XXX should save fp regs as well */
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
void
|
||
|
xmon_longjmp(long *buf, int val)
|
||
|
{
|
||
|
if (val == 0)
|
||
|
val = 1;
|
||
|
asm ("lmw 13,16(%0);"
|
||
|
"lwz 0,12(%0); mtcrf 0x38,0;"
|
||
|
"lwz 0,0(%0); lwz 1,4(%0); lwz 2,8(%0);"
|
||
|
"mtlr 0; mr 3,%1"
|
||
|
: : "r" (buf), "r" (val));
|
||
|
}
|