x86-64


X86-64

「AMD64」と「Intel64」はItaniumチップのIntel64ビットアーキテクチャについては、IA-64を参照してください 「x64」はニューヨーク市のバス路線については、X64(ニューヨーク市のバス)を参照してくださいx86-64(x64、x86_64、AMD64、およびIntel 64とも呼ばれます)は、1999年に最初にリリースされたx86命令セットの64ビットバージョンです。64ビットモードという2つの新しい動作モードが導入されました。互換性モードと、新しい4レベルのページングモード。
AMD Opteron、2003年にx86-64拡張機能を導入した最初のCPU
2002年にAMDによって発行および配布され
たx86-64アーキテクチャプログラマーズガイドの5巻セット
64ビットモードと新しいページングモードでは、32ビットの以前のモードよりもはるかに大量の仮想メモリと物理メモリをサポートし、プログラムが大量のデータをメモリに格納できるようにします。x86-64はまた、汎用レジスターを64ビットに拡張し、それらの数を8(スタック管理などの機能が制限または固定されているものもある)から16(完全に一般的)に拡張し、他の多くの拡張機能を提供します。浮動小数点演算は必須のSSE2のような命令を介してサポートされ、x87 / MMXスタイルのレジスタは通常使用されません(ただし、64ビットモードでも使用できます)。代わりに、それぞれ128ビットの16個のベクトルレジスタのセットが使用されます。(各レジスタは、1つまたは2つの倍精度数、1つから4つの単精度数、またはさまざまな整数形式を格納できます。)64ビットモードでは、64ビットオペランドと64ビットアドレス指定モードをサポートするように命令が変更されます。
アーキテクチャで定義されている互換モードにより、16ビットおよび32ビットのユーザーアプリケーションを変更せずに実行でき、64ビットオペレーティングシステムでサポートされている場合は64ビットアプリケーションと共存できます。 フルx86の16ビットおよび32ビットの命令セットは、任意の介在エミュレーションなしにハードウェアで実装されたままのように、これらの古い実行可能ファイルは、ほとんど又は全く性能ペナルティを使用して実行することができる一方、新しいまたは変更されたアプリケーションができプロセッサ設計の新機能を利用して、パフォーマンスを向上させます。また、プロテクトモードをサポートするx86プロセッサが80286以降に行ったように、x86-64をサポートするプロセッサは、8086との完全な下位互換性のためにリアルモードでパワーオンします。
AMDによって作成され、2000年にリリースされた元の仕様は、AMD、Intel、およびVIAによって実装されています。AMD K8の マイクロアーキテクチャは、中のOpteronとAthlon 64個のプロセッサプロセッサ、それを実装した最初の。これは、Intel以外の会社によって設計されたx86アーキテクチャへの最初の重要な追加でした。Intelはそれに追随することを余儀なくされ、AMDの仕様とソフトウェア互換性のある修正されたNetBurstファミリを導入しました。VIA Technologies社はと、自分のVIAイザヤアーキテクチャでのx86-64を導入VIAナノ。
x86-64アーキテクチャは、Intel Itaniumアーキテクチャ(以前のIA-64)とは異なります。アーキテクチャはネイティブの命令セットレベルでは互換性がなく、一方用にコンパイルされたオペレーティングシステムとアプリケーションをもう一方で実行することはできません。
コンテンツ 1 AMD64 1.1 歴史
1.2 実装
1.3 アーキテクチャの特徴
1.4 仮想アドレス空間の詳細
1.4.1 標準形アドレス
1.4.2 ページテーブルの構造
1.4.3 オペレーティングシステムの制限
1.5 物理アドレス空間の詳細
1.6 動作モード
1.6.1 ロングモード
1.6.2 レガシーモード
1.6.3 リアルモード
2 Intel 64
2.1 歴史
2.2 実装
3 VIAのx86-64実装
4 マイクロアーキテクチャレベル
5 AMD64とIntel64の違い
5.1 最近の実装
5.2 古い実装
6 可決
7 オペレーティングシステムの互換性と特性
7.1 BSD
7.1.1 DragonFly BSD
7.1.2 FreeBSD
7.1.3 NetBSD
7.1.4 OpenBSD
7.2 DOS .3 Linux 7.4 マックOS .5 Solaris 7.6 ウィンドウズ
8 ビデオゲーム機
9 業界の命名規則
10 ライセンス
11 も参照してください
12 ノート
13 参考文献
14 外部リンク

AMD64
image"
  AMD64ロゴ

歴史
AMD64は、IntelとHewlett-Packardによって設計された根本的に異なるIA-64アーキテクチャの代替として作成されました。当初は1999年に発表され、完全な仕様は2000年8月に利用可能になりましたが、 AMD64アーキテクチャは、既存のx86アーキテクチャに64ビットコンピューティング機能を追加するための進化的な方法として、AMDによって最初から位置付けられていました。 IA-64を使用してまったく新しい64ビットアーキテクチャを作成するというIntelのアプローチ。
最初のAMD64ベースのプロセッサであるOpteronは、2003年4月にリリースされました。

実装
AMD64アーキテクチャを実装するAMDのプロセッサには、Opteron、Athlon 64、Athlon 64 X2、Athlon 64 FX、Athlon II(コアの数を示す「X2」、「X3」、または「X4」が続き、XLTモデル)、Turionが含まれます。 64、Turion 64 X2、Sempron(「Palermo」E6ステッピングおよびすべての「Manila」モデル)、Phenom(コアの数を示す「X3」または「X4」が続く)、Phenom II(「X2」、「 X3 “”、”” X4 “”または”” X6 “”はコアの数を示します)、FX、Fusion / APU、およびRyzen / Epyc。

アーキテクチャの特徴
AMD64の主な定義特性は、64ビットの汎用プロセッサレジスタ(raxやrbxなど)、64ビットの整数演算および論理演算、および64ビットの仮想アドレスの可用性です。設計者は、他の改善も行う機会を得ました。
最も重要な変更のいくつかは以下のとおりです。
64ビット整数機能
すべて
の汎用レジスタ(GPR)は32ビットから64ビットに拡張され 
、すべての算術および論理演算、メモリからレジスタおよびレジスタからメモリへの演算などは、64ビットの整数を直接操作できます。
スタックのプッシュとポップは
デフォルトで8バイトのストライドであり、
ポインターの幅は8バイトです。
追加のレジスタ
汎用レジスタのサイズを増やすことに加えて、名前付き汎用レジスタの数がx86の8( eax、 ecx、 edx、 ebx、 esp、 ebp、 esi、
edi)から16(つまり、
rax)に増えました。、RCX、 RDX、 RBX、 RSP、 RBP、 RSI、 RDI、 R8、 R9、 RCX、0 RCX、1 RCX、2 RCX、3 R14、 R15)。したがって、スタックではなくレジスタに多くのローカル変数を保持し、レジスタに頻繁にアクセスされる定数を保持させることができます。小さくて速いサブルーチンの引数も、レジスターでより多く渡される可能性が
AMD64のレジスタは、多くのRISC
命令セット( PA-RISC、
Power ISA、
MIPSには32 GPR、Alpha、
64ビットARM、
SPARCには31)やIA-64などのVLIWのようなマシン(IA-64など)
よりもまだ少ない 128個のレジスタがあります)。ただし、AMD64実装には、命令セットによって公開されるアーキテクチャレジスタの数よりもはるかに多くの内部レジスタが含まれる場合があります(レジスタの名前変更を参照)。(たとえば、AMD Zenコアには、168個の64ビット整数と160個の128ビットベクトル浮動小数点物理内部レジスタが)
追加のXMM(SSE)レジスタ
同様に、128ビットXMMレジスタ(ストリーミングSIMD命令に使用される)の数も8から16に増加します。
従来のx87FPUレジスタスタックは、拡張されたSSE2で使用されるXMMレジスタと比較して、64ビットモードのレジスタファイルサイズ拡張には含まれ
x87レジスタ・スタック、それは低コストの交換操作によって個々のレジスタへの直接アクセスを可能にしていますが、単純なレジスタ・ファイルではありません。
より大きな仮想アドレス空間
AMD64アーキテクチャは、64ビットの仮想アドレス形式を定義しており、現在の実装では下位48ビットが使用されています。
:120これにより、最大256 iB(2 8
バイト)の仮想アドレス空間が可能になります。アーキテクチャ定義により、将来の実装でこの制限を完全な64ビットに引き上げることができます:2 :3 :13 :117
:120仮想アドレス空間を16 EiB(2 64バイト)に拡張し  これは、x86のわずか4 GiB(2 32バイト)と比較され 
非常に大きなファイルがでで動作させることができる。この手段
マッピングするというに及び外のファイルの領域をマッピングすることよりも、(はるかに高速ファイル読み取り/書き込み呼び出しでの作業よりもしばしばある)、プロセスのアドレス空間にファイル全体をアドレス空間。
より大きな物理アドレス空間
AMD64アーキテクチャの元の実装では、40ビットの物理アドレスが実装されていた
ため、最大1 TiB(2 40バイト)のRAMをアドレス指定できました
:24 AMD64アーキテクチャの現在の実装(AMD 10hマイクロアーキテクチャから開始)は、これを48ビットの物理アドレスに拡張している
ため、最大256 TiB(2 48バイト)のRAMをアドレス指定できます
。アーキテクチャでは、これを将来52ビットに拡張できます :24 (ページテーブルエントリ形式によって制限されます)。
:131これにより、最大4PiBのRAMのアドレス指定が可能になります。比較のために、32ビットx86プロセッサは、物理アドレス拡張(PAE)モードでは64 GiBのRAM 、
またはPAEモードなしでは4GiBのRAMに制限されてい :4 レガシーモードでのより大きな物理アドレス空間
レガシーモードで
動作している場合
、AMD64アーキテクチャは
現在のほとんどのx86プロセッサと同様に物理アドレス拡張(PAE)モードをサポートしますが、AMD64はPAEを36ビットから52ビットの物理アドレスのアーキテクチャ制限に拡張します。したがって、どの実装でも、ロングモードの場合と同じ物理アドレス制限が許可され :24 命令ポインタの相対データアクセス
命令は、命令ポインタ(RIPレジスタ)に関連するデータを参照できるようになりました。これにより
、共有ライブラリでよく使用される位置に依存しないコードや、
実行時に読み込まれるコードがより効率的になります。
SSE命令
オリジナルのAMD64アーキテクチャは、コア命令としてIntelのSSEと
SSE2を採用していました
。これらの命令セットは、単精度および倍精度のデータ型に対して、スカラーx87FPUのベクトル補足を提供しSSE2は、8ビットから64ビットの精度の範囲のデータ型に対して整数ベクトル演算も提供します。これにより、アーキテクチャのベクトル機能は、当時の最も高度なx86プロセッサの機能と同等になります。これらの命令は、32ビットモードでも使用できます。64ビットプロセッサの急増により、これらのベクトル機能は家庭用コンピュータに広く普及し、32ビットアプリケーションの標準を向上させることができます。たとえば、32ビット版のWindows 8には、SSE2命令が必要です。
SSE3命令以降の
ストリーミングSIMD拡張命令セットはアーキテクチャの標準機能ではありません。
いいえ-実行ビット
No-Executeビットまたは
NXビット(ページテーブルエントリのビット63)を使用すると、オペレーティングシステムは、仮想アドレス空間のどのページに実行可能コードを含めることができ、どのページに含めることができないかを指定できます。「実行なし」とタグ付けされたページからコードを実行しようとすると、読み取り専用ページに書き込もうとした場合と同様に、メモリアクセス違反が発生します。これにより、悪意のあるコードが「バッファオーバーラン」または「チェックされていないバッファ」攻撃を介してシステムを制御することがより困難になり
ます。同様の機能は、80286以降、セグメント記述子の属性として
x86プロセッサで使用できます
。ただし、これは一度にセグメント全体でのみ機能します。
セグメント化されたアドレス指定は、長い間廃止された動作モードと見なされており、現在のすべてのPCオペレーティングシステムは事実上それをバイパスし、すべてのセグメントをゼロのベースアドレスと(32ビット実装では)4GiBのサイズに設定します。AMDは、リニアアドレッシングモードでno-executeを実装した最初のx86ファミリベンダーでした。この機能は、PAEが使用されている場合、AMD64プロセッサおよび最近のIntelx86プロセッサのレガシーモードでも使用できます。
古い機能の削除
x86アーキテクチャのいくつかの「システムプログラミング」機能は、最新のオペレーティングシステムでは使用されていないか、十分に使用されておらず、AMD64のロング(64ビットおよび互換)モードでは使用できないか、限られた形式でしか存在しません。これらは、(FSとGSセグメントはオペレーティング・システム構造に余分ベースポインタとして使用するために痕跡の形で保持されているが)、アドレッシングセグメントが含まれる
:70作業状態切替機構、及び
バーチャル8086モード。これらの機能は「レガシーモード」で完全に実装されたままであり、これらのプロセッサは変更なしで32ビットおよび16ビットのオペレーティングシステムを実行できます。スタック上のセグメントレジスタの保存/復元、すべてのレジスタの保存/復元(PUSHA / POPA)、10進演算、BOUNDおよびINTO命令など、ほとんど役に立たないことが判明した一部の命令は、64ビットモードではサポートされ far」ジャンプし、即時オペランドを使用して呼び出します。
仮想アドレス空間の詳細編集

標準形アドレス
標準的なアドレス空間の実装(図は縮尺どおりではありません)
image
  現在の48ビット実装
image
  57ビットの実装
image
  64ビットの実装
仮想アドレスは64ビットモードでは64ビット幅ですが、現在の実装(および計画段階にあることがわかっているすべてのチップ)では、2 64バイト(16  EiB)の仮想アドレス空間全体を使用することはできません。これは、32ビットマシンの仮想アドレス空間の約40億倍のサイズになります。ほとんどのオペレーティングシステムとアプリケーションは、当面の間、このような大きなアドレススペースを必要としないため、このような広い仮想アドレスを実装すると、アドレス変換の複雑さとコストが増加するだけで、実際のメリットはありません。したがって、AMDは、アーキテクチャの最初の実装では、仮想アドレスの最下位48ビットのみが実際にアドレス変換(ページテーブルルックアップ)に使用されることを決定しました。
さらに、AMD仕様では、仮想アドレスの最上位16ビットであるビット48〜63は、ビット47のコピーである必要があります(符号拡張と同様の方法で)。この要件が満たされない場合、プロセッサは例外を発生させます。この規則に準拠するアドレスは、「標準形」と呼ばれます。の標準形アドレスは0から00007FFF’FFFFFFFFまで、およびFFFF8000’00000000からFFFFFFFF’FFFFFFFFまで実行され、合計 256TiBの使用可能な仮想アドレス空間になります。これは、32ビットマシンの仮想4GiBアドレス空間の65,536倍です。
この機能により、後の真の64ビットアドレス指定へのスケーラビリティが容易になります。多くのオペレーティングシステム(Windows NTファミリを含むがこれに限定されない)は、アドレス空間(カーネル空間と呼ばれる)の上位半分を自分自身のために取り、アプリケーションコード、ユーザーモードのために下位半分(ユーザー空間)を残しますスタック、ヒープ、およびその他のデータ領域。「正規アドレス」設計により、AMD64準拠のすべての実装で、事実上2つのメモリ半分が確保されます。下半分は00000000’00000000から始まり、より多くの仮想アドレスビットが使用可能になると「上向きに成長」し、上半分はアドレス空間の上部に「ドッキング」され、下に向かって大きくなります。また、未使用のアドレスビットをチェックしてアドレスの「標準形式」を適用すると、オペレーティングシステムがフラグや特権マーカーなどのタグ付きポインタで使用するのを防ぐことができます。アーキテクチャを拡張してより仮想的なものを実装すると、このような使用が問題になる可能性がアドレスビット。
Windows for x64の最初のバージョンは、完全な256TiBを使用していませんでした。それらは、8TiBのユーザースペースと8TiBのカーネルスペースに制限されていました。 Windowsは、2013年10月にリリースされたWindows 8.1まで、48ビットアドレス空間全体をサポートしていませんでした。

ページテーブルの構造
64ビットアドレッシングモード(「ロングモード」)は、物理アドレス拡張(PAE)のスーパーセットです。このため、ページサイズは4  KiB(2 12バイト)または2  MiB(2 21バイト)になる場合がロングモードは、1 GiB(2 30バイト)のページサイズもサポートします 。 PAEモードのシステムで使用される3レベルのページテーブルシステムではなく、ロングモードで実行されるシステムは4レベルのページテーブルを使用します。PAEのページディレクトリポインタテーブルは4つのエントリから512に拡張され、さらにページマップレベル4(PML4)テーブルが追加され、48ビット実装の512エントリが含まれています。 :131全体の48ビット空間の4 KiBのページのAフルマッピング階層が512よりも少しかかる ジブメモリの(256のTiB仮想空間の約0.195パーセント)。
Intelは、5レベルのページテーブルを使用したスキームを実装しました。これにより、Intel64プロセッサは57ビットの仮想アドレス空間をサポートできます。さらなる拡張により、ページテーブルエントリサイズを128ビットに拡張することで完全な64ビット仮想アドレス空間と物理メモリが可能になり、さらに大きな64 KiBページ割り当てサイズを使用することで5レベル階層のページウォークを減らすことができます。下位互換性のために4KiBページ操作をサポートします。

オペレーティングシステムの制限
オペレーティングシステムは、仮想アドレス空間を制限することもできます。詳細は、該当する場合、「オペレーティングシステムの互換性と特性」セクションに記載されています。

物理アドレス空間の詳細
現在のAMD64プロセッサは、最大2 48バイトのRAM、つまり 256TiBの物理アドレス空間をサポートしています。ただし、2020年の時点で、256TiBのRAMをサポートする既知のx86-64マザーボードはありませんでした。 オペレーティングシステムは、使用可能またはサポートされているRAMの量に追加の制限を課す場合がこの点の詳細は、の「オペレーティングシステムの互換性と特性」セクションに記載されています。

動作モード
アーキテクチャには、ロングモード、レガシーモード、リアルモードの3つの主要な動作モードが
オペレーティング 必要なオペレーティングシステム
実行されているコードのタイプ
サイズ
モード サブモード アドレス(デフォルト) オペランド(デフォルト) オペランド(標準サポート) レジスタファイル
ロングモード 64ビットモード 64ビット 64ビットコード 64ビット 32ビット 8、16、32、または64ビット ファイルあたり16レジスタ
互換モード 32ビットコード 32ビット 32ビット 8、16、または32ビット ファイルごとに8つのレジスタ
16ビットコード(リアルモードコードはサポートされていません)
16ビット 16ビット 8、16、または32ビット ファイルごとに8つのレジスタ
レガシーモード
保護モード 32ビット 32ビットコード 32ビット 32ビット 8、16、または32ビット ファイルごとに8つのレジスタ
16ビットプロテクトモード 16ビットコード 16ビット 16ビット 8、16、または32ビット
ファイルごとに8つのレジスタ
仮想8086モード 16ビットまたは32ビットのプロテクトモード リアルモードコードの一部 16ビット 16ビット 8、16、または32ビット
ファイルごとに8つのレジスタ
リアルモード
非現実モード DOSまたはブートローダー リアルモードコード 16、20、または32ビット 16ビット 8、16、または32ビット
ファイルごとに8つのレジスタ
リアルモード DOSまたはブートローダー リアルモードコード 16、20、または21ビット
16ビット 8、16、または32ビット
ファイルごとに8つのレジスタ
^ 80286以下用に記述された16ビットコードは、32ビットのオペランド命令を使用しないことに注意して80386以降用に記述されたコードでは、オペランドサイズのオーバーライドプレフィックス(0x66)を使用できます。通常、このプレフィックスは、16ビットオペランドを使用する目的で保護されたロングモードコードによって使用されます。このコードは、デフォルトのオペランドサイズが32ビットのコードセグメントで実行されるためです。リアルモードでは、デフォルトのオペランドサイズは16ビットであるため、0x66プレフィックスの解釈が異なり、オペランドサイズが32ビットに変更されます。
image
  x86-64動作モードの状態図

ロングモード
ロングモード
ロングモードは、アーキテクチャが意図するプライマリ動作モードです。これは、プロセッサのネイティブ64ビットモードと、32ビットと16ビットの互換モードを組み合わせたものです。64ビットオペレーティングシステムで使用されます。64ビットオペレーティングシステムでは、64ビットプログラムは64ビットモードで実行され、32ビットおよび16ビットのプロテクトモードアプリケーション(実行するためにリアルモードまたは仮想8086モードを使用する必要はありません)時間)互換モードで実行します。リアルモードプログラムおよび仮想8086モードをいつでも使用するプログラムは、これらのモードがソフトウェアでエミュレートされない限り、ロングモードで実行することはできません。ただし、このようなプログラムは、VT-xまたはAMD-Vをサポートするプロセッサでロングモードで実行されているオペレーティングシステムから、目的のモードで実行される仮想プロセッサを作成することで開始できます。
基本的な命令セットは同じであるため、プロテクトモードのx86コードを実行してもパフォーマンスが低下することはほとんどありません。これは、基になる命令セットの違いにより、32ビットコードの実行をx86のエミュレーション(プロセスを遅くする)または専用のx86コプロセッサーを使用して実行する必要があるIntelのIA-64とは異なります。ただし、x86-64プラットフォームでは、64ビットコードの追加レジスタとコンパイラが最適化に使用できるSSE2ベースのFPUサポートが保証されているため、多くのx86アプリケーションが64ビット再コンパイルの恩恵を受ける可能性がただし、暗号化アルゴリズムなど、32ビットより広い整数を定期的に処理するアプリケーションでは、64ビットレジスタを利用するために、巨大な整数を処理するコードを書き直す必要が

レガシーモード
レガシーモードは、32ビットまたは16ビットの「プロテクトモード」オペレーティングシステムで使用されるモードです。このモードでは、プロセッサは古いx86プロセッサのように動作し、16ビットと32ビットのコードのみを実行できます。レガシーモードでは、最大32ビットの仮想アドレス指定が可能であり、仮想アドレス空間は4GiBに制限されます。:24:11864ビットプログラムはレガシーモードから実行できません。

リアルモード
リアルモードは、プロセッサが初期化されたときの初期動作モードです。これは、元の8086および8088プロセッサとの下位互換性がリアルモードは現在、主にオペレーティングシステムのブートローダーによって使用されています。オペレーティングシステムのブートローダーは、より高いモードに移行する前に仮想メモリの詳細を構成するためにアーキテクチャで必要です。

Intel 64
Intel 64は、Intelによるx86-64の実装であり、Intel製のさまざまなプロセッサで使用および実装されています。

歴史
歴史的に、AMDはIntelの元の設計に基づいてパターン化された命令セットを備えたプロセッサを開発および製造してきましたが、x86-64では、役割が逆転しました。Intelは、AMDがIntel独自のx86プロセッサラインの拡張として作成したISAを採用する立場にありました。
Intelのプロジェクトは、もともとコードネームが Yamhillでした(オレゴン州のウィラメットバレーのYamhill Riverにちなんで)。数年にわたってその存在を否定した後、Intelは2004年2月のIDFで、プロジェクトが実際に進行中であることを発表しました。当時のIntelの会長であるCraigBarrettは、これが彼らの最悪の秘密の1つであることを認めました。
この命令セットのIntelの名前は数回変更されています。IDFで使用された名前はCT でした(おそらく、オレゴン川からの別のコードネームであるClackamas Technologyの)。数週間以内に彼らはそれをIA-32e(IA-32拡張用)と呼び始め、2004年3月に「正式な」名前EM64T(拡張メモリ64テクノロジー)を発表しました。2006年後半にインテルではなく名前を使用し始めたインテルの64名のAMD64のAMDの使用を並列に、その実施のために。
Intel 64を実装した最初のプロセッサは、2004年6月にコードネームNoconaというマルチソケットプロセッサXeonでした。対照的に、最初のPrescottチップではこの機能が有効になりませんでした。その後、IntelはPrescottコアのE0リビジョンを使用してIntel64対応のPentium4の販売を開始し、OEM市場でPentium 4、モデルFとして販売されました。E0リビジョンにはeXecute Disable(XD)(IntelのNXビットの名前)も追加されています。)をIntel 64に移行し、現在のXeonコード名Irwindaleに含まれています。Intelが主流のデスクトッププロセッサでIntel64(当時はEM64Tという名前で)を正式に発売したのは、N0ステッピングPrescott-2Mでした。
Intel 64を実装する最初のIntelモバイルプロセッサは、2006年7月27日にリリースされたCore 2プロセッサのMeromバージョンです。Intelの初期のノートブックCPU(Core Duo、Pentium M、Celeron M、Mobile Pentium 4)はいずれもIntel64を実装し。

実装
Intel64アーキテクチャを実装するIntelのプロセッサには、Pentium 4Fシリーズ/ 5×1シリーズ、506、および516、Celeron Dモデル3×1、3×6、355、347、352、360、および365、およびそれ以降のすべてのCeleron、以降のすべてのXeonモデルが含まれます。Nocona “”、”” Merom-2M “”以降のPentiumデュアルコアプロセッサのすべてのモデル、Atom 230、330、D410、D425、D510、D525、N450、N455、N470、N475、N550、N570、N2600、N2800、すべてのバージョンペンティアムD、ペンティアムエクストリームエディション、コア2、コアI9、コアI7、コアi5、およびコアi3のプロセッサ、Xeonプロセッサファイ7200シリーズプロセッサ。

VIAのx86-64実装
VIA Technologiesは、CPU部門であるCentaur Technologyによる5年間の開発の後、2008年にx86-64アーキテクチャの最初の実装を導入しました。コードネーム「イザヤ書」、64ビットアーキテクチャは、2008年1月24日、上で発表されたと下の5月29日に打ち上げVIAナノブランド名。
プロセッサは、低電力アプライアンスの効率を高めるように設計された、VIA固有のx86拡張機能を多数サポートしています。Isaiahアーキテクチャは、同等のクロック速度で、前世代のVIAEstherの整数パフォーマンスの2倍、浮動小数点パフォーマンスの4倍の速度になると予想されます。消費電力も前世代のVIACPUと同等で、熱設計電力は5Wから25Wの範囲であると予想されます。完全に新しい設計であるため、Isaiahアーキテクチャはx86などの機能をサポートして構築されました。 -64命令セットとx86仮想化は、その前身であるVIA C7ラインでは利用できませんでしたが、暗号化拡張機能は保持されていました。

マイクロアーキテクチャレベル
2020年に、ベンダー間のコラボレーションを通じて、いくつかのマイクロアーキテクチャレベル、x86-64-v2、x86-64-v3、およびx86-64-v4が定義されました。これらのレベルは、コンパイル時の最適化を提供するためにプログラマーがターゲットにできる特定の機能を定義します。各レベルで公開されている機能は次のとおりです。
CPUマイクロアーキテクチャレベル
レベル CPU機能 指示例
x86-64 (ベースライン:最も古いものを含むすべてのx86-64 CPU)CMOV cmov CX8 cmpxchg8b FPU fld FXSR fxsave MMX CMOV0 CMOV1 CMOV2 CMOV3
システムコールSSE cvtss2si SSE2 cvtpi2pd
x86-64-v2 (2009年頃:ネハレムとジャガー)また:
QEMUエミュレーション
Intel Atom Silvermont(2013)
VIA Nano and Eden “”C””(2015)CMPXCHG16B cmpxchg16b LAHF-SAHF lahf POPCNT popcnt SSE3 addsubpd SSE4_1 CMPXCHG16B0 CMPXCHG16B1 CMPXCHG16B2 CMPXCHG16B3 phaddd x86-64-v3 (2015年頃:Haswell and Excavator)また:
アトムグレースモント(2021)AVX vzeroall AVX2 vpermd BMI1 andn BMI2 bzhi F16C AVX0 AVX1 AVX2 AVX3lzcnt MOVBE movbe OSXSAVE xgetbv
x86-64-v4 (AVX-512の汎用サブセット)AVX512F kmovw AVX512BW vdbpsadbw AVX512CD vplzcntd AVX512DQ vpmullq AVX512VL
該当なし

AMD64とIntel64の違い
ほぼ同じですが、主にシステムプログラミングに使用される、めったに使用されないいくつかのマシン命令(または状況)のセマンティクスには、2つの命令セットの間にいくつかの違いがコンパイラは通常、少なくとも通常のアプリケーションプログラムでは、違いを回避する実行可能ファイル(つまり、マシンコード)を生成します。したがって、これは主に、個々の特別なシステム命令を処理する必要のあるコンパイラ、オペレーティングシステムなどの開発者にとって興味深いものです。

最近の実装
インテル64さんBSFとBSRソースがゼロで、オペランドサイズが32ビットの場合の手順は、AMD64のとは異なる行動します。プロセッサはゼロフラグを設定し、宛先の上位32ビットを未定義のままにします。この場合、Intelは宛先レジスタの値が未定義であると文書化していますが、実際にはシリコンではAMDと同じ動作を実装しています(宛先は変更されていません)。上位32のビットを保持しない可能性があるという個別の主張は検証されていませんが、Core2とSkylakeについてのみ除外されています。64ビットPentium4や低電力AtomなどのすべてのIntelマイクロアーキテクチャではありません。
AMD64は、異なるマイクロコード更新フォーマットと制御MSR(モデル固有のレジスタ)を必要としますが、Intel 64は、32ビットのみのプロセッサから変更されていないマイクロコード更新を実装します。
Intel 64には、AMD64でアーキテクチャと見なされるMSRがいくつかありません。これらにはSYSCFG、TOP_MEM、とTOP_MEM2。
Intel 64は、64ビットモード(互換モードではない)でSYSCALL/SYSRETのみを許可し、両方のモードでSYSENTER/を許可SYSEXITします。 AMD64は欠くSYSENTER/SYSEXIT両方のサブモードに長いモード。
64ビットモードでは、66H(オペランドサイズオーバーライド)プレフィックスが付いたnearブランチの動作が異なります。Intel 64は、このプレフィックスを無視します。命令には32ビットの符号拡張オフセットがあり、命令ポインタは切り捨てられません。AMD64は、命令で16ビットのオフセットフィールドを使用し、命令ポインタの上位48ビットをクリアします。
AMDプロセッサは、80ビットシグナリングNaNのFLDまたはFSTPを実行するときに浮動小数点の無効な例外を発生させますが、Intelプロセッサは発生しません。
Intel 64には、浮動小数点状態の縮小版(したがって高速版)を保存および復元する機能がありません(FXSAVEおよびFXRSTOR命令を含む)。
Opteron Rev.EおよびAthlon64 Rev. D以降のAMDプロセッサは、64ビットゲストの仮想化を容易にするために、ロングモードセグメント制限イネーブル(LMSLE)ビットを介したセグメンテーションの限定サポートを再導入しました。
を使用して非正規アドレスに戻る場合SYSRET、AMD64プロセッサは特権レベル3で一般保護違反ハンドラを実行しますが、Intel64プロセッサでは特権レベル0で実行されます。

古い実装
初期のAMD64プロセッサ(通常はSocket 939および940)にはCMPXCHG16B命令がありませんでした。これは、CMPXCHG8Bほとんどの80486以降のプロセッサに存在する命令の拡張です。と同様にCMPXCHG8B、オクタワード(128ビット値)CMPXCHG16Bでのアトミック操作が可能です。これは、ポインタのサイズよりも大きいデータでコンペアアンドスワップを使用する並列アルゴリズムに役立ちます。これは、ロックフリーおよび待機フリーのアルゴリズムで一般的です。なければCMPXCHG16B1のような、回避策を使用する必要があり、クリティカルセクションまたは代替ロックフリーのアプローチ。この機能がないため、Windows8.1より前の64ビットWindowsではユーザーモードのアドレス空間が8TiBを超える こともありません。 64ビットバージョンのWindows8.1には命令が必要です。
初期のAMD64およびIntel64 CPUには欠けていLAHFてSAHF、64ビットモードの命令がありました。AMDは2005年3月にAthlon64、Opteron、Turion 64リビジョンDプロセッサでこれらの命令(64ビットモードでも)を導入しましたが 、Intelは2005年12月にPentium 4G1ステッピングで命令を導入しました。64ビットバージョンのWindows8.1には、この機能が必要です。
Intel64を搭載した初期のIntelCPUにも、AMD64アーキテクチャのNXビットがありません。この機能は、Windows8.xのすべてのバージョンで必要です。
初期のIntel64実装(PrescottおよびCedar Mill)は64 GiBの物理メモリへのアクセスのみを許可していましたが、元のAMD64実装は1TiBの物理メモリへのアクセスを許可していました 。最近 AMD64実装は256TiBの物理アドレス空間を提供し(AMDは4 PiBへの拡張を計画しています )、一部のIntel64実装は最大64TiBをアドレス指定できます。このサイズの物理メモリ容量は、大規模アプリケーション(大規模データベースなど)および高性能コンピューティング(中央指向のアプリケーションおよび科学計算)に適しています。

可決
image
  1993年から2019年までのTOP500スーパーコンピューターランキングリストにあるマイクロプロセッサーのさまざまなファミリーの表現を示す面グラフ。
スーパーによって追跡TOP500 x86アーキテクチャの64ビット拡張の外観は以前に(を含むそのようなシステムで使用される最もRISCプロセッサアーキテクチャ置き換えるためにAMDとIntelが64ビットx86プロセッサを有効にし、PA-RISC、SPARC、アルファおよびその他) 、および32ビットx86は、Intel自体が最初にx86をItaniumプロセッサの新しい互換性のない64ビットアーキテクチャに置き換えようとして失敗しましたが。
2020年の時点では、富士通 A64FXはと呼ばれるスーパーコンピュータベースの富嶽がナンバーワンです。最初のARMベースのスーパーコンピューターは2018年にリストに登場し、近年、非CPUアーキテクチャコプロセッサー(GPGPU)もパフォーマンスに大きな役割を果たしています。IntelのXeonPhi「 KnightsCorner 」コプロセッサは、いくつかのベクトル拡張を備えたx86-64のサブセットを実装し、は、x86-64プロセッサとともにTianhe-2スーパーコンピュータでも使用されます。

オペレーティングシステムの互換性と特性
次のオペレーティングシステムとリリースは、ロングモードでx86-64アーキテクチャをサポートしています。

BSD

DragonFly BSD
x86-64ポートの予備的なインフラストラクチャ作業が2004年2月に開始されました。この開発は後に行き詰まった。開発は2007年7月に再開され、Google Summer of Code2008およびSoC2009の間も継続されました。 x86-64サポートを含む最初の公式リリースはバージョン2.4でした。

FreeBSD
FreeBSDは、2003年6月の5.1-RELEASEで、実験的なアーキテクチャとして「amd64」という名前でx86-64サポートを最初に追加しました。2004年1月の5.2-RELEASEで、標準の配布アーキテクチャとして含まれました。 Tier1プラットフォーム。6.0-RELEASEバージョンは、amd64でx86実行可能ファイルを実行することでいくつかの癖を取り除き、ほとんどのドライバーはx86アーキテクチャーと同じように動作します。Linux 32ビットABI互換性が現在機能しているのと同じ方法で、x86アプリケーションバイナリインターフェイス(ABI)をより完全に統合するための作業が現在行われています。

NetBSD
x86-64アーキテクチャのサポートは、2001年6月19日にNetBSDソースツリーに最初にコミットされました。2004年12月9日にリリースされたNetBSD 2.0の時点で、NetBSD / amd64は完全に統合されサポートされているポートです。32ビットコードは64ビットモードでも引き続きサポートされ、32ビットシステムコール用のnetbsd-32カーネル互換性レイヤーがNXビットは、実行不可能なスタックとヒープにページごとの粒度を提供するために使用されます(セグメントの粒度は32ビットx86で使用されます)。

OpenBSD
OpenBSDは、2004年5月1日にリリースされたOpenBSD 3.5以降AMD64をサポートしています。AMDがその年のプロジェクトのハッカソンに複数のマシンを貸与したため、ハードウェアの最初のリリースの前に、AMD64サポートの完全なツリー内実装が達成されました。OpenBSD開発者は、NXビットをサポートしているため、このプラットフォームを採用しました。これにより、W ^ X機能を簡単に実装できます。
OpenBSDのAMD64ポートのコードは、AMD64拡張機能のクローン使用を含むIntel 64プロセッサでも実行されますが、Intelは初期のIntel 64プロセッサでページテーブルNXビットを省略したため、これらのIntelCPUにはW ^ X機能がありません。 ; その後、Intel64プロセッサは「XDビット」という名前でNXビットを追加しました。対称型マルチプロセッシング(SMP)は、2004年11月1日のリリース3.6以降、OpenBSDのAMD64ポートで動作します。

DOS
DOSエクステンダなしでDOSでロングモードに入ることができますが、ユーザーはBIOSまたはDOS割り込みを呼び出すためにリアルモードに戻る必要が
DOS / 4GWと同様のDOSエクステンダを使用してロングモードに入ることができる場合もありますが、x86-64には仮想8086モードがないため、より複雑です。DOS自体はそれを認識しておらず、適切な仮想化ドライバーバックエンド(たとえば、大容量ストレージインターフェイス)を備えたエミュレーションでDOSを実行しない限り、メリットは期待できません。

Linux
参照:
Linuxディストリビューションの比較§命令セットアーキテクチャのサポート
Linuxは、x86-64アーキテクチャをロングモードで実行した最初のオペレーティングシステムカーネルであり、2001年の2.4バージョンから始まりました(ハードウェアの可用性に先行)。 Linuxは、32ビット実行可能ファイルを実行するための下位互換性も提供します。これにより、32ビットプログラムの使用を維持しながら、プログラムをロングモードに再コンパイルできます。現在、いくつかのLinuxディストリビューションには、x86-64ネイティブのカーネルとユーザーランドが付属しています。Arch Linux、 SUSE、Mandriva、Debianなどの一部では、64ビットDVDからインストールするときに、ユーザーが32ビットコンポーネントとライブラリのセットをインストールできるため、既存のほとんどの32ビットアプリケーションを64ビットOS。Fedora、Slackware、Ubuntuなどの他のディストリビューションは、32ビットアーキテクチャ用にコンパイルされたバージョンと64ビットアーキテクチャ用にコンパイルされたバージョンで利用できます。FedoraとRedHat Enterprise Linuxでは、64ビットシステムに32ビットバージョンと64ビットバージョンの両方のすべてのユーザーランドコンポーネントを同時にインストールできます。
Linux3.4で導入されたx32ABI(Application Binary Interface)を使用すると、x32 ABI用にコンパイルされたプログラムをx86-64の64ビットモードで実行し、32ビットのポインターとデータフィールドのみを使用できます。 これにより、プログラムは4 GiBの仮想アドレス空間に制限されますが、プログラムのメモリフットプリントも減少し、場合によってはより高速に実行できるようになります。
64ビットLinuxは、個々のプロセスに最大128 TiBの仮想アドレス空間を許可し 、プロセッサとシステムの制限に従って、約64TiBの物理メモリをアドレス指定できます。

マックOS
Mac OS X10.4.7以降のバージョンのMacOS X 10.4は、すべてのバージョンのMac OS X 10.4および10.5が実行するのと同じように、64ビットのIntelベースのマシンでPOSIXおよび数学ライブラリを使用して64ビットのコマンドラインツールを実行します。 64ビットPowerPCマシン。Mac OS X 10.4の64ビットアプリケーションでは、他のライブラリやフレームワークは機能しません。カーネル、およびすべてのカーネル拡張は、32ビットのみです。
Mac OS X 10.5は、64ビットIntelベースのマシンおよび64ビットPowerPCマシンで、Cocoa、Quartz、OpenGL、およびX11を使用する64ビットGUIアプリケーションをサポートします。すべての非GUIライブラリとフレームワークは、これらのプラットフォームで64ビットアプリケーションもサポートします。カーネルお​​よびすべてのカーネル拡張は、32ビットのみです。
Mac OS X 10.6は、64ビットカーネルをサポートするmacOSの最初のバージョンです。ただし、すべての64ビットコンピューターが64ビットカーネルを実行できるわけではなく、64ビットカーネルを実行できるすべての64ビットコンピューターがデフォルトで実行できるわけではありません。 64ビットカーネルは、32ビットカーネルと同様に、32ビットアプリケーションをサポートします。どちらのカーネルも64ビットアプリケーションをサポートしています。32ビットアプリケーションには、どちらのカーネルでも4GiBの仮想アドレス空間制限が
OS X 10.8には64ビットカーネルのみが含まれていますが、引き続き32ビットアプリケーションをサポートしています。
macOS 10.15には64ビットカーネルのみが含まれ、32ビットアプリケーションはサポートされなくなりました。
64ビットカーネルは32ビットカーネル拡張をサポートしまた、32ビットカーネルは64ビットカーネル拡張をサポートし
macOSは、ユニバーサルバイナリ形式を使用して、32ビットバージョンと64ビットバージョンのアプリケーションおよびライブラリコードを1つのファイルにパッケージ化します。ロード時に最も適切なバージョンが自動的に選択されます。Mac OS X 10.6では、ユニバーサルバイナリ形式は、カーネルと、32ビットカーネルと64ビットカーネルの両方をサポートするカーネル拡張機能にも使用されます。

Solaris
参照: illumos Solaris 10以降のリリースは、x86-64アーキテクチャをサポートしています。
Solaris 10の場合、SPARCアーキテクチャと同様に、32ビットカーネルと64ビットカーネルを含むオペレーティングシステムイメージは1つだけです。これは「x64 / x86」DVD-ROMイメージとしてラベル付けされています。デフォルトの動作では、64ビットカーネルを起動し、64ビットと既存または新規の32ビット実行可能ファイルの両方を実行できるようにします。32ビットカーネルを手動で選択することもできます。その場合、32ビットの実行可能ファイルのみが実行されます。このisainfoコマンドを使用して、システムが64ビットカーネルを実行しているかどうかを判別できます。
Solaris 11の場合、64ビットカーネルのみが提供されます。ただし、64ビットカーネルは、32ビットと64ビットの両方の実行可能ファイル、ライブラリ、およびシステムコールをサポートします。

ウィンドウズ
Microsoft Windowsクライアントおよびサーバ-のx64エディションのWindows XP x64エディションおよびWindows Server 2003のx64の版-た2005年3月にリリースされ内部では、彼らが、実際には同じビルド(5.2.3790.1830 SP1)ある それらは同じソースベースとオペレーティングシステムバイナリを共有するため、システムアップデートでさえ、x86用のWindows 2000ProfessionalおよびServerエディションとほぼ同じ方法で統合パッケージでリリースされます。さまざまなエディションがあるWindowsVistaは、2007年1月にリリースされました。Windows7は2009年7月にリリースされました。WindowsServer2008R2は、x64エディションとItaniumエディションでのみ販売されました。それ以降のバージョンのWindowsServerは、x64エディションのみを提供します。
Windows8.1およびWindowsServer 2012R2より前のバージョンのWindowsfor x64は、次の機能を提供します。
ユーザーモードとカーネルモードの両方からアクセス可能な、プロセスごとの8 TiBの仮想アドレス空間。ユーザーモードアドレス空間と呼ばれます。x64プログラムは、システムのバッキングストア制限を条件として、これらすべてを使用できます。ただし、「ラージアドレス対応」オプションとリンクされている必要がこれは、32ビットWindowsによって提供されるデフォルトの2GiBユーザーモード仮想アドレス空間の4096倍の増加です。
オペレーティングシステム用のカーネルモード仮想アドレス空間の8TiB。ユーザーモードのアドレス空間と同様に、これは32ビットのWindowsバージョンの4096倍の増加です。スペースの増加は、主にファイルシステムキャッシュとカーネルモードの「ヒープ」(非ページプールとページプール)に役立ちます。初期のAMD64プロセッサにはCMPXCHG16B命令がなかったため、Windowsはプロセッサによって実装された256TiBのうち合計16TiBしか使用しません。
Windows8.1およびWindowsServer 2012 R2では、ユーザーモードとカーネルモードの両方の仮想アドレス空間が128TiBに拡張されました。これらのバージョンのWindowsは、CMPXCHG16B命令がないプロセッサにはインストールされません。
次の追加の特性は、Windowsのすべてのx64バージョンに適用されます。
既存の32ビットアプリケーション(実行する機能.exeプログラム)とダイナミックリンクライブラリ(.dll使用S)はWoW64をはWoW64はそのバージョンでサポートされている場合。さらに、32ビットプログラムが「ラージアドレス対応」オプションとリンクされている場合、は、デフォルトの2 GiB(オプションの3 GiB)の代わりに、64ビットWindowsで最大4GiBの仮想アドレス空間を使用できます。/3GBブートオプションと32ビット版のWindowsが提供する「大きなアドレスを認識し、」リンクオプション)。/3GB x86でのブートオプションの使用とは異なり、これにより、オペレーティングシステムで使用可能なカーネルモードの仮想アドレス空間が減少することはありません。したがって、32ビットアプリケーションは、x86-64用に再コンパイルされていない場合でも、x64Windowsで実行することでメリットが得られます。
32ビットと64ビットの両方のアプリケーションは、「ラージアドレス対応」にリンクされていない場合、2GiBの仮想アドレス空間に制限されます。
最大128GiB(Windows XP / Vista)、192 GiB(Windows 7)、512 GiB(Windows 8)、1 TiB(Windows Server 2003)、2 TiB(Windows Server 2008 / Windows 10)、4 TiB( Windows Server 2012)、または24 TiB(Windows Server 2016/2019)の物理ランダムアクセスメモリ(RAM)。
LLP64データモデル:「int」型と「long」型は32ビット幅、long long型は64ビットですが、ポインターとポインターから派生した型は64ビット幅です。
カーネルモードのデバイスドライバーは64ビットバージョンである必要が64ビットオペレーティングシステム内で32ビットカーネルモードの実行可能ファイルを実行する方法はありません。ユーザーモードのデバイスドライバーは、32ビットまたは64ビットのいずれかです。
16ビットWindows(Win16)およびDOSアプリケーションは、仮想8086モードを使用する機能に依存していた仮想DOSマシンサブシステム(NTVDM)が削除されたため、x86-64バージョンのWindowsでは実行されません。ロングモードでの実行中は、仮想8086モードに入ることができません。
NX(実行なし)ページ保護機能の完全な実装。これは、最近の32ビットバージョンのWindowsがPAEモードで起動されたときにも実装されます。
Windows NTファミリのx86バージョンのFSセグメント記述子の代わりに、GSセグメント記述子は、ユーザーモードのスレッド情報ブロック(NT_TIB)とカーネルモードのプロセッサ制御領域(KPCR)の2つのオペレーティングシステム定義の構造を指すために使用されます。したがって、たとえば、ユーザーモードでGS:0は、スレッド情報ブロックの最初のメンバーのアドレスになります。この規則を維持することでx86-64ポートが容易になりましたが、セグメント化されたアドレス指定自体は最新のオペレーティングシステムでは実際には使用されていませんが、AMDはFSおよびGSセグメントの機能をロングモードで保持する必要がありました。
初期のレポートでは、オペレーティングシステムスケジューラはスレッドコンテキストスイッチ間でx87FPUマシンの状態を保存および復元しないと主張していました。観察された動作は、これが当てはまらないことを示しています。カーネルモードのみのスレッド(32ビットバージョンにも存在する制限)を除いて、x87状態が保存および復元されます。Microsoftから入手できる最新のドキュメントには、x87 / MMX / 3DNow!命令はロングモードで使用できますが、非推奨であり、将来的に互換性の問題が発生する可能性が
Microsoft Jetデータベースエンジンやデータアクセスオブジェクトなどの一部のコンポーネントは、x86-64やIA-64などの64ビットアーキテクチャに移植されません。
Microsoft Visual Studioは、ネイティブアプリケーションをコンパイルして、64ビットMicrosoft Windowsでのみ実行できるx86-64アーキテクチャ、または32ビットMicrosoftWindowsで32ビットアプリケーションとして実行できるIA-32アーキテクチャのいずれかをターゲットにすることができます。WoW64エミュレーションモードの64ビットMicrosoftWindows 。管理対象アプリケーションは、IA-32、x86-64、またはAnyCPUモードのいずれかでコンパイルできます。最初の2つのモードで作成されたソフトウェアは、それぞれIA-32またはx86-64のネイティブコードの対応物のように動作します。ただし、AnyCPUモードを使用する場合、32ビットバージョンのMicrosoft Windowsのアプリケーションは32ビットアプリケーションとして実行されますが、64ビットエディションのMicrosoftWindowsでは64ビットアプリケーションとして実行されます。

ビデオゲーム機
PlayStation4とXboxOneの両方、およびそれらのバリアントには、Jaguar マイクロアーキテクチャに基づくAMDx86-64プロセッサが組み込まれています。 ファームウェアとゲームはx86-64コードで書かれています。レガシーx86コードは含まれ
彼らの次の世代、プレイステーション5およびXboxのシリーズXおよびシリーズSそれぞれは、またに基づいて、AMDのx86-64プロセッサに組み込むの禅2マイクロアーキテクチャ。

業界の命名規則
AMD64とIntel64は実質的に類似しているため、多くのソフトウェアおよびハードウェア製品は、ベンダーに依存しない1つの用語を使用して、両方の実装との互換性を示します。このプロセッサアーキテクチャに対するAMDの元の指定である「x86-64」は、バリアント「x86_64」と同様に、この目的で使用されることがあります。 のような他の企業、マイクロソフトとサン・マイクロシステムズ/オラクル・コーポレーション、マーケティング資料の縮小””のx64″”を使用。
IA-64という用語はItaniumプロセッサを指し、完全に異なる命令セットであるため、x86-64と混同しないで
多くのオペレーティングシステムおよび製品、特にIntelが市場に参入する前にx86-64サポートを導入したものでは、AMD64とIntel64の両方を指すために「AMD64」または「amd64」という用語を使用します。 amd64 FreeBSD、MidnightBSD、NetBSD、OpenBSDなどのほとんどのBSDシステムは、アーキテクチャ名「amd64」でAMD64とIntel64の両方を参照しています。
Debian、Ubuntu、Gentoo Linuxなどの一部のLinuxディストリビューションは、アーキテクチャ名「amd64」でAMD64とIntel64の両方を参照しています。
Microsoft Windowsのx64バージョンは、AMD64モニカを内部的に使用して、このアーキテクチャを使用する、またはこのアーキテクチャと互換性のあるさまざまなコンポーネントを指定します。たとえば、環境変数PROCESSOR_ARCHITECTUREには、32ビットバージョンでは「x86」ではなく値「AMD64」が割り当てられ、Windows x64 EditionインストールCD-ROMのシステムディレクトリには、「i386」ではなく「AMD64」という名前が付けられます。 “”32ビットバージョン。
SunのSolarisのisalistコマンドは、AMD64ベースのシステムとIntel64ベースのシステムの両方を「amd64」として識別します。
Java Development Kit(JDK):「amd64」という名前は、x86-64ファイルを含むディレクトリ名で使用されます。 x86_64 LinuxカーネルやGNUコンパイラコレクションは「x86_64版」として64ビットアーキテクチャを指します。
Fedora、openSUSE、Arch Linux、Gentoo Linuxなどの一部のLinuxディストリビューションでは、この64ビットアーキテクチャを「x86_64」と呼んでいます。
Apple macOSは、ターミナルコマンドarchおよびその開発者向けドキュメントに示されているように、64ビットアーキテクチャを「x86-64」または「x86_64」と呼んでいます。
DragonFly BSDは、他のほとんどのBSDシステムとは異なり、64ビットアーキテクチャを「x86_64」と呼んでいます。
Haikuは、64ビットアーキテクチャを「x86_64」と呼びます。

ライセンス
x86-64 / AMD64は、AMDによってのみ開発されました。AMDは、AMD64で使用される技術に関する特許を保有しています。 AMD64を実装するには、これらの特許はAMDからライセンス供与されている必要がIntelはAMDとクロスライセンス契約を締結し、既存のx86技術に関する特許をAMDにライセンス供与し、x86-64で使用される技術に関する特許をAMDからライセンス供与しました。 2009年、AMDとIntelはいくつかの訴訟とクロスライセンスの不一致を解決し、クロスライセンス契約を延長しました。

も参照してください
AMD Generic Encapsulated Software Architecture(AGESA)

ノート
^ 命令セットにはさまざまな名前が使用されています。発売前はx86-64とx86_64が使用されていましたが、リリース時にAMDはAMD64と名付けました。 Intelは、最初はIA-32eおよびEM64Tという名前を使用していましたが、最終的にその実装に「Intel64」を採用しました。など、業界内のいくつか、アップル、 使用するx86-64とx86_64、他人しばらく、特にSun Microsystemsの (現在オラクル・コーポレーション)とマイクロソフト、 を使用するのx64。BSDのOSや、いくつかの家族のLinuxディストリビューション はMicrosoft Windowsが内部的に行うように、AMD64を使用しています。
^ 実際には、64ビットオペレーティングシステムは通常16ビットアプリケーションをサポートしていませんが、最新バージョンのMicrosoft Windowsには、16ビットInstallShieldおよびMicrosoft ACMEインストーラーを32ビットコードにサイレントに置き換えることで効果的にサポートする限定的な回避策が含まれています。

参考文献
^ 「DebianAMD64FAQ」。DebianWiki 。
^ “”x86-64コードモデル””。アップル。
^ arch(1)  – ダーウィンおよびmacOS一般コマンドマニュアル
^ Kevin Van Vechten(2006年8月9日)。「re:IntelXNUバグレポート」。Darwin-devメーリングリスト。アップルコンピュータ。カーネルお​​よび開発者ツールは、Mach-Oアーキテクチャの名前として「x86_64」で標準化されています
^ “”AMD Opteronプロセッサ上のSolaris 10″” 。Oracle 。
^ “”Microsoft64ビットコンピューティング””。マイクロソフト。2010年12月12日にオリジナルからアーカイブされました。
^ 「AMD64ポート」。Debian 。
^ 「Gentoo / AMD64プロジェクト」。Gentooプロジェクト。
^ 「WOW64実装の詳細」。
^ 「ProcessorArchitectureクラス」。
^ l m n o p q r AMD Corporation。「第2巻:システムプログラミング」(PDF)。AMD64アーキテクチャプログラマーズマニュアル。AMDCorporation 。
^ レイモンドチェン(2013年10月31日)。「64ビットWindowsに16ビットエミュレーションレイヤーがない場合、特定の16ビットインストーラーの実行が許可されるのはなぜですか?」。
^ IBM Corporation(2007年9月6日)。「IBMWebSphereApplication Server 64ビットパフォーマンスの謎を解き明かす」(PDF)。NS。14 。図5、6、および7は、32ビットバージョンのWASが、POWERおよびx86-64プラットフォームで完全なネイティブハードウェアパフォーマンスでアプリケーションを実行することも示しています。一部の64ビットプロセッサアーキテクチャとは異なり、POWERおよびx86-64ハードウェアは32ビットモードをエミュレートしません。したがって、64ビット機能の恩恵を受けないアプリケーションは、上記の64ビットプラットフォームで実行されている32ビットバージョンのWebSphereでフルパフォーマンスで実行できます。
^ 「AMDはMicroporcessorフォーラムで新技術を開示します」(プレスリリース)。AMD。1999年10月5日。2012年3月8日のオリジナルからアーカイブ。
^ 「AMDはx86-64アーキテクチャ仕様をリリースし、64ビットコンピューティングへの市場主導の移行を可能にします」(プレスリリース)。AMD。2000年8月10日。2012年3月8日のオリジナルからアーカイブ。
^ Mauerer、W。(2010)。プロフェッショナルなLinuxカーネルアーキテクチャ。ジョンワイリー&サンズ。
^ 「Intel64およびIA-32アーキテクチャソフトウェア開発者マニュアル、第3A巻:システムプログラミングガイド、パート1」(PDF)。pp。4–7 。
^ 「AMDファミリ10hプロセッサ用のBIOSおよびカーネル開発者ガイド(BKDG)」(PDF)。NS。24 。物理アドレス空間が48ビットに増加しました。
^ 「64ビットLinuxに関する神話と事実」(PDF)。2008年3月2日。p。7. 2010年10月10日にオリジナル(PDF)からアーカイブされました。物理アドレス空間が48ビットに増加しました
^ シャンリー、トム(1998)。PentiumProおよびPentiumIIシステムアーキテクチャ。PCシステムアーキテクチャシリーズ(第2版)。アディソン-ウェスリー。NS。 445。ISBN
 0-201-30973-4。
^ マイクロソフトコーポレーション。「PAE、NX、およびSSE2とは何ですか。また、Windows 8を実行するためにPCがそれらをサポートする必要があるのはなぜですか?」。
^ の””Windowsのリリースのためのメモリ制限””。MSDN。Microsoft。2013年11月16日。
^ 「5レベルのページングと5レベルのEPT」(PDF)。インテル。2017年5月。
^ 米国特許9858198、Larry Seiler、「4KBページ操作をサポートする64KBページシステム」、2016年12月29日公開、2018年1月2日発行、IntelCorpに譲渡。 
^ 「Opteron6100シリーズマザーボード」。SupermicroCorporation 。
^ 「SupermicroXeonSolutions」。SupermicroCorporation 。
^ 「Opteron8000シリーズマザーボード」。SupermicroCorporation 。
^ 「TyanProductMatrix」。MiTECインターナショナルコーポレーション。
^ チャーニー、マーク。「Xedマシンモードの定義」。Xed。インテルコーポレーション。
^ 「CraigBarrettはXeonの64ビットアドレス拡張を確認します。そしてPrescott」。インクワイアラー。2004年2月17日。2013年1月12日のオリジナルからアーカイブ。
> ^ 「64ビットコンピューティングのまとめ」、internetnews.comから
^ ラペダス、マーク。「IntelがIDFで「CT」64ビットプロセッサラインをデモする」。EDN。AspenCoreMedia 。
^ 「Intel64アーキテクチャ」。インテル。
^ 「VIAは1Q08に新しいプロセッサアーキテクチャを立ち上げる」(サブスクリプションが必要)。DigiTimes 。
^ ストークス、ジョン(2008年1月23日)。「イザヤが明らかにした:VIAの新しい低電力アーキテクチャ」。ArsTechnica 。
^ 「VIAがVIANanoプロセッサフ​​ァミリを発表」(プレスリリース)。VIA。2008年5月29日。
^ 「VIAIsaiahアーキテクチャの紹介」(PDF)。VIA。2008年1月23日。2008年9月7日のオリジナル(PDF)からアーカイブ。
^ ワイマー、フロリアン(2020年7月10日)。「新しいx86-64マイクロアーキテクチャレベル」。llvm-dev(at)lists.llvm.orgメーリングリスト。
^ 「SystemVアプリケーションバイナリインターフェイスの低レベルシステム情報」。x86-64psABIリポジトリ。2021年1月29日–GitLab経由。
^ ワッソン、スコット。「理論と実践における64ビットコンピューティング」。技術レポート。技術レポート。
^ 「スタックオーバーフローに関する議論」。2021年3月。
^ 「Intel64およびIA-32アーキテクチャソフトウェア開発者マニュアル第2巻(2A、2B、および2C):命令セットリファレンス、AZ」(PDF)。インテル。2013年9月。pp。4–397 。
^ 「Intel64およびIA-32アーキテクチャソフトウェア開発者マニュアル第2巻(2A、2B、および2C):命令セットリファレンス、AZ」(PDF)。インテル。2013年9月。pp。4–400 。
^ 「AMD64ロングモードでのセグメンテーションの廃止がVMwareをどのように破壊したか」。Pagetable.com。2006年11月9日。
^ 「VMwareおよびCPU仮想化テクノロジー」(PDF)。VMware 。
^ 「AMD64アーキテクチャプログラマーズマニュアル第3巻:汎用およびシステムの説明」(PDF)。AMD。2018年5月。p。419 。
^ 「Intel64およびIA-32アーキテクチャソフトウェア開発者マニュアル第2巻(2A、2B、および2C):命令セットリファレンス、AZ」(PDF)。インテル。2014年9月。pp。4–412 。
^ マーギド・M・マイケル。「64ビットCASを使用した実用的なロックフリーおよび待機フリーのLL / SC / VL実装」(PDF)。IBM 。
^ darwou(2004年8月20日)。「とにかく仮想アドレス空間が4GBなのはなぜですか?」。古い新しいもの。マイクロソフト。
^ 「システム要件—Windows8.1」。64ビットPCに64ビットOSをインストールするには、プロセッサがCMPXCHG16b、PrefetchW、およびLAHF / SAHFをサポートしている必要が
^ 「AMDAthlon64およびAMDOpteronプロセッサの改訂ガイド」、AMDから
^ 「AMDTurion64の写真がアップして実行されています」。インクワイアラー。2013年2月22日にオリジナルからアーカイブされました。
> ^ 「Athlon64リビジョンEは一部のNforce3 / 4ボードでは機能しません」。インクワイアラー。2012年9月14日にオリジナルからアーカイブされました。
> ^ 「Intel64アーキテクチャは、ソフトウェアの線形アドレス空間を64ビットに増やし、最大46ビットの物理アドレス空間をサポートします。」巻。1 2-21 of Intel64およびIA-32アーキテクチャソフトウェア開発者マニュアル2014年9月
^ 「統計| TOP500スーパーコンピューターサイト」。Top500.org 。
^ 「サブリストジェネレーター| TOP500スーパーコンピューターサイト」。www.top500.org 。
^ 「Intel®XeonPhiTMコプロセッサ命令セットアーキテクチャリファレンスマニュアル」(PDF)。インテル。2012年9月7日。セクションB.2Intel XeonPhiコプロセッサー64ビットモードの制限。
^ 「インテルは世界最速のスーパーコンピューターに電力を供給し、新しい将来の高性能コンピューティングテクノロジーを明らかにします」。
^ “”cvs commit:src / sys / amd64 / amd64 genassym.c src / sys / amd64 / include asm.h atomic.h bootinfo.h coredump.h cpufunc.h elf.h endian.h exec.h float.h fpu .h frame.h globaldata.h ieeefp.h Limits.h lock.h md_var.h param.h pcb.h pcb_ext.h pmap.h proc.h profile.h psl.h … “”
^ 「AMD64ポート」。
^ 「DragonFlyBSD:GoogleSoC2008」。
^ 「コードの夏は学生を受け入れました」。
^ 「DragonFlyBSD:release24」。
^ 「DOSから保護された長いモードに入るためのチュートリアル」。2017年2月22日にオリジナルからアーカイブされました。
^ Andi Kleen(2001年6月26日)。「Linuxのx86-64への移植」。2010年9月10日にオリジナルからアーカイブされました。ステータス:カーネル、コンパイラ、ツールチェーンが機能しています。カーネルは起動してシミュレーターで動作し、ユーザーランドの移植とプログラムの実行に使用されます
^ アンディクリーン。「アンディクリーンのページ」。これは、x86-64がシミュレーターでのみ利用可能だった頃のLinuxx86-64カーネルポートについて説明した元の論文でした。
^ 「Arch64FAQ」。2012年4月23日。multilibパッケージまたはi686chrootのいずれかを使用できます。
^ Thorsten Leemhuis(2011年9月13日)。「カーネルログ:x32ABIには64ビットの欠点があります」。www.h-online.com。2011年10月28日にオリジナルからアーカイブされました。
^ “”x32-x86-64用のネイティブ32ビットABI””。linuxplumbersconf.org 。
^ “”x32-abi””。Googleサイト。
^ 「AMD64ポート」。debian.org 。
^ 「Apple– Mac OS X Xcode 2.4リリースノート:コンパイラツール」。Apple Inc. 2007年4月11日。2009年4月22日のオリジナルからアーカイブ。
^ 「Apple– Mac OS X Leopard –テクノロジー–64ビット」。Apple Inc. 2009年1月12日のオリジナルからアーカイブ。
^ 「MacOSX v10.6:64ビットカーネルを使用するMac」。AppleInc 。
^ ジョン・シラクサ。「MacOSX 10.6 Snow Leopard:ArsTechnicaレビュー」。Ars TechnicaLLC 。
^ 「MacOSXテクノロジー」。Apple Inc. 2011年3月28日のオリジナルからアーカイブ。
^ 「MicrosoftはWindowsServer2003およびWindowsXPProfessionalの64ビット版の可用性で速度制限を引き上げます|ニュースセンター」。news.microsoft.com 。
^ 「WindowsServer2003およびWindowsXP Professional x64Editionのx64ベースのバージョンの説明」。Microsoftサポート。
^ 「WindowsServer2003SP1管理ツールパック」。Microsoftダウンロードセンター。2016年8月27日にオリジナルからアーカイブされました。
^ “”/ LARGEADDRESSAWARE(大きなアドレスの処理)””。Visual Studio 2005ドキュメント– Visual C ++ –リンカーオプション。Microsoft 。/ LARGEADDRESSAWAREオプションは、アプリケーションが2ギガバイトを超えるアドレスを処理できることをリンカに通知します。
^ マット・ピエトレック。「64ビットWindowsシステムのプログラミングを開始するために知っておくべきことすべて」。Microsoft 。
^ クリスセントアマンド。「x64への移行」。Microsoft 。
^ 「Windowsx86-64の44ビット仮想メモリアドレス制限の背後」。
^ 「ゲーム開発者のための64ビットプログラミング」。
^ 「Windowsリリースのメモリ制限」。Microsoft 。
^ Microsoft Developer Network –一般的な移植ガイドライン(64ビットWindowsプログラミング)
^ Microsoft Developer Network –データアクセスロードマップ
^ Anand Lal Shimpi(2013年5月21日)。「XboxOne:ハードウェア分析とPlayStation4との比較」。アナンドテック。
^ 「技術仕様テスト:XboxOne対PlayStation4」。ゲームインフォーマー。2013年5月21日。
^ 「11月のソニーの「プレイステーション5」の発売に期待すること」。インドエクスプレス。2020年8月31日。
^ カトレス、イアン博士。「HotChips2020 Live Blog:Microsoft Xbox Series X System Architecture(6:00 pmPT)」。www.anandtech.com 。
^ ProcessorArchitectureフィールド
^ “用語x86_64の使用法を表示するLinux3.7.8カーネルソースツリーからのサンプルファイル”。2005年9月23日にオリジナルからアーカイブされました。
^ US 6877084
^ US 6889312
^ US 6732258
^ 「AMDとIntel間の特許クロスライセンス契約」。2001年1月1日。2007年6月21日のオリジナルからアーカイブ。
^ 「AMDIntel和解契約」。
^ StephenShanklandおよびJonathanE。Skillings(2009年11月12日)。「IntelはAMDに独占禁止法の和解で12億5000万ドルを支払う」。CNET 。
^ スミス、ライアン(2009年11月12日)。「AMDとIntelは違いを解決する:AMDはファブレスに移行する」。AnandTech。2010年5月13日にオリジナルからアーカイブされました。

外部リンク
AMD開発者ガイド、マニュアル、およびISAドキュメント
x86-64:x86アーキテクチャを64ビットに拡張– AMD64のアーキテクトによるテクニカルトーク(ビデオアーカイブ)、および同じスピーカーによる2番目のトーク(ビデオアーカイブ)
AMDの「強化されたウイルス対策」
IntelはAMD64との完全な互換性のためにEM64Tを微調整します
アナリスト:IntelリバースエンジニアリングAMD64
IntelIA32eとAMD64の違いに関する初期のレポート
64ビットのGNU / Linuxシステムへの移植からアンドレアス・イエガーにより、GCCサミット2003年32ビットから64ビットへの移行のためのほとんどすべての実用的な側面を説明する優れた紙。
Intel64アーキテクチャ
Intelソフトウェアネットワーク:「64ビット」
TurboIRC.COMチュートリアルには、DOSから生の方法で保護モードとロングモードに入る方法の例が含まれています
プログラムを64ビットシステムに移行する7つのステップ
Windowsリリースのメモリ制限”