Make the Win64 -> ELF64 template a little smaller by using a string

copy op to shift arguments on the stack instead of transfering each
argument one by one through a register. Probably doesn't affect overall
operation, but makes the code a little less grotty and easier to update
later if I choose to make the wrapper handle more args. Also add
comments.
This commit is contained in:
wpaul 2005-02-18 03:22:37 +00:00
parent 794d97253e
commit cb91ac4b68

@ -91,42 +91,29 @@
.globl x86_64_wrap_end
ENTRY(x86_64_wrap)
subq $96,%rsp
mov %rsi,96-8(%rsp)
mov %rdi,96-16(%rsp)
mov %rcx,%rdi
mov %rdx,%rsi
mov %r8,%rdx
mov %r9,%rcx
mov 96+40(%rsp),%r8
mov 96+48(%rsp),%r9
mov 96+56(%rsp),%rax
mov %rax,(%rsp)
mov 96+64(%rsp),%rax
mov %rax,8(%rsp)
mov 96+72(%rsp),%rax
mov %rax,16(%rsp)
mov 96+80(%rsp),%rax
mov %rax,24(%rsp)
mov 96+88(%rsp),%rax
mov %rax,32(%rsp)
mov 96+96(%rsp),%rax
mov %rax,40(%rsp)
mov 96+104(%rsp),%rax
mov %rax,48(%rsp)
mov 96+112(%rsp),%rax
mov %rax,56(%rsp)
mov 96+120(%rsp),%rax
mov %rax,64(%rsp)
mov 96+128(%rsp),%rax
mov %rax,72(%rsp)
xor %rax,%rax
subq $96,%rsp # allocate space on stack
mov %rsi,96-8(%rsp) # save %rsi
mov %rdi,96-16(%rsp)# save %rdi
mov %rcx,%r10 # temporarily save %rcx in scratch
mov %rsp,%rsi
add $96+56,%rsi # source == old stack top (stack+56)
mov %rsp,%rdi # destination == new stack top
mov $10,%rcx # count == 10 quadwords
rep
movsq # copy old stack contents to new location
mov %r10,%rdi # set up arg0 (%rcx -> %rdi)
mov %rdx,%rsi # set up arg1 (%rdx -> %rsi)
mov %r8,%rdx # set up arg2 (%r8 -> %rdx)
mov %r9,%rcx # set up arg3 (%r9 -> %rcx)
mov 96+40(%rsp),%r8 # set up arg4 (stack+40 -> %r8)
mov 96+48(%rsp),%r9 # set up arg5 (stack+48 -> %r9)
xor %rax,%rax # clear return value
x86_64_wrap_call:
mov $0xFF00FF00FF00FF00,%r11
callq *%r11
mov 96-16(%rsp),%rdi
mov 96-8(%rsp),%rsi
addq $96,%rsp
callq *%r11 # call routine
mov 96-16(%rsp),%rdi# restore %rdi
mov 96-8(%rsp),%rsi # restore %rsi
addq $96,%rsp # delete space on stack
ret
x86_64_wrap_end: