OSDN Git Service

2012-03-22 David Edelsohn <dje.gcc@gmail.com>
authordje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 22 Mar 2012 18:43:00 +0000 (18:43 +0000)
committerdje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 22 Mar 2012 18:43:00 +0000 (18:43 +0000)
        Backport from mainline:
        2012-03-09  David Edelsohn  <dje.gcc@gmail.com>

        * src/powerpc/aix_closure.S (ffi_closure_ASM): Adjust for Darwin64
        change to return value of ffi_closure_helper_DARWIN and load type
        from return type.

        From Tom Honermann <tom.honermann@oracle.com>:
        * src/powerpc/aix.S: Declare .ffi_prep_args.  Insert nops after
        branch instructions.
        * src/powerpc/aix_closure.S: Declare .ffi_closure_helper_DARWIN.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_7-branch@185706 138bc75d-0d04-0410-961f-82ee72b054a4

libffi/ChangeLog
libffi/src/powerpc/aix.S
libffi/src/powerpc/aix_closure.S

index bd32b1a..e8d5a69 100644 (file)
@@ -1,3 +1,17 @@
+2012-03-22  David Edelsohn  <dje.gcc@gmail.com>
+
+       Backport from mainline:
+       2012-03-09  David Edelsohn  <dje.gcc@gmail.com>
+
+       * src/powerpc/aix_closure.S (ffi_closure_ASM): Adjust for Darwin64
+       change to return value of ffi_closure_helper_DARWIN and load type
+       from return type.
+
+       From Tom Honermann <tom.honermann@oracle.com>:
+       * src/powerpc/aix.S: Declare .ffi_prep_args.  Insert nops after
+       branch instructions.
+       * src/powerpc/aix_closure.S: Declare .ffi_closure_helper_DARWIN.
+
 2012-03-22  Release Manager
 
        * GCC 4.7.0 released.
index c6f8764..213f2db 100644 (file)
@@ -1,5 +1,5 @@
 /* -----------------------------------------------------------------------
-   aix.S - Copyright (c) 2002,2009 Free Software Foundation, Inc.
+   aix.S - Copyright (c) 2002, 2009 Free Software Foundation, Inc.
    based on darwin.S by John Hornkvist
 
    PowerPC Assembly glue.
@@ -79,6 +79,8 @@
        .set f20,20
        .set f21,21
 
+       .extern .ffi_prep_args
+
 #define LIBFFI_ASM
 #include <fficonfig.h>
 #include <ffi.h>
@@ -125,6 +127,7 @@ ffi_call_AIX:
        /* Call ffi_prep_args.  */
        mr      r4, r1
        bl      .ffi_prep_args
+       nop
 
        /* Now do the call.  */
        ld      r0, 0(r29)
@@ -226,6 +229,7 @@ L(float_return_value):
        /* Call ffi_prep_args.  */
        mr      r4, r1
        bl      .ffi_prep_args
+       nop
 
        /* Now do the call.  */
        lwz     r0, 0(r29)
index 5c74448..aabd3c3 100644 (file)
@@ -79,6 +79,8 @@
        .set f20,20
        .set f21,21
 
+       .extern .ffi_closure_helper_DARWIN
+
 #define LIBFFI_ASM
 #define JUMPTARGET(name) name
 #define L(x) x
@@ -165,6 +167,7 @@ ffi_closure_ASM:
 
        /* look up the proper starting point in table  */
        /* by using return type as offset */
+       lhz     r3, 10(r3)      /* load type from return type */
        ld      r4, LC..60(2)   /* get address of jump table */
        sldi    r3, r3, 4       /* now multiply return type by 16 */
        ld      r0, 240+16(r1)  /* load return address */
@@ -337,8 +340,9 @@ L..finish:
 
        /* look up the proper starting point in table  */
        /* by using return type as offset */
+       lhz     r3, 6(r3)       /* load type from return type */
        lwz     r4, LC..60(2)   /* get address of jump table */
-       slwi    r3, r3, 4       /* now multiply return type by 4 */
+       slwi    r3, r3, 4       /* now multiply return type by 16 */
        lwz     r0, 176+8(r1)   /* load return address */
        add     r3, r3, r4      /* add contents of table to table address */
        mtctr   r3