(57)【特許請求の範囲】
【請求項１】
少なくとも二つのＭより小さいＮビットを有するオペランドデータを各々有するＭビットの入力データを入力するための入力レジスタと、命令セットの命令制御の下、前記入力データのオペランドデータの選択されたセットに対してＮビットの結果データを各々作るグループの動作をパラレルに実施するプロセッサと、Ｍビットの一つの出力としてＮビットの前記結果データを記憶するための、Ｍビットを有する宛先レジスタとを有することを特徴とするコンピュータシステム。
【請求項２】
Ｍビットの入力レジスタの入力データ各々がＮビットの第１オペランドデータとＮビットの第２オペランドデータとを有し、前記プロセッサが、Ｎビットの第１結果を作るために第１入力データの第１オペランドデータを第２入力データの第１オペランドデータに加え、Ｎビットの第２結果を作るために第１入力データの第２オペランドデータを第２入力データの第２オペランドデータに加えるための手段と、各当該結果を特定の範囲にクリップして、Ｎビットにそれぞれクリップされた結果を作るための手段とを有し、前記宛先レジスタが前記それぞれクリップされた結果を一緒に記憶することを特徴とする請求項１に記載のコンピュータシステム。
【請求項３】
Ｍビットの前記入力データ各々がＮビットの２つのオペランドデータを有し、前記プロセッサが、各オペランドデータの絶対値を計算し、各計算が各Ｎビットの絶対値を作るための手段と、クリップされたＮビットの結果をそれぞれ作るために、各絶対値を特定の範囲にクリップするための手段とを有し、前記宛先レジスタが前記それぞれクリップされた結果を一緒に記憶することを特徴とする請求項１に記載のコンピュータシステム。
【請求項４】
Ｍビットの前記入力データがＮビツトを有する第１オペランドデータとＮビットを有する第２オペランドデータとを有し、前記プロセッサが、Ｎビットの第１の積を作るために、第１入力データの第１オペランドデータを第２入力データの第１オペランドデータと乗算し、Ｎビットの第２の積を作るために、第１入力データの第２オペランドデータを第２入力データの第２オペランドデータと乗算する手段と、Ｎビットのそれぞれクリップされた結果を作るために、各前記積を特定の範囲にクリップするための手段とを有し、前記宛先レジスタが前記それぞれクリップされた結果を一緒に記憶することを特徴とする請求項１に記載のコンピュータシステム。
【請求項５】
Ｍビットの前記入力データがＮビットを有する第１オペランドデータとＮビットを有する第２オペランドデータとを有し、前記プロセッサが、Ｎビットの第１の差を作るために、第１入力データの第１オペランドデータを第２入力データの第１オペランドデータから減算し、Ｎビットの第２の差を作るために、第１入力データの第２オペランドデータを第２入力データの第２オペランドデータから減算する手段と、Ｎビットのそれぞれクリップされた結果を作るために、第１の差及び第２の差を特定の範囲にクリップするための手段とを有し、前記宛先レジスタが前記それぞれクリップされた結果を一緒に記憶することを特徴とする請求項１に記載のコンピュータシステム。
【請求項６】
Ｍビットの前記入力データがそれぞれＮビットの少なくともＰが２であるＰ個のオペランドデータを有し、前記プロセッサが、前記Ｐ個のオペランドデータのオペランドデータそれぞれに対して、第１入力データの各オペランドデータを第２入力データの各オペランドデータに加え、各加算がＮビットの各和を作るための手段と、それぞれの和を特定の範囲にクリップして、ＮビットのＰ個の各クリップされた結果を作るための手段とを有し、前記宛先レジスタが前記Ｐ個のそれぞれクリップされた結果を記憶することを特徴とする請求項１に記載のコンピュータシステム。
【請求項７】
Ｍビットの前記入力データがそれぞれＮビットの少なくともＰが２であるＰ個のオペランドデータを有し、前記プロセッサが、前記Ｐ個のオペランドデータのオペランドデータそれぞれに対して、第１入力データの各オペランドデータを第２入力データの各オペランドデータから減算し、各減算がＮビットの各差を作るための手段と、それぞれの差を特定の範囲にクリップして、ＮビットのＰ個の各クリップされた結果を作るための手段とを有し、前記宛先レジスタが前記Ｐ個のそれぞれクリップされた結果を記憶することを特徴とする請求項１に記載のコンピュータシステム。
【請求項８】
Ｍビットの前記入力データがそれぞれＮビットの少なくともＰが２であるＰ個のオペランドデータを有し、前記プロセッサが、前記Ｐ個のオペランドデータのオペランドデータそれぞれに対して、第１入力データの各オペランドデータと第２入力データの各オペランドデータとを乗算し、各乗算がＮビットの各積を作るための手段と、それぞれの積を特定の範囲にクリップして、ＮビットのＰ個の各クリップされた結果を作るための手段とを有し、前記宛先レジスタが前記Ｐ個のそれぞれクリップされた結果を記憶することを特徴とする請求項１に記載のコンピュータシステム。
【請求項９】
Ｍビットの前記入力データがそれぞれＮビットの少なくともＰが２であるＰ個のオペランドデータを有し、前記プロセッサが、前記Ｐ個のオペランドデータのオペランドデータそれぞれに対して、第１入力データの各オペランドデータと第２入力データの各オペランドデータとの各平均を計算し、各計算がＮビットの各平均を作るための手段を有し、前記宛先レジスタが前記Ｐ個のそれぞれの平均を記憶することを特徴とする請求項１に記載のコンピュータシステム。
【請求項１０】
Ｍビットの前記入力データがそれぞれＮビットの少なくともＰが２であるＰ個のオペランドデータを有し、前記プロセッサが、前記Ｐ個のオペランドデータのオペランドデータそれぞれに対して、第１入力データの各オペランドデータと第２入力データの各オペランドデータとを乗算し、各乗算が２＊Ｎビットの各積を作るための手段を有し、前記宛先レジスタが各中間データを形成するために各積の合計Ｎビットである選択されたビットを検索し、Ｍビットである宛先レジスタに前記Ｐ個の各中間データを記憶することを特徴とする請求項１に記載のコンピュータシステム。
【発明の詳細な説明】
技術分野
本発明は、例えば、高品質ビデオ及び音声を制御する能力を持ち、特定の高機能動作を実行するためのシステムのような、マルチメディア機能を含む機能を実行するプロセッサシステムに用いられるカスタム動作に関する。
背景技術
システムは、マルチ機能ＰＣ強調ビークルとして役立つ付加のユニット及び一般的な目的のためのＣＰＵを有する。通常、ＰＣは、マルチ標準ビデオ及び音声ストリームを処理しなければならず、ユーザはできるなら圧縮及び伸張を望む。ＰＣに用いられるＣＰＵチップが低解像度実時間ビデオ伸張ができるが、高品質ビデオ伸張及び圧縮は、依然できなかった。さらに、ユーザは、ユーザのシステムがこのシステムの応答性を犠牲にすることなく生のビデオ及び音声を提供することを要求する。
通常の目的及び組み込まれたマイコンのアプリケーション両方のために、高レベル言語のプログラムが所望される。コンパイラ及び簡単なプログラムモデルを最適化することを効果的に支援するために、線形アドレスポインタのマニピュレーションを直接支援する大きな、線形アドレス空間、一般目的のレジスタ及びレジスタ間の動作のような、あるマイコンアーキテクチャ特性が必要とされる。マイコンアーキテクチャにおける最近の共通の選択は、６４及び１２８ビットシステムが現在開発中であるが、３２ビット線形アドレス、３２ビットレジスタ及び３２ビット整数動作である。
多くのアルゴリズムでのデータマニピュレーションのために、全数ビット（すなわち、３２ビットシステムに対する３２ビット）を使用するデータ動作は、高価なシリコン源の浪費である。例えばＭＰＥＧビデオストリームの伸張のような重要なマルチメディアアプリケーションは、８ビットデータアイテムを処理する大きな実行時間を費やす。小さなデータアイテムを操作するために３２、６４、１２８等のビット動作を用いることは、実行中３２、６４、１２８等のビット実行ハードウェアの不充分な使用となる。従って、カスタム動作は、同時にデータアイテムを動作し、実行コストのささいな増加だけで何倍も実行態様を改善する。
例えばサイクル当たりのとても多くの従来のマイコン指令を実行するような、他の手段による類似の実行態様の増加が達成できるけれでも、これら他の手段は、一般に低コストを目標にしたアプリケーションにとって高価である。加えて、n<mであるnの小さなデータアイテムを操作するために、例えば３２ビット動作のような、ｍビット動作の使用は、実行においてｍビット実行ハードウェアの不充分な使用である。
従来のｄｓｐ又はＤＳＰ（デジタル信号処理）動作の論理は、モジュロ値を計算する。本発明のクリップした又はサチュレートした動作は、処理がレジスタの物理的制限を越えて走るデータを生成するところのシングル処理アプリケーションにおいて、特に有益である。従来、これが起こると、データは物理的に利用可能な範囲の他方の端にマップされる。信号の処理において、この循環マッピングは、破壊できる。例えば、とても低い音声量は、最高使用の従来スキーム上でマップされていた。制御アプリケーション及びビデオ／音声アプリケーションにおいて、モジュロ値は、制御範囲又は密度範囲が飽和するとき、所望されない。
発明の開示
本発明の目的は、特別な目的の、組み込まれた解法、すなわち低コスト及び少ないチップ数の利益と、通常目的のプロセッサ再プログラム能力を維持する一方で、実時間マルチメディア能力を供給するためにＰＣシステムのようなシステムを補強することである。ＰＣアプリケーションのために、本発明は、固定機能のマルチメディアチップ能力に優る。
従って、本発明の目的の一つは、低価格で非常に高いマルチメディア実施を達成することである。
本発明の他の目的は、小さなカーネルのアプリケーションにおいて、処理速度を増大することである。
本発明に更に他の目的は、不規則な数のバイト−マニピュレーション命令を必要とすることなしに、キャッシュ／メモリバンド幅の全利益を達成することである。
本発明のもう一つの目的は、マルチメディアアプリケーションにおける実施を改善するために、特定の高機能動作を供給することである。
本発明の他の目的は、動作の実行において特定ビットの実行ハードウェアを効果的に使用するカスタム動作を供給することである。
本発明の更に他の目的は、マルチメディアアプリケーションのような特定のアプリケーションに例えば作り変えられたカスタム動作を供給することである。
本発明のもう一つの目的は、シングル命令制御の下、平行処理のためにマルチオペランドを記憶するマルチオペランドレジスタを用いることである。これは、サンプルが現在の８又は１６ビットである音声及び／又はビデオアプリケーションにおいて特に有利である。
本発明の目的は、丸められた（truncated）範囲の正しい側に、音声又はビデオ信号のような入力信号を維持するために、クリップ動作を用いることである。
本発明は、ビデオ電話のような低コストの、シングル目的システムから、従来のパーソナルコンピュータのための再プログラム可能な、マルチ目的プラグインカードまで用いられることができる。加えて、本発明は、ＭＰＥＧ−１及びＭＰＥＧ−２のようなポピュラーなマルチメディア標準を簡単に行うシステムに用いられる。さらに、パワフルな通常目的のＣＰＵのまわりの本発明の方向は、公開されているか所有されているかにかかわらず、各種のマルチメディアアルゴリズムを実行できるようにする。
ソースコードレベルで、ソフトウェアの互換性を規定することは、コストと実施との最適なバランスをとるための自由度を与える利益を持つ。パワフルなコンパイラは、プログラムがポータブルでないアセンブラプログラムに再ソースする必要が決してないことを保証する。本発明は、プログラマーが精通した機能コールシンタックスで呼ばれるｄｓｐのような動作でソースコードからパワフルな低レベル動作を用いられるようにする。
コンピュータシステムは、入力データを入力するため入力レジスタを有し、各入力データはＭビットを有し、オペランドデータはＮビットを有する。ここで、ＮはＭ以下である。コンピュータシステムは、選択されたオペランドデータ上で動作の組を実行するためのプロセッサを有する。動作の各組は、少なくとも一つの動作を含み、Ｎビットの結果データを作る。コンピュータシステムは、動作の各組からの前記結果データを記憶するための宛先レジスタを有する。動作の前記各組は、クリップ又はサチュレーション動作を含んでもよい。加えて、動作の前記組は、命令セットの命令に応答して及び平行して実行されてもよい。
本発明のさらに他の目的及び利益は、本発明の好ましい実施例だけが本発明を実行するのに最も適した図を用いて示され説明されるこれ以降の詳細な説明から当業者には容易に明らかであろう。理解されるように、本発明は、他の異なる実施例も可能であるし、それら幾つかの詳細は、本発明から離れることなしに各種の面から変更できる。従って、これらの図及び説明は、例示であり制限されるべきではない。
【図面の簡単な説明】
本発明のこれら及び他の特徴が、図を参照して詳細に説明されるだろう。
第１図は、本発明に用いられるシステム例のブロック図であり、
第２図は、ＣＰＵレジスタアーキテキチャの例を示し、
第３（ａ）図は、メモリのマトリクスの構成例を示し、
第３（ｂ）図は、この例で実行されるタスクを示し、
第４図は、カスタム動作を用いたバイト−マトリクスの置換用アプリケーションを示し、
第５（ａ）図及び第５（ｂ）図は、第４図に示される前記バイト−マトリクス置換を実行するための動作のリストを示し、
第６図は、ｄｓｐｉａｄｄ動作を示し、
第７図は、ｄｓｐｕａｄｄ動作を示し、
第８図は、ｄｓｐｉｄｕａｌａｄｄ動作を示し、
第９図は、ｄｓｐｕｑｕａｄａｄｄｕｉ動作を示し、
第１０図は、ｄｓｐｉｍｕｌ動作を示し、
第１１図は、ｄｓｐｕｍｕｌ動作を示し、
第１２図は、ｄｓｐｉｄｕａｌｍｕｌ動作を示し、
第１３図は、ｄｓｐｉｓｕｂ動作を示し、
第１４図は、ｄｓｐｕｓｕｂ動作を示し、
第１５図は、ｄｓｐｉｄｕａｌｓｕｂ動作を示し、
第１６図は、ｉｆｉｒ１６動作を示し、
第１７図は、ｉｆｉｒ８ｉｉ動作を示し、
第１８図は、ｉｆｉｒ８ｕｉ動作を示し、
第１９図は、ｕｆｉｒ１６動作を示し、
第２０図は、ｕｆｉｒ８ｕｕ動作を示し、
第２１図は、ｍｅｒｇｅｌｓｂ動作を示し、
第２２図は、ｍｅｒｇｅｍｓｂ動作を示し、
第２３図は、ｐａｃｋ１６ｌｓｂ動作を示し、
第２４図は、ｐａｃｋ１６ｍｓｂ動作を示し、
第２５図は、ｐａｃｋｂｙｔｅｓ動作を示し、
第２６図は、ｑｕａｄａｖｇ動作を示し、
第２７図は、ｑｕａｄｕｍｕｌｍｓｂ動作を示し、
第２８図は、ｕｍｅ８ｉｉ動作を示し、
第２９図は、ｕｍｅ８ｕｕ動作を示し、
第３０図は、ｉｃｌｉｐｉ動作を示し、
第３１図は、ｕｃｌｉｐｉ動作を示し、
第３２図は、ｕｃｌｉｐｕ動作を示す。
発明を実施するための最良の形態
第１図は、本発明に用いられるシステム例のブロック図を示す。このシステムは、マイコン、同期式ダイナミックＲＡＭ（ＳＤＲＡＭ）のブロック、及びマルチメディアデータストリームの入力及び／又は出力とのインタフェースに必要な外部回路を有する。
この実施例においては、３２ビットＣＰＵは、ＶＬＩＷプロセッサのコアを形成する。このＣＰＵは、３２ビット線形アドレス空間及び１２８全通常目的３２ビットレジスタを実行する。このシステムにおいては、これらのレジスタは、バンクに分離されていない。そのかわり、どの動作もどのオペランド用レジスタを使用できる。
このシステムにおいては、ＣＰＵは、発行されるべき５つの同時動作まで許容するＶＬＩＷ命令セットアーキテクチャを使用する。これらの動作は、この例では、データパラレルｄｓｐ状ユニットと整数及びフローティングポイント計算ユニットを含む、前記ＣＰＵ内の２７個の機能ユニットの何れか５つをターゲットにできる。
本発明を利用するＣＰＵの動作セットは、標準ビデオ圧縮及び伸張アルゴリズムを劇的に速めるマルチメディア特有の動作に加えて、従来のマイコン動作を含む。シングル命令でこの例では５つの動作において発せられた動作の一つ、シングル特別又は「カスタム」動作は、１１個の従来のマイコン動作まで実行できる。ＶＬＩＷ，ＲＩＳＣ又は他のアーキテクチャと結合されるマルチメディア特別動作は、マルチメディアアプリケーションに対して非常に大きな処理能力となる。本発明は、これらの「マルチメディア」動作を実行するために、データに対する３２、６４、１２８等のビットの１レジスタの使用を許容する。
第２図は、ＣＰＵレジスタのアーキテクチャの１例を示す。本実施例のＣＰＵは、ｒ０．．ｒ１２７でラベル付けされる全通常目的３２ビットレジスタを有する。この実施例においては、レジスタｒ０及びｒ１が特定の目的のために使用され、ｒ２からｒ１２７のレジスタは、本当に通常の目的のレジスタである。
このシステムにおいては、前記プロセッサはクロックサイクル毎に一つの長い命令を発する。各命令は、数個の動作（本実施例では５つの動作）を含む。各動作は、動作の実行が通常宛先レジスタの内容の条件付きであることを除いて、ＲＩＳＣマシン命令と比較できる。
このレジスタ内のデータは、例えば整数表示又はフローティングポイント表示でもよい。
本実施例においては、整数が考慮され、バイナリの２つの相補ビットパターンとしてそれぞれ「符号なし整数」又は「符号あり整数」である。整数の計算は、トラップを発生しないだろう。結果が表示されないならば、戻ってきたビットパターンは、個別の動作記述区分内に規定されているように、特別な動作である。通常の場合、レギュラーの加減算タイプの動作のためのラップ、ｄｓｐ状動作に対する最小又は最大表示値をクランプ又は６４ビット結果（例えば整数／符号なし乗算）の最小３２ビット値を返すことである。
本実施例が３２ビットアーキテクチャなので、マルチメディア動作で用いられるデータの値に対してのフローティングポイント表示を使用しない。しかしながら、明らかに６４ビット、１２８ビット等のアーキテクチャに対してフローティングポイント表示は、マルチメディア動作で用いられるデータの値のために使用することができる。例えば、シングル精度（３２ビット）IEEE-754のフローティングポイント計算及び／又はダブル精度（６４ビット）IEEE-754のフローティングポイントは、データ値を表現するために使用できる。
本発明のアーキテクチャにおいては、全ての動作は、任意に「ガード」されている。ガード動作は、「ガード」レジスタ（ｒｇｕａｒｄ）内の値に依存して条件付きで行われる。例えば、ガード整数付加（ｉａｄｄ）は、
IF r23 iadd r14 r10 → r13
と記述される。
この例では、「if r23 then r13:=r14+r10」である。この「if r23」は、ｒ２３での値ＬＳＢに依存して真又は偽を評価する。一方、ｒ２３のＬＳＢに依存してｒ１３は、不変か又はｒ１４とｒ１０との整数和を含むように設定される。例えば本発明の本実施例においては、前記ＬＳＢが１と評価されたならば、この例ではｒ１３、宛先レジスタ（ｒｄｅｓｔ）に書き込まれる。ガード制御は、このシステムのプログラマーが見える状態、すなわちレジスタ値、メモリ内容及びデバイス状態に影響する。
本発明でのメモリは、バイトアドレス可能である。ロード及びストアは、「自然に並んで」いる、すなわち１６ビットのロード又はストアは、２のべき乗であるアドレスをターゲットとする。３２ビットのロード又はストアは、４のべき乗であるアドレスをターゲットとする。当業者は、容易にこれを変形できる。
計算動作は、レジスタ−レジスタ動作である。特定の動作は、１又は２個のソースレジスタで行われ、結果は宛先レジスタ（ｒｄｅｓｔ）に書き込まれる。
カスタム動作は、特定の計算動作であり、通常の計算動作に似ている。しかしながら、これらのカスタム動作は、通常目的のＣＰＵでは見つからない。このカスタム動作は、例えばマルチメディアアプリケーションのための動作の実施に有益である。本発明のカスタム動作は、他のアプリケーション同様重要なマルチメディアアプリケーションでの実施を劇的に改善するために設計された特別な、高機能動作である。アプリケーションソースコードに適切に組み込まれるとき、カスタム動作は、本発明の、フィリップス社によって製造されたTrimedia TM-1のように高いパラレルのマイコン実行に有利であるアプリケーションを可能とする。
通常目的及び組み込まれたマイコンを基にしたアプリケーションの両方のために、高レベル言語のプログラムが望まれる。コンパイラの最適化及び簡単なプログラムのモデルを効果的に支援するために、大きな、線形アドレス空間、通常宛先レジスタ及び線形アドレスポインタの操作を直接支援するレジスタ−レジスタ間の動作のような、あるマイコンアーキテクチャが必要とされる。
本発明は、２個の１６ビットデータのアイテム又は４個の８ビットデータのアイテムを同時に動作するために、例えば３２ビットのリソースのようなシステムの全リソースの使用を許容する。この使用は、実行コストについての些細な増大だけで、何倍も実施を改善する。加えて、この使用は、標準マイコンのリソースから高実行レートを達成する。
数個の高機能カスタム動作は条件枝を削除でき、これは、例えばTM-1命令を持つフィリップス社のTM-1チップのような本システムの各命令における５つの動作スロットを計画者が効果的に使用することを助ける。５つのスロット全てを満たすことは、集中計算するマルチメディアアプリケーションの内部ループに特に重要である。カスタム動作は、本発明が最低のコストで非常に高いマルチメディア実施を達成することを助ける。
表１は、本発明のカスタム動作のリストである。数個のカスタム動作は、各オペランド及び結果の処理が異なる数個のバージョンに存在する。これら異なるバージョンのためのニーモニックには、明らかに異なるニーモニック又は名前が割り当てられ、適切な動作の選択のために各処理を明瞭にしようとしている。
0003739403.tif 000002
本発明のカスタム動作の使用の例が示される。この例の、バイト−マトリクス置換は、どのようにカスタム動作が小さなカーネルのアプリケーションでの処理速度を非常に増大できるかの簡単な例示を供給する。カスタム動作の多くの使用の場合のように、本場合におけるカスタム動作のパワーは、パラレルにマルチデータアイテムを動作する能力から来る。
例えば、メモリ内のバイトのパックされた、４ｘ４のマトリクスを置換する作業である。このマトリクスは、例えば８ビットのピクセル値を含む。第３（ａ）図は、メモリ内のこのマトリクスの組織を示し、第３（ｂ）図は、標準の数学的表記で、実施すべき作業が示されている。
従来のマイコンの命令でこの動作を実施することは、直線的ではあるが時間の浪費である。この操作を実施する一つの方法は、（１６バイトのうち１２バイトだけが再位置決めされる必要があるので）バイトをロードするための１２個のロードのバイト命令と、これらの新しい位置におけるメモリ内にバイトを記憶させるための１２個のストアーバイト命令とを実施することである。他の方法は、４個のロード−ワード命令を実施し、レジスタにロードされたワードのバイトを再位置決めし、それから４個のストア−ワード命令を実施することであろう。残念ながら、レジスタの前記バイトを再位置決めすることは、これらのバイトを適切にシフトしマスクする非常に多くの命令を必要とする。２４個のロード及びストアを実施することは、ロード／ストアのユニット内のシフトマスク用ハードウェアを必ず使用し、より短い命令シーケンスを生ずる。
２４個のロード及びストアを実施する問題は、ロード及びストアが本来的に遅い動作であるということである。これらは、メモリ階層のあり得る遅い層及び少なくともキャッシュをアクセスしなければならない。他に、バイトのロード及びストアを実施することは、３２ビットのワード−ワイドのアクセスを速く走らせるとき、キャッシュ／メモリのインタフェースのパワーの浪費である。キャッシュ／メモリのバンド幅の充分な利益を得る速いアルゴリズムが、不規則な数のバイト操作命令を必要としない間は、望まれる。
本発明は、直接且つパラレルにｐａｃｋバイト及び１６ビットハーフワード(pack16msb及びpack16lsb)と結合する(mergemsb mergelsb)命令を有する。これら命令の４個は、パックされたバイトをワードにする操作を速めるためにこの例で適用できる。
第４図は、バイト−マトリクス置換へのこれらの命令のアプリケーションを示す。第５（ａ）図は、マトリクス置換を実行するために必要な動作のリストを示す。実行命令にアセンブルされるとき、これらのカスタム動作は、例えば命令につき５個の動作までを許容してしっかりとパックされる。第５（ａ）図の低レベルコードは、例示としてのみここに示される。
第５（ａ）図の４個のロードワード動作(ld32)の最初のシーケンスは、入力マトリクスのパックされたワードをレジスタｒ１０，ｒ１１，ｒ１２及びｒ１３へ運ぶことである。４個の結合動作(mergemsb及びmergelsb)の次のシーケンスは、レジスタｒ１４，ｒ１５，ｒ１６及びｒ１７に中間結果を作ることである。４個のパック動作(pack16msb及びpack16lsb)の次のシーケンスは、オリジナルのオペランドを置き換えるか、又はオリジナルのマトリクスオペランドが他の計算に必要ならば（TM-1最適化Ｃコンパイラが自動的にこのような分析を行うだろう）、前記置換されたマトリクスを分離レジスタに置く。この例においては、前記置換マトリクスは、分離レジスタ(st32d)、レジスタｒ１８，ｒ１９，ｒ２０及びｒ２１に置かれる。４個の最終ストア−ワード動作は、前記置換マトリクスをメモリに入れる。
このように、本発明のカスタム動作を使用して、バイト−マトリクス置換は、４個のワード動作と４個のストア−ワード動作（最小可能性）と８個のレジスタ−レジスタデータ操作動作とを必要とする。結果としては、１６個の動作、又はバイト当たり一つの動作というレートでのバイト−マトリクス置換である。第５（ｂ）図は、等価のＣ言語部分を示す。
２４個のロード−バイト及びストア−バイト命令を使用するブルート−フォースコードについてのカスタム動作を基にしたアルゴリズムの利点は本例においては８個の動作だけ（３３％低減）のように見えるが、この利点は実際もっと大きい。第一に、カスタム動作を使用することで、メモリ参照の数が２４から８に、すなわち１／３に低減される。メモリ参照は（本例でカスタム動作を使用したように）レジスタ−レジスタ動作より遅いので、メモリ参照についての低減は、重要である。
他に、TM-1マイコンハードウェアの実行能力を促進する本システム（TM-1）のコパイルシステムの能力は、前記カスタム動作を基にしたコードにより強調される。特に、このコンパイルシステムは、メモリ参照の数がレジスタ−レジスタ動作の数とバランスがとれているとき、このコードの最適スケジュール（アレンジメント）を一層容易に作る。一般に、高機能マイコンは、シングルサイクルで処理できるメモリ参照の数に限界がある。結果として、メモリ参照だけを含む長いシーケンスのコードは、長いTM-1命令内に空の動作スロットを生じ、従ってこのハードウェアの実行能力を無駄にする。
この例が示すように、本発明のカスタム動作の使用は、計算を実施する必要がある動作の絶対数を減らし、コンパイルシステムが各ＣＰＵの実行能力を充分に発揮するコードを作ることを助ける。例えば完全ＭＰＥＧビデオコーティングアルゴリズム及び動き検出カーネルのためのＭＰＥＧ画像再構成のような他のアプリケーションは、これは徹底的ではないが、本発明のカスタム動作の使用により利益がある。
本発明は、表１にリストされたこれらのカスタム動作を含む。これらカスタム動作の特性は、以下に述べられるだろう。下記の機能コードにおいては、標準シンボル、シンタックス等が用いられる。例えば、temp1及びtemp2は、一時的レジスタを表す。他に、例として、関数temp1-sign_ext16to32(rsrc<15:0>)は、temp1が１６から３２ビット（符号ビット拡張）まで拡張される符号ビット（この例では第１５番ビット）を持つrsrc1の１５：０（ビット０から１５まで）でロードされる。同様に、temp2-sign_ext16to32(rsrc1<16:31>)は、rsrc1の第１６番ビットから第３１番ビットまでが、取り出され（計算するために、第０番から第１５番ビットに「置かれる」）、この例では第３１番ビットである符号ビットは、第１６番ビットから第３２番ビットまで拡張された符号である。この符号拡張は、符号化値として、この例では符号化整数のために用いられる。符号化されない値に対しては、ゼロで満たすことが用いられる。ゼロ充填の表記は、符号拡張の表記としても類似している。例えば、zero_ext8to32(rsrc1<15:0>)は、第０番ビットから第１５番ビットまでの値は動作されるべきであり、第８番ビットから第３２番ビットまではゼロで満たされる。rsrc1,rsrc2及びrdestは、上述のように利用可能なレジスタの何れでもよい。
下記にリストされる動作各々に対して、この動作は任意にはrguardに特定されるガード（ｇｕａｒｄ）をとる。ガードがあるならば、この例ではそのＬＳＢが宛先レジスタの修正を制御する。この例では、rguardのＬＳＢが１ならば、この例ではrdestは書き込まれ、そうでなければrdestは変わらない。
dspiabs: dspiabsは、h_dspiabs(ハードウェアdspiabs)に対するpseudo-op、クリップされた符号のついた絶対値動作である。この動作は、以下の関数を持つ。
0003739403.tif 000003
このdspiabs動作は、設計者によりdspiabs独立変数と等しい定常第一独立変数０及び第２独立変数を持つh_dspiabsへ変換されるpseudo動作である。pseudo動作は、一般にアセンブルソースファイルで用いられない。h_dspiabs動作は、同じ関数を実施するが、この動作は第一独立変数としてゼロを要求する。
このdspiabs動作は、rsrc1の絶対値を計算し、この結果を{231-1...0}又は{0x7fffffff...0}の範囲へクリップし、このクリップされた値をrdestへ（宛先レジスタ）記憶する。全ての値は、符号のついた整数である。
dspidualabs:dspidualabsは、h_dspidualabs(ハードウェアdspidualabs)に対するpseudo-op、符号のついた１６ビットハーフワード動作のデュアルにクリップされた絶対値である。この動作は、下記の関数を持つ。
0003739403.tif 000004
このdspidualabs動作は、設計者によりこの例では第一独立変数として定常ゼロ及び第２独立変数としてdspidualabs独立変数を持つh_dspidualabsへ変換されるpseudo動作である。
このdspidualabs動作は、rsrc1の高位及び低位の１６ビットハーフワードでの分離した、２個の１６ビットクリップされた符号のついた絶対値計算を実施する。絶対値の両方は、[0x0...0x7fff]の範囲へクリップされ、rdestの対応ハーフワードへ書き込まれる。全ての値は、符号のついた１６ビット整数である。h_dspidualabsは、同じ関数を実施するが、この動作は第一独立変数としてゼロを要求する。
dspiadd:dspiaddは、クリックされた符号のついた加算動作である。この動作は、以下の関数を持つ。
0003739403.tif 000005
第６図に示されるように、このdspiadd動作は、符号のついた和rsrc1+rsrc2を計算し、この結果を３２ビットの符号のついた範囲[231-1...-231]又は[0x7fffffff...0x80000000]にクリップし、このクリップされた値をrdestへ記憶する。全ての値は、符号のついた整数である。
dspuadd:dspuaddは、クリップされた符号のない加算動作である。この動作は、以下の関数を持つ。
0003739403.tif 000006
第７図に示されているように、dspuadd動作は、符号ない和rsrc1+rsrc2を計算し、この結果を符号のない範囲[232-1...0]又は[0xffffffff...0]にクリップし、このクリップされた値をrdestへ記憶する。
dspiduadd:dspidualddは、符号のついた１６ビットハーフワード動作のデュアルのクリップされた和である。この動作は、下記の関数を持つ。
0003739403.tif 000007
第８図に示されるように、このdspidualadd動作は、２個の各対のrsrc1及びrsrc2の高位及び低位１６ビットハーフワードの分離した、２個の１６ビットクリップされた符号のついた和である。これらの和は、範囲[215-1...215］又は[0x7fff...0x8000]にクリップされ、rdestの対応するハーフワードへ書き込まれる。全ての値は、符号のついた１６ビットの整数である。
dspuquadaddui:dspuquadadduiは、符号のない／符号のあるバイト動作のクワッドのクリップされた和である。この動作は、以下の関数を持つ。
0003739403.tif 000008
第９図に示されるように、このdspuquadaddui動作は、４個の各対の対応する８ビットバイトのrsrc1及びrsrc2の４個の別々の和を計算する。rsrc1のバイトは、符号のない値と考えられ、rsrc2のバイトは、符号のついた値と考えられる。これら４個の和は、符号のない範囲[255...0]又は[0xff...0]にクリップさる。従って、バイト和の結果は、符号がない。全ての計算は、精度の損失なしに実施される。
dspimul:dspimulは、クリップされた符号のついた乗算動作である。この動作は、以下の関数を持つ。
0003739403.tif 000009
第１０図に示されるように、このdspimul動作は、rsrc1 x rsrc2の積を計算し、この結果を[231-1...-231]又は[0x7fffffff...0x80000000]にクリップし、このクリップされた値をrdestに記憶する。全ての値は、符号のついた整数である。
dspumul:dspumulは、クリップされた符号のない乗算動作である。この動作は、以下の関数を持つ。
0003739403.tif 000010
第１１図に示されるように、このdspumul動作は、符号のないrsrc1 x rsrc2の積を計算し、この結果を符号のない範囲[232-1...0]又は[0xffffffff...0]にクリップし、このクリップされた値をrdestに記憶する。
dspidualmul:dspidualmulは、符号のついた１６ビットのハーフワード動作のデュアルのクリップされた乗算である。この動作は、以下の関数を持つ。
0003739403.tif 000011
第１２図に示されるように、dspidualmul動作は、２個の各対の高位及び低位１６ビットハーフワードのrsrc1及びrsrc2に別々に、２個の１６ビットクリップされた符号のついた積を計算する。これらの積は、範囲[215-1...-215]又は[0x7fff...0x8000]にクリップされ、rdestの対応するハーフワードに書き込まれる。全ての値は、符号のついた１６ビットの整数である。
dspisub:dspisubは、クリップされた符号のついた減算動作である。この動作は、以下の関数を持つ。
0003739403.tif 000012
第１３図に示されるりように、このdspisub動作は、rsrc1-rsrc2の差を計算し、この結果を範囲(0x80000000..0x7fffffff]にクリップし、このクリップされた値をrdestに記憶する。全ての値は、符号のついた整数である。
dspusub:dspusubは、クリップされた符号のない減算動作である。この動作は、以下の関数を持つ。
0003739403.tif 000013
第１４図に示されるように、このdspusub動作は、rsrc1-rsrc2の符号のない差を計算し、この結果を符号のない範囲[0.0xffffffff]にクリップし、このクリップされた値をrdestに記憶する。
dspidualsub:dspidualsubは、符号のついた１６ビットのハーフワード動作のデュアルのクリップされた減算である。この動作は、以下の関数を持つ。
0003739403.tif 000014
第１５図に示されるように、このdspidualsub動作は、２個の各対のrsrc1及びrsrc2の高位及び低位１６ビットハーフワードで別々に２個のの１６ビットクリップされた符号のついた差を計算する。これらの差は、範囲[215-1,,,-215]又は[0x7fff...0x8000]にクリップされ、rdestの対応するハーフワードに書き込まれる。全ての値は、符号のついた１６ビット整数である。
ifir16:ifir16は、符号のついた１６ビットハーフワード動作の積の和である。この動作は、以下の関数を持つ。
0003739403.tif 000015
第１６図に示されるように、このifir16動作は、rsrc1及びrsrc2の対応する１６ビットハーフワードの２個の各対の２個の別々の積を計算する。これら２個の積は加算され、この結果はrdestに書き込まれる。全てのハーフワードは、符号がついてると考えられる。従って、これらの積及び積の最終的和は、符号がある。全ての計算は、精度の損失なしに実施される。
ifir8ii:ifir8iiは、符号のついたバイト動作の積の符号のついた和である。この動作は、以下の関数を持つ。
0003739403.tif 000016
第１７図に示されるように、このifir8ii動作は、rsrc1及びrsrc2の対応する８ビットバイトの４個の各対の４個の別々の積を計算する。これら４個の積は加算され、この結果はrdestに書き込まれる。全ての値は、符号がついてると考えられる。従って、これらの積及び積の最終的和は、符号がある。全ての計算は、精度の損失なしに実施される。
ifir8ui:ifir8uiは、符号のない／符号のついたバイト動作の積の符号のついた和である。この動作は、以下の関数を持つ。
0003739403.tif 000017
第１８図に示されるように、このifir8ui動作は、rsrc1及びrsrc2の対応する８ビットバイトの４個の各対の４個の別々の積を計算する。これら４個の積は加算され、この結果はrdestに書き込まれる。rsrc1からのバイトは、符号がないと考えられるが、rsrc2からのバイトは符号があると考えられ、従ってこれらの積及び積の最終的和は、符号化される。全ての計算は、精度の損失なしに実施される。
ufir16:ufir16は、符号のない１６ビットハーフワード動作の積の和である。この動作は、以下の関数を持つ。
0003739403.tif 000018
第１９図に示されるように、このufir16動作は、rsrc1及びrsrc2の対応する１６ビットハーフワードの２個の各対の２個の別々の積を計算し、これら２個の積は加算され、この結果はrdestに書き込まれる。全てのハーフワードは符号がないと考えられ、従ってこれらの積及び積の最終的和は、符号がない。全ての計算は、精度の損失なしに実施される。積のこの最終的和は、rdestに書き込まれる前に範囲[0xffffffff...0]にクリップされる。
ufir8uu:ufir8uuは、符号のないバイト動作の積の符号のない和である。この動作は、以下の関数を持つ。
0003739403.tif 000019
第２０図に示されるように、このufir8uu動作は、rsrc1及びrsrc2の対応する８ビットバイトの４個の各対の２個の別々の積を計算し、これら４個の積は加算され、この結果はrdestに書き込まれる。全てのバイトは符号がないと考えられる。全ての計算は、精度の損失なしに実施される。
mergelsb:mergelsbは、マージの最小バイト動作である。この動作は、以下の関数を持つ。
0003739403.tif 000020
第２１図に示されるように、このmergelsb動作は、独立変数rsrc1及びrsrc2からrdestへの最小バイトの２個の各対をインタリーブする。rsrc2からの最小バイトは、rdestの最小バイトにパックされ、rsrc1からの最小バイトは、rdestの第２最小バイトにパックされ、rsrc2からの第２最小バイトは、rdestの第２最小バイトにパックされ、rsrc1から第２最小バイトは、rdestの最大バイトにパックされる。
mergemsb:mergemsbは、マージの最大バイト動作である。この動作は、以下の関数を持つ。
0003739403.tif 000021
第２２図に示されるように、このmergemsb動作は、独立変数rsrc1及びrsrc2からrdestへの最大バイトの２個の各対をインタリーブする。rsrc2からの第２最大バイトは、rdestの最小バイトにパックされ、rsrc1からの第２最大バイトは、rdestの第２最小バイトにパックされ、rsrc2からの最大バイトは、rdestの第２最大バイトにパックされ、rsrc1からの最大バイトは、rdestの最大バイトにパックされる。
pack16lsb:pack16lsbは、パック最小１６ビットハーフワード動作である。この動作は、以下の関数を持つ。
0003739403.tif 000022
第２３図で示されるように、このpack16lsb動作は、独立変数rsrc1及びrsrc2からrdestへの２個の各最小ハーフワードをパックする。rsrc1からのこのハーフワードは、rdestの最大ハーフワードにパックされ、rsrc2からのこのハーフワードは、rdestの最小ハーフワードにパックされる。
pack16msb:pack16msbは、パック最大１６ビット動作である。この動作は、以下の関数を持つ。
0003739403.tif 000023
第２４図に示されるように、このpack16msb動作は、独立変数rsrc1及びrsrc2からrdestへの２個の各最大ハーフワードをパックする。rsrc1からのこのハーフワードは、rdestの最大ハーフワードにパックされ、rsrc2からのこのハーフワードは、rdestの最小ハーフワードにパックされる。
packbytes:packbytesは、パック最小バイト動作である。この動作は、以下の関数を持つ。
0003739403.tif 000024
第２５図に示されるように、このpackbytes動作は、独立変数rsrc1及びrsrc2からrdestへの２個の各最小バイトをパックする。rsrc1からのこのバイトは、rdestの第２最小バイトにパックされ、rsrc2からのこのバイトは、rdestの最小バイトにパックされる。rdestのこれら２個の最大バイトは、ゼロで満たされる。
quadavg:quadavgは、符号のないバイト換算クワッド平均動作である。この動作は、以下の関数を持つ。
0003739403.tif 000025
第２６図に示されるように、このquadavg動作は、独立変数rsrc1及びrsrc2の４個の各対の４個の別個の平均を計算する。全てのバイトは、符号がないと考えられる。各平均の最小８ビットは、rdestの対応するバイトに書き込まれる。オーバフローがないか又はアンダーフローがないかの検出が実施される。
quadumulmsb:quadumulmsbは、符号のないクワッド８ビット乗算最大動作である。この動作は、以下の関数を持つ。
0003739403.tif 000026
第２７図に示されるように、このquadumulmsb動作は、rsrc1及びrsrc2の対応する８ビットバイトの４個の各対の４個の別個の積を計算する。全てのバイトは、符号がないと考えられる。各１６ビット積の最大８ビットは、rdestの対応するバイトに書き込まれる。
ume8ii:ume8iiは、符号のついた８ビット差動作の絶対値の符号のない和である。この動作は、以下の関数を持つ。
0003739403.tif 000027
第２８図に示されるように、このume8ii動作は、rsrc1及びrsrc2の対応する符号のついた８ビットバイトの４個の各対の４個の別々の差であり、これら４個の差の絶対値が加算され、この和はrdestに書き込まれる。全ての計算は、精度の損失なしに実施される。
ume8uu:ume8uuは、符号のない８ビット差動作の絶対値の和である。この動作は、以下の関数を持つ。
0003739403.tif 000028
第２９図に示されるように、このume8uu動作は、rsrc1及びrsrc2の対応する符号のない８ビットバイトの４個の各対の４個の別々の差である。これら４個の差の絶対値が加算され、この和はrdestに書き込まれる。全ての計算は、精度の損失なしに実施される。
iclipi:iclipiは、符号のついた動作への符号のついたクリップである。この動作は以下の関数を持つ。
0003739403.tif 000029
このiclipi動作は、クリップされたrsrc1の値を符号のない整数範囲(-rsrc2-1)からrsrc2まで含めて戻す。独立変数rsrc1は、符号のついた整数と考えられる。rsrc2は、符号のない整数と考えられ、0から0x7fffffffまで含んだ範囲内の値を持つ。
uclipi:uclipiは、符号のない動作への符号のついたクリップである。この動作は以下の関数を持つ。
0003739403.tif 000030
このuclipi動作は、クリップされたrsrc1の値を符号のない整数範囲0からrsrc2まで含めて戻す。独立変数rsrc1は、符号のない整数と考えられる。rsrc2は、符号のない整数と考えられる。
uclipu:uclipuは、符号のない動作への符号のないクリップである。この動作は以下の関数を持つ。
0003739403.tif 000031
このuclipu動作は、クリップされたrsrc1の値を符号のない整数範囲0からrsrc2まで含めて戻す。独立変数rsrc1及びrsrc2は、符号のない整数と考えられる。
上記カスタムマルチメディア動作の使用により、アプリケーションは、低コストでマルチメディア機能の高度のパラレルなマイコン実施という利益が得られる。
これまでに開示したように、本発明がＶＬＩＷ，ＲＩＳＣ，スーパースケーラー等の命令フォーマットに用いられる多くの高度のパラレルなマイコン実施に用いられることは、容易に理解できる。加えて、当業者は、上記概念を基にして付加の動作を容易に付加することができる。例えば、バイトのクワッドのクリップされた減算は特に述べないが、当業者であれば明瞭にこれまでの開示されたことを基にしてその動作を容易に開発できる。
マルチメディア機能を実施する使用のためのカスタム動作用システム及び方法が述べられた。
これまでの開示において、本発明の好ましい実施例だけが述べられたが、前述のように本発明は、各種他の組み合わせ及び環境でも使用でき、ここに述べられた本発明の概念の範囲内で変更又は修正ができることは、理解されるべきである。
【図１】
0003739403.tif 000032
【図２】
0003739403.tif 000033
【図３ａ】
0003739403.tif 000034
【図３ｂ】
0003739403.tif 000035
【図４】
0003739403.tif 000036
【図５ａ】
0003739403.tif 000037
【図５ｂ】
0003739403.tif 000038
【図６】
0003739403.tif 000039
【図７】
0003739403.tif 000040
【図８】
0003739403.tif 000041
【図９】
0003739403.tif 000042
【図１０】
0003739403.tif 000043
【図１１】
0003739403.tif 000044
【図１２】
0003739403.tif 000045
【図１３】
0003739403.tif 000046
【図１４】
0003739403.tif 000047
【図１５】
0003739403.tif 000048
【図１６】
0003739403.tif 000049
【図１７】
0003739403.tif 000050
【図１８】
0003739403.tif 000051
【図１９】
0003739403.tif 000052
【図２０】
0003739403.tif 000053
【図２１】
0003739403.tif 000054
【図２２】
0003739403.tif 000055
【図２３】
0003739403.tif 000056
【図２４】
0003739403.tif 000057
【図２５】
0003739403.tif 000058
【図２６】
0003739403.tif 000059
【図２７】
0003739403.tif 000060
【図２８】
0003739403.tif 000061
【図２９】
0003739403.tif 000062
【図３０】
0003739403.tif 000063
【図３１】
0003739403.tif 000064
【図３２】
0003739403.tif 000065