setjmp.s 617 B

12345678910111213141516171819202122
  1. /* Copyright 2011-2012 Nicholas J. Kain, licensed under standard MIT license */
  2. .global __setjmp
  3. .global _setjmp
  4. .global setjmp
  5. .type __setjmp,@function
  6. .type _setjmp,@function
  7. .type setjmp,@function
  8. __setjmp:
  9. _setjmp:
  10. setjmp:
  11. mov %rbx,(%rdi) /* rdi is jmp_buf, move registers onto it */
  12. mov %rbp,8(%rdi)
  13. mov %r12,16(%rdi)
  14. mov %r13,24(%rdi)
  15. mov %r14,32(%rdi)
  16. mov %r15,40(%rdi)
  17. lea 8(%rsp),%rdx /* this is our rsp WITHOUT current ret addr */
  18. mov %rdx,48(%rdi)
  19. mov (%rsp),%rdx /* save return addr ptr for new rip */
  20. mov %rdx,56(%rdi)
  21. xor %rax,%rax /* always return 0 */
  22. ret