(57)【要約】【課題】ビット操作を効率良く行う。【解決手段】データ処理中に実行されるオペレーションの数を減少することができるビット操作プロセッサ、システム、および方法を提供する。追加レジスタをバッファとして用いる。バッファは、メモリまたはレジスタのアドレス中のアドレス境界よりも長いビット長を有することが好ましい。実行する機能に応じて、バッファのみ、またはバッファとレジスタの両方を用いてビットストリームを処理する。【選択図】図７
2006107508.tif 000002
【特許請求の範囲】
【請求項１】
所定のアドレスビット長を有するメモリにストアされたビットストリーム中のデータに対してビット操作を行うビット操作方法であって、
前記ビットストリーム中のデータを、前記メモリから、該メモリの前記アドレスビット長より長いビット長を有するバッファへ転送するステップと、
ビットストリームデータがバッファにストアされている間に、該ビットストリームデータを操作するステップとを含むことを特徴とするビット操作方法。
【請求項２】
請求項１に記載のビット操作方法において、
前記ビットストリームデータを操作するステップは、レジスタにコピーされる対象であるビット列を所定の配置で配置するステップを含むことを特徴とするビット操作方法。
【請求項３】
請求項２に記載のビット操作方法において、
前記ビットストリームデータを操作するステップは、バッファのビット長と、前記対象であるビット列のビット数との差に等しいビット数の分、バッファにストアされた前記ビットストリームデータを論理的に右にシフトするステップを含むことを特徴とするビット操作方法。
【請求項４】
請求項１に記載のビット操作方法において、
前記ビットストリームデータを操作するステップは、移動の対象であるビット列を所定の配置で前記バッファに配置するステップを含むことを特徴とするビット操作方法。
【請求項５】
請求項４に記載のビット操作方法において、
前記ビットストリームデータを操作するステップは、レジスタのビット長と、移動の対象であるビット列のビット数との和よりも、前記バッファ中の有効ビットの数が多い場合において、
前記バッファのビット長から、移動の対象であるビット列のビット数を引いて得たビット数の分、前記バッファ中にストアされたビットストリームデータを論理的に右にシフトするステップと、
ビットストリームポインタを、移動の対象であるビット列のビット数を含むアドレスを超えた新しいアドレスに論理的にシフトするステップとを含むことを特徴とするビット操作方法。
【請求項６】
請求項４または５に記載のビット操作方法において、
前記ビットストリームデータを操作するステップは、前記ビットストリーム中の有効ビットの数が、レジスタのアドレスビット長と、移動の対象であるビット列のビット数との和以下である場合おいて、
移動の対象となるビット列を含むメモリの内容を、それぞれのビット長がメモリのアドレスビット長よりも長いバッファおよびレジスタにロードするステップと、
前記バッファにストアされたデータを、バッファの境界と、ビットストリームポインタが示すアドレスの最上位ビットとの間のビット数であるＭビット分、論理的に左にシフトするステップと、
バッファのビット長とＭとの差の分、レジスタの内容を論理的に右にシフトするステップと、
バッファとレジスタの内容に対して論理和演算を行うステップと、
論理和演算の結果をバッファにストアするステップと、
バッファのビット容量から、前記対象となるビット列のビット数を引いた得た分、バッファにストアされた内容を論理的に右にシフトするステップと、
ビットストリームポインタを、移動の対象であるビット列のビット数を保持するアドレスを超えた新しいアドレスに論理的にシフトするステップとを含むことを特徴とするビット操作方法。
【請求項７】
請求項１に記載のビット操作方法において、
前記ビットストリームデータを操作するステップは、ビットストリームデータをバッファにストアする前に、該ビットストリームデータをレジスタに移動するステップを含むことを特徴とするビット操作方法。
【請求項８】
請求項７に記載のビット操作方法において、
前記ビットストリームデータを操作するステップは、バッファ中の無効ビットの数が、バッファに移動するビット列のビット数より多い場合において、
バッファに移動するビット列をレジスタにストアするステップと、
バッファ中の無効ビットの数から、バッファの中に移動する対象であるビット列のビット数を引いて得た分、前記レジスタにストアされたデータを論理的に左にシフトするステップと、
前記バッファと前記レジスタとの論理和演算を行うステップと、
論理和演算の結果を前記バッファにストアするステップとを含むことを特徴とするビット操作方法。
【請求項９】
請求項７または８に記載のビット操作方法において、
前記ビットストリームデータを操作するステップは、バッファ中の無効ビットの数が、バッファに移動するビット列のビット数以下である場合において、
バッファに移動するビット列の第１の部分を第１のレジスタにストアするステップと、
バッファに移動するビット列のビット数から、該バッファ中の無効ビットの数を引いて得たビット数の分、第１のレジスタにストアされたデータを論理的に右にシフトするステップと、
第１のレジスタと前記バッファの内容の論理和演算を行うとともに、論理和演算の結果をメモリにストアするステップと、
バッファに移動するビット列の第２の部分を第２のレジスタにストアするステップと、
バッファのビット長と、バッファに移動するビット列のビット数との差に、バッファ中の無効ビットの数を足して得たビットの長さの分、第２のレジスタにストアされたデータを論理的に左にシフトするステップと、
第２のレジスタの内容を前記バッファにストアするステップとを含むことを特徴とするビット操作方法。
【請求項１０】
請求項１に記載のビット操作方法において、
前記ビットストリームデータを操作するステップは、バッファからビット列を削除するステップを含むことを特徴とするビット操作方法。
【請求項１１】
請求項１０に記載のビット操作方法において、
前記ビットストリームデータを操作するステップは、ビットストリーム中の有効ビットの数が、レジスタのアドレスビット長と、削除するビット列のビット数との和より多い場合において、
削除するビット列のビット数の分、バッファにストアされたデータを論理的に左にシフトするステップを含むことを特徴とするビット操作方法。
【請求項１２】
請求項１０または１１に記載のビット操作方法において、
前記ビットストリームデータを操作するステップは、ビットストリーム中の有効ビットの数が、レジスタのアドレスビット長と、削除するビット列のビット数との和以下である場合において、
メモリ中の、削除するビット列を含む内容を、それぞれのビット長がメモリのアドレスビット長よりも長い第１のレジスタおよび第２のレジスタにロードするステップと、
バッファの境界と、ビットストリームポインタが示すアドレスの最上位ビットとの差のビット数であるＭビットの分、第１のレジスタにロードされたデータを論理的に左にシフトするステップと、
バッファのビット容量とＭとの差の分、第２のレジスタにロードされたデータを論理的に右にシフトするステップと、
第１のレジスタと第２のレジスタの内容の論理和演算を行うステップと、
論理和演算の結果をバッファにストアするステップとを含むことを特徴とするビット操作方法。
【請求項１３】
所定のアドレスビット長を有するメモリにストアされたビットストリーム中のデータに対してビット操作を行うプロセッサであって、
該プロセッサは、
前記ビットストリーム中のデータを、前記メモリから、該メモリの前記アドレスビット長より長いビット長を有するバッファへ転送するとともに、ビットストリームデータが前記バッファにストアされている間に、該ビットストリームデータを操作するようにプログラミングされていることを特徴とするプロセッサ。
【請求項１４】
請求項１３に記載のプロセッサにおいて、
前記ビットストリームデータに対する操作は、レジスタにコピーされる対象であるビット列を所定の配置で配置することを含むことを特徴とするプロセッサ。
【請求項１５】
請求項１３または１４に記載のプロセッサにおいて、
前記ビットストリームデータに対する操作は、レジスターに移動する対象である複数の有効ビットを所定の配置で前記バッファに配置することを含むことを特徴とするプロセッサ。
【請求項１６】
請求項１３から１５のいずれか１項に記載のプロセッサにおいて、
前記ビットストリームデータに対する操作は、ビットストリームデータをバッファにストアする前に、該ビットストリームデータをレジスタに移動することを含むことを特徴とするプロセッサ。
【請求項１７】
請求項１３から１６のいずれか１項に記載のプロセッサにおいて、
前記ビットストリームデータに対する操作は、バッファからビット列を削除することを含むことを特徴とするプロセッサ。
【請求項１８】
所定のアドレスビット長を有するメモリにストアされたビットストリーム中のデータに対するビット操作をプロセッサに実行せしめる命令を格納する記憶媒体であって、
前記命令は、
前記ビットストリーム中のデータを、前記メモリから、該メモリの前記アドレスビット長より長いビット長を有するバッファへ転送するステップと、
前記ビットストリームデータがバッファにストアされている間に、該ビットストリームデータを操作するステップとをプロセッサに実行せしめることを特徴とする記憶媒体。
【請求項１９】
ビットストリーム中のデータに対してビット操作を行うシステムであって、
所定のアドレスビット長を有し、データをビットストリーム中にストアするメモリと、
該メモリの前記アドレスビット長より長いビット長を有するバッファを備えたプロセッサと有し、
該プロセッサは、
ビットストリーム中のデータを、前記メモリから、該メモリの前記アドレスビット長より長いビット長を有するバッファへ転送するとともに、ビットストリームデータが前記バッファにストアされている間に、該ビットストリームデータを操作するようにプログラミングされていることを特徴とするシステム。
【請求項２０】
請求項１９に記載のシステムにおいて、
前記メモリと前記プロセッサは、単一なチップ上に集積されていることを特徴とするシステム。
【請求項２１】
請求項１９に記載のシステムにおいて、
前記メモリと前記プロセッサは、互いに独立にして設けられたことを特徴とするシステム。
【請求項２２】
ビットストリーム中のデータに対してビット操作を行うするコンピュータ処理システムであって、
ユーザ入力デバイスと、
表示装置を接続するためのディスプレイインターフェースと、
所定のアドレスビット長を有し、データをビットストリーム中にストアするメモリと、
１つ以上の処理エレメントを有するプロセッサとを備え、
少なくとも１つの前記処理エレメントは、前記メモリのアドレスビット長よりも長いビット長を有するバッファを備え、
前記プロセッサは、
ビットストリーム中のデータを、前記メモリから、該メモリのアドレスビット長より長いビット長を有する前記バッファへ転送するとともに、ビットストリームデータが前記バッファにストアされている間に、該ビットストリームデータを操作するようにプログラミングされていることを特徴とするコンピュータ処理システム。
【請求項２３】
ビットストリーム中のデータに対してビット操作を行うコンピュータのネットワークであって、
通信ネットワークを介して互いに接続された複数のコンピュータ処理システムを有し、  各前記コンピュータは、
ユーザ入力デバイスと、
表示装置を接続するためのディスプレイインターフェースと、
所定のアドレスビット長を有し、データをビットストリーム中にストアするメモリと、
１つ以上の処理エレメントを有するプロセッサとを備え、
少なくとも１つの前記処理エレメントは、前記メモリのアドレスビット長よりも長いビット長を有するバッファを備え、
前記プロセッサは、
ビットストリーム中のデータを、前記メモリから、該メモリのアドレスビット長より長いビット長を有する前記バッファへ転送するとともに、ビットストリームデータが前記バッファにストアされている間に、該ビットストリームデータを操作するようにプログラミングされていることを特徴とするコンピュータのネットワーク。
【請求項２４】
所定のアドレスビット長を有するメモリにストアされたビットストリーム中のデータを、前記メモリから、該メモリの前記アドレスビット長より長いビット長を有するバッファへ転送するステップと、
前記ビットストリームデータがバッファにストアされている間に、該ビットストリームデータを操作するステップとをプロセッサに実行せしめることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ビット操作、具体的にはビットストリーム中のデータを操作する技術に関する。
【背景技術】
【０００２】
ビット操作はメモリ中のビット列に対して変更または操作をするプロセスであり、通常、ビット列のクリア、ビット列の検査、ビット列の比較、ビット列の反転、ビット列へのビットの挿入およびビット列からのビットの取り出しなどの処理を含む。初期のマイクロプロセッサの時代から、データビットの操作には、主にＡＮＤ、ＯＲ、ＥＯＲ、ＮＯＴ、ＴＥＳＴ、ＳＨＩＦＴおよびＲＯＴＡＴＥなどの命令が用いられてきた。
【０００３】
従来のシステムでは、汎用コンピュータは、可能な処理リソースの相当大きな部分を、エンコードおよびデコードアルゴリズムにおける可変長のビットストリームの取り扱いに費やすことがある。コンピュータは可変長のビットストリームをメモリ（このメモリはビットストリームバッファとして機能する）からレジスタへ直接ロードし、その後、データに対して、ビットの削除、ビットの移動（ｇｅｔ）、およびビットのコピー（ｓｈｏｗ）等のさまざまな処理を行う。レジスタのサイズによって、レジスタとメモリ間の対話は、多数のオペレーションを必要とする場合がある。ここで、機能を理解しやすいようにするために機能名のみを用いるが、例えば、従来の３２ビットレジスタを用いて、対象となるビット列を適切な配置でレジスタに配置する「ｓｈｏｗ＿ｂｉｔｓ」という機能を実行するとき、対象となるデータが３２ビット以下、かつメモリ中の３２−ｂｉｔ境界を跨らない場合には、多数のオペレーション（例えば８つのオペレーション）が必要である。さらに、対象となるデータが３２−ｂｉｔ境界を跨がる場合には、より多くのオペレーション（例えば１３つのオペレーション）が必要となる。もちろん、命令の数およびビット境界は、プロセッサの命令セットのアーキテクチャに応じて変わりうる。
【０００４】
図１は、Ｎビットをコピーする（「Ｓｈｏｗ＿Ｂｉｔｓ（Ｎ）」）従来の方法の一例を示す。「Ｓｈｏｗ＿Ｂｉｔｓ（Ｎ）」に含まれる整数Ｎは、レジスタ中のビット数を示す。ビットストリームデータがシステムメモリのようなメモリ中にロードされており、Ｓｈｏｗ＿Ｂｉｔｓ（Ｎ）方法によって、ビットストリームの所定の数すなわちＮ個のビットをレジスタ中に配置またはロードする場合を例にする。各レジスタおよびメモリの位置は、３２ビットのアドレスで示される。また、Ｓｈｏｗ＿Ｂｉｔｓコマンドでは、リクエストされたＮビットがシステムメモリ中の３２−ｂｉｔ境界を跨る場合と跨らない場合との２つの状況を考慮しなければならない。実際のメモリ位置のビットサイズは可変であり、バーチャルにアドレス指定もできる。通常、レジスタとシステムメモリとの違いは、レジスタが特定の種類の情報を保持するために使用される特定のアドレスを有するメモリであることにある。ビットストリームポインタは、ビットストリームデータが格納される特定のメモリアドレスを指定する。ビットストリームデータは非同期に到着してもよく、異なる長さを有してもよい。
【０００５】
例えば、９５ビット目と６３ビット目が３２−ｂｉｔ境界にある（開始ビット位置が０ビット目とする）場合において、メモリ中の７０ビット目から７７ビット目までの位置にある１バイトをコピー（ｓｈｏｗ）したいとする。これはＮビットが３２−ｂｉｔ境界を跨らない例である。従来のＳｈｏｗ＿Ｂｉｔｓ方法では、このＮビットが３２−ｂｉｔ境界を跨らないと判定されると、ビットストリームポインタによってアドレス指定されたメモリ位置にある、このＮビットを含む内容が、３２ビットレジスタにロードされる。図中ＭはＮビットの末尾から次のメモリアドレス境界までのビット数を表す。７０ビット目から７７ビット目までの位置によって表されるメモリのバイトをコピー（ｓｈｏｗ）したい場合には、Ｎビットの末尾と次の境界との差、すなわちＮビットの末尾の７７ビット目から９５ビット目までのビット数であるＭは１８となる。次に、３２ビットレジスタの内容は、論理的に左にＭビット分シフトされる。これにより、レジスタの最上位ビットを含む部分が、コピー（ｓｈｏｗ）したいＮビットで占有される。本例において、Ｎは８である。そして、３２ビットレジスタのこの部分の内容を（３２−Ｎ）ビット分、ここでは２４ビット分、論理的に右にシフトする。これによりビットストリームのうち該当するＮビット部分のみが右詰めに配置した状態で３２ビットレジスタ中に残り、他のすべてのビットストリームデータは３２ビットレジスタからシフトアウトされたことになる。このように、この従来のＳｈｏｗ＿Ｂｉｔｓ方法では、通常少なくとも８つのオペレーションが必要である。この８つのオペレーションは、３回の算術演算（Ｍ＋Ｎ、ビットストリームの最上位ビットのビット位置と３２−ｂｉｔ境界との距離、および（３２−Ｎ））、１回の比較（３２との比較）、２回のシフト、１回のロード、適切なＳｈｏｗ＿Ｂｉｔｓ（Ｎ）ルーチンへの１回の分岐処理（比較の結果に基づく）である。
【０００６】
図２は、ビットストリームデータのＮビットがメモリ中の３２−ｂｉｔ境界を跨る、および／または３２ビットより大きい場合の、従来のＳｈｏｗ＿Ｂｉｔｓ（Ｎ）方法の例を示す。１２７ビット目、９５ビット目と６３ビット目が３２−ｂｉｔ境界にある（開始ビット位置が０ビット目とする）場合において、メモリ中の９０ビット目から９７ビット目までの位置にある１バイトをコピー（ｓｈｏｗ）したいとする。これはＮビットが３２−ｂｉｔ境界を跨る例である。この場合において、対象となるＮビットは２つのメモリ位置を占有している。従来の方法は、まず、このＮビットを、２つの３２ビットレジスタにロードする。Ｎビットのうち、最上位ビットを含む部分が、論理的に左にＭビット分シフトされる。Ｍは、次のメモリ位置の３２−ｂｉｔ境界までのビット数である。ここでは、Ｍは３０であり、３２−ｂｉｔ境界すなわち１２７ビット目と、Ｎビット中の最上位ビット位置９７ビット目との差である。Ｎビットのうち、最下位を含む部分は、論理的に右に（６４−Ｍ−Ｎ）ビット分シフトされる。次に、Ｎビットの最上位ビットを含む部分が論理的に（３２−Ｎ）ビット分右にシフトされる。こうして２つのレジスタに対して、例えば論理ＯＲ演算等が実行されることによって、論理和が得られる。結果として、２つのレジスタのうちの一方のレジスタに、コピー（ｓｈｏｗ）したいビットが保持される。この処理は、少なくとも１３回のオペレーションを必要とする。この１３回のオペレーションは、５回の算術演算（（Ｍ＋Ｎ）、ビットストリームポインタのビット位置と３２−ｂｉｔ境界との差、（３２−Ｎ）、（６４−Ｍ）、および（（６４−Ｍ）−Ｎ））と、１回の論理ＯＲ演算、３２より大きい比較対象値との比較、３回のシフト、２回のロード、および比較の結果を得た後に適切なＳｈｏｗ＿Ｂｉｔｓ（Ｎ）ルーチンへの１回の分岐処理である。
【０００７】
図３は、ビットストリームからＮ個のデータビットを削除する（「Ｄｅｌｅｔｅ＿Ｂｉｔｓ（Ｎ）」ための従来の方法の例を示す。ビットストリームポインタがただ単にＮビット分前方へ移動される。ビットストリームポインタにＮを加えた値をビットストリームポインタに与えることによって、ビットストリームポインタを進める。これによって、このＮビットはアドレス指定されることがもう無い。ビットを削除するには、１回の算術演算、すなわち（ビットストリームポインタ＋Ｎ）だけが必要である。
【０００８】
図４は、メモリからビット列を移動（ｇｅｔ）する（「Ｇｅｔ＿Ｂｉｔｓ（Ｎ）」）従来の方法の例を示す。これは、従来のＤｅｌｅｔｅ＿Ｂｉｔｓ（Ｎ）と従来のＳｈｏｗ＿Ｂｉｔｓ（Ｎ）とを組み合わせた方法である。この方法により、Ｎビットは３２ビットレジスタ中で右詰めに配置され、ビットストリームポインタは次のＮアドレスまで進められる。この操作は、Ｓｈｏｗ＿Ｂｉｔｓ（Ｎ）が必要とするオペレーション数によって、少なくとも９回または１４回のオペレーション演算を必要とする。
【０００９】
図５は、システムメモリのようなメモリの中にＮビットを配置またはストアする「Ｐｕｔ＿Ｂｉｔｓ（Ｎ）」）の従来の方法の例を示す。まず、メモリの中に配置するＮビット部分がメモリの３２−ｂｉｔ境界を跨るか否かの判断をしなければならない。図５は、Ｎビットをメモリ中のビットストリームポインタが指す位置に配置したい場合を示す。図示のように、３２−ｂｉｔ境界の終わりから、ビットストリームポインタによってアドレス指定された、Ｎビットをストアしようとするメモリ位置の始めまで、Ｍビットが存在する。ＭビットとＮビットとの和が３２以下である場合には、この３２−ｂｉｔ境界を最先頭とするこのＭビットの内容は３２ビットレジスタにロードされ、そして、３２ビットレジスタにおいて、論理的に右に（３２−Ｍ）ビット分シフトされる。その結果、このＭビットは右詰に配置される。次に、このＭビットが論理的に（３２−Ｍ）ビット分左にシフトされ、左詰めに配置される。その後、メモリにストアする対象となるＮビットが右詰めに配置された３２ビットレジスタから、このＮビットが取り出される。その際、Ｎビットを含むレジスタにおいて、Ｎビットは論理的に（３２−Ｍ−Ｎ）ビット分左にシフトされる。そして、たとえば論理０Ｒ演算などによって２つの３２ビットレジスタの論理和が得られる。Ｎビットを含む演算結果がメモリにストアされる。この方法は少なくとも１２のオペレーションを必要とする。この１２のオペレーションは、４回の算術演算（（Ｍ＋Ｎ）、３２−ｂｉｔ境界とビットストリームポインタとのビットの差など）、１回の比較、１回の論理ＯＲ演算、３回のシフト、１回のロード、１回のストア、および適切なＰｕｔ＿Ｂｉｔｓルーチンへの１回の分岐処理である。
【００１０】
図６は、Ｎビット部分がメモリ上の３２−ｂｉｔ境界を跨る場合のＰｕｔ＿Ｂｉｔ（Ｎ）の従来の方法の例を示す。３２−ｂｉｔ境界からビットストリームポインタまでのＭビットが、３２−ｂｉｔ境界を跨るＮビットの内容とともに、３２ビットレジスタにロードされる。このＭビットを含む３２ビットレジスタにおいて、Ｍビットは論理的に（３２−Ｍ）ビット分右にシフトされる。次に、Ｎビットを含むレジスタにおいて、このＮビットは論理的に（３２−Ｍ）ビット分左にシフトされる。これによりＭビットは左詰めに配置され、レジスタの他のビット位置には０が配置される。メモリにストアする対象となるＮビットを含むレジスタにおいて、このＮビットは論理的に（６４−Ｍ−Ｎ）ビット分右にシフトされる。ただし、このシフトは、別のレジスタに、３２−ｂｉｔ境界を越えるオーバフローをロードすることを伴う。Ｎビットを含むレジスタにおいて、このＮビットは、再度、論理的に（Ｍ＋Ｎ−３２）ビット分右にシフトされる。シフトされたオーバフローを保持するレジスタと、左詰めにＭビットを保持するレジスタと、元々Ｎビットを保持したレジスタとの内容は論理ＯＲ演算などが行われ、論理和が得られる。この結果はメモリにストアされる。これにより、Ｎビットは、メモリの中において、Ｍビットの次のメモリ位置を示すビットストリームポインタを開始位置にしてストアされる。この方法は、少なくとも１７のオペレーションを必要とする。この１７のオペレーションは、６回の算術演算（ビットストリームポインタの位置と３２−ｂｉｔ境界との差、（３２−Ｍ）、（６４−Ｍ）、（（６４−Ｍ）−Ｎ）、（Ｍ＋Ｎ）、および（（Ｍ＋Ｎ）−３２）等）、１回の３２より大きい比較対象値との比較、１回の論理ＯＲ演算、３回のシフト、３回のロード、２回のストア、適切なＰｕｔ＿Ｂｉｔｓ（Ｎ）ルーチンへの１回の分岐処理である。
【００１１】
このように、従来では、ビット操作は多数のオペレーションを必要とする。
【発明の開示】
【発明が解決しようとする課題】
【００１２】
本発明は、上記事情に鑑みてなされ、その目的は、ビット操作において、オペレーションの回数を減らし、効率の良いビット操作技術を提供することにある。
【課題を解決するための手段】
【００１３】
本発明にかかるひとつの態様は、所定のアドレスビット長を有するメモリにストアされたビットストリーム中のデータに対してビット操作を行う方法に関する。この方法は、ビットストリーム中のデータを、メモリから、メモリのアドレスビット長より長いビット長をもつバッファへ転送するステップと、ビットストリームデータがバッファにストアされている間に、ビットストリームデータを操作するステップとを含む。
【００１４】
ビットストリームデータを操作するステップは、レジスタにコピー（ｓｈｏｗ）される対象であるビット列を所定の配置で配置するステップを含むことが好ましい。このステップには、バッファのビット長と、対象であるビット列のビット数との差に等しいビット数の分、バッファにストアされたビットストリームデータを論理的に右にシフトするステップが含まれてもよい。
【００１５】
また、ビットストリームデータを操作するステップには、移動（ｇｅｔ）の対象であるビット列を、所定の配置でバッファに配置するステップが含まれてもよい。たとえば、レジスタのビット長と、移動（ｇｅｔ）の対象であるビット列のビット数との和よりも、バッファ中の有効ビットの数が多い場合において、バッファにストアされたビットストリームデータを、バッファのビット長から、移動（ｇｅｔ）の対象であるビット列のビット数を引いて得たビット長さの分、論理的に右にシフトするとともに、ビットストリームポインタを、移動（ｇｅｔ）の対象であるビット列のビット数を含むアドレスを超える新しいアドレスに論理的にシフトする。
【００１６】
また、たとえば、ビットストリーム中の有効ビットの数が、レジスタのアドレスビット長と、移動（ｇｅｔ）の対象であるビット列のビット数との和（以下である）場合においては下記のようにしてもよい。すわわち、移動（ｇｅｔ）の対象であるビット列を含むメモリの内容を、それぞれのビット長がメモリのアドレスビット長よりも長いバッファおよびレジスタにロードする。そして、バッファにストアされたデータを、バッファの境界と、ビットストリームポインタが示すアドレスの最上位ビットとの間のビット数であるＭビット分、論理的に左にシフトするとともに、バッファのビット長とＭとの差の分、レジスタにロードされた内容を論理的に右にシフトする。次に、バッファとレジスタの内容に対して論理和演算を行って、論理和演算の結果をバッファにストアする。さらに、バッファのビット容量から、移動（ｇｅｔ）の対象であるビット列のビット数を引いた得た分、バッファにストアされた内容を論理的に右にシフトするとともに、ビットストリームポインタを、移動（ｇｅｔ）の対象であるビット列のビット数を保持するアドレスを超える新しいアドレスに論理的にシフトする。
【００１７】
また、ビットストリームデータをバッファにストアする前に、このビットストリームデータをレジスタに移動（ｐｕｔ）するようにしてもよい。たとえば、バッファ中の無効ビットの数が、バッファに移動（ｐｕｔ）しようとするビット列のビット数より多いとき、バッファ中に移動（ｐｕｔ）するビット列をまずレジスタにストアする。そして、バッファ中の無効ビットの数から、バッファの中に移動（ｐｕｔ）するビット列のビット数を引いて得たビットの長さの分、レジスタにストアされたデータを論理的に左にシフトする。最後にバッファとレジスタとの論理和演算を行って、その結果をバッファにストアする。
【００１８】
一方、バッファ中の無効ビットの数が、バッファに移動（ｐｕｔ）しようとするビット列のビット数以下であるときには、バッファに移動（ｐｕｔ）しようとするビット列の第１の部分を第１のレジスタにストアするとともに、バッファに移動（ｐｕｔ）しようとするビット列のビット数から、バッファ中の無効ビットの数を引いて得たビットの長さの分、第１のレジスタにストアされたデータを論理的に右にシフトする。そして、第１のレジスタとバッファの内容の論理和演算をし、その結果をメモリにストアする。また、バッファに移動（ｐｕｔ）しようとするビット列の第２の部分を第２のレジスタにストアするとともに、バッファのビット長と、バッファに移動（ｐｕｔ）しようとするビット列のビット数との差に、バッファ中の無効ビットの数を足して得たビット長さの分、第２のレジスタにストアされたデータを論理的に左にシフトする。最後に、第２のレジスタの内容をバッファにストアする。
【００１９】
本発明の他の態様では、ビットストリームデータを操作するステップには、バッファからビットを削除することが含まれてもよい。たとえば、ビットストリーム中の有効ビットの数が、レジスタのアドレスビット長と、削除しようとするビットの数との和より多い場合において、削除しようとするビットの数の分、バッファにストアされたデータを論理的に左にシフトする。また、ビットストリーム中の有効ビットの数が、レジスタアドレスのビット長と、削除しようとするビットの数との和以下である場合においては、メモリ中の、削除しようとするビットを含む内容を、それぞれのビット長がメモリアドレスのビット長より長い第１のレジスタおよび第２のレジスタにロードする。そして、バッファの境界と、ビットストリームポインタが示すアドレスの最上位ビットとの差のビット数であるＭビットの分、第１のレジスタにロードされたデータを論理的に左にシフトするとともに、バッファのビット容量とＭとの差の分、第２のレジスタにロードされたデータを論理的に右にシフトする。最後に、第１のレジスタと第２のレジスタの内容に対して論理和演算を行って、その結果をバッファにストアする。
【００２０】
本発明の別の態様は、所定のアドレスビット長を有するメモリにストアされたビットストリーム中のデータに対してビット操作を行うプロセッサに関する。このプロセッサは、ビットストリーム中のデータを、メモリから、メモリのアドレスビット長よりも長いビット長を有するバッファへ転送するとともに、ビットストリームデータがバッファにストアされている間にビットストリームデータを操作するようにプログラミングされている。
【００２１】
ビットストリームデータに対する操作は、レジスタにコピー（ｓｈｏｗ）される対象であるビット列を所定の配置で配置することを含むことができる。また、プロセッサは、移動（ｇｅｔ）の対象であるビット列を、所定の配置でバッファに配置するようにしてもよい。さらに、プロセッサは、ビットストリームデータをバッファに移動（ｐｕｔ）する前に、ビットストリームデータをレジスタにストアするようにしてもよい。プロセッサは、バッファからビット列を削除することもできる。
【００２２】
本発明の別の態様は、所定のアドレスビット長を有するメモリにストアされたビットストリーム中のデータに対するビット操作をプロセッサに実行せしめる命令を格納した記憶媒体に関する。これらの命令は、ビットストリーム中のデータをメモリから、メモリのアドレスビット長よりも長いビット長を有するバッファへ転送するとともに、ビットストリームデータがバッファにストアされている間にビットストリームデータを操作する処理をプロセッサに実行せしめる。
【００２３】
本発明のさらなる別の態様は、ビットストリームデータに対するビット操作を行うシステムに関する。このシステムは、所定のアドレスビット長を有し、データをビットストリーム中ストアするメモリと、メモリのアドレスビット長より長いビット長を有するバッファを含むプロセッサとを備える。プロセッサは、ビットストリーム中のデータを、メモリから、メモリのアドレスビット長より長いビット長を有するバッファへ転送するとともに、ビットストリームデータがバッファにストアされている間にビットストリームデータを操作するようにプログラミングされている。メモリとプロセッサは、単一なチップ上に集積されてもよいし、別個に設けられてもよい。
【００２４】
本発明の別の態様は、ビットストリームデータに対するビット操作を行コンピュータ処理システムを提供する。このコンピュータ処理システムは、ユーザ入力デバイスと、表示装置を接続するためのディスプレイインターフェースと、所定のアドレスビット長を有し、ビットストリームの形でデータをストアするメモリと、１つ以上の処理エレメントを有するプロセッサとを含む。少なくとも１つの処理エレメントは、メモリのアドレスビット長より長いビット長を有するバッファを備え、プロセッサは、ビットストリーム中のデータを、メモリから、メモリのアドレスビット長より長いビット長を有するバッファへ転送するとともに、ビットストリームデータがバッファにストアされている間にビットストリームデータを操作するようにプログラミングされている。
【００２５】
本発明の別の態様は、ビットストリームデータに対するビット操作を行うコンピュータのネットワークに関する。このコンピュータのネットワークは、通信ネットワークを介して互いに接続された複数のコンピュータ処理システムを有する。各コンピュータは、ユーザ入力デバイスと、表示装置を接続するためのディスプレイインターフェースと、所定のアドレスビット長を有し、ビットストリームの形でデータをストアするメモリと、１つ以上の処理エレメントを含むプロセッサとを備える。少なくとも１つの処理エレメントは、メモリのアドレスビット長より長いビット長を有するバッファを備え、プロセッサは、ビットストリーム中のデータをメモリから、メモリのアドレスビット長より長いビット長を有するバッファへ転送するとともに、ビットストリームデータがバッファ中にストアされている間にビットストリームデータを操作するようにプログラミングされている。
【００２６】
上述したビット操作の各ステップを広い範囲の処理システムで実行することができる。たとえば、例えばマルチプロセッサシステムで実行してもよい。
【００２７】
なお、前述した構成要素の任意の組合せ、本発明の表現を装置、方法、システム、コンピュータプログラム、プログラムを記憶した記憶媒体などの間で変換したものもまた、本発明の態様として有効である。
【発明を実施するための最良の形態】
【００２８】
本発明の態様によるビット操作技術は、可変長エンコードおよびデコードのためのビットストリーム処理技術を改善する。この技術は、データ処理中に行われるオペレーションの回数を減少するために開発された高速なビット操作スキームに関する。例えば、本発明の態様によれば、上述したＳｈｏｗ＿Ｂｉｔｓ（Ｎ）機能は、対象となるデータがメモリ境界を跨るか否かに関わらず、２回のオペレーションで実現することができる。
【００２９】
本発明は、１つの追加のレジスタを、ビットストリーム用のバッファとして実装する。まず、対象となるビットストリームがバッファレジスタにロードされ、ビットストリーム中の有効ビットの数（以下「ＲｅｓｔＢｉｔｓ」という）が後に使用するために記録される。バッファレジスタの長さはとくに上限が無く、３３ビット以上であることが好ましい。ビットストリームの処理は、要求された機能に応じて、バッファのみ、またはバッファと標準レジスタ両方が用いられる。ＲｅｓｔＢｉｔｓ値は、論理シフト等を実行する際に利用、更新される。本発明のアーキテクチャおよび原理は、上述したＤｅｌｅｔｅ＿Ｂｉｔｓ（Ｎ）機能、Ｇｅｔ＿Ｂｉｔｓ（Ｎ）機能、およびＰｕｔ＿Ｂｉｔｓ（Ｎ）機能等の他のビット操作機能にも適用できる。これら機能を本発明のビット操作技術で実行することによって、処理速度において大幅な改善を図ることができる。
【００３０】
もちろん、本明細書で参照する特定の機能名、例えばＧｅｔ＿Ｂｉｔｓ（Ｎ）、Ｐｕｔ＿Ｂｉｔｓ（Ｎ）、Ｄｅｌｅｔｅ＿Ｂｉｔｓ（Ｎ）等は、本発明の理解を容易にするためのものであり、周知の用語または産業用語である必要がない。本明細書においてこれらの用語を例として用いたが、本発明の適用できる機能は、これらの例の機能に限られることがない。
【００３１】
図７は、本発明の実施の形態にかかるＳｈｏｗ＿Ｂｉｔｓ（Ｎ）の方法を示す。初期化時において、対象となるビットストリームがメモリから、これらのビットストリームを保持するバッファとして機能するレジスタにロードされる。レジスタの再左端のビットが、ビットストリームポインタにより示されるメモリ位置の最左端ビットで占有される。このレジスタは、ビットストリームを反映するデータを保持するので、バッファとして指定することができる。バッファは３２ビットより長いデータを保持することが好ましく、図７の例ではこのバッファは６４ビットである。図７に示すＳｈｏｗ＿Ｂｉｔｓ（Ｎ）方法では、６４−ｂｉｔバッファへの６４ビットのデータのロードは、１回のレジスタロード動作を必要とする。本明細書で使用するＲｅｓｔＢｉｔｓは、バッファ中の有効ビットの数を意味する。例えば、６４−ｂｉｔバッファへのロードはＲｅｓｔＢｉｔｓの値を６４にする。その代わりに、３３−ｂｉｔバッファへのロードはＲｅｓｔＢｉｔｓの値を３３にする。
【００３２】
バッファにデータをロードした後、データのＮビットをコピー（ｓｈｏｗ）するために、バッファのビット数から、コピーするビット列のビット数すなわちＮを引いたビット数の分、ロードしたデータを論理的に右にシフトする。６４−ｂｉｔバッファからＮビットをコピー（ｓｈｏｗ）するには、（６４−Ｎ）ビット分、論理的に右にシフトする必要がある。その結果、図７に示すＳｈｏｗ＿Ｂｉｔｓ（Ｎ）は、１回の算術演算と１回のシフトの２回のオペレーションのみで実現される。この論理的右シフトの結果は、特にバッファとして指定されていない６４−ｂｉｔレジスタの中に示される。バッファとして指定しないのは、レジスタオペレーション後には技術的にもうビットストリームを反映しないためである。
【００３３】
図８は、ビットストリーム中の有効ビットの数、すなわちＲｅｓｔＢｉｔｓが、（３２＋Ｎ）ビットより多い場合において、本発明の態様によるＧｅｔ＿Ｂｉｔｓ（Ｎ）方法を示す。図８の例において、例としてバッファは６４−ｂｉｔバッファである。ビットストリーム中の対象となる部分の内容がバッファにロードされた後、このレジスタにおいて、レジスタの長さからＮビットを引いたビットの長さの分右にシフトされる。図示のように、６４−ｂｉｔバッファの場合、これによって、バッファの上記内容は（６４−Ｎ）ビット分、論理的に右にシフトされる。この論理右シフトの結果は、特にバッファとして指定されていない６４−ｂｉｔレジスタの中に示される。６４−ｂｉｔレジスタをバッファとして指定しないのは、レジスタオペレーション後に技術的にはもうビットストリームを反映しないためである。そしてビットストリームポインタは、Ｎビットを含むアドレスの前のアドレスに論理的にシフトされることによって、Ｎビットの前に進められる。ビットストリームポインタがＮビットの前に進められているので、６４−ｂｉｔレジスタは再びビットストリームを反映するようになるので、図８に示すバッファとして指定される。ＲｅｓｔＢｉｔｓの値は、バッファがもうＮビットを示していないことを反映するように更新される。結果として、ＲｅｓｔＢｉｔｓの値は（ＲｅｓｔＢｉｔｓ−Ｎ）に更新される。この方法が必要とするオペレーションの最少回数は７回である。この７回のオペレーションは、３回の算術演算（本例では（３２＋Ｎ）、（６４−Ｎ）、（ＲｅｓｔＢｉｔｓ−Ｎ））、１回の比較、２回のシフト（バッファのシフトとビットストリームポインタのシフト）、ＲｅｓｔＢｉｔｓが（３２＋Ｎ）より多いと確認された後に適切なＧｅｔ＿Ｂｉｔｓ（Ｎ）ルーチンへの１回の分岐処理である。
【００３４】
図９は、ＲｅｓｔＢｉｔｓが（３２＋Ｎ）以下である場合において、本発明の態様によるＧｅｔ＿Ｂｉｔｓ（Ｎ）方法を示す。メモリの該当する部分の内容は２つのレジスタにロードされる。図９の例では２つの６４−ｂｉｔレジスタを用いる。最上位ビット情報を保持するレジスタの下位半分は、Ｍビット分論理的に左にシフトされる。ここで、Ｍは、６４−ｂｉｔ境界からのビット数である。もう一方の６４−ｂｉｔレジスタは、レジスタのビット容量からＭビットを引いて得たビット数すなわち（６４−Ｍ）ビット分、論理的に右にシフトされる。そして、２つのレジスタの内容の論理和演算（論理ＯＲ等）が行われ、その結果はバッファにストアされる。バッファにストアされた内容は、レジスタのビット容量からＮを引いて得たビット数、図９の例では（６４−Ｎ）ビットの分、論理的に右にシフトされる。その後、ビットストリームポインタは、もうＮビットを示すないように、Ｎビット分論理的に左にシフトされる。ＲｅｓｔＢｉｔｓの値は、レジスタ中のビット数からＮを引いて得たビット数（図９の例では（６４−Ｎ）ビット）を反映するように更新される。
【００３５】
図１０は、バッファ中の無効ビット数がＮよりも多い場合において、本発明の態様によるＰｕｔ＿Ｂｉｔｓ（Ｎ）方法を示す。ここで、バッファ中の無効ビット数をＩ−Ｒｅｓｔｂｉｔｓという。開始時に空である６４−ｂｉｔｉバッファにストアしようとするＮビットは、６４−ｂｉｔレジスタにストアされている。レジスタにストアされたこのデータを、Ｉ−ＲｅｓｔｂｉｔｓからＮを引いて得たビット数の分、論理的に左にシフトする。このシフトの結果とバッファの論理和演算（論理ＯＲ等）が行われ、Ｎビットはバッファにストアされる。Ｉ−Ｒｅｓｔｂｉｔｓの値は（（Ｉ−Ｒｅｓｔｂｉｔｓ）−Ｎ）となる。このＰｕｔ＿Ｂｉｔｓ（Ｎ）方法は、５回のオペレーションを必要とする。この５回のオペレーションは、１回の算術演算、１回の論理演算、１回の比較、１回のシフト、Ｉ−ＲｅｓｔｂｉｔｓがＮより大きい判断結果ことに基づく適切なＰｕｔ＿Ｂｉｔｓ（Ｎ）ルーチンへの１回の分岐処理である。
【００３６】
図１１は、無効ビット数Ｉ−ＲｅｓｔｂｉｔｓがＮより小さい場合のＰｕｔ＿Ｂｉｔｓ（Ｎ）方法を示す。初期状態においてバッファは空である。３２ビットより大きなサイズを有するレジスタ例えば６４−ｂｉｔレジスタ中のＮビットは、（Ｎ−（Ｉ−Ｒｅｓｔｂｉｔｓ））分、論理的に右にシフトされる。シフトアウトされたデータは別の６４ビットレジスタ中に配置されるとともに、（６４−Ｎ＋（Ｉ−Ｒｅｓｔｂｉｔｓ））分、論理的に左にシフトされる。右シフトが行われたレジスタとバッファの内容は論理和演算（論理ＯＲ等）が行われる。本例では、バッファの有効ビット数は（６４−Ｒｅｓｔｂｉｔｓ）である。ＮがＩ−ＲｅｓｔＢｉｔｓより大きいので、Ｎビットは２つの部分に分けられ、以下の処理が行われる。まず、Ｎビットの左部分を、バッファ中の内容と結合するためにレジスタにストアする。次に、Ｎビットの右部分を、一時的に第２のレジスタにストアする。先のレジスタの値がバッファに置かれた後、バッファがフルとなるため、バッファの内容はメモリにストアされる。このオペレーションの後、第２のレジスタの内容はバッファにストアされ、ＲｅｓｔＢｉｔｓは再度初期化される。
【００３７】
図１２は、ＲｅｓｔＢｉｔｓが（３２＋Ｎ）より大きい場合のＤｅｌｅｔｅ＿Ｂｉｔｓ（Ｎ）方法を示す。ここではＲｅｓｔＢｉｔｓが常に３２より大きいと仮定する。バッファはＮビット分論理的に左にシフトされ、ビットストリームからＮビットの削除を反映する。これには５回のオペレーション、すなわち２回の算術演算と、１回のシフトと、１回の条件付けと、適切なビット削除ルーチンへの１回の分岐処理を必要とする。
【００３８】
図１３は、ＲｅｓｔＢｉｔｓが（３２＋Ｎ）より小さい場合のバッファレジスタを用いたＤｅｌｅｔｅ＿Ｂｉｔｓ（Ｎ）方法を示す。図１３は、６４−ｂｉｔレジスタを用いたＤｅｌｅｔｅ＿Ｂｉｔｓ（Ｎ）の例である。ビットストリームポインタは、メモリ中の内容の最後のビットが３２−ｂｉｔ境界からＭビット離れている位置のメモリのアドレスを示す。バッファから削除すべきＮビットを含むメモリの内容は、２つの６４−ｂｉｔレジスタにストアされる。ビットストリームポインタでアドレス指定されたメモリ位置に含まれるビットを含むレジスタは、Ｍビット分、論理的に左にシフトされる。もうひとつの６４−ｂｉｔレジスタは（６４−Ｍ）ビット分右にシフトされる。２つの６４−ｂｉｔレジスタの論理和演算（論理ＯＲ等）がバッファ中で行われる。ビットストリームポインタは、削除すべきＮビットを含まないアドレスまで進められる。このＤｅｌｅｔｅ＿Ｂｉｔｓ（Ｎ）方法では１２回の演算、すなわち４回の算術演算、１回の論理ＯＲ演算、１回の比較、３回のシフト、２回のロード、１回の分岐処理を必要とする。
【００３９】
本発明の各種態様によるビット操作手順は、さまざまな処理システム上で実行することができる。例えば、ビット操作はスタンドアロン型の処理システム上で実行できる。またマルチプロセッサシステム上でも実行できる。図１４において、本発明のビット操作の実行に使用できるマルチプロセッサシステムの一例を示す。
【００４０】
図１４はひとつの処理エレメントを示す。この処理エレメント２００は、Ｉ／Ｏインターフェース２０２と、処理ユニットＰＵ２０４と、ダイレクトメモリアクセスコントローラＤＭＡＣ２０６と、複数のサブ処理ユニットＳＰＵ２０８と、メモリインターフェース２１０とを含む。処理エレメント２００はＤＲＡＭ２１４と通信する。処理エレメント２００のより詳細な説明は、２００１年３月２２日に出願された米国特許出願第０９／８１６，００４号と米国特許出願第０９／８１６，０２０号を参照することができ、ここで省略する。
【００４１】
図１５は、サブ処理ユニットＳＰＵ２０８の一例を示す。各ＳＰＵ２０８は、ローカルメモリ２５０と、レジスタ２５２と、浮動小数点ユニット２５４と、整数ユニット２５６と、バスインターフェース２５８とを備える。本発明の各種態様に従うビット操作処理は、図１４の処理エレメント２００の異なる場所において実行でき、例えば処理ユニットＰＵ２０４においても実行できる。本発明のビット操作技術は、任意のサブ処理ユニットＳＰＵ２０８において実行できる。さらに、本発明のビット操作技術は複数のプロセッサを備えるシステムにも適用することができ、複数の処理エレメントを有するシステムにおけるひとつまたは複数の選択された処理エレメントにおいて実行できる。
【００４２】
図１６は、本発明の態様にしたがって、単独にまたはネットワーク環境中で使用可能な様々なコンピュータデバイスを示すコンピュータのネットワーク３００の概略図である。これらのコンピュータデバイスは、一般的なＰＣ（パーソナルコンピュータ）、ラップトップ、サーバ、ゲーム機、ＰＤＡなどで使用されるさまざまなユーザ入力デバイス、表示装置、メモリ、プロセッサなどを用いたコンピュータ型装置を含むことができる。例えば、図１６に示すコンピュータのネットワーク３００は、ＬＡＮ（ローカルエリアネットワーク）、ＷＡＮ（ワイドエリアネットワーク）、インターネット等の通信ネットワーク３７０を介して、有線、無線、有線と無線の組合わせなどによって接続された複数のコンピュータ処理システム３１０、３２０、３３０、３４０、３５０および３６０を備える。
【００４３】
各コンピュータ処理システムは、例えばキーボード３１１およびマウス３１２（並びにペン入力装置、ジョイスティック、ボタン、タッチスクリーン等の他の各種の公知の他のタイプの入力装置）を有する１つ以上のコンピュータデバイスと、ＣＲＴ、ＬＣＤ、プラズマスクリーンモニタ、ＴＶ、プロジェクタなどの表示装置３１４へ接続するためのディスプレイインターフェース３１３（コネクタ、ポート、カード等）とを備えることができる。各コンピュータはまた、望ましくは、このようなデバイスによく用いられ、コンピュータ処理システム中に配置される１つ以上のメモリや、１つ以上のプロセッサなどの通常の処理コンポーネントを含む。このようなコンピュータデバイスの中のメモリおよびプロセッサに対して、上述した本発明の各種態様によるビットストリーム中のデータのビット操作を実行することができる。メモリとしては、ビットストリームデータをストアするメモリ、ビットストリームデータから転送されたデータを受信するバッファメモリ、および本発明の態様の通り、ストア、転送、およびビットストリーム操作をプロセッサに実行させる命令を格納するメモリが含まれる。
【００４４】
このように、本発明によるビット操作技術は、多くの場合において、さまざまなビットストリームを処理する従来の方法よりも大幅な効率向上を図ることができる。レジスタが大サイズであるほど、処理は効率的になる。レジスタおよびビットストリームバッファは６４ビット以上であることが好ましく、１２８ビット以上であることがより好ましい。
【００４５】
以上、特定の実施形態を参照して本発明を説明したが、これら実施形態は本発明の主旨および応用を例示するものに過ぎない。上述した本発明のビット操作技術は、データの高速かつ反復的な操作が要求されるオーディオ／ビデオコーダ−デコーダ（ＣＯＤＥＣ）およびビデオゲーム等に特に適用することできる。したがって、上記の実施の形態の例に種々の変形を加えることが可能であり、本発明の主旨から逸脱しない限り、さまざまな他の構成を用いてもよい。
【図面の簡単な説明】
【００４６】
【図１】従来のビット操作機能の例を示す図である。
【図２】ビットストリームデータのＮビットがメモリの３２−ｂｉｔ境界を跨る場合、および／または３２ビットより長いビット長さを有する場合における従来のビット操作機能の例を示す図である。
【図３】ビットストリームからＮ個のデータビットを削除する従来のビット操作機能の例を示す図である。
【図４】従来のビット操作機能の例を示す図である。
【図５】メモリにＮビットをストアする従来のビット操作機能の例を示す図である。
【図６】従来のビット操作機能の他の例を示す図である。
【図７】本発明の一つの態様によるビット操作機能を示す図である。
【図８】ビットストリーム中の有効ビット数が（３２＋Ｎ）より多い場合における、本発明の一つの態様によるビット操作機能を示す図である。
【図９】ビットストリーム中の有効ビット数が（３２＋Ｎ）より少ない場合における、本発明の一つの態様によるビット操作機能を示す図である。
【図１０】バッファ中の無効ビット数がＮより多い場合における、本発明の一つの態様によるビット操作機能を示す図である。
【図１１】バッファ中の無効ビット数がＮより少ない場合における、本発明の一つの態様によるビット操作機能を示す図である。
【図１２】ビットストリーム中の有効ビット数が（３２＋Ｎ）より多い場合における、本発明の一つの態様によるビット操作機能を示す図である。
【図１３】「ＲｅｓｔＢｉｔｓ」が（３２＋Ｎ）より少ない場合の、本発明の一つの態様によるビット操作機能を示す図である。
【図１４】本発明の態様によるビット操作を実行することができる処理システムの例を示すブロック図である。
【図１５】本発明の態様によるビット操作を実行することができる処理システムの例を示すブロック図である。
【図１６】本発明の態様によるコンピュータのネットワークを示す概略図である。
【符号の説明】
【００４７】
１００  処理エレメント、  ２０２  Ｉ／Ｏインターフェース、  ２０４  処理ユニットＰＵ、  ２０６  ＤＭＡＣ、２０８  サブ処理ユニットＳＰＵ、  ２１０  メモリインターフェース、  ２１４  ＤＲＡＭ、  ２５０  ローカルメモリ、  ２５２  レジスタ、  ２５４  浮動小数点ユニット、  ２５６  整数ユニット、  ２５８  バスインターフェース、  ３００  コンピュータのネットワーク、  ３１０  コンピュータ処理システム、  ３１１  キーボード、  ３１２  マウス、  ３１３  ディスプレイインターフェース、  ３１４  表示装置、  ３２０  コンピュータ処理システム、  ３３０  コンピュータ処理システム、  ３４０  コンピュータ処理システム、  ３５０  コンピュータ処理システム、  ３６０  コンピュータ処理システム、  ３７０  通信ネットワーク。
【図１】
2006107508.tif 000003
【図２】
2006107508.tif 000004
【図３】
2006107508.tif 000005
【図４】
2006107508.tif 000006
【図５】
2006107508.tif 000007
【図６】
2006107508.tif 000008
【図７】
2006107508.tif 000009
【図８】
2006107508.tif 000010
【図９】
2006107508.tif 000011
【図１０】
2006107508.tif 000012
【図１１】
2006107508.tif 000013
【図１２】
2006107508.tif 000014
【図１３】
2006107508.tif 000015
【図１４】
2006107508.tif 000016
【図１５】
2006107508.tif 000017
【図１６】
2006107508.tif 000018