你能在 Clang 编译的 C 语言中内联 LLVM 位代码吗?

标签 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
   */
}

任何引用或代码来完成上面的示例都很棒。

最佳答案

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 { } 语法和 intel 样式汇编提供实验性支持。

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

关于你能在 Clang 编译的 C 语言中内联 LLVM 位代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15388428/

相关文章:

c - recvmmsg() 不填充 msghdr.msg_namelen?

c++ - 任何基于 libclang 的 C/C++ 重构工具? (甚至最简单的 "toy example")

c++ - LLVM (3.5+) PassManager 与 LegacyPassManager

c - 使用 SSE 将 vector 乘以常数

编译器不会警告 C 数据或精度丢失

c - 在多个源文件中声明一个变量

c - 定时器比较匹配的 ISR 未运行

c - 没有 PThread 的同步

c++ - 将常量整数转换为值* LLVM

xcode - macOS 'wchar.h' 找不到文件