(57)【要約】      （修正有）【課題】ロバストなシステムコール命令およびシステムリターン命令を、プロセッサで実行して、要求元とオペレーティングシステムカーネルとの間で制御を移行する。【解決手段】プロセッサは、実行回路と、メモリ内のデータ構造に対するポインタを格納しているレジスタとを有する。実行回路は、要求元から、要求元の第１の特権レベルからオペレーティングシステムカーネルの第２の特権レベルへと制御を移行するためのシステムコール命令を受信する６１１。実行回路は、これに応じて、レジスタが指し示すデータ構造を、要求元とオペレーティングシステムカーネルとの間において、一のアトミック移行で、スワップする６１２。【選択図】図６Ａ
2014182799.tif 000002
【特許請求の範囲】
【請求項１】
メモリ内のデータ構造に対するポインタを格納する複数のレジスタと、
前記複数のレジスタに結合されている実行回路と
を備え、前記実行回路は、
要求元から、前記要求元の第１の特権レベルからオペレーティングシステムカーネルの第２の特権レベルへと制御を移行するためのシステムコール命令を受信し、
前記システムコール命令に応じて、前記複数のレジスタが指し示す前記データ構造を、前記要求元と前記オペレーティングシステムカーネルとの間において、一のアトミック移行で、スワップする装置。
【請求項２】
前記実行回路は、前記オペレーティングシステムカーネルからシステムリターン命令を受信し、前記システムリターン命令に応じて、一のアトミック移行で、前記オペレーティングシステムカーネルから前記要求元へと制御を復元する請求項１に記載の装置。
【請求項３】
前記第１の特権レベルは、前記第２の特権レベルと同一である請求項１または２に記載の装置。
【請求項４】
前記第１の特権レベルは、非スーパーバイザモードであり、前記第２の特権レベルは、スーパーバイザモードである請求項１から３の何れか１項に記載の装置。
【請求項５】
前記実行回路は、前記システムコール命令に応じて、１以上のセグメントレジスタに、正しい値をアトミックにロードする請求項１から４の何れか１項に記載の装置。
【請求項６】
前記実行回路は、前記システムコール命令に応じて、１以上のセグメントレジスタに対してアトミックに有効性チェックを実行する請求項１から５の何れか１項に記載の装置。
【請求項７】
前記実行回路は、前記システムコール命令に応じて、アドレス準拠性についてのカノニカルチェックをアトミックに、前記複数のレジスタのうち１以上にロードされる１以上のターゲットポインタに対して実行する
請求項１から６の何れか１項に記載の装置。
【請求項８】
要求元から、前記要求元の第１の特権レベルからオペレーティングシステムカーネルの第２の特権レベルへと制御を移行するためのシステムコール命令を受信する段階と、
前記システムコール命令に応じて、メモリに格納されていると共にレジスタが指し示すデータ構造を、前記要求元と前記オペレーティングシステムカーネルとの間において、一のアトミック移行で、スワップする段階と
を備える方法。
【請求項９】
前記オペレーティングシステムカーネルからシステムリターン命令を受信する段階と、
前記システムリターン命令に応じて、一のアトミック移行で、前記オペレーティングシステムカーネルから前記要求元へと制御を復元する段階と
をさらに備える請求項８に記載の方法。
【請求項１０】
前記第１の特権レベルは、前記第２の特権レベルと同一である請求項８または９に記載の方法。
【請求項１１】
前記第１の特権レベルは、非スーパーバイザモードであり、前記第２の特権レベルは、スーパーバイザモードである請求項８から１０の何れか１項に記載の方法。
【請求項１２】
１以上のセグメントレジスタに、正しい値をアトミックにロードする段階をさらに備える請求項８から１１の何れか１項に記載の方法。
【請求項１３】
１以上のセグメントレジスタに対してアトミックに有効性チェックを実行する段階をさらに備える請求項８から１２の何れか１項に記載の方法。
【請求項１４】
アドレス準拠性についてのカノニカルチェックをアトミックに、前記レジスタのうち１以上にロードされる１以上のターゲットポインタに対して実行する段階をさらに備える
請求項８から１３の何れか１項に記載の方法。
【請求項１５】
メモリと、
前記メモリに結合されているプロセッサと
を備え、
前記プロセッサは、
メモリ内のデータ構造に対するポインタを格納する複数のレジスタと、
前記複数のレジスタに結合されている実行回路と
を有し、前記実行回路は、
要求元から、前記要求元の第１の特権レベルからオペレーティングシステムカーネルの第２の特権レベルへと制御を移行するためのシステムコール命令を受信し、
前記システムコール命令に応じて、前記複数のレジスタが指し示す前記データ構造を、前記要求元と前記オペレーティングシステムカーネルとの間において、一のアトミック移行で、スワップするシステム。
【請求項１６】
前記実行回路は、前記オペレーティングシステムカーネルからシステムリターン命令を受信し、前記システムリターン命令に応じて、一のアトミック移行で、前記オペレーティングシステムカーネルから前記要求元へと制御を復元する請求項１５に記載のシステム。
【請求項１７】
前記第１の特権レベルは、前記第２の特権レベルと同一である請求項１５または１６に記載のシステム。
【請求項１８】
前記第１の特権レベルは、非スーパーバイザモードであり、前記第２の特権レベルは、スーパーバイザモードである請求項１５から１７の何れか１項に記載のシステム。
【請求項１９】
前記実行回路は、前記システムコール命令に応じて、１以上のセグメントレジスタに、正しい値をアトミックにロードし、１以上のセグメントレジスタに対してアトミックに有効性チェックを実行する請求項１５から１８の何れか１項に記載のシステム。
【請求項２０】
前記実行回路は、前記システムコール命令に応じて、アドレス準拠性についてのカノニカルチェックをアトミックに、前記複数のレジスタのうち１以上にロードされる１以上のターゲットポインタに対して実行する請求項１５から１９の何れか１項に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、処理ロジック、マイクロプロセッサ、および、プロセッサまたは他の処理ロジックによって実行されると、論理演算、算術演算またはその他の機能演算を実行する関連する命令セットアーキテクチャの分野に関する。
【背景技術】
【０００２】
命令セットまたは命令セットアーキテクチャ（ＩＳＡ）は、プログラミングに関するコンピュータアーキテクチャの一部であり、ネイティブデータの種類、命令、レジスタアーキテクチャ、アドレッシングモード、メモリアーキテクチャ、割込処理および例外処理、ならびに、外部入出力（Ｉ／Ｏ）を含むとしてよい。「命令」という用語は本明細書において一般的に、実行するべくプロセッサ（または、命令を（例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて）翻訳し、モーフィングし、エミュレートし、または、変換して、プロセッサが処理すべき１以上の他の命令を生成する命令変換部）に提供される命令であるマクロ命令を意味する。つまり、プロセッサのデコーダがマクロ命令をデコードした結果として得られるマイクロ命令またはマイクロ処理（ｍｉｃｒｏ  ｏｐ）ではない。
【０００３】
ＩＳＡは、マイクロアーキテクチャとは区別される。マイクロアーキテクチャは、命令セットを実装するプロセッサの内部設計である。プロセッサは、マイクロアーキテクチャが異なっても、共通の命令セットを共有することが可能である。例えば、Ｉｎｔｅｌ（登録商標）Ｃｏｒｅ（商標）プロセッサ、および、アドバンスド・マイクロ・デバイシーズ，Ｉｎｃ．（米国カリフォルニア州サニーベール）社製のプロセッサは、ｘ８６命令セットの略同一バージョン（バージョンが新しくなれば、拡張機能が幾つか追加されている）を実装するが、内部設計は異なる。例えば、ＩＳＡの同一レジスタアーキテクチャは、専用物理レジスタ、レジスタリネームメカニズムを用いた１以上の動的割り当て物理レジスタ等を含む公知の技術を用いて、複数の異なるマイクロアーキテクチャで複数の異なる方法で実装され得る。
【０００４】
ＩＳＡは通常、システムコールを作成するべくアプリケーションプログラムについて１以上の命令を提供する。システムコールを用いて、アプリケーションプログラムはオペレーティングシステムカーネルにサービスを要求することができる。サービスは、ハードウェア関連サービス（例えば、ハードディスクへのアクセス）、新しいプロセスの作成および実行、ならびに、総合カーネルサービスとの通信（例えば、スケジューリング）を含む。このように、システムコールは、アプリケーションプログラムと、オペレーティングシステムカーネルとの間のインターフェースとなる。
【０００５】
システムコールは通常、ソフトウェア割込またはトラップで実現される。割込が発生すると、制御がアプリケーションプログラムからオペレーティングシステムカーネルに移行する。一部の既存のアーキテクチャでは、システムコールを作成するべく制御移行命令を提供する。これらの制御移行命令は、アプリケーションプログラムが、割込のオーバーヘッドを発生させることなく、オペレーティングシステムに制御を短時間で移行させるように設計されている。しかし、既存の制御移行命令は、フォールトおよび攻撃に対して脆弱であるという大きな弱みがある。この脆弱性によってソフトウェアのロバスト性が低くなる。例えば、制御スタックを切り替える前に、システムコール中、または、システムリターン中にフォールトが発生すると、オペレーティングシステム内のフォールトハンドラは、システムスタックではなく、ユーザモードスタックで実行されるとしてよい。ユーザモードスタックは、特権が無く、信頼も無い。場合によっては、ユーザモードスタックは悪意あるコードを含んでいることがあり、ユーザモードスタックでの実行はシステムを悪意ある攻撃にさらすことになり得る。
【図面の簡単な説明】
【０００６】
実施形態は、限定ではなく例示を目的として、添付図面に図示している。
【０００７】
【図１】一実施形態に係る制御移行を説明するためのブロック図である。
【０００８】
【図２】一実施形態に係る命令処理装置を示すブロック図である。
【０００９】
【図３】一実施形態に係るレジスタアーキテクチャを示すブロック図である。
【００１０】
【図４Ａ】一実施形態に係るＲＢＳＴＣＡＬＬ命令の第１のバージョンの例を示す図である。
【００１１】
【図４Ｂ】一実施形態に係るＲＢＳＴＲＥＴ命令の第１のバージョンの例を示す図である。
【００１２】
【図５Ａ】一実施形態に係るＲＢＳＴＣＡＬＬ命令の第２のバージョンの例を示す図である。
【００１３】
【図５Ｂ】一実施形態に係るＲＢＳＴＲＥＴ命令の第２のバージョンの例を示す図である。
【００１４】
【図６Ａ】一実施形態に係るＲＢＳＴＣＡＬＬ命令に応じて実行されるべき処理を示すフローチャートである。
【００１５】
【図６Ｂ】一実施形態に係るＲＢＳＴＲＥＴ命令に応じて実行されるべき処理を示すフローチャートである。
【００１６】
【図６Ｃ】一実施形態に係る、ソース命令セットに含まれるバイナリ命令を、ターゲット命令セットに含まれるバイナリ命令に変換するソフトウェア命令変換部の利用を説明するブロック図である。
【００１７】
【図７Ａ】一実施形態に係るインオーダパイプラインおよびアウトオブオーダパイプラインを示すブロック図である。
【００１８】
【図７Ｂ】一実施形態に係るインオーダコアおよびアウトオブオーダコアを示すブロック図である。
【００１９】
【図８Ａ】一実施形態に係るインオーダコアアーキテクチャのより具体的な例を示すブロック図である。
【図８Ｂ】一実施形態に係るインオーダコアアークテクチャのより具体的な例を示すブロック図である。
【００２０】
【図９】一実施形態に係るプロセッサを示すブロック図である。
【００２１】
【図１０】一実施形態に係るシステムを示すブロック図である。
【００２２】
【図１１】一実施形態に係る第２のシステムを示すブロック図である。
【００２３】
【図１２】一実施形態に係る第３のシステムを示すブロック図である。
【００２４】
【図１３】一実施形態に係るシステムオンチップ（ＳｏＣ）を示すブロック図である。
【発明を実施するための形態】
【００２５】
以下の説明では、数多く具体的且つ詳細な内容を記載する。しかし、本明細書に説明する実施形態はこのような具体的且つ詳細な内容を利用することなく実施し得るものと理解されたい。また、公知の回路、構造および技術は、本明細書の理解をあいまいにしないよう、詳細な説明を省略した。
【００２６】
本明細書で説明する実施形態は、移行制御命令群を実現する。各移行制御命令は、１個のアトミック命令でスーパーバイザモードとユーザモードとの間の移行を完了する。従来のシステムコールおよびシステムリターンのメカニズムでは、スーパーバイザモードとユーザモードとの間の移行を完了させるためには命令シーケンスが必要である。この従来の命令シーケンスの途中でフォールトが発生すると、スーパーバイザモードにおいて非スーパーバイザ状態で実行することになる。このようなフォールトが発生すると、通常、システムクラッシュが発生したり、フォールトからの回復が不可能になったり、または、権限昇格攻撃が発生したりする。
【００２７】
本明細書で用いる場合、「スーパーバイザモード」という用語は、「特権モード」、「カーネルモード」または「リング０」とも呼ばれ、「ユーザモード」という用語は、「非特権モード」、「非スーパーバイザモード」または「リング３」とも呼ばれる。さらに、本明細書で用いる場合、ソフトウェアエンティティの「特権レベル」は、リングレベルと同一であり、例えば、リング３のプログラムは特権レベルが３である。以下に挙げる例のうち１以上ではリング０とリング３との間の移行について説明しているが、本明細書で説明する新しい命令は、任意の２つの異なるリングの間の移行、または、同一リング内の複数のプロセス間の移行に適用可能であると考えられたい。
【００２８】
一実施形態によると、新しい命令は「ＲＢＳＴＣＡＬＬ」命令および「ＲＢＳＴＲＥＴ」命令を含む。「ＲＢＳＴ」は「ロバスト」を意味する。ＲＢＳＴＣＡＬＬ命令は、システムコール命令であり、ＲＢＳＴＲＥＴ命令は、システムリターン命令である。これらの新しい命令は、悪意ある攻撃に対してロバストであると共に高性能である。
【００２９】
図１は、「ＲＢＳＴＣＡＬＬ」命令および「ＲＢＳＴＲＥＴ」命令に応じて発生する制御の移行の例を示す図である。ＲＢＳＴＣＡＬＬ命令は、非特権命令であり、リング０、リング１、リング２またはリング３の要求元プログラム１１０によって呼び出すことができる。プロセッサ（例えば、処理システムに含まれる中央演算処理装置（ＣＰＵ））が要求元プログラム１１０においてＲＢＳＴＣＡＬＬ命令を実行すると、オペレーティングシステム（ＯＳ）カーネル１２０内のコールハンドラ１２５に制御が移行する。コールハンドラ１２５は、リング０において実行される。コールハンドラ１２５がコールの処理を終了すると、プロセッサはＯＳ１２０においてＲＢＳＴＲＥＴ命令を実行して要求元プログラム１１０に制御を戻す。ＲＢＳＴＲＥＴ命令は、特権命令であり、ＯＳ等のリング０ソフトウェアによってのみ呼び出すことが可能である。一実施形態によると、「ＲＢＳＴＣＡＬＬ」命令および「ＲＢＳＴＲＥＴ」命令の実行はネスト化が可能である。例えば、実行は以下の順序で行われるとしてよい。
要求元プログラム１１０→ＲＢＳＴＣＡＬＬ１１１→コールハンドラ１２５→ＲＢＳＴＲＥＴ１２１→要求元プログラム１１０→ＲＢＳＴＣＡＬＬ１１２→コールハンドラ１２５→ＲＢＳＴＲＥＴ１２１→要求元プログラム１１０→ＲＢＳＴＣＡＬＬ１１３→コールハンドラ１２５→ＲＢＳＴＲＥＴ１２１→要求元プログラム１１０
このように、制御が要求元プログラム１１０に戻る度に、次のシステムコールの前に要求元プログラム１１０のコードセグメントを実行することができる。
【００３０】
ＲＢＳＴＣＡＬＬ命令の実施形態は、ＣＳ（コードセレクタ）、ＲＩＰ（命令ポインタ）およびＲＧＬＡＧＳの内容を、割込および例外のスタックフレームと同様の形式を用いて、カーネルスタックに格納する。この形式を利用することで、ネスト化実行におけるリエントラント性を容易に実現できるようになる。
【００３１】
上述したように、ＲＢＳＴＣＡＬＬ命令によれば、リング０から発生するリング内コール、および、リング１、リング２またはリング３から発生するリング間コールの両方が可能となる。同様に、ＲＢＳＴＲＥＴ命令によれば、リング０コードがどのリング（例えば、リング０、リング１、リング２またはリング３）にでも戻れるようになる。ＲＢＳＴＣＡＬＬ命令およびＲＢＳＴＲＥＴ命令はそれぞれ、リング移行の場合にはセグメントレジスタ（例えば、ＧＳ）に正しいセレクタ値を自動的にロードするので、移行完了前にフォールトが発生して、ＧＳにおいて非スーパーバイザ状態でスーパーバイザモードで実行するウィンドウが無くなる。さらに、ターゲットスタックセレクタ（例えば、ＳＳ）および／またはスタックポインタ（例えば、ＲＳＰ）をアトミックに修復することによって、ＲＢＳＴＲＥＴ命令は、カーネルモードフォールトハンドラが無効なＳＳおよび／またはＲＳＰで実行されるウィンドウを無くすことで信頼性を改善する。
【００３２】
ＲＢＳＴＣＡＬＬ命令およびＲＢＳＴＲＥＴ命令の実施形態は、カーネルスタック上のターゲットセレクタ（例えば、ＣＳおよびＳＳ）の有効性に対してサニティーチェックを実行し、さらに、ターゲットＲＩＰおよびＲＳＰにおけるアドレス形式の有効性に対してカノニカル（ｃａｎｏｎｉｃａｌ）チェックを実行する。このため、破損の危険性に対処するべくＯＳを変更する。ＲＩＰにおけるアドレス形式のカノニカルチェックは、ＲＩＰにロードされているアドレスが非カノニカルアドレス範囲に入るか否かを確認することで実行される。この範囲が存在するのは、アーキテクチャが提供するアドレス範囲（例えば、６４ビット）が、利用しているアドレス範囲（例えば、４８ビット）よりも大きいためである。このため、６４ビットアドレス空間の一部領域が未使用である。この未使用領域は、今後のアドレス空間拡張を可能とする。しかし、未使用領域は、非カノニカルアドレス範囲であり、この範囲に入るＲＩＰ内の任意のアドレスは無効アドレスである。カノニカルアドレスチェックは、ＲＩＰにロードされた後、且つ、ＲＩＰ内のアドレスがコミットされる前に実行され得る。カノニカルアドレスチェックは、マルウェアが利用し得るＲＩＰにおけるアドレス形式の脆弱性を無くす。一部の実施形態によると、カノニカルアドレスチェックは、他のレジスタにも同様に実行され得る。
【００３３】
一部の実施形態によると、ＲＢＳＴＣＡＬＬ命令およびＲＢＳＴＲＥＴ命令は、アドレスおよびセグメントの有効性確認の大半を無くし、リング移行についての仮定、例えば、ターゲットリングは０であるという仮定を作成することによって、高速バージョンに最適化され得る。例えば、高速バージョンは、モデル固有レジスタ（ＭＳＲ）における値の有効性を確認しない。これは、ＭＳＲはＯＳカーネルによってのみロードが可能であるためである。高速バージョンは、制御移行の利点の大半を、大幅に低いコストで、実現する。
【００３４】
ＲＢＳＴＣＡＬＬ命令およびＲＢＳＴＲＥＴ命令の他のバージョンと同様に、高速バージョンは、ＧＳは自動的に正しいセレクタ値がロードされるというアトミックな特徴を維持するので、移行完了前にフォールトが発生して非スーパーバイザモードのＧＳでスーパーバイザモードを実行することになるウィンドウが無くなる。ＲＢＳＴＣＡＬＬ命令およびＲＢＳＴＲＥＴ命令の他のバージョンと同様に、高速バージョンは、マルウェアが利用し得るカノニカルなＲＩＰ関連の脆弱性が無くなる。さらに、ＲＢＳＴＲＥＴ命令の他のバージョンと同様に、高速バージョンは、ターゲットＳＳおよび／またはＲＳＰをアトミックに復元し、カーネルモードフォールトハンドラが無効なＳＳおよび／またはＲＳＰで実行され得るウィンドウを無くすことによって信頼性を改善する。ＲＢＳＴＣＡＬＬ命令およびＲＢＳＴＲＥＴ命令は、後述するように、命令処理装置によって実行され得る。
【００３５】
図２は、ＲＢＳＴＣＡＬＬ命令／ＲＢＳＴＲＥＴ命令を含む命令を実行可能な回路を含む実行ユニット２４０を有する命令処理装置２１５の実施形態を示すブロック図である。一部の実施形態によると、命令処理装置２１５は、プロセッサ、マルチコアプロセッサの一のプロセッサコア、または、電子システムのプロセッシングエレメントであってよい。
【００３６】
デコーダ２３０は、高位の機械命令またはマクロ命令の形式で入力命令を受信し、デコードして、低位のマイクロ処理、マイクロコードエントリポイント、マイクロ命令またはその他の低位の命令または制御信号を生成する。これらは、元の高位の命令を反映し、および／または、元の高位の命令から導出される。低位の命令または制御信号は、低位の（例えば、回路レベルまたはハードウェアレベル）の処理を用いて、高位の命令の動作を実現するとしてよい。デコーダ２３０は、さまざまな異なるメカニズムを利用して実現されるとしてよい。適切なメカニズムの例には、これらに限定されないが、マイクロコード、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、関連技術分野で公知のデコーダを実現するために用いられる他のメカニズム等が含まれる。
【００３７】
デコーダ２３０は、キャッシュ２１０、メモリ２２０または他のソースのための入力命令を受信するとしてよい。デコードされた命令は、実行ユニット２４０に送信される。実行ユニット２４０は、デコーダ２３０から、受信した命令を反映した、または、受信した命令から導出された１以上のマイクロ処理、マイクロコードエントリポイント、マイクロ命令、他の命令、または、他の制御信号を受信するとしてよい。実行ユニット２４０は、レジスタファイル２７０、キャッシュ２１０および／またはメモリ２２０からデータ入力を受け取り、レジスタファイル２７０、キャッシュ２１０および／またはメモリ２２０へのデータ出力を生成する。
【００３８】
一実施形態によると、レジスタファイル２７０は、レジスタとも呼ばれるアーキテクチャレジスタを含む。特に明記されていない場合、「アーキテクチャレジスタ」、「レジスタファイル」および「レジスタ」という用語は、ソフトウェアおよび／またはプログラマに可視の（例えば、ソフトウェア可視の）レジスタ、および／または、オペランドを特定するべくマクロ命令が特定するレジスタを意味するべく本明細書で用いられる。これらのレジスタは、所定のマイクロアーキテクチャにおける他の非アーキテクチャレジスタ（例えば、一時レジスタ、リオーダバッファ、リタイアメントレジスタ等）と対照的なレジスタである。
【００３９】
説明が曖昧にならないように、比較的単純な命令処理装置２１５を図示および説明する。他の実施形態は複数の実行ユニットを備え得ると考えられたい。例えば、装置２１５は、複数の異なる種類の実行ユニットを備えるとしてよい。例えば、算術演算ユニット、算術論理演算ユニット（ＡＬＵ）、整数ユニット、浮動小数点ユニット等を備えるとしてよい。命令処理装置またはプロセッサのさらに他の実施形態は、複数のコア、論理プロセッサまたは実行エンジンを備えるとしてよい。命令処理装置２１５の複数の実施形態は、図７Ａから図１３を参照しつつ後述する。
【００４０】
一実施形態によると、レジスタファイル２７０は、ＲＢＳＴＣＡＬＬ命令およびＲＢＳＴＲＥＴ命令が利用し得るレジスタ群を有する。一部のレジスタは、セグメントおよび命令に対するポインタを含むシステムステートを格納するために用いられ得る。レジスタファイルの一例は、図３を参照しつつ後述する。
【００４１】
図３は、本明細書で説明した命令をサポートする基礎であるレジスタアーキテクチャ３００の実施形態を示す図である。レジスタアーキテクチャ３００は、ｘ８６、ＭＭＸ（商標）、ストリーミングＳＩＭＤ拡張命令（ＳＳＥ）、ＳＳＥ２、ＳＳＥ３、ＳＳＥ４．１およびＳＳＥ４．２に準拠する命令を含む命令セット、および、アドバンスド・ベクトル・エクステンション（ＡＶＸ）（ＡＶＸ１、ＡＶＸ２およびＡＶＸ３）と呼ばれる追加の一群のＳＩＭＤ拡張命令を実装するＩｎｔｅｌ（登録商標）Ｃｏｒｅ（商標）のプロセッサに基づいている。しかし、複数の異なるレジスタ長、複数の異なるレジスタ種類および／または複数の異なるレジスタ数をサポートする複数の異なるレジスタアーキテクチャを利用し得ることを理解されたい。
【００４２】
図示した実施形態では、５１２ビット長である３２個のベクトルレジスタ３１０が設けられている。これらのレジスタは、ｚｍｍ０からｚｍｍ３１と呼ばれる。下位の１６個のｚｍｍレジスタの下位の２５６ビットは、レジスタｙｍｍ０−１６に重ねられる。下位の１６個のｚｍｍレジスタの下位の１２８ビット（ｙｍｍレジスタの下位の１２８ビット）は、レジスタｘｍｍ０−１５に重ねられる。図示した実施形態では、８個のマスクレジスタ３２０（ｋ０からｋ７）が設けられており、長さはそれぞれ６４ビットである。別の実施形態では、マスクレジスタ３２０はビット長が１６である。
【００４３】
図示した実施形態では、レジスタアーキテクチャ３００はさらに、１６個の６４ビット汎用（ＧＰ）レジスタ３３０を有する。ある実施形態によると、これらのＧＰレジスタ３３０は、メモリオペランドをアドレス指定するべく、既存のｘ８６アドレッシングモードで利用される。レジスタアーキテクチャ３００はさらに、６個の１６ビットセグメントレジスタを有する（ＣＳはコードセレクタ、ＤＳはデータセレクタ、ＳＳはセグメントセレクタ、ＥＳはその他、ＦＳおよびＧＳ）。当該実施形態はさらに、ＲＦＬＡＧＳレジスタ３６０、ＲＩＰレジスタ３７０、および、モデル固有レジスタ（ＭＳＲ）３８０を含む。
【００４４】
当該実施形態はさらに、スカラー浮動小数点（ＦＰ）スタックレジスタファイル（ｘ８７スタック）３４０を図示している。スカラーＦＰスタックレジスタファイル（ｘ８７スタック）３４０上では、ＭＭＸパック整数フラットレジスタファイル３５０がエイリアスしている。図示した実施形態では、ｘ８７スタックは、ｘ８７命令セット拡張機能を用いて３２／６４／８０ビットの浮動小数点データに対してスカラー浮動小数点演算を実行するために用いられる８個の要素から成るスタックである。一方、ＭＭＸレジスタは、６４ビットパック整数データに対して演算を実行するために、そして、ＭＭＸレジスタとｘｍｍレジスタとの間で実行される一部の演算についてオペランドを保持するために用いられる。
【００４５】
別の実施形態で利用するレジスタは、ビット長がより長くてもよいし、より短くてもよい。また、別の実施形態が利用するレジスタファイルおよびレジスタは、より多くても、より少なくても、または、異なるとしてもよい。
【００４６】
図４Ａは、一実施形態に係るＲＢＳＴＣＡＬＬ命令の第１のバージョンの一例を示す図である。ＲＢＳＴＣＡＬＬ命令は、要求元からＯＳカーネルへと制御を移行させる。一実施形態によると、ＲＢＳＴＣＡＬＬ命令は、コールが有効でイネーブルされているか否かを確認するためのコードブロック４１０を含む。有効でないか、または、イネーブルされていない場合、フォールト（例えば、一般保護（＃ＧＰフォールト）または無効オペコード（＃ＵＤフォールト））を生成する。例えば、要求元が６４ビットのコードセグメントでない場合、または、６４ビットのモードがイネーブルされていない場合、または、ＲＢＳＴＣＡＬＬ命令およびＲＢＳＴＲＥＴ命令がイネーブルされていない場合、フォールトを生成するとしてよい。一実施形態によると、ＲＢＳＴＣＡＬＬ命令およびＲＢＳＴＲＥＴ命令は、複数のレジスタのうち一のレジスタのビットが設定されている場合、イネーブルされている。
【００４７】
ＲＢＳＴＣＡＬＬ命令は、（リング内コールについて）特権レベルがゼロである要求元、または、（リング間コールについて）特権レベルがゼロでない要求元によって呼び出すことができる。リング内コールおよびリング間コールの両方について、ＲＢＳＴＣＡＬＬ命令を実行しているプロセッサは、コードブロック４２０および４３０においてアドレス準拠性を（例えば、ＲＩＰ非カノニカルアドレスについて）検証する。一実施形態によると、ＲＢＳＴＣＡＬＬ命令を実行するプロセッサはさらに、コードブロック４３０において、セグメントレジスタＣＳおよびＳＳが有効なアドレスを含むか否かを検証する。ＲＢＳＴＣＡＬＬ命令はさらに、ＯＳカーネルと要求元との間で制御スタックスワップの処理を実行するべく、（リング内コールおよびリング間コールのそれぞれについて）コードブロック４２５および４３５を含む。本明細書において「制御スタック」は、実行の経過を辿るためにオペレーティングシステムが利用するデータ構造を意味する。これらのデータ構造は、メモリに格納されており、ポインタＲＩＰおよびＲＳＰ、ならびに、セグメントレジスタＣＳ、ＳＳ、ＧＳによって指し示される。リング０データ構造（例えば、ＯＳカーネルに対応付けられている制御スタック）は、リング３データ構造（例えば、ユーザモードプログラムに対応付けられている制御スタック）と異なるので、レガシーＳＹＳＣＡＬＬ／ＳＹＳＲＥＴ命令の直後に別のＳＷＡＰＧＳ命令を利用することが必要になる。ＲＢＳＴＣＡＬＬ命令（ＲＢＳＴＲＥＴ命令も同様）は、ＯＳカーネルと要求元との間においてデータ構造を参照するポインタをスワップするために別の命令を必要としない。スワップ処理は、一のアトミック命令として、ＲＢＳＴＣＡＬＬ／ＲＢＳＴＲＥＴにおいて実行される。リング間コールについて、コードブロック４３５は、ＧＳに正しいコードセレクタ値をロードする。このため、ＲＢＳＴＣＡＬＬ命令において、制御移行は、一のアトミック命令における検証および制御スタックスワップで実現されることが分かる。
【００４８】
図４Ｂは、一実施形態に係るＲＢＳＴＲＥＴ命令の第１のバージョンの例を示す図である。ＲＢＳＴＲＥＴ命令は、ＯＳカーネルから要求元（つまり、ＲＢＳＴＣＡＬＬの要求元）へと制御を戻すことによって、ＲＢＳＴＣＡＬＬ命令の処理を逆に行うための命令である。ＲＢＳＴＲＥＴ命令は、特権命令であり、つまり、リング０からのみ呼び出すことができる。本実施形態では、ＲＢＳＴＲＥＴ命令は、コールが有効でイネーブルされているか否かを確認するためのコードブロック４４０を含む。有効でないか、または、イネーブルされていない場合、フォールトを生成する（図４Ａのコードブロック４１０と同様）。ＲＢＳＴＲＥＴ命令を実行するプロセッサは、コードブロック４５０において、（例えば、ＲＩＰおよびＲＳＰの非カノニカルアドレス形式に対して）アドレス準拠性を検証する。一部の実施形態によると、ＲＢＳＴＲＥＴ命令を実行しているプロセッサはさらに、コードブロック４５０において、セグメントレジスタＣＳおよびＳＳが有効なアドレスを含むか否かを検証する。ＲＢＳＴＲＥＴ命令はさらに、ＯＳカーネルと要求元との間における制御スタックスワップの処理を実行するためのコードブロック４６０および４７０を含む。コードブロック４７０は、要求元の特権レベルがゼロでない場合（つまり、リング間コールについて）に実行される。ＧＳには、正しいコードセレクタ値がロードされている。このように、ＲＢＳＴＲＥＴ命令においては、一のアトミック命令における検証およびソフトウェアスタックスワップで制御移行が実行されることが分かる。
【００４９】
図５Ａおよび図５Ｂはそれぞれ、一実施形態に係るＲＢＳＴＣＡＬＬ命令およびＲＢＳＴＲＥＴ命令の第２のバージョンの例を示す図である。ＲＢＳＴＣＡＬＬ命令およびＲＢＳＴＲＥＴ命令の第２のバージョンは、第１のバージョンで実行されている検証の一部（例えば、アドレス有効性検証およびセグメント有効性検証の大半）を削除した高速バージョンである。高速バージョンはさらに、リング移行について仮定を立てる（例えば、ターゲットリングがリング０であり、ＣＳにロードされているコードセレクタは有効なコードセグメントである等）。さらに、高速バージョンでは、汎用レジスタＲＣＸ、Ｒ１０、Ｒ１１を出力レジスタとして用いると仮定される。これらのレジスタにおいて出力を保存することで、命令の実行が改善され、既存のマイクロコードの一部をシステムコール用に利用することが可能となる。高速バージョンでは、正しい値がセグメントレジスタＧＳ、ＣＳおよびＳＳにロードされる。高速バージョンのＲＢＳＴＣＡＬＬ命令およびＲＢＳＴＲＥＴ命令のそれぞれにおいては、一のアトミック命令における検証および制御スタックスワップで制御移行を実現することが分かる。
【００５０】
図６Ａは、一実施形態に係る制御移行命令（例えば、ＲＢＳＴＣＡＬＬ命令）を実行するための方法６００を示すブロックフローチャートである。方法６００は、プロセッサが要求元から、要求元の第１の特権レベルからＯＳカーネルの第２の特権レベルへと制御を移行させるシステムコール命令を受信することで開始される（ブロック６１１）。システムコール命令に応じて、プロセッサは、要求元とＯＳカーネルとの間で、一のアトミック移行で、レジスタのうち１以上が指し示すデータ構造をスワップする（ブロック６１２）。図６Ｂは、一実施形態に係る制御移行命令（例えば、ＲＢＳＴＲＥＴ命令）を実行する方法６１０を示すブロックフローチャートである。方法６１０は、プロセッサがＯＳカーネルから、システムリターン命令を受信することで開始される（ブロック６１３）。システムリターン命令に応じて、プロセッサは、一のアトミック移行において、ＯＳカーネルから要求元へと制御を復元する（ブロック６１４）。
【００５１】
一実施形態によると、第１の特権レベルは、第２の特権レベルと同じである。別の実施形態では、第１の特権レベルは非スーパーバイザモードであり、第２の特権レベルはスーパーバイザモードである。一実施形態によると、プロセッサは、システムコール命令に応じて、１以上のセグメントレジスタに、正しい値をアトミックにロードする。一実施形態によると、プロセッサは、システムコール命令に応じて、１以上のセグメントレジスタに対してアトミックに有効性チェックを実行する。一実施形態によると、プロセッサは、命令に応じて、レジスタのうち１以上にロードすべき１以上のターゲットポインタに対して、アドレス準拠性についてカノニカルチェックをアトミックに実行する。
【００５２】
さまざまな実施形態によると、図６Ａおよび図６Ｂの方法は、汎用プロセッサ、特定用途向けプロセッサ（例えば、グラフィクスプロセッサまたはデジタルシグナルプロセッサ）、または、別の種類のデジタルロジックデバイスまたは命令処理装置によって実行されるとしてよい。一部の実施形態によると、図６Ａおよび図６Ｂの方法は、図２の命令処理装置２１５、または、同様のプロセッサ、装置またはシステム、例えば、図７Ａから図１３に示す実施形態によって実行されるとしてよい。さらに、図２の命令処理装置２１５、図７Ａから図１３に図示したプロセッサ、装置またはシステムは、図６Ａおよび図６Ｂの方法の実施形態と同一、同様または異なる処理および方法の実施形態を実行するとしてよい。
【００５３】
一部の実施形態によると、図２の命令処理装置２１５は、ソース命令セットからターゲット命令セットへと命令を変換する命令変換部と共に動作するとしてよい。例えば、命令変換部は、命令を、コアが処理する１以上の他の命令へと翻訳（例えば、静的バイナリ翻訳、動的コンパイルを含む動的バイナリ翻訳を用いる）、モーフィング、エミュレートまたはその他の方法で変換するとしてよい。命令変換部は、ソフトウェア、ハードウェア、ファームウェアまたはこれらの組み合わせで実現するとしてよい。命令変換部は、オンプロセッサ、オフプロセッサ、または、部分オン部分オフプロセッサであるとしてよい。
【００５４】
図６Ｃは、対照的な一実施形態に係るソフトウェア命令変換部の利用を説明するブロック図である。図示した実施形態において、命令変換部は、ソフトウェア命令変換部である。しかし、これに代えて、命令変換部は、ソフトウェア、ファームウェア、ハードウェアまたはこれらのさまざまな組み合わせで実現するとしてよい。図６Ｃは、高級言語６０２で記述されたプログラムは、少なくとも一のｘ８６命令セットコアを持つプロセッサ６２６でネイティブに実行されるｘ８６バイナリコード６０６を生成するべくｘ８６コンパイラ６０４を用いてコンパイルされ得ることを示す。少なくとも一のｘ８６命令セットコアを持つプロセッサ６２６は、少なくとも一のｘ８６命令セットコアを持つＩｎｔｅｌ（登録商標）プロセッサと実質的に同一の結果を実現するべく、（１）Ｉｎｔｅｌ（登録商標）ｘ８６命令セットコアの命令セットの大部分または（２）少なくとも一のｘ８６命令セットコアを持つＩｎｔｅｌ（登録商標）プロセッサで実行させることを目的としたアプリケーションまたはその他のソフトウェアのオブジェクトコードバージョンを矛盾を発生させることなく実行または処理することによって、少なくとも一のｘ８６命令セットコアを持つＩｎｔｅｌ（登録商標）プロセッサと実質的に同一の機能を実行可能な任意のプロセッサを表す。ｘ８６コンパイラ６０４は、少なくとも一のｘ８６命令セットコア６２６を備えるプロセッサで、追加で連結処理を行いつつ、または、行うことなく、実行され得るｘ８６バイナリコード６０６（例えば、オブジェクトコード）を生成するコンパイラを表す。同様に、図６Ｃは、少なくとも一のｘ８６命令セットコアを持たないプロセッサ６２４（例えば、ＭＩＰＳテクノロジーズ（米国カリフォルニア州サニーベール）社のＭＩＰＳ命令セットを実行し、および／または、ＡＲＭホールディングス（米国カリフォルニア州サニーベール）のＡＲＭ命令セットを実行するコアを持つプロセッサ）でネイティブに実行され得る別の命令セットバイナリコード６２０を生成する別の命令セットコンパイラ６０８を用いて、高級言語６０２で記述したプログラムがコンパイルされることを示す。命令変換部６２２は、ｘ８６バイナリコード６０６を、ｘ８６命令セットコアを持たないプロセッサ６２４でネイティブに実行されるコードに変換するために用いられる。この変換後のコードは、別の命令セットバイナリコード６２０と同一である可能性は低い。これは、この機能を持つ命令変換部の形成は困難なためである。しかし、変換後のコードは、一般的な処理を実行し、別の命令セットの命令で構成される。このように、命令変換部６２２は、エミュレーション、シミュレーションまたは任意のその他のプロセスを用いて、ｘ８６命令セットプロセッサまたはコアを持たないプロセッサまたはその他の電子デバイスに、ｘ８６バイナリコード６０６を実行させるためのソフトウェア、ファームウェア、ハードウェアまたはこれらの組み合わせを表す。
【００５５】
＜コアアーキテクチャの例＞
＜インオーダ方式およびアウトオブオーダ方式のコアを示すブロック図＞
図７Ａは、一実施形態に係る、インオーダパイプラインの例およびレジスタリネームアウトオブオーダ発行／実行パイプラインの例の両方を示すブロック図である。図７Ｂは、一実施形態に係るプロセッサに含まれるインオーダアーキテクチャコアの実施形態例およびレジスタリネームアウトオブオーダ発行／実行アーキテクチャコアの例の両方を示すブロック図である。図７Ａおよび図７Ｂに示す実線で囲まれたボックスは、インオーダパイプラインおよびインオーダコアを示し、任意で追加されている点線で囲まれたボックスは、レジスタリネームアウトオブオーダ発行／実行パイプラインおよびコアを示す。インオーダ方式はアウトオブオーダ方式の一部であると考え、アウトオブオーダ方式を説明する。
【００５６】
図７Ａにおいて、プロセッサパイプライン７００は、フェッチ段７０２、長さデコード段７０４、デコード段７０６、割り当て段７０８、リネーム段７１０、スケジューリング段（ディスパッチ段または発行段とも呼ばれる）７１２、レジスタ読出／メモリ読出段７１４、実行段７１６、ライトバック／メモリ書込段７１８、例外処理段７２２、および、コミット段７２４を含む。
【００５７】
図７Ｂは、実行エンジンユニット７５０に結合されているフロントエンドユニット７３０を含むプロセッサコア７９０を示す図であり、フロントエンドユニット７３０および実行エンジンユニット７５０の両方はメモリユニット７７０に結合されている。コア７９０は、縮小命令セットコンピュータ（ＲＩＳＣ）コア、複合命令セットコンピュータ（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、または、ハイブリッドコアタイプもしくは別のコアタイプであってよい。さらに別の選択肢として、コア７９０は、特定用途向けコア、例えば、ネットワークコアもしくは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィクスプロセッシングユニット（ＧＰＧＰＵ）コア、グラフィクスコア等であってよい。
【００５８】
フロントエンドユニット７３０は、命令キャッシュユニット７３４に結合されている分岐予測ユニット７３２を含む。命令キャッシュユニット７３４は、命令トランスレーションルックアサイドバッファ（ＴＬＢ）７３６に結合されている。命令ＴＬＢ７３６は、命令フェッチユニット７３８に結合されている。命令フェッチユニット７３８は、デコードユニット７４０に結合されている。デコードユニット７４０（またはデコーダ）は、命令をデコードするとしてよく、出力として、一以上のマイクロ処理、マイクロコードエントリポイント、マイクロ命令、他の命令または他の制御信号を生成するとしてよい。これらの出力は、元の命令をデコードしたもの、または、元の命令を反映したもの、または、元の命令から導出したものである。デコードユニット７４０は、さまざまな異なるメカニズムを用いて実現されるとしてよい。適切なメカニズムの例には、これらに限定されないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコードリードオンリーメモリ（ＲＯＭ）等が含まれる。一実施形態によると、コア７９０は、マイクロコードＲＯＭ、または、（例えば、デコードユニット７４０またはフロントエンドユニット７３０に）特定のマクロ命令用のマイクロコードを格納している他の媒体を含む。デコードユニット７４０は、実行エンジンユニット７５０内のリネーム／割り当てユニット７５２に結合されている。
【００５９】
実行エンジンユニット７５０は、リタイヤメントユニット７５４および一群の１以上のスケジューラユニット７５６に結合されているリネーム／割り当てユニット７５２を含む。スケジューラユニット７５６は、任意の数のさまざまなスケジューラを表し、これらは、予約ステーション、中央命令ウィンドウ等を含む。スケジューラユニット７５６は、物理レジスタファイルユニット７５８に結合している。物理レジスタファイルユニット７５８はそれぞれ、１以上の物理レジスタファイルを表す。１以上の物理レジスタファイルはそれぞれ、スカラー整数、スカラー浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、実行すべき次の命令のアドレスである命令ポインタ）等、１以上の異なるデータタイプを格納している。一実施形態によると、物理レジスタファイルユニット７５８は、ベクトルレジスタユニット、書込マスクレジスタユニットおよびスカラーレジスタユニットを含む。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタおよび汎用レジスタを提供するとしてよい。物理レジスタファイルユニット７５８は、リタイヤメントユニット７５４と重複しており、レジスタリネームアウトオブオーダ実行を実現し得るさまざまな方法（例えば、リオーダバッファおよびリタイヤメントレジスタファイルを利用、今後のファイル、履歴バッファおよびリタイヤメントレジスタファイルを利用、レジスタマップおよびレジスタプールを利用等）を示す。リタイヤメントユニット７５４および物理レジスタファイルユニット７５８は、実行クラスタ７６０に結合される。実行クラスタ７６０は、一群の１以上の実行ユニット７６２と、一群の１以上のメモリアクセスユニット７６４とを含む。実行ユニット７６２は、さまざまな処理（例えば、シフト、追加、減算、乗算）を、さまざまな種類のデータ（例えば、スカラー浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して実行するとしてよい。一部の実施形態は特定の機能または機能群に専用の複数の実行ユニットを含み得るが、他の実施形態は、全ての機能を実行する一または複数の実行ユニットのみを含むとしてよい。スケジューラユニット７５６、物理レジスタファイルユニット７５８および実行クラスタ７６０は、複数の可能性もあるものとして図示されている。これは、特定の実施形態は特定の種類のデータ／処理について個別のパイプライン（例えば、スカラー整数パイプライン、スカラー浮動小数点／パック整数／パック浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、および／または、メモリアクセスパイプライン、それぞれは独自のスケジューラユニット、物理レジスタファイルユニットおよび／または実行クラスタを持ち、別箇にメモリアクセスパイプラインを形成する場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット７６４を含む特定の実施形態を実現する）を作成するためである。また、個別のパイプラインが用いられる場合、これらのパイプラインのうち１以上のパイプラインはアウトオブオーダ発行／実行方式であり、残りはインオーダ方式であると理解されたい。
【００６０】
一群のメモリアクセスユニット７６４は、メモリユニット７７０に結合されている。メモリユニット７７０は、レベル２（Ｌ２）キャッシュユニット７７６に結合されているデータキャッシュユニット７７４に結合されているデータＴＬＢユニット７７２を含む。一実施形態例によると、メモリアクセスユニット７６４は、ロードユニット、ストアアドレスユニットおよびストアデータユニットを含むとしてよい。これらのユニットはそれぞれ、メモリユニット７７０内のデータＴＬＢユニット７７２に結合されている。命令キャッシュユニット７３４はさらに、メモリユニット７７０内のレベル２（Ｌ２）キャッシュユニット７７６に結合されている。Ｌ２キャッシュユニット７７６は、キャッシュの１以上の他のレベルに結合されており、最終的にはメインメモリに結合されている。
【００６１】
一例として、例示的なレジスタリネームアウトオブオーダ発行／実行コアアーキテクチャは、以下のようにパイプライン７００を実行するとしてよい。
１）命令フェッチ７３８は、フェッチ段７０２および長さデコード段７０４を実行
２）デコードユニット７４０は、デコード段７０６を実行
３）リネーム／割り当てユニット７５２は、割り当て段７０８およびリネーム段７１０を実行
４）スケジューラユニット７５６は、スケジュール段７１２を実行
５）物理レジスタファイルユニット７５８およびメモリユニット７７０は、レジスタ読出／メモリ読出段７１４を実行、実行クラスタ７６０は、実行段７１６を実行
６）メモリユニット７７０および物理レジスタファイルユニット７５８は、ライトバック／メモリ書込段７１８を実行
７）例外処理段７２２にはさまざまなユニットが関係
８）リタイヤメントユニット７５４および物理レジスタファイルユニット７５８は、コミット段７２４を実行
【００６２】
コア７９０は、本明細書で説明する命令を含む１以上の命令セット（例えば、ｘ８６命令セット（より新しいバージョンで追加された幾つかの拡張機能を含む）、ＭＩＰＳテクノロジーズ（米国カリフォルニア州サニーベール）社のＭＩＰＳ命令セット、ＡＲＭホールディングス（米国カリフォルニア州サニーベール）社のＡＲＭ命令セット（任意でＮＥＯＮ等の追加の拡張機能を含む））をサポートするとしてよい。一実施形態によると、コア７９０は、パックデータ命令セット拡張機能（例えば、ＳＳＥ、ＡＶＸ１、ＡＶＸ２等）をサポートするロジックを含むので、多くのマルチメディアアプリケーションで利用する処理を、パックデータを用いて実行することができる。
【００６３】
コアは、マルチスレッディング（２以上の処理群またはスレッド群を並列に実行）をサポートし得るものであって、さまざまな方法でマルチスレッディングを実現し得ると理解されたい。例えば、タイムスライスマルチスレッディング、同時マルチスレッディング（一の物理コアが、当該物理コアが同時マルチスレッド化している複数のスレッドのそれぞれについて一の論理コアを実現する）、または、これらの組み合わせ（例えば、タイムスライス方式でフェッチおよびデコードして、その後で同時マルチスレッディングを実行、例えば、Ｉｎｔｅｌ（登録商標）社のハイパースレッディング技術）を含む。
【００６４】
レジスタレネームはアウトオブオーダ実行に関連して説明されているが、レジスタリネームはインオーダアーキテクチャでも利用し得ると理解されたい。図示したプロセッサの実施形態はさらに別箇の命令キャッシュユニット７３４／データキャッシュユニット７７４および共有Ｌ２キャッシュユニット７７６を含むが、別の実施形態は、命令およびデータの両方用の一の内部キャッシュ、例えば、レベル１（Ｌ１）内部キャッシュまたは複数のレベルの内部キャッシュを含むとしてよい。一部の実施形態によると、システムは、内部キャッシュと、コアおよび／またはプロセッサの外部にある外部キャッシュとの組み合わせを含むとしてよい。これに代えて、全てのキャッシュは、コアおよび／またはプロセッサの外部にあるとしてよい。
【００６５】
＜インオーダコアアークテクチャの具体例＞
図８Ａおよび図８Ｂは、より具体的な例として、コアがチップ内の複数の論理ブロック（同一および／または異なる種類の他のコアを含む）のうち１つであるインオーダコアアーキテクチャを示すブロック図である。論理ブロックは、用途に応じて、高帯域幅インターコネクトネットワーク（例えば、リングネットワーク）を介して、一部の固定機能ロジック、メモリＩ／Ｏインターフェースおよび他の必要なＩ／Ｏロジックと通信する。
【００６６】
図８Ａは、一実施形態に係る一のプロセッサコアを、当該プロセッサコアがオンダイインターコネクトネットワーク８０２に接続されている様子、および、当該プロセッサコアのレベル２（Ｌ２）キャッシュのローカルサブセット８０４と共に示すブロック図である。一実施形態によると、命令デコーダ８００は、パックデータ命令セット拡張機能を持つｘ８６命令セットをサポートする。Ｌ１キャッシュ８０６は、キャッシュメモリのスカラーユニットおよびベクトルユニットへの低レイテンシアクセスを可能とする。一実施形態では（設計を簡略化するべく）スカラーユニット８０８およびベクトルユニット８１０が別箇のレジスタ群を利用しており（それぞれ、スカラーレジスタ８１２およびベクトルレジスタ８１４）、両者間で転送されるデータはメモリに書き込まれた後にレベル１（Ｌ１）キャッシュ８０６から読み出されるが、別の実施形態は、別の方法（例えば、一のレジスタセットを利用、または、書込および読出を実行することなく２つのレジスタファイル間でのデータ転送を可能とする通信経路を含む）を利用するとしてよい。
【００６７】
Ｌ２キャッシュのローカルサブセット８０４は、プロセッサコア毎に１つずつ複数の別箇のローカルサブセットに分割されているグローバルＬ２キャッシュの一部である。各プロセッサコアは、Ｌ２キャッシュのうち自身のローカルサブセット８０４までの直接アクセス経路を持つ。プロセッサコアが読み出すデータは、当該プロセッサコアのＬ２キャッシュサブセット８０４に格納され、他のプロセッサコアがＬ２キャッシュのうち自身のローカルサブセットに対してアクセスしているのと並列に、短時間でアクセス可能である。プロセッサコアが書き込むデータは、Ｌ２キャッシュのうち自身のサブセット８０４に格納されており、必要であれば、他のサブセットからフラッシュされる。リングネットワークは、共有されているデータについて、一貫性を保証する。リングネットワークは、プロセッサコア、Ｌ２キャッシュおよび他の論理ブロック等のエージェントが互いにチップ内で通信できるよう双方向性である。
【００６８】
図８Ｂは、一実施形態に係る、図８Ａで示したプロセッサコアの一部を示す拡大図である。図８Ｂは、Ｌ１キャッシュ８０６の一部であるＬ１データキャッシュ８０６Ａを示し、さらに、より詳細にベクトルユニット８１０およびベクトルレジスタ８１４を示す。具体的には、ベクトルユニット８１０は、幅が１６のベクトル処理ユニット（ＶＰＵ）（幅が１６のＡＬＵ８２８を参照のこと）である。幅が１６のＶＰＵは、整数命令、単精度浮動小数点命令、および、倍精度浮動小数点命令のうち１以上を実行する。ＶＰＵは、メモリ入力に対する、スウィズルユニット８２０によるレジスタ入力のスウィズル、数値変換ユニット８２２Ａ−Ｂによる数値変換、および、複製ユニット８２４による複製をサポートする。書込マスクレジスタ８２６は、結果として得られるベクトル書込を記述することを可能とする。
【００６９】
＜集積化したメモリコントローラおよびグラフィクスを持つプロセッサ＞
図９は、一実施形態に係る、複数のコアを有し、一の集積化メモリコントローラを有し、および、集積化グラフィクスを有するプロセッサ９００を示すブロック図である。図９において実線で囲まれたボックスは、一のコア９０２Ａ、システムエージェント９１０、一群の１以上のバスコントローラユニット９１６を備えるプロセッサ９００を示し、点線で囲まれたボックスは、任意で追加される、複数のコア９０２Ａ−Ｎ、システムエージェントユニット９１０内の一群の１以上の集積化メモリコントローラユニット９１４、および、特定用途向けロジック９０８を備える別のプロセッサ９００を示す。
【００７０】
このように、プロセッサ９００の複数の異なる実施例は、１）特定用途向けロジック９０８が集積化グラフィクスおよび／または科学（スループット）ロジックであり（１以上のコアを含むとしてよい）、コア９０２Ａ−Ｎは１以上の汎用コア（例えば、汎用インオーダコア、汎用アウトオブオーダコア、これら２つの組み合わせ）であるＣＰＵ、２）コア９０２Ａ−Ｎが、主にグラフィクスおよび／または科学（スループット）を目的とした多数の特定用途向けコアであるコプロセッサ、および３）コア９０２Ａ−Ｎが多数の汎用インオーダコアであるコプロセッサを含むとしてよい。このように、プロセッサ９００は、汎用プロセッサ、コプロセッサまたは特定用途向けプロセッサであってよく、例えば、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ（汎用グラフィクスプロセッシングユニット）、高スループットＭＩＣ（ｍａｎｙ  ｉｎｔｅｇｒａｔｅｄ  ｃｏｒｅ）コプロセッサ（３０個以上のコアを含む）、埋め込みプロセッサ等であってよい。プロセッサは、１以上のチップで実現されるとしてよい。プロセッサ９００は、任意の数の処理技術、例えば、ＢｉＣＭＯＳ、ＣＭＯＳまたはＮＭＯＳを利用し、１以上の基板の一部であってよく、および／または、１以上の基板で実現されるとしてよい。
【００７１】
メモリヒエラルキーは、コア内の１以上のキャッシュレベル、一群または１以上の共有キャッシュユニット９０６、および、一群の集積化されたメモリコントローラユニット９１４に結合されている外部メモリ（不図示）を含む。一群の共有キャッシュユニット９０６は、１以上の中間レベルキャッシュ、例えば、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、または、他のレベルのキャッシュ、ラストレベルキャッシュ（ＬＬＣ）および／またはこれらの組み合わせを含むとしてよい。一実施形態ではリングベースのインターコネクトユニット９１２が、集積化グラフィクスロジック９０８、一群の共有キャッシュユニット９０６、および、システムエージェントユニット９１０／集積化メモリコントローラユニット９１４を相互接続するが、別の実施形態は任意の数の公知の技術を利用してこれらのユニットを相互接続するとしてよい。一実施形態によると、１以上のキャッシュユニット９０６とコア９０２Ａ−Ｎとの間において一貫性が維持される。
【００７２】
一部の実施形態によると、コア９０２Ａ−Ｎのうち１以上は、マルチスレッディングが可能である。システムエージェント９１０は、コア９０２Ａ−Ｎを協調して動作させるコンポーネントを有する。システムエージェントユニット９１０は、例えば、電力制御ユニット（ＰＣＵ）およびディスプレイユニットを有するとしてよい。ＰＣＵは、コア９０２Ａ−Ｎおよび集積化グラフィクスロジック９０８の電力状態を制御するために必要なロジックおよびコンポーネントであってもよいし、そのようなロジックおよびコンポーネントを含むとしてよい。ディスプレイユニットは、１以上の外部に接続されたディスプレイを駆動するためのユニットである。
【００７３】
コア９０２Ａ−Ｎは、アーキテクチャ命令セットに関して同質または異質のいずれであってもよい。つまり、コア９０２Ａ−Ｎのうち２以上は、同一命令セットを実行可能である一方、残りは当該命令セットの一部または別の命令セットのみを実行可能であるとしてよい。
【００７４】
＜コンピュータアーキテクチャの例＞
図１０から図１３は、コンピュータアーキテクチャの一例を示すブロック図である。ラップトップ、デスクトップ、手持ちＰＣ、携帯情報端末（ＰＤＡ）、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、埋め込みプロセッサ、デジタルシグナルプロセッサ（ＤＳＰ）、グラフィクスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、手持ちデバイス、および、さまざまなその他の電子機器について公知の他のシステム設計およびシステム構成もまた適切である。一般的に、プロセッサおよび／または他の実行ロジックを本明細書で開示するように組み込むことが可能な多岐にわたるシステムまたは電子機器は概して適切である。
【００７５】
図１０を参照すると、一実施形態に係るシステム１０００を示すブロック図が図示されている。システム１０００は、コントローラハブ１０２０に結合されている１以上のプロセッサ１０１０、１０１５を含むとしてよい。一実施形態によると、コントローラハブ１０２０は、グラフィクスメモリコントローラハブ（ＧＭＣＨ）１０９０および入出力ハブ（ＩＯＨ）１０５０（別のチップ上にあるとしてもよい）を含む。ＧＭＣＨ１０９０は、メモリ１０４０およびコプロセッサ１０４５が結合されているメモリコントローラおよびグラフィクスコントローラを含む。ＩＯＨ１０５０は、入出力（Ｉ／Ｏ）デバイス１０６０をＧＭＣＨ１０９０に結合する。これに代えて、メモリコントローラおよびグラフィクスコントローラのうち一方または両方は、プロセッサ内に集積化されている（本明細書で説明する）。メモリ１０４０およびコプロセッサ１０４５は、プロセッサ１０１０に直接結合されており、ＩＯＨ１０５０を含む一のチップ内のコントローラハブ１０２０に直接結合されている。
【００７６】
任意で設けられる追加のプロセッサ１０１５は、図１０において点線で示している。各プロセッサ１０１０、１０１５は、本明細書で説明するプロセッサコアのうち１以上を含むとしてよく、プロセッサ９００の所与のバージョンであってよい。
【００７７】
メモリ１０４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）、または、これら２つの組み合わせであってよい。少なくとも一の実施形態について、コントローラハブ１０２０は、フロントサイドバス（ＦＳＢ）等のマルチドロップバス、ＱｕｉｃｋＰａｔｈ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＱＰＩ）等のポイントツーポイントインターフェース、または、同様の接続１０９５を介して、プロセッサ１０１０、１０１５と通信する。
【００７８】
一実施形態によると、コプロセッサ１０４５は、特定用途向けプロセッサ、例えば、高スループットＭＩＣプロセッサ、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、埋め込みプロセッサ等である。一実施形態によると、コントローラハブ１０２０は、集積化されたグラフィクスアクセラレータを含むとしてよい。
【００７９】
物理リソース１０１０、１０１５は、アーキテクチャ特性、マイクロアーキテクチャ特性、熱的特性、消費電力特性等のさまざまな評価メトリックに関して、さまざまな点で相違しているとしてよい。
【００８０】
一実施形態によると、プロセッサ１０１０は、一般的なタイプのデータ処理動作を制御する命令を実行する。命令には、コプロセッサ命令が埋め込まれているとしてよい。プロセッサ１０１０は、これらのコプロセッサ命令を、付帯しているコプロセッサ１０４５が実行すべき種類の命令であるとみなす。したがって、プロセッサ１０１０は、これらのコプロセッサ命令（または、コプロセッサ命令を表現する制御信号）を、コプロセッサバス上または他のインターコネクト上で、コプロセッサ１０４５に対して発行する。コプロセッサ１０４５は、受け取ったコプロセッサ命令を承認して実行する。
【００８１】
ここで図１１を参照すると、一実施形態に係る第１のより具体的な例であるシステム１１００のブロック図が図示されている。図１１に示すように、マルチプロセッサシステム１１００は、ポイントツーポイントインターコネクトシステムであり、ポイントツーポイントインターコネクト１１５０を介して結合される第１のプロセッサ１１７０および第２のプロセッサ１１８０を含む。プロセッサ１１７０および１１８０はそれぞれ、プロセッサ９００の所与のバージョンであってよい。一実施形態によると、プロセッサ１１７０および１１８０はそれぞれ、プロセッサ１０１０および１０１５であり、コプロセッサ１１３８はコプロセッサ１０４５である。別の実施形態によると、プロセッサ１１７０および１１８０はそれぞれ、プロセッサ１０１０およびコプロセッサ１０４５である。
【００８２】
プロセッサ１１７０および１１８０はそれぞれ、集積化メモリコントローラ（ＩＭＣ）ユニット１１７２および１１８２を含むものとして図示されている。プロセッサ１１７０はさらに、自身のバスコントローラユニットの一部として、ポイントツーポイント（Ｐ−Ｐ）インターフェース１１７６および１１７８を含み、同様に、第２のプロセッサ１１８０は、Ｐ−Ｐインターフェース１１８６および１１８８を含む。プロセッサ１１７０、１１８０は、Ｐ−Ｐインターフェース回路１１７８、１１８８を用いて、ポイントツーポイント（Ｐ−Ｐ）インターフェース１１５０を介して情報をやり取りするとしてよい。図１１に図示しているように、ＩＭＣ１１７２および１１８２は、プロセッサを対応するメモリ、つまり、メモリ１１３２およびメモリ１１３４に結合する。メモリ１１３２およびメモリ１１３４は、対応するプロセッサにローカルに取り付けられているメインメモリの一部分であるとしてよい。
【００８３】
プロセッサ１１７０、１１８０はそれぞれ、ポイントツーポイントインターフェース回路１１７６、１１９４、１１８６、１１９８を用いて、個別のＰ−Ｐインターフェース１１５２、１１５４を介して、チップセット１１９０と情報をやり取りするとしてよい。チップセット１１９０は任意で、高性能インターフェース１１３９を介してコプロセッサ１１３８と情報をやり取りするとしてよい。一実施形態によると、コプロセッサ１１３８は、特定用途向けプロセッサ、例えば、高スループットＭＩＣプロセッサ、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、埋め込みプロセッサ等である。
【００８４】
共有キャッシュ（不図示）は、いずれかのプロセッサに含まれているか、または、両方のプロセッサの外部に存在しているが、Ｐ−Ｐインターコネクトを介して両方のプロセッサに接続されているとしてよい。このため、一方または両方のプロセッサのローカルキャッシュ情報は、プロセッサが低電力モードになると、共有キャッシュに格納されるとしてよい。
【００８５】
チップセット１１９０は、インターフェース１１９６を介して第１のバス１１１６に結合されているとしてよい。一実施形態によると、第１のバス１１１６は、ペリフェラルコンポーネントインターコネクト（ＰＣＩ）バスであってよく、または、ＰＣＩ  Ｅｘｐｒｅｓｓバスまたは別の第３世代のＩ／Ｏインターコネクトバス等のバスであってよい。別の実施形態も利用するとしてよい。
【００８６】
図１１に示すように、さまざまなＩ／Ｏデバイス１１１４は、バスブリッジ１１１８と共に、第１のバス１１１６に結合されているとしてよい。バスブリッジ１１１８は、第１のバス１１１６を第２のバス１１２０に結合する。一実施形態によると、１以上の追加のプロセッサ１１１５、例えば、コプロセッサ、高スループットＭＩＣプロセッサ、ＧＰＧＰＵ、アクセラレータ（例えば、グラフィクスアクセラレータまたはデジタルシグナルプロセッシング（ＤＳＰ）ユニット）、フィールドプログラマブルゲートアレイ、または、任意のその他のプロセッサは、第１のバス１１１６に結合されている。一実施形態によると、第２のバス１１２０は、低ピンカウント（ＬＰＣ）バスであってよい。さまざまなデバイス、一実施形態によると、例えば、キーボードおよび／またはマウス１１２２、通信デバイス１１２７、および、命令／コードおよびデータ１１３０を含むディスクドライブまたはその他の大容量ストレージデバイス等のストレージユニット１１２８が、第２のバス１１２０に結合されているとしてよい。さらに、オーディオＩ／Ｏ１１２４は、第２のバス１１２０に結合されているとしてよい。他のアーキテクチャも可能であることに留意されたい。例えば、図１１のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたはその他の同様のアーキテクチャを実現するとしてよい。
【００８７】
ここで図１２を参照すると、一実施形態に係る、第２のより具体的な例であるシステム１２００を示すブロック図が図示されている。図１１および図１２における同様の構成要素は同様の参照番号を割り当てており、図１１の特定の側面は、図１２から省略している。これは、図１２の他の側面をあいまいにしないようにするためである。
【００８８】
図１２は、プロセッサ１１７０、１１８０がそれぞれ、集積化されたメモリおよびＩ／Ｏ制御ロジック（ＣＬ）１１７２および１１８２を含み得ることを図示している。このように、ＣＬ１１７２、１１８２は、集積化されたメモリコントローラユニットを含み、Ｉ／Ｏ制御ロジックを含む。図１２は、メモリ１１３２、１１３４がＣＬ１１７２、１１８２に結合されているだけでなく、Ｉ／Ｏデバイス１２１４もまた制御ロジック１１７２、１１８２に結合されている様子を図示している。レガシーＩ／Ｏデバイス１２１５は、チップセット１１９０に結合されている。
【００８９】
ここで図１３を参照すると、一実施形態に係るＳｏＣ１３００のブロック図が図示されている。図９における同様の構成要素は、同様の参照番号を割り当てられている。また、点線で囲まれたボックスは、より高度なＳｏＣにおいて任意で設けられる特徴である。図１３において、インターコネクトユニット１３０２は、
一群の１以上のコア９０２Ａ−Ｎおよび共有キャッシュユニット９０６を含むアプリケーションプロセッサ１３１０と、
システムエージェントユニット９１０と、
バスコントローラユニット９１６と、
集積化されたメモリコントローラユニット９１４と、
集積化されたグラフィクスロジック、画像プロセッサ、オーディオプロセッサおよびビデオプロセッサを含む１以上のコプロセッサ１３２０と、
スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット１３３０と、
ダイレクトメモリアクセス（ＤＭＡ）ユニット１３３２と、
１以上の外部ディスプレイに結合されるディスプレイユニット１３４０と
に結合されている。
一実施形態によると、コプロセッサ１３２０は、特定用途向けプロセッサを含む。例えば、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、高スループットＭＩＣプロセッサ、埋め込みプロセッサ等を含む。
【００９０】
本明細書で開示したメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェアまたはこれらの実施方法の組み合わせで実現されるとしてよい。実施形態は、少なくとも一のプロセッサと、ストレージシステム（揮発性および不揮発性のメモリ、および／または、格納素子を含む）と、少なくとも一の入力デバイスと、少なくとも一の出力デバイスとを備えるプログラミング可能システムで実行されるコンピュータプログラムまたはプログラムコードとして実現されるとしてよい。
【００９１】
図１１に図示しているコード１１３０等のプログラムコードは、本明細書で説明した機能を実施するため、そして、出力情報を生成するための命令を入力するべく適用されるとしてよい。出力情報は、公知の方法で１以上の出力デバイスに適用されるとしてよい。本願において、処理システムは、例えば、デジタルシグナルプロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）またはマイクロプロセッサ等のプロセッサを有する任意のシステムを含む。
【００９２】
プログラムコードは、処理システムと通信するべく高級プロシージャプログラミング言語またはオブジェクト指向型プログラミング言語で実現されるとしてよい。プログラムコードはさらに、所望される場合には、アセンブリ言語または機械言語で実現されるとしてもよい。実際、本明細書で説明するメカニズムの範囲は、任意の特定のプログラミング言語に限定されるものではない。どの場合であっても、言語はコンパイラ型またはインタプリタ型であってよい。
【００９３】
少なくとも一の実施形態の１以上の側面は、プロセッサにおいてさまざまなロジックを表現する、機械可読媒体に格納されている代表的な命令によって実現されるとしてよい。当該命令は、機械によって読み出されると、本明細書で説明した技術を実行するロジックを機械に製造させる。このような表現は、「ＩＰコア」として知られており、有形で機械可読型の媒体に格納されているとしてよく、ロジックまたはプロセッサを実際に製造する製造機械にロードするべく、さまざまな顧客または製造設備に供給されるとしてよい。
【００９４】
このような機械可読格納媒体は、これらに限定されないが、機械またはデバイスで製造または形成される、非一時的で有形の物品の配列を含むとしてよい。ハードディスク、任意のその他の種類のディスク、例えば、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスクリードオンリーメモリ（ＣＤ−ＲＯＭ）、コンパクトディスクリライタブル（ＣＤ−ＲＷ）および光磁気ディスク、リードオンリーメモリ（ＲＯＭ）等の半導体デバイス、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）等のランダムアクセスメモリ（ＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、消去可能プログラミング可能リードオンリーメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラミング可能リードオンリーメモリ（ＥＥＰＲＯＭ）、相変化メモリ（ＰＣＭ）、磁気カードもしくは光カード、または、電子命令を格納するのに適した任意のその他の種類の媒体等の格納媒体を含む。
【００９５】
したがって、実施形態はさらに、命令または設計データを含む非一時的で有形の機械可読媒体を含む。設計データは、例えば、本明細書に説明している構造、回路、装置、プロセッサおよび／またはシステムフィーチャを定義するハードウェア記述言語（ＨＤＬ）である。このような実施形態は、プログラム製品とも呼ばれるとしてよい。
【００９６】
特定の実施形態例を説明し添付図面で図示しているが、このような実施形態は単に説明のためであり限定するためのものではなく、図示および説明した特定の構造および配置に限定されるものではないと理解されたい。これは、当業者であれば、本開示内容を参照することで、さまざまな他の変形例に想到するからである。当該技術分野において、成長が早くさらなる進化の予測が容易でないので、開示した実施形態は、本開示の原則または特許請求の範囲から逸脱することなく、技術的進歩を実現することで容易になるが、配置および詳細な内容について容易に変形可能であるとしてよい。
【図１】
2014182799.tif 000003
【図２】
2014182799.tif 000004
【図３】
2014182799.tif 000005
【図４Ａ】
2014182799.tif 000006
【図４Ｂ】
2014182799.tif 000007
【図５Ａ】
2014182799.tif 000008
【図５Ｂ】
2014182799.tif 000009
【図６Ａ】
2014182799.tif 000010
【図６Ｂ】
2014182799.tif 000011
【図６Ｃ】
2014182799.tif 000012
【図７Ａ】
2014182799.tif 000013
【図７Ｂ】
2014182799.tif 000014
【図８Ａ】
2014182799.tif 000015
【図８Ｂ】
2014182799.tif 000016
【図９】
2014182799.tif 000017
【図１０】
2014182799.tif 000018
【図１１】
2014182799.tif 000019
【図１２】
2014182799.tif 000020
【図１３】
2014182799.tif 000021
【外国語明細書】
2014182799000001.pdf