[ctypes-commit] ctypes/source/libffi/src/powerpc darwin.S,1.1.2.3,1.1.2.4 darwin_closure.S,1.1.2.3,1
Brought to you by:
theller
From: Hye-Shik C. <pe...@us...> - 2006-02-01 20:32:03
|
Update of /cvsroot/ctypes/ctypes/source/libffi/src/powerpc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9598/source/libffi/src/powerpc Modified Files: Tag: branch_1_0 darwin.S darwin_closure.S ffi.c ffitarget.h linux64.S linux64_closure.S ppc_closure.S sysv.S Log Message: Update libffi to gcc head as of 2006/02/01. This fixes several unittest failures on 64bit platforms. Index: ffitarget.h =================================================================== RCS file: /cvsroot/ctypes/ctypes/source/libffi/src/powerpc/Attic/ffitarget.h,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -C2 -d -r1.1.2.3 -r1.1.2.4 *** ffitarget.h 31 Jan 2006 20:27:40 -0000 1.1.2.3 --- ffitarget.h 1 Feb 2006 20:31:52 -0000 1.1.2.4 *************** *** 63,66 **** --- 63,73 ---- #endif + #ifdef POWERPC_FREEBSD + FFI_SYSV, + FFI_GCC_SYSV, + FFI_LINUX64, + FFI_DEFAULT_ABI = FFI_SYSV, + #endif + FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 } ffi_abi; *************** *** 72,75 **** --- 79,85 ---- #define FFI_NATIVE_RAW_API 0 + /* Needed for FFI_SYSV small structure returns. */ + #define FFI_SYSV_TYPE_SMALL_STRUCT (FFI_TYPE_LAST) + #if defined(POWERPC64) || defined(POWERPC_AIX) #define FFI_TRAMPOLINE_SIZE 24 Index: linux64.S =================================================================== RCS file: /cvsroot/ctypes/ctypes/source/libffi/src/powerpc/Attic/linux64.S,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -C2 -d -r1.1.2.3 -r1.1.2.4 *** linux64.S 31 Jan 2006 20:17:42 -0000 1.1.2.3 --- linux64.S 1 Feb 2006 20:31:52 -0000 1.1.2.4 *************** *** 121,127 **** .Lfp_return_value: bf 28, .Lfloat_return_value stfd %f1, 0(%r30) ! stfd %f2, 8(%r30) /* It might be a long double */ b .Ldone_return_value .Lfloat_return_value: --- 121,131 ---- .Lfp_return_value: + bt 27, .Lfd_return_value bf 28, .Lfloat_return_value stfd %f1, 0(%r30) ! b .Ldone_return_value ! .Lfd_return_value: ! stfd %f1, 0(%r30) ! stfd %f2, 8(%r30) b .Ldone_return_value .Lfloat_return_value: Index: darwin.S =================================================================== RCS file: /cvsroot/ctypes/ctypes/source/libffi/src/powerpc/Attic/darwin.S,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -C2 -d -r1.1.2.3 -r1.1.2.4 *** darwin.S 31 Jan 2006 20:17:42 -0000 1.1.2.3 --- darwin.S 1 Feb 2006 20:31:52 -0000 1.1.2.4 *************** *** 25,28 **** --- 25,38 ---- ----------------------------------------------------------------------- */ + #if defined(__ppc64__) + #define MODE_CHOICE(x, y) y + #else + #define MODE_CHOICE(x, y) x + #endif + + #define g_long MODE_CHOICE(long, quad) /* usage is ".g_long" */ + + #define LOG2_GPR_BYTES MODE_CHOICE(2,3) /* log2(GPR_BYTES) */ + #define LIBFFI_ASM #include <fficonfig.h> *************** *** 191,195 **** .byte 0x1 ; uleb128 0x1 .byte 0x0 ; uleb128 0x0 ! .align 2 LECIE1: .globl _ffi_call_DARWIN.eh --- 201,205 ---- .byte 0x1 ; uleb128 0x1 .byte 0x0 ; uleb128 0x0 ! .align LOG2_GPR_BYTES LECIE1: .globl _ffi_call_DARWIN.eh *************** *** 200,206 **** LASFDE1: .long LASFDE1-EH_frame1 ; FDE CIE offset ! .long LLFB0$non_lazy_ptr-. ; FDE initial location .set L$set$3,LFE1-LFB0 ! .long L$set$3 ; FDE address range .byte 0x0 ; uleb128 0x0; Augmentation size .byte 0x4 ; DW_CFA_advance_loc4 --- 210,216 ---- LASFDE1: .long LASFDE1-EH_frame1 ; FDE CIE offset ! .g_long LLFB0$non_lazy_ptr-. ; FDE initial location .set L$set$3,LFE1-LFB0 ! .g_long L$set$3 ; FDE address range .byte 0x0 ; uleb128 0x0; Augmentation size .byte 0x4 ; DW_CFA_advance_loc4 *************** *** 228,235 **** .byte 0xd ; DW_CFA_def_cfa_register .byte 0x1c ; uleb128 0x1c ! .align 2 LEFDE1: .data ! .align 2 LLFB0$non_lazy_ptr: ! .long LFB0 --- 238,245 ---- .byte 0xd ; DW_CFA_def_cfa_register .byte 0x1c ; uleb128 0x1c ! .align LOG2_GPR_BYTES LEFDE1: .data ! .align LOG2_GPR_BYTES LLFB0$non_lazy_ptr: ! .g_long LFB0 Index: linux64_closure.S =================================================================== RCS file: /cvsroot/ctypes/ctypes/source/libffi/src/powerpc/Attic/linux64_closure.S,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -C2 -d -r1.1.2.3 -r1.1.2.4 *** linux64_closure.S 31 Jan 2006 20:17:42 -0000 1.1.2.3 --- linux64_closure.S 1 Feb 2006 20:31:52 -0000 1.1.2.4 *************** *** 6,10 **** #ifdef __powerpc64__ ! .hidden ffi_closure_LINUX64, .ffi_closure_LINUX64 .globl ffi_closure_LINUX64, .ffi_closure_LINUX64 .section ".opd","aw" --- 6,11 ---- #ifdef __powerpc64__ ! FFI_HIDDEN (ffi_closure_LINUX64) ! FFI_HIDDEN (.ffi_closure_LINUX64) .globl ffi_closure_LINUX64, .ffi_closure_LINUX64 .section ".opd","aw" Index: ffi.c =================================================================== RCS file: /cvsroot/ctypes/ctypes/source/libffi/src/powerpc/Attic/ffi.c,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -C2 -d -r1.1.2.3 -r1.1.2.4 *** ffi.c 31 Jan 2006 20:17:42 -0000 1.1.2.3 --- ffi.c 1 Feb 2006 20:31:52 -0000 1.1.2.4 *************** *** 30,48 **** #include <stdio.h> - #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 1) - # define hidden __attribute__ ((visibility ("hidden"))) - #else - # define hidden - #endif ! ! extern void ffi_closure_SYSV(void); [...1440 lines suppressed...] ! int FFI_HIDDEN ffi_closure_helper_LINUX64 (ffi_closure *, void *, ! unsigned long *, ffi_dblfl *); ! int FFI_HIDDEN ffi_closure_helper_LINUX64 (ffi_closure *closure, void *rvalue, unsigned long *pst, ffi_dblfl *pfr) *************** *** 1124,1128 **** default: ! FFI_ASSERT(0); } --- 1236,1240 ---- default: ! FFI_ASSERT (0); } Index: ppc_closure.S =================================================================== RCS file: /cvsroot/ctypes/ctypes/source/libffi/src/powerpc/Attic/ppc_closure.S,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -C2 -d -r1.1.2.1 -r1.1.2.2 *** ppc_closure.S 31 Jan 2006 19:44:36 -0000 1.1.2.1 --- ppc_closure.S 1 Feb 2006 20:31:52 -0000 1.1.2.2 *************** *** 58,62 **** # make the call ! bl JUMPTARGET(ffi_closure_helper_SYSV) # now r3 contains the return type --- 58,62 ---- # make the call ! bl ffi_closure_helper_SYSV@local # now r3 contains the return type *************** *** 66,70 **** # look up the proper starting point in table # by using return type as offset ! addi %r5,%r1,112 # get pointer to results area bl .Lget_ret_type0_addr # get pointer to .Lret_type0 into LR mflr %r4 # move to r4 --- 66,70 ---- # look up the proper starting point in table # by using return type as offset ! addi %r6,%r1,112 # get pointer to results area bl .Lget_ret_type0_addr # get pointer to .Lret_type0 into LR mflr %r4 # move to r4 *************** *** 95,99 **** # case FFI_TYPE_INT .Lret_type1: ! lwz %r3,0(%r5) b .Lfinish nop --- 95,99 ---- # case FFI_TYPE_INT .Lret_type1: ! lwz %r3,0(%r6) b .Lfinish nop *************** *** 102,106 **** # case FFI_TYPE_FLOAT .Lret_type2: ! lfs %f1,0(%r5) b .Lfinish nop --- 102,106 ---- # case FFI_TYPE_FLOAT .Lret_type2: ! lfs %f1,0(%r6) b .Lfinish nop *************** *** 109,113 **** # case FFI_TYPE_DOUBLE .Lret_type3: ! lfd %f1,0(%r5) b .Lfinish nop --- 109,113 ---- # case FFI_TYPE_DOUBLE .Lret_type3: ! lfd %f1,0(%r6) b .Lfinish nop *************** *** 116,120 **** # case FFI_TYPE_LONGDOUBLE .Lret_type4: ! lfd %f1,0(%r5) b .Lfinish nop --- 116,120 ---- # case FFI_TYPE_LONGDOUBLE .Lret_type4: ! lfd %f1,0(%r6) b .Lfinish nop *************** *** 123,127 **** # case FFI_TYPE_UINT8 .Lret_type5: ! lbz %r3,3(%r5) b .Lfinish nop --- 123,127 ---- # case FFI_TYPE_UINT8 .Lret_type5: ! lbz %r3,3(%r6) b .Lfinish nop *************** *** 130,134 **** # case FFI_TYPE_SINT8 .Lret_type6: ! lbz %r3,3(%r5) extsb %r3,%r3 b .Lfinish --- 130,134 ---- # case FFI_TYPE_SINT8 .Lret_type6: ! lbz %r3,3(%r6) extsb %r3,%r3 b .Lfinish *************** *** 137,141 **** # case FFI_TYPE_UINT16 .Lret_type7: ! lhz %r3,2(%r5) b .Lfinish nop --- 137,141 ---- # case FFI_TYPE_UINT16 .Lret_type7: ! lhz %r3,2(%r6) b .Lfinish nop *************** *** 144,148 **** # case FFI_TYPE_SINT16 .Lret_type8: ! lha %r3,2(%r5) b .Lfinish nop --- 144,148 ---- # case FFI_TYPE_SINT16 .Lret_type8: ! lha %r3,2(%r6) b .Lfinish nop *************** *** 151,155 **** # case FFI_TYPE_UINT32 .Lret_type9: ! lwz %r3,0(%r5) b .Lfinish nop --- 151,155 ---- # case FFI_TYPE_UINT32 .Lret_type9: ! lwz %r3,0(%r6) b .Lfinish nop *************** *** 158,162 **** # case FFI_TYPE_SINT32 .Lret_type10: ! lwz %r3,0(%r5) b .Lfinish nop --- 158,162 ---- # case FFI_TYPE_SINT32 .Lret_type10: ! lwz %r3,0(%r6) b .Lfinish nop *************** *** 165,170 **** # case FFI_TYPE_UINT64 .Lret_type11: ! lwz %r3,0(%r5) ! lwz %r4,4(%r5) b .Lfinish nop --- 165,170 ---- # case FFI_TYPE_UINT64 .Lret_type11: ! lwz %r3,0(%r6) ! lwz %r4,4(%r6) b .Lfinish nop *************** *** 172,177 **** # case FFI_TYPE_SINT64 .Lret_type12: ! lwz %r3,0(%r5) ! lwz %r4,4(%r5) b .Lfinish nop --- 172,177 ---- # case FFI_TYPE_SINT64 .Lret_type12: ! lwz %r3,0(%r6) ! lwz %r4,4(%r6) b .Lfinish nop *************** *** 186,194 **** # case FFI_TYPE_POINTER .Lret_type14: ! lwz %r3,0(%r5) b .Lfinish nop nop # case done .Lfinish: --- 186,259 ---- # case FFI_TYPE_POINTER .Lret_type14: ! lwz %r3,0(%r6) ! b .Lfinish ! nop ! nop ! ! # The return types below are only used when the ABI type is FFI_SYSV. ! # case FFI_SYSV_TYPE_SMALL_STRUCT + 1. One byte struct. ! .Lret_type15: ! # fall through. ! lbz %r3,0(%r6) ! b .Lfinish ! nop ! nop ! ! # case FFI_SYSV_TYPE_SMALL_STRUCT + 2. Two byte struct. ! .Lret_type16: ! # fall through. ! lhz %r3,0(%r6) b .Lfinish nop nop + # case FFI_SYSV_TYPE_SMALL_STRUCT + 3. Three byte struct. + .Lret_type17: + # fall through. + lwz %r3,0(%r6) + srwi %r3,%r3,8 + b .Lfinish + nop + + # case FFI_SYSV_TYPE_SMALL_STRUCT + 4. Four byte struct. + .Lret_type18: + # this one handles the structs from above too. + lwz %r3,0(%r6) + b .Lfinish + nop + nop + + # case FFI_SYSV_TYPE_SMALL_STRUCT + 5. Five byte struct. + .Lret_type19: + # fall through. + lwz %r3,0(%r6) + lwz %r4,4(%r6) + li %r5,24 + b .Lstruct567 + + # case FFI_SYSV_TYPE_SMALL_STRUCT + 6. Six byte struct. + .Lret_type20: + # fall through. + lwz %r3,0(%r6) + lwz %r4,4(%r6) + li %r5,16 + b .Lstruct567 + + # case FFI_SYSV_TYPE_SMALL_STRUCT + 7. Seven byte struct. + .Lret_type21: + # fall through. + lwz %r3,0(%r6) + lwz %r4,4(%r6) + li %r5,8 + b .Lstruct567 + + # case FFI_SYSV_TYPE_SMALL_STRUCT + 8. Eight byte struct. + .Lret_type22: + # this one handles the above unhandled structs. + lwz %r3,0(%r6) + lwz %r4,4(%r6) + b .Lfinish + nop + # case done .Lfinish: *************** *** 198,201 **** --- 263,274 ---- addi %r1,%r1,144 blr + + .Lstruct567: + subfic %r0,%r5,32 + srw %r4,%r4,%r5 + slw %r0,%r3,%r0 + srw %r3,%r3,%r5 + or %r4,%r0,%r4 + b .Lfinish END(ffi_closure_SYSV) *************** *** 242,248 **** .byte 0x4 # DW_CFA_advance_loc4 .4byte .LCFI1-.LCFI0 ! .byte 0x2f # DW_CFA_GNU_negative_offset_extended .uleb128 0x41 ! .uleb128 0x1 .align 2 .LEFDE1: --- 315,321 ---- .byte 0x4 # DW_CFA_advance_loc4 .4byte .LCFI1-.LCFI0 ! .byte 0x11 # DW_CFA_offset_extended_sf .uleb128 0x41 ! .sleb128 -1 .align 2 .LEFDE1: Index: darwin_closure.S =================================================================== RCS file: /cvsroot/ctypes/ctypes/source/libffi/src/powerpc/Attic/darwin_closure.S,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -C2 -d -r1.1.2.3 -r1.1.2.4 *** darwin_closure.S 31 Jan 2006 20:17:42 -0000 1.1.2.3 --- darwin_closure.S 1 Feb 2006 20:31:52 -0000 1.1.2.4 *************** *** 28,38 **** #define L(x) x .file "darwin_closure.S" .text ! .align 2 .globl _ffi_closure_ASM .text ! .align 2 _ffi_closure_ASM: LFB1: --- 28,50 ---- #define L(x) x + #if defined(__ppc64__) + #define MODE_CHOICE(x, y) y + #else + #define MODE_CHOICE(x, y) x + #endif + + #define lgu MODE_CHOICE(lwzu, ldu) + + #define g_long MODE_CHOICE(long, quad) /* usage is ".g_long" */ + + #define LOG2_GPR_BYTES MODE_CHOICE(2,3) /* log2(GPR_BYTES) */ + .file "darwin_closure.S" .text ! .align LOG2_GPR_BYTES .globl _ffi_closure_ASM .text ! .align LOG2_GPR_BYTES _ffi_closure_ASM: LFB1: *************** *** 235,239 **** .data ! .section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms EH_frame1: .set L$set$0,LECIE1-LSCIE1 --- 247,251 ---- .data ! .section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support EH_frame1: .set L$set$0,LECIE1-LSCIE1 *************** *** 251,255 **** .byte 0x1 ; uleb128 0x1 .byte 0x0 ; uleb128 0x0 ! .align 2 LECIE1: .globl _ffi_closure_ASM.eh --- 263,267 ---- .byte 0x1 ; uleb128 0x1 .byte 0x0 ; uleb128 0x0 ! .align LOG2_GPR_BYTES LECIE1: .globl _ffi_closure_ASM.eh *************** *** 261,267 **** LASFDE1: .long LASFDE1-EH_frame1 ; FDE CIE offset ! .long LLFB1$non_lazy_ptr-. ; FDE initial location .set L$set$3,LFE1-LFB1 ! .long L$set$3 ; FDE address range .byte 0x0 ; uleb128 0x0; Augmentation size .byte 0x4 ; DW_CFA_advance_loc4 --- 273,279 ---- LASFDE1: .long LASFDE1-EH_frame1 ; FDE CIE offset ! .g_long LLFB1$non_lazy_ptr-. ; FDE initial location .set L$set$3,LFE1-LFB1 ! .g_long L$set$3 ; FDE address range .byte 0x0 ; uleb128 0x0; Augmentation size .byte 0x4 ; DW_CFA_advance_loc4 *************** *** 276,287 **** .byte 0x41 ; uleb128 0x41 .byte 0x7e ; sleb128 -2 ! .align 2 LEFDE1: .data ! .align 2 LDFCM0: .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 ! .align 2 Lffi_closure_helper_DARWIN$stub: .indirect_symbol _ffi_closure_helper_DARWIN mflr r0 --- 288,300 ---- .byte 0x41 ; uleb128 0x41 .byte 0x7e ; sleb128 -2 ! .align LOG2_GPR_BYTES LEFDE1: .data ! .align LOG2_GPR_BYTES LDFCM0: .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 ! .align LOG2_GPR_BYTES Lffi_closure_helper_DARWIN$stub: + #if 1 .indirect_symbol _ffi_closure_helper_DARWIN mflr r0 *************** *** 291,304 **** addis r11,r11,ha16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN) mtlr r0 ! lwzu r12,lo16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN)(r11) mtctr r12 bctr - .data .lazy_symbol_pointer L_ffi_closure_helper_DARWIN$lazy_ptr: .indirect_symbol _ffi_closure_helper_DARWIN ! .long dyld_stub_binding_helper .data ! .align 2 LLFB1$non_lazy_ptr: ! .long LFB1 --- 304,317 ---- addis r11,r11,ha16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN) mtlr r0 ! lgu r12,lo16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN)(r11) mtctr r12 bctr .lazy_symbol_pointer L_ffi_closure_helper_DARWIN$lazy_ptr: .indirect_symbol _ffi_closure_helper_DARWIN ! .g_long dyld_stub_binding_helper ! #endif .data ! .align LOG2_GPR_BYTES LLFB1$non_lazy_ptr: ! .g_long LFB1 Index: sysv.S =================================================================== RCS file: /cvsroot/ctypes/ctypes/source/libffi/src/powerpc/Attic/sysv.S,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -C2 -d -r1.1.2.3 -r1.1.2.4 *** sysv.S 31 Jan 2006 20:27:40 -0000 1.1.2.3 --- sysv.S 1 Feb 2006 20:31:52 -0000 1.1.2.4 *************** *** 61,65 **** /* Call ffi_prep_args_SYSV. */ mr %r4,%r1 ! bl JUMPTARGET(ffi_prep_args_SYSV) /* Now do the call. */ --- 61,65 ---- /* Call ffi_prep_args_SYSV. */ mr %r4,%r1 ! bl ffi_prep_args_SYSV@local /* Now do the call. */ *************** *** 100,103 **** --- 100,104 ---- /* Now, deal with the return value. */ mtcrf 0x01,%r31 + bt- 31,L(small_struct_return_value) bt- 30,L(done_return_value) bt- 29,L(fp_return_value) *************** *** 125,128 **** --- 126,156 ---- stfs %f1,0(%r30) b L(done_return_value) + + L(small_struct_return_value): + mtcrf 0x10,%r31 /* cr3 */ + bt- 15,L(smst_one_register) + mtcrf 0x08,%r31 /* cr4 */ + bt- 16,L(smst_two_register) + b L(done_return_value) + + L(smst_one_register): + rlwinm %r5,%r31,5+23,32-5,31 /* Extract the value to shift. */ + slw %r3,%r3,%r5 + stw %r3,0(%r30) + b L(done_return_value) + L(smst_two_register): + rlwinm %r5,%r31,5+23,32-5,31 /* Extract the value to shift. */ + cmpwi %r5,0 + subfic %r9,%r5,32 + slw %r29,%r3,%r5 + srw %r9,%r4,%r9 + beq- L(smst_8byte) + or %r3,%r9,%r29 + slw %r4,%r4,%r5 + L(smst_8byte): + stw %r3,0(%r30) + stw %r4,4(%r30) + b L(done_return_value) + .LFE1: END(ffi_call_SYSV) *************** *** 170,176 **** .byte 0x4 /* DW_CFA_advance_loc4 */ .4byte .LCFI5-.LCFI0 ! .byte 0x2f /* DW_CFA_GNU_negative_offset_extended */ .uleb128 0x41 ! .uleb128 0x1 .byte 0x9f /* DW_CFA_offset, column 0x1f */ .uleb128 0x1 --- 198,204 ---- .byte 0x4 /* DW_CFA_advance_loc4 */ .4byte .LCFI5-.LCFI0 ! .byte 0x11 /* DW_CFA_offset_extended_sf */ .uleb128 0x41 ! .sleb128 -1 .byte 0x9f /* DW_CFA_offset, column 0x1f */ .uleb128 0x1 |