Commit 0a53bd6d by David Wohlferd Committed by Sandra Loosemore

extend.texi (Asm Labels): Break out text for data vs functions.

2015-09-28  David Wohlferd  <dw@LimeGreenSocks.com>

         * doc/extend.texi (Asm Labels): Break out text for data vs
	 functions.

From-SVN: r228212
parent 2876a13f
2015-09-28 David Wohlferd <dw@LimeGreenSocks.com>
* doc/extend.texi (Asm Labels): Break out text for data vs
functions.
2015-09-28 Jiong Wang <jiong.wang@arm.com> 2015-09-28 Jiong Wang <jiong.wang@arm.com>
Revert: Revert:
...@@ -8367,7 +8367,13 @@ asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)"); ...@@ -8367,7 +8367,13 @@ asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)");
You can specify the name to be used in the assembler code for a C You can specify the name to be used in the assembler code for a C
function or variable by writing the @code{asm} (or @code{__asm__}) function or variable by writing the @code{asm} (or @code{__asm__})
keyword after the declarator as follows: keyword after the declarator.
It is up to you to make sure that the assembler names you choose do not
conflict with any other assembler symbols, or reference registers.
@subsubheading Assembler names for data:
This sample shows how to specify the assembler name for data:
@smallexample @smallexample
int foo asm ("myfoo") = 2; int foo asm ("myfoo") = 2;
...@@ -8379,33 +8385,30 @@ the assembler code should be @samp{myfoo} rather than the usual ...@@ -8379,33 +8385,30 @@ the assembler code should be @samp{myfoo} rather than the usual
@samp{_foo}. @samp{_foo}.
On systems where an underscore is normally prepended to the name of a C On systems where an underscore is normally prepended to the name of a C
function or variable, this feature allows you to define names for the variable, this feature allows you to define names for the
linker that do not start with an underscore. linker that do not start with an underscore.
It does not make sense to use this feature with a non-static local GCC does not support using this feature with a non-static local variable
variable since such variables do not have assembler names. If you are since such variables do not have assembler names. If you are
trying to put the variable in a particular register, see @ref{Explicit trying to put the variable in a particular register, see
Reg Vars}. GCC presently accepts such code with a warning, but will @ref{Explicit Reg Vars}.
probably be changed to issue an error, rather than a warning, in the
future.
You cannot use @code{asm} in this way in a function @emph{definition}; but @subsubheading Assembler names for functions:
you can get the same effect by writing a declaration for the function
before its definition and putting @code{asm} there, like this:
@smallexample To specify the assembler name for functions, write a declaration for the
extern func () asm ("FUNC"); function before its definition and put @code{asm} there, like this:
func (x, y) @smallexample
int x, y; int func (int x, int y) asm ("MYFUNC");
/* @r{@dots{}} */
int func (int x, int y)
@{
/* @r{@dots{}} */
@end smallexample @end smallexample
It is up to you to make sure that the assembler names you choose do not @noindent
conflict with any other assembler symbols. Also, you must not use a This specifies that the name to be used for the function @code{func} in
register name; that would produce completely invalid assembler code. GCC the assembler code should be @code{MYFUNC}.
does not as yet have the ability to store static variables in registers.
Perhaps that will be added.
@node Explicit Reg Vars @node Explicit Reg Vars
@subsection Variables in Specified Registers @subsection Variables in Specified Registers
......
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