mirror of
https://github.com/bytecodealliance/wasm-micro-runtime.git
synced 2025-09-06 01:41:35 +00:00

Also refer to: https://github.com/fluent/fluent-bit/issues/10513 Signed-off-by: Jaco Kroon <jaco@uls.co.za>
68 lines
1.7 KiB
ArmAsm
68 lines
1.7 KiB
ArmAsm
/*
|
|
* 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
|
|
|
|
#if defined(__linux__) && defined(__ELF__)
|
|
.section .note.GNU-stack,"",%progbits
|
|
#endif
|