AMD64
読み:エイエムディーろくじゅうよん
外語:AMD64

 x86命令セットアーキテクチャーを64ビットに拡張した、AMDの64ビットプラットフォーム。「AMD64プラットフォーム」ともいう。
目次

概要

由来
 32ビットだったx86アーキテクチャーIA-32に対し、IntelはIA-64という独自のアーキテクチャーを提供した。Intelは、IA-64との競合を避けるため、x86アーキテクチャーは32ビットに限定する方針とした。
 一方市場は、x86と互換性のある64ビットアーキテクチャーを求めていた。この需要に応えたのが、AMD64アーキテクチャーだった。
 後塵を拝することになったIntelにも、64ビット化の計画はあった。これはもちろんAMD64とは全く互換性が無かったが、OS市場を事実上独占していたMicrosoftはx86の64ビット拡張を一本化することを要求、これによってIntelは先行したAMD64互換の64ビットアーキテクチャーをEM64Tとして採用せざるをえなくなった。EM64Tは、後にIntel 64に改名され、現在に至っている。

変更点
 x86命令とほぼ完全な互換性を維持しながら、命令セットを64ビット化した。
 既存の32ビットレジスターを拡張して64ビットレジスターを実装し、更に汎用レジスターとSSEレジスターを従来の8本から16本へと増設した。従来の拡張はRAXなどとなる他、追加されたレジスターはR8-R15、XMM8-XMM15などとなる。アドレス空間が64ビット化されたため、命令のポインターも64ビット化された。
 但し、FPU/MMXレジスターは変更がなく、従来通り80ビットのレジスターが8本のままである。
 K8系の製品シリーズから導入されている。2003(平成15)年4月23日に発売されたOpteronが初の製品であり、その後、デスクトップ/モバイル用として2003(平成15)年9月にAthlon 64が発表された。

名称
 AMD64という名称が発表される以前は「x86-64テクノロジ」などと呼ばれていた。
 また、プラットホーム自体は、CPUの開発コードネームであるSledgeHammerやClawHammerなどの名で呼ばれていた。
 AMDは、プラットホームは「AMD64プラットフォーム」とし、この技術で使われる命令セットアーキテクチャーx86-64を「AMD64 ISA」とした。

特徴

コンセプト
 IA-32はCISCであり、また8ビットCPUとの互換性も考慮されていたため、独特の設計になっていた。
 AMDは、この独特の設計の改善をもくろんでいた。DEC Alphaの設計者もAMD64の仕様策定に参加しており、64ビットマイクロプロセッサーとして先行していたRISCに似せたアーキテクチャーを導入することにした。

レジスター
 汎用レジスターは、IA-32は8本(EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI)だった。これに更にR8〜R15の8本を追加して16本とした。
 また、各レジスターのビット幅も、32ビットから64ビットへと拡張された。
 IA-32は汎用レジスターの数が少なく、このためコンパイラーによる最適化にも限界がありRISCより不利な点とされていた。16本のレジスターも、RISCと比べると多いとは言えないが、本数が倍になったことで最適化が進み、これによる性能向上も期待されている。
 加えて、128ビット長のXMMレジスターも、従来の8本から16本に増やされた。
 なお、64ビット長のMMXレジスターは、8本のまま変更がない。SSEが主流となった現在では、MMXおよびx87 FPUは、もはや互換性のために残されている存在である。

アドレス空間
 アプリケーションが扱える仮想アドレス空間は従来の32ビットから64ビットに拡張され、64ビットのフラット仮想アドレッシングに対応した。
 IA-32の初期のプロセッサーは物理アドレス空間が32ビットであるため、232バイト=4Giバイトまで扱うことができた。Pentium Pro以降では、物理アドレス拡張機能(PAE)を使うことで物理アドレス空間が36ビットに拡張されたため、64Giバイトまで扱うことができるようになった。
 AMD64でも物理アドレス拡張を使用するが、これを拡張した。64ビットCPUだが、設計仕様上の最大を52ビット、252バイト=4Eiバイト、当面の実装では48ビット、248=256Tiバイトまで扱えるようにしている。

RIP相対アドレッシング
 プログラムカウンター相対アドレッシングに対応した。RIPは、IP/EIPが64ビット化したことに伴い導入された64ビットレジスターである。
 従来も、ジャンプ命令にPC相対は存在したが、データアクセスでは存在しなかった。このアドレッシングを使うことで、データアクセスを完全なリロケータブルにできる。

命令セット
 AMD64プラットフォームの機能を実現するために導入された新たな命令セットをAMD64 ISAという。
 従来のAMDの命令セットと同様、x87 FPUMMX3DNow!Enhanced 3DNow!に対応し、更に、SSESSE2にも対応する。
 SSE/SSE2では8本の128ビットXMMレジスターを使用するが、AMD64ではこれを拡張し、16本にレジスターを増やしている。
 AMDがSSE/SSE2を正式に導入したことで、従来のMMXや3DNow!で提供されていた機能がSSEシリーズで網羅されることになった。x87 FPUやMMX系の従来命令は、既に互換性のためだけに残されたレガシーなものとなっている。実際にMMXの拡張である3DNow!は、後に廃止されている。

再検索