aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChung-Ju Wu <jasonwucj@gmail.com>2018-04-22 08:25:47 +0000
committerChung-Ju Wu <jasonwucj@gcc.gnu.org>2018-04-22 08:25:47 +0000
commit361292be13045d2ed2812b26bb6c634b60e155df (patch)
treec138ff07ed2c4b92fe5f46dcb24ba486667d2532
parent79498ad8ba53725b8429deeb9eb81c66bc0c496d (diff)
downloadgcc-361292be13045d2ed2812b26bb6c634b60e155df.zip
gcc-361292be13045d2ed2812b26bb6c634b60e155df.tar.gz
gcc-361292be13045d2ed2812b26bb6c634b60e155df.tar.bz2
[NDS32] Fix wrong input value of parameter from stack for variable-length function.
gcc/ * config/nds32/nds32.c (nds32_compute_stack_frame): Fix wrong value. From-SVN: r259549
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/config/nds32/nds32.c10
2 files changed, 10 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7c6fb76..43c1b3a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
2018-04-22 Chung-Ju Wu <jasonwucj@gmail.com>
+ * config/nds32/nds32.c (nds32_compute_stack_frame): Fix wrong value.
+
+2018-04-22 Chung-Ju Wu <jasonwucj@gmail.com>
+
* config/nds32/nds32-protos.h (nds32_data_alignment,
nds32_local_alignment): Declare.
* config/nds32/nds32.c (nds32_data_alignment, nds32_constant_alignment,
diff --git a/gcc/config/nds32/nds32.c b/gcc/config/nds32/nds32.c
index a0012c0..0c4e917 100644
--- a/gcc/config/nds32/nds32.c
+++ b/gcc/config/nds32/nds32.c
@@ -611,10 +611,12 @@ nds32_compute_stack_frame (void)
{
block_size = cfun->machine->fp_size
+ cfun->machine->gp_size
- + cfun->machine->lp_size
- + (4 * (cfun->machine->callee_saved_last_gpr_regno
- - cfun->machine->callee_saved_first_gpr_regno
- + 1));
+ + cfun->machine->lp_size;
+
+ if (cfun->machine->callee_saved_last_gpr_regno != SP_REGNUM)
+ block_size += (4 * (cfun->machine->callee_saved_last_gpr_regno
+ - cfun->machine->callee_saved_first_gpr_regno
+ + 1));
if (!NDS32_DOUBLE_WORD_ALIGN_P (block_size))
{