]> git.baikalelectronics.ru Git - kernel.git/commit
compiler-types.h: add asm_inline definition
authorRasmus Villemoes <linux@rasmusvillemoes.dk>
Thu, 12 Sep 2019 22:19:25 +0000 (00:19 +0200)
committerMiguel Ojeda <miguel.ojeda.sandonis@gmail.com>
Sun, 15 Sep 2019 18:14:15 +0000 (20:14 +0200)
commit192ad4ddce9b3d0a3a1bcf4eec5c22ecaaef8be9
tree318b0dbee699f3c007fc0a3c6fce072a103f45d1
parent8f9e49778fdcf9cc60cdf82488008d070179fe1f
compiler-types.h: add asm_inline definition

This adds an asm_inline macro which expands to "asm inline" [1] when
the compiler supports it. This is currently gcc 9.1+, gcc 8.3
and (once released) gcc 7.5 [2]. It expands to just "asm" for other
compilers.

Using asm inline("foo") instead of asm("foo") overrules gcc's
heuristic estimate of the size of the code represented by the asm()
statement, and makes gcc use the minimum possible size instead. That
can in turn affect gcc's inlining decisions.

I wasn't sure whether to make this a function-like macro or not - this
way, it can be combined with volatile as

  asm_inline volatile()

but perhaps we'd prefer to spell that

  asm_inline_volatile()

anyway.

The Kconfig logic is taken from an RFC patch by Masahiro Yamada [3].

[1] Technically, asm __inline, since both inline and __inline__
are macros that attach various attributes, making gcc barf if one
literally does "asm inline()". However, the third spelling __inline is
available for referring to the bare keyword.

[2] https://lore.kernel.org/lkml/20190907001411.GG9749@gate.crashing.org/

[3] https://lore.kernel.org/lkml/1544695154-15250-1-git-send-email-yamada.masahiro@socionext.com/

Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Signed-off-by: Miguel Ojeda <miguel.ojeda.sandonis@gmail.com>
include/linux/compiler_types.h
init/Kconfig