OSDN Git Service

2005-02-22 Andrew Haley <aph@redhat.com>
authoraph <aph@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 23 Feb 2005 14:05:13 +0000 (14:05 +0000)
committeraph <aph@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 23 Feb 2005 14:05:13 +0000 (14:05 +0000)
PR libffi/20104
        * src/powerpc/ffi.c (ffi_prep_cif_machdep): Bump alignment to
        odd-numbered register pairs for 64-bit integer types.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@95455 138bc75d-0d04-0410-961f-82ee72b054a4

libffi/ChangeLog
libffi/src/powerpc/ffi.c

index 6de6ef5..83a1c2b 100644 (file)
@@ -1,3 +1,8 @@
+2005-02-22  Andrew Haley  <aph@redhat.com>
+
+       * src/powerpc/ffi.c (ffi_prep_cif_machdep): Bump alignment to
+       odd-numbered register pairs for 64-bit integer types.
+
 2005-02-23  Andreas Tobler  <a.tobler@schweiz.ch>
 
        PR libffi/20104
index c8d1887..67d945b 100644 (file)
@@ -573,10 +573,14 @@ ffi_status ffi_prep_cif_machdep(ffi_cif *cif)
            /* 'long long' arguments are passed as two words, but
               either both words must fit in registers or both go
               on the stack.  If they go on the stack, they must
-              be 8-byte-aligned.  */
+              be 8-byte-aligned.  
+
+              Also, only certain register pairs can be used for
+              passing long long int -- specifically (r3,r4), (r5,r6),
+              (r7,r8), (r9,r10).
+           */
            if (intarg_count == NUM_GPR_ARG_REGISTERS-1
-               || (intarg_count >= NUM_GPR_ARG_REGISTERS
-                   && intarg_count%2 != 0))
+               || intarg_count%2 != 0)
              intarg_count++;
            intarg_count += 2;
            break;