diff options
author | Tom Rix <trix@redhat.com> | 2001-12-17 16:25:12 +0000 |
---|---|---|
committer | Tom Rix <trix@gcc.gnu.org> | 2001-12-17 16:25:12 +0000 |
commit | ea9982a840bcc10454e59f431bfded4e42e5a436 (patch) | |
tree | 03b872a1710f2ee1a99c3dd61f58585446eb9746 /gcc | |
parent | 301d03af8a3cbf51e79ff35c1aa71a6f353709c5 (diff) | |
download | gcc-ea9982a840bcc10454e59f431bfded4e42e5a436.zip gcc-ea9982a840bcc10454e59f431bfded4e42e5a436.tar.gz gcc-ea9982a840bcc10454e59f431bfded4e42e5a436.tar.bz2 |
Fix for -maix64 and medium sized struct passing.
From-SVN: r48102
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 22 |
2 files changed, 8 insertions, 19 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 211386b..e2fcf6c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2001-12-17 Tom Rix <trix@redhat.com> + + * config/rs6000/rs6000.c (expand_block_move): Fix limits on max size + of bytes. + 2001-12-17 Richard Sandiford <rsandifo@redhat.com> * target.h (asm_out.byte_op, asm_out.aligned_op, asm_out.unaligned_op, diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index b2abd81..3bf85d4 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -4075,25 +4075,9 @@ expand_block_move (operands) if (bytes <= 0) return 1; - /* Don't support real large moves. If string instructions are not used, - then don't generate more than 8 loads. */ - if (TARGET_STRING) - { - if (bytes > 8*4) - return 0; - } - else if (! STRICT_ALIGNMENT) - { - if (TARGET_POWERPC64 && align >= 4) - { - if (bytes > 8*8) - return 0; - } - else - if (bytes > 8*4) - return 0; - } - else if (bytes > 8*align) + /* store_one_arg depends on expand_block_move to handle at least the size of + reg_parm_stack_space. */ + if (bytes > (TARGET_POWERPC64 ? 64 : 32)) return 0; /* Move the address into scratch registers. */ |