From b416fea8b26eedabfd641b7366667a4a98fead2f Mon Sep 17 00:00:00 2001
From: dje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Fri, 18 Jul 2003 21:42:29 +0000
Subject: [PATCH] 	* config/rs6000/aix.h (AGGREGATE_PADDING_FIXED):
 Define. 	(AGGREGATES_PAD_UPWARD_ALWAYS): Define. 
 (MUST_PASS_IN_STACK): Define. 	(BLOCK_REG_PADDING): Define.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@69570 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/ChangeLog           |  7 +++++++
 gcc/config/rs6000/aix.h | 23 +++++++++++++++++++++++
 2 files changed, 30 insertions(+)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0b711da0476b..066668a84f31 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2003-07-18  David Edelsohn  <edelsohn@gnu.org>
+
+	* config/rs6000/aix.h (AGGREGATE_PADDING_FIXED): Define.
+	(AGGREGATES_PAD_UPWARD_ALWAYS): Define.
+	(MUST_PASS_IN_STACK): Define.
+	(BLOCK_REG_PADDING): Define.
+
 2003-07-18  Richard Henderson  <rth@redhat.com>
 
 	* cfgrtl.c (force_nonfallthru_and_redirect): Use tablejump_p
diff --git a/gcc/config/rs6000/aix.h b/gcc/config/rs6000/aix.h
index ec6a350f157a..991d2c31153d 100644
--- a/gcc/config/rs6000/aix.h
+++ b/gcc/config/rs6000/aix.h
@@ -149,6 +149,29 @@
    ? MAX (MAX ((COMPUTED), (SPECIFIED)), 64)		\
    : MAX ((COMPUTED), (SPECIFIED)))
 
+/* The AIX ABI isn't explicit on whether aggregates smaller than a
+   word/doubleword should be padded upward or downward.  One could
+   reasonably assume that they follow the normal rules for structure
+   layout treating the parameter area as any other block of memory,
+   then map the reg param area to registers, i.e., pad upward, which
+   is the way IBM Compilers for AIX behave.
+   Setting both of the following defines results in this behaviour.  */
+#define AGGREGATE_PADDING_FIXED 1
+#define AGGREGATES_PAD_UPWARD_ALWAYS 1
+
+/* We don't want anything in the reg parm area being passed on the
+   stack.  */
+#define MUST_PASS_IN_STACK(MODE, TYPE)				\
+   ((TYPE) != 0							\
+    && (TREE_CODE (TYPE_SIZE (TYPE)) != INTEGER_CST		\
+	|| TREE_ADDRESSABLE (TYPE)))
+
+/* Specify padding for the last element of a block move between
+   registers and memory.  FIRST is nonzero if this is the only
+   element.  */
+#define BLOCK_REG_PADDING(MODE, TYPE, FIRST) \
+  (!(FIRST) ? upward : FUNCTION_ARG_PADDING (MODE, TYPE))
+
 /* Indicate that jump tables go in the text section.  */
 
 #define JUMP_TABLES_IN_TEXT_SECTION 1
-- 
GitLab