setjmp.S 670 B

12345678910111213141516171819202122232425262728293031323334353637
  1. /*
  2. * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. .global setjmp
  7. setjmp:
  8. mov 4(%esp), %eax
  9. mov %ebx, 0(%eax)
  10. mov %esi, 4(%eax)
  11. mov %edi, 8(%eax)
  12. mov %ebp, 12(%eax)
  13. lea 4(%esp), %ecx
  14. mov %ecx, 16(%eax)
  15. mov (%esp), %ecx
  16. mov %ecx, 20(%eax)
  17. xor %eax, %eax
  18. ret
  19. .global longjmp
  20. longjmp:
  21. mov 4(%esp), %edx
  22. mov 8(%esp), %eax
  23. mov 0(%edx), %ebx
  24. mov 4(%edx), %esi
  25. mov 8(%edx), %edi
  26. mov 12(%edx), %ebp
  27. mov 16(%edx), %ecx
  28. mov %ecx, %esp
  29. mov 20(%edx), %ecx
  30. test %eax, %eax
  31. jnz .nonzero
  32. mov 1, %eax
  33. .nonzero:
  34. jmp *%ecx