(57)【要約】  バイトアドレシング可能なメモリのインデックス付けされたアドレシングにとって有用なマイクロプロセッサ回路は、命令によって指定される、ワード長のインデックスレジスタ、ベースアドレスレジスタ、および目的レジスタ（Ｒｉ、Ｒｂ、Ｒｄ）を含む。その命令は、さらに、インデックスレジスタ（Ｒｉ）内においてパックされ、抽出されるべき１つのバイト（ｔ、ｕ、ｌ、ｂ）を特定する。マルチプレクサ（１５）は、インデックスレジスタのすべてのバイトにアクセスするワード幅の入力端を有し、バイト選択制御（＜PART＞）に応答して、指定されたバイトを自身の出力（１７）に渡す。この抽出されたバイトは、ゼロ拡張されたアドレスオフセットワード（１９）の特定のビット位置で、直接提供される。オフセットワードは、ベースアドレスへ加えられ（２５）、その合計（ＡＤＤＲ）は、目的レジスタ（Ｒｄ）へロードされる記憶内容（２７）をアドレシングするよう用いられる。
2008542910.tif 000002
【特許請求の範囲】
【請求項１】
命令に応答して、インデックス付けされたアドレシングを用いてメモリにアクセスするためのマイクロプロセッサにおける回路であって、
インデックスレジスタ、ベースアドレスレジスタ、目的レジスタとして特定されるものを含む、ワード長のレジスタの組を含み、インデックスレジスタは、別個に抽出されるパッキングされたバイトを含むよう構成され、前記回路はさらに、
インデックスレジスタに結合され、インデックスレジスタ内においてパッキングされたバイトの各々にアクセスするようにされるワード長の入力端と、バイト長の出力端と、バイト選択情報を受取るための制御入力とを有するマルチプレクサを含み、マルチプレクサは、自身の入力端において受取られたバイトのうちの選択されたものを抽出し、その選択されたバイトのみを自身の出力端へと渡すようにされ、前記回路はさらに、
ベースアドレスレジスタからワード長の内容を受取り、さらに、選択されたバイトを含むオフセットワードを、マルチプレクサの出力端から、オフセットワードの特定のビット位置で、受取るよう結合される加算器を含み、加算器は、アクセスされるべきメモリアドレスとして、受取った内容の出力合計を供給するようにされ、前記メモリアドレスにおけるアクセスされた記憶内容は、目的レジスタへとロード可能である、回路。
【請求項２】
ワード長は、４バイト長であり、マルチプレクサの制御入力は、抽出されるべき、４つのバイトのうちの１つを特定する２ビットの入力である、請求項１に記載の回路。
【請求項３】
マルチプレクサの出力端からの選択されたバイトを含む、オフセットワードの特定のビット位置は、バイトアドレシング可能なメモリにアクセスするのに適した、２ビット左にシフトされたオフセットに対応するビット位置［９：２］である、請求項１に記載の回路。
【請求項４】
マルチプレクサのバイト長の出力端に結合され、選択されたバイトを、自身の特定のビットの場所で、ロードするようにされるワード長の変位レジスタをさらに含み、変位レジスタからの内容の出力は、加算器へ提供されるオフセットワードを形成する、請求項１に記載の回路。
【請求項５】
変位レジスタは、選択されたバイトをロードするようにされる特定のビット位置以外のすべてのビットの場所に、０を格納するようにされる、請求項４に記載の回路。
【請求項６】
加算器は、インデックス付けされたアドレシング専用の別個の構成要素ではなく、マイクロプロセッサにおける中央処理装置の構成要素である、請求項１に記載の回路。
【請求項７】
インデックス付けされたアドレシングを用いてメモリへアクセスするよう、命令に応答して、マイクロプロセッサによって実行される方法であって、
あるワード長のレジスタを、インデックスレジスタ、ベースアドレスレジスタ、および目的レジスタとして特定し、インデックスレジスタ内においてパッキングされ、抽出されるべきバイトを特定するステップと、
特定されたバイトを、マルチプレクサを用いて、インデックスレジスタから抽出し、オフセットワードの特定のビット位置として、特定されたバイトを提供するステップと、
アクセスされるべきメモリアドレスとしての合計を得るよう、ベースアドレスレジスタからのワード長の内容に、オフセットワードを加えるステップと、
前記メモリアドレスにおける記憶内容にアクセスし、アクセスされた記憶内容を目的レジスタへとロードするステップとを含む、方法。
【請求項８】
ワード長は４バイト長であり、マルチプレクサは、インデックスレジスタ内においてパ
ッキングされる４つのバイトのうちのどれがマルチプレクサによって抽出されるのかを特定する２ビットの制御入力である、請求項７に記載の方法。
【請求項９】
特定されたバイトを含む、オフセットワードの特定のビット位置は、ビット位置［９：２］であり、バイトアドレシング可能なメモリにアクセスするのに適した、２ビット左にシフトされたオフセットに対応する、請求項７に記載の方法。
【請求項１０】
オフセットワードは、特定されたバイトを含む特定のビット位置以外のすべてのビット位置において、０を含む、請求項７に記載の方法。
【請求項１１】
インデックスレジスタ、ベースアドレスレジスタ、および目的レジスタ、ならびにインデックスレジスタの特定されたバイトは、すべて、マイクロプロセッサが応答する抽出されたインデックス命令を用いたワードロードによって特定される、請求項７に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
技術分野
この発明は、一般的に、ロードストア（ＲＩＳＣマシン）アーキテクチャおよびメモリ指向（ＣＩＳＣマシン）アーキテクチャの両方を含む、マイクロプロセッサのアーキテクチャにおけるメモリアクセスに関する。この発明は、より特定的には、マイクロプロセッサが、メモリ構造に、特にバイトアドレシング可能メモリに、より効率的にアクセスするのを可能にするインデックスアドレシング方式に関する。
【背景技術】
【０００２】
背景技術
オペランドの一方がバイト値であり、他方のオペランドが既知の定数である２つのオペランドを含む演算は、しばしば、ルックアップテーブルを用いて、計算実行可能である。なぜならば、２５６（＝２8）しかありえないバイト値および対応する結果があるのみであり、そのため、ルックアップテーブルはかなり小さいものとなる。計算上集中的な演算（たとえば、割算、累乗法）では、ルックアップテーブルにアクセスすることのほうが、全部ハードウェアまたはソフトウェアで同じ演算を実行するより、ずっと速くなる傾向がある。もしプロセッサアーキテクチャが、レジスタにインデックス付けされたオフセットを用いてメモリロードをサポートする場合、１つのＲＩＳＣ命令において、ルックアップは簡単に行ない得る。
【０００３】
ワード長（たとえば、３２ビット）がバイト長（８ビット）の倍数であるマシン上では、いくつかの（たとえば、４つ）バイトが、１つのワードへとパッキングされ得る。これにより、メモリが制限されているアプリケーションにおいて、潜在的に貴重なメモリ空間を節約する。このバイトパッキング方式は、プロセッサ自身の内蔵レジスタおよびプロセッサがアクセスするメモリの両方に適用し得る。しかしながら、パッキングされたバイトがテーブルルックアップを行なうために用いられる場合、所望のバイトを抽出するには、通常、連続する余分な命令が実行される必要があり、これにより効率性が低減される。
【０００４】
暗号化および復号化演算は、現在のマイクロプロセッサのアプリケーションにおいて、ますます重要になってきている。暗号化および復号化アルゴリズムは、かなり計算上集中的である場合がある。このようなアルゴリズムは、計算能力が制限される携帯可能なアプリケーションまたは組込式のアプリケーションにおいて、頻繁に用いられる。より普及しているブロック暗号アルゴリズムの中には、ブローフィッシュ、トリプルＤＥＳ、およびRijndaelがある。
【０００５】
これらのアルゴリズムのすべては、現在のマイクロプロセッサ上で実行するには、長い命令シーケンスを必要とする特別なアレイアドレシング演算を用いる。この演算は以下のとおりである。
【０００６】
【数１】
2008542910.tif 000003
【０００７】
パッキングされたルックアップテーブルを含む４つのメモリアクセス演算が、ここでは支配的である。これらの演算の各々によって、３２ビットのワードにおいて、４つのバイトのうちの１つが抽出され、その抽出されたバイトがゼロ拡張され、次いで、それがベースポインタへ加えられる。このインデックス付け演算の結果が、アクセスされるべきメモリアドレスを生み出す。もしこのアレイアクセスがさらに速く行なわれるならば、暗号化および復号化処理の大幅な高速化が達成され得る。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
したがって、これらのアルゴリズムの現在の実施と比べて、暗号化および復号化アプリケーションが、より速く、より大きい電力効率で実行されるように、演算（１）によって示されるメモリアクセスをより効率的にすることが望ましい。
【課題を解決するための手段】
【０００９】
発明の概要
この発明は、命令に応答して、効率的にメモリのアドレシングをし、その結果得られるメモリ位置からレジスタファイルへとデータをロードするためのマイクロプロセッサ回路を記載する。たとえば、単純な「抽出されたインデックスを用いたワードロード」命令によって、この回路に、インデックスレジスタＲｉから、特定されたバイトを抽出させ、この抽出されたバイトがビット位置［９：２］に位置するゼロ拡張されたワードを作り出させる。これは、抽出されたバイトを、その最も右の位置から、２ビット、左へとシフトする効果に対応する。この組合された抽出演算は、その回路の例示的な実施において、インデックスレジスタのバイトの各々を受取るよう結合され、かつバイト選択値によって制御されるマルチプレクサを用いることにより達成されてもよい。このマルチプレクサの出力からの選択されたバイトは、直接（いかなるシフト演算もなしに）、所望のビット位置で、変位レジスタへ（随意であり、そうでなければ、加算器の入力へ直接）ロードされる。その結果得られたワードは、ベースアドレスレジスタＲｂの内容に、その後、メモリアドレスを形成するよう加えられるオフセット値を形成する。そのアドレスの記憶内容は、その後、取出され、目標の目的レジスタＲｄへとロードされる。この命令は、とりわけ、インデックス付けテーブルに有用である。
【発明を実施するための最良の形態】
【００１０】
発明の詳細な説明
図１を参照し、レジスタＲｉ、Ｒｂ、およびＲｄの各々は、（たとえば、３２ビットの）ワード長のレジスタである。この発明にとって特に興味があるのは、インデックスレジスタＲｉからの、特定されたバイトの抽出である。ここに示す例示的な実施例において、インデックスレジスタＲｉは、先頭バイトｔ（ビット３１から２４（含む））、上位バイトｕ（ビット２３から１６（含む））、下位バイトｌ（ビット１５から８（含む））、および末尾バイトｂ（ビット７から０（含む））と名付けられた４つのバイトを含む。インデックスレジスタＲｉのこれらの部分｛ｔ、ｕ、ｌ、ｂ｝は、２ビットのバイト数｛３、２、１、０｝を用いた命令において、識別されてもよい。インデックスレジスタＲｉ、ベースレジスタＲｂ、および目的レジスタＲｄとして、マイクロプロセッサにおいて指定されるハードウェアレジスタのどれかは、レジスタ数、たとえば、｛０、１、…、１５｝を用いる命令において、別個に識別されてもよい。
【００１１】
命令は、抽出され、ゼロ拡張され、ある数のビット分だけ左へ変位させるべきバイトを、Ｒｉから特定してもよい。先行技術のマイクロプロセッサの回路網において、このゼロ拡張されたバイト抽出は、典型的には、抽出および拡張されるべき特定のバイトに依存する量だけ、左および右へと、連続するビットシフトを行うことを含む、異なるステップのシーケンスを用いて行なわれる。たとえば、先頭バイトｔを抽出するよう、インデックス
レジスタＲｉの全ワード長の内容が、一時レジスタへと読込まれ、それから、この一時レジスタにおいて右へ２４ビット分シフトされてもよい。上位バイトｕを抽出するよう、インデックスレジスタＲｉの全内容が、一時レジスタへと読込まれ、左へ８ビットシフトされ、次いで右へ２４ビットシフトされてもよい。下位バイトｌを抽出するよう、インデックスレジスタＲｉの全内容が、一時レジスタへと読込まれ、左へ１６ビットシフトされ、次いで右へ２４ビットシフトされてもよい。末尾バイトｂを抽出するよう、インデックスレジスタＲｉの全内容が、一時レジスタへと読込まれ、左に２４ビットシフトされ、次いで右へ２４ビットシフトされてもよい。一度抽出されると、その結果は再び左へあるビットの量分（たとえば、バイトアドレシング可能メモリへアクセスするためには２ビット分）シフトされ、これによりアドレスオフセットまたは変位を得る。このように、先行技術においては、インデックスレジスタから所望のバイトを抽出し、ロード命令のために、アドレスオフセットまたは変位としてその所望のバイトを使い得る前に、その所望のバイトをワード整列するよう、連続するシフト演算の組を実行する。
【００１２】
この発明において、バイト抽出およびゼロ拡張ユニット１３は、１つのステップで、アドレスオフセット値を直接得る。このユニット１３は、インデックスレジスタＲｉから正しいバイトを抽出するマルチプレクサ１５を含む。マルチプレクサ１５は、インデックスレジスタＲｉの４つのバイトの場所（ｔ、ｕ、ｌ、およびｂ）の各々からのバイト幅入力を有する。マルチプレクサ１５は、さらに、図１において＜part＞と名付けられ、マイクロプロセッサの命令デコーダから受取られ、マルチプレクサ１５にその所望のバイト（ｔ、ｕ、ｌ、またはｂ）を選択させ、それを自身のバイト幅の出力１７に置く２ビットの選択制御入力を有する。
【００１３】
アドレス変位レジスタ１９（随意）は、このマルチプレクサ出力１７を受取ってもよく、この選択されたバイトが、このようなレジスタ１９のビット位置［９：２］に直接ロードされてもよい。これらの特定のビット位置は、選択されたバイトの２ビットの変位を自動的に与えるので、バイトアドレシング可能なメモリへアクセスするための正しいアドレスオフセットを得るのに、別個の２ビットの左シフト演算は必要ではない。レジスタ１９におけるオフセット値のその他すべてのビット位置［３１：１０］および［１：０］は０を含む。これにより、自動的にゼロ拡張を与える。変位レジスタ１９からのワード長出力２１は、バイト抽出およびゼロ拡張ユニット１３のアドレスオフセット出力を形成する。
【００１４】
代替的には、アドレス変位レジスタ１９は、ワード幅オフセット値２１の純粋な概念的なものであってもよく、マルチプレクサ１７からの選択されたバイト（ｔ、ｕ、ｌ、またはｂ）は、直接、加算器２５へ、１つの加算器入力の所望のビット位置［９：２］で入力されてもよい。この加算器入力のその他のビット位置［３１：１０］および［１：０］は、０をロードされ、これにより、ゼロ拡張されたオフセットワード２１が加算器２５へ与えられる。いずれにせよ、シフト演算のシーケンスを用いる必要なく、オフセットワードには、特定のビット位置（ここでは、［９：２］）で、選択されたバイトが備わっている。
【００１５】
このオフセット値２１は、ベースアドレスレジスタＲｂから得られたベースアドレス２３に加えられる。加算器２５からの出力は、メモリ２７からアクセスされるべきメモリアドレスを形成する。そのアドレスにおける内容は、メモリ２７から取出され、目的レジスタＲｄに置かれる。これにより、抽出されたインデックスメモリアクセス演算が終わる、すなわち、
【００１６】
【数２】
2008542910.tif 000004
【００１７】
レジスタにインデックス付けされたオフセットを用いてメモリロードをサポートするためのこの回路網は、頻繁なバイトサイズのテーブルのルックアップを必要とすると考えられるマイクロプロセッサ、たとえば、ブロック暗号アルゴリズムを実施するために特別に適合されたプロセッサにおいて、特に有用である。このようなアルゴリズムは、典型的には、各ラウンドが、並び替え、置換、ラウンドキーとの組合せがある、ある特定のシーケンスを含むような場合、連なるラウンドにおいて、テキストメッセージに作用する。このような暗号演算のいくつかは、ルックアップテーブルを用いると最もよく実施される。この発明によってサポートされる、抽出されたインデックスメモリアクセスは、バイトパッキングされたメモリ構造において、これらテーブルルックアップを効率的に実行することを可能とし、貴重な時間およびメモリ空間の両方を節約する。
【産業上の利用可能性】
【００１８】
この発明は、例示的な実施例に関して記載されたが、当業者は、この発明の範囲内に同様にある、他の関連する実現例を認識するであろう。たとえば、ここで記載した例示的な３２ビット（すなわち、４バイト）のワード以外のワードサイズが用いられてもよい。バイトアドレシングされたメモリに対応するために、上述した例において、［９：２］として与えられた、選択されたバイトがロードされるビット位置は、２とは異なる変位値に対応するよう変更され得る。シフトのマルチステップのシーケンスが避けられるならば、マルチプレクサ以外の選択手段が、実施されてもよい。
【図面の簡単な説明】
【００１９】
【図１】レジスタ、加算器、およびその他のブロックと結合されるバイト抽出およびゼロ拡張ユニットを含む、この発明を実施するための例示的なマイクロプロセッサ回路網（およびアクセスされたメモリ）のブロック図である。
【図１】
2008542910.tif 000005
【国際調査報告】
2008542910.tif 000006
2008542910.tif 000007