GCC 是否生成位测试 (x86 BT)?

GCC 是否生成位测试 (x86 BT)?

搜索 GCC 源代码,我看到类似的东西

我的目标是为自己找到答案,无论 GCC 是否生成BTBTSBTRBTC。我开始BT并找到了上面的东西,但我找不到它们在哪里使用。 GCC 是否生成BT指令?

从这个错误报告来看,既然解决了,现在就解决了但是这个指令在哪里显示呢?

答案1

这些常量在 i386 机器定义文件中使用,gcc/config/i386/i386.md;核心指令本身定义在这里,并且还定义了许多组合,例如这个ANDBTR

要了解如何使用机器定义,请参阅相应的手册概述给出以下总结:

编译器中发生三种主要转换:

  1. 前端读取源代码并构建解析树。
  2. 解析树用于根据命名指令模式生成 RTL insn 列表。
  3. insn 列表与 RTL 模板进行匹配以生成汇编代码。

指令定义既用于在第二次转换中生成 RTL 指令,又用于在第三次转换中生成结果汇编代码。

要查看正在运行的 BT 指令:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv) {
  if (argc > 2) {
    int x = atoi(argv[1]);
    int n = atoi(argv[2]);
    if (x & (1 << n)) {
      printf("Set");
    }
  }
}

使用-O2,这会btl为我生成一个 GCC 7.3.1。

相关内容