]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
types.c (double, longdouble): Merge identical SH and ARM typedefs, and add POWERPC64.
authorAlan Modra <amodra@bigpond.net.au>
Thu, 11 Sep 2003 05:17:57 +0000 (05:17 +0000)
committerAlan Modra <amodra@gcc.gnu.org>
Thu, 11 Sep 2003 05:17:57 +0000 (14:47 +0930)
* src/types.c (double, longdouble): Merge identical SH and ARM
typedefs, and add POWERPC64.
* src/powerpc/ffi.c (ffi_prep_args64): Correct next_arg calc for
struct split over gpr and rest.
(ffi_prep_cif_machdep): Correct intarg_count for structures.
* src/powerpc/linux64.S (ffi_call_LINUX64): Fix gpr offsets.

From-SVN: r71295

libffi/ChangeLog
libffi/src/powerpc/ffi.c
libffi/src/powerpc/linux64.S
libffi/src/types.c

index bc9f28a62a631a331e04d1aa7e84999ae844d4a8..2efe64b2129b75748f7554abc4ec6297f7ccbd16 100644 (file)
@@ -1,3 +1,12 @@
+2003-09-11  Alan Modra  <amodra@bigpond.net.au>
+
+       * src/types.c (double, longdouble): Merge identical SH and ARM
+       typedefs, and add POWERPC64.
+       * src/powerpc/ffi.c (ffi_prep_args64): Correct next_arg calc for
+       struct split over gpr and rest.
+       (ffi_prep_cif_machdep): Correct intarg_count for structures.
+       * src/powerpc/linux64.S (ffi_call_LINUX64): Fix gpr offsets.
+
 2003-09-09  Andreas Tobler  <a.tobler@schweiz.ch>
 
        * src/powerpc/ffi.c (ffi_closure_helper_SYSV) Handle struct
index 010050f91ba2717f39336efa6b5af17a9c260436..9ad85ea7b86a8dd33ed6af53052a480884fc6f9f 100644 (file)
@@ -376,11 +376,11 @@ void hidden ffi_prep_args64(extended_cif *ecif, unsigned long *const stack)
          words = ((*ptr)->size + 7) / 8;
          if (next_arg >= gpr_base && next_arg + words > gpr_end)
            {
-             unsigned int first = (char *) gpr_end - (char *) next_arg;
+             size_t first = (char *) gpr_end - (char *) next_arg;
              memcpy((char *) next_arg, (char *) *p_argv, first);
              memcpy((char *) rest, (char *) *p_argv + first,
                     (*ptr)->size - first);
-             next_arg = rest + words * 8 - first;
+             next_arg = (unsigned long *) ((char *) rest + words * 8 - first);
            }
          else
            {
@@ -591,7 +591,7 @@ ffi_status ffi_prep_cif_machdep(ffi_cif *cif)
 #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
          case FFI_TYPE_LONGDOUBLE:
 #endif
-           intarg_count += ((*ptr)->size + 7) & ~7;
+           intarg_count += ((*ptr)->size + 7) / 8;
            break;
 
          default:
index d8af13b108a93a03820d1dee84d6c946ecadea0e..2207980772064cc1376230309de305bffecbb01e 100644 (file)
@@ -73,10 +73,10 @@ ffi_call_LINUX64:
        ld      %r5, -32-(6*8)(%r28)
        ld      %r6, -32-(5*8)(%r28)
        bf-     5, 1f
-       ld      %r7, -32-(4*4)(%r28)
-       ld      %r8, -32-(3*4)(%r28)
-       ld      %r9, -32-(2*4)(%r28)
-       ld      %r10, -32-(1*4)(%r28)
+       ld      %r7, -32-(4*8)(%r28)
+       ld      %r8, -32-(3*8)(%r28)
+       ld      %r9, -32-(2*8)(%r28)
+       ld      %r10, -32-(1*8)(%r28)
 1:
 
        /* Load all the FP registers.  */
index ae52f11f78c93db8f285cfce93f93137b2c99370..7d4d0a0d84adf0aefd4a3fe17aa376caaceb61a2 100644 (file)
@@ -76,12 +76,7 @@ FFI_INTEGRAL_TYPEDEF(sint64, 8, 8, FFI_TYPE_SINT64);
 FFI_INTEGRAL_TYPEDEF(double, 8, 4, FFI_TYPE_DOUBLE);
 FFI_INTEGRAL_TYPEDEF(longdouble, 12, 4, FFI_TYPE_LONGDOUBLE);
 
-#elif defined ARM
-
-FFI_INTEGRAL_TYPEDEF(double, 8, 4, FFI_TYPE_DOUBLE);
-FFI_INTEGRAL_TYPEDEF(longdouble, 8, 4, FFI_TYPE_LONGDOUBLE);
-
-#elif defined SH
+#elif defined ARM || defined SH || defined POWERPC64
 
 FFI_INTEGRAL_TYPEDEF(double, 8, 4, FFI_TYPE_DOUBLE);
 FFI_INTEGRAL_TYPEDEF(longdouble, 8, 4, FFI_TYPE_LONGDOUBLE);