|
|
|
@ -12,13 +12,14 @@
|
|
|
|
#define PREFIX ""
|
|
|
|
#define PREFIX ""
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// clang-format off
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(__x86_64__)
|
|
|
|
#if defined(__x86_64__)
|
|
|
|
|
|
|
|
|
|
|
|
asm("\t.global " PREFIX "fastjmp_set\n"
|
|
|
|
asm("\t.global " PREFIX "fastjmp_set\n"
|
|
|
|
"\t.global " PREFIX "fastjmp_jmp\n"
|
|
|
|
"\t.global " PREFIX "fastjmp_jmp\n"
|
|
|
|
"\t.text\n"
|
|
|
|
"\t.text\n"
|
|
|
|
"\t" PREFIX "fastjmp_set:"
|
|
|
|
"\t" PREFIX "fastjmp_set:" R"(
|
|
|
|
R"(
|
|
|
|
|
|
|
|
movq 0(%rsp), %rax
|
|
|
|
movq 0(%rsp), %rax
|
|
|
|
movq %rsp, %rdx # fixup stack pointer, so it doesn't include the call to fastjmp_set
|
|
|
|
movq %rsp, %rdx # fixup stack pointer, so it doesn't include the call to fastjmp_set
|
|
|
|
addq $8, %rdx
|
|
|
|
addq $8, %rdx
|
|
|
|
@ -33,8 +34,7 @@ asm("\t.global " PREFIX "fastjmp_set\n"
|
|
|
|
xorl %eax, %eax
|
|
|
|
xorl %eax, %eax
|
|
|
|
ret
|
|
|
|
ret
|
|
|
|
)"
|
|
|
|
)"
|
|
|
|
"\t" PREFIX "fastjmp_jmp:"
|
|
|
|
"\t" PREFIX "fastjmp_jmp:" R"(
|
|
|
|
R"(
|
|
|
|
|
|
|
|
movl %esi, %eax
|
|
|
|
movl %esi, %eax
|
|
|
|
movq 0(%rdi), %rdx # actually rip
|
|
|
|
movq 0(%rdi), %rdx # actually rip
|
|
|
|
movq 8(%rdi), %rbx
|
|
|
|
movq 8(%rdi), %rbx
|
|
|
|
@ -189,4 +189,6 @@ asm(
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// clang-format on
|
|
|
|
|
|
|
|
|
|
|
|
#endif // __WIN32
|
|
|
|
#endif // __WIN32
|
|
|
|
|