aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorBernd Schmidt <bernd.schmidt@analog.com>2007-02-28 00:37:09 +0000
committerBernd Schmidt <bernds@gcc.gnu.org>2007-02-28 00:37:09 +0000
commit3b1bf459a3d09dd633df8e4d4af1b813709a021b (patch)
tree2db196400973ac84552b6e980f1b891ff8bea226 /gcc
parent9edd7f971b7d8ce12ac110ecb496d28a5ab4782f (diff)
downloadgcc-3b1bf459a3d09dd633df8e4d4af1b813709a021b.zip
gcc-3b1bf459a3d09dd633df8e4d4af1b813709a021b.tar.gz
gcc-3b1bf459a3d09dd633df8e4d4af1b813709a021b.tar.bz2
calls.c (emit_library_call_value_1): Handle partial registers correctly when building up CALL_INSN_FUNCTION_USAGE.
* calls.c (emit_library_call_value_1): Handle partial registers correctly when building up CALL_INSN_FUNCTION_USAGE. From-SVN: r122396
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/calls.c13
2 files changed, 17 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 888ac2e..a8f4170 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2007-02-28 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * calls.c (emit_library_call_value_1): Handle partial registers
+ correctly when building up CALL_INSN_FUNCTION_USAGE.
+
2007-02-27 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
* pa/predicates.md (move_src_operand): Allow zero for mode.
diff --git a/gcc/calls.c b/gcc/calls.c
index d9ba08c..8723e1f 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -3774,7 +3774,18 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
if (reg != 0 && GET_CODE (reg) == PARALLEL)
use_group_regs (&call_fusage, reg);
else if (reg != 0)
- use_reg (&call_fusage, reg);
+ {
+ int partial = argvec[count].partial;
+ if (partial)
+ {
+ int nregs;
+ gcc_assert (partial % UNITS_PER_WORD == 0);
+ nregs = partial / UNITS_PER_WORD;
+ use_regs (&call_fusage, REGNO (reg), nregs);
+ }
+ else
+ use_reg (&call_fusage, reg);
+ }
}
/* Pass the function the address in which to return a structure value. */