Intel 64

読み:インテル・ろくじゅうよん
外語:Intel 64
品詞:固有名詞

Intelプロセッサの、64ビット技術の一つ。「インテル64」とも書かれる。旧称「EM64T」。

機能概要

Intel 80x86シリーズマイクロプロセッサのうち、i386以降で使用される32ビット機械語命令セットをIA-32という。

これを拡張し、AMD64 ISA(旧称x86-64)互換の64ビット拡張機能が追加された命令セットがIntel 64である。

由来

Intelは64ビット化として従来とは非互換のIA-64を提唱したものの鳴かず飛ばずであった。このためIntelは、開発コードネームYamhill(ヤムヒル)として、極秘でIA-32上位互換の命令セットを開発していた。

しかし、極秘の開発であったにも係わらずその情報は漏れ、Intelはその存在を公表せざるをえなくなる。

また、この技術はAMDに先を越された。Microsoft側から、AMD64と非互換の仕様は受け入れられないという通告があったとする説があり、Intelは開発コードネームはClackamas(クラカマス)として、AMD64互換機能の開発をせざるをえなかったともされる。

かくして、Clackamas、つまりAMD64互換のこの機能は2004(平成16)年2月17日(現地時間)に正式発表された。一時期は「IA-32e」とも呼ばれたが、すぐに改名され「EM64T」に名前が落ち着き、2006(平成18)年7月27日Core 2発表後は更に「Intel 64」を正式名称とした。

対応する製品

Intel 64はXeonのの新CPUコアNocona(ノコナ)、Xeon MP用新CPUコアPotomac(ポトマック)・Cranford(クランフォード)、およびPentium 4の新CPUコアPrescott(プレスコット)から対応されたもので、2004(平成16)年後半に登場した。

この当時のIntel 64対応プロセッサは、周波数の後にFを付けて表示した。

対応する製品に、次のようなものがある(順不同)。

機能の有無判別

Intel 64対応プロセッサにはAMD64と同様にIA32_EFERというレジスタがあり、この有無を調べることでIntel 64対応の有無を知ることができる。但し特権命令を使用する必要があり、一般のアプリケーションでは不可能である。

拡張CPUID対応のプロセッサで、かつEAX=80000001HでCPUIDを実行した結果EDXレジスタのビット20ないしビット29が1であれば、IA32_EFERが存在する。

基本的なコンセプトはAMD64 ISA(旧称x86-64)と同様で、IA-32アーキテクチャに64ビットアドレッシング機能などを搭載したものである。

つまり、設計はIntelではなくAMDであり、Intel 64はAMD設計品の互換品である。

もっとも、Intel 64はAMD64 ISAとは完全互換ではない。しかし新命令の機械語コードや64ビットモードで使えない命令、変更になった機械語コード等の仕様は全く同じであり、実用上は問題がない水準になっている。

特筆すべき点は、これは決して、単に64ビット命令を利用できたり64ビットアドレッシングに対応したりするだけの仕様ではなく、あくまでも「AMD64 ISAの互換品」ということである。3DNow!には当然非対応だが、AMD K6から追加されたAMDの独自命令SYSCALL/SYSRET命令も、Intel 64にはしっかりと実装されている。

仕様の差異は、色々と確認されている。

フラグレジスタ

例えばフラグレジスタの違いがある。

AMD64では他の汎用レジスタと同様に64ビットに拡張され、RFLAGSと呼ばれている。但し上位32ビットは予約扱いで、現在は未使用である。

対してIntel 64では32ビットのままで、名前もEFLAGSのままである。

その他

その他の差異として、次のような点が知られる。

  • IA32_EFERのNXE(No-Execute Enable)ビットが無い
  • CPUID命令(EAX=80000008h)で物理アドレスと仮想アドレスのビット数を得ることができる
  • CMPXCHG8B命令にREXプリフィックスを付けCMPXCHG16B命令として使うことができる(AMD64では未定義のため無効命令となる)
  • Intel 64モードでもSYSENTER/SYSEXIT命令が利用可能

Intel 64に対応するWindowsは、Windows XPの64ビット版以降およびWindows Server 2003(SP1)以降である。

Linuxでは、Red HatがRed Hat Enterprise Linux version 3から対応する。またNovellがSUSE Linux Server 9から対応する。