GCCはビットテスト(x86 BT)を生成しますか?

GCCはビットテスト(x86 BT)を生成しますか?

GCCソースコードを検索すると、次のようなものが表示されます。

BT私の目標は、GCCが、、をBTS生成BTRするかどうかに関係なく、自分で答えを見つけることですBTC。上記の項目を起動しBTて見つけましたが、その項目がどこで使用されているかがわかりません。 GCCは命令を生成しますかBT

このバグレポートから今解決しました。しかし、このコマンドはどこに表示されますか?

答え1

この定数はi386マシン定義ファイルで使用されますgcc/config/i386/i386.mdコアディレクティブ自体はここで定義されています。また、次のようなさまざまな組み合わせを定義します。これANDBTR

機械定義の使用方法については、以下を参照してください。該当するマニュアル概要次の要約を提供します。

コンパイラでは、3 つの主要な変換が発生します。

  1. フロントエンドはソースコードを読み取り、解析ツリーを構築します。
  2. 解析ツリーは、名前付き命令パターンに基づいてRTL insnリストを生成するために使用されます。
  3. 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");
    }
  }
}

を使用すると、-O2GCC btl7.3.1が生成されます。

関連情報