(57)【特許請求の範囲】
【請求項１】
演算のための入力データを格納するレジスタファイルと、
前記レジスタファイルから読み出した第１のレジスタ値を格納する第１レジスタと、
前記レジスタファイルから読み出した第２のレジスタ値を格納する第２レジスタと、
ファネルシフト命令が入力されるのに応じて、第１および第２のレジスタ値を連結し、連結した値をシフトアマントレジスタ内に格納されたシフト量だけビット単位でシフトする実行ユニットとを具備し、
前記実行ユニットにおいて、命令中のオペランドで示されるアドレスの下位ビットを８倍した値を非整列データのシフト量として計算し、前記シフトアマントレジスタに格納するシフト量設定命令を有すること
を特徴とするプロセッサ装置。
【請求項２】
演算のための入力データを格納するレジスタファイルと、
前記レジスタファイルから読み出した第１のレジスタ値を格納する第１レジスタと、
前記レジスタファイルから読み出した第２のレジスタ値を格納する第２レジスタと、
ファネルシフト命令が入力されるのに応じて、第１および第２のレジスタ値を連結し、連結した値をシフトアマントレジスタ内に格納されたシフト量だけビット単位でシフトする実行ユニットとを具備し、
前記実行ユニットにおいて、プロセッサ装置のデータパスが３２ビットの場合、命令中のオペランドで示されるアドレスの下位２ビットを８倍した値を非整列データのシフト量として計算し、前記シフトアマントレジスタに格納するシフト量設定命令を有すること
を特徴とするプロセッサ装置。
【請求項３】
演算のための入力データを格納するレジスタファイルと、
前記レジスタファイルから読み出した第１のレジスタ値を格納する第１レジスタと、
前記レジスタファイルから読み出した第２のレジスタ値を格納する第２レジスタと、
ファネルシフト命令が入力されるのに応じて、第１および第２のレジスタ値を連結し、連結した値をシフトアマントレジスタ内に格納されたシフト量だけビット単位でシフトする実行ユニットとを具備し、
前記実行ユニットにおいて、データパスのビット幅から命令中のオペランドで示されるアドレスの下位ビットを８倍した値を減じた値を非整列データのシフト量として計算し、前記シフトアマントレジスタに格納するシフト量設定命令を有すること
を特徴とするプロセッサ装置。
【請求項４】
演算のための入力データを格納するレジスタファイルと、
前記レジスタファイルから読み出した第１のレジスタ値を格納する第１レジスタと、
前記レジスタファイルから読み出した第２のレジスタ値を格納する第２レジスタと、
ファネルシフト命令が入力されるのに応じて、第１および第２のレジスタ値を連結し、連結した値をシフトアマントレジスタ内に格納されたシフト量だけビット単位でシフトする実行ユニットとを具備し、
前記実行ユニットにおいて、プロセッサ装置のデータパスが３２ビットの場合、３２から命令中のオペランドで示されるアドレスの下位２ビットを８倍した値を減じた値を非整列データのシフト量として計算し、前記シフトアマントレジスタに格納するシフト量設定命令を有すること
を特徴とするプロセッサ装置。
【請求項５】
演算のための入力データを格納するレジスタファイルと、
前記レジスタファイルから読み出した第１のレジスタ値を格納する第１レジスタと、
前記レジスタファイルから読み出した第２のレジスタ値を格納する第２レジスタと、
ファネルシフト命令が入力されるのに応じて、第１および第２のレジスタ値を連結し、連結した値をシフトアマントレジスタ内に格納されたシフト量だけビット単位でシフトする実行ユニットとを具備し、
前記実行ユニットにおいて、メモリシステムがビッグエンディアン方式の場合、命令中のオペランドで示されるアドレスの下位ビットを８倍した値を、メモリシステムがリトルエンディアン方式の場合、データパスのビット幅から命令中のオペランドで示されるアドレスの下位ビットを８倍した値を減じた値を、それぞれ非整列データのシフト量として計算し、前記シフトアマントレジスタに格納するシフト量設定命令を有すること
を特徴とするプロセッサ装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、メモリシステムにおける非整列データを整列化するデータ処理に対して適用して好適な技術に関する。
【０００２】
【従来の技術】
始めに、図６を参照して、多バイトのデータをメモリシステム中へ格納する方式について説明する。
【０００３】
多バイトのデータをメモリ中へ格納する方式には、大きく分けて、ビッグエンディアン方式とリトルエンディアン方式の２つがあり、図６(ａ），(ｂ)はそれぞれ、ビッグエンディアン方式およびリトルエンディアン方式での、メモリ上におけるデータのアドレスを示す。ここで、図中(１)，(２)，(３)はそれぞれ、ワード（３２ビット）データ、ハーフワード（１６ビット）データおよびバイト（８ビット）データのメモリ上のビット位置とアドレスとの関係を表し、各々３２ビット幅のメモリのアドレス０〜ｂまでが図示されている。
【０００４】
図からわかるように、ビッグエンディアン方式でデータが格納されたメモリシステム（図６（ａ））においては、バイト０の位置は常に最上位（最左端）のバイト位置となり、一方、リトルエンディアン方式でデータが格納されたメモリシステム（図６（ｂ））においては、バイト０の位置は、常に最下位（最右端）のバイト位置となる。
【０００５】
ところで、上記のビッグエンディアン方式でデータが格納されたメモリシステムにおいては、アドレス３からのワードデータは、図７（ａ）に示すような構成となる。ワードデータがこのような構成である場合、図６（ａ）に示したように、アドレス３のデータはメモリ上のアドレス０〜３までのワードデータにあり、アドレス４〜６はメモリ上のアドレス４〜７のワードデータにあるので、非整列データとなる。
【０００６】
したがって、非整列データを整列化するためには、アドレス３のデータと、アドレス４〜６のデータとをメモリから読み出し、アドレス３のデータをレジスタのビット３１〜２４へ、アドレス４〜６のデータをレジスタのビット２３〜０へ格納する処理を実行する必要がある。このような非整列データの整列化処理を行うために、現在までの所、幾つかの方式が提案されており、例えば、Hansenらは、USP4,814,976において、図８に示すような、非整列データをメモリからプロセッサ内蔵のレジスタへロードする特殊な命令と、プロセッサ内蔵のレジスタの値を整列化してメモリへストアするための命令を有するプロセッサ装置を提案している。
【０００７】
【発明が解決しようとする課題】
ところが、Hansenらが提案するプロセッサ装置に代表される、従来までの非整列データの整列化処理においては、図７（ｂ）に示すように、"Load Word Left"命令と"Load Word Right"命令を連続して実行する必要がある上に、Load Word Left命令の実行結果を中間的なレジスタに保持し、Load Word Right命令とマージするという処理が含まれるために、特別なシフト・マージユニットが必要となってしまう。また、非整列データをメモリにストアする場合も同様、"Store Word Left"命令と"Store Word Light"命令を連続して実行する必要がある。さらに、これらの命令は、その他のロード命令やストア命令とは動作が異なるために、実装が困難であり、また、ロード命令においては、メモリからロードした後にシフトとマージ処理を実行するために、タイミング的なクリティカルパスとなる恐れがあった。
【０００８】
本発明は、従来までの非整列データの整列化処理が抱える上記の技術的課題を解決すべくなされたものであり、その目的は、特別な回路や制御を使用することなく、非整列データの整列化を高速に行うことを可能にする技術を提供することにある。
【０００９】
【課題を解決するための手段】
本発明に係るプロセッサ装置の特徴は、２つのレジスタの内容を連結シフトするシフト回路と、シフト回路のシフト量を格納するシフトアマントレジスタを有し、メモリアドレスの下位ビットをシフトアマントレジスタに設定する命令を設けることにより、連結シフト処理によって非整列データの整列化を行うことにある。このような特徴を有するプロセッサ装置によれば、ロード命令、ストア命令自体は通常の命令を使用して処理を実行するので、余分な回路や制御を必要とせずに、非整列データの整列化およびアクセス処理を高速に実行することができる。
【００１０】
【発明の実施の形態】
以下、図１〜図５を参照して、本発明の実施形態に係るプロセッサ装置の構成およびその動作について詳しく説明する。
【００１１】
《プロセッサ装置の全体構成》
始めに、図１を参照して、本発明の実施形態に係るプロセッサ装置の構成について説明する。
【００１２】
この実施形態のプロセッサ装置は、図１に示すように、命令メモリ２、命令レジスタ３、命令デコーダ４、レジスタファイル５、レジスタ書き込み情報レジスタ６ａ，６ｂ、命令コードレジスタ７、イミディエートレジスタ８、ソースレジスタ９，１０、実行ユニット１１、シフトアマントレジスタ（ＳＡＲ）１２、パイプレジスタ１３、パイプラインレジスタ１４、データメモリ１５およびセレクタ１６を備える。
【００１３】
《プロセッサ装置の命令実行動作》
次に、上記のプロセッサ装置の命令実行動作について説明する。
【００１４】
上記の実施形態のプロセッサ装置は、一般的なプロセッサ装置と同様、５段のパイプライン構成で命令を実行する。
【００１５】
すなわち、まず始めに、命令メモリ２から命令レジスタ３内へ命令を読み出す（命令フェッチステージ〜パイプラインステージ１〜）。
【００１６】
命令フェッチステージが完了すると、次に、命令レジスタ３内に読み出された命令内で指定されたレジスタファイル５内のレジスタ値を読み出し、ソースレジスタ９，１０に格納する。命令デコーダ４は、実行ユニット１１での命令の実行を指示するための命令をデコードする。また、命令デコーダ４は、命令中にあるイミディエート（定数）値を切り出し、イミディエートレジスタ８にその値をセットする。そして、実行する命令がその実行結果をレジスタファイル内のレジスタへ書き戻す場合には、レジスタ書き込み情報レジスタ６ａにそのレジスタ番号と書き戻し有効情報を格納する（命令デコードステージ〜パイプラインステージ２〜）。
【００１７】
命令デコードステージが完了すると、続いて、命令デコードステージで読み出したレジスタの値若しくはイミディエート値を用いて、実行ユニット１１にて命令を実行する。実行結果は、パイプラインレジスタ１４若しくはシフトアマントレジスタ（ＳＡＲ）１２へ格納される。実行する命令がロード命令とストア命令の場合には、メモリの実効アドレスを計算し、実効アドレス値をパイプラインレジスタ１４内に格納される。そして、レジスタ書き込み情報レジスタ６ａの内容がレジスタ書き込み情報レジスタ６ｂに格納される。また、ソースレジスタ９のレジスト値がパイプレジスタ１３に格納される（実行ステージ〜パイプラインステージ３〜）。
【００１８】
実行ステージが完了すると、次に、メモリロード命令が、パイプラインレジスタ１４の値を実効アドレスとして、データメモリ１５を読み出す。読み出された値は、パイプラインレジスタ１４の出力と選択され、ロード命令の実行結果若しくは実行ユニット１１での演算結果を選択することができる。ストア命令の場合、ロード命令と同様、パイプラインレジスタ１４の値を実効アドレス値とするデータメモリの位置へ、パイプレジスタ１３の値を書き込む（メモリステージ〜パイプラインステージ４〜）。
【００１９】
メモリステージが完了すると、最後に、レジスタ書き込み情報レジスタ６ｂの内容で、レジスタの書き戻しが有効の場合には、指定されたレジスタへ、セレクタ１６の出力結果を書き込む（レジスタライトバック〜パイプラインステージ５〜）。
【００２０】
《命令メモリ１０内に格納される命令》
次に、図２を参照して、上記の命令メモリ１０内に格納された代表的な命令について説明する。
【００２１】
図２は、命令メモリ１０内に格納された代表的な命令のニーモニック、機能およびオペレーションコードを示す図である。
【００２２】
ロードワード（ＬＷ）命令は３２ビット長の命令であり、命令のビット３１〜２８が１１００、ビット１９〜１６が１１１０で指定される。４ビットのｎｎｎｎフィールドはロードした結果を格納するレジスタファイル５内のレジスタＲｎを指定する。ｍｍｍｍはフィールドは実効アドレスを計算するためのレジスタファイル５内のレジスタＲｍを指定する。そして、レジスタＲｎの値と命令ビット１５〜０の１６ビットの定数値を３２ビットに符号拡張した値を加算した結果を実効アドレスとして、データメモリ１５からワード幅でデータを読み出す。このとき、実効アドレスの下位２ビットは、０として整列したワードデータを読み出す。読み出したメモリの値をレジスタファイル５内のレジスタＲｎに格納する。
【００２３】
ストアワード（ＳＷ）命令は３２ビット長の命令であり、命令のビット３１〜２８が１１００、ビット１９〜１６が１０１０で指定される。４ビットのｎｎｎｎフィールドはメモリへストアするレジスタファイル５内のレジスタＲｎを指定する。ｍｍｍｍフィールドは実効アドレスを計算するためのレジスタファイル５内のレジスタＲｍを指定する。そして、レジスタＲｍの値と、命令のビット１５〜０の１６ビットの定数値を３２ビットに符号拡張した値を加算した結果を実効アドレスとして、データメモリ１５へレジスタＲｎ内の値を書き込む。このとき、実効アドレスの下位２ビットは、０として整列したワードデータをデータメモリ１５へ書き込む。
【００２４】
セットＳＡＲバイト（ＳＳＡＲＢ）命令は１６ビット長の命令であり、命令のビット１５〜１２が０００１、ビット３〜０が１１００で指定される。ｍｍｍｍフィールドは実効アドレスを計算するためのレジスタファイル５内のレジスタＲｍを指定する。そして、レジスタＲｍ内のデータの下位２ビットと、命令のビット９と８の２ビットの加算した結果を実効アドレス命令の下位２ビットと考える。ビッグエンディアン方式の場合は、この値を８倍したものをシフトアマントレジスタ（ＳＡＲ）１２へ格納する。リトルエンディアン方式の場合は、この値を８倍したものを３２から減じた値をシフトアマントレジスタ（ＳＡＲ）１２内に格納する。
【００２５】
ファネルシフト（ＦＳＦＴ）命令は１６ビット長の命令であり、命令のビット１５〜１２が００１０、ビット３〜０が１１１１で指定される。ｎｎｎｎフィールド、ｍｍｍｍフィールドはそれぞれ、演算の入力になるレジスタファイル５内のレジスタＲｎ，Ｒｍを指定する。実行ステージでレジスタＲｎの値を上位３２ビット、レジスタＲｍの値を下位３２ビットとして、データを連結した６４ビットのデータを作る。シフトアマントレジスタ（ＳＡＲ）１２の下位６ビットの値をシフト量として左シフトを行い、上位の３２ビットの結果を命令の実行結果として、レジスタファイル５内のレジスタＲｎに格納する。
【００２６】
算術右シフト（ＳＲＡ）命令は１６ビットの命令であり、命令のビット１５〜１２が０１１０、ビット２〜０が０１１で指定される。ｎｎｎｎフィールドは演算の入力になるレジスタファイル５内のレジスタＲｎを指定する。ｉｉｉｉフィールドはビット単位でのシフト量ｉｍｍを示す。実行ステージでレジスタＲｎをｉｍｍビットだけ算術右シフトし、命令の実行結果として、レジスタファイル５内のレジスタＲｎに格納する。なお、ここでいう算術右シフトとは、符号情報を変更しないよう、右シフトしていた上位ビットには全て最上位ビットの値を入れる処理のことを意味する。
【００２７】
論理右シフト（ＳＲＬ）命令は１６ビット長の命令であり、命令のビット１５〜１２が０１１０、ビット２〜０が０１０で指定される。ｎｎｎｎフィールドは、演算の入力になるレジスタファイル５内のレジスタＲｎを指定する。ｉｉｉｉフィールドはビット単位でのシフト量ｉｍｍを示す。実行ステージでレジスタＲｎ内の値をｉｍｍビットだけ論理右シフトし、命令の実行結果とし、レジスタファイル５内のレジスタＲｎへ格納する。なお、ここでいう論理右シフトとは、右シフトして空いた上位ビットには全て０の値を入れる処理のことを意味する。
【００２８】
論理左シフト（ＳＬＬ）命令は１６ビット長の命令であり、命令のビット１５〜１２が０１１０、ビット２〜０が１１０で指定される。ｎｎｎｎフィールドは、演算の入力になるレジスタファイル５内のレジスタＲｎを指定する。ｉｉｉｉフィールドは、ビット単位でのシフト量ｉｍｍを示す。実行ステージでレジスタＲｎの内容をｉｍｍビットだけ論理左シフトし、命令の実行結果として、レジスタファイル５内のレジスタＲｎへ格納する。なお、ここでいう論理左シフトとは、左シフトして空いた下位ビットには全て０の値を入れる処理のことを意味する。
【００２９】
ストア制御レジスタ（ＳＴＣ）命令は１６ビット長の命令であり、命令のビット１５〜１２が０１１１、ビット３〜０が１０００で指定される。ｎｎｎｎフィールドをレジスタファイル５内のレジスタＲｎとして、レジスタファイル５から値を読み出す。読み出したレジスタの値の下位ビットをシフトアマントレジスタ（ＳＡＲ）１２に格納する。
【００３０】
《プロセッサ装置内の構成要素の動作》
次に、上記の命令を実行する際のプロセッサ装置の各部の動作について説明する。
【００３１】
命令デコーダ４は、命令レジスタ３から１６ビット長若しくは３２ビット長命令を入力として、その命令をデコードする。命令レジスタ１１は３２ビット長とし、１６ビット長命令は上位１６ビットに格納されているとする。命令デコーダ４は、命令レジスタ３のビット３１〜２８とビット１９〜１６の８ビットを命令コードとして命令コードレジスタ７へ出力する。また、ビット２７〜２４およびビット２３〜２０をそれぞれ、レジスタファイル５内のレジスタＲｎおよびレジスタファイル５内のレジスタＲｍを指定するフィールドとして、レジスタファイル５へ出力する。命令デコーダ４は、図３（ａ）に示すように、命令コードからイミディエート値を計算し、計算した値をイミディエートレジスタ８へ格納する。また、レジスタ書き込みを行う命令の場合、命令デコーダ４は、図３（ｂ）に示すように、レジスタ書き込み情報レジスタ６ａにそのレジスタ番号と書き戻し有効情報とを格納する。シフトアマントレジスタ（ＳＡＲ）１２への書き込みがある場合、シフトアマントレジスタ書き込み有効情報を有効にする。
【００３２】
レジスタファイル５は、命令デコーダ４から読み出すレジスタＲｎとレジスタＲｍに対応するレジスタ番号を入力として、これらのレジスタの値を、ソースレジスタ９，１０に出力する。また、レジスタ書き込み情報レジスタ６ｂの内容からレジスタ書き戻しが有効であると判断された場合には、セレクタ１６の出力をレジスタ書き込み情報レジスタ６ｂの書き戻しレジスタ番号で指定されるレジスタ番号へ書き込む。
【００３３】
実行ユニット１１は、ソースレジスタ９，１０、イミディエートレジスタ８おおびシフトアマントレジスタ（ＳＡＲ）１２の値を入力データとして、命令コードレジスタ７で指定される演算を行い、演算結果をパイプラインレジスタ１４若しくはシフトアマントレジスタ（ＳＡＲ）１２に格納する。各命令毎のオペレーションは図４に示す通りである。なお、シフトアマントレジスタ（ＳＡＲ）１２への書き込みの制御はレジスタ書き込み情報レジスタ６ａのシフトアマントレジスタ書き込みが有効の時だけ実行される。
【００３４】
《非整列データへのアクセス方法〜具体例〜》
上記のプロセッサ装置においては、非整列データへのアクセス処理は、既述のセットＳＡＲバイト（ＳＳＡＲＢ）命令とファネルシフト（ＦＳＦＴ）命令を用い、連結シフト動作によって行われる。以下、図５を参照して、非整列データのアクセス処理の幾つかの具体例について説明する。
【００３５】
図５（ａ）に示す例においては、アドレス３からワードデータをロードする（ビッグエンディアン方式）。この実施形態のプロセッサ装置においてアドレス３からワードデータをロードする際は、まず始めに、（１）ロードワード（ＬＷ）命令によって、１６ビットディスプレートメント値３とソースレジスタ１０のレジスタＲ４の値を加えたものを実効アドレスとして、メモリからデータをロードし、レジスタファイル５内のレジスタＲ０に格納する。そして、次に、（２）ロードワード（ＬＷ）命令によって、１６ビットディスプレートメント値７とソースレジスタ１０のレジスタＲ４の値を加えたものを実効アドレスとして、メモリからデータをロードし、レジスタファイル５内のレジスタＲ１に格納する。続いて、（３）セットＳＡＲバイト（ＳＳＡＲＢ）命令によって、２ビットディスプレートメント値３とソースレジスタ１０のレジスタＲ４の値を加え、この具体例はビッグエンディアン方式であるので、加算結果を８倍したものをシフトアマントレジスタ（ＳＡＲ）１２に格納する。最後に、（４）ファネルシフト（ＦＳＦＴ）命令によって、シフトアマントレジスタ（ＳＡＲ）１２の値をシフト量として、レジスタＲ０，Ｒ１の値を連結シフトする。
【００３６】
図５（ｂ）に示す例においては、アドレス３からハーフワードデータ（符号付き）をロードする（ビッグエンディアン方式）。この実施形態のプロセッサ装置においてアドレス３からハーフワードデータをロードする際は、まず始めに（１）ロードワード（ＬＷ）命令によって、１６ビットディスプレートメント値３とソースレジスタ１０のレジスタＲ４の値を加えたものを実効アドレスとして、メモリからデータをロードし、レジスタファイル５内のレジスタＲ０に格納する。そして、次に、（２）ロードワード（ＬＷ）命令によって、１６ビットディスプレートメント値７とソースレジスタ１０のレジスタＲ４の値を加えたものを実効アドレスとして、メモリからデータをロードし、レジスタファイル５内のレジスタＲ１に格納する。次に、（３）セットＳＡＲバイト（ＳＳＡＲＢ）命令によって、２ビットディスプレートメント値３とソースレジスタ１０のレジスタＲ４の値を加え、この具体例はビッグエンディアン方式であるので、加算結果を８倍したものをシフトアマントレジスタ（ＳＡＲ）１２に格納する。続いて、（４）ファネルシフト（ＦＳＦＴ）命令によって、シフトアマントレジスタ（ＳＡＲ）１２の値をシフト量として、レジスタＲ０，Ｒ１の値を連結シフトする。最後に、（５）レジスタファイル５内のレジスタＲ０の値をイミディエートレジスタ８の下位５ビットで指定されるシフト量だけ算術右シフトし、結果をレジスタＲ０に格納する。
【００３７】
図５（ｃ）に示す例においては、リトルエンディアン方式においてアドレス３からワードデータをロードする。リトルエンディアン方式においてアドレス３からワードデータをロードする際は、始めに、ビッグエンディアン方式と同様にして、（１）ロードワード（ＬＷ）命令によって、１６ビットディスプレートメント値３とソースレジスタ１０のレジスタＲ４の値を加えたものを実効アドレスとして、メモリからデータをロードし、レジスタファイル５内のレジスタＲ０に格納する。また、（２）ロードワード（ＬＷ）命令によって、１６ビットディスプレートメント値７とソースレジスタ１０のレジスタＲ４の値を加えたものを実効アドレスとして、メモリからデータをロードし、レジスタファイル５内のレジスタＲ１に格納する。次に、（３）セットＳＡＲバイト（ＳＳＡＲＢ）命令によって、２ビットディスプレートメント値３とソースレジスタ１０のレジスタＲ４の値を加え、リトルエンディアン方式であるので、３２から加算結果の下位２ビットを８倍した値を減じた値をシフトアマントレジスタ（ＳＡＲ）１２に格納する。最後に、（４）ファネルシフト（ＦＳＦＴ）命令によって、シフトアマントレジスタ（ＳＡＲ）１２の値をシフト量として、レジスタＲ１，Ｒ０の値を連結シフトする。
【００３８】
図５（ｄ）に示す例においては、リトルエンディアン方式において、アドレス３からハーフワードデータ（符号付き）をロードする。リトルエンディアン方式において、アドレス３からハーフワードデータをロードする際は、ビッグエンディアン方式と同様、まず始めに（１）ロードワード（ＬＷ）命令によって、１６ビットディスプレートメント値３とソースレジスタ１０のレジスタＲ４の値を加えたものを実効アドレスとして、メモリからデータをロードし、レジスタファイル５内のレジスタＲ０に格納する。また、（２）ロードワード（ＬＷ）命令によって、１６ビットディスプレートメント値７とソースレジスタ１０のレジスタＲ４の値を加えたものを実効アドレスとして、メモリからデータをロードし、レジスタファイル５内のレジスタＲ１に格納する。次に、（３）セットＳＡＲバイト（ＳＳＡＲＢ）命令によって、２ビットディスプレートメント値３とソースレジスタ１０のレジスタＲ４の値を加え、リトルエンディアン方式であるので、３２から加算結果の下位２ビットの値を８倍した値を減じた値をシフトアマントレジスタ（ＳＡＲ）１２に格納する。続いて、（４）ファネルシフト（ＦＳＦＴ）命令によって、シフトアマントレジスタ（ＳＡＲ）１２の値をシフト量として、レジスタＲ１，Ｒ０の値を連結シフトする。次に、（５）論理左シフト（ＳＬＬ）命令によって、レジスタファイル５内のレジスタＲ１の値を１６ビット論理左シフトし、結果をレジスタＲ０に格納する。最後に、（６）算術右シフト（ＳＲＡ）命令によって、レジスタファイル５内のレジスタＲ１の値を１６ビット算術右シフトし、結果をレジスタＲ０に格納する。
【００３９】
図５（ｅ）に示す例においては、上記の例とは異なり、アドレス３にワードデータＲ３をストアする（ビッグエンディアン方式）。この実施形態のプロセッサ装置においてアドレス３にワードデータＲ３をストアする際は、まず始めに（１）ロードワード（ＬＷ）命令によって、１６ビットディスプレートメント値３とソースレジスタ１０のレジスタＲ４の値を加えたものを実効アドレスとして、メモリからデータをロードし、レジスタファイル５内のレジスタＲ０に格納する。また、（２）ロードワード（ＬＷ）命令によって、１６ビットディスプレートメント値７とソースレジスタ１０のレジスタＲ４の値を加えたものを実効アドレスとして、メモリからデータをロードし、レジスタファイル５内のレジスタＲ１に格納する。次に、（３）セットＳＡＲバイト（ＳＳＡＲＢ）命令によって、２ビットディスプレートメント値３とソースレジスタ１０のレジスタＲ４の値を加え、この具体例はビッグエンディアン方式であるので、加算結果を８倍したものをシフトアマントレジスタ（ＳＡＲ）１２に格納する。続いて、（４）ファネルシフト（ＦＳＦＴ）命令によって、シフトアマントレジスタ（ＳＡＲ）１２の値をシフト量として、レジスタＲ１，Ｒ０の値を連結シフトする。次に、（５）ＭＯＶ命令によって、レジスタＲ１の値をレジスタＲ２にコピーした後、（６）セットＳＡＲバイト（ＳＳＡＲＢ）命令によって、２ビットディスプレートメント値１とソースレジスタ１０のレジスタＲ４の値を加え、加算結果を８倍したものをシフトアマントレジスタ（ＳＡＲ）１２に格納する。続いて、（７）ファネルシフト（ＦＳＦＴ）命令によって、シフトアマントレジスタ（ＳＡＲ）１２の値をシフト量として、レジスタＲ１，Ｒ３の値を連結シフトする。次に、（８）再びファネルシフト（ＦＳＦＴ）命令によって、シフトアマントレジスタ（ＳＡＲ）１２の値をシフト量として、レジスタＲ３，Ｒ２の値を連結シフトする。続いて、（９）ストアワード（ＳＷ）命令によって、１６ビットディスプレースメント値３とソースレジスタ１０のレジスタＲ４の値とを加えたものを実効アドレスとして、レジスタファイル５内のレジスタＲ１の値をメモリへストアする。また、最後に、（１０）ストアワード（ＳＷ）命令によって、１６ビットディスプレースメント値７とソースレジスタ１０のレジスタＲ４の値とを加えたものを実効アドレスとして、レジスタファイル５内のレジスタＲ３の値をメモリへストアする。
【００４０】
《実施の形態の効果》
以上述べてきたように、この実施形態のプロセッサ装置においては、実行ユニット１１の連結シフト機能を利用し、連結シフトに非整列データの整列化のためのシフト量を設定する命令を実行するので、非整列データの整列化およびアクセス処理を高速に実行することができる。また、整列化のためのシフト量を設定する命令は、ビッグエンディアン方式の場合には、定数とレジスタの加算、加算結果を８倍、上位ビットマスク、シフトアマントレジスタへの値の書き込みという４つのオペレーションを１つの命令で実行する。したがって、この命令がない場合には独立した４つの命令を実行する必要があり、それぞれの命令の実行に１サイクル要すると考えれば、従来までの処理と比較して、４倍の高速化を図ることができる。
【００４１】
また、非整列データの整列化を実行するロード命令やストア命令を設けることによりメモリデータの整列化を高速に行うことも可能であるが、この場合は専用のシフト・マージ回路が必要となり、また、特別なロード命令、ストア命令のために制御が複雑になってしまう。これに対し、この実施の形態のプロセッサ装置においては、ロード命令、ストア命令自体は通常の命令を使用するので、このような欠点を解消することができる。また、連結シフトは、非整列データの整列化処理以外にもデータのローテータ等にも汎用的に使用することができるというメリットがある。
【００４２】
《その他の実施の形態》
以上、本発明者らによってなされた発明を上記実施形態によって記載したが、この開示の一部をなす論述および図面はこの発明を限定するものであると理解すべきではない。この開示から当業者には様々な代替実施の形態、実施例および運用技術が明らかとなろう。
【００４３】
例えば、上記の実施の形態においては、プロセッサのデータパス幅が３２ビットで、メモリのアクセスがワード単位で行う場合を説明したが、データパス幅が１６ビット、６４ビット、１２８ビット等、異なるデータ幅の場合も同様に本発明を適用することができる。すなわち、データパス幅が６４ビットの場合は、メモリとの転送を６４ビットで行う。シフアマントレジスタへは、ビッグエンディアン方式の場合は、アドレスの下位３ビットを８倍したものを格納すれば良い。一方、リトルエンディアン方式の場合には、アドレスの下位３ビットを８倍したものを６４から減じたものをシフトアマントレジスタへ格納する。
【００４４】
このように、本発明はここでは記載していない様々な実施の形態等を包含するということを理解すべきである。したがって、本発明はこの開示から妥当な特許請求の範囲に係る発明特定事項によってのみ限定されるものである。
【００４５】
【発明の効果】
本発明のプロセッサ装置によれば、特別な回路や制御を必要とせずに、非整列データの整列化を高速に行うことができる。
【図面の簡単な説明】
【図１】本発明の実施形態に係るプロセッサ装置の構成を示す模式図である。
【図２】上記のプロセッサ装置内の命令メモリ内に格納された一部の命令を示す図である。
【図３】命令とイミディエート値の関係および命令と書き戻し有効情報の関係を示す図である。
【図４】命令のオペレーションを示す図である。
【図５】本発明の実施形態に係るプロセッサ装置を用いた非整列データの整列化処理の具体例を示す図である。
【図６】ビッグエンディアン方式およびスモールエンディアン方式のメモリデータの配置を説明するための図である。
【図７】従来までの非整列データの整列化処理を説明するための図である。
【図８】従来までの非整列データの整列化処理に用いられる命令の一例を示す図である。
【符号の説明】
１  プロセッサ装置
２  命令メモリ
３  命令レジスタ
４  命令デコーダ
５  レジスタファイル
６ａ，６ｂ  レジスタ書き込み情報レジスタ
７  命令コードレジスタ
８  イミディエートレジスタ
９，１０  ソースレジスタ
１１  実行ユニット
１２  シフトアマントレジスタ
１３  パイプレジスタ
１４  パイプラインレジスタ
１５  データメモリ
１６  セレクタ
【図１】
0003776732.tif 000002
【図２】
0003776732.tif 000003
【図３】
0003776732.tif 000004
【図４】
0003776732.tif 000005
【図５】
0003776732.tif 000006
【図６】
0003776732.tif 000007
【図７】
0003776732.tif 000008
【図８】
0003776732.tif 000009