diff options
author | zack <zack@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-01-27 22:48:11 +0000 |
---|---|---|
committer | zack <zack@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-01-27 22:48:11 +0000 |
commit | 4d4b27e74721475b140ed0930c1c2aa899790a45 (patch) | |
tree | de2e6b4ca935caee7553a3235f294bda6ed65743 | |
parent | 2bf483143bb0be43c72cf42481f3c03630105b2d (diff) | |
download | gcc-4d4b27e74721475b140ed0930c1c2aa899790a45.tar.gz |
* ia64.c (ia64_function_arg): When placing HFAs in integer
registers, do not special case the mode used for complex
types. Do not advance int_regs until the current register
is full.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@76758 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 17 | ||||
-rw-r--r-- | gcc/config/ia64/ia64.c | 15 |
2 files changed, 21 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 47cf998ac3a..c5c093c386f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2004-01-27 Zack Weinberg <zack@codesourcery.com> + + * ia64.c (ia64_function_arg): When placing HFAs in integer + registers, do not special case the mode used for complex + types. Do not advance int_regs until the current register + is full. + 2004-01-27 Richard Sandiford <rsandifo@redhat.com> PR target/7297 @@ -15,9 +22,9 @@ (restore_stack_nonlocal): Same. 2004-01-27 Devang Patel <dpatel@apple.com> - + * Makefile.in (dwarf2out.o): Depend on input.h - * dbxout.c (dbx_debug_hooks): Add new empty hook for + * dbxout.c (dbx_debug_hooks): Add new empty hook for imported_module_or_decl. (xcoff_debug_hooks): Same. * sdbout.c (sdb_debug_hooks): Same. @@ -43,14 +50,14 @@ (dwarf2out_imported_module_or_decl): New function. 2004-01-27 Bob Wilson <bob.wilson@acm.org> - + * config/xtensa/xtensa.c (xtensa_copy_incoming_a7): Remove SUBREG on CQImode and CHImode incoming arguments in register a7. (function_arg): Wrap BLKmode argument in register a7 in a PARALLEL. * config/xtensa/xtensa.h (BLOCK_REG_PADDING): Define. * config/xtensa/xtensa.md (movdi, movdf): Only call force_reg or xtensa_copy_incoming_a7 before reload. - + 2004-01-27 J"orn Rennecke <joern.rennecke@superh.com> * coverage.c (get_coverage_counts): Give a different message @@ -83,7 +90,7 @@ 2004-01-24 James A. Morrison <ja2morri@uwaterloo.ca> - * fixinc/fixinc.c (test_test): Initialize res. + * fixinc/fixinc.c (test_test): Initialize res. (start_flexer): Initialize pz_cmd_save. 2004-01-27 Zack Weinberg <zack@codesourcery.com> diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c index b97dcd2bc38..5271081b3e9 100644 --- a/gcc/config/ia64/ia64.c +++ b/gcc/config/ia64/ia64.c @@ -3623,6 +3623,7 @@ ia64_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode, tree type, for (; offset < byte_size && int_regs < MAX_ARGUMENT_SLOTS; i++) { enum machine_mode gr_mode = DImode; + unsigned int gr_size; /* If we have an odd 4 byte hunk because we ran out of FR regs, then this goes in a GR reg left adjusted/little endian, right @@ -3636,17 +3637,19 @@ ia64_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode, tree type, adjusted/little endian. */ else if (byte_size - offset == 4) gr_mode = SImode; - /* Complex floats need to have float mode. */ - if (GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT) - gr_mode = hfa_mode; loc[i] = gen_rtx_EXPR_LIST (VOIDmode, gen_rtx_REG (gr_mode, (basereg + int_regs)), GEN_INT (offset)); - offset += GET_MODE_SIZE (gr_mode); - int_regs += GET_MODE_SIZE (gr_mode) <= UNITS_PER_WORD - ? 1 : GET_MODE_SIZE (gr_mode) / UNITS_PER_WORD; + + gr_size = GET_MODE_SIZE (gr_mode); + offset += gr_size; + if (gr_size == UNITS_PER_WORD + || (gr_size < UNITS_PER_WORD && offset % UNITS_PER_WORD == 0)) + int_regs++; + else if (gr_size > UNITS_PER_WORD) + int_regs += gr_size / UNITS_PER_WORD; } /* If we ended up using just one location, just return that one loc, but |