aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Edelsohn <edelsohn@gnu.org>2003-07-18 21:42:29 +0000
committerDavid Edelsohn <dje@gcc.gnu.org>2003-07-18 17:42:29 -0400
commit8d05ebaa244be5e801eefce13e3244046edbe4dd (patch)
tree83e8c8eda53c16486c65e8ecf6649b8b5c40b513
parent790199856aab807f3810413867f739c702c6a3e9 (diff)
downloadgcc-8d05ebaa244be5e801eefce13e3244046edbe4dd.zip
gcc-8d05ebaa244be5e801eefce13e3244046edbe4dd.tar.gz
gcc-8d05ebaa244be5e801eefce13e3244046edbe4dd.tar.bz2
aix.h (AGGREGATE_PADDING_FIXED): Define.
* config/rs6000/aix.h (AGGREGATE_PADDING_FIXED): Define. (AGGREGATES_PAD_UPWARD_ALWAYS): Define. (MUST_PASS_IN_STACK): Define. (BLOCK_REG_PADDING): Define. From-SVN: r69570
-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 0b711da..066668a 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 ec6a350..991d2c3 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