mirror of
https://github.com/bytecodealliance/wasm-micro-runtime.git
synced 2025-02-07 07:25:12 +00:00
63 lines
1.0 KiB
NASM
63 lines
1.0 KiB
NASM
;
|
|
; Copyright (C) 2019 Intel Corporation. All rights reserved.
|
|
; SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
;
|
|
|
|
_TEXT SEGMENT
|
|
; rcx func_ptr
|
|
; rdx argv
|
|
; r8 n_stacks
|
|
|
|
invokeNative PROC
|
|
push rbp
|
|
mov rbp, rsp
|
|
|
|
mov r10, rcx ; func_ptr
|
|
mov rax, rdx ; argv
|
|
mov rcx, r8 ; n_stacks
|
|
|
|
; fill all fp args
|
|
movsd xmm0, qword ptr [rax + 0]
|
|
movsd xmm1, qword ptr [rax + 8]
|
|
movsd xmm2, qword ptr [rax + 16]
|
|
movsd xmm3, qword ptr [rax + 24]
|
|
|
|
; check for stack args
|
|
cmp rcx, 0
|
|
jz cycle_end
|
|
|
|
mov rdx, rsp
|
|
and rdx, 15
|
|
jz no_abort
|
|
int 3
|
|
no_abort:
|
|
mov rdx, rcx
|
|
and rdx, 1
|
|
shl rdx, 3
|
|
sub rsp, rdx
|
|
|
|
; store stack args
|
|
lea r9, qword ptr [rax + rcx * 8 + 56]
|
|
sub r9, rsp ; offset
|
|
cycle:
|
|
push qword ptr [rsp + r9]
|
|
loop cycle
|
|
|
|
cycle_end:
|
|
mov rcx, [rax + 32]
|
|
mov rdx, [rax + 40]
|
|
mov r8, [rax + 48]
|
|
mov r9, [rax + 56]
|
|
|
|
sub rsp, 32 ; shadow space
|
|
|
|
call r10
|
|
leave
|
|
ret
|
|
|
|
invokeNative ENDP
|
|
|
|
_TEXT ENDS
|
|
|
|
END
|