(58)【調査した分野】(Int.Cl.,DB名)
【発明の概要】
【発明が解決しようとする課題】
【0007】
前述のように、16ビット固定長命令コードのRISC型の組込プロセッサを64ビット化するには命令のコード空間(単に命令コード空間とも証する)の効率的な活用が不可欠である。中でも、32ビットプロセッサが32ビット演算体系のみのサポートで済んだのに対して、64ビットプロセッサにおいては32ビットと64ビットの双方の演算体系をサポートする必要がある。そして、このために既存の64ビットプロセッサのように同一演算に対して32ビットと64ビットの双方の演算命令を定義すると、16ビット固定長命令セットでは命令コード空間を圧迫し、既存の32ビット演算体系並みの64ビット演算体系を構築することが難しい。例えば32ビットの演算体系を有する命令セットの命令のオペレーションコードが、8ビットで表すことが出来る256種類あるとき、複数の64ビット演算命令を単に追加しようとすると、オペレーションコードのビット数を少なくとも1ビット増やすことが必要になり、命令コード空間が大きくなり、既存の32ビットの演算の命令体系を維持することが出来なくなり。
【0008】
特に、64ビット演算の演算結果の下位32ビットが32ビット演算のそれと同一な場合でも、演算結果から生成するフラグが32ビットと64ビットの演算で異なる場合は異なる命令を定義する必要がある。生成するフラグのみが異なる場合、1命令で生成するフラグ数を増やすことによってフラグを生成する命令数を削減することが出来る。例えば、文献1のPowerPCでは1命令で正・負・ゼロ・オーバーフロー・キャリーといった複数種類のフラグを生成している。更に、文献2では複数種類の複数サイズ用のフラグを生成している。即ち「種類数」×「サイズ数」のフラグを生成している。文献2では「4種類」×「2サイズ」=「8フラグ」である。
【0009】
しかしながら、1命令で生成するフラグ数を増加させるとフラグを使用する命令数を増加させる必要がある。例えば、条件分岐命令の分岐条件は「どのフラグを使用するか」と「使用するフラグがセットされているかクリアされているか」の組合せで決定する方式が一般的である。文献2の条件分岐命令では、フラグの使い方を指定するフィールドに5ビット取っていて、32通りの指定が可能となっている。したがって、条件分岐命令数は32×「フラグ以外のバリエーション数」となる。フラグ以外のバリエーションとしてはディレイスロットの有無、分岐先アドレス指定方法等が考えられる。
【0010】
このように「フラグ数の増加」は「フラグを生成する命令(フラグ生成命令)数の削減」に貢献する反面「フラグを使用する命令(フラグ使用命令)数の増大」を招く。したがって、文献2のようにフラグ数を増やせば命令数が削減できるとは限らない。文献2はCISC(Complicated Instruction Set Computer)を前提としており、主要なフラグ生成命令である演算命令はメモリオペランドも指定できるため数が多い。そして、フラグ数を増やして数の多い「フラグ生成命令数の削減」を行えば命令数を削減できた。一方、一般的なRISCは32ビット固定長命令セットであり、命令コード空間に余裕があるため、命令数削減ニーズが小さい。このためRISCにおいてフラグ数を調整して命令数の最小化を図った例はない。しかし、16ビット固定長命令セットのRISCの64ビットプロセッサ化においては命令コード空間に余裕がない。また、RISCはCISCよりフラグ生成命令数が少ない。このため、フラグ数を増やすだけでは最適化ポイントを見出せない。そして、フラグ生成命令数とフラグ使用命令数のバランスが良くなる方式にすることが重要である。
【0011】
本発明が解決しようとする第1の課題は、フラグ生成命令数の少ない命令セットにおいてフラグ数を調整して命令数を削減し、それらを定義するために必要なコード空間の最小化を図り、16ビット固定長命令セットのRISCのように命令コード空間に余裕がないプロセッサの64ビット化を可能にすることである。
【0012】
また、一般に、フラグ数を増やしても、1命令で生成した複数のフラグを使用する例は少なく、1つだけを使用する場合が多い。一方、複数命令で生成したフラグを組み合わせて使用すると、プログラムを効率的に出来る場合がある。しかし、命令を実行する度に複数のフラグを更新すると、先行命令が生成したフラグを後続の命令が上書きしてしまうため、フラグを組み合わせて使用することは困難である。このため、生成したフラグを逐次レジスタに転送して、レジスタ上で論理演算してからフラグに戻したり、レジスタ上で論理演算した結果を数値として判定してフラグを生成したり、フラグを生成する度に条件分岐や条件実行をする必要がある。これらの方式は実行命令数が多くなったり、分岐頻度が増加したりするため効率が悪く性能が低下する。
【0013】
特に、あるデータを演算対象としてみた場合、そのサイズが2種類であることはないため、複数種類のサイズに対するフラグを生成しても一方は不要である。適切な符号拡張またはゼロ拡張により、複数種類のサイズに対するフラグが同じ値になって、どちらでも使えるということはありうるが、一方が不要であることに変わりはない。したがって、複数のフラグを定義した場合、同時に更新するよりは、必要なものだけを更新して、残したいフラグは残し、フラグ間の演算を可能にすることも効果的である。しかしながら、これを実現するには、フラグ生成命令が更新するフラグと、フラグ使用命令が使用するフラグの双方の種類及び場所を指定する必要があり、最も大きな命令コード空間を必要とする。
【0014】
本発明が解決しようとする第2の課題は、命令コード空間の最小化を主目的として定義した複数フラグを、大きな命令コード空間を使わずに活用し、複数命令で生成したフラグを組み合わせて使用することを可能にすることである。
【課題を解決するための手段】
【0015】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【0016】
本発明では、フラグ生成命令数が多い場合に1命令が生成するフラグ数を増やすことによって、フラグ生成命令数の減少がフラグ使用命令数の増加を上回るようにすることにより命令数の削減を実現するという観点を基に、オペランドのデータサイズに応じた複数フラグを生成する命令を定義すると言う手段を採用するものである。要するに、縮小命令セットコンピュータ型のデータプロセッサにおいて、複数データサイズのオペランドに対して演算処理が可能であって小さいデータサイズのオペランドに対する演算処理と等しい処理を大きいデータサイズのオペランドの下位側に対して行い演算処理されるオペランドのデータサイズに拘わらず夫々のデータサイズに対応するフラグを生成する命令を命令セットに加える。
【0017】
第2の観点として、複数のフラグを定義して必要なものだけを更新して、残したいフラグは残し、フラグ間の演算を可能にするには、フラグ生成命令が更新するフラグと、フラグ使用命令が使用するフラグの双方の種類及び場所を指定するという手段を採用する。すなわち、前記命令が生成した夫々のデータサイズに対応するフラグのうち後続命令が生成するフラグによって更新するフラグの指定に加えて、修飾する後続命令が生成するフラグのうち使用するフラグの指定、及び指定した2つのフラグ間の論理演算の指定を夫々行うプレフィックス命令を命令セットに加える。
【発明の効果】
【0018】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記のとおりである。
【0019】
すなわち、第1の観点の発明により、命令セットを構成する命令の種類(命令数)が全体として少なくなる。したがって、命令コード空間に余裕のないRISC型のデータプロセッサにおける命令コードのコード空間縮小に寄与することができる。例えば、16ビット固定長命令セットのRISCのように命令コード空間に余裕がないプロセッサの64ビット化が可能になる。
【0020】
第2の観点の発明により、命令コード空間の最小化を主目的として定義した複数フラグを、大きな命令コード空間を使わずに活用し、複数命令で生成したフラグを組み合わせて使用することが可能になる。
【発明を実施するための形態】
【0022】
1.実施の形態の概要
先ず、本願において開示される発明の代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
【0023】
最初に上記夫々の観点について具体的に説明する。先ず、第1の観点に関し、16ビット固定長命令セットのRISC型32ビットプロセッサのフラグ生成命令数は、例えば文献3のSH-4Aプロセッサコアではオペランドフィールドが8ビットの命令が17、4ビットの命令が12である。尚、フラグを使用して更新する命令はフラグ生成命令としてカウントしている。また、64ビットプロセッサ化に関係のない浮動小数点命令は除いている。一方、フラグ使用命令数は、オペランドフィールドが8ビットの命令が4、4ビットの命令が1である。そして、フラグ数は1である。フラグ数が少ないほどフラグ生成命令数が増え、フラグ使用命令数が減るため、SH-4Aプロセッサコアでは29命令対5命令とフラグ生成命令数の方が約6倍多い。そして、29のフラグ生成命令のうち26命令はオペランドサイズによって動作が異なるため、単純に64ビット命令を追加すると26命令増加する。この結果、フラグ生成命令数とフラグ使用命令数の比は55対5となり11倍となる。
【0024】
このようにフラグ生成命令数が多い場合、1命令が生成するフラグ数を増やすことによって比率を変えて命令数を削減することができる。増やし方としては、(1)フラグの種類、(2)オペランドサイズ、又は(3)その両方に応じたフラグを定義する方式が考えられる。
【0025】
まず、(1)のフラグの種類に応じたフラグを定義する方式について考える。SH-4Aプロセッサコアのフラグの種類には、符号付大小、符号なし大小、ゼロ、オーバーフロー、キャリー、シフトアウトビット等がある。そして、フラグは1ビットなので、どの命令が立てたフラグかで意味が変わる。異なる演算が異なる種類のフラグを立てる場合、フラグの種類を増やしても命令数は減らないため、同一演算で生成するフラグのみ異なる場合に着目すると、比較命令が候補となる。比較命令は、符号付大小、符号なし大小、ゼロの3フラグを別フラグにすれば、18命令を8命令にできる。他の命令はゼロ、オーバーフロー、キャリー、シフトアウトビット等を生成するが、演算が異なるためフラグを種類で分けても命令数削減効果はない。一方、フラグ使用命令数はフラグ種類数に応じて3倍になり、5命令から15命令になる。この結果、フラグの関係する命令数は60命令から10命令減って10命令増えるため60命令のままである。
【0026】
次に、(2)のオペランドサイズに応じたフラグを定義する方式について考える。32ビットと64ビットのオペランドサイズ毎にフラグを設けると、オペランドサイズによって動作が異なる29命令のうち、下位32ビットの動作が同一な15命令を32ビットと64ビットで共通の命令とすることができる。一方、フラグは2倍となるため、フラグ使用命令数は5命令から10命令になる。この結果、フラグの関係する命令数は60命令から15命令減って5命令増えるため50命令に減少する。
【0027】
更に、(3)の両方に応じたフラグを定義する方式を考える。まず、フラグを3種類にすることによって、比較命令を18命令から8命令にできる。更にサイズ毎にフラグを定義することによって8命令を4命令にすることができる。また、比較命令以外のフラグ生成命令のうち下位32ビットの動作が同一な命令を6命令削減できる。一方、フラグ使用命令数はフラグ種類数に応じて6倍になり、5命令から30命令になる。この結果、フラグの関係する命令数は60命令から20命令減って25命令増えるため65命令に増加する。
【0028】
以上のように、命令数最小化という観点からフラグ数を最適化すると、(2)オペランドサイズに応じてフラグを定義する方式が最善であることが明らかになった。
【0029】
命令が消費する命令コード空間は命令がオペランドフィールドに使用するビット数によって大きく変化する。Nビットでは命令コード空間全体の2の(16-N)乗分の一の空間を消費する。例えば8ビットならば1/256、4ビットならば1/4096の空間を消費する。このため、重要なのは8ビットオペランドフィールドの命令数の削減である。
【0030】
そこで、上記考察を8ビットオペランドフィールドを有する命令(単に8ビットオペランドフィールド命令とも称する)に限定して行うと、32ビットプロセッサのフラグ関連の8ビットオペランドフィールド命令は生成命令が17、使用命令が条件分岐命令4の計21命令であり、このうちオペランドサイズによって動作が異なる命令は生成命令の15命令なので、単純に64ビット命令を追加すると生成命令が15命令増加して32命令になり、計36命令となる。
【0031】
まず、(1)のフラグの種類に応じたフラグを定義する方式では、フラグを3種類にすることによって、比較命令を17命令から6命令にできる反面、条件分岐命令が4命令から12命令に増加するので、フラグの関係する命令数は36命令から8命令減って8命令増えるため36命令のままである。
【0032】
次に、(2)のオペランドサイズに応じたフラグを定義する方式では、オペランドサイズによって動作が異なる15命令のうち、下位32ビットの動作が同一な10命令を32ビットと64ビットで共通の命令とすることができる。一方、フラグは2倍となるため、条件分岐命令数は4命令から8命令になる。この結果、フラグの関係する命令数は36命令から10命令減って4命令増えるため30命令に減少する。
【0033】
更に、(3)の両方に応じたフラグを定義する方式を考える。まず、フラグを3種類にすることによって、比較命令を14命令から6命令にできる。更にサイズ毎にフラグを定義することによって6命令を3命令にすることができる。また、比較命令以外のフラグ生成命令のうち下位32ビットの動作が同一な命令を3命令削減できる。一方、フラグ使用命令数はフラグ種類数に応じて6倍になり、4命令から24命令になる。この結果、フラグの関係する命令数は36命令から14命令減って20命令増えるため42命令に増加する。
【0034】
以上のように命令コード空間消費に影響の大きい8ビットオペランドフィールド命令に限定しても(2)のオペランドサイズに応じてフラグを定義する方式が最善であることが解る。一方、文献2でCISCに適用した際は、命令のコードサイズ最小化に最善であった(3)の方式がRISCでは最悪の方式となっている。
【0035】
本発明の第1の課題であるフラグ生成命令数の少ない命令セットにおいてフラグ数を調整して命令数を削減し、それらを定義するために必要なコード空間の最小化を図り、16ビット固定長命令セットのRISCのように命令コード空間に余裕がないプロセッサの64ビット化を可能にすることは、オペランドサイズに応じたフラグを定義することによって達成する。具体的には、32ビットと64ビットのオペランドサイズ毎にフラグを設け、32ビットと64ビットオペランドの命令で下位32ビットの動作が同一な命令を統合し、フラグ数増加に応じた条件分岐等のフラグ使用命令数を増加させることにより達成する。これにより、命令セットを構成する命令の種類(命令数)が全体として少なくなる。
【0036】
第2の観点に関しては、課題のところで述べたように、複数のフラグを定義して必要なものだけを更新して、残したいフラグは残し、フラグ間の演算を可能にするには、フラグ生成命令が更新するフラグと、フラグ使用命令が使用するフラグの双方の種類及び場所を指定する必要があり、最も大きな命令コード空間を必要とする。
【0037】
この問題を解決するには、後続命令を修飾する命令であるプレフィックス命令を定義すればよい。プレフィックス命令の実装は可変長命令セットの実装に類似しており、文献4の87頁からの記載のようにプレフィックス命令を使うプロセッサは従来から存在する。そして、本分野の通常のスキルの技術者であればその実装は可能である。そして、どのようなプレフィックス命令を定義するかが重要となる。本発明ではフラグ更新プレフィックス命令として、更新するフラグの指定、後続命令が生成したフラグのうち使用するフラグの指定、指定した2つのフラグ間の論理演算の指定を行う。フラグを2種類、演算を8種類とすると、5ビットのオペランドフィールドで指定することができ、大きな命令コード空間を必要としない。論理演算も指定できるため、残したいフラグの更新抑止が可能な命令セットで論理演算を別命令で行う場合と同一の命令数でフラグ間の論理演算を実行することができる。これにより、命令コード空間の最小化を主目的として定義した複数フラグを、大きな命令コード空間を使わずに活用し、複数命令で生成したフラグを組み合わせて使用することが可能となる。
【0038】
上記観点を踏まえて代表的な実施の形態を説明する。
【0039】
〔1〕縮小命令セットコンピュータ型のデータプロセッサは、複数データサイズのオペランドに対して演算処理が可能であって小さいデータサイズのオペランドに対する演算処理と等しい処理を大きいデータサイズのオペランドの下位側に対して行い演算処理されるオペランドのデータサイズに拘わらず夫々のデータサイズに対応するフラグ(newU,newT)を生成する第1命令を命令セットに有する。これにより、命令セットを構成する命令の種類(命令数)が全体として少なくなる。したがって、命令のコード空間に余裕のないRISC型のデータプロセッサにおける命令コード空間の縮小に寄与することができる。例えば、16ビット固定長命令セットのRISCのように命令コード空間に余裕がないプロセッサの64ビット化が可能になる。
【0040】
〔2〕項1のデータプロセッサは、例えば前記第1命令によって生成されたフラグを選択して使用する第2命令を更に前記命令セットに有する。
【0041】
〔3〕項1のデータプロセッサは、例えば前記第1命令が生成した夫々のデータサイズに対応するフラグのうち後続命令が生成するフラグによって更新するフラグを指定する当該後続命令を修飾するプレフィックス命令を更に前記命令セットに有する。これにより、複数のフラグを定義して必要なものだけを更新することができる。
【0042】
〔4〕項1のデータプロセッサは、例えば前記第1命令が生成した夫々のデータサイズに対応するフラグのうち後続命令が生成するフラグによって更新するフラグの指定に加えて、修飾する後続命令が生成するフラグのうち使用するフラグの指定、及び指定した2つのフラグ間の論理演算の指定を夫々行うプレフィックス命令を更に前記命令セットに有する。これにより、複数のフラグを定義して必要なものだけを更新して、残したいフラグは残し、フラグ間の演算を可能にすることができる。したがって、命令コード空間の最小化を主目的として定義した複数フラグを、大きな命令コード空間を使わずに活用し、複数命令で生成したフラグを組み合わせて使用することが可能になる。
【0043】
〔5〕項1のデータプロセッサにおいて、例えば前記複数データサイズは、32ビットと64ビットである。
【0044】
〔6〕項2のデータプロセッサにおいて、例えば前記フラグは、複数データサイズ毎の、符号付き大小、符号無し大小、ゼロ、オーバーフロー、キャリー、又はシフトアウトビットである。
【0045】
〔7〕命令実行部(EXU)を有する縮小命令セットコンピュータ型の別のデータプロセッサは、フラグの生成を伴う処理を実行するための第1命令及びフラグの使用を伴う処理を実行するための第2命令を命令セットに有する。前記命令実行部は命令デコード結果に従った処理を行なう演算回路(ALU,SFT)、フラグラッチ回路(U,T)及びフラグ選択回路(FMUX)を有する。前記演算回路は、前記第1命令のデコード結果に従って、複数データサイズのオペランドに対して演算処理が可能であって小さいデータサイズのオペランドに対する演算処理と等しい処理を大きいデータサイズのオペランドの下位側に対して行い演算処理されるオペランドのデータサイズに拘わらず夫々のデータサイズに対応するフラグを生成する。前記フラグラッチ回路は、前記第1命令のデコード結果に従って、前記演算回路で生成されたフラグをラッチする。前記フラグ選択回路は、前記第2命令のデコード結果に従って、前記フラグラッチ回路にラッチされたフラグを選択する。
【0046】
〔8〕項7のデータプロセッサにおいて、例えば前記演算回路はデータサイズ毎に符号付き大小、符号無し大小、ゼロ、オーバーフロー、キャリー、及びシフトアウトビットのフラグを生成し、生成したフラグから一種類のフラグが第1命令で選択されてオペランドサイズ毎に前記フラグラッチ回路にラッチされる。
【0047】
〔9〕項8のデータプロセッサにおいて、例えば前記複数データサイズは、32ビットと64ビットである。
【0048】
〔10〕更に別のデータプロセッサは、演算処理を行なって複数のフラグを生成可能な演算命令と共に、前記演算命令が生成した複数のフラグのうち後続命令が生成するフラグによって更新するフラグを指定する当該後続命令を修飾するプレフィックス命令を命令セットに有する。
【0049】
〔11〕更に別のデータプロセッサは、演算処理を行なって複数のフラグを生成可能な演算命令と共に、前記演算命令が生成した複数のフラグのうち後続命令が生成するフラグによって更新するフラグの指定に加えて、修飾する後続命令が生成するフラグのうち使用するフラグの指定、及び指定した2つのフラグ間の論理演算の指定を夫々行うプレフィックス命令を命令セットに有する。
【0050】
2.実施の形態の詳細
実施の形態について更に詳述する。以下、本発明を実施するための最良の形態を図面に基づいて詳細に説明する。なお、発明を実施するための最良の形態を説明するための全図において、同一の機能を有する部材には同一の符号を付し、その繰り返しの説明は省略する。
【0051】
《実施形態1》
図7には本発明に係るデータプロセッサDPUが例示される。データプロセッサDPUは中央処理装置のようなプロセッサコアCPUを中心に、これに内部バスで接続された不揮発性メモリROM、揮発性メモリRAM、入出力インタフェース回路IOC、及び外部バスインタフェース回路EBIF等を備え、例えば相補型MOS修正回路製造技術により単結晶シリコン等の1個の半導体基板に形成される。不揮発性メモリROMはプロセッサコアCPUが実行するプログラム等の格納領域に利用され、揮発性メモリRAMはプロセッサコアCPUのワーク領域等に利用される。
【0052】
図1にはプロセッサコアCPUのブロック構成が概略的に例示される。例えばプロセッサコアCPUは、命令キャッシュIC、命令フェッチユニットIFU、命令デコードユニットIDU、実行ユニットEXU、ロードストアユニットLSU、データキャッシュDC、及びバスインタフェースユニットユニットBIUから成る。
【0053】
命令フェッチユニットIFUは命令アドレスIAを命令キャッシュICに出力し、命令キャッシュICは命令アドレスIAで指定されたアドレスからフェッチした命令FIを命令フェッチユニットIFUに返す。キャッシュミスした場合は、ミスしたアドレスを外部命令アドレスEIAとしてバスインタフェースユニットユニットBIUに出力し、外部フェッチ命令EIを受け取ってから、命令FIを命令フェッチユニットIFUに返す。
【0054】
命令デコードユニットIDUは、命令フェッチユニットIFUから命令OPを受け取り、分岐制御信号BRCを出力する。また、命令OPをデコードし、実行ユニットEXU及びロードストアユニットLSUにそれぞれ実行制御情報EXC及びロードストア制御情報LSCを出力すると共に、レジスタファイルRFにアクセスし、実行用オペランドEXA及びEXBを実行ユニットEXUに、ロードストア用アドレスオペランドLSA及びLSB、並びにストアデータSDをロードストアユニットLSUに供給する。更に、実行結果EXOを実行ユニットEXUから、ロードデータLDをロードストアユニットLSUから受け取り、レジスタファイルRFに格納する。
【0055】
実行ユニットEXUは命令デコードユニットIDUから実行制御情報EXC、実行用オペランドEXA及びEXBを受け取り、実行制御情報EXCに従って演算実行した後、実行結果EXOを命令デコードユニットIDUに返す。
【0056】
ロードストアユニットLSUは命令デコードユニットIDUからロードストア制御情報LSC、ロードストア用アドレスオペランドLSA及びLSB、並びにストアデータSDを受け取り、ロードストア制御情報LSCに従ってロードストア実行した後、ロードデータLDを命令デコードユニットIDUに返す。また、ロードストアの際には、データキャッシュDCにデータアドレスDAを出力し、更にストアの際には、データキャッシュストアデータDCSDも出力する。そして、データキャッシュDCはロードの際にはデータキャッシュロードデータDCLDをロードストアユニットLSU返し、ストアの際はデータキャッシュストアデータDCSDをストアする。キャッシュミスした場合は、ミスしたアドレスを外部データアドレスEDAとしてバスインタフェースユニットユニットBIUに出力し、外部ロードデータELDを受け取ってから、データキャッシュロードデータDCLDをロードストアユニットLSUに返す。また、キャッシュミスに伴うデータのコピーバックや、キャッシュしないデータの外部ストア時には、それらのデータを外部ストアデータESDとして出力すると共に、それらのデータのアドレスを外部データアドレスEDAとして出力する。
【0057】
バスインタフェースユニットBIUは、命令キャッシュIC又はデータキャッシュDCから、それぞれ外部命令アドレスEIA又は外部データアドレスEDAを受け取り、プロセッサコアCPU外に外部アドレスEAを出力してデータを要求し、外部データEDとして受け取り、それぞれ外部フェッチ命令EI又は外部ロードデータELDとして出力する。また、データキャッシュDCから、外部データアドレスEDA及び外部ストアデータESDを受け取り、プロセッサコアCPU外に外部アドレスEA及び外部データEDとして出力し、ストアリクエストを出す。
【0058】
図2には、本発明の実施形態1に係るプロセッサの実行ユニットEXUが概略的に例示される。実行ユニットEXUは算術論理演算器ALU、シフタSFT、32ビットフラグマルチプレクサFM32、64ビットフラグマルチプレクサFM64、32ビットシフトアウトマルチプレクサM32、64ビットシフトアウトビットマルチプレクサM64、出力マルチプレクサOMUX、32ビット演算用フラグT、64ビット演算用フラグU、フラグマルチプレクサFMUXから成る。また、図示していないが命令デコードユニットIDUからの実行制御情報EXCは各構成要素に入力されてそれらを制御する。
【0059】
算術論理演算器ALUは命令デコードユニットIDUから実行用オペランドEXA及びEXBを受け取り、実行制御情報EXCに従って各種算術論理演算を実行した後、実行結果ALO、32ビットフラグ群(符号付大GT32,符号なし大GU32、ゼロZ32、オーバーフローV32、キャリーC32)及び64ビットフラグ群(符号付大GT64,符号なし大GU64、ゼロZ64、オーバーフローV64、キャリーC64)を出力する。
【0060】
シフタSFTは命令デコードユニットIDUから実行用オペランドEXA及びEXBを受け取り、実行制御情報EXCに従って各種シフト演算を実行した後、実行結果SFO、32ビット左シフトアウトビットSL32、64ビット左シフトアウトビットSL64、及び右シフトアウトビットSRを出力する。そして、32ビットシフトアウトビットマルチプレクサM32で、シフト演算の方向に応じて32ビット左シフトアウトビットSL32又は右シフトアウトビットSRを選択して32ビットフラグ群の1つである32ビットシフトアウトフラグSF32として出力する。また、64ビットシフトアウトビットマルチプレクサM64で、シフト演算の方向に応じて64ビット左シフトアウトビットSL64又は右シフトアウトビットSRを選択して64ビットフラグ群の1つである64ビットシフトアウトフラグSF64として出力する。
【0061】
出力マルチプレクサOMUXは実行結果ALO及び実行結果SFOの一方を実行制御情報EXCに従って選択し、実行結果EXOとして出力する。
【0062】
32ビットフラグマルチプレクサFM32は32ビットフラグ群から命令の種類に応じてフラグを選択して、新たな32ビットフラグnewTを生成し、32ビットフラグTの入力とする。同様に、64ビットフラグマルチプレクサFM64は64ビットフラグ群から命令の種類に応じてフラグを選択し、新たな64ビットフラグnewUを生成し、64ビットフラグUの入力とする。32ビットフラグT及び64ビットフラグUはこれらの入力をラッチし、フラグマルチプレクサFMUXに出力する。フラグマルチプレクサFMUXは使用する命令に応じて32ビットフラグT及び64ビットフラグUの一方を選択し、フラグ出力FOとして出力する。フラグマルチプレクサFMUXはラッチ後の値を使用して、次命令で使用するフラグを選択しており、図示していないが命令デコードユニットIDUからの実行制御情報EXCとして、ラッチ前の値を使用することにより次命令の制御情報を受け取ることが出来る。
【0063】
上記実施形態1により、命令セットを構成する命令の種類(命令数)を全体として少なくすることができる。したがって、命令コード空間に余裕のないRISC型のデータプロセッサにおける命令コードのコード空間縮小に寄与することができ、16ビット固定長命令セットのRISCのように命令コード空間に余裕がないプロセッサの64ビット化が可能になる。
【0064】
《実施形態2》
図3には、本発明の実施形態2に係るフラグ更新プレフィックス命令が概略的に例示される。フラグ更新プレフィックス命令は、更新するフラグの指定、後続命令が生成したフラグのうち使用するフラグの指定、指定した2つのフラグ間の論理演算の指定を行う。フラグを32ビットフラグT及び64ビットフラグUの2種類とすると、更新するフラグの指定に1ビット、後続命令が生成したフラグのうち使用するフラグの指定に1ビット使用する。また、演算を6種類とすると、指定した2つのフラグ間の論理演算の指定には3ビット使用する。したがって、フラグ更新プレフィックス命令は5ビットのオペランドフィールドで指定することができ、大きな命令コード空間を必要としない。
【0065】
16ビット固定長命令セットで定義すると、
図3のように11ビットのオペレーションタイプ指定フィールドOPTでフラグ更新プレフィックス命令であることを指定し、2ビットのソースデスティネーション指定フィールドSDで、更新するフラグの指定及び後続命令が生成したフラグのうち使用するフラグの指定を行い、3ビットの論理演算指定フィールドTYPで指定した2つのフラグ間の論理演算の指定を行う。論理演算の種類は論理積AND、論理和OR、否定論理積ANDN、否定論理和ORN、排他的論理和XOR、新フラグNEWの6種類であり、それぞれTYPフィールドの000から101を割り当てている。この演算の種類にソースとソースデスティネーションフラグを加えてニモニックとしている。SDフィールドは上位がソース、下位がデスティネーションで、0が32ビットフラグT、1が64ビットフラグUを指定することを表す。動作欄のnewTは後続命令が生成した32ビットフラグ、newUは後続命令が生成した64ビットフラグ、&=、|=、^=、=、〜はC言語と同じ意味の演算子であり、&=は右辺の値と左辺の値との論理積を取って左辺の変数に代入、|=は右辺の値と左辺の値との論理和を取って左辺の変数に代入、^=は右辺の値と左辺の値との排他的論理和を取って左辺の変数に代入、=は右辺の値を左辺の変数に代入、〜は右側の値を論理反転することを表す。
【0066】
例えばSD=00、TYP=000の場合は、論理演算の種類は論理積AND、更新するフラグ(デスティネーションフラグ)は32ビットフラグT,後続命令が生成したフラグのうち使用するフラグ(ソースフラグ)も32ビットフラグTであり、ニモニックはANDTT、動作はT&=newT;U:不変なので、32ビットフラグTと後続命令が生成したフラグのうち32ビットフラグTとの論理積を取って32ビットフラグTに格納し、64ビットフラグUは更新しないというフラグ更新プレフィックス命令となる。そして、後続命令の動作は、プレフィックス命令がなければ生成したフラグで32ビットフラグT及び64ビットフラグUを更新するところを、上記フラグ更新プレフィックス指定の動作に置き換えられる。
【0067】
本実施形態2と前述の実施形態1との構成上の違いは命令デコードユニットIDU及び実行ユニットEXUに現れるため、プロセッサコアの代表的ブロック構成は実施形態1と同様に
図1に示される。
【0068】
図4には、本発明の実施形態2に係るプロセッサの命令デコードユニットIDUが概略的に例示される。1サイクルに1命令発行するスカラプロセッサを例示するが、文献4のようにプレフィックス命令を使うプロセッサは従来から存在し、本分野の通常のスキルの技術者であればプレフィックスデコード及び発行方式のスーパースカラ、アウトオブオーダ等の他の発行形態への適用は可能である。また、本実施例ではフラグ更新プレフィックス命令のみがプレフィックス命令であることを前提としているが、他のプレフィックス命令も扱えるように拡張することも本分野の通常のスキルの技術者であれば可能である。
【0069】
命令デコードユニットIDUは、メインデコーダDEC及びプレフィックスデコーダPF−DECから成る。メインデコーダDECは命令フェッチユニットIFUから供給される命令OPをデコードし、実行制御情報op−excを実効制御情報EXCの一部として実行ユニットEXUへ、32ビットフラグ更新制御op−wrt及び64ビットフラグUの更新制御op−wruをプレフィックスデコーダPF−DECへ、ロードストア制御情報LSCをロードストアユニットLSUへ、そして、レジスタファイル制御情報RFCをレジスタファイルRFへ出力する。尚、レジスタファイル制御情報RFCのうち、書込み情報は発行された命令がレジスタ書込みステージに達するタイミングで供給する。
【0070】
ファイルRFはレジスタファイル制御情報RFCに基づいて、実行用オペランドEXA及びEXBを実行ユニットEXUに、ロードストア用アドレスオペランドLSA及びLSB、並びにストアデータSDをロードストアユニットLSUに供給する。更に、実行結果EXOを実行ユニットEXUから、ロードデータLDをロードストアユニットLSUから受け取り、レジスタファイルRFに格納する。
【0071】
プレフィックスデコーダPF−DECは、命令OPのオペレーションタイプ指定フィールドOPTをデコードし、命令OPがフラグ更新プレフィックスであれば有効フラグvを立て、そうでなければクリアする。また、2ビットのソースデスティネーション指定フィールドSDをそれぞれプレフィックスソースフラグ指定情報pfsrcとプレフィックスデスティネーションフラグ情報pfdstとしてラッチする。更に、論理演算指定フィールドTYPをプレフィックス論理演算指定情報pftypとしてラッチする。命令OPがフラグ更新プレフィックス命令である場合、メインデコーダDECにもそれが供給される。この時、メインデコーダDECはフラグ更新プレフィックスをノーオペレーションコードとみなし、実行ユニットEXU及びロードストアユニットLSUが何もしないような制御情報を出力する。
【0072】
命令OPがフラグ更新プレフィックス命令であった次のサイクルでは、メインデコーダDECは後続命令をデコードし、前述のように各種制御情報を出力する。一方、プレフィックスデコーダPF−DECでは、前サイクルでラッチした情報を使って処理を進める。命令OPがフラグ更新プレフィックス命令であったため、有効フラグvが立っており、論理演算指定情報typ、32ビットフラグソース情報srt、64ビットフラグソース情報sru、32ビットフラグ更新制御wrt及び64ビットフラグ更新制御wruとしては、それぞれプレフィックス論理演算指定情報pftyp、プレフィックスフラグソース指定情報pfsrc、同じくプレフィックスフラグソース指定情報pfsrc、プレフィックスデスティネーションフラグ情報pfdstが0、及びプレフィックスデスティネーションフラグ情報pfdstが1という情報を出力する。この結果、フラグ生成のための制御情報としては、メインでコーダからの32ビットフラグ更新制御op−wrt及び64ビットフラグ更新制御op−wruがオーバーライドされ、フラグ更新プレフィックス命令の情報が出力される。
【0073】
一方、命令OPがフラグ更新プレフィックス命令でなかった次のサイクルでは、有効フラグvが立っていないため、論理演算指定情報typ、32ビットフラグソース情報srt、64ビットフラグソース情報sru、32ビットフラグ更新制御wrt及び64ビットフラグ更新制御wruとしては、それぞれ101、0、1、32ビットフラグ更新制御op−wrt及び64ビットフラグ更新制御op−wruを出力する。この結果、メインデコーダDECの出力が命令デコードユニットIDUとして出力される。尚、メインデコーダDEC出力のない、論理演算指定情報typ、32ビットフラグソース情報srt、及び64ビットフラグソース情報sruとして、それぞれ101、0、1出力することが命令本来の動作を指定している。
【0074】
上記論理演算指定情報typ、32ビットフラグソース情報srt、64ビットフラグソース情報sru、32ビットフラグ更新制御wrt及び64ビットフラグ更新制御wruはメインデコーダDECで生成される実行制御情報op−excと共に実効制御情報EXCとして実行ユニットEXUに出力される。
【0075】
図5には、本発明の実施形態2に係るプロセッサの実行ユニットEXUが概略的に例示される。
図2に例示した実施形態1に係るプロセッサの実行ユニットEXUと共通部分は同一の機能を有している。追加部分は、32ビットフラグソースマルチプレクサS32、64ビットフラグソースマルチプレクサS64、32ビットフラグ論理演算器FL32、及び64ビットフラグ論理演算器FL64である。
【0076】
32ビットフラグソースマルチプレクサS32は、命令デコードユニットIDUからの32ビットフラグソース情報srtに従って、新たな32ビットフラグnewT又は新たな64ビットフラグnewUを選択し、32ビットフラグ論理演算器FL32に供給し、32ビットフラグ論理演算器FL32は、これと32ビットフラグTとから、論理演算指定情報typに従って、論理演算を行い、結果を32ビットフラグTにラッチする新たな値とする。同様に、64ビットフラグソースマルチプレクサS64は、命令デコードユニットIDUからの64ビットフラグソース情報srtに従って、新たな32ビットフラグnewT又は新たな64ビットフラグnewUを選択し、64ビットフラグ論理演算器FL64に供給し、64ビットフラグ論理演算器FL64は、これと64ビットフラグUとから、論理演算指定情報typに従って、論理演算を行い、結果を64ビットフラグUにラッチする新たな値とする。
【0077】
上記のように本発明の実施形態2に係る命令デコードユニットIDU及び実行ユニットEXUにより、大きな命令コード空間を必要としないフラグ更新プレフィックス命令による、残したいフラグの更新抑止、複数命令で生成したフラグ間の論理演算が可能となる。
【0078】
次に、具体例によってフラグ更新プレフィックス命令の効果を説明する。
図6には本発明の実施形態2に係るプロセッサの動作例が概略的に例示される。
図6のCプログラムは64ビットポインタpがNULLポインタでなく、32ビット変数iが10より大きかったら{}内を実行せよというプログラムである。NULLポインタは何も指していない状態であり値が0となっている。
【0079】
フラグ更新プレフィックス命令を含むアセンブラで、このCプログラムを記述すると
図6のように4命令で記述される。まず第1ステップで、CMP/EQ p,0で64ビットポインタpとNULLポインタ値0とを64ビットサイズで比較し、比較結果を64ビットフラグUに格納する。64ビットポインタpがNULLポインタの場合に64ビットフラグUがセットされる。即ち、U=(p==NULL)となる。このとき、32ビットフラグTには64ビットポインタpとNULLポインタ値0の下位32ビットを比較した結果が格納されるが本プログラムでは使用しない。第2ステップでは、フラグ更新プレフィックス命令ORNTUをデコードする。第3ステップでは、CMP/GT i,10で32ビット変数iが10より大きかったら新たな32ビットフラグnewTが立つ。そして、フラグ更新プレフィックス命令ORNTUによって、U|=〜newTとなるので、U=(p==NULL)|〜(i>10)となる。このとき、32ビットフラグTは不変である。この結果、64ビットフラグUにはCプログラムのif文の条件式の反転値が入っている。第4ステップでは、BT.D _after_if_closeによってUが1、即ち条件式が不成立ならばif文の後ろに飛ぶのでif文は実行されない。
【0080】
以上のようにフラグ更新プレフィックス命令を使うと複数の比較結果をまとめることが出来るため、1回の条件分岐で条件判定が完了する。フラグ更新プレフィックス命令を使わないと条件判定のたびに条件分岐を行う必要があり、これを高速化することは困難である。あるいは生成したフラグを汎用レジスタに転送して論理演算を行う場合、第2ステップのフラグ更新プレフィックス命令の代わりにフラグ転送命令MOVU R0を実行して生成したUフラグを汎用レジスタR1に転送し、第4ステップの条件分岐の前に、フラグ転送命令MOVT R0を実行して生成したTフラグを汎用レジスタR1に転送し、NOT R0で論理反転し、AND #1,R0で上位をクリアし、OR R0,R1で(p==NULL)|〜(i>10)を生成する。更に、SHLR R1で(p==NULL)|〜(i>10)を32ビットフラグTに格納する。したがって、命令数が4命令増えて2倍になり性能が低下する。このように、フラグ更新プレフィックス命令は複雑な条件判定を高速化することが出来る。
【0081】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。例えばフラグ更新プレフィックス命令はORNTUに代表されるように、後続命令が生成するフラグによって更新するフラグの指定に加えて、後続命令が生成するフラグのうち使用するフラグの指定、及び指定した2つのフラグ間の論理演算の指定を夫々行う機能を有するものとした。本発明はそれに限定されず、先に生成された夫々のデータサイズに対応するフラグのうち後続命令が生成するフラグによって更新するフラグを指定する機能だけを持つ命令であってもよい。