Similar to -mpreferred-stack-boundary=3, -mincoming-stack-boundary=3 is allowed with -mno-sse in 64-bit mode.
OK for trunk? H.J. gcc/ PR target/53383 * config/i386/i386.c (ix86_option_override_internal): Allow -mincoming-stack-boundary=X if -mpreferred-stack-boundary=N is allowed and X < N. gcc/testsuite/ PR target/53383 * gcc.target/i386/pr53383-1.c: New file. * gcc.target/i386/pr53383-2.c: Likewise. * gcc.target/i386/pr53383-3.c: Likewise. --- gcc/config/i386/i386.c | 13 ++++++++----- gcc/testsuite/gcc.target/i386/pr53383-1.c | 8 ++++++++ gcc/testsuite/gcc.target/i386/pr53383-2.c | 8 ++++++++ gcc/testsuite/gcc.target/i386/pr53383-3.c | 8 ++++++++ 4 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr53383-1.c create mode 100644 gcc/testsuite/gcc.target/i386/pr53383-2.c create mode 100644 gcc/testsuite/gcc.target/i386/pr53383-3.c diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 7d26e8c..cea1295 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -4085,12 +4085,15 @@ ix86_option_override_internal (bool main_args_p, ix86_incoming_stack_boundary = ix86_default_incoming_stack_boundary; if (opts_set->x_ix86_incoming_stack_boundary_arg) { - if (opts->x_ix86_incoming_stack_boundary_arg - < (TARGET_64BIT_P (opts->x_ix86_isa_flags) ? 4 : 2) - || opts->x_ix86_incoming_stack_boundary_arg > 12) - error ("-mincoming-stack-boundary=%d is not between %d and 12", + int min = (TARGET_64BIT_P (opts->x_ix86_isa_flags) + ? (TARGET_SSE_P (opts->x_ix86_isa_flags) ? 4 : 3) : 2); + int max = 12; + + if (opts->x_ix86_incoming_stack_boundary_arg < min + || opts->x_ix86_incoming_stack_boundary_arg > max) + error ("-mincoming-stack-boundary=%d is not between %d and %d", opts->x_ix86_incoming_stack_boundary_arg, - TARGET_64BIT_P (opts->x_ix86_isa_flags) ? 4 : 2); + min, max); else { ix86_user_incoming_stack_boundary diff --git a/gcc/testsuite/gcc.target/i386/pr53383-1.c b/gcc/testsuite/gcc.target/i386/pr53383-1.c new file mode 100644 index 0000000..d140bda --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr53383-1.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mno-sse -mpreferred-stack-boundary=3" } */ + +int +bar (int x) +{ + return x + 9; +} diff --git a/gcc/testsuite/gcc.target/i386/pr53383-2.c b/gcc/testsuite/gcc.target/i386/pr53383-2.c new file mode 100644 index 0000000..a1b8e41 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr53383-2.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mno-sse -mpreferred-stack-boundary=3 -mincoming-stack-boundary=3" } */ + +int +bar (int x) +{ + return x + 9; +} diff --git a/gcc/testsuite/gcc.target/i386/pr53383-3.c b/gcc/testsuite/gcc.target/i386/pr53383-3.c new file mode 100644 index 0000000..e5d3a5b --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr53383-3.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mno-sse -mincoming-stack-boundary=3 -mpreferred-stack-boundary=3" } */ + +int +bar (int x) +{ + return x + 9; +} -- 2.4.3