setjmp.s 432 B

12345678910111213141516171819202122232425
  1. TEXT setjmp(SB), 1, $0
  2. MOVW R1, (R7)
  3. MOVW R15, 4(R7)
  4. MOVW $0, R7
  5. RETURN
  6. TEXT longjmp(SB), 1, $0
  7. MOVW R7, R8
  8. MOVW r+4(FP), R7
  9. CMP R7, R0
  10. BNE ok /* ansi: "longjmp(0) => longjmp(1)" */
  11. MOVW $1, R7 /* bless their pointed heads */
  12. ok: MOVW (R8), R1
  13. MOVW 4(R8), R15
  14. RETURN
  15. /*
  16. * trampoline functions because the kernel smashes r7
  17. * in the uregs given to notejmp
  18. */
  19. TEXT __noterestore(SB), 1, $-4
  20. MOVW R8, R7
  21. JMP (R9)