(57)【要約】【課題】別々の複数のｎビットの多項式を使用してデータ・ブロックに対して巡回冗長度検査（ＣＲＣ）演算を行うための方法及び装置を提供する。【解決手段】フレキシブルＣＲＣ命令は、プログラム可能なｎビット多項式を使用してＣＲＣ演算を行う、ｎビット多項式は、２つのオペランドのうちの一方にｎビット多項式を記憶することにより、ＣＲＣ命令に供給される。【選択図】図２
2011123884.tif 000002
【特許請求の範囲】
【請求項１】
装置であって、
巡回冗長度検査（ＣＲＣ）命令の演算系列を行うための実行装置
を備え、前記ＣＲＣ命令は第１のオペランド及び第２のオペランドを有し、前記演算系列は、前記第１のオペランドに記憶された別々の複数のｎビット多項式のうちの１つを使用して前記第２のオペランドに記憶された２ｎビットのデータ・ブロックに対して巡回冗長度検査（ＣＲＣ）演算を行って、前記実行装置に、
予め計算された多項式Ｋを供給するようｎビットの多項式を展開させ、
前記２ｎビットのデータ・ブロックのｎビットの剰余を供給するために前記予め計算された多項式Ｋと、前記第１のオペランドに記憶された現在のｎビットの剰余と、ｎビットの多項式とを使用して前記２ｎビットのデータ・ブロックに対してマイクロ演算の系列を行わせる
装置。
【請求項２】
請求項１記載の装置であって、前記ｎビットの多項式は、最大ｎ＋１の次数を有する装置。  
【請求項３】
請求項１記載の装置であって、前記第１のオペランドは２ｎビットを有し、前記第２のオペランドは２ｎビットを有する装置。
【請求項４】
請求項３記載の装置であって、ｎは３２である装置。
【請求項５】
請求項１記載の装置であって、前記第１のオペランドは、ソース及びデスティネーションであり、前記ｎビットの剰余は、前記第１のオペランドに記憶される装置。
【請求項６】
請求項１記載の装置であって、前記マイクロ演算の系列は、
２ｎビットのデスティネーション・オペランドを記憶するために前記２ｎビットの第２のオペランドからｎビット部分を選択し、前記２ｎビットの第１のオペランドからｎビット部分を選択することにより、シャッフルを行うためのワード・シャッフル・マイクロ命令を含む装置。
【請求項７】
請求項６記載の装置であって、前記ワード・シャッフル・マイクロ命令は、それぞれのｎビット部分内のビットをシャッフルする装置。
【請求項８】
請求項１記載の装置であって、前記マイクロ演算の系列は、
前記予め計算された多項式Ｋを使用してｎ＋８ビットのデータを削減してｎ＋４ビットの中間剰余を供給し、前記ｎビットの多項式を使用して前記ｎ＋４ビットの中間剰余をｎビットの剰余に削減するためのＣＲＣ削減マイクロ命令
を備える装置。
【請求項９】
方法であって、
巡回冗長度検査（ＣＲＣ）命令の演算系列を行う工程を含み、前記ＣＲＣ命令は第１のオペランド及び第２のオペランドを有し、前記演算系列は、前記第１のオペランドに記憶された別々の複数のｎビットの多項式のうちの１つを使用して前記第２のオペランドに記憶された２ｎビットのデータ・ブロックに対して巡回冗長度検査（ＣＲＣ）演算を行い、前記演算系列は、
予め計算された多項式Ｋを供給するようｎビットの多項式を展開する工程と、
前記２ｎビットのデータ・ブロックのｎビットの剰余を供給するために前記予め計算された多項式Ｋと、前記第１のオペランドに記憶された現在のｎビットの剰余と、前記ｎビットの多項式とを使用して前記２ｎビットのデータ・ブロックに対してマイクロ演算の系列を行う工程
とを含む方法。
【請求項１０】
請求項９記載の方法であって、前記ｎビットの多項式は、最大ｎ＋１の次数を有する方法。
【請求項１１】
請求項９記載の方法であって、前記第１のオペランドは２ｎビットを有し、前記第２のオペランドは２ｎビットを有する方法。
【請求項１２】
請求項１１記載の方法であって、ｎは３２である方法。
【請求項１３】
請求項９記載の方法であって、前記第１のオペランドは、ソース及びデスティネーションであり、前記ｎビットの剰余は、前記第１のオペランドに記憶される方法。
【請求項１４】
請求項９記載の方法であって、前記マイクロ演算の系列を行う工程は、
２ｎビットのデスティネーション・オペランドを記憶するために前記２ｎビットの第２のオペランドからｎビット部分を選択し、前記２ｎビットの第１のオペランドからｎビット部分を選択することにより、シャッフルを行う工程
を含む方法。
【請求項１５】
請求項１４記載の方法であって、前記シャッフルを行う工程は、それぞれのｎビット部分内のビットをシャッフルする方法。
【請求項１６】
請求項９記載の方法であって、前記マイクロ演算の系列を行う工程は、
前記予め計算された多項式Ｋを使用してｎ＋８ビットのデータを削減してｎ＋４ビットの中間剰余を供給し、前記ｎビットの多項式を使用して前記ｎ＋４ビットの中間剰余をｎビットの剰余に削減する工程
を含む方法。
【請求項１７】
関連した情報を有するマシンアクセス可能な媒体を含む製品であって、
前記情報は、アクセスされると、マシンに、
巡回冗長度検査（ＣＲＣ）命令の演算系列を行う機能を行わせ、前記ＣＲＣ命令は第１のオペランド及び第２のオペランドを有し、前記演算系列は、前記第１のオペランドに記憶された別々の複数のｎビットの多項式のうちの１つを使用して前記第２のオペランドに記憶された２ｎビットのデータ・ブロックに対して巡回冗長度検査（ＣＲＣ）演算を行い、前記演算系列は、
予め計算された多項式Ｋを供給するようｎビットの多項式を展開する機能と、
前記２ｎビットのデータ・ブロックのｎビットの剰余を供給するために前記予め計算された多項式Ｋと、前記第１のオペランドに記憶された現在のｎビットの剰余と、前記ｎビットの多項式とを使用して前記２ｎビットのデータ・ブロックに対してマイクロ演算の系列を行う機能
とを含む製品。
【請求項１８】
請求項１７記載の製品であって、前記マイクロ演算の系列を行う機能は、
前記予め計算された多項式Ｋを使用してｎ＋８ビットのデータを削減してｎ＋４ビットの中間剰余を供給し、前記ｎビットの多項式を使用して前記ｎ＋４ビットの中間剰余をｎビットの剰余に削減する機能
を含む製品。
【請求項１９】
システムであって、
データ及び命令を記憶するためのダイナミック・ランダム・アクセス・メモリと、
前記メモリに結合され、前記命令を実行するためのプロセッサとを備え、前記プロセッサは、
巡回冗長度検査（ＣＲＣ）命令の演算系列を行うための実行装置を備え、前記ＣＲＣ命令は第１のオペランド及び第２のオペランドを有し、前記演算系列は、前記第１のオペランドに記憶された別々の複数のｎビットの多項式のうちの１つを使用して前記第２のオペランドに記憶された２ｎビットのデータ・ブロックに対して巡回冗長度検査（ＣＲＣ）演算を行って、前記実行装置に、
予め計算された多項式Ｋを供給するようｎビットの多項式を展開する機能と、
前記２ｎビットのデータ・ブロックのｎビットの剰余を供給するために前記予め計算された多項式Ｋと、前記第１のオペランドに記憶された現在のｎビットの剰余と、前記ｎビットの多項式とを使用して前記２ｎビットのデータ・ブロックに対してマイクロ演算の系列を実行する機能と
を行わせるシステム。
【請求項２０】
請求項１９記載のシステムであって、前記マイクロ演算を実行する機能は、
前記予め計算された多項式Ｋを使用してｎ＋８ビットのデータを削減してｎ＋４ビットの中間剰余を供給し、前記ｎビットの多項式を使用して前記ｎ＋４ビットの中間剰余をｎビットの剰余に削減する機能
を含むシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、誤り検査に関し、特に、誤り検査のための巡回冗長度検査（ＣＲＣ）の使用に関する。
【背景技術】
【０００２】
多項式は、一つ以上の代数項（例えば、「ａ＋ｂｘ＋ｃｘ２」）の数式であり、上記代数項それぞれは、一つ以上の変数（ｘ）の、負でない整数乗で乗算された定数（ａ、ｂ又はｃ）を含む。ｎビットの多項式でのデータ・ブロックの２進除算の固定サイズの剰余は、ソースからデスティネーションにデータ・ブロックを送信する際に送信誤りが存在しなかった旨を検証するために使用することができる。任意の長さのデータ・ブロックに施されるｎビットの多項式は、ｎビット以下の何れかの単一の誤りバーストを検出する。
【０００３】
固定サイズの剰余は、ソースでデータ・ブロックについて計算され、データ・ブロックとともに送信される。ｎビットの多項式は、固定サイズの剰余を再計算するために、デスティネーションにおける受信データ・ブロックに施される。再計算された固定サイズの剰余は、送信誤りが存在しなかった旨を検証するために、データ・ブロックとともに送信される固定サイズの剰余と比較される。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
巡回冗長度検査（ＣＲＣ）は、固定サイズの剰余（固定サイズの多項式による、任意の長さのデータ・ブロックの二進除算の剰余）、及び固定サイズの剰余を生成するための関数に与えられる語である。
【課題を解決するための手段】
【０００５】
特許請求の範囲記載の主題の実施例の構成は、以下の詳細の説明が進むにつれて、かつ、図面を参照すると明らかになるであろう。
【図面の簡単な説明】
【０００６】
【図１】本発明の原理による汎用プロセッサにおいて巡回冗長度検査（ＣＲＣ）を行うための命令の実施例を含むシステムを含むブロック図である。
【図２】図１に示すプロセッサの実施例を示すブロック図である。
【図３】本発明の原理により、フレキシブルＣＲＣを行うために、図２に示す実行装置の実施例を示すブロック図である。
【図４】図３に示す多項式展開マイクロ演算の実施例を示す図である。
【図５】図３に示すワード・シャフル・マイクロ演算の実施例を示す図である。
【図６】図３に示すＣＲＣ削減マイクロ演算の実施例を示す図である。
【図７】図６に示すＣＲＣ計算関数の実施例を示すブロック図である。
【図８】図７に示す４ビット削減段を示すブロック図である。
【図９】本発明の原理による、ＣＲＣを行う方法の実施例を示すフロー図である。
【発明を実施するための形態】
【０００７】
図面では、同じ符号は同じ部分を表す。
【０００８】
以下の詳細な説明は、特許請求の範囲記載の主題を例証する実施例を参照して行うが、その多くの代替、修正及び変形は当業者に明らかになるだろう。よって、特許請求の範囲記載の主題が、広く捉えられ、特許請求の範囲においてのみ規定されることが意図されている。
【０００９】
巡回冗長度（ＣＲＣ）の計算を行うための手法は多く知られている。一手法は、特定のｎビットの多項式を実現するための専用ＣＲＣ回路を使用することである。別の手法は、剰余及びデ―タ入力の組及び特定のｎビットの多項式の考えられるＣＲＣ結果全てを記憶するためのＣＲＣルックアップ・テーブルを使用することである。この手法の場合、１つのテーブル・ルックアップは、ＣＲＣ結果を求めるためにＣＲＣルックアップ・テーブルにおいて行われる。
【００１０】
しかし、ＣＲＣを計算するために使用される別々の多くのｎビットの多項式が存在する。例えば、別々のｎビットの多項式が、インターネット小型コンピュータ・システム・インターフェース（ｉＳＣＳＩ）、圧縮、伸張及びグラフィック処理（例えば、動画像専門家グループ（ＭＰＥＧ）及びジェイペグ（ＪＰＥＧ））などの記憶プロトコルのＣＲＣを計算するために使用される。よって、専用ＣＲＣ回路又は別個のルックアップ・テーブルが、別々のｎビットの多項式のＣＲＣを計算するために必要である。
【００１１】
ＣＲＣ計算は、専用ＣＲＣ命令の使用により、ハードウェアで行うこともできる。しかし、ＣＰＵ命令は、オペランドの数及びサイズによって制限される。ＣＲＣ命令は、特定の固定された１つのｎビットの多項式のＣＲＣの計算専用である。
【００１２】
本発明の実施例では、命令セット・アーキテクチャは、別々の複数のｎビット多項式を使用してＣＲＣ演算を行うために提供される。一実施例では、フレキシブルＣＲＣ命令は、最大３２次のｎビット多項式をサポートする（すなわち、ビットｘｎ（ｎ＋１番目のビット）が論理「１」にセットされたｎビット多項式がサポートされる）。更に、フレキシブルＣＲＣ命令は、データ／剰余に対するビット／バイト反射をサポートする。
【実施例】
【００１３】
図１は、本発明の原理による、汎用プロセッサにおけるＣＲＣ演算を行うための命令の実施例を含むシステム１００のブロック図である。システム１００は、プロセッサ１０１と、メモリ・コントローラ・ハブ（ＭＣＨ）１０２と、入出力（Ｉ／Ｏ）コントローラ・ハブ（ＩＣＨ）１０４とを含む。ＭＣＨ１０２は、プロセッサ１０１とメモリ１０８との間の通信を制御するメモリ・コントローラ１０６を含む。プロセッサ１０１及びＭＣＨ１０２は、システム・バス１１６を介して通信する。
【００１４】
プロセッサ１０１は、単一コアのインテル（登録商標）ペンティアム（登録商標）ＩＶプロセッサ、単一コアのインテル・セレロン・プロセッサ、インテル（登録商標）Ｘスケール・プロセッサ、又は、マルチコア・プロセッサ（インテル（登録商標）ペンティアム（登録商標）Ｄ、インテル（登録商標）ゼオン（登録商標）プロセッサ、インテル（登録商標）コア（登録商標）デュオ・プロセッサ又は何れかの他のタイプのプロセッサなどのマルチコア・プロセッサの何れか１つであり得る。
【００１５】
メモリ１０８は、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、同期化ダイナミック・ランダム・アクセス・メモリ（ＳＤＲＡＭ）、ダブル・データ・レート２（ＤＤＲ２）ＲＡＭ若しくはランバス・ダイナミック・ランダム・アクセス・メモリ（ＲＤＲＡＭ）又は何れかの他のタイプのメモリであり得る。
【００１６】
ＩＣＨ１０４は、直接メディア・インタフェース（ＤＭＩ）などの高速チップ間相互接続１１４を使用してＭＣＨ１０２に結合され得る。ＤＭＩは、２つの一方向レーンを介して２ギガビット／秒の同期転送レートをサポートする。
【００１７】
ＩＣＨ１０４は、ＩＣＨ１０４に結合された少なくとも１つの記憶装置１１２との通信を制御するための記憶Ｉ／Ｏコントローラ１１０を含み得る。記憶装置は例えば、ディスク・ドライブ、ディジタル・ビデオ・ディスク（ＤＶＤ）ドライブ、コンパクト・ディスク（ＣＤ）ドライブ、レイド（ＲＡＩＤ）、テープ・ドライブや他の記憶装置であり得る。ＩＣＨ１０４は、シリアル接続小型システム・インタフェース（ＳＡＳ）やシリアル高度技術接続（ＳＡＴＡ）などのシリアル記憶プロトコルを使用して記憶プロトコル相互接続１１８を介して記憶装置１１２と通信することができる。
【００１８】
プロセッサ１０１は、ＣＲＣ演算を行うためのＣＲＣ装置１０３を含む。ＣＲＣ装置１０３は、記憶装置１１２に記憶され、かつ／又は、メモリ１０８に記憶されたデータの別々の複数のｎビット多項式を使用してＣＲＣを計算するために使用することができる。
【００１９】
巡回冗長度検査（ＣＲＣ）演算は、別々の複数のｎビット多項式のうちの１つを使用してデータ・ブロックに対して行われる。フレキシブルＣＲＣ命令は、プログラム可能なｎビット多項式を使用してＣＲＣ演算を行う。ＣＲＣ装置１０３に記憶された固定（静的）多項式のＣＲＣ演算を行う代わりに、ｎビット多項式は、フレキシブルＣＲＣ命令を供給するために２つのオペランドのうちの１つにｎビット多項式を記憶することにより、ＣＲＣ命令を介してＣＲＣ装置１０３に供給される。
【００２０】
図２は、図１に示すプロセッサ１０１の実施例のブロック図である。プロセッサ１０１は、レベル１（Ｌ１）命令キャッシュ２０２から受信されたプロセッサ命令をデコードするためのフェッチ及びデコード装置２０２を含む。命令を実行するために使用する対象のデータ（例えば、命令によって使用される入力オペランド）はレジスタ・ファイル２０８に記憶することができる。一実施例では、レジスタ・ファイル２０８は、フレキシブルＣＲＣ命令によって使用するためのデータ（オペランド）を記憶するためにフレキシブルＣＲ命令によって使用される複数のレジスタを含む。
【００２１】
一実施例では、最大３２次のｎビット多項式をサポートする命令セットに対して、レジスタ・ファイルは複数の６４ビット・レジスタを有する。他の実施例では、レジスタは６４ビットを上回り得る。例えば、レジスタ・ファイルは、最大ｍ次のｍビット多項式をサポートすることができるフレキシブルＣＲＣ命令の複数の２ｍビット・レジスタを含み得る。
【００２２】
フェッチ及びデコード装置２０２は、Ｌ１命令キャッシュ２０２からマクロ命令をフェッチし、マクロ命令をデコードし、マイクロ演算（μｏｐｓ）と呼ばれる単純な演算に分解する。実行装置２１０は、マイクロ演算をスケジューリングし、実行する。示された実施例では、実行装置２１０におけるＣＲＣ装置１０３は、フレキシブルＣＲＣ命令のマイクロ命令を含む。退避装置２１２は、実行されたマクロ命令の結果をレジスタ又はメモリ１０８に書き込む（図１）。
【００２３】
図３は、本発明の原理による、フレキシブルＣＲＣ命令を実行するための、図２に示す実行装置２１０の実施例を示すブロック図である。
【００２４】
フェッチ及びデコード装置２０６によってフレキシブルＣＲＣ命令がデコードされた後、実行装置２１０によるフレキシブルＣＲＣ命令の実行には、フレキシブルＣＲＣ命令に関連付けられたＣＲＣ装置１０３におけるマイクロ演算を行うことが関係する。
ソース（「入力」）オペランドにおいて供給されるプログラム可能なｎビット多項式を使用してＣＲＣ装置１０３におけるＣＲＣ演算を行うためのフレキシブルＣＲＣ命令（マクロ命令）は、記号で、
Ｆｌｅｘ＿ＣＲＣ３２  ｒ６４，  ｒ／ｍ６４
として規定することができる。
【００２５】
フレキシブルＣＲＣ命令は２つのソース・オペランドを有する。第１のオペランド（「ｏｐ１」）は、レジスタ・ファイル３０４における第１の６４ビット・レジスタ（ｒ６４）に記憶され、ＣＲＣ演算の当初の３２ビットＣＲＣ剰余（「当初ＣＲＣ」）及び３２ビット多項式を記憶するために使用される。やはりレジスタ・ファイル３０４に記憶された第２のオペランド（「ｏｐ２」）は、６４ビット・データ（削減される対象のデータ・ブロック）が記憶されるメモリ１０８（図１）内のメモリ位置に対する６４ビット・ポインタ又は６４ビット・データ（削減される対象のデータ・ブロック）を記憶することが可能である。
【００２６】
フレキシブルＣＲＣ命令は、第１のソース・オペランドにおいて供給される多項式及び第１のソース・オペランドにおいて供給された当初ＣＲＣ剰余を使用して６４ビット・データ・ブロックに対するＣＲＣ演算を行う。多項式がソース・オペランドのうちの１つに供給されることを可能にすることにより、ＣＲＣ命令は、ＣＲＣ装置１０３に記憶された固定の多項式を使用するＣＲＣ命令と対照的にフレキシブルである。第１のオペランドに規定された６４ビット・レジスタも、ＣＲＣ演算の結果を記憶するためのデスティネーション・オペランドとして使用される。ＣＲＣ演算の結果は、「新たな剰余」として表すことができる。３２ビットの「新たな剰余」も３２ビットのプログラム可能な多項式は、第１のオペランドによって識別される６４ビット・レジスタに記憶される。
【００２７】
「当初の剰余」及びプログラム可能な多項式は、フレキシブルＣＲＣ命令の発出に先行し、第１のオペランドによって識別される６４ビット・レジスタに記憶される。一実施例では、多項式は、最大３２次（すなわち、ｘ３２の項（３３ビットの多項式のビット３３））を有する。一実施例では、オペランド１の３２個の最下位ビット（すなわち、［３１：０］）は当初剰余を記憶し、オペランド１の３２個の最上位ビット（すなわち、６３：３２）は、３３ビットのプログラム可能な多項式の最下位の３２ビットを記憶する。第１のオペランドの３２個の最上位ビットに記憶する前に、３３ビットのプログラム可能な多項式は、先行する「暗黙の」「１」で左寄せされ（すなわち、多項式は最大３２次を有するので、ビット３３は暗黙に論理「１」に設定され）、ビット３３は廃棄される。６４ビットを上回るレジスタを（例えば、レジスタ・ファイル３０４に）有する一実施例では、フレキシブルＣＲＣ命令は、３２を上回る最大次数を有する多項式をサポートすることができる。
【００２８】
ＣＲＣ演算は、（ネットワーキングにおける）ネットワーク・パケットや（記憶における）ファイルなどの大容量データ・ブロックのダイジェスト（通常３２ビット）を生成するために使用される特殊なタイプのハッシュ関数である。ダイジェストが計算され、記憶又は伝送される前にデータ・ブロックに付加され、次いで、データ・ブロックから再計算され、メモリ又は記憶媒体に記憶されている間に、又はネットワークを介して伝送されている間にデータ・ブロックが変更されていないことを検証するためにオリジナルと比較される。
【００２９】
ＣＲＣは、（１つの二進多項式）モジュロ（別の二進多項式）の剰余である。ビット・ストリーム（データ・ブロック／メッセージ）は、２進係数を備えた多項式としてみなし得、ストリームにおける論理「１」にセットされるビットは多項式の係数「１」に対応し、ストリームの最下位ビットは多項式の自由係数に対応する。演算は、前述の多項式／ビット列に対して定義される。
【００３０】
例えば、インターネットＳＣＳＩ（ｉＳＣＳＩ）（アールエフシー（ＲＦＣ）３３８５に定義している）は、エンドツーエンド・データ保護のためにＣＲＣ（巡回冗長度検査）を使用する。ｉＳＣＳＩ  ＣＲＣは、（１６進数形式における）３３ビット多項式１１ＥＤＣ６Ｆ４１を使用する。３３ビット・インターネット小型コンピュータ・システム・インタフェース（ｉＳＣＳＩ）多項式１１ＥＤＣ６Ｆ４１Ｈは３３ビット２進数で表すと、１０００１１１１０１１０１１１０００１１０１１１１０１０００００１になる。この３３ビット２進数は以下の多項式に対応する。
【００３１】
ｘ３２＋ｘ２８＋ｘ２７＋ｘ２６＋ｘ２５＋ｘ２３＋ｘ２２＋ｘ２０＋ｘ１９＋ｘ１８＋ｘ１４＋ｘ１３＋ｘ１１＋ｘ１０＋ｘ９＋ｘ８＋ｘ６＋１
多項式の加算は、ビット単位の排他的論理和（ＸＯＲ）演算に対応する。ＸＯＲは、オペランドの一方のみが論理値「１」を有する場合、「１」の論理値をもたらす、２つのオペランドに対する論理演算である。結果は、両方の論理値が同じ（両方「０」又は両方「１」）の場合、論理値「０」である。例えば、値「１１００１０１０」を有する第１のオペランド及び値「１０００００１１」を有する第２のオペランドのＸＯＲは、値「０１００１００１」を有する結果をもたらす。
【００３２】
多項式乗算は、ビット列のキャリーなし乗算に対応する。例えば、２進列のｔ個の位置の左シフトは、ｘｔでの多項式乗算に対応する。Ｐ（ｘ）、Ｑ（ｘ）、Ｒ（ｘ）、Ｗ（ｘ）がＰ（ｘ）＝Ｗ（ｘ）＊Ｑ（ｘ）＋Ｒ（ｘ）を満たし、Ｒ（ｘ）の次数がＰ（ｘ）の次数未満である場合、Ｒ（ｘ）は、Ｐ（ｘ）モジュロＷ（ｘ）の剰余である。
【００３３】
前述の項を使用すれば、２進多項式Ｍ（ｘ）に対応する何れのビット長のメッセージＭのＣＲＣ値もＣＲＣ  Ｍ（ｘ）＝ｘ３２＊Ｍ（ｘ）  ｍｏｄ  Ｐ（ｘ）として規定することが可能であり、多項式Ｐ（ｘ）はＣＲＣアルゴリズムを定義する。３２ビットＣＲＣアルゴリズムの場合、Ｐ（ｘ）は３２次の特定の多項式である。
【００３４】
一実施例では、フレキシブルＣＲＣ命令は、別々の３つのマイクロ演算の組み合わせを使用して実行装置２１０におけるＣＲＣ装置１０３で実現される。図３に示す３つのマイクロ演算は、（１）多項式展開３１４、（２）ワード・シャッフル３１６、及び（３）ＣＲＣ削減３１８である。
【００３５】
多項式展開マイクロ演算３１４は、図３に示す実施例ではレジスタ・ファイル３０４におけるレジスタ３０６に記憶された第１のオペランド（「ｏｐｌ」）の最上位ビット（ＭＳｂ）に記憶された多項式を受け取る。多項式展開マイクロ演算３１４は、ｏｐｌにおいて供給されるプログラム可能なｎビット多項式から予め計算された多項式Ｋを導き出す。予め計算された多項式Ｋの３２個の最下位ビットは、ＣＲＣ削減マイクロ演算３１８によって後に使用するためにＣＲＣ装置１０３によって記憶される。予め計算された多項式Ｋは、並列に行う対象の算出を可能にすることにより、ＣＲＣ剰余を求めるために必要なゲート遅延の数を削減する。
【００３６】
多項式展開マイクロ演算は、記号で、
ｄｅｓｔ：＝ｃｒｃ＿ｅｘｐａｎｄ＿ｐｏｌｙ（−．ｓｏｕｒｃｅ１）、ｓｅｌｅｃｔ＿ｍｏｄｉｆｉｅｒ
多項式展開マイクロ演算３１４は、３２ビットの予め計算された多項式Ｋ＝ｘ３６ＭＯＤ  ＰＯＬＹを計算し、Ｋの３２個の最下位ビットを記憶する。モジュロ削減は、多項式の、ガロワ体（ＧＦ（２））での除算として定義される。
【００３７】
予め計算された多項式Ｋは、ガロワ体（ＧＦ８２））に対する、３２ビットＣＲＣ多項式の倍数である。予め計算された多項式Ｋの形式は、並列に削減される対象のデータ・ブロックの相互排他的な領域を処理することにより、並列に行う対象の算出の多くの可能にする。並列に算出を行うことにより、ＣＲＣ剰余を計算するための時間が削減される。例えば、ＣＲＣ削減マイクロ演算３１８によって使用される予め計算される多項式Ｋは、４個の最上位ビット（４０ビットの入力データのビット３９乃至３６）が並列に削減されることを可能にする。例えば、ｋが３２ビットを有する最大次数３２の多項式の場合、Ｋの３２個の最下位ビットを４０ビットの入力データ（３２ビット多項式及び８ビット・データ）に施すことにより、４０ビット入力データが３６ビット剰余に削減される。
【００３８】
一実施例では、シャッフル・ワード・マイクロ動作３１６は、レジスタ・ファイル３０４におけるレジスタ３１２からの（又は、レジスタ３１２に記憶されたメモリ・ポインタによって識別されるメモリ位置からの）ソース・オペランド２（「ｏｐ２」）及びレジスタ３０６からのソース・オペランド１（「ｏｐ１」）を受け取り、イミディエート・バイトに記憶された修飾子に依存してオペランドそれぞれにおける６４ビットの３２ビット部分のうちの１つを選択する。マイクロ演算は、
ｄｅｓｔ：＝ｓｈｕｆｆｌｅ＿ｗｏｒｄ（ｓｏｕｒｃｅ２，ｓｏｕｒｃｅ１），ｉｍｍ８
として記号で定義することができる。
【００３９】
ワード・シャッフル・マイクロ演算３１６は、６４ビットのデータパスの２つの半分の間のワードレベル・データ（３２ビット）のシャッフルを行う。このマイクロ演算は、それぞれの６４ビット・オペランドそれぞれからの３２ビットの最下位ビット（下半分）又は３２ビットの最上位ビット（上半分）を選択する。選択された半分におけるビットもシャッフルすることが可能である。各オペランド内のビットのシャッフルは、イミディエート・データ（ｉｍｍ８）に記憶された４ビット・シャッフル選択修飾子に依存する。シャッフルの結果は、デスティネーション・レジスタ（「ｄｅｓｔ」）に記憶される。
【００４０】
これが、フレキシブルＣＲＣ命令のシャッフル・ワード・マイクロ演算３１６に対する最初のコールである場合、イミディエート・データ（「ｉｍｍ８」）は、フレキシブルＣＲＣマクロ命令によって受け取られた６４ビットの第２のオペランド（「ｏｐ２」）から最上位の３２ビットが選択されるということを示す。
【００４１】
ＣＲＣ削減マイクロ演算３１８は、シャッフル・ワード・マイクロ演算３１６によって供給される３２ビット・データにおける４バイトそれぞれについて行われる。ＣＲＣ削減マイクロ演算３１８は更に、剰余（ＲＥＳ）を計算するために多項式展開マイクロ演算によって計算された、予め計算された多項式Ｋ、プログラム可能な多項式、及びワード・シャッフル・マイクロ演算３１６から受け取られた３２ビットの当初の剰余を使用する。
【００４２】
フレキシブルＣＲＣ命令の実行が完了した後、図３に示す実施例では、レジスタ・ファイル３０４におけるレジスタ３０６に記憶することが可能な、（マクロ命令のデスティネーション・レジスタ及びソース・レジスタである）オペランド１に記憶される。
【００４３】
図４は、図３に示す多項式展開マイクロ演算３１４の実施例を示す。ＣＲＣ多項式が、ｘ３２＝ｐ３１．ｘ３１＋ｐ３０．ｘ３０＋…ｐ０の形式の３２ビット多項式（ＰＯＬＹ）である実施例では、［ｐ３１…ｐ０］によって表す３２ビット多項式は、ソース・レジスタ４００の３２個の最上位ビット（上半分）に記憶される。Ｘ３２に対応する暗黙の先行する「１」は除外される。
【００４４】
モジュロ演算（ＭＯＤ）は、ｘ３６のＰＯＬＹでの除算の剰余を計算する。例えば、剰余ｒ＝ａ  ｍｏｄ  ｎは、ａがｎで除算された場合の剰余である。ａが１０であり、ｎが３の場合、ｒは１である。
【００４５】
多項式展開マイクロ演算３１４が、Ｋ＝ｘ３６  ＭＯＤ  ＰＯＬＹの剰余を計算し、これを、デスティネーション・レジスタ４０６における予め計算された多項式係数Ｋとして記憶する。モジュロ削減は、多項式の、ガロワ体（ＧＦ（２））での除算として定義される。
【００４６】
元の３２ビットの多項式もデスティネーション・レジスタ４０６に記憶される。予め計算された多項式定数（剰余）Ｋ及び元の３２ビットの多項式（多項式）は、剰余を計算するために行われる排他的論理和（ＸＯＲ）演算の数を削減するために、後のＣＲＣ削減（削減）演算中に使用される。ＸＯＲ演算は、３２ビット剰余に対するフレキシブルＣＲＣマクロ命令に供給される６４ビット・データ・ブロックを削減するために３２ビット多項式を使用して行われる。
【００４７】
図５は、図３に示すワード・シャフル・マイクロ演算の実施例を示す。
【００４８】
図５に示す実施例では、シャッフル・ワード・マイクロ演算３１６に供給されるイミディエート・バイト５１０におけるスワップ・ビット及び状態修飾子の状態に応じてプログラム可能である。イミディエート・バイト５１０は、データ／剰余に対するビット／バイト反映を行うために（すなわち、ソース１  ５００及びソース２  ５００におけるビット／バイトをデスティネーション５０６におけるバイト／ビットにマッピングするために）制御ロジック５０４によって使用される。示された実施例では、ソース１  ５００、ソース２  ５０２、及びデスティネーション５０６は全て、６４ビットを有する。他の実施例では、ソース１  ５００、ソース２  ５０２、及びデスティネーション５０６は、６４ビットを上回り得る。
【００４９】
一実施例では、イミディエート・バイト５１０の４つの最下位ビット（すなわち、シャッフル選択修飾子［３：０］）は、６４ビット・ソース１  ５００及び６４ビット・ソース２  ５０２のどの３２ビット部分が、６４ビット・デスティネーション５０６のどの３２ビット部分に転送されるかを選択するために制御ロジック５０４によって使用される。
２つの最下位ビット（すなわち、シャッフル選択修飾子［１：０］）により、４つの３２ビット部分のうちのどれを、デスティネーションの下位３２ビットに転送するかを選択し、２つの最上位ビット（すなわち、シャッフル選択修飾子［２：３］）により、４つの３２ビット部分のうちのどれを、デスティネーションの上位３２ビットに転送するかを選択する。
【００５０】
以下の表１及び表２は、ソース・オペランドにおける３２ビット・ワードが、シャッフル選択修飾子［３：０］の状態に応じて、デスティネーションにおける３２ビット・ワードにどのようにしてマッピングされるかを示す。
【００５１】
【表１】
2011123884.tif 000003
【００５２】
【表２】
2011123884.tif 000004
イミディエート・バイト５１０におけるビット・スワップ・ビットがイネーブルされた場合（例えば、論理「１」にセットされた場合）、３２ビットの配列がスワップされる。例えば、ソースのうちの１つにおけるビット［３１：０］は、デスティネーションの最上位ビット位置に最上位ビット３１が記憶されるように、デスティネーションにビット［０：３１］として記憶される。高スワップ／低スワップ・ビットの状態は、ビット・スワップが、デスティネーション５０６の最下位の３２ビットに対して行われるか、最上位の３２ビットに対して行われるかを示す。バイト・スワップ・ビットの状態（「１」又は「０」）は、ソース５００、５０２の３２ビットの半分における４バイトが、データをデスティネーション５０６に移動させる場合にスワップされるか否かを示す。例えば、ソース５０２における３２個の最下位ビットのバイト・スワップは、ソース５０２の最上位バイト（ビット３１：２４）をデスティネーション５０６の最下位ビット（ビット７：０）に記憶する。
【００５３】
表３及び表４は以下に、イミディエート・タイプのビット７：５の状態に応じてワード・シャッフル・マイクロ演算３１４によって行われるデータ／残余に対するビット／バイト反映を要約する。図示した実施例では、ビット７（スワップ（Ｈ））（スワップ（Ｌ））は、デスティネーションの高い半分に対するスワッピングをイネーブル／ディセーブルする。ビット６は、デスティネーションの低い半分に対するスワッピングをイネーブル／ディセーブルする。ビット５（バイト・スワップ）は、バイト・スワップ・イネーブルをイネーブル／ディセーブルし、ビット４（ビット・スワップ）は、ビット・スワップ・イネーブルをイネーブル／ディセーブルする。
【００５４】
【表３】
2011123884.tif 000005
【００５５】
【表４】
2011123884.tif 000006
一実施例では、マイクロ演算にイミディエート・バイトを供給するかわりに、制御ロジックは、デスティネーションの３２個の最下位ビットに、ソース１の３２個の最下位ビットに記憶されたＣＲＣ剰余を常にマッピングするよう配線される。更に、制御ロジックは、ワード・シャッフル・マイクロ演算がフレキシブルＣＲＣマクロ命令において１回目にコールされるか、２回目にコールされるかに応じて、ソース２からデスティネーションの最上位の３２ビットにデータの最上位の３２ビットがマッピングされるか、又はソース２からデスティネーションの最上位の３２ビットにデータの最下位の３２ビットがマッピングされるよう配線される。
【００５６】
図６は、図３に示すＣＲＣ削減マイクロ演算３１８の実施例を示す。ＣＲＣ削減マイクロ演算３１８は、３２ビットの多項式及び３２ビットの予め計算された多項式Ｋを使用してデータ・ブロック（データ・ストリーム）から８ビットの削減を行う。
【００５７】
ＣＲＣ削減関数は、ソース５０６において供給される３２ビット・データから選択されるデータの８ビット・ブロックに対して、ソース４０６に供給された多項式を使用して行われる。図４に関して説明し、ソース４０６の３２個の最上位に供給される多項式展開マイクロ演算３１６によって計算された。予め計算された更なる多項式ＫもＣＲＣ削減関数によって使用される。ＣＲＣ多項式が、ｘ３２＝ｐ３１．ｘ３１＋ｐ３０．ｘ３０＋…ｐ０の形式の３２ビット多項式（ＰＯＬＹ）の場合、［ｐ３１…ｐ０］によって表す３２ビット多項式は、ソース４０６の３２個の最上位ビットにおける入力（ｘ３２に対応する暗黙の先行する「１」は除外される）として与えられる。ソース４０６の３２の最下位ビットは、予め計算された多項式Ｋ＝ｘ３６  ＭＯＤ  ＰＯＬＹを記憶する。
【００５８】
３２個の最上位ビットがデータを記憶し、３２個の最下位ビットが現在のＣＲＣ剰余を記憶して、６４ビット・ソース・レジスタ５０６は、当初データ（ＤＨ又はＤＬ）及びＣＲＣ累積剰余（「現在の剰余」）を記憶する。ＣＲＣ計算マイクロ演算の結果（「剰余」）は、デスティネーション・レジスタ６０６の３２個の最下位ビットに記憶される。
【００５９】
ＣＲＣの計算は、入力データの生成子値での除算によって生じる剰余の算出を必要とする。ＣＲＣは、ソース・レジスタ５０６に記憶されたデータ・ストリームの３２ビット・セグメントについて計算される。３２ビット・データは、シフト・ロジック６０２において８ビット分シフトさせ、シフトされたデータは次いで、後のＣＲＣ削減マイクロ演算３１８による使用のために「更新済データ」としてデスティネーション・レジスタ６０６に記憶される。ＣＲＣ演算は、ソース・レジスタ５０６において「当初データ」として記憶されたデータの８個の最上位ビットに対して行われる。予め計算された多項式Ｋ及び多項式は、デスティネーション・レジスタ６０６に記憶されたＣＲＣ剰余を計算するために使用される。
【００６０】
図７は、図６に示すＣＲＣ計算ロジック６０４の実施例を示すブロック図である。
【００６１】
ＣＲＣ計算ロジック６０４は、８ビット・セグメント７０２におけるデータ・ストリームの連続した部分（セグメント）に対してＣＲＣ演算を行う。８ビット・セグメントは３２ビットだけシフトされ、ＸＯＲ演算が、シフトされた８ビット・セグメント、及びやはり８ビットだけシフトさせた、既存の何れかの剰余（余り）で行われる。ＸＯＲされた４０ビットの結果（入力データ）及び３２ビットの予め計算された多項式Ｋが、３２ビットのＣＲＣ剰余を段階的に計算するために使用される。４ビット削減段７１２では、４０ビットの入力データは、３６ビットの剰余を提供するために、予め計算された３２ビットの多項式Ｋを使用して４ビットだけ削減される。３６ビットの剰余は、別個の４つの１ビット削減段を含む段７１２に入力され、上記４つの１ビット削段はそれぞれ、１ビットだけ、３６ビットの剰余を削減するための１ビット削減演算を行う。４つの１ビット削減演算全てが段７１２で行われた後、３２ビット剰余は、データ・ストリームの次の８ビット・セグメントを処理するよう戻される。
【００６２】
これが、データ・ストリームの最後の３２ビット・データ・ブロックの最後の８ビット・セグメントである場合、データ・ストリームが送信されているか、又はデータ・ストリームが損なわれていないことを検証するために受信ＣＲＣと比較することが可能である場合にデータ・ストリームに付加することが可能な最終剰余である。
【００６３】
段７１０、７２０は、段出力、及び当初の入力が最終剰余に対して互いに合同であるように構成される。別の多項式のために再プログラミングすることは、別の予め計算された多項式Ｋを計算することを必要とする。予め計算された多項式Ｋは、先行１ビット（ｉ＋ｋ番目）ビット、及びそれに続く、ｉ個のゼロ、及び、生成する多項式の次数のデータのｋ個ビットを有する。ｋ個の最下位データ・ビットのみが、上述の通り、他のマイクロ演算による使用のために記憶される。オペランドが２ｎ個のビットを有する実施例では、ｋはｎビットである。例えば、６４ビットのオペランドを有する実施例では、ｋは、予め計算された多項式Ｋの３２の最下位ビットである。
【００６４】
図８は、図７に示す４ビット削減段７１０を示すブロック図である。４ビット削減段７１０は、４０ビットの入力を受信し、３６ビット出力に対する予め計算された３２ビットの多項式Ｋを使用して入力データ・セグメントを削減する。まず、４×３２乗算演算は、乗算ロジック８００で、３２ビットの予め計算された多項式Ｋ［３１：０］及び４０ビットの入力データ・セグメントＴ［３９：３６］の４つの最上位ビットで行われる。次に、ＸＯＲ演算を、ＸＯＲロジック８０２において、４０ビットの入力データ・セグメントの３６個の最下位ビット、及び乗算演算の３６ビットの結果に対して行って、３６ビットの出力Ｔ［３：０］を供給し、これは、３２ビットの剰余を計算し続けるために次の削減段７１２（図７）に転送される。
【００６５】
一実施例では、４×３２乗算ロジック８００は、複数のＸＯＲゲートを有するシフト・ロジック及びＡＮＤゲートのアレイを含む。ＡＮＤゲートのアレイは、４組の３２個のＡＮＤのゲートを含み、３２個のＡＮＤゲートの一組は、４０ビットの入力データ・セグメントの４個の最上位ビットのそれぞれについて、１組の３２個のＡＮＤゲートを含む。４つの最上位ビットそれぞれは、ＡＮＤゲートの組の複数のうちの１つにおける、３２ビットのＡＮＤゲートそれぞれの一入力に供給される。例えば、Ｔ［３９］は、第１の組における３２ビットのＡＮＤゲート全ての一入力に結合され、Ｔ［３８］は、第２の組における３２ビットのＮＡＮＤゲート全ての一入力に結合される。それぞれの最上位ビットは、３２ビットの予め計算された多項式Ｋ［３１：０］のそれぞれのビットとＡＮＤされる。例えば、３２個のＡＮＤゲートの第１の組では、３２個のＡＮＤゲートそれぞれの一入力は、４０ビットの入力データ・セグメントの最上位ビットを受信し、３２個のＡＮＤゲートはそれぞれ、３２ビットの予め計算された多項式Ｋの３２ビットそれぞれを受け取る。
【００６６】
４組のＡＮＤゲート（１２８（３２×４））及びゲートの出力は、入力データのそれぞれのビット位置に応じて出力をシフト（乗算）させるためにシフト・ロジックに結合される。最上位ビット（ビット３９）に対して動作するＡＮＤゲートの組の出力は、３ビットだけシフトしており、後続するＡＮＤゲートの組それぞれは、１ビットだけこのシフトを減らし、最後の組は０ビットだけシフトする。
【００６７】
シフトされた３６ビットの結果は、段７１２に対して３６ビットの入力を供給するために入力データ（Ｔ［３５：０］）の３６個の最下位ビットから（複数のＸＯＲゲート）を使用して）ＸＯＲロジック８０２において削減される。
【００６８】
図９は、本発明の原理による、プログラム可能なフレキシブルＣＲＣ演算を行う方法の実施例を示すフロー図である。図９は、図２及び図３に関して説明する。
【００６９】
フレキシブルＣＲＣ命令がフェッチ及びデコード装置２０６によってデコードされた（図２）後、実行装置２１０によるフレキシブルＣＲＣ命令の実行には、ＣＲＣ装置１０３におけるフレキシブルＣＲＣ命令に関連付けられた複数のマイクロ演算を行うことが関係する。
【００７０】
上述するように、ＣＲＣ装置においてＣＲＣ演算を行うためのフレキシブルＣＲＣ命令（マクロ命令）は記号で、
Ｆｌｅｘ＿ＣＲＣ３２ｒ６４，ｒ／ｍ６４
として定義することができる。
【００７１】
図９を参照すれば、ブロック９００で、多項式展開マイクロ演算３１４（図３）は、レジスタ・ファイル３０４におけるレジスタ３０６に記憶された第１のオペランドにおける最上位ビットに記憶された多項式を受け取る、多項式展開マイクロ動作３１４は、特定の多項式のＣＲＣ展開関数を行い、フレキシブルＣＲＣ命令のＣＲＣ削減マイクロ演算３１８によって使用される予め計算された多項式Ｋを供給する。一実施例では、予め計算された多項式Ｋの３２個の最下位ビットがレジスタに（例えば、ＣＲＣ削減マイクロ演算３１８によって使用するためにレジスタ・ファイル３０４におけるレジスタ（例えば、レジスタ３１０又はレジスタ３０８）に記憶される。多項式展開マイクロ演算３１４は、記号で、規定することができる。
【００７２】
ｄｅｓｔ：＝ｃｒｃ＿ｅｘｐａｎｄ＿ｐｏｌｙ（−，ｓｏｕｒｃｅ１），ｓｅｌｅｃｔ＿ｍｏｄｉｆｉｅｒ
多項式展開マイクロ演算３１４は、予め計算された３２ビットの多項式Ｋ＝ｘ３６ＭＯＤ  ＰＯＬＹを計算する。モジュロ削減は、多項式の、ガロワ体（ＧＦ（２））に対する除算として定義される。予め計算された多項式Ｋは、ＣＲＣ削減マイクロ演算３１８（図３）によって使用される。処理はブロック９０２に進む。
【００７３】
ブロック９０２では、ワード・シャッフル・ミクロ動作３１６は、レジスタ・ファイル３０４におけるレジスタ３１２に記憶された（、又はレジスタ３１２に記憶されたメモリ・ポインタによって識別されるメモリ位置からの）オペランド２、及びレジスタ３０６に記憶されたオペランド１を受け取る。ワード・シャッフル・マイクロ演算３１６は、イミディエート・バイトに記憶された修飾子（「選択修飾子」）に応じてオペランドそれぞれにおける６４ビットの３２ビット部分の１つを選択する。ワード・シャッフル・マイクロ演算３１６は、
ｄｅｓｔ：＝ｓｈｕｆｆｌｅ＿ｗｏｒｄ（ｓｏｕｒｃｅ２，ｓｏｕｒｃｅ１），ｉｍｍ８
として記号で定義することができる。
【００７４】
ワード・シャッフル・マイクロ演算３１６は、６４ビットのデータパスの２つの３２ビットの半分の間のワードレベル・データ（３２ビット）のシャッフルを実現する。シャッフル・ワード・マイクロ演算３１６は、それぞれの６４ビットのオペランドから最下位３２ビット又は最上位３２ビットを選択する。選択された半分（３２ＭＳｂｓ又は３ＬＳｂｓ）内のビットは、スワッピングすることも可能である。各オペランド内のビットのシャッフルは、イミディエート・データ（ｉｍｍ８）に記憶された４ビット・シャッフル選択修飾子に依存する。ワード・シャッフルのマイクロ演算３１６の結果は、デスティネーション・レジスタ（ｄｅｓｔ）に記憶される。実施例では、結果は、他のマイクロ演算によって使用するためにレジスタ・ファイル３０４におけるレジスタ（例えば、レジスタ３０８又はレジスタ３１０）に記憶することが可能である。
【００７５】
これが、フレキシブルＣＲＣ命令のシャッフル・ワード・マイクロ演算３１６に対する最初のコールである場合、イミディエート・データ（「ｉｍｍ８」）は、マクロ命令によって受け取られた６４ビットの第２のオペランド（「ｏｐ２」）から最上位の３２ビット（ＤＨ）が選択されるということを示す。処理はブロック９０４に進む。
【００７６】
ブロック９０４では、別個のＣＲＣ削減マイクロ演算３１８が、シャッフル・ワード・マイクロ演算３１６から出力された３２ビット・データにおけるそれぞれの４バイトそれぞれについて行われる。多項式展開マイクロ演算３１４によって計算される予め計算された多項式Ｋ、プログラム可能な多項式、及び３２ビットの当初の剰余が使用される。処理はブロック９０６に進む。
【００７７】
ブロック９０６では、削減する対象の別のバイトの３２ビットのデータ・ブロック（セグメント）ＤＨが存在している場合、処理はブロック９０４に続く。さもなければ、処理はブロック９０８に続く。
【００７８】
ブロック９０８では、ワード・シャッフル・マイクロ演算３１６は、オペランド１及びオペランド２を受け取り、イミディエート・バイトに記憶された修飾子に応じてオペランドそれぞれにおける６４ビットの３２ビットのうちの１つを選択する。フレキシブルＣＲＣ削減マクロ命令のワード・シャッフル・マイクロ演算３１６に対する第２のコールであるので、最下位の３２ビット（ＤＬ）は、マクロ命令によって受け取られる第２のオペランド（ｏｐ２）から選択される。処理はブロック９１０に進む。
【００７９】
ブロック９１０では、別個のＣＲＣ削減マイクロ演算３１８は、多項式展開マイクロ演算３１４によって計算される予め計算された多項式Ｋを使用してワード・シャッフル・マイクロ演算３１６によって出力された３２ビット・データ出力におけるそれぞれの４バイト毎に行われる。処理はブロック９１２に続く。
【００８０】
ブロック９１２では、削減する対象の別のバイトが３２ビットのデータ・ブロック（セグメント）ＤＬにおいて存在している場合、処理はブロック９１０に続く。さもなければ、処理はブロック９１０に続く。
【００８１】
ブロック９１４では、ワード・シャッフル・マイクロ演算３１６は、２つのＣＲＣ削減マイクロ演算３１８の結果を受け取り、結果及びｎビットの多項式をデスティネーション（ｏｐ１）に記憶する。
【００８２】
フレキシブルＣＲＣ命令の実行は完了し、累積剰余及び多項式はオペランド１（何れも、フレキシブルＣＲＣマクロ命令のデスティネーション及びソース・レジスタ）に記憶される。
【００８３】
本発明の実施例に関係する方法を、コンピュータ使用可能な媒体を含むコンピュータ・プログラムに実施することができるということは当業者に明らかになるであろう。例えば、前述のコンピュータ使用可能な媒体は、リード・オンリー・メモリ装置、例えば、コンパクト・ディスク・リード・オンリー・メモリ（ＣＤＲＯＭ）ディスクや従来のＲＯＭ装置、又はコンピュータ読み取り可能なプログラム・コードを記憶させたコンピュータ・ディスケットを含み得る。
【００８４】
本発明の実施例は具体的には、その実施例を参照して示し、説明しているが、特許請求の範囲記載の本発明の実施例の範囲から逸脱しない限り、形態及び詳細における種々の変更を行うことができる。
【図１】
2011123884.tif 000007
【図２】
2011123884.tif 000008
【図３】
2011123884.tif 000009
【図４】
2011123884.tif 000010
【図５】
2011123884.tif 000011
【図６】
2011123884.tif 000012
【図７】
2011123884.tif 000013
【図８】
2011123884.tif 000014
【図９】
2011123884.tif 000015