(57)【要約】      （修正有）【課題】データ並び替え命令を、処理サイクル数を増加させずに、かつ、レジスタに無駄な領域を発生させずに実行するプロセッサを提供する。【解決手段】演算対象データを格納するレジスタと、データ並び替え命令を解読する命令デコーダと、レジスタに格納された演算対象データから所定数のデータ要素を切り出すデータ切り出し部Ａ（０５０１）と、データ切り出し部Ｂ（０５０２）と、切り出された部分データを連結するデータ連結部０５０３と、を備え、データ切り出し部Ａ（０５０１）とデータ切り出し部Ｂ（０５０２）は、演算対象データから、データ並び替え命令で指定され、かつ、演算対象データにおける同じ位置にある所定数のデータ要素を切り出す。演算対象データからの切り出しと切り出されたデータの連結とは、１個のデータ並び替え命令が命令デコーダで解読されたことに対応して実行される。【選択図】図５
2017199045.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータ要素の並びから構成される演算対象データを処理するプロセッサであって、
前記演算対象データを含むデータを格納する複数のレジスタと、
少なくとも１つの前記演算対象データを格納する、前記複数のレジスタのうちの少なくとも１つを指定するデータ並び替え命令を解読する命令デコーダと、
前記少なくとも１つの演算対象データのそれぞれに対応して設けられ、それぞれ、前記データ並び替え命令によって指定された前記複数のレジスタのうちの少なくとも１つに格納された対応する前記演算対象データから、所定数のデータ要素を切り出して部分データを生成する、複数のデータ切り出し部と、
前記複数のデータ切り出し部で生成された複数の前記部分データを連結するデータ連結部と、を備え、
前記複数のデータ切り出し部は、それぞれ、対応する前記演算対象データから、前記データ並び替え命令で指定された位置、かつ、前記演算対象データにおける同じ位置にある前記所定数のデータ要素を切り出し、
前記複数のデータ切り出し部による切り出しと前記データ連結部による連結とは、１個の前記データ並び替え命令が前記命令デコーダで解読されたことに対応して、実行される
プロセッサ。
【請求項２】
前記複数のデータ切り出し部は、それぞれ、対応する前記演算対象データから、当該演算対象データのデータ要素数の半分のデータ要素を切り出す
請求項１記載のプロセッサ。
【請求項３】
前記複数のデータ切り出し部は、それぞれ、対応する前記演算対象データから、前記データ並び替え命令のオペコードで指定される前記位置にある前記所定数のデータ要素を切り出す
請求項１又は２記載のプロセッサ。
【請求項４】
前記複数のデータ切り出し部は、それぞれ、対応する前記演算対象データから、前記データ並び替え命令の即値オペランドで指定される前記位置にある前記所定数のデータ要素を切り出す
請求項１又は２記載のプロセッサ。
【請求項５】
さらに、
前記複数のデータ切り出し部で切り出すデータ要素の位置を示す値を格納する切り出し位置レジスタを備え、
前記複数のデータ切り出し部は、それぞれ、対応する前記演算対象データから、前記データ切り出し位置レジスタに格納された値で指定される前記位置にある前記所定数のデータ要素を切り出す
請求項１又は２記載のプロセッサ。
【請求項６】
前記データ並び替え命令は、複数の前記演算対象データを格納する１つの前記レジスタを指定し、
前記複数のデータ切り出し部は、それぞれ、前記データ並び替え命令によって指定された前記１つのレジスタに格納された対応する前記演算対象データから、前記所定数のデータ要素を切り出して前記部分データを生成する
請求項１〜５のいずれか１項に記載のプロセッサ。
【請求項７】
前記データ並び替え命令は、前記複数の演算対象データを格納する複数の前記レジスタを指定し、
前記複数のデータ切り出し部は、それぞれ、前記データ並び替え命令によって指定された前記複数のレジスタに格納された対応する前記演算対象データから、前記所定数のデータ要素を切り出して前記部分データを生成する
請求項１〜５のいずれか１項に記載のプロセッサ。
【請求項８】
さらに、
前記データ連結部で生成された連結データをデータ要素単位で並び替えるパターンを指定するパターンデータを格納するパターン指定レジスタと
前記パターン指定レジスタに格納された前記パターンデータで指定されるパターンで前記連結データを並び替えるパターン指定シャッフル部と、を備える
請求項１〜７のいずれか１項に記載のプロセッサ。
【請求項９】
複数のデータ要素の並びから構成される演算対象データを処理するプロセッサによるデータ並び替え方法であって、
前記プロセッサは、前記演算対象データを含むデータを格納する複数のレジスタと、命令デコーダと、複数のデータ切り出し部と、データ連結部とを備え、
前記データ並び替え方法は、
前記命令デコーダが、少なくとも１つの前記演算対象データを格納する少なくとも１つの前記レジスタを指定するデータ並び替え命令を解読する命令デコードステップと、
前記複数のデータ切り出し部が、前記少なくとも１つの演算対象データのそれぞれに対して、前記データ並び替え命令によって指定された前記少なくとも１つのレジスタに格納された対応する前記演算対象データから、所定数のデータ要素を切り出して部分データを生成するデータ切り出しステップと、
前記データ連結部が、前記複数のデータ切り出し部で生成された前記複数の部分データを連結するデータ連結ステップと、を含み、
前記データ切り出しステップでは、前記複数のデータ切り出し部は、それぞれ、対応する前記演算対象データから、前記データ並び替え命令で指定され、かつ、前記演算対象データにおける同じ位置にある前記所定数のデータ要素を切り出し、
前記データ切り出しステップでの切り出しと前記データ連結ステップでの連結とは、１個の前記データ並び替え命令が前記命令デコーダで解読されたことに対応して、実行される
データ並び替え方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、プロセッサ及びデータ並び替え方法に関する。
【背景技術】
【０００２】
ＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔｅ）プロセッサでは、レジスタに格納された連続したデータ要素に対して演算が行われる。このとき、演算対象データが１つのレジスタに格納されていない場合には、演算前に、データ並び替え命令によって１つのレジスタにデータを集める処理が必要となる。そのようなデータ並び替え命令として、例えば、バイトアライン命令がある。
【０００３】
特許文献１には、２つのレジスタに格納されたそれぞれのベクタデータを連結して、命令で指定された位置から、元のベクタデータと同じサイズのベクタデータを切り出すバイトアライン命令が記載されている。図１にそのバイトアライン命令の動作を示す。バイトアライン命令では、レジスタＲａに格納された４バイトのバイトベクタ｛ａ０，ａ１，ａ２，ａ３｝とレジスタＲｂに格納された４バイトのバイトベクタ｛ｂ０，ｂ１，ｂ２，ｂ３｝とを入力として、命令に応じて、入力された２つのバイトベクタを連結したデータから、任意の位置から始まる４バイトのベクタデータの切り出しを行い、その結果をレジスタＲｃに格納する。図１の（ａ）では、「ｖａｌｎ１  Ｒｃ，Ｒａ，Ｒｂ」命令により、レジスタＲａの１バイト目の位置から４バイトのバイトベクタ｛ａ１，ａ２，ａ３，ｂ０｝が切り出されて、レジスタＲｃに格納される。図１の（ｂ）では、「ｖａｌｎ２  Ｒｃ，Ｒａ，Ｒｂ」命令により、レジスタＲａの２バイト目の位置から４バイトのバイトベクタ｛ａ２，ａ３，ｂ０，ｂ１｝が切り出されて、レジスタＲｃに格納される。図１の（ｃ）では、「ｖａｌｎ３  Ｒｃ，Ｒａ，Ｒｂ」命令により、レジスタＲａの３バイト目の位置から４バイトのバイトベクタ｛ａ３，ｂ０，ｂ１，ｂ２｝が切り出され、レジスタＲｃに格納される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−１３１８５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、近年、６４ビット長のように、レジスタのサイズが大きくなってきており、切り出したデータを格納するレジスタに不要なデータも含まれてしまうことがある。不要なデータが含まれたレジスタを無駄なく使用するためには、不要なデータと他のレジスタに格納された有効なデータとを並び替える命令がさらに必要になり、処理サイクル数が増加するという課題がある。
【０００６】
そこで、本開示は、データ並び替え命令を、処理サイクル数を増加させずに、かつ、レジスタに無駄な領域を発生させずに実行できるプロセッサ及びデータ並び替え方法を提供する。
【課題を解決するための手段】
【０００７】
本開示のプロセッサは、複数のデータ要素の並びから構成される演算対象データを処理するプロセッサであって、前記演算対象データを含むデータを格納する複数のレジスタと、少なくとも１つの前記演算対象データを格納する、前記複数のレジスタのうちの少なくとも１つを指定するデータ並び替え命令を解読する命令デコーダと、前記少なくとも１つの演算対象データのそれぞれに対応して設けられ、それぞれ、前記データ並び替え命令によって指定された前記複数のレジスタのうちの少なくとも１つに格納された対応する前記演算対象データから、所定数のデータ要素を切り出して部分データを生成する、複数のデータ切り出し部と、前記複数のデータ切り出し部で生成された複数の前記部分データを連結するデータ連結部と、を備え、前記複数のデータ切り出し部は、それぞれ、対応する前記演算対象データから、前記データ並び替え命令で指定された位置、かつ、前記演算対象データにおける同じ位置にある前記所定数のデータ要素を切り出し、前記複数のデータ切り出し部による切り出しと前記データ連結部による連結とは、１個の前記データ並び替え命令が前記命令デコーダで解読されたことに対応して、実行される。
【０００８】
また、本開示のデータ並び替え方法は、複数のデータ要素の並びから構成される演算対象データを処理するプロセッサによるデータ並び替え方法であって、前記プロセッサは、前記演算対象データを含むデータを格納する複数のレジスタと、命令デコーダと、複数のデータ切り出し部と、データ連結部とを備え、前記データ並び替え方法は、前記命令デコーダが、少なくとも１つの前記演算対象データを格納する少なくとも１つの前記レジスタを指定するデータ並び替え命令を解読する命令デコードステップと、前記複数のデータ切り出し部が、前記少なくとも１つの演算対象データのそれぞれに対して、前記データ並び替え命令によって指定された前記少なくとも１つのレジスタに格納された対応する前記演算対象データから、所定数のデータ要素を切り出して部分データを生成するデータ切り出しステップと、前記データ連結部が、前記複数のデータ切り出し部で生成された前記複数の部分データを連結するデータ連結ステップと、を含み、前記データ切り出しステップでは、前記複数のデータ切り出し部は、それぞれ、対応する前記演算対象データから、前記データ並び替え命令で指定され、かつ、前記演算対象データにおける同じ位置にある前記所定数のデータ要素を切り出し、前記データ切り出しステップでの切り出しと前記データ連結ステップでの連結とは、１個の前記データ並び替え命令が前記命令デコーダで解読されたことに対応して、実行される。
【０００９】
本開示のプロセッサ及びデータ並び替え方法によれば、処理サイクル数を増加させずに、かつ、レジスタに無駄な領域を発生させずに、データ並び替え命令が実行される。
【発明の効果】
【００１０】
本開示のプロセッサ及びデータ並び替え方法によれば、処理サイクル数を増加させずに、かつ、レジスタに無駄な領域を発生させずに、データ並び替え命令が実行される。
【図面の簡単な説明】
【００１１】
【図１】特許文献１に記載のバイトアライン命令の動作を示す図
【図２】実施の形態１のプロセッサの構成図
【図３】レジスタファイルが持つレジスタの一覧図
【図４】Ｒレジスタ、ＸＤレジスタ及びＸＱレジスタの関係を示す図
【図５】データ並び替え器の構成図
【図６】実施の形態１のプロセッサが扱うベクタデータの一覧図
【図７】「ｖａｌｎｐＸ．８  ＸＤｃ，ＸＤａ，ＸＤｂ」命令（ｖａｌｎｐＸ．８のＸは０〜４）の動作を示す図
【図８】「ｖａｌｎｐＸ．１６  ＸＤｃ，ＸＤａ，ＸＤｂ」命令（ｖａｌｎｐＸ．１６のＸは０〜２）の動作を示す図
【図９】「ｖａｌｎｐＸ．３２  ＸＤｃ，ＸＤａ，ＸＤｂ」命令（ｖａｌｎｐＸ．１６のＸは０〜１）の動作を示す図
【図１０】「ｖａｌｎｐ．８  ＸＤｃ，ＸＤａ，ＸＤｂ，Ｉｍｍ」命令、「ｖａｌｎｐ．８  ＸＤｃ，ＸＤａ，ＸＤｂ，ＸＡＬＮｘ」命令及び「ｖａｌｎｐｉＸ．８  ＸＤｃ，ＸＤａ，ＸＤｂ，ＸＡＬＮｘ」命令の動作を示す図
【図１１】実施の形態１と従来とのデータの並び替えの処理を示す図
【図１２】実施の形態２のプロセッサの構成図
【図１３】実施の形態２のデータ並び替え器の構成図
【図１４】「ｖａｌｎｑＸ．８  ＸＤｅ，Ｒａ，Ｒｂ，Ｒｃ，Ｒｄ」命令（ｖａｌｎｑＸ．８のＸは０〜２）の動作を示す図
【図１５】実施の形態３のプロセッサの構成図
【図１６】実施の形態３のデータ並び替え器の構成図
【図１７】「ｖａｌｎｐＸ．８  ＸＤｂ，ＸＱａ」命令（ｖａｌｎｐＸ．８のＸは０〜４）の動作を示す図
【図１８】実施の形態４のプロセッサの構成図
【図１９】実施の形態４のデータ並び替え器の構成図
【図２０】「ｖａｌｎｑＸ．８  ＸＤｃ，ＸＤａ，ＸＤｂ」命令（ｖａｌｎｑＸ．８のＸは０〜２）の動作を示す図
【図２１】実施の形態５のプロセッサの構成図
【図２２】実施の形態５のデータ並び替え器の構成図
【図２３】「ｖａｌｎｐｓｈｆｌ２．８  ＸＤｄ，ＸＤａ，ＸＤｂ，ＸＤｃ」命令の動作を示す図
【発明を実施するための形態】
【００１２】
以下、適宜図面を参照しながら、実施の形態を詳細に説明する。但し、必要以上に詳細な説明は省略する場合がある。例えば、既によく知られた事項の詳細説明や実質的に同一の構成に対する重複説明を省略する場合がある。これは、以下の説明が不必要に冗長になるのを避け、当業者の理解を容易にするためである。
【００１３】
なお、発明者は、当業者が本開示を十分に理解するために添付図面及び以下の説明を提供するのであって、これらによって特許請求の範囲に記載の主題を限定することを意図するものではない。
【００１４】
（実施の形態１）
以下、図２〜１１を用いて、実施の形態１を説明する。
【００１５】
［１−１．構成］
図２は、実施の形態１のプロセッサの構成図である。
【００１６】
図２において、本実施の形態のプロセッサは、命令メモリ０２０１、命令フェッチ部０２０２、命令デコーダ０２０３、レジスタファイル０２０４、メモリアクセス部０２０５、データ並び替え器０２０６、ＡＬＵ（算術論理演算器）０２０７、乗算器０２０８、バレルシフタ０２０９及びデータメモリ０２１０を備える。なお、本開示のプロセッサが持つ演算器は一例であり、一部の演算器がない構成や、これ以外の演算器がある構成も考えられる。例えば、プロセッサが持つ演算器としては、除算器、指数・対数演算器、三角関数演算器及び平方根演算器などが考えられる。
【００１７】
命令メモリ０２０１は、本演算装置の動作を指示する命令を格納するメモリである。命令フェッチ部０２０２は、次に実行する命令を命令メモリ０２０１から取得し、取得した命令を命令デコーダ０２０３に出力する。命令デコーダ０２０３は、命令フェッチ部０２０２が出力した命令を解読し、命令を実行する演算器を決定し、演算器群内のメモリアクセス部０２０５、データ並び替え器０２０６、ＡＬＵ０２０７、乗算器０２０８及びバレルシフタ０２０９のうち、少なくとも１つに実行制御信号を出力する。メモリアクセス部０２０５は、命令デコーダ０２０３からの実行制御信号に従って、データメモリ０２１０からデータを取得してレジスタファイル０２０４に出力するか、レジスタファイル０２０４からデータを取得してデータメモリ０２１０に出力する。データ並び替え器０２０６は、レジスタファイル０２０４からデータを取得してデータの並び替えを行い、結果をレジスタファイル０２０４に出力する。ＡＬＵ０２０７は、レジスタファイル０２０４からデータを取得して算術論理演算を行い、結果をレジスタファイル０２０４に出力する。乗算器０２０８は、レジスタファイル０２０４からデータを取得して乗算演算を行い、結果をレジスタファイル０２０４に出力する。バレルシフタ０２０９は、レジスタファイル０２０４からデータを取得してシフト演算を行い、結果をレジスタファイル０２０４に出力する。レジスタファイル０２０４は、演算器群内の各演算器が出力するデータを保持するレジスタである。データメモリ０２１０は、本プロセッサで演算に必要なデータを格納するメモリである。なお、命令メモリ０２０１とデータメモリ０２１０は、それぞれ個別のメモリに実装されてもよいし、１つのメモリを共用する形で実装されてもよい。
【００１８】
図３は、レジスタファイル０２０４が持つレジスタの一覧図である。レジスタファイル０２０４は、汎用レジスタとＸＡＬＮレジスタとで構成される。図３の（ａ）は、レジスタファイル０２０４を構成する汎用レジスタの一覧図である。図３の（ｂ）は、レジスタファイル０２０４を構成するＸＡＬＮレジスタの一覧図である。汎用レジスタは、演算器に入力するデータや、演算結果を格納するためのレジスタである。汎用レジスタは、３２本の３２ビットのＲレジスタ（Ｒ０〜Ｒ３１）、３２本の６４ビットのＸＤレジスタ（ＸＤ０〜ＸＤ３１）、１６本の１２８ビットのＸＱレジスタ（ＸＱ０〜ＸＱ３０）の３種類があり、この３種類のレジスタの実体は同じである。つまり、レジスタに格納されるデータサイズにより、Ｒレジスタ、ＸＤレジスタ及びＸＱレジスタは使い分けられる。ＸＡＬＮレジスタは、ＸＡＬＮ０〜ＸＡＬＮ３の４本の４ビットレジスタで、特定の命令のデータ切り出し位置を指定するパラメータを格納するレジスタである。
【００１９】
図４の（ａ）は、Ｒレジスタ、ＸＤレジスタ及びＸＱレジスタの関係を示す図である。図４の（ｂ）は、ＸＤレジスタ及びＸＱレジスタの関係を示す図である。この３種類のレジスタの実体は同じなので、例えば、ＸＤ０を読み出すと、ＸＱ０の［１２７：６４］ビット目のデータを読み出すことができ、ＸＤ１を読み出すとＸＱ０の［６３：０］ビット目のデータを読み出すことができる。同様に、Ｒ０を読み出すとＸＤ０の［６３：３２］ビット目のデータを読み出すことができ、Ｒ１を読み出すとＸＤ０の［３１：０］ビット目のデータを読み出すことができる。ただし、Ｒレジスタと対応するＸＤレジスタは図４の（ａ）に示されるようにＸＤ０〜ＸＤ１５までで、図４の（ｂ）に示されるようにＸＤ１６〜ＸＤ３１はＲレジスタとは対応しない。
【００２０】
図５は、データ並び替え器０２０６の構成図である。図５において、データ並び替え器０２０６は、データ切り出し部Ａ０５０１、データ切り出し部Ｂ０５０２及びデータ連結部０５０３を備え、命令デコーダ０２０３からの実行制御信号に従って動作する。命令メモリ０２０１に格納されたデータ並び替え命令が命令デコーダ０２０３で解読されることで、命令デコーダ０２０３からの実行制御信号は、データ並び替え器０２０６へ送られる。ここで、データ並び替え命令は、演算対象データである入力データＡを格納するレジスタと演算対象データである入力データＢを格納するレジスタとをレジスタファイル０２０４から指定する命令である。つまり、データ並び替え命令が命令デコーダ０２０３で解読されることによって出力される実行制御信号に従って、データ並べ替え器０２０６は、入力データＡと入力データＢとをレジスタファイル０２０４から取得する。
【００２１】
データ切り出し部Ａ０５０１は、レジスタファイル０２０４から取得した入力データＡに対応して設けられ、入力データＡから所定数（ここでは、入力データＡのデータ要素数の半分）のデータ要素の切り出しを行う。データ切り出し部Ｂ０５０２は、レジスタファイル０２０４から取得した入力データＢに対応して設けられ、入力データＢから所定数（ここでは、入力データＢのデータ要素数の半分）のデータ要素の切り出しを行う。データ連結部０５０３は、データ切り出し部Ａ０５０１及びデータ切り出し部Ｂ０５０２で切り出された２つの部分データを連結し、データ並び替え器０２０６から出力する。
【００２２】
［１−２．動作］
以上のように構成された本実施の形態のプロセッサについて、その動作を以下に説明する。
【００２３】
図６は、本実施の形態のプロセッサが扱うベクタデータの一覧図である。本プロセッサでは３２ビットベクタ、６４ビットベクタ、１２８ビットベクタの３種類のベクタデータを扱う。なお、ここで説明するベクタデータの種類は、以降の実施の形態においても同様である。
【００２４】
図６の（ａ）は、３２ビットベクタを示す図である。３２ビットベクタは、Ｒレジスタに格納され、４個の８ビットのデータ要素で構成されるバイトベクタと、２個の１６ビットのデータ要素で構成されるハーフワードベクタとの２つがある。
【００２５】
図６の（ｂ）は、６４ビットベクタを示す図である。６４ビットベクタは、ＸＤレジスタに格納され、８個の８ビットのデータ要素で構成されるバイトベクタと、４個の１６ビットのデータ要素で構成されるハーフワードベクタと、２個の３２ビットのデータ要素で構成されるワードベクタとの３つがある。
【００２６】
図６の（ｃ）は、１２８ビットベクタを示す図である。１２８ビットベクタは、ＸＱレジスタに格納され、１６個の８ビットのデータ要素で構成されるバイトベクタと、８個の１６ビットのデータ要素で構成されるハーフワードベクタと、４個の３２ビットのデータ要素で構成されるワードベクタと、２個の６４ビットのデータ要素で構成されるダブルワードベクタとの４つがある。
【００２７】
なお、それぞれのデータ要素は、ビット幅が一致すればどのようなデータも格納してもよい。例えば、整数、固定小数点数、浮動小数点数などがそれぞれのデータ要素に格納される。
【００２８】
図７は、「ｖａｌｎｐＸ．８  ＸＤｃ，ＸＤａ，ＸＤｂ」命令（ｖａｌｎｐＸ．８のＸは０〜４）の動作を示す図である。つまり、図７の（ａ）は「ｖａｌｎｐ０．８  ＸＤｃ，ＸＤａ，ＸＤｂ」命令の動作を示す図である。図７の（ｂ）は「ｖａｌｎｐ１．８  ＸＤｃ，ＸＤａ，ＸＤｂ」命令の動作を示す図である。図７の（ｃ）は「ｖａｌｎｐ２．８  ＸＤｃ，ＸＤａ，ＸＤｂ」命令の動作を示す図である。図７の（ｄ）は「ｖａｌｎｐ３．８  ＸＤｃ，ＸＤａ，ＸＤｂ」命令の動作を示す図である。図７の（ｅ）は「ｖａｌｎｐ４．８  ＸＤｃ，ＸＤａ，ＸＤｂ」命令の動作を示す図である。
【００２９】
図７で示される「ｖａｌｎｐＸ．８  ＸＤｃ，ＸＤａ，ＸＤｂ」命令は、命令デコーダ０２０３で解読され、データ並び替え器０２０６で実行されるデータ並び替え命令である。「ｖａｌｎｐＸ．８」の「８」は演算対象データがバイトベクタであることを示す。レジスタＸＤａに格納された６４ビットのバイトベクタ｛ａ０，ａ１，ａ２，ａ３，ａ４，ａ５，ａ６，ａ７｝と、レジスタＸＤｂに格納された６４ビットのバイトベクタ｛ｂ０，ｂ１，ｂ２，ｂ３，ｂ４，ｂ５，ｂ６，ｂ７｝とを入力として、命令デコーダ０２０３からの実行制御信号に従って、ベクタデータそれぞれから、データ要素は切り出される。このように、６４ビットのベクタデータが生成され、生成された６４ビットのベクタデータはレジスタＸＤｃに格納される。具体的には、以下の動作が行われる。
【００３０】
「ｖａｌｎｐＸ．８  ＸＤｃ，ＸＤａ，ＸＤｂ」命令が、命令デコーダ０２０３で解読されると、命令デコーダ０２０３からの実行制御信号に従って、演算対象データが格納されたレジスタＸＤａとレジスタＸＤｂとが指定される。次に、レジスタＸＤａに格納された演算対象データである６４ビットのバイトベクタから、この６４ビットのバイトベクタに対応するデータ切り出し部Ａ０５０１は、元の６４ビットの半分のサイズである３２ビットのベクタデータを切り出す。また、レジスタＸＤｂに格納された演算対象データである６４ビットのバイトベクタから、この６４ビットのバイトベクタに対応するデータ切り出し部Ｂ０５０２は、元の６４ビットのバイトベクタから半分のサイズである３２ビットのベクタデータを切り出す。次に、切り出された２つのベクタデータを、データ連結部０５０３は連結して６４ビットのベクタデータを生成する。最後に、生成された６４ビットのベクタデータはレジスタＸＤｃに格納される。
【００３１】
データ切り出し部Ａ０５０１とデータ切り出し部Ｂ０５０２とは、それぞれ、対応する演算対象データから、データ並び替え命令のオペコードで指定される位置にあるデータ要素を切り出す。つまり、データ切り出し部Ａ０５０１とデータ切り出し部Ｂ０５０２とでのデータ切り出し位置は、「ｖａｌｎｐＸ．８  ＸＤｃ，ＸＤａ，ＸＤｂ」命令のオペコード「ｖａｌｎｐＸ．８」のＸで指定され、かつ、それぞれのデータ切り出し位置は、それぞれ切り出される６４ビットのバイトベクタの同じ位置となる。具体的には、以下の動作が行われる。
【００３２】
「ｖａｌｎｐ０．８」命令では、それぞれのバイトベクタのＭＳＢから０バイト目の位置からベクタデータが切り出される。
【００３３】
「ｖａｌｎｐ１．８」命令では、それぞれのバイトベクタのＭＳＢから１バイト目の位置からベクタデータが切り出される。
【００３４】
「ｖａｌｎｐ２．８」命令では、それぞれのバイトベクタのＭＳＢから２バイト目の位置からベクタデータが切り出される。
【００３５】
「ｖａｌｎｐ３．８」命令では、それぞれのバイトベクタのＭＳＢから３バイト目の位置からベクタデータが切り出される。
【００３６】
「ｖａｌｎｐ４．８」命令では、それぞれのバイトベクタのＭＳＢから４バイト目の位置からベクタデータが切り出される。
【００３７】
次に、図８は、「ｖａｌｎｐＸ．１６  ＸＤｃ，ＸＤａ，ＸＤｂ」（ｖａｌｎｐＸ．１６のＸは０〜２）命令の動作を示す図である。つまり、図８の（ａ）は「ｖａｌｎｐ０．１６  ＸＤｃ，ＸＤａ，ＸＤｂ」命令の動作を示す図である。図８の（ｂ）は「ｖａｌｎｐ１．１６  ＸＤｃ，ＸＤａ，ＸＤｂ」命令の動作を示す図である。図８の（ｃ）は「ｖａｌｎｐ２．１６  ＸＤｃ，ＸＤａ，ＸＤｂ」命令の動作を示す図である。
【００３８】
図８で示される「ｖａｌｎｐＸ．１６  ＸＤｃ，ＸＤａ，ＸＤｂ」命令は、命令デコーダ０２０３で解読され、データ並び替え器０２０６で実行されるデータ並び替え命令である。「ｖａｌｎｐＸ．１６」の「１６」は演算対象データがハーフワードベクタであることを示す。レジスタＸＤａに格納された６４ビットのハーフワードベクタ｛ａ０，ａ１，ａ２，ａ３｝と、レジスタＸＤｂに格納された６４ビットのハーフワードベクタ｛ｂ０，ｂ１，ｂ２，ｂ３｝とを入力として、命令デコーダ０２０３からの実行制御信号に従って、ベクタデータそれぞれから、データ要素は切り出される。このように、６４ビットのベクタデータが生成され、生成された６４ビットのベクタデータはレジスタＸＤｃに格納される。具体的には、以下の動作が行われる。
【００３９】
「ｖａｌｎｐＸ．１６  ＸＤｃ，ＸＤａ，ＸＤｂ」命令が、命令デコーダ０２０３で解読されると、命令デコーダ０２０３からの実行制御信号に従って、演算対象データが格納されたレジスタＸＤａとレジスタＸＤｂとが指定される。次に、レジスタＸＤａに格納された演算対象データである６４ビットのハーフワードベクタから、この６４ビットのハーフワードベクタに対応するデータ切り出し部Ａ０５０１は、元の６４ビットの半分のサイズである３２ビットのベクタデータを切り出す。また、レジスタＸＤｂに格納された演算対象データである６４ビットのハーフワードベクタから、この６４ビットのハーフワードベクタに対応するデータ切り出し部Ｂ０５０２は、元の６４ビットの半分のサイズである３２ビットのベクタデータを切り出す。次に、切り出された２つのベクタデータを、データ連結部０５０３は連結して６４ビットのベクタデータを生成する。生成された６４ビットのベクタデータはレジスタＸＤｃに格納される。
【００４０】
データ切り出し部Ａ０５０１とデータ切り出し部Ｂ０５０２とでのデータ切り出し位置は、「ｖａｌｎｐＸ．１６  ＸＤｃ，ＸＤａ，ＸＤｂ」命令のオペコード「ｖａｌｎｐＸ．１６」のＸで指定され、かつ、それぞれのデータ切り出し位置は、それぞれ切り出される６４ビットのハーフワードベクタの同じ位置となる。具体的には、以下の動作が行われる。
【００４１】
「ｖａｌｎｐ０．１６」命令ではそれぞれのハーフワードベクタのＭＳＢから０ハーフワード目の位置からベクタデータが切り出される。
【００４２】
「ｖａｌｎｐ１．１６」命令ではそれぞれのハーフワードベクタのＭＳＢから１ハーフワード目の位置からベクタデータが切り出される。
【００４３】
「ｖａｌｎｐ２．１６」命令ではそれぞれのハーフワードベクタのＭＳＢから２ハーフワード目の位置からベクタデータが切り出される。
【００４４】
次に、図９は、「ｖａｌｎｐＸ．３２  ＸＤｃ，ＸＤａ，ＸＤｂ」（ｖａｌｎｐＸ．１６のＸは０〜１）命令の動作を示す図である。つまり、図９の（ａ）は「ｖａｌｎｐ０．３２  ＸＤｃ，ＸＤａ，ＸＤｂ」命令の動作を示す図である。図９の（ｂ）は「ｖａｌｎｐ１．３２  ＸＤｃ，ＸＤａ，ＸＤｂ」命令の動作を示す図である。
【００４５】
図９で示される「ｖａｌｎｐＸ．３２  ＸＤｃ，ＸＤａ，ＸＤｂ」命令は、命令デコーダ０２０３で解読され、データ並び替え器０２０６で実行されるデータ並び替え命令である。「ｖａｌｎｐＸ．３２」の「３２」は演算対象データがワードベクタであることを示す。レジスタＸＤａに格納された６４ビットのワードベクタ｛ａ０，ａ１｝と、レジスタＸＤｂに格納された６４ビットのワードベクタ｛ｂ０，ｂ１｝とを入力として、命令デコーダ０２０３からの実行制御信号に従って、ベクタデータそれぞれから、データ要素は切り出される。このように、６４ビットのベクタデータが生成され、生成された６４ビットのベクタデータはレジスタＸＤｃに格納される。具体的には、以下の動作が行われる。
【００４６】
「ｖａｌｎｐＸ．３２  ＸＤｃ，ＸＤａ，ＸＤｂ」命令が、命令デコーダ０２０３で解読されると、命令デコーダ０２０３からの実行制御信号に従って、演算対象データが格納されたレジスタＸＤａとレジスタＸＤｂとが指定される。次に、レジスタＸＤａに格納された演算対象データである６４ビットのワードベクタから、この６４ビットのワードベクタに対応するデータ切り出し部Ａ０５０１は、元の６４ビットの半分のサイズである３２ビットのベクタデータを切り出す。また、レジスタＸＤｂに格納された演算対象データである６４ビットのワードベクタから、この６４ビットのワードベクタに対応するデータ切り出し部Ｂ０５０２は、元の６４ビットの半分のサイズである３２ビットのベクタデータを切り出す。次に、切り出された２つのベクタデータを、データ連結部０５０３は連結して６４ビットのベクタデータを生成する。生成された６４ビットのベクタデータはレジスタＸＤｃに格納される。
【００４７】
データ切り出し部Ａ０５０１とデータ切り出し部Ｂ０５０２とでのデータ切り出し位置は、「ｖａｌｎｐＸ．３２  ＸＤｃ，ＸＤａ，ＸＤｂ」命令のオペコード「ｖａｌｎｐＸ．３２」のＸで指定され、かつ、それぞれのデータ切り出し位置は、それぞれ切り出される６４ビットのワードベクタの同じ位置となる。具体的には、以下の動作が行われる。
【００４８】
「ｖａｌｎｐ０．３２」命令ではそれぞれのワードベクタのＭＳＢから０ワード目の位置からデータが切り出される。
【００４９】
「ｖａｌｎｐ１．３２」命令ではそれぞれのワードベクタのＭＳＢから１ワード目の位置からデータが切り出される。
【００５０】
なお、図７〜９で示される命令では、データ切り出し位置はオペコードで指定されたが、オペコードに限らず、即値オペランド（ここでは、Ｉｍｍ）やレジスタオペランド（ここでは、ＸＡＬＮｘ）で指定されても構わない。
【００５１】
図１０は、「ｖａｌｎｐ．８  ＸＤｃ，ＸＤａ，ＸＤｂ，Ｉｍｍ」命令、「ｖａｌｎｐ．８  ＸＤｃ，ＸＤａ，ＸＤｂ，ＸＡＬＮｘ」命令及び「ｖａｌｎｐｉＸ．８  ＸＤｃ，ＸＤａ，ＸＤｂ，ＸＡＬＮｘ」命令の動作を示す図である。
【００５２】
図１０では、例として、即値オペランドＩｍｍ、及び、レジスタオペランドＸＡＬＮｘに格納された値に２が指定されており、図１０で示されるそれぞれの命令では、具体的には、以下の動作が行われる。
【００５３】
レジスタＸＤａに格納された６４ビットのバイトベクタ｛ａ０，ａ１，ａ２，ａ３，ａ４，ａ５，ａ６，ａ７｝と、レジスタＸＤｂに格納された６４ビットのバイトベクタ｛ｂ０，ｂ１，ｂ２，ｂ３，ｂ４，ｂ５，ｂ６，ｂ７｝とから、元の６４ビットの半分のサイズである３２ビットのベクタデータは、それぞれのバイトベクタのＭＳＢから２バイト目の位置から切り出される。次に、切り出された２つのベクタデータ｛ａ２，ａ３，ａ４，ａ５｝と｛ｂ２，ｂ３，ｂ４，ｂ５｝とは、連結されて６４ビットのベクタデータ｛ａ２，ａ３，ａ４，ａ５，ｂ２，ｂ３，ｂ４，ｂ５｝になる。最後に、連結された６４ビットのベクタデータはレジスタＸＤｃに格納される。
【００５４】
ここで、図１０で示される「ｖａｌｎｐ．８  ＸＤｃ，ＸＤａ，ＸＤｂ，Ｉｍｍ」命令では、データ切り出し位置はオペコードではなく、データ並び替え命令の即値オペランドで指定される。例えば、Ｉｍｍオペランドに２が指定されると、図１０に示されるように、それぞれのバイトベクタのＭＳＢから２バイト目の位置から、ベクタデータが切り出される。
【００５５】
また、図１０で示される「ｖａｌｎｐ．８  ＸＤｃ，ＸＤａ，ＸＤｂ，ＸＡＬＮｘ」命令では、データ切り出し位置は、オペコードではなく切り出し位置レジスタであるレジスタオペランドに格納される値で指定される。この命令では、データ切り出し部Ａ０５０１と切り出し部Ｂ０５０２とは、それぞれ、対応する演算対象データから、レジスタオペランドＸＡＬＮｘに格納された値で指定される位置にあるデータ要素を切り出す。例えば、レジスタＸＡＬＮｘに２が格納されると、図１０に示されるように、それぞれのバイトベクタのＭＳＢから２バイト目の位置から、ベクタデータが切り出される。なお、６４ビットのバイトベクタはデータ要素数が８個であるため、レジスタＸＡＬＮｘに３ビットを超える（つまり、８以上の）値が格納された場合は、３ビットを超えたビットを捨てた値（つまり、格納された値を８で割った余り）の位置にあるデータ要素が切り出される。例えば、レジスタＸＡＬＮｘに９が格納されると、それぞれのバイトベクタのＭＳＢから９を８で割った余りである１バイト目の位置から、ベクタデータが切り出される。
【００５６】
また、図１０で示される「ｖａｌｎｐｉＸ．８  ＸＤｃ，ＸＤａ，ＸＤｂ，ＸＡＬＮｘ」命令（ｖａｌｎｐｉＸ．８のＸは１〜７）では、「ｖａｌｎｐ．８  ＸＤｃ，ＸＤａ，ＸＤｂ，ＸＡＬＮｘ」命令と同じようにデータが切り出されて連結される。なお、「ｖａｌｎｐｉＸ．８  ＸＤｃ，ＸＤａ，ＸＤｂ，ＸＡＬＮｘ」命令では、「ｖａｌｎｐ．８  ＸＤｃ，ＸＤａ，ＸＤｂ，ＸＡＬＮｘ」命令と同じように、６４ビットのバイトベクタはデータ要素数が８個であるため、レジスタＸＡＬＮｘに、３ビットを超える値が格納された場合は、３ビットを超えたビットを捨てた値の位置にあるデータ要素が切り出される。その後、オペコードの「ｖａｌｎｐｉＸ．８」のＸで指定された値を、レジスタＸＡＬＮｘの格納された値は加算される。つまり、「ｖａｌｎｐｉＸ．８  ＸＤｃ，ＸＤａ，ＸＤｂ，ＸＡＬＮｘ」命令が実行されると、レジスタＸＡＬＮｘに格納された値はＸで指定された値により変更される。そして、次にレジスタＸＡＬＮｘが使用されるデータ並び替え命令では、レジスタＸＡＬＮｘに格納された値で指定されるデータ切り出し位置は、Ｘで指定された所望のデータ切り出し位置となる。なお、レジスタＸＡＬＮｘは４ビット幅であり４ビットを超える（つまり、１６以上の）値を格納できないため、レジスタＸＡＬＮｘにＸで指定された値が加算されて１６以上となった値が格納される場合は、４ビットを超えたビットを捨てた値（つまり、Ｘで指定された値が加算された値を１６で割った余り）がレジスタＸＡＬＮｘに格納される。例えば、レジスタＸＡＬＮｘに１５が格納されており、Ｘで２が指定された場合、加算後の値は、レジスタＸＡＬＮｘに格納された１５にＸで指定された２が加算され１７となる。しかし、加算後の値の１７はレジスタＸＡＬＮｘが格納できる４ビットを超えるため、１７を１６で割った余りである１がレジスタＸＡＬＮｘに格納される。
【００５７】
なお、図１０で示される命令はバイトベクタを入力とした命令であるが、図８〜９に示される命令のように、ハーフワードベクタ、ワードベクタを入力とする命令でも良い。この命令では、図８〜９に示される命令と同じデータが生成されるが、データ切り出し位置がオペコードではなく、即値オペランドＩｍｍ、及び、レジスタオペランドＸＡＬＮｘに格納された値で指定される点が異なる。また、６４ビットのハーフワードベクタはデータ要素数が４個であるため、レジスタＸＡＬＮｘに２ビットを超える（つまり、４以上の）値が格納された場合は、２ビットを超えたビットを捨てた値（つまり、格納された値を４で割った余り）の位置にあるデータ要素が切り出される。また、６４ビットのワードベクタはデータ要素数が２個であるため、レジスタＸＡＬＮｘに１ビットを超える（つまり、２以上の）値が格納された場合は、１ビットを超えたビットを捨てた値（つまり、格納された値を２で割った余り）の位置にあるデータ要素が切り出される。
【００５８】
また図１０で示されるレジスタオペランドＸＡＬＮｘを使用した命令では、データ切り出し位置の値を格納するレジスタとしてレジスタＸＡＬＮｘが指定されたが、これ以外のレジスタが指定されても良い。例えば、Ｒレジスタ、ＸＤレジスタ、ＸＱレジスタが指定されても良い。また、データ切り出し位置の値を格納するレジスタが１つに固定される命令であれば、レジスタの指定を省略した命令でも良い。
【００５９】
また、図７〜９で示される命令は、３つのレジスタオペランドＸＤａ，ＸＤｂ，ＸＤｃのレジスタ番号ａ，ｂ，ｃをそれぞれ別々に指定できる命令であるが、一部のレジスタオペランドのレジスタ番号は連番でなければならないという制約を持つ命令でも良い。例えば、レジスタＸＤａとレジスタＸＤｂとは連番でなければならないという制約を加えられた命令では、もとのレジスタＸＤａとレジスタＸＤｂとをそれぞれレジスタＸＤａとレジスタＸＤａ＋１とし、さらに、もとのレジスタＸＤｃをレジスタＸＤｂとしても良い。具体的には、図７で示される「ｖａｌｎｐＸ．８  ＸＤｃ，ＸＤａ，ＸＤｂ」命令、図８で示される「ｖａｌｎｐＸ．１６  ＸＤｃ，ＸＤａ，ＸＤｂ」命令及び図９で示される「ｖａｌｎｐＸ．３２  ＸＤｃ，ＸＤａ，ＸＤｂ」命令はこの制約が加えられると、それぞれ「ｖａｌｎｐＸ．８  ＸＤｂ，ＸＤａ，ＸＤａ＋１」命令、「ｖａｌｎｐＸ．１６  ＸＤｂ，ＸＤａ，ＸＤａ＋１」命令及び「ｖａｌｎｐＸ．３２  ＸＤｂ，ＸＤａ，ＸＤａ＋１」命令となる。こうすることで、ａ，ｂの２つのレジスタ番号で３つのレジスタオペランドは表現される。つまり、命令コードにおいてレジスタオペランドを表現するために必要なビット長は減らされるので、命令コード長は抑えられる。これによって、命令メモリ０２０１のサイズは小さくなるので、命令メモリのコストは削減される。
【００６０】
また、図７〜１０で示される命令では、データ切り出し位置は、ＭＳＢからの位置で指定されているが、ＬＳＢからの位置で指定されても良い。
【００６１】
また、本実施の形態のプロセッサは、演算対象データとして６４ビットベクタのベクタデータを扱ったが、３２ビットベクタ及び１２８ビットベクタのベクタデータを扱っても良い。
【００６２】
［１−３．効果等］
本開示の実施の形態１のプロセッサでは、２つのレジスタに格納されたそれぞれのベクタデータから元の半分のサイズのデータを切り出し、切り出した２つのデータを連結する一連の処理を１命令で実行することができ、データの並び替えの処理サイクル数を削減することによって、処理速度を向上することができる。
【００６３】
図１１は、実施の形態１と従来とのデータの並び替えの処理を示す図である。つまり、図１１の（ａ）は、実施の形態１の「ｖａｌｎｐ１．１６  ＸＤｃ，ＸＤａ０，ＸＤｂ０」命令の動作を示す図である。図１１の（ｂ）は、従来の「ｖａｌｎ１  ＸＤａ２，ＸＤａ０，ＸＤａ１」命令の動作を示す図である。図１１の（ｃ）は、従来の「ｖａｌｎ１  ＸＤｂ２，ＸＤｂ０，ＸＤｂ１」命令の動作を示す図である。図１１の（ｄ）は、従来のレジスタＸＤａ２とレジスタＸＤｂ２とを結合する命令の動作を示す図である。
【００６４】
図１１の（ａ）で示される命令では、レジスタＸＤａ０に格納されたベクタデータ｛ａ０，ａ１，ａ２，ａ３｝とレジスタＸＤｂ０に格納されたベクタデータ｛ｂ１，ｂ２，ｂ３，ｂ４｝とから、元の半分のサイズのデータが、ＭＳＢから１ハーフワード目の位置から切り出される。次に、切り出された２つのデータは連結されてベクタデータ｛ａ１，ａ２，ｂ１，ｂ２｝になる。最後に、連結されたベクタデータはレジスタＸＤｃに格納される。図１１の（ａ）で示される命令では、これら一連の動作は１命令で実行されている。
【００６５】
しかし、従来では、図１１の（ａ）で示されるベクタデータ｛ａ１，ａ２，ｂ１，ｂ２｝を生成するために、図１１の（ｂ）〜（ｄ）で示される命令がそれぞれ実行される。
【００６６】
つまり、図１１の（ｂ）で示される「ｖａｌｎ１  ＸＤａ２，ＸＤａ０，ＸＤａ１」命令によりベクタデータ｛ａ１，ａ２，ａ３，ａ４｝が生成され、次に、図１１の（ｃ）で示される「ｖａｌｎ１  ＸＤｂ２，ＸＤｂ０，ＸＤｂ１」命令によりベクタデータ｛ｂ１，ｂ２，ｂ３，ｂ４｝が生成され、最後に、図１１の（ｄ）で示されるレジスタＸＤａ２とレジスタＸＤｂ２とを結合する命令によりベクタデータ｛ａ１，ａ２，ｂ１，ｂ２｝が生成される。具体的には、以下の動作が行われる。
【００６７】
図１１の（ｂ）で示される「ｖａｌｎ１  ＸＤａ２，ＸＤａ０，ＸＤａ１」命令では、レジスタＸＤａ０に格納されたベクタデータ｛ａ０，ａ１，ａ２，ａ３｝とレジスタＸＤａ１に格納されたベクタデータ｛ａ４，ａ５，ａ６，ａ７｝とは連結される。次に、連結されて生成されたベクタデータ｛ａ０，ａ１，ａ２，ａ３，ａ４，ａ５，ａ６，ａ７｝のＭＳＢから１ハーフワード目の位置からベクタデータは切り出される。切り出されたベクタデータ｛ａ１，ａ２，ａ３，ａ４｝は、レジスタＸＤａ２に格納される。
【００６８】
次に、図１１の（ｃ）で示される「ｖａｌｎ１  ＸＤｂ２，ＸＤｂ０，ＸＤｂ１」命令では、レジスタＸＤｂ０に格納されたベクタデータ｛ｂ０，ｂ１，ｂ２，ｂ３｝とレジスタＸＤｂ１に格納されたベクタデータ｛ｂ４，ｂ５，ｂ６，ｂ７｝とは連結される。次に、連結されて生成されたベクタデータ｛ｂ０，ｂ１，ｂ２，ｂ３，ｂ４，ｂ５，ｂ６，ｂ７｝のＭＳＢから１ハーフワード目の位置からベクタデータは切り出される。切り出されたベクタデータ｛ｂ１，ｂ２，ｂ３，ｂ４｝は、レジスタＸＤｂ２に格納される。
【００６９】
最後に、図１１の（ｄ）で示されるレジスタＸＤａ２とレジスタＸＤｂ２とを結合する命令では、レジスタＸＤａ２に格納されたベクタデータ｛ａ１，ａ２，ａ３，ａ４｝の上位２ハーフワードとレジスタＸＤｂ２に格納されたベクタデータ｛ｂ１，ｂ２，ｂ３，ｂ４｝の上位２ハーフワードとが連結されることで、ベクタデータ｛ａ１，ａ２，ｂ１，ｂ２｝が生成される。生成されたベクタデータは、レジスタＸＤｃに格納される。
【００７０】
このように、例えば、データ｛ａ０，ａ１，ａ２，ａ３｝とデータ｛ｂ０，ｂ１，ｂ２，ｂ３｝とのうちのデータ｛ａ１，ａ２｝と｛ｂ１，ｂ２｝とに、同一の演算を実行するために、１つのレジスタに格納されたデータ｛ａ１，ａ２，ｂ１，ｂ２｝が生成されるが、従来のプロセッサでは、このようなデータを生成するために、上述した３つの命令が必要となる。一方、実施の形態１のプロセッサでは、演算が実行されるデータのみを切り出して切り出したデータを連結する、一連の処理を１命令で実行することができる。これにより、データの並び替えの処理サイクル数が削減されるので、処理速度を向上することができる。
【００７１】
（実施の形態２）
以下、図１２〜１４を用いて、実施の形態２を説明する。
【００７２】
［２−１．構成］
図１２は、実施の形態２のプロセッサの構成図である。
【００７３】
図１２において、本実施の形態のプロセッサは、データ並び替え器０２０６の代わりにデータ並び替え器１２０６を備え、命令デコーダ０２０３の代わりに命令デコーダ１２０３を備える点が、実施の形態１のプロセッサと異なる。それ以外の構成要素は実施の形態１のプロセッサと同じであるため、同じ符号をつけて説明は省略する。
【００７４】
命令デコーダ１２０３は、本実施の形態で説明する命令を解読し、データ並び替え器１２０６を含む演算器群に実行制御信号を出力する点が実施の形態１の命令デコーダ０２０３と異なる。
【００７５】
図１３は、データ並び替え器１２０６の構成図である。図１３において、データ並び替え器１２０６は、データ切り出し部Ａ１３０１、データ切り出し部Ｂ１３０２、データ切り出し部Ｃ１３０３、データ切り出し部Ｄ１３０４及びデータ連結部１３０５を備え、命令デコーダ１２０３からの実行制御信号に従って動作する。命令メモリ０２０１に格納されたデータ並び替え命令が命令デコーダ１２０３で解読されることで、命令デコーダ１２０３からの実行制御信号は、データ並び替え器１２０６へ送られる。ここで、データ並び替え命令は、演算対象データである入力データＡ〜Ｄそれぞれを格納するそれぞれのレジスタをレジスタファイル０２０４から指定する命令である。つまり、データ並び替え命令が命令デコーダ１２０３で解読されることによって出力される実行制御信号に従って、データ並べ替え器１２０６は、入力データＡ〜Ｄをレジスタファイル０２０４から取得する。データ並び替え器１２０６は、データ切り出し部が２つではなく４つ持つ点と、入力データが２つではなく４つである点が実施の形態１のデータ並び替え器０２０６と異なる。
【００７６】
データ切り出し部Ａ１３０１は、レジスタファイル０２０４から取得した入力データＡに対応して設けられ、入力データＡから所定数（ここでは、入力データＡのデータ要素数の半分）のデータ要素の切り出しを行う。データ切り出し部Ｂ１３０２は、レジスタファイル０２０４から取得した入力データＢに対応して設けられ、入力データＢから所定数（ここでは、入力データＢのデータ要素数の半分）のデータ要素の切り出しを行う。データ切り出し部Ｃ１３０３は、入力データＣに対応して設けられ、レジスタファイル０２０４から取得した入力データＣから所定数（ここでは、入力データＣのデータ要素数の半分）のデータ要素の切り出しを行う。データ切り出し部Ｄ１３０４は、入力データＤに対応して設けられ、レジスタファイル０２０４から取得した入力データＤから所定数（ここでは、入力データＤのデータ要素数の半分）のデータ要素の切り出しを行う。データ連結部１３０５は、データ切り出し部Ａ１３０１、データ切り出し部Ｂ１３０２、データ切り出し部Ｃ１３０３及びデータ切り出し部Ｄ１３０４で切り出された４つの部分データを連結し、データ並び替え器１２０６から出力する。
【００７７】
［２−２．動作］
以上のように構成された本開示のプロセッサについて、その動作を以下に説明する。
【００７８】
図１４は、「ｖａｌｎｑＸ．８  ＸＤｅ，Ｒａ，Ｒｂ，Ｒｃ，Ｒｄ」命令（ｖａｌｎｑＸ．８のＸは０〜２）の動作を示す図である。つまり、図１４の（ａ）は「ｖａｌｎｑ０．８  ＸＤｅ，Ｒａ，Ｒｂ，Ｒｃ，Ｒｄ」命令の動作を示す図である。図１４の（ｂ）は「ｖａｌｎｑ１．８  ＸＤｅ，Ｒａ，Ｒｂ，Ｒｃ，Ｒｄ」命令の動作を示す図である。図１４の（ｃ）は「ｖａｌｎｑ２．８  ＸＤｅ，Ｒａ，Ｒｂ，Ｒｃ，Ｒｄ」命令の動作を示す図である。
【００７９】
図１４で示される「ｖａｌｎｑＸ．８  ＸＤｅ，Ｒａ，Ｒｂ，Ｒｃ，Ｒｄ」命令は、命令デコーダ１２０３で解読され、データ並び替え器１２０６で実行されるデータ並び替え命令である。「ｖａｌｎｑＸ．８」の「８」は演算対象データがバイトベクタであることを示す。レジスタＲａに格納された３２ビットのバイトベクタ｛ａ０，ａ１，ａ２，ａ３｝と、レジスタＲｂに格納された３２ビットのバイトベクタ｛ｂ０，ｂ１，ｂ２，ｂ３｝と、レジスタＲｃに格納された３２ビットのバイトベクタ｛ｃ０，ｃ１，ｃ２，ｃ３｝と、レジスタＲｄに格納された３２ビットのバイトベクタ｛ｄ０，ｄ１，ｄ２，ｄ３｝とを入力として、命令デコーダ１２０３からの実行制御信号に従って、ベクタデータそれぞれから、データ要素は切り出される。このように、６４ビットのベクタデータが生成され、生成された６４ビットのベクタデータはレジスタＸＤｅに格納される。具体的には、以下の動作が行われる。
【００８０】
「ｖａｌｎｑＸ．８  ＸＤｅ，Ｒａ，Ｒｂ，Ｒｃ，Ｒｄ」命令が、命令デコーダ１２０３で解読されると、命令デコーダ１２０３からの実行制御信号に従って、演算対象データが格納されたレジスタＲａ〜Ｒｄが指定される。次に、レジスタＲａに格納された演算対象データである３２ビットのバイトベクタから、この３２ビットのバイトベクタに対応するデータ切り出し部Ａ１３０１は、元の３２ビットの半分のサイズである１６ビットのベクタデータを切り出す。また、レジスタＲｂに格納された演算対象データである３２ビットのバイトベクタから、この３２ビットのバイトベクタに対応するデータ切り出し部Ｂ１３０２は、元の３２ビットの半分のサイズである１６ビットのベクタデータを切り出す。また、レジスタＲｃに格納された演算対象データである３２ビットのバイトベクタから、この３２ビットのバイトベクタに対応するデータ切り出し部Ｃ１３０３は、元の３２ビットの半分のサイズである１６ビットのベクタデータを切り出す。また、レジスタＲｄに格納された演算対象データである３２ビットのバイトベクタから、この３２ビットのバイトベクタに対応するデータ切り出し部Ｄ１３０４は、元の３２ビットの半分のサイズである１６ビットのベクタデータを切り出す。次に、切り出された４つのベクタデータを、データ連結部１３０５は連結して６４ビットのベクタデータを生成する。生成された６４ビットのベクタデータはレジスタＸＤｅに格納される。
【００８１】
データ切り出し部Ａ１３０１とデータ切り出し部Ｂ１３０２とデータ切り出し部Ｃ１３０３とデータ切り出し部Ｄ１３０４とでのデータ切り出し位置は、「ｖａｌｎｑＸ．８  ＸＤｅ，Ｒａ，Ｒｂ，Ｒｃ，Ｒｄ」命令のオペコード「ｖａｌｎｑＸ．８」のＸで指定され、かつ、それぞれのデータ切り出し位置は、それぞれ切り出される３２ビットのバイトベクタの同じ位置となる。具体的には、以下の動作が行われる。
【００８２】
「ｖａｌｎｑ０．８」命令では、それぞれのバイトベクタのＭＳＢから０バイト目の位置からベクタデータが切り出される。
【００８３】
「ｖａｌｎｑ１．８」命令では、それぞれのバイトベクタのＭＳＢから１バイト目の位置からベクタデータが切り出される。
【００８４】
「ｖａｌｎｑ２．８」命令では、それぞれのバイトベクタのＭＳＢから２バイト目の位置からベクタデータが切り出される。
【００８５】
なお、図１４で示される命令はバイトベクタを入力とした命令であるが、ハーフワードベクタ、ワードベクタを入力とする命令でも良い。
【００８６】
また、図１４で示される命令では、データ切り出し位置はオペコードで指定されたが、即値オペランドで指定されても良い。例えば、「ｖａｌｎｑ．８  ＸＤｃ，ＸＤａ，ＸＤｂ，Ｉｍｍ」命令でも良い。この命令ではデータ切り出し位置は即値オペランドＩｍｍで指定される。例えば、Ｉｍｍオペランドに０が指定されるとＭＳＢから０バイト目の位置から、Ｉｍｍオペランドに１が指定されるとＭＳＢから１バイト目の位置から、ベクタデータが切り出される。
【００８７】
また、図１０で示される命令のように、レジスタオペランドで指定されたレジスタに格納された値でデータ切り出し位置が指定されても良い。例えば、データ切り出し位置の値は、ＸＡＬＮレジスタ、Ｒレジスタ、ＸＤレジスタ及びＸＱレジスタに格納される。また、データ切り出し位置の値を格納するレジスタが１つに固定される命令であれば、レジスタの指定を省略した命令でも良い。
【００８８】
また、図１４で示される命令は、５つのレジスタオペランドＲａ，Ｒｂ，Ｒｃ，Ｒｄ，ＸＤｅのレジスタ番号ａ，ｂ，ｃ，ｄ，ｅをそれぞれ別々に指定できる命令であるが、一部のレジスタオペランドのレジスタ番号は連番でなければならないという制約を持つ命令でも良い。例えば、レジスタＲａとレジスタＲｂ、レジスタＲｃとレジスタＲｄは連番でなければならないという制約を加えられた命令は、もとのレジスタＲａとレジスタＲｂとをそれぞれレジスタＲａとレジスタＲａ＋１とし、もとのレジスタＲｃとレジスタＲｄとをそれぞれレジスタＲｂとレジスタＲｂ＋１とし、さらに、もとのレジスタＸＤｅをレジスタＸＤｃとすることで、「ｖａｌｎｑＸ．８  ＸＤｃ，Ｒａ，Ｒａ＋１，Ｒｂ，Ｒｂ＋１」命令となっても良い。こうすることで、ａ，ｂ，ｃの３つのレジスタ番号で５つのレジスタオペランドは表現される。つまり、命令コードにおいてレジスタオペランドを表現するために必要なビット長は減らされるので、命令コード長は抑えられる。これによって、命令メモリ０２０１のサイズは小さくなるので、命令メモリのコストは削減される。
【００８９】
また、図１４で示される命令では、データ切り出し位置は、ＭＳＢからの位置で指定されているが、ＬＳＢからの位置で指定されても良い。
【００９０】
また、本実施の形態のプロセッサは、演算対象データとして３２ビットベクタのベクタデータを扱ったが、６４ビットベクタのベクタデータを扱っても良い。
【００９１】
［２−３．効果等］
本開示の実施の形態２のプロセッサでは、４つのレジスタに格納されたそれぞれのベクタデータから元の半分のサイズのデータを切り出し、切り出した４つのデータを連結する一連の処理を１命令で実行することができ、データの並び替えの処理サイクル数を削減することによって、処理速度を向上することができる。
【００９２】
（実施の形態３）
以下、図１５〜１７を用いて、実施の形態３を説明する。
【００９３】
［３−１．構成］
図１５は、実施の形態３のプロセッサの構成図である。
【００９４】
図１５において、本実施の形態のプロセッサは、データ並び替え器０２０６の代わりにデータ並び替え器１５０６を備え、命令デコーダ０２０３の代わりに命令デコーダ１５０３を備える点が、実施の形態１のプロセッサと異なる。それ以外の構成要素は実施の形態１のプロセッサと同じであるため、同じ符号をつけて説明は省略する。
【００９５】
命令デコーダ１５０３は、本実施の形態で説明する命令を解読し、データ並び替え器１５０６を含む演算器群に実行制御信号を出力する点が実施の形態１の命令デコーダ０２０３と異なる。
【００９６】
図１６は、データ並び替え器１５０６の構成図である。図１６において、データ並び替え器１５０６は、データ切り出し部Ａ１６０１、データ切り出し部Ｂ１６０２及びデータ連結部１６０３を備え、命令デコーダ１５０３からの実行制御信号に従って動作する。命令メモリ０２０１に格納されたデータ並び替え命令が命令デコーダ１５０３で解読されることで、命令デコーダ１５０３からの実行制御信号は、データ並び替え器１５０６へ送られる。ここで、データ並び替え命令は、２つの演算対象データを含む入力データＡを格納するレジスタをレジスタファイル０２０４から指定する命令である。つまり、データ並び替え命令が命令デコーダ１５０３で解読されることによって出力される実行制御信号に従って、データ並べ替え器１５０６は、入力データＡをレジスタファイル０２０４から取得する。データ並び替え器１５０６は、データ並び替え器０２０６と同じく２つのデータ切り出し部を持つが、入力データが２つではなく１つである点が実施の形態１のデータ並び替え器０２０６と異なる。
【００９７】
データ切り出し部Ａ１６０１は、入力データＡに含まれる２つの演算対象データのうち一方の演算対象データに対応して設けられる。また、データ切り出し部Ｂ１６０２は、入力データＡに含まれる２つの演算対象データのうち他方の演算対象データに対応して設けられる。データ切り出し部Ａ１６０１及びデータ切り出し部Ｂ１６０２は、それぞれ対応する演算対象データから所定数（ここでは、演算対象データそれぞれのデータ要素数の半分）のデータ要素の切り出しを行う。データ連結部１６０３は、データ切り出し部Ａ１６０１及びデータ切り出し部Ｂ１６０２で切り出された２つのデータを連結し、データ並び替え器１５０６から出力する。
【００９８】
［３−２．動作］
以上のように構成された本実施の形態のプロセッサについて、その動作を以下に説明する。
【００９９】
図１７は、「ｖａｌｎｐＸ．８  ＸＤｂ，ＸＱａ」命令（ｖａｌｎｐＸ．８のＸは０〜４）の動作を示す図である。つまり、図１７の（ａ）は「ｖａｌｎｐ０．８  ＸＤｂ，ＸＱａ」命令の動作を示す図である。図１７の（ｂ）は「ｖａｌｎｐ１．８  ＸＤｂ，ＸＱａ」命令の動作を示す図である。図１７の（ｃ）は「ｖａｌｎｐ２．８  ＸＤｂ，ＸＱａ」命令の動作を示す図である。図１７の（ｄ）は「ｖａｌｎｐ３．８  ＸＤｂ，ＸＱａ」命令の動作を示す図である。図１７の（ｅ）は「ｖａｌｎｐ４．８  ＸＤｂ，ＸＱａ」命令の動作を示す図である。
【０１００】
図１７で示される「ｖａｌｎｐＸ．８  ＸＤｂ，ＸＱａ」命令は、命令デコーダ１５０３で解読され、データ並び替え器１５０６で実行されるデータ並び替え命令である。「ｖａｌｎｐＸ．８」の「８」は演算対象データがバイトベクタであることを示す。レジスタＸＱａに格納された１２８ビットのバイトベクタ｛ａ０，ａ１，ａ２，ａ３，ａ４，ａ５，ａ６，ａ７，ａ８，ａ９，ａ１０，ａ１１，ａ１２，ａ１３，ａ１４，ａ１５｝を入力として、命令デコーダ１５０３からの実行制御信号に従って、ベクタデータから、データ要素は切り出される。このように、６４ビットのベクタデータは生成され、生成された６４ビットのベクタデータはレジスタＸＤｂに格納される。具体的には、以下の動作が行われる。
【０１０１】
「ｖａｌｎｐＸ．８  ＸＤｂ，ＸＱａ」命令が、命令デコーダ１５０３で解読されると、命令デコーダ１５０３からの実行制御信号に従って、２つの演算対象データが格納されたレジスタＸＱａが指定される。次に、レジスタＸＱａに格納された１２８ビットのバイトベクタの上位半分の６４ビットのバイトベクタ｛ａ０，ａ１，ａ２，ａ３，ａ４，ａ５，ａ６，ａ７｝から、この６４ビットのバイトベクタに対応するデータ切り出し部Ａ１６０１は、元の６４ビットの半分のサイズである３２ビットのベクタデータを切り出す。同時に、レジスタＸＱａに格納された１２８ビットのバイトベクタの下位半分の６４ビットのバイトベクタ｛ａ８，ａ９，ａ１０，ａ１１，ａ１２，ａ１３，ａ１４，ａ１５｝から、この６４ビットのバイトベクタに対応するデータ切り出し部Ｂ１６０２は、元の６４ビットの半分のサイズである３２ビットのベクタデータを切り出す。そして、切り出された２つのベクタデータを、データ連結部１６０３は連結して６４ビットのベクタデータを生成し、生成された６４ビットのベクタデータはレジスタＸＤｂに格納される。
【０１０２】
データ切り出し部Ａ１６０１とデータ切り出し部Ｂ１６０２とでのデータ切り出し位置は、「ｖａｌｎｐＸ．８  ＸＤｂ，ＸＱａ」命令のオペコード「ｖａｌｎｐＸ．８」のＸで指定され、かつ、それぞれのデータ切り出し位置は、それぞれ切り出される６４ビットのバイトベクタの同じ位置となる。具体的には、以下の動作が行われる。
【０１０３】
「ｖａｌｎｐ０．８」命令では、それぞれのバイトベクタのＭＳＢから０バイト目の位置からベクタデータが切り出される
「ｖａｌｎｐ１．８」命令では、それぞれのバイトベクタのＭＳＢから１バイト目の位置からベクタデータが切り出される。
【０１０４】
「ｖａｌｎｐ２．８」命令では、それぞれのバイトベクタのＭＳＢから２バイト目の位置からベクタデータが切り出される。
【０１０５】
「ｖａｌｎｐ３．８」命令では、それぞれのバイトベクタのＭＳＢから３バイト目の位置からベクタデータが切り出される。
【０１０６】
「ｖａｌｎｐ４．８」命令では、それぞれのバイトベクタのＭＳＢから４バイト目の位置からベクタデータが切り出される。
【０１０７】
なお、図１７で示される命令はバイトベクタを入力とした命令であるが、ハーフワードベクタ、ワードベクタを入力とする命令でも良い。
【０１０８】
また、図１７で示される命令では、データ切り出し位置はオペコードで指定されたが、即値オペランドで指定されても良い。例えば、「ｖａｌｎｐ．８  ＸＤｂ，ＸＱａ，Ｉｍｍ」命令でも良い。この命令ではデータ切り出し位置は即値オペランドＩｍｍで指定される。例えば、Ｉｍｍオペランドに０が指定されるとＭＳＢから０バイト目の位置から、Ｉｍｍオペランドに１が指定されるとＭＳＢから１バイト目の位置から、ベクタデータが切り出される。
【０１０９】
また、図１０で示される命令のように、レジスタオペランドで指定されたレジスタに格納された値でデータ切り出し位置が指定されても良い。例えば、データ切り出し位置の値は、ＸＡＬＮレジスタ、Ｒレジスタ、ＸＤレジスタ及びＸＱレジスタに格納される。またデータ切り出し位置の値を格納するレジスタが１つに固定される命令であれば、レジスタの指定を省略した命令でも良い。
【０１１０】
また、図１７で示される命令では、データ切り出し位置は、ＭＳＢからの位置で指定されているが、ＬＳＢからの位置で指定されても良い。
【０１１１】
また、図１７で示される命令では、演算対象データを含む１２８ビットのバイトベクタは、上位半分と下位半分の２つの演算対象データに分けられたが、２つ以上の演算対象データに分けられても良い。例えば、１２８ビットのバイトベクタは、４つの３２ビットの演算対象データに分けられ、３２ビットのバイトベクタそれぞれから、元の３２ビットの半分のサイズである１６ビットのベクタデータを切り出されても良い。
【０１１２】
また、本実施の形態のプロセッサは、複数の演算対象データを含む入力データとして１２８ビットベクタのベクタデータを扱ったが、３２ビットベクタ及び６４ビットベクタのベクタデータを扱っても良い。
【０１１３】
［３−３．効果等］
本開示の実施の形態３のプロセッサでは、１つのレジスタに格納されたベクタデータから元の４分の１のサイズのデータを２つ切り出し、切り出した２つのデータを連結する一連の処理を１命令で実行することができ、データの並び替えの処理サイクル数を削減することによって、処理速度を向上することができる。
【０１１４】
（実施の形態４）
以下、図１８〜２０を用いて、実施の形態４を説明する。
【０１１５】
［４−１．構成］
図１８は、実施の形態４のプロセッサの構成図である。
【０１１６】
図１８において、本実施の形態のプロセッサは、データ並び替え器１２０６の代わりにデータ並び替え器１９０６を備え、命令デコーダ１２０３の代わりに命令デコーダ１９０３を備える点が、実施の形態２のプロセッサと異なる。それ以外の構成要素は実施の形態２のプロセッサと同じであるため、同じ符号をつけて説明は省略する。
【０１１７】
命令デコーダ１９０３は、本実施の形態で説明する命令を解読し、データ並び替え器１９０６を含む演算器群に実行制御信号を出力する点が実施の形態２の命令デコーダ１２０３と異なる。
【０１１８】
図１９は、データ並び替え器１９０６の構成図である。図１９において、データ並び替え器１９０６は、データ切り出し部Ａ２００１、データ切り出し部Ｂ２００２、データ切り出し部Ｃ２００３、データ切り出し部Ｄ２００４及びデータ連結部２００５を備え、命令デコーダ１９０３からの実行制御信号に従って動作する。命令メモリ０２０１に格納されたデータ並び替え命令が命令デコーダ１９０３で解読されることで、命令デコーダ１９０３からの実行制御信号は、データ並び替え器１９０６へ送られる。ここで、データ並び替え命令は、２つの演算対象データを含む入力データＡを格納するレジスタと２つの演算対象データを含む入力データＢを格納するレジスタとをレジスタファイル０２０４から指定する命令である。つまり、データ並び替え命令が命令デコーダ１９０３で解読されることによって出力される実行制御信号に従って、データ並べ替え器１９０６は、入力データＡと入力データＢとをレジスタファイル０２０４から取得する。データ並び替え器１９０６は、データ並び替え器１２０６と同じく４つのデータ切り出し部を持つが、入力データが４つではなく２つである点が実施の形態２のデータ並び替え器１２０６と異なる。
【０１１９】
データ切り出し部Ａ２００１は、入力データＡに含まれる２つの演算対象データのうち一方の演算対象データに対応して設けられる。また、データ切り出し部Ｂ２００２は、入力データＡに含まれる２つの演算対象データのうち他方の演算対象データに対応して設けられる。データ切り出し部Ａ２００１及びデータ切り出し部Ｂ２００２は、それぞれ対応する演算対象データから所定数（ここでは、演算対象データそれぞれのデータ要素数の半分）のデータ要素の切り出しを行う。データ切り出し部Ｃ２００３は、入力データＢに含まれる２つの演算対象データのうち一方の演算対象データに対応して設けられる。また、データ切り出し部Ｄ２００４は、入力データＢに含まれる２つの演算対象データのうち他方の演算対象データに対応して設けられる。データ切り出し部Ｃ２００３及びデータ切り出し部Ｄ２００４は、それぞれ対応する演算対象データから所定数（ここでは、演算対象データそれぞれのデータ要素数の半分）のデータの切り出しを行う。データ連結部２００５は、データ切り出し部Ａ２００１、データ切り出し部Ｂ２００２、データ切り出し部Ｃ２００３及びデータ切り出し部Ｄ２００４で切り出された４つのデータを連結し、データ並び替え器１９０６から出力する。
【０１２０】
［４−２．動作］
以上のように構成された本実施の形態のプロセッサについて、その動作を以下に説明する。
【０１２１】
図２０は、「ｖａｌｎｑＸ．８  ＸＤｃ，ＸＤａ，ＸＤｂ」命令（ｖａｌｎｑＸ．８のＸは０〜２）の動作を示す図である。つまり、図２０の（ａ）は「ｖａｌｎｑ０．８  ＸＤｃ，ＸＤａ，ＸＤｂ」命令の動作を示す図である。図２０の（ｂ）は「ｖａｌｎｑ１．８  ＸＤｃ，ＸＤａ，ＸＤｂ」命令の動作を示す図である。図２０の（ｃ）は「ｖａｌｎｑ２．８  ＸＤｃ，ＸＤａ，ＸＤｂ」命令の動作を示す図である。
【０１２２】
図２０で示される「ｖａｌｎｑＸ．８  ＸＤｃ，ＸＤａ，ＸＤｂ」命令は、命令デコーダ１９０３で解読され、データ並び替え器１９０６で実行されるデータ並び替え命令である。「ｖａｌｎｑＸ．８」の「８」は演算対象データがバイトベクタであることを示す。レジスタＸＤａに格納された６４ビットのバイトベクタ｛ａ０，ａ１，ａ２，ａ３，ａ４，ａ５，ａ６，ａ７｝とレジスタＸＤｂに格納された６４ビットのバイトベクタ｛ｂ０，ｂ１，ｂ２，ｂ３，ｂ４，ｂ５，ｂ６，ｂ７｝とを入力として、命令デコーダ１９０３からの実行制御信号に従って、ベクタデータそれぞれから、データ要素は切り出される。このように、６４ビットのベクタデータは生成され、生成された６４ビットのベクタデータはレジスタＸＤｃに格納される。具体的には、以下の動作が行われる。
【０１２３】
「ｖａｌｎｑＸ．８  ＸＤｃ，ＸＤａ，ＸＤｂ」命令が、命令デコーダ１９０３で解読されると、命令デコーダ１９０３からの実行制御信号に従って、２つの演算対象データが格納されたレジスタＸＤａ及びレジスタＸＤｂが指定される。次に、レジスタＸＤａに格納された６４ビットのバイトベクタの上位半分の３２ビットのバイトベクタ｛ａ０，ａ１，ａ２，ａ３｝から、この３２ビットのバイトベクタに対応するデータ切り出し部Ａ２００１は、元の３２ビットの半分のサイズである１６ビットのベクタデータを切り出す。また、レジスタＸＤａに格納された６４ビットのバイトベクタの下位半分の３２ビットのバイトベクタ｛ａ４，ａ５，ａ６，ａ７｝から、この３２ビットのバイトベクタに対応するデータ切り出し部Ｂ２００２は、元の３２ビットの半分のサイズである１６ビットのベクタデータを切り出す。また、レジスタＸＤｂに格納された６４ビットのバイトベクタの上位半分の３２ビットのバイトベクタ｛ｂ０，ｂ１，ｂ２，ｂ３｝から、この３２ビットのバイトベクタに対応するデータ切り出し部Ｃ２００３は、元の３２ビットの半分のサイズである１６ビットのベクタデータを切り出す。また、レジスタＸＤｂに格納された６４ビットのバイトベクタの下位半分の３２ビットのバイトベクタ｛ｂ４，ｂ５，ｂ６，ｂ７｝から、この３２ビットのバイトベクタに対応するデータ切り出し部Ｄ２００４は、元の３２ビットの半分のサイズである１６ビットのベクタデータを切り出す。次に、切り出された４つのベクタデータを、データ連結部２００５は連結して６４ビットのベクタデータを生成する。生成された６４ビットのベクタデータはレジスタＸＤｃに格納される。
【０１２４】
データ切り出し部Ａ２００１とデータ切り出し部Ｂ２００２とデータ切り出し部Ｃ２００３とデータ切り出し部Ｄ２００４とでのデータ切り出し位置は、「ｖａｌｎｑＸ．８  ＸＤｃ，ＸＤａ，ＸＤｂ」命令のオペコード「ｖａｌｎｑＸ．８」のＸで指定され、かつ、それぞれのデータ切り出し位置は、それぞれ切り出される３２ビットのバイトベクタの同じ位置となる。具体的には、以下の動作が行われる。
【０１２５】
「ｖａｌｎｑ０．８」命令では、それぞれのバイトベクタのＭＳＢから０バイト目の位置からベクタデータが切り出される。
【０１２６】
「ｖａｌｎｑ１．８」命令では、それぞれのバイトベクタのＭＳＢから１バイト目の位置からベクタデータが切り出される。
【０１２７】
「ｖａｌｎｑ２．８」命令では、それぞれのバイトベクタのＭＳＢから２バイト目の位置からベクタデータが切り出される。
【０１２８】
なお、図２０で示される命令はバイトベクタを入力とした命令であるが、ハーフワードベクタ、ワードベクタを入力とする命令でも良い。
【０１２９】
また、図２０で示される命令では、データ切り出し位置はオペコードで指定されたが、即値オペランドで指定されても良い。例えば、「ｖａｌｎｑ．８  ＸＤｃ，ＸＤａ，ＸＤｂ，Ｉｍｍ」命令でも良い。この命令ではデータ切り出し位置は即値オペランドＩｍｍで指定される。例えば、Ｉｍｍオペランドに０が指定されるとＭＳＢから０バイト目の位置から、Ｉｍｍオペランドに１が指定されるとＭＳＢから１バイト目の位置から、ベクタデータが切り出される。
【０１３０】
また、図１０で示される命令のように、レジスタオペランドで指定されたレジスタに格納された値でデータ切り出し位置が指定されても良い。例えば、データ切り出し位置の値は、ＸＡＬＮレジスタ、Ｒレジスタ、ＸＤレジスタ、ＸＱレジスタに格納される。またデータ切り出し位置の値を格納するレジスタが１つに固定される命令であれば、レジスタの指定を省略した命令でも良い。
【０１３１】
また、図２０で示される命令は、３つのレジスタオペランドＸＤａ，ＸＤｂ，ＸＤｃのレジスタ番号ａ，ｂ，ｃをそれぞれ別々に指定できる命令であるが、一部のレジスタオペランドのレジスタ番号は連番でなければならないという制約を持つ命令でも良い。例えば、レジスタＸＤａとレジスタＸＤｂとは連番でなければならないという制約を加えられた命令は、もとのレジスタＸＤａとレジスタＸＤｂとをそれぞれレジスタＸＤａとレジスタＸＤａ＋１とし、さらに、もとのレジスタＸＤｃをレジスタＸＤｂとすることで、「ｖａｌｎｑＸ．８  ＸＤｂ，ＸＤａ，ＸＤａ＋１」命令となっても良い。こうすることで、ａ，ｂの２つのレジスタ番号で３つのレジスタオペランドは表現される。つまり、命令コードにおいてレジスタオペランドを表現するために必要なビット長は減らされるので、命令コード長は抑えられる。これによって、命令メモリ０２０１のサイズは小さくなるので、命令メモリのコストは削減される。
【０１３２】
また、図２０で示される命令では、データ切り出し位置は、ＭＳＢからの位置で指定されているが、ＬＳＢからの位置で指定されても良い。
【０１３３】
また、図２０で示される命令では、演算対象データを含む６４ビットのバイトベクタは、上位半分と下位半分の２つの演算対象データに分けられたが、２つ以上の演算対象データに分けられても良い。例えば、６４ビットのバイトベクタは、４つの１６ビットの演算対象データに分けられ、１６ビットのバイトベクタそれぞれから、元の１６ビットの半分のサイズである８ビットのベクタデータを切り出されても良い。
【０１３４】
また、本実施の形態のプロセッサは、複数の演算対象データを含む入力データとして６４ビットベクタのベクタデータを扱ったが、３２ビットベクタ及び１２８ビットベクタのベクタデータを扱っても良い。
【０１３５】
［４−３．効果等］
本開示の実施の形態４のプロセッサでは、２つのレジスタに格納されたそれぞれのベクタデータから元の４分の１のサイズのデータを２つ切り出し、切り出した４つのデータを連結する一連の処理を１命令で実行することができ、データの並び替えの処理サイクル数を削減することによって、処理速度を向上することができる。
【０１３６】
（実施の形態５）
以下、図２１〜２３を用いて、実施の形態５を説明する。
【０１３７】
［５−１．構成］
図２１は、実施の形態５のプロセッサの構成図である。
【０１３８】
図２１において、本実施の形態のプロセッサは、データ並び替え器０２０６の代わりにデータ並び替え器２２０６を備え、命令デコーダ０２０３の代わりに命令デコーダ２２０３を備える点が、実施の形態１のプロセッサと異なる。それ以外の構成要素は実施の形態１のプロセッサと同じであるため、同じ符号をつけて説明は省略する。
【０１３９】
命令デコーダ２２０３は、本実施の形態で説明する命令を解読し、データ並び替え器２２０６を含む演算器群に実行制御信号を出力する点が実施の形態１の命令デコーダ０２０３と異なる。
【０１４０】
図２２は、データ並び替え器２２０６の構成図である。図２２において、データ並び替え器２２０６は、データ切り出し部Ａ０５０１、データ切り出し部Ｂ０５０２、データ連結部０５０３及びパターン指定シャッフル部２３０４を備え、命令デコーダ２２０３からの実行制御信号に従って動作する。パターン指定シャッフル部２３０４以外の構成要素は、実施の形態１のデータ並び替え器０２０６と同じであるため、同じ符号をつけて説明は省略する。
【０１４１】
パターン指定シャッフル部２３０４は、レジスタファイル０２０４から取得したパターン指定レジスタに格納された入力データＣの値に従って、データ連結部０５０３から出力されたベクタデータをデータ要素単位にシャッフルして、データ並び替え器２２０６から出力する。
【０１４２】
［５−２．動作］
以上のように構成された本実施の形態のプロセッサについて、その動作を以下に説明する。
【０１４３】
図２３は、「ｖａｌｎｐｓｆｈｌＸ．８  ＸＤｄ，ＸＤａ，ＸＤｂ，ＸＤｃ」命令の１つで、オペコードの「ｖａｌｎｐｓｆｈｌＸ．８」のＸに２が指定された「ｖａｌｎｐｓｆｈｌ２．８  ＸＤｄ，ＸＤａ，ＸＤｂ，ＸＤｃ」命令の動作を示す図である。「ｖａｌｎｐｓｆｈｌＸ．８  ＸＤｄ，ＸＤａ，ＸＤｂ，ＸＤｃ」命令が、命令デコーダ２２０３で解読され、データ並び替え器２２０６で実行されるデータ並び替え命令である。「ｖａｌｎｐｓｆｈｌＸ．８」の「８」は演算対象データがバイトベクタであることを示す。レジスタＸＤａに格納された６４ビットのバイトベクタ｛ａ０，ａ１，ａ２，ａ３，ａ４，ａ５，ａ６，ａ７｝とレジスタＸＤｂに格納された６４ビットのバイトベクタ｛ｂ０，ｂ１，ｂ２，ｂ３，ｂ４，ｂ５，ｂ６，ｂ７｝とを入力として、命令デコーダ２２０３からの実行制御信号に従って、ベクタデータそれぞれから、データ要素は切り出される。このように、６４ビットのベクタデータは生成され、さらにパターン指定レジスタであるレジスタＸＤｃに格納された６４ビットのバイトベクタの値に従って、生成された６４ビットのベクタデータはデータ要素単位にシャッフルされてレジスタＸＤｄに格納される。
【０１４４】
以下に、「ｖａｌｎｐｓｆｈｌＸ．８  ＸＤｄ，ＸＤａ，ＸＤｂ，ＸＤｃ」命令の動作を具体的に説明する。まず、レジスタＸＤａに格納された演算対象データである６４ビットのバイトベクタから、この６４ビットのバイトベクタに対応するデータ切り出し部Ａ０５０１は、元の６４ビットの半分のサイズである３２ビットのベクタデータを切り出す。また、レジスタＸＤｂに格納された演算対象データである６４ビットのバイトベクタから、この６４ビットのバイトベクタに対応するデータ切り出し部Ｂ０５０２は、元の６４ビットの半分のサイズである３２ビットのベクタデータを切り出す。次に、切り出された２つのベクタデータを、データ連結部０５０３は連結して６４ビットのベクタデータを生成する。データ切り出し部Ａ０５０１とデータ切り出し部Ｂ０５０２とでのデータ切り出し位置は、オペコードの「ｖａｌｎｐｓｆｈｌＸ．８」のＸで指定される。図２３では、Ｘに２が指定された命令の動作を示しており、データ切り出し部Ａ０５０１とデータ切り出し部Ｂ０５０２とはＭＳＢから２バイト目の位置からベクタデータが切り出される。これにより、データ連結部０５０３が生成した６４ビットのベクタデータは｛ａ２，ａ３，ａ４，ａ５，ｂ２，ｂ３，ｂ４，ｂ５｝となる。以上の動作は、データ並び替え器０２０６で実行される図７で示される実施の形態１の「ｖａｌｎｐＸ．８  ＸＤｃ，ＸＤａ，ＸＤｂ」命令と同じであるため、これ以上の詳細な説明は省略する。
【０１４５】
図２３で示される命令では、さらに、パターン指定シャッフル部２３０４において、レジスタＸＤｃに格納された６４ビットのバイトベクタの各データ要素の値をインデックスとするパターンで、データ連結部０５０３で生成された６４ビットのベクタデータは、データ要素単位でシャッフルされる。このように、シャッフルされ生成されたベクタデータはレジスタＸＤｄに格納される。ここで、シャッフルとは、インデックスの値をｉとして、データ連結部０５０３が生成したベクタデータのＭＳＢからｉ番目の位置のデータ要素を、そのインデックスの対応するデータ要素の位置にコピーする処理である。図２３では、レジスタＸＤｃに格納された６４ビットのバイトベクタが｛２，１，１，７，３，６，０，５｝である場合の動作を示している。具体的には、以下の動作が行われる。
【０１４６】
レジスタＸＤｃのＭＳＢから０バイト目の位置のデータ要素が２であるから、データ連結部０５０３が生成したベクタデータのＭＳＢから２番目のデータ要素であるａ４が、レジスタＸＤｄのＭＳＢから０番目の位置にコピーされる。
【０１４７】
また、レジスタＸＤｃのＭＳＢから１バイト目の位置のデータ要素が１であるから、データ連結部０５０３が生成したベクタデータのＭＳＢから１番目のデータ要素であるａ３が、レジスタＸＤｄのＭＳＢから１番目の置にコピーされる。
【０１４８】
また、レジスタＸＤｃのＭＳＢから２バイト目の位置のデータ要素が１であるから、データ連結部０５０３が生成したベクタデータのＭＳＢから１番目のデータ要素であるａ３が、レジスタＸＤｄのＭＳＢから２番目の位置にコピーされる。
【０１４９】
また、レジスタＸＤｃのＭＳＢから３バイト目の位置のデータ要素が７であるから、データ連結部０５０３が生成したベクタデータのＭＳＢから７番目のデータ要素であるｂ５が、レジスタＸＤｄのＭＳＢから３番目の位置にコピーされる。
【０１５０】
また、レジスタＸＤｃのＭＳＢから４バイト目の位置のデータ要素が３であるから、データ連結部０５０３が生成したベクタデータのＭＳＢから３番目のデータ要素であるａ５が、レジスタＸＤｄのＭＳＢから４番目の位置にコピーされる。
【０１５１】
また、レジスタＸＤｃのＭＳＢから５バイト目の位置のデータ要素が６であるから、データ連結部０５０３が生成したベクタデータのＭＳＢから６番目のデータ要素であるｂ４が、レジスタＸＤｄのＭＳＢから５番目の位置にコピーされる。
【０１５２】
また、レジスタＸＤｃのＭＳＢから６バイト目の位置のデータ要素が０であるから、データ連結部０５０３が生成したベクタデータのＭＳＢから０番目のデータ要素であるａ２が、レジスタＸＤｄのＭＳＢから６番目の位置にコピーされる。
【０１５３】
また、レジスタＸＤｃのＭＳＢから７バイト目の位置のデータ要素が５であるから、データ連結部０５０３が生成したベクタデータのＭＳＢから５番目のデータ要素であるｂ３が、レジスタＸＤｄのＭＳＢから７番目の位置にコピーされる。
【０１５４】
このように、レジスタＸＤｄに格納されるベクタデータ｛ａ４，ａ３，ａ３，ｂ５，ａ５，ｂ４，ａ２，ｂ３｝は生成される。なお、レジスタＸＤｄにコピーされるデータ要素の位置は、データ連結部０５０３が生成したベクタデータのＭＳＢからの位置が指定されているが、ＬＳＢからの位置が指定されても良い。
【０１５５】
なお、図２３で示される命令はバイトベクタを入力とした命令であるが、ハーフワードベクタ、ワードベクタを入力とする命令でも良い。
【０１５６】
また、図２３で示される命令では、データ切り出し位置はオペコードで指定されたが、即値オペランドで指定されても良い。例えば、「ｖａｌｎｐｓｆｈｌＸ．８  ＸＤｄ，ＸＤａ，ＸＤｂ，ＸＤｃ，Ｉｍｍ」命令でも良い。この命令ではデータ切り出し位置は即値オペランドＩｍｍで指定される。例えば、Ｉｍｍオペランドに０が指定されるとＭＳＢから０バイト目の位置から、Ｉｍｍオペランドに１が指定されるとＭＳＢから１バイト目の位置から、ベクタデータが切り出される。
【０１５７】
また、図１０で示される命令のように、レジスタオペランドで指定されたレジスタに格納された値でデータ切り出し位置が指定されても良い。例えば、データ切り出し位置の値は、ＸＡＬＮレジスタ、Ｒレジスタ、ＸＤレジスタ、ＸＱレジスタに格納される。またデータ切り出し位置の値を格納するレジスタが１つに固定される命令であれば、レジスタの指定を省略した命令でも良い。
【０１５８】
また、図２３で示される命令は、４つのレジスタオペランドＸＤａ，ＸＤｂ，ＸＤｃ，ＸＤｄのレジスタ番号ａ，ｂ，ｃ，ｄをそれぞれ別々に指定できる命令であるが、一部のレジスタオペランドのレジスタ番号は連番でなければならないという制約を持つ命令でも良い。例えば、レジスタＸＤａとレジスタＸＤｂは連番でなければならないという制約を加えられた命令は、もとのレジスタＸＤａとレジスタＸＤｂとをそれぞれレジスタＸＤａとレジスタＸＤａ＋１とし、さらに、もとのレジスタＸＤｃ，ＸＤｄをそれぞれレジスタＸＤｂ，ＸＤｃとすることで、「ｖａｌｎｐｓｆｈｌＸ．８  ＸＤｃ，ＸＤａ，ＸＤａ＋１，ＸＤｂ」命令となっても良い。こうすることで、ａ，ｂ，ｃの３つのレジスタ番号で４つのレジスタオペランドは表現される。つまり、命令コードにおいてレジスタオペランドを表現するために必要なビット長は減らされるので、命令コード長は抑えられる。これによって、命令メモリ０２０１のサイズは小さくなるので、命令メモリのコストは削減される。
【０１５９】
また、図２３で示される命令では、データ切り出し位置は、ＭＳＢからの位置で指定されているが、ＬＳＢからの位置で指定されても良い。
【０１６０】
また、図２３で示される命令では、図７で示される実施の形態１の「ｖａｌｎｐＸ．８  ＸＤｃ，ＸＤａ，ＸＤｂ」命令と、「ｖａｌｎｐＸ．８  ＸＤｃ，ＸＤａ，ＸＤｂ」命令で生成されたベクタデータをパターン指定レジスタに格納されたデータの値に従ってデータ要素単位にシャッフルする動作と、が組み合わされて、これら一連の処理は１命令で実行される。しかし、このシャッフルする動作と組み合わされる命令は、実施の形態１の「ｖａｌｎｐＸ．８  ＸＤｃ，ＸＤａ，ＸＤｂ」命令だけに限らない。例えば、図１４で示される実施の形態２の「ｖａｌｎｑＸ．８  ＸＤｅ，Ｒａ，Ｒｂ，Ｒｃ，Ｒｄ」命令、図１７で示される実施の形態３の「ｖａｌｎｐＸ．８  ＸＤｂ，ＸＱａ」命令又は図２０で示される実施の形態４の「ｖａｌｎｑＸ．８  ＸＤｃ，ＸＤａ，ＸＤｂ」命令との組み合わせでも良い。
【０１６１】
［５−３．効果等］
本開示の実施の形態５のプロセッサでは、２つのレジスタに格納されたそれぞれのベクタデータから元の半分のサイズのデータを切り出し、切り出した２つのデータを連結して、さらにシャッフルする一連の処理を１命令で実行することができ、データの並び替えの処理サイクル数を削減することによって、処理速度を向上することができる。
【０１６２】
なお、以上の実施の形態１〜５では、複数のデータ要素から構成されたデータとして、ベクタデータを扱ったが、本開示のプロセッサが扱うデータはベクタデータに限らず単にデータであっても良い。
【０１６３】
以上のように、本開示における技術の例示として、実施の形態を説明した。そのために、添付図面及び詳細な説明を提供した。
【０１６４】
したがって、添付図面及び詳細な説明に記載された構成要素の中には、課題解決のために必須な構成要素だけでなく、上記実装を例示するために、課題解決のためには必須でない構成要素も含まれ得る。そのため、それらの必須ではない構成要素が添付図面や詳細な説明に記載されていることをもって、直ちに、それらの必須ではない構成要素が必須であるとの認定をするべきではない。
【０１６５】
また、上述の実施の形態は、本開示における技術を例示するためのものであるから、特許請求の範囲又はその均等の範囲において種々の変更、置き換え、付加、省略などを行うことができる。
【産業上の利用可能性】
【０１６６】
本開示は、プロセッサとして有用である。具体的には、ビデオコーデック用のプロセッサなどに、本開示は適用可能である。
【符号の説明】
【０１６７】
０２０１  命令メモリ
０２０２  命令フェッチ部
０２０３，１２０３，１５０３，１９０３，２２０３  命令デコーダ
０２０４  レジスタファイル
０２０５  メモリアクセス部
０２０６，１２０６，１５０６，１９０６，２２０６  データ並び替え器
０２０７  ＡＬＵ（算術論理演算器）
０２０８  乗算器
０２０９  バレルシフタ
０２１０  データメモリ
０５０１，１３０１，１６０１，２００１  データ切り出し部Ａ
０５０２，１３０２，１６０２，２００２  データ切り出し部Ｂ
０５０３，１３０５，１６０３，２００５  データ連結部
１３０３，２００３  データ切り出し部Ｃ
１３０４，２００４  データ切り出し部Ｄ
２３０４  パターン指定シャッフル部
【図１】
2017199045.tif 000003
【図２】
2017199045.tif 000004
【図３】
2017199045.tif 000005
【図４】
2017199045.tif 000006
【図５】
2017199045.tif 000007
【図６】
2017199045.tif 000008
【図７】
2017199045.tif 000009
【図８】
2017199045.tif 000010
【図９】
2017199045.tif 000011
【図１０】
2017199045.tif 000012
【図１１】
2017199045.tif 000013
【図１２】
2017199045.tif 000014
【図１３】
2017199045.tif 000015
【図１４】
2017199045.tif 000016
【図１５】
2017199045.tif 000017
【図１６】
2017199045.tif 000018
【図１７】
2017199045.tif 000019
【図１８】
2017199045.tif 000020
【図１９】
2017199045.tif 000021
【図２０】
2017199045.tif 000022
【図２１】
2017199045.tif 000023
【図２２】
2017199045.tif 000024
【図２３】
2017199045.tif 000025