2009-06-05 Andrew Haley <aph@redhat.com>
* src/x86/win32.S (_ffi_closure_STDCALL): Import from gcc.
This commit is contained in:
@@ -1,3 +1,7 @@
|
|||||||
|
2009-06-05 Andrew Haley <aph@redhat.com>
|
||||||
|
|
||||||
|
* src/x86/win32.S (_ffi_closure_STDCALL): Import from gcc.
|
||||||
|
|
||||||
2009-05-22 Dave Korn <dave.korn.cygwin@gmail.com>
|
2009-05-22 Dave Korn <dave.korn.cygwin@gmail.com>
|
||||||
|
|
||||||
* src/x86/win32.S (_ffi_closure_STDCALL): New function.
|
* src/x86/win32.S (_ffi_closure_STDCALL): New function.
|
||||||
|
|||||||
@@ -264,26 +264,10 @@ sc_epilogue:
|
|||||||
.ffi_call_STDCALL_end:
|
.ffi_call_STDCALL_end:
|
||||||
.LFE2:
|
.LFE2:
|
||||||
|
|
||||||
.globl _ffi_closure_STDCALL
|
# This assumes we are using gas.
|
||||||
_ffi_closure_STDCALL:
|
.balign 16
|
||||||
pushl %ebp
|
.globl _ffi_closure_SYSV
|
||||||
movl %esp, %ebp
|
.def _ffi_closure_SYSV; .scl 2; .type 32; .endef
|
||||||
subl $40, %esp
|
|
||||||
leal -24(%ebp), %edx
|
|
||||||
movl %edx, -12(%ebp) /* resp */
|
|
||||||
leal 12(%ebp), %edx /* account for stub return address on stack */
|
|
||||||
movl %edx, 4(%esp) /* args */
|
|
||||||
leal -12(%ebp), %edx
|
|
||||||
movl %edx, (%esp) /* &resp */
|
|
||||||
call _ffi_closure_SYSV_inner
|
|
||||||
movl -12(%ebp), %ecx
|
|
||||||
jmp .Lcls_return_result
|
|
||||||
.ffi_closure_STDCALL_end:
|
|
||||||
|
|
||||||
# This assumes we are using gas.
|
|
||||||
.balign 16
|
|
||||||
.globl _ffi_closure_SYSV
|
|
||||||
.def _ffi_closure_SYSV; .scl 2; .type 32; .endef
|
|
||||||
_ffi_closure_SYSV:
|
_ffi_closure_SYSV:
|
||||||
.LFB3:
|
.LFB3:
|
||||||
pushl %ebp
|
pushl %ebp
|
||||||
@@ -299,7 +283,6 @@ _ffi_closure_SYSV:
|
|||||||
movl %edx, (%esp) /* &resp */
|
movl %edx, (%esp) /* &resp */
|
||||||
call _ffi_closure_SYSV_inner
|
call _ffi_closure_SYSV_inner
|
||||||
movl -12(%ebp), %ecx
|
movl -12(%ebp), %ecx
|
||||||
.Lcls_return_result:
|
|
||||||
cmpl $FFI_TYPE_INT, %eax
|
cmpl $FFI_TYPE_INT, %eax
|
||||||
je .Lcls_retint
|
je .Lcls_retint
|
||||||
cmpl $FFI_TYPE_FLOAT, %eax
|
cmpl $FFI_TYPE_FLOAT, %eax
|
||||||
@@ -409,6 +392,70 @@ _ffi_closure_raw_SYSV:
|
|||||||
|
|
||||||
#endif /* !FFI_NO_RAW_API */
|
#endif /* !FFI_NO_RAW_API */
|
||||||
|
|
||||||
|
# This assumes we are using gas.
|
||||||
|
.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) /* resp */
|
||||||
|
leal 12(%ebp), %edx /* account for stub return address on stack */
|
||||||
|
movl %edx, 4(%esp) /* args */
|
||||||
|
leal -12(%ebp), %edx
|
||||||
|
movl %edx, (%esp) /* &resp */
|
||||||
|
call _ffi_closure_SYSV_inner
|
||||||
|
movl -12(%ebp), %ecx
|
||||||
|
/* It would be nice to just share this code with the
|
||||||
|
duplicate sequence in _ffi_closure_SYSV, if only
|
||||||
|
there were some way to represent that in the EH info. */
|
||||||
|
cmpl $FFI_TYPE_INT, %eax
|
||||||
|
je .Lscls_retint
|
||||||
|
cmpl $FFI_TYPE_FLOAT, %eax
|
||||||
|
je .Lscls_retfloat
|
||||||
|
cmpl $FFI_TYPE_DOUBLE, %eax
|
||||||
|
je .Lscls_retdouble
|
||||||
|
cmpl $FFI_TYPE_LONGDOUBLE, %eax
|
||||||
|
je .Lscls_retldouble
|
||||||
|
cmpl $FFI_TYPE_SINT64, %eax
|
||||||
|
je .Lscls_retllong
|
||||||
|
cmpl $FFI_TYPE_SINT8, %eax /* 1-byte struct */
|
||||||
|
je .Lscls_retstruct1
|
||||||
|
cmpl $FFI_TYPE_SINT16, %eax /* 2-bytes struct */
|
||||||
|
je .Lscls_retstruct2
|
||||||
|
.Lscls_epilogue:
|
||||||
|
movl %ebp, %esp
|
||||||
|
popl %ebp
|
||||||
|
ret
|
||||||
|
.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
|
||||||
|
.ffi_closure_STDCALL_end:
|
||||||
|
.LFE5:
|
||||||
|
|
||||||
.section .eh_frame,"w"
|
.section .eh_frame,"w"
|
||||||
.Lframe1:
|
.Lframe1:
|
||||||
@@ -571,3 +618,34 @@ _ffi_closure_raw_SYSV:
|
|||||||
.LEFDE4:
|
.LEFDE4:
|
||||||
|
|
||||||
#endif /* !FFI_NO_RAW_API */
|
#endif /* !FFI_NO_RAW_API */
|
||||||
|
|
||||||
|
.LSFDE5:
|
||||||
|
.long .LEFDE5-.LASFDE5 /* FDE Length */
|
||||||
|
.LASFDE5:
|
||||||
|
.long .LASFDE5-.Lframe1 /* FDE CIE offset */
|
||||||
|
#if defined __PIC__ && defined HAVE_AS_X86_PCREL
|
||||||
|
.long .LFB5-. /* FDE initial location */
|
||||||
|
#else
|
||||||
|
.long .LFB5
|
||||||
|
#endif
|
||||||
|
.long .LFE5-.LFB5 /* FDE address range */
|
||||||
|
#ifdef __PIC__
|
||||||
|
.byte 0x0 /* .uleb128 0x0; Augmentation size */
|
||||||
|
#endif
|
||||||
|
/* DW_CFA_xxx CFI instructions go here. */
|
||||||
|
|
||||||
|
.byte 0x4 /* DW_CFA_advance_loc4 */
|
||||||
|
.long .LCFI9-.LFB5
|
||||||
|
.byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */
|
||||||
|
.byte 0x8 /* .uleb128 0x8 */
|
||||||
|
.byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */
|
||||||
|
.byte 0x2 /* .uleb128 0x2 */
|
||||||
|
|
||||||
|
.byte 0x4 /* DW_CFA_advance_loc4 */
|
||||||
|
.long .LCFI10-.LCFI9
|
||||||
|
.byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */
|
||||||
|
.byte 0x5 /* .uleb128 0x5 */
|
||||||
|
|
||||||
|
/* End of DW_CFA_xxx CFI instructions. */
|
||||||
|
.align 4
|
||||||
|
.LEFDE5:
|
||||||
|
|||||||
Reference in New Issue
Block a user