On Mon, 23 Apr 2018, Alexander Monakov wrote:

> This rewrites global register vars doc to reflect that the register is no 
> longer
> reserved exclusively, but in fact is available for general allocation, and 
> also
> adds the requirement to properly inform the compiler where inline asms are
> accessing the variable.
> 
> This:
> -@item The register is not saved and restored by any functions.
> is reworded to verbosely spell out gotchas related to calls/returns.
> 
>       * extend.texi (Global Register Variables): Rewrite the bullet list.
>       Note that the register is available for allocation. Note that access
>       via inline asm must use constraints. Add note about async-signal
>       handlers. Remove paragraph about automagic register selection.
> ---
>  gcc/doc/extend.texi | 29 +++++++++++++++++++----------
>  1 file changed, 19 insertions(+), 10 deletions(-)

Ping? I believe the substance of new text has been hashed out with Michael.
I'd appreciate a review for language and style issues.

Thanks.
Alexander

> diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
> index 5571d05d93b..f663741e36c 100644
> --- a/gcc/doc/extend.texi
> +++ b/gcc/doc/extend.texi
> @@ -9549,11 +9549,21 @@ After defining a global register variable, for the 
> current compilation
>  unit:
>  
>  @itemize @bullet
> -@item The register is reserved entirely for this use, and will not be 
> -allocated for any other purpose.
> -@item The register is not saved and restored by any functions.
> -@item Stores into this register are never deleted even if they appear to be 
> -dead, but references may be deleted, moved or simplified.
> +@item If the register is a call-saved register, call ABI is affected:
> +the register will not be restored in function epilogue sequences after
> +the variable has been assigned.  Therefore, functions cannot safely
> +return to callers that assume standard ABI.
> +@item Conversely, if the register is a call-clobbered register, making
> +calls to functions that use standard ABI may lose contents of the variable.
> +Such calls may be created by the compiler even if none are evident in
> +the original program, for example when libgcc functions are used to
> +make up for unavailable instructions.
> +@item Accesses to the variable may be optimized as usual and the register
> +remains available for allocation and use in any computations, provided that
> +observable values of the variable are not affected.
> +@item If the variable is referenced in inline assembly, the type of access
> +must be provided to the compiler via constraints (@pxref{Constraints}).
> +Accesses from basic asms are not supported.
>  @end itemize
>  
>  Note that these points @emph{only} apply to code that is compiled with the
> @@ -9595,7 +9605,10 @@ the comparison function unless the @code{qsort} 
> function itself is rebuilt.
>  Similarly, it is not safe to access the global register variables from signal
>  handlers or from more than one thread of control. Unless you recompile 
>  them specially for the task at hand, the system library routines may 
> -temporarily use the register for other things.
> +temporarily use the register for other things.  Furthermore, since the 
> register
> +is not reserved exclusively for the variable, accessing it from handlers of
> +asynchronous signals may observe unrelated temporary values residing in the
> +register.
>  
>  @cindex register variable after @code{longjmp}
>  @cindex global register after @code{longjmp}
> @@ -9610,10 +9623,6 @@ should make other arrangements to save the values of 
> the global register
>  variables, and to restore them in a @code{longjmp}. This way, the same
>  thing happens regardless of what @code{longjmp} does.
>  
> -Eventually there may be a way of asking the compiler to choose a register 
> -automatically, but first we need to figure out how it should choose and 
> -how to enable you to guide the choice.  No solution is evident.
> -
>  @node Local Register Variables
>  @subsubsection Specifying Registers for Local Variables
>  @anchor{Local Reg Vars}
> 

Reply via email to