On 06/11/17 22:35, Daniel Santos wrote: > I appear to have forgotten to cc gcc-patches, sorry about that. > > There are currently three cases where we issue a warning when disabling > -mcall-ms2sysv-xlogues for a function, but I never added a proper > warning, so there's no mechanism for disabling it. This is something > that I meant to address sooner. I'm thinking that it's better to just > remove the warning entirely and document these cases, rather than adding > a new warning. Any thoughts? > > These are the conditions: > > * the use of -fsplit-stack, > * the use of static call chains (not sure if we can ever have that), and > * if the function calls __buildin_eh_return. > > Some of these cases can likely be supported, but they are just on the > "not yet tested" list. > > 2017-06-11 Daniel Santos <daniel.san...@pobox.com > > * config/i386/i386.c (warn_once_call_ms2sysv_xlogues): Remove. > (ix86_compute_frame_layout): Don't call warn_once_call_ms2sysv_xlogues. > (ix86_expand_call): Likewise. >
Your change log should also mention the changed doc/invoke.texi > Thanks, > Daniel > > Signed-off-by: Daniel Santos <daniel.san...@pobox.com> > --- > gcc/config/i386/i386.c | 26 +++----------------------- > gcc/doc/invoke.texi | 25 ++++++++++++++++++++----- > 2 files changed, 23 insertions(+), 28 deletions(-) > > diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c > index d5c2d46bf5e..2dc6e53c765 100644 > --- a/gcc/config/i386/i386.c > +++ b/gcc/config/i386/i386.c > @@ -12772,18 +12772,6 @@ ix86_builtin_setjmp_frame_value (void) > return stack_realign_fp ? hard_frame_pointer_rtx : virtual_stack_vars_rtx; > } > > -/* Emits a warning for unsupported msabi to sysv pro/epilogues. */ > -static void warn_once_call_ms2sysv_xlogues (const char *feature) > -{ > - static bool warned_once = false; > - if (!warned_once) > - { > - warning (0, "-mcall-ms2sysv-xlogues is not compatible with %s", > - feature); > - warned_once = true; > - } > -} > - > /* When using -fsplit-stack, the allocation routines set a field in > the TCB to the bottom of the stack plus this much space, measured > in bytes. */ > @@ -12814,18 +12802,10 @@ ix86_compute_frame_layout (void) > gcc_assert (TARGET_SSE); > gcc_assert (!ix86_using_red_zone ()); > > - if (crtl->calls_eh_return) > + if (crtl->calls_eh_return || ix86_static_chain_on_stack) > { > gcc_assert (!reload_completed); > m->call_ms2sysv = false; > - warn_once_call_ms2sysv_xlogues ("__builtin_eh_return"); > - } > - > - else if (ix86_static_chain_on_stack) > - { > - gcc_assert (!reload_completed); > - m->call_ms2sysv = false; > - warn_once_call_ms2sysv_xlogues ("static call chains"); > } > > /* Finally, compute which registers the stub will manage. */ > @@ -29290,9 +29270,9 @@ ix86_expand_call (rtx retval, rtx fnaddr, rtx > callarg1, > else if (ix86_function_ms_hook_prologue (current_function_decl)) > ; > > - /* TODO: Cases not yet examined. */ > + /* TODO: Compatibility not yet examined. */ > else if (flag_split_stack) > - warn_once_call_ms2sysv_xlogues ("-fsplit-stack"); > + ; > > else > { > diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi > index c1168823af7..eec02b43a4f 100644 > --- a/gcc/doc/invoke.texi > +++ b/gcc/doc/invoke.texi > @@ -25389,11 +25389,26 @@ using the function attributes @code{ms_abi} and > @code{sysv_abi}. > @opindex mno-call-ms2sysv-xlogues > Due to differences in 64-bit ABIs, any Microsoft ABI function that calls a > System V ABI function must consider RSI, RDI and XMM6-15 as clobbered. By > -default, the code for saving and restoring these registers is emitted inline, > -resulting in fairly lengthy prologues and epilogues. Using > -@option{-mcall-ms2sysv-xlogues} emits prologues and epilogues that > -use stubs in the static portion of libgcc to perform these saves and > restores, > -thus reducing function size at the cost of a few extra instructions. > +default, the instructions for saving and restoring these registers are > emitted > +inline, resulting in fairly lengthy pro- and epilogues. Using > +@option{-mcall-ms2sysv-xlogues} emits pro- and epilogues that use stubs in > the > +static portion of libgcc to perform these saves and restores, thus reducing > +function size at the cost of executing a few extra instructions. This cost > is > +theoretically mitigated or eliminated by reduced instruction cache > utilization, > +temporal locality of the stubs, and the stubs' use of MOV instructions over > +PUSH and POP. > + > +This option is not supported with SEH, so it is completely unavailable on > +Windows. It is also silently disabled if a function: > + > +@enumerate > +@item is built with @option{-mno-sse2} or @option{-fsplit-stack}, > +@item has @code{__attribute__ ((ms_hook_prologue))}, or > +@item either throws an exception or explicitly calls > @code{__builtin_eh_return}. > +@end enumerate > + > +Support for @option{-fsplit-stack} and @code{__builtin_eh_return} may be > +added at some time in the future, but has not yet been tested. > > @item -mtls-dialect=@var{type} > @opindex mtls-dialect >