你可以在Clang编译的C中内联LLVM bitcode吗?

时间:2013-03-13 14:42:06

标签: c llvm clang

我很羡慕能够将inline assembler放入GCC编译的代码中,我想知道你是否可以和Clang做类似的事情?例如,我可以通过某种方式使用LLVM assembler来完成函数的定义:

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

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

1 个答案:

答案 0 :(得分:0)

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还拥有微软__asm { }语法和英特尔风格汇编的实验性支持。

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