Commit 3a22ad89 by Nick Clifton Committed by Nick Clifton

mn10300.c (popcount): New function.

	* config/mn10300/mn10300.c (popcount): New function.
	(mn10300_expand_prologue): Include saved registers in stack usage
	count.

From-SVN: r207665
parent a596d940
2014-02-10 Nick Clifton <nickc@redhat.com>
* config/mn10300/mn10300.c (popcount): New function.
(mn10300_expand_prologue): Include saved registers in stack usage
count.
2014-02-10 Jeff Law <law@redhat.com> 2014-02-10 Jeff Law <law@redhat.com>
PR middle-end/52306 PR middle-end/52306
......
...@@ -741,16 +741,31 @@ mn10300_gen_multiple_store (unsigned int mask) ...@@ -741,16 +741,31 @@ mn10300_gen_multiple_store (unsigned int mask)
F (emit_insn (x)); F (emit_insn (x));
} }
static inline unsigned int
popcount (unsigned int mask)
{
unsigned int count = 0;
while (mask)
{
++ count;
mask &= ~ (mask & - mask);
}
return count;
}
void void
mn10300_expand_prologue (void) mn10300_expand_prologue (void)
{ {
HOST_WIDE_INT size = mn10300_frame_size (); HOST_WIDE_INT size = mn10300_frame_size ();
unsigned int mask;
if (flag_stack_usage_info) mask = mn10300_get_live_callee_saved_regs (NULL);
current_function_static_stack_size = size;
/* If we use any of the callee-saved registers, save them now. */ /* If we use any of the callee-saved registers, save them now. */
mn10300_gen_multiple_store (mn10300_get_live_callee_saved_regs (NULL)); mn10300_gen_multiple_store (mask);
if (flag_stack_usage_info)
current_function_static_stack_size = size + popcount (mask) * 4;
if (TARGET_AM33_2 && fp_regs_to_save ()) if (TARGET_AM33_2 && fp_regs_to_save ())
{ {
...@@ -767,6 +782,9 @@ mn10300_expand_prologue (void) ...@@ -767,6 +782,9 @@ mn10300_expand_prologue (void)
unsigned int strategy_size = (unsigned)-1, this_strategy_size; unsigned int strategy_size = (unsigned)-1, this_strategy_size;
rtx reg; rtx reg;
if (flag_stack_usage_info)
current_function_static_stack_size += num_regs_to_save * 4;
/* We have several different strategies to save FP registers. /* We have several different strategies to save FP registers.
We can store them using SP offsets, which is beneficial if We can store them using SP offsets, which is beneficial if
there are just a few registers to save, or we can use `a0' in there are just a few registers to save, or we can use `a0' in
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment