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