JP6124463B2 - 一方のアーキテクチャのコードモジュールが他方のアーキテクチャのライブラリモジュールを用いることを可能にするインターアーキテクチャ互換性モジュール - Google Patents

一方のアーキテクチャのコードモジュールが他方のアーキテクチャのライブラリモジュールを用いることを可能にするインターアーキテクチャ互換性モジュール Download PDF

Info

Publication number
JP6124463B2
JP6124463B2 JP2015005697A JP2015005697A JP6124463B2 JP 6124463 B2 JP6124463 B2 JP 6124463B2 JP 2015005697 A JP2015005697 A JP 2015005697A JP 2015005697 A JP2015005697 A JP 2015005697A JP 6124463 B2 JP6124463 B2 JP 6124463B2
Authority
JP
Japan
Prior art keywords
module
bit
architecture
code
library
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2015005697A
Other languages
English (en)
Other versions
JP2015191657A (ja
Inventor
ハサブニス、ニランジャン
スリニヴァス、スレシュ
ボッバ、ジャヤラン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of JP2015191657A publication Critical patent/JP2015191657A/ja
Application granted granted Critical
Publication of JP6124463B2 publication Critical patent/JP6124463B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • G06F9/4552Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/545Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Description

本開示の複数の実施形態は概して、複数の電子デバイスでのコードの実行に関する。特に、本開示の複数の実施形態は概して、複数の電子デバイスでの複数の異なるアーキテクチャのコードの実行に関する。
最近まで、たいていのスマートフォン、携帯電話、タブレットコンピュータ等は、32ビットアーキテクチャに基づいていた。それらは、複数の32ビットアーキテクチャプロセッサ及び複数の32ビットオペレーティングシステムを有していた。多種多様の32ビットコードが、これらの32ビットアーキテクチャに書き込まれていた。例えば、多数のモバイルアプリケーションが、これらのデバイスに書き込まれていた。また、複数の32ビットライブラリは、これらの32ビットアーキテクチャに書き込まれていた。
最近、複数の64ビットアーキテクチャを有する複数のスマートフォンが利用できるようになった。これらの64ビットアーキテクチャは、複数の64ビットアーキテクチャプロセッサ及び複数の64ビットオペレーティングシステムに基づく。例えば、iPhone(登録商標)5Sは、最近アップルコーポレーションから利用できるようになった。iPhone(登録商標)5Sは、64ビットアーキテクチャ及びiOS7として知られる64ビットオペレーティングシステムを有するA7プロセッサチップを含む。他の複数の64ビットアーキテクチャスマートフォンも発表され、および/または開発されている。
これらの64ビットアーキテクチャスマートフォンの展開の少なくとも最初の段階では、すでに開発されている32ビットコードがこれらのスマートフォンで実行可能なように後方互換性を提供できることが望ましいであろう。これは、多種多様の既存の32ビットモバイルアプリケーション及び他の32ビットコードが使用されることを継続可能にする。
iPhone(登録商標)5S及びiOS7は、そのような後方互換性を提供する。それらは、64ビットコードと同様に、32ビットコードを実行可能である。また、32ビットコードは、複数の32ビットライブラリを利用可能である。
発明は、以下の説明及び、複数の実施形態を示すために用いられる複数の添付の図面を参照することにより最もよく理解されうる。
発明の複数の実施形態が実施されうるコンピュータシステムの第1の実施形態のブロック図である。 発明の複数の実施形態が実施されうるコンピュータシステムの第2の実施形態のブロック図である。 発明の複数の実施形態が実施されうるコンピュータシステムの第3の実施形態のブロック図である。 発明の複数の実施形態が実施されうるコンピュータシステムの第4の実施形態のブロック図である。 インターアーキテクチャ互換性モジュールの実施形態のブロック図である。 ラッパーライブラリを有するインターアーキテクチャ互換性モジュールの実施形態のブロック図である。 機能インターポジショニングを用いるインターアーキテクチャ互換性モジュールのラッパーライブラリにより、複数の制御フロー移転をインターセプトする方法の実施形態のブロックフロー図である。 いつ複数の互換性モードを変更するかを決定すべく、動的ローダーモジュールのランタイム構造体を使用するように動作可能なインターアーキテクチャ互換性モジュールのブロック図である。 インオーダパイプラインの実施形態及びレジスタリネームアウトオブオーダ発行/実行パイプラインの実施形態を示すブロック図である。 実行エンジンユニットに接続されたフロントエンドユニットを含み、両方がメモリユニットに接続されたプロセッサコアの実施形態のブロック図である。 オンダイインタコネクトネットワークへの接続とともに、レベル2(L2)キャッシュのローカルサブセットを有する単一のプロセッサコアの実施形態のブロック図である。 図10Aのプロセッサコアの一部の拡大図の実施形態のブロック図である。 1より多いコアを有し、統合メモリコントローラを有し、かつ、集積化されたグラフィックスを有しうるプロセッサの実施形態のブロック図である。 コンピューターアーキテクチャの第1の実施形態のブロック図である。 コンピューターアーキテクチャの第2の実施形態のブロック図である。 コンピューターアーキテクチャの第3の実施形態のブロック図である。 システムオンチップアーキテクチャの実施形態のブロック図である。 発明の複数の実施形態による、ソース命令セットの複数のバイナリ命令を、ターゲット命令セットの複数のバイナリ命令へ変換すべく、ソフトウェア命令変換器を用いるブロック図である。
背景のセクションで述べたように、iPhone(登録商標)5S及びiOS7は、後方互換性を可能にする。32ビットコード及び64ビットコードの両方は、iPhone(登録商標)5Sで実行可能である。32ビットコードは、複数の32ビットライブラリのセットを使用する。同様に、64ビットコードは、複数の64ビットライブラリのセットを使用する。しかし、後方互換性を提供するこのアプローチによる1つの欠点は、iPhone(登録商標)5Sが、これらのライブラリの32ビット及び64ビットバージョンの両方を含む必要があるということである。特に、32ビットライブラリのセットが、32ビットコードのために含まれ、32ビットコードにリンクされ、及び32ビットコードによって利用される。64ビットライブラリの他のセットは、64ビットコードのために含まれ、64ビットコードにリンクされ、及び64ビットコードによって利用される。複数の32ビットライブラリ及び複数の64ビットライブラリの両方を格納することは、単一のライブラリを格納するために必要となりうるよりも多くのストレージスペースを消費する。
本開示において、インターアーキテクチャ(アーキテクチャ間)互換性モジュールは、所定のアーキテクチャのコード(例えば32ビットコード、レガシーコード等)が異なるアーキテクチャ(例えば64ビットコード、より新しいアーキテクチャ等)の複数のライブラリを利用することを可能にする。以下の説明では、多数の特定の詳細が述べられる(例えば複数の特定のアーキテクチャプロセッサ及び複数のオペレーティングシステム、新たな及びレガシーアーキテクチャの間の差、複数のインターアーキテクチャ互換性モジュールの例、複数のプロセッサ構成、複数のオペレーションのシーケンス等)。しかし、複数の実施形態は、これらの特定の詳細なしで実施されうる。複数の他の例においては、複数のよく知られた回路、構造、及び技術は、説明の理解を分かりにくくしないように、詳細には示されていない。
図1は、複数の発明の実施形態が実施されうるコンピュータシステム100の第1の実施形態のブロック図である。様々な実施形態では、コンピュータシステムは、スマートフォン、セルラーフォン、モバイルフォン、携帯用情報端末(PDA)、ポータブルメディアプレーヤー、ハンドヘルドデバイス、タブレットコンピュータ、パッドコンピュータ、ラップトップコンピュータ、デスクトップコンピュータ,ワークステーション、ビデオゲームコンソール、セットトップボックス、サーバ、ネットワークデバイス、又は当技術分野において既知である他の電子デバイスを含みうる。いくつかの実施形態では、発明の範囲を限定しないが、コンピュータシステムは、例えば、スマートフォン、セルラーフォン、PDA、タブレットコンピュータ、又はハンドヘルドデバイスのような限定されたメモリリソースを有する小さなハンドヘルドコンピュータシステムを表す。
コンピュータシステムは、プロセッサ102の実施形態及びメモリ110の実施形態を含む。プロセッサ及びメモリは、従来の接続メカニズム108によって(例えば、1または複数のバス、ハブ、メモリコントローラ、又はチップセットコンポーネント等を介して)、連結され、さもなければお互いに通信可能に接続されうる。当技術分野で既知の様々な異なる接続メカニズムが適切である。メモリは、そのような複数のコンピュータシステムで従来用いられるような、1または複数のメモリデバイスおよび/または1または複数の異なるタイプのメモリを含みうる。
示した実施形態では、発明の範囲をそれほど限定しないが、プロセッサは、64ビットアーキテクチャプロセッサである。いくつかの実施形態では、プロセッサは、汎用プロセッサでありうる。あるいは、プロセッサは、専用プロセッサでありうる。複数の適切な専用プロセッサの例は、限定されないが、ごくわずかの例に名前をつけるべく、複数の通信プロセッサ、複数のグラフィックスプロセッサ、複数のネットワークプロセッサ、複数の暗号プロセッサ、複数のコプロセッサ、複数の組み込みプロセッサ、複数のデジタルシグナルプロセッサ(DSP)、及び複数のコントローラ(例えば複数のマイクロコントローラ)を含む。プロセッサは、様々な複数の複合命令セットコンピューティング(CISC)プロセッサ、複数の縮小命令セットコンピューティング(RISC)プロセッサ、複数の超長命令語(VLIW)、それらの複数のハイブリッド、複数の他のタイプのプロセッサのいずれかであり、又は、(例えば複数の異なるコアの)そのような複数の異なるプロセッサの組み合わせを有しうる。
示すように、いくつかの実施形態では、64ビットアーキテクチャプロセッサは、32ビットアーキテクチャプロセッサに利用できない複数の64ビットアーキテクチャリソース104を有しうる。例えば、複数の64ビットアーキテクチャリソースは、32ビットプロセッサで見られない、アドバンスドアーキテクチャリソースおよび/またはパフォーマンス向上特徴を含みうる。例えば、64ビットプロセッサは、複数の追加のアーキテクチャレジスタ、エンハンスドアプリケーションバイナリインタフェース(ABI)、又はプロシージャ呼び出しのための改善されたパラメータ送信ロジック等を有しうる。例えば、IA−32アーキテクチャと比較して、Intel(登録商標)64アーキテクチャは、より多数のレジスタと、追加浮動小数点単一命令、複数データ(SIMD)機能、スタックアクセスによる代わりにレジスタによってパラメータを送信することを可能にする64ビットABIを有する。これらのアドバンスドアーキテクチャリソースおよび/またはパフォーマンス向上特徴は、ソフトウェアの性能を改善することを援助しうる。これらのリソース又は特徴は、64ビットコンピューティングへの増加傾向の複数の理由の一つである。
また図1を参照して、メモリ110は、様々な異なるタイプのソフトウェアモジュールを含む。示した実施形態では、ソフトウェアモジュールは、64ビットオペレーティングシステムモジュール112を含む。64ビットオペレーティングシステムモジュールは、プロセッサの64ビットABIと互換性のあるシステムレベルソフトウェアを含みうる。64ビットオペレーティングシステムモジュールは、概して、64ビットプロセッサの64ビットアーキテクチャリソース104のいくつか又は全てを利用できるように設計される。
メモリはまた、1または複数の32ビットコードモジュール116及び任意に1または複数の64ビットコードモジュール114を含む。いくつかの実施形態では、これらは、コンパイルおよび/またはバイナリコードを含みうる。そのような32ビット及び64ビットコードモジュールの複数の例は、限定されないが、複数のアプリケーションモジュールを含む。スマートフォン又は他のモバイルデバイスの特定の場合では、複数のアプリケーションモジュールは複数のモバイルアプリケーション又はアプリを示しうる。1つの態様では、発明の範囲はそれほど限定されないが、32ビットコードモジュールは、先行32ビットアーキテクチャのために前に書き込まれたレガシー又は現在のコードモジュールを示しうる。他の態様では、32ビットコードモジュールは、代わりに、新たに書き込まれた32ビットコードモジュールでありうる。32ビットコードモジュールは、32ビットアーキテクチャプロセッサのためにコンパイルされていた。
メモリはまた、複数の64ビットライブラリモジュール118を含みうる。いくつかの実施形態では、破線で示すように、メモリおよび/またはコンピュータシステムは、任意に、複数の32ビットライブラリモジュール120を含みうる。もしくは、複数の他の実施形態では、複数の32ビットライブラリモジュールを通る「X」で示すように、複数の32ビットコードモジュールがメモリに格納され、64ビットプロセッサ上で実行できる場合でさえ、メモリおよび/またはコンピュータシステムは、任意に、複数の32ビットライブラリモジュールを除外しうる。32ビット及び64ビットライブラリモジュールの複数の例は、限定されないが、標準Cライブラリ、数学ライブラリ、及びシステムライブラリ等のためのライブラリモジュールを含みうる。
オペレーション中に、32ビットコード及び64ビットコードは、64ビットプロセッサ上で実行されうる。例えば、64ビットオペレーティングシステムモジュール、32ビットコードモジュール及び複数の64ビットライブラリモジュールの複数の命令又はコードは、64ビットプロセッサ上で実施又は実行されうる。これは、潜在的に、複数のレガシー32ビットアプリケーションをより新しい64ビットプロセッサ上で実行可能にすることにより、後方互換性を提供するために使用されうる。いくつかの実施形態では、32ビット及び64ビットコードの両方は、同じスレッド内で実行されうる。いくつかの実施形態では、64ビットプロセッサは、任意の32ビット又は64ビットコード実行モード106を有してよく、64ビットコード又は32ビットコードのいずれが(又はいくつかの実施形態では、32ビットコードとさらに64ビットコード)が現在プロセッサによって実行されているかを示す。例えば、1つの実施形態では、モード106は、32ビットコードではなく64ビットコードが64ビットプロセッサ上で実行できるようにする第1の64ビットモードと、32ビットコードが64ビットプロセッサ上で実行できるようにする第2の32ビットモードとを示しうる。1つの態様では、32ビットモードはまた、64ビットコードが64ビットプロセッサ上で実行できるようにしうる。他の態様では、32ビットモードは、64ビットコードが64ビットプロセッサ上で実行されることを許可しない。これは必須ではないが、モード変更がなされて32ビットモードに入るまでは、64ビットプロセッサは任意に、64ビットモードのデフォルトによって動作しうる。他の複数のプロセッサは、(例えば32ビット/64ビット混合モードを有しうるように)複数の異なるタイプのコードを実行する複数の異なるモードを有することを必ずしも必要としない。
上述したように、iPhone(登録商標)5Sはまた、32ビットコードを64ビットアーキテクチャ上で実行できるようにすることで後方互換性を可能にする。これは、32ビット及び64ビットバージョン両方のライブラリを有することによりなされる。第1のセットの32ビットライブラリは、32ビットコード(例えば複数の32ビットレガシーモバイルアプリケーション)のために含まれ、32ビットコードにリンクされ、及び32ビットコードによって用いられる。第2のセットの64ビットライブラリは、64ビットコードのために含まれ、64ビットコードにリンクされ、及び64ビットコードによって用いられる。32ビットコードは、複数の32ビットライブラリモジュールを利用できるのみである。しかし、このアプローチによる1つの潜在的な欠点は、32ビットコードにより利用するための複数の32ビットライブラリを提供することを継続することが必要であるということである。1例を挙げると、追加のストレージスペースが、複数の32ビットライブラリを格納するのに必要である。特に複数のスマートフォン、タブレットコンピュータ及び他の小さな電子デバイスについて、ストレージスペースの量が概して限定される傾向にある。また、複数の32ビットライブラリを収容するのに必要な追加のストレージスペースは、デバイスの全体の製造コストを増加させる傾向にあり得る。
このアプローチによる他の潜在的な欠点は、32ビットコードが、複数の64ビットライブラリではなく複数の32ビットライブラリを利用できるのみであるということである。これは、複数の32ビットライブラリが概して、複数の64ビットアーキテクチャリソース104(例えばアドバンスドアーキテクチャおよび/またはパフォーマンス向上リソース)を利用できるように設計されないため、パフォーマンスを限定する傾向にあり得る。これらのリソースは概して、複数の32ビットライブラリが実行するように意図された片方の(例えば先行の)32ビットアーキテクチャプロセッサには利用できない。複数の32ビットライブラリは、これらの64ビットアーキテクチャリソースの全てを利用するように設計されておらず、利用できない。結果的に、複数の32ビットライブラリは、概して、複数の64ビットライブラリによって実現可能な複数の64ビットアーキテクチャリソースにより、パフォーマンスの増大を実現できない。
また図1を参照して、コンピュータシステムは、32ビットから64ビットへのおよび/または64ビットから32ビットへの(32ビット/64ビット)互換性モジュール122の実施形態を含む。32ビット/64ビット互換性モジュールは、他の実施形態では複数の他のアーキテクチャが代わりに利用されうるが、32ビット及び64ビットアーキテクチャのためのインターアーキテクチャ互換性モジュールの1例である。いくつかの実施形態では、32ビット/64ビット互換性モジュールは、32ビットモジュール116が複数の64ビットライブラリモジュール118(例えば標準Cライブラリ、複数の数学ライブラリ、ジーリブシー(glibc)、複数のシステムライブラリ等)にインタフェースで接続して使用できるように、構成され又は動作可能であり得る。いくつかの実施形態では、(例えば、WoW64.dll,WoW64Win.dll,Wow64Cpu.dll,又はNtdll.dllのような特別なモジュールの限定されたセットとは対照的に)互換性モジュールは、32ビットコードが、そのアドレス空間において、いずれの任意の64ビットライブラリモジュールも利用できるようにしうる。32ビット/64ビット互換性モジュールは、32ビットコードモジュールが複数の64ビットライブラリモジュールを利用できるようにするのに適切な様々な互換性変更を行うように構成され又は動作可能であり得る。例えば、これらの変更は、32ビットコードモジュールと複数の64ビットライブラリモジュールのABI間での複数の差を考慮した複数の変更を含みうる。いくつかの実施形態では、32ビット/64ビット互換性モジュールは、バイナリ変換モジュールを含みうる。いくつかの実施形態では、32ビット/64ビット互換性モジュールは、複数のコードタイプ実行モード変更(例えば32ビット及び64ビットコード実行モード間での変更)を行うように構成され又は動作可能でありうる。様々な実施形態では、32ビット/64ビット互換性モジュールは、ハードウェア(例えば集積回路、複数のトランジスタ、又は複数の他の回路要素等)、ファームウェア(例えばROM、EPROM、フラッシュメモリ、又は他の永続的又は不揮発性メモリ及びマイクロコード、複数のマイクロ命令、又はそれに格納された複数の他の低レベル命令)、ソフトウェア(例えば、メモリに格納された高レベル命令)、又はそれらの組み合わせに実装されうる。
有利には、互換性モジュールは、後方互換性を提供し、32ビットコードモジュールが64ビットオペレーティングシステムモジュールを有するシステム内の64ビットプロセッサ上で実施又は実行されることを可能にするように援助しうる。32ビットコードモジュールが複数の64ビットライブラリモジュールを利用でき、複数の32ビットライブラリモジュールを利用することが必要とされないため、複数の32ビットライブラリモジュールは、いくつかの実施形態では、任意に省略されうる。すなわち、いくつかの実施形態では、メモリおよび/またはコンピュータシステムは、複数の32ビットライブラリモジュールを有さない場合がある。有利には、複数の32ビットライブラリモジュールを省略することは、さもなければそれらを格納する必要があったストレージスペースを使えるように援助し、および/または、より少ない全体量のストレージスペースを提供する必要があるためシステムを製造するコストを減らすように援助しうる。特に複数のスマートフォン、タブレットコンピュータ、及び他の比較的小さな電子デバイスについては、複数の32ビットライブラリモジュールを格納する必要がないことは、利点を提供しうる。もしくは、複数の他の実施形態では、望ましい場合は複数の32ビットライブラリモジュールが含まれうる。いくつかの実施形態では、複数の他の32ビットコードモジュールが複数の32ビットライブラリモジュールを利用する場合にさえ、少なくとも1つの32ビットコードモジュールは、互換性モジュールを利用することによって、少なくとも1つの64ビットライブラリモジュールを利用できうる。
有利には、複数の32ビットコードモジュールが複数の64ビットライブラリモジュールを利用できるようにすることで、性能を改善するようにも援助しうる。例えば、複数の32ビットライブラリモジュールと比較して、複数の64ビットライブラリモジュールは、64ビットプロセッサの複数の64ビットアーキテクチャリソース104(例えば、アドバンスドアーキテクチャおよび/またはパフォーマンス向上リソース)をより良く利用できうる。例えば、複数の64ビットライブラリモジュールは、複数の32ビットライブラリモジュールが利用できるよりも多くのレジスタを使用可能であり得る。複数の64ビットライブラリモジュールは、複数の32ビットライブラリモジュール等の場合のように、スタックの代わりに複数のレジスタを介して複数のパラメータを送信できうる。結果として、32ビットコードモジュールが、複数の32ビットライブラリモジュールの代わりに、複数の64ビットライブラリモジュールに所定の必要な処理を実行させることができる場合、複数の64ビットライブラリモジュールは、処理をより速く実行でき、および/または、複数の必要な結果をより早く配信できうる。これは、複数の32ビットライブラリモジュールがこの処理を実行するように代わりに利用された場合に実現されたものよりも性能を改善するように援助しうる。
図1は、64ビットプロセッサ、64ビットオペレーティングシステム、及び64ビットと32ビットのコード及び複数のライブラリモジュールを示す。しかし、発明の範囲はそれほど限定されない。複数の他の実施形態では、複数の他のアーキテクチャが任意に利用されうる。例えば、いくつかの実施形態では、Xビットアーキテクチャコードモジュールは、Yビットアーキテクチャライブラリモジュールを利用し、Yビットアーキテクチャオペレーティングシステムを用いてYビットアーキテクチャプロセッサ上で実行しうる。ここで、XとYは異なる。
さらに示すために、図2−4は、発明の複数の実施形態が実装されうる複数のコンピュータシステムのいくつかの他の実施形態を示す。図2―4の複数のコンピュータシステム及びそれらの複数のコンポーネントは、図1のコンピュータシステムと所定の複数の類似点を有する。説明を分かりにくくしないために、これらのコンピュータシステム及びそれらのコンポーネントの異なるおよび/または追加の複数の特性は、全ての同様の複数の特性を繰り返さないで主に説明されうる。しかし、これらのコンピュータシステム及びコンポーネントは、図1の対応するコンポーネントの同じ、同様の、又は対応する複数の特性を有しうることは認識されるべきである。
図2は、16ビットから32ビットへのおよび/または32ビットから16ビットへの(16ビット/32ビット)互換性モジュール222を有するコンピュータシステム200の第2の実施形態のブロック図である。コンピュータシステムは、32ビットプロセッサ202及びメモリ210を含む。メモリは、32ビットオペレーティングシステムモジュール212、1または複数の16ビットコードモジュール216、及び複数の32ビットライブラリモジュール218を格納する。16ビット/32ビット互換性モジュールは、16ビットコードモジュールが32ビットライブラリモジュールを利用できるようにしうる。メモリはまた、任意に複数の32ビットライブラリモジュールも利用しうる、1または複数の32ビットコードモジュール(不図示)を任意に格納しうる。いくつかの実施形態では、メモリおよび/またはコンピュータシステムはまた、複数の16ビットライブラリモジュールを有しうる。もしくは、複数の16ビットライブラリモジュールは任意に省略されうる。
図3は、64ビットから128ビットへのおよび/または128ビットから64ビットへの(64ビット/128ビット)互換性モジュール322を有するコンピュータシステム300の第3の実施形態のブロック図である。コンピュータシステムはまた、128ビットプロセッサ302及びメモリ310を含む。メモリは、128ビットオペレーティングシステムモジュール312、1または複数の64ビットコードモジュール316、及び複数の128ビットライブラリモジュール318を格納する。64ビット/128ビット互換性モジュールは、64ビットコードモジュールが複数の128ビットライブラリモジュールを利用できるようにしうる。メモリはまた、任意に複数の128ビットライブラリモジュールも利用しうる、1または複数の128ビットコードモジュール(不図示)を任意に格納しうる。いくつかの実施形態では、メモリおよび/またはコンピュータシステムはまた、複数の64ビットライブラリモジュールを有しうる。もしくは、複数の64ビットライブラリモジュールは任意に省略されうる。
図4は、16ビットから32ビットへのおよび/または32ビットから16ビットへの(16ビット/32ビット)互換性モジュール422を有するコンピュータシステム400の第4の実施形態のブロック図である。コンピュータシステムはまた、16ビットプロセッサ402及びメモリ410を含む。メモリは、16ビットオペレーティングシステムモジュール412、1または複数の32ビットコードモジュール416、及び複数の16ビットライブラリモジュール418を格納する。16ビット/32ビット互換性モジュールは、32ビットコードモジュールが複数の16ビットライブラリモジュールを利用できるようにしうる。メモリはまた、任意に複数の16ビットライブラリモジュールも利用しうる、1または複数の16ビットコードモジュール(不図示)を任意に格納しうる。いくつかの実施形態では、メモリおよび/またはコンピュータシステムはまた、複数の32ビットライブラリモジュールを有しうる。もしくは、複数の32ビットライブラリモジュールは任意に省略されうる。
これらは、ただのいくつかの追加の例である。さらに他の実施形態が考えられる。例えばさらに他の実施形態では、32ビットから64ビットへのおよび/または64ビットから32ビットへの(32ビット/64ビット)互換性モジュールは、複数の64ビットコードモジュールが複数の32ビットライブラリモジュールを利用できるようにしてよく、及び32ビットオペレーティングシステムにより32ビットプロセッサ上で実行してよい。所定の概念を示すために、複数の32ビットコードモジュール、64ビットプロセッサ、64ビットオペレーティングシステム、及び32ビット/64ビット互換性モジュールが、しばしば複数の図面において示され説明されうる。しかし、複数の他の実施形態では、本開示の他の箇所で説明される複数の他のアーキテクチャバリエーションが適切であることは認識されるべきである。
図5は、第1のアーキテクチャ(例えば32ビット)から第2のアーキテクチャ(例えば64ビット)へのおよび/または第2のアーキテクチャから第1のアーキテクチャへの互換性モジュール522の実施形態のブロック図である。第1のアーキテクチャ/第2のアーキテクチャ互換性モジュールは、1または複数の第1のアーキテクチャ(例えば32ビット)コードモジュール516を複数の第2のアーキテクチャ(例えば64ビット)ライブラリモジュール518のセットと互換性があり利用できるようにするよう動作可能である。第1のアーキテクチャ/第2のアーキテクチャ互換性モジュールは、第1のアーキテクチャコードモジュールと複数の第2のアーキテクチャライブラリモジュールとの間に接続され、又はさもなければ第1のアーキテクチャコードモジュールと複数の第2のアーキテクチャライブラリモジュールとの間の通信において接続される。例では、第1のアーキテクチャコードモジュールと複数の第2のアーキテクチャライブラリモジュールは、それらが発明の一部でないことを示すように複数の破線で示される。
互換性モジュールは、制御フロー移転受け取りモジュール530を含む。制御フロー移転受け取りモジュールは、例えば、第1のアーキテクチャコードモジュールからの呼び出し手順オペレーション、又は第2のアーキテクチャライブラリモジュールからの手順オペレーションからのリターンのような入力制御フロー移転オペレーションをインターセプトし又はさもなければ受信するように構成され又は動作可能でありうる。制御フロー移転受け取りモジュールはまた、受け取った入力制御フロー移転オペレーションに対応する1または複数の入力引数又は複数の他のパラメータを受け取るように構成され又は動作可能でありうる。例えば、これらのパラメータは、スタックから、そのようなパラメータを送信するように利用される複数のレジスタから、又は他から引き出されうる。
互換性モジュールはまた、ABI変更モジュール532を含む。ABIは概して、2つのプログラムモジュール間のインタフェースを表し、そのうちの1つは、しばしば、マシンコードのレベルでの、ライブラリモジュール又はオペレーティングシステムモジュールである。ABIは一般に、データの複数のサイズ、複数のレイアウト及びアラインメント、複数の機能がどのように呼び出されるか、規約の呼び出しの詳細、及び情報が複数のプログラムモジュール間でどのように送信されるべきか(例えば、どのように複数の引数が送信され複数の戻り値が引き出されるか)等のような詳細を含む。例えば、ABIは、複数のパラメータがスタック又は複数のレジスタのいずれを介して複数のモジュール間で送信されるか、どの特定のレジスタが利用されるか、複数のパラメータがスタック上に置かれる順序等を特定しうる。一般に、第1のアーキテクチャ(例えば32ビット)コードモジュールのABIと複数の第2のアーキテクチャ(例えば64ビット)ライブラリモジュールのABIとの間には、少なくともいくつかの違いがある。ABI変更モジュールは、これらのABIの違いの間のギャップを埋めることを援助するように複数の変更を行うように、構成され又は動作可能でありうる。ABI変更モジュールは、特定の第1及び第2のアーキテクチャ及び関係する複数のABIに依存して、様々な異なるタイプのABI変更を行いうる。例えば、ABI変更モジュールは、入力制御フロー移転オペレーション及びその関連する複数のパラメータを、対応する出力制御フロー移転オペレーション及びその関連する複数のパラメータへマッピング又はリレーするのに必要な複数のABI変更を行いうる。1例として、ABI変更モジュールは、複数の第2のアーキテクチャライブラリモジュールへ出力される対応する呼び出し手順オペレーションの異なる呼出規約へ、第1のアーキテクチャコードモジュールから受け取った呼び出し手順オペレーションをマッピング又はリレーする(例えば、場合により、スタックを介して提供された複数の入力パラメータを、レジスタにおいて送信された対応する複数の出力パラメータへマッピングする)ために必要な複数のABI変更を行いうる。いくつかの実施形態では、複数の特定のABIに依存して、複数の入力パラメータの複数のデータサイズ又はフォーマットはまた、複数の出力パラメータの対応する複数のサイズ又はフォーマットへ変更されうる。他の例として、ABI変更モジュールは、複数の第2のアーキテクチャライブラリモジュールから受け取った手順オペレーションからのリターンを、第1のアーキテクチャコードモジュールへ提供される手順オペレーションからの対応するリターンの異なる呼出規約(calling convention)へマッピング又はリレーする(例えば、場合により、複数のレジスタにおいて送信された複数の入力パラメータを、スタックを介して提供された対応する複数の出力パラメータへマッピングする)のに必要な複数のABI変更を行いうる。
また図5を参照して、互換性モジュールはまた、プロセッサモード変更モジュール534を含む。プロセッサモード変更モジュールは、実行される特定のタイプのコード(例えば32ビット又は64ビットコード)を適切に示す場合には、プロセッサのコードタイプ実行モードを変更するように構成され又は動作可能であり得る。前で述べたように、これは必須ではないが、いくつかのプロセッサは、複数の異なるモードを有し、当該複数の異なるモードにおいて、これらの異なるタイプのコードが実行されうる。例えば、いくつかの実施形態では、64ビットプロセッサは、32ビットコードではなく64ビットコードが実行可能であるようにする第1の64ビットモードと、32ビットコードが実行可能であるようにする第2の32ビットモードとを有しうる。いくつかの場合には、第2の32ビットモードはまた、64ビットコードが実行できるようにしうるが、他の場合には、32ビットモードは64ビットコードが実行できないようにする。複数の他のプロセッサは、(32ビットおよび/または64ビットコード以外のコードについて)複数の異なるモード、(例えば、32ビット及び64ビットコードに加えて16ビットコードについて)追加のモード等を有しうる。さらに他の複数のプロセッサは、複数の異なるタイプのコードについて複数の異なるモードを必ずしも必要としない。例えば、プロセッサは、任意に/潜在的に、複数の異なるタイプのコードが実行されうる、単一の混合モード(例えば32ビット/64ビット混合モード)を有しうる。このような場合、プロセッサモード変更モジュールは、任意に省略されうる。
複数の異なるタイプのプロセッサは、異なる方法で異なるコードタイプ実行モードを実施しうる。1つの例として、カリフォルニア州サンタクララのインテルコーポレイションから利用できる所定の64ビットプロセッサは、コードセグメント記述子を介して、64ビット及び32ビット/64ビット混合互換モードを示す。コードセグメント記述子は、メモリセグメンテーションにおいて利用される。メモリセグメンテーションは概して、メモリを複数のセグメント又はセクションに分割することを参照する。メモリロケーション又はメモリアドレスへの参照は、概して、セグメント識別子及び識別されたセグメント内のオフセットを含む。具体的には、これらの64ビットプロセッサにおいて、コードセグメント記述子は、L−ビットとして知られる、コードタイプ実行モードを示す特定のビットを有する。採用された規約に従って、L−ビットは、バイナリゼロにクリア(すなわち0)され、32ビットコードではなく64ビットコードが実行可能にされる64ビットモードを示す。逆に、L−ビットは、バイナリワン(すなわち1)にセットされ、32ビットコード及び64ビットコードの両方が実行しうる32ビット/64ビット混合互換モードを示す。
コードタイプ実行モードがコードセグメント記述子を介して示される、そのような複数の実施形態では、プロセッサモード変更モジュールは、L−ビットに基づく複数のモード変更決定を行い、コードがどのセグメントで実行されるかに基づくコードセグメント記述子を作成する等のように動作可能であり又は構成されうる。これは他の実施形態では必須ではないが、例えば、いくつかの実施形態では、複数の異なるタイプのコードは、複数の異なるセグメントにおいて維持されうる。例えば、64ビットコードではなく32ビットコードを有する1または複数の32ビットコードセグメントと、32ビットコードではなく64ビットコードを有する1または複数の64ビットコードセグメントとがありうる。発明の範囲をそれほど限定しないが、1つの例では、単一の32ビットコードセグメント、64ビットオペレーティングシステムコードのための1つの64ビットコードセグメント、及び64ビットユーザレベルコードと複数の64ビットライブラリのための1つの64ビットコードセグメントがある。これらの32ビット及び64ビットコードセグメントは、ローカルディスクリプタテーブル(LDT)において表されうる。そのような複数の実施形態では、32ビットコードセグメントと64ビットセグメントとの間の全ての制御フロー移転オペレーションは、インターセグメント又はいわゆる「遠くへの(far)」制御フロー移転を用いうる。64ビットコードの実行から32ビットコードの実行への、又は、32ビットコードの実行から64ビットコードの実行への移転は、他のセグメントからの遠くへの又はインターセグメント制御フロー移転の後にのみ生じうる。そのような複数の実施形態では、そのような複数の遠くへの又はインターセグメント制御フロー移転オペレーションは、複数の異なるタイプのコードの複数のセグメント間での移転がいつかを知るべく、検査されうる。そのような場合、これは、プロセッサコードタイプ実行モード変更決定を行うように用いられうる。他の複数のプロセッサは、そのような複数のコードタイプ実行モードを示し、および/または、複数のモード変更決定を異なるように行いうる。
上述したように、いくつかの実施形態では、1または複数の32ビットコードセグメントがありうる。いくつかの実施形態では、(例えばレガシーコードを有する)複数の32ビットコードモジュールは、フラットアドレス指定に基づいてコンパイルされることがあった。フラットアドレス指定では、コードのベースアドレス及び複数のデータセグメントがゼロにセットされることがあった。また、コードセグメント及びデータセグメントの両方は、制限の又は最大の4ギガバイトにセットされることがあった。いくつかの実施形態では、複数の32ビットコードモジュールを有する1または複数の作成された32ビットコードセグメントはまた、そのようなフラットアドレス指定アプローチを使用するように構成されうる。これは、複数の32ビットコードモジュールの最初のコンパイル中に作成された複数の前提データをブレークしないように、および/または、複数の32ビットコードモジュールをコンパイルしなおす必要がないように援助する。
再度図5を参照して、互換性モジュールはまた、制御フロー移転出力モジュール536を含む。制御フロー移転出力モジュールは、制御フロー移転受け取りモジュールによって前に受け取った入力制御フロー移転オペレーションに対応する出力制御フロー移転オペレーションを出力又は提供するように構成され又は動作可能であり得る。制御フロー移転出力モジュールはまた、ターゲット又はデスティネーションモジュールにとって適切な複数の呼び出し規約ガイドラインを用いて、及びABI変更モジュールによって行われた複数のABI変更に従って、出力制御フロー移転オペレーションを実行するように構成され又は動作可能であり得る。例により、制御フロー移転出力モジュールは、呼び出し手順オペレーションを、複数の第2のアーキテクチャライブラリモジュールへ出力してよく、呼び出し手順オペレーションは、制御フロー移転受け取りモジュールによって第1のアーキテクチャコードモジュールから受け取った最初の呼び出し手順オペレーションに対応し、ABI変更モジュールによって行われた複数の変更を表す。
図6は、ラッパーライブラリ640を有する32ビット/64ビット互換性モジュール622の実施形態のブロック図である。いくつかの実施形態では、ラッパーライブラリは、実例では32ビットライブラリ620である、所定のアーキテクチャの1または複数の対応する実際のライブラリ620に対応し、反映しうる。いくつかの実施形態では、ラッパーライブラリは、実際のライブラリ又は複数のライブラリ(例えば32ビットライブラリ)の各々対応する機能(function)モジュールのためのラッパーモジュールを有しうる。示した実施形態では、32ビットライブラリは、N番目32ビット機能モジュール644―Nを介して第1の32ビット機能モジュール644―1(例えば「コサイン(cosine)」という名前を有する)を含み、Nは特定の実装にとって適切な任意の数でありうる。同様に、ラッパーライブラリは、N番目のラッパーモジュール642―Nを介して、(例えば「コサイン」という名前も有する)第1のラッパーモジュール642―1を含む。第1の32ビット機能モジュールは、第1のラッパーモジュールに対応し、次々と対応していき、N番目の32ビット機能モジュールがN番目のラッパーモジュールに対応する。いくつかの実施形態では、発明の範囲はそれほど限定されないが、ラッパーライブラリは、32ビット標準Cライブラリの機能モジュールのそれぞれに対してラッパーモジュールを含み、1つの又はセットのライブラリ(例えば32ビットスレッディングライブラリ、32ビット数学ライブラリ、32ビットシステムライブラリ等)の機能モジュールのそれぞれに対してラッパーモジュールを有しうる。いくつかの実施形態では、これは必須ではないが、セットの64ビットライブラリモジュール618(例えば64ビットライブラリ)は、32ビットライブラリ620の対応する機能モジュールのそれぞれについて、および/または、ラッパーライブラリ640のラッパーモジュールのそれぞれについて、64ビットライブラリモジュールを有しうる。
いくつかの実施形態では、ラッパーライブラリは、32ビットライブラリを対象とした32ビットコードモジュールからの複数の制御フロー移転オペレーションをインターセプト又はさもなければ受け取りうる。例えば、32ビットコードモジュールは、制御フロー移転オペレーション(例えば呼び出し手順オペレーション)を、(例えば「コサイン」という名前を有する)第1の32ビット機能モジュールへ発行し、(例えばまた「コサイン」という名前を有する)対応する第1のラッパーモジュールは、この制御フロー移転オペレーションをインターセプトしうる。ラッパーモジュールは、本開示の他の箇所で説明されたように、受け取った制御フロー移転オペレーションを処理しうる。例えば、示した第1のラッパーモジュールは、制御フロー移転受け取りモジュール630、ABI変更モジュール632、プロセッサモード変更モジュール634、及び制御フロー移転出力モジュール636を有する。これらの各々は、本開示の他の箇所で(例えば図5と併せて)説明されたものと同様又は同じでありうる。
制御フロー移転出力モジュールは、対応する又は導出された呼び出し手順機能を64ビットライブラリモジュールに提供しうる。いくつかの実施形態では、ラッパーライブラリはまた、64ビットライブラリモジュールからの制御フロー移転オペレーションをインターセプト又はさもなければ受け取りうる。例えば、64ビットライブラリモジュールは、手順オペレーションからの応答リターンを発行し、対応する第1のラッパーモジュールがこの制御フロー移転オペレーションをインターセプトしうる。第1のラッパーモジュールは、前に述べたように(例えば複数のABI変更を行う等)、手順オペレーションからの受け取ったリターンを処理し、手順オペレーションからの対応する又は導出されたリターンを32ビットコードモジュールへ提供しうる。いくつかの実施形態では、ラッパーモジュールは、呼び出し元の32ビットコードモジュールから64ビットライブラリモジュールへ(例えば呼び出しへの)制御を移すべく、トランポリンモジュールへ論理上区画化され、及び64ビットライブラリモジュールから32ビットコードモジュールへ(例えばリターンへの)制御を移すべく、リバーストランポリン又はリターンスタブへ論理上区画化されうる。
発明の範囲はそれほど限定されないが、上記の実施形態は、32ビットコードモジュール、32ビットライブラリ、64ビットライブラリ、及び32ビット/64ビット互換性モジュールを参照する。複数の他の実施形態では、32ビットコードモジュール、32ビットライブラリ、64ビットライブラリ、及び32ビット/64ビット互換性モジュールへのこれらの参照は、本開示の他の箇所で説明した他のアーキテクチャバリアント(例えば図2−4について示され説明されたもの)によって置換されてよい。
図7は、機能インターポジショニングを用いてインターアーキテクチャ互換性モジュールのラッパーライブラリにより複数の制御フロー移転をインターセプトする方法750の実施形態のブロックフロー図である。いくつかの実施形態では、方法は、図6のラッパーライブラリ640により実行されうる。もしくは、同様の又は異なる複数のラッパーライブラリは任意に使用されうる。
方法は、ブロック751で、1または複数の他のライブラリが検索される前に複数の機能モジュールについて検索されるようにラッパーライブラリを構成することを含む。例えば、これは、64ビットライブラリが機能モジュールについて検索される前に、および/または、任意の32ビットライブラリ(もしあれば)が機能モジュールについて検索される前に、機能モジュールについて検索されるようにラッパーライブラリを構成することを含みうる。任意に、ラッパーライブラリは、いずれの他のライブラリも検索される前に検索されるように構成されうる。いくつかの実施形態では、1または複数の他のライブラリの前に検索されるようにラッパーライブラリを構成することは、動的リンカーモジュールが複数の機能を検索する順序の利点を活かすことにより行われうる。一般に、動的リンカーモジュールは、複数のライブラリがロードされた順序で、複数のライブラリにおけるランタイムでの機能を検索しうる。第1のライブラリが第2のライブラリの前にロードされた場合、動的リンカーモジュールは、第2のライブラリ内の所望する機能を検索する前に、第1のライブラリにおける所望する機能を検索しうる。従って、ラッパーライブラリは、ラッパーライブラリが前に検索されることを意図され又は望ましい他のいかなるライブラリの前にロードされうる。いくつかの実施形態では、これは、ラッパーライブラリをプレロードすることにより、例えば、コマンドLD_PRELOADを用いることにより行われる。もしくは、ラッパーライブラリをロードする複数の他の方法が用いられうる。1つの態様では、ラッパーライブラリは、ラッパーモジュールによってインターセプトされるのが望ましいライブラリモジュールに関連するコードモジュールからの第1の制御フロー移転オペレーションの前にプレロード又はロードされうる。
方法は、ブロック752で、複数の32ビットライブラリモジュールのセットの32ビット機能モジュールを対象とする32ビットコードモジュールからの制御フロー移転試みを受け取ることを含む。例により、これは、(例えば特定の機能名前を有する)特定の32ビットライブラリ機能モジュールを示す呼び出し手順オペレーションを受け取ることを含みうる。
方法は、ブロック753で、(存在する場合は複数の32ビットライブラリモジュールを検索する前および/または複数の64ビットライブラリモジュールを検索する前に)ラッパーライブラリを検索し、32ビット機能モジュールに対応するラッパーモジュールを識別することを含む。いくつかの実施形態では、識別されたラッパーモジュールは、望ましい実際のライブラリモジュール(例えば32ビットライブラリモジュール)と同じ機能名前を有しうる。例えば、ラッパーライブラリは、「コサイン」という名前の32ビットライブラリ機能モジュールについて検索され、また「コサイン」という名前のラッパーモジュールが識別されうる。もしくは、マッピングテーブル、又は名前に基づくのに加えて、複数のラッパーモジュールと複数の32ビットライブラリ機能モジュールとの間の対応を提供する他の方法が、任意に用いられうる。
方法は、ブロック754で、制御フローを識別されたラッパーモジュールへ移転することを含む。有利には、ラッパーライブラリが1または複数の他のライブラリの前に検索されるよう構成されたため、制御フロー移転は、実際のライブラリモジュールへの代わりに、識別されたラッパーモジュールへのものとなった。ラッパーモジュールは、本質的に、論理上、32ビットコードモジュールと複数の実際のライブラリモジュールとの間に配置され又は介在させられた。
ラッパーモジュールは、ブロック755で、32ビット機能モジュールへの試みた制御フロー移転を、1または複数の64ビット機能モジュールへの制御フロー移転と互換性のあるものに構成する。これは、本開示の他の箇所で説明したように行われうる。例えば、複数の入力パラメータを複数の出力パラメータへマッピングし、複数の他のABI変更を行い、出力呼び出し規約に適合しうる等である。
ラッパーモジュールは、ブロック756で、1または複数の64ビット機能モジュールへの制御フロー移転をもたらす。例えば、ラッパーモジュールは、ブロック752で受け取った制御フロー移転試みに対応する、及び概して反映する制御フロー移転オペレーションを提供しうる。
発明の範囲はそれほど限定されないが、上記の方法は、32ビットコードモジュール、32ビットライブラリ機能モジュール、及び64ビットライブラリ機能モジュールを参照する。他の実施形態では、32ビットコードモジュール、32ビットライブラリ機能モジュール、及び64ビットライブラリ機能モジュールへのこれらの参照は、本開示の他の箇所で説明された他のアーキテクチャバリアント(例えば、図2−4について示され説明されたもの)によって置換されうる。
図8は、ランタイム構造体868にアクセスすることにより複数の異なるタイプのコード816、818間での複数の移転を決定するように構成され又は動作可能であるインターアーキテクチャ互換性モジュール822を有するコンピュータシステム800のブロック図である。コンピュータシステムは、アドレス空間860を有する。アドレス空間は、異なるタイプのコード816、818を含む。発明の範囲をそれほど限定しないが、示した例の実施形態では、これらの異なるタイプのコードは、32ビットコードモジュール816及び64ビットコードモジュール818を含む。従って、いくつかの実施形態では、2又はそれより多い異なるタイプのコード(例えば32ビット及び64ビットコード)は、同じアドレス空間において含まれ又は混合されうる。従来、同じアドレス空間にそのような複数の異なるタイプのコードモジュールを含むことは一般的には行われない。32ビットコードモジュールは、32ビットコードタイプを示すヘッダ862を有する。同様に、64ビットコードモジュールは、異なる64ビットコードタイプを示すヘッダ864を有する。1つの可能な例の適切なタイプのヘッダは、実行可能でリンク可能なフォーマット(Executable and Linkable Format :ELF)ヘッダである。
コンピュータシステムはまた、ランタイム又は動的ローダーモジュール866を含む。動的ローダーモジュールは、複数のバイナリ実行可能ファイルのランタイムローディングの機能を有する。ランタイムローダーモジュールは、2つ又はそれより多い異なるタイプのコード(例えば32ビットコード及び64ビットコード)が同じアドレス空間において含まれる又は混合されることを可能にする。ランタイムローダのような複数の規約ランタイムライブラリは、概して、そのような異なるタイプのコードが同じアドレス空間に含まれる又は混合されることを許可しない。ランタイムローダーモジュールは、ランタイム構造体868(例えばデータ構造体)を有する。ランタイムローダーモジュールは、コード又はライブラリモジュールのタイプ(例えば32ビット又は64ビットのいずれであるか)を、そのコード又はライブラリモジュールをアドレス空間にロードする時に記録するように構成され又は動作可能であり得る。例えば、ランタイムローダーモジュールは、32ビット及び64ビットコードモジュールのヘッダ862、864にアクセスし、示された複数のタイプのコードを決定しうる。ランタイムローダーモジュールは、ランタイム構造体に複数のコードタイプ869を格納しうる。必須ではないが任意的に、ランタイムローダーモジュールはまた、複数のコードアドレス870(例えばコード部分のベースランタイムアドレス)および/または複数のコードサイズ871を、ランタイム構造体に格納する。いくつかの実施形態では、ランタイムローダーモジュール866を構成するおよび/または動的ローディングの態様を実装するのを援助する複数の他のシステムバイナリモジュールはまた、変更されうる。例えば、リンカー、ローダー、及びジーリブシーは、複数の異なるタイプのコードが同じアドレス空間に含まれ又は混合されることができるように変更されうる。例により、そのような複数のモジュールは、ランタイム構造体868及び複数のコードタイプ869にインタフェースで接続し、利用するべく、変更されうる。
再度図8を参照し、コンピュータシステムはまた、インターアーキテクチャ互換性モジュール822を含む。発明の範囲をそれほど限定しないが、示された例では、互換性モジュールは、32ビット/64ビット互換性モジュールである。32ビット/64ビット互換性モジュールは、プロセッサモード変更モジュール834を含む。プロセッサモード変更モジュールおよび/または32ビット/64ビット互換性モジュールは、ランタイムローダーモジュールおよび/またはランタイム構造体と接続され、さもなければ通信する。プロセッサモード変更モジュールおよび/または32ビット/64ビット互換性モジュールはまた、プロセッサのコードタイプ実行モード806に接続され、もしくは通信する。
いくつかの実施形態では、32ビット/64ビット互換性モジュール822は、ランタイム構造体868にアクセスすることによって、複数の異なるタイプのコード間、例えば32ビットおよび64ビットコード間に制御フロー移転があるか否かを決定するように構成され又は動作可能でありうる。例えば、互換性モジュールは、ランタイム構造体を用いてよく、制御フロー移転先のターゲットコードが32ビット又は64ビットコードのいずれであるかを決定する。いくつかの実施形態では、制御フロー移転オペレーションが行われるときはいつでも(又はいくつかの実施形態では、遠い又はインターセグメント制御フロー移転オペレーションが行われるときはいつでも)、プロセッサモード変更モジュールは、ランタイム構造体におけるコードタイプ869にアクセスしうる。いくつかの実施形態では、互換性モジュールは、そのような複数の制御フロー移転オペレーション872のインジケーションを受信する。プロセッサモード変更モジュールは、これらのコードタイプを用いて、ターゲットロケーションでのコードのタイプが現在のコードのタイプと同じであるか否かおよび/またはプロセッサの現在のコードタイプ実行モード806が変更される必要があるか否かを決定するように動作可能でありうる。
本開示の複数のインターアーキテクチャ互換性モジュールは、複数の異なる実施形態では複数の異なる方法で実装されうる。さらに複数の特定の概念を示すために、インターアーキテクチャ互換性モジュールが64ビットバージョンのアンドロイド環境で実装されうる方法の1つの可能な例のさらなる詳細を考慮することは有益でありうる。アンドロイドは、複数のスマートフォン及びタブレットコンピュータのような複数のタッチスクリーンモバイルデバイスに主として利用されるリナックス(登録商標)カーネルに基づくオペレーティングシステムである。予期される64ビットアンドロイド環境は、アンドロイドフレームワークの64ABI互換性バージョン(Dalvik、zygote、libcのような複数のシステムライブラリ等)及び64ビットプロセッサ上で動作するリナックス(登録商標)カーネルを含みうる。アンドロイドのプロセスバーチャルマシンである64ビットABI互換性Dalvikは、64ビットライブラリへのJNI呼び出しを処理し、64ビットJIT(Just−in−Time)コードを生成するDalvikの能力を含みうる。
複数の異なるタイプのアンドロイドアプリケーションがある。一つのタイプは、純粋な複数のJava(登録商標)アプリケーションである。純粋な複数のJava(登録商標)アプリケーションは、Java(登録商標)バイトコードのみを含むが、ネイティブ又はアーキテクチャ特有コードは含まない。アンドロイドは、そのような複数の純粋なJava(登録商標)アプリケーションを、Dalvikバーチャルマシンを起動することによって実行しうる。概して、複数の純粋なJava(登録商標)アプリケーションは、アンドロイド環境へのさらなる変更なしで実行されうる。
他のタイプのアンドロイドアプリケーションは、ネイティブアプリケーションである。複数のネイティブアプリケーションは、ネイティブ又はアーキテクチャ特有コードを含む。例えば、複数のネイティブアプリケーションは、Java(登録商標)バイトコード及びネイティブコードの両方を有しうる。複数の数学ライブラリ、グラフィックスライブラリ、システムライブラリ、及び標準Cライブラリ(C standard libraries)等はこのカテゴリーに分類される。ネイティブコードは、Java(登録商標)のJNI(Java(登録商標)ネイティブインタフェース)技術を用いることによって実行されうる。例えば、ネイティブアプリケーションは、複数のネイティブな方法を呼び出すべく、JNIインタフェースを利用しうる。ネイティブな方法への呼び出しは、Dexファイルのinvoke_direct Dalvikバイトコードを用いて表されうる。invoke_directは、複数のパラメータを有する方法を引き起こし、および/または、呼び出す方法を示しうる。いくつかの実施形態では、Dalvikのinvoke_directバイトコードが実装される方法は、インターアーキテクチャ操作性及び互換性を可能にする(例えば、32ビットコードモジュールが64ビットライブラリモジュール及び64ビットABIを利用できる)ように変更されうる。
さらに示すために、Dalvikにおいてinvoke_directバイトコードを実装するべく利用される代表的な呼び出しスタックフローを考慮する。アプリケーションがネイティブライブラリモジュールを呼び出す際、Dalvikは、システムロードライブラリ呼び出しを用いて、ネイティブライブラリモジュールをアドレス空間へロードする。その後、Dalvikのシステムロードライブラリは、ランタイムロードライブラリへ呼び出す。ランタイムロードライブラリはその後、ネイティブロードへのJNI呼び出しを行う。その後、ネイティブロードはdvmロードネイティブコードへ呼び出す。このモジュール、dvmロードネイティブコードは、ロードライブラリのコアを実装する。例えば、従来では、dvmロードネイティブコードは、32ビットコードモジュールからの32ビットネイティブライブラリモジュールへの呼び出しに応じて、32ビットネイティブライブラリモジュールをロードしうる。
いくつかの実施形態では、invoke_directは、本開示の他の箇所で説明されたようなインターアーキテクチャ操作性及び互換性を可能にするべく変更されうる。例えば、invoke_directは、32ビットコードモジュールが64ビットライブラリモジュールと64ビットABIを利用できるように変更されうる(例えば、32ビットネイティブライブラリモジュールへの呼び出しを64ビットネイティブライブラリモジュールへの呼び出しにマッピングする)。例えば、invoke_directは、32ビットネイティブライブラリモジュールを対象とした32ビットコードモジュール(例えばモバイルアプリ)からの呼び出しをインターセプトし、適切なABI変更を行って、受け取った呼び出しを64ビットネイティブライブラリモジュールへの対応する出力呼び出しへマッピングするように変更されうる。いくつかの実施形態では、これは必須ではないが、invoke_directは任意に、本開示の他の箇所で説明されたような複数の特性を有する複数のラッパーモジュールを含みうる。いくつかの実施形態では、ネイティブライブラリモジュールが検索される順序は、ラッパーモジュールが最初に(例えば32ビットネイティブライブラリモジュールおよび/または64ビットライブラリモジュールの前に)識別されるように制御されうる。例えば、複数のラッパーモジュールへの複数の経路の複数の優先度は、複数の32ビット及び64ビットネイティブライブラリモジュールへの複数の経路よりもより高い優先度が与えられうる。これは、ラッパーモジュールが(例えば32ビットライブラリモジュールへの)呼び出しをインターセプトすることを可能にすべく利用されうる。
いくつかの実施形態では、dvmロードネイティブコードはまた、(例えば複数のプロセッサコードタイプ実行モード切り替えを実装するべく)実行されているコードのタイプ(例えば32ビットコード又は64ビットコード)を記録するように変更されうる。例えば、dvmロードネイティブコードは、ランタイム構造体および/またはコードタイプ情報(例えば図8のコードタイプ869と同様)を含み利用するように変更されうる。
例となる複数のコアアーキテクチャ、プロセッサ、及びコンピューターアーキテクチャ
複数のプロセッサコアは、複数の異なる方法で、複数の異なる目的で、複数の異なるプロセッサにおいて実装されうる。例えば、そのような複数のコアの実装は、(1)汎用コンピューティングを対象とした汎用インオーダコア、(2)汎用コンピューティングを対象としたハイパフォーマンス汎用アウトオブオーダコア、(3)主にグラフィックスおよび/または科学(スループット)コンピューティングを対象とした専用コアを含みうる。複数の異なるプロセッサの実装は、(1)汎用コンピューティングを対象とした1または複数の汎用インオーダコアおよび/または汎用コンピューティングを対象とした1または複数の汎用アウトオブオーダコアを含むCPU、及び(2)主にグラフィックスおよび/または科学(スループット)を対象とした1または複数の専用コアを含むコプロセッサを含みうる。そのような複数の異なるプロセッサは、複数の異なるコンピュータシステムアーキテクチャに至り、それらは、(1)CPUとは別のチップ上のコプロセッサ、(2)CPUと同じパッケージ内の別のダイ上のコプロセッサ、(3)CPUと同じダイ上のコプロセッサ(この場合、そのようなコプロセッサは集積化されたグラフィックスおよび/または科学(スループット)ロジックのような専用ロジック又は複数の専用コアと時々呼ばれる)、及び(4)説明したCPU(アプリケーションコア又はアプリケーションプロセッサと時々呼ばれる)、上記コプロセッサ、及び追加の機能を同じダイ上に含みうるシステムオンチップを含みうる。複数の例のコアアーキテクチャは、次に説明され、続いて複数の例のプロセッサ及びコンピューターアーキテクチャの説明がある。
例としてのコアアーキテクチャ
インオーダ及びアウトオブオーダコアブロック図
図9Aは、発明の実施形態による、例のインオーダパイプライン及び例のレジスタリネームアウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。図9Bは、発明の実施形態による、プロセッサに含まれる、例のインオーダアーキテクチャコアの実施形態及び例のレジスタリネームアウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。図9A−Bの実線で囲まれたボックスは、インオーダパイプライン及びインオーダコアを示し、一方、点線で囲まれたボックスの任意の追加は、レジスタリネームアウトオブオーダ発行/実行パイプライン及びコアを示す。インオーダ態様は、アウトオブオーダの態様のサブセットであるとして、アウトオブオーダの態様は以下説明される。
図9Aでは、プロセッサパイプライン900は、フェッチステージ902、長さデコードステージ904、デコードステージ906、アロケーションステージ908、リネームステージ910、スケジューリング(ディスパッチ又は発行としても知られる)ステージ912、レジスタ読み出し/メモリ読み出しステージ914、実行ステージ916、ライトバック/メモリ書き込みステージ918、例外ハンドリングステージ922、及びコミットステージ924を含む。
図9Bは、実行エンジンユニット950に接続されたフロントエンドユニット930を含むプロセッサコア990を示し、両方はメモリユニット970に接続される。コア990は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、又はハイブリッド若しくは代替のコアタイプでありうる。さらなる他のオプションとして、コア990は、例えばネットワーク若しくは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット(GPGPU)コア、又はグラフィックスコア等のような専用コアでありうる。
フロントエンドユニット930は、デコードユニット940に接続された命令フェッチユニット938に接続された命令トランスレーションルックアサイドバッファ(TLB)936に接続された命令キャッシュユニット934に接続された分岐予測ユニット932を含む。デコードユニット940(またはデコーダ)は、複数の命令をデコードし、複数の元の命令からデコードされ、さもなければそれらを反映し、又はそれらから導出される、1または複数のマイクロオペレーション、複数のマイクロコードエントリポイント、複数のマイクロ命令、複数の他の命令又は複数の他の制御信号を、出力として生成しうる。デコードユニット940は、多様な異なるメカニズムを用いて実装されうる。複数の適切なメカニズムの例は、限定されないが、複数のルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリーメモリ(ROM)等を含む。1つの実施形態では、コア990は、(例えばデコードユニット940内又はさもなければフロントエンドユニット930内の)複数の特定のマイクロ命令のマイクロコードを格納するマイクロコードROM又は他の媒体を含む。デコードユニット940は、実行エンジンユニット950のリネーム/アロケーターユニット952に接続される。
実行エンジンユニット950は、リタイアメントユニット954に接続されたリネーム/アロケーターユニット952及び1または複数のスケジューラユニット956のセットを含む。スケジューラユニット956は、複数の予約ステーション、中央命令ウィンドウ等を含む、任意数の異なるスケジューラを表す。スケジューラユニット956は、物理レジスタファイルのユニット958に接続される。物理レジスタファイルのユニット958のそれぞれは、1または複数の物理レジスタファイルを表し、それらのうちの異なるものは、スカラー整数、スカラー浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行される次の命令のアドレスである命令ポインタ)等のような1または複数の異なるデータタイプを格納する。1つの実施形態では、物理レジスタファイルのユニット958は、ベクトル・レジスタユニット、ライトマスクレジスタユニット、及びスカラーレジスタユニットを含む。これらのレジスタユニットは、複数のアーキテクチャベクトルレジスタ、複数のベクトルマスクレジスタ、及び複数の汎用レジスタを提供しうる。物理レジスタファイルのユニット958は、リタイアメントユニット954に重複し、(例えば、レコーダバッファ及びリタイアメントレジスタファイルを用いて、将来ファイル、履歴バッファ、及びリタイアメントレジスタファイルを用いて、レジスタマップ及びレジスタのプールを用いて等)レジスタリネーム及びアウトオブオーダ実行が実装されうる多様な方法を示す。リタイアメントユニット954及び物理レジスタファイルのユニット958は、実行クラスター960に接続される。実行クラスター960は、1または複数の実行ユニット962のセット及び1または複数のメモリアクセスユニット964のセットを含む。複数の実行ユニット962は、多様なオペレーション(例えば、シフト、加算、減算、乗算)を、多様なタイプのデータ(例えば、スカラー浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点)に実行しうる。いくつかの実施形態は、複数の特定の機能又は複数の機能のセットに専用のいくつかの実行ユニットを含んでよく、一方他の実施形態は、1つのみの実行ユニット又は全てが全ての機能を実行する複数の実行ユニットを含みうる。スケジューラユニット956、物理レジスタファイルのユニット958、及び実行クラスター960は、場合により複数であるように示され、これは、複数の特定の実施形態は、特定のタイプのデータ/オペレーション(例えば、各々が各自のスケジューラユニット、物理レジスタファイルのユニット、および/または実行クラスターを有するスカラー整数パイプライン、スカラー浮動小数点/パック整数/パック浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/またはメモリアクセスパイプラインで、個別のメモリアクセスパイプラインの場合は複数の特定の実施形態が、このパイプラインの実行クラスターのみがメモリアクセスユニット964を有するように実装される)のための複数の個別のパイプラインを作成するためである。複数の個別のパイプラインが利用される場合、これらのパイプラインのうちの1または複数がアウトオブオーダ発行/実行であり、残りはインオーダでありうることも理解されるべきである。
複数のメモリアクセスユニット964のセットは、レベル2(L2)キャッシュユニット976に接続されたデータキャッシュユニット974に接続されたデータTLBユニット972を含む、メモリユニット970に接続される。1つの例の実施形態では、メモリアクセスユニット964は、ロードユニット、格納アドレスユニット、及び格納データユニットを含み、各々はメモリユニット970内のデータTLBユニット972に接続される。命令キャッシュユニット934はさらに、メモリユニット970のレベル2(L2)キャッシュユニット976に接続される。L2キャッシュユニット976は、1または複数の他のレベルのキャッシュに、及び最終的にはメインメモリに接続される。
例によって、例のレジスタリネームアウトオブオーダ発行/実行コアアーキテクチャは、以下のようにパイプライン900を実装しうる。(1)命令フェッチ938がフェッチ及び長さデコードステージ902及び904を実行する。(2)デコードユニット940がデコードステージ906を実行する。(3)リネーム/アロケーターユニット952がアロケーションステージ908及びリネームステージ910を実行する。(4)スケジューラユニット956がスケジュールステージ912を実行する。(5)物理レジスタファイルのユニット958及びメモリユニット970がレジスタ読み出し/メモリ読み出しステージ914を実行する。実行クラスター960が実行ステージ916を実行する。(6)メモリユニット970及び物理レジスタファイルのユニット958がライトバック/メモリ書き込みステージ918を実行する。(7)様々なユニットが例外ハンドリングステージ922に係わる。(8)リタイアメントユニット954及び物理レジスタファイルのユニット958がコミットステージ924を実行する。
コア990は、本開示の命令を含む、1または複数の命令セット(例えばx86命令セット(より新たなバージョンで追加されるいくつかの拡張を有する)、CA、サニーベールのMIPS TechnologyのMIPS命令セット、CA、サニーベールのARM HoldingのARM命令セット(NEONのような任意の追加の拡張を有する))をサポートしうる。1つの実施形態では、コア990は、パックデータ命令セット拡張(例えばAVX1,AVX2)をサポートするロジックを含み、それにより、多くのマルチメディアアプリケーションで利用される複数のオペレーションがパックデータを利用して実行されることを可能にする。
コアが、(2又はそれより多い平行なセットのオペレーション又はスレッドを実行する)マルチスレッディングをサポートしてよく、タイムスライスマルチスレッディング、(単一の物理コアが、物理コアが同時にマルチスレッディングを行う複数のスレッドの各々に論理コアを提供する)同時マルチスレッディング、又はそれらの組み合わせ(例えば、タイムスライスフェッチとデコード、及びそれらの後のIntel(登録商標)ハイパースレッディングテクノロジーにあるような同時マルチスレッディング)を含む様々な方法でそのように行うことは理解されるべきである。
レジスタリネームがアウトオブオーダ実行のコンテキストで説明されたが、レジスタリネームがインオーダアーキテクチャで利用されうることは理解されるべきである。プロセッサの示された実施形態はまた、別個の命令及びデータキャッシュユニット934/974及び共有L2キャッシュユニット976を含み、複数の代替の実施形態は、例えば、レベル1(L1)内部キャッシュ又は複数のレベルの内部キャッシュのような、複数の命令及びデータの両方のための単一の内部キャッシュを有しうる。いくつかの実施形態では、システムは、内部キャッシュとコアおよび/またはプロセッサの外部にある外部キャッシュとの組み合わせを含みうる。もしくは、キャッシュの全てが、コアおよび/またはプロセッサの外部にあってよい。
特定の例のインオーダコアアーキテクチャ
図10A−Bは、より特定の例のインオーダコアアーキテクチャのブロック図を示し、いずれかのコアが、チップにおける(同じタイプおよび/または異なるタイプの他の複数のコアを含む)いくつかのロジックブロックの一つでありうる。複数のロジックブロックは、高帯域幅インタコネクトネットワーク(例えばリングネットワーク)を介していくつかの固定の機能ロジック、複数のメモリI/Oインタフェース、及び他の必要なI/Oロジックとアプリケーションに依存して通信する。
図10Aは、発明の複数の実施形態による、オンダイインタコネクトネットワーク1002へのその接続と、レベル2(L2)キャッシュ1004のそのローカルサブセットとを有する、単一のプロセッサコアのブロック図である。1つの実施形態では、命令デコーダ1000は、パックデータ命令セット拡張により、x86命令セットをサポートする。L1キャッシュ1006は、スカラー及びベクトルユニット内への、キャッシュメモリへの低レイテンシアクセスを可能にする。(設計を単純にした)1つの実施形態では、スカラーユニット1008及びベクトルユニット1010は、複数の個別のレジスタセット(それぞれ、複数のスカラーレジスタ1012及び複数のベクトル・レジスタ1014)を用い、それらの間で転送されるデータがメモリに書き込まれ、その後レベル1(L1)キャッシュ1006からリードバックされるが、発明の代替の複数の実施形態は、異なるアプローチを用いうる(例えば、単一のレジスタセットを用い、又は書き込まれてリードバックされずに、2つのレジスタ間でのデータ転送を可能にする通信経路を含む)。
L2キャッシュ1004のローカルサブセットは、プロセッサコア毎に1つの、複数の別個のローカルサブセットへ分割されるグローバルL2キャッシュの一部である。各プロセッサコアは、L2キャッシュ1004のそれ自身のローカルサブセットへの直接アクセス経路を有する。プロセッサコアにより読み取られたデータは、そのL2キャッシュサブセット1004に格納され、自身の複数のローカルL2キャッシュサブセットにアクセスする複数の他のプロセッサコアに並行して素早くアクセスされうる。プロセッサコアにより書き込まれたデータは、必要であれば、自身のL2キャッシュサブセット1004に格納され、複数の他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシを保証する。リングネットワークは双方向であり、複数のプロセッサコア、複数のL2キャッシュ及び複数の他のロジックブロックのような複数のエージェントがチップ内でお互いに通信可能であるようにする。各リングデータ経路は、方向ごとに1012ビット幅である。
図10Bは、発明の複数の実施形態による、図10Aのプロセッサコアの一部の拡大図である。図10Bは、L1キャッシュ1004のL1データキャッシュ1006A部分と、ベクトルユニット1010及びベクトル・レジスタ1014に関するより詳細とを含む。具体的には、ベクトルユニット1010は、16ワイドベクトル処理ユニット(VPU)(16ワイドALU1028参照)であり、これは、整数、単精度浮動、及び倍精度浮動命令のうちの1または複数を実行する。VPUは、スウィズルユニット1020によるレジスタ入力のスウィズル、数値変換ユニット1022A−Bによる数値変換、及びメモリ入力上でのレプリケーションユニット1024によるレプリケーションをサポートする。複数の書き込みマスクレジスタ1026は、結果のベクトル書き込みを暗示する(predicating)ことを可能にする。
統合メモリコントローラ及びグラフィックスを有するプロセッサ
図11は、発明の複数の実施形態による、1より多いコアを有し、統合メモリコントローラを有し、及び集積化されたグラフィックスを有しうるプロセッサ1100のブロック図である。図11の実線で囲まれたボックスは、単一のコア1102A、システムエージェント1110、1または複数のバスコントローラユニット1116のセットを有するプロセッサ1100を示し、一方、点線で囲まれたボックスの任意の追加は、複数のコア1102A−N、システムエージェントユニット1110の1または複数の統合メモリコントローラユニット1114のセット、及び専用ロジック1108を有する代替のプロセッサ1100を示す。
このため、プロセッサ1100の複数の異なる実装は、(1)(1または複数のコアを含みうる)集積化されたグラフィックスおよび/または科学(スループット)ロジックである専用ロジック1108と1または複数の汎用コア(例えば複数の汎用インオーダコア、複数の汎用アウトオブオーダコア、これら2つの組み合わせ)であるコア1102A―Nとを有するCPU、(2)主にグラフィックスおよび/または科学(スループット)を対象とした多数の専用コアであるコア1102A―Nを有するコプロセッサ、及び(3)多数の汎用インオーダコアであるコア1102A―Nを有するコプロセッサを含みうる。このため、プロセッサ1100は、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU(汎用グラフィックス処理ユニット)、(30又はそれより多いコアを含む)高スループットメニー集積コア(MIC)コプロセッサ、組み込みプロセッサ等のような汎用プロセッサ、コプロセッサ又は専用プロセッサでありうる。プロセッサは、1または複数のチップ上に実装されうる。プロセッサ1100は、例えばBiCMOS,CMOS,又はNMOSのような多数のプロセス技術のいずれかを用いて、1または複数の基板の一部であり、および/または、1または複数の基板上に実装されうる。
メモリ階層は、複数のコア、セットの1または複数の共有キャッシュユニット1106、及び統合メモリコントローラユニット1114のセットに接続された外部メモリ(図示しない)内の1または複数のレベルのキャッシュを含む。複数の共有キャッシュユニット1106のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)、又は他のレベルのキャッシュのような1または複数の中間レベルキャッシュ、最高レベルキャッシュ(LLC)および/またはそれらの組み合わせを含みうる。1実施形態において、リングベースインタコネクトユニット1112は、統合グラフィックスロジック1108、共有キャッシュユニット1106のセット及びシステムエージェントユニット1110/統合メモリコントローラユニット1114を相互接続し、また代替の実施形態では、そのような複数のユニットを相互接続する任意の数の周知技術を利用しうる。1実施形態では、コヒーレンシは、1または複数のキャッシュユニット1106及びコア1102―A−Nの間で維持される。
いくつかの実施形態では、1または複数のコア1102A―Nは、マルチスレッディングをできる。システムエージェント1110は、複数のコア1102A−Nを協働及び動作させるそれらのコンポーネントを含む。システムエージェントユニット1110は、例えば、パワー制御ユニット(PCU)及び表示部を含みうる。PCUは、コア1102A―N及び統合グラフィックスロジック1108の電力状態を調節するのに必要なロジック及び複数のコンポーネントでありうる又は含みうる。表示部は、1または複数の外部接続されたディスプレイを駆動するためのものである。
複数のコア1102A―Nは、アーキテクチャ命令セットの観点では同種又は異種であってよく、すなわち、コア1102A―Nのうちの2又はそれより多くは、同じ命令セットを実行でき、一方、複数の他のものは、その命令セットのサブセットのみ又は異なる命令セットを実行できうる。
例の複数のコンピューターアーキテクチャ
図12―15は、例の複数のコンピューターアーキテクチャのブロック図である。複数のラップトップ、デスクトップ、ハンドヘルドPC、携帯用情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタルシグナルプロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤー、ハンドヘルドデバイス、及び多様な他の電子デバイスについて当該技術分野で知られた複数の他のシステムデザイン及び構成も適切である。概して、本開示のようなプロセッサおよび/または他の実行ロジックを組み込むことができる多様なシステム又は電子デバイスは通常適切である。
次に図12を参照し、本発明の1実施形態によるシステム1200のブロック図を示す。システム1200は、コントローラハブ1220に接続された1または複数のプロセッサ1210、1215を含みうる。1実施形態では、コントローラハブ1220は、(複数の別のチップ上にありうる)グラフィックスメモリコントローラハブ(GMCH)1290及び入出力ハブ(IOH)1250を含み、GMCH1290は、メモリ1240及びコプロセッサ1245に接続されたメモリ及び複数のグラフィックスコントローラを含み、IOH1250は、複数の入出力(I/O)デバイス1260をGMCH1290に接続する。もしくは、(本開示のように)メモリ及び複数のグラフィックスコントローラの一方又は両方は、プロセッサ内に統合され、メモリ1240及びコプロセッサ1245は、IOH1250を有する単一のチップにおいてプロセッサ1210及びコントローラハブ1220に直接接続される。
複数の追加のプロセッサ1215の任意の特徴は、図12に破線で示される。各プロセッサ1210、1215は、本開示の処理コアのうちの1または複数を含み、プロセッサ1100のあるバージョンでありうる。
メモリ1240は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)又は当該2つの組み合わせでありうる。少なくとも1つの実施形態について、コントローラハブ1220は、フロントサイドバス(FSB)、Quick Path インタコネクト(QPI)のようなポイントツーポイントインタフェース、又は同様の接続1295のようなマルチドロップバスを介して、プロセッサ1210,1215と通信する。
1実施形態では、コプロセッサ1245は、例えば、高スループットMICプロセッサ、ネットワーク若しくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、又は組み込みプロセッサ等のような専用プロセッサである。1実施形態では、コントローラハブ1220は、集積化されたグラフィックスアクセラレータを含みうる。
アーキテクチャ、マイクロアーキテクチャ、熱、及び電力消費特性等を含むメリットのメトリクスのスペクトルに関して、複数の物理リソース1210、1215の間には様々な差がありうる。
1実施形態では、プロセッサ1210は、一般型の複数のデータ処理オペレーションを制御する複数の命令を実行する。複数のコプロセッサ命令が複数の命令内に組み込まれうる。プロセッサ1210は、これらのコプロセッサ命令を、付属のコプロセッサ1245によって実行されるべきタイプのものであるとして認識する。従って、プロセッサ1210は、コプロセッサバス又は他のインタコネクト上で、これらのコプロセッサ命令(又は複数のコプロセッサ命令を表す複数の制御信号)を、コプロセッサ1245へ発行する。コプロセッサ1245は、受信したコプロセッサ命令を受け取り、実行する。
次に図13を参照し、本発明の実施形態による第1のより具体的な例のシステム1300のブロック図を示す。図13に示すように、マルチプロセッサシステム1300は、ポイントツーポイントインタコネクトシステムであり、ポイントツーポイントインタコネクト1350を介して接続された第1のプロセッサ1370及び第2のプロセッサ1380を含む。プロセッサ1370および1380のそれぞれは、あるバージョンのプロセッサ1100である。発明の1実施形態では、プロセッサ1370および1380は、それぞれ、プロセッサ1210および1215であり、コプロセッサ1338はコプロセッサ1245である。他の実施形態では、プロセッサ1370および1380は、それぞれ、プロセッサ1210およびコプロセッサ1245である。
プロセッサ1370および1380が示され、それぞれ、統合メモリコントローラ(IMC)ユニット1372および1382を含む。プロセッサ1370はまた、そのバスコントローラユニットの一部として、ポイントツーポイント(P−P)インタフェース1376及び1378を含み、同様に、第2のプロセッサ1380はP−Pインタフェース1386および1388を含む。プロセッサ1370、1380は、P−Pインタフェース回路1378,1388を用い、ポイントツーポイント(P−P)インタフェース1350を介して情報を交換しうる。図13に示すように、IMC1372及び1382は、複数のプロセッサを、各メモリ、すなわちメモリ1332及び1334に接続し、当該メモリは、各プロセッサにローカルに取り付けられたメインメモリの一部でありうる。
プロセッサ1370、1380はそれぞれ、ポイントツーポイントインタフェース回路1376,1394,1386,1398を用いて、個々のP−Pインタフェース1352、1354を介して、チップセット1390と情報を交換しうる。チップセット1390は、任意に、ハイパフォーマンスインタフェース1339を介してコプロセッサ1338と情報を交換しうる。1実施形態では、コプロセッサ1338は、例えば、高スループットMICプロセッサ、ネットワーク若しくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、又は組み込みプロセッサ等のような専用プロセッサである。
共有キャッシュ(図示しない)は、いずれかのプロセッサ内又は両プロセッサの外側に含まれ、さらにP−Pインタコネクトを介して複数のプロセッサに接続され、複数のプロセッサのいずれか又は両方のローカルキャッシュ情報は、プロセッサが低パワーモードにされた場合に共有キャッシュに格納されうる。
チップセット1390は、インタフェース1396を介して第1のバス1316に接続されうる。1実施形態では、本発明の範囲をそれほど限定しないが、第1のバス1316は、ペリフェラルコンポーネントインタコネクト(PCI)バス、又は、PCI Expressバス若しくは他の第3世代I/Oインタコネクトバスのようなバスでありうる。
図13に示すように、様々なI/Oデバイス1314は、第1のバス1316を第2のバス1320へ接続するバスブリッジ1318とともに、第1のバス1316へ接続されうる。1実施形態では、複数のコプロセッサ、複数の高スループットMICプロセッサ、GPGPUのもの、(例えば、複数のグラフィックスアクセラレータ又はデジタル信号処理(DSP)ユニットのような)複数のアクセラレータ、複数のフィールドプログラマブルゲートアレイ、又は任意の他のプロセッサのような、1または複数の追加のプロセッサ1315が、第1のバス1316に接続される。1実施形態では、第2のバス1320は、ローピンカウント(LPC)バスでありうる。1実施形態では、様々なデバイスが、例えば、キーボードおよび/またはマウス1322、通信デバイス1327、及びディスクドライブ又は他の大容量記憶デバイスのような記憶ユニット1328を含む、第2のバス1320に接続されうる。記憶ユニットは、複数の命令/コード及びデータ1330を含みうる。さらに、オーディオI/O1324は、第2のバス1320に接続されうる。複数の他のアーキテクチャが可能であるということを留意すべきである。例えば、図13のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバス又は他のそのようなアーキテクチャを実装しうる。
次に図14を参照し、本発明の実施形態による、第2のより具体的な例のシステム1400のブロック図を示す。図13および14の同様の要素は同様の参照符号を有し、図13の特定の態様は、図14の他の態様を分かりにくくしないように、図14から省略されている。
図14は、プロセッサ1370、1380が、統合メモリ及びI/O制御ロジック(「CL」)1372及び1382をそれぞれ含みうることを示す。このため、CL1372及び1382は、複数の統合メモリコントローラユニットを含み、I/O制御ロジックを含む。図14は、CL1372、1382に接続されたメモリ1332、1334だけではなく、複数のI/Oデバイス1414も、制御ロジック1372、1382に接続されることを示す。複数のレガシーI/Oデバイス1415は、チップセット1390に接続される。
以下図15を参照し、本発明の実施形態による、SoC1500のブロック図を示す。図11の同様の要素は、同様の参照符号を有する。また、点線で囲まれた複数のボックスは、さらに進んだ複数のSoCの複数の任意の特徴である。図15では、インタコネクトユニット1502は、1または複数のコア202A―Nのセット及び共有キャッシュユニット1106を含むアプリケーションプロセッサ1510;システムエージェントユニット1110;バスコントローラユニット1116;統合メモリコントローラユニット1114;統合グラフィックスロジック、イメージプロセッサ、オーディオプロセッサ、及びビデオプロセッサを含みうる1または複数のコプロセッサ1520のセット;スタティックランダムアクセスメモリ(SRAM)ユニット1530;ダイレクトメモリアクセス(DMA)ユニット1532;及び1または複数の外部ディスプレイに接続するための表示部1540に接続される。1実施形態では、コプロセッサ1520は、例えば、ネットワーク若しくは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、又は組み込みプロセッサ等のような専用プロセッサを含む。
本開示の複数のメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はそのような複数の実装アプローチの組み合わせにおいて実装されうる。発明の複数の実施形態は、複数のプログラム可能システム上で実行するコンピュータプログラム又はプログラムコードとして実装されうる。当該プラグラム可能システムは、少なくとも、1つのプロセッサ、ストレージシステム(揮発性及び不揮発性メモリ、および/または複数のストレージ要素を含む)、少なくとも1つの入力デバイス及び少なくとも1つの出力デバイスを備える。
図13に示されたコード1330のようなプログラムコードは、複数の命令を入力して、本開示の複数の機能を実行し、出力情報を生成するように適用されうる。出力情報は、1または複数の出力デバイスに既知の方法で適用されうる。この適用のために、処理システムは、例えば、デジタルシグナルプロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、又はマイクロプロセッサのようなプロセッサを有する任意のシステムを含む。
プログラムコードは、処理システムと通信するように、ハイレベルプロシージャ又はオブジェクト指向プログラミング言語において実装されうる。プログラムコードはまた、望ましい場合は、アセンブリ又はマシン言語において実装されうる。事実、本開示の複数のメカニズムは、範囲において、いずれの特定のプログラミング言語にも限定されない。いずれの場合も、言語は、コンパイル又はインタプリタ言語でありうる。
少なくとも1つの実施形態の1または複数の態様は、プロセッサ内の多様なロジックを表すマシン可読媒体上に格納された複数の代表的な命令によって実装されうる。当該命令は、マシンによって読み込まれた際に、マシンに、本開示の複数の技術を実行するロジックを作らせる。複数の「IPコア」として知られるそのような複数の代表は、有形のマシン可読媒体に格納されてよく、様々な顧客又は製造設備へ供給され、ロジック又はプロセッサを実際に作る複数の作製マシンにロードされうる。
限定しないが、そのようなマシン可読記憶媒体は、マシン又はデバイスによって製造され又は形成された複数の物品の非一時的有形装置を含みうる。これは、複数のハードディスク、複数のフロッピー(登録商標)ディスク、複数の光ディスク、複数のコンパクトディスクリードオンリメモリ(CD−ROM)、複数のコンパクトディスクリライタブル(CD−RW)、及び複数の光磁気ディスクを含む、複数の任意の他のタイプのディスクのような記憶媒体、複数のリードオンリメモリ(ROM)、複数のダイナミックランダムアクセスメモリ(DRAM)のような複数のランダムアクセスメモリ(RAM)、複数のスタティックランダムアクセスメモリ(SRAM)、複数の消去可能プログラマブルリードオンリメモリ(EPROM)、複数のフラッシュメモリ、複数の電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、相変化メモリ(PCM)、複数の磁気又は光カード、又は複数の電子命令を格納するのに適した任意の他のタイプの媒体のような半導体デバイスを含む。
従って、発明の複数の実施形態はまた、複数の命令を含む、又はハードウェア記述言語(HDL)のような設計データを含む非一時的有形マシン可読媒体を含む。設計データは、本開示の複数の構造、回路、装置、プロセッサ、および/またはシステムの特徴を規定する。そのような複数の実施形態はまた、プログラムプロダクトとして参照されうる。
エミュレーション(バイナリ変換、コードモーフィング等を含む)
いくつかの場合では、命令変換器は、ソース命令セットからターゲット命令セットへ命令を変換するように利用されうる。例えば、命令変換器は、命令を、コアによって処理される1または複数の他の命令へ、変換(例えば静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を利用する)、モーフィング、エミュレート、さもなければ、コンバートしうる。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、又はそれらの組み合わせにおいて実装されうる。命令変換器は、プロセッサ上にあり、プロセッサ外にあり、又はプロセッサ上の一部及びプロセッサ外の一部でありうる。
図16は、発明の複数の実施形態による、ソフトウェア命令変換器の利用を対比させ、ソース命令セットの複数のバイナリ命令をターゲット命令セットの複数のバイナリ命令へ変換するブロック図である。示された実施形態では、命令変換器は、ソフトウェア命令変換器であるが、代替的に、命令変換器がソフトウェア、ファームウェア、ハードウェア、又は様々なそれらの組み合わせにおいて実装されうる。図16は、少なくとも1つのx86命令セットコアを有するプロセッサ1616により本来的に実行されうるx86バイナリコード1606を生成するべく、高級言語1602のプログラムが、x86コンパイラー1604を用いてコンパイルされうることを示す。少なくとも1つのx86命令セットコアを有するプロセッサ1616は、少なくとも1つのx86命令セットコアを有するIntelプロセッサと実質的に同じ結果を達成するために、(1)インテルx86命令セットコアの命令セットの実質的な部分、又は(2)少なくとも1つのx86命令セットコアを有するIntelプロセッサ上で実行されることを対象とした複数のアプリケーション又は他のソフトウェアの複数のオブジェクトコードバージョンを、互換性で実行するさもなければ処理することにより、少なくとも1つのx86命令セットコアを有するIntelプロセッサと実質的に同じ機能を実行できる任意のプロセッサを表す。x86コンパイラー1604は、追加のリンケージ処理を用いて又は用いないで、少なくとも1つのx86命令セットコアを有するプロセッサ1616上で実行可能なx86バイナリコード1606(例えばオブジェクトコード)を生成するように動作可能であるコンパイラーを表す。同様に、図16は、高級言語1602のプログラムが、少なくとも1つのx86命令セットコアを有さないプロセッサ1614(例えば、CA,サニーベールのMIPS TechnologyのMIPS命令セットを実行するおよび/またはCA、サニーベールのARM HoldingのARM命令セットを実行する複数のコアを有するプロセッサ)によって本来的に実行されうる代替の命令セットのバイナリコード1610を生成すべく、代替の命令セットコンパイラー1608を用いてコンパイルされうることを示す。命令変換器1612は、x86命令セットコアを有さないプロセッサ1614によって本来的に実行されうるコードへx86バイナリコード1606を変換するように用いられる。この変換されたコードは、これができる命令変換器は作製が困難であるため、代替の命令セットのバイナリコード1610と同じではないであろう。しかし、変換されたコードは、全般的なオペレーションを達成し、代替の命令セットからの複数の命令からなりうる。このため、命令変換器1612は、ソフトウェア、ファームウェア、ハードウェア、又はこれらの組み合わせを表し、これらは、エミュレーション、シミュレーション、又は任意の他のプロセスを介して、x86命令セットプロセッサ又はコアを有さないプロセッサ又は他の電子デバイスが、x86バイナリコード1606を実行することを可能にする。
図6−8のいずれかについて記載された複数のコンポーネント、特徴、及び詳細はまた、任意に、図1−5のいずれかで用いられうる。さらに、本開示の複数の装置のいずれかについての本開示の複数のコンポーネント、特徴、及び詳細はまた、任意に、複数の実施形態でそのような装置によっておよび/または用いて実行されうる本開示の複数の方法のいずれかにおいて利用および/または適用されうる。本開示の複数のプロセッサのいずれかは、本開示の複数のコンピュータシステム又は複数の他のシステムに含まれうる。
説明及び複数の請求項では、「coupled」および/または「connected」という用語は、それらの派生語とともに用いられうる。これらの用語は、お互いに類義語として意図されていない。むしろ、複数の実施形態では、「connected」は、2又はそれより多い要素がお互いに直接物理的および/または電気的に接触していることを示すために用いられうる。「coupled」は、2又はそれより多い要素が、直接物理的および/または電気的にお互いに接触していることを意味しうる。しかし、「coupled」はまた、2又はそれより多い要素が、お互いに直接接触しておらず、しかしまだ、お互いに協働又は相互作用することを意味しうる。複数の図では、複数の矢印は、複数の接続及び連結を示すように用いられる。
「および/または」という用語が用いられた。本開示で用いられるように、「および/または」という用語は、一方又は他方又は両方を意味する(例えばAおよび/またはBは、A、又はB、又はA及びBの両方を意味する)。
上記説明では、複数の特定の詳細が、複数の実施形態の完全な理解を提供すべく示された。しかし、複数の他の実施形態は、これらの特定の詳細を用いないで実施されうる。発明の範囲は、上記提供された複数の特定の例によってではなく、以下の請求項によってのみ決定されるべきである。複数の他の例では、よく知られた複数の回路、構造、デバイス及びオペレーションは、ブロック図形式で、および/または、説明の理解を分かりにくくしないように詳細を用いないで示された。適切であると考えられる場合には、複数の参照符号、又は複数の参照符号の末端部は、特定されない又は明確に別の方法で明らかでない限り、任意に、同様の又は同じ特性を有しうる、複数の対応する又は類似の要素を示すべく複数の図の間で繰り返された。いくつかの場合では、複数のコンポーネントが示され説明され、適切な場合には、それらがかわりに任意に単一のコンポーネントとして共に統合されうる。複数の他の場合には、単一のコンポーネントが示され説明され、適切な場合には、それは任意に2又はそれより多いコンポーネントに分離されうる。
様々なオペレーション及び方法が説明された。複数の方法のいくつかは、複数のフロー図において比較的基本的な形態で説明されたが、複数のオペレーションは任意に、複数の方法に加えられおよび/または複数の方法から除去されうる。加えて、複数のフロー図が複数の実施形態による複数のオペレーションの特定の順序を示したが、その順序は例である。複数の代替の実施形態は、異なる順序で複数のオペレーションを実行し、複数の特定のオペレーションを結合し、複数の特定のオペレーションを重複させる等できる。
いくつかの実施形態は、マシン可読媒体を含む製造品(例えば、コンピュータプログラムプロダクト)を含む。媒体は、マシンによって可読な形式の情報を提供する、例えば格納するメカニズムを含みうる。マシン可読媒体は、マシンによって実行された場合および/または時に、本開示の1又は複数のオペレーション、方法、又は技術をマシンに実行させるおよび/またはマシンが実行する結果をもたらす、複数の命令のシーケンスを提供又はそれに格納しうる。
いくつかの実施形態では、マシン可読媒体は、有形のおよび/または非一時的なマシン可読記憶媒体を含みうる。例えば、有形のおよび/または非一時的なマシン可読記憶媒体は、フロッピー(登録商標)ディスク、光記憶媒体、光ディスク、光データ記憶デバイス、CD−ROM、磁気ディスク、光磁気ディスク、リードオンリメモリ(ROM)、プログラム可能ROM(PROM)、消去可能プログラム可能ROM(EPROM)、電気的消去可能プログラム可能ROM(EEPROM)、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)フラッシュメモリ、相変化メモリ、相変化データ記憶マテリアル、不揮発性メモリ、不揮発性データ記憶デバイス、非一時的メモリ、又は非一時的データ記憶デバイス等を含みうる。非一時的なマシン可読記憶媒体は、一時的伝搬信号からなるものではない。
複数の適切なマシンの例は、限定されないが、1または複数のプロセッサを含む複数のコンピューティングデバイス又は他の電子デバイスを含む。そのような複数のコンピューティングデバイス及び電子デバイスの例は、限定されないが、ごくわずかの例を挙げるべく、複数の携帯電話、スマートフォン、タブレットコンピュータ、ネットブック、モバイルインターネットデバイス(MID)、メディアプレイヤー、ラップトップコンピュータ、ノートブックコンピュータ、デスクトップコンピュータ、スマートテレビ、ネットトップ、セットトップボックス、及びビデオゲームコントローラを含みうる。
この明細書を通じて、例えば「1実施形態」、「実施形態」、「1または複数の実施形態」、「いくつかの実施形態」への参照は、特定の特徴が、発明の実施に含まれうるが必ずしも必須ではないことを示す。同様に、説明で、開示の効率化及び様々な発明の態様の理解の援助のために、様々な特徴は、時には単一の実施形態、図又はそれらの説明においてグループを作る。しかし開示のこの方法は、発明が各請求項に明確に挙げられたより多くの特徴を必要とする意図を表すとして解釈されるべきではない。むしろ、以下の請求項が表すように、複数の発明の態様は、単一の開示された実施形態の全ての特徴より少ないという点にある。このため、詳細な説明に続く複数の請求項は、本開示で、各請求項が発明の別個の実施形態としてそれ自身に基づくため、この詳細な説明に明示的に組み込まれる。
例の実施形態
以下の複数の実施例は、さらなる複数の実施形態に関する。複数の実施例における詳細は、1または複数の実施形態のいずれにおいても利用されうる。
実施例1は、第1のアーキテクチャコードモジュールから第1のアーキテクチャライブラリモジュールを対象とする第1の呼び出し手順オペレーションを受け取る制御フロー移転受け取りモジュールを含むインターアーキテクチャ互換性装置を含む。第1の呼び出し手順オペレーションは第1の複数の入力パラメータを含む。アプリケーションバイナリインタフェース(ABI)変更モジュールは、制御フロー移転受け取りモジュールに接続される。ABI変更モジュールは、第1の呼び出し手順オペレーションを、対応する第2の呼び出し手順オペレーションへ変換するべく複数のABI変更を行う。第1の呼び出し手順オペレーションは、第1の複数の入力パラメータを含み、第2の呼び出し手順オペレーションは、第2の複数の入力パラメータを含む。第2の呼び出し手順オペレーションは、第2のアーキテクチャライブラリモジュールと互換性がある。制御フロー移転出力モジュールは、ABI変更モジュールに接続される。制御フロー移転出力モジュールは、第2の呼び出し手順オペレーションを第2のアーキテクチャライブラリモジュールへ提供する。
実施例2は、実施例1の装置を含み、ABI変更モジュールは、第1の複数の入力パラメータのうちの第1のパラメータをスタックから受け取り、第1のパラメータに対応する、第2の複数の入力パラメータのうちの第2のパラメータを、第2のアーキテクチャライブラリモジュールによって第2のパラメータについて利用されることが予期されるレジスタに格納する。
実施例3は、実施例1の装置を含み、制御フロー移転受け取りモジュール、ABI変更モジュール、及び制御フロー移転出力モジュールは、第1のアーキテクチャライブラリモジュールに対応する第1のラッパーモジュールの一部である。
実施例4は、実施例3の装置を含み、各々が異なる第1のアーキテクチャライブラリモジュールに対応する複数のラッパーモジュールをさらに含み、複数のラッパーモジュールの各々は、制御フロー移転受け取りモジュール、ABI変更モジュール、及び制御フロー移転出力モジュールを有する。
実施例5は、実施例4の装置を含み、第1のラッパーモジュールは第1のアーキテクチャライブラリモジュールと同じ名前を有し、複数のラッパーモジュールの各々は、対応する異なる第1のアーキテクチャライブラリモジュールと同じ名前を有する。
実施例6は、実施例1の装置を含み、実行される第1のアーキテクチャコード及び第2のアーキテクチャコードから選択されたコードのタイプを決定するプロセッサモード変更モジュールをさらに有し、プロセッサモード変更モジュールは、実行されるコードの決定されたタイプと互換性のあるプロセッサのコードタイプ実行モードを変更する。
実施例7は、実施例6の装置を含み、プロセッサモード変更モジュールは、全ての第1のアーキテクチャコードを有する第1セグメントと全ての第2のアーキテクチャコードを有する第2のセグメントとの間の複数のインターセグメント制御フロー移転に基づいて実行されるコードのタイプを決定する。
実施例8は、実施例1から7のいずれか一つの装置を含み、制御フロー移転受け取りモジュールは、32ビットライブラリモジュールを対象とする第1の呼び出し手順オペレーションを32ビットコードモジュールから受け取り、ABI変更モジュールは、64ビットライブラリモジュールと互換性のある対応する第2の呼び出し手順オペレーションへ第1の呼び出し手順オペレーションを変換し、制御フロー移転出力モジュールは、第2の呼び出し手順オペレーションを64ビットライブラリモジュールへ提供する。
実施例9は、実施例1から7のいずれか1つの装置を含み、第1のアーキテクチャコードモジュールによって利用可能な複数のアーキテクチャ整数レジスタの最大ビット幅は、第2のアーキテクチャコードモジュールによって利用可能な複数のアーキテクチャ整数レジスタの最大ビット幅とは異なる。
実施例10は、第1のアーキテクチャコードモジュールから、第1のアーキテクチャライブラリモジュールを対象とした第1の呼び出し手順オペレーションを受け取る段階を含むインターアーキテクチャ互換方法である。第1の呼び出し手順オペレーションは第1の複数の入力パラメータを含む。方法はまた、第2のアーキテクチャライブラリモジュールへ、第2の複数の入力パラメータを含む対応する第2の呼び出し手順オペレーションを提供する段階を含む。
実施例11は、実施例10の方法を含み、受け取る段階は、32ビットコードモジュールから32ビットライブラリモジュールを対象とする第1の呼び出し手順オペレーションを受け取る段階を含み、提供する段階は、第2の呼び出し手順オペレーションを64ビットライブラリモジュールへ提供する段階を含む。
実施例12は、実施例10の方法を含み、スタックから第1の複数の入力パラメータの第1のパラメータを受け取る段階と、第2の複数の入力パラメータの第2のパラメータを、第2のアーキテクチャライブラリモジュールが第2のパラメータを受け取るために利用したレジスタに格納する段階とをさらに含む。第2のパラメータは第1のパラメータに対応する。
実施例13は、実施例10の方法を含み、受け取る段階は、第1のアーキテクチャライブラリモジュールと同じ名前を有するラッパーモジュールで第1の呼び出し手順オペレーションを受け取る段階を含む。
実施例14は、実施例13の方法を含み、第1のアーキテクチャライブラリモジュール及び第2のアーキテクチャライブラリモジュールの両方の前に動的リンカーによって検索されるようにラッパーモジュールを構成する段階をさらに含む。
実施例15は実施例10の方法を含み、第1のアーキテクチャライブラリモジュールを有さない電子デバイスにおいて実行される。
実施例16は、32ビットコードモジュール及び64ビットライブラリモジュールを格納するメモリを含むコンピュータシステムである。64ビットプロセッサは、メモリに接続される。システムはまた、32ビットライブラリモジュールのための32ビットコードモジュールからの呼び出し手順オペレーションをインターセプトし、64ビットライブラリモジュールへ対応する呼び出し手順オペレーションを提供するインターアーキテクチャ互換性モジュールを含む。
実施例17は、実施例16のコンピュータシステムを含み、インターアーキテクチャ互換性モジュールは、32ビットライブラリモジュールのための呼び出し手順オペレーションを64ビットライブラリモジュールのための対応する呼び出し手順オペレーションへ変換するべく、複数のアプリケーションバイナリインタフェース(ABI)変更を行う。
実施例18は、実施例16のコンピュータシステムを含み、32ビットコードモジュール及び64ビットライブラリモジュールは、メモリの複数の異なるセグメントに格納され、32ビットコードモジュールを格納するセグメントはフラットアドレス指定を利用する。
実施例19は、実施例16のコンピュータシステムを含み、インターアーキテクチャ互換性モジュールは、32ビットコードモジュールからの呼び出し手順オペレーションをインターセプトする32ビットライブラリモジュールと同じ名前を有するラッパーモジュールを含む。
実施例20は、実施例16から19のいずれか1つのコンピュータシステムを含み、コンピュータシステムは32ビットライブラリモジュールを有さない。
実施例21は、実施例20のコンピュータシステムを含み、コンピュータシステムはいずれの32ビットライブラリモジュールも有さない。
実施例22は、実施例16から19のいずれか一つのコンピュータシステムを含み、コンピュータシステムはスマートフォンを含む。
実施例23は、複数の命令を格納する非一時的なマシン可読記憶媒体を含む製造品であり、当該命令は、マシンによって実行された場合、マシンに、第1のアーキテクチャコードモジュールから第1のアーキテクチャライブラリモジュールを対象とする第1の呼び出し手順オペレーションを受け取る段階を含む複数のオペレーションを実行させ、第1の呼び出し手順オペレーションは第1の複数の入力パラメータを含む。当該複数のオペレーションはまた、第1の複数の入力パラメータを含む第1の呼び出し手順オペレーションを、第2の複数の入力パラメータを含む対応する第2の呼び出し手順オペレーションへ変換するべく、複数のアプリケーションバイナリインタフェース(ABI)変更を行う段階を含む。複数のオペレーションはまた、第2の呼び出し手順オペレーションを第2のアーキテクチャライブラリモジュールへ提供する段階を含む。
実施例24は、実施例23の製造品を含み、複数の命令は、マシンによって実行された場合、32ビットライブラリモジュールを対象とする第1の呼び出し手順オペレーションを32ビットコードモジュールから受け取る段階と、第2の呼び出し手順オペレーションを64ビットライブラリモジュールへ提供する段階とを含む複数のオペレーションをマシンに実行させる。
実施例25は、実施例23から24のいずれかの製造品を含み、マシンによって実行された場合、スタックから、第1の複数の入力パラメータの第1のパラメータを受け取る段階と、第2の複数の入力パラメータの第2のパラメータを、第2のアーキテクチャライブラリモジュールが第2のパラメータを受け取るために利用したレジスタに格納する段階とを含む複数のオペレーションをマシンに実行させる複数の命令をさらに格納する。第2のパラメータは第1のパラメータに対応する。
実施例26は、実施例10−15のいずれかの方法を実行するように動作可能である装置を含む。
実施例27は、実施例10−15のいずれかの方法を実行するための手段を含む装置を含む。
実施例28は、実施例10−15の一つの方法を実行する、複数のモジュール、ユニット、手段又はこれらの組み合わせを含む装置を含む。
実施例29は、任意に複数の命令を格納しさもなければ提供する非一時的マシン可読媒体を任意に含む製造品を含む。複数の命令は、プロセッサ、コンピュータシステム、又は他のマシンによって実行された場合および/または時に、コンピュータシステム又は他のマシンが実施例10−15のいずれかの方法を実行するようにさせるよう動作可能である。
実施例30は、バス又は他のインタコネクト、インタコネクトに接続されたプロセッサ、インタコネクトに接続されたフラッシュメモリ、及びインタコネクトに接続された任意のアンテナを含む、コンピュータシステム又は他の電子デバイスを含み、コンピュータシステム又は他の電子デバイスは、実施例10−15のいずれかの方法を実行するように動作可能である。
実施例31は、実質的に本開示のような1または複数のオペレーション又はいずれかの方法を実行するように動作可能な装置を含む。
実施例32は、実質的に本開示のようなインターアーキテクチャ互換性モジュールを含む。

Claims (26)

  1. インターアーキテクチャ互換性装置であって、
    第1のアーキテクチャコードモジュールから、第1のアーキテクチャライブラリモジュールを対象とした第1の呼び出し手順オペレーションを受け取る制御フロー移転受け取りモジュールであって、前記第1の呼び出し手順オペレーションは第1の複数の入力パラメータを含む、制御フロー移転受け取りモジュールと、
    前記制御フロー移転受け取りモジュールに接続されたアプリケーションバイナリインタフェース変更モジュール(ABI変更モジュール)であって、前記ABI変更モジュールは、前記第1の複数の入力パラメータを含む前記第1の呼び出し手順オペレーションを、第2の複数の入力パラメータを含み、第2のアーキテクチャライブラリモジュールと互換性がある対応する第2の呼び出し手順オペレーションへ変換すべく、複数のABI変更を行う、前記ABI変更モジュールと、
    前記ABI変更モジュールに接続され、前記第2の呼び出し手順オペレーションを前記第2のアーキテクチャライブラリモジュールへ提供する制御フロー移転出力モジュールと、
    第1のアーキテクチャコードと実行される第2のアーキテクチャコードとから選択されるコードのタイプを決定するプロセッサモード変更モジュールであって、前記プロセッサモード変更モジュールは、実行されるコードの前記決定されたタイプと互換性のあるプロセッサのコードタイプ実行モードを変更する、前記プロセッサモード変更モジュールと、
    を備える装置。
  2. 前記ABI変更モジュールは、
    スタックから前記第1の複数の入力パラメータの第1のパラメータを受信し、
    前記第1のパラメータに対応する、前記第2の複数の入力パラメータの第2のパラメータを、前記第2のアーキテクチャライブラリモジュールによって前記第2のパラメータのために用いられることが予期されるレジスタに格納する
    請求項1に記載の装置。
  3. 前記制御フロー移転受け取りモジュール、前記ABI変更モジュール、及び前記制御フロー移転出力モジュールは、前記第1のアーキテクチャライブラリモジュールに対応する第1のラッパーモジュールの一部である
    請求項1または2に記載の装置。
  4. 異なる第1のアーキテクチャライブラリモジュールに各々が対応する複数のラッパーモジュールをさらに備え、
    前記複数のラッパーモジュールの各々は、制御フロー移転受け取りモジュール、ABI変更モジュール、及び制御フロー移転出力モジュールを有する
    請求項3に記載の装置。
  5. 前記第1のラッパーモジュールは前記第1のアーキテクチャライブラリモジュールと同じ名前を有し、
    前記複数のラッパーモジュールの各々は対応する前記異なる第1のアーキテクチャライブラリモジュールと同じ名前を有する
    請求項4に記載の装置。
  6. 前記制御フロー移転受け取りモジュールは、前記制御フロー移転受け取りモジュールのラッパーライブラリが32ビットライブラリ及び64ビットライブラリのいずれかの前に検索されるように構成される機能インターポジショニングを用いて、前記第1の呼び出し手順オペレーションを受け取る
    請求項1から5のいずれか1項に記載の装置。
  7. 前記プロセッサモード変更モジュールは、全ての第1のアーキテクチャコードを有する第1のセグメントと全ての第2のアーキテクチャコードを有する第2のセグメントとの間の複数のインターセグメント制御フロー移転に基づいて実行されるコードの前記タイプを決定する
    請求項1から6のいずれか1項に記載の装置。
  8. 前記制御フロー移転受け取りモジュールは、32ビットコードモジュールから、32ビットライブラリモジュールを対象とする前記第1の呼び出し手順オペレーションを受け取り、
    前記ABI変更モジュールは、前記第1の呼び出し手順オペレーションを、64ビットライブラリモジュールと互換性のある対応する前記第2の呼び出し手順オペレーションへ変換し、
    前記制御フロー移転出力モジュールは、前記第2の呼び出し手順オペレーションを、前記64ビットライブラリモジュールへ提供する
    請求項1から7のいずれか1項に記載の装置。
  9. 前記第1のアーキテクチャコードモジュールによって使用可能な複数のアーキテクチャ整数レジスタの最大ビット幅は、第2のアーキテクチャライブラリモジュールによって使用可能な複数のアーキテクチャ整数レジスタの最大ビット幅と異なり、
    前記第2のアーキテクチャライブラリモジュールは、数学ライブラリモジュールと標準Cライブラリモジュールとから選択される
    請求項1から8のいずれか1項に記載の装置。
  10. インターアーキテクチャ互換方法であって、
    第1のアーキテクチャコードモジュールから、第1のアーキテクチャライブラリモジュールを対象とする第1の呼び出し手順オペレーションを受け取る段階であって、前記第1の呼び出し手順オペレーションは第1の複数の入力パラメータを含む、受け取る段階と、
    前記第1の複数の入力パラメータを有する前記第1の呼び出し手順オペレーションを、第2の複数の入力パラメータを有する対応する第2の呼び出し手順オペレーションへ変換すべく、複数のアプリケーションバイナリインタフェース(ABI)変更を行う段階と、
    前記第2の呼び出し手順オペレーションを、第2のアーキテクチャライブラリモジュールへ提供する段階と
    第1のアーキテクチャコードと実行される第2のアーキテクチャコードとから選択されるコードのタイプを決定し、実行されるコードの前記決定されたタイプと互換性のあるプロセッサのコードタイプ実行モードを変更する段階と
    を備える方法。
  11. 受け取る段階は、32ビットコードモジュールから、32ビットライブラリモジュールを対象とする前記第1の呼び出し手順オペレーションを受け取る段階を有し、
    提供する段階は、前記第2の呼び出し手順オペレーションを、64ビットライブラリモジュールへ提供する段階を有する
    請求項10に記載の方法。
  12. 前記第1の複数の入力パラメータの第1のパラメータを、スタックから受け取る段階と、
    前記第2の複数の入力パラメータの第2のパラメータを、前記第2のアーキテクチャライブラリモジュールが前記第2のパラメータを受け取るために使用したレジスタに格納する段階と
    をさらに備え、
    前記第2のパラメータは前記第1のパラメータに対応する
    請求項10または11に記載の方法。
  13. 受け取る段階は、前記第1のアーキテクチャライブラリモジュールと同じ名前を有するラッパーモジュールを用いて前記第1の呼び出し手順オペレーションを受け取る段階を有する
    請求項10から12のいずれか1項に記載の方法。
  14. 前記第1のアーキテクチャライブラリモジュール及び前記第2のアーキテクチャライブラリモジュールの両方の前に動的リンカーによって検索されるように、前記ラッパーモジュールを構成する段階をさらに備える
    請求項13に記載の方法。
  15. 前記第1のアーキテクチャライブラリモジュールを有さない電子デバイスにおいて実行される
    請求項10から14のいずれか1項に記載の方法。
  16. 32ビットコードモジュールと64ビットライブラリモジュールを格納するメモリと、
    前記メモリに接続された64ビットプロセッサと、
    32ビットライブラリモジュールに対する前記32ビットコードモジュールからの呼び出し手順オペレーションをインターセプトし、前記32ビットライブラリモジュールに対する前記呼び出し手順オペレーションを前記64ビットライブラリモジュールに対する対応する呼び出し手順オペレーションへ変換するべく複数のアプリケーションバイナリインタフェース(ABI)変更を行い、前記対応する呼び出し手順オペレーションを前記64ビットライブラリモジュールへ提供するインターアーキテクチャ互換性モジュールと、
    32ビットコードと実行される64ビットコードとから選択されるコードのタイプを決定するプロセッサモード変更モジュールであって、前記プロセッサモード変更モジュールは、実行されるコードの前記決定されたタイプと互換性のある前記64ビットプロセッサのコードタイプ実行モードを変更する、前記プロセッサモード変更モジュールと を備えるコンピュータシステム。
  17. 前記32ビットコードモジュール及び前記64ビットライブラリモジュールは、前記メモリの複数の異なるセグメントに格納され、前記32ビットコードモジュールを格納するセグメントはフラットアドレス指定を利用する
    請求項16に記載のコンピュータシステム。
  18. 前記インターアーキテクチャ互換性モジュールは、前記32ビットコードモジュールからの前記呼び出し手順オペレーションをインターセプトする前記32ビットライブラリモジュールと同じ名前を有するラッパーモジュールを含む
    請求項16または17に記載のコンピュータシステム。
  19. 前記コンピュータシステムは、前記32ビットライブラリモジュールを有さない
    請求項16から18のいずれか1項に記載のコンピュータシステム。
  20. 複数の命令を備えたプログラムであって、マシンによって実行された場合、前記複数の命令は、前記マシンに、
    第1のアーキテクチャコードモジュールから、第1のアーキテクチャライブラリモジュールを対象とする第1の呼び出し手順オペレーションを受け取る段階であって、前記第1の呼び出し手順オペレーションは第1の複数の入力パラメータを有する、受け取る段階と、
    前記第1の複数の入力パラメータを有する前記第1の呼び出し手順オペレーションを、第2の複数の入力パラメータを有する対応する第2の呼び出し手順オペレーションへ変換すべく、複数のアプリケーションバイナリインタフェース(ABI)変更を行う段階と、
    前記第2の呼び出し手順オペレーションを第2のアーキテクチャライブラリモジュールへ提供する段階と、
    第1のアーキテクチャコードと実行される第2のアーキテクチャコードとから選択されるコードのタイプを決定し、実行されるコードの前記決定されたタイプと互換性のあるプロセッサのコードタイプ実行モードを変更する段階と
    を有するオペレーションを実行させるプログラム。
  21. 前記複数の命令は、前記マシンによって実行された場合、前記マシンに、
    32ビットコードモジュールから、32ビットライブラリモジュールを対象とする前記第1の呼び出し手順オペレーションを受け取る段階と、
    前記第2の呼び出し手順オペレーションを64ビットライブラリモジュールへ提供する段階と
    を有するオペレーションを実行させる
    請求項20に記載のプログラム。
  22. 請求項10から15のいずれか1項に記載の方法を実行する手段を備える装置。
  23. 複数の命令を備えるプログラムであって、前記複数の命令は、マシンによって実行された場合、前記マシンに請求項10から15のいずれか1項に記載の方法を実行させるように作動するプログラム。
  24. 第1のアーキテクチャコードモジュールから、第1のアーキテクチャライブラリモジュールを対象とする第1の呼び出し手順オペレーションを受け取る手段と、
    前記第1の呼び出し手順オペレーションを、第2の複数の入力パラメータを有する対応する第2の呼び出し手順オペレーションへ変換すべく、複数のアプリケーションバイナリインタフェース(ABI)変更を行う手順と、
    前記第2の呼び出し手順オペレーションを、第2のアーキテクチャライブラリモジュールへ提供する手段と、
    第1のアーキテクチャコードと実行される第2のアーキテクチャコードとから選択されるコードのタイプを決定し、実行されるコードの前記決定されたタイプと互換性のあるプロセッサのコードタイプ実行モードを変更する手段と
    を備え、
    前記第1の呼び出し手順オペレーションは、第1の複数の入力パラメータを有する
    インターアーキテクチャ互換性装置。
  25. 制御フロー移転受け取りモジュールのラッパーライブラリが第1のアーキテクチャライブラリの前に検索されるように構成される機能インターポジショニングを用いて、第1のアーキテクチャコードモジュールから、第1のアーキテクチャライブラリモジュールを対象とした第1の呼び出し手順オペレーションを受け取る前記制御フロー移転受け取りモジュールであって、前記第1のアーキテクチャライブラリモジュールと同じ名前を有するラッパーモジュールが、前記第1のアーキテクチャライブラリモジュールの前に特定され、前記第1の呼び出し手順オペレーションは第1の複数の入力パラメータを含む、前記制御フロー移転受け取りモジュールと、
    前記制御フロー移転受け取りモジュールに接続されたアプリケーションバイナリインタフェース変更モジュール(ABI変更モジュール)であって、前記ABI変更モジュールは、前記第1の複数の入力パラメータを含む前記第1の呼び出し手順オペレーションを、第2の複数の入力パラメータを含み、第2のアーキテクチャライブラリモジュールと互換性がある対応する第2の呼び出し手順オペレーションへ変換すべく、複数のABI変更を行う、前記ABI変更モジュールと、
    前記ABI変更モジュールに接続され、前記第2の呼び出し手順オペレーションを前記第2のアーキテクチャライブラリモジュールへ提供する制御フロー移転出力モジュールと、
    第1のアーキテクチャコードと実行される第2のアーキテクチャコードとから選択されるコードのタイプを決定するプロセッサモード変更モジュールであって、前記プロセッサモード変更モジュールは、実行されるコードの前記決定されたタイプと互換性のあるプロセッサのコードタイプ実行モードを変更する、前記プロセッサモード変更モジュールと、
    を備えるインターアーキテクチャ互換性装置。
  26. 制御フロー移転受け取りモジュールのラッパーライブラリが第1のアーキテクチャライブラリの前に検索されるように構成される機能インターポジショニングを用いて、第1のアーキテクチャコードモジュールから、第1のアーキテクチャライブラリモジュールを対象とした第1の呼び出し手順オペレーションを受け取る前記制御フロー移転受け取りモジュールであって、前記第1のアーキテクチャライブラリモジュールと同じ名前を有するラッパーモジュールが、前記第1のアーキテクチャライブラリモジュールの前に特定され、前記第1の呼び出し手順オペレーションは第1の複数の入力パラメータを含む、前記制御フロー移転受け取りモジュールと、
    前記制御フロー移転受け取りモジュールに接続されたアプリケーションバイナリインタフェース変更モジュール(ABI変更モジュール)であって、前記ABI変更モジュールは、前記第1の複数の入力パラメータを含む前記第1の呼び出し手順オペレーションを、第2の複数の入力パラメータを含み、第2のアーキテクチャライブラリモジュールと互換性がある対応する第2の呼び出し手順オペレーションへ変換すべく、複数のABI変更を行う、前記ABI変更モジュールと、
    前記ABI変更モジュールに接続され、前記第2の呼び出し手順オペレーションを前記第2のアーキテクチャライブラリモジュールへ提供する制御フロー移転出力モジュールと、
    を備えるインターアーキテクチャ互換性装置。
JP2015005697A 2014-03-28 2015-01-15 一方のアーキテクチャのコードモジュールが他方のアーキテクチャのライブラリモジュールを用いることを可能にするインターアーキテクチャ互換性モジュール Expired - Fee Related JP6124463B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/229,795 US10120663B2 (en) 2014-03-28 2014-03-28 Inter-architecture compatability module to allow code module of one architecture to use library module of another architecture
US14/229,795 2014-03-28

Publications (2)

Publication Number Publication Date
JP2015191657A JP2015191657A (ja) 2015-11-02
JP6124463B2 true JP6124463B2 (ja) 2017-05-10

Family

ID=52630760

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015005697A Expired - Fee Related JP6124463B2 (ja) 2014-03-28 2015-01-15 一方のアーキテクチャのコードモジュールが他方のアーキテクチャのライブラリモジュールを用いることを可能にするインターアーキテクチャ互換性モジュール

Country Status (7)

Country Link
US (1) US10120663B2 (ja)
JP (1) JP6124463B2 (ja)
KR (1) KR101817397B1 (ja)
CN (1) CN104951296B (ja)
DE (1) DE102015002582A1 (ja)
GB (1) GB2524616B (ja)
TW (1) TWI567646B (ja)

Families Citing this family (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9851987B2 (en) * 2012-03-22 2017-12-26 Intel Corporation Nested emulation and dynamic linking environment
US9958932B2 (en) * 2014-11-20 2018-05-01 Apple Inc. Processor including multiple dissimilar processor cores that implement different portions of instruction set architecture
US9477490B2 (en) * 2015-01-05 2016-10-25 Dell Software Inc. Milestone based dynamic multiple watchdog timeouts and early failure detection
US9778945B2 (en) * 2015-02-10 2017-10-03 Red Hat Israel, Ltd. Providing mode-dependent virtual machine function code
US11403099B2 (en) * 2015-07-27 2022-08-02 Sony Interactive Entertainment LLC Backward compatibility by restriction of hardware resources
US9928115B2 (en) 2015-09-03 2018-03-27 Apple Inc. Hardware migration between dissimilar cores
WO2017052555A1 (en) * 2015-09-24 2017-03-30 Hewlett Packard Enterprise Development Lp Process and thread launch features
US10452409B2 (en) * 2015-10-23 2019-10-22 Oracle International Corporation Universal adapter for native calling
US9753776B2 (en) * 2015-12-01 2017-09-05 International Business Machines Corporation Simultaneous multithreading resource sharing
US10284592B1 (en) 2015-12-17 2019-05-07 Architecture Technology Corporation Application randomization mechanism
US10200401B1 (en) * 2015-12-17 2019-02-05 Architecture Technology Corporation Evaluating results of multiple virtual machines that use application randomization mechanism
US10412114B1 (en) 2015-12-17 2019-09-10 Architecture Technology Corporation Application randomization mechanism
US10007498B2 (en) 2015-12-17 2018-06-26 Architecture Technology Corporation Application randomization mechanism
US10412116B1 (en) 2015-12-17 2019-09-10 Architecture Technology Corporation Mechanism for concealing application and operation system identity
US10853118B2 (en) * 2015-12-21 2020-12-01 Intel Corporation Apparatus and method for pattern-driven page table shadowing for graphics virtualization
US10261921B2 (en) * 2016-02-19 2019-04-16 Rajnarine Brigmohan Universal secure platform virtualization system and method thereof
US10303488B2 (en) * 2016-03-30 2019-05-28 Sony Interactive Entertainment Inc. Real-time adjustment of application-specific operating parameters for backwards compatibility
US10853040B2 (en) 2017-03-31 2020-12-01 Microsoft Technology Licensing, Llc Address space splitting for legacy application compatibility
CN107423084B (zh) * 2017-04-24 2021-02-02 武汉斗鱼网络科技有限公司 程序修改方法及装置
US10554685B1 (en) 2017-05-25 2020-02-04 Architecture Technology Corporation Self-healing architecture for resilient computing services
US11275587B2 (en) * 2018-05-02 2022-03-15 Micron Technology, Inc. Static identifications in object-based memory access
US10761855B2 (en) 2018-05-02 2020-09-01 Micron Technology, Inc. Securing conditional speculative instruction execution
US10977101B2 (en) 2018-12-12 2021-04-13 International Business Machines Corporation Interoperability between programs associated with different addressing modes
US11249760B2 (en) 2019-04-10 2022-02-15 International Business Machines Corporation Parameter management between programs
EP3748440B1 (en) * 2019-06-03 2023-11-08 ABB Schweiz AG Workflow of an apparatus
CN112083934A (zh) * 2019-06-13 2020-12-15 青岛海信移动通信技术股份有限公司 一种终端和处理方法
CN111026452B (zh) * 2019-11-20 2023-10-20 北京明朝万达科技股份有限公司 一种远程32位进程注入64位进程的方法及系统
CN111142969A (zh) * 2019-12-27 2020-05-12 贵阳动视云科技有限公司 64位程序调用32位程序模块的方法、装置、介质及设备
US11294695B2 (en) * 2020-05-28 2022-04-05 International Business Machines Corporation Termination of programs associated with different addressing modes
CN113760338B (zh) * 2020-06-05 2023-07-18 北京字跳网络技术有限公司 切换应用程序二进制接口abi的方法、装置及电子设备
US11403100B2 (en) * 2020-08-31 2022-08-02 Microsoft Technology Licensing, Llc Dual architecture function pointers having consistent reference addresses
US11231918B1 (en) 2020-08-31 2022-01-25 Microsoft Technologly Licensing, LLC Native emulation compatible application binary interface for supporting emulation of foreign code
CN112486570B (zh) * 2020-11-06 2023-06-02 麒麟软件有限公司 一种不同类型CPU的Glibc兼容方法
EP4053722B1 (en) 2021-03-01 2023-11-29 Irdeto B.V. Secured computer code and systems, methods, and storage media for creating the secured computer code from original computer code
US12014198B2 (en) 2021-03-25 2024-06-18 International Business Machines Corporation Running smaller memory-address width program code in a larger memory-address width address space
CN113076263A (zh) * 2021-05-06 2021-07-06 北京字节跳动网络技术有限公司 一种进程运行的方法、装置、计算机设备及存储介质
US11947993B2 (en) 2021-06-22 2024-04-02 International Business Machines Corporation Cooperative input/output of address modes for interoperating programs
US11556356B1 (en) 2021-09-23 2023-01-17 International Business Machines Corporation Dynamic link objects across different addressing modes
CN114510267B (zh) * 2022-04-20 2023-03-21 麒麟软件有限公司 基于Linux系统的程序ABI接口兼容性计算方法
US12028224B1 (en) 2023-02-17 2024-07-02 International Business Machines Corporation Converting an architecture document to infrastructure as code

Family Cites Families (47)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5604885A (en) 1991-02-01 1997-02-18 Texas Instruments Incorporated Apparatus and method enabling a computer to transfer control between two program segments that call one another but operate in different modes
US5379432A (en) * 1993-07-19 1995-01-03 Taligent, Inc. Object-oriented interface for a procedural operating system
US5473777A (en) * 1993-07-19 1995-12-05 Moeller; Christopher P. Wrapper for enabling an object otented application to maintain virtual memory using procedural function calls
US6438621B1 (en) 1994-11-14 2002-08-20 Microsoft Corporation In-memory modification of computer programs
US5870587A (en) 1996-03-20 1999-02-09 International Business Machines Corporation Information-handling system, method, and article of manufacture including a mechanism for providing an improved application binary interface
US5845107A (en) 1996-07-03 1998-12-01 Intel Corporation Signaling protocol conversion between a processor and a high-performance system bus
US8065504B2 (en) * 1999-01-28 2011-11-22 Ati International Srl Using on-chip and off-chip look-up tables indexed by instruction address to control instruction execution in a processor
US8127121B2 (en) 1999-01-28 2012-02-28 Ati Technologies Ulc Apparatus for executing programs for a first computer architechture on a computer of a second architechture
JP3762867B2 (ja) * 1999-01-29 2006-04-05 富士通株式会社 コンパイラ装置、コンパイル方法、およびそのためのプログラムを格納した記憶媒体
US6715063B1 (en) 2000-01-14 2004-03-30 Advanced Micro Devices, Inc. Call gate expansion for 64 bit addressing
US6662361B1 (en) 2000-01-14 2003-12-09 International Business Machines Corporation Method, system, program, and data structures for transforming an instruction in a first bit architecture to an instruction in a second bit architecture
US6725366B1 (en) * 2000-09-07 2004-04-20 International Business Machines, Corporation System and method for 32 bit code branching to 64 bit targets
US7406681B1 (en) * 2000-10-12 2008-07-29 Sun Microsystems, Inc. Automatic conversion of source code from 32-bit to 64-bit
GB0026363D0 (en) * 2000-10-27 2000-12-13 Sgs Thomson Microelectronics Bi-endian libraries
US7406682B2 (en) * 2001-03-26 2008-07-29 Emc Corporation Translator-compiler for converting legacy management software
AT411044B (de) 2001-10-16 2003-09-25 Burg Design Gmbh Dekorelement
US7020729B2 (en) 2002-05-16 2006-03-28 Intel Corporation Protocol independent data transmission interface
US7124445B2 (en) * 2002-06-21 2006-10-17 Pace Anti-Piracy, Inc. Protecting software from unauthorized use by converting source code modules to byte codes
US7353502B2 (en) * 2002-07-03 2008-04-01 The Mathworks, Inc. System and method for creation of software components
US8423976B2 (en) 2003-03-13 2013-04-16 Northrop Grumman Corporation Extreme pipeline and optimized reordering technology
GB0316531D0 (en) 2003-07-15 2003-08-20 Transitive Ltd Method and apparatus for performing native binding
US7519951B2 (en) * 2003-09-30 2009-04-14 International Business Machines Corporation Multi-attribute dynamic link library packaging
US20050221813A1 (en) 2004-04-05 2005-10-06 Jarno Rajahalme System and method for initiating auxiliary communication interfaces via a primary communication interface
US7634768B2 (en) * 2005-02-17 2009-12-15 Intel Corporation Methods and apparatus to support mixed-mode execution within a single instruction set architecture process of a virtual machine
US7966624B2 (en) * 2007-08-22 2011-06-21 Intel Corporation Using message passing interface (MPI) profiling interface for emulating different MPI implementations
US8832679B2 (en) * 2007-08-28 2014-09-09 Red Hat, Inc. Registration process for determining compatibility with 32-bit or 64-bit software
US20090144046A1 (en) 2007-09-28 2009-06-04 Rothman Michael A Method to encapsulate an option rom for operation in multiple firmware and platform architectures
US7831813B2 (en) 2007-12-17 2010-11-09 Globalfoundries Inc. Uses of known good code for implementing processor architectural modifications
JP4352086B2 (ja) * 2007-12-21 2009-10-28 株式会社東芝 情報処理装置およびオペレーティングシステム判別方法
US20100077378A1 (en) * 2008-09-25 2010-03-25 International Business Machines Corporation Virtualised Application Libraries
US9189620B2 (en) * 2009-06-30 2015-11-17 Intel Corporation Protecting a software component using a transition point wrapper
US8561183B2 (en) * 2009-07-31 2013-10-15 Google Inc. Native code module security for arm instruction set architectures
US8645936B2 (en) * 2009-09-30 2014-02-04 Zynga Inc. Apparatuses, methods and systems for an a API call abstractor
CA2776913C (en) * 2009-10-08 2017-01-03 Irdeto Canada Corporation A system and method for aggressive self-modification in dynamic function call systems
US9075688B2 (en) * 2010-02-09 2015-07-07 Accenture Global Services Limited Enhanced upgrade path
KR101211673B1 (ko) 2010-12-08 2012-12-12 한국과학기술연구원 사용자 단말에서 다른 시스템 환경을 갖는 외부 단말의 프로그램을 실행하기 위한 바이너리 호환 시스템 및 그 방법
US20120222024A1 (en) * 2011-02-24 2012-08-30 Kushal Das Mechanism for Managing Support Criteria-Based Application Binary Interface/Application Programming Interface Differences
US9891939B2 (en) 2011-03-03 2018-02-13 Microsoft Technology Licensing, Llc Application compatibility with library operating systems
CN103092599A (zh) 2011-11-05 2013-05-08 京瓷办公信息系统株式会社 软件开发套件
CN104137055B (zh) * 2011-12-29 2018-06-05 英特尔公司 点积处理器、方法、系统和指令
KR101691063B1 (ko) * 2012-01-10 2016-12-29 인텔 코포레이션 콜백을 이용하는 isa 브리징
US9063759B2 (en) * 2012-03-28 2015-06-23 International Business Machines Corporation Optimizing subroutine calls based on architecture level of called subroutine
RU2012127581A (ru) * 2012-07-02 2014-01-10 ЭлЭсАй Корпорейшн Генератор исходного кода для разработки и тестирования программного обеспечения для многопроцессорных сред
WO2014022980A1 (en) 2012-08-08 2014-02-13 Intel Corporation Isa bridging including support for call to overidding virtual functions
US20140282371A1 (en) * 2013-03-14 2014-09-18 Media Direct, Inc. Systems and methods for creating or updating an application using a pre-existing application
WO2014172710A1 (en) 2013-04-19 2014-10-23 The Trustees Of Columbia University In The City Of New York Methods, systems, and media for binary compatibility
US9424420B2 (en) * 2013-08-02 2016-08-23 Red Hat, Inc. Restricting application binary interfaces

Also Published As

Publication number Publication date
KR101817397B1 (ko) 2018-01-11
US20150277867A1 (en) 2015-10-01
GB2524616B (en) 2018-05-09
GB2524616A (en) 2015-09-30
KR20150112778A (ko) 2015-10-07
CN104951296B (zh) 2019-02-15
US10120663B2 (en) 2018-11-06
JP2015191657A (ja) 2015-11-02
TWI567646B (zh) 2017-01-21
DE102015002582A1 (de) 2015-10-01
CN104951296A (zh) 2015-09-30
GB201500818D0 (en) 2015-03-04
TW201545058A (zh) 2015-12-01

Similar Documents

Publication Publication Date Title
JP6124463B2 (ja) 一方のアーキテクチャのコードモジュールが他方のアーキテクチャのライブラリモジュールを用いることを可能にするインターアーキテクチャ互換性モジュール
US11656899B2 (en) Virtualization of process address space identifiers for scalable virtualization of input/output devices
EP3274816B1 (en) User-level fork and join processors, methods, systems, and instructions
US10153012B2 (en) Multiple register memory access instructions, processors, methods, and systems
US20150007196A1 (en) Processors having heterogeneous cores with different instructions and/or architecural features that are presented to software as homogeneous virtual cores
JP5985526B2 (ja) システムコールのためのロバスト且つ高性能な命令
CN110659129A (zh) 用于数据表示之间的一致、加速的转换的装置和方法
TW201741867A (zh) 記憶體複製指令、處理器、方法及系統
EP3709159B1 (en) Processing vectorized guest physical address translation instructions
US10761979B2 (en) Bit check processors, methods, systems, and instructions to check a bit with an indicated check bit value
US11269782B2 (en) Address space identifier management in complex input/output virtualization environments
TW201734766A (zh) 使用處理器指令前綴的二進制轉譯支援

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160129

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160223

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20160523

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20160722

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160823

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20161025

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170125

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170307

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170403

R150 Certificate of patent or registration of utility model

Ref document number: 6124463

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees