3

我很羡慕将内联汇编器放入 GCC 编译的代码中的能力,我想知道你是否可以用 Clang 做类似的事情?例如,有什么方法可以用LLVM 汇编器完成函数的定义:

int add_two_ints(int a, int b) {
  /* 
   * some bitcode stuff goes here to add
   * the ints and return the result
   */
}

完成上述示例的任何参考资料或代码都会很棒。

4

1 回答 1

3

clang 支持内联汇编,包括 GCC 的扩展,您可以在其中声明输入、输出和破坏寄存器:

int add_two_ints(int a, int b) {
   int result;
   asm( "addl %1, %2;"
        "movl %2, %0;"
        : "=r"(result)
        : "r"(a), "r"(b)
        :);
   return result;
}

Clang 还对 Microsoft 的__asm { }语法和英特尔风格的程序集提供实验性支持。

它不支持在 C 或 C++ 源代码中包含 LLVM-IR。这样的功能在很大程度上只是一种新颖性,因为内联汇编通常用于访问特殊指令,而 LLVM-IR 不能实现这一点。

于 2013-03-18T22:09:01.870 回答