6.37. Controlling Names Used in Assembler Code
You can specify the name to be used in the assembler code for a C
function or variable by writing the asm (or __asm__)
keyword after the declarator as follows:
int foo asm ("myfoo") = 2; |
This specifies that the name to be used for the variable foo in
the assembler code should be myfoo rather than the usual
_foo.
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
linker that do not start with an underscore.
It does not make sense to use this feature with a non-static local
variable since such variables do not have assembler names. If you are
trying to put the variable in a particular register, see Section 6.38 Variables in Specified Registers. GCC presently accepts such code with a warning, but will
probably be changed to issue an error, rather than a warning, in the
future.
You cannot use asm in this way in a function definition; but
you can get the same effect by writing a declaration for the function
before its definition and putting asm there, like this:
extern func () asm ("FUNC");
func (x, y)
int x, y;
/* … */ |
It is up to you to make sure that the assembler names you choose do not
conflict with any other assembler symbols. Also, you must not use a
register name; that would produce completely invalid assembler code. GCC
does not as yet have the ability to store static variables in registers.
Perhaps that will be added.