(57)【特許請求の範囲】
【請求項１】
命令をデコードするデコーダと、該デコーダのデコード結果に応答して該命令を実行するための制御を行う制御回路とを含む処理ユニットを複数備え、第１条件コード生成機能付演算命令を実行して得られる第１条件コードが格納される第１条件コードレジスタを有するＶＬＩＷプロセッサにおいて、
該命令デコーダは、判定条件を示す条件フィールドを備えた条件コード変換命令をデコードし、条件フラグフィールドを備えた第２条件付命令をデコードし、
条件フラグを備えた第２条件コードレジスタと、
該条件フィールドに指定された判定条件に従って該第１条件コードレジスタの内容を判定する条件コード変換回路とをさらに有し、
該制御回路は、該条件コード変換命令のデコード結果に応答して、該条件コード変換回路の判定結果を該第２条件コードレジスタの該条件フラグに格納させ、該第２条件付命令のデコード結果に応答して、この命令の該条件フラグフィールドの内容が該第２条件レジスタの該条件フラグに一致しているときのみ該第２条件付命令の演算を実行するための制御を行う、
ことを特徴とするＶＬＩＷプロセッサ。
【請求項２】
上記第２条件コードレジスタは、上記条件フラグと対になり‘有効’又は‘無効’を示す有効フラグをさらに備え、
上記制御回路は、上記条件コード変換命令のデコード結果に応答して、該第２条件レジスタの該有効フラグを‘有効’にさせ、上記第２条件付命令のデコード結果に応答して、該有効フラグが‘無効’を示している場合には上記条件フラグの内容によらず該第２条件付命令の演算を実行するための制御を行わない、
ことを特徴とする請求項１記載のＶＬＩＷプロセッサ。
【請求項３】
上記第１条件コードレジスタを複数有し、
上記条件コード変換命令は第１条件コードレジスタ識別コードフィールドをさらに有し、
該第１条件コードレジスタ識別コードフィールドの内容に応答して、該複数の第１条件コードレジスタの１つを選択して上記条件コード変換回路に供給する第１セレクタをさらに有する、
ことを特徴とする請求項２記載のＶＬＩＷプロセッサ。
【請求項４】
上記第２条件コードレジスタを複数有し、
上記条件コード変換命令及び上記第２条件付命令はいずれも第２条件コードレジスタ識別コードフィールドをさらに有し、
該第２条件コードレジスタ識別コードフィールドの内容に応答して、該複数の第２条件コードレジスタの１つを指定しこれに上記条件コード変換回路の判定結果を供給するマルチプレクサをさらに有し、
上記制御回路は、該第２条件付命令のデコード結果に応答して、この命令の該第２条件コードレジスタ識別コードフィールドで指定された第２条件レジスタを上記第２レジスタとする、
ことを特徴とする請求項３記載のＶＬＩＷプロセッサ。
【請求項５】
上記命令デコーダはさらに、論理演算の種類を指定するオペレーションフィールドと該論理演算の対象となる上記複数の第２条件コードレジスタの２つを指定する第１及び第２ソースオペランドフィールドと該論理演算の結果が格納される該複数の第２条件コードレジスタの１つを指定するデスティネーションオペランドフィールドとを備えた第２条件コード間演算命令をデコードし、
該オペレーションフィールドで指定された論理演算を行う論理演算回路をさらに有する、
ことを特徴とする請求項４記載のＶＬＩＷプロセッサ。
【請求項６】
上記第１ソースオペランドフィールドの内容に応答して、上記複数の第２条件コードレジスタの１つを選択して上記論理演算回路に供給する第２セレクタと、
上記第２ソースオペランドフィールドの内容に応答して、該複数の第２条件コードレジスタの他の１つを選択して該論理演算回路に供給する第３セレクタと、
をさらに有することを特徴とする請求項５記載のＶＬＩＷプロセッサ。
【請求項７】
上記マルチプレクサは、上記デスティネーションオペランドフィールドの内容に応答して、上記複数の第２条件コードレジスタの１つを指定しこれに上記論理演算の結果を供給することを特徴とする請求項５又は６記載のＶＬＩＷプロセッサ。
【請求項８】
上記有効フラグ及びこれと対になる上記条件フラグをそれぞれＶ及びＳで表し、
（Ｖ，Ｓ）＝（‘有効’，‘真’）のとき第２条件コード（Ｖ，Ｓ）が‘真’、（Ｖ，Ｓ）＝（‘有効’，‘偽’）のとき第２条件コード（Ｖ，Ｓ）が‘偽’、（Ｖ，Ｓ）＝（‘無効’，‘真’）又は（Ｖ，Ｓ）＝（‘無効’，‘偽’）のとき第２条件コード（Ｖ，Ｓ）が‘未定義’であると定義し、上記第１及び第２ソースオペランドフィールド並びに上記デスティネーションオペランドフィールドで指定される上記第２条件コードレジスタをそれぞれＲＳ１、ＲＳ２及びＲＤで表すと、上記論理演算回路はその論理演算の１種として、
ＲＳ１＝‘真’かつＲＳ２＝‘真’のときＲＤ＝‘真’
ＲＳ１＝‘真’かつＲＳ２＝‘偽’のときＲＤ＝‘偽’
その他のＲＳ１とＲＳ２の値の組み合わせのときＲＤ＝‘未定義’
となる非ブーリアンＡＮＤＣＲ演算を実行する論理回路を有することを特徴とする請求項５乃至７のいずれか１つに記載のＶＬＩＷプロセッサ。
【請求項９】
上記有効フラグ及びこれと対になる上記条件フラグをそれぞれＶ及びＳで表し、
（Ｖ，Ｓ）＝（‘有効’，‘真’）のとき第２条件コード（Ｖ，Ｓ）が‘真’、（Ｖ，Ｓ）＝（‘有効’，‘偽’）のとき第２条件コード（Ｖ，Ｓ）が‘偽’、（Ｖ，Ｓ）＝（‘無効’，‘真’）又は（Ｖ，Ｓ）＝（‘無効’，‘偽’）のとき第２条件コード（Ｖ，Ｓ）が‘未定義’であると定義し、上記第１及び第２ソースオペランドフィールド並びに上記デスティネーションオペランドフィールドで指定される上記第２条件コードレジスタをそれぞれＲＳ１、ＲＳ２及びＲＤで表し、‘真’と‘偽’の一方を他方に変換する演算子を＊で表すと、上記論理演算回路はその論理演算の１種として、
＊ＲＳ１＝‘真’かつＲＳ２＝‘真’のときＲＤ＝‘真’
＊ＲＳ１＝‘真’かつＲＳ２＝‘偽’のときＲＤ＝‘偽’
その他のＲＳ１とＲＳ２の値の組み合わせのときＲＤ＝‘未定義’
となる非ブーリアンＡＮＤＮＣＲ演算を実行する論理回路を有することを特徴とする請求項５乃至７のいずれか１つに記載のＶＬＩＷプロセッサ。
【請求項１０】
上記有効フラグ及びこれと対になる上記条件フラグをそれぞれＶ及びＳで表し、
（Ｖ，Ｓ）＝（‘有効’，‘真’）のとき第２条件コード（Ｖ，Ｓ）が‘真’、（Ｖ，Ｓ）＝（‘有効’，‘偽’）のとき第２条件コード（Ｖ，Ｓ）が‘偽’、（Ｖ，Ｓ）＝（‘無効’，‘真’）又は（Ｖ，Ｓ）＝（‘無効’，‘偽’）のとき第２条件コード（Ｖ，Ｓ）が‘未定義’であると定義し、上記第１及び第２ソースオペランドフィールド並びに上記デスティネーションオペランドフィールドで指定される上記第２条件コードレジスタをそれぞれＲＳ１、ＲＳ２及びＲＤで表し、‘真’と‘偽’の一方を他方に変換する演算子を＊で表すと、上記論理演算回路はその論理演算の１種として、
ＲＳ１＝‘真’かつ＊ＲＳ２＝‘真’のときＲＤ＝‘真’
ＲＳ１＝‘真’かつ＊ＲＳ２＝‘偽’のときＲＤ＝‘偽’
その他のＲＳ１とＲＳ２の値の組み合わせのときＲＤ＝‘未定義’
となる非ブーリアンＮＡＮＤＣＲ演算を実行する論理回路を有することを特徴とする請求項５乃至７のいずれか１つに記載のＶＬＩＷプロセッサ。
【請求項１１】
上記有効フラグ及びこれと対になる上記条件フラグをそれぞれＶ及びＳで表し、
（Ｖ，Ｓ）＝（‘有効’，‘真’）のとき第２条件コード（Ｖ，Ｓ）が‘真’、（Ｖ，Ｓ）＝（‘有効’，‘偽’）のとき第２条件コード（Ｖ，Ｓ）が‘偽’、（Ｖ，Ｓ）＝（‘無効’，‘真’）又は（Ｖ，Ｓ）＝（‘無効’，‘偽’）のとき第２条件コード（Ｖ，Ｓ）が‘未定義’であると定義し、上記第１及び第２ソースオペランドフィールド並びに上記デスティネーションオペランドフィールドで指定される上記第２条件コードレジスタをそれぞれＲＳ１、ＲＳ２及びＲＤで表し、‘真’と‘偽’の一方を他方に変換する演算子を＊で表すと、上記論理演算回路はその論理演算の１種として、
＊ＲＳ１＝‘真’かつ＊ＲＳ２＝‘真’のときＲＤ＝‘真’
＊ＲＳ１＝‘真’かつ＊ＲＳ２＝‘偽’のときＲＤ＝‘偽’
その他のＲＳ１とＲＳ２の値の組み合わせのときＲＤ＝‘未定義’
となる非ブーリアンＮＡＮＤＮＣＲ演算を実行する論理回路を有することを特徴とする請求項５乃至７のいずれか１つに記載のＶＬＩＷプロセッサ。
【請求項１２】
上記有効フラグ及びこれと対になる上記条件フラグをそれぞれＶ及びＳで表し、
（Ｖ，Ｓ）＝（‘有効’，‘真’）のとき第２条件コード（Ｖ，Ｓ）が‘真’、（Ｖ，Ｓ）＝（‘有効’，‘偽’）のとき第２条件コード（Ｖ，Ｓ）が‘偽’、（Ｖ，Ｓ）＝（‘無効’，‘真’）又は（Ｖ，Ｓ）＝（‘無効’，‘偽’）のとき第２条件コード（Ｖ，Ｓ）が‘未定義’であると定義し、上記第１及び第２ソースオペランドフィールド並びに上記デスティネーションオペランドフィールドで指定される上記第２条件コードレジスタをそれぞれＲＳ１、ＲＳ２及びＲＤで表すと、上記論理演算回路はその論理演算の１種として、
ＲＳ１とＲＳ２の少なくとも一方が‘真’のときＲＤ＝‘真’
ＲＳ１＝‘未定義’かつＲＳ２＝‘未定義’のときＲＤ＝‘未定義’
その他のＲＳ１とＲＳ２の値の組み合わせのときＲＤ＝‘偽’
となるＯＲＣＲ演算を実行する論理回路を有することを特徴とする請求項５乃至７のいずれか１つに記載のＶＬＩＷプロセッサ。
【請求項１３】
上記有効フラグ及びこれと対になる上記条件フラグをそれぞれＶ及びＳで表し、
（Ｖ，Ｓ）＝（‘有効’，‘真’）のとき第２条件コード（Ｖ，Ｓ）が‘真’、（Ｖ，Ｓ）＝（‘有効’，‘偽’）のとき第２条件コード（Ｖ，Ｓ）が‘偽’、（Ｖ，Ｓ）＝（‘無効’，‘真’）又は（Ｖ，Ｓ）＝（‘無効’，‘偽’）のとき第２条件コード（Ｖ，Ｓ）が‘未定義’であると定義し、上記第１及び第２ソースオペランドフィールド並びに上記デスティネーションオペランドフィールドで指定される上記第２条件コードレジスタをそれぞれＲＳ１、ＲＳ２及びＲＤで表し、‘真’と‘偽’の一方を他方に変換する演算子を＊で表すと、上記論理演算回路はその論理演算の１種として、
＊ＲＳ１とＲＳ２の少なくとも一方が‘真’のときＲＤ＝‘真’
ＲＳ１＝‘未定義’かつＲＳ２＝‘未定義’のときＲＤ＝‘未定義’
その他のＲＳ１とＲＳ２の値の組み合わせのときＲＤ＝‘偽’
となる非ブーリアンＯＲＮＣＲ演算を実行する論理回路を有することを特徴とする請求項５乃至７のいずれか１つに記載のＶＬＩＷプロセッサ。
【請求項１４】
上記有効フラグ及びこれと対になる上記条件フラグをそれぞれＶ及びＳで表し、
（Ｖ，Ｓ）＝（‘有効’，‘真’）のとき第２条件コード（Ｖ，Ｓ）が‘真’、（Ｖ，Ｓ）＝（‘有効’，‘偽’）のとき第２条件コード（Ｖ，Ｓ）が‘偽’、（Ｖ，Ｓ）＝（‘無効’，‘真’）又は（Ｖ，Ｓ）＝（‘無効’，‘偽’）のとき第２条件コード（Ｖ，Ｓ）が‘未定義’であると定義し、上記第１及び第２ソースオペランドフィールド並びに上記デスティネーションオペランドフィールドで指定される上記第２条件コードレジスタをそれぞれＲＳ１、ＲＳ２及びＲＤで表すと、上記論理演算回路はその論理演算の１種として、
ＲＳ１とＲＳ２の少なくとも一方が‘真’のときＲＤ＝‘偽’
ＲＳ１＝‘未定義’かつＲＳ２＝‘未定義’のときＲＤ＝‘未定義’
その他のＲＳ１とＲＳ２の値の組み合わせのときＲＤ＝‘真’
となる非ブーリアンＮＯＲＣＲ演算を実行する論理回路を有することを特徴とする請求項５乃至７のいずれか１つに記載のＶＬＩＷプロセッサ。
【請求項１５】
上記有効フラグ及びこれと対になる上記条件フラグをそれぞれＶ及びＳで表し、
（Ｖ，Ｓ）＝（‘有効’，‘真’）のとき第２条件コード（Ｖ，Ｓ）が‘真’、（Ｖ，Ｓ）＝（‘有効’，‘偽’）のとき第２条件コード（Ｖ，Ｓ）が‘偽’、（Ｖ，Ｓ）＝（‘無効’，‘真’）又は（Ｖ，Ｓ）＝（‘無効’，‘偽’）のとき第２条件コード（Ｖ，Ｓ）が‘未定義’であると定義し、上記第１及び第２ソースオペランドフィールド並びに上記デスティネーションオペランドフィールドで指定される上記第２条件コードレジスタをそれぞれＲＳ１、ＲＳ２及びＲＤで表し、‘真’と‘偽’の一方を他方に変換する演算子を＊で表すと、上記論理演算回路はその論理演算の１種として、
＊ＲＳ１とＲＳ２の少なくとも一方が‘真’のときＲＤ＝‘偽’
ＲＳ１＝‘未定義’かつＲＳ２＝‘未定義’のときＲＤ＝‘未定義’
その他のＲＳ１とＲＳ２の値の組み合わせのときＲＤ＝‘真’
となるＮＯＲＮＣＲ演算を実行する論理回路を有することを特徴とする請求項５乃至７のいずれか１つに記載のＶＬＩＷプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、複数の処理ユニットを備えたＶＬＩＷプロセッサに関する。
【０００２】
【従来の技術】
図２１は、条件コード生成機能付演算命令形式とこの命令を実行するための主要なハードウエア構成との関係を示す。
【０００３】
この命令のオペレーションコードＯＰがデコードされてＡＬＵ１２４が実行すべき演算の種類が定まり、この演算を実行するために次のような制御が行われる。すなわち、この命令の第１ソースオペランドＲＳ１及び第２ソースオペランドＲＳ２の値又はこれらをデコードした信号がそれぞれセレクタ１２５及び１２６の制御入力端に供給されて汎用レジスタファイル１６１内の選択されたレジスタの内容がＡＬＵ１２４に供給される。該命令のデスティネーションオペランドＲＤの値又はこれをデコードした信号がマルチプレクサ１２７の制御入力端に供給されて、汎用レジスタファイル１６１内の１つのレジスタが指定され、このレジスタにＡＬＵ１２４の演算結果が格納される。
【０００４】
他方、該命令の第１条件コードレジスタＩＤコードＣＣｉの値又はこれをデコードした信号がマルチプレクサ１２８の制御入力端に供給されて、第１条件コードレジスタファイル１６２のレジスタＣＣ０〜ＣＣ７の１つが指定され、このレジスタに、ＡＬＵ１２４の演算結果により定まる条件コードが格納される。条件コードは、ネガティブフラグＮ、ゼロフラグＺ、オーバフローフラグＯＶ及びキャリーフラグＣからなる。この演算は、算術演算又は論理演算である。演算結果に応じて処理内容を変えるために、条件コードが所定条件を満たしているときに分岐をする分岐命令が用いられる。
【０００５】
図２２は、分岐命令内の条件フィールドの値と、そのニモニック、意味及び判定条件を示す。例えば条件フィールドの値が‘０１００’の場合には、条件コードのゼロフラグＺが‘１’であれば条件成立と判定されて分岐が実行され、Ｚ＝‘０’であれば条件不成立と判定されて分岐が実行されない。
【０００６】
図２３（Ａ）に示すプログラムにおいて、Ｉ１〜Ｉ７は分岐命令以外の命令であり、ステップ３において無条件分岐命令ＢＡ  ７が実行され、ステップ７において無条件分岐命令ＢＡ  ９が実行される。従って、Ｉ１、Ｉ２、ＢＡ  ７、ＢＡ  ９、Ｉ７の順に命令が実行される。
【０００７】
このプログラムを、複数の並列処理部を備えたＶＬＩＷプロセッサで実行する場合には、命令スケジューラにより図２３（Ｂ）に示すようなステップ１〜３の各パケットが１ＶＬＩＷ命令とされる。各命令パケットには分岐命令を高々１個しか含むことができず、ＮＯＰ命令が多く挿入されるので、並列処理の効率（並列度）が悪くなる。一般的に、分岐命令は、５命令中１命令の割合で出現すると言われている。
【０００８】
これを改善するために、分岐命令を無くして条件付命令を導入するプリディケード実行技術（"HPL PlayDoh Architecture SpecifiCation:Verl.0" Vinod Kathail Etc HPL-93-80 February 1994, "incorporating Guarded Execution into Existing Instruction Set" D.N. Pnevmatikatos PDH Paper Wisconsin Univ. 1996, and "The Bebefit of Predicated Execution for Software Pipelining" N.J. Warter etc. HICSS-26 Conference Proceedings January 1993 Vol. 1 pp497-606）が提案されている。
【０００９】
例えば図２３（Ａ）のプログラムの場合には、ステップ３及び７の分岐命令を省略し、ステップ４〜６のＩ３〜Ｉ５を条件付命令ＣＩ３〜ＣＩ５に置き換え、ステップ８及び９のＩ６及びＩ７を条件付命令ＣＩ６及びＣＩ７に置き換えて、図２４（Ａ）に示すようなプログラムにする。条件付命令ＣＩ３〜ＣＩ７のうち条件が成立して実際に実行されるのはＣＩ７のみである。このプログラムをＶＬＩＷプロセッサで実行させる場合には、図２４（Ｂ）に示す如く１命令パケットとなるので、ＮＯＰ命令が少なくなり、並列度が向上する。
【００１０】
【発明が解決しようとする課題】
しかしながら、このプリディケード技術には、次のような問題点がある。
【００１１】
（１）既存の条件付分岐命令が図２２に示すように複数ビットの条件フィールドを備え、例えばこれが‘００１１’の場合には条件コードのネガティブフラグＮと有効フラグＶとの排他的論理和（ｘｏｒ）が‘１’であるか‘０’であるかを判定する。これに対し、プリディケード実行技術では、フラグ間の演算を行わずに１ビットのフラグの値により演算を実行するかどうかを決めるので、既存の命令セットとは異なる命令セットを用いなければならず、既存のソフトウエア資産をそのまま用いることができなくなる。
【００１２】
（２）図２２のような複数ビットの条件フィールドを条件付命令に備えてプリディケード実行技術を実現しようとすると、図２２の判定条件に示す演算を行った後にその命令を実行するかどうかが決定されるので、命令スケジューラが複雑になり、実現困難である。
【００１３】
（３）プリディケード実行技術の条件付命令は、１つの条件が成立しているかどうかのみを見ているので、多重条件の場合には従来の条件付分岐命令も用いなければならず、このため上述のようにＮＯＰ命令が多くなって並列度が悪くなる。
【００１４】
本発明の目的は、このような問題点に鑑み、既存の命令セットアーキテクチャを承継すると共に、プリディケード技術の命令を使用可能なＶＬＩＷプロセッサを提供することにある。
【００１５】
本発明の他の目的は、多重条件であっても条件付分岐命令を用いずにプリディケード技術の条件付命令を使用することが可能なＶＬＩＷプロセッサを提供することにある。
【００１６】
本発明のさらに他の目的は、より多くの異なる条件の下での複数の処理を並列処理可能にすることにより並列度を向上させることが可能なＶＬＩＷプロセッサを提供することにある。
【００１７】
【課題を解決するための手段及びその作用効果】
請求項１では、命令をデコードするデコーダと、該デコーダのデコード結果に応答して該命令を実行するための制御を行う制御回路とを含む処理ユニットを複数備え、第１条件コード生成機能付演算命令を実行して得られる第１条件コードが格納される第１条件コードレジスタを有するＶＬＩＷプロセッサにおいて、
該命令デコーダは、判定条件を示す条件フィールドを備えた条件コード変換命令をデコードし、条件フラグフィールドを備えた第２条件付命令をデコードし、
条件フラグを備えた第２条件コードレジスタと、
該条件フィールドに指定された判定条件に従って該第１条件コードレジスタの内容を判定する条件コード変換回路とをさらに有し、
該制御回路は、該条件コード変換命令のデコード結果に応答して、該条件コード変換回路の判定結果を該第２条件コードレジスタの該条件フラグに格納させ、該第２条件付命令のデコード結果に応答して、この命令の該条件フラグフィールドの内容が該第２条件レジスタの該条件フラグに一致しているときのみ該第２条件付命令の演算を実行するための制御を行う。
【００１８】
このＶＬＩＷプロセッサによれば、従来の条件コード生成機能付演算命令を含む命令セットを使用すると共に、プリディケート実行機能である第２条件付命令を用いることができるので、過去のプログラム資産を流用しながら、第２条件付命令を用いて処理性能を向上せることができる。
【００１９】
請求項２のＶＬＩＷプロセッサでは、請求項１において、上記第２条件コードレジスタは、上記条件フラグと対になり‘有効’又は‘無効’を示す有効フラグをさらに備え、
上記制御回路は、上記条件コード変換命令のデコード結果に応答して、該第２条件レジスタの該有効フラグを‘有効’にさせ、上記第２条件付命令のデコード結果に応答して、該有効フラグが‘無効’を示している場合には上記条件フラグの内容によらず該第２条件付命令の演算を実行するための制御を行わない。
【００２０】
請求項３のＶＬＩＷプロセッサでは、請求項２において、上記第１条件コードレジスタを複数有し、
上記条件コード変換命令は第１条件コードレジスタ識別コードフィールドをさらに有し、
該第１条件コードレジスタ識別コードフィールドの内容に応答して、該複数の第１条件コードレジスタの１つを選択して上記条件コード変換回路に供給する第１セレクタをさらに有する。
【００２１】
このＶＬＩＷプロセッサによれば、複数の第１条件コードレジスタを用いているので、並列度が向上する。
【００２２】
請求項４のＶＬＩＷプロセッサでは、請求項３において、上記第２条件コードレジスタを複数有し、
上記条件コード変換命令及び上記第２条件付命令はいずれも第２条件コードレジスタ識別コードフィールドをさらに有し、
該第２条件コードレジスタ識別コードフィールドの内容に応答して、該複数の第２条件コードレジスタの１つを指定しこれに上記条件コード変換回路の判定結果を供給するマルチプレクサをさらに有し、
上記制御回路は、該第２条件付命令のデコード結果に応答して、この命令の該第２条件コードレジスタ識別コードフィールドで指定された第２条件レジスタを上記第２レジスタとする。
【００２３】
このＶＬＩＷプロセッサによれば、複数の第２条件コードレジスタを用いているので、並列度が向上する。
【００２４】
請求項５のＶＬＩＷプロセッサでは、請求項４において、上記命令デコーダはさらに、論理演算の種類を指定するオペレーションフィールドと該論理演算の対象となる上記複数の第２条件コードレジスタの２つを指定する第１及び第２ソースオペランドフィールドと該論理演算の結果が格納される該複数の第２条件コードレジスタの１つを指定するデスティネーションオペランドフィールドとを備えた第２条件コード間演算命令をデコードし、
該オペレーションフィールドで指定された論理演算を行う論理演算回路をさらに有する。
【００２５】
このＶＬＩＷプロセッサによれば、多重条件であっても条件付分岐命令を用いずにプリディケード技術の条件付命令を使用することができる。また、多重条件を表現することができるので、より多くの第２条件付命令をパックにして１ＶＬＩＷ命令とすることが可能となり、並列度がさらに向上する。
【００２６】
請求項６のＶＬＩＷプロセッサでは、請求項５において、上記第１ソースオペランドフィールドの内容に応答して、上記複数の第２条件コードレジスタの１つを選択して上記論理演算回路に供給する第２セレクタと、
上記第２ソースオペランドフィールドの内容に応答して、該複数の第２条件コードレジスタの他の１つを選択して該論理演算回路に供給する第３セレクタとをさらに有する。
【００２７】
請求項７では、請求項５又は６において、上記マルチプレクサは、上記デスティネーションオペランドフィールドの内容に応答して、上記複数の第２条件コードレジスタの１つを指定しこれに上記論理演算の結果を供給する。
【００２８】
請求項８のＶＬＩＷプロセッサでは、請求項５乃至７のいずれか１つにおいて、上記有効フラグ及びこれと対になる上記条件フラグをそれぞれＶ及びＳで表し、
（Ｖ，Ｓ）＝（‘有効’，‘真’）のとき第２条件コード（Ｖ，Ｓ）が‘真’、  （Ｖ，Ｓ）＝（‘有効’，‘偽’）のとき第２条件コード（Ｖ，Ｓ）が‘偽’、  （Ｖ，Ｓ）＝（‘無効’，‘真’）又は（Ｖ，Ｓ）＝（‘無効’，‘偽’）のとき第２条件コード（Ｖ，Ｓ）が‘未定義’であると定義し、上記第１及び第２ソースオペランドフィールド並びに上記デスティネーションオペランドフィールドで指定される上記第２条件コードレジスタをそれぞれＲＳ１、ＲＳ２及びＲＤで表すと、上記論理演算回路はその論理演算の１種として、
ＲＳ１＝‘真’かつＲＳ２＝‘真’のときＲＤ＝‘真’
ＲＳ１＝‘真’かつＲＳ２＝‘偽’のときＲＤ＝‘偽’
その他のＲＳ１とＲＳ２の値の組み合わせのときＲＤ＝‘未定義’
となる非ブーリアンＡＮＤＣＲ演算を実行する論理回路を有する。
【００２９】
このＶＬＩＷプロセッサによれば、直列の多重条件を容易に表現することができる。
【００３０】
請求項９のＶＬＩＷプロセッサでは、請求項５乃至７のいずれか１つにおいて、上記有効フラグ及びこれと対になる上記条件フラグをそれぞれＶ及びＳで表し、
（Ｖ，Ｓ）＝（‘有効’，‘真’）のとき第２条件コード（Ｖ，Ｓ）が‘真’、  （Ｖ，Ｓ）＝（‘有効’，‘偽’）のとき第２条件コード（Ｖ，Ｓ）が‘偽’、  （Ｖ，Ｓ）＝（‘無効’，‘真’）又は（Ｖ，Ｓ）＝（‘無効’，‘偽’）のとき第２条件コード（Ｖ，Ｓ）が‘未定義’であると定義し、上記第１及び第２ソースオペランドフィールド並びに上記デスティネーションオペランドフィールドで指定される上記第２条件コードレジスタをそれぞれＲＳ１、ＲＳ２及びＲＤで表し、‘真’と‘偽’の一方を他方に変換する演算子を＊で表すと、上記論理演算回路はその論理演算の１種として、
＊ＲＳ１＝‘真’かつＲＳ２＝‘真’のときＲＤ＝‘真’
＊ＲＳ１＝‘真’かつＲＳ２＝‘偽’のときＲＤ＝‘偽’
その他のＲＳ１とＲＳ２の値の組み合わせのときＲＤ＝‘未定義’
となる非ブーリアンＡＮＤＮＣＲ演算を実行する論理回路を有する。
【００３１】
請求項１０のＶＬＩＷプロセッサでは、請求項５乃至７のいずれか１つにおいて、上記有効フラグ及びこれと対になる上記条件フラグをそれぞれＶ及びＳで表し、
（Ｖ，Ｓ）＝（‘有効’，‘真’）のとき第２条件コード（Ｖ，Ｓ）が‘真’、  （Ｖ，Ｓ）＝（‘有効’，‘偽’）のとき第２条件コード（Ｖ，Ｓ）が‘偽’、  （Ｖ，Ｓ）＝（‘無効’，‘真’）又は（Ｖ，Ｓ）＝（‘無効’，‘偽’）のとき第２条件コード（Ｖ，Ｓ）が‘未定義’であると定義し、上記第１及び第２ソースオペランドフィールド並びに上記デスティネーションオペランドフィールドで指定される上記第２条件コードレジスタをそれぞれＲＳ１、ＲＳ２及びＲＤで表し、‘真’と‘偽’の一方を他方に変換する演算子を＊で表すと、上記論理演算回路はその論理演算の１種として、
ＲＳ１＝‘真’かつ＊ＲＳ２＝‘真’のときＲＤ＝‘真’
ＲＳ１＝‘真’かつ＊ＲＳ２＝‘偽’のときＲＤ＝‘偽’
その他のＲＳ１とＲＳ２の値の組み合わせのときＲＤ＝‘未定義’
となる非ブーリアンＮＡＮＤＣＲ演算を実行する論理回路を有する。
【００３２】
請求項１１のＶＬＩＷプロセッサでは、請求項５乃至７のいずれか１つにおいて、上記有効フラグ及びこれと対になる上記条件フラグをそれぞれＶ及びＳで表し、
（Ｖ，Ｓ）＝（‘有効’，‘真’）のとき第２条件コード（Ｖ，Ｓ）が‘真’、  （Ｖ，Ｓ）＝（‘有効’，‘偽’）のとき第２条件コード（Ｖ，Ｓ）が‘偽’、  （Ｖ，Ｓ）＝（‘無効’，‘真’）又は（Ｖ，Ｓ）＝（‘無効’，‘偽’）のとき第２条件コード（Ｖ，Ｓ）が‘未定義’であると定義し、上記第１及び第２ソースオペランドフィールド並びに上記デスティネーションオペランドフィールドで指定される上記第２条件コードレジスタをそれぞれＲＳ１、ＲＳ２及びＲＤで表し、‘真’と‘偽’の一方を他方に変換する演算子を＊で表すと、上記論理演算回路はその論理演算の１種として、
＊ＲＳ１＝‘真’かつ＊ＲＳ２＝‘真’のときＲＤ＝‘真’
＊ＲＳ１＝‘真’かつ＊ＲＳ２＝‘偽’のときＲＤ＝‘偽’
その他のＲＳ１とＲＳ２の値の組み合わせのときＲＤ＝‘未定義’
となる非ブーリアンＮＡＮＤＮＣＲ演算を実行する論理回路を有する。
【００３３】
請求項１２のＶＬＩＷプロセッサでは、請求項５乃至７のいずれか１つにおいて、上記有効フラグ及びこれと対になる上記条件フラグをそれぞれＶ及びＳで表し、
（Ｖ，Ｓ）＝（‘有効’，‘真’）のとき第２条件コード（Ｖ，Ｓ）が‘真’、  （Ｖ，Ｓ）＝（‘有効’，‘偽’）のとき第２条件コード（Ｖ，Ｓ）が‘偽’、  （Ｖ，Ｓ）＝（‘無効’，‘真’）又は（Ｖ，Ｓ）＝（‘無効’，‘偽’）のとき第２条件コード（Ｖ，Ｓ）が‘未定義’であると定義し、上記第１及び第２ソースオペランドフィールド並びに上記デスティネーションオペランドフィールドで指定される上記第２条件コードレジスタをそれぞれＲＳ１、ＲＳ２及びＲＤで表すと、上記論理演算回路はその論理演算の１種として、
ＲＳ１とＲＳ２の少なくとも一方が‘真’のときＲＤ＝‘真’
ＲＳ１＝‘未定義’かつＲＳ２＝‘未定義’のときＲＤ＝‘未定義’
その他のＲＳ１とＲＳ２の値の組み合わせのときＲＤ＝‘偽’
となるＯＲＣＲ演算を実行する論理回路を有する。
【００３４】
このＶＬＩＷプロセッサによれば、異なる条件の下で同一処理を実行する場合に、同一処理を１箇所にまとめて実行することが可能となり、ステップ数を低減することができる。
【００３５】
請求項１３のＶＬＩＷプロセッサでは、請求項５乃至７のいずれか１つにおいて、上記有効フラグ及びこれと対になる上記条件フラグをそれぞれＶ及びＳで表し、
（Ｖ，Ｓ）＝（‘有効’，‘真’）のとき第２条件コード（Ｖ，Ｓ）が‘真’、  （Ｖ，Ｓ）＝（‘有効’，‘偽’）のとき第２条件コード（Ｖ，Ｓ）が‘偽’、  （Ｖ，Ｓ）＝（‘無効’，‘真’）又は（Ｖ，Ｓ）＝（‘無効’，‘偽’）のとき第２条件コード（Ｖ，Ｓ）が‘未定義’であると定義し、上記第１及び第２ソースオペランドフィールド並びに上記デスティネーションオペランドフィールドで指定される上記第２条件コードレジスタをそれぞれＲＳ１、ＲＳ２及びＲＤで表し、‘真’と‘偽’の一方を他方に変換する演算子を＊で表すと、上記論理演算回路はその論理演算の１種として、
＊ＲＳ１とＲＳ２の少なくとも一方が‘真’のときＲＤ＝‘真’
ＲＳ１＝‘未定義’かつＲＳ２＝‘未定義’のときＲＤ＝‘未定義’
その他のＲＳ１とＲＳ２の値の組み合わせのときＲＤ＝‘偽’
となる非ブーリアンＯＲＮＣＲ演算を実行する論理回路を有する。
【００３６】
請求項１４のＶＬＩＷプロセッサでは、請求項５乃至７のいずれか１つにおいて、上記有効フラグ及びこれと対になる上記条件フラグをそれぞれＶ及びＳで表し、
（Ｖ，Ｓ）＝（‘有効’，‘真’）のとき第２条件コード（Ｖ，Ｓ）が‘真’、  （Ｖ，Ｓ）＝（‘有効’，‘偽’）のとき第２条件コード（Ｖ，Ｓ）が‘偽’、  （Ｖ，Ｓ）＝（‘無効’，‘真’）又は（Ｖ，Ｓ）＝（‘無効’，‘偽’）のとき第２条件コード（Ｖ，Ｓ）が‘未定義’であると定義し、上記第１及び第２ソースオペランドフィールド並びに上記デスティネーションオペランドフィールドで指定される上記第２条件コードレジスタをそれぞれＲＳ１、ＲＳ２及びＲＤで表すと、上記論理演算回路はその論理演算の１種として、
ＲＳ１とＲＳ２の少なくとも一方が‘真’のときＲＤ＝‘偽’
ＲＳ１＝‘未定義’かつＲＳ２＝‘未定義’のときＲＤ＝‘未定義’
その他のＲＳ１とＲＳ２の値の組み合わせのときＲＤ＝‘真’
となる非ブーリアンＮＯＲＣＲ演算を実行する論理回路を有する。
【００３７】
請求項１５のＶＬＩＷプロセッサでは、請求項５乃至７のいずれか１つにおいて、上記有効フラグ及びこれと対になる上記条件フラグをそれぞれＶ及びＳで表し、
（Ｖ，Ｓ）＝（‘有効’，‘真’）のとき第２条件コード（Ｖ，Ｓ）が‘真’、  （Ｖ，Ｓ）＝（‘有効’，‘偽’）のとき第２条件コード（Ｖ，Ｓ）が‘偽’、  （Ｖ，Ｓ）＝（‘無効’，‘真’）又は（Ｖ，Ｓ）＝（‘無効’，‘偽’）のとき第２条件コード（Ｖ，Ｓ）が‘未定義’であると定義し、上記第１及び第２ソースオペランドフィールド並びに上記デスティネーションオペランドフィールドで指定される上記第２条件コードレジスタをそれぞれＲＳ１、ＲＳ２及びＲＤで表し、‘真’と‘偽’の一方を他方に変換する演算子を＊で表すと、上記論理演算回路はその論理演算の１種として、
＊ＲＳ１とＲＳ２の少なくとも一方が‘真’のときＲＤ＝‘偽’
ＲＳ１＝‘未定義’かつＲＳ２＝‘未定義’のときＲＤ＝‘未定義’
その他のＲＳ１とＲＳ２の値の組み合わせのときＲＤ＝‘真’
となるＮＯＲＮＣＲ演算を実行する論理回路を有する。
【００３８】
【発明の実施の形態】
以下、図面に基づいて本発明の実施形態を説明する。
【００３９】
図１は、本発明が適用される４並列ＶＬＩＷプロセッサの概略構成を示すブロック図である。
【００４０】
命令キャシュメモリ１０内には、命令スケジューラにより配列された命令が格納されており、読出回路１１を介して互いに同一構成のスロット０〜３処理ユニット１２〜１５に供給され、各命令パックの並列処理においては、レジスタファイル１６内の汎用レジスタ及び条件コードレジスタが用いられる。レジスタファイル１６内の汎用レジスタの内容は、ストア命令の実行に応答して読出書込回路１７を介しデータキャッシュメモリ１８に格納され、データキャッシュメモリ１８内のデータは、ロード命令の実行に応答して読出書込回路１７を介しレジスタファイル１６内のレジスタに格納される。全体の制御は、システム制御回路１９により行われる。
【００４１】
図２は、スロット０処理ユニット１２の概略構成を示すブロック図である。
【００４２】
読出回路１１から読み出された命令は、命令レジスタ１２１に保持され、その内容が命令デコーダ１２２でデコードされる。制御回路１２３は、このデコード結果に基づいて各種制御を行うことにより、この命令を実行させる。構成要素１２４〜１２８は、図２１を参照して説明した上述のものと同一である。
【００４３】
本実施形態では、図２２に示す条件フィールドを備えた分岐命令を含む従来の命令セットを承継して既存のソフトウエア資産をそのまま利用可能にすると共に、指定された条件が成立している場合のみ演算を実行する条件付命令を使用可能にするために、従来のＶＬＩＷプロセッサに次のような構成を付加している。すなわち、第２条件コードレジスタファイル１６３と、そのなかの１つのレジスタを選択するためのセレクタ１２９、条件コード変換回路１２Ａ及びマルチプレクサ１２Ｂと、第２条件コードレジスタファイル１６３内の指定されたレジスタの内容を取り出すためのセレクタ１２Ｃとを備え、従来の命令セットにさらに、図３に示すような形式の条件コード変換命令を新たに追加している。
【００４４】
図３は、条件コード変換命令形式とこの命令を実行するための主要なハードウエア構成との関係を示す。図３では、第１条件コードレジスタファイル１６２が８個の第１条件コードレジスタＣＣ０〜ＣＣ７からなり、第２条件コードレジスタファイル１６３が８個の第２条件コードレジスタＣＲ０〜ＣＲ７からなる場合を示している。
【００４５】
各第１条件コードレジスタＣＣ０は、上述のようにネガティブフラグＮ、ゼロフラグＺ、オーバフローフラグＯＶ及びキャリーフラグＣからなる。これに対し、各第２条件コードレジスタは、有効フラグＶと条件フラグＳとからなる。条件フラグＳは、図２２に示す判定条件の判定結果を１ビットで表すためのものであり、この判定は条件コード変換回路１２Ａで行われる。有効フラグＶは、後述の多重条件を条件フラグＳと共に表現するために導入されたものであり、‘１’は有効を示し‘０’は無効を示す。この条件コード変換の結果、有効フラグＶは必ず‘１’に設定される。
【００４６】
条件コード変換命令中の第１条件コードレジスタＩＤコードＣＣｊの値又はこれをデコードした信号がセレクタ１２９の制御入力端に供給されて、第１条件コードレジスタファイル１６２内のレジスタが選択され、条件コード変換回路１２Ａに供給される。この命令の第１条件フィールドＣＯＮＤは、図２２の条件フィールドと同一であり、その値又はこれをデコードした信号が条件コード変換回路１２Ａに供給される。条件コード変換回路１２Ａは、選択された第１条件コードレジスタについて、第１条件フィールドＣＯＮＤで表された条件が成立しているかどうかを判定する。例えば第１条件フィールドＣＯＮＤが‘００１１’の場合、選択された第１条件コードレジスタのネガティブフラグＮと有効フラグＶとの排他的論理和を演算し、その結果が‘１’であれば‘１１’を出力し、‘０’であれば‘１０’を出力する。
【００４７】
この命令の第２条件コードレジスタＩＤコードＣＲｋの値又はこれをデコードした信号がマルチプレクサ１２Ｂの制御入力端に供給されて、第２条件コードレジスタファイル１６３内の１つのレジスタが指定され、これに条件コード変換回路１２Ａの出力が格納される。
【００４８】
図４は、第２条件コードレジスタファイル１６３の指定された第２条件コードレジスタの内容に応じて演算の実行が決定される第２条件付命令の形式とこの命令を実行するための主要なハードウエア構成との関係を示す。
【００４９】
この第２条件付命令は、分岐命令以外の演算命令や転送命令など（演算等）である。該命令の第２条件コードレジスタＩＤコードＣＲｐの値又はこれをデコードした信号がセレクタ１２Ｄの制御入力端に供給されて、第２条件コードレジスタファイル１６３内の１つのレジスタが選択され、制御回路１２３に供給される。制御回路１２３は、選択された第２条件コードレジスタの有効フラグＶが‘１’のとき、条件フラグＳと該命令の条件フラグＳＦとの値を比較し、両者が一致していればオペレーションコードＯＰで表される演算等を実行し、そうでなければ実行しない。この命令のＲＳ１、ＲＳ２及びＲＤはそれぞれ、オペレーションコードＯＰで表される演算を実行するときの第１ソースオペランド、第２ソースオペランド及びデスティネーションオペランドである。
【００５０】
次のようなプログラム例を考える。
【００５１】
もし、条件Ｒ１＞Ｒ２が成立すれば、
Ｒ２０＝［Ｒ１０＋Ｒ１３］
Ｒ２１＝［Ｒ１０＋Ｒ１４］
Ｒ２２＝Ｒ２０−Ｒ２１
を実行し、成立しなければ、
Ｒ２０＝［Ｒ１０＋Ｒ１１］
Ｒ２１＝［Ｒ１０＋Ｒ１２］
Ｒ２２＝Ｒ２０＋Ｒ２１
を実行する。ここに［］は間接アドレス指定を意味しており、例えば［Ｒ１０＋Ｒ１３］は汎用レジスタＲ１０とＲ１３の和をメモリアドレスとするメモリの内容である。
【００５２】
このプログラムは、分岐命令を用い、機械語のニモニックで次のステップ（１）〜（１０）のように記述される。
（１）        ＳＵＢＣＣ  Ｒ１  Ｒ２  Ｒ３  ＣＣ１
ＳＵＢＣＣのＣＣは、条件コード生成機能付演算命令であることを示している。減算（Ｒ１−Ｒ２）の結果を汎用レジスタＲ３に格納すると共に、結果が負であればＮ＝‘１’、ゼロであればＺ＝‘１’、桁借りがあれば、Ｃ＝‘１’を、第１条件コードレジスタＣＣ１に格納する。
（２）        ＢＩＣＣ  ＢＧ  ＣＣ１  Ｌ１
ＢＩＣＣは条件分岐命令であることを示している。第１条件コードレジスタＣＣ１について、
論理演算ｎｏｔ（Ｚ  ｏｒ  （Ｎ  ｘｏｒ  ＯＶ））を行い、その結果が‘１’であればラベルＬ１に分岐する。
（３）        ＬＤ  Ｒ１０  Ｒ１１  Ｒ２０
加算（Ｒ１０＋Ｒ１１）の結果をアドレスとするメモリ内のデータをロードしてＲ２０に格納する。
（４）        ＬＤ  Ｒ１０  Ｒ１２  Ｒ２１
加算（Ｒ１０＋Ｒ１２）の結果をアドレスとするメモリ内のデータをロードしてＲ２１に格納する。
（５）        ＡＤＤ  Ｒ２０  Ｒ２１  Ｒ２２
加算（Ｒ２０＋Ｒ２１）の結果をＲ２２に格納する。
（６）        ＢＡ  Ｌ２
ラベルＬ２に無条件分岐する。
（７）Ｌ１    ＬＤ  Ｒ１０  Ｒ１３  Ｒ２０
加算（Ｒ１０＋Ｒ１３）の結果をアドレスとするメモリ内のデータをロードしてＲ２０に格納する。
（８）        ＬＤ  Ｒ１０  Ｒ１４  Ｒ２１
加算（Ｒ１０＋Ｒ１４）の結果をアドレスとするメモリ内のデータをロードしてＲ２１に格納する。
（９）        ＳＵＢ  Ｒ２０  Ｒ２１  Ｒ２２
減算（Ｒ２０−Ｒ２１）の結果をＲ２２に格納する。
（１０）Ｌ２
図７は、このプログラムの並列度を見るために、該プログラムを４並列同時実行可能なＶＬＩＷ命令列に変換したものを示す。
【００５３】
ここで図６に示す如く、有効フラグＶと条件フラグＳの対である第２条件コードについて、
Ｖ＝‘１’（‘有効’）かつＳ＝‘１’（‘真’）のとき、第２条件コード（Ｖ，Ｓ）が‘真’（TRUE）
Ｖ＝‘１’かつＳ＝‘０’（‘偽’）のとき、第２条件コード（Ｖ，Ｓ）が‘偽’(FALSE)
Ｖ＝‘０’のとき、条件フラグＳの値によらず第２条件コード（Ｖ，Ｓ）が‘未定義’(UNDEFINED)
であると定義する。
【００５４】
また、例えば第２条件コードレジスタＣＲ１が‘真’であることをＣＲ１Ｔで表し、第２条件コードレジスタＣＲ１が‘偽’であることをＣＲ１Ｆで表す
上記命令シーケンス（１）〜（１０）のプログラムは、分岐命令を用いずに条件コード変換命令及び第２条件付命令を使用すると、次の（１１）〜（１９）のように書き換えられる。
（１１）        ＳＵＢＣＣ  Ｒ１  Ｒ２  Ｒ３  ＣＣ１
減算（Ｒ１−Ｒ２）の結果を汎用レジスタＲ３に格納すると共に、結果が負であればＮ＝１、ゼロであればＺ＝１、桁借りがあれば、Ｃ＝１を、第１条件コードレジスタＣＣ１に格納する。
（１２）        ＣＫＩＣＣ  ＢＧ  ＣＲ１
ＣＫＩＣＣは、条件変換命令であることを示している。第１条件コードレジスタＩＤコードＣＣｉで指定されるレジスタの内容（第１条件コード）は第２条件コードレジスタＩＤコードＣＲｉで指定されるレジスタの内容（第２条件コード）に変換されるものとし、簡単化のために第１条件コードレジスタＩＤコードＣＣｉの記載を省略している。
【００５５】
第１条件コードレジスタＣＣ１に対し、論理演算ｎｏｔ（Ｚ  ｏｒ  （Ｎ  ｘｏｒ  ＯＶ）を行い、その結果を第２条件コードレジスタＣＲ１に格納する。
（１３）        ＣＬＤ  Ｒ１０  Ｒ１１  Ｒ２０  ＣＲ１Ｔ
ＣＬＤのＣは、第２条件付命令であることを示している。
【００５６】
ＣＲ１Ｔの場合、加算（Ｒ１０＋Ｒ１１）の結果をアドレスとするメモリ内のデータをロードして汎用レジスタＲ２０に格納する。
（１４）        ＣＬＤ  Ｒ１０  Ｒ１２  Ｒ２１  ＣＲ１Ｔ
ＣＲ１Ｔの場合、加算（Ｒ１０＋Ｒ１２）の結果をアドレスとするメモリ内のデータをロードして汎用レジスタＲ２１に格納する。
（１５）        ＣＡＤＤ  Ｒ２０  Ｒ２１  Ｒ２２  ＣＲ１Ｔ
ＣＲ１Ｔの場合、加算（Ｒ２０＋Ｒ２１）の結果を汎用レジスタＲ２２に格納する。
（１６）Ｌ１    ＣＬＤ  Ｒ１０  Ｒ１３  Ｒ２０  ＣＲ１Ｆ
ＣＲ１Ｆの場合、加算（Ｒ１０＋Ｒ１３）の結果をアドレスとするメモリ内のデータをロードして汎用レジスタＲ２０に格納する。
（１７）        ＣＬＤ  Ｒ１０  Ｒ１４  Ｒ２１  ＣＲ１Ｆ
ＣＲ１Ｆの場合、加算（Ｒ１０＋Ｒ１４）の結果をアドレスとするメモリ内のデータをロードして汎用レジスタＲ２１に格納する。
（１８）        ＣＳＵＢ  Ｒ２０  Ｒ２１  Ｒ２２  ＣＲ１Ｆ
ＣＲ１Ｆの場合、減算（Ｒ２０−Ｒ２１）の結果を汎用レジスタＲ２２に格納する。
（１９）Ｌ２
このように、条件コード変換命令を用いると、従来の条件コード生成機能付演算命令を含む命令セットを使用しながら、プリディケート実行機能である第２条件付命令を用いることができるので、過去のプログラム資産を流用しながら、第２条件付命令を用いて性能向上を図ることができる。
【００５７】
図８は、このプログラムの並列度を見るために、該プログラムを４並列ＶＬＩＷプロセッサで実行するためのＶＬＩＷ命令列に変換したものを示す。
【００５８】
図８を図７と比較すれば明らかなように、本発明のＶＬＩＷ命令列を用いると、従来よりも並列度が向上して、少ないＶＬＩＷ命令数でプログラムを記述することができ、処理速度が向上する。
【００５９】
次に、例えば図１３に示すように条件１成立かつ条件２不成立というような多重条件の下で処理を実行する場合の並列度向上を考える。
【００６０】
このような処理を、分岐命令を用いずに第２条件付命令を使用して実行可能にするために、図２において、セレクタ１２Ｄ及び論理演算回路１２Ｅをさらに備えると共に、多重条件を表すための第２条件コード間演算命令を新たに追加している。
【００６１】
図５は、第２条件コード間演算命令形式とこの命令を実行するための主要なハードウエア構成との関係を示す。
【００６２】
この命令の第２条件コードレジスタＩＤコードＣＲｐ及びＣＲｑの値又はこれをデコードした信号がそれぞれセレクタ１２Ｃ及び１２Ｄの制御入力端に供給されて、第２条件コードレジスタファイル１６３内のレジスタが選択され、その内容がそれぞれＲＳ１及びＲＳ２として論理演算回路１２Ｅに供給される。論理演算回路１２Ｅは、この命令のオペレーションコードＯＰで指定される図９〜図１２に示す演算の１つを第１ソースオペランドＲＳ１及び第２ソースオペランドＲＳ２に対して実行し、その結果をマルチプレクサ１２Ｂに供給する。マルチプレクサ１２Ｂの制御入力端にこの命令の第２条件コードレジスタＩＤコードＣＲｋの値又はこれをデコードした信号が供給されて、第２条件コードレジスタファイル１６３内のレジスタが指定され、これに演算結果が格納される。
【００６３】
図９〜図１２では‘真’、‘偽’及び‘未定義’をそれぞれＴ（True）、Ｆ(False)及びＵ(Undefined)で示している。図９〜図１２の論理演算の内容は、以下の具体例の説明から明らかとなる。
【００６４】
図１３は、条件１〜３により場合分けされる処理を示すフローチャートである。図１４は、図１３中の多重条件を、分岐命令を用いずに第２条件コード間論理演算を用いて表したフローチャートである。
【００６５】
図中のＳ１〜Ｓ９のＳはステップを示し、また、｛条件｝は、条件、例えばＲ１＜Ｒ２を判定し、これにより得られた第１条件コードを、第２条件コードに変換したものを示している。
【００６６】
（Ｓ１）｛条件１｝が第２条件コードレジスタＣＲ１に代入される。ＣＲ１Ｔであれば、Ｓ２へ進み、そうでなければＳ３へ進む。
【００６７】
（Ｓ２）ＣＲ１Ｔであれば処理１を実行する。図４の第２条件付命令に条件ＣＲ１Ｔを与えることにより、分岐命令を用いずに処理１を実行することができる。次にＳ４へ進む。
【００６８】
（Ｓ３）ＣＲ１Ｆであれば処理２を実行する。第２条件付命令に条件ＣＲ１Ｆを与えることにより、分岐命令を用いずに処理２を実行することができる。次にＳ７へ進む。
【００６９】
（Ｓ４）｛条件２｝が第２条件コードレジスタＣＲ２に代入される。
【００７０】
多重条件を表現することができれば、より多くの第２条件付命令をパックにして１ＶＬＩＷ命令とすることが可能となり、並列度が向上する。そこで、条件１と条件２に対し、図５の第２条件コード間演算命令を実行して、条件１と条件２の多重条件を判定する。ここでは、図９（Ａ）の論理演算ＡＮＤＣＲを用いる。
【００７１】
次の命令
ＡＮＤＣＲ  ＣＲ１  ＣＲ２  ＣＲ３
は、ＲＳ１＝ＣＲ１とＲＳ２＝ＣＲ２との間の論理演算ＡＮＤＣＲを実行し、その結果を第２条件コードレジスタＣＲ３に格納することを意味している。
【００７２】
この演算の内容は、次の通りである。
【００７３】
ＲＳ１＝‘真’かつＲＳ２＝‘真’のときＲＤ＝‘真’
ＲＳ１＝‘真’かつＲＳ２＝‘偽’のときＲＤ＝‘偽’
その他のＲＳ１とＲＳ２の値の組み合わせのときＲＤ＝‘未定義’
したがって、｛条件１｝が‘真’且つ｛条件２｝が‘真’である場合には、ＣＲ３Ｔとなり、｛条件１｝が‘真’且つ｛条件２｝が‘偽’である場合にはＣＲ３Ｆとなる。その他の場合には、第２条件コードレジスタＣＲ３が‘未定義’になるので、以下のＳ５又はＳ６での処理が実行されないことが保証される。
【００７４】
（Ｓ５）ＣＲ３Ｔであれば処理３を実行する。第２条件付命令に条件ＣＲ３Ｔを与えることにより、分岐命令を用いずに処理３を実行することができる。次にＳ１０へ進む。
【００７５】
（Ｓ６）ＣＲ３Ｆであれば処理４を実行する。第２条件付命令に条件ＣＲ３Ｆを与えることにより、分岐命令を用いずに処理４を実行することができる。次にＳ１０へ進む。
【００７６】
｛条件１｝が‘真’で｛条件２｝が‘偽’である場合には処理４が実行され、逆に、｛条件１｝が‘偽’で｛条件２｝が‘真’である場合には処理４が実行されないのでＡＮＤＣＲは、第１ソースオペランドＲＳ１と第２ソースオペランドＲＳ２に関し交換法則が成立しない。すなわち、論理演算ＡＮＤＣＲは非ブーリアンである。換言すれば、交換法則が成立しないので、多重条件を表現することができる。
【００７７】
（Ｓ７）｛条件３｝が第２条件コードレジスタＣＲ４に代入される。
【００７８】
図１０（Ａ）の論理演算ＡＮＤＮＣＲを用い、
ＡＮＤＮＣＲ  ＣＲ１  ＣＲ４  ＣＲ５
を実行する。すなわち、ＲＳ１＝ＣＲ１とＲＳ２＝ＣＲ４との間の論理演算ＡＮＤＮＣＲを実行し、その結果を第２条件コードレジスタＣＲ５に格納する。
【００７９】
この演算の内容は、‘真’と‘偽’の一方を他方に変換する演算子を＊で表すと、次の通りである。
【００８０】
＊ＲＳ１＝‘真’かつＲＳ２＝‘真’のときＲＤ＝‘真’
＊ＲＳ１＝‘真’かつＲＳ２＝‘偽’のときＲＤ＝‘偽’
その他のＲＳ１とＲＳ２の値の組み合わせのときＲＤ＝‘未定義’
したがって、｛条件１｝が‘偽’且つ｛条件２｝が‘真’である場合には、ＣＲ５Ｔとなり、｛条件１｝が‘偽’且つ｛条件２｝が‘偽’である場合にはＣＲ５Ｆとなる。その他の場合には、第２条件コードレジスタＣＲ５が‘未定義’になるので、以下のＳ８又はＳ９での処理が実行されないことが保証される。
【００８１】
この論理演算ＡＮＤＣＲも、非ブーリアンである。
【００８２】
（Ｓ８）ＣＲ５Ｔであれば処理５を実行する。第２条件付命令に条件ＣＲ５Ｔを与えることにより、分岐命令を用いずに処理５を実行することができる。次にＳ１０へ進む。
【００８３】
（Ｓ９）ＣＲ５Ｆであれば処理６を実行する。第２条件付命令に条件ＣＲ５Ｆを与えることにより、分岐命令を用いずに処理６を実行することができる。次にＳ１０へ進む。
【００８４】
このように、非ブーリアンの第２条件コード間演算命令を用いれば、ＶＬＩＷプロセッサにおいて、単一条件及び多重条件をまとめて判定した後に、処理１〜処理６を並列実行することが可能となり、並列度が向上する。
【００８５】
なお、例えば条件２がＲ１＜Ｒ２である場合、この条件をＲ１≧Ｒ２で表し、かつ、Ｓ４での第２条件コードレジスタＣＲ２の‘真’と‘偽’を逆に考えてもよい。この場合、｛条件１｝が‘真’のとき、｛条件２｝が‘偽’であれば処理３を実行し、｛条件２｝が‘真’であれば処理４を実行する。したがって、Ｓ４では、図１１（Ａ）の論理演算ＮＡＮＤＣＲを用いる。
【００８６】
この演算の内容は、次の通りである。
【００８７】
ＲＳ１＝‘真’かつ＊ＲＳ２＝‘真’のときＲＤ＝‘真’
ＲＳ１＝‘真’かつ＊ＲＳ２＝‘偽’のときＲＤ＝‘偽’
その他のＲＳ１とＲＳ２の値の組み合わせのときＲＤ＝‘未定義’
同様に、例えば条件４がＲ３＜Ｒ４である場合、この条件をＲ３≧Ｒ４で表し、かつ、Ｓ７での第２条件コードレジスタＣＲ４の‘真’と‘偽’を逆に考えてもよい。この場合、｛条件１｝が‘偽’のとき、｛条件３｝が‘偽’であれば処理５を実行し、｛条件３｝が‘真’であれば処理６を実行する。したがって、Ｓ７では、図１２（Ａ）の論理演算ＮＡＮＤＮＣＲを用いる。
【００８８】
この演算の内容は、次の通りである。
【００８９】
＊ＲＳ１＝‘真’かつ＊ＲＳ２＝‘真’のときＲＤ＝‘真’
＊ＲＳ１＝‘真’かつ＊ＲＳ２＝‘偽’のときＲＤ＝‘偽’
その他のＲＳ１とＲＳ２の値の組み合わせのときＲＤ＝‘未定義’
さらに、例えば条件２がＲ１＜Ｒ２である場合、この条件をＲ１≧Ｒ２で表し、かつ、Ｓ４での第２条件コードレジスタＣＲ２の‘真’と‘偽’を逆に考えずに、第２条件コードレジスタＣＲ２に対し図９（Ｄ）の論理演算ＮＯＴＣＲを行ってもよい。
【００９０】
次に、論理演算ＯＲＣＲの利用とその定義について考える。
【００９１】
図１３において、例えば処理３の一部又は全部と処理５の一部又は全部とが同一処理を含む場合、（｛条件１｝が‘真’かつ｛条件２｝が‘真’）又は（｛条件１｝が‘偽’かつ｛条件３｝が‘真’）が‘真’のとき、この同一処理を１箇所にまとめて実行することにより、ステップ数を低減することが可能となる。図１４のＳ４でＡＮＤＣＲを実行して第２条件コードレジスタＣＲ３にその結果を格納し、Ｓ７でＡＮＤＮＣＲを実行して第２条件コードレジスタＣＲ５にその結果を格納しているので、第２条件コードレジスタＣＲ３とＣＲ５に対し論理演算ＯＲＣＲを実行し、その結果を条件とする第２条件付命令でこの同一処理を行えばよい。
【００９２】
このようなことを可能にするために、図９（Ｂ）の論理演算ＯＲＣＲは、次のように定義されている。
【００９３】
ＲＳ１とＲＳ２の少なくとも一方が‘真’のときＲＤ＝‘真’
ＲＳ１＝‘未定義’かつＲＳ２＝‘未定義’のときＲＤ＝‘未定義’
その他のＲＳ１とＲＳ２の値の組み合わせのときＲＤ＝‘偽’
この論理演算ＯＲＣＲは、交換法則が成立する。
【００９４】
次に、論理演算ＯＲＮＣＲの利用について考える。
【００９５】
図１３において、例えば処理４の一部又は全部と処理５の一部又は全部とが同一処理を含む場合、図１４において、ＣＲ３Ｆ又はＣＲ５Ｔのとき、この同一処理を行う。これを可能にするために、図１０（Ｂ）の論理演算ＯＲＮＣＲは、次のように定義されている。
【００９６】
＊ＲＳ１とＲＳ２の少なくとも一方が‘真’のときＲＤ＝‘真’
ＲＳ１＝‘未定義’かつＲＳ２＝‘未定義’のときＲＤ＝‘未定義’
その他のＲＳ１とＲＳ２の値の組み合わせのときＲＤ＝‘偽’
この論理演算ＯＲＮＣＲは、交換法則が成立しない。
【００９７】
次に、論理演算ＮＯＲＣＲの利用について考える。
【００９８】
図１３において、例えば処理３の一部又は全部と処理６の一部又は全部とが同一処理を含む場合、図１４において、ＣＲ３Ｔ又はＣＲ５Ｆのとき、この同一処理を行う。これを可能にするために、図１１（Ｂ）の論理演算ＮＯＲＣＲは、次のように定義されている。
【００９９】
ＲＳ１とＲＳ２の少なくとも一方が‘真’のときＲＤ＝‘偽’
ＲＳ１＝‘未定義’かつＲＳ２＝‘未定義’のときＲＤ＝‘未定義’
その他のＲＳ１とＲＳ２の値の組み合わせのときＲＤ＝‘真’
次に、論理演算ＮＯＲＮＣＲの利用について考える。
【０１００】
図１３において、例えば処理４の一部又は全部と処理６の一部又は全部とが同一処理を含む場合、図１４において、ＣＲ３Ｆ又はＣＲ５Ｆのとき、この同一処理を行う。これを可能にするために、図１２（Ｂ）の論理演算ＮＯＲＮＣＲは、次のように定義されている。
【０１０１】
＊ＲＳ１と＊ＲＳ２の少なくとも一方が‘真’のときＲＤ＝‘真’
ＲＳ１＝‘未定義’かつＲＳ２＝‘未定義’のときＲＤ＝‘未定義’
その他のＲＳ１とＲＳ２の値の組み合わせのときＲＤ＝‘偽’
この論理演算ＮＯＲＮＣＲは、交換法則が成立する。
【０１０２】
なお、上述のように異なる条件の下での複数の処理を並列処理することができるので、図１３の処理１と処理５や処理３と処理２に同一処理を含む場合にも、上記のような論理演算を用いて同一処理を１箇所に纏めて実行することができる。
【０１０３】
論理演算ＯＲＣＲと同様に、図９（Ｃ）に示す論理演算ＸＯＲＣＲを定義することができる。この演算の内容は、次の通りである。
【０１０４】
ＲＳ１とＲＳ２の一方が‘真’で他方が‘偽’のとき、ＲＤ＝‘真’
ＲＳ１とＲＳ２の両方が‘真’又は‘偽’で等しいとき、ＲＤ＝‘偽’
その他のＲＳ１とＲＳ２の値の組み合わせのときＲＤ＝‘未定義’
論理演算ＸＯＲＣＲは、例えば図１３において、条件２＝条件３であり、Ｔ→Ｆの処理４とＦ→Ｔの処理５とで同一処理を行い、Ｔ→Ｔの処理３とＦ→Ｆの処理６とで他の同一処理を行う場合に有効である。
【０１０５】
上記同様にして、図１０（Ｃ）に示す論理演算ＸＯＲＮＣＲ、図１１（Ｃ）に示す論理演算ＮＸＯＲＣＲ、及び、図１２（Ｃ）に示す論理演算ＮＸＯＲＮＣＲを定義することができる。
【０１０６】
次に、第２条件コード間演算命令を用いたより具体的な例を説明する。
【０１０７】
図１５は、多重条件の処理を示すフローチャートである。図１６は、分岐命令を用いずにプリディケード実行を用いて図１５の処理を行う場合のフローチャートである。
【０１０８】
Ｓ１１とＳ１５とで同一処理Ｒ１２＝Ｒ７＊Ｒ８が行われるので、上述のようにこれを１箇所にまとめて行う。
【０１０９】
（Ｓ１０）Ｒ１０＜Ｒ１１であるかどうかを判定し、その結果が‘真’であればＳ１１へ進み、‘偽’であればＳ１２へ進む。
【０１１０】
この処理は、次の２つの命令で実行される。
【０１１１】
〔１〕        ＳＵＢＣＣ  Ｒ１０  Ｒ１１  Ｒ１２  ＣＣ６
減算（Ｒ１０−Ｒ１１）の結果を汎用レジスタＲ１２に格納すると共に、結果が負であればＮ＝１、ゼロであればＺ＝１、桁借りがあれば、Ｃ＝１を第１条件コードレジスタＣＣ６に格納する。
【０１１２】
〔２〕        ＣＫＩＣＣ  ＢＬ  ＣＣ６
第１条件コードレジスタＣＣ６について、ネガティブフラグＮと有効フラグＶとの排他的論理和演算を行い、その結果を第２条件コードレジスタＣＲ６に格納する。
【０１１３】
（Ｓ１２）Ｒ１＜Ｒ２であるかどうかを判定し、その結果が‘真’であればＳ１３へ進み、‘偽’であればＳ１４へ進む。
【０１１４】
この処理は、次の２つの命令で実行される。
【０１１５】
〔３〕        ＳＵＢＣＣ  Ｒ１  Ｒ２  Ｒ３  ＣＣ１
減算（Ｒ１−Ｒ２）の結果を汎用レジスタＲ３に格納すると共に、結果が負であればＮ＝１、ゼロであればＺ＝１、桁借りがあれば、Ｃ＝１を第１条件コードレジスタＣＣ１に格納する。
【０１１６】
〔４〕        ＣＫＩＣＣ  ＢＬ  ＣＣ１
第１条件コードレジスタＣＣ１について、ネガティブフラグＮと有効フラグＶとの排他的論理和演算を行い、その結果を第２条件コードレジスタＣＲ１に格納する。
【０１１７】
（Ｓ１３）除算Ｒ２０／Ｒ２１を行い、その結果をＲ２２に格納する。
【０１１８】
〔５〕        ＣＵＤＩＶ  Ｒ２０  Ｒ２１  Ｒ２２  ＣＲ１Ｔ
ＣＵＤＩＶのＵは、符号無し（ｕｎｓｉｇｎｅｄ）数の演算であることを示している。
【０１１９】
ＣＲ１Ｔの場合、除算Ｒ２０／Ｒ２１を行い、その結果をＲ２２に格納する。
【０１２０】
（Ｓ１４）Ｒ４＞Ｒ５であるかどうかを判定し、その結果が‘真’であればＳ１５へ進み、‘偽’であればＳ１６へ進む。
【０１２１】
この処理は、分岐命令を使用せずに２重条件を判定する必要があるので、次の３つの命令で実行される。
【０１２２】
〔６〕        ＳＵＢＣＣ  Ｒ４  Ｒ５  Ｒ６  ＣＣ２
減算（Ｒ４−Ｒ５）の結果を汎用レジスタＲ６に格納すると共に、結果が負であればＮ＝１、ゼロであればＺ＝１、桁借りがあれば、Ｃ＝１を第１条件コードレジスタＣＣ２に格納する。
【０１２３】
〔７〕        ＣＫＩＣＣ  ＢＧ  ＣＣ２
第１条件コードレジスタＣＣ２について、ｎｏｔ（Ｚ  ｏｒ  （Ｎ  ｘｏｒ  ＯＶ））の論理演算を行い、その結果を第２条件コードレジスタＣＲ２に格納する。
【０１２４】
〔８〕        ＡＮＤＮＣＲ  ＣＲ１  ＣＲ２  ＣＲ２
ＣＲ１とＣＲ２について論理演算ＡＮＤＮＣＲＣＲを行い、その結果を第２条件コードレジスタＣＲ２に格納する。
【０１２５】
（Ｓ１５）減算Ｒ７−Ｒ８を行い、その結果を汎用レジスタＲ９に格納する。
【０１２６】
〔９〕        ＣＳＵＢ  Ｒ７  Ｒ８  Ｒ９  ＣＲ２Ｔ
ＣＲ２Ｔであれば減算（Ｒ７−Ｒ８）を行い、その結果を９に格納する。
【０１２７】
次に、乗算Ｒ７×Ｒ８を行い、その結果を汎用レジスタＲ１２に格納する。
【０１２８】
Ｓ１５の処理にＳ１１の処理が一箇所にまとめられているので、この処理は次の２つの命令で実行される。
【０１２９】
〔１０〕      ＯＲＣＲ  ＣＲ２  ＣＲ６  ＣＲ５
第２条件コードレジスタＣＲ２とＣＲ６ついて論理演算ＯＲＣＲを行い、その結果を第２条件コードレジスタＣＲ５に格納する。
【０１３０】
〔１１〕      ＣＭＵＬ  Ｒ７  Ｒ８  Ｒ１２  ＣＲ５Ｔ
ＣＲ５Ｔであれば、乗算Ｒ７×Ｒ８を行い、その結果を汎用レジスタＲ１２に格納する。
【０１３１】
（Ｓ１６）加算（Ｒ７＋Ｒ８）を行い、その結果を汎用レジスタＲ９に格納する。
【０１３２】
〔１２〕      ＣＡＤＤ  Ｒ７  Ｒ８  Ｒ９  ＣＲ２Ｆ
ＣＲ２Ｆであれば、加算（Ｒ７＋Ｒ８）を行い、その結果を汎用レジスタＲ９に格納する。
【０１３３】
図１７は、上記命令〔１〕〜〔１２〕を４並列ＶＬＩＷプロセッサで実行するために、命令スケジューラでこれを命令パケットに変換した命令列を示す。
【０１３４】
図１８は、分岐命令を含む従来の命令セットで図１５の処理を行うプログラムを記述した後、ＶＬＩＷプロセッサで処理するために命令スケジューラでこれを命令パケットに変換した命令列を示す。
【０１３５】
図１７の場合、並列度が図１８の場合よりも２倍向上してＮＯＰ命令が少なくなり、処理速度が約２倍になる。
【０１３６】
図１９は、図１５と同じ内容の処理を、条件及びその結果の‘真’と‘偽’を逆にして行う場合のフローチャートである。
【０１３７】
図２０は、分岐命令を用いずにプリディケード実行を用いて図１９の処理を行う場合のフローチャートである。
【０１３８】
図２０を図１６と比較すると、条件コード変換命令の条件フィールドが次のように変わっている。すなわち、Ｓ１０で、ＢＬがＢＧＬとなり、Ｓ１２でＢＬがＢＧＬとなり、Ｓ１４でＢＧがＢＬＥとなっている。
【０１３９】
また、第２条件コード間演算命令が次のように変わっている。すなわち、Ｓ１４でＡＮＤＮＣＲがＮＡＮＤＣＲとなり、Ｓ１５２でＯＲＣＲがＮＯＲＮＣＲとなっている。
【０１４０】
さらに、第２条件付命令が次のように変わっている。すなわち、Ｓ１３でＣＲ１ＴがＣＲ１Ｆとなり、Ｓ１５１でＣＲ２ＴがＣＲ２Ｆとなり、Ｓ１６でＣＲ２ＦがＣＲ２Ｔとなっている。
【図面の簡単な説明】
【図１】本発明が適用されるＶＬＩＷプロセッサの概略構成を示すブロック図である。
【図２】図１中のスロット０処理ユニットの概略構成を示すブロック図である。
【図３】条件コード変換命令形式とこの命令を実行するための主要なハードウエア構成との関係を示す。
【図４】第２条件コードレジスタファイル内の指定されたレジスタの内容に応じて演算の実行が決定される第２条件付命令の形式とこの命令を実行するための主要なハードウエア構成との関係を示す図である。
【図５】第２条件コード間演算命令形式とこの命令を実行するための主要なハードウエア構成との関係を示す図である。
【図６】第２条件コードの値とその意味を示す図である。
【図７】明細書に記載した第１のプログラムを４並列ＶＬＩＷで実行するための命令列を示す図である。
【図８】明細書に記載した第２のプログラムを４並列ＶＬＩＷで実行するための命令列を示す図である。
【図９】（Ａ）〜（Ｄ）はいずれも第２条件コード間の論理演算の真理値表である。
【図１０】（Ａ）〜（Ｃ）はいずれも第２条件コード間の論理演算の真理値表である。
【図１１】（Ａ）〜（Ｃ）はいずれも第２条件コード間の論理演算の真理値表である。
【図１２】（Ａ）〜（Ｃ）はいずれも第２条件コード間の論理演算の真理値表である。
【図１３】条件１〜３により場合分けされる処理を示すフローチャートである。
【図１４】図１３中の多重条件を、分岐命令を用いずに第２条件コード間論理演算を用いて表したフローチャートである。
【図１５】多重条件の処理を示すフローチャートである。
【図１６】分岐命令を用いずにプリディケード実行を用いて図１５の処理を行う場合のフローチャートである。
【図１７】明細書に記載した第３のプログラムを４並列ＶＬＩＷプロセッサで実行するためのＶＬＩＷ命令列を示す図である。
【図１８】分岐命令を含む従来の命令セットで記述したプログラムを４並列ＶＬＩＷプロセッサで実行するためのＶＬＩＷ命令列を示す図である。
【図１９】図１５と同じ内容の処理を、条件及びその結果の‘真’と‘偽’を逆にして行う場合のフローチャートである。
【図２０】分岐命令を用いずにプリディケード実行を用いて図１９の処理を行う場合のフローチャートである。
【図２１】条件コード生成機能付演算命令形式とこの命令を実行するための主要なハードウエア構成との関係を示す図である。
【図２２】分岐命令内の条件フィールドの値と、そのニモニック、意味及び判定条件を示す表である。
【図２３】（Ａ）は分岐命令を含むプログラムを示す図であり、（Ｂ）はこのプログラムを７並列ＶＬＩＷプロセッサで実行する場合のＶＬＩＷ命令列を示す図である。
【図２４】（Ａ）は第２条件付命令を用いて図２３（Ａ）のプログラムを置き換えたものを示す図であり、（Ｂ）はこのプログラムを７並列ＶＬＩＷプロセッサで実行する場合のＶＬＩＷ命令列を示す図である。
【符号の説明】
１０  命令キャシュメモリ
１１  読出回路
１２〜１５  スロット０〜３処理ユニット
１６  レジスタファイル
１７  読出書込回路
１８  データキャッシュメモリ
１９  システム制御回路
１２１  命令レジスタ
１２２  命令デコーダ
１２３  制御回路
１２４  ＡＬＵ
１２５、１２６、１２９、１２Ｃ、１２Ｄ  セレクタ
１２７、１２８、１２Ｂ  マルチプレクサ
１２Ａ  条件コード変換回路
１２Ｅ  論理演算回路
１６１  汎用レジスタファイル
１６２  第１条件コードレジスタファイル
１６３  第２条件コードレジスタファイル
ＣＣ０〜ＣＣ７  第１条件コードレジスタ
ＣＲ０〜ＣＲ７  第２条件コードレジスタ
Ｖ  有効フラグ
Ｓ、ＳＦ  条件フラグ
ＣＣｉ、ＣＣｊ  第１条件コードレジスタＩＤコード
ＣＯＮＤ  第１条件フィールド
ＣＲｋ、ＣＲｐ、ＣＲｑ  第２条件コードレジスタＩＤコード
ＯＰ  オペレーションコード
ＲＳ１  第１ソースオペランド
ＲＳ２  第２ソースオペランド
ＲＤ  デスティネーションオペランド
Ｒ１〜Ｒ１２  汎用レジスタ
Ｎ  ネガティブフラグ
Ｚ  ゼロフラグ
ＯＶ  オーバフローフラグ
Ｃ  キャリーフラグ
【図１】
0003830683.tif 000002
【図２】
0003830683.tif 000003
【図３】
0003830683.tif 000004
【図４】
0003830683.tif 000005
【図５】
0003830683.tif 000006
【図６】
0003830683.tif 000007
【図７】
0003830683.tif 000008
【図８】
0003830683.tif 000009
【図９】
0003830683.tif 000010
【図１０】
0003830683.tif 000011
【図１１】
0003830683.tif 000012
【図１２】
0003830683.tif 000013
【図１３】
0003830683.tif 000014
【図１４】
0003830683.tif 000015
【図１５】
0003830683.tif 000016
【図１６】
0003830683.tif 000017
【図１７】
0003830683.tif 000018
【図１８】
0003830683.tif 000019
【図１９】
0003830683.tif 000020
【図２０】
0003830683.tif 000021
【図２１】
0003830683.tif 000022
【図２２】
0003830683.tif 000023
【図２３】
0003830683.tif 000024
【図２４】
0003830683.tif 000025