/[dotgnu-pnet]/pnet/libffi/src/x86/sysv.S
ViewVC logotype

Diff of /pnet/libffi/src/x86/sysv.S

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.4 by ktreichel, Sat Jul 30 19:00:15 2005 UTC revision 1.5 by ktreichel, Wed Aug 17 19:27:01 2005 UTC
# Line 1  Line 1 
1  /* -----------------------------------------------------------------------  /* -----------------------------------------------------------------------
2     sysv.S - Copyright (c) 1996, 1998, 2001, 2002, 2003  Red Hat, Inc.     sysv.S - Copyright (c) 1996, 1998, 2001, 2002, 2003, 2005  Red Hat, Inc.
3        
4     X86 Foreign Function Interface     X86 Foreign Function Interface
5    
# Line 130  epilogue: Line 130  epilogue:
130  .ffi_call_SYSV_end:  .ffi_call_SYSV_end:
131          .size    ffi_call_SYSV,.ffi_call_SYSV_end-ffi_call_SYSV          .size    ffi_call_SYSV,.ffi_call_SYSV_end-ffi_call_SYSV
132    
133            .align  4
134    FFI_HIDDEN (ffi_closure_SYSV)
135    .globl ffi_closure_SYSV
136            .type   ffi_closure_SYSV, @function
137    
138    ffi_closure_SYSV:
139    .LFB2:
140            pushl   %ebp
141    .LCFI2:
142            movl    %esp, %ebp
143    .LCFI3:
144            subl    $40, %esp
145            leal    -24(%ebp), %edx
146            movl    %edx, -12(%ebp) /* resp */
147            leal    8(%ebp), %edx
148            movl    %edx, 4(%esp)   /* args = __builtin_dwarf_cfa () */
149            leal    -12(%ebp), %edx
150            movl    %edx, (%esp)    /* &resp */
151    #if defined HAVE_HIDDEN_VISIBILITY_ATTRIBUTE || !defined __PIC__
152            call    ffi_closure_SYSV_inner
153    #else
154            movl    %ebx, 8(%esp)
155    .LCFI7:
156            call    1f
157    1:      popl    %ebx
158            addl    $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx
159            call    ffi_closure_SYSV_inner@PLT
160            movl    8(%esp), %ebx
161    #endif
162            movl    -12(%ebp), %ecx
163            cmpl    $FFI_TYPE_INT, %eax
164            je      .Lcls_retint
165            cmpl    $FFI_TYPE_FLOAT, %eax
166            je      .Lcls_retfloat
167            cmpl    $FFI_TYPE_DOUBLE, %eax
168            je      .Lcls_retdouble
169            cmpl    $FFI_TYPE_LONGDOUBLE, %eax
170            je      .Lcls_retldouble
171            cmpl    $FFI_TYPE_SINT64, %eax
172            je      .Lcls_retllong
173    .Lcls_epilogue:
174            movl    %ebp, %esp
175            popl    %ebp
176            ret
177    .Lcls_retint:
178            movl    (%ecx), %eax
179            jmp     .Lcls_epilogue
180    .Lcls_retfloat:
181            flds    (%ecx)
182            jmp     .Lcls_epilogue
183    .Lcls_retdouble:
184            fldl    (%ecx)
185            jmp     .Lcls_epilogue
186    .Lcls_retldouble:
187            fldt    (%ecx)
188            jmp     .Lcls_epilogue
189    .Lcls_retllong:
190            movl    (%ecx), %eax
191            movl    4(%ecx), %edx
192            jmp     .Lcls_epilogue
193    .LFE2:
194            .size   ffi_closure_SYSV, .-ffi_closure_SYSV
195    
196    #if !FFI_NO_RAW_API
197    
198    #define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3)
199    #define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4)
200    #define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4)
201    #define CIF_FLAGS_OFFSET 20
202    
203            .align  4
204    FFI_HIDDEN (ffi_closure_raw_SYSV)
205    .globl ffi_closure_raw_SYSV
206            .type   ffi_closure_raw_SYSV, @function
207    
208    ffi_closure_raw_SYSV:
209    .LFB3:
210            pushl   %ebp
211    .LCFI4:
212            movl    %esp, %ebp
213    .LCFI5:
214            pushl   %esi
215    .LCFI6:
216            subl    $36, %esp
217            movl    RAW_CLOSURE_CIF_OFFSET(%eax), %esi       /* closure->cif */
218            movl    RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */
219            movl    %edx, 12(%esp)  /* user_data */
220            leal    8(%ebp), %edx   /* __builtin_dwarf_cfa () */
221            movl    %edx, 8(%esp)   /* raw_args */
222            leal    -24(%ebp), %edx
223            movl    %edx, 4(%esp)   /* &res */
224            movl    %esi, (%esp)    /* cif */
225            call    *RAW_CLOSURE_FUN_OFFSET(%eax)            /* closure->fun */
226            movl    CIF_FLAGS_OFFSET(%esi), %eax             /* rtype */
227            cmpl    $FFI_TYPE_INT, %eax
228            je      .Lrcls_retint
229            cmpl    $FFI_TYPE_FLOAT, %eax
230            je      .Lrcls_retfloat
231            cmpl    $FFI_TYPE_DOUBLE, %eax
232            je      .Lrcls_retdouble
233            cmpl    $FFI_TYPE_LONGDOUBLE, %eax
234            je      .Lrcls_retldouble
235            cmpl    $FFI_TYPE_SINT64, %eax
236            je      .Lrcls_retllong
237    .Lrcls_epilogue:
238            addl    $36, %esp
239            popl    %esi
240            popl    %ebp
241            ret
242    .Lrcls_retint:
243            movl    -24(%ebp), %eax
244            jmp     .Lrcls_epilogue
245    .Lrcls_retfloat:
246            flds    -24(%ebp)
247            jmp     .Lrcls_epilogue
248    .Lrcls_retdouble:
249            fldl    -24(%ebp)
250            jmp     .Lrcls_epilogue
251    .Lrcls_retldouble:
252            fldt    -24(%ebp)
253            jmp     .Lrcls_epilogue
254    .Lrcls_retllong:
255            movl    -24(%ebp), %eax
256            movl    -20(%ebp), %edx
257            jmp     .Lrcls_epilogue
258    .LFE3:
259            .size   ffi_closure_raw_SYSV, .-ffi_closure_raw_SYSV
260    #endif
261    
262          .section        .eh_frame,EH_FRAME_FLAGS,@progbits          .section        .eh_frame,EH_FRAME_FLAGS,@progbits
263  .Lframe1:  .Lframe1:
264          .long   .LECIE1-.LSCIE1 /* Length of Common Information Entry */          .long   .LECIE1-.LSCIE1 /* Length of Common Information Entry */
# Line 180  epilogue: Line 309  epilogue:
309          .byte   0x5     /* .uleb128 0x5 */          .byte   0x5     /* .uleb128 0x5 */
310          .align 4          .align 4
311  .LEFDE1:  .LEFDE1:
312    .LSFDE2:
313            .long   .LEFDE2-.LASFDE2        /* FDE Length */
314    .LASFDE2:
315            .long   .LASFDE2-.Lframe1       /* FDE CIE offset */
316    #ifdef __PIC__
317            .long   .LFB2-. /* FDE initial location */
318    #else
319            .long   .LFB2
320    #endif
321            .long   .LFE2-.LFB2     /* FDE address range */
322    #ifdef __PIC__
323            .byte   0x0     /* .uleb128 0x0; Augmentation size */
324    #endif
325            .byte   0x4     /* DW_CFA_advance_loc4 */
326            .long   .LCFI2-.LFB2
327            .byte   0xe     /* DW_CFA_def_cfa_offset */
328            .byte   0x8     /* .uleb128 0x8 */
329            .byte   0x85    /* DW_CFA_offset, column 0x5 */
330            .byte   0x2     /* .uleb128 0x2 */
331            .byte   0x4     /* DW_CFA_advance_loc4 */
332            .long   .LCFI3-.LCFI2
333            .byte   0xd     /* DW_CFA_def_cfa_register */
334            .byte   0x5     /* .uleb128 0x5 */
335    #if !defined HAVE_HIDDEN_VISIBILITY_ATTRIBUTE && defined __PIC__
336            .byte   0x4     /* DW_CFA_advance_loc4 */
337            .long   .LCFI7-.LCFI3
338            .byte   0x83    /* DW_CFA_offset, column 0x3 */
339            .byte   0xa     /* .uleb128 0xa */
340    #endif
341            .align 4
342    .LEFDE2:
343    
344    #if !FFI_NO_RAW_API
345    
346    .LSFDE3:
347            .long   .LEFDE3-.LASFDE3        /* FDE Length */
348    .LASFDE3:
349            .long   .LASFDE3-.Lframe1       /* FDE CIE offset */
350    #ifdef __PIC__
351            .long   .LFB3-. /* FDE initial location */
352    #else
353            .long   .LFB3
354    #endif
355            .long   .LFE3-.LFB3     /* FDE address range */
356    #ifdef __PIC__
357            .byte   0x0     /* .uleb128 0x0; Augmentation size */
358    #endif
359            .byte   0x4     /* DW_CFA_advance_loc4 */
360            .long   .LCFI4-.LFB3
361            .byte   0xe     /* DW_CFA_def_cfa_offset */
362            .byte   0x8     /* .uleb128 0x8 */
363            .byte   0x85    /* DW_CFA_offset, column 0x5 */
364            .byte   0x2     /* .uleb128 0x2 */
365            .byte   0x4     /* DW_CFA_advance_loc4 */
366            .long   .LCFI5-.LCFI4
367            .byte   0xd     /* DW_CFA_def_cfa_register */
368            .byte   0x5     /* .uleb128 0x5 */
369            .byte   0x4     /* DW_CFA_advance_loc4 */
370            .long   .LCFI6-.LCFI5
371            .byte   0x86    /* DW_CFA_offset, column 0x6 */
372            .byte   0x3     /* .uleb128 0x3 */
373            .align 4
374    .LEFDE3:
375    
376    #endif
377    
378  #endif /* ifndef __x86_64__ */  #endif /* ifndef __x86_64__ */

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.5

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26