From 487b16e9f411cc40cb590a45a65c5ff667c37fa7 Mon Sep 17 00:00:00 2001 From: amodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4> Date: Tue, 4 Jul 2006 03:35:48 +0000 Subject: [PATCH] PR target/28207 * config/rs6000/rs6000.c (function_arg_boundary): Double-word align 128-bit IBM long doubles for ABI_V4. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@115170 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/config/rs6000/rs6000.c | 13 +++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7d88546dd64f..dbc201e6f896 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2006-07-04 Alan Modra <amodra@bigpond.net.au> + + PR target/28207 + * config/rs6000/rs6000.c (function_arg_boundary): Double-word align + 128-bit IBM long doubles for ABI_V4. + 2006-07-03 Eric Botcazou <ebotcazou@adacore.com> * tree.c (range_in_array_bounds_p): New predicate. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 6d78f84e5577..a21261189aa9 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -4485,7 +4485,12 @@ function_arg_padding (enum machine_mode mode, tree type) of an argument with the specified mode and type. If it is not defined, PARM_BOUNDARY is used for all arguments. - V.4 wants long longs to be double word aligned. + V.4 wants long longs and doubles to be double word aligned. Just + testing the mode size is a boneheaded way to do this as it means + that other types such as complex int are also double word aligned. + However, we're stuck with this because changing the ABI might break + existing library interfaces. + Doubleword align SPE vectors. Quadword align Altivec vectors. Quadword align large synthetic vector types. */ @@ -4493,7 +4498,11 @@ function_arg_padding (enum machine_mode mode, tree type) int function_arg_boundary (enum machine_mode mode, tree type) { - if (DEFAULT_ABI == ABI_V4 && GET_MODE_SIZE (mode) == 8) + if (DEFAULT_ABI == ABI_V4 + && (GET_MODE_SIZE (mode) == 8 + || (TARGET_HARD_FLOAT + && TARGET_FPRS + && mode == TFmode))) return 64; else if (SPE_VECTOR_MODE (mode) || (type && TREE_CODE (type) == VECTOR_TYPE -- GitLab