| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- # 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
|