diff options
author | David Edelsohn <edelsohn@gnu.org> | 2003-07-18 21:42:29 +0000 |
---|---|---|
committer | David Edelsohn <dje@gcc.gnu.org> | 2003-07-18 17:42:29 -0400 |
commit | 8d05ebaa244be5e801eefce13e3244046edbe4dd (patch) | |
tree | 83e8c8eda53c16486c65e8ecf6649b8b5c40b513 | |
parent | 790199856aab807f3810413867f739c702c6a3e9 (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/rs6000/aix.h | 23 |
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 |