# 1 "gcc\\win64_asm.asm" # 1 "" # 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: