setjmp.s 470 B

1234567891011121314151617181920212223242526
  1. TEXT setjmp(SB), 1, $-8
  2. MOVD LR, R4
  3. MOVD R1, (R3)
  4. MOVD R4, 4(R3)
  5. MOVW $0, R3
  6. RETURN
  7. TEXT longjmp(SB), 1, $-8
  8. MOVD R3, R4
  9. MOVW r+12(FP), R3
  10. CMP R3, $0
  11. BNE ok /* ansi: "longjmp(0) => longjmp(1)" */
  12. MOVW $1, R3 /* bless their pointed heads */
  13. ok: MOVD (R4), R1
  14. MOVD 4(R4), R4
  15. MOVD R4, LR
  16. BR (LR)
  17. /*
  18. * trampoline functions because the kernel smashes r3
  19. * in the uregs given to notejmp
  20. */
  21. TEXT __noterestore(SB), 1, $-8
  22. MOVD R4, R3
  23. MOVD R5, LR
  24. BR (LR)