aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJim Wilson <wilson@redhat.com>2001-04-11 20:19:43 +0000
committerJim Wilson <wilson@gcc.gnu.org>2001-04-11 13:19:43 -0700
commit93dd6255c208d0fe680741183b724124455c7c19 (patch)
tree3a111464089d720e561e8813beab895ad45f1ab2 /gcc
parent9b7949d5ffff47d657935da2ea6ec5aa3e77f9a7 (diff)
downloadgcc-93dd6255c208d0fe680741183b724124455c7c19.zip
gcc-93dd6255c208d0fe680741183b724124455c7c19.tar.gz
gcc-93dd6255c208d0fe680741183b724124455c7c19.tar.bz2
Fix PR 2520, a problem with structure parameter passing.
* config/ia64/ia64.h (FUNCTION_ARG_BOUNDARY): Return 128 if argument requires more than 64 bits of alignment. From-SVN: r41269
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/ia64/ia64.h10
2 files changed, 12 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 12198f2..9ff706e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2001-04-11 Jim Wilson <wilson@redhat.com>
+
+ * config/ia64/ia64.h (FUNCTION_ARG_BOUNDARY): Return 128 if argument
+ requires more than 64 bits of alignment.
+
2001-04-11 Neil Booth <neil@daikokuya.demon.co.uk>
* cpplib.c (do_line): Sanity check iff enable checking.
diff --git a/gcc/config/ia64/ia64.h b/gcc/config/ia64/ia64.h
index 8acbef1..956abd0 100644
--- a/gcc/config/ia64/ia64.h
+++ b/gcc/config/ia64/ia64.h
@@ -1382,11 +1382,15 @@ do { \
/* If defined, a C expression that gives the alignment boundary, in bits, of an
argument with the specified mode and type. */
-/* Arguments larger than 64 bits require 128 bit alignment. */
+/* Arguments with alignment larger than 8 bytes start at the next even
+ boundary. See ia64_function_arg. */
#define FUNCTION_ARG_BOUNDARY(MODE, TYPE) \
- (((((MODE) == BLKmode ? int_size_in_bytes (TYPE) : GET_MODE_SIZE (MODE)) \
- + UNITS_PER_WORD - 1) / UNITS_PER_WORD) > 1 ? 128 : PARM_BOUNDARY)
+ (((TYPE) ? (TYPE_ALIGN (TYPE) > 8 * BITS_PER_UNIT) \
+ : (((((MODE) == BLKmode \
+ ? int_size_in_bytes (TYPE) : GET_MODE_SIZE (MODE)) \
+ + UNITS_PER_WORD - 1) / UNITS_PER_WORD) > 1)) \
+ ? 128 : PARM_BOUNDARY)
/* A C expression that is nonzero if REGNO is the number of a hard register in
which function arguments are sometimes passed. This does *not* include