【誤訳訂正書】
【提出日】平成23年1月26日(2011.1.26)
【誤訳訂正１】
【訂正対象書類名】特許請求の範囲
【訂正対象項目名】全文
【訂正方法】変更
【訂正の内容】
【特許請求の範囲】
【請求項１】
組込データセグメント、及び命令セットからの命令を含む命令ストリングの正確なプレデコードを保証する方法であって、前記命令セットは、可変長の命令を有し、前記命令セット内の最短の命令の長さをグラニュールと定義し、前記命令セット内の最長長さの命令を構成するグラニュール数をＭＡＸと定義し、前記方法は、
プログラムが前記命令ストリングにコンパイル又はアセンブルされる場合、第１の組込データセグメントの終わりを判定することと、
前記第１の組込データセグメントの終わりに、長さＭＡＸ−１のパディングを挿入することと
を備える方法。
【請求項２】
前記パディングは、前記命令セット内の何れの命令とも異なるように符号化される請求項１に記載の方法。
【請求項３】
前記パディングは、互いに連結された前記命令セットのうちの複数の命令を含むように符号化される請求項１に記載の方法。
【請求項４】
前記パディングは、テレスコピックに符号化される請求項１に記載の方法。
【請求項５】
最長の命令は３２ビットであり、最短の命令は８ビットであり、その他の命令は２４ビット及び１６ビットであり、パディングは３バイトであり、前記テレスコピックに符号化されたパディングは、２４ビット命令の最初のバイトに見える第１のバイトと、１６ビット命令の最初のバイトに見える第２のバイトと、８ビット命令に見える第３のバイトとを有する請求項４に記載の方法。
【請求項６】
前記組込データセグメントの終わりを判定することは更に、
前記命令ストリング内のその後の命令が、前記組込データセグメントの後に続く場合に、前記組込データセグメントから前記その後の移行を認識することを備える請求項１に記載の方法。
【請求項７】
最短の命令は８ビットである請求項１に記載の方法。
【請求項８】
第２の組込データセグメントの終わりを判定することと、
前記第２の組込データセグメントの終わりに、長さＭＡＸ−１のパディングを挿入することと
を更に備える請求項１に記載の方法。
【請求項９】
最短の命令は１６ビットである請求項１に記載の方法。
【請求項１０】
最長の命令は３２ビットである請求項９に記載の方法。
【請求項１１】
組込データ、及び命令セットからの命令を含む命令ストリングの正確なプレデコードを保証する方法であって、前記命令セットは、可変長の命令を有し、前記命令セット内の最短の長さの命令をグラニュールと定義し、前記方法は、
組込データのグラニュールが、前記命令セット内の命令と似ているように符号化されたかを判定することと、
前記命令ストリングの少なくとも次のＸ−１個のグラニュールを検査することであって、
Ｘは、前記似ている命令のグラニュールのサイズであることと、
組込データから次の命令への移行後のグラニュール数Ｙを決定することと、
前記Ｙが０より大きい場合には、前記移行後、サイズＹからなるパディングを挿入することと
を備える方法。
【請求項１２】
前記パディングは、前記命令セット内のどの命令とも異なるように符号化される請求項１１に記載の方法。
【請求項１３】
前記パディングは、互いに連結された前記命令セットのうちの複数の命令を含むように符号化される請求項１１に記載の方法。
【請求項１４】
前記パディングはテレスコピックに符号化される請求項１１に記載の方法。
【請求項１５】
最短の命令は８ビットである請求項１１に記載の方法。
【請求項１６】
最短の命令は１６ビットである請求項１１に記載の方法。
【請求項１７】
コンピュータ読取可能媒体のコンテンツが、正しいプレデコードを保証するコンピュータ読取可能媒体であって、
組込データと、
前記組込データに隣接しているパディングと、
前記パディングに隣接している可変長命令セットからの１又は複数の連続した命令と
を備え、
前記可変長命令セットにおける最短の命令の長さをグラニュールと定義し、最長の命令の長さＭＡＸが１又は複数のグラニュールの倍数であり、パディングサイズは、ＭＡＸ−１個のグラニュールに等しいコンピュータ読取可能媒体。
【請求項１８】
組込データ、及び命令セットからの命令を含む命令ストリングの正確なプレデコードを保証するコンピュータシステムであって、前記命令セットは、可変長の命令を有し、前記命令セット内の最短の長さの命令をグラニュールと定義し、前記命令セット内の最長の命令を構成するグラニュール数をＭＡＸと定義し、前記コンピュータシステムは、
組込データから連続命令への移行を検出する手段と、
前記組込データの後に、長さＭＡＸ−１のパディングを挿入する手段と
を備えるコンピュータシステム。
【請求項１９】
コンピュータ読取可能媒体のコンテンツが、コンピュータシステムに対して、命令ストリングへのパディング挿入を実行させるコンピュータ読取可能媒体であって、前記命令ストリングは、組込データ、及び可変長命令セットからの命令を含み、前記コンピュータは、プログラムコードをコンパイルするプログラムを有し、前記命令セット内の最短の命令の長さをグラニュールと定義し、
前記命令セット内の最長の命令を構成するグラニュール数をＭＡＸと定義することと、
組込データから連続命令への移行を検出することと、
前記組込データの後に、長さＭＡＸ−１のパディングを挿入することと
からなる各ステップを実行することによって、前記コンテンツが、コンピュータシステムに対して、命令ストリングへのパディング挿入を実行させるコンピュータ読取可能媒体。
【誤訳訂正２】
【訂正対象書類名】明細書
【訂正対象項目名】全文
【訂正方法】変更
【訂正の内容】
【発明の詳細な説明】
【発明の名称】正確なプレデコードを保証する方法及び装置
【技術分野】
【０００１】
本発明は、一般に、様々な長さを有する命令を処理するプロセッサパイプラインにおいて、プレデコード同期誤りを除去することに関し、更に詳しくは、組込データを含む命令ストリングをプレデコードする場合、プレコードエンジンが、可変長命令を命令として正しく認識できるパディングプログラムコードのための有利な技術に関する。
【背景技術】
【０００２】
今日のプロセッサは、一般に、可変長命令を有する命令セットをサポートする。例えば、ＡＲＭ（登録商標）命令セットは、３２ビット長を有する命令、及び、１６ビット長を有する命令からなる。可変長命令をサポートするパイプラインプロセッサは、引き続き行われるデコードステージを簡単にする、すなわち、パイプラインを合理化するために、命令を部分的にデコードするためのプレデコードパイプラインステージを含みうる。一般的なプレデコードパイプラインステージは、コードライン毎ベースで、プログラムコードによってコードラインをプレデコードし、プレデコードされた情報を、コードラインとともにキャッシュに書き込む。プログラム又はオブジェクトコードを生成するために使用されるコンパイラに依存して、プログラムコードは、命令とともに組込データを含みうる。
【０００３】
組込データは、偶然にも、命令、又は命令の一部に似ているように見えるかもしれない。そのような場合、一般に、プレデコードエンジンが、組込データを誤って解釈するであろう。従って、プレデコードエンジンが、１６ビットデータを、３２ビット命令の前半部として誤ってプレデコードする場合、次の１６ビット命令が、３２ビット命令の後半部として解釈され、無効なプレデコード情報がキャッシュ内に格納され、プレデコード処理は、次の命令をプレデコードするための同期からはずれうる。一般に、次のデコードステージまで、同期誤りは認識されないであろう。プレデコード誤りからの復元を試みる場合、そのような同期誤りは、プロセッサ遅延、及び、無駄な電力消費となる。
【０００４】
上記問題に対する従来のアプローチは、プレデコードエンジンを再同期させるための復元メカニズムを提供することを含む。
【発明の開示】
【０００５】
幾つかの局面のうち、本発明の第１の実施形態は、命令ストリームにおける命令として、組込データが偶然に符合化された場合、プレデコードエンジンが再同期する必要を排除する技術に対するニーズが存在することを認識する。ここで、命令ストリームは、組込データ、及び可変長命令セットからの命令を含む。この目的のために、本実施形態は、命令セットにおける最短命令の長さに等しいグラニュールを定義することと、命令セットにおける最長長さの命令を構成するグラニュール数ＭＡＸを定義することとを含む。本実施形態は更に、プログラムが命令ストリングにコンパイル又はアセンブルされる場合、組込データセグメントの終わりを判定することと、長さＭＡＸ−１のパディングを、組込データの終わりに、命令ストリングへ挿入することとを含む。パディングされた命令ストリングを引き続きプレデコードすると、たとえ組込データが、可変長の命令セット内に存在する命令又は命令の一部と偶然に似ている場合であっても、プレデコーダは、有利なことに、パディングされた命令ストリング内の命令との同期を保つ。
【０００６】
本発明のより完全な理解が、本発明の更なる特徴及び利点とともに、以下に示す詳細記述及び添付図面から明らかになるであろう。
【発明を実施するための最良の形態】
【０００７】
本発明は、幾つかの実施形態が示されている添付図面を参照してより完全に説明される。しかしながら、本発明は、様々な形態で具体化することができ、ここに述べられた実施形態に限定されるように解釈されるべきではない。むしろ、これら実施形態は、本開示が十分かつ完全であり、当業者に対して本発明の範囲を十分に伝えることができるように提供されている。
【０００８】
本発明は、方法、システム、あるいはコンピュータプログラム製品として具体化されうることが認識されるだろう。従って、本発明は、ハードウェア実施形態、ソフトウェア実施形態、あるいは、ソフトウェア局面とハードウェア局面とを組み合わせた実施形態の形態を取り得る。更に、本発明は、コンピュータ利用可能な格納媒体に組み込まれたコンピュータ利用可能なプログラムコードを有する媒体におけるコンピュータプログラム製品の形態をとりうる。ハードディスク、ＣＤ−ＲＯＭ、光記憶デバイス、フラッシュメモリ、又は磁気記憶デバイスを含む任意のコンピュータ読取可能媒体が利用されうる。
【０００９】
コンパイルされ、アセンブルされ、その後プレデコード等されうる本発明の教示に従うコンピュータプログラムコードは、先ず、例えばＣ、Ｃ＋＋、ネイティブアセンブラ、ＪＡＶＡ（登録商標）、Ｓｍａｌｌｔａｌｋ、ＪａｖａＳｃｒｉｐｔ（登録商標）、Ｖｉｓｕａｌ  Ｂａｓｉｃ（登録商標）、ＴＳＱＬ、Ｐｅｒｌ、又はその他の様々なプログラム言語で書かれる。プログラムコード又はコンピュータ読取可能媒体は、そのフォーマットがプロセッサによって理解されうるオブジェクトコードのような機械語コードを称する。本発明のソフトウェア実施形態は、特定のプログラム言語を用いた実装に依存しない。
【００１０】
図１は、本発明の実施形態が有利に適用されうる典型的な無線通信システム１００を示す。例示目的のために、図１は、３つの遠隔ユニット１２０，１３０，１５０と２つの基地局１４０を示している。典型的な無線通信システムは、それより多くの遠隔ユニット及び基地局を有しうることが認識されよう。遠隔ユニット１２０，１３０，及び１５０は、それぞれ、プログラムコード１２５Ａ，１２５Ｂ，及び１２５Ｃを実行するハードウェアコンポーネントを含む。プログラムコード１２５Ａ，１２５Ｂ，及び１２５Ｃは、後述するようにして本発明の教示に従って修正されうる。図１は、基地局１４０から遠隔ユニット１２０，１３０，１５０への順方向リンク信号１８０と、遠隔ユニット１２０，１３０，１５０から基地局１４０への逆方向リンク信号１９０とを示す。
【００１１】
図１では、遠隔ユニット１２０は携帯電話として示され、遠隔ユニット１３０はポータブルコンピュータとして示され、遠隔ユニット１５０は無線ローカルループシステムにおける固定位置遠隔ユニットとして示される。例えば、遠隔ユニットは、セル電話、携帯型パーソナル移動通信システム（ＰＣＳ）ユニット、例えばパーソナルデータアシスタントのようなポータブルデータユニット、又は、メータ読取装置のような固定式位置データユニットでありうる。図１は本発明の教示に従う遠隔ユニットを例示しているが、本発明は、これら例示した典型的なユニットに限定されない。本発明は、組込データ、及び可変長命令を含む命令ストリングをプレデコードするためにプレデコードステージ又はエンジンが利用される任意のパイプライン処理環境において適切に利用されうる。
【００１２】
図２は、本発明の実施形態が有利に利用されるプロセッサ複合体２００を示す。プロセッサ複合体２００は、本発明の教示に従って修正されたプログラムコード１２５Ａ〜Ｃを実行し格納するために適切に用いられうる。プロセッサ複合体２００は、中央処理装置（ＣＰＵ）２４０、レベル１データキャッシュ２３０、レベル１命令キャッシュ２２０、レベル２命令データキャッシュ２１０を含んでいる。ＣＰＵ２４０は、レベル１データキャッシュ２３０、レベル１命令キャッシュ２２０、及び、レベル２キャッシュ２１０に結合される。ＣＰＵ２４０は、プレデコードステージ中、プログラムコードをプレデコードし、プレデコードされた情報を、プログラムコードとともにレベル１命令キャッシュ２２０に書き込むか、あるいは、レベル１命令キャッシュが埋まっている場合には、レベル２キャッシュ２１０に書き込む。ＣＰＵ２４０は、階層的方法でキャッシュから命令とデータを検索する。例えば、ＣＰＵ２４０が命令を取得する必要がある場合、ＣＰＵ２４０は、一致を判定するために、レベル１命令キャッシュ２２０にアクセスするだろう。レベル１命令キャッシュ２２０において一致がないのであれば、ＣＰＵ２４０は、レベル２命令及びデータキャッシュ２１０にアクセスするだろう。同様に、ＣＰＵ２４０がデータを取得する必要がある場合、ＣＰＵ２４０は、一致を判定するために、レベル１データキャッシュ２３０にアクセスするだろう。レベル１データキャッシュ２３０に一致がなければ、ＣＰＵ２４０は、レベル２命令及びデータキャッシュ２１０にアクセスするだろう。本発明の実施形態は、図示するプロセッサ複合体２００に制限されず、更に、一例として、任意の縮小命令型コンピュータ（ＲＩＳＣ）プロセッサのようなプレデコードエンジンを利用する任意のプロセッサ複合体にも適用可能である。本発明は、ＲＩＳＣ環境に制限されていないことが認識されるだろう。
【００１３】
図３は、一定長のパッドが挿入される本発明の第１の実施形態に従ったパディングを含む例示的なプログラムセグメント３００を示す。プログラムセグメント３００は、レベル２キャッシュ２１０のようなレベル２キャッシュのキャッシュラインとして、あるいは、プログラムメモリ内に適切に格納されうる。例示目的のために、このプログラムセグメントは、キャッシュラインから検索されると仮定されているが、本発明の教示は、プログラムセグメントが検索されるメモリデバイスに関わらず、プログラムセグメントの処理に適用可能であることが注目されるべきである。一般に、キャッシュラインは、固定長を有するので、命令ストリング又は命令ストリームという用語は、一般に、キャッシュラインの境界に及ぶか、あるいは及ばないかもしれない１又は複数のプログラムセグメントを称する。更に、プログラムセグメント３００は、キャッシュラインの一部を例示しうる。
【００１４】
この例示的なプログラムセグメント３００は、命令３１０、組込データ３２０、及びパディング３３０を含む。命令３１０は、可変長命令セットから来る。可変長命令セットから来るいくつかの典型的な命令が図３に例示されている。この可変長命令セット内の命令は、この例では、１６ビット長、又は３２ビット長の何れかである。例示目的のため、命令が開始され、この命令のサイズを示すキャッシュラインにおけるバイト位置をバイトインジケータ３０５が例示する。例えば、ＬＯＡＤ  ０Ａ命令は、バイト位置００において始まり、バイト位置０３において終了する。従って、ＬＯＡＤ  ０Ａは３２ビットの命令である。同様に、ＡＤＤ命令は、長さ１６ビットであり、ＢＲＡＮＣＨ命令は長さ３２ビットである。プログラムセグメント３００では、組込データバイト３２２，３２４はＢＲＡＮＣＨ命令に従う。パディング３３０におけるパディングバイト３３２，３３４は、本発明の教示に従って、データバイト３２４の後に挿入される。パディングバイト３３４の後にＡＤＤ命令３３６が続く。
【００１５】
組込データ３２０は、即時のデータでなく、一般に、ＬＯＡＤ命令３１２のようなプログラムセグメント内の近くの命令と関連している。組込データの場所は、一般に、標準的なコンパイラの便宜による。一般に、ＡＲＭ（登録商標）コンパイラのような多くの標準コンパイラが、プログラムセグメント内の組込データ３２０を生成する。標準的なコンパイラが、隣接する命令と無関係なデータを埋め込む１つの理由は、近くの命令が、より容易にデータ空間にアクセスすることを可能にすることである。例えば、ロード命令は、データをアドレスする場合、より少ないオフセットビットの使用を可能にするだろう。図３に示すように、ＬＯＡＤ  ０Ａ命令３１２は、オフセット０Ａにおいて始まるデータバイト３２２，３２４をロードする。
【００１６】
本発明の有利な機能を一例によって例示するために、我々は先ず、組込データ３２０が偶然にも３２ビットのＬＯＡＤ命令のうちの最初の２バイトのように見え、パディング３３０が追加されない状況を説明する。この状況では、パイプラインプロセッサのプレデコード動作の間、プレデコーダは、一度に１６ビットをチェックすることによって、キャッシュラインの命令を通じたチェックによりキャッシュラインを処理する。
【００１７】
プレデコーダは、各命令を部分的にデコードし、次に、プレデコードされた情報とともにキャッシュライン全体を、レベル１命令キャッシュ２２０のようなキャッシュに、もしもレベル１キャッシュが満杯であれば、レベル２キャッシュ２１０に書き戻す。一般に、プレデコードされた情報は、次のデコード動作のためにキャッシュライン内のどこで命令が開始するか、命令がロード命令であるか、あるいは格納命令であるか、命令が計算であるか、命令が、大きな命令の前半部であるか後半部であるか、命令が複雑であるか等のような情報を含みうる。ＬＯＡＤ命令の前半部のように見えると我々が考えている組込データ３２０の存在によって、組込データは、プレデコーダによって、ＬＯＡＤ命令の一部として誤って解釈されるだろう。この例では、後のＡＤＤ命令３３６は、ＬＯＡＤ命令の後半部として誤ってプレデコードされるだろう。
【００１８】
図３に示すように、加えられたパディング３３０を用いたプレデコーダの動作に戻ると、プレデコーダは、グラニュール毎ベースで、キャッシュライン３００を進むだろう。グラニュールは、可変長命令セットにおける最短長さの命令のサイズに等しい尺度単位である。この例の場合、命令セットは、１６ビット及び３２ビット長の命令を含んでいる。したがって、１つのグラニュールは１６ビットに等しい。一般に、組込データのサイズは、命令セットのグラニュールの倍数である。プログラムセグメント３００に関し、プレデコーダはまず、ＬＯＡＤ  ０Ａ命令３１２の最初の１６ビットである第１のグラニュールをチェックし、次に、ＬＯＡＤ  ０Ａ命令３１２の次の１６ビットである第２のグラニュールをチェックする。次に、プレデコーダは、次のグラニュールである１６ビットＡＤＤ命令の１６ビットをチェックする。次に、プレデコーダは、ＢＲＡＮＣＨ  ０Ｅ命令の最初の１６ビットであるグラニュールをチェックし、次に、ＢＲＡＮＣＨ  ０Ｅ命令の次の１６ビットである次のグラニュールをチェックする。組込データ３２０は、ＬＯＡＤ命令の最初の１６ビットに見えるので、プレデコーダは、パディング３３０が続く組込データ３２０を、あたかも、３２ビットのＬＯＡＤ命令を構成するかのようにプレデコードする。従って、本発明の教示に従って挿入されたパディングによって、プレデコーダは、有利なことに、キャッシュライン内において、次の命令との同期を保つ。これによって、バイト位置ＯＥにおいて始まるＡＤＤ命令である次のグラニュールをチェックする場合、ＡＤＤ命令を正しく認識する。上述したように、パディングが挿入されないと、プレデコーダは、あたかもＬＯＡＤ命令の残りの１６ビットであるかのように、ＡＤＤ命令３３６をプレデコードする。その結果、プレデコーダは、ＡＤＤ命令３３６を、また、恐らくは、次の命令も同様に、誤ってプレデコードする。
【００１９】
キャッシュラインが一旦プレデコードされると、キャッシュライン及びプレデコード情報が、キャッシュに書き込まれ、次のデコード及び実行動作の準備ができる。組込データ及びパディング３３０を、ＬＯＡＤ命令の残りの１６ビットとしてプレデコードすることによって、プレデコーダが、幾つかの無効なプレデコード情報を生成するかもしれないことに注目されるべきである。そのような無効なプレデコード情報は重要ではない。なぜなら、プログラムの流れに従ってプログラムが実際に動作する場合、プログラムカウンタは、組込データ又は組込パディングを実行するように命令されないからである。例えば、ＢＲＡＮＣＨ  ０Ｅを実行した後、プログラムカウンタは、アドレス０Ｅを指し、次に、ＡＤＤ命令３３６が実行されるようにして、組込データ３２０、パディング３３０、及び関連する無効なプレデコード情報をバイパスする。
【００２０】
図４は、本発明の第１の実施形態に従って、８，１６，２４，及び３２ビットからなる命令サイズを有する可変長命令セットのための３つのパディングバイトを含む例示的なプログラムセグメント４００を示す。プログラムセグメント４００は、レベル２キャッシュ２１０のようなレベル２キャッシュのキャッシュラインの一部、キャッシュライン、又は複数のキャッシュラインとして適切に格納されうる。あるいは、プログラムセグメント４００は、プログラムメモリの幾つかのその他の形式で格納されうる。プログラムセグメントは、命令４１０、組込データ４２０、及びパディング４３０を含む。この例では、命令４１０は、８，１６，２４，又は３２ビット長からなる長さを有する可変長命令セットからなる。可変長命令セットのためのグラニュールサイズは、８ビットすなわち１バイトである。例示目的のため、バイトインジケータ４０５が、キャッシュライン内のバイト位置を例示する。プログラムセグメント４００では、組込データ４２０が、１６ビットのＢＲＡＮＣＨ命令４１４に続く。パディング４３０のパッドバイト４３２，４３４，及び４３６は、本発明の教示に従って、それぞれデータバイト４２６の後のバイト位置０９，０Ａ，０Ｂに挿入された。格納（ＳＴＯＲ）命令４１６である８ビット命令が、パッドバイト４３６の後に続き、バイト位置０Ｃにおいて始まる。乗算（ＭＵＬＴ）命令４１８である２４ビット命令が、次のバイト位置０Ｄにおいて始まる。
【００２１】
この例では、最小の命令が１バイトであるので、グラニュールは１バイトである。プログラムセグメント４００を処理する時、プレデコーダは一度に１つのグラニュールをチェックするだろう。図４乃至６の全てのプログラムセグメント４００，５００，６００それぞれについて、プレデコーダは、同様に、対応するプログラムセグメントの最初の８バイトについて動作する。説明を単純にするために、我々は、図４に関してそれら８バイトの動作を記載する。プレデコーダは、ＬＯＡＤ  ０６命令４１２の最初のグラニュールをチェックし、この最初のグラニュールがＬＯＡＤ命令であることを認識し、ＬＯＡＤ  ０６命令４１２をプレデコードするために、次の３つのグラニュール、すなわち、バイト位置０１〜０３を、キャッシュラインからシーケンシャルにチェックするだろう。その後、プレデコーダは、ＢＲＡＮＣＨ  ０Ｃ命令４１４の第１のグラニュールをチェックし、第１のグラニュールがＢＲＡＮＣＨ  ０Ｃ命令であることを認識し、キャッシュラインからのバイト位置０５である次のグラニュールをシーケンシャルにチェックし、ＢＲＡＮＣＨ  ０Ｃ命令４１４をプレデコードするだろう。データバイト４２２，４２４は、可変長命令セット内の任意の命令から別々に符号化される。従って、プレデコーダは、バイト位置０６においてグラニュールをチェックし、それがデータを含んでいることを認識し、継続するだろう。プレデコーダは、バイト位置０７において、次のグラニュールであるデータバイト４２４をチェックし、データバイト４２４もまたデータを含んでいると正しく認識する。
【００２２】
例えば、図４に示すように、データバイト４２６は、ＬＯＡＤ命令のような３２ビット命令のうちの最初の８ビットに偶然にも似ている。その結果、プレデコーダが、データバイト４２６を、３２ビットのＬＯＡＤ命令の前半部としてプレデコードした後、プレデコーダは、次の３つのグラニュール、すなわちパッドバイト４３２，４３４，４３６を、これら３つのバイトがあたかも、偶然にもＬＯＡＤ命令の残りであるように認識するだろう。パディング４３０によって、次の命令であるＳＴＯＲ命令４１６は、正しくプレデコードされ、もって、キャッシュライン内の命令とプレデコーダとの間の同期を保つだろう。挿入されるパディング４３０がないと、プレデコーダは、ＳＴＯＲ命令４１６及びＭＵＬＴ命令４１８に対応するバイトを、偶然にも、ＬＯＡＤ命令の最後の３バイトに対応するバイトと誤って解釈するであろう。その結果、プレデコーダは、ＳＴＯＲ命令４１６を偶然にもＬＯＡＤ命令の第２バイトとして、ＭＵＬＴ命令４１８の最初の２バイトを偶然にもＬＯＡＤ命令の最後の２バイトとしてプレデコードする。これは、プレデコーダを、キャッシュライン内の命令との同期からはずす。
【００２３】
更なる例として、図４のデータバイト４２６が符号化され、偶然にも、ＭＵＬＴ命令のような２４ビット命令の最初の８ビットに似ている場合、プレデコーダは、次の２つのグラニュールであるパッドバイト４３２，４３４を、あたかも、これら２バイトが、偶然にもＭＵＬＴ命令に属するかのごとくチェックする。そして、プレデコーダは、次のグラニュールであるパッドバイト４３６をチェックする。パッドバイト４３６が８ビット命令として符合化されたか、あるいは、下記に示すように、命令セットとは異なるデータとして符合化された場合、プレコーダは、バイト位置０Ｃにおいて見られる次のグラニュール、すなわちＳＴＯＲ命令４１６をチェックするであろう。この例は、データバイト４２６がどのように誤解釈されたかに関わらず、パディング４３０が、組込データに続く命令の認識の完全性を保つことを例示している。
【００２４】
図５は、可変パッドサイズが適用される本発明の第２の実施形態に従って、８，１６，２４，及び３２ビットからなる命令サイズを有する可変長命令のために、２つのパッドバイトを含む例示的なプログラムセグメント５００を示す。図５は、命令に似ている組込データがプレデコーダによってどのようにして誤解釈されるのかに基づいて、別のサイズのパディングが、プログラムコードにどのようにして挿入されるかを例示している。可変長のパディングを用いることは、有利なことに、プログラムコードサイズを縮小する。プログラムセグメント５００は、命令５１０、データ５２０、及びパディング５３０を含む。プログラムセグメント５００は、プログラムセグメント５００が、パディング５３０内に１少ないパッドバイトを有することを除いてプログラムセグメント４００と同じである。従って、パッドバイト５３４の後の命令は、キャッシュライン内において１バイト位置シフトアップされる。このシフトによって、ＢＲＡＮＣＨ  ０Ｂ命令５１４の目標アドレスは、１バイトデクリメントされる。
【００２５】
図５に図示する例は、データバイト５２６を含む。これは、偶然にも、可変長命令セット内の２４ビット命令のうちの最初の８ビットに似ている。従って、プレデコーダが、データバイト５２６のプレデコードを開始するとき、プレデコーダは、次の２つのグラニュールであるパディングバイト５３２，５３４を、あたかもこれら２つのバイトが、偶然にも、２４ビット命令の残りであるかのようにチェックする。そして、プレデコーダは、プレデコードし、かつ、キャッシュライン内の命令とプレデコーダとの間の同期を保つために、次のグラニュールであるＳＴＯＲ命令５１６をチェックするだろう。図５に示す例では、図４で使用される３バイトのパディングではなく、２バイトのパディングで十分である。
【００２６】
挿入されるパディング５３０がないと、プレデコーダは、ＳＴＯＲ命令５１６及びＭＵＬＴ命令５１８に対応するグラニュールを、偶然にも、２４ビット命令の最後の２バイトに対応するバイトと誤って解釈するであろう。その結果、プレデコーダは、キャッシュラインとの同期からはずれる。従って、組込データの次の命令の認識の完全性が危険にさらされる。
【００２７】
図６は、本発明の第２の実施形態に従って８，１６，２４，及び３２ビットサイズの命令を有する可変長命令セットのために、１つのパッドバイトを含む例示的なプログラムセグメント６００を示す。図６は、プレデコーダによってどのようにしてデータが誤解釈されるかによって、どのようにして１つのパッドバイトがプログラムコードに挿入されるかを例示している。プログラムセグメント６００は、命令６１０、データ６２０、及びパディング６３０を含む。プログラムセグメント６００は、プログラムセグメント６００が、パディング６３０内に１少ないパッドバイトを有することを除いてプログラムセグメント５００と同じである。従って、パッドバイト６３２の後の命令は、キャッシュライン内において１バイト位置シフトアップされる。このシフトによって、ＢＲＡＮＣＨ  ０Ａ命令６１４の目標アドレスは、１バイトデクリメントされる。
【００２８】
図６に図示する例は、データバイト６２６を含む。これは、偶然にも、可変長命令セット内の１６ビット命令のうちの最初の８ビットに似ている。プレデコーダが、データバイト６２６のプレデコードを開始するとき、プレデコーダは、次のグラニュールであるパッドバイト６３２を、あたかもこのバイトが、データバイト６２６によって示される１６ビット命令に属しているかのようにチェックする。そして、プレデコーダは、プレデコードし、かつ、キャッシュライン内の命令とプレデコーダとの間の同期を保つために、次のグラニュールであるＳＴＯＲ命令６１６をチェックするだろう。図６に示す例では、データバイト６３２は、１６ビット命令の最初の８ビットに似ているので、１バイトサイズのパディングが十分だろう。
【００２９】
図５及び図６に関して記述された例で示されているように、組込データの後に挿入されるパディングのサイズは変化しうる。コンピュータ上で実行するソフトウェアコンパイラ又はアセンブラは、高レベルプログラミング言語から図３乃至図６に例示するような組込データ及び命令を有するプログラムコードを生成するので、コンパイラ又はアセンブラは、可変長命令セットから、組込データが命令に似ているときをいつでも認識し、それに従ってパディングを挿入することができる。更に以下に説明するように、固定長又は可変長のパディングを適用することができる。
【００３０】
図７は、本発明の教示に従ってソフトウェア７３０を実行するコンピュータ７１０のブロック図７００である。図示していないが、コンピュータ７１０は、例えばプロセッサ、メモリ、入力／出力デバイスのような内部コンポーネント、及びこれら内部コンポーネント間の通信のためのバスを含む。ソフトウェア７３０は、本発明の教示に従って修正されるコンパイラ又はアセンブラでありうる。ソフトウェア７３０は、コンピュータ７１０のメモリ内に存在する。ソフトウェア７３０は、入力としてプログラム７２０を受け取り、本発明に従って挿入されたパディングを用いてコンパイル又はアセンブルされたプログラムコード７４０を出力として生成する。プログラム７２０は、Ｃ、Ｃ＋＋、ネイティブアセンブラ、ＪＡＶＡ（登録商標）、Ｓｍａｌｌｔａｌｋ、ＪａｖａＳｃｒｉｐｔ（登録商標）、Ｖｉｓｕａｌ  Ｂａｓｉｃ（登録商標）、ＴＳＱＬ、Ｐｅｒｌ、又はその他の様々なプログラム言語で書かれる。プログラム７２０は、例えば、セル電話、携帯型パーソナル移動通信システム（ＰＣＳ）ユニット、コンピュータ、及びポータブルデータユニットに含まるような目標プロセッサにおいて特定の機能を実行するように書かれる一方、プログラムコード７４０は、目標プロセッサ上で実行する。目標プロセッサは、ソフトウェア７３０を実行するコンピュータ７１０と異なるかもしれないし、異ならないかもしれない。
【００３１】
ソフトウェア７３０は、プログラム７２０の構造的なコンテンツを判定し、かつ、プログラム７２０が構文上有効であるかを判定するためにプログラム７２０を解析する手段を含む。この解析手段はまた、プログラム７２０を、内部形式に変換する。ソフトウェア７３０は更に、コード生成のための手段を含む。このコード生成手段は、内部形式を、目標プロセッサによって実行することが可能なオブジェクトコードに変換する。オブジェクトコードは、可変長命令セットからの命令及び組込データを有する１又は複数のプログラムセグメントから成る。ソフトウェア７３０は更に、組込データセグメントの終わりにおいてパディングを挿入する手段を含む。
【００３２】
組込データと後の命令との間に挿入するべきパッドサイズを計算するために、ソフトウェア７３０は、組込データセグメントのコンテンツを分析するオプションの分析手段を含む。組込データセグメントは、命令に囲まれた命令ストリーム内の組込データである。ソフトウェア７３０は更に、オプションの認識手段を含む。プログラム７２０のコンパイル中、認識手段は、組込データセグメント内の何れかのグラニュールが、命令セット内の命令のグラニュールと似ているように符号化されたかを認識する。そう認識すると、挿入手段が、組込データのグラニュールが似ている命令の長さと、次の命令に関する組込データのグラニュールの位置とを考慮して、組込データの後に、多くのパッドグラニュールを挿入する。
【００３３】
あるいは、ソフトウェア７３０は、一定サイズのパディングを挿入するための手段をオプションとして含みうる。この代替アプローチは、有利なことに、組込データ符合化を分析する必要なく、ソフトウェア７３０の複雑さを低減する。この代替実施形態では、ソフトウェア７３０は、組込データセグメントの終わりから命令への移行を検知する手段を含む。そして、挿入手段は、組込データセグメントから命令への遷移が認識されるといつでも、一定数のパッドグラニュールを有するパディングを挿入する。挿入されたパディングの各パッドグラニュールは、１グラニュールの長さを持ち、命令セット内で既に定められた有効な命令を含むように適切に符合化される。あるいは、命令セット内のどの命令にも似ていないコードを有するデータを単に含みうる。代替パディング符号化を、図９を参照して説明する。
【００３４】
プログラムコード７４０内に挿入される一定サイズのパディングを構成するパッドグラニュールの数を決定するために、ソフトウェア７３０は、目標プロセッサによってサポートされる命令セットを構成する様々な長さの命令を利用する。一定サイズのパディングを構成するパディンググラニュールの数は、以下のように書かれうる。  
【数１】
2008535043.tif 000001
【００３５】
これは、  
【数２】
2008535043.tif 000002
【００３６】
のように簡略化される。そして、便宜的に  
【数３】
2008535043.tif 000003
【００３７】
とすると、  
【数４】
2008535043.tif 000004
【００３８】
のように簡略化される。
【００３９】
ここで、Ｐｚはグラニュール単位によるパッドサイズであり、Ｍａｘ（ｉｎｓｔｒｌｅｎ）は、ビット単位による最長命令長さであり、Ｍｉｎ（ｉｎｓｔｒｌｅｎ）は、ビット単位による最短命令長さであり、ＭＡＸは、グラニュール単位による最長命令長さである。例えば、３２ビット命令と１６ビット命令とを有する命令セットの場合、１グラニュールは、最短命令の長さである１６ビットに等しい。グラニュール内のパッド数は、（３２［ビット］／１６［ビット／グラニュール］）−１であろう。これは、１グラニュールすなわち１６ビットに等しい。従って、命令セットから取得した１６ビットの命令を含むパッドは、データから次の命令への移行がある場合にはどこでも挿入される。
【００４０】
別の例として、３２，１６，及び８ビットの命令を有する命令セットでは、１グラニュールは、最短命令である８ビットに等しい。グラニュール単位によるパッド数は、（３２［ビット］／８［ビット／グラニュール］）−１であろう。これは３グラニュールすなわち２４ビットに等しい。従って、その後、２４ビットのパディングが、データから次の命令へ移行する場合にはどこでも挿入される。２４ビットのパッドを構成する他の可能な変形を、図９の説明に関連付けて以下に説明する。可変長パッドの内容を、図１１に関連付けて以下に述べる。
【００４１】
図８は、本発明の実施形態に従って動作するプロセッサパイプライン８００のブロック図である。プロセッサパイプライン８００は、レベル１キャッシュステージからの取得８１０と、レベル２キャッシュからの取得８２０と、プレデコーダ８３０と、書き込みステージ８４０と、命令アライメントステージ８５０と、デコード及び実行ステージ８６０とを含む。
【００４２】
レベル１キャッシュステージからの取得８１０では、アドレスに基づいて、レベル１キャッシュからキャッシュラインが取得される。キャッシュラインは、図３乃至６に例示する典型的なプログラムセグメントに似た１又は複数のプログラムセグメントを含みうる。キャッシュミスがある場合、取得ステージ８２０に示すように、レベル２キャッシュからキャッシュラインが取得され、プレデコーダ８３０に転送される。プレデコーダ８３０は、キャッシュラインにおける命令を構築するグラニュール数を識別する。プレデコーダ８３０は、命令に対する適切なプレデコードを実行するために、このグラニュール数を利用する。この命令のプレデコードを一旦完了すると、結果として得られるプレデコード情報が、バッファ内に一次的に格納され、キャッシュライン内の次の命令がプレデコードされる。キャッシュライン内に、処理するグラニュールがこれ以上ない場合、パイプラインは、書き込みステージ８４０に移る。書き込みステージ８４０では、プレデコードされた情報及びキャッシュラインがレベル１キャッシュに書き込まれる。並行して、プレデコーダ８３０は、キャッシュライン及びプレデコード情報を命令アライメントステージ８５０に伝送する。命令アラインメントステージ８５０では、キャッシュライン内の命令が、整列され、次のデコード及び実行ステージ８６０のために準備される。
【００４３】
プレデコーダ８３０は、命令とは似ていない組込データをプレデコードしないことが注目されるべきである。しかしながら、組込データが命令に似ている場合、組込データ及び潜在的なパディングがプレデコードされうる。上述したように、そのような無効なプレデコード情報は重要ではない。なぜなら、プログラムフローによってプログラムが実際に実行している場合、プログラムカウンタは、組込データ又は組込パディングを実行するように指示されないからである。本発明の実施形態は、図示するパイプライン８００に限定されず、可変長命令セットをプレデコードするプレデコード動作を含むどのパイプラインプロセッサに対しても適用可能である。
【００４４】
図３乃至図６に示すようなプログラムセグメントでは、もしもグラニュールが、命令セット内の命令として認識されないのであれば、プレデコーダは、グラニュール毎ベースで、プログラムセグメント上で動作するだろう。グラニュールが、命令セット内の命令であると認識される場合、命令全体をプレデコードするために、１又は複数の追加のグラニュールがチェックされる。命令セット内の命令に似るようにパディング内容を符号化することによって、プレデコーダは、次の命令に対してより効率的に追跡しうる。
【００４５】
図９は、本発明の実施形態に従って、３２，２４，１６，及び８ビットの命令を有する命令セットに対する一定サイズのパディング９００のためのテレスコピック（telescopic）な符号化アプローチを例示する。上記式（２）に従って、この特定の可変長を持つ命令セットの場合、最大サイズのパッドは３グラニュール又はバイトである。パッド９００は、組込データの終わりにおいて、組込データから次の命令への移行が発見された場合にはいつでも挿入される。このパッド９００は、命令のグラニュールとして認識されないデータからなるかもしれない。あるいは、パッド９００は、命令セットから取得された命令の可変的な組合せから成るかもしれない。例えば、パディングは、３つの８ビットの命令、すなわち、テレスコピックな符号化を含みうる。テレスコピックな符合化は、２４ビット命令の最初のバイトとして認識されるように符号化される第１のバイト９１０と、１６ビット命令の最初のバイトとして認識されるように符号化される第２のバイト９２０と、８ビットの命令として認識されるように符号化される第３のバイト９３０とを含みうる。２４ビットのパッド９００のテレスコピックな符号化によって、プレデコーダ８３０は、組込データを命令として誤ってデコードすることによって、２４ビットパッドのどこでプレデコード動作が終わろうとも、２４ビットのパッド９００の後に、次の命令との同期を取ることができるであろう。
【００４６】
図１０は、本発明の第１の実施形態に従って、プログラムコード７４０のようなプログラムコードに一定サイズのパディングを挿入する方法１０００を例示するフローチャートである。コンピュータ７１０上で動作している上述したソフトウェア７３０は、方法１０００の各ステップを実施しうる。ステップ１０１０では、方法は、パイプラインプロセッサによってサポートされる可変長命令セットの長さを分析し、パディングサイズを決定する。ステップ１０１０では、パディングサイズを決定するために上記式（２）が使用される。ステップ１０１５では、パディング内容が決定される。１つの例は、その長さがパディングサイズに等しい命令セットから、周知の命令のパディングを構成することである。例えば、１６ビット命令と３２ビット命令との両方を有する可変長命令では、パディングサイズは１６ビットである。従って、パディングとして挿入される命令セットから１６ビット命令を選択されたい。別の例では、命令セットから最短の命令を選択し、そして、同じサイズのパディングになるまで何度も連結することによって、パディングを構築されたい。更なる例は、テレスコピックな符号化を考案することであるか、あるいは、もしもそれがあるのであれば、図９に記載するような命令セットからテレスコピックな命令を選択することであろう。別の例では、パディングは、命令セット内の命令とは異なるデータを含みうる。図３に関連して説明するように、組込データ又はパディングのプレデコードから得られるプレデコード情報は重要ではない。なぜなら、プログラムフローは、通常は、組込データ又はパディングが実行されるようにしないだろうからである。あるいは、実行ステージは、実行ステージが組込データ又はパディングの実行を試みるありそうもない状況におけるパディングを認識するように修正されうることが認識されるだろう。
【００４７】
ステップ１０２０では、ソフトウェアコンパイラ又はアセンブラステップの何れかによるプログラムコード生成中、方法は、組込データから次の命令への移行点があるかを判定する。組込データがない場合、方法はステップ１０４０に移る。組込データが存在する場合、方法はステップ１０３０に移る。ステップ１０３０では、組込データから次の命令への移行点においてパディングがプログラムコードに挿入される。ステップ１０４０では、方法は、プログラムコード生成が完了しかたを判定する。完了した場合には、方法１０００は終了し、そこに挿入されたパディングを用いてプログラムコードが生成される。完了していない場合、方法１０００はステップ１０２０に進み、組込データから次の命令への移行点においてパディングを挿入し続ける。方法が完了した時、組込データが命令に似ている場合には、生成されたプログラムは、プレデコーダが、可変長命令を命令として正しく認識できるようにパディングを含むだろう。
【００４８】
図１１は、本発明の第２の実施形態に従って可変サイズのパディングをプログラムコードに挿入する方法１１００を例示するフローチャートである。上述したように、コンピュータ７１０で動作するソフトウェア７３０は、方法１１００のステップを実行しうる。ステップ１１１０では、方法は、可変長命令セットを分析して、グラニュールが、最短の命令サイズと等しいかを判定する。あるいは、方法は、単に、グラニュールサイズを知っているか、あるいは、伝えられる。このステップは、ソフトウェア７３０にコンパイラオプションを設定することとして具体化されうる。これは、ソフトウェア７３０に、命令セット内の最短長さの命令を通知する。あるいは、ソフトウェア７３０は、命令セットから、命令を含むプログラムコードを生成するので、ソフトウェア７３０は、最短長さの命令を知っているかもしれず、このステップは単に、１グラニュールのサイズを決定するために、ソフトウェア７３０の実行中に変数を読み取ることを含む。ステップ１１２０では、プログラムコードの命令ストリームへのコンパイル又はアセンブルの間、方法１１００は、命令ストリーム内の定数のような組込データのグラニュールが、可変長命令セットからの命令と似ているように符号化されたかを判定する。判定結果が偽である場合、方法１１００はステップ１１２５に移る。ステップ１１２５では、方法は、コンパイル又はアセンブリが終了したかを判定する。終了したのであれば方法１１００は終了する。終了していないのであれば、方法１１００は、ステップ１１２０に移ることにより継続する。
【００４９】
ステップ１１２０に戻って、組込データのグラニュールが、命令に似ているように符号化されたのであれば、方法１１００はステップ１１３０に移る。ステップ１１３０では、方法１１００は、命令ストリームの次のＸ−１個のグラニュールを検査する。ここでＸは、似ている命令のグラニュールのサイズである。ステップ１１３５では、方法１１００は、命令に似るように符号化された組込データのグラニュール後から始めて、次のＸ−１個のグラニュールを検討することによって、もしあれば、組込データから次の命令への移行後のグラニュール数Ｎを決定する。
【００５０】
言い換えれば、この決定ステップは、組込データのグラニュールが似ている命令のプレデコードを完了するために、次のプレデコーダがチェックするグラニュールの数を考慮する。例えば、グラニュールが１バイトであり、データのグラニュールが、３２ビットの命令の最初のバイトに似ている場合、組込データから次の命令への移行があるかを判定するために、方法１１００は、命令ストリームから次の３バイトを検査する。
【００５１】
方法１１００は、ステップ１１３８に進み、Ｎがゼロより大きいかが判定される。Ｎがゼロを越えるものでなければ、命令と似ている組込データのグラニュールは、次のプレデコーダについて何の意味も持たないだろう。なぜなら、潜在的なプレデコード誤りによって引き起こされる変位量は、似ている命令を有する組込データ内であるからである。従って、方法はステップ１１２５に移る。Ｎが０を越える場合、方法は、ステップ１１４０に移る。ステップ１１４０では、方法１１００は、組込データから次の命令への移行にパッドを挿入する。挿入されたパッドは、ステップ１１３０で知られた組込データから次の命令への移行を通過したグラニュール数に等しいサイズＮを有する。この方法が終了する場合、生成されたプログラムコードは、プレデコーダが、組込データが命令に似ている場合に、可変長命令を、命令として正しく認識できるようにパディングを含むだろう。
【００５２】
図５は、方法１１００の実例となる結果を示すので、例えば、パディング５３０のない図５を参照する。データバイト５２６が偶然にも２４ビット命令の最初の８ビットに似ており、かつ、１グラニュールが８ビットに等しいことを思い出すと、方法１１００は、データバイト５２６の後、次のＸ−１、すなわち２グラニュールを検査するだろう。最初のグラニュールを検査する際、方法１１００は、８ビットのＳＴＯＲ命令５１６を認識し、組込データから命令への移行が起こったと判定するだろう。次のグラニュールを検査する際、方法１１００は、ＭＵＬＴ命令５１８の最初のバイトを認識するだろう。ＭＵＬＴ命令５１８の最初のバイトは、移行から２グラニュール離れているので、Ｎは２グラニュールに等しい。その結果、図５に示すように、パディング５３０の２つのグラニュールが、移行時に挿入される。コンパイル又はアセンブリが完了する場合、プログラムコードは、異なる長さを有する挿入されたパディングを含みうる。
【００５３】
本発明が実施形態に関して記載されている一方、種々様々な実装が、上記説明、及び特許請求の範囲と一貫して、当業者によって適用されうることが認識されよう。
【図面の簡単な説明】
【００５４】
【図１】図１は、本発明の実施形態が有利に適用されうる典型的な無線通信システムを示す。
【図２】図２は、本発明の実施形態が有利に適用されうるプロセッサ複合体のブロック図である。
【図３】図３は、固定長パッドが使用される本発明の第１の実施形態に従って、１６ビット及び３２ビットサイズの命令を有する可変長命令セットのためのパディングを含む例示的なプログラムセグメントを示す。
【図４】図４は、本発明の第１の実施形態に従って、８，１６，２４及び３２ビットからなる命令サイズを有する可変長命令セットのための３つのパッドバイトを含む例示的なプログラムセグメントを示す。
【図５】図５は、可変長パッドが使用される本発明の第２の実施形態に従って、８，１６，２４及び３２ビットのサイズの命令を有する可変長命令セットのための２つのパッドバイトを含む例示的なプログラムセグメントを示す。
【図６】図６は、本発明の第２の実施形態に従って、８，１６，２４及び３２ビットからなる命令サイズを有する可変長命令セットのための１つのパッドバイトを含む例示的なプログラムセグメントを示す。
【図７】図７は、本発明の教示に従ってソフトウェアを実行するコンピュータのブロック図である。
【図８】図８は、本発明の実施形態に従って動作するプロセッサパイプラインのブロック図である。
【図９】図９は、本発明の実施形態に従った一定サイズのパッドのためのテレスコピック（telescopic）な符号化アプローチを例示する。
【図１０】図１０は、本発明の第１の実施形態に従って一定サイズのパディングをプログラムコードに挿入する方法を例示するフローチャートである。
【図１１】図１１は、本発明の第２の実施形態に従って可変サイズパディングをプログラムコードに挿入する方法を例示するフローチャートである。
【誤訳訂正３】
【訂正対象書類名】図面
【訂正対象項目名】図１０
【訂正方法】変更
【訂正の内容】
【図１０】
2008535043.tif 000005
【誤訳訂正４】
【訂正対象書類名】図面
【訂正対象項目名】図１１
【訂正方法】変更
【訂正の内容】
【図１１】
2008535043.tif 000006