added libffi for win support
This commit is contained in:
parent
3d869d4dec
commit
e2a4d591e5
22 changed files with 7192 additions and 10 deletions
227
lib/wrappers/libffi/gcc/win64_asm.s
Normal file
227
lib/wrappers/libffi/gcc/win64_asm.s
Normal file
|
|
@ -0,0 +1,227 @@
|
|||
# 1 "gcc\\win64_asm.asm"
|
||||
# 1 "<command-line>"
|
||||
# 1 "gcc\\win64_asm.asm"
|
||||
|
||||
# 1 "common/fficonfig.h" 1
|
||||
# 3 "gcc\\win64_asm.asm" 2
|
||||
# 1 "common/ffi.h" 1
|
||||
# 63 "common/ffi.h"
|
||||
# 1 "common/ffitarget.h" 1
|
||||
# 64 "common/ffi.h" 2
|
||||
# 4 "gcc\\win64_asm.asm" 2
|
||||
# 244 "gcc\\win64_asm.asm"
|
||||
.text
|
||||
|
||||
.extern ffi_closure_win64_inner
|
||||
# 255 "gcc\\win64_asm.asm"
|
||||
.balign 16
|
||||
.globl ffi_closure_win64
|
||||
ffi_closure_win64:
|
||||
|
||||
test $1,%r11
|
||||
jne .Lfirst_is_float
|
||||
mov %rcx, 8(%rsp)
|
||||
jmp .Lsecond
|
||||
.Lfirst_is_float:
|
||||
movlpd %xmm0, 8(%rsp)
|
||||
|
||||
.Lsecond:
|
||||
test $2, %r11
|
||||
jne .Lsecond_is_float
|
||||
mov %rdx, 16(%rsp)
|
||||
jmp .Lthird
|
||||
.Lsecond_is_float:
|
||||
movlpd %xmm1, 16(%rsp)
|
||||
|
||||
.Lthird:
|
||||
test $4, %r11
|
||||
jne .Lthird_is_float
|
||||
mov %r8,24(%rsp)
|
||||
jmp .Lfourth
|
||||
.Lthird_is_float:
|
||||
movlpd %xmm2, 24(%rsp)
|
||||
|
||||
.Lfourth:
|
||||
test $8, %r11
|
||||
jne .Lfourth_is_float
|
||||
mov %r9, 32(%rsp)
|
||||
jmp .Ldone
|
||||
.Lfourth_is_float:
|
||||
movlpd %xmm3, 32(%rsp)
|
||||
|
||||
.Ldone:
|
||||
|
||||
sub $40, %rsp
|
||||
|
||||
mov %rax, %rcx
|
||||
mov %rsp, %rdx
|
||||
add $48, %rdx
|
||||
mov $SYMBOL_NAME(ffi_closure_win64_inner), %rax
|
||||
callq *%rax
|
||||
add $40, %rsp
|
||||
movq %rax, %xmm0
|
||||
|
||||
retq
|
||||
.ffi_closure_win64_end:
|
||||
|
||||
.balign 16
|
||||
.globl ffi_call_win64
|
||||
ffi_call_win64:
|
||||
|
||||
mov %r9,32(%rsp)
|
||||
mov %r8,24(%rsp)
|
||||
mov %rdx,16(%rsp)
|
||||
mov %rcx,8(%rsp)
|
||||
|
||||
push %rbp
|
||||
|
||||
sub $48,%rsp
|
||||
|
||||
lea 32(%rsp),%rbp
|
||||
|
||||
|
||||
mov 48(%rbp),%eax
|
||||
add $15, %rax
|
||||
and $-16, %rax
|
||||
cmpq $0x1000, %rax
|
||||
jb Lch_done
|
||||
Lch_probe:
|
||||
subq $0x1000,%rsp
|
||||
orl $0x0, (%rsp)
|
||||
subq $0x1000,%rax
|
||||
cmpq $0x1000,%rax
|
||||
ja Lch_probe
|
||||
Lch_done:
|
||||
subq %rax, %rsp
|
||||
orl $0x0, (%rsp)
|
||||
lea 32(%rsp), %rax
|
||||
mov %rax, 0(%rbp)
|
||||
|
||||
mov 40(%rbp), %rdx
|
||||
mov 0(%rbp), %rcx
|
||||
callq *32(%rbp)
|
||||
|
||||
mov 0(%rbp), %rsp
|
||||
|
||||
movlpd 24(%rsp), %xmm3
|
||||
movd %xmm3, %r9
|
||||
|
||||
movlpd 16(%rsp), %xmm2
|
||||
movd %xmm2, %r8
|
||||
|
||||
movlpd 8(%rsp), %xmm1
|
||||
movd %xmm1, %rdx
|
||||
|
||||
movlpd (%rsp), %xmm0
|
||||
movd %xmm0, %rcx
|
||||
|
||||
callq *72(%rbp)
|
||||
.Lret_struct4b:
|
||||
cmpl $FFI_TYPE_SMALL_STRUCT_4B, 56(%rbp)
|
||||
jne .Lret_struct2b
|
||||
|
||||
mov 64(%rbp), %rcx
|
||||
mov %eax, (%rcx)
|
||||
jmp .Lret_void
|
||||
|
||||
.Lret_struct2b:
|
||||
cmpl $FFI_TYPE_SMALL_STRUCT_2B, 56(%rbp)
|
||||
jne .Lret_struct1b
|
||||
|
||||
mov 64(%rbp), %rcx
|
||||
mov %ax, (%rcx)
|
||||
jmp .Lret_void
|
||||
|
||||
.Lret_struct1b:
|
||||
cmpl $FFI_TYPE_SMALL_STRUCT_1B, 56(%rbp)
|
||||
jne .Lret_uint8
|
||||
|
||||
mov 64(%rbp), %rcx
|
||||
mov %al, (%rcx)
|
||||
jmp .Lret_void
|
||||
|
||||
.Lret_uint8:
|
||||
cmpl $FFI_TYPE_UINT8, 56(%rbp)
|
||||
jne .Lret_sint8
|
||||
|
||||
mov 64(%rbp), %rcx
|
||||
movzbq %al, %rax
|
||||
movq %rax, (%rcx)
|
||||
jmp .Lret_void
|
||||
|
||||
.Lret_sint8:
|
||||
cmpl $FFI_TYPE_SINT8, 56(%rbp)
|
||||
jne .Lret_uint16
|
||||
|
||||
mov 64(%rbp), %rcx
|
||||
movsbq %al, %rax
|
||||
movq %rax, (%rcx)
|
||||
jmp .Lret_void
|
||||
|
||||
.Lret_uint16:
|
||||
cmpl $FFI_TYPE_UINT16, 56(%rbp)
|
||||
jne .Lret_sint16
|
||||
|
||||
mov 64(%rbp), %rcx
|
||||
movzwq %ax, %rax
|
||||
movq %rax, (%rcx)
|
||||
jmp .Lret_void
|
||||
|
||||
.Lret_sint16:
|
||||
cmpl $FFI_TYPE_SINT16, 56(%rbp)
|
||||
jne .Lret_uint32
|
||||
|
||||
mov 64(%rbp), %rcx
|
||||
movswq %ax, %rax
|
||||
movq %rax, (%rcx)
|
||||
jmp .Lret_void
|
||||
|
||||
.Lret_uint32:
|
||||
cmpl $9, 56(%rbp)
|
||||
jne .Lret_sint32
|
||||
|
||||
mov 64(%rbp), %rcx
|
||||
movl %eax, %eax
|
||||
movq %rax, (%rcx)
|
||||
jmp .Lret_void
|
||||
|
||||
.Lret_sint32:
|
||||
cmpl $10, 56(%rbp)
|
||||
jne .Lret_float
|
||||
|
||||
mov 64(%rbp), %rcx
|
||||
cltq
|
||||
movq %rax, (%rcx)
|
||||
jmp .Lret_void
|
||||
|
||||
.Lret_float:
|
||||
cmpl $2, 56(%rbp)
|
||||
jne .Lret_double
|
||||
|
||||
mov 64(%rbp), %rax
|
||||
movss %xmm0, (%rax)
|
||||
jmp .Lret_void
|
||||
|
||||
.Lret_double:
|
||||
cmpl $3, 56(%rbp)
|
||||
jne .Lret_sint64
|
||||
|
||||
mov 64(%rbp), %rax
|
||||
movlpd %xmm0, (%rax)
|
||||
jmp .Lret_void
|
||||
|
||||
.Lret_sint64:
|
||||
cmpl $12, 56(%rbp)
|
||||
jne .Lret_void
|
||||
|
||||
mov 64(%rbp), %rcx
|
||||
mov %rax, (%rcx)
|
||||
jmp .Lret_void
|
||||
|
||||
.Lret_void:
|
||||
xor %rax, %rax
|
||||
|
||||
lea 16(%rbp), %rsp
|
||||
pop %rbp
|
||||
retq
|
||||
.ffi_call_win64_end:
|
||||
Loading…
Add table
Add a link
Reference in a new issue