(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-01-22
(54)【発明の名称】VLIW CPUアーキテクチャのための命令パッキングスキーム
(51)【国際特許分類】
G06F 9/30 20180101AFI20240115BHJP
G06F 9/32 20180101ALI20240115BHJP
【FI】
G06F9/30 310A
G06F9/32 350A
G06F9/30 350F
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023541572
(86)(22)【出願日】2022-01-07
(85)【翻訳文提出日】2023-09-05
(86)【国際出願番号】 US2022011525
(87)【国際公開番号】W WO2022150532
(87)【国際公開日】2022-07-14
(32)【優先日】2021-01-07
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】507107291
【氏名又は名称】テキサス インスツルメンツ インコーポレイテッド
(74)【代理人】
【識別番号】230129078
【氏名又は名称】佐藤 仁
(72)【発明者】
【氏名】サヤ ゴウド ランガディ
(72)【発明者】
【氏名】ヴェンカテシュ ナタラジャン
(72)【発明者】
【氏名】アレクサンダー テッサローロ
【テーマコード(参考)】
5B033
【Fターム(参考)】
5B033AA09
5B033BA00
5B033BE05
5B033DC08
(57)【要約】
プロセッサが提供され、プロセッサは、複数の命令を含むマルチ命令パケット(500)に対して復号動作を行うように構成されたコアを含む。復号動作は、第1及び第2の命令(502、504)を含むマルチ命令パケット(500)を受け取ることを含む。第1の命令(502)は、固定された第1の位置の一次部分(508)と二次部分(510)とを含む。第2の命令(504)は、第1の命令(502)の一次部分と第1の命令の二次部分との間の固定された第2の位置に一次部分(512)を含む。第1及び第2の命令の各々の一次部分(510、512)の演算コード部分が、アクセスされ、復号される。第1の命令の一次及び二次部分(508、510)を含む命令パケットが作成され、第2の命令の一次部分(512)を含む第2の命令パケットが作成される。第1及び第2の命令パケットは、それぞれの第1及び第2の機能ユニットにディスパッチされる。
【特許請求の範囲】
【請求項1】
プロセッサであって、
コアを含み、
前記コアが、複数の命令を含むマルチ命令パケットに対して復号動作を行うように構成され、前記復号する動作が、
前記マルチ命令パケットを受け取ることであって、
前記マルチ命令パケットが、
固定された第1の位置における一次部分と、二次部分と、を含む第1の命令、及び
前記第1の命令の前記一次部分と前記第1の命令の前記二次部分との間の固定された第2の位置における一次部分を含む第2の命令、
を含む、前記マルチ命令パケットを受け取ることと、
前記第1の命令の前記一次部分にアクセスすることと、
前記第1の命令の前記一次部分の演算コード(オペコード)部分を復号することと、
前記第2の命令の前記一次部分にアクセスすることと、
前記第2の命令の前記一次部分のオペコード部分を復号することと、
前記第1の命令の前記一次部分と前記第1の命令の二次部分とを含む第1の命令パケットを作成することと、
前記第2の命令の前記一次部分を含む第2の命令パケットを作成することと、
前記第1の命令パケットを第1の機能ユニットにディスパッチすることと、
前記第2の命令パケットを前記第1の機能ユニットとは異なる第2の機能ユニットにディスパッチすることと、
を含む、
プロセッサ。
【請求項2】
請求項1に記載のプロセッサであって、前記第1の命令パケットを前記第1の機能ユニットにディスパッチすることが、前記第1の命令の前記一次部分の前記復号されたオペコード部分に基づいて、前記第1の命令パケットを前記第1の機能ユニットにディスパッチすることを含む、プロセッサ。
【請求項3】
請求項1に記載のプロセッサであって、前記コアによる前記第1の命令の前記ディスパッチが、前記第1の命令の前記二次部分を復号することを回避する、プロセッサ。
【請求項4】
請求項1に記載のプロセッサであって、前記第2の命令パケットを作成することが、前記マルチ命令パケット内の前記第1の命令の前記二次部分の後に位置する前記第2の命令の二次部分を含む前記第2の命令パケットを作成することを更に含む、プロセッサ。
【請求項5】
請求項1に記載のプロセッサであって、前記復号する動作が、
前記マルチ命令パケット内の第3の命令の一次部分にアクセスすることであって、前記第3の命令の前記一次部分が、前記マルチ命令パケット内の固定された第3の位置に位置する、前記第3の命令の一次部分にアクセスすることと、
前記第3の命令の前記一次部分のオペコード部分を復号することと、
を更に含み、
前記固定された第3の位置が、前記マルチ命令パケット内の前記固定された第2の位置の後であり前記第1の命令の前記二次部分の前である、
プロセッサ。
【請求項6】
請求項5に記載のプロセッサであって、前記復号する動作が、前記第3の命令の前記一次部分を含む第3の命令パケットを作成することを更に含み、
前記第1の命令パケットのビット数が前記第2の命令パケットのビット数に等しいかそれより大きく、
前記第3の命令パケットのビット数が前記第2の命令パケットのビット数に等しい、
プロセッサ。
【請求項7】
請求項5に記載のプロセッサであって、前記復号する動作が、前記第3の命令の前記一次部分を含む第3の命令パケットを作成することを更に含み、
前記第1の命令パケットのビット数が前記第2の命令パケットのビット数に等しいかそれより大きく、
前記第3の命令パケットのビット数が前記第2の命令パケットのビット数より少ない、
プロセッサ。
【請求項8】
請求項1に記載のプロセッサであって、前記第1の命令の前記一次部分のビット数が、前記第2の命令の前記一次部分のビット数に等しい、プロセッサ。
【請求項9】
請求項8に記載のプロセッサであって、前記第1の命令パケットの前記ビット数が少なくとも32ビットを含み、前記第2の命令パケットの前記ビット数が少なくとも16ビットを含む、プロセッサ。
【請求項10】
請求項1に記載のプロセッサであって、前記復号する動作が、
前記第2の命令の前記一次部分のリンク部分を復号することと、
前記復号されたリンク部分に基づいて、前記第2の命令の後に前記マルチ命令パケット内に付加的な命令が存在するか否かを判定することと、
を更に含む、プロセッサ。
【請求項11】
プロセッサコア上で実装される方法であって、前記方法が、
第1のマルチ命令パケットを受け取ることであって、
固定された第1の位置における第1の命令の一次部分と、
前記固定された第1の位置に続く固定された第2の位置における第2の命令の一次部分と、
前記第2の命令の前記一次部分に続く前記第1の命令の二次部分と、
を含む、前記第1のマルチ命令パケットを受け取ることと、
前記第1の命令の前記一次部分の演算コード(「オペコード」)部分を復号することと、
前記第2の命令の前記一次部分のオペコード部分を復号することと、
前記第1の命令の前記二次部分にアクセスすることと、
前記第1の命令の前記一次及び二次部分を含む第1の命令パケットを作成することと、
前記第1の命令パケット及び前記第2の命令をそれぞれ別個の機能ユニットにディスパッチすることと、
を含む、方法。
【請求項12】
請求項11に記載の方法であって、前記第1の命令パケット及び前記第2の命令を別個の機能ユニットにディスパッチすることが、前記第1の命令パケット及び前記第2の命令を別個の機能ユニットに並列にディスパッチすることを含む、方法。
【請求項13】
請求項11に記載の方法であって、前記第1の命令パケットのサイズが48ビット、32ビット、及び16ビットのうちの1つであり、
前記第1の命令パケットのサイズが48ビットである場合、前記第2の命令を含む第2の命令パケットのサイズが48ビット、32ビット、及び16ビットのうちの1つであり、
前記第1の命令パケットのサイズが32ビットである場合、前記第2の命令パケットのサイズが32ビット、16ビットのうちの1つであり、
前記第1の命令パケットのサイズが16ビットである場合、前記第2の命令パケットのサイズが16ビットである、
方法。
【請求項14】
請求項13に記載の方法であって、前記第1の命令パケットの前記サイズを判定するために、前記第1の命令の前記一次部分のサイズ部分を復号することを更に含む、方法。
【請求項15】
請求項14に記載の方法であって、前記第1の命令パケットの前記サイズが16ビットを超える場合にのみ、前記第2の命令の前記サイズを判定するために、前記第2の命令の前記二次部分のサイズ部分を復号することを更に含む、方法。
【請求項16】
請求項11に記載の方法であって、
前記第1のマルチ命令パケット内の前記第1の命令の前記二次部分の後に位置する前記第2の命令の二次部分にアクセスすることと、
前記二次命令の前記一次及び二次部分を含む二次命令パケットを作成することと、
を更に含む、方法。
【請求項17】
請求項16に記載の方法であって、前記第1のマルチ命令パケット内の第3の命令の一次部分のオペコード部分を復号することを更に含み、前記第3の命令の前記一次部分が、前記第1のマルチ命令パケット内の前記固定された第2の位置の後であり前記第1の命令の前記二次部分の前の、固定された第3の位置に位置する、方法。
【請求項18】
請求項11に記載の方法であって、コンピュータメモリから前記第1のマルチ命令パケットを命令バッファ内に受け取ることを更に含む、方法。
【請求項19】
請求項18に記載の方法であって、前記命令バッファのサイズが128ビットである、方法。
【請求項20】
請求項18に記載の方法であって、前記第1のマルチ命令パケットのサイズが前記命令バッファのサイズより小さい場合、前記第1のマルチ命令パケットに続く前記命令バッファ内に第2のマルチ命令パケットが存在するか否かを判定することを更に含む、方法。
【発明の詳細な説明】
【技術分野】
【0001】
超長命令語(VLIW)中央処理装置(CPU)では、命令は、複数の命令を含む実行パケットにグループ化される。パケット内の命令は、可変サイズであり得る。反復スキームを用いて、各別個の命令を識別し、復号することができる。各命令は、サイズ部分及び演算コード(オペコード)部分を含み得る。復号されるオペコード部分のサイズを判定するために、復号スキームが各命令を介して反復してそのサイズを判定し得る。次いで、オペコード部分全体が復号されて、それがどのタイプの命令であるか及び更なる処理のためにどこに配路されるべきかが判定される。命令を復号した後、次の命令は、そのオペコード部分を復号するために同様の方式で配置及び検査される。
【発明の概要】
【0002】
一態様に従って、プロセッサが、複数の命令を含むマルチ命令パケットに対して復号動作を行うように構成されたコアを含む。復号動作は、マルチ命令パケットを受け取ることを含み、マルチ命令パケットは、固定された第1の位置における一次部分と、二次部分と、を含む第1の命令、及び、第1の命令の一次部分と第1の命令の二次部分との間の固定された第2の位置における一次部分を含む第2の命令を含む。復号動作はまた、第1の命令の一次部分にアクセスすることと、第1の命令の一次部分の演算コード(オペコード)部分を復号することと、第2の命令の一次部分にアクセスすることとを含む。復号動作はまた、第2の命令の一次部分のオペコード部分を復号することと、第1の命令の一次部分及び第1の命令の二次部分を含む第1の命令パケットを作成することと、第2の命令の一次部分を含む第2の命令パケットを作成することとを含む。復号動作は、第1の命令パケットを第1の機能ユニットにディスパッチすることと、第2の命令パケットを第1の機能ユニットとは異なる第2の機能ユニットにディスパッチすることとを更に含む。
【0003】
別の態様に従って、プロセッサコア上で実装される或る方法が、第1のマルチ命令パケットを受け取ることを含み、第1のマルチ命令パケットが、固定された第1の位置における第1の命令の一次部分と、固定された第1の位置に続く固定された第2の位置における第2の命令の一次部分と、第2の命令の一次部分に続く第1の命令の二次部分とを含む。この方法はまた、第1のマルチ命令パケット内の第1の命令の一次部分の演算コード(オペコード)部分を復号することを含み、第1の命令の一次部分は、第1のマルチ命令パケット内の固定された第1の位置に位置する。この方法はまた、第1の命令の一次部分の演算コード(「オペコード」)部分を復号することと、第2の命令の一次部分のオペコード部分を復号することと、第1の命令の二次部分にアクセスすることとを含む。この方法は、第1の命令の一次部分及び二次部分を含む第1の命令パケットを作成することと、第1の命令パケット及び第2の命令を別個の機能ユニットにそれぞれディスパッチすることとを更に含む。
【図面の簡単な説明】
【0004】
図面において下記のとおりである。
【0005】
【
図1】一例に従った、命令を受け取り、復号し、ディスパッチするためのプロセッサのブロック図である。
【0006】
【
図2】一例に従った、16ビットCPU命令を図示するブロック図である。
【0007】
【
図3】一例に従った、32ビットCPU命令を図示するブロック図である。
【0008】
【
図4】一例に従った、48ビットCPU命令を図示するブロック図である。
【0009】
【
図5】一例に従った、複数の命令の命令パケットを図示するブロック図である。
【0010】
【
図6】一例に従った復号方式のフローチャートである。
【発明を実施するための形態】
【0011】
図1は、一例に従った中央処理装置又はプロセッサ100のブロック図を示す。図示されるようにプロセッサ100はコア102を含み、コア102は、プリフェッチ命令バッファ104と、デコーダ106と、比較器、制御ユニット、演算論理ユニット(ALU)などの1つ又は複数の機能ユニット108とを含む。コア102は、減算器、フェッチロジックなどの他のハードウェア構成要素も含み得る。コア102は、命令セット112の様々な機械命令110を実行することができ、命令セットは、コア102内のメモリに格納され得るか、その他の方式でコア102にアクセス可能であり得る。機械命令112は、実施されるべき様々な動作を含む命令セットを含む。プログラムを実行する過程の間、命令バッファ104は、プロセッサ100の外部のメモリ114から命令パケットを受け取ることができる。
【0012】
デコーダ106は、本明細書で説明するように各命令パケットを復号する復号ロジック116を含む。復号に続いて、ディスパッチユニット118が、命令を実行するために、各命令をその指定された機能ユニットに送信する。一例において、プロセッサ100は、対応する機能ユニット内の複数の命令を同時に動作させることができる超長命令ワード(VLIW)プロセッサとして動作する。好ましくは、コンパイラが、共に実行されるマルチ命令パケット内の命令を編成する。命令ディスパッチユニット118は、各命令をターゲット機能ユニット108に向ける。一例において、命令ディスパッチユニット118は、各命令の少なくとも一部分を同時に処理させるなど、複数の命令に対して並行して動作することができる。そのような並列命令の数は、マルチ命令パケット内の命令の数によって設定され得る。パケットサイズ計算ユニット120は、命令バッファ104から転送された各命令パケットを追跡し続ける。
【0013】
図2は、16ビットフォーマットを有するCPU命令200を図示する。命令200は、1ビットを有するリンク部分202と、2ビットを有するサイズ部分204と、13ビットを有するオペコード部分206とを含む。リンク部分202は、命令200が複数の命令の命令パケット内の最後の命令であるか否か、又は命令200に続く付加的な命令が命令パケット内にあるか否かを示す。例えば、0b1の値(例えば、バイナリ値1の単一ビット)が、現在の命令に後続する少なくとも1つの付加的な命令がパケット中に存在することを示し得、一方、0b0の値が、現在の命令がパケット中の最後の命令であること、又はその逆であることを示し得る。サイズ部分204は、命令200のサイズを示す。命令110が複数のサイズのうちの1つ(例えば、16ビット、32ビット、又は48ビットの3つのサイズのうちの1つ)であり得る命令セットでは、サイズ部分204は、例えば、現在の命令のサイズを示すために2ビットであり得る。一例において、0b00のビットコードが、命令サイズが16ビットであることを示し得、0b01が、命令サイズが32ビットであることを示し得、0b10が、命令サイズが48ビットであることを示し得る。他の実装も可能である。オペコード部分206は、命令200によって実行される命令を提供する演算コードを含み、オペランドなどのオペコードに結び付けられた任意の付加的情報を含む。部分202、204、206は共に、命令200の16ビットを占有し、命令200の一次部分208を形成する。
【0014】
図3は、32ビットフォーマットを有するCPU命令300を示し、リンク部分302と、サイズ部分304と、オペコード部分306とを含む。リンク部分302及びサイズ部分304は、命令200のリンク部分202及びサイズ部分204と同様に、それぞれ、付加的な命令が続くか否かを示し、命令300のサイズを示す。オペコード部分306は、32ビット命令300において29ビットを占有する。
図3に示されるように、オペコード部分306の第1の13ビットは、リンク部分302及びサイズ部分304と共に、命令300の一次部分308を形成する。一次部分308に含まれないオペコード部分306の残りの16ビットは、命令300の二次部分310を形成する。
【0015】
図4は、48ビットフォーマットを有するCPU命令400を示し、リンク部分402と、サイズ部分404と、オペコード部分406とを含む。リンク部分402及びサイズ部分404は、命令200のリンク部分202及びサイズ部分204と同様に、それぞれ、付加的な命令が続くか否かを示し、命令400のサイズを示す。オペコード部分406は、48ビット命令400において45ビットを占有する。
図4に示すように、オペコード部分406の第1の13ビットは、リンク部分402及びサイズ部分404と共に、命令400の一次部分408を形成する。一次部分408に含まれないオペコード部分406の残りの32ビットは、命令400の二次部分410を形成する。
【0016】
図1~
図4を参照すると、機械命令セット112は、命令200、300、及び400のうちの1つに基づくフォーマットを有する少なくとも1つの命令を含む。しかし、多くの命令を有する機械命令セット112では、3つの命令200、300、及び400の2つ又はすべてのフォーマットを表すことができる。機械命令セット112は、命令200、300、及び400のフォーマットのうちの1つ又は複数のものの複数の別個の命令を含み得、その結果、セット112中に、(命令200に基づく)1つ又は複数の16ビット命令、(命令300に基づく)1つ又は複数の32ビット命令、及び/又は(命令400に基づく)1つ又は複数の48ビット命令が存在し得る。また、機械命令セット112内のビット長は、本明細書で提供される16ビット、32ビット、又は48ビットの例に限定されず、任意のサイズのビット長を含み得る。
【0017】
上述のように、命令200、300、400のオペコード部分206、306、406の第1の13ビットは、それぞれのリンク部分202、302、402及びサイズ部分204、304、404と共に、一次部分208、308、408を形成する。これらの第1の13ビットは、更なる処理のためにビットを識別し、復号し、送信するために必要とされる時間量の低減が、CPU速度及び性能の増加につながる命令を含む。従って、13ビットをより迅速に識別し、復号し、処理することができるので、CPUは、より迅速に動作することができる。二次部分における命令の任意の残りのビットは、命令がどこに(例えば、特定の機能ユニット108に)配路される必要があるかを判定するために、復号プロセスの一部として復号される必要はない。代わりに、二次部分情報は、二次部分を復号するのに時間を費やすことなく命令を実行するために、それぞれの機能ユニットに提供され得る。このようにして、プロセッサ100は、命令200、300、400をどこにディスパッチすべきかを判定するために命令200、300、400を復号するときに、二次部分を復号することを回避する。
【0018】
図5は、一例に従った、複数の命令の例示のマルチ命令パケット500を示す図である。マルチ命令パケット500は、機械命令セット112から選択された3つの命令を含み、第1の48ビット命令502、第2の32ビット命令504、及び第3の16ビット命令506を含む。示されるように、命令502は、2つのセグメント、すなわち、マルチ命令パケット500の始めの一次セグメント508と、命令506に続く二次セグメント510とに分割される。命令504はまた、2つのセグメント、すなわち、命令502の一次セグメント508に続く一次セグメント512と、命令502の二次セグメント510に続く二次セグメント514とに分割される。最終的に、命令506は、命令504の一次セグメント512に続く一次セグメント516を含む。命令506は16ビット命令であるので、二次オペコードのための付加的なセグメントは、マルチ命令パケット500に含まれない。
図5に図示される例示のマルチ命令パケット500は3つの命令を含むが、パケット内の1つ又は複数の命令を含む命令パケットも企図される。
【0019】
図6は、一例に従った、デコーダ(例えば、
図1のデコーダ106)によって実行可能な復号技法600を図示するフローチャートである。
図5及び
図6を参照すると、マルチ命令パケット500は、例えば、工程602において命令バッファ104から受け取られる。
図5に示すように、一次セグメント508、512、516は、マルチ命令パケット500の始めに連続して配置される。幾つかの例に従って、マルチ命令パケット内のすべての命令の一次セグメントは、命令パケットの始めに連続して配置され、その後に任意の二次セグメントが続く。工程604において、第1又は次の命令の開始が判定される。初めて実行されるとき、命令開始フラグは、評価され、復号されるべき次の命令がビット0で開始することを示すことができる。工程606において、
図5において「L0」と標された第1の命令502のリンク部分(例えば、
図4に図示されるリンク部分402に対応するリンク部分)が、命令スタートフラグに基づいてアクセスされ、復号されて、付加的な命令が命令に続くか否かを判定する。第1の命令502は、
図5に示される例における唯一の命令ではないので、リンク部分は、少なくとも1つの付加的な命令が続くことを示す。そのような指示は、例えば、0b1の値によって示され得る。次に、
図5において「S0」と標された第1の命令502のサイズ部分(例えば、
図4に示されるサイズ部分404に対応するサイズ部分)が、工程608においてアクセスされ復号される。リンク部分L0がどこに位置するかが分かると、サイズ部分は、例えば、次の2ビットであることが分かる。命令502の一次部分又はセグメント508はサイズ部分S0に続く13ビットを含むので、
図5において「OP0一次」と標される第1の命令502のオペコード一次部分(例えば、
図4に示されるオペコード部分406に対応するオペコード部分)は、工程610でアクセスされ復号される。
【0020】
第1の48ビット命令502については、二次部分510内に付加的な32ビットの演算コードが存在するので、デコーダ106は、命令502のための付加的なオペコードビットがマルチ命令パケット500内で見つかることを知る。しかし、この付加的なオペコードの取得は、すべての一次セグメントが復号されるまで延期され、その結果、処理時間が短縮され得、従って、CPU速度及び性能が向上する。
【0021】
工程612において、手法600は、最近復号された命令のリンク部分に少なくとも部分的に基づいて、現在の命令パケット内の最近復号された命令に付加的な命令が続くか否かを判定する。
図5に示される例では、少なくとも命令504及び506が命令502に続く。従って、付加的な命令が614に続くので、手法600は、工程604に戻って、次の命令の復号を開始する。各一次区間508、512、516は16ビット長であるので、デコーダ(例えば、
図1のデコーダ106)は、次の命令が前の命令のリンク部分の16ビット後に開始することを知る。従って、次の命令の開始の判定は、前の命令の開始に16を付加することに関与する。このようにして、前の命令のサイズに基づいて後続の命令の開始ビットを判定するために用いられるCPU処理動作(例えば、後続の命令が固定位置で開始しない)を回避することができる。
【0022】
図5に示される例において、第2の命令504はビット16で始まる。従って、命令504の開始の判定を第1の命令502のサイズに基づかずに、リンク部分L1を開始ビット位置で読み出すことができ(工程606)、サイズ部分S1を開始ビット位置L1に続く2ビットで読み出すことができ(工程608)、オペコード部分OP2をサイズ部分S1に続く13ビットで読み出すことができる(工程610)。そのため、前の命令のサイズに基づいて命令504の開始を判定するための動作コストの高い方法を用いることなく、命令504を迅速に識別し、その後、復号することができる。命令502と同様に、命令504は、二次セグメント514に付加的なオペコードを含み、この付加的なオペコードの取得は、すべての一次セグメントが復号されるまで延期される。
【0023】
第3の命令506は、第2の命令504に続くので、第2の命令504のリンク部分L1は、少なくとも1つの付加的な命令が第2の命令504に続くことを示す。従って、手法600は、工程604~610において上記で概説した工程に従って第3の命令506を復号するために、工程604に再び戻る(614)。
【0024】
第3の命令506の復号に続いて、(工程612において)付加的な命令が続くか否かの判定は、第3の命令506が最後の命令であったことを示す。従って、手法600は、616を工程618に移動させて、各命令502、504、506について完全な命令パケットを作成する。命令502、504の場合、それらの一次部分と二次部分とが結合される。従って、復号されたサイズ部分204、304、404に基づいて、手法600は、それらのそれぞれの一次部分308、408と結合されるべき任意の二次部分310、410の長さを判定することができる。工程620において、生成された命令パケットは、例えば、ディスパッチユニット118(
図1)によって適切な機能ユニット108に送信される。
【0025】
本明細書で説明されるものなどのマルチ命令パケットは、並列に又は実質的に同時に実行される命令を含む。しかしながら、命令バッファ104(
図1)のサイズは、特定のマルチ命令パケットよりも大きくてもよい。例えば、命令バッファ104は、例えば、単一の128ビットマルチ命令パケットを保持することができる128ビットレジスタとし得る。別の例において、命令バッファ104が、8個の単一命令16ビットパケットを保持することができる。幾つかの例において、命令バッファ104のサイズが128ビットよりも大きくても小さくてもよいことが企図される。命令バッファ104のすべてのビットより少ないビットが1つの単一又はマルチ命令パケットのために用いられる場合、パケットサイズ計算ユニット120(
図1)は、最新の単一又はマルチ命令パケットが終了する場所、及び/又は、次回の単一又はマルチ命令パケットが始まる場所を追跡し、識別することができる。復号ロジック116(
図1)は、各成功裏に復号された単一又はマルチ命令パケットに続く命令バッファ104の残りの部分を調査して、例えば、最後に復号された単一又はマルチ命令パケットに続く第2及び第3のビットがサイズインジケータを含むか否かを判定し、付加的な命令パケットが続くか否かを示唆することができる。そのような付加的な命令が続く場合、デコーダ106(
図1)は、命令バッファ104がメモリストレージからの次の命令パケットで再ロードされる必要なく、(前の命令パケットと共に送られた)次の命令パケットを復号することができる。
【0026】
各マルチ命令パケット内の命令の配置又は順序付けがサイズ毎であることを確実にすることによって、付加的なタイミング節約を達成することができる。例えば、命令サイズが最大サイズから最小サイズに従うように各パケットを符号化することで、復号時間を低減することができる。例示のパケット符号化の表を以下に示す。
【0027】
表1の各命令について、128ビットの命令バッファの全ビットを占有する様々な命令パケット(P1~P10)における命令(I0~I7)の順序付けの例を一例として示す。各パケット内の可能な命令(IQ-I7)の順序が最大から最小であることを確実とする場合、特定のパケット内の16ビット命令に遭遇することに基づいて、CPU復号時間を低減することが可能である。例えば、表1の命令パケットP2では、第1の16ビット命令が命令I2で遭遇する。命令は、長さの順序が最大から最小であるので、復号技法600は、同じ命令パケット内の如何なる後続の命令もまた16ビットであることを知ることができ、従って、如何なる後続の命令のサイズ部分も復号する必要がない。従って、命令パケットP2については、命令I3の復号はそのサイズの復号をスキップすることができる。同様に、命令パケットP4~P5及びP7~P10は、第1の16ビット命令が識別された後、命令サイズの復号をしないですませることができる。
【0028】
表1の命令パケット(P1~P10)は、すべての128ビット(又は命令バッファ104のすべてのビット)を用いることを示すが、すべての128ビットを使用しない他の命令パケットが、命令バッファから転送されてもよい。例えば、命令パケットが、48ビット命令と、それに続く3つの16ビット命令とを含み得る。しかしながら、上記のパケット符号化方式は、すべての128ビットを用いるわけではないこれらのパケットに対しても機能する。従って、16ビット命令が見つかった後、後続の各命令の復号は、命令のサイズを復号することをスキップし得る。
【0029】
本発明の様々な好ましい実施例の前述の説明は、例示及び説明の目的のために提示されたものである。これは、網羅的なものではなく、記載された正確な形態に本発明を限定するものではなく、上記の教示に照らして多くの修正及び変形が可能であることが明らかである。上記のような例示の実施例は、本発明の原理及びその実用的な応用例を最もよく説明するために選択され、記載され、それによって、当業者は、企図される特定の使用に適しているように、種々の実施例において様々な修正を伴って本発明を最もよく利用することができる。従って、本発明の範囲は、本明細書に添付される特許請求の範囲によって定義される。
【国際調査報告】