Commit 091ad0b9 by Richard Kenner

*** empty log message ***

From-SVN: r673
parent 76124f95
...@@ -688,12 +688,15 @@ round_push (size) ...@@ -688,12 +688,15 @@ round_push (size)
Any required stack pointer alignment is preserved. Any required stack pointer alignment is preserved.
SIZE is an rtx representing the size of the area. SIZE is an rtx representing the size of the area.
TARGET is a place in which the address can be placed. */ TARGET is a place in which the address can be placed.
KNOWN_ALIGN is the alignment (in bits) that we know SIZE has. */
rtx rtx
allocate_dynamic_stack_space (size, target) allocate_dynamic_stack_space (size, target, known_align)
rtx size; rtx size;
rtx target; rtx target;
int known_align;
{ {
/* Ensure the size is in the proper mode. */ /* Ensure the size is in the proper mode. */
if (GET_MODE (size) != VOIDmode && GET_MODE (size) != Pmode) if (GET_MODE (size) != VOIDmode && GET_MODE (size) != Pmode)
...@@ -761,11 +764,14 @@ allocate_dynamic_stack_space (size, target) ...@@ -761,11 +764,14 @@ allocate_dynamic_stack_space (size, target)
way of knowing which systems have this problem. So we avoid even way of knowing which systems have this problem. So we avoid even
momentarily mis-aligning the stack. */ momentarily mis-aligning the stack. */
size = round_push (size); if (known_align % STACK_BOUNDARY != 0)
size = round_push (size);
do_pending_stack_adjust (); do_pending_stack_adjust ();
if (target == 0) /* Don't use a TARGET that isn't a pseudo. */
if (target == 0 || GET_CODE (target) != REG
|| REGNO (target) < FIRST_PSEUDO_REGISTER)
target = gen_reg_rtx (Pmode); target = gen_reg_rtx (Pmode);
#ifndef STACK_GROWS_DOWNWARD #ifndef STACK_GROWS_DOWNWARD
...@@ -797,15 +803,18 @@ allocate_dynamic_stack_space (size, target) ...@@ -797,15 +803,18 @@ allocate_dynamic_stack_space (size, target)
#endif #endif
#ifdef MUST_ALIGN #ifdef MUST_ALIGN
target = expand_divmod (0, CEIL_DIV_EXPR, Pmode, target, if (known_align % BIGGEST_ALIGNMENT != 0)
gen_rtx (CONST_INT, VOIDmode, {
BIGGEST_ALIGNMENT / BITS_PER_UNIT), target = expand_divmod (0, CEIL_DIV_EXPR, Pmode, target,
0, 1); gen_rtx (CONST_INT, VOIDmode,
BIGGEST_ALIGNMENT / BITS_PER_UNIT),
target = expand_mult (Pmode, target, 0, 1);
gen_rtx (CONST_INT, VOIDmode,
BIGGEST_ALIGNMENT / BITS_PER_UNIT), target = expand_mult (Pmode, target,
0, 1); gen_rtx (CONST_INT, VOIDmode,
BIGGEST_ALIGNMENT / BITS_PER_UNIT),
0, 1);
}
#endif #endif
/* Some systems require a particular insn to refer to the stack /* Some systems require a particular insn to refer to the stack
......
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