setjmp.S 814 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. .text
  2. .globl setjmp
  3. #ifndef __MINGW32__
  4. .type setjmp, @function
  5. #else
  6. .def setjmp; .scl 2; .type 32; .endef
  7. #endif
  8. setjmp:
  9. pop %rsi
  10. movq %rbx,0x00(%rdi)
  11. movq %rsp,0x08(%rdi)
  12. push %rsi
  13. movq %rbp,0x10(%rdi)
  14. movq %r12,0x18(%rdi)
  15. movq %r13,0x20(%rdi)
  16. movq %r14,0x28(%rdi)
  17. movq %r15,0x30(%rdi)
  18. movq %rsi,0x38(%rdi)
  19. xor %rax,%rax
  20. ret
  21. .globl longjmp
  22. #ifndef __MINGW32__
  23. .type longjmp, @function
  24. #else
  25. .def longjmp; .scl 2; .type 32; .endef
  26. #endif
  27. longjmp:
  28. movl %esi, %eax
  29. movq 0x00(%rdi), %rbx
  30. movq 0x08(%rdi), %rsp
  31. movq 0x10(%rdi), %rbp
  32. movq 0x18(%rdi), %r12
  33. movq 0x20(%rdi), %r13
  34. movq 0x28(%rdi), %r14
  35. movq 0x30(%rdi), %r15
  36. xor %rdx,%rdx
  37. mov $1,%rcx
  38. cmp %rax,%rdx
  39. cmove %rcx,%rax
  40. jmp *0x38(%rdi)
  41. #if defined(__ELF__) && defined(__linux__)
  42. .section .note.GNU-stack,"",%progbits
  43. #endif