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

23 lines
563 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
pushl %ebp
movl %esp,%ebp // save esp
movl 8(%esp),%eax // eax = callee
movl 12(%esp),%esp // switch stack
calll *%eax
movl %ebp,%esp // would like to use "leave" but it's slower
popl %ebp
ret