Commit 4cc03514 by Alexander Monakov Committed by Alexander Monakov

doc: discourage const/volatile on register variables (PR 86673)

	PR target/86673
	* doc/extend.texi (Global Register Variables): Discourage use of type
	qualifiers.
	(Local Register Variables): Likewise.

From-SVN: r263065
parent 1dcadcf0
2018-07-30 Alexander Monakov <amonakov@ispras.ru>
PR target/86673
* doc/extend.texi (Global Register Variables): Discourage use of type
qualifiers.
(Local Register Variables): Likewise.
2018-07-30 Richard Sandiford <richard.sandiford@arm.com> 2018-07-30 Richard Sandiford <richard.sandiford@arm.com>
PR tree-optimization/86506 PR tree-optimization/86506
......
...@@ -9591,6 +9591,11 @@ a global variable the declaration appears outside a function. The ...@@ -9591,6 +9591,11 @@ a global variable the declaration appears outside a function. The
@code{static}. The register name must be a valid register name for the @code{static}. The register name must be a valid register name for the
target platform. target platform.
Do not use type qualifiers such as @code{const} and @code{volatile}, as
the outcome may be contrary to expectations. In particular, using the
@code{volatile} qualifier does not fully prevent the compiler from
optimizing accesses to the register.
Registers are a scarce resource on most systems and allowing the Registers are a scarce resource on most systems and allowing the
compiler to manage their usage usually results in the best code. However, compiler to manage their usage usually results in the best code. However,
under special circumstances it can make sense to reserve some globally. under special circumstances it can make sense to reserve some globally.
...@@ -9698,6 +9703,12 @@ but for a local variable the declaration appears within a function. The ...@@ -9698,6 +9703,12 @@ but for a local variable the declaration appears within a function. The
@code{static}. The register name must be a valid register name for the @code{static}. The register name must be a valid register name for the
target platform. target platform.
Do not use type qualifiers such as @code{const} and @code{volatile}, as
the outcome may be contrary to expectations. In particular, when the
@code{const} qualifier is used, the compiler may substitute the
variable with its initializer in @code{asm} statements, which may cause
the corresponding operand to appear in a different register.
As with global register variables, it is recommended that you choose As with global register variables, it is recommended that you choose
a register that is normally saved and restored by function calls on your a register that is normally saved and restored by function calls on your
machine, so that calls to library routines will not clobber it. machine, so that calls to library routines will not clobber it.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment