summaryrefslogtreecommitdiffstats
path: root/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/iwasm/common/arch/invokeNative_em64.s
diff options
context:
space:
mode:
Diffstat (limited to 'fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/iwasm/common/arch/invokeNative_em64.s')
-rw-r--r--fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/iwasm/common/arch/invokeNative_em64.s64
1 files changed, 64 insertions, 0 deletions
diff --git a/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/iwasm/common/arch/invokeNative_em64.s b/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/iwasm/common/arch/invokeNative_em64.s
new file mode 100644
index 000000000..739e84e4c
--- /dev/null
+++ b/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/iwasm/common/arch/invokeNative_em64.s
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2019 Intel Corporation. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+ */
+ .text
+ .align 2
+#ifndef BH_PLATFORM_DARWIN
+.globl invokeNative
+ .type invokeNative, @function
+invokeNative:
+#else
+.globl _invokeNative
+_invokeNative:
+#endif /* end of BH_PLATFORM_DARWIN */
+ /* rdi - function ptr */
+ /* rsi - argv */
+ /* rdx - n_stacks */
+
+ push %rbp
+ mov %rsp, %rbp
+
+ mov %rdx, %r10
+ mov %rsp, %r11 /* Check that stack is aligned on */
+ and $8, %r11 /* 16 bytes. This code may be removed */
+ je check_stack_succ /* when we are sure that compiler always */
+ int3 /* calls us with aligned stack */
+check_stack_succ:
+ mov %r10, %r11 /* Align stack on 16 bytes before pushing */
+ and $1, %r11 /* stack arguments in case we have an odd */
+ shl $3, %r11 /* number of stack arguments */
+ sub %r11, %rsp
+ /* store memory args */
+ movq %rdi, %r11 /* func ptr */
+ movq %r10, %rcx /* counter */
+ lea 64+48-8(%rsi,%rcx,8), %r10
+ sub %rsp, %r10
+ cmpq $0, %rcx
+ je push_args_end
+push_args:
+ push 0(%rsp,%r10)
+ loop push_args
+push_args_end:
+ /* fill all fp args */
+ movq 0x00(%rsi), %xmm0
+ movq 0x08(%rsi), %xmm1
+ movq 0x10(%rsi), %xmm2
+ movq 0x18(%rsi), %xmm3
+ movq 0x20(%rsi), %xmm4
+ movq 0x28(%rsi), %xmm5
+ movq 0x30(%rsi), %xmm6
+ movq 0x38(%rsi), %xmm7
+
+ /* fill all int args */
+ movq 0x40(%rsi), %rdi
+ movq 0x50(%rsi), %rdx
+ movq 0x58(%rsi), %rcx
+ movq 0x60(%rsi), %r8
+ movq 0x68(%rsi), %r9
+ movq 0x48(%rsi), %rsi
+
+ call *%r11
+ leave
+ ret
+