diff options
author | Segher Boessenkool <segher@kernel.crashing.org> | 2018-12-05 02:04:11 +0100 |
---|---|---|
committer | Segher Boessenkool <segher@gcc.gnu.org> | 2018-12-05 02:04:11 +0100 |
commit | 4526e5eccb78947d0d54c7470aa5b2e187bb515e (patch) | |
tree | 93d904ccafe497ec053a1f336d6f3ed1499fa11f /gcc | |
parent | 561094eeaea3cfabb67f7be8b775ab145dbb5282 (diff) | |
download | gcc-4526e5eccb78947d0d54c7470aa5b2e187bb515e.zip gcc-4526e5eccb78947d0d54c7470aa5b2e187bb515e.tar.gz gcc-4526e5eccb78947d0d54c7470aa5b2e187bb515e.tar.bz2 |
rs6000: Fix AIX aggregate passing fix
David's fix for the AIX aggregate passing from yesterday unfortunately
also triggers on powerpc64-linux. This fixes it.
* config/rs6000/rs6000.c (rs6000_function_arg): Only do the special
aggregate handling on actual AIX, not on somewhat similar systems.
(rs6000_arg_partial_bytes): Ditto.
From-SVN: r266811
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 4 |
2 files changed, 8 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ce91552..87ce4c6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-12-05 Segher Boessenkool <segher@kernel.crashing.org> + + * config/rs6000/rs6000.c (rs6000_function_arg): Only do the special + aggregate handling on actual AIX, not on somewhat similar systems. + (rs6000_arg_partial_bytes): Ditto. + 2018-12-04 Vladimir Makarov <vmakarov@redhat.com> PR rtl-optimization/88317 diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 4f12558..91e0121 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -11990,7 +11990,7 @@ rs6000_function_arg (cumulative_args_t cum_v, machine_mode mode, cum->fregno++; if (USE_FP_FOR_ARG_P (cum, elt_mode) - && !(TARGET_AIX && AGGREGATE_TYPE_P (type))) + && !(TARGET_AIX && !TARGET_ELF && AGGREGATE_TYPE_P (type))) { rtx rvec[GP_ARG_NUM_REG + AGGR_ARG_NUM_REG + 1]; rtx r, off; @@ -12127,7 +12127,7 @@ rs6000_arg_partial_bytes (cumulative_args_t cum_v, machine_mode mode, align_words = rs6000_parm_start (mode, type, cum->words); if (USE_FP_FOR_ARG_P (cum, elt_mode) - && !(TARGET_AIX && AGGREGATE_TYPE_P (type))) + && !(TARGET_AIX && !TARGET_ELF && AGGREGATE_TYPE_P (type))) { unsigned long n_fpreg = (GET_MODE_SIZE (elt_mode) + 7) >> 3; |