asm¶
asm
キーワードは、インラインアセンブリを挿入するために使用できます。これは、ファイバスイッチングやシステムコールなど、ごく少数の機能に必要なものです。
# x86-64 targets only
dst = 0
asm("mov $$1234, $0" : "=r"(dst))
dst # => 1234
asm
式は、最大5つのコロンで区切られたセクションで構成され、各セクション内のコンポーネントはコンマで区切られます。例:
asm(
# the assembly template string, following the
# syntax for LLVM's integrated assembler
"nop" :
# output operands
"=r"(foo), "=r"(bar) :
# input operands
"r"(1), "r"(baz) :
# names of clobbered registers
"eax", "memory" :
# optional flags, corresponding to the LLVM IR
# sideeffect / alignstack / inteldialect / unwind attributes
"volatile", "alignstack", "intel", "unwind"
)
テンプレート文字列のみが必須であり、他のすべてのセクションは空にするか、省略できます。
asm("nop")
asm("nop" :: "b"(1), "c"(2)) # output operands are empty
詳細については、LLVMドキュメントのインラインアセンブラ式に関するセクションを参照してください。