aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@google.com>2017-03-20 17:43:08 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2017-03-20 17:43:08 +0000
commitdd629845b0931912853a26bf8f8e05adf9f048a2 (patch)
tree2f86b99eeb5b9cd8832bcb6d5c42f7815353cf95 /gcc
parent8026a5ae9c090029c51657651982603ca6fc381a (diff)
downloadgcc-dd629845b0931912853a26bf8f8e05adf9f048a2.zip
gcc-dd629845b0931912853a26bf8f8e05adf9f048a2.tar.gz
gcc-dd629845b0931912853a26bf8f8e05adf9f048a2.tar.bz2
i386.c (ix86_function_regparm): Save an extra register for -fsplit-stack with DECL_STATIC_CHAIN.
* config/i386/i386.c (ix86_function_regparm): Save an extra register for -fsplit-stack with DECL_STATIC_CHAIN. From-SVN: r246286
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/i386/i386.c10
2 files changed, 13 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7164d10..1385d92 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2017-03-20 Ian Lance Taylor <iant@google.com>
+
+ * config/i386/i386.c (ix86_function_regparm): Save an extra
+ register for -fsplit-stack with DECL_STATIC_CHAIN.
+
2017-03-17 Palmer Dabbelt <palmer@dabbelt.com>
PR target/79912
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index f58d529..259f97b 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -7975,8 +7975,14 @@ ix86_function_regparm (const_tree type, const_tree decl)
local_regparm = 2;
/* Save a register for the split stack. */
- if (local_regparm == 3 && flag_split_stack)
- local_regparm = 2;
+ if (flag_split_stack)
+ {
+ if (local_regparm == 3)
+ local_regparm = 2;
+ else if (local_regparm == 2
+ && DECL_STATIC_CHAIN (target->decl))
+ local_regparm = 1;
+ }
/* Each fixed register usage increases register pressure,
so less registers should be used for argument passing.