(57)【特許請求の範囲】
【請求項１】
アセンブラ処理方法に於いて、命令スケジューリングを行うに際し、命令スケジューリング工程でレジスタ干渉回避処理操作と遅延分岐命令最適化処理操作とが実行される様に構成され、
該命令スケジューリング工程に於いて、該レジスタ干渉回避処理操作、或いは該レジスタ干渉回避の命令スケジューリングは、連続する命令のレジスタ干渉を検出して、レジスタ干渉が存在する場合には、当該レジスタ干渉時に、当該互いに干渉しあう前後の命令を置換する操作を実行するものである事を特徴とするアセンブラに於ける命令スケジューリング方法。
【請求項２】
該命令スケジューリング工程に於いて、レジスタ干渉回避の命令スケジューリングと遅延分岐命令最適化の命令スケジューリングとが実行される事を特徴とする請求項１記載のアセンブラに於ける命令スケジューリング方法。
【請求項３】
該アセンブラ処理方法は、パイプライン方式によるプロセッサに適用されるものである事を特徴とする請求項１乃至２に記載のアセンブラに於ける命令スケジューリング方法。
【請求項４】
該パイプライン方式は、マイクロプロセッサである事を特徴とする請求項３記載のアセンブラに於ける命令スケジューリング方法。
【請求項５】
該マイクロプロセッサは、ＲＩＳＣ系のマイクロプロセッサである事を特徴とする請求項４記載のアセンブラに於ける命令スケジューリング方法。
【請求項６】
該命令スケジューリング工程に於いて、該遅延分岐命令最適化処理操作、或いは、遅延分岐命令最適化の命令スケジューリングは、連続する命令に於ける遅延分岐命令の直前の命令と該遅延分岐命令とを置換する操作を実行するものである事を特徴とする請求項１又は２記載のアセンブラに於ける命令スケジューリング方法。
【請求項７】
該レジスタ干渉が存在するか否かの判断は、レジスタ干渉の対象命令に、インタロックの原因となるレジスタが使用されているか否かに基づいて実行されるものである事を特徴とする請求項１記載のアセンブラに於ける命令スケジューリング方法。
【請求項８】
レジスタ干渉が存在すると判断された場合で、レジスタ干渉しあう命令を置換するか否かの判断は、インタロック側の命令に、読出されるレジスタ或いはメモリアドレスがある場合には、対象命令に同一のレジスタ又は同一のメモリアドレスに書込みがある場合は、置換出来ないと判断し、それ以外の場合には、置換出来ると判断する様に構成されている事を特徴とする請求項７記載のアセンブラに於ける命令スケジューリング方法。
【請求項９】
該レジスタ干渉回避の置換処理が実行された後、当該置換処理が実行された命令のカウント値から２つ前のカウント値を持つ命令に対して、再度命令スケジューリング操作が実行される様に構成されている事を特徴とする請求項８記載のアセンブラに於ける命令スケジューリング方法。
【請求項１０】
アセンブラソース、命令回析部、命令スケジューリング部、コード生成部、及びオブジェクトコード部とで構成されたアセンブラに於ける命令スケジューリング装置に於いて、該命令スケジューリング部は、更に、命令ブロック抽出部、レジスタ干渉検査部、レジスタ干渉回避処理部、及び遅延分岐命令最適化処理部を含み、
該レジスタ干渉回避処理部は、連続する命令のレジスタ干渉を検出して、レジスタ干渉が存在する場合には、当該レジスタ干渉時に、当該互いに干渉しあう前後の命令を置換する操作を実行するものである事を特徴とするアセンブラに於ける命令スケジューリング装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明はアセンブラに於いて、命令の入れ替え（命令置換）命令変更、命令削除等を行うことにより、命令スケジューリングを行う命令スケジューリング方法及びその装置に関するものであり、特には、マイクロプロセッサ等のアセンブラに於ける命令スケジューリング方法に関するものである。
【０００２】
【従来の技術】
近年のマイクロプロセッサにおいて、処理速度の向上のため、数段のパイプライン方式を用いるのが主流となってきている。
ところが、パイプラインの構造上、連続する命令で、前の命令で書き込んだレジスタの値を、次の命令で参照しようとすると、参照時にまだ書き込みが完了していない状態が発生する。これをレジスタ干渉といい、そのまま実行を許すと次の命令でプログラマが意図する動作をしない状態が発生する。
【０００３】
これを回避するには、一般的にマイクロプロセッサのハードウェアでレジスタ干渉を検出する回路を内蔵しレジスタ干渉が発生した場合、インタロック（現在実行中の動作が完了するまで動作を待ち合わせること）をかけてパイプラインを制御する手段と、レジスタ干渉が発生する命令の直後に、ＮＯＰ命令（何も動作を行わない命令）を挿入する手段とがある。
【０００４】
このように、レジスタ干渉が発生した場合、インタロックを行うマイクロプロセッサでは、動作完了まで待たされるため実行速度が劣化し、インタロックを行わないマイクロプロセッサでは、常にＮＯＰ命令を挿入しなければならず、ＮＯＰ命令分の処理速度の劣化とＮＯＰ命令分の命令コードサイズの増加をまねくことになる。
【０００５】
現在の主流は、インタロックを行う方法が主流となっているため、以後、レジスタ干渉に関しては、インタロックを行うマイクロプロセッサについて説明を行う。
また、近年、ＲＩＳＣ系マイクロプロセッサの登場で、ＲＩＳＣ系特有の遅延分岐命令が登場した。この遅延分岐命令は、深くパイプライン方式と関係している。
【０００６】
通常の分岐命令では、分岐命令で分岐動作を行う場合、次の命令は実行されない。
しかし、この場合、パイプライン動作により次の命令は既に読み込まれているので、次の命令をキャンセルしていた。このため、次の命令を読み込みキャンセルするまでのサイクル数分がムダとなり、分岐動作の処理速度の劣化をまねいていた。
【０００７】
遅延分岐命令では、分岐動作を行う場合でも、既に読み込まれている命令をキャンセルせずに、そのまま実行を行う命令であるため、常に遅延分岐命令の次の命令は実行されることになる。この遅延分岐命令の次にある命令を遅延命令という。
このため、分岐動作時でも処理速度の劣化は起こらないが、遅延命令が必ず実行されることになり、これはプログラマにとってプログラムミスの原因となることが、しばしば発生する。
【０００８】
そこで、プログラマは常に遅延命令をＮＯＰ命令にして、プログラムの流れを判り易く作ることが多い。
また、コンパイラの中にも命令スケジューリング機能を持たないものは、常に遅延命令にＮＯＰ命令を出す必要がある。
このような理由により、アセンブラにおいて、処理速度の向上のため、レジスタ干渉回避機能や、遅延分岐命令の命令スケジューリングを行う機能を有した命令スケジューリング機能が必要となる。
【０００９】
従来のアセンブラにおける命令スケジューリングでは、例えば特開平４−７６７３１号公報に示される様にデータ依存関係を調べそこから得られるデータ依存表により命令の並べ換えを行っていた。
ところが、この方法だと、命令列中に分岐する命令、つまり分岐命令が存在するとデータ依存関係が途絶えてしまうことになるため、命令列中に分岐命令が無いことと命令列中に分岐してくる命令が無いことが保証されなければならない。
【００１０】
この方法では、遅延分岐命令のスケジューリングを行うには、別の遅延分岐命令専用の命令スケジューリング部を設ける必要があり、このためのパス（アセンブルソースを先頭から最後まで解析を行うこと）を増やすことになる。
又、上記公知例の他に、命令スケジューリングに関する公知例としては、特開昭６２─２１７３２５号、或いは特開昭６２─２５９１４２号等の各公報が見られるが、例えば特開昭６２─２１７３２５号の公報には、アセンブラコードの最適化方式に関して開示されているが、かかる公知例には、入力された各アセンブラ命令の実行順序の従属関係を調べると同時に、結果オペランドが後続の命令に与える影響度を調べ、該従属関係を保つ範囲で結果オペランドの影響度の大きい順にアセンブラ命令を取り出して並べ換える方法が示されており、何れもデータ依存関係を調べた上でスケジューリングを行うものであるから、命令列中に分岐命令があると命令スケジューリングが実行出来ない状態となったり、又、上記した様に処理工程が増大し、その為に処理時間が長くなると言う問題は解決されていない。
【００１１】
【発明が解決しようとする課題】
従って、レジスタ干渉回避の命令スケジューリングと、遅延分岐命令の命令スケジューリングの両方の機能を行う場合、処理時間が増えるという問題が生じていた。
本発明は、レジスタ干渉回避の命令スケジューリングと、遅延分岐命令の命令スケジューリングの両方の命令スケジューリングを行う場合でも、遅延分岐命令専用の命令スケジューリングを行うパスを増やすことなく、１つの命令スケジューリング部でレジスタ干渉回避と遅延分岐命令の命令スケジューリングを行うことを目的とするものである。
【００１２】
【課題を解決するための手段】
本発明は上記した目的を達成するため、基本的には、以下に記載されるような技術構成を採用するものである。即ち、アセンブラ処理方法に於いて、命令スケジューリングを行うに際し、命令スケジューリング部でレジスタ干渉回避処理操作と遅延分岐命令最適化処理操作とが実行される様に構成されている事を特徴とするアセンブラに於ける命令スケジューリング方法及びその装置であり、より具体的には、前記命令スケジューリング部に於いて、レジスタ干渉回避の命令スケジューリングと遅延分岐命令最適化の命令スケジューリングとが実行される様に構成されたアセンブラに於ける命令スケジューリング方法及びその装置である。
【００１３】
【作用】
本発明に係るアセンブラに於ける命令スケジューリング方法及びその装置に於いては、上記した様な技術構成を有しているので、所定の命令解析部で解析されたアセンブラ命令列は、命令スケジュリング部に送られ、該命令スケジュリング部に於いて、命令列をラベルで区切られたブロックを作り、当該ブロック単位で命令スケジュリング処理を行うに際して、当該ブロックに区切られた命令にレジスタ干渉があるか否かをチェックし、レジスタ干渉がある場合には、当該レジスタ干渉回避の処理が行われ、同時に遅延分岐命令があれば、当該分岐命令最適化処理部に於いて当該遅延分岐命令の命令スケジュリング処理が実行され、最後に命令スケジュリングされた命令をコード生成部を介してオブジェクトコードを発生させる様に構成されたものであるから、レジスタ干渉によるインタロックを回避し、同時に遅延分岐命令の命令スケジュリングを行う事が出来るので、アセンブラの処理速度の向上と命令コードの縮小化を達成する事が可能となる。
【００１４】
【実施例】
以下に、本発明に係るクラッチ制御装置の一具体例の構成を図面を参照しながら詳細に説明する。  即ち、本発明に係るアセンブラに於ける命令スケジューリング方法としては、基本的には、アセンブラ処理方法に於いて、命令スケジューリングを行うに際し、一つの命令スケジューリング手段に於いて、レジスタ干渉回避処理操作と遅延分岐命令最適化処理操作とが実行される様に構成されているものであり、係るアセンブラに於ける命令スケジューリング方法の一具体例に於いては、該命令スケジューリング手段に於いて、レジスタ干渉回避の命令スケジューリングと遅延分岐命令最適化の命令スケジューリングとが実行される様に構成されたものである。
【００１５】
つまり、本発明に係る該アセンブラに於ける命令スケジューリング方法に於いては、レジスタ干渉回避の命令スケジュリングの方法に於いては、従来に於ける命令スケジュリング方法の様に、命令に関するデータ依存表を用いて、命令スケジュリングを行うのではなく、前後の命令のレジスタ干渉をチェックして、もし、レジスタ干渉が検出された場合には、直接レジスタ干渉しない命令と置換することで、レジスタ干渉を回避する様にしたものであり、又遅延分岐命令の命令スケジュリング方法に於いては、当該遅延分岐命令の直前の命令と遅延分岐命令とを直接置換し、遅延命令を削除する様にして、パイプラインの乱れを抑え命令コードサイズの縮小解と実行速度の向上を図る事が可能となる。
【００１６】
図１は、本発明に係るアセンブラに於ける命令スケジューリング方法を実行する為のアセンブラに於ける命令スケジューリング装置１の一具体例の構成を示すブロックダイアグラムであって、図中、アセンブラソース１０、アセンブラ命令を解析する命令解析部１１、命令解析部１１で解析された命令を順次にレジスタ干渉処理や遅延分岐命令の命令スケジュリングを行う命令スケジューリング部１２、コード生成部１３、及びオブジェクトコード部１８とで構成されたアセンブラに於ける命令スケジューリング装置１に於いて、該命令スケジューリング部１２は、更に、前記命令解析部１１で解析された命令列をどこからも分岐してこない命令列で区切り、ブロック化する命令ブロック抽出部１４、レジスタ干渉があるか否を検査するレジスタ干渉検査部１５、レジスタが干渉している場合に回避処理を行うレジスタ干渉回避処理部１６、及び遅延分岐命令のスケジュリング処理を行う遅延分岐命令最適化処理部１７とで構成されているアセンブラに於ける命令スケジューリング装置１が示されている。
【００１７】
本発明に於ける該アセンブラ処理方法は、パイプライン方式によるプロセッサに適用されるものである事が望ましく、更に本発明に於ける該アセンブラ処理方法に於ける該パイプライン方式は、例えばマイクロプロセッサを構成するものである事が好ましい。
更に、本発明に係る該アセンブラに於ける命令スケジューリング方法に於いては、該マイクロプロセッサは、ＲＩＳＣ系のマイクロプロセッサである事が、特に好ましい。
【００１８】
本発明に係るアセンブラに於ける命令スケジューリング方法の他の具体例としては、例えば、該命令スケジューリングに於いて、該レジスタ干渉回避処理操作、或いは該レジスタ干渉回避の命令スケジューリングは、連続する命令のレジスタ干渉を検出して、レジスタ干渉が存在する場合には、当該レジスタ干渉時に、当該互いに干渉しあう前後の命令を置換する操作を実行する様に構成されたものであっても良く、又該命令スケジューリングに於いて、該遅延分岐命令最適化処理操作、或いは、遅延分岐命令最適化の命令スケジューリングは、連続する命令に於ける遅延分岐命令の直前の命令と該遅延分岐命令とを置換する操作を実行する様に構成されたものであっても良い。
【００１９】
以下に、図１に示す本発明に係るアセンブラに於ける命令スケジューリング装置１を参照しながら、本発明に於けるアセンブラに於ける命令スケジューリング方法の具体例を説明する。
上記の装置において、アセンブラ命令列は、先ず命令解析部１１で解析され、該命令スケジューリング部１２に送られる。
【００２０】
該命令スケジューリング部１２では、表１に示す様に、命令列をラベルで区切られたブロックを作り、該ブロック単位で命令スケジューリング処理を行う。
本発明に於ける該命令ブロック抽出部１４では、分岐命令のある部分でブロック化することも可能であるが、実際的にはラベルの存在する位置で命令列を区切る事が望ましい。
【００２１】
【表１】
0003614198.tif 000002
【００２２】
次いで、上記に従って、ブロックに区切られた命令は、レジスタ干渉検査部１５に於いてレジスタ干渉があるか否かがチェックされ、当該命令にレジスタ干渉がある場合には、レジスタ干渉回避処理部１６に於いて、レジスタ干渉回避の処置が実行される。
一方、遅延分岐命令については、該レジスタ干渉回避処理部１６により、遅延分岐命令の命令スケジューリング処理を行う事になる。
【００２３】
上記した各工程の処理が、全ブロックについて繰り返し実行され、最後に命令スケジューリングされた命令は、コード生成部１３において、オブジェクトコードに変換され、オブジェクトコードが生成される事になる。
以下、本発明に係るアセンブラに於ける命令スケジューリング方法のより詳細な具体例を図２〜図４及び関連の表２〜表１２を参照しながら説明する。
【００２４】
即ち、本発明に係るアセンブラに於ける命令スケジューリング方法に使用されるアセンブラ命令の一具体例を表２に示す。
【００２５】
【表２】
0003614198.tif 000003
【００２６】
上記の表２に示すアセンブラ命令は、ＭＰＵ命令の一部の例である。
１番のＬＤ命令は、Ｒ０が示すメモリアドレスから値を取り、Ｒ１に代入する命令である。このとき、Ｒ１が次の命令で参照している場合、レジスタ干渉となりインタロックがかかる。このように、レジスタ干渉時にインタロックがかかる命令を「インタロック命令」と、言うことにする。
【００２７】
２番のＡＤＤＮ命令は、Ｒ０とＲ１を加算し、結果をＲ１に代入することを示す命令である。
この命令の場合は、アーキテクチャにより、レジスタ間の演算では、次の命令でＲ１と同じレジスタが使用されてもレジスタ干渉は発生せずインタロックもしない命令である。このような命令を「通常命令」と言う。
【００２８】
また、このＡＤＤＮ命令は、一切フラグ変化のない命令である。
３番のＳＵＢ命令は、Ｒ１からＲ０を減算し、結果をＲ１に代入することを示す命令である。
この命令の場合も、２番のＡＤＤＮ命令と同じくアーキテクチャにより、レジスタ間の演算では、次の命令でＲ１と同じレジスタが使用されてもレジスタ干渉は発生せずインタロックもしない命令であり、「通常命令」となる。
【００２９】
このＳＵＢ命令は、演算結果によりフラグ変化する命令である。
４番のＢＲＡ：Ｄ命令は、無条件に分岐する無条件分岐命令である。
この命令は、遅延分岐命令であり、次の命令を実行してから分岐を行う。
５番のＢＥＱ：Ｄ命令は、フラグの条件によって分岐する条件分岐命令である。
【００３０】
ＢＥＱ：Ｄの場合は、Ｚフラグが１の場合のみ分岐動作を行い、Ｚフラグが０の場合は、分岐動作をせず以降の命令を実行する。
この命令も、遅延分岐命令であり、分岐動作時には、次の命令を実行してから分岐を行う。
又、以下に示す表３の（１）は、図１に於けるレジスタ干渉検査部１５において、当該命令と、その命令の前或いは後の他の命令との間にレジスタ干渉があるか否かを判断する場合に使用されるレジスタ干渉検査基準の一例を示し、又表３の（２）は、図１に於けるレジスタ干渉検査部１５において、レジスタ干渉が検出された場合に於いて、該レジスタ干渉を回避する為に、当該命令を置換出来るか否かの判断をする場合の判定基準の一例を示すものである。
【００３１】
【表３】
0003614198.tif 000004
【００３２】
例えば次のような命令がある場合、
ＬＤ      ＠（Ｒ２），Ｒ１  ；インタロック命令
ＡＤＤＮ  Ｒ１，Ｒ２        ；通常命令
インタロック命令（ＬＤ）のインタロックの原因となるレジスタは、Ｒ１である。そして、レジスタ干渉の対象となる命令（ＡＤＤＮ）には、Ｒ１が使用されており、レジスタ干渉が発生する。これは、表３（１）の規則で検出できる。しかし、ＡＤＤＮ命令では、ＬＤ命令でリード動作をするＲ２にライトしている。このまま、もし置換処理を行うと、
ＡＤＤＮ  Ｒ１，Ｒ２
ＬＤ      ＠（Ｒ２），Ｒ１
となり、ＡＤＤＮ命令で、Ｒ２の値が変化してしまうため、ＬＤ命令の動作がおかしくなる。
【００３３】
表３（２）の条件は、このようなことを防ぐための置換可能条件である。つまりこのような条件では置換出来ないことを意味するものである。
上記した様な、本発明に係るアセンブラに於ける命令スケジューリング方法の基本的命令スケジューリング規則を前提にして、本発明によるアセンブラに於ける命令スケジューリング方法の具体例として、以下の表４に示す様な命令列が有った場合、係る命令列がどの様にスケジューリングされるかを図２〜図４及び表４〜表７を参照しながら以下に説明する。
【００３４】
【表４】
0003614198.tif 000005
【００３５】
先ず図２には、本発明に係るアセンブラに於ける命令スケジューリング方法に関し、図１の命令スケジューリング部１２に示された命令スケジューリング工程を実行する際の手順の一例を示すフローチャートが示されている。
図２に於いて、スタート後、ステップ（２１）に於いて、図１に於ける命令ブロック抽出部１４により、上記した命令列から命令ブロックの抽出が行われる。
【００３６】
本具体例に於いては、ラベル（ｌａｂｅｌｌ）  に於いてブロック化が行われ、表５に示す様な２つのブロック、即ちブロック１及びブロック２に分割される。
【００３７】
【表５】
0003614198.tif 000006
【００３８】
上記に於ける一つのブロック、例えば、ブロック１を選択し、当該ブロック１に属する命令列の各命令にカウンタ番号を付しておく。
即ち、表５の左端に記載されている各命令毎の番号が、上記のカウンタ番号に相当し、これが命令ブロックの命令の位置を示す事になる。
その後、ステップ（２２）に進み、該ブロック１が選択され、カウンタを１にセットすると、当該ブロック１に於ける一番目の命令が読みだされる。
【００３９】
本具体例に於いては、ブロック１の第１番目の命令として、（１）ＡＤＤＮ命令が指定される事になる。
次いで、ステップ（２３）に進み、カウンタが指定している命令、即ち、現在の命令、本具体例に於いては、（１）ＡＤＤＮ命令が、インタロック命令であるか否かが判断され、ＮＯであれば、ステップ（２７）に進み、当該現在の命令が、遅延分岐命令であるか否かが判断される。
【００４０】
一方、ステップ（２３）に於いて、ＹＥＳである場合には、レジスタ干渉が発生している事になるので、ステップ（２４）に進み、当該レジスタ干渉を回避する為のレジスタ干渉回避処理操作が実行される。
本具体例に於いては、カウンタ１の命令である（１）ＡＤＤＮ  Ｒ３，Ｒ１は、最初の命令であり、従ってインタロック命令ではないのでステップ（２７）に進み、現在の命令が、遅延分岐命令であるか否かが判断されるが、該カウンタ１の命令は、遅延分岐命令ではないので、ステップ（２８）（２９）をパスしてステップ（２Ａ）に進み、当該カウンタ１の命令が、当該ブロック１に於ける最後の命令か否かが判断さる。
【００４１】
本具体例では、該カウンタ１の命令は、最初の命令であり、最後の命令ではないので、ＮＯと判断され、ステップ（２Ｂ）に進み、カウンタの値を１だけ歩進させ、ステップ（２３）に戻り、上記の各工程が繰り返される。
該ステップ（２Ｂ）に於いて、カウンタ値が３となってステップ（２３）に戻った時点で、該カウンタ３のＬＤ命令は、インタロック命令であるから、ステップ（２３）でＹＥＳとなり、ステップ（２４）に進みレジスタ干渉回避処理が実行される。
【００４２】
即ち、対象となる命令に於いてインタロック命令である事が検出されたので、以後の操作に於いては、当該命令の次の命令との間にレジスタ干渉が発生しているか否かを判断して、必要な場合には、そのレジスタ干渉を回避する為の置換操作を行う様にするものである。
本発明に於ける該レジスタ干渉回避処理操作の手順の一例を示すフローチャートは、図３に示されている。
【００４３】
つまり、該レジスタ干渉回避処理が開始されると、ステップ（３１）に於いて、直前の命令が分岐命令で有るか否かが判断されるものであり、本具体例に於いては、現在対象となっているカウンタ３の命令の直前の命令は、カウンタ２のＡＤＤＮ命令であるから、この命令は分岐命令ではないので、該ステップ（３１）では、ＮＯとなりステップ（３２）に進み、又、該ステップ（３１）でＹＥＳである場合には、その時点で当該ルーチンは終了する。
【００４４】
該ステップ（３１）では、ＮＯと判断された場合にステップ（３２）に進み、当該直前の命令は、ロックされているか否かが判断される。
本発明に於いて、「命令がロックされている」とは、後述する遅延分岐命令最適化処理部に於いて置換した２つの命令をさすものである。
ステップ（３２）に於いて、ＹＥＳの場合には、当該命令は固定されている事になるので、それ以上いじる必要がないので、その時点で当該ルーチンは終了する。
【００４５】
一方、本具体例に於いては、該カウンタ２のＡＤＤＮ命令は、ロックされた命令ではないので、ＮＯとなりステップ（３３）に進み、現在対象となっているカウンタ３の命令の直前の命令が、ＮＯＰ命令であるか否かが判断され、ＹＥＳである場合には、その時点で当該ルーチンは終了するが、ＮＯの場合には、ステップ（３４）に進んで、当該カウンタ３の命令と、当該カウンタ３の次の命令との間にレジスタ干渉が存在するか否かが検査される。
【００４６】
本具体例に於いては、該カウンタ２のＡＤＤＮ命令は、ＮＯＰ命令ではなく、又ＮＯＰ命令と置換しても意味がないので、該ステップ（３３）は、そのＮＯＰ命令への置換を防止する条件を示すものである。
従って、本具体例に於いては、ステップ（３３）では、ＮＯとなりステップ（３４）に進む事になる。
【００４７】
該ステップ（３４）に於いては、前記した表３（１）に示される様な判断基準を用いて、当該現在の命令、即ちカウンタ３のＬＤ命令とその直後の次の命令であるカウンタ４のＳＵＢ命令との間にレジスタ干渉が有るかどうかが判断されるものである。
【００４８】
【表６】
0003614198.tif 000007
【００４９】
つまり、表６に示す様に、表３（１）に示される様な判断基準を用いて、判断した結果、カウンタ３のＬＤ命令とカウンタ４のＳＵＢ命令とは、レジスタＲ３がレジスタ干渉している事になるので、該ステップ（３５）ではＹＥＳとなり、ステップ（３６）に進み、直前の命令とレジスタ干渉が有るか否かが判断される。
【００５０】
又、ステップ（３５）に於いて、ＮＯである場合には、その時点で当該ルーチンは終了する。
ステップ（３６）に於いては、当該カウンタ３のＬＤ命令とその直前のカウンタ２のＡＤＤＮ命令との間で置換が可能かどうかが判断されるのであり、ステップ（３７）に於いて、前記した表３（２）に示す判定基準に従って当該カウンタ３のＬＤ命令とその直前のカウンタ２のＡＤＤＮ命令との間で置換が出来るかどうかが判断される。
【００５１】
即ち、ステップ（３５）に於いて、レジスタ干渉が存在していても、置換が出来るかどうかを別途判断するもので、レジスタ干渉している命令であっても、置換したら命令の動作がおかしくなる場合は、置換する必要がない場合もある。
表７は、上記に於ける置換可能性を判断する場合の例を示したものであって、カウンタ３のＬＤ命令の直前の命令であるカウンタ２のＡＤＤＮ命令には、レジスタＲ３が使用されていないので置換が可能となる。
【００５２】
従って、ステップ（３７）では、ＹＥＳとなり、ステップ（３８）に進むが、ＮＯである場合には、置換が出来ず、その時点で当該ルーチンは終了する。
【００５３】
【表７】
0003614198.tif 000008
【００５４】
次いで、ステップ（３８）に於いては、直前の命令、即ちカウンタ２のＡＤＤＮ命令がインタロック命令であるか否かを検査し、もし当該直前の命令がインタロック命令である場合には、そのインタロック命令とその次の命令、即ちカウンタ３のＬＤ命令との間にレジスタ干渉があるかどうかが検査される。
つまり、ステップ（３８）に於いては、対象命令の直前の命令がインタロック命令である場合、置換しても次の命令とレジスタ干渉している場合には、又インタロックが発生してしまうので、この様な場合には、置換を行わない様にする必要がある。
【００５５】
ステップ（３８）はその為の条件である。
本具体例に於いては、直前の命令はカウンタ２のＡＤＤＮ命令であり、通常の命令であるから、ステップ（３９）に於いては、ＮＯと判断され、ステップ（３Ａ）に於いて、当該カウンタ２のＡＤＤＮ命令とカウンタ３のＬＤ命令とが置換される事になる。
【００５６】
尚、ステップ（３９）でＹＥＳである場合には、その時点で当該ルーチンは終了する。
ステップ（３Ａ）に於いて、所定の命令が置換された状態を表８に示す。
【００５７】
【表８】
0003614198.tif 000009
【００５８】
その結果、当該レジスタ干渉回避処理である置換処理操作が終了する事になり、ステップ（２４）の処理が完了する。
その後、ステップ（２５）に進み、当該レジスタ干渉回避の置換処理が完了したか否かが判断され、ＮＯであれば、ステップ（２Ａ）に進み、前記した様に、ステップ（２Ｂ）を介してステップ（２３）に戻って、上記した各工程を繰り返すが、ＹＥＳであれば、ステップ（２６）に進み、カウンタのカウント値を２だけ減算して、命令のカウンタ値を２個前の命令を処理する様に変更して、ステップ（２３）に戻る事になる。
【００５９】
本具体例に於いては、現在にカウンタは３であったので、カウンタ値を１（３─２＝１）として、カウンタ１のＡＤＤＮ命令から再度各命令に付いて上記の各処理が実行される事になる。
つまり、置換が実行された場合には、カウンタ２個分前に遡って改めてレジスタ干渉の存在有無が判断される事になる。
【００６０】
係る処理操作が実行された場合の命令列は、表９に示す様な命令列となっている。
【００６１】
【表９】
0003614198.tif 000010
【００６２】
係る操作が繰り返され、カウンタ値が５となった場合、カウンタ５のＢＲＡ：Ｄの遅延分岐命令であるから、ステップ（２７）では、ＹＥＳと判断され、ステップ（２８）に進み、当該カウンタ５のＢＲＡ：Ｄの遅延分岐命令の次の命令である遅延命令がＮＯＰ命令であるか否かが判断されるが、本具体例に於いては、カウンタ６の命令はＮＯＰ命令であるので、ＹＥＳとなり、ステップ（２９）に進んで、遅延分岐命令最適化処理が実行される事になる。
【００６３】
本発明に於ける該遅延分岐命令最適化処理の操作手順の一例を図４のフローチャートに示す。
先ず、スタート後、ステップ（４１）に於いて、直前の命令が分岐命令で有るか否かが判断されるものであり、本具体例に於いては、現在対象となっているカウンタ５の命令の直前の命令は、カウンタ４はＳＵＢ命令であるから、この命令は分岐命令ではないので、該ステップ（４１）では、ＮＯとなりステップ（４２）に進み、又、該ステップ（４１）でＹＥＳである場合には、その時点で当該ルーチンは終了する。
【００６４】
該ステップ（４１）では、ＮＯと判断された場合にステップ（４２）に進み、当該直前の命令は、ロックされているか否かが判断される。
本発明に於いて、「命令がロックされている」とは、後述する遅延分岐命令最適化処理部に於いて置換した２つの命令をさすものである。
ステップ（４２）に於いて、ＹＥＳの場合には、当該命令は固定されている事になるので、それ以上いじる必要がないので、その時点で当該ルーチンは終了する。
【００６５】
一方、本具体例に於いては、該カウンタ４のＳＵＢ命令は、ロックされた命令ではないので、ＮＯとなりステップ（４３）に進み、現在対象となっているカウンタ５の命令の直前の命令が、ＮＯＰ命令であるか否かが判断され、ＹＥＳである場合には、その時点で当該ルーチンは終了するが、ＮＯの場合には、ステップ（４４）に進んで、現在の命令が条件分岐命令かどうかが判断される。
【００６６】
本具体例に於いては、該カウンタ４のＳＵＢ命令は、ＮＯＰ命令ではなく、又ＮＯＰ命令と置換しても意味がないので、該ステップ（４３）は、そのＮＯＰ命令への置換を防止する条件を示すものである。
従って、本具体例に於いては、ステップ（４３）では、ＮＯとなりステップ（４４）に進む事になる。
【００６７】
ステップ（４４）に於いては、条件分岐命令かどうかが判断され、ＮＯであれば、ステップ（４６）に進むが、ＹＥＳであればステップ（４５）に進んで、直前の命令がフラグ変化する命令かどうかが判断される。
本具体例においては、カウンタ５のＢＲＡ：Ｄは、無条件分岐命令であるからステップ（４４）ではＮＯとなりステップ（４６）に進む事になる。
【００６８】
ステップ（４６）に於いては、直前の命令が遅延命令として実行可能であるかどうかが判断される。
これは、もしアーキテクチャ上、遅延命令として実行出来ない命令と置換した場合、システムダウン、即ち，ＭＰＵの停止、を意味する事になり、係る条件の発生を防止する為の操作である。
【００６９】
本具体例に於いては、カウンタ４のＳＵＢ命令は、遅延命令として実行可能であるので、ステップ（４６）ではＹＥＳとなり、ステップ（４７）に進んで、当該現在の命令、即ち、カウンタ５の命令とその直前の命令であるカウンタ４の命令とが置換可能か否かを検査し、ステップ（４７）で置換出来る場合には、ＹＥＳとなり、ステップ（４９）に進み、又ＮＯである場合には、その時点で当該ルーチンは終了する。
【００７０】
尚、ステップ（４６）でＮＯである場合にも、その時点で当該ルーチンは終了する。
本具体例に於いては、カウンタ４のＳＵＢ命令とカウンタ５のＢＲＡ：Ｄ命令とは置換可能である。
次いで、ステップ（４９）に於いて、２つ前の命令がインタロック命令の場合、そのインタロック命令と直前の命令とがレジスタ干渉を起こすか否かが判断され、ステップ（４Ａ）に於いて、レジスタ干渉がある場合には、即ちＹＥＳの場合、置換操作が行われずにその時点で当該ルーチンは終了するが、ＮＯの場合には、ステップ（４Ｂ）に進んで、当該直前の命令と現在の命令とを置換し、置換した２つの命令をロックして、その後の遅延命令、即ちＮＯＰ命令を削除する操作が実行される事になる。
【００７１】
上記したステップ（４９）とステップ（４Ａ）の操作は、もし、現在の命令の２つ前のカウンタ３がもしＬＤ命令の場合でカウンタ４のＢＲＡ：Ｄ命令とレジスタ干渉する事になれば、せっかく置換しても、ＬＤ命令でインタロックが発生するので、置換した効果がなくなってしまうので、かかる問題の発生を防止する為の条件となっている。
【００７２】
即ち、本具体例に於いては、カウンタ３はＡＤＤＮ命令であり、通常命令であるので、ステップ（４Ａ）の判断では、ＮＯとなり、ステップ（４Ｂ）に移り、置換処理操作が実行される事になる。
具体的には、ステップ（４Ｂ）では、先ず、直前の命令と現在の命令とを置換するので、カウンタ４のＳＵＢ命令とカウンタ５のＢＲＡ：Ｄ命令とを置換する。
【００７３】
係る操作が終了した時点での命令列の例を表１０に示しておく。
【００７４】
【表１０】
0003614198.tif 000011
【００７５】
次いで、置換した２つの命令をロックする。
これは、再び、命令スケジューリング処理で置換されない様にする事が目的である。
その後、遅延命令のＮＯＰ命令を削除する。
係る処理を行った結果の命令列の具体例は、表１１に示される様な形となる。
【００７６】
【表１１】
0003614198.tif 000012
【００７７】
尚、図４のフローチャートに於いて、ステップ（４４）に於いて、現在の命令が、表２の５に示す様な条件付遅延分岐命令であって、Ｚフラグが１か０かによって、分岐するか否かが決定される様な命令である場合には、ステップ（４４）でＮＯとなりステップ（４５）に進み、直前の命令はフラグ変化する命令であるかどうかが判断され、ＹＥＳである場合には、その時点で、当該ルーチンは終了し、ＮＯである場合には、ステップ（４６）に進み、上記した処理が実行される事になる。
【００７８】
係るルーチンが終了すると、遅延分岐命令最適化処理が完了するので、図２のフローチャートに於けるステップ（２９）に戻り、ステップ（２Ａ）に進む事になる。
今、ブロック１の最後のカウンタ６の命令が処理されたものであれば、ステップ（２Ａ）で最後の命令であると判断されＹＥＳとなりステップ（２Ｃ）に進み、当該ブロックが、最後のブロックであるか否かが判断され、ＮＯであれば、ステップ（２Ｄ）に進み、ブロック番号を１だけ歩進させ、ブロック２を選択し、当該ブロック２に付いて、該ブロック２に含まれる複数個の命令からなる命令列のそれぞれに付いて、上記した各処理操作が実行される事になる。
【００７９】
そして、最後のブロックについて、上記処理が終了した場合には、ステップ（２Ｃ）でＹＥＳとなり、本具体例に係るアセンブラに於ける命令スケジューリング方法の処理ルーチンが終了する事になる。
ブロック１に付いての、本発明に係るアセンブラに於ける命令スケジューリング方法を実行して最適化された命令列の例を表１２に示す。
【００８０】
【表１２】
0003614198.tif 000013
【００８１】
上記表１２から理解される様に、インタロック命令であるＬＤ命令と遅延分岐命令であるＢＲＡ：Ｄ命令がうまくスケジューリングされている事がわかる。
本発明に於ける上記アセンブラに於ける命令スケジューリング方法に於いて、該レジスタ干渉が存在するか否かの判断の一例としては、レジスタ干渉の対象命令に、インタロックの原因となるレジスタが使用されているか否かに基づいて実行されるものである。
【００８２】
又、本発明に於けるアセンブラに於ける命令スケジューリング方法に於いて、レジスタ干渉が存在すると判断された場合で、レジスタ干渉しあう命令を置換するか否かの判断に際しての判断基準の一例としては、上記した様に、インタロック側の命令に読出されるレジスタ或いはメモリアドレスがある場合には、対象命令に同一のレジスタ又は同一のメモリアドレスに書込みがある場合は、置換出来ないと判断し、それ以外の場合には、置換出来ると判断する事が可能である。
【００８３】
又、本発明に於けるアセンブラに於ける命令スケジューリング方法に於いては、該レジスタ干渉回避の置換処理が実行された後、当該置換処理が実行された命令のカウント値から２つ前のカウント値を持つ命令に対して、再度命令スケジューリング操作が実行される様に構成さる事ものぞましい。
【００８４】
【発明の効果】
本発明に係るアセンブラに於ける命令スケジューリング方法に於いては、上記した様に、一つの命令スケジューリング部に於いて、レジスタ干渉によるインタロックを回避し、同時に遅延分岐命令の命令スケジューリングを実行する事が出来るので、アセンブラの処理速度を大幅に向上させる事が出来ると共に、命令コードサイズを縮小する事も出来、処理実行速度を向上させる事が出来る。
【００８５】
又、本発明に係るアセンブラに於ける命令スケジューリング方法に於いて、従来に於ける命令スケジュリング方法の様に、命令に関するデータ依存表を用いて、命令スケジュリングを行うのではなく、前後の命令のレジスタ干渉をチェックして，もし、レジスタ干渉が検出された場合には、直接レジスタ干渉しない命令と置換することで、レジスタ干渉を回避する様にしたものであり、又遅延分岐命令の命令スケジュリングの方法に於いては、当該遅延分岐命令の直前の命令と遅延分岐命令とを直接置換し、遅延命令を削除する様にして、パイプラインの乱れを抑え命令コードサイズの縮小解と実行速度の向上を図る事が可能となる。
【図面の簡単な説明】
【図１】図１は、本発明に於けるアセンブラに於ける命令スケジューリング方法を実行する為のアセンブラに於ける命令スケジューリング装置の一例を示すブロックダイアグラムである。
【図２】図２は、本発明に係るアセンブラに於ける命令スケジューリング方法の処理操作手順の一例を示すフローチャートである。
【図３】図３は、図２に示すフローチャートに於けるレジスタ干渉回避処理部のフローチャートである。
【図４】図４は、図２に示すフローチャートに於ける遅延分岐命令最適化処理部のフローチャートである。
【符号の説明】
１…アセンブラに於ける命令スケジューリング装置
１０…アセンブラソース
１１…命令解析部
１２…命令スケジューリング部
１３…コード生成部
１４…命令ブロック抽出部
１５…レジスタ干渉検査部
１６…レジスタ干渉回避処理部
１７…遅延分岐命令最適化処理部
１８…オブジェクトコード部
【図１】
0003614198.tif 000014
【図２】
0003614198.tif 000015
【図３】
0003614198.tif 000016
【図４】
0003614198.tif 000017