# 1 "gcc\\win32_asm.asm" # 1 "" # 1 "gcc\\win32_asm.asm" # 33 "gcc\\win32_asm.asm" # 1 "common/fficonfig.h" 1 # 34 "gcc\\win32_asm.asm" 2 # 1 "common/ffi.h" 1 # 63 "common/ffi.h" # 1 "common/ffitarget.h" 1 # 64 "common/ffi.h" 2 # 35 "gcc\\win32_asm.asm" 2 .text .balign 16 .globl _ffi_call_win32 .def _ffi_call_win32; .scl 2; .type 32; .endef _ffi_call_win32: .LFB1: pushl %ebp .LCFI0: movl %esp,%ebp .LCFI1: movl 20(%ebp),%ecx subl %ecx,%esp movl %esp,%eax pushl 12(%ebp) pushl %eax call *8(%ebp) addl $8,%esp cmpl $3, 16(%ebp) jz .do_thiscall cmpl $4, 16(%ebp) jnz .do_fncall movl (%esp), %ecx movl 4(%esp), %edx addl $8, %esp jmp .do_fncall .do_thiscall: movl (%esp), %ecx addl $4, %esp .do_fncall: call *32(%ebp) movl 24(%ebp),%ecx cmpl $0,28(%ebp) jne 0f cmpl $2,%ecx jne .Lnoretval fstp %st(0) jmp .Lepilogue 0: call 1f .Lstore_table: .long .Lnoretval .long .Lretint .long .Lretfloat .long .Lretdouble .long .Lretlongdouble .long .Lretuint8 .long .Lretsint8 .long .Lretuint16 .long .Lretsint16 .long .Lretint .long .Lretint .long .Lretint64 .long .Lretint64 .long .Lretstruct .long .Lretint .long .Lretstruct1b .long .Lretstruct2b .long .Lretstruct4b .long .Lretstruct 1: add %ecx, %ecx add %ecx, %ecx add (%esp),%ecx add $4, %esp jmp *(%ecx) .Lretsint8: movsbl %al, %eax jmp .Lretint .Lretsint16: movswl %ax, %eax jmp .Lretint .Lretuint8: movzbl %al, %eax jmp .Lretint .Lretuint16: movzwl %ax, %eax jmp .Lretint .Lretint: movl 28(%ebp),%ecx movl %eax,0(%ecx) jmp .Lepilogue .Lretfloat: movl 28(%ebp),%ecx fstps (%ecx) jmp .Lepilogue .Lretdouble: movl 28(%ebp),%ecx fstpl (%ecx) jmp .Lepilogue .Lretlongdouble: movl 28(%ebp),%ecx fstpt (%ecx) jmp .Lepilogue .Lretint64: movl 28(%ebp),%ecx movl %eax,0(%ecx) movl %edx,4(%ecx) jmp .Lepilogue .Lretstruct1b: movl 28(%ebp),%ecx movb %al,0(%ecx) jmp .Lepilogue .Lretstruct2b: movl 28(%ebp),%ecx movw %ax,0(%ecx) jmp .Lepilogue .Lretstruct4b: movl 28(%ebp),%ecx movl %eax,0(%ecx) jmp .Lepilogue .Lretstruct: .Lnoretval: .Lepilogue: movl %ebp,%esp popl %ebp ret .ffi_call_win32_end: .balign 16 .globl _ffi_closure_THISCALL .def _ffi_closure_THISCALL; .scl 2; .type 32; .endef _ffi_closure_THISCALL: pushl %ebp movl %esp, %ebp subl $40, %esp leal -24(%ebp), %edx movl %edx, -12(%ebp) leal 12(%ebp), %edx jmp .stub .LFE1: .balign 16 .globl _ffi_closure_SYSV .def _ffi_closure_SYSV; .scl 2; .type 32; .endef _ffi_closure_SYSV: .LFB3: pushl %ebp .LCFI4: movl %esp, %ebp .LCFI5: subl $40, %esp leal -24(%ebp), %edx movl %edx, -12(%ebp) leal 8(%ebp), %edx .stub: movl %edx, 4(%esp) leal -12(%ebp), %edx movl %edx, (%esp) call _ffi_closure_SYSV_inner movl -12(%ebp), %ecx 0: call 1f .Lcls_store_table: .long .Lcls_noretval .long .Lcls_retint .long .Lcls_retfloat .long .Lcls_retdouble .long .Lcls_retldouble .long .Lcls_retuint8 .long .Lcls_retsint8 .long .Lcls_retuint16 .long .Lcls_retsint16 .long .Lcls_retint .long .Lcls_retint .long .Lcls_retllong .long .Lcls_retllong .long .Lcls_retstruct .long .Lcls_retint .long .Lcls_retstruct1 .long .Lcls_retstruct2 .long .Lcls_retstruct4 .long .Lcls_retmsstruct 1: add %eax, %eax add %eax, %eax add (%esp),%eax add $4, %esp jmp *(%eax) .Lcls_retsint8: movsbl (%ecx), %eax jmp .Lcls_epilogue .Lcls_retsint16: movswl (%ecx), %eax jmp .Lcls_epilogue .Lcls_retuint8: movzbl (%ecx), %eax jmp .Lcls_epilogue .Lcls_retuint16: movzwl (%ecx), %eax jmp .Lcls_epilogue .Lcls_retint: movl (%ecx), %eax jmp .Lcls_epilogue .Lcls_retfloat: flds (%ecx) jmp .Lcls_epilogue .Lcls_retdouble: fldl (%ecx) jmp .Lcls_epilogue .Lcls_retldouble: fldt (%ecx) jmp .Lcls_epilogue .Lcls_retllong: movl (%ecx), %eax movl 4(%ecx), %edx jmp .Lcls_epilogue .Lcls_retstruct1: movsbl (%ecx), %eax jmp .Lcls_epilogue .Lcls_retstruct2: movswl (%ecx), %eax jmp .Lcls_epilogue .Lcls_retstruct4: movl (%ecx), %eax jmp .Lcls_epilogue .Lcls_retstruct: movl %ebp, %esp popl %ebp ret $0x4 .Lcls_retmsstruct: mov %ecx, %eax jmp .Lcls_epilogue .Lcls_noretval: .Lcls_epilogue: movl %ebp, %esp popl %ebp ret .ffi_closure_SYSV_end: .LFE3: .balign 16 .globl _ffi_closure_raw_THISCALL .def _ffi_closure_raw_THISCALL; .scl 2; .type 32; .endef _ffi_closure_raw_THISCALL: pushl %ebp movl %esp, %ebp pushl %esi subl $36, %esp movl ((52 + 3) & ~3)(%eax), %esi movl ((((52 + 3) & ~3) + 4) + 4)(%eax), %edx movl %edx, 12(%esp) leal 12(%ebp), %edx jmp .stubraw .balign 16 .globl _ffi_closure_raw_SYSV .def _ffi_closure_raw_SYSV; .scl 2; .type 32; .endef _ffi_closure_raw_SYSV: .LFB4: pushl %ebp .LCFI6: movl %esp, %ebp .LCFI7: pushl %esi .LCFI8: subl $36, %esp movl ((52 + 3) & ~3)(%eax), %esi movl ((((52 + 3) & ~3) + 4) + 4)(%eax), %edx movl %edx, 12(%esp) leal 8(%ebp), %edx .stubraw: movl %edx, 8(%esp) leal -24(%ebp), %edx movl %edx, 4(%esp) movl %esi, (%esp) call *(((52 + 3) & ~3) + 4)(%eax) movl 20(%esi), %eax 0: call 1f .Lrcls_store_table: .long .Lrcls_noretval .long .Lrcls_retint .long .Lrcls_retfloat .long .Lrcls_retdouble .long .Lrcls_retldouble .long .Lrcls_retuint8 .long .Lrcls_retsint8 .long .Lrcls_retuint16 .long .Lrcls_retsint16 .long .Lrcls_retint .long .Lrcls_retint .long .Lrcls_retllong .long .Lrcls_retllong .long .Lrcls_retstruct .long .Lrcls_retint .long .Lrcls_retstruct1 .long .Lrcls_retstruct2 .long .Lrcls_retstruct4 .long .Lrcls_retstruct 1: add %eax, %eax add %eax, %eax add (%esp),%eax add $4, %esp jmp *(%eax) .Lrcls_retsint8: movsbl -24(%ebp), %eax jmp .Lrcls_epilogue .Lrcls_retsint16: movswl -24(%ebp), %eax jmp .Lrcls_epilogue .Lrcls_retuint8: movzbl -24(%ebp), %eax jmp .Lrcls_epilogue .Lrcls_retuint16: movzwl -24(%ebp), %eax jmp .Lrcls_epilogue .Lrcls_retint: movl -24(%ebp), %eax jmp .Lrcls_epilogue .Lrcls_retfloat: flds -24(%ebp) jmp .Lrcls_epilogue .Lrcls_retdouble: fldl -24(%ebp) jmp .Lrcls_epilogue .Lrcls_retldouble: fldt -24(%ebp) jmp .Lrcls_epilogue .Lrcls_retllong: movl -24(%ebp), %eax movl -20(%ebp), %edx jmp .Lrcls_epilogue .Lrcls_retstruct1: movsbl -24(%ebp), %eax jmp .Lrcls_epilogue .Lrcls_retstruct2: movswl -24(%ebp), %eax jmp .Lrcls_epilogue .Lrcls_retstruct4: movl -24(%ebp), %eax jmp .Lrcls_epilogue .Lrcls_retstruct: .Lrcls_noretval: .Lrcls_epilogue: addl $36, %esp popl %esi popl %ebp ret .ffi_closure_raw_SYSV_end: .LFE4: .balign 16 .globl _ffi_closure_STDCALL .def _ffi_closure_STDCALL; .scl 2; .type 32; .endef _ffi_closure_STDCALL: .LFB5: pushl %ebp .LCFI9: movl %esp, %ebp .LCFI10: subl $40, %esp leal -24(%ebp), %edx movl %edx, -12(%ebp) leal 12(%ebp), %edx movl %edx, 4(%esp) leal -12(%ebp), %edx movl %edx, (%esp) call _ffi_closure_SYSV_inner movl -12(%ebp), %ecx 0: call 1f .Lscls_store_table: .long .Lscls_noretval .long .Lscls_retint .long .Lscls_retfloat .long .Lscls_retdouble .long .Lscls_retldouble .long .Lscls_retuint8 .long .Lscls_retsint8 .long .Lscls_retuint16 .long .Lscls_retsint16 .long .Lscls_retint .long .Lscls_retint .long .Lscls_retllong .long .Lscls_retllong .long .Lscls_retstruct .long .Lscls_retint .long .Lscls_retstruct1 .long .Lscls_retstruct2 .long .Lscls_retstruct4 1: add %eax, %eax add %eax, %eax add (%esp),%eax add $4, %esp jmp *(%eax) .Lscls_retsint8: movsbl (%ecx), %eax jmp .Lscls_epilogue .Lscls_retsint16: movswl (%ecx), %eax jmp .Lscls_epilogue .Lscls_retuint8: movzbl (%ecx), %eax jmp .Lscls_epilogue .Lscls_retuint16: movzwl (%ecx), %eax jmp .Lscls_epilogue .Lscls_retint: movl (%ecx), %eax jmp .Lscls_epilogue .Lscls_retfloat: flds (%ecx) jmp .Lscls_epilogue .Lscls_retdouble: fldl (%ecx) jmp .Lscls_epilogue .Lscls_retldouble: fldt (%ecx) jmp .Lscls_epilogue .Lscls_retllong: movl (%ecx), %eax movl 4(%ecx), %edx jmp .Lscls_epilogue .Lscls_retstruct1: movsbl (%ecx), %eax jmp .Lscls_epilogue .Lscls_retstruct2: movswl (%ecx), %eax jmp .Lscls_epilogue .Lscls_retstruct4: movl (%ecx), %eax jmp .Lscls_epilogue .Lscls_retstruct: .Lscls_noretval: .Lscls_epilogue: movl %ebp, %esp popl %ebp ret .ffi_closure_STDCALL_end: .LFE5: .section .eh_frame,"w" .Lframe1: .LSCIE1: .long .LECIE1-.LASCIE1 .LASCIE1: .long 0x0 .byte 0x1 .ascii "\0" .byte 0x1 .byte 0x7c .byte 0x8 .byte 0xc .byte 0x4 .byte 0x4 .byte 0x88 .byte 0x1 .align 4 .LECIE1: .LSFDE1: .long .LEFDE1-.LASFDE1 .LASFDE1: .long .LASFDE1-.Lframe1 .long .LFB1 .long .LFE1-.LFB1 .byte 0x4 .long .LCFI0-.LFB1 .byte 0xe .byte 0x8 .byte 0x85 .byte 0x2 .byte 0x4 .long .LCFI1-.LCFI0 .byte 0xd .byte 0x5 .align 4 .LEFDE1: .LSFDE3: .long .LEFDE3-.LASFDE3 .LASFDE3: .long .LASFDE3-.Lframe1 .long .LFB3 .long .LFE3-.LFB3 .byte 0x4 .long .LCFI4-.LFB3 .byte 0xe .byte 0x8 .byte 0x85 .byte 0x2 .byte 0x4 .long .LCFI5-.LCFI4 .byte 0xd .byte 0x5 .align 4 .LEFDE3: .LSFDE4: .long .LEFDE4-.LASFDE4 .LASFDE4: .long .LASFDE4-.Lframe1 .long .LFB4 .long .LFE4-.LFB4 .byte 0x4 .long .LCFI6-.LFB4 .byte 0xe .byte 0x8 .byte 0x85 .byte 0x2 .byte 0x4 .long .LCFI7-.LCFI6 .byte 0xd .byte 0x5 .byte 0x4 .long .LCFI8-.LCFI7 .byte 0x86 .byte 0x3 .align 4 .LEFDE4: .LSFDE5: .long .LEFDE5-.LASFDE5 .LASFDE5: .long .LASFDE5-.Lframe1 .long .LFB5 .long .LFE5-.LFB5 .byte 0x4 .long .LCFI9-.LFB5 .byte 0xe .byte 0x8 .byte 0x85 .byte 0x2 .byte 0x4 .long .LCFI10-.LCFI9 .byte 0xd .byte 0x5 .align 4 .LEFDE5: