summaryrefslogtreecommitdiffstats
path: root/src/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/iwasm/common/arch/invokeNative_em64.asm
blob: df8115397bf680021f32148a7e87fbf0477ec962 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
;
; 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