summaryrefslogtreecommitdiffstats
path: root/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/iwasm/common/arch/invokeNative_ia32.s
diff options
context:
space:
mode:
Diffstat (limited to 'fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/iwasm/common/arch/invokeNative_ia32.s')
-rw-r--r--fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/iwasm/common/arch/invokeNative_ia32.s37
1 files changed, 37 insertions, 0 deletions
diff --git a/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/iwasm/common/arch/invokeNative_ia32.s b/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/iwasm/common/arch/invokeNative_ia32.s
new file mode 100644
index 000000000..de1c1a5e1
--- /dev/null
+++ b/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/iwasm/common/arch/invokeNative_ia32.s
@@ -0,0 +1,37 @@
+/*
+ * 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 */
+ push %ebp
+ movl %esp, %ebp
+ movl 16(%ebp), %ecx /* ecx = argc */
+ leal 2(%ecx), %edx /* edx = ecx + 2 (count return address and saved ebp) */
+ andl $3, %edx /* edx = edx % 4 */
+ jz stack_aligned /* if edx == 0, stack is already 16 bytes aligned */
+ leal -16(%esp, %edx, 4), %esp /* esp = esp - 16 + edx * 4 */
+stack_aligned:
+ test %ecx, %ecx
+ jz skip_push_args /* if ecx == 0, skip pushing arguments */
+ movl 12(%ebp), %edx /* edx = argv */
+ leal -4(%edx,%ecx,4), %edx /* edx = edx + ecx * 4 - 4 */
+ subl %esp, %edx /* edx = edx - esp */
+1:
+ push 0(%esp,%edx)
+ loop 1b /* loop ecx counts */
+skip_push_args:
+ movl 8(%ebp), %edx /* edx = func_ptr */
+ call *%edx
+ leave
+ ret
+