(57)【要約】      （修正有）【課題】一方のアーキテクチャのコードモジュールが他方のアーキテクチャのライブラリモジュールを用いることを可能にする。【解決手段】インターアーキテクチャ互換性装置は、第１のアーキテクチャコードモジュール５１６から、第１のアーキテクチャライブラリモジュールを対象とし、第１の複数の入力パラメータを含む、第１の呼び出し手順オペレーションを受け取る制御フロー移転受け取りモジュール５３０と、制御フロー移転受け取りモジュールに接続され、第１の呼び出し手順オペレーションを、第２のアーキテクチャライブラリモジュール５１８と互換性があり、第２の複数の入力パラメータを含む、第２の呼び出し手順オペレーションへ変換するＡＢＩ変更モジュール５３２と、ＡＢＩ変更モジュールに接続され、第２の呼び出し手順オペレーションを、第２のアーキテクチャライブラリモジュールに提供する制御フロー移転出力モジュール５３６とを備える。【選択図】図５
2015191657.tif 000002
【特許請求の範囲】
【請求項１】
インターアーキテクチャ互換性装置であって、
第１のアーキテクチャコードモジュールから、第１のアーキテクチャライブラリモジュールを対象とした第１の呼び出し手順オペレーションを受け取る制御フロー移転受け取りモジュールであって、前記第１の呼び出し手順オペレーションは第１の複数の入力パラメータを含む、制御フロー移転受け取りモジュールと、
前記制御フロー移転受け取りモジュールに接続されたアプリケーションバイナリインタフェース（ＡＢＩ）変更モジュールであって、前記ＡＢＩ変更モジュールは、前記第１の複数の入力パラメータを含む前記第１の呼び出し手順オペレーションを、第２の複数の入力パラメータを含み、第２のアーキテクチャライブラリモジュールと互換性がある対応する第２の呼び出し手順オペレーションへ変換すべく、複数のＡＢＩ変更を行う、前記ＡＢＩ変更モジュールと、
前記ＡＢＩ変更モジュールに接続され、前記第２の呼び出し手順オペレーションを前記第２のアーキテクチャライブラリモジュールへ提供する制御フロー移転出力モジュールと
を備える装置。
【請求項２】
前記ＡＢＩ変更モジュールは、
スタックから前記第１の複数の入力パラメータの第１のパラメータを受信し、
前記第１のパラメータに対応する、前記第２の複数の入力パラメータの第２のパラメータを、前記第２のアーキテクチャライブラリモジュールによって前記第２のパラメータのために用いられることが予期されるレジスタに格納する
請求項１に記載の装置。
【請求項３】
前記制御フロー移転受け取りモジュール、前記ＡＢＩ変更モジュール、及び前記制御フロー移転出力モジュールは、前記第１のアーキテクチャライブラリモジュールに対応する第１のラッパーモジュールの一部である
請求項１または２に記載の装置。
【請求項４】
異なる第１のアーキテクチャライブラリモジュールに各々が対応する複数のラッパーモジュールをさらに備え、
前記複数のラッパーモジュールの各々は、制御フロー移転受け取りモジュール、ＡＢＩ変更モジュール、及び制御フロー移転出力モジュールを有する
請求項３に記載の装置。
【請求項５】
前記第１のラッパーモジュールは前記第１のアーキテクチャライブラリモジュールと同じ名前を有し、
前記複数のラッパーモジュールの各々は対応する前記異なる第１のアーキテクチャライブラリモジュールと同じ名前を有する
請求項４に記載の装置。
【請求項６】
第１のアーキテクチャコードと実行される第２のアーキテクチャコードとから選択されるコードのタイプを決定するプロセッサモード変更モジュールをさらに備え、
前記プロセッサモード変更モジュールは、実行されるコードの前記決定されたタイプと互換性のあるプロセッサのコードタイプ実行モードを変更する
請求項１から５のいずれか１項に記載の装置。
【請求項７】
前記プロセッサモード変更モジュールは、全ての第１のアーキテクチャコードを有する第１のセグメントと全ての第２のアーキテクチャコードを有する第２のセグメントとの間の複数のインターセグメント制御フロー移転に基づいて実行されるコードの前記タイプを決定する
請求項６に記載の装置。
【請求項８】
前記制御フロー移転受け取りモジュールは、３２ビットコードモジュールから、３２ビットライブラリモジュールを対象とする前記第１の呼び出し手順オペレーションを受け取り、
前記ＡＢＩ変更モジュールは、前記第１の呼び出し手順オペレーションを、６４ビットライブラリモジュールと互換性のある対応する前記第２の呼び出し手順オペレーションへ変換し、
前記制御フロー移転出力モジュールは、前記第２の呼び出し手順オペレーションを、前記６４ビットライブラリモジュールへ提供する
請求項１から７のいずれか１項に記載の装置。
【請求項９】
前記第１のアーキテクチャコードモジュールによって使用可能な複数のアーキテクチャ整数レジスタの最大ビット幅は、第２のアーキテクチャコードモジュールによって使用可能な複数のアーキテクチャ整数レジスタの最大ビット幅と異なり、
前記第２のアーキテクチャライブラリモジュールは、数学ライブラリモジュールと標準Ｃライブラリモジュールとから選択される
請求項１から８のいずれか１項に記載の装置。
【請求項１０】
インターアーキテクチャ互換方法であって、
第１のアーキテクチャコードモジュールから、第１のアーキテクチャライブラリモジュールを対象とする第１の呼び出し手順オペレーションを受け取る段階であって、前記第１の呼び出し手順オペレーションは第１の複数の入力パラメータを含む、受け取る段階と、
第２の複数の入力パラメータを含む対応する第２の呼び出し手順オペレーションを、第２のアーキテクチャライブラリモジュールへ提供する段階と
を備える方法。
【請求項１１】
受け取る段階は、３２ビットコードモジュールから、３２ビットライブラリモジュールを対象とする前記第１の呼び出し手順オペレーションを受け取る段階を有し、
提供する段階は、前記第２の呼び出し手順オペレーションを、６４ビットライブラリモジュールへ提供する段階を有する
請求項１０に記載の方法。
【請求項１２】
前記第１の複数の入力パラメータの第１のパラメータを、スタックから受け取る段階と、
前記第２の複数の入力パラメータの第２のパラメータを、前記第２のアーキテクチャライブラリモジュールが前記第２のパラメータを受け取るために使用したレジスタに格納する段階と
をさらに備え、
前記第２のパラメータは前記第１のパラメータに対応する
請求項１０または１１に記載の方法。
【請求項１３】
受け取る段階は、前記第１のアーキテクチャライブラリモジュールと同じ名前を有するラッパーモジュールを用いて前記第１の呼び出し手順オペレーションを受け取る段階を有する
請求項１０から１２のいずれか１項に記載の方法。
【請求項１４】
前記第１のアーキテクチャライブラリモジュール及び前記第２のアーキテクチャライブラリモジュールの両方の前に動的リンカーによって検索されるように、前記ラッパーモジュールを構成する段階をさらに備える
請求項１３に記載の方法。
【請求項１５】
前記第１のアーキテクチャライブラリモジュールを有さない電子デバイスにおいて実行される
請求項１０から１４のいずれか１項に記載の方法。
【請求項１６】
３２ビットコードモジュールと６４ビットライブラリモジュールを格納するメモリと、
前記メモリに接続された６４ビットプロセッサと、
３２ビットライブラリモジュールに対する前記３２ビットコードモジュールからの呼び出し手順オペレーションをインターセプトし、対応する呼び出し手順オペレーションを前記６４ビットライブラリモジュールへ提供するインターアーキテクチャ互換性モジュールと
を備えるコンピュータシステム。
【請求項１７】
前記インターアーキテクチャ互換性モジュールは、前記３２ビットライブラリモジュールに対する前記呼び出し手順オペレーションを前記６４ビットライブラリモジュールに対する前記対応する呼び出し手順オペレーションへ変換するべく、複数のアプリケーションバイナリインタフェース（ＡＢＩ）変更を行う
請求項１６に記載のコンピュータシステム。
【請求項１８】
前記３２ビットコードモジュール及び前記６４ビットライブラリモジュールは、前記メモリの複数の異なるセグメントに格納され、前記３２ビットコードモジュールを格納するセグメントはフラットアドレス指定を利用する
請求項１６または１７に記載のコンピュータシステム。
【請求項１９】
前記インターアーキテクチャ互換性モジュールは、前記３２ビットコードモジュールからの前記呼び出し手順オペレーションをインターセプトする前記３２ビットライブラリモジュールと同じ名前を有するラッパーモジュールを含む
請求項１６から１８のいずれか１項に記載のコンピュータシステム。
【請求項２０】
前記コンピュータシステムは、前記３２ビットライブラリモジュールを有さない
請求項１６から１９のいずれか１項に記載のコンピュータシステム。
【請求項２１】
複数の命令を備えたプログラムであって、マシンによって実行された場合、前記複数の命令は、前記マシンに、
第１のアーキテクチャコードモジュールから、第１のアーキテクチャライブラリモジュールを対象とする第１の呼び出し手順オペレーションを受け取る段階であって、前記第１の呼び出し手順オペレーションは第１の複数の入力パラメータを有する、受け取る段階と、
前記第１の複数の入力パラメータを有する前記第１の呼び出し手順オペレーションを、第２の複数の入力パラメータを有する対応する第２の呼び出し手順オペレーションへ変換すべく、複数のアプリケーションバイナリインタフェース（ＡＢＩ）変更を行う段階と、
前記第２の呼び出し手順オペレーションを第２のアーキテクチャライブラリモジュールへ提供する段階と
を有するオペレーションを実行させるプログラム。
【請求項２２】
前記複数の命令は、前記マシンによって実行された場合、前記マシンに、
３２ビットコードモジュールから、３２ビットライブラリモジュールを対象とする前記第１の呼び出し手順オペレーションを受け取る段階と、
前記第２の呼び出し手順オペレーションを６４ビットライブラリモジュールへ提供する段階と
を有するオペレーションを実行させる
請求項２１に記載のプログラム。
【請求項２３】
請求項１０から１５のいずれか１項に記載の方法を実行する手段を備える装置。
【請求項２４】
複数の命令を備えるプログラムであって、前記複数の命令は、マシンによって実行された場合、前記マシンに請求項１０から１５のいずれか１項に記載の方法を実行させるように作動するプログラム。
【請求項２５】
第１のアーキテクチャコードモジュールから、第１のアーキテクチャライブラリモジュールを対象とする第１の呼び出し手順オペレーションを受け取る手段と、
第２の複数の入力パラメータを有する対応する第２の呼び出し手順オペレーションを、第２のアーキテクチャライブラリモジュールへ提供する手段と
を備え、
前記第１の呼び出し手順オペレーションは、第１の複数の入力パラメータを有する
インターアーキテクチャ互換性装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示の複数の実施形態は概して、複数の電子デバイスでのコードの実行に関する。特に、本開示の複数の実施形態は概して、複数の電子デバイスでの複数の異なるアーキテクチャのコードの実行に関する。
【背景技術】
【０００２】
最近まで、たいていのスマートフォン、携帯電話、タブレットコンピュータ等は、３２ビットアーキテクチャに基づいていた。それらは、複数の３２ビットアーキテクチャプロセッサ及び複数の３２ビットオペレーティングシステムを有していた。多種多様の３２ビットコードが、これらの３２ビットアーキテクチャに書き込まれていた。例えば、多数のモバイルアプリケーションが、これらのデバイスに書き込まれていた。また、複数の３２ビットライブラリは、これらの３２ビットアーキテクチャに書き込まれていた。
【０００３】
最近、複数の６４ビットアーキテクチャを有する複数のスマートフォンが利用できるようになった。これらの６４ビットアーキテクチャは、複数の６４ビットアーキテクチャプロセッサ及び複数の６４ビットオペレーティングシステムに基づく。例えば、ｉＰｈｏｎｅ（登録商標）５Ｓは、最近アップルコーポレーションから利用できるようになった。ｉＰｈｏｎｅ（登録商標）５Ｓは、６４ビットアーキテクチャ及びｉＯＳ７として知られる６４ビットオペレーティングシステムを有するＡ７プロセッサチップを含む。他の複数の６４ビットアーキテクチャスマートフォンも発表され、および／または開発されている。
【０００４】
これらの６４ビットアーキテクチャスマートフォンの展開の少なくとも最初の段階では、すでに開発されている３２ビットコードがこれらのスマートフォンで実行可能なように後方互換性を提供できることが望ましいであろう。これは、多種多様の既存の３２ビットモバイルアプリケーション及び他の３２ビットコードが使用されることを継続可能にする。
【０００５】
ｉＰｈｏｎｅ（登録商標）５Ｓ及びｉＯＳ７は、そのような後方互換性を提供する。それらは、６４ビットコードと同様に、３２ビットコードを実行可能である。また、３２ビットコードは、複数の３２ビットライブラリを利用可能である。
【図面の簡単な説明】
【０００６】
発明は、以下の説明及び、複数の実施形態を示すために用いられる複数の添付の図面を参照することにより最もよく理解されうる。
【図１】発明の複数の実施形態が実施されうるコンピュータシステムの第１の実施形態のブロック図である。
【図２】発明の複数の実施形態が実施されうるコンピュータシステムの第２の実施形態のブロック図である。
【図３】発明の複数の実施形態が実施されうるコンピュータシステムの第３の実施形態のブロック図である。
【図４】発明の複数の実施形態が実施されうるコンピュータシステムの第４の実施形態のブロック図である。
【図５】インターアーキテクチャ互換性モジュールの実施形態のブロック図である。
【図６】ラッパーライブラリを有するインターアーキテクチャ互換性モジュールの実施形態のブロック図である。
【図７】機能インターポジショニングを用いるインターアーキテクチャ互換性モジュールのラッパーライブラリにより、複数の制御フロー移転をインターセプトする方法の実施形態のブロックフロー図である。
【図８】いつ複数の互換性モードを変更するかを決定すべく、動的ローダーモジュールのランタイム構造体を使用するように動作可能なインターアーキテクチャ互換性モジュールのブロック図である。
【図９Ａ】インオーダパイプラインの実施形態及びレジスタリネームアウトオブオーダ発行／実行パイプラインの実施形態を示すブロック図である。
【図９Ｂ】実行エンジンユニットに接続されたフロントエンドユニットを含み、両方がメモリユニットに接続されたプロセッサコアの実施形態のブロック図である。
【図１０Ａ】オンダイインタコネクトネットワークへの接続とともに、レベル２（Ｌ２）キャッシュのローカルサブセットを有する単一のプロセッサコアの実施形態のブロック図である。
【図１０Ｂ】図１０Ａのプロセッサコアの一部の拡大図の実施形態のブロック図である。
【図１１】１より多いコアを有し、統合メモリコントローラを有し、かつ、集積化されたグラフィックスを有しうるプロセッサの実施形態のブロック図である。
【図１２】コンピューターアーキテクチャの第１の実施形態のブロック図である。
【図１３】コンピューターアーキテクチャの第２の実施形態のブロック図である。
【図１４】コンピューターアーキテクチャの第３の実施形態のブロック図である。
【図１５】システムオンチップアーキテクチャの実施形態のブロック図である。
【図１６】発明の複数の実施形態による、ソース命令セットの複数のバイナリ命令を、ターゲット命令セットの複数のバイナリ命令へ変換すべく、ソフトウェア命令変換器を用いるブロック図である。
【発明を実施するための形態】
【０００７】
背景のセクションで述べたように、ｉＰｈｏｎｅ（登録商標）５Ｓ及びｉＯＳ７は、後方互換性を可能にする。３２ビットコード及び６４ビットコードの両方は、ｉＰｈｏｎｅ（登録商標）５Ｓで実行可能である。３２ビットコードは、複数の３２ビットライブラリのセットを使用する。同様に、６４ビットコードは、複数の６４ビットライブラリのセットを使用する。しかし、後方互換性を提供するこのアプローチによる１つの欠点は、ｉＰｈｏｎｅ（登録商標）５Ｓが、これらのライブラリの３２ビット及び６４ビットバージョンの両方を含む必要があるということである。特に、３２ビットライブラリのセットが、３２ビットコードのために含まれ、３２ビットコードにリンクされ、及び３２ビットコードによって利用される。６４ビットライブラリの他のセットは、６４ビットコードのために含まれ、６４ビットコードにリンクされ、及び６４ビットコードによって利用される。複数の３２ビットライブラリ及び複数の６４ビットライブラリの両方を格納することは、単一のライブラリを格納するために必要となりうるよりも多くのストレージスペースを消費する。
【０００８】
本開示において、インターアーキテクチャ（アーキテクチャ間）互換性モジュールは、所定のアーキテクチャのコード（例えば３２ビットコード、レガシーコード等）が異なるアーキテクチャ（例えば６４ビットコード、より新しいアーキテクチャ等）の複数のライブラリを利用することを可能にする。以下の説明では、多数の特定の詳細が述べられる（例えば複数の特定のアーキテクチャプロセッサ及び複数のオペレーティングシステム、新たな及びレガシーアーキテクチャの間の差、複数のインターアーキテクチャ互換性モジュールの例、複数のプロセッサ構成、複数のオペレーションのシーケンス等）。しかし、複数の実施形態は、これらの特定の詳細なしで実施されうる。複数の他の例においては、複数のよく知られた回路、構造、及び技術は、説明の理解を分かりにくくしないように、詳細には示されていない。
【０００９】
図１は、複数の発明の実施形態が実施されうるコンピュータシステム１００の第１の実施形態のブロック図である。様々な実施形態では、コンピュータシステムは、スマートフォン、セルラーフォン、モバイルフォン、携帯用情報端末（ＰＤＡ）、ポータブルメディアプレーヤー、ハンドヘルドデバイス、タブレットコンピュータ、パッドコンピュータ、ラップトップコンピュータ、デスクトップコンピュータ，ワークステーション、ビデオゲームコンソール、セットトップボックス、サーバ、ネットワークデバイス、又は当技術分野において既知である他の電子デバイスを含みうる。いくつかの実施形態では、発明の範囲を限定しないが、コンピュータシステムは、例えば、スマートフォン、セルラーフォン、ＰＤＡ、タブレットコンピュータ、又はハンドヘルドデバイスのような限定されたメモリリソースを有する小さなハンドヘルドコンピュータシステムを表す。
【００１０】
コンピュータシステムは、プロセッサ１０２の実施形態及びメモリ１１０の実施形態を含む。プロセッサ及びメモリは、従来の接続メカニズム１０８によって（例えば、１または複数のバス、ハブ、メモリコントローラ、又はチップセットコンポーネント等を介して）、連結され、さもなければお互いに通信可能に接続されうる。当技術分野で既知の様々な異なる接続メカニズムが適切である。メモリは、そのような複数のコンピュータシステムで従来用いられるような、１または複数のメモリデバイスおよび／または１または複数の異なるタイプのメモリを含みうる。
【００１１】
示した実施形態では、発明の範囲をそれほど限定しないが、プロセッサは、６４ビットアーキテクチャプロセッサである。いくつかの実施形態では、プロセッサは、汎用プロセッサでありうる。あるいは、プロセッサは、専用プロセッサでありうる。複数の適切な専用プロセッサの例は、限定されないが、ごくわずかの例に名前をつけるべく、複数の通信プロセッサ、複数のグラフィックスプロセッサ、複数のネットワークプロセッサ、複数の暗号プロセッサ、複数のコプロセッサ、複数の組み込みプロセッサ、複数のデジタルシグナルプロセッサ（ＤＳＰ）、及び複数のコントローラ（例えば複数のマイクロコントローラ）を含む。プロセッサは、様々な複数の複合命令セットコンピューティング（ＣＩＳＣ）プロセッサ、複数の縮小命令セットコンピューティング（ＲＩＳＣ）プロセッサ、複数の超長命令語（ＶＬＩＷ）、それらの複数のハイブリッド、複数の他のタイプのプロセッサのいずれかであり、又は、（例えば複数の異なるコアの）そのような複数の異なるプロセッサの組み合わせを有しうる。
【００１２】
示すように、いくつかの実施形態では、６４ビットアーキテクチャプロセッサは、３２ビットアーキテクチャプロセッサに利用できない複数の６４ビットアーキテクチャリソース１０４を有しうる。例えば、複数の６４ビットアーキテクチャリソースは、３２ビットプロセッサで見られない、アドバンスドアーキテクチャリソースおよび／またはパフォーマンス向上特徴を含みうる。例えば、６４ビットプロセッサは、複数の追加のアーキテクチャレジスタ、エンハンスドアプリケーションバイナリインタフェース（ＡＢＩ）、又はプロシージャ呼び出しのための改善されたパラメータ送信ロジック等を有しうる。例えば、ＩＡ−３２アーキテクチャと比較して、Ｉｎｔｅｌ（登録商標）６４アーキテクチャは、より多数のレジスタと、追加浮動小数点単一命令、複数データ（ＳＩＭＤ）機能、スタックアクセスによる代わりにレジスタによってパラメータを送信することを可能にする６４ビットＡＢＩを有する。これらのアドバンスドアーキテクチャリソースおよび／またはパフォーマンス向上特徴は、ソフトウェアの性能を改善することを援助しうる。これらのリソース又は特徴は、６４ビットコンピューティングへの増加傾向の複数の理由の一つである。
【００１３】
また図１を参照して、メモリ１１０は、様々な異なるタイプのソフトウェアモジュールを含む。示した実施形態では、ソフトウェアモジュールは、６４ビットオペレーティングシステムモジュール１１２を含む。６４ビットオペレーティングシステムモジュールは、プロセッサの６４ビットＡＢＩと互換性のあるシステムレベルソフトウェアを含みうる。６４ビットオペレーティングシステムモジュールは、概して、６４ビットプロセッサの６４ビットアーキテクチャリソース１０４のいくつか又は全てを利用できるように設計される。
【００１４】
メモリはまた、１または複数の３２ビットコードモジュール１１６及び任意に１または複数の６４ビットコードモジュール１１４を含む。いくつかの実施形態では、これらは、コンパイルおよび／またはバイナリコードを含みうる。そのような３２ビット及び６４ビットコードモジュールの複数の例は、限定されないが、複数のアプリケーションモジュールを含む。スマートフォン又は他のモバイルデバイスの特定の場合では、複数のアプリケーションモジュールは複数のモバイルアプリケーション又はアプリを示しうる。１つの態様では、発明の範囲はそれほど限定されないが、３２ビットコードモジュールは、先行３２ビットアーキテクチャのために前に書き込まれたレガシー又は現在のコードモジュールを示しうる。他の態様では、３２ビットコードモジュールは、代わりに、新たに書き込まれた３２ビットコードモジュールでありうる。３２ビットコードモジュールは、３２ビットアーキテクチャプロセッサのためにコンパイルされていた。
【００１５】
メモリはまた、複数の６４ビットライブラリモジュール１１８を含みうる。いくつかの実施形態では、破線で示すように、メモリおよび／またはコンピュータシステムは、任意に、複数の３２ビットライブラリモジュール１２０を含みうる。もしくは、複数の他の実施形態では、複数の３２ビットライブラリモジュールを通る「Ｘ」で示すように、複数の３２ビットコードモジュールがメモリに格納され、６４ビットプロセッサ上で実行できる場合でさえ、メモリおよび／またはコンピュータシステムは、任意に、複数の３２ビットライブラリモジュールを除外しうる。３２ビット及び６４ビットライブラリモジュールの複数の例は、限定されないが、標準Ｃライブラリ、数学ライブラリ、及びシステムライブラリ等のためのライブラリモジュールを含みうる。
【００１６】
オペレーション中に、３２ビットコード及び６４ビットコードは、６４ビットプロセッサ上で実行されうる。例えば、６４ビットオペレーティングシステムモジュール、３２ビットコードモジュール及び複数の６４ビットライブラリモジュールの複数の命令又はコードは、６４ビットプロセッサ上で実施又は実行されうる。これは、潜在的に、複数のレガシー３２ビットアプリケーションをより新しい６４ビットプロセッサ上で実行可能にすることにより、後方互換性を提供するために使用されうる。いくつかの実施形態では、３２ビット及び６４ビットコードの両方は、同じスレッド内で実行されうる。いくつかの実施形態では、６４ビットプロセッサは、任意の３２ビット又は６４ビットコード実行モード１０６を有してよく、６４ビットコード又は３２ビットコードのいずれが（又はいくつかの実施形態では、３２ビットコードとさらに６４ビットコード）が現在プロセッサによって実行されているかを示す。例えば、１つの実施形態では、モード１０６は、３２ビットコードではなく６４ビットコードが６４ビットプロセッサ上で実行できるようにする第１の６４ビットモードと、３２ビットコードが６４ビットプロセッサ上で実行できるようにする第２の３２ビットモードとを示しうる。１つの態様では、３２ビットモードはまた、６４ビットコードが６４ビットプロセッサ上で実行できるようにしうる。他の態様では、３２ビットモードは、６４ビットコードが６４ビットプロセッサ上で実行されることを許可しない。これは必須ではないが、モード変更がなされて３２ビットモードに入るまでは、６４ビットプロセッサは任意に、６４ビットモードのデフォルトによって動作しうる。他の複数のプロセッサは、（例えば３２ビット／６４ビット混合モードを有しうるように）複数の異なるタイプのコードを実行する複数の異なるモードを有することを必ずしも必要としない。
【００１７】
上述したように、ｉＰｈｏｎｅ（登録商標）５Ｓはまた、３２ビットコードを６４ビットアーキテクチャ上で実行できるようにすることで後方互換性を可能にする。これは、３２ビット及び６４ビットバージョン両方のライブラリを有することによりなされる。第１のセットの３２ビットライブラリは、３２ビットコード（例えば複数の３２ビットレガシーモバイルアプリケーション）のために含まれ、３２ビットコードにリンクされ、及び３２ビットコードによって用いられる。第２のセットの６４ビットライブラリは、６４ビットコードのために含まれ、６４ビットコードにリンクされ、及び６４ビットコードによって用いられる。３２ビットコードは、複数の３２ビットライブラリモジュールを利用できるのみである。しかし、このアプローチによる１つの潜在的な欠点は、３２ビットコードにより利用するための複数の３２ビットライブラリを提供することを継続することが必要であるということである。１例を挙げると、追加のストレージスペースが、複数の３２ビットライブラリを格納するのに必要である。特に複数のスマートフォン、タブレットコンピュータ及び他の小さな電子デバイスについて、ストレージスペースの量が概して限定される傾向にある。また、複数の３２ビットライブラリを収容するのに必要な追加のストレージスペースは、デバイスの全体の製造コストを増加させる傾向にあり得る。
【００１８】
このアプローチによる他の潜在的な欠点は、３２ビットコードが、複数の６４ビットライブラリではなく複数の３２ビットライブラリを利用できるのみであるということである。これは、複数の３２ビットライブラリが概して、複数の６４ビットアーキテクチャリソース１０４（例えばアドバンスドアーキテクチャおよび／またはパフォーマンス向上リソース）を利用できるように設計されないため、パフォーマンスを限定する傾向にあり得る。これらのリソースは概して、複数の３２ビットライブラリが実行するように意図された片方の（例えば先行の）３２ビットアーキテクチャプロセッサには利用できない。複数の３２ビットライブラリは、これらの６４ビットアーキテクチャリソースの全てを利用するように設計されておらず、利用できない。結果的に、複数の３２ビットライブラリは、概して、複数の６４ビットライブラリによって実現可能な複数の６４ビットアーキテクチャリソースにより、パフォーマンスの増大を実現できない。
【００１９】
また図１を参照して、コンピュータシステムは、３２ビットから６４ビットへのおよび／または６４ビットから３２ビットへの（３２ビット／６４ビット）互換性モジュール１２２の実施形態を含む。３２ビット／６４ビット互換性モジュールは、他の実施形態では複数の他のアーキテクチャが代わりに利用されうるが、３２ビット及び６４ビットアーキテクチャのためのインターアーキテクチャ互換性モジュールの１例である。いくつかの実施形態では、３２ビット／６４ビット互換性モジュールは、３２ビットモジュール１１６が複数の６４ビットライブラリモジュール１１８（例えば標準Ｃライブラリ、複数の数学ライブラリ、ジーリブシー（ｇｌｉｂｃ）、複数のシステムライブラリ等）にインタフェースで接続して使用できるように、構成され又は動作可能であり得る。いくつかの実施形態では、（例えば、ＷｏＷ６４．ｄｌｌ，ＷｏＷ６４Ｗｉｎ．ｄｌｌ，Ｗｏｗ６４Ｃｐｕ．ｄｌｌ，又はＮｔｄｌｌ．ｄｌｌのような特別なモジュールの限定されたセットとは対照的に）互換性モジュールは、３２ビットコードが、そのアドレス空間において、いずれの任意の６４ビットライブラリモジュールも利用できるようにしうる。３２ビット／６４ビット互換性モジュールは、３２ビットコードモジュールが複数の６４ビットライブラリモジュールを利用できるようにするのに適切な様々な互換性変更を行うように構成され又は動作可能であり得る。例えば、これらの変更は、３２ビットコードモジュールと複数の６４ビットライブラリモジュールのＡＢＩ間での複数の差を考慮した複数の変更を含みうる。いくつかの実施形態では、３２ビット／６４ビット互換性モジュールは、バイナリ変換モジュールを含みうる。いくつかの実施形態では、３２ビット／６４ビット互換性モジュールは、複数のコードタイプ実行モード変更（例えば３２ビット及び６４ビットコード実行モード間での変更）を行うように構成され又は動作可能でありうる。様々な実施形態では、３２ビット／６４ビット互換性モジュールは、ハードウェア（例えば集積回路、複数のトランジスタ、又は複数の他の回路要素等）、ファームウェア（例えばＲＯＭ、ＥＰＲＯＭ、フラッシュメモリ、又は他の永続的又は不揮発性メモリ及びマイクロコード、複数のマイクロ命令、又はそれに格納された複数の他の低レベル命令）、ソフトウェア（例えば、メモリに格納された高レベル命令）、又はそれらの組み合わせに実装されうる。
【００２０】
有利には、互換性モジュールは、後方互換性を提供し、３２ビットコードモジュールが６４ビットオペレーティングシステムモジュールを有するシステム内の６４ビットプロセッサ上で実施又は実行されることを可能にするように援助しうる。３２ビットコードモジュールが複数の６４ビットライブラリモジュールを利用でき、複数の３２ビットライブラリモジュールを利用することが必要とされないため、複数の３２ビットライブラリモジュールは、いくつかの実施形態では、任意に省略されうる。すなわち、いくつかの実施形態では、メモリおよび／またはコンピュータシステムは、複数の３２ビットライブラリモジュールを有さない場合がある。有利には、複数の３２ビットライブラリモジュールを省略することは、さもなければそれらを格納する必要があったストレージスペースを使えるように援助し、および／または、より少ない全体量のストレージスペースを提供する必要があるためシステムを製造するコストを減らすように援助しうる。特に複数のスマートフォン、タブレットコンピュータ、及び他の比較的小さな電子デバイスについては、複数の３２ビットライブラリモジュールを格納する必要がないことは、利点を提供しうる。もしくは、複数の他の実施形態では、望ましい場合は複数の３２ビットライブラリモジュールが含まれうる。いくつかの実施形態では、複数の他の３２ビットコードモジュールが複数の３２ビットライブラリモジュールを利用する場合にさえ、少なくとも１つの３２ビットコードモジュールは、互換性モジュールを利用することによって、少なくとも１つの６４ビットライブラリモジュールを利用できうる。
【００２１】
有利には、複数の３２ビットコードモジュールが複数の６４ビットライブラリモジュールを利用できるようにすることで、性能を改善するようにも援助しうる。例えば、複数の３２ビットライブラリモジュールと比較して、複数の６４ビットライブラリモジュールは、６４ビットプロセッサの複数の６４ビットアーキテクチャリソース１０４（例えば、アドバンスドアーキテクチャおよび／またはパフォーマンス向上リソース）をより良く利用できうる。例えば、複数の６４ビットライブラリモジュールは、複数の３２ビットライブラリモジュールが利用できるよりも多くのレジスタを使用可能であり得る。複数の６４ビットライブラリモジュールは、複数の３２ビットライブラリモジュール等の場合のように、スタックの代わりに複数のレジスタを介して複数のパラメータを送信できうる。結果として、３２ビットコードモジュールが、複数の３２ビットライブラリモジュールの代わりに、複数の６４ビットライブラリモジュールに所定の必要な処理を実行させることができる場合、複数の６４ビットライブラリモジュールは、処理をより速く実行でき、および／または、複数の必要な結果をより早く配信できうる。これは、複数の３２ビットライブラリモジュールがこの処理を実行するように代わりに利用された場合に実現されたものよりも性能を改善するように援助しうる。
【００２２】
図１は、６４ビットプロセッサ、６４ビットオペレーティングシステム、及び６４ビットと３２ビットのコード及び複数のライブラリモジュールを示す。しかし、発明の範囲はそれほど限定されない。複数の他の実施形態では、複数の他のアーキテクチャが任意に利用されうる。例えば、いくつかの実施形態では、Ｘビットアーキテクチャコードモジュールは、Ｙビットアーキテクチャライブラリモジュールを利用し、Ｙビットアーキテクチャオペレーティングシステムを用いてＹビットアーキテクチャプロセッサ上で実行しうる。ここで、ＸとＹは異なる。
【００２３】
さらに示すために、図２−４は、発明の複数の実施形態が実装されうる複数のコンピュータシステムのいくつかの他の実施形態を示す。図２―４の複数のコンピュータシステム及びそれらの複数のコンポーネントは、図１のコンピュータシステムと所定の複数の類似点を有する。説明を分かりにくくしないために、これらのコンピュータシステム及びそれらのコンポーネントの異なるおよび／または追加の複数の特性は、全ての同様の複数の特性を繰り返さないで主に説明されうる。しかし、これらのコンピュータシステム及びコンポーネントは、図１の対応するコンポーネントの同じ、同様の、又は対応する複数の特性を有しうることは認識されるべきである。
【００２４】
図２は、１６ビットから３２ビットへのおよび／または３２ビットから１６ビットへの（１６ビット／３２ビット）互換性モジュール２２２を有するコンピュータシステム２００の第２の実施形態のブロック図である。コンピュータシステムは、３２ビットプロセッサ２０２及びメモリ２１０を含む。メモリは、３２ビットオペレーティングシステムモジュール２１２、１または複数の１６ビットコードモジュール２１６、及び複数の３２ビットライブラリモジュール２１８を格納する。１６ビット／３２ビット互換性モジュールは、１６ビットコードモジュールが３２ビットライブラリモジュールを利用できるようにしうる。メモリはまた、任意に複数の３２ビットライブラリモジュールも利用しうる、１または複数の３２ビットコードモジュール（不図示）を任意に格納しうる。いくつかの実施形態では、メモリおよび／またはコンピュータシステムはまた、複数の１６ビットライブラリモジュールを有しうる。もしくは、複数の１６ビットライブラリモジュールは任意に省略されうる。
【００２５】
図３は、６４ビットから１２８ビットへのおよび／または１２８ビットから６４ビットへの（６４ビット／１２８ビット）互換性モジュール３２２を有するコンピュータシステム３００の第３の実施形態のブロック図である。コンピュータシステムはまた、１２８ビットプロセッサ３０２及びメモリ３１０を含む。メモリは、１２８ビットオペレーティングシステムモジュール３１２、１または複数の６４ビットコードモジュール３１６、及び複数の１２８ビットライブラリモジュール３１８を格納する。６４ビット／１２８ビット互換性モジュールは、６４ビットコードモジュールが複数の１２８ビットライブラリモジュールを利用できるようにしうる。メモリはまた、任意に複数の１２８ビットライブラリモジュールも利用しうる、１または複数の１２８ビットコードモジュール（不図示）を任意に格納しうる。いくつかの実施形態では、メモリおよび／またはコンピュータシステムはまた、複数の６４ビットライブラリモジュールを有しうる。もしくは、複数の６４ビットライブラリモジュールは任意に省略されうる。
【００２６】
図４は、１６ビットから３２ビットへのおよび／または３２ビットから１６ビットへの（１６ビット／３２ビット）互換性モジュール４２２を有するコンピュータシステム４００の第４の実施形態のブロック図である。コンピュータシステムはまた、１６ビットプロセッサ４０２及びメモリ４１０を含む。メモリは、１６ビットオペレーティングシステムモジュール４１２、１または複数の３２ビットコードモジュール４１６、及び複数の１６ビットライブラリモジュール４１８を格納する。１６ビット／３２ビット互換性モジュールは、３２ビットコードモジュールが複数の１６ビットライブラリモジュールを利用できるようにしうる。メモリはまた、任意に複数の１６ビットライブラリモジュールも利用しうる、１または複数の１６ビットコードモジュール（不図示）を任意に格納しうる。いくつかの実施形態では、メモリおよび／またはコンピュータシステムはまた、複数の３２ビットライブラリモジュールを有しうる。もしくは、複数の３２ビットライブラリモジュールは任意に省略されうる。
【００２７】
これらは、ただのいくつかの追加の例である。さらに他の実施形態が考えられる。例えばさらに他の実施形態では、３２ビットから６４ビットへのおよび／または６４ビットから３２ビットへの（３２ビット／６４ビット）互換性モジュールは、複数の６４ビットコードモジュールが複数の３２ビットライブラリモジュールを利用できるようにしてよく、及び３２ビットオペレーティングシステムにより３２ビットプロセッサ上で実行してよい。所定の概念を示すために、複数の３２ビットコードモジュール、６４ビットプロセッサ、６４ビットオペレーティングシステム、及び３２ビット／６４ビット互換性モジュールが、しばしば複数の図面において示され説明されうる。しかし、複数の他の実施形態では、本開示の他の箇所で説明される複数の他のアーキテクチャバリエーションが適切であることは認識されるべきである。
【００２８】
図５は、第１のアーキテクチャ（例えば３２ビット）から第２のアーキテクチャ（例えば６４ビット）へのおよび／または第２のアーキテクチャから第１のアーキテクチャへの互換性モジュール５２２の実施形態のブロック図である。第１のアーキテクチャ／第２のアーキテクチャ互換性モジュールは、１または複数の第１のアーキテクチャ（例えば３２ビット）コードモジュール５１６を複数の第２のアーキテクチャ（例えば６４ビット）ライブラリモジュール５１８のセットと互換性があり利用できるようにするよう動作可能である。第１のアーキテクチャ／第２のアーキテクチャ互換性モジュールは、第１のアーキテクチャコードモジュールと複数の第２のアーキテクチャライブラリモジュールとの間に接続され、又はさもなければ第１のアーキテクチャコードモジュールと複数の第２のアーキテクチャライブラリモジュールとの間の通信において接続される。例では、第１のアーキテクチャコードモジュールと複数の第２のアーキテクチャライブラリモジュールは、それらが発明の一部でないことを示すように複数の破線で示される。
【００２９】
互換性モジュールは、制御フロー移転受け取りモジュール５３０を含む。制御フロー移転受け取りモジュールは、例えば、第１のアーキテクチャコードモジュールからの呼び出し手順オペレーション、又は第２のアーキテクチャライブラリモジュールからの手順オペレーションからのリターンのような入力制御フロー移転オペレーションをインターセプトし又はさもなければ受信するように構成され又は動作可能でありうる。制御フロー移転受け取りモジュールはまた、受け取った入力制御フロー移転オペレーションに対応する１または複数の入力引数又は複数の他のパラメータを受け取るように構成され又は動作可能でありうる。例えば、これらのパラメータは、スタックから、そのようなパラメータを送信するように利用される複数のレジスタから、又は他から引き出されうる。
【００３０】
互換性モジュールはまた、ＡＢＩ変更モジュール５３２を含む。ＡＢＩは概して、２つのプログラムモジュール間のインタフェースを表し、そのうちの１つは、しばしば、マシンコードのレベルでの、ライブラリモジュール又はオペレーティングシステムモジュールである。ＡＢＩは一般に、データの複数のサイズ、複数のレイアウト及びアラインメント、複数の機能がどのように呼び出されるか、規約の呼び出しの詳細、及び情報が複数のプログラムモジュール間でどのように送信されるべきか（例えば、どのように複数の引数が送信され複数の戻り値が引き出されるか）等のような詳細を含む。例えば、ＡＢＩは、複数のパラメータがスタック又は複数のレジスタのいずれを介して複数のモジュール間で送信されるか、どの特定のレジスタが利用されるか、複数のパラメータがスタック上に置かれる順序等を特定しうる。一般に、第１のアーキテクチャ（例えば３２ビット）コードモジュールのＡＢＩと複数の第２のアーキテクチャ（例えば６４ビット）ライブラリモジュールのＡＢＩとの間には、少なくともいくつかの違いがある。ＡＢＩ変更モジュールは、これらのＡＢＩの違いの間のギャップを埋めることを援助するように複数の変更を行うように、構成され又は動作可能でありうる。ＡＢＩ変更モジュールは、特定の第１及び第２のアーキテクチャ及び関係する複数のＡＢＩに依存して、様々な異なるタイプのＡＢＩ変更を行いうる。例えば、ＡＢＩ変更モジュールは、入力制御フロー移転オペレーション及びその関連する複数のパラメータを、対応する出力制御フロー移転オペレーション及びその関連する複数のパラメータへマッピング又はリレーするのに必要な複数のＡＢＩ変更を行いうる。１例として、ＡＢＩ変更モジュールは、複数の第２のアーキテクチャライブラリモジュールへ出力される対応する呼び出し手順オペレーションの異なる呼出規約へ、第１のアーキテクチャコードモジュールから受け取った呼び出し手順オペレーションをマッピング又はリレーする（例えば、場合により、スタックを介して提供された複数の入力パラメータを、レジスタにおいて送信された対応する複数の出力パラメータへマッピングする）ために必要な複数のＡＢＩ変更を行いうる。いくつかの実施形態では、複数の特定のＡＢＩに依存して、複数の入力パラメータの複数のデータサイズ又はフォーマットはまた、複数の出力パラメータの対応する複数のサイズ又はフォーマットへ変更されうる。他の例として、ＡＢＩ変更モジュールは、複数の第２のアーキテクチャライブラリモジュールから受け取った手順オペレーションからのリターンを、第１のアーキテクチャコードモジュールへ提供される手順オペレーションからの対応するリターンの異なる呼出規約（ｃａｌｌｉｎｇ  ｃｏｎｖｅｎｔｉｏｎ）へマッピング又はリレーする（例えば、場合により、複数のレジスタにおいて送信された複数の入力パラメータを、スタックを介して提供された対応する複数の出力パラメータへマッピングする）のに必要な複数のＡＢＩ変更を行いうる。
【００３１】
また図５を参照して、互換性モジュールはまた、プロセッサモード変更モジュール５３４を含む。プロセッサモード変更モジュールは、実行される特定のタイプのコード（例えば３２ビット又は６４ビットコード）を適切に示す場合には、プロセッサのコードタイプ実行モードを変更するように構成され又は動作可能であり得る。前で述べたように、これは必須ではないが、いくつかのプロセッサは、複数の異なるモードを有し、当該複数の異なるモードにおいて、これらの異なるタイプのコードが実行されうる。例えば、いくつかの実施形態では、６４ビットプロセッサは、３２ビットコードではなく６４ビットコードが実行可能であるようにする第１の６４ビットモードと、３２ビットコードが実行可能であるようにする第２の３２ビットモードとを有しうる。いくつかの場合には、第２の３２ビットモードはまた、６４ビットコードが実行できるようにしうるが、他の場合には、３２ビットモードは６４ビットコードが実行できないようにする。複数の他のプロセッサは、（３２ビットおよび／または６４ビットコード以外のコードについて）複数の異なるモード、（例えば、３２ビット及び６４ビットコードに加えて１６ビットコードについて）追加のモード等を有しうる。さらに他の複数のプロセッサは、複数の異なるタイプのコードについて複数の異なるモードを必ずしも必要としない。例えば、プロセッサは、任意に／潜在的に、複数の異なるタイプのコードが実行されうる、単一の混合モード（例えば３２ビット／６４ビット混合モード）を有しうる。このような場合、プロセッサモード変更モジュールは、任意に省略されうる。
【００３２】
複数の異なるタイプのプロセッサは、異なる方法で異なるコードタイプ実行モードを実施しうる。１つの例として、カリフォルニア州サンタクララのインテルコーポレイションから利用できる所定の６４ビットプロセッサは、コードセグメント記述子を介して、６４ビット及び３２ビット／６４ビット混合互換モードを示す。コードセグメント記述子は、メモリセグメンテーションにおいて利用される。メモリセグメンテーションは概して、メモリを複数のセグメント又はセクションに分割することを参照する。メモリロケーション又はメモリアドレスへの参照は、概して、セグメント識別子及び識別されたセグメント内のオフセットを含む。具体的には、これらの６４ビットプロセッサにおいて、コードセグメント記述子は、Ｌ−ビットとして知られる、コードタイプ実行モードを示す特定のビットを有する。採用された規約に従って、Ｌ−ビットは、バイナリゼロにクリア（すなわち０）され、３２ビットコードではなく６４ビットコードが実行可能にされる６４ビットモードを示す。逆に、Ｌ−ビットは、バイナリワン（すなわち１）にセットされ、３２ビットコード及び６４ビットコードの両方が実行しうる３２ビット／６４ビット混合互換モードを示す。
【００３３】
コードタイプ実行モードがコードセグメント記述子を介して示される、そのような複数の実施形態では、プロセッサモード変更モジュールは、Ｌ−ビットに基づく複数のモード変更決定を行い、コードがどのセグメントで実行されるかに基づくコードセグメント記述子を作成する等のように動作可能であり又は構成されうる。これは他の実施形態では必須ではないが、例えば、いくつかの実施形態では、複数の異なるタイプのコードは、複数の異なるセグメントにおいて維持されうる。例えば、６４ビットコードではなく３２ビットコードを有する１または複数の３２ビットコードセグメントと、３２ビットコードではなく６４ビットコードを有する１または複数の６４ビットコードセグメントとがありうる。発明の範囲をそれほど限定しないが、１つの例では、単一の３２ビットコードセグメント、６４ビットオペレーティングシステムコードのための１つの６４ビットコードセグメント、及び６４ビットユーザレベルコードと複数の６４ビットライブラリのための１つの６４ビットコードセグメントがある。これらの３２ビット及び６４ビットコードセグメントは、ローカルディスクリプタテーブル（ＬＤＴ）において表されうる。そのような複数の実施形態では、３２ビットコードセグメントと６４ビットセグメントとの間の全ての制御フロー移転オペレーションは、インターセグメント又はいわゆる「遠くへの（ｆａｒ）」制御フロー移転を用いうる。６４ビットコードの実行から３２ビットコードの実行への、又は、３２ビットコードの実行から６４ビットコードの実行への移転は、他のセグメントからの遠くへの又はインターセグメント制御フロー移転の後にのみ生じうる。そのような複数の実施形態では、そのような複数の遠くへの又はインターセグメント制御フロー移転オペレーションは、複数の異なるタイプのコードの複数のセグメント間での移転がいつかを知るべく、検査されうる。そのような場合、これは、プロセッサコードタイプ実行モード変更決定を行うように用いられうる。他の複数のプロセッサは、そのような複数のコードタイプ実行モードを示し、および／または、複数のモード変更決定を異なるように行いうる。
【００３４】
上述したように、いくつかの実施形態では、１または複数の３２ビットコードセグメントがありうる。いくつかの実施形態では、（例えばレガシーコードを有する）複数の３２ビットコードモジュールは、フラットアドレス指定に基づいてコンパイルされることがあった。フラットアドレス指定では、コードのベースアドレス及び複数のデータセグメントがゼロにセットされることがあった。また、コードセグメント及びデータセグメントの両方は、制限の又は最大の４ギガバイトにセットされることがあった。いくつかの実施形態では、複数の３２ビットコードモジュールを有する１または複数の作成された３２ビットコードセグメントはまた、そのようなフラットアドレス指定アプローチを使用するように構成されうる。これは、複数の３２ビットコードモジュールの最初のコンパイル中に作成された複数の前提データをブレークしないように、および／または、複数の３２ビットコードモジュールをコンパイルしなおす必要がないように援助する。
【００３５】
再度図５を参照して、互換性モジュールはまた、制御フロー移転出力モジュール５３６を含む。制御フロー移転出力モジュールは、制御フロー移転受け取りモジュールによって前に受け取った入力制御フロー移転オペレーションに対応する出力制御フロー移転オペレーションを出力又は提供するように構成され又は動作可能であり得る。制御フロー移転出力モジュールはまた、ターゲット又はデスティネーションモジュールにとって適切な複数の呼び出し規約ガイドラインを用いて、及びＡＢＩ変更モジュールによって行われた複数のＡＢＩ変更に従って、出力制御フロー移転オペレーションを実行するように構成され又は動作可能であり得る。例により、制御フロー移転出力モジュールは、呼び出し手順オペレーションを、複数の第２のアーキテクチャライブラリモジュールへ出力してよく、呼び出し手順オペレーションは、制御フロー移転受け取りモジュールによって第１のアーキテクチャコードモジュールから受け取った最初の呼び出し手順オペレーションに対応し、ＡＢＩ変更モジュールによって行われた複数の変更を表す。
【００３６】
図６は、ラッパーライブラリ６４０を有する３２ビット／６４ビット互換性モジュール６２２の実施形態のブロック図である。いくつかの実施形態では、ラッパーライブラリは、実例では３２ビットライブラリ６２０である、所定のアーキテクチャの１または複数の対応する実際のライブラリ６２０に対応し、反映しうる。いくつかの実施形態では、ラッパーライブラリは、実際のライブラリ又は複数のライブラリ（例えば３２ビットライブラリ）の各々対応する機能（ｆｕｎｃｔｉｏｎ）モジュールのためのラッパーモジュールを有しうる。示した実施形態では、３２ビットライブラリは、Ｎ番目３２ビット機能モジュール６４４―Ｎを介して第１の３２ビット機能モジュール６４４―１（例えば「コサイン（ｃｏｓｉｎｅ）」という名前を有する）を含み、Ｎは特定の実装にとって適切な任意の数でありうる。同様に、ラッパーライブラリは、Ｎ番目のラッパーモジュール６４２―Ｎを介して、（例えば「コサイン」という名前も有する）第１のラッパーモジュール６４２―１を含む。第１の３２ビット機能モジュールは、第１のラッパーモジュールに対応し、次々と対応していき、Ｎ番目の３２ビット機能モジュールがＮ番目のラッパーモジュールに対応する。いくつかの実施形態では、発明の範囲はそれほど限定されないが、ラッパーライブラリは、３２ビット標準Ｃライブラリの機能モジュールのそれぞれに対してラッパーモジュールを含み、１つの又はセットのライブラリ（例えば３２ビットスレッディングライブラリ、３２ビット数学ライブラリ、３２ビットシステムライブラリ等）の機能モジュールのそれぞれに対してラッパーモジュールを有しうる。いくつかの実施形態では、これは必須ではないが、セットの６４ビットライブラリモジュール６１８（例えば６４ビットライブラリ）は、３２ビットライブラリ６２０の対応する機能モジュールのそれぞれについて、および／または、ラッパーライブラリ６４０のラッパーモジュールのそれぞれについて、６４ビットライブラリモジュールを有しうる。
【００３７】
いくつかの実施形態では、ラッパーライブラリは、３２ビットライブラリを対象とした３２ビットコードモジュールからの複数の制御フロー移転オペレーションをインターセプト又はさもなければ受け取りうる。例えば、３２ビットコードモジュールは、制御フロー移転オペレーション（例えば呼び出し手順オペレーション）を、（例えば「コサイン」という名前を有する）第１の３２ビット機能モジュールへ発行し、（例えばまた「コサイン」という名前を有する）対応する第１のラッパーモジュールは、この制御フロー移転オペレーションをインターセプトしうる。ラッパーモジュールは、本開示の他の箇所で説明されたように、受け取った制御フロー移転オペレーションを処理しうる。例えば、示した第１のラッパーモジュールは、制御フロー移転受け取りモジュール６３０、ＡＢＩ変更モジュール６３２、プロセッサモード変更モジュール６３４、及び制御フロー移転出力モジュール６３６を有する。これらの各々は、本開示の他の箇所で（例えば図５と併せて）説明されたものと同様又は同じでありうる。
【００３８】
制御フロー移転出力モジュールは、対応する又は導出された呼び出し手順機能を６４ビットライブラリモジュールに提供しうる。いくつかの実施形態では、ラッパーライブラリはまた、６４ビットライブラリモジュールからの制御フロー移転オペレーションをインターセプト又はさもなければ受け取りうる。例えば、６４ビットライブラリモジュールは、手順オペレーションからの応答リターンを発行し、対応する第１のラッパーモジュールがこの制御フロー移転オペレーションをインターセプトしうる。第１のラッパーモジュールは、前に述べたように（例えば複数のＡＢＩ変更を行う等）、手順オペレーションからの受け取ったリターンを処理し、手順オペレーションからの対応する又は導出されたリターンを３２ビットコードモジュールへ提供しうる。いくつかの実施形態では、ラッパーモジュールは、呼び出し元の３２ビットコードモジュールから６４ビットライブラリモジュールへ（例えば呼び出しへの）制御を移すべく、トランポリンモジュールへ論理上区画化され、及び６４ビットライブラリモジュールから３２ビットコードモジュールへ（例えばリターンへの）制御を移すべく、リバーストランポリン又はリターンスタブへ論理上区画化されうる。
【００３９】
発明の範囲はそれほど限定されないが、上記の実施形態は、３２ビットコードモジュール、３２ビットライブラリ、６４ビットライブラリ、及び３２ビット／６４ビット互換性モジュールを参照する。複数の他の実施形態では、３２ビットコードモジュール、３２ビットライブラリ、６４ビットライブラリ、及び３２ビット／６４ビット互換性モジュールへのこれらの参照は、本開示の他の箇所で説明した他のアーキテクチャバリアント（例えば図２−４について示され説明されたもの）によって置換されてよい。
【００４０】
図７は、機能インターポジショニングを用いてインターアーキテクチャ互換性モジュールのラッパーライブラリにより複数の制御フロー移転をインターセプトする方法７５０の実施形態のブロックフロー図である。いくつかの実施形態では、方法は、図６のラッパーライブラリ６４０により実行されうる。もしくは、同様の又は異なる複数のラッパーライブラリは任意に使用されうる。
【００４１】
方法は、ブロック７５１で、１または複数の他のライブラリが検索される前に複数の機能モジュールについて検索されるようにラッパーライブラリを構成することを含む。例えば、これは、６４ビットライブラリが機能モジュールについて検索される前に、および／または、任意の３２ビットライブラリ（もしあれば）が機能モジュールについて検索される前に、機能モジュールについて検索されるようにラッパーライブラリを構成することを含みうる。任意に、ラッパーライブラリは、いずれの他のライブラリも検索される前に検索されるように構成されうる。いくつかの実施形態では、１または複数の他のライブラリの前に検索されるようにラッパーライブラリを構成することは、動的リンカーモジュールが複数の機能を検索する順序の利点を活かすことにより行われうる。一般に、動的リンカーモジュールは、複数のライブラリがロードされた順序で、複数のライブラリにおけるランタイムでの機能を検索しうる。第１のライブラリが第２のライブラリの前にロードされた場合、動的リンカーモジュールは、第２のライブラリ内の所望する機能を検索する前に、第１のライブラリにおける所望する機能を検索しうる。従って、ラッパーライブラリは、ラッパーライブラリが前に検索されることを意図され又は望ましい他のいかなるライブラリの前にロードされうる。いくつかの実施形態では、これは、ラッパーライブラリをプレロードすることにより、例えば、コマンドＬＤ＿ＰＲＥＬＯＡＤを用いることにより行われる。もしくは、ラッパーライブラリをロードする複数の他の方法が用いられうる。１つの態様では、ラッパーライブラリは、ラッパーモジュールによってインターセプトされるのが望ましいライブラリモジュールに関連するコードモジュールからの第１の制御フロー移転オペレーションの前にプレロード又はロードされうる。
【００４２】
方法は、ブロック７５２で、複数の３２ビットライブラリモジュールのセットの３２ビット機能モジュールを対象とする３２ビットコードモジュールからの制御フロー移転試みを受け取ることを含む。例により、これは、（例えば特定の機能名前を有する）特定の３２ビットライブラリ機能モジュールを示す呼び出し手順オペレーションを受け取ることを含みうる。
【００４３】
方法は、ブロック７５３で、（存在する場合は複数の３２ビットライブラリモジュールを検索する前および／または複数の６４ビットライブラリモジュールを検索する前に）ラッパーライブラリを検索し、３２ビット機能モジュールに対応するラッパーモジュールを識別することを含む。いくつかの実施形態では、識別されたラッパーモジュールは、望ましい実際のライブラリモジュール（例えば３２ビットライブラリモジュール）と同じ機能名前を有しうる。例えば、ラッパーライブラリは、「コサイン」という名前の３２ビットライブラリ機能モジュールについて検索され、また「コサイン」という名前のラッパーモジュールが識別されうる。もしくは、マッピングテーブル、又は名前に基づくのに加えて、複数のラッパーモジュールと複数の３２ビットライブラリ機能モジュールとの間の対応を提供する他の方法が、任意に用いられうる。
【００４４】
方法は、ブロック７５４で、制御フローを識別されたラッパーモジュールへ移転することを含む。有利には、ラッパーライブラリが１または複数の他のライブラリの前に検索されるよう構成されたため、制御フロー移転は、実際のライブラリモジュールへの代わりに、識別されたラッパーモジュールへのものとなった。ラッパーモジュールは、本質的に、論理上、３２ビットコードモジュールと複数の実際のライブラリモジュールとの間に配置され又は介在させられた。
【００４５】
ラッパーモジュールは、ブロック７５５で、３２ビット機能モジュールへの試みた制御フロー移転を、１または複数の６４ビット機能モジュールへの制御フロー移転と互換性のあるものに構成する。これは、本開示の他の箇所で説明したように行われうる。例えば、複数の入力パラメータを複数の出力パラメータへマッピングし、複数の他のＡＢＩ変更を行い、出力呼び出し規約に適合しうる等である。
【００４６】
ラッパーモジュールは、ブロック７５６で、１または複数の６４ビット機能モジュールへの制御フロー移転をもたらす。例えば、ラッパーモジュールは、ブロック７５２で受け取った制御フロー移転試みに対応する、及び概して反映する制御フロー移転オペレーションを提供しうる。
【００４７】
発明の範囲はそれほど限定されないが、上記の方法は、３２ビットコードモジュール、３２ビットライブラリ機能モジュール、及び６４ビットライブラリ機能モジュールを参照する。他の実施形態では、３２ビットコードモジュール、３２ビットライブラリ機能モジュール、及び６４ビットライブラリ機能モジュールへのこれらの参照は、本開示の他の箇所で説明された他のアーキテクチャバリアント（例えば、図２−４について示され説明されたもの）によって置換されうる。
【００４８】
図８は、ランタイム構造体８６８にアクセスすることにより複数の異なるタイプのコード８１６、８１８間での複数の移転を決定するように構成され又は動作可能であるインターアーキテクチャ互換性モジュール８２２を有するコンピュータシステム８００のブロック図である。コンピュータシステムは、アドレス空間８６０を有する。アドレス空間は、異なるタイプのコード８１６、８１８を含む。発明の範囲をそれほど限定しないが、示した例の実施形態では、これらの異なるタイプのコードは、３２ビットコードモジュール８１６及び６４ビットコードモジュール８１８を含む。従って、いくつかの実施形態では、２又はそれより多い異なるタイプのコード（例えば３２ビット及び６４ビットコード）は、同じアドレス空間において含まれ又は混合されうる。従来、同じアドレス空間にそのような複数の異なるタイプのコードモジュールを含むことは一般的には行われない。３２ビットコードモジュールは、３２ビットコードタイプを示すヘッダ８６２を有する。同様に、６４ビットコードモジュールは、異なる６４ビットコードタイプを示すヘッダ８６４を有する。１つの可能な例の適切なタイプのヘッダは、実行可能でリンク可能なフォーマット（Ｅｘｅｃｕｔａｂｌｅ  ａｎｄ  Ｌｉｎｋａｂｌｅ  Ｆｏｒｍａｔ  ：ＥＬＦ）ヘッダである。
【００４９】
コンピュータシステムはまた、ランタイム又は動的ローダーモジュール８６６を含む。動的ローダーモジュールは、複数のバイナリ実行可能ファイルのランタイムローディングの機能を有する。ランタイムローダーモジュールは、２つ又はそれより多い異なるタイプのコード（例えば３２ビットコード及び６４ビットコード）が同じアドレス空間において含まれる又は混合されることを可能にする。ランタイムローダのような複数の規約ランタイムライブラリは、概して、そのような異なるタイプのコードが同じアドレス空間に含まれる又は混合されることを許可しない。ランタイムローダーモジュールは、ランタイム構造体８６８（例えばデータ構造体）を有する。ランタイムローダーモジュールは、コード又はライブラリモジュールのタイプ（例えば３２ビット又は６４ビットのいずれであるか）を、そのコード又はライブラリモジュールをアドレス空間にロードする時に記録するように構成され又は動作可能であり得る。例えば、ランタイムローダーモジュールは、３２ビット及び６４ビットコードモジュールのヘッダ８６２、８６４にアクセスし、示された複数のタイプのコードを決定しうる。ランタイムローダーモジュールは、ランタイム構造体に複数のコードタイプ８６９を格納しうる。必須ではないが任意的に、ランタイムローダーモジュールはまた、複数のコードアドレス８７０（例えばコード部分のベースランタイムアドレス）および／または複数のコードサイズ８７１を、ランタイム構造体に格納する。いくつかの実施形態では、ランタイムローダーモジュール８６６を構成するおよび／または動的ローディングの態様を実装するのを援助する複数の他のシステムバイナリモジュールはまた、変更されうる。例えば、リンカー、ローダー、及びジーリブシーは、複数の異なるタイプのコードが同じアドレス空間に含まれ又は混合されることができるように変更されうる。例により、そのような複数のモジュールは、ランタイム構造体８６８及び複数のコードタイプ８６９にインタフェースで接続し、利用するべく、変更されうる。
【００５０】
再度図８を参照し、コンピュータシステムはまた、インターアーキテクチャ互換性モジュール８２２を含む。発明の範囲をそれほど限定しないが、示された例では、互換性モジュールは、３２ビット／６４ビット互換性モジュールである。３２ビット／６４ビット互換性モジュールは、プロセッサモード変更モジュール８３４を含む。プロセッサモード変更モジュールおよび／または３２ビット／６４ビット互換性モジュールは、ランタイムローダーモジュールおよび／またはランタイム構造体と接続され、さもなければ通信する。プロセッサモード変更モジュールおよび／または３２ビット／６４ビット互換性モジュールはまた、プロセッサのコードタイプ実行モード８０６に接続され、もしくは通信する。
【００５１】
いくつかの実施形態では、３２ビット／６４ビット互換性モジュール８２２は、ランタイム構造体８６８にアクセスすることによって、複数の異なるタイプのコード間、例えば３２ビットおよび６４ビットコード間に制御フロー移転があるか否かを決定するように構成され又は動作可能でありうる。例えば、互換性モジュールは、ランタイム構造体を用いてよく、制御フロー移転先のターゲットコードが３２ビット又は６４ビットコードのいずれであるかを決定する。いくつかの実施形態では、制御フロー移転オペレーションが行われるときはいつでも（又はいくつかの実施形態では、遠い又はインターセグメント制御フロー移転オペレーションが行われるときはいつでも）、プロセッサモード変更モジュールは、ランタイム構造体におけるコードタイプ８６９にアクセスしうる。いくつかの実施形態では、互換性モジュールは、そのような複数の制御フロー移転オペレーション８７２のインジケーションを受信する。プロセッサモード変更モジュールは、これらのコードタイプを用いて、ターゲットロケーションでのコードのタイプが現在のコードのタイプと同じであるか否かおよび／またはプロセッサの現在のコードタイプ実行モード８０６が変更される必要があるか否かを決定するように動作可能でありうる。
【００５２】
本開示の複数のインターアーキテクチャ互換性モジュールは、複数の異なる実施形態では複数の異なる方法で実装されうる。さらに複数の特定の概念を示すために、インターアーキテクチャ互換性モジュールが６４ビットバージョンのアンドロイド環境で実装されうる方法の１つの可能な例のさらなる詳細を考慮することは有益でありうる。アンドロイドは、複数のスマートフォン及びタブレットコンピュータのような複数のタッチスクリーンモバイルデバイスに主として利用されるリナックス（登録商標）カーネルに基づくオペレーティングシステムである。予期される６４ビットアンドロイド環境は、アンドロイドフレームワークの６４ＡＢＩ互換性バージョン（Ｄａｌｖｉｋ、ｚｙｇｏｔｅ、ｌｉｂｃのような複数のシステムライブラリ等）及び６４ビットプロセッサ上で動作するリナックス（登録商標）カーネルを含みうる。アンドロイドのプロセスバーチャルマシンである６４ビットＡＢＩ互換性Ｄａｌｖｉｋは、６４ビットライブラリへのＪＮＩ呼び出しを処理し、６４ビットＪＩＴ（Ｊｕｓｔ−ｉｎ−Ｔｉｍｅ）コードを生成するＤａｌｖｉｋの能力を含みうる。
【００５３】
複数の異なるタイプのアンドロイドアプリケーションがある。一つのタイプは、純粋な複数のＪａｖａ（登録商標）アプリケーションである。純粋な複数のＪａｖａ（登録商標）アプリケーションは、Ｊａｖａ（登録商標）バイトコードのみを含むが、ネイティブ又はアーキテクチャ特有コードは含まない。アンドロイドは、そのような複数の純粋なＪａｖａ（登録商標）アプリケーションを、Ｄａｌｖｉｋバーチャルマシンを起動することによって実行しうる。概して、複数の純粋なＪａｖａ（登録商標）アプリケーションは、アンドロイド環境へのさらなる変更なしで実行されうる。
【００５４】
他のタイプのアンドロイドアプリケーションは、ネイティブアプリケーションである。複数のネイティブアプリケーションは、ネイティブ又はアーキテクチャ特有コードを含む。例えば、複数のネイティブアプリケーションは、Ｊａｖａ（登録商標）バイトコード及びネイティブコードの両方を有しうる。複数の数学ライブラリ、グラフィックスライブラリ、システムライブラリ、及び標準Ｃライブラリ（Ｃ  ｓｔａｎｄａｒｄ  ｌｉｂｒａｒｉｅｓ）等はこのカテゴリーに分類される。ネイティブコードは、Ｊａｖａ（登録商標）のＪＮＩ（Ｊａｖａ（登録商標）ネイティブインタフェース）技術を用いることによって実行されうる。例えば、ネイティブアプリケーションは、複数のネイティブな方法を呼び出すべく、ＪＮＩインタフェースを利用しうる。ネイティブな方法への呼び出しは、Ｄｅｘファイルのｉｎｖｏｋｅ＿ｄｉｒｅｃｔ  Ｄａｌｖｉｋバイトコードを用いて表されうる。ｉｎｖｏｋｅ＿ｄｉｒｅｃｔは、複数のパラメータを有する方法を引き起こし、および／または、呼び出す方法を示しうる。いくつかの実施形態では、Ｄａｌｖｉｋのｉｎｖｏｋｅ＿ｄｉｒｅｃｔバイトコードが実装される方法は、インターアーキテクチャ操作性及び互換性を可能にする（例えば、３２ビットコードモジュールが６４ビットライブラリモジュール及び６４ビットＡＢＩを利用できる）ように変更されうる。
【００５５】
さらに示すために、Ｄａｌｖｉｋにおいてｉｎｖｏｋｅ＿ｄｉｒｅｃｔバイトコードを実装するべく利用される代表的な呼び出しスタックフローを考慮する。アプリケーションがネイティブライブラリモジュールを呼び出す際、Ｄａｌｖｉｋは、システムロードライブラリ呼び出しを用いて、ネイティブライブラリモジュールをアドレス空間へロードする。その後、Ｄａｌｖｉｋのシステムロードライブラリは、ランタイムロードライブラリへ呼び出す。ランタイムロードライブラリはその後、ネイティブロードへのＪＮＩ呼び出しを行う。その後、ネイティブロードはｄｖｍロードネイティブコードへ呼び出す。このモジュール、ｄｖｍロードネイティブコードは、ロードライブラリのコアを実装する。例えば、従来では、ｄｖｍロードネイティブコードは、３２ビットコードモジュールからの３２ビットネイティブライブラリモジュールへの呼び出しに応じて、３２ビットネイティブライブラリモジュールをロードしうる。
【００５６】
いくつかの実施形態では、ｉｎｖｏｋｅ＿ｄｉｒｅｃｔは、本開示の他の箇所で説明されたようなインターアーキテクチャ操作性及び互換性を可能にするべく変更されうる。例えば、ｉｎｖｏｋｅ＿ｄｉｒｅｃｔは、３２ビットコードモジュールが６４ビットライブラリモジュールと６４ビットＡＢＩを利用できるように変更されうる（例えば、３２ビットネイティブライブラリモジュールへの呼び出しを６４ビットネイティブライブラリモジュールへの呼び出しにマッピングする）。例えば、ｉｎｖｏｋｅ＿ｄｉｒｅｃｔは、３２ビットネイティブライブラリモジュールを対象とした３２ビットコードモジュール（例えばモバイルアプリ）からの呼び出しをインターセプトし、適切なＡＢＩ変更を行って、受け取った呼び出しを６４ビットネイティブライブラリモジュールへの対応する出力呼び出しへマッピングするように変更されうる。いくつかの実施形態では、これは必須ではないが、ｉｎｖｏｋｅ＿ｄｉｒｅｃｔは任意に、本開示の他の箇所で説明されたような複数の特性を有する複数のラッパーモジュールを含みうる。いくつかの実施形態では、ネイティブライブラリモジュールが検索される順序は、ラッパーモジュールが最初に（例えば３２ビットネイティブライブラリモジュールおよび／または６４ビットライブラリモジュールの前に）識別されるように制御されうる。例えば、複数のラッパーモジュールへの複数の経路の複数の優先度は、複数の３２ビット及び６４ビットネイティブライブラリモジュールへの複数の経路よりもより高い優先度が与えられうる。これは、ラッパーモジュールが（例えば３２ビットライブラリモジュールへの）呼び出しをインターセプトすることを可能にすべく利用されうる。
【００５７】
いくつかの実施形態では、ｄｖｍロードネイティブコードはまた、（例えば複数のプロセッサコードタイプ実行モード切り替えを実装するべく）実行されているコードのタイプ（例えば３２ビットコード又は６４ビットコード）を記録するように変更されうる。例えば、ｄｖｍロードネイティブコードは、ランタイム構造体および／またはコードタイプ情報（例えば図８のコードタイプ８６９と同様）を含み利用するように変更されうる。
【００５８】
例となる複数のコアアーキテクチャ、プロセッサ、及びコンピューターアーキテクチャ
【００５９】
複数のプロセッサコアは、複数の異なる方法で、複数の異なる目的で、複数の異なるプロセッサにおいて実装されうる。例えば、そのような複数のコアの実装は、（１）汎用コンピューティングを対象とした汎用インオーダコア、（２）汎用コンピューティングを対象としたハイパフォーマンス汎用アウトオブオーダコア、（３）主にグラフィックスおよび／または科学（スループット）コンピューティングを対象とした専用コアを含みうる。複数の異なるプロセッサの実装は、（１）汎用コンピューティングを対象とした１または複数の汎用インオーダコアおよび／または汎用コンピューティングを対象とした１または複数の汎用アウトオブオーダコアを含むＣＰＵ、及び（２）主にグラフィックスおよび／または科学（スループット）を対象とした１または複数の専用コアを含むコプロセッサを含みうる。そのような複数の異なるプロセッサは、複数の異なるコンピュータシステムアーキテクチャに至り、それらは、（１）ＣＰＵとは別のチップ上のコプロセッサ、（２）ＣＰＵと同じパッケージ内の別のダイ上のコプロセッサ、（３）ＣＰＵと同じダイ上のコプロセッサ（この場合、そのようなコプロセッサは集積化されたグラフィックスおよび／または科学（スループット）ロジックのような専用ロジック又は複数の専用コアと時々呼ばれる）、及び（４）説明したＣＰＵ（アプリケーションコア又はアプリケーションプロセッサと時々呼ばれる）、上記コプロセッサ、及び追加の機能を同じダイ上に含みうるシステムオンチップを含みうる。複数の例のコアアーキテクチャは、次に説明され、続いて複数の例のプロセッサ及びコンピューターアーキテクチャの説明がある。
【００６０】
例としてのコアアーキテクチャ
【００６１】
インオーダ及びアウトオブオーダコアブロック図
【００６２】
図９Ａは、発明の実施形態による、例のインオーダパイプライン及び例のレジスタリネームアウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。図９Ｂは、発明の実施形態による、プロセッサに含まれる、例のインオーダアーキテクチャコアの実施形態及び例のレジスタリネームアウトオブオーダ発行／実行アーキテクチャコアの両方を示すブロック図である。図９Ａ−Ｂの実線で囲まれたボックスは、インオーダパイプライン及びインオーダコアを示し、一方、点線で囲まれたボックスの任意の追加は、レジスタリネームアウトオブオーダ発行／実行パイプライン及びコアを示す。インオーダ態様は、アウトオブオーダの態様のサブセットであるとして、アウトオブオーダの態様は以下説明される。
【００６３】
図９Ａでは、プロセッサパイプライン９００は、フェッチステージ９０２、長さデコードステージ９０４、デコードステージ９０６、アロケーションステージ９０８、リネームステージ９１０、スケジューリング（ディスパッチ又は発行としても知られる）ステージ９１２、レジスタ読み出し／メモリ読み出しステージ９１４、実行ステージ９１６、ライトバック／メモリ書き込みステージ９１８、例外ハンドリングステージ９２２、及びコミットステージ９２４を含む。
【００６４】
図９Ｂは、実行エンジンユニット９５０に接続されたフロントエンドユニット９３０を含むプロセッサコア９９０を示し、両方はメモリユニット９７０に接続される。コア９９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、又はハイブリッド若しくは代替のコアタイプでありうる。さらなる他のオプションとして、コア９９０は、例えばネットワーク若しくは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット（ＧＰＧＰＵ）コア、又はグラフィックスコア等のような専用コアでありうる。
【００６５】
フロントエンドユニット９３０は、デコードユニット９４０に接続された命令フェッチユニット９３８に接続された命令トランスレーションルックアサイドバッファ（ＴＬＢ）９３６に接続された命令キャッシュユニット９３４に接続された分岐予測ユニット９３２を含む。デコードユニット９４０（またはデコーダ）は、複数の命令をデコードし、複数の元の命令からデコードされ、さもなければそれらを反映し、又はそれらから導出される、１または複数のマイクロオペレーション、複数のマイクロコードエントリポイント、複数のマイクロ命令、複数の他の命令又は複数の他の制御信号を、出力として生成しうる。デコードユニット９４０は、多様な異なるメカニズムを用いて実装されうる。複数の適切なメカニズムの例は、限定されないが、複数のルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコードリードオンリーメモリ（ＲＯＭ）等を含む。１つの実施形態では、コア９９０は、（例えばデコードユニット９４０内又はさもなければフロントエンドユニット９３０内の）複数の特定のマイクロ命令のマイクロコードを格納するマイクロコードＲＯＭ又は他の媒体を含む。デコードユニット９４０は、実行エンジンユニット９５０のリネーム／アロケーターユニット９５２に接続される。
【００６６】
実行エンジンユニット９５０は、リタイアメントユニット９５４に接続されたリネーム／アロケーターユニット９５２及び１または複数のスケジューラユニット９５６のセットを含む。スケジューラユニット９５６は、複数の予約ステーション、中央命令ウィンドウ等を含む、任意数の異なるスケジューラを表す。スケジューラユニット９５６は、物理レジスタファイルのユニット９５８に接続される。物理レジスタファイルのユニット９５８のそれぞれは、１または複数の物理レジスタファイルを表し、それらのうちの異なるものは、スカラー整数、スカラー浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、実行される次の命令のアドレスである命令ポインタ）等のような１または複数の異なるデータタイプを格納する。１つの実施形態では、物理レジスタファイルのユニット９５８は、ベクトル・レジスタユニット、ライトマスクレジスタユニット、及びスカラーレジスタユニットを含む。これらのレジスタユニットは、複数のアーキテクチャベクトルレジスタ、複数のベクトルマスクレジスタ、及び複数の汎用レジスタを提供しうる。物理レジスタファイルのユニット９５８は、リタイアメントユニット９５４に重複し、（例えば、レコーダバッファ及びリタイアメントレジスタファイルを用いて、将来ファイル、履歴バッファ、及びリタイアメントレジスタファイルを用いて、レジスタマップ及びレジスタのプールを用いて等）レジスタリネーム及びアウトオブオーダ実行が実装されうる多様な方法を示す。リタイアメントユニット９５４及び物理レジスタファイルのユニット９５８は、実行クラスター９６０に接続される。実行クラスター９６０は、１または複数の実行ユニット９６２のセット及び１または複数のメモリアクセスユニット９６４のセットを含む。複数の実行ユニット９６２は、多様なオペレーション（例えば、シフト、加算、減算、乗算）を、多様なタイプのデータ（例えば、スカラー浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点）に実行しうる。いくつかの実施形態は、複数の特定の機能又は複数の機能のセットに専用のいくつかの実行ユニットを含んでよく、一方他の実施形態は、１つのみの実行ユニット又は全てが全ての機能を実行する複数の実行ユニットを含みうる。スケジューラユニット９５６、物理レジスタファイルのユニット９５８、及び実行クラスター９６０は、場合により複数であるように示され、これは、複数の特定の実施形態は、特定のタイプのデータ／オペレーション（例えば、各々が各自のスケジューラユニット、物理レジスタファイルのユニット、および／または実行クラスターを有するスカラー整数パイプライン、スカラー浮動小数点／パック整数／パック浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、および／またはメモリアクセスパイプラインで、個別のメモリアクセスパイプラインの場合は複数の特定の実施形態が、このパイプラインの実行クラスターのみがメモリアクセスユニット９６４を有するように実装される）のための複数の個別のパイプラインを作成するためである。複数の個別のパイプラインが利用される場合、これらのパイプラインのうちの１または複数がアウトオブオーダ発行／実行であり、残りはインオーダでありうることも理解されるべきである。
【００６７】
複数のメモリアクセスユニット９６４のセットは、レベル２（Ｌ２）キャッシュユニット９７６に接続されたデータキャッシュユニット９７４に接続されたデータＴＬＢユニット９７２を含む、メモリユニット９７０に接続される。１つの例の実施形態では、メモリアクセスユニット９６４は、ロードユニット、格納アドレスユニット、及び格納データユニットを含み、各々はメモリユニット９７０内のデータＴＬＢユニット９７２に接続される。命令キャッシュユニット９３４はさらに、メモリユニット９７０のレベル２（Ｌ２）キャッシュユニット９７６に接続される。Ｌ２キャッシュユニット９７６は、１または複数の他のレベルのキャッシュに、及び最終的にはメインメモリに接続される。
【００６８】
例によって、例のレジスタリネームアウトオブオーダ発行／実行コアアーキテクチャは、以下のようにパイプライン９００を実装しうる。（１）命令フェッチ９３８がフェッチ及び長さデコードステージ９０２及び９０４を実行する。（２）デコードユニット９４０がデコードステージ９０６を実行する。（３）リネーム／アロケーターユニット９５２がアロケーションステージ９０８及びリネームステージ９１０を実行する。（４）スケジューラユニット９５６がスケジュールステージ９１２を実行する。（５）物理レジスタファイルのユニット９５８及びメモリユニット９７０がレジスタ読み出し／メモリ読み出しステージ９１４を実行する。実行クラスター９６０が実行ステージ９１６を実行する。（６）メモリユニット９７０及び物理レジスタファイルのユニット９５８がライトバック／メモリ書き込みステージ９１８を実行する。（７）様々なユニットが例外ハンドリングステージ９２２に係わる。（８）リタイアメントユニット９５４及び物理レジスタファイルのユニット９５８がコミットステージ９２４を実行する。
【００６９】
コア９９０は、本開示の命令を含む、１または複数の命令セット（例えばｘ８６命令セット（より新たなバージョンで追加されるいくつかの拡張を有する）、ＣＡ、サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｙのＭＩＰＳ命令セット、ＣＡ、サニーベールのＡＲＭ  ＨｏｌｄｉｎｇのＡＲＭ命令セット（ＮＥＯＮのような任意の追加の拡張を有する））をサポートしうる。１つの実施形態では、コア９９０は、パックデータ命令セット拡張（例えばＡＶＸ１，ＡＶＸ２）をサポートするロジックを含み、それにより、多くのマルチメディアアプリケーションで利用される複数のオペレーションがパックデータを利用して実行されることを可能にする。
【００７０】
コアが、（２又はそれより多い平行なセットのオペレーション又はスレッドを実行する）マルチスレッディングをサポートしてよく、タイムスライスマルチスレッディング、（単一の物理コアが、物理コアが同時にマルチスレッディングを行う複数のスレッドの各々に論理コアを提供する）同時マルチスレッディング、又はそれらの組み合わせ（例えば、タイムスライスフェッチとデコード、及びそれらの後のＩｎｔｅｌ（登録商標）ハイパースレッディングテクノロジーにあるような同時マルチスレッディング）を含む様々な方法でそのように行うことは理解されるべきである。
【００７１】
レジスタリネームがアウトオブオーダ実行のコンテキストで説明されたが、レジスタリネームがインオーダアーキテクチャで利用されうることは理解されるべきである。プロセッサの示された実施形態はまた、別個の命令及びデータキャッシュユニット９３４／９７４及び共有Ｌ２キャッシュユニット９７６を含み、複数の代替の実施形態は、例えば、レベル１（Ｌ１）内部キャッシュ又は複数のレベルの内部キャッシュのような、複数の命令及びデータの両方のための単一の内部キャッシュを有しうる。いくつかの実施形態では、システムは、内部キャッシュとコアおよび／またはプロセッサの外部にある外部キャッシュとの組み合わせを含みうる。もしくは、キャッシュの全てが、コアおよび／またはプロセッサの外部にあってよい。
【００７２】
特定の例のインオーダコアアーキテクチャ
【００７３】
図１０Ａ−Ｂは、より特定の例のインオーダコアアーキテクチャのブロック図を示し、いずれかのコアが、チップにおける（同じタイプおよび／または異なるタイプの他の複数のコアを含む）いくつかのロジックブロックの一つでありうる。複数のロジックブロックは、高帯域幅インタコネクトネットワーク（例えばリングネットワーク）を介していくつかの固定の機能ロジック、複数のメモリＩ／Ｏインタフェース、及び他の必要なＩ／Ｏロジックとアプリケーションに依存して通信する。
【００７４】
図１０Ａは、発明の複数の実施形態による、オンダイインタコネクトネットワーク１００２へのその接続と、レベル２（Ｌ２）キャッシュ１００４のそのローカルサブセットとを有する、単一のプロセッサコアのブロック図である。１つの実施形態では、命令デコーダ１０００は、パックデータ命令セット拡張により、ｘ８６命令セットをサポートする。Ｌ１キャッシュ１００６は、スカラー及びベクトルユニット内への、キャッシュメモリへの低レイテンシアクセスを可能にする。（設計を単純にした）１つの実施形態では、スカラーユニット１００８及びベクトルユニット１０１０は、複数の個別のレジスタセット（それぞれ、複数のスカラーレジスタ１０１２及び複数のベクトル・レジスタ１０１４）を用い、それらの間で転送されるデータがメモリに書き込まれ、その後レベル１（Ｌ１）キャッシュ１００６からリードバックされるが、発明の代替の複数の実施形態は、異なるアプローチを用いうる（例えば、単一のレジスタセットを用い、又は書き込まれてリードバックされずに、２つのレジスタ間でのデータ転送を可能にする通信経路を含む）。
【００７５】
Ｌ２キャッシュ１００４のローカルサブセットは、プロセッサコア毎に１つの、複数の別個のローカルサブセットへ分割されるグローバルＬ２キャッシュの一部である。各プロセッサコアは、Ｌ２キャッシュ１００４のそれ自身のローカルサブセットへの直接アクセス経路を有する。プロセッサコアにより読み取られたデータは、そのＬ２キャッシュサブセット１００４に格納され、自身の複数のローカルＬ２キャッシュサブセットにアクセスする複数の他のプロセッサコアに並行して素早くアクセスされうる。プロセッサコアにより書き込まれたデータは、必要であれば、自身のＬ２キャッシュサブセット１００４に格納され、複数の他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシを保証する。リングネットワークは双方向であり、複数のプロセッサコア、複数のＬ２キャッシュ及び複数の他のロジックブロックのような複数のエージェントがチップ内でお互いに通信可能であるようにする。各リングデータ経路は、方向ごとに１０１２ビット幅である。
【００７６】
図１０Ｂは、発明の複数の実施形態による、図１０Ａのプロセッサコアの一部の拡大図である。図１０Ｂは、Ｌ１キャッシュ１００４のＬ１データキャッシュ１００６Ａ部分と、ベクトルユニット１０１０及びベクトル・レジスタ１０１４に関するより詳細とを含む。具体的には、ベクトルユニット１０１０は、１６ワイドベクトル処理ユニット（ＶＰＵ）（１６ワイドＡＬＵ１０２８参照）であり、これは、整数、単精度浮動、及び倍精度浮動命令のうちの１または複数を実行する。ＶＰＵは、スウィズルユニット１０２０によるレジスタ入力のスウィズル、数値変換ユニット１０２２Ａ−Ｂによる数値変換、及びメモリ入力上でのレプリケーションユニット１０２４によるレプリケーションをサポートする。複数の書き込みマスクレジスタ１０２６は、結果のベクトル書き込みを暗示する（ｐｒｅｄｉｃａｔｉｎｇ）ことを可能にする。
【００７７】
統合メモリコントローラ及びグラフィックスを有するプロセッサ
【００７８】
図１１は、発明の複数の実施形態による、１より多いコアを有し、統合メモリコントローラを有し、及び集積化されたグラフィックスを有しうるプロセッサ１１００のブロック図である。図１１の実線で囲まれたボックスは、単一のコア１１０２Ａ、システムエージェント１１１０、１または複数のバスコントローラユニット１１１６のセットを有するプロセッサ１１００を示し、一方、点線で囲まれたボックスの任意の追加は、複数のコア１１０２Ａ−Ｎ、システムエージェントユニット１１１０の１または複数の統合メモリコントローラユニット１１１４のセット、及び専用ロジック１１０８を有する代替のプロセッサ１１００を示す。
【００７９】
このため、プロセッサ１１００の複数の異なる実装は、（１）（１または複数のコアを含みうる）集積化されたグラフィックスおよび／または科学（スループット）ロジックである専用ロジック１１０８と１または複数の汎用コア（例えば複数の汎用インオーダコア、複数の汎用アウトオブオーダコア、これら２つの組み合わせ）であるコア１１０２Ａ―Ｎとを有するＣＰＵ、（２）主にグラフィックスおよび／または科学（スループット）を対象とした多数の専用コアであるコア１１０２Ａ―Ｎを有するコプロセッサ、及び（３）多数の汎用インオーダコアであるコア１１０２Ａ―Ｎを有するコプロセッサを含みうる。このため、プロセッサ１１００は、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ（汎用グラフィックス処理ユニット）、（３０又はそれより多いコアを含む）高スループットメニー集積コア（ＭＩＣ）コプロセッサ、組み込みプロセッサ等のような汎用プロセッサ、コプロセッサ又は専用プロセッサでありうる。プロセッサは、１または複数のチップ上に実装されうる。プロセッサ１１００は、例えばＢｉＣＭＯＳ，ＣＭＯＳ，又はＮＭＯＳのような多数のプロセス技術のいずれかを用いて、１または複数の基板の一部であり、および／または、１または複数の基板上に実装されうる。
【００８０】
メモリ階層は、複数のコア、セットの１または複数の共有キャッシュユニット１１０６、及び統合メモリコントローラユニット１１１４のセットに接続された外部メモリ（図示しない）内の１または複数のレベルのキャッシュを含む。複数の共有キャッシュユニット１１０６のセットは、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、又は他のレベルのキャッシュのような１または複数の中間レベルキャッシュ、最高レベルキャッシュ（ＬＬＣ）および／またはそれらの組み合わせを含みうる。１実施形態において、リングベースインタコネクトユニット１１１２は、統合グラフィックスロジック１１０８、共有キャッシュユニット１１０６のセット及びシステムエージェントユニット１１１０／統合メモリコントローラユニット１１１４を相互接続し、また代替の実施形態では、そのような複数のユニットを相互接続する任意の数の周知技術を利用しうる。１実施形態では、コヒーレンシは、１または複数のキャッシュユニット１１０６及びコア１１０２―Ａ−Ｎの間で維持される。
【００８１】
いくつかの実施形態では、１または複数のコア１１０２Ａ―Ｎは、マルチスレッディングをできる。システムエージェント１１１０は、複数のコア１１０２Ａ−Ｎを協働及び動作させるそれらのコンポーネントを含む。システムエージェントユニット１１１０は、例えば、パワー制御ユニット（ＰＣＵ）及び表示部を含みうる。ＰＣＵは、コア１１０２Ａ―Ｎ及び統合グラフィックスロジック１１０８の電力状態を調節するのに必要なロジック及び複数のコンポーネントでありうる又は含みうる。表示部は、１または複数の外部接続されたディスプレイを駆動するためのものである。
【００８２】
複数のコア１１０２Ａ―Ｎは、アーキテクチャ命令セットの観点では同種又は異種であってよく、すなわち、コア１１０２Ａ―Ｎのうちの２又はそれより多くは、同じ命令セットを実行でき、一方、複数の他のものは、その命令セットのサブセットのみ又は異なる命令セットを実行できうる。
【００８３】
例の複数のコンピューターアーキテクチャ
【００８４】
図１２―１５は、例の複数のコンピューターアーキテクチャのブロック図である。複数のラップトップ、デスクトップ、ハンドヘルドＰＣ、携帯用情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタルシグナルプロセッサ（ＤＳＰ）、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤー、ハンドヘルドデバイス、及び多様な他の電子デバイスについて当該技術分野で知られた複数の他のシステムデザイン及び構成も適切である。概して、本開示のようなプロセッサおよび／または他の実行ロジックを組み込むことができる多様なシステム又は電子デバイスは通常適切である。
【００８５】
次に図１２を参照し、本発明の１実施形態によるシステム１２００のブロック図を示す。システム１２００は、コントローラハブ１２２０に接続された１または複数のプロセッサ１２１０、１２１５を含みうる。１実施形態では、コントローラハブ１２２０は、（複数の別のチップ上にありうる）グラフィックスメモリコントローラハブ（ＧＭＣＨ）１２９０及び入出力ハブ（ＩＯＨ）１２５０を含み、ＧＭＣＨ１２９０は、メモリ１２４０及びコプロセッサ１２４５に接続されたメモリ及び複数のグラフィックスコントローラを含み、ＩＯＨ１２５０は、複数の入出力（Ｉ／Ｏ）デバイス１２６０をＧＭＣＨ１２９０に接続する。もしくは、（本開示のように）メモリ及び複数のグラフィックスコントローラの一方又は両方は、プロセッサ内に統合され、メモリ１２４０及びコプロセッサ１２４５は、ＩＯＨ１２５０を有する単一のチップにおいてプロセッサ１２１０及びコントローラハブ１２２０に直接接続される。
【００８６】
複数の追加のプロセッサ１２１５の任意の特徴は、図１２に破線で示される。各プロセッサ１２１０、１２１５は、本開示の処理コアのうちの１または複数を含み、プロセッサ１１００のあるバージョンでありうる。
【００８７】
メモリ１２４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）又は当該２つの組み合わせでありうる。少なくとも１つの実施形態について、コントローラハブ１２２０は、フロントサイドバス（ＦＳＢ）、Ｑｕｉｃｋ  Ｐａｔｈ  インタコネクト（ＱＰＩ）のようなポイントツーポイントインタフェース、又は同様の接続１２９５のようなマルチドロップバスを介して、プロセッサ１２１０，１２１５と通信する。
【００８８】
１実施形態では、コプロセッサ１２４５は、例えば、高スループットＭＩＣプロセッサ、ネットワーク若しくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、又は組み込みプロセッサ等のような専用プロセッサである。１実施形態では、コントローラハブ１２２０は、集積化されたグラフィックスアクセラレータを含みうる。
【００８９】
アーキテクチャ、マイクロアーキテクチャ、熱、及び電力消費特性等を含むメリットのメトリクスのスペクトルに関して、複数の物理リソース１２１０、１２１５の間には様々な差がありうる。
【００９０】
１実施形態では、プロセッサ１２１０は、一般型の複数のデータ処理オペレーションを制御する複数の命令を実行する。複数のコプロセッサ命令が複数の命令内に組み込まれうる。プロセッサ１２１０は、これらのコプロセッサ命令を、付属のコプロセッサ１２４５によって実行されるべきタイプのものであるとして認識する。従って、プロセッサ１２１０は、コプロセッサバス又は他のインタコネクト上で、これらのコプロセッサ命令（又は複数のコプロセッサ命令を表す複数の制御信号）を、コプロセッサ１２４５へ発行する。コプロセッサ１２４５は、受信したコプロセッサ命令を受け取り、実行する。
【００９１】
次に図１３を参照し、本発明の実施形態による第１のより具体的な例のシステム１３００のブロック図を示す。図１３に示すように、マルチプロセッサシステム１３００は、ポイントツーポイントインタコネクトシステムであり、ポイントツーポイントインタコネクト１３５０を介して接続された第１のプロセッサ１３７０及び第２のプロセッサ１３８０を含む。プロセッサ１３７０および１３８０のそれぞれは、あるバージョンのプロセッサ１１００である。発明の１実施形態では、プロセッサ１３７０および１３８０は、それぞれ、プロセッサ１２１０および１２１５であり、コプロセッサ１３３８はコプロセッサ１２４５である。他の実施形態では、プロセッサ１３７０および１３８０は、それぞれ、プロセッサ１２１０およびコプロセッサ１２４５である。
【００９２】
プロセッサ１３７０および１３８０が示され、それぞれ、統合メモリコントローラ（ＩＭＣ）ユニット１３７２および１３８２を含む。プロセッサ１３７０はまた、そのバスコントローラユニットの一部として、ポイントツーポイント（Ｐ−Ｐ）インタフェース１３７６及び１３７８を含み、同様に、第２のプロセッサ１３８０はＰ−Ｐインタフェース１３８６および１３８８を含む。プロセッサ１３７０、１３８０は、Ｐ−Ｐインタフェース回路１３７８，１３８８を用い、ポイントツーポイント（Ｐ−Ｐ）インタフェース１３５０を介して情報を交換しうる。図１３に示すように、ＩＭＣ１３７２及び１３８２は、複数のプロセッサを、各メモリ、すなわちメモリ１３３２及び１３３４に接続し、当該メモリは、各プロセッサにローカルに取り付けられたメインメモリの一部でありうる。
【００９３】
プロセッサ１３７０、１３８０はそれぞれ、ポイントツーポイントインタフェース回路１３７６，１３９４，１３８６，１３９８を用いて、個々のＰ−Ｐインタフェース１３５２、１３５４を介して、チップセット１３９０と情報を交換しうる。チップセット１３９０は、任意に、ハイパフォーマンスインタフェース１３３９を介してコプロセッサ１３３８と情報を交換しうる。１実施形態では、コプロセッサ１３３８は、例えば、高スループットＭＩＣプロセッサ、ネットワーク若しくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、又は組み込みプロセッサ等のような専用プロセッサである。
【００９４】
共有キャッシュ（図示しない）は、いずれかのプロセッサ内又は両プロセッサの外側に含まれ、さらにＰ−Ｐインタコネクトを介して複数のプロセッサに接続され、複数のプロセッサのいずれか又は両方のローカルキャッシュ情報は、プロセッサが低パワーモードにされた場合に共有キャッシュに格納されうる。
【００９５】
チップセット１３９０は、インタフェース１３９６を介して第１のバス１３１６に接続されうる。１実施形態では、本発明の範囲をそれほど限定しないが、第１のバス１３１６は、ペリフェラルコンポーネントインタコネクト（ＰＣＩ）バス、又は、ＰＣＩ  Ｅｘｐｒｅｓｓバス若しくは他の第３世代Ｉ／Ｏインタコネクトバスのようなバスでありうる。
【００９６】
図１３に示すように、様々なＩ／Ｏデバイス１３１４は、第１のバス１３１６を第２のバス１３２０へ接続するバスブリッジ１３１８とともに、第１のバス１３１６へ接続されうる。１実施形態では、複数のコプロセッサ、複数の高スループットＭＩＣプロセッサ、ＧＰＧＰＵのもの、（例えば、複数のグラフィックスアクセラレータ又はデジタル信号処理（ＤＳＰ）ユニットのような）複数のアクセラレータ、複数のフィールドプログラマブルゲートアレイ、又は任意の他のプロセッサのような、１または複数の追加のプロセッサ１３１５が、第１のバス１３１６に接続される。１実施形態では、第２のバス１３２０は、ローピンカウント（ＬＰＣ）バスでありうる。１実施形態では、様々なデバイスが、例えば、キーボードおよび／またはマウス１３２２、通信デバイス１３２７、及びディスクドライブ又は他の大容量記憶デバイスのような記憶ユニット１３２８を含む、第２のバス１３２０に接続されうる。記憶ユニットは、複数の命令／コード及びデータ１３３０を含みうる。さらに、オーディオＩ／Ｏ１３２４は、第２のバス１３２０に接続されうる。複数の他のアーキテクチャが可能であるということを留意すべきである。例えば、図１３のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバス又は他のそのようなアーキテクチャを実装しうる。
【００９７】
次に図１４を参照し、本発明の実施形態による、第２のより具体的な例のシステム１４００のブロック図を示す。図１３および１４の同様の要素は同様の参照符号を有し、図１３の特定の態様は、図１４の他の態様を分かりにくくしないように、図１４から省略されている。
【００９８】
図１４は、プロセッサ１３７０、１３８０が、統合メモリ及びＩ／Ｏ制御ロジック（「ＣＬ」）１３７２及び１３８２をそれぞれ含みうることを示す。このため、ＣＬ１３７２及び１３８２は、複数の統合メモリコントローラユニットを含み、Ｉ／Ｏ制御ロジックを含む。図１４は、ＣＬ１３７２、１３８２に接続されたメモリ１３３２、１３３４だけではなく、複数のＩ／Ｏデバイス１４１４も、制御ロジック１３７２、１３８２に接続されることを示す。複数のレガシーＩ／Ｏデバイス１４１５は、チップセット１３９０に接続される。
【００９９】
以下図１５を参照し、本発明の実施形態による、ＳｏＣ１５００のブロック図を示す。図１１の同様の要素は、同様の参照符号を有する。また、点線で囲まれた複数のボックスは、さらに進んだ複数のＳｏＣの複数の任意の特徴である。図１５では、インタコネクトユニット１５０２は、１または複数のコア２０２Ａ―Ｎのセット及び共有キャッシュユニット１１０６を含むアプリケーションプロセッサ１５１０；システムエージェントユニット１１１０；バスコントローラユニット１１１６；統合メモリコントローラユニット１１１４；統合グラフィックスロジック、イメージプロセッサ、オーディオプロセッサ、及びビデオプロセッサを含みうる１または複数のコプロセッサ１５２０のセット；スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット１５３０；ダイレクトメモリアクセス（ＤＭＡ）ユニット１５３２；及び１または複数の外部ディスプレイに接続するための表示部１５４０に接続される。１実施形態では、コプロセッサ１５２０は、例えば、ネットワーク若しくは通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、高スループットＭＩＣプロセッサ、又は組み込みプロセッサ等のような専用プロセッサを含む。
【０１００】
本開示の複数のメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はそのような複数の実装アプローチの組み合わせにおいて実装されうる。発明の複数の実施形態は、複数のプログラム可能システム上で実行するコンピュータプログラム又はプログラムコードとして実装されうる。当該プラグラム可能システムは、少なくとも、１つのプロセッサ、ストレージシステム（揮発性及び不揮発性メモリ、および／または複数のストレージ要素を含む）、少なくとも１つの入力デバイス及び少なくとも１つの出力デバイスを備える。
【０１０１】
図１３に示されたコード１３３０のようなプログラムコードは、複数の命令を入力して、本開示の複数の機能を実行し、出力情報を生成するように適用されうる。出力情報は、１または複数の出力デバイスに既知の方法で適用されうる。この適用のために、処理システムは、例えば、デジタルシグナルプロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、又はマイクロプロセッサのようなプロセッサを有する任意のシステムを含む。
【０１０２】
プログラムコードは、処理システムと通信するように、ハイレベルプロシージャ又はオブジェクト指向プログラミング言語において実装されうる。プログラムコードはまた、望ましい場合は、アセンブリ又はマシン言語において実装されうる。事実、本開示の複数のメカニズムは、範囲において、いずれの特定のプログラミング言語にも限定されない。いずれの場合も、言語は、コンパイル又はインタプリタ言語でありうる。
【０１０３】
少なくとも１つの実施形態の１または複数の態様は、プロセッサ内の多様なロジックを表すマシン可読媒体上に格納された複数の代表的な命令によって実装されうる。当該命令は、マシンによって読み込まれた際に、マシンに、本開示の複数の技術を実行するロジックを作らせる。複数の「ＩＰコア」として知られるそのような複数の代表は、有形のマシン可読媒体に格納されてよく、様々な顧客又は製造設備へ供給され、ロジック又はプロセッサを実際に作る複数の作製マシンにロードされうる。
【０１０４】
限定しないが、そのようなマシン可読記憶媒体は、マシン又はデバイスによって製造され又は形成された複数の物品の非一時的有形装置を含みうる。これは、複数のハードディスク、複数のフロッピー（登録商標）ディスク、複数の光ディスク、複数のコンパクトディスクリードオンリメモリ（ＣＤ−ＲＯＭ）、複数のコンパクトディスクリライタブル（ＣＤ−ＲＷ）、及び複数の光磁気ディスクを含む、複数の任意の他のタイプのディスクのような記憶媒体、複数のリードオンリメモリ（ＲＯＭ）、複数のダイナミックランダムアクセスメモリ（ＤＲＡＭ）のような複数のランダムアクセスメモリ（ＲＡＭ）、複数のスタティックランダムアクセスメモリ（ＳＲＡＭ）、複数の消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、複数のフラッシュメモリ、複数の電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、相変化メモリ（ＰＣＭ）、複数の磁気又は光カード、又は複数の電子命令を格納するのに適した任意の他のタイプの媒体のような半導体デバイスを含む。
【０１０５】
従って、発明の複数の実施形態はまた、複数の命令を含む、又はハードウェア記述言語（ＨＤＬ）のような設計データを含む非一時的有形マシン可読媒体を含む。設計データは、本開示の複数の構造、回路、装置、プロセッサ、および／またはシステムの特徴を規定する。そのような複数の実施形態はまた、プログラムプロダクトとして参照されうる。
【０１０６】
エミュレーション（バイナリ変換、コードモーフィング等を含む）
【０１０７】
いくつかの場合では、命令変換器は、ソース命令セットからターゲット命令セットへ命令を変換するように利用されうる。例えば、命令変換器は、命令を、コアによって処理される１または複数の他の命令へ、変換（例えば静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を利用する）、モーフィング、エミュレート、さもなければ、コンバートしうる。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、又はそれらの組み合わせにおいて実装されうる。命令変換器は、プロセッサ上にあり、プロセッサ外にあり、又はプロセッサ上の一部及びプロセッサ外の一部でありうる。
【０１０８】
図１６は、発明の複数の実施形態による、ソフトウェア命令変換器の利用を対比させ、ソース命令セットの複数のバイナリ命令をターゲット命令セットの複数のバイナリ命令へ変換するブロック図である。示された実施形態では、命令変換器は、ソフトウェア命令変換器であるが、代替的に、命令変換器がソフトウェア、ファームウェア、ハードウェア、又は様々なそれらの組み合わせにおいて実装されうる。図１６は、少なくとも１つのｘ８６命令セットコアを有するプロセッサ１６１６により本来的に実行されうるｘ８６バイナリコード１６０６を生成するべく、高級言語１６０２のプログラムが、ｘ８６コンパイラー１６０４を用いてコンパイルされうることを示す。少なくとも１つのｘ８６命令セットコアを有するプロセッサ１６１６は、少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌプロセッサと実質的に同じ結果を達成するために、（１）インテルｘ８６命令セットコアの命令セットの実質的な部分、又は（２）少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌプロセッサ上で実行されることを対象とした複数のアプリケーション又は他のソフトウェアの複数のオブジェクトコードバージョンを、互換性で実行するさもなければ処理することにより、少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌプロセッサと実質的に同じ機能を実行できる任意のプロセッサを表す。ｘ８６コンパイラー１６０４は、追加のリンケージ処理を用いて又は用いないで、少なくとも１つのｘ８６命令セットコアを有するプロセッサ１６１６上で実行可能なｘ８６バイナリコード１６０６（例えばオブジェクトコード）を生成するように動作可能であるコンパイラーを表す。同様に、図１６は、高級言語１６０２のプログラムが、少なくとも１つのｘ８６命令セットコアを有さないプロセッサ１６１４（例えば、ＣＡ，サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｙのＭＩＰＳ命令セットを実行するおよび／またはＣＡ、サニーベールのＡＲＭ  ＨｏｌｄｉｎｇのＡＲＭ命令セットを実行する複数のコアを有するプロセッサ）によって本来的に実行されうる代替の命令セットのバイナリコード１６１０を生成すべく、代替の命令セットコンパイラー１６０８を用いてコンパイルされうることを示す。命令変換器１６１２は、ｘ８６命令セットコアを有さないプロセッサ１６１４によって本来的に実行されうるコードへｘ８６バイナリコード１６０６を変換するように用いられる。この変換されたコードは、これができる命令変換器は作製が困難であるため、代替の命令セットのバイナリコード１６１０と同じではないであろう。しかし、変換されたコードは、全般的なオペレーションを達成し、代替の命令セットからの複数の命令からなりうる。このため、命令変換器１６１２は、ソフトウェア、ファームウェア、ハードウェア、又はこれらの組み合わせを表し、これらは、エミュレーション、シミュレーション、又は任意の他のプロセスを介して、ｘ８６命令セットプロセッサ又はコアを有さないプロセッサ又は他の電子デバイスが、ｘ８６バイナリコード１６０６を実行することを可能にする。
【０１０９】
図６−８のいずれかについて記載された複数のコンポーネント、特徴、及び詳細はまた、任意に、図１−５のいずれかで用いられうる。さらに、本開示の複数の装置のいずれかについての本開示の複数のコンポーネント、特徴、及び詳細はまた、任意に、複数の実施形態でそのような装置によっておよび／または用いて実行されうる本開示の複数の方法のいずれかにおいて利用および／または適用されうる。本開示の複数のプロセッサのいずれかは、本開示の複数のコンピュータシステム又は複数の他のシステムに含まれうる。
【０１１０】
説明及び複数の請求項では、「ｃｏｕｐｌｅｄ」および／または「ｃｏｎｎｅｃｔｅｄ」という用語は、それらの派生語とともに用いられうる。これらの用語は、お互いに類義語として意図されていない。むしろ、複数の実施形態では、「ｃｏｎｎｅｃｔｅｄ」は、２又はそれより多い要素がお互いに直接物理的および／または電気的に接触していることを示すために用いられうる。「ｃｏｕｐｌｅｄ」は、２又はそれより多い要素が、直接物理的および／または電気的にお互いに接触していることを意味しうる。しかし、「ｃｏｕｐｌｅｄ」はまた、２又はそれより多い要素が、お互いに直接接触しておらず、しかしまだ、お互いに協働又は相互作用することを意味しうる。複数の図では、複数の矢印は、複数の接続及び連結を示すように用いられる。
【０１１１】
「および／または」という用語が用いられた。本開示で用いられるように、「および／または」という用語は、一方又は他方又は両方を意味する（例えばＡおよび／またはＢは、Ａ、又はＢ、又はＡ及びＢの両方を意味する）。
【０１１２】
上記説明では、複数の特定の詳細が、複数の実施形態の完全な理解を提供すべく示された。しかし、複数の他の実施形態は、これらの特定の詳細を用いないで実施されうる。発明の範囲は、上記提供された複数の特定の例によってではなく、以下の請求項によってのみ決定されるべきである。複数の他の例では、よく知られた複数の回路、構造、デバイス及びオペレーションは、ブロック図形式で、および／または、説明の理解を分かりにくくしないように詳細を用いないで示された。適切であると考えられる場合には、複数の参照符号、又は複数の参照符号の末端部は、特定されない又は明確に別の方法で明らかでない限り、任意に、同様の又は同じ特性を有しうる、複数の対応する又は類似の要素を示すべく複数の図の間で繰り返された。いくつかの場合では、複数のコンポーネントが示され説明され、適切な場合には、それらがかわりに任意に単一のコンポーネントとして共に統合されうる。複数の他の場合には、単一のコンポーネントが示され説明され、適切な場合には、それは任意に２又はそれより多いコンポーネントに分離されうる。
【０１１３】
様々なオペレーション及び方法が説明された。複数の方法のいくつかは、複数のフロー図において比較的基本的な形態で説明されたが、複数のオペレーションは任意に、複数の方法に加えられおよび／または複数の方法から除去されうる。加えて、複数のフロー図が複数の実施形態による複数のオペレーションの特定の順序を示したが、その順序は例である。複数の代替の実施形態は、異なる順序で複数のオペレーションを実行し、複数の特定のオペレーションを結合し、複数の特定のオペレーションを重複させる等できる。
【０１１４】
いくつかの実施形態は、マシン可読媒体を含む製造品（例えば、コンピュータプログラムプロダクト）を含む。媒体は、マシンによって可読な形式の情報を提供する、例えば格納するメカニズムを含みうる。マシン可読媒体は、マシンによって実行された場合および／または時に、本開示の１又は複数のオペレーション、方法、又は技術をマシンに実行させるおよび／またはマシンが実行する結果をもたらす、複数の命令のシーケンスを提供又はそれに格納しうる。
【０１１５】
いくつかの実施形態では、マシン可読媒体は、有形のおよび／または非一時的なマシン可読記憶媒体を含みうる。例えば、有形のおよび／または非一時的なマシン可読記憶媒体は、フロッピー（登録商標）ディスク、光記憶媒体、光ディスク、光データ記憶デバイス、ＣＤ−ＲＯＭ、磁気ディスク、光磁気ディスク、リードオンリメモリ（ＲＯＭ）、プログラム可能ＲＯＭ（ＰＲＯＭ）、消去可能プログラム可能ＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラム可能ＲＯＭ（ＥＥＰＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）フラッシュメモリ、相変化メモリ、相変化データ記憶マテリアル、不揮発性メモリ、不揮発性データ記憶デバイス、非一時的メモリ、又は非一時的データ記憶デバイス等を含みうる。非一時的なマシン可読記憶媒体は、一時的伝搬信号からなるものではない。
【０１１６】
複数の適切なマシンの例は、限定されないが、１または複数のプロセッサを含む複数のコンピューティングデバイス又は他の電子デバイスを含む。そのような複数のコンピューティングデバイス及び電子デバイスの例は、限定されないが、ごくわずかの例を挙げるべく、複数の携帯電話、スマートフォン、タブレットコンピュータ、ネットブック、モバイルインターネットデバイス（ＭＩＤ）、メディアプレイヤー、ラップトップコンピュータ、ノートブックコンピュータ、デスクトップコンピュータ、スマートテレビ、ネットトップ、セットトップボックス、及びビデオゲームコントローラを含みうる。
【０１１７】
この明細書を通じて、例えば「１実施形態」、「実施形態」、「１または複数の実施形態」、「いくつかの実施形態」への参照は、特定の特徴が、発明の実施に含まれうるが必ずしも必須ではないことを示す。同様に、説明で、開示の効率化及び様々な発明の態様の理解の援助のために、様々な特徴は、時には単一の実施形態、図又はそれらの説明においてグループを作る。しかし開示のこの方法は、発明が各請求項に明確に挙げられたより多くの特徴を必要とする意図を表すとして解釈されるべきではない。むしろ、以下の請求項が表すように、複数の発明の態様は、単一の開示された実施形態の全ての特徴より少ないという点にある。このため、詳細な説明に続く複数の請求項は、本開示で、各請求項が発明の別個の実施形態としてそれ自身に基づくため、この詳細な説明に明示的に組み込まれる。
【０１１８】
例の実施形態
【０１１９】
以下の複数の実施例は、さらなる複数の実施形態に関する。複数の実施例における詳細は、１または複数の実施形態のいずれにおいても利用されうる。
【０１２０】
実施例１は、第１のアーキテクチャコードモジュールから第１のアーキテクチャライブラリモジュールを対象とする第１の呼び出し手順オペレーションを受け取る制御フロー移転受け取りモジュールを含むインターアーキテクチャ互換性装置を含む。第１の呼び出し手順オペレーションは第１の複数の入力パラメータを含む。アプリケーションバイナリインタフェース（ＡＢＩ）変更モジュールは、制御フロー移転受け取りモジュールに接続される。ＡＢＩ変更モジュールは、第１の呼び出し手順オペレーションを、対応する第２の呼び出し手順オペレーションへ変換するべく複数のＡＢＩ変更を行う。第１の呼び出し手順オペレーションは、第１の複数の入力パラメータを含み、第２の呼び出し手順オペレーションは、第２の複数の入力パラメータを含む。第２の呼び出し手順オペレーションは、第２のアーキテクチャライブラリモジュールと互換性がある。制御フロー移転出力モジュールは、ＡＢＩ変更モジュールに接続される。制御フロー移転出力モジュールは、第２の呼び出し手順オペレーションを第２のアーキテクチャライブラリモジュールへ提供する。
【０１２１】
実施例２は、実施例１の装置を含み、ＡＢＩ変更モジュールは、第１の複数の入力パラメータのうちの第１のパラメータをスタックから受け取り、第１のパラメータに対応する、第２の複数の入力パラメータのうちの第２のパラメータを、第２のアーキテクチャライブラリモジュールによって第２のパラメータについて利用されることが予期されるレジスタに格納する。
【０１２２】
実施例３は、実施例１の装置を含み、制御フロー移転受け取りモジュール、ＡＢＩ変更モジュール、及び制御フロー移転出力モジュールは、第１のアーキテクチャライブラリモジュールに対応する第１のラッパーモジュールの一部である。
【０１２３】
実施例４は、実施例３の装置を含み、各々が異なる第１のアーキテクチャライブラリモジュールに対応する複数のラッパーモジュールをさらに含み、複数のラッパーモジュールの各々は、制御フロー移転受け取りモジュール、ＡＢＩ変更モジュール、及び制御フロー移転出力モジュールを有する。
【０１２４】
実施例５は、実施例４の装置を含み、第１のラッパーモジュールは第１のアーキテクチャライブラリモジュールと同じ名前を有し、複数のラッパーモジュールの各々は、対応する異なる第１のアーキテクチャライブラリモジュールと同じ名前を有する。
【０１２５】
実施例６は、実施例１の装置を含み、実行される第１のアーキテクチャコード及び第２のアーキテクチャコードから選択されたコードのタイプを決定するプロセッサモード変更モジュールをさらに有し、プロセッサモード変更モジュールは、実行されるコードの決定されたタイプと互換性のあるプロセッサのコードタイプ実行モードを変更する。
【０１２６】
実施例７は、実施例６の装置を含み、プロセッサモード変更モジュールは、全ての第１のアーキテクチャコードを有する第１セグメントと全ての第２のアーキテクチャコードを有する第２のセグメントとの間の複数のインターセグメント制御フロー移転に基づいて実行されるコードのタイプを決定する。
【０１２７】
実施例８は、実施例１から７のいずれか一つの装置を含み、制御フロー移転受け取りモジュールは、３２ビットライブラリモジュールを対象とする第１の呼び出し手順オペレーションを３２ビットコードモジュールから受け取り、ＡＢＩ変更モジュールは、６４ビットライブラリモジュールと互換性のある対応する第２の呼び出し手順オペレーションへ第１の呼び出し手順オペレーションを変換し、制御フロー移転出力モジュールは、第２の呼び出し手順オペレーションを６４ビットライブラリモジュールへ提供する。
【０１２８】
実施例９は、実施例１から７のいずれか１つの装置を含み、第１のアーキテクチャコードモジュールによって利用可能な複数のアーキテクチャ整数レジスタの最大ビット幅は、第２のアーキテクチャコードモジュールによって利用可能な複数のアーキテクチャ整数レジスタの最大ビット幅とは異なる。
【０１２９】
実施例１０は、第１のアーキテクチャコードモジュールから、第１のアーキテクチャライブラリモジュールを対象とした第１の呼び出し手順オペレーションを受け取る段階を含むインターアーキテクチャ互換方法である。第１の呼び出し手順オペレーションは第１の複数の入力パラメータを含む。方法はまた、第２のアーキテクチャライブラリモジュールへ、第２の複数の入力パラメータを含む対応する第２の呼び出し手順オペレーションを提供する段階を含む。
【０１３０】
実施例１１は、実施例１０の方法を含み、受け取る段階は、３２ビットコードモジュールから３２ビットライブラリモジュールを対象とする第１の呼び出し手順オペレーションを受け取る段階を含み、提供する段階は、第２の呼び出し手順オペレーションを６４ビットライブラリモジュールへ提供する段階を含む。
【０１３１】
実施例１２は、実施例１０の方法を含み、スタックから第１の複数の入力パラメータの第１のパラメータを受け取る段階と、第２の複数の入力パラメータの第２のパラメータを、第２のアーキテクチャライブラリモジュールが第２のパラメータを受け取るために利用したレジスタに格納する段階とをさらに含む。第２のパラメータは第１のパラメータに対応する。
【０１３２】
実施例１３は、実施例１０の方法を含み、受け取る段階は、第１のアーキテクチャライブラリモジュールと同じ名前を有するラッパーモジュールで第１の呼び出し手順オペレーションを受け取る段階を含む。
【０１３３】
実施例１４は、実施例１３の方法を含み、第１のアーキテクチャライブラリモジュール及び第２のアーキテクチャライブラリモジュールの両方の前に動的リンカーによって検索されるようにラッパーモジュールを構成する段階をさらに含む。
【０１３４】
実施例１５は実施例１０の方法を含み、第１のアーキテクチャライブラリモジュールを有さない電子デバイスにおいて実行される。
【０１３５】
実施例１６は、３２ビットコードモジュール及び６４ビットライブラリモジュールを格納するメモリを含むコンピュータシステムである。６４ビットプロセッサは、メモリに接続される。システムはまた、３２ビットライブラリモジュールのための３２ビットコードモジュールからの呼び出し手順オペレーションをインターセプトし、６４ビットライブラリモジュールへ対応する呼び出し手順オペレーションを提供するインターアーキテクチャ互換性モジュールを含む。
【０１３６】
実施例１７は、実施例１６のコンピュータシステムを含み、インターアーキテクチャ互換性モジュールは、３２ビットライブラリモジュールのための呼び出し手順オペレーションを６４ビットライブラリモジュールのための対応する呼び出し手順オペレーションへ変換するべく、複数のアプリケーションバイナリインタフェース（ＡＢＩ）変更を行う。
【０１３７】
実施例１８は、実施例１６のコンピュータシステムを含み、３２ビットコードモジュール及び６４ビットライブラリモジュールは、メモリの複数の異なるセグメントに格納され、３２ビットコードモジュールを格納するセグメントはフラットアドレス指定を利用する。
【０１３８】
実施例１９は、実施例１６のコンピュータシステムを含み、インターアーキテクチャ互換性モジュールは、３２ビットコードモジュールからの呼び出し手順オペレーションをインターセプトする３２ビットライブラリモジュールと同じ名前を有するラッパーモジュールを含む。
【０１３９】
実施例２０は、実施例１６から１９のいずれか１つのコンピュータシステムを含み、コンピュータシステムは３２ビットライブラリモジュールを有さない。
【０１４０】
実施例２１は、実施例２０のコンピュータシステムを含み、コンピュータシステムはいずれの３２ビットライブラリモジュールも有さない。
【０１４１】
実施例２２は、実施例１６から１９のいずれか一つのコンピュータシステムを含み、コンピュータシステムはスマートフォンを含む。
【０１４２】
実施例２３は、複数の命令を格納する非一時的なマシン可読記憶媒体を含む製造品であり、当該命令は、マシンによって実行された場合、マシンに、第１のアーキテクチャコードモジュールから第１のアーキテクチャライブラリモジュールを対象とする第１の呼び出し手順オペレーションを受け取る段階を含む複数のオペレーションを実行させ、第１の呼び出し手順オペレーションは第１の複数の入力パラメータを含む。当該複数のオペレーションはまた、第１の複数の入力パラメータを含む第１の呼び出し手順オペレーションを、第２の複数の入力パラメータを含む対応する第２の呼び出し手順オペレーションへ変換するべく、複数のアプリケーションバイナリインタフェース（ＡＢＩ）変更を行う段階を含む。複数のオペレーションはまた、第２の呼び出し手順オペレーションを第２のアーキテクチャライブラリモジュールへ提供する段階を含む。
【０１４３】
実施例２４は、実施例２３の製造品を含み、複数の命令は、マシンによって実行された場合、３２ビットライブラリモジュールを対象とする第１の呼び出し手順オペレーションを３２ビットコードモジュールから受け取る段階と、第２の呼び出し手順オペレーションを６４ビットライブラリモジュールへ提供する段階とを含む複数のオペレーションをマシンに実行させる。
【０１４４】
実施例２５は、実施例２３から２４のいずれかの製造品を含み、マシンによって実行された場合、スタックから、第１の複数の入力パラメータの第１のパラメータを受け取る段階と、第２の複数の入力パラメータの第２のパラメータを、第２のアーキテクチャライブラリモジュールが第２のパラメータを受け取るために利用したレジスタに格納する段階とを含む複数のオペレーションをマシンに実行させる複数の命令をさらに格納する。第２のパラメータは第１のパラメータに対応する。
【０１４５】
実施例２６は、実施例１０−１５のいずれかの方法を実行するように動作可能である装置を含む。
【０１４６】
実施例２７は、実施例１０−１５のいずれかの方法を実行するための手段を含む装置を含む。
【０１４７】
実施例２８は、実施例１０−１５の一つの方法を実行する、複数のモジュール、ユニット、手段又はこれらの組み合わせを含む装置を含む。
【０１４８】
実施例２９は、任意に複数の命令を格納しさもなければ提供する非一時的マシン可読媒体を任意に含む製造品を含む。複数の命令は、プロセッサ、コンピュータシステム、又は他のマシンによって実行された場合および／または時に、コンピュータシステム又は他のマシンが実施例１０−１５のいずれかの方法を実行するようにさせるよう動作可能である。
【０１４９】
実施例３０は、バス又は他のインタコネクト、インタコネクトに接続されたプロセッサ、インタコネクトに接続されたフラッシュメモリ、及びインタコネクトに接続された任意のアンテナを含む、コンピュータシステム又は他の電子デバイスを含み、コンピュータシステム又は他の電子デバイスは、実施例１０−１５のいずれかの方法を実行するように動作可能である。
【０１５０】
実施例３１は、実質的に本開示のような１または複数のオペレーション又はいずれかの方法を実行するように動作可能な装置を含む。
【０１５１】
実施例３２は、実質的に本開示のようなインターアーキテクチャ互換性モジュールを含む。
【図１】
2015191657.tif 000003
【図２】
2015191657.tif 000004
【図３】
2015191657.tif 000005
【図４】
2015191657.tif 000006
【図５】
2015191657.tif 000007
【図６】
2015191657.tif 000008
【図７】
2015191657.tif 000009
【図８】
2015191657.tif 000010
【図９Ａ】
2015191657.tif 000011
【図９Ｂ】
2015191657.tif 000012
【図１０Ａ】
2015191657.tif 000013
【図１０Ｂ】
2015191657.tif 000014
【図１１】
2015191657.tif 000015
【図１２】
2015191657.tif 000016
【図１３】
2015191657.tif 000017
【図１４】
2015191657.tif 000018
【図１５】
2015191657.tif 000019
【図１６】
2015191657.tif 000020
【外国語明細書】
2015191657000001.pdf