diff options
author | trix <trix@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-12-17 16:25:12 +0000 |
---|---|---|
committer | trix <trix@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-12-17 16:25:12 +0000 |
commit | c60abcf01e477d04c6207de468f4851c6483632f (patch) | |
tree | 03b872a1710f2ee1a99c3dd61f58585446eb9746 | |
parent | 583568360e91c15d532681e0858f7480541f7738 (diff) | |
download | gcc-c60abcf01e477d04c6207de468f4851c6483632f.tar.gz |
Fix for -maix64 and medium sized struct passing.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@48102 138bc75d-0d04-0410-961f-82ee72b054a4
-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 211386bc34a..e2fcf6c8ed6 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 b2abd819cf7..3bf85d4601a 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. */ |