跳至内容

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 文档中关于内联汇编表达式的部分.