diff options
author | Josh Triplett <josh@joshtriplett.org> | 2012-03-30 16:37:10 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-03-30 19:03:15 -0400 |
commit | 9a7c48b7c3d58835b3a91d86c55e0ae77d15ddd5 (patch) | |
tree | 9a7728d24c9721d7e9e5458b7f76d565265fa9ae /Documentation/CodingStyle | |
parent | 21106b0114f75cff199d6834f676877c3edae928 (diff) |
Documentation: CodingStyle: add inline assembly guidelines
Signed-off-by: Josh Triplett <josh@joshtriplett.org>
Signed-off-by: Randy Dunlap <rdunlap@xenotime.net>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'Documentation/CodingStyle')
-rw-r--r-- | Documentation/CodingStyle | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/Documentation/CodingStyle b/Documentation/CodingStyle index 2b90d328b3ba..c58b236bbe04 100644 --- a/Documentation/CodingStyle +++ b/Documentation/CodingStyle | |||
@@ -793,6 +793,35 @@ own custom mode, or may have some other magic method for making indentation | |||
793 | work correctly. | 793 | work correctly. |
794 | 794 | ||
795 | 795 | ||
796 | Chapter 19: Inline assembly | ||
797 | |||
798 | In architecture-specific code, you may need to use inline assembly to interface | ||
799 | with CPU or platform functionality. Don't hesitate to do so when necessary. | ||
800 | However, don't use inline assembly gratuitously when C can do the job. You can | ||
801 | and should poke hardware from C when possible. | ||
802 | |||
803 | Consider writing simple helper functions that wrap common bits of inline | ||
804 | assembly, rather than repeatedly writing them with slight variations. Remember | ||
805 | that inline assembly can use C parameters. | ||
806 | |||
807 | Large, non-trivial assembly functions should go in .S files, with corresponding | ||
808 | C prototypes defined in C header files. The C prototypes for assembly | ||
809 | functions should use "asmlinkage". | ||
810 | |||
811 | You may need to mark your asm statement as volatile, to prevent GCC from | ||
812 | removing it if GCC doesn't notice any side effects. You don't always need to | ||
813 | do so, though, and doing so unnecessarily can limit optimization. | ||
814 | |||
815 | When writing a single inline assembly statement containing multiple | ||
816 | instructions, put each instruction on a separate line in a separate quoted | ||
817 | string, and end each string except the last with \n\t to properly indent the | ||
818 | next instruction in the assembly output: | ||
819 | |||
820 | asm ("magic %reg1, #42\n\t" | ||
821 | "more_magic %reg2, %reg3" | ||
822 | : /* outputs */ : /* inputs */ : /* clobbers */); | ||
823 | |||
824 | |||
796 | 825 | ||
797 | Appendix I: References | 826 | Appendix I: References |
798 | 827 | ||