David Brown <da...@westcontrol.com> writes:
> Personally, I've used "naked" when I want to write pure assembly code
> and don't want extra stack frames or "return" codes.  I don't want to
> write stand-alone assembly files (I've written mountains of them in the
> past, and hope they stay in the past).  I am happier using the very nice
> flexible gcc inline assembly syntax.

The full inline asm syntax, such as:

   asm ("..." : "=r" (result) : "i" (100))

is specifically forbidden in naked functions, because in general GCC can
only satisfy the constraints by building its own frame:

  Use this attribute on the ARM, AVR, MCORE, RX and SPU ports to indicate that
  the specified function does not need prologue/epilogue sequences generated by
  the compiler.  It is up to the programmer to provide these sequences. The
  only statements that can be safely included in naked functions are
  @code{asm} statements _that do not have operands_.  All other statements,
  including declarations of local variables, @code{if} statements, and so
  forth, should be avoided.

(my emphasis).  Naked functions must have a body of the form:

{
  asm ("....");
}

i.e. an asm with just a plain string, and no other statements or
local variables.  So you don't really get any more flexibility
by using inline asms over using assembly files.

Thanks,
Richard

Reply via email to