/arch/ppc/xmon/setjmp.c

https://bitbucket.org/evzijst/gittest · C · 29 lines · 21 code · 2 blank · 6 comment · 2 complexity · 757d3155cff0db3f733cf8c6fc839cbc MD5 · raw file

  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. }