summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>2003-07-18 21:42:29 +0000
committerdje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>2003-07-18 21:42:29 +0000
commitb416fea8b26eedabfd641b7366667a4a98fead2f (patch)
tree83e8c8eda53c16486c65e8ecf6649b8b5c40b513
parent7a1fee99d00421892caea4d6f0e621ec7527cde7 (diff)
downloadppe42-gcc-b416fea8b26eedabfd641b7366667a4a98fead2f.tar.gz
ppe42-gcc-b416fea8b26eedabfd641b7366667a4a98fead2f.zip
* 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
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/rs6000/aix.h23
2 files changed, 30 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0b711da0476..066668a84f3 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 ec6a350f157..991d2c31153 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
OpenPOWER on IntegriCloud