_longjmp.S 1004 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. /*
  2. * Copyright (c) 1995 David Mosberger (davidm@cs.arizona.edu)
  3. */
  4. #include <setjmp.h>
  5. #include "system.h"
  6. .extern printf
  7. .globl _longjmp
  8. .ent _longjmp
  9. _longjmp:
  10. ldgp $29, 0($27)
  11. mov $17, $0
  12. lda $1, JBMAGIC & 0xffff
  13. ldah $1, ((JBMAGIC >> 16) & 0xffff)($1)
  14. cmoveq $0, 1, $0 # ensure $0 != 0
  15. ldq $2, JB_MAGIC($16)
  16. subq $1, $2, $1
  17. ldq $30, JB_SP($16)
  18. bne $1, bad_magic
  19. ldq $9, JB_S0($16)
  20. ldq $10, JB_S1($16)
  21. ldq $11, JB_S2($16)
  22. ldq $12, JB_S3($16)
  23. ldq $13, JB_S4($16)
  24. ldq $14, JB_S5($16)
  25. ldq $15, JB_S6($16)
  26. ldq $29, JB_GP($16)
  27. ldq $26, JB_RA($16)
  28. #ifdef FPU
  29. ldt $f2, JB_F2($16)
  30. ldt $f3, JB_F3($16)
  31. ldt $f4, JB_F4($16)
  32. ldt $f5, JB_F5($16)
  33. ldt $f6, JB_F6($16)
  34. ldt $f7, JB_F7($16)
  35. ldt $f8, JB_F8($16)
  36. ldt $f9, JB_F9($16)
  37. #endif
  38. ret ($26)
  39. .data
  40. error_msg:
  41. #ifdef __osf__
  42. .asciiz "_longjmp: bad magic number"
  43. #else
  44. .asciz "_longjmp: bad magic number"
  45. #endif
  46. .text
  47. bad_magic:
  48. lda $16, error_msg
  49. lda $27, printf
  50. jsr $27, printf
  51. call_pal PAL_halt
  52. .end _longjmp