diff options
| author | wilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-12-10 19:24:38 +0000 |
|---|---|---|
| committer | wilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-12-10 19:24:38 +0000 |
| commit | 17de20716cbf1e546bef35fbd2b9a27d4bfa292a (patch) | |
| tree | 607859e5590da62c38c6eff7a686a4ef66fb60e1 | |
| parent | 7d4097fadd8f7ea3e54ecb05f52b9f3979b59b44 (diff) | |
| download | ppe42-gcc-17de20716cbf1e546bef35fbd2b9a27d4bfa292a.tar.gz ppe42-gcc-17de20716cbf1e546bef35fbd2b9a27d4bfa292a.zip | |
Fix PPC32 SVR4 ABI bug with 128-bit long double.
* rs6000.h (RETURN_IN_MEMORY): If ABI_V4, then TFmode is returned in
memory.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@60006 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/config/rs6000/rs6000.h | 10 |
2 files changed, 12 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d3ed606e61d..3b506ef19b7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2002-12-10 Jim Wilson <wilson@redhat.com> + + * rs6000.h (RETURN_IN_MEMORY): If ABI_V4, then TFmode is returned in + memory. + 2002-12-10 Andrew Haley <aph@redhat.com> * cse.c (cse_insn): Don't cse past a basic block boundary. diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index ab38f5693eb..e5e9e27cce9 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -1550,13 +1550,17 @@ typedef struct rs6000_stack { default, and -m switches get the final word. See rs6000_override_options for more details. + The PPC32 SVR4 ABI uses IEEE double extended for long double, if 128-bit + long double support is enabled. These values are returned in memory. + int_size_in_bytes returns -1 for variable size objects, which go in memory always. The cast to unsigned makes -1 > 8. */ #define RETURN_IN_MEMORY(TYPE) \ - (AGGREGATE_TYPE_P (TYPE) && \ - (TARGET_AIX_STRUCT_RET || \ - (unsigned HOST_WIDE_INT) int_size_in_bytes (TYPE) > 8)) + ((AGGREGATE_TYPE_P (TYPE) \ + && (TARGET_AIX_STRUCT_RET \ + || (unsigned HOST_WIDE_INT) int_size_in_bytes (TYPE) > 8)) \ + || (DEFAULT_ABI == ABI_V4 && TYPE_MODE (TYPE) == TFmode)) /* DRAFT_V4_STRUCT_RET defaults off. */ #define DRAFT_V4_STRUCT_RET 0 |

