(57)【特許請求の範囲】
【請求項１】
メモリへのアクセスアドレスを格納するアドレスレジスタと、
少なくとも前記メモリからのロードデータ幅と等しいビット幅を有し、前記メモリからロードしたデータを格納する第１のバッファレジスタと、
前記第１のバッファレジスタに連結され、前記第１のバッファレジスタの内容がシフトされて格納される第２のバッファレジスタと、
前記第１のバッファレジスタと第２のバッファレジスタが連結されて構成される連結領域において、データを第２のバッファレジスタの非連結端側に詰めて格納した際に生じる空き領域の長さを格納するオフセットレジスタと、
オペランドとしてシフト量を指定し、前記連結領域に存在するデータを指定されたシフト量だけ、前記第２のバッファレジスタの非連結端側にシフトし、同時に前記オフセットレジスタの値をシフト量だけインクリメントする第１のシフト命令と、
（１）前記オフセットレジスタの値が前記第１のバッファレジスタのビット幅に等しいか、あるいはそれ以上の値の場合に、前記アドレスレジスタの値をアドレスとするメモリ上のデータを前記第１のバッファレジスタにロードし、同時に前記アドレスレジスタの値を所定値だけインクリメントし、（２）前記オフセットレジスタの値が前記第１のバッファレジスタのビット幅未満の場合は何もしない、条件付きロード命令と、
（１）前記オフセットレジスタの値が前記第１のバッファレジスタのビット幅に等しいか、あるいはそれ以上の値の場合に、前記条件付きロード命令によってメモリからロードされた前記第１のバッファレジスタの内容を、（オフセットレジスタの内容−第１のバッファレジスタのビット幅数）のビット数だけ前記第２のバッファレジスタ側へシフトし、前記第２のバッファレジスタの連結端側の（オフセットレジスタの内容−第１のバッファレジスタのビット幅数）のビット部分を、前記第１のバッファレジスタ側からシフトアウトされたビットで置き換え、同時に前記オフセットレジスタの値を前記バッファレジスタのビット数だけデクリメントし、
（２）前記オフセットレジスタの値が前記第１のバッファレジスタのビット幅未満の場合は何もしない、第２のシフト命令と、を備えたことを特徴とする可変長符号処理機構を有するデータ処理装置。
【請求項２】
前記第１のシフト命令のオペランドとして与えられるシフト量と前記第１のバッファレジスタのビット幅との差分をセットする第２のオフセットレジスタと、
前記第１のシフト命令において、前記第１のバッファレジスタのビット幅を越えるシフト量が指定されたときセットされるフラグレジスタと、
（１）前記第２のオフセットレジスタの値が前記第１のバッファレジスタのビット幅を越えない場合は、前記第１および第２のバッファレジスタの連結領域を前記第２のオフセットレジスタの値だけ前記第２のバッファレジスタの非連結端側にシフトし、同時に、前記オフセットレジスタの値をシフト量だけインクリメントし、
前記第２のオフセットレジスタとフラグレジスタを０にし、（２）前記第２のオフセットレジスタの値が前記第１のバッファレジスタのビット幅を越える場合は、前記第１および第２のバッファレジスタの連結領域を前記第１のバッファレジスタのビット幅分だけ前記第２のバッファレジスタの非連結端側にシフトし、同時に
前記オフセットレジスタの値を前記第１のバッファレジスタのビット数だけインクリメントし、前記第２のオフセットレジスタの値を前記第１のバッファレジスタのビット数だけデクリメントする第３のシフト命令とをさらに備え、
前記第１のシフト命令により前記第１のバッファレジスタのビット幅を越えるシフト量が指定されたとき、
前記第１のシフト命令、前記条件付きロード命令、および前記第２のシフト命令の実行後に、前記フラグレジスタの値が１であることにより、前記第３のシフト命令と、前記条件付きロード命令と、前記第２のシフト命令からなる命令列に分岐し、該命令列を、前記フラグレジスタの値が０になるまで、繰り返し実行
することを特徴とする請求項１に記載の可変長符号処理機構を有するデータ処理装置。
【請求項３】
メモリへのアクセスアドレスを格納するアドレスレジスタと、
少なくとも前記メモリからのロードデータ幅と等しいビット幅を有し、前記メモリからロードしたデータを格納する第１のバッファレジスタと、
前記第１のバッファレジスタに連結され、前記第１のバッファレジスタの内容がシフトされて格納される第２のバッファレジスタと、
前記第１のバッファレジスタと第２のバッファレジスタが連結されて構成される連結領域において、データを第２のバッファレジスタの非連結端側に詰めて格納した際に生じる空き領域の長さを格納する第１のオフセットレジスタと、オペランドとしてシフト量を指定し、前記連結領域に存在するデータを指定されたシフト量だけ、前記第２のバッファレジスタの非連結端側にシフトし、同時に前記第１のオフセットレジスタの値をシフト量だけインクリメントする第１のシフト命令と、
（１）前記第１のオフセットレジスタの値が前記第１のバッファレジスタのビット幅に等しいか、あるいはそれ以上の値の場合に、前記アドレスレジスタの値をアドレスとするメモリ上のデータを前記第１のバッファレジスタにロードし、同時に前記アドレスレジスタの値を所定値だけインクリメントし、（２）前記第１のオフセットレジスタの値が前記第１のバッファレジスタのビット幅未満の場合は何もしない、条件付きロード命令と、
（１）前記第１のオフセットレジスタの値が前記第１のバッファレジスタのビット幅に等しいか、あるいはそれ以上の値の場合に、前記条件付きロード命令によってメモリからロードされた前記第１のバッファレジスタの内容を、（第１のオフセットレジスタの内容−第１のバッファレジスタのビット幅数）のビット数だけ前記第２のバッファレジスタ側へシフトし、前記第２のバッファレジスタの連結端側の（第１のオフセットレジスタの内容−第１のバッファレジスタのビット幅数）のビット部分を、前記第１のバッファレジスタ側からシフトアウトされたビットで置き換え、同時に前記第１のオフセットレジスタの値を前記バッファレジスタのビット数だけデクリメントし、（２）前記第１のオフセットレジスタの値が前記第１のバッファレジスタのビット幅未満の場合は何もしない、第２のシフト命令とを備えるとともに、
前記第１のシフト命令のオペランドとして与えられるシフト量と前記第１のレジスタのビット幅との差分をセットする第２のオフセットレジスタと、
前記第１のシフト命令において、前記第１のレジスタのビット幅を越えるシフト量が指定されたときセットされるフラグレジスタとをさらに備え、
前記第１のシフト命令は、
（１）前記第２のオフセットレジスタの値が前記第１のバッファレジスタのビット幅を越えない場合は、前記第１および第２のバッファレジスタの連結領域を前記第２のオフセットレジスタの値だけ前記第２のバッファレジスタの非連結端側にシフトし、同時に、前記第１のオフセットレジスタの値をシフト量だけインクリメントし、前記第２のオフセットレジスタとフラグレジスタを０にし、（２）前記第２のオフセットレジスタの値が前記第１のバッファレジスタのビット幅を越える場合は、前記第１および第２のバッファレジスタの連結領域を前記第１のバッファレジスタのビット幅分だけ前記第２のバッファレジスタの非連結端側にシフトし、
同時に前記第１のオフセットレジスタの値を前記第１のバッファレジスタのビット数だけインクリメントし、
前記第２のオフセットレジスタの値を前記第１のバッファレジスタのビット数だけデクリメントする機能をさらに備え、
前記第１のシフト命令により前記第１のバッファレジスタのビット幅を越えるシフト量が指定されたとき、
前記第１のシフト命令、前記条件付きロード命令、および前記第２のシフト命令の実行後に、前記フラグレジスタの値が１であることにより、前記第１のシフト命令と、前記条件付きロード命令と、前記第２のシフト命令からなる命令列を、前記フラグレジスタの値が０になるまで、繰り返し実行することを特徴とする可変長符号処理機構を有するデータ処理装置。
【請求項４】
前記アドレスレジスタとして専用のレジスタを設けず、前記条件付きロード命令のオペランドとして指定可能な汎用レジスタをメモリアクセス用のアドレスレジスタとして使用することを特徴とする請求項１から３のいずれかに記載の可変長符号処理機構を有するデータ処理装置。
【請求項５】
前記第１のシフト命令にターゲットオペランド指定機能を付加し、前記第１のシフト命令実行時に前記第２のバッファレジスタからシフトアウトされたビット列をターゲットとして指定された汎用レジスタに格納することを特徴とする請求項１から４のいずれかに記載の可変長符号処理機構を有するデータ処理装置。
【請求項６】
前記第２のバッファレジスタの非連結端側の必要な数のビット値を入力してシフト量を計算する手段を備え、前記第１のシフト命令においてシフト量をオペランドとして与えることなく、ハードウェア回路手段によりシフト量を定めることを特徴とする請求項１から５のいずれかに記載の可変長符号処理機構を有するデータ処理装置。
【請求項７】
前記条件付きロード命令によって前記アドレスレジスタの値をインクリメントした際に、アドレスレジスタの値が別途定めた範囲を越えたことを検出し、通知する手段を備えたことを特徴とする請求項１から６のいずれかに記載の可変長符号処理機構を有するデータ処理装置。
【請求項８】
メモリへのアクセスアドレスを格納するアドレスレジスタと、
前記メモリへのストアデータ幅と等しいビット幅を有し、前記メモリへストアすべきデータを格納する第１のバッファレジスタと、
前記第１のバッファレジスタに連結され、前記第１のバッファレジスタへその内容がシフトされて格納される第２のバッファレジスタと、
前記第１のバッファレジスタと第２のバッファレジスタが連結されて構成される連結領域において、データを第１のバッファレジスタの非連結端側に詰めて格納した際に生じる空き領域の長さを格納するオフセットレジスタと、
オペランドとして与えられたデータを前記第２のバッファレジスタにセットするライト命令と、
オペランドとして符号長を指定し、前記第２のバッフアレジスタの内容を（オフセットレジスタの内容−第２のバッファレジスタのビット幅数）だけ前記第１のバッファレジスタの非連結端側にシフトし、前記第１のバッファレジスタの連結端側の（オフセットレジスタの内容−第２のバッファレジスタのビット幅数）のビット部分を、前記第２のバッファレジスタ側からシフトアウトされたビットで置き換え、同時に前記オフセットレジスタの値を前記オペランドの符号長だけデクリメントするシフト命令と、
（１）前記オフセットレジスタの値が前記第２のバッファレジスタのビット幅に等しいか、あるいはそれ以下の場合に、前記第１のバッファレジスタのデータを、前記アドレスレジスタの値をアドレスとするメモリ上にストアし、同時に前記アドレスレジスタの値を所定値だけインクリメントし、（２）前記オフセットレジスタの値が前記第２のバッファレジスタのビット幅を越える場合は何もしない、条件付きストア命令と、
（１）前記オフセットレジスタの値が前記第２のバッファレジスタのビット幅に等しいか、あるいはそれ以下の場合に、前記第２のバッファレジスタの内容を前記第１のバッファレジスタにコピーし、同時に前記オフセットレジスタの値を前記第２のバッファレジスタのビット幅数だけインクリメントし、（２）前記オフセットレジスタの値が前記第２のバッファレジスタのビット幅を越える場合は何もしない、条件付きコピー命令と、を備えたことを特徴とする可変長符号処理機構を有するデータ処理装置。
【請求項９】
前記シフト命令のオペランドとして与えられる符号長と前記第２のバッファレジスタのビット幅との差分をセットする第２のオフセットレジスタと、前記シフト命令において、前記第２のバッファレジスタのビット幅を越える符号長が指定されたときセットされるフラグレジスタと、
（１）前記第２のオフセットレジスタの値が前記第２のバッファレジスタのビット幅を越えない場合は、前記第２のバッファレジスタの内容を、（オフセットレジスタの内容−第２のバッファレジスタのビット幅数）のビット数だけ前記第１のバッファレジスタ側へシフトし、前記第１のバッファレジスタの連結端側の（オフセットレジスタの内容−第２のバッファレジスタのビット幅数）のビット分を、前記第２のバッファレジスタ側からシフトアウトされたビットで置き換え、同時に前記オフセットレジスタの値を前記第２のオフセットレジスタの値だけデクリメントし、さらに前記第２のオフセットレジスタおよびフラグレジスタの値を０にし、（２）前記第２のオフセットレジスタの値が前記第２のバッファレジスタのビット幅を越える場合は、前記第２のバッファレジスタの内容を、（オフセットレジスタの内容−第２のバッファレジスタのビット幅数）のビット数だけ前記第１のバッファレジスタ側へシフトし、前記第１のバッファレジスタの連結端側の（オフセットレジスタの内容−第２のバッファレジスタのビット幅数）のビット分を、前記第２のバッファレジスタ側からシフトアウトされたビットで置き換え、同時に前記オフセットレジスタと第２のオフセットレジスタの値をそれぞれ前記第２のバッファレジスタのビット数だけデクリメントする第２のシフト命令とをさらに備え、
前記シフト命令により前記第２のバッファレジスタのビット幅を越える符号長が指定されたとき、前記シフト命令、前記条件付きストア命令、および前記条件付きコピー命令の実行後に、前記フラグレジスタの値が１であることにより、前記第２のシフト命令と、前記条件付きストア命令と、前記条件付きコピー命令からなる命令列に分岐し、該命令列を、前記フラグレジスタの値が０になるまで、繰り返し実行することを特徴とする請求項８に記載の可変長符号処理機構を有するデータ処理装置。
【請求項１０】
メモリへのアクセスアドレスを格納するアドレスレジスタと、
前記メモリへのストアデータ幅と等しいビット幅を有し、前記メモリへストアすべきデータを格納する第１のバッファレジスタと、
前記第１のバッファレジスタに連結され、前記第１のバッファレジスタへその内容がシフトされて格納される第２のバッファレジスタと、
前記第１のバッファレジスタと第２のバッファレジスタが連結されて構成される連結領域において、データを第１のバッファレジスタの非連結端側に詰めて格納した際に生じる空き領域の長さを格納するオフセットレジスタと、
オペランドとして与えられたデータを前記第２のバッファレジスタにセットするライト命令と、
オペランドとして符号長を指定し、前記第２のバッフアレジスタの内容を（オフセットレジスタの内容−第２のバッファレジスタのビット幅数）だけ前記第１のバッファレジスタの非連結端側にシフトし、前記第１のバッファレジスタの連結端側の（オフセットレジスタの内容−第２のバッファレジスタのビット幅数）のビット部分を、前記第２のバッファレジスタ側からシフトアウトされたビットで置き換え、同時に前記オフセットレジスタの値を前記オペランドの符号長だけデクリメントするシフト命令と、
（１）前記オフセットレジスタの値が前記第２のバッファレジスタのビット幅に等しいか、あるいはそれ以下の場合に、前記第１のバッファレジスタのデータを、前記アドレスレジスタの値をアドレスとするメモリ上にストアし、同時に前記アドレスレジスタの値を所定値だけインクリメントし、（２）前記オフセットレジスタの値が前記第２のバッファレジスタのビット幅を越える場合は何もしない、条件付きストア命令と、
（１）前記オフセットレジスタの値が前記第２のバッファレジスタのビット幅に等しいか、あるいはそれ以下の場合に、前記第２のバッファレジスタの内容を前記第１のバッファレジスタにコピーし、同時に前記オフセットレジスタの値を前記第２のバッファレジスタのビット幅数だけインクリメントし、（２）前記オフセットレジスタの値が前記第２のバッファレジスタのビット幅を越える場合は何もしない、条件付きコピー命令と、を備えるとともに、
前記シフト命令のオペランドとして与えられる符号長と前記第２のレジスタのビット幅との差分をセットする第２のオフセットレジスタと、
前記シフト命令において、前記第２のレジスタのビット幅を越える符号長が指定されたときセットされるフラグレジスタとをさらに備え、
前記シフト命令は、
（１）前記第２のオフセットレジスタの値が前記第２のバッファレジスタのビット幅を越えない場合は、前記第２のバッファレジスタの内容を、（オフセットレジスタの内容−第２のバッファレジスタのビット幅数）のビット数だけ前記第１のバッファレジスタ側へシフトし、前記第１のバッファレジスタの連結端側の（オフセットレジスタの内容−第２のバッファレジスタのビット幅数）のビット分を、前記第２のバッファレジスタ側からシフトアウトされたビットで置き換え、同時に前記オフセットレジスタの値を前記第２のオフセットレジスタの値だけデクリメントし、さらに前記第２のオフセットレジスタおよびフラグレジスタの値を０にし、（２）前記第２のオフセットレジスタの値が前記第２のレジスタのビット幅を越える場合は、前記第２のバッファレジスタの内容を、（オフセットレジスタの内容−第２のバッファレジスタのビット幅数）のビット数だけ前記第１のバッファレジスタ側へシフトし、前記第１のバッファレジスタの連結端側の（オフセットレジスタの内容−第２のバッファレジスタのビット幅数）のビット分を、前記第２のバッファレジスタ側からシフトアウトされたビットで置き換え、同時に前記オフセットレジスタと第２のオフセットレジスタの値をそれぞれ前記第２のバッファレジスタのビット数だけデクリメントする機能をさらに備え、
前記シフト命令により前記第２のバッファレジスタのビット幅を越える符号長が指定されたとき、前記シフト命令、前記条件付きストア命令、および前記条件付きコピー命令の実行後に、前記フラグレジスタの値が１であることにより、前記シフト命令と、前記条件付きストア命令と、前記条件付きコピー命令からなる命令列を、前記フラグレジスタの値が０になるまで、繰り返し実行することを特徴とする可変長符号処理機構を有するデータ処理装置。
【請求項１１】
前記アドレスレジスタとして専用のレジスタを設けず、前記条件付きストア命令のオペランドとして指定可能な汎用レジスタをメモリアクセス用のアドレスレジスタとして使用することを特徴とする請求項９から１０のいずれかに記載の可変長符号処理機構を有するデータ処理装置。
【請求項１２】
前記ライト命令により処理対象データを前記第２のレジスタの非連結端側にセットし、前記シフト命令によるシフト量を（オフセットレジスタの内容−処理対象データ長）とすることを特徴とする請求項９から１１のいずれかに記載の可変長符号処理機構を有するデータ処理装置。
【請求項１３】
前記条件付きストア命令の機能と前記条件付きコピー命令の機能とを合わせて有する命令を備えたことを特徴とする請求項９から１２のいずれかに記載の可変長符号処理機構を有するデータ処理装置。
【請求項１４】
前記第２のバッファレジスタの連結端側の必要な数のビット値を入力してシフト量を計算する手段を備え、前記シフト命令においてシフト量をオペランドとして与えることなく、ハードウェア回路手段によりシフト量を定めることを特徴とする請求項９から１３のいずれかに記載の可変長符号処理機構を有するデータ処理装置。
【請求項１５】
前記条件付きストア命令によって前記アドレスレジスタの値をインクリメントした際に、アドレスレジスタの値が別途定めた範囲を越えたことを検出し、通知する手段を備えたことを特徴とする請求項９から１４のいずれかに記載の可変長符号処理機構を有するデータ処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、可変長符号を処理するデータ処理装置に関し、特に、メモリからの可変長符号のロード処理およびメモリへの可変長符号のストア処理を高速化したデータ処理装置に関する。
【０００２】
【従来の技術】
メディア処理の分野では、画像や音声データのような大量のデータを記憶装置に格納したり、他の装置に転送したりする際には、何らかのデータ圧縮を行い、資源の有効活用を図るのが一般的である。データ圧縮には各種手法が提案され実施されているが、ほとんどの手法において圧縮されたデータは可変長符号（以下、ＶＬＣと略称する）となっている。代表的な手法としては、ハフマン符号がある。
【０００３】
メディアデータをＶＬＣデータへ圧縮したり、ＶＬＣデータからメディアデータへ復元したりする処理は専用ハードで行う場合もあるが、汎用プロセサの性能向上に伴い、ソフトウェアで行うケースも増えている。
【０００４】
【発明が解決しようとする課題】
ここで問題となるのが、汎用プロセサの持っている命令セットが中途半端な長さのデータであるＶＬＣを扱うのに適していないことである。例えば、汎用プロセサのロード／ストア命令は、通常、バイトアラインされたバイト単位のデータを対象としているため、ワード境界にまたがって置かれているＶＬＣを汎用レジスタ上に構成するには、２回のロードと数回のシフト演算や論理演算を要することになる。また、必要なロードの数は、ＶＬＣの先頭のオフセットやＶＬＣ長に依存するので、条件判定も何回か行わねばならない。
【０００５】
このように、ＶＬＣのロード／ストア処理を従来の汎用プロセサが有している命令セットを用いて行うと、多くの命令を要するため、性能上のオーバヘッドとなる可能性が高い。
本発明は、このような状況に鑑み、ＶＬＣを扱うのに適した可変長符号処理機構を提供して課題の解決を図ることを目的としている。
【０００６】
【課題を解決するための手段】
上述した課題を解決するために、本発明によるデータ処理装置は、以下に示す態様を採用する。
本発明の第１の態様によれば、メモリへのアクセスアドレスを格納するアドレスレジスタと、
少なくともメモリからのロードデータ幅と等しいビット幅を有し、メモリからロードしたデータを格納する第１のバッファレジスタと、
第１のバッファレジスタに連結され、第１のバッファレジスタの内容がシフトされて格納される第２のバッファレジスタと、
第１のバッファレジスタと第２のバッファレジスタが連結されて構成される連結領域において、データを第２のバッファレジスタの非連結端側に詰めて格納した際に生じる空き領域の長さを格納するオフセットレジスタと、
連結領域に存在し、第２のバッファレジスタの非連結端側に詰めて格納されたデータを指定されたシフト量だけ、第２のバッファレジスタの非連結端側にシフトし、同時にオフセットレジスタの値をシフト量だけインクリメントする第１の処理手段と、
（１）  オフセットレジスタの値が第１のバッファレジスタのビット幅に等しいか、あるいはそれ以上の値の場合に、アドレスレジスタの値をアドレスとするメモリ上のデータを第１のバッファレジスタにロードし、同時にアドレスレジスタの値を所定値だけインクリメントし、（２）  オフセットレジスタの値が第１のバッファレジスタのビット幅未満の場合は何もしない、第２の処理手段と、
（１）  オフセットレジスタの値が第１のバッファレジスタのビット幅に等しいか、あるいはそれ以上の値の場合に、第２の処理手段によってメモリからロードされた第１のバッファレジスタの内容を、（オフセットレジスタの内容−第１のバッファレジスタのビット幅数）のビット数だけ第２のバッファレジスタ側へシフトし、第２のバッファレジスタの連結端側の（オフセットレジスタの内容−第１のバッファレジスタのビット幅数）のビット部分を、第１のバッファレジスタ側からシフトアウトされたビットで置き換え、同時にオフセットレジスタの値をバッファレジスタのビット数だけデクリメントし、（２）  オフセットレジスタの値が第１のバッファレジスタのビット幅未満の場合は何もしない、第３の処理手段とを備える。
【０００７】
本発明の第２の態様によれば、メモリへのアクセスアドレスを格納するアドレスレジスタと、
少なくともメモリからのロードデータ幅と等しいビット幅を有し、メモリからロードしたデータを格納する第１のバッファレジスタと、
第１のバッファレジスタに連結され、第１のバッファレジスタの内容がシフトされて格納される第２のバッファレジスタと、
第１のバッファレジスタと第２のバッファレジスタが連結されて構成される連結領域において、データを第２のバッファレジスタの非連結端側に詰めて格納した際に生じる空き領域の長さを格納するオフセットレジスタと、
オペランドとしてシフト量を指定し、連結領域に存在するデータを指定されたシフト量だけ、第２のバッファレジスタの非連結端側にシフトし、同時にオフセットレジスタの値をシフト量だけインクリメントする第１のシフト命令と、
（１）  オフセットレジスタの値が第１のバッファレジスタのビット幅に等しいか、あるいはそれ以上の値の場合に、アドレスレジスタの値をアドレスとするメモリ上のデータを第１のバッファレジスタにロードし、同時にアドレスレジスタの値を所定値だけインクリメントし、（２）  オフセットレジスタの値が第１のバッファレジスタのビット幅未満の場合は何もしない、条件付きロード命令と、
（１）  オフセットレジスタの値が第１のバッファレジスタのビット幅に等しいか、あるいはそれ以上の値の場合に、条件付きロード命令によってメモリからロードされた第１のバッファレジスタの内容を、（オフセットレジスタの内容−第１のバッファレジスタのビット幅数）のビット数だけ第２のバッファレジスタ側へシフトし、第２のバッファレジスタの連結端側の（オフセットレジスタの内容−第１のバッファレジスタのビット幅数）のビット部分を、第１のバッファレジスタ側からシフトアウトされたビットで置き換え、同時にオフセットレジスタの値をバッファレジスタのビット数だけデクリメントし、（２）  オフセットレジスタの値が第１のバッファレジスタのビット幅未満の場合は何もしない、第２のシフト命令とを備える。
【０００８】
本発明の第３の態様によれば、第２の態様において、
第１のシフト命令のオペランドとして与えられるシフト量と第１のバッファレジスタのビット幅との差分をセットする第２のオフセットレジスタと、
第１のシフト命令において、第１のバッファレジスタのビット幅を越えるシフト量が指定されたときセットされるフラグレジスタと、
（１）  第２のオフセットレジスタの値が第１のバッファレジスタのビット幅を越えない場合は、第１および第２のバッファレジスタの連結領域を第２のオフセットレジスタの値だけ第２のレジスタの非連結端側にシフトし、同時に、オフセットレジスタの値をシフト量だけインクリメントし、第２のオフセットレジスタとフラグレジスタを０にし、（２）  第２のオフセットレジスタの値が第１のバッファレジスタのビット幅を越える場合は、第１および第２のバッファレジスタの連結領域を第１のバッファレジスタのビット幅分だけ第２のバッファレジスタの非連結端側にシフトし、同時にオフセットレジスタの値を第１のバッファレジスタのビット数だけインクリメントし、第２のオフセットレジスタの値を第１のバッファレジスタのビット数だけデクリメントする第３のシフト命令とをさらに備え、
第１のシフト命令により第１のバッファレジスタのビット幅を越えるシフト量が指定されたとき、第１のシフト命令、条件付きロード命令、および第２のシフト命令の実行後に、フラグレジスタの値が１であることにより、第３のシフト命令と、条件付きロード命令と、第２のシフト命令からなる命令列に分岐し、この命令列を、フラグレジスタの値が０になるまで、繰り返し実行する。
【０００９】
本発明の第４の態様によれば、メモリへのアクセスアドレスを格納するアドレスレジスタと、
少なくともメモリからのロードデータ幅と等しいビット幅を有し、メモリからロードしたデータを格納する第１のバッファレジスタと、
第１のバッファレジスタに連結され、第１のバッファレジスタの内容がシフトされて格納される第２のバッファレジスタと、
第１のバッファレジスタと第２のバッファレジスタが連結されて構成される連結領域において、データを第２のバッファレジスタの非連結端側に詰めて格納した際に生じる空き領域の長さを格納する第１のオフセットレジスタと、
オペランドとしてシフト量を指定し、連結領域に存在するデータを指定されたシフト量だけ、第２のバッファレジスタの非連結端側にシフトし、同時に第１のオフセットレジスタの値をシフト量だけインクリメントする第１のシフト命令と、
（１）  第１のオフセットレジスタの値が第１のバッファレジスタのビット幅に等しいか、あるいはそれ以上の値の場合に、アドレスレジスタの値をアドレスとするメモリ上のデータを第１のバッファレジスタにロードし、同時にアドレスレジスタの値を所定値だけインクリメントし、（２）  第１のオフセットレジスタの値が第１のバッファレジスタのビット幅未満の場合は何もしない、条件付きロード命令と、
（１）  第１のオフセットレジスタの値が第１のバッファレジスタのビット幅に等しいか、あるいはそれ以上の値の場合に、条件付きロード命令によってメモリからロードされた第１のバッファレジスタの内容を、（第１のオフセットレジスタの内容−第１のバッファレジスタのビット幅数）のビット数だけ第２のバッファレジスタ側へシフトし、第２のバッファレジスタの連結端側の（第１のオフセットレジスタの内容−第１のバッファレジスタのビット幅数）のビット部分を、第１のバッファレジスタ側からシフトアウトされたビットで置き換え、同時に第１のオフセットレジスタの値をバッファレジスタのビット数だけデクリメントし、（２）  第１のオフセットレジスタの値が第１のバッファレジスタのビット幅未満の場合は何もしない、第２のシフト命令とを備えるとともに、
第１のシフト命令のオペランドとして与えられるシフト量と第１のバッファレジスタのビット幅との差分をセットする第２のオフセットレジスタと、
第１のシフト命令において、第１のバッファレジスタのビット幅を越えるシフト量が指定されたときセットされるフラグレジスタとをさらに備え、
第１のシフト命令は、
（１）  第２のオフセットレジスタの値が第１のバッファレジスタのビット幅を越えない場合は、第１および第２のバッファレジスタの連結領域を第２のオフセットレジスタの値だけ第２のバッファレジスタの非連結端側にシフトし、同時に、第１のオフセットレジスタの値をシフト量だけインクリメントし、第２のオフセットレジスタとフラグレジスタを０にし、（２）  第２のオフセットレジスタの値が第１のバッファレジスタのビット幅を越える場合は、第１および第２のバッファレジスタの連結領域を第１のバッファレジスタのビット幅分だけ第２のバッファレジスタの非連結端側にシフトし、同時に第１のオフセットレジスタの値を第１のバッファレジスタのビット数だけインクリメントし、第２のオフセットレジスタの値を第１のバッファレジスタのビット数だけデクリメントする機能をさらに備え、
第１のシフト命令により第１のレジスタのビット幅を越えるシフト量が指定されたとき、第１のシフト命令、条件付きロード命令、および第２のシフト命令の実行後に、フラグレジスタの値が１であることにより、第１のシフト命令と、条件付きロード命令と、第２のシフト命令からなる命令列を、フラグレジスタの値が０になるまで、繰り返し実行する。
【００１０】
本発明の第５の態様によれば、第２から第４の態様において、アドレスレジスタとして専用のレジスタを設けず、条件付きロード命令のオペランドとして指定可能な汎用レジスタをメモリアクセス用のアドレスレジスタとして使用する。
本発明の第６の態様によれば、第２から第５の態様において、第１のシフト命令にターゲットオペランド指定機能を付加し、第１のシフト命令実行時に第２のバッファレジスタからシフトアウトされたビット列をターゲットとして指定された汎用レジスタに格納する。
【００１１】
本発明の第７の態様によれば、第２から第６の態様において、第２のバッファレジスタの非連結端側の必要な数のビット値を入力してシフト量を計算する手段を備え、第１のシフト命令においてシフト量をオペランドとして与えることなく、ハードウェア回路手段によりシフト量を定める。
本発明の第８の態様によれば、第２から第７の態様において、条件付きロード命令によってアドレスレジスタの値をインクリメントした際に、アドレスレジスタの値が別途定めた範囲を越えたことを検出し、通知する手段を備える。
【００１２】
本発明の第９の態様によれば、メモリへのアクセスアドレスを格納するアドレスレジスタと、
メモリへのストアデータ幅と等しいビット幅を有し、メモリへストアすべきデータを格納する第１のバッファレジスタと、
第１のバッファレジスタに連結され、第１のバッファレジスタへその内容がシフトされて格納される第２のバッファレジスタと、
第１のバッファレジスタと第２のバッファレジスタが連結されて構成される連結領域において、データを第１のバッファレジスタの非連結端側に詰めて格納した際に生じる空き領域の長さを格納するオフセットレジスタと、
与えられた可変長データを第２のバッファレジスタにセットする第１の処理手段と、
第２のバッフアレジスタの内容を（オフセットレジスタの内容−第２のバッファレジスタのビット幅数）だけ第１のバッファレジスタの非連結端側にシフトし、第１のバッファレジスタの連結端側の（オフセットレジスタの内容−第２のバッファレジスタのビット幅数）のビット部分を、第２のバッファレジスタ側からシフトアウトされたビットで置き換え、同時にオフセットレジスタの値を可変長データの符号長だけデクリメントする第２の処理手段と、
（１）  オフセットレジスタの値が第２のバッファレジスタのビット幅に等しいか、あるいはそれ以下の場合に、第１のバッファレジスタのデータを、アドレスレジスタの値をアドレスとするメモリ上にストアし、同時にアドレスレジスタの値を所定値だけインクリメントし、（２）  オフセットレジスタの値が第２のバッファレジスタのビット幅を越える場合は何もしない、第３の処理手段と、
（１）  オフセットレジスタの値が第２のバッファレジスタのビット幅に等しいか、あるいはそれ以下の場合に、第２のバッファレジスタの内容を第１のバッファレジスタにコピーし、同時にオフセットレジスタの値を第２のバッファレジスタのビット幅数だけインクリメントし、（２）  オフセットレジスタの値が第２のバッファレジスタのビット幅を越える場合は何もしない、第４の処理手段とを備える。
【００１３】
本発明の第１０の態様によれば、メモリへのアクセスアドレスを格納するアドレスレジスタと、
メモリへのストアデータ幅と等しいビット幅を有し、メモリへストアすべきデータを格納する第１のバッファレジスタと、
第１のバッファレジスタに連結され、第１のバッファレジスタへその内容がシフトされて格納される第２のバッファレジスタと、
第１のバッファレジスタと第２のバッファレジスタが連結されて構成される連結領域において、データを第１のバッファレジスタの非連結端側に詰めて格納した際に生じる空き領域の長さを格納するオフセットレジスタと、
オペランドとして与えられたデータを第２のバッファレジスタにセットするライト命令と、
オペランドとして符号長を指定し、第２のバッフアレジスタの内容を（オフセットレジスタの内容−第２のバッファレジスタのビット幅数）だけ第１のバッファレジスタの非連結端側にシフトし、第１のバッファレジスタの連結端側の（オフセットレジスタの内容−第２のバッファレジスタのビット幅数）のビット部分を、第２のバッファレジスタ側からシフトアウトされたビットで置き換え、同時にオフセットレジスタの値をオペランドの符号長だけデクリメントするシフト命令と、
（１）  オフセットレジスタの値が第２のバッファレジスタのビット幅に等しいか、あるいはそれ以下の場合に、第１のバッファレジスタのデータを、アドレスレジスタの値をアドレスとするメモリ上にストアし、同時にアドレスレジスタの値を所定値だけインクリメントし、（２）  オフセットレジスタの値が第２のバッファレジスタのビット幅を越える場合は何もしない、条件付きストア命令と、
（１）  オフセットレジスタの値が第２のバッファレジスタのビット幅に等しいか、あるいはそれ以下の場合に、第２のバッファレジスタの内容を第１のバッファレジスタにコピーし、同時にオフセットレジスタの値を第２のバッファレジスタのビット幅数だけインクリメントし、（２）  オフセットレジスタの値が第２のバッファレジスタのビット幅を越える場合は何もしない、条件付きコピー命令とを備える。
【００１４】
本発明の第１１の態様によれば、第１０の態様において、シフト命令のオペランドとして与えられる符号長と第２のバッファレジスタのビット幅との差分をセットする第２のオフセットレジスタと、
シフト命令において、第２のバッファレジスタのビット幅を越える符号長が指定されたときセットされるフラグレジスタと、
（１）  第２のオフセットレジスタの値が第２のバッファレジスタのビット幅を越えない場合は、第２のバッファレジスタの内容を、（オフセットレジスタの内容−第２のバッファレジスタのビット幅数）のビット数だけ第１のバッファレジスタ側へシフトし、第１のバッファレジスタの連結端側の（オフセットレジスタの内容−第２のバッファレジスタのビット幅数）のビット分を、第２のバッファレジスタ側からシフトアウトされたビットで置き換え、同時にオフセットレジスタの値を第２のオフセットレジスタの値だけデクリメントし、さらに第２のオフセットレジスタおよびフラグレジスタの値を０にし、（２）  第２のオフセットレジスタの値が第２のバッファレジスタのビット幅を越える場合は、第２のバッファレジスタの内容を、（オフセットレジスタの内容−第２のバッファレジスタのビット幅数）のビット数だけ第１のバッファレジスタ側へシフトし、第１のバッファレジスタの連結端側の（オフセットレジスタの内容−第２のバッファレジスタのビット幅数）のビット分を、第２のバッファレジスタ側からシフトアウトされたビットで置き換え、同時にオフセットレジスタと第２のオフセットレジスタの値をそれぞれ第２のバッファレジスタのビット数だけデクリメントする第２のシフト命令とをさらに備え、
シフト命令により第２のバッファレジスタのビット幅を越える符号長が指定されたとき、シフト命令、条件付きストア命令、および条件付きコピー命令の実行後に、フラグレジスタの値が１であることにより、第２のシフト命令と、条件付きストア命令と、条件付きコピー命令からなる命令列に分岐し、この命令列を、フラグレジスタの値が０になるまで、繰り返し実行する。
【００１５】
本発明の第１２の態様によれば、メモリへのアクセスアドレスを格納するアドレスレジスタと、
メモリへのストアデータ幅と等しいビット幅を有し、メモリへストアすべきデータを格納する第１のバッファレジスタと、
第１のバッファレジスタに連結され、第１のバッファレジスタへその内容がシフトされて格納される第２のバッファレジスタと、
第１のバッファレジスタと第２のバッファレジスタが連結されて構成される連結領域において、データを第１のバッファレジスタの非連結端側に詰めて格納した際に生じる空き領域の長さを格納するオフセットレジスタと、
オペランドとして与えられたデータを第２のバッファレジスタにセットするライト命令と、
オペランドとして符号長を指定し、第２のバッフアレジスタの内容を（オフセットレジスタの内容−第２のバッファレジスタのビット幅数）だけ第１のバッファレジスタの非連結端側にシフトし、第１のバッファレジスタの連結端側の（オフセットレジスタの内容−第２のバッファレジスタのビット幅数）のビット部分を、第２のバッファレジスタ側からシフトアウトされたビットで置き換え、同時にオフセットレジスタの値をオペランドの符号長だけデクリメントするシフト命令と、
（１）  オフセットレジスタの値が第２のバッファレジスタのビット幅に等しいか、あるいはそれ以下の場合に、第１のバッファレジスタのデータを、アドレスレジスタの値をアドレスとするメモリ上にストアし、同時にアドレスレジスタの値を所定値だけインクリメントし、（２）  オフセットレジスタの値が第２のバッファレジスタのビット幅を越える場合は何もしない、条件付きストア命令と、
（１）  オフセットレジスタの値が第２のバッファレジスタのビット幅に等しいか、あるいはそれ以下の場合に、第２のバッファレジスタの内容を第１のバッファレジスタにコピーし、同時にオフセットレジスタの値を第２のバッファレジスタのビット幅数だけインクリメントし、（２）  オフセットレジスタの値が第２のバッファレジスタのビット幅を越える場合は何もしない、条件付きコピー命令と、
を備えるとともに、
シフト命令のオペランドとして与えられる符号長と第２のレジスタのビット幅との差分をセットする第２のオフセットレジスタと、
シフト命令において、第２のバッファレジスタのビット幅を越える符号長が指定されたときセットされるフラグレジスタとをさらに備え、
シフト命令は、
（１）  第２のオフセットレジスタの値が第２のバッファレジスタのビット幅を越えない場合は、第２のバッファレジスタの内容を、（オフセットレジスタの内容−第２のバッファレジスタのビット幅数）のビット数だけ第１のバッファレジスタ側へシフトし、第１のバッファレジスタの連結端側の（オフセットレジスタの内容−第２のバッファレジスタのビット幅数）のビット分を、第２のバッファレジスタ側からシフトアウトされたビットで置き換え、同時にオフセットレジスタの値を第２のオフセットレジスタの値だけデクリメントし、さらに第２のオフセットレジスタおよびフラグレジスタの値を０にし、（２）  第２のオフセットレジスタの値が第２のバッファレジスタのビット幅を越える場合は、第２のバッファレジスタの内容を、（オフセットレジスタの内容−第２のバッファレジスタのビット幅数）のビット数だけ第１のバッファレジスタ側へシフトし、第１のバッファレジスタの連結端側の（オフセットレジスタの内容−第２のバッファレジスタのビット幅数）のビット分を、第２のバッファレジスタ側からシフトアウトされたビットで置き換え、同時にオフセットレジスタと第２のオフセットレジスタの値をそれぞれ第２のバッファレジスタのビット数だけデクリメントする機能をさらに備え、
シフト命令により第２のバッファレジスタのビット幅を越える符号長が指定されたとき、シフト命令、前記条件付きストア命令、および条件付きコピー命令の実行後に、フラグレジスタの値が１であることにより、シフト命令と、条件付きストア命令と、条件付きコピー命令からなる命令列を、フラグレジスタの値が０になるまで、繰り返し実行する。
【００１６】
本発明の第１３の態様によれば、第１０から第１２の態様において、アドレスレジスタとして専用のレジスタを設けず、条件付きストア命令のオペランドとして指定可能な汎用レジスタをメモリアクセス用のアドレスレジスタとして使用する。
本発明の第１４の態様によれば、第１０から第１３の態様において、ライト命令により処理対象データを第２のバッファレジスタの非連結端側にセットし、シフト命令によるシフト量を（オフセットレジスタの内容−処理対象データ長）とする。
【００１７】
本発明の第１５の態様によれば、第１０から第１４の態様において、条件付きストア命令の機能と条件付きコピー命令の機能とを合わせて有する命令を備える。
本発明の第１６の態様によれば、第１０から第１５の態様において、第２のバッファレジスタの連結端側の必要な数のビット値を入力してシフト量を計算する手段を備え、シフト命令においてシフト量をオペランドとして与えることなく、ハードウェア回路手段によりシフト量を定める。
【００１８】
本発明の第１７の態様によれば、第１０から第１６の態様において、条件付きストア命令によってアドレスレジスタの値をインクリメントした際に、アドレスレジスタの値が別途定めた範囲を越えたことを検出し、通知する手段を備える。
【００１９】
【発明の実施の形態】
以下、本発明の一実施例に係わるデータ処理装置について、図面を参照しながら説明する。
ＶＬＣ処理は、大きくデコード処理とエンコード処理とに分かれる。図１に本発明に従ってＶＬＣデコード処理を行っている最中の状態を示す。図１において、ＢＲ０、ＢＲ１はバッファレジスタ、ＯＦＦＲはオフセットレジスタ、ＡＲはアドレスレジスタである。ＶＬＣデコード処理では、メモリに格納されているＶＬＣを、順次、バッファレジスタにロードして処理を行うが、ロードはワード境界にアラインされたデータ単位に行ない、処理済のＶＬＣはバッファレジスタからｍｓｂ側にシフトアウトされていく。ＢＲ０，ＢＲ１はロードデータと等しい幅を有している。
【００２０】
以下では簡単のために、ＢＲ０，ＢＲ１，ロード／ストア幅をすべて３２ビットと仮定して説明するが、本発明はそれに限定されるものではない。
図１では、ロード済のＶＬＣはＢＲ０，ＢＲ１の斜線の部分に存在し、ＢＲ１内でＶＬＣが存在しない空白の部分のビット長（ｎ）がＯＦＦＲに格納されている。また、ＢＲ０，ＢＲ１にあるＶＬＣが置かれていたメモリ上の位置が点線で示され、引き続きロードすべきアドレスがＡＲによってポイントされている。
【００２１】
本発明の一実施例では、デコード処理のために、命令セット中に以下の命令を備えている。
（１）  左シフト命令（ｓｆｔ０１）：
オペランドとしてシフト量を指定し、ＢＲ０とＢＲ１を連続した６４ビットデータとして、指定された量だけ左にシフトする。同時にＯＦＦＲの値をシフト量だけインクリメントする。
【００２２】
（２）  条件付きロード命令（ｌｄｃ）：
ＯＦＦＲの値が３２以上の場合に、ＡＲの値をアドレスとするメモリ上の３２ビットデータをＢＲ１にロードし、ＡＲの値を４だけインクリメントする。ＯＦＦＲの値が３２未満の場合は何もしない。（１回のメモリアクセス単位が３２ビット＝４バイトであるため、ＡＲの値は４バイト先のアドレスに設定されるものである。）
（３）  条件付き左シフト命令（ｓｆｔ１ｃ）：
ＯＦＦＲの値が３２以上の場合に、ＢＲ１を（ＯＦＦＲ−３２）ビットだけ左シフトし、ＢＲ０のｌｓｂ側の（ＯＦＦＲ−３２）ビットの部分をシフトアウトされたビットで置き換える。同時にＯＦＦＲを３２だけデクリメントする。ＯＦＦＲが３２未満の場合は何もしない。
【００２３】
これらの命令を用いれば、１個のＶＬＣを処理する度に、ｓｆｔ０１、ｌｄｃ、ｓｆｔ１ｃの命令を順に発行することで、次のＶＬＣ処理のためのセットアップが完了し、上述した条件判定などの煩雑な処理が不要になる。ｓｆｔ０１のオペランドは、処理するＶＬＣのビット長を与えればよい。
図２は、ｓｆｔ０１命令を実行した結果、ＯＦＦＲの値が３２以上になった場合の動作を示す。図３は、ｓｆｔ０１命令を実行した結果、ＯＦＦＲの値が３２未満だった場合の動作を示す。
【００２４】
図２の（１）  は初期状態を示す図であり、ｎはＢＲ１中の空白領域の長さを示し、ａｄｄｒは次にロードすべきアドレスを示している。なお、▲１▼に示す境界はワード境界を示すものであり、必ずしもＶＬＣの境界を示すものではないこと、および▲２▼に示す境界はＶＬＣの境界を示すものであり、必ずしもワード境界を示すものではないことに注意すべきである。
【００２５】
図２の（２）  は、オペランドとしてシフト量ａを与えられたｓｆｔ０１命令が実行され、その結果、ｎ＋ａ≧３２になった状態を示している。
図２の（３）  は、ｌｄｃ命令が実行され、ＢＲ１に新たにデータがロードされた状態を示している。
図２の（４）  は、ｓｆｔ１ｃ命令が実行され、ＯＦＦＲの新たな値ａ’として、ａ’＝（ｎ＋ａ）−３２がセットされた状態を示している。
【００２６】
図３の（１）  は、図２の（１）  と同様に初期状態を示す図であり、ｎはＢＲ１中の空白領域の長さを示し、ａｄｄｒは次にロードすべきアドレスを示している。なお、▲１▼に示す境界はワード境界を示すものであり、必ずしもＶＬＣの境界を示すものではないこと、および▲２▼に示す境界はＶＬＣの境界を示すものであり、必ずしもワード境界を示すものではないことに注意すべきである。
【００２７】
図３の（２）  は、オペランドとしてシフト量ａを与えられたｓｆｔ０１命令が実行され、その結果、ｎ＋ａ＜３２になった状態を示している。
図３の（３）  は、ｌｄｃ命令が見かけ上実行されるが、ＯＦＦＲ＜３２であるため、実際には何もしない状態を示している。このとき、ｌｄｃ命令はＮＯＰ命令と同等なものとなる。
【００２８】
図３の（４）  は、ｓｆｔ１ｃ命令が見かけ上実行されるが、ＯＦＦＲ＜３２であるため、実際には何もしない状態を示している。このとき、ｓｆｔ１ｃ命令はＮＯＰ命令と同等なものとなる。
上述したように、図２ではｌｄｃ命令とｓｆｔ１ｃ命令が動作するが、図３では動作しない。これらの双方を同じプログラムで処理できることが本発明の効果としてあげられる。すなわち状態を判定して異なる処理ステップに分岐する命令を設ける必要がなく、プログラム作成が簡単化されるからである。
【００２９】
次に、図４に本発明に従ってＶＬＣエンコード処理を行っている最中の状態を示す。図４に示す各レジスタは、図１に示すものと同様なものである。ＶＬＣエンコード処理では、コード化したＶＬＣを順次、メモリにストアしていく。ストアすべきデータはＢＲ０のｍｓｂ側を先頭に、ＢＲ０，ＢＲ１の６４ビットの領域中に存在する。図４では、ＢＲ０の斜線の部分が該当部分である。また、ＢＲ０とＢＲ１の空白域の長さ（図４に示すｎ）がＯＦＦＲに格納されている。ＡＲはストアすべきメモリアドレスを保持している。
【００３０】
本発明の一実施例では、エンコード処理のため、命令セット中に以下の命令を備えている。
（４）  ＢＲ１ライト命令（ｗｔｂｒ１）：
オペランドとして与えられた３２ビットデータをＢＲ１にセットする。
【００３１】
（５）  左シフト命令（ｓｆｔ１）：
オペランドとして符号長を指定する。ＢＲ１を（ＯＦＦＲ−３２）ビット左にシフトし、ＢＲ０のｌｓｂ側の（ＯＦＦＲ−３２）ビットの部分をシフトアウトされたビットで置き換える。同時に、ＯＦＦＲの値をオペランドの符号長だけデクリメントする。
【００３２】
（６）  条件付きストア命令（ｓｔｃ）：
ＯＦＦＲの値が３２以下の場合に、ＢＲ０の３２ビットデータをＡＲの値をアドレスとするメモリ上の位置にストアし、ＡＲの値を４だけインクリメントする。ＯＦＦＲの値が３２より大きい場合は何もしない。
（７）  条件付きコピー命令（ｃｐｃ命令）：
ＯＦＦＲの値が３２以下の場合に、ＢＲ１をＢＲ０にコピーし、同時にＯＦＦＲの値を３２だけインクリメントする。ＯＦＦＲの値が３２より大きい場合は何もしない。
【００３３】
これらの命令を用いれば、ｗｔｂｒ１命令でＢＲ１にＶＬＣをセットし、ｓｆｔ１命令でＢＲ０にある未ストアデータと連結し、ｓｔｃ命令でストアして、ｃｐｃ命令でストアされずにＢＲ１に残ったデータを次のストアのためにＢＲ０へ移すという手順で、１個のＶＬＣを処理することができる。ｓｆｔ１命令のオペランドは、処理すべきＶＬＣのビット長を与えればよい。
【００３４】
図５にｓｆｔ１命令を実行した結果、ＯＦＦＲの値が３２を越えない値になった場合の動作を示し、図６にｓｆｔ１命令を実行した結果、ＯＦＦＲの値が３２を越えた値になった場合の動作を示す。
図５の（１）  は初期状態を示す図であり、ｎはＢＲ０，ＢＲ１中の空白領域の長さを示し、ａｄｄｒは次にストアすべきアドレスを示している。
【００３５】
図５の（２）  は、ｗｔｂｒ１命令を実行し、長さａのＶＬＣをＢＲ１にセットした状態を示す。
図５の（３）  は、オペランドとしてＶＬＣの長さａを与えられたｓｆｔ１命令が実行され、その結果、ＢＲ１内のＶＬＣがＢＲ０内の未ストアデータと連結され、ＯＦＦＲの値がｎ−ａになった状態を示している。
【００３６】
図５の（４）  は、ｓｔｃ命令を実行することにより、ＢＲ０の内容をメモリにストアし、ＡＲの内容を４だけインクリメントした状態を示している。
図５の（５）  は、ｃｐｃ命令を実行することにより、ＢＲ１の内容をＢＲ０にコピーし、ＯＦＦＲの値をｎ−ａ＋３２にセットした状態を示している。
図６の（１）  は、図５の（１）  と同様に初期状態を示す図であり、ｎはＢＲ０，ＢＲ１中の空白領域の長さを示し、ａｄｄｒは次にストアすべきアドレスを示している。
【００３７】
図６の（２）  は、図５の（２）  と同様にｗｔｂｒ１命令を実行し、長さａのＶＬＣをＢＲ１にセットした状態を示す。
図６の（３）  は、図５の（３）  と同様にオペランドとしてＶＬＣの長さａを与えられたｓｆｔ１命令が実行され、その結果、ＢＲ１内のＶＬＣがＢＲ０内の未ストアデータと連結され、ＯＦＦＲの値がｎ−ａになった状態を示している。
【００３８】
図６の（４）  は、ｓｔｃ命令が見かけ上実行されるが、ＯＦＦＲ＞３２であるため、実際には何もしない状態を示している。このとき、ｓｔｃ命令はＮＯＰ命令と同等なものとなる。
図６の（５）  は、ｃｐｃ命令が見かけ上実行されるが、ＯＦＦＲ＞３２であるため、実際には何もしない状態を示している。このとき、ｃｐｃ命令はＮＯＰ命令と同等なものとなる。
【００３９】
図５ではｓｔｃ命令とｃｐｃ命令が動作するが、図６では動作しない。これらの双方を同じプログラムで処理できることが本発明の効果としてあげられる。すなわち状態を判定して異なる処理ステップに分岐する命令を設ける必要がなく、プログラム作成が簡単化されるからである。
上述した本発明の一実施例の説明では、本発明の基本的構成部分を述べたが、実施にあたってはさらに以下に示すような変形が可能である。
【００４０】
イ）上述した説明では、ＶＬＣの格納場所をメモリとして、ＢＲ０，ＢＲ１との間でロード／ストアを行うものとしたが、専用システム上で本発明を実施した場合などは、通常のメモリとは別にＶＬＣ専用のバッファメモリ等を設けて、そことＢＲ０，ＢＲ１の間で転送を行なうことが考えられる。その際には、ＡＲはバッファメモリ等を指すことになる。
【００４１】
ロ）ｓｔｃ命令とｃｐｃ命令は動作条件が同じであり、使用する演算器に重複がなく、また依存関係もないため、１個の命令としてまとめることが可能である。
ハ）ＡＲを特別なレジスタでなく、汎用レジスタに割り当て、一般のロード／ストア命令のベースレジスタ的な使い方をすることができる。
【００４２】
ニ）ｓｆｔ０１命令のオペランドにターゲットレジスタを与え、シフトアウトされた部分をターゲットレジスタに格納するようにできる。
ホ）ｗｔｂｒ１命令を実行した結果、ＢＲ１に置かれるＶＬＣをＢＲ１のｌｓｂ側にあるとしてもよい。その場合は、ｓｆｔ１命令のシフト量は（ＯＦＦＲ−符号長）になる。
【００４３】
ヘ）ｓｆｔ０１命令およびｓｆｔ１命令のシフト量は符号長であるが、ＶＬＣの先頭の数ビットによって符号長が定まるような符号体系の場合は、オペランドとして符号長を与えなくても、ハードウェアがＢＲ０，ＢＲ１の内容によってシフト量を決定できるので、オペランドが不要になる。
【００４４】
ト）ＡＲの指す先がＶＬＣ領域の末尾に到達したことを示すフラグもしくは割り込み信号を設けることができる。
また、ＶＬＣ処理においては、スキップ処理（メモリ上の何ビットかの領域を読み飛ばしたり、間を空けて書き込んだりする処理）が必要な場合がある。スキップする長さがＢＲ０，ＢＲ１の幅以内であれば上述の枠組みで対応可能であるが、それ以上になると、ＢＲ０，ＢＲ１の幅以内に分割する処理が必要となる。以下ではその処理を軽減するための機能について説明する。
【００４５】
デコードの場合は、ｓｆｔ０１命令のオペランドにスキップする長さを与えることになるが、それが３２ビットより長い場合にも矛盾なく動作するように、以下のような構成を採用する。
新たなレジスタとしてオセットレジスタＯＦＦＲ２とフラグレジスタＦＧＲを導入し、ｓｆｔ０１命令に３２を越えるシフト量が指定されたときは、３２が指定されたのと同じ動作をするとともに、ＯＦＦＲ２にシフト量と３２の差分をセットする。また、ＦＧＲを「１」にする。さらに、以下の動作を実行するｓｆｔｏｆ２命令を導入し、ＦＧＲが１の場合は、ｓｆｔｏｆ２命令、ｌｄｃ命令、ｓｆｔ１ｃ命令からなる命令列に分岐し、ＦＧＲが０になるまで、この命令列を繰り返し実行する。
【００４６】
（８）  ｓｆｔｏｆ２命令：
ＯＦＦＲ２が３２以下の場合は、ＢＲ０とＢＲ１を連続した６４ビットデータとして、ＯＦＦＲ２の値だけ左にシフトする。同時に、ＯＦＦＲの値をシフト量だけインクリメントし、ＯＦＦＲ２とＦＧＲを０にする。
【００４７】
ＯＦＦＲ２が３２より大きい場合は、ＢＲ０とＢＲ１を連続した６４ビットデータとして、３２ビット左にシフトする。同時に、ＯＦＦＲの値を３２だけインクリメントし、ＯＦＦＲ２を３２だけデクリメントする。
この方法では、ＦＧＲの値による条件分岐命令が必要になる。図７にこの方法による動作例を示す。図７は、ＢＲ０，ＢＲ１内にＶＬＣが４０ビット残っていて、５０ビットだけスキップする例を示している。
【００４８】
図７の（１）  はプログラム例を示している。
図７の（２）  は初期状態における各レジスタの内容を示している。
図７の（３）  は、オペランドとして５０を与えられたｓｆｔ０１命令を実行した後の各レジスタの内容を示している。
図７の（４）  は、ｌｄｃ命令とｓｆｔ１ｃ命令を実行した後の各レジスタの内容を示している。
【００４９】
図７の（５）  は、ｓｆｔｏｆ２命令を実行した後の各レジスタの内容を示している。この例ではＯＦＦＲ２の内容が３２以下であるため、１回のｓｆｔｏｆ２命令の実行でＦＧＲは０にされ、ｓｆｔｏｆ２命令の繰り返し動作は行なわれていない。
図７の（６）  は最終状態における各レジスタの内容を示している。
【００５０】
また、ｓｆｔｏｆ２命令を導入せずに、ｓｆｔ０１命令の動作を、以下のｓｆｔ０１’命令のように変更することでも対処可能である。
（９）  ｓｆｔ０１’命令：
ＦＧＲが０ならばもとのｓｆｔ０１命令と同様に動作し、ＦＧＲが１ならば上記のｓｆｔｏｆ２命令と同様に動作する。
【００５１】
このようにすれば、処理の終わりにＦＧＲが１のときにｓｆｔ０１’命令に戻るような条件分岐命令を置くだけで対処可能となり、プログラムは図８に示すようになる。
エンコードの場合は、ｓｆｔ１命令のオペランドにスキップする長さを与えるものとし、それが３２ビットより大きいときはデコードの場合と同様にＯＦＦＲ２とＦＧＲを使って対処する。ｓｆｔ１命令に３２を越えるシフト量が指定された場合には、３２が指定されたのと同じ動作をするとともに、ＯＦＦＲ２にシフト量と３２の差分をセットし、ＦＧＲを「１」にする。さらに、以下の動作を実行するｓｆｔ１ｏｆ２命令を導入し、ＦＧＲが１の場合は、ｓｆｔ１ｏｆ２命令、ｓｔｃ命令、ｃｐｃ命令からなる命令列に分岐し、ＦＧＲが０になるまで、この命令列を繰り返し実行する。
【００５２】
（１０）ｓｆｔ１ｏｆ２命令：
ＯＦＦＲ２が３２以下の場合は、ＢＲ１を（ＯＦＦＲ−３２）ビットだけ左にシフトし、ＢＲ０のｌｓｂ側の（ＯＦＦＲ−３２）ビットの部分をシフトアウトされたビットで置き換える。同時に、ＯＦＦＲの値をＯＦＦＲ２の値だけデクリメントし、ＯＦＦＲ２とＦＧＲを０にする。
【００５３】
ＯＦＦＲ２が３２より大きい場合は、ＢＲ１を（ＯＦＦＲ−３２）ビットだけ左にシフトし、ＢＲ０のｌｓｂ側の（ＯＦＦＲ−３２）ビットの部分をシフトアウトされたビットで置き換える。同時に、ＯＦＦＲとＯＦＦＲ２の値をそれぞれ３２だけデクリメントする。
この方法では、ＦＧＲの値による条件分岐命令が必要になる。図９にこの方法による動作例を示す。図９は、ＢＲ０，ＢＲ１内にＶＬＣが１０ビット残っていて、４５ビットだけスキップする例を示している。
【００５４】
図９の（１）  はプログラム例を示している。
図９の（２）  は初期状態における各レジスタの内容を示している。
図９の（３）  は、オペランドとして４５を与えられたｓｆｔ１命令を実行した後の各レジスタの内容を示している。
図９の（４）  は、ｓｔｃ命令とｃｐｃ命令を実行した後の各レジスタの内容を示している。
【００５５】
図９の（５）  は、ｓｆｔ１ｏｆ２命令を実行した後の各レジスタの内容を示している。この例ではＯＦＦＲ２の内容が３２以下であるため、１回のｓｆｔ１ｏｆ２命令の実行でＦＧＲは０にされ、ｓｆｔ１ｏｆ２命令の繰り返し動作は行なわれていない。
図９の（６）  は最終状態における各レジスタの内容を示している。
【００５６】
図９における動作について、若干の説明を補足する。図９において実行したいことは、初期状態でＢＲ０に１０ビットのＶＬＣが存在するとき、そのＶＬＣの後ろに４５ビットの空白を入れること、言い換えれば、次のＶＬＣは４５ビットの距離を空けてストアされるようにすることである。
まず、最初のストアで、ＢＲ０にある１０ビットのＶＬＣと２２ビットの空白部がストアされる。その後に、４５−２２＝２３ビットの空白を入れればよく、そのためにはあたかも２３ビットのＶＬＣがＢＲ０にあるようにＯＦＦＲ値を設定すればよいのであるが、ｓｆｔ１ｏｆ２命令によってＯＦＦＲが４１になり、そのような状態になるわけである。最終状態以降にエンコードが継続すれば、ＢＲ０の左側２３ビットの後に後続のＶＬＣが続くので、期待通りの結果が得られるわけである。
【００５７】
また、ｓｆｔ１ｏｆ２命令を導入せずに、ｓｆｔ１命令の動作を以下のｓｆｔ１’命令のように変更することでも対処可能である。
（１１）ｓｆｔ１’命令：
ＦＧＲが０ならばもとのｓｆｔ１命令と同様に動作し、ＦＧＲが１ならば上記のｓｆｔ１ｏｆ２命令と同様に動作する。
【００５８】
このようにすれば、処理の終わりにＦＧＲが１のときにｓｆｔ１’命令に戻るような条件分岐命令を置くだけで対処可能となり、プログラムは図１０に示すようになる。
次に、本発明の一実施例の回路構成例を図１１に示す。図１１において、１はシフタ、２〜４は論理回路、５はメモリインタフェース部、６はインクリメンタ、７、８はセレクタ、ｄ１〜ｄ４は図示しない命令デコーダからの入力信号（線）、ｃ０〜ｃ４は動作を抑制する各種の信号（線）である。
【００５９】
シフタ１には、ＢＲ０，ＢＲ１の各３２ビットデータが入力され、連続した６４ビットデータ（ＢＲ０がｍｓｂ側）として左シフトされる。シフト量はｓ４で与えられる。実施例では、シフト量は０〜３２ビットの範囲なので、出力は９６ビットになる。出力データのｍｓｂ側から３２ビットずつｓ１，ｓ２，ｓ３で示している。
【００６０】
論理回路２はシフト量を決定する回路、論理回路３はＯＦＦＲの更新値を決定する回路、論理回路４は条件付き命令の条件を判断する回路である。
以下では、上述した各命令実行時における図１１の動作を順次説明する。
［ｓｆｔ０１命令］
オペランドとして与えられたシフト量は、ｄ１から論理回路２に入力され、そのままｓ４としてシフタ１に与えられる。シフト結果であるｓ２とｓ３がそれぞれＢＲ０，ＢＲ１の新しい値となる。セレクト信号ｄ２，ｄ４はｓ３，ｓ２を選択する値になる。また、ｄ１は論理回路３にも入力され、論理回路３においてＯＦＦＲの値と加算されて、ＯＦＦＲの新しい値になる。
［ｌｄｃ命令］
ＡＲの値をアドレスとするメモリの値がメモリインタフェース部５を介して読み出され、ＢＲ１に書き込まれる。同時に、インクリメンタ６においてＡＲの値が＋４される。セレクト信号ｄ２はロード値を選択する値になる。
【００６１】
但し、ＯＦＦＲが３２未満の場合はこれらの動作はすべて抑制される。条件判断は論理回路４で行なわれ、抑制の場合はｃ１，ｃ２，ｃ４がアサートされることで各部に通知される。
［ｓｆｔ１ｃ命令］
論理回路２によって（ＯＦＦＲ−３２）が計算され、シフト量としてシフタ１に通知される。シフト結果のｓ２のうちのｌｓｂ側の（ＯＦＦＲ−３２）ビットの部分だけがＢＲ０の以前の値と置き換わる。ＢＲ０の一部のみが置き換わる制御は論理回路２が出力する信号ｓ５によって実現される。また、論理回路３によって（ＯＦＦＲ−３２）が計算され、ＯＦＦＲの新しい値になる。
【００６２】
但し、ＯＦＦＲが３２未満の場合はこれらの動作はすべて抑制される。条件判断は論理回路４で行なわれ、抑制の場合はｃ０，ｃ２がアサートされることで各部に通知される。
［ｗｔｂｒ１命令］
オペランドとして与えられたデータがｄ３から入力され、ＢＲ１に書き込まれる。
［ｓｆｔ１命令］
論理回路２によって（ＯＦＦＲ−３２）が計算され、シフト量としてシフタ１に通知される。シフト結果のｓ２のうちｌｓｂ側の（ＯＦＦＲ−３２）ビットの部分だけがＢＲ０の以前の値と置き換わる。ＢＲ０の一部のみが置き換わる制御は論理回路２が出力する信号ｓ５によって実現される。また、オペランドで与えられた符号長がｄ１から入力され、論理回路３によって（ＯＦＦＲ−符号長）が計算され、ＯＦＦＲの新しい値になる。
［ｓｔｃ命令］
ＡＲの値をアドレスとするメモリにＢＲ０の値をメモリインタフェース部５を介してストアする。同時にインクリメンタ６においてＡＲの値が＋４される。
【００６３】
但し、ＯＦＦＲが３２より大きい場合は、これらの動作はすべて抑制される。条件判断は論理回路４で行なわれ、抑制の場合はｃ３，ｃ４がアサートされることで各部に通知される。
［ｃｐｃ命令］
ＢＲ１の値がＢＲ０に信号ｓ６を通じてコピーされ、同時に（ＯＦＦＲ＋３２）が論理回路３によって計算され、ＯＦＦＲの新しい値になる。
【００６４】
但し、ＯＦＦＲが３２より大きい場合はこれらの動作はすべて抑制される。条件判断は論理回路４で行なわれ、抑制の場合はｃ０，ｃ２がアサートされることで各部に通知される。
上記実施例の変形例として以下の動作態様を採用することができる。
【００６５】
（ａ）  メモリインタフェース部５がインタフェースしている対象を通常のメモリではなく、ＶＬＣ用バッファメモリとする。
（ｂ）  ＡＲを特別なレジスタではなく図示しない汎用レジスタ（番号はｌｄｃ命令またはｓｔｃ命令のオペランドとして指定）とする。
（ｃ）  ｓｆｔ０１命令にターゲットオペランドを指定可能にし、図中のｓ１をターゲット（汎用レジスタ）に格納する。
【００６６】
（ｄ）  ｓｆｔ１命令のシフト量（論理回路２で計算）を（３２−オペランド値）とする。オペランド値はｄ１で与えられる。
（ｅ）  ｓｔｃ命令とｃｐｃ命令の機能を１命令で行なう。
次に、ｓｆｔ０１命令およびｓｆｔ１命令において、シフト量をオペランドとして与えるのではなく、ＢＲ０またはＢＲ１のｍｓｂ側の必要なビット値を入力して計算して求める構成の一例を図１２に示す。図１２において、ＢＲ０，ＢＲ１、論理回路２、論理回路３は図１１と同じである。図１１において信号ｄ１が論理回路２、論理回路３に入力されていた代わりに、図１２においては、論理回路２１の出力が論理回路２、論理回路３に与えられている。論理回路２１は符号のｍｓｂ側のパターンから符号長を計算する回路であり、ＢＲ０，ＢＲ１の先頭から符号長の計算に必要なだけのビット数を入力して、符号長を出力するものである。
【００６７】
次に、ｌｄｃ命令およびｓｔｃ命令において、ＡＲ値をインクリメントした際に別途定めた範囲を越えたことを通知する構成の一例を図１３に示す。図１３において、ＡＲは図１１と同じであり、３１−１、３１−２はソフトウェアで設定可能なレジスタ、３２は比較回路、３３は信号線である。比較回路３２によってＡＲとレジスタ３１−１、３１−２の値が常に比較され、ＡＲの値がレジスタ３１−１、３１−２で定まる範囲にない場合、信号３３が「１」になる。信号３３は例えば割り込み要因として認識され、ＶＬＣが置かれている範囲外へのアクセスを止めることが可能になる。
【００６８】
次に、ＶＬＣのデコード処理／エンコード処理におけるスキップ動作を実施する構成の一例を図１４に示す。図１４は、図１１の論理回路２の機能のうち、ｓｆｔ０１命令およびｓｆｔ１命令に係わる部分を置き換えたものである。図１４において、４１は論理回路、４２はセレクタ、４３〜４７は信号線である。
論理回路４１は入力された信号の値が３２より大きいかどうかを判定し、３２より大きい場合には、信号４５に３２を、信号４６に入力値と３２の差分を、信号４７に「１」を出力する。また、入力値が３２以下の場合には、信号４５に入力値自身を、信号４６に０を、信号４７に「０」を出力する。信号４３はセレクタ４２に対するセレクト信号である。各種のスキップ処理は以下のようにして行なわれる。
【００６９】
（１）  ＶＬＣデコード処理において、ｓｆｔｏｆ２命令を用いてスキップ処理を行なう場合。
信号４３は命令デコーダの出力信号となり、ｓｆｔ０１命令実行時には信号４４を選択する値が、ｓｆｔｏｆ２命令実行時には、ＯＦＦＲ２の値を選択する値がそれぞれ与えられる。
【００７０】
また、信号４４は、ｓｆｔ０１命令実行時におけるオペランドであり、図１１のｄ１と同じものである。信号４５は図１１のｓ４と同じであり、シフタ１でシフト量として用いられる。信号４７の値はＦＧＲにセットされる。
（２）  ＶＬＣデコード処理において、ｓｆｔ０１’命令を用いてスキップ処理を行なう場合。
【００７１】
信号４３が命令デコーダの出力ではなくＦＧＲの値になり、セレクタ４２は、ＦＧＲが「０」の場合は信号４４を、「１」の場合はＯＦＦＲ２の値を選択する。
（３）  ＶＬＣエンコード処理において、ｓｆｔ１ｏｆ２命令を用いてスキップ処理を行なう場合。
【００７２】
（１）  と同様な動作を行なう。但し、信号４５が図１１のｄ１に相当する信号として図１１の論理回路３に入力される。
（４）  ＶＬＣエンコード処理において、ｓｆｔ１’命令を用いてスキップ処理を行なう場合。
（２）  と同様な動作を行なう。但し、信号４５が図１１のｄ１に相当する信号として図１１の論理回路３に入力される。
【００７３】
【発明の効果】
本発明によれば、可変長コード（ＶＬＣ）を処理するデータ処理装置において、少ない命令ステップによりＶＬＣデコード処理およびＶＬＣエンコード処理を実行することが可能となり、プログラム作成の簡単化および処理速度向上という効果が得られる。
【図面の簡単な説明】
【図１】本発明によるＶＬＣデコード処理の処理形態を示す図である。
【図２】ＶＬＣデコード処理において、ｓｆｔ０１命令を実行した結果、ＯＦＦＲの値が３２以上になった場合の動作を示す図である。
【図３】ＶＬＣデコード処理において、ｓｆｔ０１命令を実行した結果、ＯＦＦＲの値が３２未満だった場合の動作を示す図である。
【図４】本発明によるＶＬＣエンコード処理の処理形態を示す図である。
【図５】ＶＬＣエンコード処理において、ｓｆｔ１命令を実行した結果、ＯＦＦＲの値が３２を越えない値になった場合の動作を示し図である。
【図６】ＶＬＣエンコード処理において、ｓｆｔ１命令を実行した結果、ＯＦＦＲの値が３２を越えた値になった場合の動作を示す図である。
【図７】ＶＬＣデコード処理において、ｓｆｔｏｆ２命令を使用してスキップ処理を行なう動作例を示す図である。
【図８】ＶＬＣデコード処理において、ｓｆｔ０１’命令を使用してスキップ処理を行なう動作例を示す図である。
【図９】ＶＬＣエンコード処理において、ｓｆｔ１ｏｆ２命令を使用してスキップ処理を行なう動作例を示す図である。
【図１０】ＶＬＣエンコード処理において、ｓｆｔ１’命令を使用してスキップ処理を行なう動作例を示す図である。
【図１１】本発明の一実施例の回路構成例を示す図である。
【図１２】ＢＲ０またはＢＲ１のｍｓｂ側の必要なビット値を入力して、シフト量を計算により求める構成の一例を示す図である。
【図１３】ｌｄｃ命令およびｓｔｃ命令において、ＡＲ値をインクリメントした際に別途定めた範囲を越えたことを通知する構成の一例を示す図である。
【図１４】ＶＬＣのデコード処理／エンコード処理におけるスキップ動作を実施する構成の一例を示す図である。
【符号の説明】
ＢＲ０，ＢＲ１    バッファレジスタ
ＯＦＦＲ          オフセットレジスタ
ＯＦＦＲ２        オフセットレジスタ
ＡＲ              アドレスレジスタ
ＦＧＲ            フラグレジスタ
１                シフタ
２〜４            論理回路
５                メモリインタフェース部
６                インクリメンタ
７、８            セレクタ
【図１】
0003570188.tif 000002
【図２】
0003570188.tif 000003
【図３】
0003570188.tif 000004
【図４】
0003570188.tif 000005
【図５】
0003570188.tif 000006
【図６】
0003570188.tif 000007
【図７】
0003570188.tif 000008
【図８】
0003570188.tif 000009
【図９】
0003570188.tif 000010
【図１０】
0003570188.tif 000011
【図１１】
0003570188.tif 000012
【図１２】
0003570188.tif 000013
【図１３】
0003570188.tif 000014
【図１４】
0003570188.tif 000015