(Translated by https://www.hiragana.jp/)
x64 - Wikipedia コンテンツにスキップ

x64

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』

x64またはx86-64[注釈ちゅうしゃく 1] とは、x86アーキテクチャを64ビット拡張かくちょうした命令めいれいセットアーキテクチャ

実際じっさいには、AMD発表はっぴょうしたAMD64命令めいれいセット、つづけてインテル採用さいようしたIntel 64命令めいれいセット(かつてIA-32eまたはEM64Tばれていた)などをふくむ、各社かくしゃのAMD64互換ごかん命令めいれいセットの総称そうしょうである。x86命令めいれいセットと互換ごかんせいっていることから、広義こうぎにはx86にx64をふく場合ばあいがある。

なお、インテルはIntel 64のほかIA-64名前なまえで64ビット命令めいれいセットアーキテクチャを開発かいはつ展開てんかいしていたが、これはまったくの別物べつものであり、x64命令めいれいセット、x86命令めいれいセットのいずれとも互換ごかんせいがない。

2023ねん4がつにはIntelが、x64のLegacyモードをてることによりLongモードのみにしてサブセットすることで回路かいろをシンプルにして性能せいのう向上こうじょうするうえで問題もんだいになっているボトルネックを解消かいしょうすることを目標もくひょうにしたX86-S提案ていあん文書ぶんしょ公表こうひょうした[1]。もっとも、構想こうそう発表はっぴょうされただけで、具体ぐたいてき製品せいひんかんする情報じょうほう発表はっぴょうされていない。

2023ねん7がつにはIntelが、x64にr16-r31の16ほんのレジスタを追加ついかすることを中心ちゅうしんとしたAPX発表はっぴょうした[2]。APX対応たいおうのCPUでもx64対応たいおうのアプリケーションやOSは動作どうさするが、ぎゃくにAPX対応たいおうのOSやアプリケーションはx64対応たいおうのCPUでは動作どうさしない。レジスタを追加ついかしたことでレジスタへのロードやレジスタからメモリへのストアの負担ふたんが10%以上いじょうると期待きたいされ性能せいのう向上こうじょうができ、それにたいして回路かいろ追加ついかすくなくてむとされている。そのため、対応たいおうするCPUとOSとコンパイラがあれば、スタックサイズを調整ちょうせいしてリコンパイルするだけで性能せいのう向上こうじょうする。今後こんご、32bitばんのx86が64bitのx64へと推移すいいしていったように、x64からAPXにアーキテクチャをえていくことが計画けいかくされている。開発かいはつ環境かんきょうとしてIntelが開発かいはつエミュレータsde (Software Development Emulator)を提供ていきょうしており、Windowsにかんしては発表はっぴょうであるものの、すでにGCCやLLVM CLangといったコンパイラやLinuxなどでソフトウェアがわ開発かいはつ開始かいしされ、すで初期しょきバージョンでの動作どうさ確認かくにんされている。(LLVM CLangについては、ver.18.1-rc1でAVX10とAPXに対応たいおうしてリリースみ)。すうねん以内いない製品せいひんされる予定よていになっている。

AMD64[編集へんしゅう]

大元おおもとのAMD64は、AMDのOpteronAthlon 64Turion 64など最初さいしょ実装じっそうされたK8マイクロアーキテクチャ[3][4]とその後継こうけい製品せいひんのRyzenなどに実装じっそうされている。

開発かいはつ経緯けいい[編集へんしゅう]

PCようアーキテクチャとしてひろ普及ふきゅうしたx86は、半導体はんどうたい製造せいぞう技術ぎじゅつマイクロアーキテクチャ革新かくしんとともに性能せいのう向上こうじょうつづけ、サーバやワークステーションといったエントリークラスのエンタープライズ市場いちばでもひろれられるにいたった。しかし、IA-32性能せいのう向上こうじょうによって自社じしゃ開発かいはつの64ビットアーキテクチャであるIA-64との競合きょうごう懸念けねんしたインテルは、x86の拡張かくちょうを32ビットアーキテクチャの範囲はんいめてIA-64とのけをはかった。これにたいし、市場いちばからはひろ普及ふきゅうしたIA-32アーキテクチャと互換ごかんせいたもちつつ64ビットに拡張かくちょうした、よりコストパフォーマンスにすぐれたエンタープライズ製品せいひん登場とうじょうのぞまれていた。こう収益しゅうえきのぞめるエンタープライズ市場いちばへの進出しんしゅつはかっていたAMDはそうした需要じゅようこたえて、x86の64ビット拡張かくちょうアーキテクチャとして、従来じゅうらいのIA-32のソフトウェアも利用りよう可能かのう命令めいれいセットとしてx86-64を発表はっぴょうした[5]。その実際じっさい製品せいひん発表はっぴょうでAMD64と改称かいしょうされた[6]。この計画けいかくは、2000ねん8がつ発表はっぴょうされ、最初さいしょのプロセッサは2003ねん4がつ出荷しゅっかされた[3]

仕様しよう[編集へんしゅう]

64ビットの汎用はんようレジスタち、32ビットのx86よりひろアドレス空間くうかんをサポートするため、おおきいデータをより容易よういあつかうことができる。またx64は32ビットのプログラムコードと完全かんぜん後方こうほう互換ごかんせい[7]すべての32ビットの命令めいれいセットが実装じっそうされているため、32ビットのx86実行じっこうファイルは、互換ごかんせいあるいは性能せいのう損失そんしつなしに動作どうささせられる[8]。ただし、アプリケーションソフトウェアがx64の性能せいのうかすには、x64ネイティブコードを出力しゅつりょくするコンパイラをもちいることが必要ひつようである。

アーキテクチャの特徴とくちょう[編集へんしゅう]

AMDがx86命令めいれいセットを64ビットするさい使つかったのは、x86命令めいれい先頭せんとうにプリフィックスをつけるという手法しゅほうである(REXプリフィックスばれる)。プリフィックスを使つかうのは、インテルが16ビットCPU 80286を32ビット(80386)するときに使つかった手法しゅほうでもある。 DEC Alpha設計せっけいしゃ一人ひとり ダーク・メイヤー が AMD64仕様しよう作成さくせいかかわり、かれをはじめとするDEC出身しゅっしんしゃ経験けいけんがこのプロジェクトにかされた。特筆とくひつすべきてん以下いかのようなものである。

レジスタ追加ついか拡張かくちょう
汎用はんようレジスタ (GPR) すうはIA-32の8ほん (EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP) にさらにR8〜R15の8ほん追加ついかして16ほんやされ、かくレジスタのビットはばも32ビットから64ビットに拡張かくちょうされた。IA-32は汎用はんようレジスタがすくないことからコンパイラによる最適さいてき限界げんかいがあり、これがもっとおおきな欠点けってんとされた。AMD64に最適さいてきされたアプリケーションでは、レジスタ本数ほんすう増加ぞうかによって性能せいのう向上こうじょう見込みこまれ、とくふかいループをった演算えんざん主体しゅたいのソフトウェアでその傾向けいこうつよいと見込みこまれる。さらに128ビットのXMMレジスタの本数ほんすうも8ほんから16ほんやされた(Streaming SIMD命令めいれい使つかわれる)。呼出よびだし規約きやくにおいても、引数ひきすうわたしがIA-32では原則げんそくとしてスタックのみを使用しようしていたのが一部いちぶ引数ひきすうについてレジスタわたしに変更へんこうされたり、呼出よびだしさいして一部いちぶのレジスタの上書うわがきを容認ようにんするなど効率こうりつがっている。[9]
アドレス空間くうかん拡張かくちょう
AMD64アーキテクチャでは、初期しょき仕様しようで48ビット(仮想かそうアドレス空間くうかんサイズで256テラバイト)、追加ついか機能きのうで57ビット(仮想かそうアドレス空間くうかんサイズで512ペタバイト)の仮想かそうアドレスはばつ。IA-32アーキテクチャにおいて初期しょきのプロセッサでは、仮想かそうアドレス空間くうかんは32ビットで表現ひょうげんできる4GiBに制約せいやくされ、Pentium Pro以降いこう実装じっそう追加ついかされた物理ぶつりアドレス拡張かくちょう機能きのう使用しようすることで64GiBの物理ぶつりメモリを接続せつぞくできるが、その場合ばあい仮想かそうアドレスはばひろがらず、仮想かそうアドレス空間くうかんはやはり4GiBに制約せいやくされた。32bitばんWindowsシリーズにおいては、OSの仕様しようでアプリケーションが利用りよう可能かのうなメモリはおよそ3GiBに制約せいやくされる[10]。これにたいしAMD64のLongモードでは、IA-32の物理ぶつりアドレス拡張かくちょうをベースに、仮想かそうアドレス空間くうかんをまず48ビットへ拡張かくちょうし(現状げんじょう物理ぶつりアドレス空間くうかんは52ビット)、将来しょうらい拡張かくちょうで4エクサバイトまでの仮想かそうアドレス空間くうかんをサポートできるようになっている。
関連かんれん2しん接頭せっとう
RIP相対そうたいデータアクセス
プログラムカウンタ (RIP) 相対そうたいでデータにアクセスすることができ、リロケータブル共有きょうゆうライブラリのコードを作成さくせいできる。また、共有きょうゆうライブラリを仮想かそうアドレス空間くうかんのどこにでも配置はいちすることができる(位置いち独立どくりつコード)。
SSE 命令めいれい
AMD64アーキテクチャでは明確めいかくにインテルのSSESSE2基本きほん命令めいれいセットにんでいる。SSE2はx87の80ビット浮動ふどう小数点しょうすうてんすうから 32ビット/64ビットの浮動ふどう小数点しょうすうてんすうえたものである。SSE/SSE2命令めいれいセットは追加ついかの8ほんのXMMレジスタをあつかえるように拡張かくちょうされた。SSEとSSE2がAMD64命令めいれいセットにまれており、それが従来じゅうらいのx87 FPUMMX3DNow!機能きのうをカバーする。x64はんWindowsでの64ビットプログラムでは、FPU/MMXレジスタをコンテキストスイッチさい保存ほぞんしないようにするとうわさされたが、実際じっさいには保存ほぞんされるようになっている[11]
No-Executeビット
NXビット(ページテーブルエントリのビット63)は仮想かそうアドレス空間くうかんのどのページが実行じっこう可能かのうか、実行じっこう不可ふかかを指定していすることができる。NXビットがセットされたページにあるコードを実行じっこうしようとするとメモリアクセス違反いはんとなり、実行じっこうできない。これは、リードオンリーページへのみを実行じっこうしようとしてもできないこととている。No-Execute機能きのうは、ウイルスなどがバッファーオーバランなどを使用しようして、オペレーティングシステムをろうとすることをむずかしくする。
類似るいじ機能きのうは、セグメントの属性ぞくせいとして80286以降いこうのプロセッサーに存在そんざいしている。しかし、近代きんだいてきなオペレーティングシステムではセグメント機能きのうふるいものとなされ、セグメントのベースを0、リミットを4Gバイト(32ビットOSの場合ばあい)に設定せっていすることにより、実質じっしつてきにセグメントを使用しようしていない。
AMDはリニアアドレッシングモードでNo-Execute機能きのう実装じっそうした最初さいしょのx86ベンダーである。No-Execute機能きのうは、PAEを有効ゆうこうにすれば、32ビットOSでも使用しよう可能かのうである。
ふる機能きのう削除さくじょ
x86アーキテクチャーにあるおおくのシステムプログラミング機能きのう近代きんだいてきなオペレーティングシステムでは使用しようされておらず、それらふる機能きのうは、AMD64のLongモードにはない。それらは、セグメントアドレッシング、タスクステートセグメント使用しようしたタスクスイッチ、仮想かそう86モードなどである(ただし、FS, GSセグメントは、オペレーティングシステム構造こうぞうたいへのエクストラベースポインタとしてのこされている)。これらのふる機能きのうは、Legacyモードでは依然いぜんとして、完全かんぜん実装じっそうされているので、これまでの32ビット、16ビットオペレーティングシステムは、修正しゅうせいなしにx64プロセッサーじょう動作どうさする。

動作どうさモード[編集へんしゅう]

動作どうさモード 必要ひつようOS さいコンパイルの必要ひつようせい アドレスサイズの既定きてい オペランドサイズの既定きてい レジスタの拡張かくちょう 典型てんけいてき汎用はんようレジスタのはば
Longモード 64ビット モード あたらしい 64ビットOS 必要ひつよう 64 32 64
互換ごかんモード 不要ふよう 32 32 なし 32
16 16 16
Legacyモード プロテクト モード 従来じゅうらいの 16/32ビットOS 不要ふよう 32 32 なし 32
16 16
仮想かそう8086 モード 16 16 16
リアル モード 従来じゅうらいの 16ビットOS

このアーキテクチャは、LongモードとLegacyモードというふたつの動作どうさモードをつ。

Longモード[編集へんしゅう]

AMD64で拡張かくちょうされた部分ぶぶん対応たいおうする動作どうさモードである。これにはネイティブの64ビットモードと互換ごかんのための32ビットモードがふくまれる。IA-32でのマイナーな動作どうさモードはサポートされない。このモードは64ビットのOSで使用しようされる。

基本きほんてき命令めいれいセットはおなじなので、x86コードを実行じっこうしても性能せいのう低下ていかすることはない。インテルのIA-64では32ビットコードの性能せいのう低下ていか問題もんだいとなったが、これは命令めいれいセットがまったちがうためにエミュレート実行じっこうしていたためである。

Longモードを使つかうと、64ビットOSは 32ビットアプリケーションと64ビットアプリケーションを並行へいこうして実行じっこうできる。また、AMD64は 16ビットのアプリケーションも実行じっこうすることができる。しかし、Windowsの16ビットアプリケーション (Win16) のサポートにかせない仮想かそう86モードは使用しようできないため、マイクロソフトは WOW64サブシステムでの16ビットアプリケーションの実行じっこう機能きのう実装じっそう断念だんねんし、Windows XP Professional x64 Edition でのWin16アプリケーション実行じっこうをサポートしていない。これはWindows Vista以降いこうのx64はんにもがれる制限せいげんとなっている。

Legacyモード[編集へんしゅう]

このモードは、16ビットOS(MS-DOS - Windows 3.1ひとし)や32ビットOS(Windows 95 - Windows XPとう)で使用しようされる。このモードにおいて、プロセッサは基本きほんてきにx86の32ビットプロセッサとしてい、16ビットと32ビットのコードのみが実行じっこう可能かのうである。Legacyモードは、仮想かそうアドレス空間くうかんの4GB制限せいげんのような32ビットの仮想かそうアドレッシングじょう上限じょうげんがある[7]。64ビットのプログラムは、Legacyモードで起動きどうすることができない。

AMD64を採用さいようするCPU[編集へんしゅう]

つぎのプロセッサは、AMD64を実装じっそうする:

Intel 64[編集へんしゅう]

Intel 64は、IA-32アーキテクチャの64ビット拡張かくちょうであり、インテルによるAMD64の実装じっそうである。

開発かいはつ経緯けいい[編集へんしゅう]

従来じゅうらい、AMDはインテルがオリジナルであるx86の互換ごかんプロセッサを開発かいはつ生産せいさんしていた。しかし、x64では立場たちば逆転ぎゃくてんし、インテルはAMDが開発かいはつしたAMD64アーキテクチャ(x86プロセッサの64ビット拡張かくちょうアーキテクチャ)を採用さいようした。

当初とうしょプロジェクトは、Yamhill[12]という開発かいはつコードネームはじまった。このプロジェクトの存在そんざい否定ひていつづけてすうねんち、2004ねん2がつIDFで、インテルはプロジェクトが進行しんこうちゅうであることを発表はっぴょうした。インテルの当時とうじ会長かいちょうクレイグ・バレットは、これが重要じゅうよう機密きみつひとつであったことをみとめた[13][14]

インテルは、AMD64互換ごかん命令めいれいセットの名称めいしょうすうかい 変更へんこうした。IDFもちいられた名前なまえCT(Clackamas Technology[15])、そのすう週間しゅうかんIA-32e(IA-32 extensions)と呼称こしょう変更へんこうし、2004ねん4がつにはこれを EM64T(Extended Memory 64 Technology)という名前なまえ公式こうしき発表はっぴょうした。製品せいひんリリースの2006ねん7がつ27にちには、インテルはEM64TをIntel 64改称かいしょうしている[16]

Intel 64を採用さいようするCPU[編集へんしゅう]

インテルで最初さいしょにIntel 64を実装じっそうしたのは、Noconaというコードめいで2004ねん6がつ発表はっぴょうされたマルチソケットのXeonプロセッサである。XeonはデスクトップPentium 4 をベースにしているため、どう時期じきのPentium 4もIntel 64を実装じっそうしているはずだが、ハイパースレッディング・テクノロジーのときと同様どうよう、この機能きのうPrescottでは最初さいしょうごかないようになっていた。これはおそらく初期しょき実装じっそう完全かんぜんではなかったためで、インテルはそのIntel 64を使用しよう可能かのうにしたPrescottのE0バージョンをmodel Fとして販売はんばいはじめた。このバージョンではAMD64のNXビット相当そうとうする機能きのうがIntel 64でサポートされた。インテルではこれをeXecute Disable(XD)ビットとんでいる。この機能きのうはすぐにNocona(Xeon系列けいれつ)にも実装じっそうされた。8xx/6xx/5x6/5x1/3x6/3x1シリーズのCPUはすべてIntel 64が使用しよう可能かのうになった。また、Intel Core 2Intel AtomでもIntel 64が採用さいようされた。

Intel 64を実装じっそうしているCPUは以下いかのものがある。

AMD64とIntel 64の差異さい[編集へんしゅう]

AMD64とIntel 64は、ほとんどおなじである[17]が、わずかながらちがいはある。これらのちがいはオペレーティングシステム、コンパイラなどの開発かいはつしゃのみが意識いしきしなければならない。アプリケーションプログラムの開発かいはつしゃがこれらのちがいを意識いしきする必要ひつようは、ほぼない[18]

差異さい[編集へんしゅう]

  • Intel 64では、SYSCALL, SYSRET命令めいれいは64ビットモードにしかない。SYSENTER, SYSEXIT命令めいれいは32ビット、64ビットの両方りょうほうにある。
  • AMD64では、SYSCALL, SYSRET命令めいれいは32ビット、64ビットの両方りょうほうにあるが、SYSENTER, SYSEXIT命令めいれいは32ビットモードにしかない。
  • Intel 64には、AMD64で定義ていぎされたSYSCFG, TOP_MEM, TOP_MEM2がMSR(model-specific registers)にない。
  • Intel 64では、64ビットモードでニア分岐ぶんき命令めいれいに66h(オペランドサイズ プリフィックス)をけた場合ばあいサポートがいとなる。AMD64では、仕様しようしょどおり16ビットオペランドとして実行じっこうされる。
  • BSF, BSR命令めいれいはソースが0の場合ばあい、Intel 64では元々もともとのx86と同様どうようにデスティネーションは不定ふてい(undefined)であるが、AMD64はデスティネーションを変更へんこうしない。
  • ハードウェア仮想かそう支援しえん機能きのうのIntel VT-xとAMD-Vは互換ごかんせいがない。仮想かそうソフトウェアはそれぞれに対応たいおうする必要ひつようがある。
  • Second Level Address Translation機能きのうのIntel EPTとAMD RVIは互換ごかんせいがない。仮想かそうソフトウェアはそれぞれに対応たいおうする必要ひつようがある。

以前いぜんあった差異さい[編集へんしゅう]

  • AMD64には、元々もともとはCMPXCHG16B命令めいれいはなかった。この命令めいれいは16バイト(128ビット)のメモリ領域りょういき複数ふくすうのCPUコアで排他はいたてき共有きょうゆうすることに使用しようされる。この命令めいれいはWindowsで16TB以上いじょう仮想かそうメモリを使つかうために必要ひつようである。Socket AM2以降いこうのAMD64で対応たいおう[19]
  • 初期しょきのAMD64, Intel 64は、64ビットモードでLAHF, SAHF命令めいれいをサポートしていない。この2つの命令めいれいはAHレジスタとフラグあいだ転送てんそう命令めいれいで、元々もともとは8ビットCPUである8080のプログラムを8086移植いしょくするのを容易よういにするために提供ていきょうされていた[20]。64ビットモードでは、使つかみちがあまりない命令めいれいのようにえる。しかし、PUSH/POP命令めいれいわせと比較ひかくして、メモリにアクセスせず高速こうそくにフラグをコピーできるため、VMwareなどの仮想かそうソフトウェアがこの2つの命令めいれい依存いぞんしている[21]。また、x87のステータスワードをフラグにコピーすることにも使用しようされる。
  • 初期しょきのIntel 64には、PREFETCHW命令めいれいはなかった[22]。この命令めいれいは、元々もともとはAMDの3DNow!導入どうにゅうされたキャッシュの最適さいてき命令めいれいである。Pentium 4のCedarMillコアからIntel 64はこの命令めいれいたんにNOP(No Operation)として処理しょりするようになった[23]。NOPとして処理しょりするIntel 64でもMicrosoftしゃのCoreinfoツール[24]は、PREFETCHWに対応たいおう表示ひょうじする。2013ねんSilvermont、2014ねんBroadwellよりPREFETCHW命令めいれい正式せいしき対応たいおうしている。
    上記じょうき3つは、Windows 8.1Windows 10の64ビットばん初期しょきのAMD64、Intel 64CPUにインストールできない制約せいやく事項じこうとなる[25][26]
  • 初期しょきのIntel 64は、XDビット(AMD64におけるNXビット)をサポートしていない。したがってWindows 8(32ビットばん、64ビットばんとも)がインストールできない制約せいやく事項じこうとなる。

その[編集へんしゅう]

  • POPFQ命令めいれいには、REXプリフィックスは必要ひつようない。Intelしゃのドキュメントにはこのことがただしく記載きさいされていなかった。
  • おなじオペコードにたいするMOVDとMOVQのてがIntel 64のドキュメントとAMD64のドキュメントでことなる。一方いっぽうのドキュメントどおりのアセンブリソースがアセンブルできない[27]ぎゃくアセンブル結果けっか想定そうていことなる[28]といったことがこりる。

命令めいれいセット[編集へんしゅう]

REXプリフィックス
つぎのような命令めいれいにはREXプリフィックスを使用しようする。
  • 64ビットのオペランドサイズの指定してい
  • あたらしいR8〜R15レジスタ、追加ついかされたXMMレジスタなどへのアクセス
  • 64ビットレジスタであるRSP, RBP, RDI, RSIのビット0から7を、8ビットレジスタSPL, BPL, DIL, SILとしてアクセス。一方いっぽうでREXプリフィックスをけると8ビットレジスタとして AH, BH, CH, DHにアクセスできない。これにより直交ちょっこうせいたかまった。
また、以下いか命令めいれいは、デフォルトで64ビットのオペランドサイズであり、REXプリフィックスを必要ひつようとしない。
  • ニア分岐ぶんき命令めいれい
  • PUSH, POP命令めいれい
  • ENTER, LEAVE命令めいれい
暗黙あんもくのゼロ拡張かくちょう
32ビットレジスタにデータをむとその汎用はんようレジスタの上位じょうい32ビット(ビット32から63)はゼロになる。
これは、コードサイズの最適さいてき使用しようできる。
一方いっぽう、16ビットレジスタや8ビットレジスタにデータをんでも、このゼロ拡張かくちょうきない。
NOP(No Operation:オペコード 90h)命令めいれいは、かつてはXCHG EAX, EAXと等価とうかであったが[29]64ビットモードではこの命令めいれい特別とくべつあつかい、暗黙あんもくのゼロ拡張かくちょう適用てきようせずRAXレジスタは変化へんかしない。
CMOV(Conditional Move)命令めいれいでは、64ビットモードでオペランドが32ビットの場合ばあい条件じょうけんにせでもデスティネーションレジスタの上位じょうい32ビットはゼロになる。
即値そくち
64ビットモードであっても、即値そくち(Immediate value)は、32ビットのままであり、64ビットに符号ふごう拡張かくちょうされて使用しようされる。ただし、MOV命令めいれいのみ64ビットの即値そくち使用しようできる。
変位へんい
64ビットモードであっても、変位へんい(displacement)は、32ビットのままであり、64ビットに符号ふごう拡張かくちょうされて使用しようされる。ただし、RAXレジスタにたいしてのMOV命令めいれいのみ64ビットの変位へんい使用しようできる。
64ビットモードで廃止はいしされたx86命令めいれい
以下いかのx86命令めいれいは64ビットモードでは廃止はいしされたため、64ビットモードで実行じっこうすると不正ふせい命令めいれい例外れいがい発生はっせいする。
  • AAA, AAD, AAM, AAS (ASCII Adjust Addtion/Division/Multiply/Subtraction)
  • BOUND (Check Array Bounds)
  • CALL far, JMP far (Call far absolute, JMP far absolute)
  • DAA, DAS (Decimal Adjust Addition/Subtraction)
  • INTO (Interrupt to Overflow Vector)
  • LDS, LES (Load Segment Register)
  • POP DS, POP ES, POP SS, POPA
  • PUSH CS, PUSH DS, PUSH, ES, PUSH SS, PUSHA
  • オペコード 82h (Redundant encoding of opcode 80h: undocumented)
  • SALC (Set AL According to CF: undocumented)
LAHF, SAHF命令めいれいは、初期しょきのAMD64, Intel 64では64ビットモードで廃止はいしされたx86命令めいれいであった。
64ビットモードで再割さいわてされたx86命令めいれい
  • ARPL (Adjust Requestor Privilege Level)命令めいれいは、64ビットモードでは、あたらしいMOVSXD命令めいれいになった。
  • 1バイトのINC, DEC命令めいれいは、64ビットモードでは、REXプリフィックスになった。一方いっぽう、2バイトのINC, DEC命令めいれいは、64ビットモードでも使用しよう可能かのうである。
  • 64ビットモードで廃止はいしされたLDS, LES命令めいれいは、のちにインテルによってAVX命令めいれいのVEXプリフィックスとしててられた。VEXプリフィックスにつづく2バイトを32ビットモードでは不正ふせいであった11xxxxxxという形式けいしきにすることにより、AVX命令めいれいは32ビットモードでも使用しよう可能かのうである。Windows NTの仮想かそうDOSマシンでは、C4h C4h(LES AX, SPとデコードされる不正ふせい命令めいれい)を仮想かそう86モードから32ビットプロテクトモードのしに使用しようしていた[30]。AVXは仮想かそう86モード、リアルモードには対応たいおうしていない。
  • 64ビットモードで廃止はいしされたBOUND命令めいれいは、のちにインテルによってAVX-512命令めいれいのEVEXプリフィックスとしててられた。EVEXプリフィックスにつづく2バイトを32ビットモードでは不正ふせいであった11xxxxxxという形式けいしきにすることにより、AVX-512命令めいれいは32ビットモードでも使用しよう可能かのうである。

メモリ管理かんり[編集へんしゅう]

コードセグメントディスクリプタ
64ビットモードでは、コードセグメントディスクリプタのP(Present)ビット、D(Default)ビット、DPL(Descriptor Privilege Level)フィールド、C(Conforming)ビット、および、あたらしく定義ていぎされたL(Long)ビットのみが有効ゆうこうである。L=1の場合ばあい、64ビットモードでプロセッサーが動作どうさすることを意味いみする。それ以外いがいのベースアドレス、リミットなどは無視むしされる。

 コードセグメントディスクリプタのフォーマット

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ベースアドレス[31:24] G D L AVL リミット[19:16]
P DPL S=1 E=1 C R A ベースアドレス[23:16]
ベースアドレス[15:0]
リミット[15:0]
データセグメントディスクリプタ
64ビットモードでは、データセグメントディスクリプタは、P(Present)ビットのみが有効ゆうこうである。それ以外いがいのベースアドレス、リミットなどは無視むしされる。ただし、FS,GSセグメントレジスタのみベースアドレスは有効ゆうこうで、MSRを使用しようして64ビットのベースアドレスを指定していすることもできる。
のちにインテルは、特権とっけんレベル0以外いがいでもFS,GSのベースアドレスを操作そうさ可能かのうにするRDFSBASE, RDGSBASE, WRFSBASE, WRGSBASE命令めいれい追加ついかした。

 データセグメントディスクリプタのフォーマット

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ベースアドレス[31:24] G D 0 AVL リミット[19:16]
P DPL S=1 E=0 ED W A ベースアドレス[23:16]
ベースアドレス[15:0]
リミット[15:0]
正規せいきがた(canonical form)
64ビットモードでは、仮想かそうアドレスは64ビットであるものの、実際じっさい実装じっそうでは、264バイト(16EB)のすべてを使用しようできるようにはなっていない。ほとんどのオペレーティングシステム、アプリケーションは、ちか将来しょうらいふくめて、そのようなおおきなアドレス空間くうかん使用しようしない。フル64ビットというおおきなアドレス空間くうかんのサポートは、複雑ふくざつさとアドレス変換へんかんのコストをやすだけでメリットはない。そのため、AMDは最初さいしょのAMD64の実装じっそうでは、48ビットの仮想かそうアドレス空間くうかんのみを使用しようすることにした。さらに仮想かそうアドレスのビット48から63は、符号ふごう拡張かくちょうによりビット47のがコピーされなければならないことにした。そうでない仮想かそうアドレスを使用しようした場合ばあいは、プロセッサーは例外れいがいエラーを発生はっせいする。このルールにしたがったアドレスは、正規せいきがた(canonical form)とばれる。正規せいきがたのアドレスは、0から00007FFF'FFFFFFFFとFFFF8000'00000000からFFFFFFFF'FFFFFFFFの範囲はんいであり、合計ごうけいで256TBの仮想かそうアドレス空間くうかん使用しよう可能かのうである。
この仕様しようは、実際じっさいに64ビット仮想かそうアドレスが使用しよう可能かのうになったときに重要じゅうよう意味いみつ。正規せいきがたではないアドレスを使用しようした場合ばあい例外れいがいエラーが発生はっせいするので、アプリケーションやOSが、使用しよう上位じょうい16ビットをべつ用途ようと使用しようできない。そのため、将来しょうらい仮想かそうアドレス空間くうかんが48ビットから拡張かくちょうされたときに問題もんだいこらない[31][32]
2020ねんごろまでに、追加ついか機能きのうとして仮想かそうアドレスにたいしてはじめてとなる9ビットの拡張かくちょうおこなわれ、57ビットまでの仮想かそうアドレスが使用しようできるようになった。[33]仮想かそうアドレス空間くうかんのサイズは512PBとなる。ビット57-63はつづ使用しようとなり、正規せいきがた仮想かそうアドレスではビット56からの符号ふごう拡張かくちょう必要ひつようとなる。
Longモードでのページ変換へんかん(page translation)
Longモードでのページ変換へんかんには物理ぶつりアドレス拡張かくちょう(PAE)が必須ひっすである。LongモードにはいまえにCR4のPAEビットを1にセットする必要ひつようがある。AMD64では、PDPE(page-directory-pointer entry), PDE(page-directory entry), PTE(page-table entry)を拡張かくちょうし、あらたにPML4(page-map level-4)を追加ついかした。いずれのページテーブルも、仮想かそうアドレスのうち9ビットぶん変換へんかんする。PAEが有効ゆうこうになっているため、CR4のPSE(page-size extensions)ビットは無視むしされる。CPUIDのファンクション8000_0001hで、EDXのビット26がセットされていると、そのCPUは、1Gbyteページ変換へんかん対応たいおうしている。
仮想かそうアドレスの57ビットへの拡張かくちょうさいしては、PML4のさらに上位じょういにPML5(page-map level-5)を追加ついかした。ページテーブルのビットはばのページテーブルとおなじく9ビットぶんとなる。なお、これにともなうページサイズの追加ついかおよび変更へんこうはない。
4Kbyteページ変換へんかん: PML5(*), PML4, PDPE, PDE, PTEによって変換へんかんされる。ページのサイズは4Kbyteである。
2Mbyteページ変換へんかん: PML5(*), PML4, PDPE, PDEによって変換へんかんされる。ページのサイズは2Mbyteである。
1Gbyteページ変換へんかん(*): PML5(*), PML4, PDPEによって変換へんかんされる。ページのサイズは1Gbyteである。
(*) CPUがサポートしている場合ばあいにのみ使用しよう可能かのう

特権とっけんレベル[編集へんしゅう]

特権とっけんレベルは80286のプロテクトモードでx86に導入どうにゅうされ、レベル0,レベル1,レベル2,レベル3の4階層かいそうがある。リングプロテクションともばれる。x64の64ビットモードでも特権とっけんレベルは4階層かいそうあるが、通常つうじょう特権とっけんレベル0(カーネルモード)と特権とっけんレベル3(ユーザーモード)の2種類しゅるいしか使用しようされない。

コールゲートによるシステムコール(CALL far, RET)
コールゲートは80286で特権とっけんレベル(0,1,2,3)をえる仕組しくみとして導入どうにゅうされた。64ビットモードでは、コールゲートは64bitのオフセットが使用しようできるように拡張かくちょうされた。
コールゲートの仕組しくみはRISCにはい。RISCにも対応たいおうしていたWindows NTではシステムコールにコールゲートを使用しようせず、INT命令めいれいPentium II追加ついかされたSYSENTER, SYSEXIT命令めいれい使用しようしていた。
高速こうそくシステムコール(SYSCALL, SYSRET)
特権とっけんレベル3(ユーザーモード)と特権とっけんレベル0(カーネルモード)を高速こうそくえる命令めいれいとして、AMDは64ビットモードではx86にあるSYSENTER, SYSEXIT命令めいれい実装じっそうせず、AMD独自どくじのSYSCALL, SYSRET命令めいれいのみを実装じっそうした。SYSCALL命令めいれいは、CS(コードセグメント), SS(スタックセグメント), RIP(インストラクションポインタ)をあらかじめセットされたMSRから特権とっけんレベルのチェックしにロードする。このときRSP(スタックポインタ)はロードされない。オペレーティングシステムはあたらしいSWAPGS命令めいれい使用しようして、ユーザーモードのGSセグメントと、カーネルモードのGSセグメントをえ、GSセグメント経由けいゆでカーネルモードのRSPをロードする。
なお、SYSCALLのオペコードは0Fh 05h、SYSRETのオペコードは0Fh 07hであり、これらはかつてx86に存在そんざいしていた非公開ひこうかい命令めいれいLOADALLのオペコードを再割さいわてしている。

マイクロアーキテクチャの世代せだい[編集へんしゅう]

機能きのう拡張かくちょうによりマイクロアーキテクチャの世代せだいけてかんがえる必要ひつようがある場合ばあいがある。2020 ねんには、AMD、Intel、Red Hat、SUSE のコラボレーションにより、x86-64 ベースラインのうえに x86-64-v2、x86-64-v3、x86-64-v4 の 3 つのマイクロアーキテクチャ レベル (機能きのうレベル) が定義ていぎされた。

CPU microarchitecture levels
Level CPU features Example instruction Supported processors
x86-64
(x86-64-v1)
CMOV cmov

2003ねんごろ初期しょきのAMD K8以降いこうなど
すべてのx86-64 CPU

CX8 cmpxchg8b
FPU fld
FXSR fxsave
MMX emms
OSFXSR fxsave
SCE syscall
SSE cvtss2si
SSE2 cvtpi2pd
x86-64-v2 CMPXCHG16B cmpxchg16b

おもに2008ねんごろのIntel Nehalem世代せだい以降いこう
Intel Nehalem and newer Intel "big" cores
Intel (Atom) Silvermont and newer Intel "small" cores
AMD Bulldozer and newer AMD "big" cores
AMD Jaguar
VIA Nano and Eden "C"

LAHF-SAHF lahf
POPCNT popcnt
SSE3 addsubpd
SSE4_1 blendpd
SSE4_2 pcmpestri
SSSE3 pshufb
x86-64-v3 AVX vzeroall

おもに2013ねんごろのIntel Haswell世代せだい以降いこう
Intel Haswell以降いこう
Intel (Atom) Gracemont以降いこう
AMD Excavator以降いこう

AVX2 vpermd
BMI1 andn
BMI2 bzhi
F16C vcvtph2ps
FMA vfmadd132pd
LZCNT lzcnt
MOVBE movbe
OSXSAVE xgetbv
x86-64-v4 AVX512F kmovw

おもに2017ねんごろのIntel Intel Skylake-X世代せだい以降いこうでAVX512が有効ゆうこう場合ばあい
Intel Skylake以降いこう
AMD Zen 4 以降いこう

AVX512BW vdbpsadbw
AVX512CD vplzcntd
AVX512DQ vpmullq
AVX512VL N/A

オペレーティングシステムの互換ごかんせいあつか[編集へんしゅう]

つぎのオペレーティングシステムは、x64アーキテクチャのLongモードをサポートする。

BSD[編集へんしゅう]

FreeBSD[編集へんしゅう]

FreeBSDは、2003ねん6がつの5.1-RELEASEで実験じっけんてきなアーキテクチャーとして、amd64という名前なまえでx64をサポートした。2004ねん1がつの5.2-RELEASEでは公式こうしきなアーキテクチャーとして対応たいおうした。それ以来いらい、FreeBSDでは、amd64をTier 1プラットフォームとしている。

NetBSD[編集へんしゅう]

x64アーキテクチャーのサポートは2001ねん6がつ19にちにNetBSDのソースツリーにはじめてコミットされた。2004ねん12月9にちにリリースされたNetBSD 2.0では、NetBSD/amd64としてソースツリーに完全かんぜん統合とうごうされ、公式こうしきなポートになった。32ビットのシステムコールのためのnetbsd-32カーネル互換ごかんレイヤーをとおして、64ビットモードでの32ビットコードの実行じっこうがサポートされている。 NXビットは、実行じっこう不可ふかのスタックとヒープを提供ていきょうするために、使用しようされている。

OpenBSD[編集へんしゅう]

OpenBSDは2004ねん5がつ1にちにリリースされたOpenBSD 3.5でAMD64をサポートした。ソースツリーないでのAMD64サポートの完全かんぜん実装じっそうは、実際じっさいのAMD64のハードウェアのリリースよりまえおこなわれていた。これはhackathonプロジェクトのためにAMDがいくつかのハードウェアをしたためである。OpenBSDの開発かいはつしゃは、W^X (Write XOR Execute)[34] 機能きのう容易ようい実装じっそうできるNXビットがあるため、AMD64プラットフォームをった。 OpenBSDのAMD64ポートは、Intel 64でもはしる。しかし、初期しょきのIntel 64にはNXビットがないため、これらのIntelのCPUではW^X機能きのう使つかえない。のちにIntelはXDビットの名前なまえで、NXビットを追加ついかしている。

Linux[編集へんしゅう]

LinuxはLongモードでx64アーキテクチャを動作どうささせるはじめてのオペレーティングシステム・カーネルとなった。これは、実際じっさいのAMD64のハードウェアのリリースよりまえの2001ねん、kernel 2.4にてはじめられた。Linuxは32ビット実行じっこう可能かのうファイルの実行じっこうかんして後方こうほう互換ごかんたもっている。これにより、32ビットプログラムの使用しよう継続けいぞくしながらLongモードようにプログラムをさいコンパイルすることが可能かのうになった。

64ビットばんLinuxでは、個々ここのプロセスで128TBの仮想かそうアドレス空間くうかんと64TBの物理ぶつりメモリが使用しようできる。(ただし、これは、CPUやPCシステムにより制限せいげんされる)

Mac OS X[編集へんしゅう]

Mac OS X v10.4のうちv10.4.7およびそれ以降いこうのバージョンは、64ビットのインテルベースマシンじょうでPOSIXおよ数学すうがくライブラリをもちいて64ビットコマンドラインツールが起動きどうする。Mac OS X v10.4において、これ以外いがいのライブラリ、フレームワークは、64ビットアプリケーションをサポートしない。このカーネル、およびカーネル拡張かくちょうは32ビットのみである。

Mac OS X v10.5は、64ビットのPowerPCマシン同様どうように、64ビットのインテルベース・マシンにおいてCocoa, Quartz, OpenGL, そしてX11をもちいた64ビットのGUIアプリケーションをサポートした。すべてのGUIライブラリとフレームワークは、このプラットフォームで64ビットアプリケーションをサポートしている。このカーネル、そしてすべてのカーネル拡張かくちょうは、32ビットのみである。

Mac OS X v10.6は、64ビットカーネルをサポートしたMac OS Xの最初さいしょのバージョンである。しかし、最初さいしょのリリース(v10.6.0)では、すべての64ビットコンピュータがサポートされたわけではなかった。64ビットカーネルは、32ビットカーネル同様どうように32ビットアプリケーションをサポートし、それぞれのカーネルも同様どうように64ビットアプリケーションをサポートした。32ビットアプリケーションは、いずれのカーネルにおいても仮想かそうアドレス空間くうかんが4GBであるという制限せいげんがあった。 64ビットカーネルは32ビットカーネル拡張かくちょうをサポートせず、同様どうように32ビットカーネルは64ビットカーネル拡張かくちょうをサポートしない。

OS X Mountain Lionは、64ビットカーネルのみサポートするが、32ビット、64ビットの両方りょうほうのアプリケーションをサポートする。

Macは、x86/x64の32ビット・64ビットだけでなく、PowerPCとインテル・アーキテクチャのサポートなど、アーキテクチャの互換ごかんせい問題もんだい複雑ふくざつんでいたため、ユーザが混乱こんらんしないためにOSレベルでユニバーサルバイナリなどの仕組しくみがととのえられた。これは、ひとつのアプリケーションファイル、またはライブラリファイルにたいして複数ふくすうのコードをパッケージし、実行じっこう最適さいてきなバージョンが選択せんたくされるというものである。

Windows[編集へんしゅう]

Microsoft Windowsは、2005ねん4がつ日本にっぽんにおいては6がつ)にWindows XP Professional x64 Edition(クライアントばん)[35]Windows Server 2003 x64 Editionをリリースし、x64に対応たいおうした。元来がんらいのx86はんにおいて、Windows XP の内部ないぶバージョンは 5.1.2600、Windows Server は 5.2.3790 であったが、x64 はんにおいてはビルド番号ばんごう同一どういつであり(5.2.3790.1830 SP1)、システムアップデートも統一とういつされた。

Windows Vistaは2007ねん1がつに、Windows 7は2009ねん7がつに、Windows 8は2012ねん10がつにリリースされた。いずれのOSも、x86 にくわえて、64ビット(x64) ばんとしてx64をサポートするが、Itanium をサポートしない。

Windows Server 2008は2008ねん2がつにリリースされ、x86 はん、x64 はんくわえて、IA-64Itaniumはんとしてサポートした。Windows Server 2008 R2では x86 はんのリリースがられ、x64 はんと Itanium ばんのみリリースした。Itanium ばんはこのはん最終さいしゅうリリースとなり、Windows Server 2012 では x64 はんだけがリリースされた。

x64はんWindowsには以下いかのような機能きのうがある。

  • 1プロセスあたり8TB(Windows 8まで)または128TB(Windows 8.1以降いこう)のユーザーモード仮想かそうアドレス空間くうかん。x64のプログラムは、"large address aware"オプションをけてリンクされていれば、これらのすべてを使用しようできる。ただし、補助ほじょ記憶きおく装置そうち(すなわち、ハードディスク)の容量ようりょうにより使用しようできる最大さいだいは、制限せいげんされる。一方いっぽう、32ビットばんWindowsで提供ていきょうされているユーザーモード仮想かそうアドレス空間くうかんは2GBである。
  • オペレーティングシステムようの8TB(Windows 8まで)または128TB(Windows 8.1以降いこう)のカーネルモード仮想かそうアドレス空間くうかん一方いっぽう、32ビットばんWindowsで提供ていきょうされているカーネルモードアドレス空間くうかんは2GBである。この増加ぞうかした空間くうかんのメリットは、ファイルシステムのキャッシュやカーネルモードヒープに使用しようできる。Windows 8までのWindowsはプロセッサーで実装じっそうされている256TBのアドレス空間くうかんのうち合計ごうけい16TBしか使用しようできない。これは、初期しょきのAMD64がCMPXCHG16B命令めいれいをサポートしていないためである[36]
  • WOW64を使用しようして、既存きそんの32ビットアプリケーション(.exeプログラム)とダイナミックリンクライブラリ(.dll)を実行じっこうする機能きのう。さらに、32ビットアプリケーションが"large address aware"オプションをけてリンクされていれば、そのアプリケーションは64ビットWindowsじょうで、4GBの仮想かそうアドレス空間くうかん使用しようできる。一方いっぽう、32ビットWindowsでは、デフォルトの仮想かそうアドレス空間くうかんは2GBで、/3GBのブートオプションをけてWindowsを起動きどうし、"large address aware"オプションをけてリンクされたアプリケーションであれば3GBである。/3GBのブートオプションをけて起動きどうした32ビットのWindowsとはことなり、64ビットWindowsではカーネルモード仮想かそうアドレス空間くうかんらない。そのため、32ビットアプリケーションは、x64ようさいコンパイルしなくても、64ビットWindowsじょう動作どうささせることにメリットがある。
  • 32ビット、および、64ビットのアプリケーションは、"large address aware"オプションをけてリンクされていなければ、仮想かそうアドレス空間くうかんは2GBに制限せいげんされる。
  • Windows XP/Vistaでは128GB, Windows 7では192GB、Windows 8では512GB、Windows Server 2003では1TB、Windows Server 2008では2TB、Windows Server 2012では4TBまでのRAMを使用しよう可能かのう
  • LLP64データモデルを採用さいよう。intとlongは32ビット、long longは64ビット、ポインタとポインタから派生はせいしたデータがたは64ビットである。
  • カーネルモードデバイスドライバは64ビットでなければならない。32ビットのカーネルモードデバイスドライバは 64ビットばんWindowsでは動作どうさしない。ユーザーモードデバイスドライバは、32ビット、64ビットのどちらも64ビットばんWindowsで動作どうさする。
  • 16ビットWindows(Win16)アプリケーションとDOSアプリケーションは64ビットばんWindowsでは動作どうさしない。これは、64ビットモードに仮想かそう86モードがないため、64ビットばんWindowsから仮想かそうDOSマシンサブシステム(NTVDM)を削除さくじょしたためである。
  • NX(No Execute)ページ保護ほご機能きのう完全かんぜん実装じっそう。この機能きのうは32ビットばんWindowsでもPAEモードで起動きどうすれば使用しようできる。
  • x86はんのWindows NTファミリーでFSセグメントが使つかわれているわりに、x64ではGSセグメントがオペレーティングシステムが定義ていぎする2つの構造こうぞうたいしている。ユーザーモードでのスレッドインフォメーションブロック(NT_TIB)とカーネルモードでのプロセスコントロールリージョン(KPCR)である。たとえば、ユーザーモードでは、GS:0はスレッドインフォメーションブロックの最初さいしょのメンバーのアドレスである。この規則きそく維持いじすることによりx64はんWindowsの開発かいはつ容易よういになった。しかし、AMDにたいして、LongモードでFS, GSセグメントの機能きのう保持ほじすることを要求ようきゅうすることになった。(ただし、セグメントアドレッシング自体じたいは、近代きんだいてきなオペレーティングシステムで使つかわれるものではない)
  • Microsoft Visual Studio 2005以降いこうでは、64ビットばんWindowsのみで動作どうさする64ビットアプリケーション、32ビットばんWindowsと64ビットばんWindowsのWOW64じょう両方りょうほう動作どうさする32ビットアプリケーションの開発かいはつ可能かのうである[37]

脚注きゃくちゅう[編集へんしゅう]

  1. ^ 大学だいがくなど学術がくじゅつ世界せかいや、オープンソースのプロジェクトなどでは、(互換ごかん関係かんけい明白めいはくで、特定とくていメーカーめいはいっていない名称めいしょうなので)「x86-64」とぶことをこのみ、AMDしゃやAMDと関連かんれんふか会社かいしゃでは「AMD64」とぶことをこのみ、マイクロソフトしゃサン・マイクロシステムズのちにオラクルに買収ばいしゅうされた会社かいしゃ)はみじかく「x64」とぶことをこの[1][2]
  1. ^ 株式会社かぶしきがいしゃインプレス (2023ねん5がつ22にち). “Intel、しん「X86-S」アーキテクチャで8086互換ごかん”. PC Watch. 2023ねん6がつ4にち閲覧えつらん
  2. ^ Introducing Intel® Advanced Performance Extensions (Intel® APX)”. Intel (2024ねん3がつ5にち). 2024ねん3がつ5にち閲覧えつらん
  3. ^ a b 日本にっぽんAMD、Opteronの発表はっぴょうかい開催かいさい”. pc.watch.impress.co.jp. 2023ねん6がつ4にち閲覧えつらん
  4. ^ 日本にっぽんAMD、Athlon 64の発表はっぴょうかい開催かいさい”. pc.watch.impress.co.jp. 2023ねん6がつ4にち閲覧えつらん
  5. ^ AMD、X86-64アーキテクチャのプログラミングガイドを公開こうかい”. pc.watch.impress.co.jp. 2023ねん6がつ4にち閲覧えつらん
  6. ^ 後藤ごとうひろししげるのWeekly海外かいがいニュース”. pc.watch.impress.co.jp. 2023ねん6がつ4にち閲覧えつらん
  7. ^ a b AMD Corporation (2011ねん5がつ). “Volume 2: System Programming” (pdf). AMD64 Architecture Programmer's Manual. AMD Corporation. 2011ねん10がつ29にち閲覧えつらん
  8. ^ IBM Corporation (2007ねん9がつ6にち). “IBM WebSphere Application Server 64-bit Performance Demystified”. p. 14. 2010ねん4がつ9にち閲覧えつらん。 “"Figures 5, 6 and 7 also show the 32-bit version of WAS runs applications at full native hardware performance on the POWER and x86-64 platforms. Unlike some 64-bit processor architectures, the POWER and x86-64 hardware does not emulate 32-bit mode. Therefore applications that do not benefit from 64-bit features can run with full performance on the 32-bit version of WebSphere running on the above mentioned 64-bit platforms."”
  9. ^ これらのあたらしい呼出よびだし規約きやくは、当初とうしょからレジスタ本数ほんすうおおいRISCけいCPUではすでに実績じっせきがあった仕様しようである。
  10. ^ 詳細しょうさいについてはWindows NTけいひょう参照さんしょうのこと。
  11. ^ きゅう形式けいしきのコードのための浮動ふどう小数点しょうすうてんサポート (Visual C++)”. MSDNライブラリ. マイクロソフト. 2016ねん1がつ16にち閲覧えつらん
  12. ^ オレゴンしゅうウィラメットバレー(Willamette Valley)をながれるYamhillかわから名前なまえである。
  13. ^ "Craig Barrett confirms 64 bit address extensions for Xeon. And Prescott", from The Inquirer
  14. ^ "A Roundup of 64-Bit Computing", from internetnews.com
  15. ^ オレゴンしゅうながれるクラッカマスがわ(Clackamas River)の名前なまえ由来ゆらいし、ウィラメットがわ(Willamette River)の支流しりゅうである。
  16. ^ "Intel® 64 Architecture"
  17. ^ 後藤ごとうひろししげるのWeekly海外かいがいニュース Intelの64bit拡張かくちょう技術ぎじゅつ「Clackamas」がAMD64と互換ごかんであるなぞ”. pc.watch.impress.co.jp. 2023ねん6がつ4にち閲覧えつらん
  18. ^ Intel、64bit拡張かくちょうはAMD64互換ごかん発表はっぴょう”. pc.watch.impress.co.jp. 2023ねん6がつ4にち閲覧えつらん
  19. ^ 「BIOS and Kernel Developer’s Guide for AMD NPT Family 0Fh Processors」May 2006はん にRevision F(DDR2対応たいおうのSocket AM2はんCPU)の変更へんこうてんとして「CPUID Fn[0000_0001]_ECX CMPXCHG16B (bit 13) added.」と記載きさいされている。
  20. ^ 8080のPUSH PSW命令めいれいをLAHF / XCHG AL, AH / PUSH AXとエミュレートできる。
  21. ^ VMware Player 5.0 インストール要件ようけん
  22. ^ PREFETCHW命令めいれいはメモリからデータをキャッシュラインにプリフェッチし、そのデータがあとでえられることを想定そうていしてあらかじめキャッシュラインの状態じょうたいModifiedえあり)にする命令めいれいである。データがまれた時点じてんでModifiedに変更へんこうするよりもはや動作どうさすることが期待きたいできる。
  23. ^ AMDのドキュメント「Cross-Vendor Migration」のPrefetch Instructionsにfamily 15/model 6/stepping 1以降いこうのCPU、すなわちCedarMillコアからこの命令めいれいをNOPとして処理しょりするようになったと説明せつめいがある。
  24. ^ MicrosoftしゃのCoreinfoツールでこれらの命令めいれいのサポートじょうきょう確認かくにんできる。
  25. ^ MS公式こうしきサイトのWindows 8 のシステム要件ようけんページにあるWindows 8.1せつに「64 ビット PC に 64 ビットばん OS をインストールする場合ばあい、プロセッサが CMPXCHG16b、PrefetchW、LAHF/SAHF をサポートしている必要ひつようがあります」と記載きさいされている。
  26. ^ Windows 10 システム要件ようけん
  27. ^ JWasm / Feature Requests / #10 MOVD/MOVQ in 64-bit (was: Another MMX code problem)”. 2020ねん6がつ9にち閲覧えつらん
  28. ^ 43215 – x86-64: Nonstandard instruction "movd %xmm0, %rax"”. 2020ねん6がつ9にち閲覧えつらん
  29. ^ AMD64 Architecture Programmer's Manual
  30. ^ Schulman, Andrew; Brown, Ralf D.; Maxey, David; Michels, Raymond J.; Kyle, Jim (1994). Undocumented DOS - A programmer's guide to reserved MS-DOS functions and data structures - expanded to include MS-DOS 6, Novell DOS and Windows 3.1 (2 ed.). Addison Wesley. ISBN 0-201-63287-X.
  31. ^ AMD・インテルけいアーキテクチャではないが、モトローラMC68000ではアドレス空間くうかんが24ビットだったがアドレスレジスタは32ビットだった。そのためアプリケーションなどが上位じょうい8ビットを勝手かって使用しようしていたケースがあり、のちにMC68020でアドレス空間くうかんが32ビットされたさい問題もんだいになったことがあった。
  32. ^ しかし実際じっさいのところ、OS開発かいはつしゃはそのような事情じじょうっていてもアプリケーション開発かいはつしゃらないのが現実げんじつである。5level-paging.txt”. 2020ねん4がつ5にち閲覧えつらん。 “It's known that at least some JIT compilers use higher bits in pointers to encode their information. It collides with valid pointers with 5-level paging and leads to crashes.”
  33. ^ Belousov, Konstantin (2020ねん8がつ23にち). “amd64 pmap: LA57 AKA 5-level paging”. FreeBSD Git repositories. The FreeBSD Project. 2024ねん7がつ14にち閲覧えつらん。 “Since LA57 was moved to the main SDM document with revision 072,...” FreeBSDへLA57のサポートを追加ついかするコミットログ。
  34. ^ ある場所ばしょのメモリを可能かのうかつ実行じっこう可能かのう状態じょうたいかず、みのみか実行じっこうのみかどちらか一方いっぽうだけに制限せいげんすること。
  35. ^ 清水しみずの「イニシャルB」 だい145かい:64bitばんWindows「Windows XP Professional x64 Edition」登場とうじょう”. bb.watch.impress.co.jp. 2023ねん6がつ4にち閲覧えつらん
  36. ^ Windows Internals FIFTH EDITION p.750, Mark E. Runssinovich, David A. Solomon, Microsoft Press ISBN 978-0-7356-2530-3
  37. ^ 図解ずかい 64ビットがわかる』技術評論社ぎじゅつひょうろんしゃ、2006ねんISBN 4774127353。162ぺーじ

参考さんこう文献ぶんけん[編集へんしゅう]

関連かんれん項目こうもく[編集へんしゅう]

外部がいぶリンク[編集へんしゅう]