From 660faa2dd854d7df96828be61cc08ff8bc106512 Mon Sep 17 00:00:00 2001 From: amylaar Date: Wed, 9 Apr 1997 17:50:38 +0000 Subject: [PATCH] (output_stack_adjust): When splitting an adjustment into two parts, make sure the stack is aligned at all times. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@13846 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/config/sh/sh.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index 0f3a94f7420..12a49caa78b 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/config/sh/sh.c @@ -2490,11 +2490,15 @@ output_stack_adjust (size, reg, temp) if (! CONST_OK_FOR_I (size)) { - if (CONST_OK_FOR_I (size / 2) && CONST_OK_FOR_I (size - size / 2)) + /* Try to do it with two partial adjustments; however, must make + sure that the stack is properly aligned at all times, in case + an interrupt occurs between the two partial adjustments. */ + if (CONST_OK_FOR_I (size / 2 & -4) + && CONST_OK_FOR_I (size - (size / 2 & -4))) { - val = GEN_INT (size / 2); + val = GEN_INT (size / 2 & -4); emit_insn (gen_addsi3 (reg, reg, val)); - val = GEN_INT (size - size / 2); + val = GEN_INT (size - (size / 2 & -4)); } else { -- 2.11.0