setjmp.c 525 B

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