]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
rs6000.h (FUNCTION_ARG_PADDING): Define.
authorDavid Edelsohn <edelsohn@mhpcc.edu>
Tue, 9 Dec 1997 16:35:56 +0000 (16:35 +0000)
committerJeff Law <law@gcc.gnu.org>
Tue, 9 Dec 1997 16:35:56 +0000 (09:35 -0700)
        * rs6000.h (FUNCTION_ARG_PADDING): Define.
        * rs6000.c (function_arg_padding): New function.

From-SVN: r17029

gcc/ChangeLog
gcc/config/rs6000/rs6000.c
gcc/config/rs6000/rs6000.h

index ee3c615affa929bd08ffdb1baaeeaed18646c551..efdd2a8bb06bb646b6214bfff5e09a9191311a3a 100644 (file)
@@ -1,3 +1,8 @@
+Tue Dec  9 09:38:58 1997  David Edelsohn  <edelsohn@mhpcc.edu>
+
+       * rs6000.h (FUNCTION_ARG_PADDING): Define.
+       * rs6000.c (function_arg_padding): New function.
+
 Tue Dec  9 10:34:21 1997  Manfred Hollstein  <manfred@s-direktnet.de>
 
        * m68k.c: Include tree.h only once.
index 2dbdb923538942b1717b9f3294a6cf43d11caf39..f8a10b6cf4fe6b32916b4daa8fbb41240b768024 100644 (file)
@@ -1167,6 +1167,35 @@ init_cumulative_args (cum, fntype, libname, incoming)
     }
 }
 \f
+/* If defined, a C expression which determines whether, and in which
+   direction, to pad out an argument with extra space.  The value
+   should be of type `enum direction': either `upward' to pad above
+   the argument, `downward' to pad below, or `none' to inhibit
+   padding.
+
+   For the AIX ABI structs are always stored left shifted in their
+   argument slot.  */
+
+enum direction
+function_arg_padding (mode, type)
+     enum machine_mode mode;
+     tree type;
+{
+  if (type && TREE_CODE (type) == RECORD_TYPE)
+    {
+      return upward;
+    }
+
+  /* This is the default definition.  */
+  return (! BYTES_BIG_ENDIAN
+          ? upward
+          : ((mode == BLKmode
+              ? (type && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
+                 && int_size_in_bytes (type) < (PARM_BOUNDARY / BITS_PER_UNIT))
+              : GET_MODE_BITSIZE (mode) < PARM_BOUNDARY)
+             ? downward : upward));
+}
+
 /* If defined, a C expression that gives the alignment boundary, in bits,
    of an argument with the specified mode and type.  If it is not defined, 
    PARM_BOUNDARY is used for all arguments.
index d30af75f155e4c4ac91fd570e571a79181e66db6..087ac5ad8ce761ec5d7d891e2ba6b42e792a1f23 100644 (file)
@@ -1461,6 +1461,15 @@ typedef struct rs6000_args
 #define FUNCTION_ARG_PASS_BY_REFERENCE(CUM, MODE, TYPE, NAMED) \
   function_arg_pass_by_reference(&CUM, MODE, TYPE, NAMED)
 
+/* If defined, a C expression which determines whether, and in which
+   direction, to pad out an argument with extra space.  The value
+   should be of type `enum direction': either `upward' to pad above
+   the argument, `downward' to pad below, or `none' to inhibit
+   padding.  */
+
+#define FUNCTION_ARG_PADDING(MODE, TYPE) \
+  function_arg_padding (MODE, TYPE)
+
 /* If defined, a C expression that gives the alignment boundary, in bits,
    of an argument with the specified mode and type.  If it is not defined,
    PARM_BOUNDARY is used for all arguments.  */