x86-64.net について
一次資料をもとに作成し、オープンデータとして公開している、x86-64 アーキテクチャーの独立したリファレンスです。
x86-64.net は、x86-64 マイクロアーキテクチャーレベルを説明し、どのプロセッサーがどのレベルに達するかを一覧にし、マシンのレベルを確認する方法を示します。Intel、AMD、Hygon、Zhaoxin とも、どのオペレーティングシステムのベンダーとも提携していません。製品名は各所有者の商標です。
データの出所
- レベルの定義
- レベルを定義している x86-64 psABI です。
- マイクロアーキテクチャーの機能セット
- 特定のコミットに固定した GCC の
-marchの定義です。ベンダー自身のコンパイラーエンジニアが保守しており、-march=<cpu>が実際に有効にする内容そのものです。GCC に個別の-marchがない場合 (Penryn、Kaby Lake、Zen+ など) は、どれが当てはまるかをエントリに記しています。どの-marchも有効にしない AMD の RDPRU、MCOMMIT、INVLPGB、SEV-SNP は、各プロセッサーの CPUID ビットを示す AMD の Processor Programming Reference から取っており、各エントリは根拠とした文書を挙げています。エントリが GCC ではなく Intel 自身の表に従う場合 (Westmere から Broadwell までの AES-NI) は、その注記にそう書いています。 - CPUID ビットと Linux のフラグ名
- Linux カーネルの
cpufeatures.hです。AVX10 と APX は GCC のcpuid.hに従います。 - マイクロアーキテクチャーと異なるモデル
- 例外として記録し、それぞれに個別の出典を付けています。
- オペレーティングシステムとソフトウェアの要件
- ベンダー自身の表明があれば必ずそれを使い、最後に確認した日付を付けています。
- 命令形式、エンコーディング、オペランド、フラグ、CPUID ビット、プロセッサーの一覧
- Intel が Apache License 2.0 のもとで公開しているエンコーダーとデコーダーのライブラリ Intel XED を、特定のリリースに固定して使っています (後述)。Zen 2 より後の AMD のプロセッサーは、上記の機能セットから取っています。これらのページの要約と説明は独自に書いたもので、各ページが出典に挙げる Intel のマニュアルと仕様に照らして確認しています。
- C の組み込み関数
- LLVM Project の一部で Apache License 2.0 with LLVM Exceptions のもとでライセンスされている、Clang の x86 用組み込み関数ヘッダーを、特定のリリースに固定して使っています (後述)。各組み込み関数をそのリリースの Clang でコンパイルし、コンパイル結果の命令を確認しています。
各エントリは、そのページに出典を挙げています。レベルを手で入力することはありません。1 つの実装が機能セットからレベルを計算し、テストがすべてのマイクロアーキテクチャーについてその結果を固定しているため、答えを変えるようなデータの変更が気付かれずに済むことはありません。
命令リファレンス
命令と拡張のページは、Intel XED v2026.08.23 (コミット 0bcb6237345c) から生成しています。XED はソースコードからビルドし、その表は XED 自身のツールで書き出します。このサイトのビルドは、それを次のようにページ上の表に変換します。
- ニーモニックの各形式が 1 行になり、構文とエンコーディングは Intel のマニュアルの表記で書かれます。
- 各形式が読み書きするもの、テストし変更するフラグ、例外クラス、XED の属性の一部は表の後に続き、それぞれ、それを共有するすべての形式についてまとめて一度だけ示します。Intel の文書がフラグを別のように記述している場合は、フラグの表の下の注記でその違いを示し、表は XED のデータのままにします。
- XED にある、LOCK または REP プレフィックスを付けた命令のバリアントは、その命令のページに載せます。条件コードだけが異なる命令は 1 つのページを共有します。
- プロセッサーの一覧は XED のチップモデルに従います。このモデルは、Intel のプロセッサーを Nova Lake と Diamond Rapids まで、AMD のプロセッサーを Zen 2 までカバーしています。AMD の Zen 3 から Zen 6 までは、このサイトの CPU データに従います。それらの機能で決まる ISA セット (GCC の
-marchのセットと AMD の Processor Programming Reference) は機能に従い、残り (基本命令セットを含む) は XED の Zen 2 と AMD のリファレンスから取ります。XED のモデルが CPU データと食い違う場合、あるマイクロアーキテクチャーのうち EPYC プロセッサーだけが ISA セットを持つ場合、そして 1 つ前のプロセッサーがそのセットを持つために発表済みのプロセッサーを載せている場合は、ページにそう書いています。 - XED の事実のいくつかは、ベンダーのマニュアルが異なることを述べている場合に修正しています。一部の形式は、必要とする CPUID ビットを持つ ISA セットに移します (SSE が追加した MMX レジスターの形式)。XED に欠けている CPUID ビットを ISA セットに与えます (x87 と AMD の拡張の大半)。また、XED の AMD のチップから VMX と SMX を外し、それらを挙げるページに注記を付けます。
XED の著作権は Intel Corporation にあり、Apache License 2.0 のもとでライセンスされています。その条項は XED から派生した表に適用されます。ページの文章は独自のもので、CC BY 4.0 のもとでライセンスしています。
命令のページと A から Z の索引にある組み込み関数は、Clang 23.1.2 (コミット 85ac56026243) の x86 ヘッダーから取っています。各組み込み関数をその Clang でコンパイルしてマシンコードを XED でデコードし、それによって単一の命令になること、そしてドキュメントコメントが命令を挙げている場合はその命令になることが確認できたものだけを載せています。方法は索引のページで説明しています。ヘッダーは LLVM Project の一部で、Apache License 2.0 with LLVM Exceptions のもとでライセンスされています。組み込み関数の一覧とそのシグネチャはヘッダーから派生したものです。Intel の Intrinsics Guide は使っていません。Intel の命令セットマニュアルからは何も複写していません。その利用条件が複写を認めていないためで、すべての文を独自の言葉で書いています。その代わりに、マニュアルが命令を説明している場合は、命令のページから、マニュアルのその説明が始まるページへリンクしています。
データの再利用
完全なデータセット (機能、レベル、マイクロアーキテクチャー、例外、要件、出典) は x86.json としてダウンロードできます。
命令データセット
命令リファレンスは insn.json (4.9 MB) としてダウンロードできます。次のメンバーを持つ 1 つの JSON オブジェクトです。
extensions: 各拡張の ID、名前、グループ、要約、ISA セット、ニーモニックと、そのページの URL です。mnemonics: 各ニーモニックの ID、名前、要約、別の表記、拡張、XED の命令クラスです。加えて、その形式 (構文、XED の iform、リファレンスの表記によるエンコーディング、エンコーディング空間、ISA セット、タグと、XED が各形式について記録している後述の内容) と、そのニーモニックにコンパイルされる Clang の組み込み関数 (シグネチャと、形式ごとの iform および必要な Clang のオプション) を含みます。isa_sets: XED の各 ISA セットについて、必要な CPUID ビット (選択肢のリストで、各選択肢のビットはすべて立っている必要があります) と、そのセットを持つプロセッサーです。プロセッサーの名前はchipsにあり、XED のチップ (sourceがxed) と、CPU データから取った Zen 2 より後の AMD のプロセッサー (cpu-data) からなります。leaves: GETSEC、ENCLS、ENCLU のリーフです。それぞれを選択する命令、レジスター、番号と、その CPUID ビットを含みます。groups、sources、license、notice、schema、updated: 拡張のグループ、データの元になった XED と LLVM のリリース、データに適用される条項、データの複製に付けなければならない帰属表示、形式のバージョン 1 (メンバーの意味が変わるか、メンバーがなくなると変わります)、最も新しいページの日付です。name、url、documentation: データセットの名前、リファレンスのページ、この説明です。
XED が形式について記録している内容は、形式の次のメンバーにあります。
operands: 構文のオペランドを順に、それぞれの名前と、その形式がオペランドに対して行う動作で["r8", "rcw"]のように示します。{k}はその前のオペランドに適用するマスクレジスターです。implicit: CMPXCHG のAL、RFLAGS、スタックなど、構文が省略しているオペランドです。これも名前と動作で示し、APX の形式がその設定のときだけオペランドを使う場合は"NF=0"が加わります。flags: 形式がテストまたは書き込むフラグを、ケースのリストとして示します。各ケースは、各フラグをコードに対応付けるflagsを持ち、そのケースがシフトカウント、APX の NF 設定、または CMOVcc のように複数の条件をまとめたページではそのうちの 1 つにだけ当てはまる場合は、whenも持ちます。mayは、CL によるシフトのように、一部の場合にだけフラグを書き込むケースを示します。exceptions: 例外クラス、つまりSSE_TYPE_2のように XED がその形式に与える例外条件のセットです。ない場合は null です。attributes:LOCKABLEやMXCSRなど、ページに示す XED の属性です。RING0は CPL 0 を必要とする形式を示します。tuple: 埋め込みブロードキャストを持つ形式にだけあり、メモリオペランドの XED のタプルタイプFULL、HALF、QUARTERを示します。
動作は XED のものです。r は読み取り、w は書き込み、rw はその両方、rcw は読み取りと条件付き書き込み、cw は条件付き書き込み、cr は条件付き読み取り、crw は条件付き読み取りと常に行う書き込みです。push、pop、pop2 は x87 のレジスタースタックにプッシュまたはポップし、addr は LEA のようにアドレスだけが使われるオペランドです。フラグのコードは、T がテスト、M が変更、0 がクリア、1 がセット、U が未定義、P がスタックからのロード、A が AH からのロードで、TM はテストの後に変更です。
要約は、サイトのほかの部分と同様に CC BY 4.0 です。形式、エンコーディング、オペランド、フラグ、例外クラス、属性、ISA セット、CPUID ビット、チップは Intel XED から派生したもので、その Apache License 2.0 に従います。また、Clang のヘッダーから派生した組み込み関数は Apache License 2.0 with LLVM Exceptions に従います。ファイルにはそれらの表示 (notice) が含まれており、隣にある insn-NOTICE.txt にも同じものがあります。
このサイトの文章とデータは CC BY 4.0 のもとでライセンスしています。x86-64.net へのリンクを付けてクレジットを表示する限り、商用を含めて複製や改変ができます。x86-64-level スクリプトなどのコードは MIT ライセンスです。フォントは Inter と Fira Mono で、SIL Open Font License のもとで提供されています。
プライバシー
このサイトは Cookie を設定せず、アクセス解析、広告、サードパーティへのリクエストもありません。フォント、スクリプト、検索インデックスはすべて x86-64.net から配信しています。テーマの選択と、コンパイル結果のリストがあるページでのアセンブリ構文の選択は、ブラウザーのローカルストレージに保存されます。検索はすべてブラウザーの中で実行されます。