GCCソースコードを検索すると、次のようなものが表示されます。
BT
私の目標は、GCCが、、をBTS
生成BTR
するかどうかに関係なく、自分で答えを見つけることですBTC
。上記の項目を起動しBT
て見つけましたが、その項目がどこで使用されているかがわかりません。 GCCは命令を生成しますかBT
?
このバグレポートから今解決しました。しかし、このコマンドはどこに表示されますか?
答え1
この定数はi386マシン定義ファイルで使用されますgcc/config/i386/i386.md
。コアディレクティブ自体はここで定義されています。また、次のようなさまざまな組み合わせを定義します。これAND
BTR
。
機械定義の使用方法については、以下を参照してください。該当するマニュアル。概要次の要約を提供します。
コンパイラでは、3 つの主要な変換が発生します。
- フロントエンドはソースコードを読み取り、解析ツリーを構築します。
- 解析ツリーは、名前付き命令パターンに基づいてRTL insnリストを生成するために使用されます。
- insn リストは、RTL テンプレートと一致してアセンブリコードを生成します。
命令定義は、2番目の変換でRTL命令を生成し、3番目の変換で結果のアセンブリコードを生成するために使用されます。
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
GCC btl
7.3.1が生成されます。