搜索 GCC 源代码,我看到类似的东西
我的目标是为自己找到答案,无论 GCC 是否生成BT
、BTS
、BTR
和BTC
。我开始BT
并找到了上面的东西,但我找不到它们在哪里使用。 GCC 是否生成BT
指令?
从这个错误报告来看,既然解决了,现在就解决了但是这个指令在哪里显示呢?
答案1
这些常量在 i386 机器定义文件中使用,gcc/config/i386/i386.md
;核心指令本身定义在这里,并且还定义了许多组合,例如这个AND
BTR
。
要了解如何使用机器定义,请参阅相应的手册。概述给出以下总结:
编译器中发生三种主要转换:
- 前端读取源代码并构建解析树。
- 解析树用于根据命名指令模式生成 RTL insn 列表。
- 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。