rust/src/rt/arch/x86_64/ccall.S

22 lines
519 B
ArmAsm
Raw Normal View History

2011-10-12 17:45:17 -05:00
.text
// upcall_call_c_stack(void (*fn)(), void *new_esp)
//
// Note that we could use |enter| and |leave| but the manuals tell me they're
// slower.
#if defined(__APPLE__) || defined(_WIN32)
.globl _upcall_call_c_stack
_upcall_call_c_stack:
#else
.globl upcall_call_c_stack
upcall_call_c_stack:
#endif
2011-10-12 19:40:03 -05:00
pushl %rbp
movl %rsp,%rbp // save rsp
movl %rsi,%rsp // switch stack
calll *%rdi
movl %rbp,%rsp // would like to use "leave" but it's slower
popl %rbp
2011-10-12 17:45:17 -05:00
ret