(57)【要約】【課題】  条件付ＳＩＭＤ命令の無駄な実行抑止を回避する技術を提供する。【解決手段】  条件付ＳＩＭＤ命令を有する命令セットを備えたマイクロプロセッサにおいて、命令セットは、命令により指定される複数の条件コードの全てが命令により指定される条件値を示すことを分岐条件とする条件付分岐命令を有する。条件付分岐命令は、マイクロプロセッサで動作させるプログラムのコンパイル時に、コンパイラによりプログラム内に挿入される。条件コードが第１条件値を示すことを実行条件として設定された条件付ＳＩＭＤ命令がプログラム内に存在する場合、条件付分岐命令は、プログラム内に挿入される際、その条件付ＳＩＭＤ命令で使用される複数の条件コードの全てが第２条件値を示すことを分岐条件として設定される。【選択図】    図２
2009128989.tif 000002
【特許請求の範囲】
【請求項１】
複数の処理データに対応する複数の条件コードを使用して処理データ単位で実行制御される条件付ＳＩＭＤ命令を有する命令セットを備えたマイクロプロセッサであって、
前記命令セットは、命令により指定される複数の条件コードの全てが命令により指定される条件値を示すことを分岐条件とする条件付分岐命令を有することを特徴とするマイクロプロセッサ。
【請求項２】
請求項１に記載のマイクロプロセッサにおいて、
前記条件付分岐命令は、マイクロプロセッサで動作させるプログラムのコンパイル時に、コンパイラによりプログラム内に挿入されることを特徴とするマイクロプロセッサ。
【請求項３】
請求項２に記載のマイクロプロセッサにおいて、
条件コードが第１条件値を示すことを実行条件として設定された条件付ＳＩＭＤ命令がプログラム内に存在する場合、前記条件付分岐命令は、プログラム内に挿入される際、その条件付ＳＩＭＤ命令で使用される複数の条件コードの全てが第２条件値を示すことを分岐条件として設定されることを特徴とするマイクロプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロプロセッサに関し、特に、ＳＩＭＤ（Ｓｉｎｇｌｅ Ｉｎｓｔｒｕｃｔｉｏｎ Ｍｕｌｔｉｐｌｅ Ｄａｔａ）機構を有するマイクロプロセッサに関する。
【背景技術】
【０００２】
ＳＩＭＤ機構（複数の処理回路を用いて単一の命令で複数のデータを並列に処理する機構）を備えたマイクロプロセッサで動作させるプログラムのコンパイル処理に関して、プログラムの並列性を引き出す技術として条件付実行制御が知られている。条件付実行制御は、命令単位でプログラムの実行を許可するフラグを設定することで、プログラムから分岐を排除して分岐予測の誤りによる実行の遅延を無くす技術である（例えば、特許文献１を参照）。
【０００３】
図３は、条件付実行制御（命令単位）の一例を示している。図３の左側のプログラムにおいて、「ＳＵＢｃｃｇｒ２，ｇｒ３，ｇｒ０，ｉｃｃ１」は、汎用レジスタＧＲ２、ＧＲ３の減算結果を汎用レジスタＧＲ０に格納するとともに、減算結果に応じて第１条件コードレジスタＩＣＣ１を設定するための命令である。例えば、第１条件コードレジスタは、ネガティブフラグＮ、ゼロフラグＺ、オーバフローフラグＶおよびキャリーフラグＣを備えて構成されており、条件コード生成機能付演算命令（ＳＵＢｃｃなど）の実行時に、演算結果が負の値であればフラグＮが“１”に設定され、演算結果がゼロであればフラグＺが“１”に設定され、演算結果にオーバフローがあればフラグＶが“１”に設定され、演算結果に桁借りがあればフラグＣが“１”に設定される。「ＢＮＥｉｃｃ１，＃０，Ｌａｂｅｌ１」は、第１条件コードレジスタＩＣＣ１のフラグＺが“０”に設定されている場合に（即ち、汎用レジスタＧＲ２、Ｇ３の値が等しくない場合に）ラベルＬａｂｅｌ１に分岐するための命令である。「ＡＤＤｇｒ７，ｇｒ８，ｇｒ６」は、汎用レジスタＧＲ７、ＧＲ８の加算結果を汎用レジスタＧＲ６に格納するための命令である。「ＢＲＡ Ｌａｂｅｌ２」は、無条件でラベルＬａｂｅｌ２に分岐するための命令である。「ＳＵＢ ｇｒ７，ｇｒ８，ｇｒ６」は、汎用レジスタＧＲ７、ＧＲ８の減算結果を汎用レジスタＧＲ６に格納するための命令である。
【０００４】
このようなプログラムに対して条件付実行制御が適用されると、「ＢＮＥ ｉｃｃ１，＃０，Ｌａｂｅｌ１」、「ＢＲＡ Ｌａｂｅｌ２」、「Ｌａｂｅｌ１：」および「Ｌａｂｅｌ２：」が省略され、「ＣＫＮＥｉｃｃ１，ｃｃ４」が挿入され、「ＡＤＤ ｇｒ７，ｇｒ８，ｇｒ６」および「ＳＵＢｇｒ７，ｇｒ８，ｇｒ６」が「ＣＡＤＤ ｇｒ７，ｇｒ８，ｇｒ６，ｃｃ４，Ｆ」および「ＣＳＵＢ ｇｒ７，ｇｒ８，ｇｒ６，ｃｃ４，Ｔ」にそれぞれ置き換えられることで、図３の右側のプログラムが生成される。図３の右側のプログラムにおいて、「ＣＫＮＥｉｃｃ１，ｃｃ４」は、第１条件コードレジスタＩＣＣ１のフラグＺが“０”に設定されている場合に第２条件コードレジスタＣＣ４を“Ｔｒｕｅ”を示す状態に設定し、第１条件コードレジスタＩＣＣ１のフラグＺが“１”に設定されている場合に第２条件コードレジスタＣＣ４を“Ｆａｌｓｅ”を示す状態に設定するための命令である。「ＣＡＤＤｇｒ７，ｇｒ８，ｇｒ６，ｃｃ４，Ｆ」は、第２条件コードレジスタＣＣ４が“Ｆａｌｓｅ”を示す状態に設定されている場合に汎用レジスタＧＲ７、ＧＲ８の加算結果を汎用レジスタＧＲ６に格納するための命令である。「ＣＳＵＢｇｒ７，ｇｒ８，ｇｒ６，ｃｃ４，Ｔ」は、第２条件コードレジスタＣＣ４が“Ｔｒｕｅ”を示す状態に設定されている場合に汎用レジスタＧＲ７、ＧＲ８の減算結果を汎用レジスタＧＲ６に格納するための命令である。
【０００５】
汎用レジスタＧＲ２、ＧＲ３の値が等しい場合、「ＳＵＢｃｃ ｇｒ２，ｇｒ３，ｇｒ０，ｉｃｃ１」が実行されると、第１条件コードレジスタＩＣＣ１のフラグＺが“１”に設定され、その後、「ＣＫＮＥｉｃｃ１，ｃｃ４」が実行されると、第２条件コードレジスタＣＣ４が“Ｆａｌｓｅ”を示す状態に設定される。従って、「ＣＡＤＤ ｇｒ７，ｇｒ８，ｇｒ６，ｃｃ４，Ｆ」は実行され、「ＣＳＵＢ ｇｒ７，ｇｒ８，ｇｒ６，ｃｃ４，Ｔ」は実行されずに「ＮＯＰ」として扱われる。一方、汎用レジスタＧＲ２、ＧＲ３の値が等しくない場合、「ＳＵＢｃｃｇｒ２，ｇｒ３，ｇｒ０，ｉｃｃ１」が実行されると、第１条件コードレジスタＩＣＣ１のフラグＺが“０”に設定され、その後、「ＣＫＮＥｉｃｃ１，ｃｃ４」が実行されると、第２条件コードレジスタＣＣ４が“Ｔｒｕｅ”を示す状態に設定される。従って、「ＣＡＤＤ ｇｒ７，ｇｒ８，ｇｒ６，ｃｃ４，Ｆ」は実行されずに「ＮＯＰ」として扱われ、「ＣＳＵＢ ｇｒ７，ｇｒ８，ｇｒ６，ｃｃ４，Ｔ」は実行される。このように、「ＣＡＤＤ ｇｒ７，ｇｒ８，ｇｒ６，ｃｃ４，Ｆ」および「ＣＳＵＢｇｒ７，ｇｒ８，ｇｒ６，ｃｃ４，Ｔ」は、第２条件コードレジスタＣＣ４の状態に応じて一方が実行されて他方が実行されずに「ＮＯＰ」として扱われるという関係になる。
【０００６】
条件付実行制御では、前述のように、分岐命令を無くして条件付演算命令（ＣＡＤＤやＣＳＵＢなど）を導入することにより、プログラムの不連続性を排除した一連の命令列を生成することができ、その結果、高い並列度を得ることが可能になる。また、条件付実行制御には、命令単位でプログラムの実行を制御するものとは別に、ＳＩＭＤ命令に関してデータ単位でプログラムの実行を制御するものが存在する。
【０００７】
図４は、条件付実行制御（データ単位）の一例を示している。例えば、図３の左側のプログラムがループ中に含まれるような場合、条件付実行制御の適用により、図４のプログラムが生成される。図４のプログラムにおいて、「ＳＵＢｃｃ＿ＳＩＭＤｇｒ２，ｇｒ３，ｇｒ０，ｉｃｃ１，ｉｃｃ２」は、汎用レジスタＧＲ２、ＧＲ３の上位１６ビットの減算結果を汎用レジスタＧＲ０の上位１６ビットに格納するとともに、減算結果に応じて第１条件コードレジスタＩＣＣ１を設定し、これと並行して、汎用レジスタＧＲ２、ＧＲ３の下位１６ビットの減算結果を汎用レジスタＧＲ０の下位１６ビットに格納するとともに、減算結果に応じて第１条件コードレジスタＩＣＣ２を設定するためのＳＩＭＤ命令である。「ＣＫＮＥ＿ＳＩＭＤｉｃｃ１，ｉｃｃ２，ｃｃ４，ｃｃ５」は、第１条件コードレジスタＩＣＣ１のフラグＺが“０”に設定されている場合に第２条件コードレジスタＣＣ４を“Ｔｒｕｅ”を示す状態に設定し、第１条件コードレジスタＩＣＣ１のフラグＺが“１”に設定されている場合に第２条件コードレジスタＣＣ４を“Ｆａｌｓｅ”を示す状態に設定し、これと並行して、第１条件コードレジスタＩＣＣ２のフラグＺが“０”に設定されている場合に第２条件コードレジスタＣＣ５を“Ｔｒｕｅ”を示す状態に設定し、第１条件コードレジスタＩＣＣ２のフラグＺが“１”に設定されている場合に第２条件コードレジスタＣＣ５を“Ｆａｌｓｅ”を示す状態に設定するためのＳＩＭＤ命令である。「ＣＡＤＤ＿ＳＩＭＤｇｒ７，ｇｒ８，ｇｒ６，ｃｃ４，ｃｃ５，Ｆ」は、第２条件コードレジスタＣＣ４が“Ｆａｌｓｅ”を示す状態に設定されている場合に汎用レジスタＧＲ７、ＧＲ８の上位１６ビットの加算結果を汎用レジスタＧＲ６の上位１６ビットに格納し、これと並行して、第１条件コードレジスタＣＣ５が“Ｆａｌｓｅ”を示す状態に設定されている場合に汎用レジスタＧＲ７、ＧＲ８の下位１６ビットの加算結果を汎用レジスタＧＲ６の下位１６ビットに格納するためのＳＩＭＤ命令である。「ＣＳＵＢ＿ＳＩＭＤｇｒ７，ｇｒ８，ｇｒ６，ｃｃ４，ｃｃ５，Ｔ」は、第２条件コードレジスタＣＣ４が“Ｔｒｕｅ”を示す状態に設定されている場合に汎用レジスタＧＲ７、ＧＲ８の上位１６ビットの減算結果を汎用レジスタＧＲ６の上位１６ビットに格納し、これと並行して、第２条件コードレジスタＣＣ５が“Ｔｒｕｅ”に設定されている場合に汎用レジスタＧＲ７、ＧＲ８の下位１６ビットの減算結果を汎用レジスタＧＲ６の下位１６ビットに格納するためのＳＩＭＤ命令である。
【０００８】
例えば、汎用レジスタＧＲ２の上位１６ビットの値が１６進数の“００００”であり、汎用レジスタＧＲ２の下位１６ビットの値が１６進数の“１１１１”であり、汎用レジスタＧＲ３の上位１６ビットの値が１６進数の“２２２２”であり、汎用レジスタＧＲ３の下位１６ビットの値が１６進数の“１１１１”である場合、「ＳＵＢｃｃ＿ＳＩＭＤｇｒ２，ｇｒ３，ｇｒ０，ｉｃｃ１，ｉｃｃ２」が実行されると、第１条件コードレジスタＩＣＣ１のフラグＺが“０”に設定されるとともに、第１条件コードレジスタＩＣＣ２のフラグＺが“１”に設定される。そして、「ＣＫＮＥ＿ＳＩＭＤｉｃｃ１，ｉｃｃ２，ｃｃ４，ｃｃ５」が実行されると、第２条件コードレジスタＣＣ４が“Ｔｒｕｅ”を示す状態に設定されるとともに、第２条件コードレジスタＣＣ５が“Ｆａｌｓｅ”を示す状態に設定される。従って、「ＣＡＤＤ＿ＳＩＭＤｇｒ７，ｇｒ８，ｇｒ６，ｃｃ４，ｃｃ５，Ｆ」は、下位１６ビットに関しては実行されるが、上位１６ビットに関しては実行されずに「ＮＯＰ」として扱われ、「ＣＳＵＢ＿ＳＩＭＤｇｒ７，ｇｒ８，ｇｒ６，ｃｃ４，ｃｃ５，Ｔ」は、上位１６ビットに関しては実行されるが、下位１６ビットに関しては実行されずに「ＮＯＰ」として扱われる。
【０００９】
図５は、条件付実行制御（データ単位）の問題点を示している。ここで、条件付実行制御の適用により、図５のプログラムが生成された場合を考える。なお、図５のプログラムは、図４のプログラムについて、「ＣＡＤＤ＿ＳＩＭＤｇｒ７，ｇｒ８，ｇｒ６，ｃｃ４，ｃｃ５，Ｆ」および「ＣＳＵＢ＿ＳＩＭＤ ｇｒ７，ｇｒ８，ｇｒ６，ｃｃ４，ｃｃ５，Ｔ」が条件付ＳＩＭＤ演算命令群Ａ、Ｂにそれぞれ置き換えられたものである。条件付ＳＩＭＤ演算命令群Ａにおいて、「ＣＳＵＢ＿ＳＩＭＤｇｒ２，ｇｒ６，ｇｒ５，ｃｃ４，ｃｃ５，Ｆ」は、第２条件コードレジスタＣＣ４が“Ｆａｌｓｅ”を示す状態に設定されている場合に汎用レジスタＧＲ２、ＧＲ６の上位１６ビットの減算結果を汎用レジスタＧＲ５の上位１６ビットに格納し、これと並行して、第２条件コードレジスタＣＣ５が“Ｆａｌｓｅ”に設定されている場合に汎用レジスタＧＲ２、ＧＲ６の下位１６ビットの減算結果を汎用レジスタＧＲ５の下位１６ビットに格納するためのＳＩＭＤ命令である。「ＣＭＵＬ＿ＳＩＭＤｇｒ２，ｇｒ５，ｇｒ４，ｃｃ４，ｃｃ５，Ｆ」は、第２条件コードレジスタＣＣ４が“Ｆａｌｓｅ”を示す状態に設定されている場合に汎用レジスタＧＲ２、ＧＲ５の上位１６ビットの乗算結果を汎用レジスタＧＲ４の上位１６ビットに格納し、これと並行して、第２条件コードレジスタＣＣ５が“Ｆａｌｓｅ”に設定されている場合に汎用レジスタＧＲ２、ＧＲ５の下位１６ビットの乗算結果を汎用レジスタＧＲ４の下位１６ビットに格納するためのＳＩＭＤ命令である。また、条件付ＳＩＭＤ演算命令群Ｂにおいて、「ＣＡＤＤ＿ＳＩＭＤｇｒ３，ｇｒ６，ｇｒ５，ｃｃ４，ｃｃ５，Ｔ」は、第２条件コードレジスタＣＣ４が“Ｔｒｕｅ”を示す状態に設定されている場合に汎用レジスタＧＲ３、ＧＲ６の上位１６ビットの加算結果を汎用レジスタＧＲ５の上位１６ビットに格納し、これと並行して、第２条件コードレジスタＣＣ５が“Ｔｒｕｅ”に設定されている場合に汎用レジスタＧＲ３、ＧＲ６の下位１６ビットの加算結果を汎用レジスタＧＲ５の下位１６ビットに格納するためのＳＩＭＤ命令である。「ＣＭＵＬ＿ＳＩＭＤｇｒ３，ｇｒ５，ｇｒ４，ｃｃ４，ｃｃ５，Ｔ」は、第２条件コードレジスタＣＣ４が“Ｔｒｕｅ”を示す状態に設定されている場合に汎用レジスタＧＲ３、ＧＲ５の上位１６ビットの乗算結果を汎用レジスタＧＲ４の上位１６ビットに格納し、これと並行して、第２条件コードレジスタＣＣ５が“Ｔｒｕｅ”に設定されている場合に汎用レジスタＧＲ３、ＧＲ５の下位１６ビットの乗算結果を汎用レジスタＧＲ４の下位１６ビットに格納するためのＳＩＭＤ命令である。
【００１０】
例えば、汎用レジスタＧＲ２の上位１６ビットの値が１６進数の“００００”であり、汎用レジスタＧＲ２の下位１６ビットの値が１６進数の“１１１１”であり、汎用レジスタＧＲ３の上位１６ビットの値が１６進数の“２２２２”であり、汎用レジスタＧＲ３の下位１６ビットの値が１６進数の“３３３３”である場合、「ＳＵＢｃｃ＿ＳＩＭＤｇｒ２，ｇｒ３，ｇｒ０，ｉｃｃ１，ｉｃｃ２」が実行されると、第１条件コードレジスタＩＣＣ１、ＩＣＣ２の双方のフラグＺが“０”に設定される。そして、「ＣＫＮＥ＿ＳＩＭＤｉｃｃ１，ｉｃｃ２，ｃｃ４，ｃｃ５」が実行されると、第２条件コードレジスタＣＣ４、ＣＣ５の双方が“Ｔｒｕｅ”を示す状態に設定される。従って、条件付ＳＩＭＤ演算命令群Ａの各命令は、上位１６ビットおよび下位１６ビットの双方に関して実行されずに「ＮＯＰ」として扱われ、条件付ＳＩＭＤ演算命令群Ｂの各命令は、上位１６ビットおよび下位１６ビットの双方に関して実行される。
【００１１】
このように、図５のプログラムでは、条件付ＳＩＭＤ演算命令群Ａ、Ｂの一方の各命令が上位１６ビットおよび下位１６ビットの双方に関して実行されずに「ＮＯＰ」として扱われる場合が存在する。この場合、条件付ＳＩＭＤ演算命令群Ａ、Ｂの一方の各命令が無駄に実行を抑止される（無駄にＮＯＰ化される）ことになり、処理効率が無駄に低下してしまうという問題が生じる。この問題は、条件付ＳＩＭＤ演算命令群Ａ、Ｂの命令数が多くなるほど深刻なものになる。
【００１２】
例えば、対角行列に関して隣接する２個の要素値毎に並列処理を実施するような場合、条件付実行制御の適用により、処理対象の要素値が０であることを実行条件とする条件付ＳＩＭＤ命令群１と、処理対象の要素値が１であることを実行条件とする条件付ＳＩＭＤ命令群２とが生成されるが、対角行列においては殆どの要素値が０であるため、多くの場合は条件付ＳＩＭＤ命令群２の各命令が無駄に実行を抑止されるにも拘わらず、それを回避することはできない。
【特許文献１】特開２０００−１９４５５７号公報
【発明の開示】
【発明が解決しようとする課題】
【００１３】
前述のように、従来技術においては、条件付ＳＩＭＤ命令の無駄な実行抑止を回避できないという問題があった。
【００１４】
本発明は、このような問題に鑑みてなされたものであり、条件付ＳＩＭＤ命令の無駄な実行抑止を回避する技術を提供することを目的とする。
【課題を解決するための手段】
【００１５】
本発明の一形態では、マイクロプロセッサは、複数の処理データに対応する複数の条件コードを使用して処理データ単位で実行制御される条件付ＳＩＭＤ命令を有する命令セットを備えたマイクロプロセッサであって、命令セットは、命令により指定される複数の条件コードの全てが命令により指定される条件値を示すことを分岐条件とする条件付分岐命令を有する。
【００１６】
例えば、条件付分岐命令は、マイクロプロセッサで動作させるプログラムのコンパイル時に、コンパイラによりプログラム内に挿入される。条件コードが第１条件値を示すことを実行条件として設定された条件付ＳＩＭＤ命令がプログラム内に存在する場合、条件付分岐命令は、プログラム内に挿入される際、その条件付ＳＩＭＤ命令で使用される複数の条件コードの全てが第２条件値を示すことを分岐条件として設定される。
【発明の効果】
【００１７】
条件付分岐命令を導入することで、全ての処理データに関して条件付ＳＩＭＤ命令の実行条件が成立しない場合に条件付ＳＩＭＤ命令をバイパスすることが可能になり、条件付ＳＩＭＤ命令の無駄な実行抑止を回避することができる。
【発明を実施するための最良の形態】
【００１８】
以下、本発明の実施形態について図面を用いて説明する。
【００１９】
図１は、本発明の一実施形態を示している。本発明の一実施形態におけるマイクロプロセッサ１０は、命令キャッシュやデータキャッシュなどで構成されるメモリユニット２０と、ＳＩＭＤ機構を有する処理ユニット３０とを備えている。処理ユニット３０は、プログラムカウンタ（ＰＣ：Program Counter）３１と、命令フェッチ部３２と、レジスタ部３３と、命令実行部３４とを備えて構成されている。
【００２０】
命令フェッチ部３２は、プログラムカウンタ３１により指定されるアドレスに応じてメモリユニット２０から命令コードを取得して命令実行部３４に供給する。レジスタ部３３には、複数の汎用レジスタ（ＧＲ）、複数の第１条件コードレジスタ（ＩＣＣ）および複数の第２条件コードレジスタ（ＣＣ）が設けられている。なお、第１および第２条件コードレジスタの構成や用途は、図３〜図５を用いて前述したものと同一である。
【００２１】
命令実行部３４は、命令フェッチ部３２から供給される命令コードを解読し、解読結果に基づいて各種命令を実行する。なお、マイクロプロセッサ１０の命令セットには、図３〜図５を用いて前述した各種命令に加えて、命令により指定される複数の第２条件コードレジスタの全てが命令により指定される条件値（“Ｔｒｕｅ”または“Ｆａｌｓｅ”）を示す状態に設定されている場合に分岐条件が成立する条件付分岐命令（Ｂｐｒｅｄ＿ＳＩＭＤ）が設けられている。この条件付分岐命令は、図２を用いて後述するように、マイクロプロセッサ１０で動作させるプログラムのコンパイル時に、コンパイラの判断で自動的にプログラム内に挿入される。
【００２２】
例えば、命令実行部３４には、分岐命令を実行するための分岐実行部３４ａと、演算命令を実行するための演算実行部３４ｂとが設けられている。分岐命令実行部３４ａは、命令コードの解読結果が条件付分岐命令（Ｂｐｒｅｄ＿ＳＩＭＤ）を示す場合、命令により指定される複数の第２条件コードレジスタから条件コードをそれぞれ読み出し、読み出した条件コードの全てが命令により指定される条件値（“Ｔｒｕｅ”または“Ｆａｌｓｅ”）を示していれば、命令により指定される分岐先アドレスをプログラムカウンタ３１に設定する。条件付分岐命令（Ｂｐｒｅｄ＿ＳＩＭＤ）以外の分岐命令に関する分岐命令実行部３４ａの動作および演算実行部３４ｂの動作については、周知の動作であるため、ここでの説明は省略する。
【００２３】
図２は、本発明の一実施形態における条件付実行制御（データ単位）の一例を示している。マイクロプロセッサ１０で動作させるプログラムのコンパイル処理においては、条件付実行制御の適用により、例えば、図２の左側のプログラム（図５のプログラムと同じ）が生成された場合、図２の左側のプログラムについて、条件付ＳＩＭＤ演算命令群Ａの前に「Ｂｐｒｅｄ＿ＳＩＭＤＬａｂｅｌ３，ｃｃ４，ｃｃ５，Ｔ」が挿入されるとともに、条件付ＳＩＭＤ演算命令群Ａの後に「Ｂｐｒｅｄ＿ＳＩＭＤ Ｌａｂｅｌ４，ｃｃ４，ｃｃ５，Ｆ」が挿入され、条件付ＳＩＭＤ演算命令群Ｂの前に「Ｌａｂｅｌ３：」が挿入されるとともに、条件付ＳＩＭＤ演算命令群Ｂの後に「Ｌａｂｅｌ４：」が挿入されることで、図２の右側のプログラムが生成される。図２の右側のプログラムにおいて、「Ｂｐｒｅｄ＿ＳＩＭＤＬａｂｅｌ３，ｃｃ４，ｃｃ５，Ｔ」は、第２条件コードレジスタＣＣ４、ＣＣ５の双方が“Ｔｒｕｅ”を示す状態に設定されている場合にラベルＬａｂｅｌ３に分岐するための命令である。「Ｂｐｒｅｄ＿ＳＩＭＤＬａｂｅｌ４，ｃｃ４，ｃｃ５，Ｆ」は、第２条件コードレジスタＣＣ４、ＣＣ５の双方が“Ｆａｌｓｅ”を示す状態に設定されている場合にラベルＬａｂｅｌ４に分岐するための命令である。なお、この処理は、条件付ＳＩＭＤ演算命令群Ａ、Ｂの処理量が条件付分岐命令の挿入に伴って増加する処理量より大きいとコンパイラにより判断された場合に実施される。
【００２４】
第２条件コードレジスタＣＣ４，ＣＣ５の双方が“Ｔｒｕｅ”を示す状態に設定されている場合、「Ｂｐｒｅｄ＿ＳＩＭＤＬａｂｅｌ３，ｃｃ４，ｃｃ５，Ｔ」の分岐条件が成立するため、条件付ＳＩＭＤ演算命令群Ａが一括してバイパスされ、条件付ＳＩＭＤ演算命令群Ｂが上位１６ビットおよび下位１６ビットの双方に関して実行される。また、第２条件コードレジスタＣＣ４，ＣＣ５の双方が“Ｆａｌｓｅ”を示す状態に設定されている場合、「Ｂｐｒｅｄ＿ＳＩＭＤＬａｂｅｌ３，ｃｃ４，ｃｃ５，Ｔ」の分岐条件が成立しないため、条件付ＳＩＭＤ演算命令群Ａが上位１６ビットおよび下位１６ビットの双方に関して実行され、「Ｂｐｒｅｄ＿ＳＩＭＤＬａｂｅｌ４，ｃｃ４，ｃｃ５，Ｆ」の分岐条件が成立するため、条件付ＳＩＭＤ演算命令群Ｂが一括してバイパスされる。
【００２５】
このように、本発明の一実施形態では、条件付分岐命令（Ｂｐｒｅｄ＿ＳＩＭＤ）を導入することで、全ての処理データに関して条件付ＳＩＭＤ命令（ＣＡＤＤ＿ＳＩＭＤやＣＳＵＢ＿ＳＩＭＤなど）の実行条件が成立しない場合に条件付ＳＩＭＤ命令をバイパスすることが可能になり、条件付ＳＩＭＤ命令の無駄な実行抑止を回避することができる。
【００２６】
以上、本発明について詳細に説明してきたが、前述の実施形態は発明の一例に過ぎず、本発明はこれに限定されるものではない。本発明を逸脱しない範囲で変形可能であることは明らかである。
【図面の簡単な説明】
【００２７】
【図１】本発明の一実施形態を示す説明図である。
【図２】本発明の一実施形態における条件付実行制御（データ単位）の一例を示す説明図である。
【図３】条件付実行制御（命令単位）の一例を示す説明図である。
【図４】条件付実行制御（データ単位）の一例を示す説明図である。
【図５】条件付実行制御（データ単位）の問題点を示す説明図である。
【符号の説明】
【００２８】
１０‥マイクロプロセッサ；２０‥メモリユニット；３０‥処理ユニット；３１‥プログラムカウンタ；３２‥命令フェッチ部；３３‥レジスタ部；３４‥命令実行部；３４ａ‥分岐実行部；３４ｂ‥演算実行部
【図１】
2009128989.tif 000003
【図２】
2009128989.tif 000004
【図３】
2009128989.tif 000005
【図４】
2009128989.tif 000006
【図５】
2009128989.tif 000007