(57)【特許請求の範囲】
【請求項１】
コプロセッサのための命令を提供する方法であって、
少なくとも１つのコプロセッサ命令を有する、一連のＳＩＭＤ命令に応じて、前記コプロセッサを用いてデータ処理を実行する段階と、
前記少なくとも１つのコプロセッサ命令に、メモリ上で連続した２つのデータであって、前記２つのデータ間にアライメント境界がある２つのデータを格納する２つのソース・レジスタ、および、アライメント動作によって前記２つのソース・レジスタから取り出されるデータを格納する１つのデスティネーション・レジスタを提供する段階と、
前記コプロセッサによって実行される前記アライメント動作を指定するオペコード、前記少なくとも１つのコプロセッサ命令の目標コプロセッサを識別するコプロセッサ識別フィールド、および、オフセット値が格納される場所を指定する、または、オフセット値を即値形式で指定するオフセット情報を有するコプロセッサ命令を提供する段階と、
前記２つのソース・レジスタから前記アライメント境界にまたがる前記連続した２つのデータを取り出し、前記連続した２つのデータが前記オフセット値によりオフセットされてアライメントされたデータを、前記デスティネーション・レジスタに置く、レジスタ・アライメント命令および即値アライメント命令のいずれか一方を実行する段階と、を備え、
前記レジスタ・アライメント命令は、アライメントのシーケンスが演算されるときに、アクセス・アドレスをマスクしてオフセットが作成されて、前記オフセット値が前記場所から取り出され、実行され、
前記即値アライメント命令は、アライメントのシーケンスが前もって知られているときに、前記即値アライメント命令に即値形式で指定されている前記オフセット値を用いて実行され、
前記コプロセッサ命令は、前記ＳＩＭＤ命令に基づいて、前記オフセット値の前記格納された場所を特定する前記レジスタ・アライメント命令、又は、前記オフセット値を即値であると特定する前記即値アライメント命令であると特定される
方法。
【請求項２】
前記オフセット値の前記格納された場所は汎用目的のレジスタを含むことを特徴とする請求項１に記載の方法。
【請求項３】
メイン・プロセッサの算術フラグの状態に依存して前記少なくとも１つのコプロセッサ命令を条件付きで実行することを特徴とする請求項１または２に記載の方法。
【請求項４】
前記２つのソース・レジスタは、交互にデータが取り出されるように切り替えられる請求項１から３のいずれか一項に記載の方法。
【請求項５】
システムを機能させる命令を含むプログラムであって、前記命令を実行した場合に、プロセッサをベースとするシステムは、
少なくとも１つのコプロセッサ命令を有する、一連のＳＩＭＤ命令に応じてコプロセッサを使用してデータ処理を実行し、
前記少なくとも１つのコプロセッサ命令に、メモリ上で連続した２つのデータであって、データ間にアライメント境界がある２つのデータを格納する２つのソース・レジスタ、および、アライメント動作により前記２つのソース・レジスタから取り出されるデータを格納する１つのデスティネーション・レジスタを提供し、
コプロセッサによって実行される前記アライメント動作を指定するオペコード、前記少なくとも１つのコプロセッサ命令の目的コプロセッサを識別するコプロセッサ識別フィールド、および、オフセット値が格納された場所を指定する、または、オフセット値を即値形式で指定するオフセット情報を有するコプロセッサ命令を提供し、
前記２つのソース・レジスタから前記アライメント境界にまたがる前記連続した２つのデータを取り出し、前記連続した２つのデータが前記オフセット値によりオフセットされてアライメントされたデータを、前記デスティネーション・レジスタに置く、レジスタ・アライメント命令および即値アライメント命令のいずれか一方を実行し、
前記レジスタ・アライメント命令は、アライメントのシーケンスが演算されるときに、アクセス・アドレスをマスクしてオフセットが作成されて、前記オフセット値が前記場所から取り出され、実行され、
前記即値アライメント命令は、アライメントのシーケンスが前もって知られているときに、前記アライメント命令に即値形式で指定されている前記オフセット値を用いて実行され、
前記コプロセッサ命令は、前記ＳＩＭＤ命令に基づいて、前記オフセット値の前記格納された場所を特定する前記レジスタ・アライメント命令、又は、前記オフセット値を即値であると特定する前記即値アライメント命令であると特定される
ことを可能にするプログラム。
【請求項６】
前記オフセット値の前記格納された場所は汎用目的のレジスタを含むことを特徴とする請求項５に記載のプログラム。
【請求項７】
前記プログラムは、前記システムが、前記２つのソース・レジスタに格納された前記データを演算する場合に、符号付き飽和、飽和なし、および、符号なし飽和を含む３つの異なる飽和タイプを提供することを可能にする命令をさらに含む請求項５または６に記載のプログラム。
【請求項８】
前記プログラムは、前記システムが、メイン・プロセッサの算術フラグの状態に依存して前記少なくとも１つのコプロセッサ命令を条件付きで実行することを可能にする命令をさらに含む請求項５から７のいずれか一項に記載のプログラム。
【請求項９】
前記２つのソース・レジスタは、交互にデータが取り出せるように切り替えられる請求項５から８のいずれか一項に記載のプログラム。
【請求項１０】
単一命令複数データ（ＳＩＭＤ）のコプロセッサであって、
算術フラグを含むプロセッサと、
前記コプロセッサによって実行されるアラインメント動作を指定するオペコード、少なくとも１つのコプロセッサ命令の目的コプロセッサを識別するコプロセッサ識別フィールド、および、オフセット値が格納される場所を指定する、または、オフセット値を即値形式で指定するオフセット情報を格納する記憶装置と、を備え、
前記コプロセッサは、２つのソース・レジスタからメモリ上で連続した２つのデータであって、データ間にアライメント境界がある２つのデータを取り出し、前記連続した２つのデータが前記オフセット値によりオフセットされてアライメントされたデータを、デスティネーション・レジスタに置く、レジスタ・アライメント命令および即値アライメント命令のいずれか一方を実行し、
前記レジスタ・アライメント命令は、アライメントのシーケンスが演算されるときに、アクセス・アドレスをマスクしてオフセットが作成されて、前記オフセット値が前記場所から取り出され、実行され、
前記即値アライメント命令は、アライメントのシーケンスが前もって知られているときに、前記アライメント命令に即値形式で指定されている前記オフセット値を用いて実行され、
前記コプロセッサ命令は、前記ＳＩＭＤの命令に基づいて、前記オフセット値の前記格納された場所を特定する前記レジスタ・アライメント命令、又は、前記オフセット値を即値であると特定する前記即値アライメント命令であると特定される
コプロセッサ。
【請求項１１】
前記オフセット値の前記格納された場所は汎用目的のレジスタを含むことを特徴とする請求項１０に記載のコプロセッサ。
【請求項１２】
前記コプロセッサはビット０から３１を有する命令を使用し、ここでビット７から５は動作タイプを示し、ビット１１から８はコプロセッサ番号を示し、ビット２３および２２はオペランド・サイズを示し、ビット２１および２０は飽和タイプを設定する請求項１０または１１に記載のコプロセッサ。
【請求項１３】
前記２つのソース・レジスタは、交互にデータが取り出されるように切り替えられる請求項１０から１２のいずれか一項に記載のコプロセッサ。
【請求項１４】
コプロセッサのための命令を提供する方法であって、
少なくとも１つのコプロセッサ命令を含む、一連のＳＩＭＤ命令に応じて、前記コプロセッサを用いてデータ処理を実行する段階と、
前記少なくとも１つのコプロセッサ命令に、メモリ上で連続した２つのデータであって、データ間にアライメント境界がある２つのデータを格納する２つのソース・レジスタ、および、アライメント動作によって前記２つのソース・レジスタから取り出されるデータを格納する１つのデスティネーション・レジスタを提供する段階と、
前記コプロセッサによって実行される前記アライメント動作を指定するオペコード、前記少なくとも１つのコプロセッサ命令の目標コプロセッサを識別するコプロセッサ識別フィールド、および、レジスタ・アライメント値および即値アライメント値のいずれか一方を格納するために使用される２ビットのフィールドと、
前記２ビットのフィールドに格納された値が前記レジスタ・アライメント値に対応するときに、アクセス・アドレスをマスクしてオフセットが作成され、第１のオフセット値を格納する複数の補助レジスタの一つの指定として、前記コプロセッサ命令の予め定められたビット位置に蓄えられた値を用いる段階と、
前記２ビットのフィールドに格納された値が前記即値アライメント値に対応するときに、前記予め定められたビット位置に蓄えられた値を第２のオフセット値として用いる段階と、
前記２つのソース・レジスタから、前記アライメント境界にまたがる前記連続した２つのデータを取り出して、前記第１のオフセット値および前記第２のオフセット値のいずれか一つの値により、前記連続した２つのデータがオフセットされてアライメントされたデータを、前記デスティネーション・レジスタに置く段階と、を備え、
前記コプロセッサ命令は、前記ＳＩＭＤ命令に基づいて、前記第１のオフセット値の前記格納された場所を特定する前記レジスタ・アライメント値、又は、前記第２のオフセット値を即値であると特定する前記即値アライメント値であると特定される
方法。
【請求項１５】
前記２つのソース・レジスタは、交互にデータが取り出されるように切り替えられる請求項１４に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理の分野に関する。さらに詳しくは、本発明は、コプロセッサを組み込んだデータ処理システムに関する。
【背景技術】
【０００２】
メイン・プロセッサ（main processor）とコプロセッサ（coprocessor）の両方を組み
込んだデータ処理システムを提供することが知られている。いくつかのシステムでは、１またはそれ以上の異なるコプロセッサにメイン・プロセッサを提供することができると知られている。この場合、それぞれのコプロセッサは異なるコプロセッサ番号によって識別することができる。
【０００３】
メイン・プロセッサの命令のデータ・ストリーム中に遭遇したコプロセッサ命令は、コプロセッサに結合されたバス上に出される。バスに接続された１またはそれ以上のコプロセッサ（各々は関連するハードワイヤードのコプロセッサ番号を有する）は、コプロセッサ番号をチェックし、その命令に対するターゲット（目標）コプロセッサかどうかを判断する。目標コプロセッサである場合、それらはメイン・プロセッサへ受付信号を発行する。メイン・プロセッサが受付信号を受信しない場合、それは未定義命令に対処する例外状態に入ることができる。
【０００４】
コプロセッサ命令がメイン・プロセッサ命令のサブセットであるとすれば、多くの場合、命令のビット空間はコプロセッサのために制限される。コプロセッサが非常に多くの広範囲の動作を備える豊富な命令セットを要求する場合、これらの問題はより悪化する。
【０００５】
したがって、コプロセッサのための命令をより明確な形で表わす、よりよい方法が必要である。
【発明の開示】
【０００６】
本発明の一実施例に従って図１に示されるように、データ処理システム２２は、メイン・プロセッサまたは実行コア２４、マルチメディア・コプロセッサ２６、キャッシュ・メモリ２８、および、入出力システム３２を含む。入出力システム３２は、本発明の一実施例であるワイヤレス・インターフェイス３３へ結合されてもよい。
【０００７】
動作において、メイン・プロセッサ２４は、キャッシュ・メモリ２８および入出力システム３２との対話を含む一般的なタイプのデータ処理命令を制御する一連のデータ処理命令を実行する。コプロセッサの命令は、一連のデータ処理命令内に埋め込まれている。メイン・プロセッサ２４は、これらのコプロセッサ命令を、接続されたコプロセッサ２６によって実行されるべきタイプであると認識する。従って、メイン・プロセッサ２４は、これらのコプロセッサ命令をコプロセッサ・バス３６上に出し、接続されたいずれのコプロセッサもそこから命令を受け取る。この場合、コプロセッサ２６は、コプロセッサが検出するすべての受け取ったコプロセッサのために意図されたコプロセッサ命令を受け取り実行する。この検出は、コプロセッサ命令内のコプロセッサ番号領域(フィールド)および指定されたコプロセッサ用の有効な命令の符号化の組合せを介してなされる。
【０００８】
図２を参照して、マルチメディア・コプロセッサ２６は、転送バッファ４６を含むコプロセッサ・インターフェイス・ユニット（ＣＩＵ）３４を含む。転送バッファ４６は、コプロセッサ・レジスタ（ＭＣＲ）への転送およびコプロセッサ（ＭＲＣ）からの転送を促進する。ＣＩＵ３４は、さらに格納バッファ４８およびロード・バッファ５０を含んでもよい。ＣＩＵ３４は、乗算累算ユニット３６、シフトおよび置換ユニット３８、および、算術論理演算ユニット（ＡＬＵ）／論理ユニット４０と通信を行なう。ＣＧＲ４４は補助レジスタを含む。複数のマルチプレクサ（ＭＵＸ）は、様々なユニット間のデータ転送を促進する。
【０００９】
レジスタ・ファイル（ＲＦ）ユニット４２は複数のレジスタを含む。一実施例において、ＲＦユニット４２は１６個のレジスタを含む。各命令に対して、３つのレジスタ４２ａが割り当てられる。本発明のいくつかの実施例では、２つのソース・レジスタおよび１つのデスティネーション・レジスタ４２ａが各命令に割り当てられる。本発明の一実施例に従って、第１のソース・レジスタはｗＲｎと指定され、第２のソース・レジスタはｗＲｍと指定され、また、デスティネーション・レジスタはｗＲｄと指定される。
【００１０】
コプロセッサ命令は、条件付きで実行することができる。その手段は条件付きで実行され、その命令は図１のメイン・プロセッサ算術フラグ２５ａ，２５ｂが所定の条件と一致するかどうかを判断することによりチェックされる条件を有する。
【００１１】
次に図３に移り、いくつかの実施例では、６４ビットの単一命令で複数のデータを処理する（ＳＩＭＤ：single instruction multiple data）算術演算は、コプロセッサ・データ処理（ＣＤＰ）命令を通じて行なわれる。２つのソースおよび１つのデスティネーション・オペランドを含む３つのオペランド命令が使用されてもよい。コプロセッサは、８，１６，３２および６４ビット値で動作することができ、いくつかの実施例では、条件付きで実行される。ある場合には、加算と減算は、キャリー付き加算と同様に行なうことができる。ゼロ、負、キャリーおよびオーバフローの検出は、すべてＳＩＭＤフィールドでなされる。さらに、ＳＩＭＤフィールド幅への符号付き飽和は、符号なし飽和と一緒に達成されてもよい。
【００１２】
加算命令は、８，１６または３２ビットの符号付きまたは符号なしデータのベクトルのためにソース・レジスタ（ｗＲｎとｗＲｍ）内容のベクトル加算を行なう。その命令は、その結果をデスティネーション・レジスタｗＲｄに置く。飽和は、符号付き、符号なしあるいは飽和なしとして指定される。
【００１３】
飽和（saturation）は、動作の結果生じるビット数が有効な範囲を超える場合に生起することに関係する。飽和なしでは、結果における下位ビットだけが示される。符号なし飽和（ＵＳ：unsigned saturation）で、０から最大範囲までのビットが示される。符号付
き飽和（ＳＳ：signed saturation）では、正の最大から負の最大の値までのビットが示
される。飽和タイプに続く擬似コードでは、ＳＳとＵＳはそれらがオプションであることを示すために中括弧の中で示される。
【００１４】
オペランドのサイズは、１バイトまたは８ビット、ハーフ・ワードまたは１６ビット、あるいはワードまたは３２ビットである。いくつかの状況では、１６ビットはワードと、３２ビットはダブル・ワードと、および、６４ビットはクワッド・ワードと呼ばれる。バイトＳＩＭＤの場合には、デスティネーション・レジスタ（ｗＲｄ）中の番号が付けられたバイト位置は、それぞれ、ソース・レジスタ（ｗＲｎとｗＲｍ）中の同じバイト位置の合計を指定のデータ・サイズ（例えばバイト・サイズとしての８）に飽和させる結果である。
【００１５】
【数１】
0005634898.tif 000002
ハーフ・ワードの場合：
【００１６】
【数２】
0005634898.tif 000003
最後に、ワードＳＩＭＤが識別される場合：
【００１７】
【数３】
0005634898.tif 000004
【００１８】
エンコードの結果、３２ビット命令の場合、ビット０から３がｗＲｍソース・レジスタ向けであり、ビット４は０であり、ビット５から７は動作を識別し、加算命令の場合には１００である。ビット８から１１はコプロセッサ番号を識別するが、このような関係では１である。ビット１２から１５がデスティネーション・レジスタに与える一方、ビット１６から１９はソース・レジスタｗＲｎ向けである。
【００１９】
ビット２０，２１は飽和タイプを提供する。飽和なしについては、ビットは００であり、符号なし飽和（ＵＳ）については０１であり、また、符号付き飽和（ＳＳ）については１１である。ビット２２，２３は、オペランドのサイズを提供する。１バイト・サイズのオペランドについてはビット２２，２３は００であり、ハーフ・ワードについてはビットは０１であり、また、ワードについてはビットは１０である。ビット２４から２７はコプロセッサ動作を示す１１１０である。次の議論は、コプロセッサ命令を指定する、ビット２７から２４が１１１０であると仮定する。ビット２８から３１は、条件付き実行が適用可能かどうか示す。条件付き実行は自由に指定される。
【００２０】
減算動作は、８，１６または３２ビットである符号付きまたは符号なしデータのベクトルのためにｗＲｎからｗＲｍのベクトル減算を行ない、その結果をｗＲｄに置く。また、飽和を指定することができる。ＳＩＭＤが８ビットまたは１バイトである状況に対して：
【００２１】
【数４】
0005634898.tif 000005
命令がハーフ・ワードである場合：
【００２２】
【数５】
0005634898.tif 000006
最後に、ワードが指定される場合：
【００２３】
【数６】
0005634898.tif 000007
【００２４】
ビット５から７がベクトル減算を特定する１０１を示す以外、その符号化は加算動作のために前述されたのと同じである。
【００２５】
したがって、図４を参照して、ブロック６２では、加算または減算命令の場合に、加算または減算命令を含むかどうかを判断するためにビット５から７が分析される。加算命令に対するビットは１００であり、また、減算命令については１０１である。加算または減算を含む場合、ブロック６６で判断されるように、ビット８から１１が分析される。判断ブロック６８でのチェックは、分析されたビットがマルチメディア・コプロセッサが指定されていることを示すかどうかを判断する。そうでないならば、判断ブロック６９でのチェックで、条件付き実行が指定されたかどうかが判断される。そうならば、判断ブロック７１でのチェックで、算術レジスタ２５中のフラグの状態が判断される。もし条件が満たされることをフラグが示す場合、命令の実行は継続し、そうでなければ、フローは次の命令に移る。
【００２６】
ビット２２，２３はブロック７０で分析される。判断ブロック７１で判断されるように、ビットが０と０である場合、オペランド・サイズは１バイトである。同様に、判断ブロック７２で判断されるように、ビットが０と１である場合、オペランド・サイズはハーフ・ワードである、そうでなければ、命令は無効（ビット２２，２３は両方とも１である）、または、オペランド・サイズはフルワードである。フローにおいて、無効のオプションは、ここおよび次の命令に対して両方とも明瞭のために省略されている。そのサイズはブロック７４で設定される。
【００２７】
次に、ビット２０，２１がブロック７６で分析される。判断ブロック７８で判断されるように、これらのビットが０と０である場合、飽和なしが利用される。同様に、判断ブロック８０で判断されるように、ビットが０と１である場合、符号なし飽和が提供される。そうでなければ、符号付き飽和が提供される。適切な飽和タイプがブロック８２で設定される。
【００２８】
論理演算については、ビット１１から８、ビット７から５、および、ビット２３から２２は、すべて０である。ビット位置２１から２０の値が００の場合はＯＲ関数と判断され、ビット位置２１から２０の値が０１の場合は排他的ＯＲ関数と判断され、ビット位置２１から２０の値が１０の場合はＡＮＤ関数と判断され、また、ビット位置２１から２０の値が１１の場合はＡＮＤＮ関数と判断される。ＡＮＤ関数では、コプロセッサは、ｗＲｎとｗＲｍとの間でビット毎の論理積を行ない、デスティネーション・レジスタｗＲｄにその結果を置く。ＯＲ関数では、コプロセッサは、ｗＲｎと否定ｗＲｍとの間でビット毎の論理和を行ない、デスティネーション・レジスタｗＲｄにその結果を置く。ＡＮＤＮ関数では、コプロセッサは、ｗＲｎと否定ｗＲｍとの間でビット毎の論理積を行ない、デスティネーション・レジスタｗＲｄにその結果を置く。排他的ＯＲ（ＸＯＲ）関数では、コプロセッサは、ｗＲｎとｗＲｍとの間でビット毎の論理的排他ＯＲを行ない、ｗＲｄにその結果を置く。例えば、図４に関して示されるように、条件付き実行が指定され実行される。
【００２９】
図５を参照して、判断ブロック８４では、ビット・パターンが論理演算に対応するかどうかのチェックが行なわれる。そうでなければ、フローは別のモジュールに進む。しかし、さもなければ、８６で示されるように、論理演算が行なわれる。判断ブロック８８，９０，９２では、ビット２１，２０に基づいて、どのタイプの論理演算が適用されるかに関しての判断がなされる。
【００３０】
アライメント動作（alignment operation）は、６４ビット境界のメモリに格納されて
いないデータを扱うための有用な機能を行なう。例えば、単に、６４ビットのアライメントの合わされたアドレスからダブル・ワードの６４ビットのデータをロードすることができる技術であってもよい。したがって、アライメントの合わされていない値が要求される場合、アライメントの合わされていない値がまたがる２つの６４ビットのアライメントの合わされたダブル・ワードがレジスタ・ファイルにロードされ、また、アライメント命令が要求された正しい６４ビットを取り出すために使用される。これは、正しいアライメントを取り出すために値をシフトしマスクを行なう従来のアプローチを保存する。アライメント命令は、２つのソース・レジスタからバイト境界上の任意の６４ビット値を取り出すことができる。
【００３１】
図７は、アライメント命令を適用する例を示す。この例において、要求されるデータは、６４ビットのアライメントの合わされたアドレスではないアドレス０ｘ１０３からの６４ビットの値である。この値を得るために、アドレス０ｘ１００からのダブル・ワード・データは右のソース・レジスタにロードされ、また、アドレス０ｘ１０８からのダブル・ワード・データは左のソース・レジスタにロードされる。アライメント命令は３つの指定されたオフセットと共に使用される。これは、右のレジスタ（アドレス０ｘ１０３−０ｘ１０７からのバイト）からの５バイトが取り出され、左のレジスタ（アドレス０ｘ１０８−０ｘ１０Ａからのバイト）の下位３バイトと結合される。したがって、アライメント命令の実行後、そのデスティネーションにはアドレス０ｘ１０３から０ｘ１０Ａまでの所要のデータ、つまりアドレス０ｘ１０３で６４ビットの値を含む。
【００３２】
アライメント・オフセットは、命令の即値形式（immediate form）を使用する即値（immediate）として、または、レジスタ・フォーマットを使用しｗＣＧＲｘの補助レジスタ
にアライメント・オフセットを置くことにより指定することができる。アドレス・オフセットが、アクセス・アドレスの下位ビットからマスクすることにより作成され、次にｗＣＧＲレジスタに転送される場合、後者は有用である。したがって、図７を参照して、実施例においては、３ビットであるビット２０から２２に、取り出すべき値のバイト・オフセットを指定する、即値アライメント・モード（ＩＭＭ）を与える。
【００３３】
アライメントのシーケンスが単一サンプルの有限インパルス応答（ＦＩＲ）フィルタで、前もって知られているとき、即値アライメント命令は有用である。アライメントのシーケンスはそのアルゴリズムが画像圧縮で使用される高速検索アルゴリズムで実行するときに演算される場合、そのレジスタ・アライメント命令は有用である。これらの命令の両方ともレジスタ対上で動作するが、そのレジスタ対はアライメントのオーバヘッドを著しく減少する交互のロードで有効に切り替えられる。
【００３４】
アライメント動作では、ビット８から１１は０であり、また、ビット５から７は００１である。コプロセッサは、使用されるべきレジスタ・アライメント値を決定するために、ビット位置２３，２２中に値１０を使用する。ビット位置２３の値０は、使用されるべき即値アライメント値を決定する。レジスタ・アライメント・モードにおいて、ビット２１およびビット２０は、ＣＧＲ４４（図２）を介して、４つの補助レジスタのどれをアライメント値に使用するかを決定する。
【００３５】
即値アライメント・モードにおいて、ビット２０からビット２２は、アライメント・オフセット（０と７の間）を決定する。即値アライメントの中で、コプロセッサは、２つの６４ビットのソース・レジスタ（ｗＲｎ（ビット１６から１９）およびｗＲｍ（ビット０から３））から６４ビットの値を取り出し、デスティネーション・レジスタｗＲｄ（ビット１２から１５）にその結果を置く。その命令は、取り出すべき値のバイト・オフセットを指定するために３ビットの中間値を使用する。他の命令のように、ビット４は０であり、ビット２４から２７は１１１０であり、また、ビット２８から３１は条件付き実行に使用される。
【００３６】
図６を参照して、判断ブロック１１２でのチェックは、アライメント動作がビット・パターンに基づいて指定されているかどうかを決める。判断ブロック１０６におけるチェックは、そのビットがブロック１０８，１１０で設定されるレジスタ・アライメント値を決定するかどうかを決める。そうでなければ、判断ブロック１１２でのチェックは、ブロック１１４でセットされる即値アライメント値を示すビット２３が０に等しいかどうかを判断する。ブロック１１６では、ビット２０から２２はアライメント・オフセットを決定するために使用される。例えば、条件付き実行が、図４中に示されるように、指定され実行される。
【００３７】
レジスタ・アライメント動作は、２つの６４ビットのソース・レジスタ（ｗＲｎとｗＲｍ）から６４ビットの値を取り出し、デスティネーション・レジスタｗＲｄにその結果を置く。その命令は、指定された汎用目的のレジスタに格納された３ビットの値を使用し、取り出すべき値のオフセットを指定する。
【００３８】
図２２を参照して、シフトおよび置換ユニット３８の一部であってもよい置換器３００は、アライメント動作を扱う。置換器３００は前処理ブロック３０２，３０４でソース・レジスタ（ＳＲＣ１とＳＲＣ２）からオペランドを受け取る。ブロック３０２，３０４は、ある実施例において１組のマルチプレクサによって実現される。
【００３９】
デコード論理３１０は、即値（immediate）またはオフセット値と同様に即値またはレ
ジスタ・アライメントのいずれかを指定する制御信号を受け取る。その情報は結合部３０６で結合され、マルチプレクサ３０８によって多重化される。
【００４０】
絶対差の合計（ＳＡＤ）は、ｗＲｎとｗＲｍとの間で行なわれ、その結果はｗＲｄに累積される。絶対差の合計は、８または１６ビットの符号なしデータ・ベクトルに適用され、ＳＩＭＤの並列の絶対差計算の結果を累積する。ビット１１から８は０００１でなければならない。ビット７から５は００１でなければならず、また、ビット２３および２１は０でなければならない。ビット２０は、最初にアキュミュレータを０にすべきかどうかを決定するために使用される。例えば、図４に示されるように、条件付き実行が指定され実行される。ビット２２はバイトまたはハーフ・ワードのＳＩＭＤ計算を決定するために使用される。Ｂが指定される場合、wRd [word 1]=0である。Ｚは、最初にキュミュレータをゼロにすることを示すために指定され、その場合：
【００４１】
【数７】
0005634898.tif 000008
Ｈが指定される場合、ハーフ・ワードＳＩＭＤを示して、その場合：
【００４２】
【数８】
0005634898.tif 000009
【００４３】
図８を参照して、判断ブロック１１２でのチェックでは、ビット・パターンがブロック１１４の中で設定されるＳＡＤ動作を指定しているかどうかが判断される。もしそうならば、判断ブロック１１６でのチェックで、ビット２０が０かどうかを判断されるが、ブロック１１８の中で示されるように、０はアキュミュレータをゼロにすることを要求する。判断ブロック１２０でのチェックは、ビット２２が０かどうかを判断するが、０はバイト・サイズの計算を示す。そうでない場合、ブロック１２４に示されるように、ハーフ・ワードが設定される。
【００４４】
コプロセッサは、ソース・オペランドをデスティネーション・レジスタへアンパックするアンパック動作を行なうことができる。２つのモード、すなわち、インターリーブ型アンパック、および、拡張型アンパックがある。インタリーブ・モードにおける２つのソース・オペランドおよびＳＩＭＤフィールドを拡張する単一のソース・オペランドのみがある。ソース・データはバイト、ハーフ・ワードまたはワードである。コプロセッサは２つのソース・オペランドをＳＩＭＤフィールドの幅を同じに残したままアンパックおよびインターリーブすることができる。また、ソース・オペランドの下位または上位半分をアンパックすることもできる。さらに、各ＳＩＭＤ幅を２倍にして、単一のソース・オペランドをアンパックすることもできる。単一のソース・アンパック値をゼロ拡張することができ、単一のソース・アンパック値を符号拡張することができる。各ＳＩＭＤフィールドのために最終結果のフラグ（ＮとＺ）上に飽和セットを設定することができる。例えば、図４の中で示されるように、条件付き実行が指定され、実行されてもよい。
【００４５】
ビット８から１１は００００である。ビット７から６は１１であり、また、ビット５は、それが上位または下位アンパックかどうかを決める。ビット位置２２，２３は、データ・サイズを決定するために使用される。バイト・サイズに対してビット２２，２３は００であり、ハーフ・ワード・サイズに対しては０１であり、ワード・サイズに対しては１０である。ビット２０は、拡張モードまたはインタリーブ・モードが選択されているかどうかを判断する。インタリーブ・モードについては、そのビットは１である。ビット２１は、符号拡張すべきかゼロ拡張するべきかを決め、ビットが１である場合に符号を付すように設定される。ビット５の値は、ソース・オペランドの下位または上位のいずれをアンパックすべきかを決める。下位のアンパックについては、そのビットは１であり、また、上位のアンパックについては、そのビットは０である。
【００４６】
図９を参照して、判断ブロック１２４でのチェックは、アンパック動作がビット・パターンによって指定されているかどうかを判断する。もしそうであるならば、判断ブロック１２８でのチェックは、ビット２３，２２がバイト・サイズ、ハーフ・ワード・サイズまたはワード・サイズ・データのいずれを示すかを判断する。次に、判断ブロック１３８でのチェックはビット２０が１に等しいかどうかを判断し、１はブロック１４０に示されるようにインタリーブ・モードを示し、そうでないならブロック１４２に示されるように拡張モードを示す。判断ブロック１４４でのチェックはビット２１が１に等しいかどうかを判断し、１は符号モードを示し、そうでなければブロック１４８に示されるようにゼロ拡張を示す。判断ブロック１５０でのチェックはビット５が１に等しいかどうかを判断し、ブロック１５２の中で示されるように１は下位のアンパック・モードを示す。そうでなければ、ブロック１５４の中で示されるように、上位のアンパック・モードが設定される。
【００４７】
上位拡張モードのアンパック動作は、８ビット、１６ビットまたは３２ビットのデータをｗＲｎソース・レジスタの上部半分からアンパックし、各フィールドをゼロまたは符号拡張し、その結果をデスティネーション・レジスタｗＲｎに入れる。上位符号なし拡張は、図１０Ａに示され、上位符号付き拡張は、図１０Ｂに示される。
【００４８】
命令インタリーブ・ハイモード・アンパックは、８ビット、１６ビットまたは３２ビットのいずれかのデータをｗＲｎの上部半分からアンパックし、ｗＲｍの上部半分とインターリーブし、その結果をデスティネーション・レジスタｗＲｄに置く。アンパック・インタリーブ・ハイモード命令は、図１１に示される。
【００４９】
下位拡張アンパック命令は、８ビット、１６ビットまたは３２のビット・データをソース・レジスタであるｗＲｎの下位半分からアンパックし、各フィールドにゼロまたは符号を拡張し、その結果をデスティネーション・レジスタｗＲｄに入れる。下位符号なし拡張は図１２Ａに示され、また、下位符号付き拡張は図１２Ｂに示される。
【００５０】
最後に、アンパック・インタリーブ下位は、８ビット、１６ビットまたは３２ビットのいずれかのデータをｗＲｎの下位半分およびｗＲｍの下位半分からアンパックし、その結果をデスティネーション・レジスタｗＲｄに置く。アンパック・インタリーブ下位命令は図１３に示される。
【００５１】
パック動作は、２つのソース・レジスタからのデータを単一のデスティネーション・レジスタにパックする。ソース・データは、ハーフ・ワード、ワードまたはダブル・ワードとすることができる。パック中に符号付き飽和および符号なし飽和を使用することができる。ビット８から１１は００００であり、また、ビット５から７は１００である。ビット位置２２，２３の値はデータ・サイズを定める。ハーフ・ワードのデータ・サイズはビット０１と設定され、またワードのデータ・サイズはビット１０と設定され、さらにダブル・ワードのデータ・サイズはビット１１と設定される。位置２０，２１における値は飽和タイプを決定する。符号なし飽和はビット０１と指定され、また符号付き飽和はビット１１と設定される。パック命令はｗＲｎとｗＲｍからのデータをｗＲｄにパックするが、１６、３２または６４ビット・データのベクトルがｗＲｍは上位にパックされｗＲｎは下位半分にパックされる。その結果はデスティネーション・レジスタｗＲｄに飽和させられ、かつ置かれる。パックは符号付きまたは符号なし飽和で行なうことができる。ハーフ・ワードに対しては：
【００５２】
【数９】
0005634898.tif 000010
フルワードに対しては：
【００５３】
【数１０】
0005634898.tif 000011
ダブル・ワードに対しては：
【００５４】
【数１１】
0005634898.tif 000012
【００５５】
図１４を参照して、判断ブロック１５０でのチェックは、判断ブロック１５０およびブロック１５２に示されるように、パック動作が指定されることをビット・パターンが示しているかどうかを判断する。そうであるならば、判断ブロック１５４，１５８でのチェックは、ハーフ・ワード、ワードまたはダブル・ワードが指定されるかどうかを決める。判断ブロック１６４でのチェックは、ビット２１，２０が符号なし飽和（ブロック１６６）または符号付き飽和（ブロック１６８）を示すかどうかを決める。例えば、図４に示されるように、条件付きの実行が指定され実行される。
【００５６】
平均２命令は、ｗＲｎおよびｗＲｍの２値の平均を８または１６ビット・データの符号なしベクトル上で＋１の任意の丸めで行ない、その結果をデスティネーション・レジスタｗＲｄに置く。ソース・データは１バイトまたはハーフ・ワードで、任意の丸めモードである。ビット８から１１は００００であり、ビット２３は１であリ、またビット２１は０であリ、そしてビット７から５は０００である。ビット位置２２の値はデータ・サイズを決定する。０に等しいビット２２は１バイトのデータ・サイズを示し、また、１はハーフ・ワードのデータ・サイズを示す。ビット２０は、丸めるか、丸めないかを決定する。１のビットは丸めることを決定し、０のビットは丸めない。例えば、図４に示されるように、条件付き実行が指定され実行される。
【００５７】
図１５を参照して、判断ブロック１６８では、平均２命令が指定されているかどうかに関して判断され、ビット・パターンがそのように示されている場合、ブロック１７０で設定される。判断ブロック１７２でのチェックは、データ・サイズがハーフ・ワード（ブロック１７６）かまたはバイト（ブロック１７４）かを決める。判断ブロック１７８でのチェックは、丸めを行なう（ブロック１８０）かまたは丸めを行なわない（ブロック１８２）かのいずれが指定されたかを判断する。
【００５８】
バイト・サイズのＳＩＭＤが生じる場合：
【００５９】
【数１２】
0005634898.tif 000013
ハーフ・ワードのＳＩＭＤが生じる場合：
【００６０】
【数１３】
0005634898.tif 000014
【００６１】
シャッフル（shuffle）動作によって、８ビットの中間値によって指定されるソース・
レジスタ中の１６個のビット・フィールドからデスティネーション・レジスタｗＲｄ中に１６個のビット・データを選択することができる。それは、ソースの任意のハーフ・ワードがデスティネーションで任意のハーフ・ワードに置かれることを可能にする。ビット８から１１は０００１であり、また、ビット５から７は１１１である。ハーフ・ワード０のために選ばれる値は、ビット１，０の値によって決定される。ハーフ・ワード１のために選ばれる値は、ビット２，３の値によって決定される。ハーフ・ワード２のために選ばれる値は、ビット２０，２１の値によって決定される。ハーフ・ワード３のために選ばれる値は、ビット２３，２２の値によって決定される。例えば、図４に示されるように、条件付き実行が、指定され実行される。
【００６２】
図１６を参照して、判断ブロック１８４でのチェックは、そのビット・パターンから、ブロック１８６で設定されるシャッフル動作が指定されているかどうかを判断する。ブロック１８８は、ソース・レジスタ中のどのビットがデスティネーション・レジスタ中のどのフィールドにシャッフルされるかを判断する。ブロック１９０では、デスティネーション・レジスタ中の１６ビットの値は、ソース・レジスタにおけるフィールドの４つの１６ビット値の１つから選択される。これは４つの各ＳＩＭＤフィールドに対して繰り返される。例えば、図４で示されるように、条件付き実行が、指定され実行される。
【００６３】
累積（accumulate）動作は、ＳＩＭＤワードのフィールドすべての加算を累積する。それは、バイト、ハーフ・ワードまたはワード・データ形式で動作することができる。ビット８から１１は０００１である。ビット５から７は１１０であリ、また、ビット２１，２０は００である。ビット２３，２２はソースのデータ・タイプを判断するが、ビット００に対してはバイト・データのソースを、ビット０１に対してはハーフ・ワードを、ビット１０に対してはワードと判断する。
【００６４】
図１７を参照して、判断ブロック１９６では、判定は、累積動作（ブロック１９８）が指定されているかどうかを判断する。その場合は、ビット２３，２０が分析され、バイト・データのソースが（ブロック２０２）に対して提供されているかどうか、ハーフ・ワード・データのソースが（ブロック２０６）に対して提供されているかどうか、あるいはワード・データのソースが（ブロック２０８）に対して提供されているかどうかを判断する。
【００６５】
命令である累積は、ソース・レジスタｗＲｎのフィールド全域にわたり符号なし累積を行ない、その結果をデスティネーション・レジスタｗＲｄに書く。バイトのＳＩＭＤが指定される場合：
【００６６】
【数１４】
0005634898.tif 000015
ハーフ・ワードＳＩＭＤが指定される場合：
wRd = wRn[63:48] + wRn[47:32] + wRn[31:16] + wRn[15:0]
ワードが指定される場合：
wRd = wRn[63:32] + wRn[31:0]
【００６７】
最大（maximum）および最小（minimum）動作は、各ソース・フィールドから最大値または最小値を対応するデスティネーション・フィールドに置く。ソース・データは、バイト、ハーフ・ワードまたはワードである。それは符号付きオペランドまたは符号なしオペランドを使用して比較することができる。ビット１１から８は０００１でなければならない。ビット７から５は０１１である。ビット位置２３，２２における値はデータ・サイズを決定する。すなわち、００については、バイトのデータ・サイズであるとは判断され、０１については、ハーフ・ワードのデータ・サイズであるとは判断され、また、１０については、ワードのデータ・サイズであるとは判断される。ビット２１は、符号付きまたは符号なし比較を行なうべきかどうかを決める。ビット２０は、最大値または最小値を選択するべきかどうかを決める。最大は、０の値を有するビット２０に対して選択される。条件付き実行が指定されることがあり、例えば、図４の中で示されるように実行される。
【００６８】
図１８を参照して、判断ブロック２１０でのチェックは、ブロック２１２で示される最大または最小動作が指定されているかどうかを判断する。ビット２３から２０が判断ブロック２１４，２１８で分析され、バイト（ブロック２１６）、ハーフ・ワード（ブロック２２０）またはワード（ブロック２２２）のデータ・サイズが指定されているかどうかを決める。判断ブロック２２４でのチェックは、符号付き（ブロック２２６）または符号なし（ブロック２２８）比較が割り当てられているかどうかを決める。最後に、判断ブロック２３０でのチェックは、その動作が最大（ブロック２３２）であるのか、または最小（ブロック２３４）であるのかを決める。
【００６９】
最大動作は、ｗＲｎおよびｗＲｍからの要素が８、１６および３２ビット・データのベクトルである場合、最大のベクトルを選択し、その最大のフィールドをデスティネーション・レジスタｗＲｄに置く。８ビットまたはバイトのＳＩＭＤが指定されている場合：
【００７０】
【数１５】
0005634898.tif 000016
ハーフ・ワードのＳＩＭＤが指定されている場合：
【００７１】
【数１６】
0005634898.tif 000017
ワードが指定されている場合：
【００７２】
【数１７】
0005634898.tif 000018
【００７３】
最小動作は、ｗＲｎおよびｗＲｍからの要素が８、１６および３２ビット・データのベクトルである場合、最小のベクトルを選択し、その最小のフィールドをデスティネーション・レジスタｗＲｄに置く。８ビットまたはバイトのＳＩＭＤが指定されている場合：
【００７４】
【数１８】
0005634898.tif 000019
ハーフ・ワードのＳＩＭＤが指定されている場合：
【００７５】
【数１９】
0005634898.tif 000020
ワードが指定されている場合：
【００７６】
【数２０】
0005634898.tif 000021
【００７７】
比較（compare）動作は、ソース・オペランドを比較し、うまくいく場合デスティネー
ション・フィールドにすべて１を置く。比較がうまくいかない場合、デスティネーション・フィールドにすべてゼロを置く。「等しい（equal）」、符号なしオペランドあるいは
符号付オペランドで「より大きい（if greater than）」、の比較をすることができる。
ビット１１から８は００００であり、また、ビット７から５は０１１である。データ・サイズを決定するために、ビット位置２２，２３中の値を使用する。バイトのデータ・サイズに対しては、その値は００であり、ハーフ・ワードのデータ・サイズについては、その値は０１であり、そして、ワードのデータ・サイズについては、その値は１０である。「等しい」または「より大きな場合」の比較を選択すべきか否かを判断するためにビット２０を使用する。符号付きまたは符号なし「より大きい」の比較を選択すべきか否かを判断するためにビット２１を使用する。例えば、図４で示されるように、条件付き実行が、指定され実行される。
【００７８】
比較「等しい」は、８、１６または３２ビットのデータ・ベクトルに対しｗＲｎおよびｗＲｍのベクトルの同一比較を行ない、ソース・オペランドが等しい場合ｗＲｄの対応するデータ要素をすべて１に設定し、そうでなければｗＲｄの対応するデータ要素をすべてゼロに設定する。バイトのＳＩＭＤが指定される場合：
【００７９】
【数２１】
0005634898.tif 000022
ハーフ・ワードが指定される場合：
【００８０】
【数２２】
0005634898.tif 000023
ワードが指定される場合：
【００８１】
【数２３】
0005634898.tif 000024
【００８２】
比較「より大きい」の動作は、８、１６および３２ビット・データのベクトルに対するｗＲｎおよびｗＲｍのベクトル絶対値比較を行ない、ｗＲｎの対応するフィールドがｗＲｍより大きいとき、ｗＲｄの対応するデータ要素をすべて１に設定する。そうでなければ、ｗＲｄをすべてゼロに設定する。その動作は、符号付きデータまたは符号なしデータ上で実行される。符号付きデータが使用されるとき、符号付き比較が指定される。バイト・サイズのＳＩＭＤが指定される場合：
【００８３】
【数２４】
0005634898.tif 000025
ハーフ・ワードが指定される場合：
【００８４】
【数２５】
0005634898.tif 000026
ワードが指定される場合：
【００８５】
【数２６】
0005634898.tif 000027
【００８６】
図１９を参照して、判断ブロック２３６でのチェックは、比較動作が指定されているかどうかが判断され、指定されている場合、ブロック２３８へ行く。判断ブロック２４０，２４４では、バイト（ブロック２４２）、ハーフ・ワード（ブロック２４６）またはワード（ブロック２４８）のデータ・サイズが指定されているかどうかに関して判断がなされる。判断ブロック２５６でのチェックは、その動作が「より大きい」動作（ブロック２５８）あるいは「等しい」動作（ブロック２６０）のいずれであるかを判断する。判断ブロック２５０では、符号付きまたは符号なしの「より大きな」計算が割り当てられているかどうかが判断される。
【００８７】
ブロードキャスト（broadcast）動作は、メイン・プロセッサ中のソース・レジスタ（
Ｒｎ）からコプロセッサ中のＳＩＭＤデスティネーション・レジスタ（ｗＲｄ）のすべてのフィールドへ値をブロードキャストする。例えば、バイト（８ビット）データの要素が、６４ビット容量を有するデスティネーション・レジスタｗＲｄ中の８つのデスティネーション・データ要素のすべてへ転送されてもよい。別の実施例として、ワード（３２ビット）がデスティネーション・レジスタ中の２つの位置に置かれてもよい。さらに別の実施例として、ハーフ・ワード（１６ビット）が、デスティネーション・レジスタ中の４つのデータ要素すべてへ転送されてもよい。ビット１１から８は００００であり、ビット２３から２１は０１０で、また、ビット５は０である。ビット位置７，６の値は、デスティネーション・レジスタのデータ・サイズを決定する。バイトに対してはビット７，６は００であり、ハーフ・ワードについてはビット７，６は０１であり、また、ワードについてはビット７，６は１０である。バイト・サイズのＳＩＭＤに関しては、その値はｗＲｄのすべての場所に入れられる。ハーフ・ワード・サイズについては、その値は、ｗＲｄに４回置かれる。ワード・サイズについては、その値はｗＲｄに２回置かれる。
【００８８】
条件付きの実行はビット２８から３１に指定され、例えば、図４に示されるように実行される。ビット２４から２７は１１１０であり、ビット２０は０であり、ビット１６から１９はｗＲｄ向けであり、ビット１２から１５はｗＲｎ向けであり、ビット４は１であり、そして、ビット０から３は００００である。
【００８９】
図２０を参照して、判断ブロック２６２では、ブロードキャスト（ブロック２６４）が指定されるかどうかに関して判断がなされる。判断ブロック２６６，２７０はビット６，７を分析し、デスティネーション・データのサイズがバイト（ブロック２６８）、ハーフ・ワード（ブロック２７２）またはワード（ブロック２７４）かどうかを判断する。
【００９０】
シフト（shift）動作は、１６、３２または６４ビット・データのベクトルに対して、
ｗＲｍだけｗＲｎをベクトル論理左シフトを行ない、その結果をｗＲｄに置く。シフト値を含むレジスタをコード化するためにビット０から３を使用する。ビット８は、シフト値がメイン中またはＣＧＲ４４（ｗＣＧＲｍ）中のレジスタのいずれから来るかを決めるために使用される。指定されたＧ−修飾子を備えるシフト命令は、ｗＲｍフィールドで指定された汎用目的のレジスタに格納されたシフト値を使用する。ビット２３，２２は、オペランドのサイズを決定する。ビット位置７から５の値０１０はシフト動作を決定する。ビット位置２１，２２の値０１は論理左シフトを示す。ビット位置２１，２２の値００は論理右シフトを示す。ビット位置２１，２０の値１０は論理右シフトを示し、また、ビット位置２１，２０中の値１１はローテート（回転）を示す。条件付きの実行が指定されることがあり、例えば、図４に示されるように実行される。
【００９１】
論理左シフトのために、ハーフ・ワードが指定される場合：
【００９２】
【数２７】
0005634898.tif 000028
３２ビットのワードが指定される場合：
【００９３】
【数２８】
0005634898.tif 000029
ダブル・ワードが指定される場合：
【００９４】
【数２９】
0005634898.tif 000030
【００９５】
右シフト動作のために、１６、３２のまたは６４ビット・データ・サイズのベクトルに対して、ｗＲｍだけｗＲｎをベクトル論理シフトさせ、その結果をｗＲｄに置く。ハーフ・データのサイズに対しては：
【００９６】
【数３０】
0005634898.tif 000031
そうでなければ、ワードのデータ・サイズに対して：
【００９７】
【数３１】
0005634898.tif 000032
ダブル・ワードが指定される場合：
【００９８】
【数３２】
0005634898.tif 000033
【００９９】
１６、３２または６４ビット・データのベクトルに対して、ｗＲｍだけｗＲｎのベクトル論理右シフトさせ、その結果はｗＲｄに置かれる。ハーフ・ワードが指定される場合：
【０１００】
【数３３】
0005634898.tif 000034
ワードが指定される場合：
【０１０１】
【数３４】
0005634898.tif 000035
ダブル・ワードが指定される場合：
【０１０２】
【数３５】
0005634898.tif 000036
【０１０３】
１６、３２または６４ビット・データのベクトルに対して、ｗＲｍだけｗＲｎのベクトル論理右シフトさせ、その結果はデスティネーション・レジスタｗＲｄに置かれる。ハーフ・ワードが指定される場合：
【０１０４】
【数３６】
0005634898.tif 000037
ワードが指定される場合：
【０１０５】
【数３７】
0005634898.tif 000038
ダブル・ワードが指定される場合：
【０１０６】
【数３８】
0005634898.tif 000039
【０１０７】
図２１を参照して、シフト動作（ブロック２７８）は判断ブロック２７６で決定される。ビット０から３がブロック２８０で分析され、そのシフト値のためにレジスタをコード化する。ブロック２８２では、ビット８が分析され、そのシフト値がメインまたは補助のレジスタ・ファイルにあるかどうかを判断する。ブロック２８４では、ビット２３，２２は、オペランドのサイズを判断する。ブロック２８６では、ビット２１，２０はシフト・タイプを判断する。
【０１０８】
要約すると、ここに議論された命令は、明示されたビット・セット（７−５，２３−２０，１１−８）に対して次のコード化を使用する。
【０１０９】
【表１】
0005634898.tif 000040
【０１１０】
本発明は限られた数の実施例に関して説明されたが、当業者はそれらに対する多くの修正および変更を理解しているであろう。添付の請求項は、このような修正および変更をすべてカバーするように意図されており、本発明の精神および範囲に含まれるものである。
【図面の簡単な説明】
【０１１１】
【図１】本発明の一実施例に従うデータ処理システムを概略的に図示する。
【図２】本発明の一実施例に従うコプロセッサを図示する。
【図３】本発明の一実施例に従う動作のためのビット・シーケンスの動作図である。
【図４】本発明の一実施例に従うフローチャートである。
【図５】本発明の一実施例に従う論理演算のためのフローチャートである。
【図６】本発明の一実施例に従うアライメント動作のためのフローチャートである。
【図７】本発明の一実施例に従う１つの動作の動作図である。
【図８】本発明の一実施例に従う絶対差合計の動作のためのフローチャートである。
【図９】本発明の一実施例に従うアンパック動作のためのフローチャートである。
【図１０Ａ】本発明の一実施例に従う別の動作の動作図である。
【図１０Ｂ】本発明の一実施例に従う別の動作の動作図である。
【図１１】本発明の一実施例に従う別の動作の動作図である。
【図１２Ａ】本発明の一実施例に従う別の動作の動作図である。
【図１２Ｂ】本発明の一実施例に従う別の動作の動作図である。
【図１３】本発明の一実施例に従う別の動作の動作図である。
【図１４】本発明の一実施例に従うパック動作のためのフローチャートである。
【図１５】本発明の一実施例に従う平均２動作のためのフローチャートである。
【図１６】本発明の一実施例に従うシャッフル動作のためのフローチャートである。
【図１７】本発明の一実施例に従う累算動作のためのフローチャートである。
【図１８】本発明の一実施例に従う最大／最小動作のためのフローチャートである。
【図１９】本発明の一実施例に従う比較動作のためのフローチャートである。
【図２０】本発明の一実施例に従うブロードキャスト動作のためのフローチャートで    ある。
【図２１】本発明の一実施例に従うシフト動作のためのフローチャートである。
【図２２】図２中に示されるシフトおよび置換ユニットのための置換器の１つの実施    例の概略ブロック図である。
【図１】
0005634898.tif 000041
【図２】
0005634898.tif 000042
【図３】
0005634898.tif 000043
【図４】
0005634898.tif 000044
【図５】
0005634898.tif 000045
【図６】
0005634898.tif 000046
【図７】
0005634898.tif 000047
【図８】
0005634898.tif 000048
【図９】
0005634898.tif 000049
【図１０Ａ】
0005634898.tif 000050
【図１０Ｂ】
0005634898.tif 000051
【図１１】
0005634898.tif 000052
【図１２Ａ】
0005634898.tif 000053
【図１２Ｂ】
0005634898.tif 000054
【図１３】
0005634898.tif 000055
【図１４】
0005634898.tif 000056
【図１５】
0005634898.tif 000057
【図１６】
0005634898.tif 000058
【図１７】
0005634898.tif 000059
【図１８】
0005634898.tif 000060
【図１９】
0005634898.tif 000061
【図２０】
0005634898.tif 000062
【図２１】
0005634898.tif 000063
【図２２】
0005634898.tif 000064