public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Bernd Schmidt <bschmidt@redhat.com>
To: David Wohlferd <dw@LimeGreenSocks.com>,
	       Bernd Edlinger <bernd.edlinger@hotmail.de>,
	       "gcc-patches@gcc.gnu.org" <gcc-patches@gcc.gnu.org>,
	       Richard Henderson <rth@redhat.com>,
	       "jason@redhat.com" <jason@redhat.com>
Cc: "segher@kernel.crashing.org" <segher@kernel.crashing.org>,
	       "sandra@codesourcery.com" <sandra@codesourcery.com>,
	       "Paul_Koning@Dell.com" <Paul_Koning@Dell.com>,
	       Jeff Law <law@redhat.com>,
	       "bernds_cb1@t-online.de" <bernds_cb1@t-online.de>,
	       Andrew Haley <aph@redhat.com>
Subject: Re: AW: Wonly-top-basic-asm
Date: Thu, 11 Feb 2016 15:40:00 -0000	[thread overview]
Message-ID: <56BCAB73.20506@redhat.com> (raw)
In-Reply-To: <56BBCC90.9020001@LimeGreenSocks.com>

On 02/11/2016 12:49 AM, David Wohlferd wrote:
> I believe the attached patch addresses all the other outstanding comments.

Bernd Edlinger made some thorough comments; I'll just add a few more. I 
don't think this is a patch we're considering for gcc-6, at least not 
for the initial release - I imagine it could be backported from gcc-7 at 
some point.

Like the other Bernd I have a preference for just -Wbasic-asm. I'd make 
the analogy with -Wparentheses - we don't warn about every parenthesis, 
but the name of an option is not the place for detailed explanations of 
how it works. Less typing and less to remember is preferrable IMO.

> +	      /* Warn on basic asm used inside of functions,
> +		 EXCEPT when in naked functions.  Also allow asm (""). */

No all-caps.

>   @subsubheading Remarks
> -Using extended @code{asm} typically produces smaller, safer, and more
> +Using extended @code{asm} (@pxref{Extended Asm}) typically produces smaller,
> +safer, and more
>   efficient code, and in most cases it is a better solution than basic

Rewrap the paragraph?

> -Here is an example of basic @code{asm} for i386:
> +Basic @code{asm} statements do not perform an implicit "memory" clobber
> +(@pxref{Clobbers}).  Also, there is no implicit clobbering of @emph{any}
> +registers, so (other than in @code{naked} functions which follow the ABI
> +rules) changed registers must be restored to their original value before
> +exiting the @code{asm}.  While this behavior has not always been
> +documented, GCC has worked this way since at least v2.95.3.
>
> +@strong{Warning:} This "clobber nothing" behavior may be different than how
> +other compilers treat basic @code{asm}, since the C standards for the
> +@code{asm} statement provide no guidance regarding these semantics.  As a
> +result, @code{asm} statements that work correctly on other compilers may not
> +work correctly with GCC (and vice versa), even though they both compile
> +without error.
> +
> +Future versions of GCC may change basic @code{asm} to clobber memory and
> +perhaps some (or all) registers.  This change may fix subtle problems with
> +existing @code{asm} statements.  However it may break or slow down ones
> +that were working correctly.  To ``future-proof'' your asm against possible
> +changes to basic @code{asm}'s semantics, use extended @code{asm}.
> +
> +You can use @option{-Wbasic-asm-in-function} to locate basic @code{asm}
> +statements that may need changes, and refer to
> +@uref{https://gcc.gnu.org/wiki/ConvertBasicAsmToExtended, How to convert
> +from basic asm to extended asm} for information about how to perform the
> +conversion.

I still think this is too verbose and would serve to confuse rather than 
enlighten in practice. (If anyone feels otherwise, feel free to overrule 
me.) I'm also no longer sure about references to the wiki.

Let's look at this existing paragraph from the manual:

   Since GCC does not parse the @var{AssemblerInstructions}, it has
   no visibility of any symbols it references. This may result in GCC
   discarding those symbols as unreferenced.

I think extending this would be better. Something like

"Since the C standards does not specify semantics for @code{asm}, it is 
a potential source of incompatibilities between compilers.  GCC does not 
parse the @var{AssemblerInstructions}, which means there is no way to 
communicate to the compiler what is happening inside them.  GCC has no 
visibility of any symbols referenced in the @code{asm} and may discard 
them as unreferenced. It also does not know about side effects that may 
occur, such as modifications of memory locations or registers. GCC 
assumes that no such side effects occur, which may not be what the user 
expected if code was written for other compilers.

Since basic @code{asm} cannot easily be used in a reliable way, 
@option{-Wbasic-asm} should be used to warn about the use of basic asm 
inside a function. See 
@uref{https://gcc.gnu.org/wiki/ConvertBasicAsmToExtended, How to convert 
from basic asm to extended asm} for information about how to convert 
code to use extended @code{asm}."

But again, if someone feels the docs patch as posted is preferrable, go 
ahead and approve it (for stage1 I assume).


Bernd

  parent reply	other threads:[~2016-02-11 15:40 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-24 22:24 Wonly-top-basic-asm David Wohlferd
2016-01-25 12:25 ` Wonly-top-basic-asm Bernd Schmidt
2016-01-28  7:21   ` Wonly-top-basic-asm David Wohlferd
2016-02-08  3:46     ` Wonly-top-basic-asm David Wohlferd
2016-02-08  6:45       ` AW: Wonly-top-basic-asm Bernd Edlinger
2016-02-08 20:15         ` David Wohlferd
2016-02-10 23:50         ` David Wohlferd
2016-02-11  6:51           ` AW: " Bernd Edlinger
2016-02-12  7:01             ` David Wohlferd
2016-02-11 15:40           ` Bernd Schmidt [this message]
2016-02-11 16:03             ` Sandra Loosemore
2016-02-12  7:08               ` David Wohlferd
2016-02-12  7:05             ` David Wohlferd
2016-02-12 12:51               ` Bernd Schmidt
2016-02-13  1:03                 ` Sandra Loosemore
2016-02-14  4:00                   ` David Wohlferd
2016-02-20  1:03                     ` David Wohlferd
2016-02-20 12:08                       ` Wonly-top-basic-asm Bernd Edlinger
2016-02-21 10:28                         ` Wonly-top-basic-asm David Wohlferd
2016-02-26 15:10                           ` Wonly-top-basic-asm Bernd Schmidt
2016-02-29  7:02                             ` Wonly-top-basic-asm David Wohlferd
2016-03-11  0:56                               ` Wonly-top-basic-asm David Wohlferd
2016-03-14 15:29                                 ` Wonly-top-basic-asm Bernd Schmidt
2016-03-17  5:24                                   ` Wonly-top-basic-asm David Wohlferd
2016-03-18 13:32                                     ` Wonly-top-basic-asm Bernd Schmidt
2016-03-18 15:01                                       ` Wonly-top-basic-asm Richard Biener
2016-03-18 19:14                                     ` Wonly-top-basic-asm Bernd Schmidt
2016-02-14  3:57                 ` AW: Wonly-top-basic-asm David Wohlferd
2016-01-26  0:32 ` Wonly-top-basic-asm Segher Boessenkool
2016-01-26 12:11   ` Wonly-top-basic-asm Bernd Schmidt
2016-01-26 16:12     ` Wonly-top-basic-asm Segher Boessenkool
2016-01-26 23:38       ` Wonly-top-basic-asm David Wohlferd
2016-02-16 14:03 ` Wonly-top-basic-asm Jan Hubicka
2016-02-16 20:02   ` Wonly-top-basic-asm Bernd Edlinger

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=56BCAB73.20506@redhat.com \
    --to=bschmidt@redhat.com \
    --cc=Paul_Koning@Dell.com \
    --cc=aph@redhat.com \
    --cc=bernd.edlinger@hotmail.de \
    --cc=bernds_cb1@t-online.de \
    --cc=dw@LimeGreenSocks.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=jason@redhat.com \
    --cc=law@redhat.com \
    --cc=rth@redhat.com \
    --cc=sandra@codesourcery.com \
    --cc=segher@kernel.crashing.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).