summaryrefslogtreecommitdiffstats
path: root/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/iwasm/common/arch/invokeNative_mingw_x64.s
blob: cefaa28c1cf66f2b9eb9f89448a3966e0ed0460c (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
# Copyright (C) 2019 Intel Corporation.  All rights reserved.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

.text
.align 2
.globl invokeNative
invokeNative:

    # %rcx func_ptr
    # %rdx argv
    # %r8 n_stacks

    push %rbp
    mov %rsp, %rbp

    mov %rcx, %r10    # func_ptr
    mov %rdx, %rax    # argv
    mov %r8, %rcx     # n_stacks

    # fill all fp args
    movsd 0(%rax), %xmm0
    movsd 8(%rax), %xmm1
    movsd 16(%rax), %xmm2
    movsd 24(%rax), %xmm3

    # check for stack args
    cmp $0, %rcx
    jz cycle_end

    mov %rsp, %rdx
    and $15, %rdx
    jz no_abort
    int $3
no_abort:
    mov %rcx, %rdx
    and $1, %rdx
    shl $3, %rdx
    sub %rdx, %rsp

    # store stack args
    lea 56(%rax, %rcx, 8), %r9
    sub %rsp, %r9                   # offset
cycle:
    push (%rsp, %r9)
    loop cycle

cycle_end:
    mov 32(%rax), %rcx
    mov 40(%rax), %rdx
    mov 48(%rax), %r8
    mov 56(%rax), %r9

    sub $32, %rsp # shadow space

    call *%r10
    leave
    ret