[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Dotgnu-pnet-commits] CVS: pnet/libffi/src/s390 ffi.c,1.1,1.2 sysv.S,1.
From: |
Rhys Weatherley <address@hidden> |
Subject: |
[Dotgnu-pnet-commits] CVS: pnet/libffi/src/s390 ffi.c,1.1,1.2 sysv.S,1.2,1.3 |
Date: |
Wed, 05 Feb 2003 20:15:41 -0500 |
Update of /cvsroot/dotgnu-pnet/pnet/libffi/src/s390
In directory subversions:/tmp/cvs-serv21586/libffi/src/s390
Modified Files:
ffi.c sysv.S
Log Message:
Update the libffi library from the gcc CVS tree.
Index: ffi.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/libffi/src/s390/ffi.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -r1.1 -r1.2
*** ffi.c 10 May 2002 23:04:40 -0000 1.1
--- ffi.c 6 Feb 2003 01:15:38 -0000 1.2
***************
*** 40,87 ****
/* ------- */
/*====================================================================*/
!
! #define MAX_GPRARGS 5 /* Max. no. of GPR available */
! #define MAX_FPRARGS 2 /* Max. no. of FPR available */
!
! #define STR_GPR 1 /* Structure will fit in 1 or 2 GPR */
! #define STR_FPR 2 /* Structure will fit in a FPR */
! #define STR_STACK 3 /* Structure needs to go on stack */
!
[...1225 lines suppressed...]
! *(long *)&closure->tramp[12] = (long)&ffi_closure_SYSV;
! #else
! *(short *)&closure->tramp [0] = 0x0d10; /* basr %r1,0 */
! *(short *)&closure->tramp [2] = 0xeb01; /* lmg %r0,%r1,14(%r1) */
! *(short *)&closure->tramp [4] = 0x100e;
! *(short *)&closure->tramp [6] = 0x0004;
! *(short *)&closure->tramp [8] = 0x07f1; /* br %r1 */
! *(long *)&closure->tramp[16] = (long)closure;
! *(long *)&closure->tramp[24] = (long)&ffi_closure_SYSV;
! #endif
!
! closure->cif = cif;
! closure->user_data = user_data;
! closure->fun = fun;
return FFI_OK;
}
!
/*======================== End of Routine ============================*/
Index: sysv.S
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/libffi/src/s390/sysv.S,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -r1.2 -r1.3
*** sysv.S 11 Jun 2002 01:57:18 -0000 1.2
--- sysv.S 6 Feb 2003 01:15:38 -0000 1.3
***************
*** 23,41 ****
OTHER DEALINGS IN THE SOFTWARE.
----------------------------------------------------------------------- */
- #define LIBFFI_ASM
- #include <ffi.h>
- #ifdef HAVE_MACHINE_ASM_H
- #include <machine/asm.h>
- #endif
-
.text
!
! # r2: ffi_prep_args
# r3: &ecif
! # r4: cif->bytes
! # r5: fig->flags
# r6: ecif.rvalue
! # sp+0: fn
# This assumes we are using gas.
--- 23,37 ----
OTHER DEALINGS IN THE SOFTWARE.
----------------------------------------------------------------------- */
+
+ #ifndef __s390x__
.text
!
! # r2: cif->bytes
# r3: &ecif
! # r4: ffi_prep_args
! # r5: ret_type
# r6: ecif.rvalue
! # ov: fn
# This assumes we are using gas.
***************
*** 44,165 ****
ffi_call_SYSV:
.LFB1:
! # Save registers
! stm %r6,%r15,24(%r15)
.LCFI0:
! l %r7,96(%r15) # Get A(fn)
! lr %r0,%r15
! ahi %r15,-128 # Make room for my args
.LCFI1:
! st %r0,0(%r15) # Set backchain
! lr %r11,%r15 # Establish my stack register
.LCFI2:
! sr %r15,%r4 # Make room for fn args
! ahi %r15,-96 # Make room for new frame
! lr %r10,%r15 # Establish stack build area
! ahi %r15,-96 # Stack for next call
! lr %r1,%r7
! stm %r2,%r7,96(%r11) # Save args on my stack
!
! #------------------------------------------------------------------
! # move first 3 parameters in registers
! #------------------------------------------------------------------
! lr %r9,%r2 # r9: &ffi_prep_args
! lr %r2,%r10 # Parm 1: &stack Parm 2: &ecif
! basr %r14,%r9 # call ffi_prep_args
!
! #------------------------------------------------------------------
! # load first 5 parameter registers
! #------------------------------------------------------------------
! lm %r2,%r6,24(%r10)
!
! #------------------------------------------------------------------
! # load fp parameter registers
! #------------------------------------------------------------------
! ld %f0,48(%r10)
! ld %f2,56(%r10)
!
! #------------------------------------------------------------------
! # call function
! #------------------------------------------------------------------
! lr %r15,%r10 # Set new stack
! l %r9,116(%r11) # Get &fn
! basr %r14,%r9 # Call function
!
! #------------------------------------------------------------------
! # On return:
! # r2: Return value (r3: Return value + 4 for long long)
! #------------------------------------------------------------------
!
! #------------------------------------------------------------------
! # If the return value pointer is NULL, assume no return value.
! #------------------------------------------------------------------
! icm %r6,15,112(%r11)
! jz .Lepilogue
!
! l %r5,108(%r11) # Get return type
! #------------------------------------------------------------------
! # return INT
! #------------------------------------------------------------------
! chi %r5,FFI_TYPE_INT
! jne .Lchk64
!
! st %r2,0(%r6)
! j .Lepilogue
!
! .Lchk64:
! #------------------------------------------------------------------
! # return LONG LONG (signed/unsigned)
! #------------------------------------------------------------------
! chi %r5,FFI_TYPE_UINT64
! je .LdoLongLong
!
! chi %r5,FFI_TYPE_SINT64
! jne .LchkFloat
!
! .LdoLongLong:
! stm %r2,%r3,0(%r6)
! j .Lepilogue
!
! .LchkFloat:
! #------------------------------------------------------------------
! # return FLOAT
! #------------------------------------------------------------------
! chi %r5,FFI_TYPE_FLOAT
! jne .LchkDouble
!
! std %f0,0(%r6)
! j .Lepilogue
!
! .LchkDouble:
! #------------------------------------------------------------------
! # return DOUBLE or LONGDOUBLE
! #------------------------------------------------------------------
! chi %r5,FFI_TYPE_DOUBLE
! jne .LchkStruct
!
! std %f0,0(%r6)
! std %f2,8(%r6)
! j .Lepilogue
!
! .LchkStruct:
! #------------------------------------------------------------------
! # Structure - rvalue already set as sent as 1st parm to routine
! #------------------------------------------------------------------
! chi %r5,FFI_TYPE_STRUCT
! je .Lepilogue
!
! .Ldefault:
! #------------------------------------------------------------------
! # return a pointer
! #------------------------------------------------------------------
! st %r2,0(%r6)
! j .Lepilogue
!
! .Lepilogue:
! l %r15,0(%r11)
! l %r4,56(%r15)
! lm %r6,%r15,24(%r15)
br %r4
.LFE1:
.ffi_call_SYSV_end:
--- 40,106 ----
ffi_call_SYSV:
.LFB1:
! stm %r6,%r15,24(%r15) # Save registers
.LCFI0:
! basr %r13,0 # Set up base register
! .Lbase:
! lr %r11,%r15 # Set up frame pointer
.LCFI1:
! sr %r15,%r2
! ahi %r15,-96-48 # Allocate stack
! lr %r8,%r6 # Save ecif.rvalue
! sr %r9,%r9
! ic %r9,.Ltable-.Lbase(%r13,%r5) # Load epilog address
! l %r7,96(%r11) # Load function address
! st %r11,0(%r15) # Set up back chain
! ahi %r11,-48 # Register save area
.LCFI2:
!
! la %r2,96(%r15) # Save area
! # r3 already holds &ecif
! basr %r14,%r4 # Call ffi_prep_args
!
! lm %r2,%r6,0(%r11) # Load arguments
! ld %f0,32(%r11)
! ld %f2,40(%r11)
! la %r14,0(%r13,%r9) # Set return address
! br %r7 # ... and call function
!
! .LretNone: # Return void
! l %r4,48+56(%r11)
! lm %r6,%r15,48+24(%r11)
br %r4
+ .LretFloat:
+ l %r4,48+56(%r11)
+ ste %f0,0(%r8) # Return float
+ lm %r6,%r15,48+24(%r11)
+ br %r4
+
+ .LretDouble:
+ l %r4,48+56(%r11)
+ std %f0,0(%r8) # Return double
+ lm %r6,%r15,48+24(%r11)
+ br %r4
+
+ .LretInt32:
+ l %r4,48+56(%r11)
+ st %r2,0(%r8) # Return int
+ lm %r6,%r15,48+24(%r11)
+ br %r4
+
+ .LretInt64:
+ l %r4,48+56(%r11)
+ stm %r2,%r3,0(%r8) # Return long long
+ lm %r6,%r15,48+24(%r11)
+ br %r4
+
+ .Ltable:
+ .byte .LretNone-.Lbase # FFI390_RET_VOID
+ .byte .LretNone-.Lbase # FFI390_RET_STRUCT
+ .byte .LretFloat-.Lbase # FFI390_RET_FLOAT
+ .byte .LretDouble-.Lbase # FFI390_RET_DOUBLE
+ .byte .LretInt32-.Lbase # FFI390_RET_INT32
+ .byte .LretInt64-.Lbase # FFI390_RET_INT64
+
.LFE1:
.ffi_call_SYSV_end:
***************
*** 167,171 ****
! .section .eh_frame,"aw",@progbits
.Lframe1:
.4byte .LECIE1-.LSCIE1 # Length of Common Information Entry
--- 108,151 ----
! .globl ffi_closure_SYSV
! .type ffi_closure_SYSV,%function
! ffi_closure_SYSV:
! .LFB2:
! stm %r12,%r15,48(%r15) # Save registers
! .LCFI10:
! basr %r13,0 # Set up base register
! .Lcbase:
! stm %r2,%r6,8(%r15) # Save arguments
! std %f0,64(%r15)
! std %f2,72(%r15)
! lr %r1,%r15 # Set up stack frame
! ahi %r15,-96
! .LCFI11:
! l %r12,.Lchelper-.Lcbase(%r13) # Get helper function
! lr %r2,%r0 # Closure
! la %r3,8(%r1) # GPRs
! la %r4,64(%r1) # FPRs
! la %r5,96(%r1) # Overflow
! st %r1,0(%r15) # Set up back chain
!
! bas %r14,0(%r12,%r13) # Call helper
!
! l %r4,96+56(%r15)
! ld %f0,96+64(%r15) # Load return registers
! lm %r2,%r3,96+8(%r15)
! lm %r12,%r15,96+48(%r15)
! br %r4
!
! .align 4
! .Lchelper:
! .long ffi_closure_helper_SYSV-.Lcbase
!
! .LFE2:
!
! .ffi_closure_SYSV_end:
! .size ffi_closure_SYSV,.ffi_closure_SYSV_end-ffi_closure_SYSV
!
!
! .section .eh_frame,"a",@progbits
.Lframe1:
.4byte .LECIE1-.LSCIE1 # Length of Common Information Entry
***************
*** 173,180 ****
.4byte 0x0 # CIE Identifier Tag
.byte 0x1 # CIE Version
! .ascii "\0" # CIE Augmentation
.uleb128 0x1 # CIE Code Alignment Factor
.sleb128 -4 # CIE Data Alignment Factor
.byte 0xe # CIE RA Column
.byte 0xc # DW_CFA_def_cfa
.uleb128 0xf
--- 153,162 ----
.4byte 0x0 # CIE Identifier Tag
.byte 0x1 # CIE Version
! .ascii "zR\0" # CIE Augmentation
.uleb128 0x1 # CIE Code Alignment Factor
.sleb128 -4 # CIE Data Alignment Factor
.byte 0xe # CIE RA Column
+ .uleb128 0x1 # Augmentation size
+ .byte 0x1b # FDE Encoding (pcrel sdata4)
.byte 0xc # DW_CFA_def_cfa
.uleb128 0xf
***************
*** 186,190 ****
.LASFDE1:
.4byte .LASFDE1-.Lframe1 # FDE CIE offset
! .4byte .LFB1 # FDE initial location
.4byte .LFE1-.LFB1 # FDE address range
.uleb128 0x0 # Augmentation size
--- 168,172 ----
.LASFDE1:
.4byte .LASFDE1-.Lframe1 # FDE CIE offset
! .4byte .LFB1-. # FDE initial location
.4byte .LFE1-.LFB1 # FDE address range
.uleb128 0x0 # Augmentation size
***************
*** 213,223 ****
.byte 0x4 # DW_CFA_advance_loc4
.4byte .LCFI1-.LCFI0
! .byte 0xe # DW_CFA_def_cfa_offset
! .uleb128 0xe0
.byte 0x4 # DW_CFA_advance_loc4
.4byte .LCFI2-.LCFI1
! .byte 0xd # DW_CFA_def_cfa_register
.uleb128 0xb
.align 4
.LEFDE1:
--- 195,425 ----
.byte 0x4 # DW_CFA_advance_loc4
.4byte .LCFI1-.LCFI0
! .byte 0xd # DW_CFA_def_cfa_register
! .uleb128 0xb
.byte 0x4 # DW_CFA_advance_loc4
.4byte .LCFI2-.LCFI1
! .byte 0xe # DW_CFA_def_cfa_offset
! .uleb128 0x90
! .align 4
! .LEFDE1:
! .LSFDE2:
! .4byte .LEFDE2-.LASFDE2 # FDE Length
! .LASFDE2:
! .4byte .LASFDE2-.Lframe1 # FDE CIE offset
! .4byte .LFB2-. # FDE initial location
! .4byte .LFE2-.LFB2 # FDE address range
! .uleb128 0x0 # Augmentation size
! .byte 0x4 # DW_CFA_advance_loc4
! .4byte .LCFI10-.LFB2
! .byte 0x8f # DW_CFA_offset, column 0xf
! .uleb128 0x9
! .byte 0x8e # DW_CFA_offset, column 0xe
! .uleb128 0xa
! .byte 0x8d # DW_CFA_offset, column 0xd
.uleb128 0xb
+ .byte 0x8c # DW_CFA_offset, column 0xc
+ .uleb128 0xc
+ .byte 0x4 # DW_CFA_advance_loc4
+ .4byte .LCFI11-.LCFI10
+ .byte 0xe # DW_CFA_def_cfa_offset
+ .uleb128 0xc0
.align 4
+ .LEFDE2:
+
+ #else
+
+ .text
+
+ # r2: cif->bytes
+ # r3: &ecif
+ # r4: ffi_prep_args
+ # r5: ret_type
+ # r6: ecif.rvalue
+ # ov: fn
+
+ # This assumes we are using gas.
+ .globl ffi_call_SYSV
+ .type ffi_call_SYSV,%function
+ ffi_call_SYSV:
+ .LFB1:
+ stmg %r6,%r15,48(%r15) # Save registers
+ .LCFI0:
+ larl %r13,.Lbase # Set up base register
+ lgr %r11,%r15 # Set up frame pointer
+ .LCFI1:
+ sgr %r15,%r2
+ aghi %r15,-160-80 # Allocate stack
+ lgr %r8,%r6 # Save ecif.rvalue
+ llgc %r9,.Ltable-.Lbase(%r13,%r5) # Load epilog address
+ lg %r7,160(%r11) # Load function address
+ stg %r11,0(%r15) # Set up back chain
+ aghi %r11,-80 # Register save area
+ .LCFI2:
+
+ la %r2,160(%r15) # Save area
+ # r3 already holds &ecif
+ basr %r14,%r4 # Call ffi_prep_args
+
+ lmg %r2,%r6,0(%r11) # Load arguments
+ ld %f0,48(%r11)
+ ld %f2,56(%r11)
+ ld %f4,64(%r11)
+ ld %f6,72(%r11)
+ la %r14,0(%r13,%r9) # Set return address
+ br %r7 # ... and call function
+
+ .Lbase:
+ .LretNone: # Return void
+ lg %r4,80+112(%r11)
+ lmg %r6,%r15,80+48(%r11)
+ br %r4
+
+ .LretFloat:
+ lg %r4,80+112(%r11)
+ ste %f0,0(%r8) # Return float
+ lmg %r6,%r15,80+48(%r11)
+ br %r4
+
+ .LretDouble:
+ lg %r4,80+112(%r11)
+ std %f0,0(%r8) # Return double
+ lmg %r6,%r15,80+48(%r11)
+ br %r4
+
+ .LretInt32:
+ lg %r4,80+112(%r11)
+ st %r2,0(%r8) # Return int
+ lmg %r6,%r15,80+48(%r11)
+ br %r4
+
+ .LretInt64:
+ lg %r4,80+112(%r11)
+ stg %r2,0(%r8) # Return long
+ lmg %r6,%r15,80+48(%r11)
+ br %r4
+
+ .Ltable:
+ .byte .LretNone-.Lbase # FFI390_RET_VOID
+ .byte .LretNone-.Lbase # FFI390_RET_STRUCT
+ .byte .LretFloat-.Lbase # FFI390_RET_FLOAT
+ .byte .LretDouble-.Lbase # FFI390_RET_DOUBLE
+ .byte .LretInt32-.Lbase # FFI390_RET_INT32
+ .byte .LretInt64-.Lbase # FFI390_RET_INT64
+
+ .LFE1:
+ .ffi_call_SYSV_end:
+ .size ffi_call_SYSV,.ffi_call_SYSV_end-ffi_call_SYSV
+
+
+ .globl ffi_closure_SYSV
+ .type ffi_closure_SYSV,%function
+ ffi_closure_SYSV:
+ .LFB2:
+ stmg %r14,%r15,112(%r15) # Save registers
+ .LCFI10:
+ stmg %r2,%r6,16(%r15) # Save arguments
+ std %f0,128(%r15)
+ std %f2,136(%r15)
+ std %f4,144(%r15)
+ std %f6,152(%r15)
+ lgr %r1,%r15 # Set up stack frame
+ aghi %r15,-160
+ .LCFI11:
+ lgr %r2,%r0 # Closure
+ la %r3,16(%r1) # GPRs
+ la %r4,128(%r1) # FPRs
+ la %r5,160(%r1) # Overflow
+ stg %r1,0(%r15) # Set up back chain
+
+ brasl %r14,ffi_closure_helper_SYSV # Call helper
+
+ lg %r14,160+112(%r15)
+ ld %f0,160+128(%r15) # Load return registers
+ lg %r2,160+16(%r15)
+ la %r15,160(%r15)
+ br %r14
+ .LFE2:
+
+ .ffi_closure_SYSV_end:
+ .size ffi_closure_SYSV,.ffi_closure_SYSV_end-ffi_closure_SYSV
+
+
+
+ .section .eh_frame,"a",@progbits
+ .Lframe1:
+ .4byte .LECIE1-.LSCIE1 # Length of Common Information Entry
+ .LSCIE1:
+ .4byte 0x0 # CIE Identifier Tag
+ .byte 0x1 # CIE Version
+ .ascii "zR\0" # CIE Augmentation
+ .uleb128 0x1 # CIE Code Alignment Factor
+ .sleb128 -8 # CIE Data Alignment Factor
+ .byte 0xe # CIE RA Column
+ .uleb128 0x1 # Augmentation size
+ .byte 0x1b # FDE Encoding (pcrel sdata4)
+ .byte 0xc # DW_CFA_def_cfa
+ .uleb128 0xf
+ .uleb128 0xa0
+ .align 8
+ .LECIE1:
+ .LSFDE1:
+ .4byte .LEFDE1-.LASFDE1 # FDE Length
+ .LASFDE1:
+ .4byte .LASFDE1-.Lframe1 # FDE CIE offset
+ .4byte .LFB1-. # FDE initial location
+ .4byte .LFE1-.LFB1 # FDE address range
+ .uleb128 0x0 # Augmentation size
+ .byte 0x4 # DW_CFA_advance_loc4
+ .4byte .LCFI0-.LFB1
+ .byte 0x8f # DW_CFA_offset, column 0xf
+ .uleb128 0x5
+ .byte 0x8e # DW_CFA_offset, column 0xe
+ .uleb128 0x6
+ .byte 0x8d # DW_CFA_offset, column 0xd
+ .uleb128 0x7
+ .byte 0x8c # DW_CFA_offset, column 0xc
+ .uleb128 0x8
+ .byte 0x8b # DW_CFA_offset, column 0xb
+ .uleb128 0x9
+ .byte 0x8a # DW_CFA_offset, column 0xa
+ .uleb128 0xa
+ .byte 0x89 # DW_CFA_offset, column 0x9
+ .uleb128 0xb
+ .byte 0x88 # DW_CFA_offset, column 0x8
+ .uleb128 0xc
+ .byte 0x87 # DW_CFA_offset, column 0x7
+ .uleb128 0xd
+ .byte 0x86 # DW_CFA_offset, column 0x6
+ .uleb128 0xe
+ .byte 0x4 # DW_CFA_advance_loc4
+ .4byte .LCFI1-.LCFI0
+ .byte 0xd # DW_CFA_def_cfa_register
+ .uleb128 0xb
+ .byte 0x4 # DW_CFA_advance_loc4
+ .4byte .LCFI2-.LCFI1
+ .byte 0xe # DW_CFA_def_cfa_offset
+ .uleb128 0xf0
+ .align 8
.LEFDE1:
+ .LSFDE2:
+ .4byte .LEFDE2-.LASFDE2 # FDE Length
+ .LASFDE2:
+ .4byte .LASFDE2-.Lframe1 # FDE CIE offset
+ .4byte .LFB2-. # FDE initial location
+ .4byte .LFE2-.LFB2 # FDE address range
+ .uleb128 0x0 # Augmentation size
+ .byte 0x4 # DW_CFA_advance_loc4
+ .4byte .LCFI10-.LFB2
+ .byte 0x8f # DW_CFA_offset, column 0xf
+ .uleb128 0x5
+ .byte 0x8e # DW_CFA_offset, column 0xe
+ .uleb128 0x6
+ .byte 0x4 # DW_CFA_advance_loc4
+ .4byte .LCFI11-.LCFI10
+ .byte 0xe # DW_CFA_def_cfa_offset
+ .uleb128 0x140
+ .align 8
+ .LEFDE2:
+
+ #endif
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Dotgnu-pnet-commits] CVS: pnet/libffi/src/s390 ffi.c,1.1,1.2 sysv.S,1.2,1.3,
Rhys Weatherley <address@hidden> <=
- Prev by Date:
[Dotgnu-pnet-commits] CVS: pnet/libffi/src/sparc ffi.c,1.1,1.2 v8.S,1.2,1.3 v9.S,1.1,1.2
- Next by Date:
[Dotgnu-pnet-commits] CVS: pnet/libffi/src/mips ffi.c,1.1,1.2
- Previous by thread:
[Dotgnu-pnet-commits] CVS: pnet/libffi/src/sparc ffi.c,1.1,1.2 v8.S,1.2,1.3 v9.S,1.1,1.2
- Next by thread:
[Dotgnu-pnet-commits] CVS: pnet/libffi/src/mips ffi.c,1.1,1.2
- Index(es):