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.
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 the following example's declaration shows.
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. GNU CC does not as yet have the ability to store
static variables in registers.