(57)【要約】  本発明は、プロセッサ内の命令を復号するための復号ユニットを提供する。復号ユニットは、オペレーションコード復号ロジック、オペランド復号ロジック、および１６ビット入力を有する。オペレーションコード復号ロジックは、入力の５ビットを使用してオペレーションコードを決定する働きをし、オペランド復号ロジックは、入力の残りの１１ビットから、可能な１２個の２進値のうちの１つをそれぞれ有する３つの４ビットオペランド要素を決定する働きをする。オペランド復号ロジックは、１１ビットの符号化グループを復号して３つのオペランド要素の各オペランド要素の第１の部分を決定し、１１ビットの逐語的グループを逐語的に読み出して３つのオペランド要素の各オペランド要素の第２の部分を決定する働きをする。
2010526383.tif 000002
【特許請求の範囲】
【請求項１】
オペレーションコード復号ロジック、オペランド復号ロジック、および１６ビット入力を有し、プロセッサ内で命令を復号するための復号ユニットであって、
前記オペレーションコード復号ロジックは、前記入力の５ビットを使用してオペレーションコードを決定する働きをし、前記オペランド復号ロジックは、前記入力の残りの１１ビットから、可能な１２個の２進値のうちの１つをそれぞれ有する３つの４ビットオペランド要素を決定する働きをし、
前記オペランド復号ロジックは、前記１１ビットの符号化グループを復号して３つのオペランド要素の各オペランド要素の第１の部分を決定し、前記１１ビットの逐語的グループを逐語的に読み出して３つのオペランド要素の各オペランド要素の第２の部分を決定する働きをする復号ユニット。
【請求項２】
前記１１ビットの少なくとも１つを前記オペランド復号ロジックから前記オペレーションコード復号ロジックに分流する働きをするスイッチングロジックを含み、前記オペレーションコード復号ロジックは、前記５ビットと前記分流された少なくとも１つのビットを使用してオペレーションコードを決定する働きをする、請求項１に記載の復号ユニット。
【請求項３】
前記オペランド復号ロジックは、前記１１ビットの残りのビットから少なくとも１つのオペランドを決定する働きをする、請求項２に記載の復号ユニット。
【請求項４】
前記スイッチングロジックは、前記１１ビットが、前記３つの４ビットオペランド要素を符号化するために使用されない値を有する場合に、前記少なくとも１ビットを分流するように構成された、請求項２に記載の復号ユニット。
【請求項５】
前記スイッチングロジックは、前記５ビットが所定の値または範囲の値を有する場合に、前記少なくとも１ビットを分流するように構成された、請求項２に記載の復号ユニット。
【請求項６】
前記符号化部分は５ビットであり、前記逐語的部分は６ビットであり、各オペランド要素の前記第１の部分は２ビットであり、各オペランド要素の前記第２の部分は２ビットである、請求項１に記載の復号ユニット。
【請求項７】
前記入力は、１６ビットの命令レジスタを含む、請求項１に記載の復号ユニット。
【請求項８】
前記オペランド要素の少なくとも１つは、１組１２個のオペランドレジスタのうちのいずれかからオペランドレジスタを指定するためのオペランド指定子である、請求項１に記載の復号ユニット。
【請求項９】
前記３つのオペランド要素はそれぞれ、前記組のいずれかからのオペランドレジスタをそれぞれ指定するそれぞれのオペランド指定子を含む、請求項８に記載の復号ユニット。
【請求項１０】
前記３つのオペランド要素は、
１つの即値オペランドと、前記組のいずれかからの２つのオペランドレジスタをそれぞれ指定するための２つのオペランド指定子とを含む、請求項８に記載の復号ユニット。
【請求項１１】
前記３つのオペランド要素は、２つのソースオペランド要素がそれぞれ、前記組のいずれかからそれぞれのソースオペランドレジスタを指定するための即時ソースオペランドまたはソースオペランド指定子と、前記組のいずれかからのディスティネーションオペランドレジスタを指定するための１つのディスティネーションオペランド指定子であり、
前記復号ユニットは、前記ソースオペランドを処理し、前記処理の結果を前記ディスティネーションオペランドレジスタに記憶することによって、含む前記オペレーションコードに従って前記命令を実行する働きをする、請求項８に記載の復号ユニット。
【請求項１２】
前記３つのオペランドは、３つのソースオペランドを含む、請求項１に記載の復号ユニット。
【請求項１３】
前記スイッチングロジックは、前記１１ビットのうちの１つを前記オペランド復号ロジックから前記オペレーションコード復号ロジックに分流する働きをし、
前記オペレーションコード復号ロジックは、前記５ビットと前記分流された１つのビットを使用してオペレーションコードを決定する働きをし、前記オペランド復号ロジックは、前記残りの１０ビットから２つの４ビットオペランド指定子を決定する働きをし、各４ビットオペランド指定子は、前記組の１２個のオペランドレジスタのいずれかからオペランドレジスタを指定するための１２個の可能な２進値のうちの１つを有し、
前記オペランド復号ロジックは、前記１０ビットの符号化グループを復号して前記２つのオペランド指定子の各オペランド指定子の第１の部分を決定し、前記１０ビットの逐語的グループを逐語的に読み出して前記２つのオペランド指定子の各オペランド指定子の第２の部分を決定する働きをする、請求項２、３、４および８のいずれか１項に記載の復号ユニット。
【請求項１４】
前記復号ユニットは、複数スレッドを実行するように構成され、各スレッドは、命令のシーケンスを含み、前記復号命令の少なくとも１つは、前記シーケンスのうちの１つのシーケンスの構成要素である、請求項１に記載の復号ユニット。
【請求項１５】
前記少なくとも１つの命令は、前記複数スレッドのうちの１つまたは複数のスレッドのスケジューリングを管理するためのスレッドスケジューリング命令である、請求項１４に記載の復号ユニット。
【請求項１６】
前記命令の少なくとも１つは、
イベントと関連付けられた条件を設定するためのセットイベント条件命令と、イベント条件と関連付けられたデータを設定するためのセット条件データ命令と、イベントと関連付けられた継続点ベクトルを設定するためのセットベクトル命令と、イベントソースがイベントを生成することを可能にするソースイベントイネーブル命令と、スレッドがイベントに反応することを可能にするスレッドイベントイネーブル命令と、のいずれかである、請求項１に記載の復号ユニット。
【請求項１７】
前記復号ユニットは、プレフィックス命令のオペランドを、次に実行する命令のオペランドと連結する働きをする、請求項１に記載の復号ユニット。
【請求項１８】
前記入力は、６４ビット命令バッファから命令を受け取るように構成された、請求項１に記載の復号ユニット。
【請求項１９】
２つのそれぞれの１６ビット命令を同時に並列に実行する働きをする少なくとも２つの並列パイプラインを含み、各パイプラインが請求項１による復号ユニットを含む実行ユニット。
【請求項２０】
前記実行ユニットは、デュアル発行モードとシングル発行モードで動作可能であり、前記デュアル発行モードでは、前記実行ユニットは、２つの１６ビット命令を２つのそれぞれのパイプラインに単一サイクルで発行する働きをし、シングル発行モードでは１つの１６ビットの命令だけをパイプラインに単一サイクルで発行する働きをする、請求項１９に記載の実行ユニット。
【請求項２１】
前記実行ユニットは、前記パイプラインのうちの１つのパイプラインに３２ビット命令を単一サイクルで発行する働きをする、請求項１９に記載の実行ユニット。
【請求項２２】
複数組の１２個のオペランドレジスタを含み、各組が、前記スレッドのそれぞれの１つに関するオペランドを記憶するように構成された、請求項１４による復号ユニットを含むプロセッサ。
【請求項２３】
前記プロセッサは、第１の外部装置と第２の外部装置とを接続するインタフェースプロセッサである、プロセッサ請求項１による復号ユニット。
【請求項２４】
前記第１の外部装置は、別のプロセッサであり、前記第２の外部装置は、周辺装置である、請求項２３に記載のプロセッサ。
【請求項２５】
前記第１および第２の外部装置は、両方とも他のプロセッサである、請求項２３に記載のプロセッサ。
【請求項２６】
前記命令の少なくとも１つは、
前記外部装置のうちの１つから前記インタフェースプロセッサにデータを入力するための入力命令と、前記インタフェースプロセッサから前記外部装置のうちの１つにデータを出力するための出力命令のいずれかである、請求項２３に記載のプロセッサ。
【請求項２７】
オペレーションコード復号ロジック、オペランド復号ロジック、および１６ビット入力を含む復号ユニットを使用して、プロセッサ内で命令を復号する方法であって、
前記オペレーションコード復号ロジックを操作して、前記入力の５ビットを使用してオペレーションコードを決定するステップと、
前記オペランド復号ロジックを操作して、前記入力の残りの１１ビットから、可能な１２個の可能な２進値のうちの１つをそれぞれ有する３つの４ビットオペランド要素を決定するステップとを含み、
前記３つのオペランド要素を決定するステップは、前記１１ビットの符号化グループを復号して前記３つのオペランド要素の各オペランド要素の第１の部分を決定し、前記１１ビットの逐語的グループを逐語的に読み出して３つのオペランド要素の各オペランド要素の第２の部分を決定する方法。
【請求項２８】
前記１１ビットの少なくとも１つを前記オペランド復号ロジックから前記オペレーションコード復号ロジックに分流するステップと、
前記オペレーションコード復号ロジックを操作して、前記５ビットと前記少なくとも１つの分流されたビットを使用してオペレーションコードを決定するステップとを含む、請求項２７に記載の方法。
【請求項２９】
前記オペランド復号ロジックを操作して前記１１ビットの残りのビットから少なくとも１つのオペランドを決定するステップを含む、請求項２８に記載の方法。
【請求項３０】
前記少なくとも１ビットを分流する前記ステップは、前記１１ビットが、前記３つの４ビットオペランド要素を符号化するために使用されない値を有する場合に実行される、請求項２８に記載の方法。
【請求項３１】
前記少なくとも１ビットを分流する前記ステップは、前記５ビットが所定の値または範囲の値を有する場合に実行される、請求項２８に記載の方法。
【請求項３２】
前記符号化部分が５ビットであり、前記逐語的部分が６ビットであり、各オペランド要素の前記第１の部分が２ビットであり、各オペランド要素の前記第２の部分が２ビットである、請求項２７に記載の方法。
【請求項３３】
前記入力は、１６ビット制御レジスタを含む、請求項２７に記載の方法。
【請求項３４】
前記オペランド要素の少なくとも１つは、１組１２個のオペランドレジスタのうちのいずれかからオペランドレジスタを指定するためのオペランド指定子である、請求項２７に記載の方法。
【請求項３５】
前記３つのオペランド要素はそれぞれ、前記組のいずれかからのオペランドレジスタをそれぞれ指定するためのそれぞれのオペランド指定子を含む、請求項３４に記載の方法。
【請求項３６】
前記３つのオペランド要素は、１つの即値オペランドと、前記組のいずれかからの２つのオペランドレジスタをそれぞれ指定するための２つのオペランド指定子とを含む、請求項３４に記載の方法。
【請求項３７】
前記３つのオペランド要素は、前記組のいずれかからのそれぞれのソースオペランドレジスタを指定するためのそれぞれ即時ソースオペランドまたはソースオペランド指定子である２つのソースオペランド要素と、前記組のいずれかからのディスティネーションオペランドレジスタを指定するための１つのディスティネーションオペランド指定子とを含み、
前記ソースオペランドを処理し、前記処理の結果を前記ディスティネーションオペランドレジスタに記憶するステップを含む、オペレーションコードに従って前記命令を実行するステップを含む、請求項３４に記載の方法。
【請求項３８】
前記３つのオペランドは、３つのソースオペランドを含む、請求項２７に記載の方法。
【請求項３９】
前記１１ビットのうちの１つを前記オペランド復号ロジックから前記オペレーションコード復号ロジックに分流するステップと、
前記オペレーションコード復号ロジックを操作して、前記５ビットと前記分流された１ビットを使用してオペレーションコードを決定するステップと、
前記オペランド復号ロジックを操作して、前記残りの１０ビットから、前記組の１２個のオペランドレジスタのいずれかからのオペランドレジスタを指定するために、可能な１２個の２進値のうちの１つをそれぞれ有する２つの４ビットオペランド指定子を決定するステップとを含み、
前記２つのオペランド指定子を決定する前記ステップは、前記１０ビットの符号化グループを復号して前記２つのオペランド指定子の各オペランド指定子の第１の部分を決定し、前記１０ビットの逐語的グループを逐語的に読み出して前記２つのオペランド指定子の各オペランド指定子の第２の部分を決定するステップを含む、請求項２８、２９、３０および３４のいずれか１項に記載の方法。
【請求項４０】
前記復号ユニットを操作して複数スレッドを実行するステップを含み、各スレッドは、命令のシーケンスを含み、前記復号された命令の少なくとも１つが、前記シーケンスのうちの１つの構成要素である、請求項２７に記載の方法。
【請求項４１】
前記少なくとも１つの命令は、前記複数スレッドの１つまたは複数のスレッドのスケジューリングを管理するためのスレッドスケジューリング命令である、請求項４０に記載の方法。
【請求項４２】
前記命令の少なくとも１つは、
イベントと関連付けられた条件を設定するためのセットイベント条件命令と、イベント条件と関連付けられたデータを設定するためのセット条件データ命令と、イベントと関連付けられた継続点ベクトルを設定するためのセットベクトル命令と、イベントソースがイベントを生成することを可能にするためのソースイベントイネーブル命令と、スレッドがイベントに反応することを可能にするスレッドイベントイネーブル命令のいずれかである、請求項２７に記載の方法。
【請求項４３】
前記復号ユニットを操作して、プレフィックス命令のオペランドを、次に実行される命令のオペランドと連結するステップを含む、請求項２７に記載の方法。
【請求項４４】
前記入力に６４ビット命令バッファから命令を受け取るステップを含む、請求項２７に記載の方法
【請求項４５】
２つのそれぞれの並列パイプラインを含む実行ユニットを同時に使用して少なくとも２つの１６ビット命令を実行するステップを含み、各パイプラインが請求項２７に記載の方法により操作される、請求項２７に記載の方法。
【請求項４６】
前記実行ユニットをデュアル発行モードで操作するかシングル発行モードで操作するかを選択するステップを含み、前記デュアル発行モードでは、前記実行ユニットは、２つの１６ビット命令を２つのそれぞれのパイプラインに単一サイクルで発行する働きをし、シングル発行モードでは、実行ユニットは、１つの１６ビット命令だけをパイプラインに単一サイクルで発行する働きをする、請求項４５に記載の方法。
【請求項４７】
前記パイプラインのうちの１つを操作して３２ビット命令を単一サイクルで実行する、請求項４５に記載の方法。
【請求項４８】
それぞれのスレッドに関するオペランドを、それぞれの組の１２個のオペランドレジスタに記憶するステップを含む、請求項４０に記載の方法。
【請求項４９】
前記プロセッサは、インタフェースプロセッサであり、前記プロセッサを使用して第１の外部装置と第２の外部装置を接続するステップを含む、請求項２７に記載の方法。
【請求項５０】
前記第１の外部装置が別のプロセッサであり、前記第２の外部装置が周辺装置である、請求項４９に記載のプロセッサ。
【請求項５１】
前記第１と第２の外部装置が両方とも他のプロセッサである、請求項４９に記載のプロセッサ。
【請求項５２】
前記命令の少なくとも１つは、
前記外部装置のうちの１つから前記インタフェースプロセッサにデータを入力するための入力命令と、前記インタフェースプロセッサから前記外部装置のうちの１つにデータを出力するための出力命令のいずれかである、請求項４９に記載のプロセッサ。
【請求項５３】
モバイルアプリケーションプロセッサ、少なくとも１つの周辺装置、およびモバイルアプリケーションプロセッサと周辺装置の間に接続されたインタフェースプロセッサを有し、前記インタフェースプロセッサが、プロセッサ内で命令を復号するための復号ユニットを有し、前記復号ユニットが、オペレーションコード復号ロジック、オペランド復号ロジック、および１６ビット入力を含むモバイル端末であって、
前記オペレーションコード復号ロジックは、前記入力の５ビットを使用してオペレーションコードを決定する働きをし、前記オペランド復号ロジックは、前記入力の残りの１１ビットから、可能な１２個の２進値のうちの１つをそれぞれ有する３つの４ビットオペランド要素を決定する働きをし、
前記オペランド復号ロジックは、前記１１ビットの符号化グループを復号して前記３つのオペランド要素の各オペランド要素の第１の部分を決定し、前記１１ビットの逐語的グループを逐語的に読み出して前記３つのオペランド要素の各オペランド要素の第２の部分を決定する働きをするモバイル端末。
【請求項５４】
相互接続プロセッサアレイにおいて、前記プロセッサのうちの少なくとも１つが、オペレーションコード復号ロジック、オペランド復号ロジック、および１６ビット入力を有し、プロセッサ内で命令を復号するための復号ユニットを有する相互接続プロセッサアレイであって、
前記オペレーションコード復号ロジックは、前記入力の５ビットを使用してオペレーションコードを決定する働きをし、前記オペランド復号ロジックは、前記入力の残りの１１ビットから、可能な１２個の２進値のうちの１つをそれぞれ有する３つの４ビットオペランド要素を決定する働きをし、
前記オペランド復号ロジックは、前記１１ビットの符号化グループを復号して３つのオペランド要素の各オペランド要素の第１の部分を決定し、前記１１ビットの逐語的グループを逐語的に読み出して前記３つのオペランド要素の各オペランド要素の第２の部分を決定する働きをする、相互接続プロセッサアレイ。
【請求項５５】
オペレーションコード復号ロジック、オペランド復号ロジック、および１６ビット入力を含み、命令を復号するための復号ユニットであって、
前記オペレーションコード復号ロジックは、前記入力の５ビットを使用してオペレーションコードを決定する働きをし、前記オペランド復号ロジックは、前記入力の前記残りの１１ビットから、可能な１２個の２進値のうちの１つをそれぞれ有する３つの４ビットオペランド要素を決定する働きをし、
前記オペランド復号ロジックは、前記１１ビットの符号化グループを復号して前記３つのオペランド要素の各オペランド要素の第１の部分を決定し、前記１１ビットの逐語的グループを逐語的に読み出して前記３つのオペランド要素の各オペランド要素の第２の部分を決定する働きをするプロセッサ。
【請求項５６】
プロセッサ内で命令を復号するための復号ユニットであって、
１６ビット入力手段と、
前記入力の５ビットを使用してオペレーションコードを決定するためのオペレーションコード復号手段と、
前記入力の残りの１１ビットから、可能な１２個の２進値のうちの１つをそれぞれ有する３つの４ビットオペランド要素を決定するためのオペランド復号手段と、を含み、
前記オペランド復号手段は、前記１１ビットの符号化グループを復号して前記３つのオペランド要素の各オペランド要素の第１の部分を決定し、前記１１ビットの逐語的グループを逐語的に読み出して前記３つのオペランド要素の各オペランド要素の第２の部分を決定する復号ユニット。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサの命令符号化に関し、詳細には複数の命令スレッドのインタフェーシング用途および管理に適した命令形式に関するがこれに限定されない。
【背景技術】
【０００２】
プロセッサ命令は、オペレーションコード部分とオペランド部分の２つの部分から成ると考えることができる。オペレーションコード部分内のオペレーションコードは、命令のタイプを定義し、プロセッサの実行ユニットによって復号されたときに、対応する演算（加算、減算、入出力など）をプロセッサに実行させる。オペランド部分は、１つまたは複数のオペランド指定子（operand specifier）を含む場合がある。そのようなオペランド指定子は、オペレーションコードによって定義された命令がある場合に、プロセッサのどのオペランドレジスタがその命令を実行すべきかを指定する。あるいはそれに加えて、オペランド部分は、「即時（immediate）」オペランド、すなわち指定されたレジスタから取り出されるのではなく命令のオペランド部分に直接含まれるオペランドを含む場合がある。命令がオペランドを何も含まない場合、オペランド部分は、使用されない場合もあり、あるいは追加のオペレーションコードを符号化するために使用される場合も多い。
【０００３】
命令が一般に所定のサイズまたは形式を有する場合は、プロセッサを設計するときにオペレーションコードのサイズとオペランド部分のサイズとをトレードオフをしなければならない。
【０００４】
小さいオペレーションコードを使用するときは、オペレーションコードビットの順列が限定されるので、限られた組の命令しか符号化できない。そのような命令セットは、通常、プロセッサの基本演算を実行する単純で低レベルのマシンコードだけを含むことになる。その結果、ソフトウェアでは複雑な演算を全体としてより低レベルの命令のシーケンスとして定義しなければならないので、１命令データ当たりに記憶できる演算が少なくなるので、コード密度が低下する。いくつかのあまり一般的でないプロセッサでは、小さなオペレーションコードを使用して少数のより複雑な命令を符号化することができ、それにより、複雑な演算がハードウェア内で実行され、専用命令によって呼び出される。しかしその一方で、使用できるオペレーションコードの数が限られると、プロセッサは、きわめて特殊化された組の演算しかできなくなる。いずれの場合も、小さなオペレーションコードは、命令セットのサイズを制限し、したがってプロセッサを制限する。しかしながら、小さなオペレーションコードを使用することは、命令においてオペランドに使用できるビットが多くなる場合があるという利点もある。
【０００５】
大きなオペレーションコードが使用されるときは、オペレーションコードビットの順列の数が増えるので、より多くのタイプの命令を符号化することができる。したがって、プロセッサ設計者は、種々様々な命令タイプを利用することができる。しかしながら、欠点は、命令においてオペランドに利用できるビットが少なくなることである。
【０００６】
したがって、オペレーションコードのサイズをオペランド部分のサイズと釣り合わせなければならないことが分かる。
【０００７】
例えば、図１は、１６ビットｉ［１５：０］を有する従来の命令形式を示す。１６個の命令ビットは、命令レジスタ５０から実行ユニットの復号ロジックにそれぞれ入力される。復号ロジックは、命令の４ビットオペレーションコード部分１０２を復号するオペレーションコード復号ロジック７０と、命令の３つのそれぞれのオペランド部分１０４、１０６および１０８から３つの４ビットオペランド指定子を決定するオペランド復号ロジック８０とを含む。この形式によれば、３つのオペランド指定子はそれぞれ、１組１６個のオペランドレジスタのうちソースオペランドを読み出すかまたはディスティネーションオペランドを記憶するオペランドレジスタを指定するために、０（００００）〜１５（１１１１）の値を取ることができる。
【０００８】
この従来の１６ビット型命令の問題は、１６個のオペランドレジスタと３個のオペランド指定子１０４、１０６および１０８を有する場合に、各命令の１２ビットｉ［１１：０］がオペランド指定子と共に取得されることである。これにより、命令オペレーションコード１０２用に４ビットｉ［１５：１２］しか残らず、これにより、異なる命令を１６個しか符号化できない。この問題を克服する既存の技術は、限定されたオペランド指定子（３ビットしか使用しないＡＲＭ  Ｔｈｕｍｂなど）を提供するか、ほとんどの命令に２つのレジスタオペランドだけを提供することが必要であった。他の解決策は、１６ビット命令形式から離れる必要がある。しかしながら、この解決策自体、命令サイズが従来通りのバイト数で表わされず、そうでない場合でも無駄に大きい２４または３２ビット命令を必要とするため、厄介な問題がある。
【０００９】
さらに、命令セットの複雑さが、プロセッサの速度に影響を及ぼす場合がある。大きな命令セットプロセッサは、複雑な演算を実行するために必要なコードが少ないので、小さな命令セットプロセッサより高速なことがある。しかしながら、実行ユニットの速度は、最も複雑な命令を復号する時間によって限定される。したがって、命令セット内にある余分な命令、未使用の命令、または無駄に複雑な命令が多すぎると、実際には大きな命令セットプロセッサの方が遅い場合がある。
【００１０】
さらに、大きな命令セットと比べて、小さな命令セットは、オペレーションコードを復号し実行するために実行ユニット内にあまり多くのハードウェアロジックを必要としないが、小さなセットは、通常、より多くのプログラムメモリを必要とし、またより多くのオペランドレジスタを使用する。したがって、命令セットのサイズは、特定の命令形式と関連して必要とされるオペランドレジスタ、復号ロジックおよびプログラムメモリに応じて、プロセッサのコスト、消費電力およびシリコン面積に関係する場合がある。
【００１１】
本発明の目的は、命令のオペレーションコードのサイズとそのオペランド部分のサイズとの好ましいバランスを求め、そのバランスを、オペレーションコードを所定の命令長に効率的に圧縮する一方で迅速に復号することができる符号化方式を使用して達成することである。本発明の特定の目的は、外部装置と接続するためにプロセッサで使用するのに好都合なバランスを求めることである。本発明の別の特定の目的は、複数のスレッドの実行を管理するためにプロセッサで使用するのに好都合なバランスを求めることである。
【発明の概要】
【課題を解決するための手段】
【００１２】
本発明の１つの態様によれば、オペレーションコード復号ロジック、オペランド復号ロジック、および１６ビット入力を含み、プロセッサ内で命令を復号する復号ユニットが提供され、オペレーションコード復号ロジックは、入力の５ビットを使用してオペレーションコードを決定する働きをし、オペランド復号ロジックは、入力のうち残りの１１ビットから、可能な１２個の２進値のうちの１つをそれぞれ有する３つの４ビットオペランド要素を決定する働きをし、またオペランド復号ロジックは、前記１１ビットの符号化グループを復号して３つのオペランド要素の各オペランド要素の第１の部分を決定し、前記１１ビットの逐語的グループを逐語的に読み出して３つのオペランド要素の各オペランド要素の第２の部分を決定する働きをする。
【００１３】
発明者は、説明された符号化部分と逐語的部分を使用するこの５ビットと１１ビットの分割が、インタフェースプロセッサ用と複数スレッドを処理するプロセッサ用の優れたコード密度を実現することを発見した。さらに、本発明は、迅速で効率的に復号できる命令形式を使用して比較的大きな命令セットを１６ビットに圧縮することができ有利である。後述するような更に他の実施形態は、コード密度と復号効率を改善する。
【００１４】
実施形態では、符号化部分は５ビットでよく、逐語的部分は６ビットでよく、各オペランド要素の第１の部分は２ビットでよく、各オペランド要素の第２の部分は２ビットでよい。
【００１５】
復号ユニットは、前記１１ビットのうちの少なくとも１つのビットをオペランド復号ロジックからオペレーションコード復号ロジックに分流する働きをするスイッチングロジックを含んでもよく、オペレーションコード復号ロジックは、前記５ビットと分流された少なくとも１ビットを使用してオペレーションコードを決定する働きをしてもよい。オペランド復号ロジックは、前記１１ビットのうちの残りのビットから少なくとも１つのオペランドを決定する働きをしてもよい。スイッチングロジックは、前記１１ビットが、前記３つの４ビットオペランド要素を符号化するのに使用されない値を有する場合に、前記少なくとも１ビットを分流するように構成されてもよい。スイッチングロジックは、前記５ビットが所定の値または範囲の値を有する場合に、前記少なくとも１ビットを分流するように構成されてもよい。
【００１６】
前記入力は、１６ビットの命令レジスタを含んでもよい。復号ユニットの入力は、６４ビット命令バッファから命令を受け取るように構成されてもよい。
【００１７】
前記オペランド要素の少なくとも１つは、１組１２個のオペランドレジスタのいずれかからオペランドレジスタを指定するオペランド指定子でよい。３つのオペランド要素はそれぞれ、前記組のいずれかからオペランドレジスタをそれぞれ指定するそれぞれのオペランド指定子を含んでもよい。３つのオペランド要素は、１つの即値オペランドと、前記組のいずれかから２つのオペランドレジスタをそれぞれ指定する２つのオペランド指定子とを含む。３つのオペランドは、３つのソースオペランドを含んでもよい。
【００１８】
３つのオペランド要素は、前記組のいずれかからそれぞれのソースオペランドレジスタを指定するためのそれぞれ即時ソースオペランドまたはソースオペランド指定子である２つのソースオペランド要素と、前記組のいずれかからディスティネーションオペランドレジスタを指定するための１つのディスティネーションオペランド指定子とを含んでもよく、復号ユニットは、ソースオペランドを処理し、前記処理の結果をディスティネーションオペランドレジスタに記憶することによって、含むオペレーションコードに従って対応する命令を実行する働きをしてもよい。
【００１９】
スイッチングロジックは、前記１１ビットのうちの１つのビットをオペランド復号ロジックからオペレーションコード復号ロジックに分流する働きをしてもよく、オペレーションコード復号ロジックは、前記５ビットと前記１つの分流ビットを使用してオペレーションコードを決定する働きをしてもよく、オペランド復号ロジックは、残りの１０ビットから、前記組の１２個のオペランドレジスタのいずれかからオペランドレジスタを指定するための可能な１２個の２進値のうちの１つをそれぞれ有する２つの４ビットオペランド指定子を決定する働きをしてもよく、オペランド復号ロジックは、前記１０ビットの符号化グループを復号して２つのオペランド指定子の各オペランド指定子の第１の部分を決定し、前記１０ビットの逐語的グループを逐語的に読み出して２つのオペランド指定子の各オペランド指定子の第２の部分を決定する働きをしてもよい。
【００２０】
復号ユニットは、命令のシーケンスをそれぞれ含む複数のスレッドを実行するように構成されてもよく、前記復号された命令のうちの少なくとも１つは、前記シーケンスのうちの１つのシーケンスの構成要素である。前記少なくとも１つの命令は、前記複数スレッドのうちの１つまたは複数スレッドのスケジューリングを管理するためのスレッドスケジューリング命令でよい。プロセッサは、複数組の１２個のオペランドレジスタを含んでもよく、各組は、前記スレッドのそれぞれに関するオペランドを記憶するように構成される。
【００２１】
前記命令の少なくとも１つは、イベントと関連付けられた条件を設定するためのセットイベント条件命令と、イベント条件と関連付けられたデータを設定するためのセット条件データ命令と、イベントと関連付けられた継続点ベクトルを設定するためのセットベクトル命令と、イベントソースがイベントを生成することを可能にするソースイベントイネーブル命令と、スレッドがイベントに反応することを可能にするスレッドイベントイネーブル命令のうちの１つでよい。
【００２２】
復号ユニットは、プレフィックス命令のオペランドを、後で実行された命令のオペランドと連結する働きをしてもよい。
【００２３】
実行ユニットは、２つのそれぞれの１６ビット命令を同時に並列に実行するように構成された少なくとも２つの並列パイプラインを含んでもよく、各パイプラインは、前述の命令のいずれかに従う復号ユニットを含んでもよい。実行ユニットは、デュアル発行モードとシングル発行モードで動作可能でよく、デュアル発行モードでは、２つのパイプラインが、２つのそれぞれの命令を同時に並列に実行し、シングル発行モードでは、常にパイプラインの一方だけが命令を実行する。２つのパイプラインは一緒に３２ビット命令を実行する働きをしてもよい。
【００２４】
プロセッサは、前述の命令にいずれかに従う復号ユニットまたは実行ユニットを含んでもよく、プロセッサは、前記スレッドのそれぞれに関するオペランドを記憶するようにそれぞれ構成された複数組の１２個のオペランドレジスタを含んでもよい。
【００２５】
プロセッサは、第１の外部装置と第２の外部装置を接続するためのインタフェースプロセッサでよい。第１の外部装置は、別のプロセッサでよく、第２の外部装置は周辺装置でよい。第１と第２の外部装置は、両方とも他のプロセッサでもよい。
【００２６】
前記命令の少なくとも１つは、前記外部装置のうちの１つから前記インタフェースプロセッサにデータを入力するための入力命令と、前記インタフェースプロセッサから前記外部装置のうちの１つにデータを出力するための出力命令のいずれかでよい。
【００２７】
本発明の別の態様によれば、オペレーションコード復号ロジックとオペランド復号ロジックと１６ビット入力とを含む復号ユニットを使用してプロセッサ内で命令を復号する方法が提供され、この方法は、オペレーションコード復号ロジックを操作して、入力の５ビットを使用するオペレーションコードを決定するステップと、オペランド復号ロジックを操作して、入力の残りの１１ビットから、可能な１２個の２進値のうちの１つをそれぞれ有する３つの４ビットオペランド要素を決定するステップとを含み、３つのオペランド要素を決定するステップが、前記１１ビットの符号化グループを復号して３つのオペランド要素の各オペランド要素の第１の部分を決定し、前記１１ビットの逐語的グループを逐語的に読み出して３つのオペランド要素の各オペランド要素の第２の部分を決定するステップを含む。
【００２８】
本発明の別の態様によれば、モバイルアプリケーションプロセッサと、少なくとも１つの周辺装置と、モバイルアプリケーションプロセッサと周辺装置の間に接続されたインタフェースプロセッサとを有するモバイル端末が提供され、インタフェースプロセッサは、プロセッサ内で命令を復号するための復号ユニットを有し、復号ユニットは、オペレーションコード復号ロジックと、オペランド復号ロジックと、１６ビット入力を含み、オペレーションコード復号ロジックは、入力の５ビットを使用してオペレーションコードを決定する働きをし、オペランド復号ロジックは、入力の残りの１１ビットから、可能な１２個の２進値のうちの１つをそれぞれ有する３つの４ビットオペランド要素を決定する働きをし、オペランド復号ロジックは、前記１１ビットの符号化グループを復号して３つのオペランド要素の各オペランド要素の第１の部分を決定し、前記１１ビットの逐語的グループを逐語的に読み出して３つのオペランド要素の各オペランド要素の第２の部分を決定する働きをする。
【００２９】
本発明の別の態様によれば、相互接続されたプロセッサのアレイが提供され、前記プロセッサの少なくとも１つは、プロセッサ内で命令を復号するための復号ユニットを有し、復号ユニットは、オペレーションコード復号ロジックと、オペランド復号ロジックと、１６ビット入力を有し、オペレーションコード復号ロジックは、入力の５ビットを使用してオペレーションコードを決定する働きをし、オペランド復号ロジックは、入力の残りの１１ビットから、可能な１２個の２進値のうちの１つをそれぞれ有する３つの４ビットオペランド要素を決定する働きをし、オペランド復号ロジックは、前記１１ビットの符号化グループを復号して３つのオペランド要素の各オペランド要素の第１の部分を決定し、前記１１ビットの逐語的グループを逐語的に読み出して３つのオペランド要素の各オペランド要素の第２の部分を決定する働きをする。
【００３０】
本発明の別の態様によれば、命令を復号するための復号ユニットを含むプロセッサが提供され、復号ユニットは、オペレーションコード復号ロジックと、オペランド復号ロジックと、１６ビット入力とを含み、オペレーションコード復号ロジックは、入力の５ビットを使用してオペレーションコードを決定する働きをし、オペランド復号ロジックは、入力の残りの１１ビットから、可能な１２個の２進値のうちの１つをそれぞれ有する３つの４ビットオペランド要素を決定する働きをし、オペランド復号ロジックは、前記１１ビットの符号化グループを復号して３つのオペランド要素の各オペランド要素の第１の部分を決定し、前記１１ビットの逐語的グループを逐語的に読み出して３つのオペランド要素の各オペランド要素の第２の部分を決定する働きをする。
【００３１】
本発明の別の態様によれば、プロセッサ内の命令を復号するための復号ユニットが提供され、復号ユニットは、１６ビット入力手段と、入力の５ビットを使用してオペレーションコードを決定するためのオペレーションコード復号化手段と、入力の残りの１１ビットから、可能な１２個の２進値のうちの１つをそれぞれ有する３つの４ビットオペランド要素を決定するためのオペランド復号手段とを含み、オペランド復号手段は、前記１１ビットの符号化グループを復号して３つのオペランド要素の各オペランド要素の第１の部分を決定し、前記１１ビットの逐語的グループを逐語的に読み出して３つのオペランド要素の各オペランド要素の第２の部分を決定するためのものである。
【図面の簡単な説明】
【００３２】
本発明をよりよく理解しどのように実施できるかを示すために、次に例として、対応する図面について言及する。
【図１】従来のＲＩＳＣ命令形式を示す図である。
【図２】インタフェースプロセッサの応用例を示す図である。
【図２Ａ】インタフェースプロセッサの応用例を示す図である。
【図３】例示的なプロセッサ構造を示す図である。
【図４】係るプロセッサの例示的なレジスタ構造を示す図である。
【図５】第１の例示的な命令形式を示す図である。
【図６】第２の例示的な命令形式を示す図である。
【図７】第３の例示的な命令形式を示す図である。
【図８】第４の例示的な命令形式を示す図である。
【図９】デユアル命令発行機能の例を示す図である。
【発明を実施するための形態】
【００３３】
本発明を有利に使用することができる応用例として、図２は、携帯電話のモバイルアプリケーションプロセッサ２と関連して使用されるインタフェースプロセッサ１４を示す。モバイルアプリケーションプロセッサ２は、複数の周辺装置８と通信する必要がある。アプリケーションプロセッサ２は、ＣＰＵ４と、複数の周辺装置８ｃ〜８ｌと通信するために必要な複数のポート７とを有する。モバイルアプリケーションプロセッサ２は、また、ハードドライブ（ＨＤＤ）８ａおよびＳＤＲＡＭメモリ８ｂと接続するためのメモリコントローラ６を含む。インタフェースコントローラ６とポート７は、一般に、バス３によってＣＰＵ４に接続される。システムは、また、電力コントローラ１０と無線プロセッサ１２を含む。
【００３４】
この例では、カメラ８ｃおよび液晶ディスプレイ８ｄと接続するための汎用ポート７ａおよび７ｂが提供され、マイクロフォン８ｅ、スピーカ８ｆおよびヘッドセット８ｇと接続するための汎用ポート７ｃが提供され、キーボード８ｈ、汎用シリアルバス（ＵＳＢ）デバイス８ｉ、セキュアデジタル（ＳＤ）カード８ｊ、マルチメディアカード（ＭＭＣ）８ｋおよび汎用非同期レシーバ／トランスミッタ（ＵＡＲＴ）デバイス８１と接続するための汎用ポート７ｄが提供される。
【００３５】
図２において、インタフェースプロセッサ１４ａ、１４ｂおよび１４ｃが、関連ポート７の出力側に配置されており、第１のインタフェースプロセッサ１４ａは、画像装置８ｃ〜８ｄと汎用ポート７ａ〜７ｂとの間に接続され、第２のインタフェースプロセッサ１４ｂは、音声装置８ｅ〜８ｇとポートｃとの間に接続されて、第３のインタフェースプロセッサ１４ｂは、ポート７ｄと様々な接続装置８ｈ〜８ｍとの間に接続されている。後述するように、アプリケーション固有の表示機能、音声機能および接続機能は、インタフェースプロセッサ１４ａ〜１４ｃによって実現されるので、ポート７は汎用ポートでよい。インタフェースプロセッサ１４ａは、ポート７ａおよび７ｂに接続されたポート２２ａおよび２２ｂと、外部装置８ｃおよび８ｇに接続されたポート２２ｃ、２２ｄ、２２ｅおよび２２ｆを有する。インタフェースプロセッサ１４ｂおよび１４ｃは、図２に示されていない類似のポートを有する。
【００３６】
インタフェースプロセッサは、通常、インタフェースを介してデータを転送するために使用される固有プロトコルを実施する機能、パラレル形式とシリアル形式間の変換を含むデータを再フォーマットする機能、場合によってはデータを符号化し、圧縮し、暗号化するなどのより高度な機能に関与する。
【００３７】
インタフェースプロセッサの別の用途は、図２Ａに示した多重プロセッサチップ２０２内のタイルとしてである。このチップ２０２は、チップ２０２上のプロセッサ１４間の通信を支援する高性能相互接続２０４と、システムを複数のチップから容易に構成できるようにするチップ間リンク２０６とを使用する。各プロセッサ１４は、ポート２２を介して、そのチップ間リンク２０６と高性能相互接続２０４に接続される。
【００３８】
インタフェースプロセッサ１４は、本発明による命令形式を使用し、この命令形式は、別のプロセッサ２と１つまたは複数の周辺装置８との間または複数のプロセッサ間を調停するために使用される様々な接続命令および入出力（Ｉ／Ｏ）命令を実施するように最適化されると好都合である。すなわち、命令形式は、そのような演算を実行するのに十分であるが余分でない数のオペレーションコードを提供し、同様に、十分であるが余分ではない数のオペランドまたはオペランドレジスタを指定するができる。また、命令は、迅速かつ効率的に復号することができ、必要な復号ロジックを減少させ、迅速なインタフェーシングを可能にする。
【００３９】
本発明の命令形式が持つ別の有利な特徴は、スレッドを管理する能力である。各プロセッサは、一連の命令をそれぞれ含むいくつかの同時プログラムスレッドを実行するためのハードウェア支援を有する。以下でより詳しく述べるように、ハードウェア支援には次のようなものがある。
−オペランドレジスタを含む各スレッド毎の１組のレジスタ。
−実行するスレッドを動的に選択するスレッドスケジューラ。
−入出力に使用される１組のポート（ポート２２）。
−レジスタ間にチャネルを確立するための相互接続システム。
−実時間実行を制御する１組のタイマ。
−入出力をクロックするための１組のクロックジェネレータ。
【００４０】
本発明の命令形式は、また、適切な命令セットとオペランドレジスタがスレッドの初期化、終了、開始および停止を支援することと、ポートを介した入出力とチャネルを介したスレッド間通信を提供することを可能にする。
【００４１】
各プロセッサ上で小さな１組のスレッドを使用して、通信または入出力が、プロセッサによって処理される他の保留タスクと一緒に進行することを可能にし、また幾つかのスレッドを継続させながら同時に他のスレッドをサスペンドしてリモートインタフェースプロセッサとの間の通信を保留することによって相互接続における待ち時間を隠すことができる。
【００４２】
図３は、本発明の一実施形態によるインタフェースプロセッサ１４の例示的な構造を概略的に示す。プロセッサ１４は、スレッドスケジューラ１８の制御下で命令のスレッドを実行する実行ユニット１６を含む。ランダムアクセスメモリ（ＲＡＭ）２４は、バス１３によって実行ユニットに接続され、プログラムコードおよび他のデータを保持する。また、プロセッサ１５は、クロックおよびタイマ（図示せず）と、ブートコードなどの永久情報を記憶するための読み出し専用メモリ（ＲＯＭ）（やはり図示せず）を含む。
【００４３】
スレッドスケジューラ１８により検討中のｍ個のスレッドはそれぞれ、スレッドスケジューラ１８がアクセスするレジスタ２０のバンク内のそれぞれの組のスレッドレジスタ２０ｉ．．．２０ｍによって表される。また、メモリ２４からフェッチされた命令を実行ユニット１６に発行する前に、その命令を一時的に保持するための命令バッファ（ＩＮＳＴＲ）１９も提供される。
【００４４】
図４は、スレッドに関する情報を記憶するために使用されるスレッドレジスタ２０の例示的なバンクを示す。バンク２０は、複数組のレジスタを含み、各組は、スレッドスケジューラ１８が現在検討中のそれぞれのスレッドＴ1〜Ｔmに対応する。この好ましい例では、各スレッドの状態は、２個の命令レジスタ、４個のアクセスレジスタ、および１２個のオペランドレジスタの合計１８個のレジスタによって表わされる。それらのレジスタは次の通りである。
命令レジスタ：
−ＰＣはプログラムカウンタである。
−ＳＲは状態レジスタである。
アクセスレジスタ：
−ＧＰはグローバルプールポインタである。
−ＤＰはデータポインタである。
−ＳＰはスタックポインタである。
−ＬＲはリンクレジスタである。
オペランドレジスタ：ＯＰ１．．．ＯＰ１２
命令レジスタは、スレッドの状態に関する、スレッドの実行を制御する際に使用される情報を記憶する。詳細には、スレッドがイベントまたは割り込みを受け入れる能力は、スレッド状態レジスタＳＲに保持された情報によって制御される。状態レジスタＳＲは、後で更に詳しく述べるように、スレッドがシングル命令モードかデュアル命令モードかに関する情報を含む場合もある。アクセスレジスタは、プロシージャのローカル変数に使用されたスタックポインタ、プロシージャ間で共用されるデータに通常使用されるデータポインタ、および、大きな定数及びプロシージャエントリポイントにアクセスするために使用される一定のプールポインタとを含む。オペランドレジスタＯＰ１．．．ＯＰ１２は、算術および論理演算を実行し、データ構造にアクセスし、サブルーチンを呼び出す命令によって使用される。相互接続システム４２は、オペランドレジスタの組の間で、好ましくはある組のオペランドレジスタから別の組のオペランドレジスタにデータを転送するための１つまたは複数のチャネルを提供する。
【００４５】
また、スレッドの実効命令を一時的に記憶するためのいくつかの命令バッファ（ＩＮＳＴＲ）１９も提供される。各命令バッファは、好ましくは各命令が１６ビット長で１バッファ当たり４つの命令を可能にする６４ビット長であることが好ましい。命令は、スレッドスケジューラ１８の制御下でプログラムメモリ２４からフェッチされ、一時的に命令バッファ１９に入れられる。
【００４６】
実行ユニットは、レジスタ２０とバッファ１９のそれぞれにアクセスする。さらに、スレッドスケジューラ１８は、各スレッド毎に少なくとも状態レジスタＳＲにアクセスする。
【００４７】
スレッドスケジューラ１８は、実行ユニット１６が実行すべきスレッドを動的に選択する。従来、スレッドスケジューラの機能は、単に、プロセッサが完全に占有されたままになるようにプログラムメモリからのスレッドをスケジューリングすることである。しかしながら、本発明によれば、スレッドスケジューラ１８によるスケジューリングは、ポート２２、チャネル、クロックおよびタイマのアクティビティと関連付けられる。ポート、チャネル、クロックおよびタイマは、一般に、本明細書では「資源」と呼ばれる。この点で、資源におけるアクティビティの結果としてスレッドが実行可能になるときの遅延を最小にするために、スレッドスケジューラが様々な資源２２に直接結合されてもよいことに注意されたい。
【００４８】
スレッドスケジューラ１８は、ｍ個のスレッドのうち、「実行（run）」と呼ばれる１組ｎ個の実行可能スレッドを維持し、その実行可能スレッドから、好ましくはラウンドロビン方式で次々に命令を取り出す。スレッドが継続できないとき、そのスレッドは、実行セットから除外されることによりサスペンドされる。この理由は、例えば、スレッドが以下のタイプのアクティビティのうちの１つ又は複数を待っているからである。
−レジスタが、実行できる前に初期化されている。
−レジスタが、準備ができていないポート又はデータが利用可能でないポートから入力を試みた。
−レジスタが、準備ができていないポート又はデータの余地のないポートへの出力を試みた。
−所定の資源の特定の条件が満たされたときに生成される可能性のある１つまたは複数のイベントを待機させる命令を実行した。
【００４９】
スレッド内で入力または出力命令に遭遇するか、チャネルの関連ポートの準備ができていないとき、スレッドスケジューラは、ポートまたはチャネルからレディ信号を受け取るまで実行セットからスレッドを除外してスレッドを休止する。例えば、ポートまたはチャネルが、入力する準備のできたデータがない場合がり、ポートまたはチャネルの出力バッファが満杯で出力に利用できない場合もある。ポートまたはチャネルと関連付けられたロジックは、そのポートまたはチャネルが準備ができているかどうかをスレッドスケジューラに示すために、レディフラグをアサートまたはデアサートする。
【００５０】
入力または出力命令が実行される前にポートまたはチャネルの準備ができている場合は、休止することなく入力または出力が完了する。
【００５１】
スレッドは、イベントを処理するように資源をセットアップすることもできる。これを達成するために、スレッドは、実行されたときに、スレッド識別子、継続点ベクトルおよび条件を当該の資源に提供する命令を含む。スレッド識別子は、イベントが関連付けられたスレッドを識別し、継続点ベクトルは、イベントが生じた後で引き続き実行すべきコード内のポイントを識別し、条件は、検出されるべきイベントのタイプを定義する。さらに、別の命令が、必要に応じて、条件と関連付けられた条件データを送ってもよい。各資源は、スレッド識別子、継続点ベクトル、条件および条件データを記憶するための関連レジスタを有する。例えば、当該の資源がポートの場合、イベントは、ある特定のデータをポートで受け取ったことでもよい。この場合、条件は、イベントを入力イベントとして定義し、条件データは、検出される特定のデータを指定し、継続点ベクトルは、そのデータを処理するのに適したコードの始まりを指定する。資源がタイマの場合、イベントは、タイマが特定の値に達したことでもよく、あるいは資源がクロックの場合、イベントは、特定のクロックエッジが検出されたことでもよい。
【００５２】
イベントがセットアップされた後、スレッドは、待機命令を実行し、イベントが生じるまで実行セットからそのスレッドを除外することによってサスペンドされる。各資源は、資源で生じるアクティビティを条件と比較するロジックを有する。アクティビティが条件と一致するとき、このロジックは、イベントが生じたことを示すために、スレッド識別子をスレッドスケジューラに戻し、継続点ベクトルを実行ユニットに戻す。次に、スレッドは、実行セットに再び導入することにより再開される。
【００５３】
待機命令が実行される前に条件が満たされた場合、スレッドは、サスペンドされずに継続する。
【００５４】
更に他のイベント処理命令には、イベントを生成する資源をイネーブルしディスエーブルするための命令、スレッドがイベントを受け入れることをイネーブルしディスエーブルするための命令、および資源をスレッドに割り当てるための命令と、割り当てられた資源を解放するための命令がある。更に他のスレッド処理命令には、種々のスレッドレジスタに読み書きするための命令がある。
【００５５】
本発明による命令セットは、入出力とイベントを処理するための命令に加えて、スレッドを初期化するための命令、並びに算術演算、分岐、割り込み、例外、トラップ、デバッグ、処理スタック、プールなどのためのより通常のタイプの命令を必要とする場合がある。そのような従来のタイプの命令は、当業者にはよく知られている。
【００５６】
以下では、前述のスレッドスケジューリング、入出力、イベント処理などのプロセッサを操作するための他の命令に対応することができる命令セットと関連した、前述の１２個のレジスタアーキテクチャに特に適した命令形式について説明する。
【００５７】
図５は、本明細書では「形式Ｉ」と呼ばれる本発明による３オペランド命令形式を、いくつかの関連付けられた復号ロジック７２、８２、８４および９０の回路例と共に示す。
【００５８】
命令形式は、ｉ［１５：０］で示された１６個のビットを有する。命令の５ビットｉ［１５：１１］はオペレーションコード５０２であり、１１ビットｉ［１０：０］はオペランド部分である。オペランド部分ｉ［１０：０］は、最大３個のオペランド指定子を含むことができる。３個の４ビットオペランド指定子ｘ［３：０］、ｙ［３：０］およびｚ［３：０］が、命令の１１ビットオペランド部分ｉ［１０：０］に符号化される。例えば、ｙとｚがそれぞれソースオペランドレジスタを指定し、ｘがディスティネーションオペランドレジスタを指定してもよい。
【００５９】
各オペランド指定子ｘ、ｙおよびｚの２ビットは、以下のように命令から単純に「逐語的（verbatim）」に読み出される。これらの逐語的な２ビット部分は、図５では５０６、５０８および５１０と示される。
x[1:0]=i[5:4]
y[1:0]=i[3:2]
z[1:0]=i[1:0]
他の２ビットの各オペランド指定子ｘ、ｙおよびｚ（合計６ビット）は、図５では５１０と示されたオペランド部分ｉ［１０：６］の残りの５ビットから復号されなければならない。復号例を以下に示す。復号は、ハードウェアロジックで実施されることが好ましいが、原理上はアルゴリズムまたは参照テーブルで実施されてもよい。
オペランド指定子ビットｉ［１０：６１］    オペランド番地への復号
00000  x[3:2]=00, y[3:2]=00, z[3:2]=00
00001  x[3:2]=00, y[3:2]=00, z[3:2]=01
00010  x[3:2]=00, y[3:2]=00, z[3:2]=10
00011  x[3:2]=00, y[3:2]=01, z[3:2]=00
00100  x[3:2]=00, y[3:2]=01, z[3:2]=01
00101  x[3:2]=00, y[3:2]=01, z[3:2]=10
00110  x[3:2]=00, y[3:2]=10, z[3:2]=00
00111  x[3:2]=00, y[3:2]=10, z[3:2]=01
01000  x[3:2]=00, y[3:2]=10, z[3:2]=10
01001  x[3:2]=01, y[3:2]=00, z[3:2]=00
01010  x[3:2]=01, y[3:2]=00, z[3:2]=01
01011  x[3:2]=01, y[3:2]=00, z[3:2]=10
01100  x[3:2]=01, y[3:2]=01, z[3:2]=00
01101  x[3:2]=01, y[3:2]=01, z[3:2]=01
01110  x[3:2]=01, y[3:2]=01, z[3:2]=10
01111  x[3:2]=01, y[3:2]=10, z[3:2]=00
10000  x[3:2]=01, y[3:2]=10, z[3:2]=01
10001  x[3:2]=01, y[3:2]=10, z[3:2]=10
10010  x[3:2]=10, y[3:2]=00, z[3:2]=00
10011  x[3:2]=10, y[3:2]=00, z[3:2]=01
10100  x[3:2]=10, y[3:2]=00, z[3:2]=10
10101  x[3:2]-10, y[3:2]=01, z[3:2]=00
10110  x[3:2]=10, y[3:2]=01, z[3:2]=01
10111  x[3:2]=10, y[3:2]=01, z[3:2]=10
11000  x[3:2]=10, y[3:2]=10, z[3:2]=00
11001  x[3:2]=10, y[3:2]=10, z[3:2]=01
11010  x[3:2]=10, y[3:2]=10, z[3:2]=10
11011  Alt
11100  Alt
11101  Alt
11110  Alt
11111  Alt
従って、上記の方式を使用することにより、オペランド指定子ｘ［３：０］、ｙ［３：０］およびｚ［３：０］はそれぞれ、０（００００）〜１１（１０１１）の値を取り出して、それぞれ以下の１２個のオペランドレジスタのどれかを指定することができる、
オペランドレジスタ   番地
OP1 0000
OP2 0001
OP3 0010
OP4 0011
OP5 0100
OP6 0101
OP7 0110
OP8 0111
OP9 1000
OP10 1001
OP11 1010
OP12 1011
必要に応じて、代りに値ｘ、ｙおよびｚのうちのいくつかまたはすべてを使用して即値オペランドを提供してもよく、すなわち、指定されたレジスタから取り出されるのではなくオペランド自体が命令内に直接符号化されてもよい。好ましい形式では、１つのオペランド指定子だけを即値オペランドと置き換えることができる。指定子と同様に、即値オペランドは、範囲０〜１１内でなければならない。値ｘ、ｙおよびｚはそれぞれ、オペランド指定子または即値オペランドを指すために、本明細書では総称的に「オペランド要素」と呼ばれる場合がある。
【００６０】
復号ロジックは、スイッチングロジック９０、オペレーションコード復号ロジック７２、オペランド復号ロジック８２、８４を含む。復号ロジックは命令レジスタ５０から命令を受け取る。命令レジスタ５０は、命令バッファ１９から命令をフェッチする独立した１６ビットレジスタでもよく、命令レジスタ自体は、命令バッファ１９の一部でもよい。
【００６１】
形式Ｉを復号するために、スイッチングロジック９０は、ビットｉ［１５：１１］をオペレーションコード復号ロジック７２に供給する働きをする。また、スイッチングロジック９０は、符号化したオペランドビットｉ［１０：６］をオペランド復号ロジックの復号部分８２に送り、逐語的ビットｉ［５：０］をオペランド復号ロジックの結合部分８４に直接提供する働きをする。オペランド復号ロジックの復号部分８２は、符号化ビットｉ［１０：６］を復号してｘ［３：２］、ｙ［３：２］、ｚ［３：２］を決定する働きをする。オペランド復号ロジックの結合部分８４は、ｘ［３：２］をｘ［１：０］と組み合わせ、ｙ［３：２］をｙ［１：０］と組み合わせ、ｚ［３：２］をｚ［１：０］を組み合わせる働きをする。オペレーションコード復号ロジック７２は、オペレーションコードに従って、指定されたオペランドレジスタおよび／または即値オペランドを処理する働きをする。
【００６２】
１スレッド当たり１２個のレジスタしかないので、オペランド指定子ｘ［３：０］、ｙ［３：０］およびｚ［３：０］はそれぞれ、０（００００）〜１１（１０１１）の値をとるだけでよい。これは、５ビットｉ［１０：６］、すなわちオペランド部分の復号部分が、０（０００００）〜２６（１１０１０）の範囲を有するだけでよいことを意味する。これにより、５つの値は範囲２７（１１０１１）〜３１（１１１１１）内のままになり、これは、上で「Ａｌｔ」と示され、説明した３オペランド形式では未使用である。本発明の有利な実施形態によれば、これらの５つの値を使用して、代替形式に従って命令を復号することができる。
【００６３】
例えば、図６は、本明細書で「形式ＩＩ」と呼ばれる本発明による代替の２オペランド命令形式を示す。この代替形式に重要なことは、スイッチングロジックが、５ビット部分ｉ［１０：６］を範囲２７（１１０１１）〜３１（１１１１１）として認識するように構成されることである。これにより、スイッチングロジック９０は、命令を形式ＩＩとして認識し、ビットを形式Ｉの代替方式で復号ロジックに供給する。
【００６４】
形式ＩＩによれば、ビットｉ［１５：１１］およびｉ［４］は、図６に６０２と示したオペレーションコードである。したがって、６ビットオペレーションコードを作成するために、オペランドに通常使用されるビットのうちの１つが代用される。２個の４ビットオペランド指定子ｘ［３：０］およびｙ［３：０］は、ビットｉ［１０：５］およびｉ［３：０］から復号される。各オペランド指定子ｘおよびｙからの２ビットは、以下のように命令から逐語的に読み出される。これらの逐語的２ビット部分は、図６で６０６と６０８と示されている。
x[1:0]=i[3:2]
y[1:0]=i[1:0]
各オペランド指定子ｘおよびｙの他の２ビット（合計４ビット）は、オペランド部分ｉ［１０：５］の残りの６ビットから復号されなければならず、図６では６０４と示される。ｉ［１０：６］が、形式ＩＩの２７（１１０１１）〜３１（１１１１１）でしか有効でなく、過剰ビット（extra bit）ｉ［５］が含まれるときは可能な値は１０個だけになることに注意されたい。例示的な復号を以下に示す。
オペランド指定子ビットｉ［１０：５］      オペランド番地への復号
110110 x[3:2]=00, y[3:2]=00
111000 x[3:2]=00, y[3:2]=01
111010 x[3:2]=00, y[3:2]=10
111100 x[3:2]=01, y[3:2]=00
111110 x[3:2]=01, y[3:2]=01
110111 x[3:2]=01, y[3:2]=10
111001 x[3:2]=10, y[3:2]=00
111011 x[3:2]=1O, y[3:23=01
111101 x[3:2]=10, y[3:2]=10
111111 Alt
したがって、オペランド指定子ｘ［３：０］およびｙ［３：０］はそれぞれ、上記の１２個のオペランドレジスタのどれかそれぞれ指定するために０（００００）〜１１（１０１１）の値を取ることができる。
【００６５】
必要に応じて、オペランド指定子ｘおよびｙのいずれかまたは両方を、即値オペランドと置き換えてもよい。好ましい形式では、一方のオペランド指定子だけを即値オペランドと置き換えることができる。この場合も、この即値オペランドは、範囲０〜１１内でなければならない。
【００６６】
形式ＩＩを復号するために、スイッチングロジック９０は、ビットｉ［１５：１１］およびｉ［４］をオペレーションコード復号ロジック７２に提供する働きをする。また、スイッチングロジック９０は、また、符号化されたオペランドビットｉ［１０；６］およびｉ［５］をオペランド復号ロジックの復号部分８２に送り、逐語的ビットｉ［３：０］オペランド復号ロジックの結合部分８４に直接提供する働きをする。オペランド復号ロジックの復号部分８２は、符号化されたビットｉ［１０：６］ｉ［５］をｘ［３：２］、ｙ［３：２］、ｚ［３：２］に復号する働きをする。オペランド復号ロジックの結合部分８４は、ｘ［３：２］をｘ［１：０］と組み合わせ、ｙ［３：２］をｙ［１：０］と組み合わせ、ｚ［３：２］をｚ［１：０］と組み合わせる働きをする。オペレーションコード復号ロジック７２は、オペレーションコードに従って、指定されたオペランドレジスタおよび／または即値オペランドを処理する働きをする。
【００６７】
１スレッド当たり１２個のレジスタしかないので、オペランド指定子ｘ［３：０］およびｙ［３；０］は、０（００００）〜１１（１０１１）から値を取るだけでよい。すなわち、６ビットｉ［１０：５］、すなわちオペランド部分の復号部分は、前述の「Ａｌｔ」と示された形式ＩＩの値１１１１１１１を利用しない。この値を使用して、別の代替形式に従って命令を復号してもよい。
【００６８】
例えば、図７は、本明細書で「形式ＩＩＩ」と呼ぶ本発明による代替１オペランド命令形式を示す。この特定の代替形式に重要なことは、スイッチングロジックが、５ビット部分ｉ［１０：６］を３１（１１１１１）として認識し、ビットｉ［５］を１（１）として認識するように構成されることである。これにより、スイッチングロジック９０は、命令を形式ＩＩＩと認識し、これに従ってビットを復号ロジックに提供する。
【００６９】
部分ｉ［１０：５］は、図７で７０４と示される。６ビットオペレーションコードは、ビットｉ［１５：１１］およびｉ［４］であり、図７に７０２と示される。オペランド指定子ｘ［３：０］は、図７で７０６と示されたビットｉ［３：０］から逐語的に読み出され、前述の１２個のオペランドレジスタのうちの１つを指定するために範囲０（００００）〜１１（１０１１）にある。あるいは、オペランド指定子ｘは、範囲０〜１１の即値オペランドによって置き換えられてもよい。
【００７０】
形式ＩＩＩを復号するために、スイッチングロジック９０は、ビットｉ［１５：１１］とｉ［４］をオペレーションコード復号ロジック７２に提供する働きをする。また、スイッチングロジック９０は、結合または復号する必要なしに逐語的ビットｉ［３：０］を直接提供する働きをする。オペレーションコード復号ロジック７２は、オペレーションコードに従ってオペランドレジスタまたは即値オペランドを処理する働きをする。
【００７１】
１スレッド当たり１２個のレジスタしかないので、ビットｉ［３：０］は、形式ＩＩＩでは範囲１２（１１００）〜１５（１１１１）を使用しない。これらの値を使用して、更に別の代替形式に従って、命令を復号することができる。
【００７２】
例えば、図８は、本明細書で「形式ＩＶ」と呼ぶ本発明による代替０オペランド命令形式を示す。ここで、ビットｉ［１５：１１］およびｉ［４］は、８０２と示されたオペレーションコードであり、ビットｉ［１０：６］は３１（１１１１１）であり、ビットｉ［５］は、一緒に８０４と示された１（１）であり、ビットｉ［３：０］は、８０６と示された範囲１２（１１００）〜１５（１１１１）内のどれでもよい。スイッチングロジック９０は、ビットｉ［１０：５］およびｉ［３：０］をこの範囲内にあると認識し、従って、ビットｉ［１５：１１］およびｉ［４］を復号ロジックのオペレーションコード復号部分７２に提供するように構成される。
【００７３】
前述の形式Ｉ−ＩＶの体系と異なる他の命令形式を符号化することができる。例えば、本明細書で「形式Ｖ」、「形式ＶＩ」、「形式ＶＩＩ」および「形式ＶＩＩＩ」と呼ぶ複数の形式はそれぞれ、５ビット以上のオペレーションコードを使用する。これを行うために、スイッチングロジック９０は、最初に、上位５ビットｉ［１５：１１］を特定の所定の値または範囲の値であると認識し、それにより、復号ロジック７２、８２、８４および９０は、命令を、形式Ｉ−ＩＶの代わりに代替形式Ｖ−ＶＩＩＩのうちの特定の１つの形式に従って復号する。具体的には、スイッチングロジックが、ビットｉ［１５：１１］を特定の値または特定の範囲の値を有すると認識したとき、少なくともビットｉ［１０］と場合によってはさらに他のビットｉ［９．．．］を、オペランド復号部分８２および８４の代わりにオペレーションコード復号部分７２に提供することが知られている。
【００７４】
形式Ｖは、１つのレジスタ指定子と１つの即値オペランドを含む。ビットｉ［１５：１０］はオペレーションコードであり、ビットｉ［９：６］はレジスタ指定子であり、ビットｉ［５：０］は即値オペランドである。形式Ｖでは、ビットｉ［９：６］は、０（００００）〜１５（１１１１）の全範囲を取ることができ、したがって、１６個のレジスタＧＰ、ＤＰ１  ＳＰ、ＬＲ、およびＯＰ１．．．ＯＰ１２のうちのどのレジスタも処理することができる。レジスタＧＰ、ＤＰ、ＳＰおよびＬＲをそれぞれ、例えば１１００、１１０１、１１１０および１１１１とアドレス指定してもよい。したがって、形式Ｖの命令は、例えばスタックとプールを処理するためにスレッドのレジスタのうちの他のものを処理することができる。
【００７５】
形式ＶＩは、ビットｉ［９：６］が範囲０（００００）〜１１（１０１１）に制限されることを除き形式Ｖと同じであり、したがって、レジスタ指定子は、オペランドレジスタＯＰ１〜ＯＰ１２のいずれかを指定するだけでよい。
【００７６】
形式ＶＩＩは、１０ビットオペレーションコードと６ビットの即値オペランドを有する。ビットｉ［１５：６］はオペレーションコードであり、ビットｉ［９：６］は、範囲１２（１１００）〜１５（１１１１）である。ビットｉ［５：０］は、即値オペランドである。
【００７７】
形式ＶＩＩＩは、６ビットオペレーションコードと１０ビットの即値オペランドを有する。ビットｉ［１５：１０］はオペレーションコードであり、ビットｉ［９：０］は即値オペランドである。
【００７８】
スイッチングロジック９０に関して、決して交換されないｉ［１５：１１］のようないくつかのビットは、図６〜図９に示したようなスイッチングロジック９０を通らずに、命令レジスタ５０からオペレーションコード復号部分７２に直接提供されてもよいことに注意されたい。しかしそれにもかかわらず、実施形態では、スイッチングロジック９０は、形式Ｖ〜ＶＩＩＩのうちのいずれかに従って命令が復号されることを検出するために、ビットｉ［１５：１１］のうちの少なくともいくつかを読み出すことができなければならない。
【００７９】
好ましい実施形態によれば、実行ユニットは、プレフィックス命令（prefix instruction）を使用することができる。プレフィックスは、即値オペランドの範囲を拡張し、より多くのレジスタ間演算、またはより多くのオペランドを有するレジスタ間演算を提供するために使用される。プレフィックス命令は、コンパイラとアセンブラによって自動的に挿入される。プレフィックス命令は、以下の通りである。
ＰＦＩＸ  この命令は、その１０ビット即値オペランドをその後の１６ビット命令の即値オペランドと連結する。これは、形式ＶＩＩＩである、
ＥＯＰＲ  この命令は、その１１ビットオペランド部分をその後の命令と連結する。この命令は、単純にオペレーションコードとしてビットｉ［１５：１１］と即値オペランドとしてビットｉ［１０：０］を有する別の形式を有する。
【００８０】
別の好ましい特徴は、図９に示したようにデュアル命令発行である。ここで、実行ユニット１６は、実際に、少なくとも２つの並列実行ユニット、好ましくは並列パイプライン１６ａおよび１６ｂを含む。実行ユニットは、それぞれ前述のような形式の２つの１６ビット命令を２つのそれぞれのパイプライン１６ａ、１６ｂに発行できる発行ロジック６０を含む。図２〜図４に関して説明したようなプロセッサでは、デュアル発行機能は、クロックレートを高めることなく用途により性能を５０％〜９０％高めることができる。プログラムメモリの使用では最大２５％のオーバヘッドがある。
【００８１】
２つのパイプラインは、異なる性能を有することが好ましい。パイプライン１６ａによって実行される第１の命令は、算術論理演算ユニット（ＡＬＵ）型命令、メモリアクセス命令、または分岐命令のいずれかでもよい。パイプライン１６ｂによって実行される第２の命令は、ＡＬＵ型命令または入出力命令のいずれでもよい。これは、追加のデコーダと追加のＡＬＵを必要とするだけでなく、単一のパイプラインがメモリアクセス命令と資源命令の両方を処理する必要がないので、複雑さを小さくし好都合である。さらに、プロセッサは、２つの１６ビット命令の各対の依存性確認を行う必要がなく、その理由は、コンパイラが、それらの対の間の依存性がないように対に割り当てるからである。
【００８２】
利用可能な命令セットは、２つの命令長に基づく。１６ビット命令、すなわち「短い」命令は、最大２つのソースオペランドと最大１つのディスティネーションオペランドを有する。これらの完全なセットは、汎用コード内で一般に使用される命令をすべて符号化する。３２ビット命令、すなわち「長い」命令は、最大４つのソースオペランドと最大２つのディスティネーションオペランドを有する。これらは、（長い即値オペランドを有するものを含む）汎用コード内のあまり一般的でない命令を符号化し、またアプリケーション固有のコードのパフォーマンスを大幅に高めるいくつかのマルチオペランド命令を符号化する。
【００８３】
デュアル発行は、サイクルごとに、１対の１６ビット命令５０を２つの並列パイプラインに発行するか、単一の３２ビット命令を１つのパイプラインに発行することによって動作する。シングル発行の場合、単一の１６ビットが、単純に、適切なパイプラインに発行される。例えば、全ての資源命令が、第２のパイプライン１６ｂにルーティングされてもよい。デュアル発行を実行するとき、分岐オフセットは、３２ビットオフセットとして解釈され、常に、１対の１６ビット命令または単一の３２ビット命令に分岐する。
【００８４】
スレッド状態レジスタ（ＳＲ）内のフラグは、スレッドがデュアル発行またはシングル発行かを判定するために使用される。発行ロジック６０は、各組のスレッドレジスタ２０からＳＲレジスタにアクセスし、シングル発行モードまたはデュアル発行モードに従って命令５０を発行するように構成される。したがって、状態レジスタＳＲによって、スレッドスケジューラ１８によって検討されているスレッドＴのいくつかは常にシングル発行モードでよく、同時にその他のスレッドはデュアル発行モードでよい。これにより、複数スレッドの管理の融通性を高めることができ好都合である。実施形態では、同じスレッドに関してデュアル発行とシングル発行の間で制御を移行できなくてもよい。
【００８５】
コードスケジューラによってデュアルコードがアセンブラで作成され、その結果、デュアルコードは、コンパイルされたソフトウェアとハンドコード化された（hand coded）ソフトウェアを最適化する。このコードは、通常の実行より大きいが、プログラムオフセットの範囲が大きすぎるので、再配列と「ノーオペレーション」命令のパディング以外の変更が不要になる（ノーオペレーション命令は、スケジューラスレッドがその命令バッファ内に命令を有しないときに発行される）。
【００８６】
プログラムメモリ２４は、並列にアクセスできる２つのバンクとして実施されてもよい。一方のバンクは、偶数番号のアドレスを保持し、他方は奇数番号のアドレスを保持する。命令フェッチは、常に、６４ビットをフェッチする（命令バッファ１９はそれぞれ６４ビット幅である）。３２ビット命令と、１６ビット命令の対は、メモリ内の３２ビット境界に位置合わせされなければならない。デュアルプログラムアドレスはすべて３２ビットで位置合わせされ、プログラムオフセットはすべて２倍ではなく４倍にされる。この配列は、命令フェッチのように両方のメモリバンクを使用してメモリアクセス命令を実行させることによって、６４ビット実装にも有効である。６４ビットデータ型の利点を除き性能には差がないことがある。
【００８７】
デュアル命令発行を支援する他の機能は、性能への影響が無視できるほどしかない４つの読み出しポートと２つの書き込みポートを支援するレジスタファイルを使用することと、２回以上トラップを立ち上げる状況を一度で処理することができるようにトラップ処理を修正することを必要とすることがある。この二重トラップ処理は、トラップが対のうちの第１の命令によって立ち上げられたか第２の命令によって立ち上げられたかを示す状態レジスタＳＲ内のビットによって達成することができる。両方の命令がトラップを立ち上げる場合、それらの命令が１つずつトラップを処理することができる。
【００８８】
以下は、本発明に従って符号化することができる３個、２個、１個および０個のオペランド命令の例である。以下で使用される略語「ｒｅｇ」は、レジスタを指し、「ｏｐ  ｒｅｇ」はオペランドレジスタを指し、「ｉｍｍ」は即値オペランドを指し、「ｄｅｓｔ」はディスティネーションオペランドレジスタを指す。
ADDI dest, source, constant      ソースを定数に加える（２つのｏｐ  ｒｅｇと４ビットｉｍｍ）
MUL dest, sourcel , source2      ソース１とソース２を掛ける（３つのｏｐ  ｒｅｇ）
LSU dest, sourcel , source2      符号なし未満（３つのｏｐ  ｒｅｇ）
STW data, base offset     データをメモリに記憶する（３つのｏｐ  ｒｅｇ）
LDW data, base, offset    メモリからデータをロードする（３つのｏｐ  ｒｅｇ）
LDWSP data, offset   スタックからデータをロードする（任意のｒｅｇと６ビットｉｍｍ）
LDC data, constant  定数をロードする（任意のｒｅｇと６ビットｉｍｍ）
STB data, addrバイトをメモリに記憶する（２つのｏｐ  ｒｅｇ）
BRFT flag, offset    フラグが真の場合に前方に分岐する（ｏｐ  ｒｅｇと６ビットｉｍｍ）
BRBF flag, offset    フラグが偽の場合に後方に分岐（ｏｐ  ｒｅｇと６ビットｉｍｍ）
BRFU offset   無条件に相対前方に分岐する（６ビットｉｍｍ）
BLRF offset   分岐とリンク相対前方（１０ビットｉｍｍ呼出しサブルーチン）
GETR resource, type資源をスレッドに割り当てる（２つのｏｐ  ｒｅｇ）
IN resource, data    入力（２つのｏｐ  ｒｅｇ）
OUT resource, data 出力（２つのｏｐ  ｒｅｇ）
INSHR resource, data      入力し右にシフトする（２つのｏｐ  ｒｅｇ）
NOT dest, source     ビット単位でない（２つのｏｐ  ｒｅｇ）
EET flag, resource フラグが真の場合にイベントをイネーブルする（２つのｏｐ  ｒｅｇ）
EEU resource  イベントを無条件にイネーブルする（１のｏｐ  ｒｅｇ）
WAITEU 無条件にイベントを待つ（オペランドなし）
CLRE   スレッドのイベントをクリアする（オペランドなし）
デュアル命令発行のいくつかの例がある。２つの命令が同一行に示された場合、これは、命令が２つの並列パイプラインに一緒に発行されたことを示す。
【００８９】
第１の例は、次のように２つのアレイａおよびｂの乗累算を実行する。
MACC:
LDW x, a, i   LSU go, i, limit
LDW y, b, i   ADD i, i, 1
MUL prod, x, y
BRBF go, MACC ADD sum, sum, prod
次の２つは、ＤＭＡ（直接記憶アクセス）コントローラによって通常実行されるのと同じ入出力機能を実行する。これらの機能は、メモリ内のアドレス基底で始まるチャネルｃを使用してワードのブロックを転送する。
DMAI:
LSU go, i, limit     IN c, x
STW x, base, i
BRBF go, DMAI ADDl i, i, 1
DMAO:
LDW x, base, i       LSU go, I, limit
ADDI U, 1     OUT c.x
BRBF go, DMAO
次の例は、イーサネット（登録商標）によって使用されるメディア独立インタフェースから入力を実行する。これは、４ビットｄｐｏｒｔからのデータと１ビットｖｐｏｒｔからの有効信号をシフトインする。各対の４ビット値が、１バイトを形成し、各バイトがメモリに記憶される。有効信号をバイトごとに確認して一連のバイトが終了したことを判定する。
MACI:
STB data, ptr INSHR dport, data
ADDI ptr, ptr, 1     INSHR vport, valid
NOT go, valid INSHR dport, data
BRBF go, MACI INSHR vport, valid
最後の例は、１命令サイクル当たり１アイテム（ビット、ニブル、バイトなど）のポートレートで入力されたデータを示す。これは、トークンをずっとカウントしかつ／またはトークン値の終了をスキャンしている間に行うことができる。アイテムは、バイト、ハーフワードまたはワード間で変換され、メモリ間で転送されてもよい。
【００９０】
上記の実施形態が、例としてのみ示されたことを理解されよう。本発明の命令形式は、特にインタフェースプロセッサおよびスレッドスケジューリング、イベントハンドリングおよび入出力用の命令セットに関して有用であるように説明された。しかしながら、本発明はそのような実施形態に限定されず、当業者には、他の用途および命令セットが明らかな場合がある。さらに、他の実施形態では、別の符号化／復号方式、プレフィックスおよび／または並列パイプライン機構を使用することができる。本発明の範囲は、説明した実施形態によって限定されず、以下の特許請求の範囲によってのみ限定される。
【符号の説明】
【００９１】
７２  オペレーションコード復号ロジック
８２、８４  オペランド復号ロジック
９０  スイッチングロジック
【図１】
2010526383.tif 000003
【図２】
2010526383.tif 000004
【図２Ａ】
2010526383.tif 000005
【図３】
2010526383.tif 000006
【図４】
2010526383.tif 000007
【図５】
2010526383.tif 000008
【図６】
2010526383.tif 000009
【図７】
2010526383.tif 000010
【図８】
2010526383.tif 000011
【図９】
2010526383.tif 000012
【国際調査報告】
2010526383.tif 000013
2010526383.tif 000014