(57)【要約】【課題】高機能なＳＩＭＤ演算を実行するプロセッサ等を提供する。【解決手段】デコード部２０と演算部４０等を備え、デコード部２０が命令ｖｃｃｈｋを解読すると、演算部４０等は、条件フラグレジスタ（ＣＦＲ）３２のベクタ条件フラグＶＣ０〜ＶＣ３（１１０）が全て０であるか判定し、全て０である場合に、条件フラグレジスタ（ＣＦＲ）３２のコンディションフラグＣ４及びＣ５をそれぞれ１及び０にセットし、そうでない場合に、コンディションフラグＣ４及びＣ５をそれぞれ０及び１にセットする。そして、コンディションフラグＣ０〜Ｃ３には、ベクタ条件フラグＶＣ０〜ＶＣ３を格納する。【選択図】　　　　図１
2004118470.tif 000002
【特許請求の範囲】
【請求項１】
ＳＩＭＤ型の命令を実行するプロセッサであって、
命令を解読する解読手段と、
解読手段による解読結果に基づいて、命令を実行する実行手段とを備え、
前記実行手段は、複数のデータを対象とするＳＩＭＤ型の比較命令による比較結果を判定する旨の命令が前記解読手段によって解読された場合に、前記複数のデータ全てについて同一の比較結果が得られたか否かを判定し、その結果を生成する
ことを特徴とするプロセッサ。
【請求項２】
前記実行手段は、前記複数の比較結果全てがゼロであるか否かを判定し、その結果を生成する
ことを特徴とする請求項１記載のプロセッサ。
【請求項３】
前記プロセッサは、さらに、フラグを格納するためのフラグ記憶手段とを備え、
前記実行手段は、生成した前記結果とともに、前記比較命令による比較結果を前記フラグ記憶手段に格納する
ことを特徴とする請求項１記載のプロセッサ。
【請求項４】
外部メモリと接続されるプロセッサであって、
データを記憶するレジスタと、
命令を解読する解読手段と、
解読手段による解読結果に基づいて、命令を実行する実行手段とを備え、
前記実行手段は、レジスタの値を外部メモリに格納する旨の命令が前記解読手段によって解読された場合に、前記レジスタに格納されている４以上のバイトからなるワードデータのうち、上位ハーフワードの最下位１バイトと下位ハーフワードの最下位１バイトとを前記外部メモリに格納する
ことを特徴とするプロセッサ。
【請求項５】
前記実行手段は、前記上位ハーフワードの最下位１バイトと前記下位ハーフワードの最下位１バイトとを前記外部メモリの連続するアドレスの記憶領域に格納する
ことを特徴とする請求項４記載のプロセッサ。
【請求項６】
外部メモリと接続されるプロセッサであって、
データを記憶するレジスタと、
命令を解読する解読手段と、
解読手段による解読結果に基づいて、命令を実行する実行手段とを備え、
前記実行手段は、第１及び第２レジスタの値を外部メモリに格納する旨の命令が前記解読手段によって解読された場合に、前記第１レジスタに格納されている４以上のバイトからなるワードデータのうち、上位ハーフワードの最下位１バイトと下位ハーフワードの最下位１バイトとを前記外部メモリに格納するとともに、前記第２レジスタに格納されている４以上のバイトからなるワードデータのうち、上位ハーフワードの最下位１バイトと下位ハーフワードの最下位１バイトとを前記外部メモリに格納する
ことを特徴とするプロセッサ。
【請求項７】
前記実行手段は、前記第１レジスタの上位ハーフワードの最下位１バイト及び下位ハーフワードの最下位１バイトと前記第２レジスタの上位ハーフワードの最下位１バイト及び下位ハーフワードの最下位１バイトとを前記外部メモリの連続するアドレスの記憶領域に格納する
ことを特徴とする請求項６記載のプロセッサ。
【請求項８】
命令を解読し実行するプロセッサであって、
データを記憶するレジスタと、
命令を解読する解読手段と、
解読手段による解読結果に基づいて、命令を実行する実行手段とを備え、
前記実行手段は、前記レジスタの上位桁にデータを格納する旨の命令が前記解読手段によって解読された場合に、前記レジスタのうち、前記上位桁を除く記憶領域の値を変更することなく、前記上位桁だけに前記データを格納する
ことを特徴とするプロセッサ。
【請求項９】
前記レジスタは１ワードのデータを保持する記憶領域を有し、
前記実行手段は、前記レジスタの上位ハーフワードに前記データを格納する
ことを特徴とする請求項８記載のプロセッサ。
【請求項１０】
ＳＩＭＤ型の命令を実行するプロセッサであって、
第１フラグを格納するフラグ記憶手段と、
命令を解読する解読手段と、
解読手段による解読結果に基づいて、命令を実行する実行手段とを備え、
前記実行手段は、第１レジスタと第２レジスタとをオペランドとするＳＩＭＤ型の演算命令が前記解読手段によって解読された場合に、前記フラグ記憶手段に格納された第１フラグが第１状態を示すときには、前記第１レジスタだけをオペランドとして前記ＳＩＭＤ型の演算を実行し、前記第１フラグが第２状態を示すときには、前記第１レジスタと第２レジスタをオペランドとして前記ＳＩＭＤ型の演算を実行する
ことを特徴とするプロセッサ。
【請求項１１】
前記ＳＩＭＤ型の演算は、加算であり、
前記実行手段は、前記第１フラグが第１状態を示すときには、前記第１レジスタの値と当該値とを加算し、前記第１フラグが第２状態を示すときには、前記第１レジスタの値と第２レジスタの値とを加算する
ことを特徴とする請求項１０記載のプロセッサ。
【請求項１２】
前記実行手段は、前記第１レジスタに２つのデータａ１及びａ２が格納され、前記第２レジスタに２つのデータｂ１及びｂ２が格納されている場合に、前記第１フラグが第１状態を示すときには、（ａ１＋ａ１）及び（ａ２＋ａ２）を算出し、前記第１フラグが第２状態を示すときには、（ａ１＋ｂ１）及び（ａ２＋ｂ２）を算出する
ことを特徴とする請求項１１記載のプロセッサ。
【請求項１３】
ＳＩＭＤ型の命令を実行するプロセッサであって、
フラグを格納するフラグ記憶手段と、
命令を解読する解読手段と、
解読手段による解読結果に基づいて、命令を実行する実行手段とを備え、
前記実行手段は、第１レジスタと第２レジスタとをオペランドとするＳＩＭＤ型の演算命令が前記解読手段によって解読された場合に、前記フラグ記憶手段に格納されたフラグが第１状態を示すときには、前記第１レジスタだけをオペランドとして前記ＳＩＭＤ型の演算を実行した後に丸め処理を行い、前記フラグが第２状態を示すときには、前記第１レジスタと第２レジスタをオペランドとして前記ＳＩＭＤ型の演算を実行した後に丸め処理を行う
ことを特徴とするプロセッサ。
【請求項１４】
前記ＳＩＭＤ型の演算は、加算であり、
前記実行手段は、前記フラグが第１状態を示すときには、前記第１レジスタの値と当該値とを加算した後に１を加算し、前記フラグが第２状態を示すときには、前記第１レジスタの値と第２レジスタの値とを加算した後に１を加算する
ことを特徴とする請求項１３記載のプロセッサ。
【請求項１５】
前記実行手段は、前記第１レジスタに２つのデータａ１及びａ２が格納され、前記第２レジスタに２つのデータｂ１及びｂ２が格納されている場合に、前記フラグが第１状態を示すときには、（ａ１＋ａ１＋１）及び（ａ２＋ａ２＋１）を算出し、前記フラグが第２状態を示すときには、（ａ１＋ｂ１＋１）及び（ａ２＋ｂ２＋１）を算出する
ことを特徴とする請求項１４記載のプロセッサ。
【請求項１６】
前記フラグ記憶手段には、さらに第２フラグが格納され、前記実行手段は、前記第２フラグの値によって前記演算結果を丸めるか否かを切り替える
ことを特徴とする請求項１０〜１２のいずれか１項に記載のプロセッサ。
【請求項１７】
前記実行手段は、前記演算結果をさらに２で割る
ことを特徴とする請求項１１、１２、１４及び１５のいずれか１項に記載のプロセッサ。
【請求項１８】
ＳＩＭＤ型の命令を実行するプロセッサであって、
命令を解読する解読手段と、
解読手段による解読結果に基づいて、命令を実行する実行手段とを備え、
前記実行手段は、複数のデータそれぞれの符号に基づいて値を生成する旨のＳＩＭＤ型の命令が前記解読手段によって解読された場合に、前記複数のデータそれぞれが正、ゼロ及び負のいずれの値であるかを示すデータを生成する
ことを特徴とするプロセッサ。
【請求項１９】
前記実行手段は、前記複数のデータそれぞれが正、ゼロ及び負のいずれであるかによって１、０及び−１を生成する
ことを特徴とする請求項１８記載のプロセッサ。
【請求項２０】
前記命令は、前記複数のデータを格納している第１レジスタと前記実行手段によって生成される前記データを格納する第２レジスタの指定を含み、
前記実行手段は、前記第１レジスタに格納された複数のデータの格納位置に対応させて、前記第２レジスタの複数の格納位置それぞれに、１、０及び−１のいずれかを格納する
ことを特徴とする請求項１９記載のプロセッサ。
【請求項２１】
ＳＩＭＤ型の命令を実行するプロセッサであって、
第１パラメータ及び第２パラメータを指定するパラメータ指定手段と、
命令を解読する解読手段と、
解読手段による解読結果に基づいて、命令を実行する実行手段とを備え、
前記実行手段は、第１データを操作する旨の命令が前記解読手段によって解読された場合に、前記第１データを前記第１パラメータに基づいてビットシフトし、得られたシフトデータのうち、前記第２パラメータによって特定される単位長位置の複数の単位長データを出力する
ことを特徴とするプロセッサ。
【請求項２２】
前記実行手段は、前記シフトデータに、連続した第１〜第３単位長データが含まれる場合に、前記第２パラメータが第１状態を示すときには、２つの前記第１単位長データ及び２つの前記第２単位長データをこの順で生成し、前記第２パラメータが第２状態を示すときには、１つの前記第１単位長データ、２つの前記第２単位長データ及び１つの前記第３単位長データをこの順で生成する
ことを特徴とする請求項２１記載のプロセッサ。
【請求項２３】
前記実行手段は、前記シフトデータに、連続した第１〜第４単位長データが含まれる場合に、前記第２パラメータが第１状態を示すときには、２つの前記第１単位長データ及び２つの前記第２単位長データをこの順で生成し、前記第２パラメータが第２状態を示すときには、１つの前記第１単位長データ、１つの前記第３単位長データ、１つの前記第２単位長データ及び１つの前記第４単位長データをこの順で生成する
ことを特徴とする請求項２１記載のプロセッサ。
【請求項２４】
前記第１及び第２パラメータはフラグである
ことを特徴とする請求項２１〜２３のいずれか１項に記載のプロセッサ。
【請求項２５】
前記単位長はバイトである
ことを特徴とする請求項２１〜２３のいずれか１項に記載のプロセッサ。
【請求項２６】
命令を解読し実行するプロセッサであって、
命令を解読する解読手段と、
解読手段による解読結果に基づいて、命令を実行する実行手段とを備え、
前記実行手段は、第１及び第２データをオペランドとする加算命令が前記解読手段によって解読された場合に、前記第１データがゼロ又は正であるときには、前記第１データと前記第２データと１とを加算した結果を生成し、前記第１データが負であるときには、前記第１データと前記第２データとを加算した結果を生成する
ことを特徴とするプロセッサ。
【請求項２７】
前記第１データは、絶対値丸めの対象となるデータであり、
前記第２データは、絶対値丸めを行う桁を指定したデータである
ことを特徴とする請求項２６記載のプロセッサ。
【請求項２８】
前記第２データは、前記第１データに対して絶対値丸めを行う桁に対応する桁を１とし、残る他の桁をゼロとする値である
ことを特徴とする請求項２７記載のプロセッサ。
【請求項２９】
命令を解読し実行するプロセッサであって、
複数のレジスタと、
命令を解読する解読手段と、
解読手段による解読結果に基づいて、命令を実行する実行手段とを備え、
前記実行手段は、第１及び第２レジスタの値を操作する旨の命令が前記解読手段によって解読された場合に、前記第１レジスタの操作結果を第３レジスタに格納するとともに、前記第２レジスタの操作結果を前記第３レジスタと連続する位置に設けられた第４レジスタに格納する
ことを特徴とするプロセッサ。
【請求項３０】
命令を解読し実行するプロセッサであって、
条件実行命令のプレディケートに用いられる複数のフラグを記憶するフラグ記憶手段と、
命令を解読する解読手段と、
解読手段による解読結果に基づいて、命令を実行する実行手段とを備え、
前記実行手段は、前記フラグをオペランドとするループの分岐命令が前記解読手段によって解読された場合に、ループの先頭への分岐とともに前記フラグの設定を行う
ことを特徴とするプロセッサ。
【請求項３１】
前記フラグは、ループをソフトウェアパイプライニングによって展開した場合におけるエピログ命令及びプロログ命令の少なくとも１つの命令用のプレディケートに用いられる
ことを特徴とする請求項３０記載のプロセッサ。
【請求項３２】
前記命令には、複数のフラグがオペランドとして指定され、
前記実行手段は、前記分岐命令が解読された場合に、前記分岐とともに、前記複数のフラグ間での転送を行う
ことを特徴とする請求項３０記載のプロセッサ。
【請求項３３】
前記複数のフラグは、ループをソフトウェアパイプライニングによって展開した場合におけるエピログ命令、カーネル命令及びプロログ命令用のプレディケートに用いられる
ことを特徴とする請求項３２記載のプロセッサ。
【請求項３４】
命令を解読し実行するプロセッサであって、
分岐先アドレスを格納する分岐レジスタと
条件実行命令のプレディケートに用いられる複数のフラグを記憶するフラグ記憶手段と、
命令を解読する解読手段と、
解読手段による解読結果に基づいて、命令を実行する実行手段とを備え、
前記実行手段は、前記フラグをオペランドとする分岐レジスタへの格納命令が前記解読手段によって解読された場合に、ループの先頭アドレスを前記分岐レジスタに格納するとともに前記フラグの設定を行う
ことを特徴とするプロセッサ。
【請求項３５】
前記フラグは、ループをソフトウェアパイプライニングによって展開した場合におけるエピログ命令及びプロログ命令の少なくとも１つの命令用のプレディケートに用いられる
ことを特徴とする請求項３４記載のプロセッサ。
【請求項３６】
前記命令には、複数のフラグがオペランドとして指定され、
前記実行手段は、前記格納命令が解読された場合に、前記格納とともに、前記複数のフラグ間の設定を行う
ことを特徴とする請求項３４記載のプロセッサ。
【請求項３７】
前記複数のフラグは、ループをソフトウェアパイプライニングによって展開した場合におけるエピログ命令、カーネル命令及びプロログ命令用のプレディケートに用いられる
ことを特徴とする請求項３６記載のプロセッサ。
【請求項３８】
ＳＩＭＤ型の命令を実行するプロセッサであって、
命令を解読する解読手段と、
解読手段による解読結果に基づいて、命令を実行する実行手段とを備え、
前記実行手段は、複数のデータ対を対象として差分絶対値和を行う旨のＳＩＭＤ型の命令が前記解読手段によって解読された場合に、前記複数のデータ対それぞれの差分絶対値を加算した値を生成する
ことを特徴とするプロセッサ。
【請求項３９】
前記命令には、前記複数のデータ対に加えて、第１データの指定が含まれ、
前記実行手段は、前記差分絶対値を加算した値に前記第１データを加算した値を生成する
ことを特徴とする請求項３８記載のプロセッサ。
【請求項４０】
前記複数のデータ対は、２つのレジスタによって指定され、
前記実行手段は、前記２つのレジスタにおける対応するバイトデータの組それぞれの差分絶対値を算出し、全ての差分絶対値を加算することによって前記値を生成する
ことを特徴とする請求項３８記載のプロセッサ。
【請求項４１】
命令を解読し実行するプロセッサであって、
命令を解読する解読手段と、
解読手段による解読結果に基づいて、命令を実行する実行手段とを備え、
前記実行手段は、第１及び第２データをオペランドとする飽和命令が前記解読手段によって解読された場合に、前記第１データが前記第２データによって特定される飽和値よりも大きいときには、前記飽和値を生成し、前記第１データが前記飽和値以下であるときには、前記第１データを生成する
ことを特徴とするプロセッサ。
【請求項４２】
前記第１データ及び前記飽和値は、符号付の値である
ことを特徴とする請求項４１記載のプロセッサ。
【請求項４３】
前記第２データは、飽和位置の桁を指定するデータである
ことを特徴とする請求項４１記載のプロセッサ。
【請求項４４】
前記第２データは、飽和値の桁よりも大きい桁を１とし、飽和値の桁以下の桁をゼロとする値である
ことを特徴とする請求項４２記載のプロセッサ。
【請求項４５】
命令を解読し実行するプロセッサであって、
ｎ単位長の複数のレジスタと、
命令を解読する解読手段と、
解読手段による解読結果に基づいて、命令を実行する実行手段とを備え、
前記実行手段は、第１〜第３レジスタと１つのパラメータとをオペランドとして単位長単位で選択する旨の命令が前記解読手段によって解読された場合に、前記第１及び第２レジスタに格納された２ｎ個の単位長データの中から、前記パラメータによって選択されるｎ個の単位長データを前記第３レジスタに格納する
ことを特徴とするプロセッサ。
【請求項４６】
前記パラメータは、第４レジスタに格納された値である
ことを特徴とする請求項４５記載のプロセッサ。
【請求項４７】
前記パラメータは、即値である
ことを特徴とする請求項４５記載のプロセッサ。
【請求項４８】
前記パラメータには、前記第３レジスタのｎ箇所それぞれに前記単位長データを格納するかしないかのフラグが含まれ、
前記実行手段は、前記フラグに従って、前記ｎ個の単位長データを前記第３レジスタに格納するかしないかを選択的に行う
ことを特徴とする請求項４５記載のプロセッサ。
【請求項４９】
前記単位長はバイトである
ことを特徴とする請求項４５〜４８のいずれか１項に記載のプロセッサ。
【請求項５０】
ＳＩＭＤ型の命令を実行するプロセッサであって、
命令を解読する解読手段と、
解読手段による解読結果に基づいて、命令を実行する実行手段とを備え、
前記実行手段は、ＳＩＭＤ型の命令が前記解読手段によって解読された場合に、ＳＩＭＤ型の演算を行うことによって複数の演算結果を生成し、前記複数の演算結果の少なくとも１つについてビット拡張を行う
ことを特徴とするプロセッサ。
【請求項５１】
前記命令は、２つのハーフワードを演算結果としてワード長のレジスタに格納し、それら２つのハーフワードの一方をワードデータに拡張する
ことを特徴とする請求項５０記載のプロセッサ。
【請求項５２】
前記命令は、２つのハーフワードを演算結果としてワード長のレジスタに格納し、それら２つのハーフワードそれぞれをワードデータに拡張する
ことを特徴とする請求項５０記載のプロセッサ。
【請求項５３】
ＳＩＭＤ型の命令を実行するプロセッサであって、
フラグを記憶するフラグ記憶手段と、
命令を解読する解読手段と、
解読手段による解読結果に基づいて、命令を実行する実行手段とを備え、
前記実行手段は、複数のデータ対に対してＳＩＭＤ型の演算を行う旨の命令が前記解読手段によって解読された場合に、前記複数のデータ対それぞれに対して、前記フラグ記憶手段に記憶されたフラグによって特定されるＳＩＭＤ型の演算を行う
ことを特徴とするプロセッサ。
【請求項５４】
前記フラグ記憶手段には、第１及び第２フラグが記憶され、
前記命令には、第１及び第２データ対の指定が含まれ、
前記実行手段は、前記第１データ対に対して、前記第１フラグの値に対応する演算を施すとともに、前記第２データ対に対して、前記第２フラグの値に対応する演算を施す
ことを特徴とする請求項５３記載のプロセッサ。
【請求項５５】
前記フラグ記憶手段には、第１及び第２フラグが記憶され、
前記命令には、データ対の指定が含まれ、
前記実行手段は、前記データ対に対して、前記第１フラグの値に対応する演算を施すとともに、前記データ対に対して、前記第２フラグの値に対応する演算を施す
ことを特徴とする請求項５３記載のプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ＤＳＰやＣＰＵ等のプロセッサに関し、特に、音声や画像等の信号処理に好適なプロセッサに関する。
【０００２】
【従来の技術】
マルチメディア技術の発展に伴い、音声や画像の信号処理等に代表されるメディア処理を高速に実行するプロセッサが求められている。その要求に応える従来のプロセッサとして、ＳＩＭＤ（Ｓｉｎｇｌｅ　Ｉｎｓｔｒｕｃｔｉｏｎ　Ｍｕｌｔｉｐｌｅ　Ｄａｔａ）型の命令をサポートしているプロセッサがある。例えば、米国インテル社のＰｅｎｔｉｕｍ（Ｒ）／同ＩＩＩ／同４のＭＭＸ／ＳＳＥ／ＳＳＥ２等である。インテル社のＭＭＸであれば、６４ビット長のＭＭＸレジスタに格納された最大８個の整数を対象として、１つの命令で同一のオペレーションを実行することができる。
【０００３】
【発明が解決しようとする課題】
しかしながら、上記の従来のプロセッサは、メディア処理に対する多様な要求に十分に応えているとは言えないという問題がある。
【０００４】
例えば、従来のプロセッサは、１つの命令で複数のデータに対する演算を実行したり、１つの命令で複数のデータをコンペアしたりすることができるものの、それら複数のコンペア結果を１つの命令で評価するということができない。例として、従来のプロセッサは、１つの命令で、３２ビット長の２つのレジスタに格納されたデータどうしをバイト単位でコンペアし、その結果を４つのフラグにセットするという処理を実行するものの、１つの命令で、それら４つのフラグの値すべてがゼロであるか否かを判別することができない。そのために、４つのフラグを読み出し、すべてがゼロであるか否かを判別する複数の命令が必要となる。これでは、例えば、４つの画素値を単位として他の画素値との比較を行うたびに、その比較結果を評価するための複数の命令が必要とされ、命令数の増加を招き、画像処理の速度が低下する。
【０００５】
そこで、本発明は、このような状況に鑑みてなされたものであり、高機能なＳＩＭＤ演算を実行するプロセッサ、及び、デジタル信号処理を高速に実行するマルチメディア用途に適したプロセッサを提供することを目的とする。
【０００６】
【課題を解決するための手段】
上記目的を達成するために、本発明に係る第１のプロセッサは、ＳＩＭＤ型の命令を実行するプロセッサであって、命令を解読する解読手段と、解読手段による解読結果に基づいて、命令を実行する実行手段とを備え、前記実行手段は、複数のデータを対象とするＳＩＭＤ型の比較命令による比較結果を判定する旨の命令が前記解読手段によって解読された場合に、前記複数のデータ全てについて同一の比較結果が得られたか否かを判定し、その結果を生成することを特徴とする。
【０００７】
また、本発明に係る第２のプロセッサは、外部メモリと接続されるプロセッサであって、データを記憶するレジスタと、命令を解読する解読手段と、解読手段による解読結果に基づいて、命令を実行する実行手段とを備え、前記実行手段は、レジスタの値を外部メモリに格納する旨の命令が前記解読手段によって解読された場合に、前記レジスタに格納されている４以上のバイトからなるワードデータのうち、上位ハーフワードの最下位１バイトと下位ハーフワードの最下位１バイトとを前記外部メモリに格納することを特徴とする。
【０００８】
また、本発明に係る第３のプロセッサは、命令を解読し実行するプロセッサであって、データを記憶するレジスタと、命令を解読する解読手段と、解読手段による解読結果に基づいて、命令を実行する実行手段とを備え、前記実行手段は、前記レジスタの上位桁にデータを格納する旨の命令が前記解読手段によって解読された場合に、前記レジスタのうち、前記上位桁を除く記憶領域の値を変更することなく、前記上位桁だけに前記データを格納することを特徴とする。
【０００９】
また、本発明に係る第４のプロセッサは、ＳＩＭＤ型の命令を実行するプロセッサであって、フラグを格納するフラグ記憶手段と、命令を解読する解読手段と、解読手段による解読結果に基づいて、命令を実行する実行手段とを備え、前記実行手段は、第１レジスタと第２レジスタとをオペランドとするＳＩＭＤ型の演算命令が前記解読手段によって解読された場合に、前記フラグ記憶手段に格納されたフラグが第１状態を示すときには、前記第１レジスタだけをオペランドとして前記ＳＩＭＤ型の演算を実行し、前記フラグが第２状態を示すときには、前記第１レジスタと第２レジスタをオペランドとして前記ＳＩＭＤ型の演算を実行することを特徴とする。
【００１０】
また、本発明に係る第５のプロセッサは、ＳＩＭＤ型の命令を実行するプロセッサであって、命令を解読する解読手段と、解読手段による解読結果に基づいて、命令を実行する実行手段とを備え、前記実行手段は、複数のデータそれぞれの符号に基づいて値を生成する旨のＳＩＭＤ型の命令が前記解読手段によって解読された場合に、前記複数のデータそれぞれが正、ゼロ及び負のいずれの値であるかを示すデータを生成することを特徴とする。
【００１１】
また、本発明に係る第６のプロセッサは、ＳＩＭＤ型の命令を実行するプロセッサであって、第１パラメータ及び第２パラメータを指定するパラメータ指定手段と、命令を解読する解読手段と、解読手段による解読結果に基づいて、命令を実行する実行手段とを備え、前記実行手段は、第１データを操作する旨の命令が前記解読手段によって解読された場合に、前記第１データを前記第１パラメータに基づいてビットシフトし、得られたシフトデータのうち、前記第２パラメータによって特定される単位長位置の複数の単位長データを出力することを特徴とする。
【００１２】
また、本発明に係る第７のプロセッサは、命令を解読し実行するプロセッサであって、命令を解読する解読手段と、解読手段による解読結果に基づいて、命令を実行する実行手段とを備え、前記実行手段は、第１及び第２データをオペランドとする加算命令が前記解読手段によって解読された場合に、前記第１データがゼロ又は正であるときには、前記第１データと前記第２データと１とを加算した結果を生成し、前記第１データが負であるときには、前記第１データと前記第２データとを加算した結果を生成することを特徴とする。
【００１３】
また、本発明に係る第８のプロセッサは、命令を解読し実行するプロセッサであって、複数のレジスタと、命令を解読する解読手段と、解読手段による解読結果に基づいて、命令を実行する実行手段とを備え、前記実行手段は、第１及び第２レジスタの値を転送する旨の命令が前記解読手段によって解読された場合に、前記第１レジスタの値を第３レジスタに格納するとともに、前記第２レジスタの値を前記第３レジスタと連続する位置に設けられた第４レジスタに格納することを特徴とする。
【００１４】
また、本発明に係る第９のプロセッサは、命令を解読し実行するプロセッサであって、条件実行命令のプレディケートに用いられる複数のフラグを記憶するフラグ記憶手段と、命令を解読する解読手段と、解読手段による解読結果に基づいて、命令を実行する実行手段とを備え、前記実行手段は、前記フラグをオペランドとするループの分岐命令が前記解読手段によって解読された場合に、ループの先頭への分岐とともに前記フラグの設定を行うことを特徴とする。また、命令を解読し実行するプロセッサであって、分岐先アドレスを格納する分岐レジスタと条件実行命令のプレディケートに用いられる複数のフラグを記憶するフラグ記憶手段と、命令を解読する解読手段と、解読手段による解読結果に基づいて、命令を実行する実行手段とを備え、前記実行手段は、前記フラグをオペランドとする分岐レジスタへの格納命令が前記解読手段によって解読された場合に、ループの先頭アドレスを前記分岐レジスタに格納するとともに前記フラグの設定を行うことを特徴とする。
【００１５】
また、本発明に係る第１０のプロセッサは、ＳＩＭＤ型の命令を実行するプロセッサであって、命令を解読する解読手段と、解読手段による解読結果に基づいて、命令を実行する実行手段とを備え、前記実行手段は、複数のデータ対を対象として差分絶対値和を行う旨のＳＩＭＤ型の命令が前記解読手段によって解読された場合に、前記複数のデータ対それぞれの差分絶対値を加算した値を生成することを特徴とする。
【００１６】
また、本発明に係る第１１のプロセッサは、命令を解読し実行するプロセッサであって、命令を解読する解読手段と、解読手段による解読結果に基づいて、命令を実行する実行手段とを備え、前記実行手段は、第１及び第２データをオペランドとする飽和命令が前記解読手段によって解読された場合に、前記第１データが前記第２データによって特定される飽和値よりも大きいときには、前記飽和値を生成し、前記第１データが前記飽和値以下であるときには、前記第１データを生成することを特徴とする。
【００１７】
また、本発明に係る第１２のプロセッサは、命令を解読し実行するプロセッサであって、ｎ単位長の複数のレジスタと、命令を解読する解読手段と、解読手段による解読結果に基づいて、命令を実行する実行手段とを備え、前記実行手段は、第１〜第３レジスタと１つのパラメータとをオペランドとして単位長単位で選択する旨の命令が前記解読手段によって解読された場合に、前記第１及び第２レジスタに格納された２ｎ個の単位長データの中から、前記パラメータによって選択されるｎ個の単位長データを前記第３レジスタに格納することを特徴とする。
【００１８】
また、本発明に係る第１３のプロセッサは、ＳＩＭＤ型の命令を実行するプロセッサであって、命令を解読する解読手段と、解読手段による解読結果に基づいて、命令を実行する実行手段とを備え、前記実行手段は、ＳＩＭＤ型の命令が前記解読手段によって解読された場合に、ＳＩＭＤ型の演算を行うことによって複数の演算結果を生成し、前記複数の演算結果の少なくとも１つについてビット拡張を行うことを特徴とする。
【００１９】
また、本発明に係る第１４のプロセッサは、ＳＩＭＤ型の命令を実行するプロセッサであって、フラグを記憶するフラグ記憶手段と、命令を解読する解読手段と、解読手段による解読結果に基づいて、命令を実行する実行手段とを備え、前記実行手段は、複数のデータ対に対してＳＩＭＤ型の演算を行う旨の命令が前記解読手段によって解読された場合に、前記複数のデータ対それぞれに対して、前記フラグ記憶手段に記憶されたフラグによって特定されるＳＩＭＤ型の演算を行うことを特徴とする。
【００２０】
なお、本発明は、このような特徴的な命令を実行するプロセッサとして実現することができるだけでなく、複数のデータ等に対する演算処理方法として実現したり、特徴的な命令を含むプログラムとして実現したりすることもできる。そして、そのようなプログラムは、ＣＤ−ＲＯＭ等の記録媒体やインターネット等の伝送媒体を介して流通させることができるのは言うまでもない。
【００２１】
【発明の実施の形態】
本発明に係るプロセッサのアーキテクチャについて説明する。本プロセッサの命令は通常のマイコンに比べて並列性が高く、ＡＶメディア系信号処理技術分野をターゲットとして開発された汎用プロセッサである。携帯電話、モバイルＡＶ機器、デジタルＴＶ、ＤＶＤ等に共通コアを使用することにより、ソフト再利用性を向上させることができる。また、本プロセッサは、高性能・高コストパフォーマンスで多くのメディア処理を実現することができ、さらに、開発効率向上を目的とした高級言語開発環境を提供する。
【００２２】
図１は、本プロセッサの概略ブロック図である。本プロセッサ１は、命令制御部１０、デコード部２０、レジスタファイル３０、演算部４０、Ｉ／Ｆ部５０、命令メモリ部６０、データメモリ部７０、拡張レジスタ部８０及びＩ／Ｏインターフェース部９０から構成される。演算部４０は、ＳＩＭＤ型命令の演算を実行する算術論理・比較演算器４１〜４３、乗算・積和演算器４４、バレルシフタ４５、除算器４６及び変換器４７からなる。乗算・積和演算器４４は、ビット精度を落とさないように、最長で６５ビットで累算する。また、乗算・積和演算器４４は、算術論理・比較演算器４１〜４３と同様、ＳＩＭＤ型命令の実行が可能である。更に、このプロセッサ１は、算術論理・比較演算命令が最大３並列実行可能である。
【００２３】
図２は、算術論理・比較演算器４１〜４３の概略図を示す。算術論理・比較演算器４１〜４３それぞれは、ＡＬＵ部４１ａ、飽和処理部４１ｂ及びフラグ部４１ｃから構成される。ＡＬＵ部４１ａは、算術演算器、論理演算器、比較器、ＴＳＴ器からなる。対応する演算データのビット幅は、８ビット（演算器を４並列で使用）、１６ビット（演算器を２並列で使用）、３２ビットである（全演算器で３２ビットデータ処理）。更に算術演算結果に対しては、フラグ部４１ｃ等により、オーバーフローの検出とコンディションフラグの生成が行われる。各演算器、比較器、ＴＳＴ器の結果は、算術右シフト、飽和処理部４１ｂによる飽和、最大・最小値検出、絶対値生成処理が行われる。
【００２４】
図３は、バレルシフタ４５の構成を示すブロック図である。バレルシフタ４５は、セレクタ４５ａ、４５ｂ、上位バレルシフタ４５ｃ、下位バレルシフタ４５ｄ及び飽和処理部４５ｅから構成され、データの算術シフト（２の補数体系のシフト）または、論理シフト（符号なしシフト）を実行する。通常は、３２ビットもしくは、６４ビットのデータを入出力としている。レジスタ３０ａ、３０ｂに格納された被シフトデータに対して、別のレジスタまたは即値でシフト量が指定される。データは、左６３ビット〜右６３ビットの算術または論理シフトが行われ、入力ビット長で出力される。
【００２５】
また、バレルシフタ４５は、ＳＩＭＤ型命令に対して、８、１６、３２、６４ビットのデータをシフトすることができる。例えば、８ビットデータのシフトを４並列で処理することができる。
【００２６】
算術シフトは、２の補数体系のシフトであり、加算や減算時の小数点の位置合わせや、２のべき乗の乗算（２、２の２乗、２の（−１）乗、２の（−２）乗倍など）等のために行われる。
【００２７】
図４は、変換器４７の構成を示すブロック図である。変換器４７は、飽和ブロック（ＳＡＴ）４７ａ、ＢＳＥＱブロック４７ｂ、ＭＳＫＧＥＮブロック４７ｃ、ＶＳＵＭＢブロック４７、ＢＣＮＴブロック４７ｅ及びＩＬブロック４７ｆから構成される。
【００２８】
飽和ブロック（ＳＡＴ）４７ａは、入力データに対する飽和処理を行う。３２ビットデータを飽和処理するブロックを２つ持つことにより、２並列のＳＩＭＤ型命令をサポートする。
【００２９】
ＢＳＥＱブロック４７ｂは、ＭＳＢから連続する０か１をカウントする。
【００３０】
ＭＳＫＧＥＮブロック４７ｃは、指定されたビット区間を１、それ以外を０として出力する。
【００３１】
ＶＳＵＭＢブロック４７ｄは、入力データを指定されたビット幅に区切り、その総和を出力する。
【００３２】
ＢＣＮＴブロック４７ｅは、入力データで１となっているビットの数をカウントする。
【００３３】
ＩＬブロック４７ｆは、入力データを指定されたビット幅に区切り、各データブロックを入れ換えた値を出力する。
【００３４】
図５は、除算器４６の構成を示すブロック図である。除算器４６は、被除数を６４ビット、除数を３２ビットとし、商と剰余を３２ビットずつ出力する。商と剰余を求めるまでに３４サイクルを必要とする。符号付き、符号なし、両方のデータを扱うことが可能である。ただし、被除数と除数において符号の有無の設定は共通とする。その他、オーバーフローフラグ、０除算フラグを出力する機能を有する。
【００３５】
図６は、乗算・積和演算器４４の構成を示すブロック図である。乗算・積和演算器４４は、２つの３２ビット乗算器（ＭＵＬ）４４ａ、４４ｂ、３つの６４ビット加算器（Ａｄｄｅｒ）４４ｃ〜４４ｅ、セレクタ４４ｆ及び飽和処理部（Ｓａｔｕｒａｔｉｏｎ）４４ｇから構成され、以下の乗算、積和演算を行う。
・３２×３２ビットのｓｉｇｎｅｄの乗算、積和、積差演算
・３２×３２ビットのｕｎｓｉｇｎｅｄの乗算
・１６×１６ビットの２並列のｓｉｇｎｅｄの乗算、積和、積差演算
・３２×１６ビットの２並列のｓｉｇｎｅｄの乗算、積和、積差演算
これらの演算を整数、固定小数点フォーマット（ｈ１、ｈ２、ｗ１、ｗ２）のデータに対して行う。また、これらの演算に対し、丸め、飽和を行う。
【００３６】
図７は、命令制御部１０の構成を示すブロック図である。命令制御部１０は、命令キャッシュ１０ａ、アドレス管理部１０ｂ、命令バッファ１０ｃ〜１０ｅ、ジャンプバッファ１０ｆ及びローテーション部（ｒｏｔａｔｉｏｎ）１０ｇから構成され、通常時及び分岐時の命令供給を行う。１２８ビットの命令バッファを３つ（命令バッファ１０ｃ〜１０ｅ）持つことにより、最大並列実行数に対応している。命令制御部１０は、分岐処理に関しては、分岐実行前に、分岐先の命令をジャンプバッファ１０ｆに格納しておくとともに、後述するＴＡＲレジスタに予め分岐先アドレスを格納しておく（ｓｅｔｔａｒ命令）。したがって、分岐時においては、命令制御部１０は、ＴＡＲレジスタに格納された分岐先アドレス、及び、ジャンプバッファ１０ｆに格納された分岐先命令を使用して、分岐を行う。
【００３７】
なお、本プロセッサ１はＶＬＩＷアーキテクチャを持つプロセッサである。ここで、ＶＬＩＷアーキテクチャとは、１つの命令語中に複数の命令（ロード、ストア、演算、分岐など）を格納し、それらを全て同時に実行するアーキテクチャである。プログラマは、並列実行可能な命令を１つの発行グループとして記述することによって、その発行グループを並列処理させることができる。本明細書では、発行グループの区切りを”；；”で示す。以下に表記例を示す。
（例１）
ｍｏｖ　ｒ１，　０ｘ２３；；
この命令記述は、命令ｍｏｖのみを実行することを意味する。
（例２）
ｍｏｖ　ｒ１，　０ｘ３８
ａｄｄ　ｒ０，　ｒ１，　ｒ２
ｓｕｂ　ｒ３，　ｒ１，　ｒ２；；
これらの命令記述は、命令ｍｏｖ、ａｄｄ、ｓｕｂを３並列で実行することを意味する。
【００３８】
命令制御部１０は、発行グループを識別し、デコード部２０に送る。デコード部２０では、発行グループの命令を解析し、必要な資源を制御する。
【００３９】
次に、本プロセッサ１が備えるレジスタについて説明する。
本プロセッサ１のレジスタセットは、以下の表１に示される通りである。
【表１】
2004118470.tif 000003
【００４０】
また、本プロセッサ１のフラグセット（後述する条件フラグレジスタ等で管理されるフラグ）は、以下の表２に示される通りである。
【表２】
2004118470.tif 000004
【００４１】
図８は、汎用レジスタ（Ｒ０〜Ｒ３１）３０ａの構造を示す図である。汎用レジスタ（Ｒ０〜Ｒ３１）３０ａは、実行対象となっているタスクのコンテキストの一部を構成し、データまたはアドレスを格納する３２ビットのレジスタ群である。なお、汎用レジスタＲ３０およびＲ３１は、それぞれグローバルポインタ、スタックポインタとして、ハードウェアが使用する。
【００４２】
図９は、リンクレジスタ（ＬＲ）３０ｃの構造を示す図である。なお、このリンクレジスタ（ＬＲ）３０ｃと関連して、本プロセッサ１は、図示されていない退避レジスタ（ＳＶＲ）も備える。リンクレジスタ（ＬＲ）３０ｃは、関数コール時のリターンアドレスを格納する３２ビットのレジスタである。なお、退避レジスタ（ＳＶＲ）は、関数コール時の条件フラグレジスタのコンディションフラグ（ＣＦＲ．ＣＦ）を退避する１６ビットのレジスタである。リンクレジスタ（ＬＲ）３０ｃは、後述する分岐レジスタ（ＴＡＲ）と同様に、ループ高速化にも使用される。下位１ビットは常に０が読み出されるが、書き込み時には０を書き込む必要がある。
【００４３】
例えば、ｃａｌｌ（ｂｒｌ，ｊｍｐｌ）命令を実行した場合には、本プロセッサ１は、リンクレジスタ（ＬＲ）３０ｃに戻りアドレスを退避し、退避レジスタ（ＳＶＲ）にコンディションフラグ（ＣＦＲ．ＣＦ）を退避する。また、ｊｍｐ命令を実行した場合には、リンクレジスタ（ＬＲ）３０ｃから戻りアドレス（分岐先アドレス）を取り出し、プログラムカウンタ（ＰＣ）を復帰させる。さらに、ｒｅｔ（ｊｍｐｒ）命令を実行した場合には、リンクレジスタ（ＬＲ）３０ｃから分岐先アドレス（戻りアドレス）を取り出し、プログラムカウンタ（ＰＣ）に格納（復帰）する。さらに、退避レジスタ（ＳＶＲ）からコンディションフラグを取り出し、条件フラグレジスタ（ＣＦＲ）３２のコンディションンフラグ領域ＣＦＲ．ＣＦに格納（復帰）する。
【００４４】
図１０は、分岐レジスタ（ＴＡＲ）３０ｄの構造を示す図である。分岐レジスタ（ＴＡＲ）３０ｄは、分岐ターゲットアドレスを格納する３２ビットのレジスタである。主に、ループの高速化に用いられる。下位１ビットは常に０が読み出されるが、書き込み時には０を書き込む必要がある。
【００４５】
例えば、ｊｍｐ，ｊｌｏｏｐ命令を実行した場合には、本プロセッサ１は、分岐レジスタ（ＴＡＲ）３０ｄから分岐先アドレスを取り出し、プログラムカウンタ（ＰＣ）に格納する。分岐レジスタ（ＴＡＲ）３０ｄに格納されたアドレスの命令が分岐用命令バッファに格納されている場合は、分岐ペナルティが０になる。分岐レジスタ（ＴＡＲ）３０ｄにループの先頭アドレスを格納しておくことでループを高速化することができる。
【００４６】
図１１は、プログラム状態レジスタ（ＰＳＲ）３１の構造を示す図である。プログラム状態レジスタ（ＰＳＲ）３１は、実行対象となっているタスクのコンテキストの一部を構成し、以下に示されるプロセッサ状態情報を格納する３２ビットのレジスタである。
【００４７】
ビットＳＷＥ：ＶＭＰ（Ｖｉｒｔｕａｌ　Ｍｕｌｔｉ−Ｐｒｏｃｅｓｓｏｒ）のＬＰ（Ｌｏｇｉｃａｌ　Ｐｒｏｃｅｓｓｏｒ）切替えイネーブルを示す。「０」はＬＰ切替え不許可を示し、「１」はＬＰ切替え許可を示す。
【００４８】
ビットＦＸＰ：固定小数点モードを示す。「０」はモード０を示し、「１」はモード１を示す。
【００４９】
ビットＩＨ：割込み処理フラグであり、マスカブル割込み処理中であることを示す。「１」は割込み処理中であることを示し、「０」は割込み処理中でないことを示す。割込みが発生すると自動的にセットされる。ｒｔｉ命令で割込みから復帰したところが、他の割込み処理中かプログラム処理中であるのかを見分けるために使用される。
【００５０】
ビットＥＨ：エラーまたはＮＭＩを処理中であることを示すフラグである。「０」はエラー／ＮＭＩ割込み処理中でないことを示し、「１」はエラー／ＮＭＩ割込み処理中であることを示す。ＥＨ＝１のとき、非同期エラーまたはＮＭＩが発生した場合は、マスクされる。また、ＶＭＰイネーブル時はＶＭＰのプレート切り替えがマスクされる。
【００５１】
ビットＰＬ［１：０］：特権レベルを示す。「００」は特権レベル０、つまり、プロセッサアブストラクションレベルを示し、「０１」は特権レベル１（設定できない）を示し、「１０」は特権レベル２、つまり、システムプログラムレベルを示し、「１１」は特権レベル３、つまり、ユーザプログラムレベルを示す。
【００５２】
ビットＬＰＩＥ３：ＬＰ固有割込み３イネーブルを示す。「１」は割込み許可を示し、「０」は割込み不許可を示す。
【００５３】
ビットＬＰＩＥ２：ＬＰ固有割込み２イネーブルを示す。「１」は割込み許可を示し、「０」は割込み不許可を示す。
【００５４】
ビットＬＰＩＥ１：ＬＰ固有割込み１イネーブルを示す。「１」は割込み許可を示し、「０」は割込み不許可を示す。
【００５５】
ビットＬＰＩＥ０：ＬＰ固有割込み０イネーブルを示す。「１」は割込み許可を示し、「０」は割込み不許可を示す。
【００５６】
ビットＡＥＥ：ミスアライメント例外イネーブルを示す。「１」はミスアライメント例外許可を示し、「０」はミスアライメント例外不許可を示す。
【００５７】
ビットＩＥ：レベル割込みイネーブルを示す。「１」はレベル割込み許可を示し、「０」はレベル割込み不許可を示す。
【００５８】
ビットＩＭ［７：０］：割込みマスクを示す。レベル０〜７まで定義され、個々のレベルでマスクすることができる。レベル０が最も高いレベルとなる。ＩＭによりマスクされていない割込み要求のうち最も高いレベルを持った割込み要求のみがプロセッサ１に受理される。割込み要求を受理すると受理したレベル以下のレベルはハードウェアで自動的にマスクされる。ＩＭ［０］はレベル０のマスクであり、ＩＭ［１］はレベル１のマスクであり、ＩＭ［２］はレベル２のマスクであり、ＩＭ［３］はレベル３のマスクであり、ＩＭ［４］はレベル４のマスクであり、ＩＭ［５］はレベル５のマスクであり、ＩＭ［６］はレベル６のマスクであり、ＩＭ［７］はレベル７のマスクである。
【００５９】
ｒｅｓｅｒｖｅｄ：予約ビットを示す。常に０が読み出される。書き込む時は０を書き込む必要がある。
【００６０】
図１２は、条件フラグレジスタ（ＣＦＲ）３２の構造を示す図である。条件フラグレジスタ（ＣＦＲ）３２は、実行対象となっているタスクのコンテキストの一部を構成する３２ビットのレジスタであり、コンディションフラグ（条件フラグ）、オペレーションフラグ（演算フラグ）、ベクタコンディションフラグ（ベクタ条件フラグ）、演算命令用ビット位置指定フィールド、ＳＩＭＤデータアライン情報フィールドから構成される。
【００６１】
ビットＡＬＮ［１：０］：アラインモードを示す。ｖａｌｎｖｃ命令のアラインモードを設定する。
【００６２】
ビットＢＰＯ［４：０］：ビットポジションを示す。ビット位置指定の必要な命令で使用する。
【００６３】
ビットＶＣ０〜ＶＣ３：ベクタ条件フラグである。ＬＳＢ側のバイトあるいはハーフワードから順にＶＣ０に対応し、ＭＳＢ側がＶＣ３に対応する。
【００６４】
ビットＯＶＳ：オーバーフローフラグ（サマリー）である。飽和発生やオーバーフロー検出でセットされる。検出されなかった場合は、命令実行前の値を保持する。クリアはソフトで行う必要がある。
【００６５】
ビットＣＡＳ：キャリーフラグ（サマリー）である。ａｄｄｃ命令でキャリーまたはｓｕｂｃ命令でボローが発生した場合セットされる。ａｄｄｃ命令でキャリーもしくはｓｕｂｃ命令でボローが発生しなかった場合は、命令実行前の値を保持する。クリアはソフトで行う必要がある。
【００６６】
ビットＣ０〜Ｃ７：コンディションフラグである。フラグＣ７は常に値が１である。フラグＣ７へのＦＡＬＳＥ条件の反映（０書き込み）は無視される。
【００６７】
ｒｅｓｅｒｖｅｄ：予約ビットを示す。常に０が読み出される。書き込む時は０を書き込む必要がある。
【００６８】
図１３は、アキュムレータ（Ｍ０，Ｍ１）３０ｂの構造を示す図である。このアキュムレータ（Ｍ０，Ｍ１）３０ｂは、実行対象となっているタスクのコンテキストの一部を構成し、図１３（ａ）に示される３２ビットレジスタＭＨ０−ＭＨ１（乗除算・積和用レジスタ（上位３２ビット））と、図１３（ｂ）に示される３２ビットレジスタＭＬ０−ＭＬ１乗除算・積和用レジスタ（下位３２ビット）とからなる。
【００６９】
レジスタＭＨ０−ＭＨは、乗算命令では結果の上位３２ビットを格納するのに使用される。積和命令ではアキュムレータの上位３２ビットとして使用される。また、ビットストリームを取り扱う場合に汎用レジスタと組み合わせて使用することができる。レジスタＭＬ０−ＭＬ１は、乗算命令では結果の下位３２ビットを格納するのに使用される。積和命令ではアキュムレータの下位３２ビットとして使用される。
【００７０】
図１４は、プログラムカウンタ（ＰＣ）３３の構造を示す図である。このプログラムカウンタ（ＰＣ）３３は、実行対象となっているタスクのコンテキストの一部を構成し、実行中の命令のアドレスを保持する３２ビットのカウンタである。下位１ビットは常に０が格納される。
【００７１】
図１５は、ＰＣ退避用レジスタ（ＩＰＣ）３４の構造を示す図である。このＰＣ退避用レジスタ（ＩＰＣ）３４は、実行対象となっているタスクのコンテキストの一部を構成する３２ビットのレジスタであり、下位１ビットは常に０が読み出されるが、書き込み時には０を書き込む必要がある。
【００７２】
図１６は、ＰＳＲ退避用レジスタ（ＩＰＳＲ）３５の構造を示す図である。このＰＳＲ退避用レジスタ（ＩＰＳＲ）３５は、実行対象となっているタスクのコンテキストの一部を構成し、プログラム状態レジスタ（ＰＳＲ）３１を退避するための３２ビットのレジスタであり、プログラム状態レジスタ（ＰＳＲ）３１の予約ビットに対応する部分は常に０が読み出されるが、書き込み時には０を書き込む必要がある。
【００７３】
次に、本プロセッサ１のメモリ空間について説明する。本プロセッサ１では、４ＧＢのリニアなメモリ空間を３２分割し、１２８ＭＢ単位の空間に命令ＳＲＡＭ（Ｓｔａｔｉｃ　ＲＡＭ）とデータＳＲＡＭが割り当てられる。この１２８ＭＢの空間を１ブロックとして、ＳＡＲ（ＳＲＡＭ　Ａｒｅａ　Ｒｅｇｉｓｔｅｒ）にアクセスしたいブロックを設定する。アクセスされたアドレスがＳＡＲで設定された空間である場合は、直接命令ＳＲＡＭ／データＳＲＡＭに対してアクセスを行うが、ＳＡＲで設定された空間でない場合は、バスコントローラ（ＢＣＵ）に対してアクセス要求を出する。ＢＣＵにはオン・チップ・メモリ（ＯＣＭ）、外部メモリ、外部デバイス、Ｉ／Ｏポート等が接続されており、それらのデバイスに対して読み書きを行うことができる。
【００７４】
図１７は、本プロセッサ１のパイプライン動作を示すタイミング図である。本プロセッサ１は、本図に示されるように、基本的に命令フェッチ、命令割り当て（ディスパッチ）、デコード、実行、書き込みの５段パイプラインで構成されている。
【００７５】
図１８は、本プロセッサ１による命令実行時の各パイプライン動作を示すタイミング図である。命令フェッチステージでは、プログラムカウンタ（ＰＣ）３３で指定されるアドレスの命令メモリをアクセスし、命令を命令バッファ１０ｃ〜１０ｅ等に転送する。命令割り当てステージでは、分岐系命令に対する分岐先アドレス情報の出力、入力レジスタ制御信号の出力、可変長命令の割り当てを行い、命令をインストラクションレジスタ（ＩＲ）に転送する。デコードステージでは、ＩＲをデコード部２０に入力し、演算器制御信号、メモリアクセス信号を出力する。実行ステージでは、演算を実行、演算結果をデータメモリか汎用レジスタ（Ｒ０〜Ｒ３１）３０ａに出力する。書き込みステージでは、データ転送、演算結果を汎用レジスタに格納する。
【００７６】
本プロセッサ１は、ＶＬＩＷアーキテクチャにより上記の処理を最高３並列で行うことができる。したがって、図１８に示された動作については、本プロセッサ１は、図１９に示されるタイミングで並列に実行する。
【００７７】
次に、以上のように構成された本プロセッサ１の命令セットについて説明する。
以下の表３〜表５は、本プロセッサ１が実行する命令をカテゴリー別に分類した表である。
【表３】
2004118470.tif 000005
【表４】
2004118470.tif 000006
【表５】
2004118470.tif 000007
【００７８】
なお、表中の「演算器」は、その命令が使用する演算器を示す。演算器の略号の意味は次の通りである。つまり、「Ａ」はＡＬＵ命令、「Ｂ」は分岐命令、「Ｃ」は変換命令、「ＤＩＶ」は除算命令、「ＤＢＧＭ」はデバッグ命令、「Ｍ」はメモリアクセス命令、「Ｓ１」、「Ｓ２」はシフト命令、「Ｘ１」、「Ｘ２」は乗算命令を意味する。
【００７９】
図２０は、本プロセッサ１が実行する命令のフォーマットを示す図である。そのフォーマットには、図２０（ａ）に示される１６ビット命令フォーマットと、図２０（ｂ）に示される３２ビット命令フォーマットとがある。
【００８０】
なお、図中における略号の意味は次の通りである。つまり、「Ｅ」はエンドビット（並列実行の境界）、「Ｆ」はフォーマットビット（００、０１、１０：１６ビット命令フォーマット、１１：３２ビット命令フォーマット）、「Ｐ」はプレディケート（実行条件：８個の条件フラグＣ０〜Ｃ７のいずれかを指定）、「ＯＰ」はオペコードフィールド、「Ｒ」はレジスタフィールド、「Ｉ」は即値フィールド、「Ｄ」ディスプースメントフィールドを意味する。なお、「Ｅ」フィールドはＶＬＩＷに特有のもので、Ｅ＝０の命令は次の命令と並列に実行される。つまり、「Ｅ」フィールドによって並列度が可変のＶＬＩＷを実現している。また、プレディケートは、コンディションフラグＣ０〜Ｃ７の値に基づいて命令を実行させるか実行させないかを制御するフラグであり、分岐命令を用いることなく選択的な実行を可能にする高速化技術の一つである。
【００８１】
図２１〜図３６は、本プロセッサ１が実行する命令の概略的な機能を説明する図である。つまり、図２１は、カテゴリー「ＡＬＵａｄｄ（加算）系」に属する命令を説明する図であり、図２２は、カテゴリー「ＡＬＵｓｕｂ（減算）系」に属する命令を説明する図であり、図２３は、カテゴリー「ＡＬＵｌｏｇｉｃ（論理演算）系ほか」に属する命令を説明する図であり、図２４は、カテゴリー「ＣＭＰ（比較演算）系」に属する命令を説明する図であり、図２５は、カテゴリー「ｍｕｌ（乗算）系」に属する命令を説明する図であり、図２６は、カテゴリー「ｍａｃ（積和演算）系」に属する命令を説明する図であり、図２７は、カテゴリー「ｍｓｕ（積差演算）系」に属する命令を説明する図であり、図２８は、カテゴリー「ＭＥＭｌｄ（メモリ読み出し）系」に属する命令を説明する図であり、図２９は、カテゴリー「ＭＥＭｓｔｏｒｅ（メモリ書き出し）系」に属する命令を説明する図であり、図３０は、カテゴリー「ＢＲＡ（分岐）系」に属する命令を説明する図であり、図３１は、カテゴリー「ＢＳａｓｌ（算術バレルシフト）系ほか」に属する命令を説明する図であり、図３２は、カテゴリー「ＢＳｌｓｒ（論理バレルシフト）系ほか」に属する命令を説明する図であり、図３３は、カテゴリー「ＣＮＶｖａｌｎ（算術変換）系」に属する命令を説明する図であり、図３４は、カテゴリー「ＣＮＶ（一般変換）系」に属する命令を説明する図であり、図３５は、カテゴリー「ＳＡＴｖｌｐｋ（飽和処理）系」に属する命令を説明する図であり、図３６は、カテゴリー「ＥＴＣ（その他）系」に属する命令を説明する図である。
【００８２】
これらの図において、項目「ＳＩＭＤ」は、その命令の型（ＳＩＳＤ（ＳＩＮＧＬＥ）かＳＩＭＤかの区別）を示し、項目「サイズ」は、演算の対象となる個々のオペランドのサイズを示し、項目「命令」は、その命令のオペコードを示し、項目「オペランド」は、その命令のオペランドを示し、項目「ＣＦＲ」は、条件フラグレジスタの変化を示し、項目「ＰＳＲ」は、プロセッサ状態レジスタの変化を示し、項目「代表的な動作」は、動作の概要を示し、項目「演算器」は、使用される演算器を示し、項目「３１１６」は、命令のサイズを示す。
【００８３】
次に、いくつかの特徴的な命令について、本プロセッサ１の動作を説明する。なお、各命令の動作の説明に用いられている各種記号の意味は、以下の表６〜表１０の通りである。
【表６】
2004118470.tif 000008
【表７】
2004118470.tif 000009
【表８】
2004118470.tif 000010
【表９】
2004118470.tif 000011
【表１０】
2004118470.tif 000012
【００８４】
［命令ｖｃｃｈｋ］
命令ｖｃｃｈｋは、ＳＩＭＤ型比較命令（ｖｃｍｐＣＣｂなど）による結果が全て０かどうかを判別し、その結果を条件フラグレジスタ（ＣＦＲ）３２にセットするＳＩＭＤ型の命令である。例えば、
ｖｃｃｈｋ
であれば、プロセッサ１は、図３７に示されるように、条件フラグレジスタ（ＣＦＲ）３２のベクタ条件フラグＶＣ０〜ＶＣ３（１１０）が全て０であるか判定し、全て０である場合に、条件フラグレジスタ（ＣＦＲ）３２のコンディションフラグＣ４及びＣ５をそれぞれ１及び０にセットし、そうでない場合に、コンディションフラグＣ４及びＣ５をそれぞれ０及び１にセットする。そして、コンディションフラグＣ０〜Ｃ３には、ベクタ条件フラグＶＣ０〜ＶＣ３を格納する。詳細な動作は図３８に示される通りである。
【００８５】
この命令によって、ＳＩＭＤ型比較命令の結果（特に、一致・不一致）の取り出しが早くなる。ファイル中のＥＯＦ（Ｅｎｄ　Ｏｆ　Ｆｉｌｅ）の検出などに効果的である。
【００８６】
［命令ｓｔｂｈ、ｓｔｂｈｐ］
命令ｓｔｂｈは、１つのレジスタに格納された２つのバイトデータ（上位１６ビットに格納されたバイトデータと下位１６ビットに格納されたバイトデータ）をメモリ等に格納する命令であり、命令ｌｄｂｈに対応する（反対方向にデータを転送する）命令である。例えば、
ｓｔｂｈ　（Ｒａ），Ｒｂ
であれば、プロセッサ１は、Ｉ／Ｆ部５０等により、図３９に示されるように、レジスタＲａが示すアドレスの記憶領域に、レジスタＲｂに格納された２つのバイトデータ（レジスタＲｂの第１６〜２３ビット及び第０〜７ビット）をストアする。詳細な動作は図４０に示される通りである。
【００８７】
命令ｓｔｂｈｐは、２つのレジスタ（ペアレジスタ）に格納された４つのバイトデータ（各レジスタの上位１６ビットに格納されたバイトデータと下位１６ビットに格納されたバイトデータ）をメモリ等に格納する命令であり、命令ｌｄｂｈｐに対応する（反対方向にデータを転送する）命令である。例えば、
ｓｔｂｈｐ　（Ｒａ），Ｒｂ：Ｒｂ＋１
であれば、プロセッサ１は、Ｉ／Ｆ部５０等により、図４１に示されるように、レジスタＲａが示すアドレスの記憶領域に、レジスタＲｂ及びＲｂ＋１に格納された４つのバイトデータ（各レジスタの第１６〜２３ビット及び第０〜７ビット）をストアする。詳細な動作は図４２に示される通りである。
【００８８】
これらの命令によって、バイトデータを１６ビットＳＩＭＤ型で扱う場合に、データの型変換が不要となり、処理が高速化される。
【００８９】
［命令ｓｅｔｈｉ］
命令ｓｅｔｈｉは、レジスタの下位１６ビットを変更することなく、上位１６ビットに即値を格納する命令である。例えば、
ｓｅｔｈｉ　Ｒａ，Ｉ１６
であれば、プロセッサ１は、図４３に示されるように、レジスタＲａの上位１６ビットに１６ビットの即値（Ｉ１６）を格納する。このとき、レジスタＲａの下位１６ビットは変化しない。詳細な動作は図４４に示される通りである。
【００９０】
この命令によって、命令「ｍｏｖ　Ｒｂ，Ｉ１６」と組み合わせることで、３２ビット即値をレジスタに設定することが可能となる。
【００９１】
［命令ｖａｄｄｈｖｃ、ｖａｄｄｒｈｖｃ］
命令ｖａｄｄｈｖｃは、ベクタ条件フラグの値によって、加算するソースを切り替えるＳＩＭＤ型の命令である。例えば、
ｖａｄｄｈｖｃ　Ｒｃ，Ｒａ，Ｒｂ
であれば、プロセッサ１は、演算部４０等により、図４５に示されるように、ハーフワードベクタ形式で、レジスタＲａの値と、レジスタＲａ又はＲｂの値とを加算し、その結果をレジスタＲｃに格納する。このとき、レジスタＲａ及びＲｂの値のいずれを加算するかは、ベクタ条件フラグＶＣ２の値による。具体的には、ベクタ条件フラグＶＣ２＝１の場合は、レジスタＲａの値とレジスタＲｂの値とを加算し、ＶＣ２＝０の場合は、レジスタＲａの値とレジスタＲａの値とを加算する。詳細な動作は図４６に示される通りである。
【００９２】
この命令は、画像処理における動き補償に有効である。加算結果レジスタＲｃの値を２で除した値がレジスタＲａ、あるいは、レジスタＲａとＲｂの平均値となるので、図４７に示されるように、動き補償のハーフペル（半画素単位の動き補償）において、整数画素及び半画素を問わずに同一プログラムで処理することができるというメリットがある。
【００９３】
なお、命令ｖａｄｄｒｈｖｃは、上記命令ｖａｄｄｈｖｃによる処理に、加算結果を丸める処理を付加したものに相当する。例えば、
ｖａｄｄｒｈｖｃ　Ｒｃ，Ｒａ，Ｒｂ
であれば、プロセッサ１は、算術論理・比較演算器４１等により、図４８に示されるように、ハーフワードベクタ形式で、レジスタＲａの値と、レジスタＲａ又はＲｂの値とを加算し、さらに、丸めのための１を加算し、その結果をレジスタＲｃに格納する。他の動作は、命令ｖａｄｄｈｖｃと同様である。詳細な動作は図４９に示される通りである。
この命令も、画像処理における動き補償に有効であることは言うまでもない。
【００９４】
なお、上記命令ｖａｄｄｈｖｃ及び命令ｖａｄｄｒｈｖｃそれぞれの機能として、１ビット右シフト（２で割る処理）を付加してもよい。これによって、プロセッサは、整数画素又は半画素の画素値を直接算出することが可能となる。
【００９５】
また、上記命令ｖａｄｄｈｖｃ及び命令ｖａｄｄｒｈｖｃの機能を併せ持つ命令を定義してもよい。例えば、コンディションフラグの値によって、命令ｖａｄｄｈｖｃ及び命令ｖａｄｄｈｒｖｃのいずれかの動作を行う新たな命令を設けてもよい。これによって、丸めあり・なしのいずれの場合も同一プログラムで処理することができる。
【００９６】
［命令ｖｓｇｎｈ］
命令ｖｓｇｎｈは、レジスタの符号（正／負）及びゼロによって値を生成するＳＩＭＤ型の命令である。例えば、
ｖｓｇｎｈ　Ｒａ，Ｒｂ
であれば、プロセッサ１は、図５０に示されるように、ハーフワードベクタ形式で、レジスタＲａの値が正の場合は１を、負の場合は−１を、０の場合は０を、レジスタＲｂに格納する。詳細な動作は図５１に示される通りである。
【００９７】
この命令は、ある値が正のときに１、負のときに−１、ゼロのときに０を出力するので、画像処理における逆量子化に有効である。特に、本プロセッサ１では、ＳＩＭＤ型で演算しにくいものを高速化することが可能となる。
【００９８】
［命令ｖａｌｎｖｃ１、ｖａｌｎｖｃ２、ｖａｌｎｖｃ３、ｖａｌｎｖｃ４］
命令ｖａｌｎｖ１は、データをバイトアラインし、ベクタ条件フラグによって取り出すバイトデータを変更するＳＩＭＤ型の命令である。例えば、
ｖａｌｎｖｃ１　Ｒｃ，Ｒａ，Ｒｂ
であれば、プロセッサ１は、図５２に示されるように、条件フラグレジスタ（ＣＦＲ）３２のビットＡＬＮ［１：０］の値に応じてレジスタＲａとレジスタＲｂとを連結したビット列をシフトさせることでバイトアラインし、ベクタ条件フラグＶＣ０の値に応じて取り出した４つのバイトデータをレジスタＲｃに格納する。具体的には、ベクタ条件フラグＶＣ０＝０の場合は、バイトアラインした後のデータから、４つのバイトデータａ，ａ，ｂ，ｂを取り出してレジスタＲｃに格納し、ベクタ条件フラグＶＣ０＝１の場合は、４つのバイトデータａ，ｂ，ｂ，ｃを取り出してレジスタＲｃに格納する。詳細な動作は図５３に示される通りである。
【００９９】
この命令は、画像処理における動き補償に有効である。ハーフワードベクタ単位で、加算結果レジスタＲｃの値を２で除した値がａ及びｂ、あるいは、（ａ＋ｂ）／２及び（ｂ＋ｃ）／２に等しい値となるので、図４７に示されるように、動き補償のハーフペル（半画素単位の動き補償）において、整数画素及び半画素を問わずに同一プログラムで処理することができるというメリットがある。
【０１００】
なお、命令ｖａｌｎｖｃ２、ｖａｌｎｖｃ３及びｖａｌｎｖｃ４は、図５２に示されるように、上記命令ｖａｌｎｖｃ１と基本的な動作は同じであり、バイトアラインされたデータから取り出す位置が異なるだけである。詳細な動作は、それぞれ、図５４、図５５、図５６に示される通りである。よって、これらの命令も、画像処理における動き補償に有効であるのは言うまでもない。
【０１０１】
なお、本発明は、アライン等の単位がバイトに限られるものではなく、バイトに代えて、ハーフワードやハーフバイトなどでもよい。
【０１０２】
［命令ａｄｄａｒｖｗ］
命令ａｄｄａｒｖｗは、２つの値を加算し、加算対象の一方が正である場合には更に１を加算する命令である。例えば、
ａｄｄａｒｖｗ　Ｒｃ，Ｒｂ，Ｒａ
であれば、プロセッサ１は、算術論理・比較演算器４１等により、図５７に示されるように、レジスタＲａの値とレジスタＲｂの値とを加算する。このとき、レジスタＲａの値が正である場合には、さらに、１を加算する。詳細な動作は図５８に示される通りである。
【０１０３】
この命令は、「絶対値丸め（ａｗａｙ　ｆｒｏｍ　ｚｅｒｏ）」に有効である。図５９に示されるように、絶対値丸めの対象となる値をレジスタＲａに格納しておくとともに、レジスタＲｂに、絶対値丸めを行うビットよりも下位のビットに相当するビットを１で埋めた値を格納しておく。その上で、上記命令を実行すると、レジスタＲａの値（ここでは、最上位ビットが符号ビットで、最上位から第２ビット目と第３ビット目の間に小数点が位置する固定小数点データ）に対して絶対値丸めを行った結果がレジスタＲｃに格納される。図５８に示される例では、レジスタＲｃの上位２ビットのほかをマスクすることにより、＋０．５に対して＋１が得られ、−０．５に対して−１が得られ、絶対値丸めが実現されている。したがって、この命令は、画像処理における絶対値丸めに有効である。
【０１０４】
［命令ｍｏｖｐ］
命令ｍｏｖｐは、任意の２つのレジスタの値を連続する２つのレジスタに転送する命令である。例えば、
ｍｏｖｐ　Ｒｃ：Ｒｃ＋１，Ｒａ，Ｒｂ
であれば、プロセッサ１は、Ｉ／Ｆ部５０等により、図６０に示されるように、レジスタＲａの値をレジスタＲｃに転送し、レジスタＲｂの値をレジスタＲｃ＋１に転送する。詳細な動作は図６１に示される通りである。
【０１０５】
この命令は、独立した２つのレジスタの移動を１サイクルで行うので、例えば、ループの内部において、ループ内のサイクル数を減らすという効果を発揮し得る。また、この命令によれば、レジスタリネーミング（レジスタの値の破壊）がないので、ループの世代間（イタレーション間）でのデータの移動を行う際にも有効である。
【０１０６】
なお、本発明は、演算の種類が転送（ｍｏｖ）に限られるものではなく、一項演算（ｎｅｇなど）や二項演算（ａｄｄ）でもよい。たとえば、任意の２つのレジスタ（Ｒ０，Ｒ６）と連続する２つのレジスタ（Ｒ２，Ｒ３）を指定した加算命令であれば、２つの加算オペレーション「Ｒ０＋Ｒ２→Ｒ２」及び「Ｒ６＋Ｒ３→Ｒ３」が１つの命令（１つのサイクル）で実行される。
【０１０７】
［命令ｊｌｏｏｐ、ｓｅｔｔａｒ］
命令ｊｌｏｏｐは、ループにおける分岐とコンディションフラグ（ここでは、プレディケート）の設定とを行う命令である。例えば、
ｊｌｏｏｐ　Ｃ６，Ｃｍ，ＴＡＲ，Ｒａ
であれば、プロセッサ１は、アドレス管理部１０ｂ等により、（１）コンディションフラグＣｍに１をセットし、（２）レジスタＲａの値が０より小さい場合にコンディションフラグＣ６に０をセットし、（３）レジスタＲａの値に−１を加算し、レジスタＲａに格納し、（４）分岐レジスタ（ＴＡＲ）３０ｄが示すアドレスに分岐する。ジャンプバッファ１０ｆ（分岐用命令バッファ）に分岐用命令が充填されていない場合は、分岐先の命令を充填する。詳細な動作は図６２に示される通りである。
【０１０８】
一方、命令ｓｅｔｔａｒは、分岐先アドレスを分岐レジスタ（ＴＡＲ）３０ｄに格納するとともにコンディションフラグ（ここでは、プレディケート）の設定を行う命令である。例えば、
ｓｅｔｔａｒ　Ｃ６，Ｃｍ，Ｄ９
であれば、プロセッサ１は、アドレス管理部１０ｂ等により、（１）プログラムカウンタ（ＰＣ）３３とディスプレースメント値（Ｄ９）を加算したアドレスを分岐レジスタ（ＴＡＲ）３０ｄに格納し、（２）そのアドレスの命令をフェッチしてジャンプバッファ１０ｆ（分岐用命令バッファ）に格納し、（３）コンディションフラグＣ６を１に、コンディションフラグＣｍを０にセットする。詳細な動作は図６３に示される通りである。
【０１０９】
これらの命令ｊｌｏｏｐ及び命令ｓｅｔｔａｒは、プロログエピログ除去型（以下、プロエピ除去型）のソフトウェアパイプライニングによるループの高速化に有効な命令であり、通常、対で用いられる。なお、ソフトウェアパイプライニングは、コンパイラによるループ高速化手法の１つであり、ループ構造をプロログ部、カーネル部、　エピログ部に変換し、カーネル部については、各イタレーション（繰り返し）をその前後のイタレーションとオーバーラップさせることで、複数の命令が効率的に並列実行されることを可能にする。
【０１１０】
また、プロエピ除去型とは、図６４に示されるように、プロログ部及びエピログ部をプレディケートによる条件実行命令とすることで、プロログ部とエピログ部とを見かけ上、除去することである。図６４では、プロエピ除去型２ステージソフトウェアパイプライニングにおいて、コンディションフラグＣ６とＣ４は、それぞれ、エピログ命令（ステージ２）用、プロログ命令（ステージ１）用のプレディケートとなっている。
【０１１１】
以下、これらの命令ｊｌｏｏｐ及び命令ｓｅｔｔａｒが持つフラグ転送機能（コンディションフラグＣｍの設定）の意義について、フラグ転送機能を持たない通常の命令ｊｌｏｏｐ及び命令ｓｅｔｔａｒと比較しながら説明する。
【０１１２】
本実施の形態における上記命令ｊｌｏｏｐ及び命令ｓｅｔｔａｒがプロセッサ１の命令セットにない場合、つまり、通常の命令ｊｌｏｏｐ及び命令ｓｅｔｔａｒだけが命令セットに含まれる場合には、コンディションフラグＣｍの転送は、命令ｊｌｏｏｐ及び命令ｓｅｔｔａｒとは別個独立に行う必要がある。そのために、
（１）本来のループ実行とは無関係のフラグ転送命令が増加し、プロエピ除去型ソフトウェアパイプライニングによる性能低下を招く、
（２）フラグ間のデータ依存関係が増加し、フラグ間のデータ依存及び配置制限等により性能低下を招く、
（３）フラグ間転送命令を備える必要性が生じる、つまり、本来必要とならないフラグ間転送命令を命令セットに備える必要が出現し、命令セットのビットフィールドの圧迫を招くという問題がある。
【０１１３】
例えば、いま、図６５に示されるＣ言語のソースプログラムに対して、通常の命令ｊｌｏｏｐ及び命令ｓｅｔｔａｒを用いた場合には、コンパイラは、プロエピ除去型のソフトウェアパイプライニングによって、図６６に示される機械語プログラムを生成する。この機械語プログラムのループ部分（ラベルＬ０００２３〜命令ｊｌｏｏｐまで）から分かるように、コンディションフラグＣ４をセットする命令（命令ｃｍｐｅｑ）が必要となってくるために、ループ実行に３サイクル要している。さらに、コンディションフラグＣ４のセット及びリセットのための２命令が必要となっており、プロエピ除去の効果が減っている。
【０１１４】
これに対して、本実施の形態の命令ｊｌｏｏｐ及び命令ｓｅｔｔａｒが命令セットに含まれる場合には、コンパイラは、図６７に示される機械語プログラムを生成する。この機械語プログラムのループ部分（ラベルＬ０００２３〜命令ｊｌｏｏｐまで）から分かるように、コンディションフラグＣ４のセット及びリセットがそれぞれ命令ｊｌｏｏｐ及びｓｅｔｔａｒで行われ、そのための特別な命令が不要となり、ループ実行が２サイクルで済んでいる。
【０１１５】
このように、命令「ｊｌｏｏｐ　Ｃ６，Ｃｍ，ＴＡＲ，Ｒａ」及び命令「ｓｅｔｔａｒ　Ｃ６，Ｃｍ，Ｄ９」は、２ステージのプロエピ除去型ソフトウェアパイプライニングにおける実行サイクル数を削減するという効果を有する。
【０１１６】
なお、本プロセッサ１は、２ステージのソフトウェアパイプライニングだけでなく、３ステージのソフトウェアパイプライニングにも適用できる命令「ｊｌｏｏｐ　Ｃ６，Ｃ２：Ｃ４，ＴＡＲ，Ｒａ」及び命令「ｓｅｔｔａｒ　Ｃ６，Ｃ２：Ｃ４，Ｄ９」を備える。これらの命令「ｊｌｏｏｐ　Ｃ６，Ｃ２：Ｃ４，ＴＡＲ，Ｒａ」及び命令「ｓｅｔｔａｒ　Ｃ６，Ｃ２：Ｃ４，Ｄ９」は、上記２ステージ用の命令「ｊｌｏｏｐ　Ｃ６，Ｃｍ，ＴＡＲ，Ｒａ」及び命令「ｓｅｔｔａｒ　Ｃ６，Ｃｍ，Ｄ９」におけるレジスタＣｍがレジスタＣ２、Ｃ３及びＣ４に拡張されたものに相当する。
【０１１７】
つまり、
ｊｌｏｏｐ　Ｃ６，Ｃ２：Ｃ４，ＴＡＲ，Ｒａ
であれば、プロセッサ１は、アドレス管理部１０ｂ等により、（１）レジスタＲａが０より小さい場合にコンディションフラグＣ４に０をセットし、（２）コンディションフラグＣ３の値をコンディションフラグＣ２に転送し、コンディションフラグＣ４の値をコンディションフラグＣ３とＣ６に転送し、（３）レジスタＲａに−１を加算し、レジスタＲａに格納し、（４）分岐レジスタ（ＴＡＲ）３０ｄが示すアドレスに分岐する。ジャンプバッファ１０ｆに分岐先の命令が充填されていない場合は、分岐先の命令を充填する。詳細な動作は図６８に示される通りである。
【０１１８】
また、
ｓｅｔｔａｒ　Ｃ６，Ｃ２：Ｃ４，Ｄ９
であれば、プロセッサ１は、アドレス管理部１０ｂ等により、（１）プログラムカウンタ（ＰＣ）３３とディスプレースメント値（Ｄ９）を加算したアドレスを分岐レジスタ（ＴＡＲ）３０ｄに格納し、（２）そのアドレスの命令をフェッチしてジャンプバッファ１０ｆ（分岐用命令バッファ）に格納し、（３）コンディションフラグＣ４とＣ６を１に、コンディションフラグＣ２とＣ３を０にセットする。詳細な動作は図６９に示される通りである。
【０１１９】
これらの３ステージ用の命令「ｊｌｏｏｐ　Ｃ６，Ｃ２：Ｃ４，ＴＡＲ，Ｒａ」及び命令「ｓｅｔｔａｒ　Ｃ６，Ｃ２：Ｃ４，Ｄ９」におけるコンディションフラグの役割は、図７０に示される通りである。図７０（ａ）に示されるように、プロエピ除去型３ステージソフトウェアパイプライニングにおいて、コンディションフラグＣ２、Ｃ３、Ｃ４はそれぞれステージ３用、ステージ２用、ステージ１用のプレディケートとなっている。図７０（ｂ）は、そのときのフラグ転送による実効の推移を示す図である。
【０１２０】
これらの命令「ｊｌｏｏｐ　Ｃ６，Ｃ２：Ｃ４，ＴＡＲ，Ｒａ」及び命令「ｓｅｔｔａｒ　Ｃ６，Ｃ２：Ｃ４，Ｄ９」のフラグ転送の意義を示すプログラム例は、図７１〜図７３に示される通りである。図７１は、ソースプログラムの例を示し、図７２は、このようなフラグ転送機能を持たない命令ｊｌｏｏｐ及び命令ｓｅｔｔａｒを用いて生成した機械語プログラムの例を示し、図７３は、本実施の形態におけるフラグ転送機能を持つ命令ｊｌｏｏｐ及び命令ｓｅｔｔａｒを用いて生成した機械語プログラムの例を示す。図７２と図７３を比較して分かるように、本実施の形態におけるフラグ転送機能を持つ命令ｊｌｏｏｐ及び命令ｓｅｔｔａｒを用いることで、５つの命令が不要になるとともに、ループ実行も１サイクル少なくなっている。
【０１２１】
なお、４ステージ以上のソフトウェアパイプライニングについても同様であり、プレディケート用のコンディションフラグを増やせばよい。
【０１２２】
以上の特徴的な命令に加えて、本プロセッサ１は、上記図２１〜図３６に列挙されていない以下の特徴的な命令を実行することができる。
【０１２３】
［命令ｖｓａｄａ］
命令ｖｓａｄａは、差分絶対値和を算出するＳＩＭＤ型命令である。例えば、
ｖｓａｄａ　Ｒｃ，Ｒａ，Ｒｂ，Ｒｘ
であれば、プロセッサ１は、算術論理・比較演算器４１等により、図７４に示されるように、レジスタＲａの値とレジスタＲｂの値との差分をバイト単位でＳＩＭＤ演算し（４組のバイトそれぞれの差分を算出し）、４つの結果それぞれの絶対値をとって加算し、その結果にレジスタＲｘの値を加算し、その結果をレジスタＲｃに格納する。詳細な動作は図７５（ａ）に示される通りである。
【０１２４】
なお、プロセッサ１は、上記命令ｖａｓａｄａフォーマットにおける最後のオペランド（Ｒｘ）がない形式の命令についても実行する。例えば、
ｖｓａｄａ　Ｒｃ，Ｒａ，Ｒｂ
であれば、プロセッサ１は、算術論理・比較演算器４１等により、レジスタＲａの値とレジスタＲｂの値との差分をバイト単位でＳＩＭＤ演算し（４組のバイトそれぞれの差分を算出し）、４つの結果それぞれの絶対値をとって加算し、その結果をレジスタＲｃに格納する。詳細な動作は図７５（ｂ）に示される通りである。
【０１２５】
これらの命令ｖｓａｄａは、命令ｖａｓｕｂｂと命令ｖａｂｓｓｕｍｂとの複合命令である。命令ｖａｓｕｂｂは、バイト単位で、４組のＳＩＭＤデータそれぞれを減算し、その結果得られる４つの符号を条件フラグレジスタに格納するＳＩＭＤ型の命令である。一方、命令ｖａｂｓｓｕｍｂは、条件フラグレジスタに従って、バイト単位で、４組のＳＩＭＤデータそれぞれを絶対値加算し、その結果と他の４バイトデータとを加算するＳＩＭＤ型の命令である。
【０１２６】
したがって、この命令ｖｓａｄａにより、命令ｖａｓｕｂｂと命令ｖａｂｓｓｕｍｂとを連続して用いる場合に比べ、１サイクルで差分絶対値和が算出され、演算が高速化される。このような命令ｖｓａｄａは、画像処理の動き予測における差分絶対値和の算出等に有効である。
【０１２７】
なお、本発明は、データの単位がバイトに限られるものではなく、ハーフワードやハーフバイトなどでもよい。
【０１２８】
［命令ｓａｔｓｓ，ｓａｔｓｕ］
命令ｓａｔｓｓは、任意の位置（桁）で、符号付の値を符号付の値に飽和させる命令である。例えば、
ｓａｔｓｓ　Ｒｃ，Ｒａ，Ｒｂ
であれば、プロセッサ１は、飽和ブロック（ＳＡＴ）４７ａ等により、図７６に示されるように、レジスタＲａの値がレジスタＲｂによって特定される飽和値（レジスタＲｂの１の補数）よりも大きい場合には、その飽和値をレジスタＲｃに格納し、レジスタＲａの値が飽和値以下である場合には、レジスタＲａの値をレジスタＲｃに格納する。詳細な動作は図７７（ａ）に示される通りである。
【０１２９】
一方、命令ｓａｔｓｕは、任意の位置（桁）で、符号なしの値を符号付の値に飽和させる命令である。例えば、
ｓａｔｓｕ　Ｒｃ，Ｒａ，Ｒｂ
であれば、プロセッサ１は、飽和ブロック（ＳＡＴ）４７ａ等により、レジスタＲａの値がレジスタＲｂによって特定される飽和値よりも大きい場合には、その飽和値をレジスタＲｃに格納し、レジスタＲａの値が飽和値以下である場合には、レジスタＲａの値をレジスタＲｃに格納する。詳細な動作は図７７（ｂ）に示される通りである。
【０１３０】
このような命令ｓａｔｓｓ及び命令ｓａｔｓｕにより、任意の位置での飽和処理が可能となる。アセンブラプログラミングの際に特定の位置に飽和位置を合わせる必要がなくなり、プログラミングが容易となる。
【０１３１】
［命令ｂｙｔｅｓｅｌ］
命令ｂｙｔｅｓｅｌは、バイト単位で２つのレジスタのいずれか値を選択する命令である。例えば、
ｂｙｔｅｓｅｌ　Ｒｃ，Ｒａ，Ｒｂ，Ｒｘ
であれば、プロセッサ１は、演算部４０等により、図７８に示されるように、レジスタＲｘの値に基づいて、レジスタＲａ及びレジスタＲｂの８個のバイトデータのいずれかをレジスタＲｃに格納するという動作をレジスタＲｃの４つのバイトについて並列に行う。詳細な動作は図７９（ａ）、レジスタＲｘと選択されるバイトデータとの関係は図７９（ｂ）に示される通りである。
【０１３２】
なお、プロセッサ１は、以下のフォーマットの命令ｂｙｔｅｓｅｌについても実行する。つまり、
ｂｙｔｅｓｅｌ　Ｒｃ，Ｒａ，Ｒｂ，Ｉ１２
であれば、プロセッサ１は、演算部４０等により、１２ビットの即値に基づいて、バイト単位で、レジスタＲａ及びレジスタＲｂの８個のバイトデータのいずれかをレジスタＲｃに格納するという動作をレジスタＲｃの４つのバイトについて並列に行う。詳細な動作は図７９（ｃ）、即値Ｉ１２と選択されるバイトデータとの関係は図７９（ｄ）に示されに示される通りである。
【０１３３】
この命令ｂｙｔｅｓｅｌによって、バイトデータをレジスタの任意の位置に格納することができるため、データの入替繰り返しなどが高速化される。また、ＳＩＭＤ演算の柔軟性を増すことができるという効果もある。
【０１３４】
なお、上記命令「ｂｙｔｅｓｅｌ　Ｒｃ，Ｒａ，Ｒｂ，Ｒｘ」において、レジスタＲｘの空きビットなどを利用して、Ｒｃ［３１：２４］、Ｒｃ［２３：１６］、Ｒｃ［１５：８］、Ｒｃ［７：０］それぞれへの上記バイトデータの格納／格納しないを指定可能としてもよい。これによって、レジスタＲｃの値を更新するかしないかをバイト単位で選択することができる。
【０１３５】
なお、本発明は、データの単位がバイトに限られるものではなく、ハーフワードやハーフバイトなどでもよい。
【０１３６】
［ＳＩＭＤ演算の結果を拡張する命令］
本プロセッサ１は、以上のような命令だけでなく、ＳＩＭＤ演算に関連する補助的な処理を行う命令を実行することもできる。
【０１３７】
例えば、プロセッサ１は、ある命令が与えられると、図８０に示されるように、ＳＩＭＤ演算の結果の一部をビット拡張（符号拡張又はゼロ拡張）する補助的な処理を行う。図８０は、２つのレジスタに格納された値について、ハーフワード単位で、ストレートの位置関係又はクロスの位置関係にあるデータをＳＩＭＤ演算する様子を示し、図８０（ａ）は、得られた結果の下位ハーフワードをワードに拡張する処理を示し、図８０（ｂ）は、得られた結果の上位ハーフワードをワードに拡張する処理を示している。
【０１３８】
なお、ストレートの位置関係にあるデータをハーフワード単位でＳＩＭＤ演算する命令とは、例えば、命令ｖａｄｄｈなどであり、クロスの位置関係にあるデータをハーフワード単位でＳＩＭＤ演算する命令とは、例えば、命令ｖｘａｄｄｈなどである。
【０１３９】
また、プロセッサ１は、ある命令が与えられると、図８１に示されるように、ＳＩＭＤ演算の結果すべてをビット拡張する補助的な処理を行う。図８１は、２つのレジスタに格納された値について、ハーフワード単位で、ストレートの位置関係又はクロスの位置関係にあるデータをＳＩＭＤ演算する様子を示し、得られた２つのハーフワードそれぞれをワードに拡張する処理を示している。
【０１４０】
このようなＳＩＭＤ演算結果を拡張する命令は、ＳＩＭＤ演算を行った後に符号拡張又はゼロ拡張を行ってデータサイズを揃える場合に有効であり、ＳＩＭＤ演算と拡張処理が１サイクルで実行される。
【０１４１】
さらに、プロセッサ１は、ＳＩＭＤ演算に関連する補助的な命令として、コンディションフラグ等によって指定された種類のＳＩＭＤ演算を実行することもできる。例えば、プロセッサ１は、図８２に示されるように、コンディションフラグによって第１及び第２演算それぞれが「加算」及び「減算」として指定されている場合には、２つのレジスタの値に対して、ハーフワード単位で、ストレートの位置関係又はクロスの位置関係にあるデータどうしを、それぞれ、加算及び減算する。
【０１４２】
一例として、コンディションフラグＣ０及びＣ１が「１，０」である場合には、プロセッサ１は、算術論理・比較演算器４１等により、
（１）レジスタＲａの上位ハーフワードとレジスタＲｂの上位ハーフワードとを加算し、その結果をレジスタＲｃの上位ハーフワードに格納するとともに、
（２）レジスタＲａの下位ハーフワードからレジスタＲｂの下位ハーフワードを減算し、その結果をレジスタＲｃの下位ハーフワードに格納する。
【０１４３】
このようなＳＩＭＤ演算の種類が指定可能な命令は、演算の種類が固定的でなく、他の処理結果に依存して演算の種類が決定されるような処理に有効である。
【０１４４】
なお、本発明は、上記演算（１）及び（２）において、レジスタＲｂを使用しない場合に適用することができる。たとえば、
（１）レジスタＲａの上位ハーフワードとレジスタＲａの下位ハーフワードとを加算し、その結果をレジスタＲｃの上位ハーフワードに格納するとともに、
（２）レジスタＲａの上位ハーフワードからレジスタＲａの下位ハーフワードを減算し、その結果をレジスタＲｃの下位ハーフワードに格納してもよい。
【０１４５】
【発明の効果】
以上の説明から明らかなように、本発明に係るプロセッサは、ＳＩＭＤ型比較命令による結果が全て０かどうかを判別し、その結果を条件フラグにセットするというＳＩＭＤ型の特徴的な命令を実行する。これによって、ＳＩＭＤ型比較命令の結果（特に、一致・不一致）の取り出しが早くなり、複数の画素値を単位をする比較処理が高速化されたり、ファイル中のＥＯＦの検出などが高速化される。
【０１４６】
また、本発明に係るプロセッサは、１つのレジスタに格納された２つのバイトデータ（上位１６ビットに格納されたバイトデータと下位１６ビットに格納されたバイトデータ）をメモリ等に格納するという特徴的な命令を実行する。これによって、例えば、バイトデータを１６ビットＳＩＭＤ型で扱う場合に、データの型変換が不要となり、処理が高速化される。
【０１４７】
また、本発明に係るプロセッサは、レジスタの下位１６ビットを変更することなく、上位１６ビットに即値を格納するという特徴的な命令を実行する。これによって、他の命令「ｍｏｖ　Ｒｂ，Ｉ１６」と組み合わせることで、３２ビット即値をレジスタに設定することが可能となる。
【０１４８】
また、本発明に係るプロセッサは、ベクタ条件フラグの値によって、加算するソースを切り替えるというＳＩＭＤ型の特徴的な命令を実行する。これによって、動き補償のハーフペル（半画素単位の動き補償）において、整数画素及び半画素を問わずに同一プログラムで処理することが可能となる。
【０１４９】
また、本発明に係るプロセッサは、レジスタの符号（正／負）及びゼロによって値を生成するというＳＩＭＤ型の特徴的な命令を実行する。これによって、ある値が正のときに１、負のときに−１、ゼロのときに０を出力するので、画像処理における逆量子化が高速化される。
【０１５０】
また、本発明に係るプロセッサは、データを単位長アラインし、ベクタ条件フラグによって取り出す単位長データを変更するというＳＩＭＤ型の特徴的な命令を実行する。これによって、動き補償のハーフペル（半画素単位の動き補償）において、整数画素及び半画素を問わずに同一プログラムで処理することが可能となる。
【０１５１】
また、本発明に係るプロセッサは、２つの値を加算し、加算対象の一方が正である場合には更に１を加算するという特徴的な命令を実行する。これによって、画像処理における絶対値丸めが高速化される。
【０１５２】
また、本発明に係るプロセッサは、任意の２つのレジスタの値を連続する２つのレジスタに転送するという特徴的な命令を実行する。これによって、独立した２つのレジスタの移動を１サイクルで行うので、例えば、ループの内部において、ループ内のサイクル数を減らすという効果を発揮し得る。また、この命令によれば、レジスタリネーミング（レジスタの値の破壊）がないので、ループの世代間（イタレーション間）でのデータの移動を行う際にも有効である。
【０１５３】
また、本発明に係るプロセッサは、ループにおける分岐とコンディションフラグ（ここでは、プレディケート）の設定とを行うという特徴的な命令を実行する。これによって、プロログエピログ除去型のソフトウェアパイプライニングによるループの高速化が実現される。
【０１５４】
また、本発明に係るプロセッサは、差分絶対値和を算出するというＳＩＭＤ型特徴的な命令を実行する。これによって、画像処理の動き予測における差分絶対値和の算出等が高速化される。
【０１５５】
また、本発明に係るプロセッサは、命令ｓａｔｓｓは、任意の位置（桁）で、符号付の値を符号付の値に飽和させるという特徴的な命令を実行する。これによって、アセンブラプログラミングの際に特定の位置に飽和位置を合わせる必要がなくなり、プログラミングが容易となる。
【０１５６】
また、本発明に係るプロセッサは、単位長単位で２つのレジスタのいずれか値を選択するという特徴的な命令を実行する。これによって、単位長データをレジスタの任意の位置に格納することができるため、データの入替繰り返しなどが高速化される。また、ＳＩＭＤ演算の柔軟性を増すことができるという効果もある。
【０１５７】
また、本発明に係るプロセッサは、ＳＩＭＤ演算をその結果を拡張するという特徴的な命令を実行する。これによって、ＳＩＭＤ演算を行った後にデータサイズを揃えるという処理が１サイクルで実行される。
【０１５８】
また、本発明に係るプロセッサは、コンディションフラグ等によって指定された種類のＳＩＭＤ演算を実行することもできる。これによって、他の処理結果に依存して演算の種類が決定されるような動的な処理が同一プログラムで実現することが可能となる。
【０１５９】
以上のように、本発明に係るプロセッサは、高機能なＳＩＭＤ演算を実行したり、マルチメディア処理に必要な各種デジタル信号処理を高速に実行することができ、携帯電話、モバイルＡＶ機器、デジタルＴＶ、ＤＶＤ等に共通のコアプロセッサとして使用可能であり、高性能・高コストパフォーマンスなマルチメディア機器の出現が望まれる今日における実用的価値は極めて高い。
【図面の簡単な説明】
【図１】本発明に係るプロセッサの概略ブロック図である。
【図２】同プロセッサの算術論理・比較演算器の概略図を示す。
【図３】同プロセッサのバレルシタの構成を示すブロック図である。
【図４】同プロセッサの変換器の構成を示すブロック図である。
【図５】同プロセッサの除算器の構成を示すブロック図である。
【図６】同プロセッサの乗算・積和演算器の構成を示すブロック図である。
【図７】同プロセッサの命令制御部の構成を示すブロック図である。
【図８】同プロセッサの汎用レジスタ（Ｒ０〜Ｒ３１）の構造を示す図である。
【図９】同プロセッサのリンクレジスタ（ＬＲ）の構造を示す図である。
【図１０】同プロセッサの分岐レジスタ（ＴＡＲ）の構造を示す図である。
【図１１】同プロセッサのプログラム状態レジスタ（ＰＳＲ）の構造を示す図である。
【図１２】同プロセッサの条件フラグレジスタ（ＣＦＲ）の構造を示す図である。
【図１３】同プロセッサのアキュムレータ（Ｍ０，Ｍ１）の構造を示す図である。
【図１４】同プロセッサのプログラムカウンタ（ＰＣ）の構造を示す図である。
【図１５】同プロセッサのＰＣ退避用レジスタ（ＩＰＣ）の構造を示す図である。
【図１６】同プロセッサのＰＳＲ退避用レジスタ（ＩＰＳＲ）の構造を示す図である。
【図１７】同プロセッサのパイプライン動作を示すタイミング図である。
【図１８】同プロセッサによる命令実行時の各パイプライン動作を示すタイミング図である。
【図１９】同プロセッサの並列動作を示す図である。
【図２０】同プロセッサが実行する命令のフォーマットを示す図である。
【図２１】カテゴリー「ＡＬＵａｄｄ（加算）系」に属する命令を説明する図である。
【図２２】カテゴリー「ＡＬＵｓｕｂ（減算）系」に属する命令を説明する図である。
【図２３】カテゴリー「ＡＬＵｌｏｇｉｃ（論理演算）系ほか」に属する命令を説明する図である。
【図２４】カテゴリー「ＣＭＰ（比較演算）系」に属する命令を説明する図である。
【図２５】カテゴリー「ｍｕｌ（乗算）系」に属する命令を説明する図である。
【図２６】カテゴリー「ｍａｃ（積和演算）系」に属する命令を説明する図である。
【図２７】カテゴリー「ｍｓｕ（積差演算）系」に属する命令を説明する図である。
【図２８】カテゴリー「ＭＥＭｌｄ（メモリ読み出し）系」に属する命令を説明する図である。
【図２９】カテゴリー「ＭＥＭｓｔｏｒｅ（メモリ書き出し）系」に属する命令を説明する図である。
【図３０】カテゴリー「ＢＲＡ（分岐）系」に属する命令を説明する図である。
【図３１】カテゴリー「ＢＳａｓｌ（算術バレルシフト）系ほか」に属する命令を説明する図である。
【図３２】カテゴリー「ＢＳｌｓｒ（論理バレルシフト）系ほか」に属する命令を説明する図である。
【図３３】カテゴリー「ＣＮＶｖａｌｎ（算術変換）系」に属する命令を説明する図である。
【図３４】カテゴリー「ＣＮＶ（一般変換）系」に属する命令を説明する図である。
【図３５】カテゴリー「ＳＡＴｖｌｐｋ（飽和処理）系」に属する命令を説明する図である。
【図３６】カテゴリー「ＥＴＣ（その他）系」に属する命令を説明する図である。
【図３７】命令「ｖｃｃｈｋ」に対するプロセッサの動作を示す図である。
【図３８】命令「ｖｃｃｈｋ」の詳細な動作を説明する図である。
【図３９】命令「ｓｔｂｈ　（Ｒａ），Ｒｂ」に対するプロセッサの動作を示す図である。
【図４０】命令「ｓｔｂｈ　（Ｒａ），Ｒｂ」の詳細な動作を説明する図である。
【図４１】命令「ｓｔｂｈｐ　（Ｒａ），Ｒｂ：Ｒｂ＋１」に対するプロセッサの動作を示す図である。
【図４２】命令「ｓｔｂｈｐ　（Ｒａ），Ｒｂ：Ｒｂ＋１」の詳細な動作を説明する図である。
【図４３】命令「ｓｅｔｈｉ　Ｒａ，Ｉ１６」に対するプロセッサの動作を示す図である。
【図４４】命令「ｓｅｔｈｉ　Ｒａ，Ｉ１６」の詳細な動作を説明する図である。
【図４５】命令「ｖａｄｄｈｖｃ　Ｒｃ，Ｒａ，Ｒｂ」に対するプロセッサの動作を示す図である。
【図４６】命令「ｖａｄｄｈｖｃ　Ｒｃ，Ｒａ，Ｒｂ」の詳細な動作を説明する図である。
【図４７】画像処理における動き補償を説明する。
【図４８】命令「ｖａｄｄｒｈｖｃ　Ｒｃ，Ｒａ，Ｒｂ」に対するプロセッサの動作を示す図である。
【図４９】命令「ｖａｄｄｒｈｖｃ　Ｒｃ，Ｒａ，Ｒｂ」の詳細な動作を説明する図である。
【図５０】命令「ｖｓｇｎｈ　Ｒａ，Ｒｂ」に対するプロセッサの動作を示す図である。
【図５１】命令「ｖｓｇｎｈ　Ｒａ，Ｒｂ」の詳細な動作を説明する図である。
【図５２】命令「ｖａｌｎｖｃ１　Ｒｃ，Ｒａ，Ｒｂ」に対するプロセッサの動作を示す図である。
【図５３】命令「ｖａｌｎｖｃ１　Ｒｃ，Ｒａ，Ｒｂ」の詳細な動作を説明する図である。
【図５４】命令「ｖａｌｎｖｃ２　Ｒｃ，Ｒａ，Ｒｂ」の詳細な動作を説明する図である。
【図５５】命令「ｖａｌｎｖｃ３　Ｒｃ，Ｒａ，Ｒｂ」の詳細な動作を説明する図である。
【図５６】命令「ｖａｌｎｖｃ４　Ｒｃ，Ｒａ，Ｒｂ」の詳細な動作を説明する図である。
【図５７】命令「ａｄｄａｒｖｗ　Ｒｃ，Ｒｂ，Ｒａ」に対するプロセッサの動作を示す図である。
【図５８】命令「ａｄｄａｒｖｗ　Ｒｃ，Ｒｂ，Ｒａ」の詳細な動作を説明する図である。
【図５９】「絶対値丸め（ａｗａｙ　ｆｒｏｍ　ｚｅｒｏ）」の動作を示す図である。
【図６０】命令「ｍｏｖｐ　Ｒｃ：Ｒｃ＋１，Ｒａ，Ｒｂ」に対するプロセッサの動作を示す図である。
【図６１】命令「ｍｏｖｐ　Ｒｃ：Ｒｃ＋１，Ｒａ，Ｒｂ」の詳細な動作を説明する図である。
【図６２】命令「ｊｌｏｏｐ　Ｃ６，Ｃｍ，ＴＡＲ，Ｒａ」の詳細な動作を説明する図である。
【図６３】命令「ｓｅｔｔａｒ　Ｃ６，Ｃｍ，Ｄ９」の詳細な動作を説明する図である。
【図６４】プロエピ除去型２ステージソフトウェアパイプライニングを示す図である。
【図６５】Ｃ言語のソースプログラムのリストを示す図である。
【図６６】通常の命令ｊｌｏｏｐ及び命令ｓｅｔｔａｒを用いて生成される機械語プログラムの例を示す。
【図６７】本実施の形態の命令ｊｌｏｏｐ及び命令ｓｅｔｔａｒを用いて生成される機械語プログラムの例を示す。
【図６８】命令「ｊｌｏｏｐ　Ｃ６，Ｃ２：Ｃ４，ＴＡＲ，Ｒａ」の詳細な動作を説明する図である。
【図６９】命令「ｓｅｔｔａｒ　Ｃ６，Ｃ２：Ｃ４，Ｄ９」の詳細な動作を説明する図である。
【図７０】プロエピ除去型３ステージソフトウェアパイプライニングを示す図である。
【図７１】Ｃ言語のソースプログラムのリストを示す図である。
【図７２】通常の命令ｊｌｏｏｐ及び命令ｓｅｔｔａｒを用いて生成される機械語プログラムの例を示す。
【図７３】本実施の形態の命令ｊｌｏｏｐ及び命令ｓｅｔｔａｒを用いて生成される機械語プログラムの例を示す。
【図７４】命令「ｖｓａｄａ　Ｒｃ，Ｒａ，Ｒｂ，Ｒｘ」に対するプロセッサの動作を示す図である。
【図７５】（ａ）は、命令「ｖｓａｄａ　Ｒｃ，Ｒａ，Ｒｂ，Ｒｘ」、（ｂ）は、命令「ｖｓａｄａ　Ｒｃ，Ｒａ，Ｒｂ」の詳細な動作を説明する図である。
【図７６】命令「ｓａｔｓｓ　Ｒｃ，Ｒａ，Ｒｂ」に対するプロセッサの動作を示す図である。
【図７７】（ａ）は、命令「ｓａｔｓｓ　Ｒｃ，Ｒａ，Ｒｂ」、（ｂ）は、命令「ｓａｔｓｕ　Ｒｃ，Ｒａ，Ｒｂ」の詳細な動作を説明する図である。
【図７８】命令「ｂｙｔｅｓｅｌ　Ｒｃ，Ｒａ，Ｒｂ，Ｒｘ」に対するプロセッサの動作を示す図である。
【図７９】（ａ）は、命令「ｂｙｔｅｓｅｌ　Ｒｃ，Ｒａ，Ｒｂ，Ｒｘ」の詳細な動作を示し、（ｂ）は、レジスタＲｘと選択されるバイトデータとの関係を示し、（ｃ）は、命令「ｂｙｔｅｓｅｌ　Ｒｃ，Ｒａ，Ｒｂ，Ｉ１２」の詳細な動作を示し、（ｄ）は、即値Ｉ１２と選択されるバイトデータとの関係を示す図である。
【図８０】ＳＩＭＤ演算の結果の一部をビット拡張（符号拡張又はゼロ拡張）する様子を示す図である。
【図８１】ＳＩＭＤ演算の結果すべてをビット拡張する様子を示す図である。
【図８２】コンディションフラグ等によって指定された種類のＳＩＭＤ演算を実行する様子を示す図である。
【符号の説明】
１　　プロセッサ
１０　　命令制御部
１０ａ　命令キャッシュ
１０ｂ　アドレス管理部
１０ｃ〜１０ｅ　命令バッファ
１０ｆ　ジャンプバッファ
１０ｇ　ローテーション部
２０　　デコード部
３０　　レジスタファイル
３０ａ　汎用レジスタ（Ｒ０〜Ｒ３１）
３０ｂ　アキュムレータ（ＭＨ，ＭＬ）
３０ｃ　リンクレジスタ（ＬＲ）
３０ｄ　分岐レジスタ（ＴＡＲ）
３１　　プログラム状態レジスタ（ＰＳＲ）
３２　　条件フラグレジスタ（ＣＦＲ）
３３　　プログラムカウンタ（ＰＣ）
３４　　ＰＣ退避用レジスタ（ＩＰＣ）
３５　　ＰＳＲ退避用レジスタ（ＩＰＳＲ）
４０　　演算部
４１〜４３　算術論理・比較演算器
４１ａ　ＡＬＵ部
４１ｂ　飽和処理部
４１ｃ　フラグ部
４４　　積和演算器
４４ａ、４４ｂ　乗算器
４４ｃ〜４４ｅ　加算器
４４ｆ　セレクタ
４４ｇ　飽和処理部
４５　　バレルシフタ
４５ａ、４５ｂ　セレクタ
４５ｃ　上位バレルシフタ
４５ｄ　下位バレルシフタ
４５ｅ　飽和処理部
４６　　除算器
４７　　変換器
４７ａ　ＳＡＴブロック
４７ｂ　ＢＳＥＱブロック
４７ｃ　ＭＳＫＧＥＮブロック
４７ｄ　ＶＳＵＭＢブロック
４７ｅ　ＢＣＮＴブロック
４７ｆ　ＩＬブロック
５０　　Ｉ／Ｆ部
６０　　命令メモリ部
７０　　データメモリ部
８０　　拡張レジスタ部
９０　　Ｉ／Ｏインターフェース部
【図１】
2004118470.tif 000013
【図２】
2004118470.tif 000014
【図３】
2004118470.tif 000015
【図４】
2004118470.tif 000016
【図５】
2004118470.tif 000017
【図６】
2004118470.tif 000018
【図７】
2004118470.tif 000019
【図８】
2004118470.tif 000020
【図９】
2004118470.tif 000021
【図１０】
2004118470.tif 000022
【図１１】
2004118470.tif 000023
【図１２】
2004118470.tif 000024
【図１３】
2004118470.tif 000025
【図１４】
2004118470.tif 000026
【図１５】
2004118470.tif 000027
【図１６】
2004118470.tif 000028
【図１７】
2004118470.tif 000029
【図１８】
2004118470.tif 000030
【図１９】
2004118470.tif 000031
【図２０】
2004118470.tif 000032
【図２１】
2004118470.tif 000033
【図２２】
2004118470.tif 000034
【図２３】
2004118470.tif 000035
【図２４】
2004118470.tif 000036
【図２５】
2004118470.tif 000037
【図２６】
2004118470.tif 000038
【図２７】
2004118470.tif 000039
【図２８】
2004118470.tif 000040
【図２９】
2004118470.tif 000041
【図３０】
2004118470.tif 000042
【図３１】
2004118470.tif 000043
【図３２】
2004118470.tif 000044
【図３３】
2004118470.tif 000045
【図３４】
2004118470.tif 000046
【図３５】
2004118470.tif 000047
【図３６】
2004118470.tif 000048
【図３７】
2004118470.tif 000049
【図３８】
2004118470.tif 000050
【図３９】
2004118470.tif 000051
【図４０】
2004118470.tif 000052
【図４１】
2004118470.tif 000053
【図４２】
2004118470.tif 000054
【図４３】
2004118470.tif 000055
【図４４】
2004118470.tif 000056
【図４５】
2004118470.tif 000057
【図４６】
2004118470.tif 000058
【図４７】
2004118470.tif 000059
【図４８】
2004118470.tif 000060
【図４９】
2004118470.tif 000061
【図５０】
2004118470.tif 000062
【図５１】
2004118470.tif 000063
【図５２】
2004118470.tif 000064
【図５３】
2004118470.tif 000065
【図５４】
2004118470.tif 000066
【図５５】
2004118470.tif 000067
【図５６】
2004118470.tif 000068
【図５７】
2004118470.tif 000069
【図５８】
2004118470.tif 000070
【図５９】
2004118470.tif 000071
【図６０】
2004118470.tif 000072
【図６１】
2004118470.tif 000073
【図６２】
2004118470.tif 000074
【図６３】
2004118470.tif 000075
【図６４】
2004118470.tif 000076
【図６５】
2004118470.tif 000077
【図６６】
2004118470.tif 000078
【図６７】
2004118470.tif 000079
【図６８】
2004118470.tif 000080
【図６９】
2004118470.tif 000081
【図７０】
2004118470.tif 000082
【図７１】
2004118470.tif 000083
【図７２】
2004118470.tif 000084
【図７３】
2004118470.tif 000085
【図７４】
2004118470.tif 000086
【図７５】
2004118470.tif 000087
【図７６】
2004118470.tif 000088
【図７７】
2004118470.tif 000089
【図７８】
2004118470.tif 000090
【図７９】
2004118470.tif 000091
【図８０】
2004118470.tif 000092
【図８１】
2004118470.tif 000093
【図８２】
2004118470.tif 000094