Messages in this thread | | | Date | Tue, 20 Mar 2012 13:46:00 -0700 | From | Randy Dunlap <> | Subject | Re: [PATCH] Documentation/CodingStyle: Add guidelines for inline assembly |
| |
On 02/02/2012 02:33 PM, Josh Triplett wrote:
> Signed-off-by: Josh Triplett <josh@joshtriplett.org>
Applied. Thanks.
> --- > Documentation/CodingStyle | 29 +++++++++++++++++++++++++++++ > 1 files changed, 29 insertions(+), 0 deletions(-) > > diff --git a/Documentation/CodingStyle b/Documentation/CodingStyle > index 2b90d32..c58b236 100644 > --- a/Documentation/CodingStyle > +++ b/Documentation/CodingStyle > @@ -793,6 +793,35 @@ own custom mode, or may have some other magic method for making indentation > work correctly. > > > + Chapter 19: Inline assembly > + > +In architecture-specific code, you may need to use inline assembly to interface > +with CPU or platform functionality. Don't hesitate to do so when necessary. > +However, don't use inline assembly gratuitously when C can do the job. You can > +and should poke hardware from C when possible. > + > +Consider writing simple helper functions that wrap common bits of inline > +assembly, rather than repeatedly writing them with slight variations. Remember > +that inline assembly can use C parameters. > + > +Large, non-trivial assembly functions should go in .S files, with corresponding > +C prototypes defined in C header files. The C prototypes for assembly > +functions should use "asmlinkage". > + > +You may need to mark your asm statement as volatile, to prevent GCC from > +removing it if GCC doesn't notice any side effects. You don't always need to > +do so, though, and doing so unnecessarily can limit optimization. > + > +When writing a single inline assembly statement containing multiple > +instructions, put each instruction on a separate line in a separate quoted > +string, and end each string except the last with \n\t to properly indent the > +next instruction in the assembly output: > + > + asm ("magic %reg1, #42\n\t" > + "more_magic %reg2, %reg3" > + : /* outputs */ : /* inputs */ : /* clobbers */); > + > + > > Appendix I: References >
-- ~Randy
| |