Commit 12b48dc8 by Bin Cheng

re PR target/45070 (Miscompiled c++ class with packed attribute on ARM with -Os…

re PR target/45070 (Miscompiled c++ class with packed attribute on ARM with -Os optimizations (Qt 4.6.2))


	PR target/45070
	* config/arm/arm.c (thumb1_extra_regs_pushed): Handle return value of size
	less than 4 bytes by using macro ARM_NUM_INTS.
	(thumb1_unexpanded_epilogue): Use macro ARM_NUM_INTS.

From-SVN: r190919
parent a8886f7d
......@@ -21862,7 +21862,7 @@ thumb1_extra_regs_pushed (arm_stack_offsets *offsets, bool for_prologue)
unsigned long l_mask = live_regs_mask & (for_prologue ? 0x40ff : 0xff);
/* Then count how many other high registers will need to be pushed. */
unsigned long high_regs_pushed = bit_count (live_regs_mask & 0x0f00);
int n_free, reg_base;
int n_free, reg_base, size;
if (!for_prologue && frame_pointer_needed)
amount = offsets->locals_base - offsets->saved_regs;
......@@ -21901,7 +21901,8 @@ thumb1_extra_regs_pushed (arm_stack_offsets *offsets, bool for_prologue)
n_free = 0;
if (!for_prologue)
{
reg_base = arm_size_return_regs () / UNITS_PER_WORD;
size = arm_size_return_regs ();
reg_base = ARM_NUM_INTS (size);
live_regs_mask >>= reg_base;
}
......@@ -21955,8 +21956,7 @@ thumb1_unexpanded_epilogue (void)
if (extra_pop > 0)
{
unsigned long extra_mask = (1 << extra_pop) - 1;
live_regs_mask |= extra_mask << ((size + UNITS_PER_WORD - 1)
/ UNITS_PER_WORD);
live_regs_mask |= extra_mask << ARM_NUM_INTS (size);
}
/* The prolog may have pushed some high registers to use as
......
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