AMD64 【x86-64】 x64
概要
AMD64(x86-64)とは、米AMD社が開発したマイクロプロセッサ(CPU/MPU)の64ビット命令セットで、32ビットのx86系命令セットとの互換性を維持したまま64ビットコードの実行を可能にしたもの。x86は米インテル(Intel)社の8086を源流とするプロセッサ製品シリーズに搭載されてきた命令セットの体系で、i386以降は32ビットに拡張されたものが使用されてきた。同社プロセッサはパソコン向けの標準製品として広く普及し、AMD社ら互換製品メーカーも自社製品にx86を組み込んできた。
AMD64はこれを64ビットに拡張した命令セットで、新たに64ビット用に開発されたソフトウェアは高い性能や拡張性を得られる一方、旧来の32ビットx86プロセッサ向けのコードもそのまま実行することができる。
主な仕様
AMD64では個々の32ビット命令の先頭に特定の識別子(REXプレフィックス)を追加することで、同じ動作の64ビット命令とすることができる。各レジスタも64ビットに拡張され、汎用レジスタが8個から16個に新たに8個追加された。SSE命令などで使われる128ビット長のXMMレジスタも8個から16個に倍増した。
メモリ空間のアドレッシングも32ビットの上限である4GiBから大きく拡張され、48ビットのアドレスを用いることで理論上は一つのプロセスが最大で256TiBまでの単一のメモリ空間を使用できるようになった。
動作モード
動作モードとして64ビットOSを実行するための「Longモード」と、旧来の32ビットOSなどを実行する「Legacyモード」がある。Longモードでは64ビットのソフトウェアを実行できるほか、32ビット互換モードで32ビット向けソフトウェアもそのまま実行できる。これにより、64ビットOS上で新しく64ビット向けに設計されたアプリケーションと古い32ビットのアプリケーションを混在させることができる。
Legacyモードはプロテクトモード、仮想8086モード、リアルモードなど旧来のx86プロセッサの動作モードをサポートし、64ビット機能をオフにして古いx86プロセッサとして振る舞う。古いプロセッサを前提に設計された32ビットOSなどをそのまま実行することができる。
IA-64/Intel 64との関係
AMD64は2000年に「x86-64」の名称で発表され、2003年から順次同社のプロセッサ製品に搭載されていった。x86の開発元である米インテル(Intel)社は当初64ビット命令セットとしてx86とまったく互換性のない新規設計のIA-64を推進しており、高性能なサーバ向けプロセッサなどに搭載していた。
IA-64では従来のx86向けソフトウェアをエミュレーションにより動作させるため極端に性能が落ちる点などが敬遠され、一向に普及が進まなかったため、同社は戦略を転換してAMD64互換の「Intel 64」(発表当初の名称は「EM64T」)命令セットをx86系プロセッサシリーズに搭載するようになった。
AMD64とIntel 64は一部に細かな差異はあるもののほぼ同じ仕様となっており、OSやコンパイラなどが仕様の違いを吸収してくれるため、ソフトウェアの開発者や利用者が違いを意識することはほとんどない。ソフトウェアメーカーなどは両者に同じように対応していることを示すため、どちらの名称も用いず「x64」といった表記を用いる場合もある。