setjmp.s 469 B

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