227 lines
3.6 KiB
ArmAsm
227 lines
3.6 KiB
ArmAsm
# 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:
|