summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>2004-01-27 22:48:11 +0000
committerzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>2004-01-27 22:48:11 +0000
commit4d4b27e74721475b140ed0930c1c2aa899790a45 (patch)
treede2e6b4ca935caee7553a3235f294bda6ed65743
parent2bf483143bb0be43c72cf42481f3c03630105b2d (diff)
downloadgcc-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/ChangeLog17
-rw-r--r--gcc/config/ia64/ia64.c15
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