setjmp.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:1k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * BK Id: SCCS/s.setjmp.c 1.5 05/17/01 18:14:23 cort
  3.  */
  4. /*
  5.  * Copyright (C) 1996 Paul Mackerras.
  6.  *
  7.  * NB this file must be compiled with -O2.
  8.  */
  9. int
  10. xmon_setjmp(long *buf)
  11. {
  12.     asm ("mflr 0; stw 0,0(%0);"
  13.  "stw 1,4(%0); stw 2,8(%0);"
  14.  "mfcr 0; stw 0,12(%0);"
  15.  "stmw 13,16(%0)"
  16.  : : "r" (buf));
  17.     /* XXX should save fp regs as well */
  18.     return 0;
  19. }
  20. void
  21. xmon_longjmp(long *buf, int val)
  22. {
  23.     if (val == 0)
  24. val = 1;
  25.     asm ("lmw 13,16(%0);"
  26.  "lwz 0,12(%0); mtcrf 0x38,0;"
  27.  "lwz 0,0(%0); lwz 1,4(%0); lwz 2,8(%0);"
  28.  "mtlr 0; mr 3,%1"
  29.  : : "r" (buf), "r" (val));
  30. }