diff options
Diffstat (limited to 'gcc/config/i386/i386.c')
-rw-r--r-- | gcc/config/i386/i386.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index f58d529604c..259f97b5a10 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. |