(57)【要約】  １命令から、ビット列格納領域を示す情報と第１ビット範囲を指定する情報と第１ビット範囲に連続する第２ビット範囲を指定する情報とを読み取って、読み取った情報に応じるデコード信号を出力するデコーダと、デコーダから出力されるデコード信号に応じて、ビット列格納領域に格納されるビット列に対して、第１ビット範囲と第２ビット範囲との間に同一の所定値からなるビット列を挿入することで出力ビット列を生成して出力するビット操作回路とを備える。
2012137428.tif 000002
【特許請求の範囲】
【請求項１】
１命令から、Ｎ（Ｎは２以上の整数）ビットの対象ビット列を格納するビット列格納領域を指定する情報と、Ｎビットのビット列に含まれる、当該Ｎビットのビット列における第１の端ビットを含む第１ビット範囲を示す情報と、当該Ｎビットのビット列に含まれる、当該第１ビット範囲に連続するビット範囲であって、当該Ｎビットのビット列における第２の端ビットを含まない第２ビット範囲を示す情報とを読み取って、読み取った情報に応じたデコード信号を出力するデコーダと、
前記デコーダからデコード信号が出力されると、当該デコード信号に応じて、前記ビット列格納領域に格納される前記対象ビット列に基づく、Ｎビットからなる出力ビット列を生成して出力するビット操作回路とを備え、
前記ビット操作回路は、前記出力ビット列における前記第１ビット範囲に、前記対象ビット列における前記第１ビット範囲のビット列と同値のビット列を配置し、前記出力ビット列における、前記第２の端ビットを含む、前記第２ビット範囲のビット長からなる第３ビット範囲に、前記対象ビット列における前記第２ビット範囲のビット列と同値のビット列を配置し、前記出力ビット列における、前記第１ビット範囲と前記第３ビット範囲とのいずれにも属さない部分に、同一の所定値を配置することで、前記出力ビット列の生成を行う
ことを特徴とするデータ処理装置。
【請求項２】
前記デコーダは、さらに、１命令から、符号拡張を行わせるか否かを示す符号拡張情報を読み取って、当該符号拡張情報に応じた、符号拡張を行わせるか否かを示す符号拡張信号を、出力するデコード信号に含ませ、
前記ビット操作回路は、前記デコーダから出力されるデコード信号に含まれる符号拡張信号が符号拡張を行わせる旨を示す場合に、前記出力ビット列における、前記第１ビット範囲と前記第３ビット範囲とのうち、より下位側となるビット範囲に配置されることとなるビット列における最上位ビットの値を前記所定値とし、前記デコーダから入力されるデコード信号に含まれる前記符号拡張信号が符号拡張を行わせる旨を示さない場合に、数値ゼロを前記所定値とする
ことを特徴とする請求項１記載のデータ処理装置。
【請求項３】
前記デコーダによるデコード対象となる１命令は、前記第１ビット範囲のビット長と前記第２ビット範囲のビット長とを指定するためのビット長信号を含むビット列であり、
前記デコーダは、前記デコード信号の出力を、当該デコード信号に、前記ビット長信号に応じた、前記第１ビット範囲のビット長と前記第２ビット範囲のビット長とを指定するためのビット長デコード信号を含ませて行い、
前記ビット操作回路は、前記デコーダから出力されるデコード信号に含まれるビット長デコード信号に応じて、前記出力ビット列の生成を行う
ことを特徴とする請求項２記載のデータ処理装置。
【請求項４】
前記ビット長信号は、前記第１ビット範囲のビット長を示す信号と、前記第２ビット範囲のビット長を示す信号と、Ｎビットからなるビット列における、前記第２ビット範囲と前記第３ビット範囲との差分ビット数を示す信号とのうちのいずれか２つを含む
ことを特徴とする請求項３記載のデータ処理装置。
【請求項５】
前記デコーダによるデコード対象となる１命令は、さらに、前記第１の端ビットが、最上位ビットと最下位ビットとのいずれであるかを示す端ビット信号を含み、
前記デコーダは、前記デコード信号の出力を、さらに、当該デコード信号に、前記端ビット信号に応じた、最上位ビットと最下位ビットとのいずれであるかを示す端ビットデコード信号を含ませて行い、
前記ビット操作回路は、さらに、前記デコーダから出力されるデコード信号に含まれる端ビットデコード信号を利用して、前記出力ビット列の生成を行う
ことを特徴とする請求項３記載のデータ処理装置。
【請求項６】
前記デコーダは、さらに、１命令から、プレアンパック処理を行わせるか否かを示すプレアンパック情報を読み取って、当該プレアンパック情報に応じた、プレアンパック処理を行わせるか否かを示すプレアンパック信号を、出力するデコード信号に含ませ、
前記ビット操作回路は、前記デコーダから出力されるデコード信号に含まれるプレアンパック信号がプレアンパック処理を行わせる旨を示す場合に、プレアンパック処理を行う
ことを特徴とする請求項２記載のデータ処理装置。
【請求項７】
前記デコーダからデコード信号が出力されると、当該デコード信号に応じて、前記ビット列格納領域に対応付けられた追加ビット列格納領域に格納されるＮビットからなる追加対象ビット列に基づく、Ｎビットからなる追加出力ビット列を生成して出力する追加ビット操作回路を備え、
前記追加ビット操作回路は、前記追加出力ビット列における前記第１ビット範囲に、前記追加対象ビット列における前記第１ビット範囲のビット列と同値のビット列を配置し、前記追加出力ビット列における前記第３ビット範囲に、前記追加対象ビット列における前記第２ビット範囲のビット列と同値のビット列を配置し、前記追加出力ビット列における、前記第１ビット範囲と前記第３ビット範囲とのいずれにも属さない部分に、同一の追加所定値を配置することで、前記追加出力ビット列の生成を行う
ことを特徴とする請求項１記載のデータ処理装置。
【請求項８】
命令をデコードするデコーダと、当該デコーダから出力されるデコード信号に応じた処理を行うビット操作回路とを含むデータ処理装置が行うデータ処理方法であって、
前記デコーダが、１命令から、Ｎ（Ｎは２以上の整数）ビットの対象ビット列を格納するビット列格納領域を指定する情報と、Ｎビットのビット列に含まれる、当該Ｎビットのビット列における第１の端ビットを含む第１ビット範囲を示す情報と、当該Ｎビットのビット列に含まれる、当該第１ビット範囲に連続するビット範囲であって、当該Ｎビットのビット列における第２の端ビットを含まない第２ビット範囲を示す情報とを読み取って、読み取った情報に応じたデコード信号を出力するデコードステップと、
前記ビット操作回路が、前記デコードステップにおいて前記デコーダからデコード信号が出力されると、当該デコード信号に応じて、前記ビット列格納領域に格納される前記対象ビット列に基づく、Ｎビットからなる出力ビット列を生成して出力するビット操作ステップとを含み、
前記ビット操作ステップは、前記出力ビット列における前記第１ビット範囲に、前記対象ビット列における前記第１ビット範囲のビット列と同値のビット列を配置し、前記出力ビット列における、前記第２の端ビットを含む、前記第２のビット範囲のビット長からなる第３ビット範囲に、前記対象ビット列における前記第２ビット範囲のビット列と同値のビット列を配置し、前記出力ビット列における、前記第１ビット範囲と前記第３ビット範囲とのいずれにも属さない部分に、同一の所定値を配置することで、前記出力ビット列の生成を行う
ことを特徴とするデータ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ビット列に対してビット操作を行うデータ処理技術に関する。
【背景技術】
【０００２】
一般に、コンピュータシステムにおいて、記憶装置に対するデータの書き込み、及び読み出しは、８ビットの整数倍からなる１ワード（例えば、１６ビット）を単位として行われる。【０００３】
従来、記憶装置における記憶領域を有効に利用するために、ワード単位未満の端数を含むビット数からなる複数のデータを記憶装置に対して書き込む場合には、これら複数のデータをワード単位の整数倍となるビット数のデータにパッキングしてからデータの書き込みを行うコンピュータシステムが知られている。【０００４】
コンピュータシステムにおいて利用される、データのパッキングを比較的効率的に行うための装置として、例えば、特許文献１、特許文献２に記載されるビットフィールド操作回路がある。【０００５】
特許文献１に記載されているビットフィールド操作回路（以後、「ビットフィールド操作回路Ａ」と呼ぶ。）は、図２１に示されるビットフィールド操作を行う。【０００６】
同図において、データＡ２０００とデータＢ２００１とは、ビットフィールド操作回路Ａがビットフィールド操作を行う場合において、ビットフィールド操作回路Ａに入力されるｎビットのビット列であり、データＣ２００２は、ビットフィールド操作回路Ａがビットフィールド操作を行う場合において、ビットフィールド操作回路Ａから出力されるｎビットのビット列である。【０００７】
ビットフィールド操作回路Ａは、データＡ２０００とデータＢ２００１とオフセット量２０１０とワイド量２０１１とを指定する命令が入力されると、データＡ２０００における最下位ビットの位置からオフセット量２０１０だけ左シフトした位置に、データＢ２００１における、最下位ビットを含む、ワイド量２０１１で示されるビット数のビット列が挿入されたデータＣ２００２を生成するビットフィールド操作を行う。【０００８】
特許文献２に記載されているビットフィールド操作回路（以後、「ビットフィールド操作回路Ｂ」と呼ぶ。）は、図２２に示されるビットフィールド操作を行う。【０００９】
同図において、データＡ２１００は、ビットフィールド操作回路Ｂがビットフィールド操作を行う場合において、ビットフィールド操作回路Ｂに入力されるｎビットのビット列であり、データＢ２１０１は、ビットフィールド操作回路Ａがビットフィールド操作を行う場合において、ビットフィールド操作回路Ｂから出力されるｎビットのビット列である。【００１０】
ビットフィールド操作回路Ｂは、データＡ２１００とオフセット量２１１０とシフト量２１１１とを指定する命令が入力されると、データＡ２１００を、シフト量だけ右に論理シフトしたデータに対して、データＡ２１００におけるオフセット量２１１０で示されるビット数の最下位ビットを含むビット列が挿入されてなるデータＢ２１０１を生成するビットフィールド操作を行う。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２００８−８３７９５号公報
【特許文献２】特開２０００−９９３２７号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
ところで、パッキングされたデータを記憶装置から読み出して利用する場合には、読み出したデータをアンパッキングする必要がある。【００１３】
従って、データをパッキング及びアンパッキングして利用するコンピュータシステムにおいては、データのパッキングを比較的効率良く実行することに加えて、パッキングされたデータのアンパッキングを比較的効率良く実行することが望まれる。【００１４】
そこで、本発明は係る問題に鑑みてなされたものであり、パッキングされたデータのアンパッキングを比較的効率良く実行することができるデータ処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１５】
上記課題を解決するために本発明に係るデータ処理装置は、１命令から、Ｎ（Ｎは２以上の整数）ビットの対象ビット列を格納するビット列格納領域を指定する情報と、Ｎビットのビット列に含まれる、当該Ｎビットのビット列における第１の端ビットを含む第１ビット範囲を示す情報と、当該Ｎビットのビット列に含まれる、当該第１ビット範囲に連続するビット範囲であって、当該Ｎビットのビット列における第２の端ビットを含まない第２ビット範囲を示す情報とを読み取って、読み取った情報に応じたデコード信号を出力するデコーダと、前記デコーダからデコード信号が出力されると、当該デコード信号に応じて、前記ビット列格納領域に格納される前記対象ビット列に基づく、Ｎビットからなる出力ビット列を生成して出力するビット操作回路とを備え、前記ビット操作回路は、前記出力ビット列における前記第１ビット範囲に、前記対象ビット列における前記第１ビット範囲のビット列と同値のビット列を配置し、前記出力ビット列における、前記第２の端ビットを含む、前記第２ビット範囲のビット長からなる第３ビット範囲に、前記対象ビット列における前記第２ビット範囲のビット列と同値のビット列を配置し、前記出力ビット列における、前記第１ビット範囲と前記第３ビット範囲とのいずれにも属さない部分に、同一の所定値を配置することで、前記出力ビット列の生成を行うことを特徴とする。
【発明の効果】
【００１６】
上述の構成を備える本発明に係るデータ処理装置によると、１命令からデコードされたデコード信号に応じて動作するビット操作回路が、ビット列格納領域に格納されるビット列のうちの第１ビット範囲と第２ビット範囲とにパッキングされているデータを、第１ビット範囲と第２ビット範囲との間に同一の所定値からなるビット列を挿入するようにアンパッキングして出力することとなる。このことにより、このデータ処理装置は、パッキングされたデータのアンパッキングを比較的効率良く実行することができるようになる。
【図面の簡単な説明】
【００１７】
【図１】データ処理装置１００の主要なハードウエア構成を示すブロック図
【図２】４バイトからなる１命令のビットフィールド構成図
【図３】ビット操作種命令とデコード信号との対応関係を示すデコード信号対応表
【図４】ビット操作回路１５０の回路構成を示す回路構成図
【図５】符号拡張回路３３０の回路構成を示す回路構成図
【図６】デコーダ４５０の行うデコードの真理値表
【図７】マスクデータ生成回路３５０の行うデコードの真理値表
【図８】shrnhN命令デコード時におけるデータ構成図
【図９】shrnlN命令デコード時におけるデータ構成図
【図１０】shrnlsN命令デコード時におけるデータ構成図
【図１１】extrhN命令デコード時におけるデータ構成図
【図１２】extrlN命令デコード時におけるデータ構成図
【図１３】extrlsN命令デコード時におけるデータ構成図
【図１４】データ処理装置１００の行うビット操作処理のフローチャート
【図１５】具体例におけるデータ構成図
【図１６】データ処理装置１５００の主要なハードウエア構成を示すブロック図
【図１７】ＳＩＭＤ型ビット操作種命令とデコード信号との対応関係を示すデコード信号対応表
【図１８】データ処理装置１７００の主要なハードウエア構成を示すブロック図
【図１９】（ａ）命令形式をニーモニック形式で模式的に示す模式図その１、（ｂ）命令形式をニーモニック形式で模式的に示す模式図その２
【図２０】データ処理装置２２００の構成を示すブロック図
【図２１】従来のビットフィールド操作回路Ａにおけるデータ構成図
【図２２】従来のビットフィールド操作回路Ｂにおけるデータ構成図
【図２３】下詰めアンパッキング処理におけるデータ構成図
【図２４】上詰めアンパッキング処理におけるデータ構成図
【発明を実施するための形態】
【００１８】
＜実施の形態１＞
本発明に係るデータ処理装置の一実施形態であるデータ処理装置１００の構成についての詳細な説明に先立って、ここでは、まず、データ処理装置１００が開発されるに至った経緯について説明する。
【００１９】
図２３は、データアンパッキング処理の一例である下詰めデータアンパッキング処理における、下詰めデータアンパッキング処理前のデータ構造と、下詰めデータアンパッキング処理後のデータ構造との一具体例を示す図である。
【００２０】
ここで、この下詰めデータアンパッキング処理は、データパッキングされている複数のビット列のそれぞれが、ワード単位の整数倍のビット列のそれぞれにおける最下位ビット側に配置されるようにアンパッキングされる処理のことである。
【００２１】
同図において、データＡ２３００は、下詰めデータアンパッキング処理前の３２ビットのビット列であって、７ビットの有効ビット列２３０１と９ビットの有効ビット列２３０２とからなる１６ビットのビット列と、１６ビットの論理値“０”となる不要ビット列２３０３とから構成されている。
【００２２】
データＢ２３１０は、下詰めデータアンパッキング処理後の３２ビットのビット列であって、上位１６ビットの中の最下位ビット側位置に有効ビット列２３０１が配置され、下位１６ビットの中の最下位ビット側位置に有効ビット列２３０２が配置されるように、下詰めデータアンパッキング処理がなされたデータとなっている。
【００２３】
ところで、データＢ２３１０における下位１６ビットのビット列を、例えば、１６ビット単位でなされる算術演算等で利用される整数として取り扱う場合には、ビット列２３１１の部分（以下、「拡張ビット列２３１１」と呼ぶ。）が同一の所定値で満たされている必要がある。すなわち、符号なし整数として取り扱う場合には、拡張ビット列２３１１が値“０”で満たされている必要があり、符号付き整数として取り扱う場合には、拡張ビット列２３１１が、有効ビット列２３０２における最上位ビットの値で満たされている必要がある。
【００２４】
しかしながら、従来のビットフィールド操作回路Ａ、及び従来のビットフィールド操作回路Ｂは、拡張ビット列２３１１を所定の値で満たすタイプの下詰めデータアンパッキング処理（以下、「第１データアンパッキング処理」と呼ぶ。）を１命令で実現することができない。従って、従来のデータ処理装置では、この第１データアンパッキング処理を実現するためには、少なくとも２つの命令を組み合わせて実行する必要がある。
【００２５】
図２４は、データアンパッキング処理の一例である上詰めデータアンパッキング処理における、上詰めデータアンパッキング処理前のデータ構造と、上詰めデータアンパッキング処理後のデータ構造との一具体例を示す図である。
【００２６】
ここで、この上詰めデータアンパッキング処理は、データパッキングされている複数のビット列のそれぞれが、ワード単位の整数倍のビット列のそれぞれにおける最上位ビット側に配置されるようにアンパッキングされる処理のことである。
【００２７】
同図において、データＡ２４００は、上詰めデータアンパッキング処理前の３２ビットのビット列であって、７ビットの有効ビット列２４０１と９ビットの有効ビット列２４０２とからなる１６ビットのビット列と、１６ビットの論理値“０”となる不要ビット列２４０３とから構成されている。
【００２８】
データＢ２４１０は、上詰めデータアンパッキング処理後の３２ビットのビット列であって、上位１６ビットの中の最上位ビット側位置に有効ビット列２４０１が配置され、下位１６ビットの中の最上位ビット側位置に有効ビット列２４０２が配置されるように、上詰めデータアンパッキング処理がなされたデータとなっている。
【００２９】
ところで、データＢ２４１０における、有効ビット列２４０２とビット列２４１１とからなる１６ビットのビット列を、例えば、１６ビット単位でなされる算術演算等で利用される整数として取り扱う場合には、ビット列２４１１の部分（以下、「拡張ビット列２４１１」と呼ぶ。）が同一の所定値で満たされている必要がある。すなわち、符号なし整数として取り扱う場合には、拡張ビット列２４１１が値“０”で満たされている必要があり、符号付き整数として取り扱う場合には、拡張ビット列２４１１が、有効ビット列２４０２における最上位ビットの値で満たされている必要がある。
【００３０】
しかしながら、従来のビットフィールド操作回路Ａ、及び従来のビットフィールド操作回路Ｂは、拡張ビット列２４１１を所定値で満たすタイプの上詰めデータアンパッキング処理（以下、「第２データアンパッキング処理」と呼ぶ。）を１命令で実現することができない。従って、従来のデータ処理装置では、この第２データアンパッキング処理を実現するためには、少なくとも２つの命令を組み合わせて実行する必要がある。
【００３１】
一般に、コンピュータシステムにおいて、単位時間当たりに実行できる命令数は限られている。よって、従来のデータ処理装置では、少なくとも２つの命令を組み合わせて実行する必要のある、上述の第１データアンパッキング処理と第２データアンパッキング処理とは、１命令で実行されることが望まれる。
【００３２】
そこで、データ処理装置１００は、上述の第１データアンパッキング処理と第２データアンパッキング処理とを１命令で実行することができるデータ処理装置を提供することを目的として開発された。
【００３３】
このデータ処理装置１００は、命令デコーダとレジスタファイルとビット操作回路とを備え、ビット操作回路が、レジスタファイルに格納されているデータに対して、命令デコーダから出力されるデコード信号に基づいて、シフト処理に係るビット操作を行う。
【００３４】
以下、データ処理装置１００について、図面を用いて詳細に説明する。
【００３５】
＜データ処理装置１００の構成＞
図１は、データ処理装置１００の主要なハードウエア構成を示すブロック図である。
【００３６】
データ処理装置１００は、命令フェッチユニット１１０と命令デコーダ１２０とロードストアユニット１３０とレジスタファイル１４０とビット操作回路１５０とクロックジェネレータ１６０とから構成される、例えば、半導体集積回路である。
【００３７】
クロックジェネレータ１６０は、命令フェッチユニット１１０と命令デコーダ１２０とロードストアユニット１３０とレジスタファイル１４０とビット操作回路１５０とに供給する、例えば、１００ＭＨｚのクロック信号を生成して出力する機能を有する。
【００３８】
命令フェッチユニット１１０は、命令デコーダ１２０と外部メモリとに接続され、以下の２つの機能を有する。
【００３９】
機能１：クロックジェネレータ１６０から供給されるクロック信号に同期して、外部メモリに記憶されている４バイトの１命令を読み出し、読み出した命令を命令デコーダ１２０に出力する機能。
【００４０】
機能２：外部メモリから命令を読み出す場合に用いるアドレスを、前回外部メモリから命令を読み出す際に用いたアドレス対して４バイトインクリメントしたものとする機能。
【００４１】
図２は、外部メモリに記憶されている、４バイトからなる１命令のビットフィールド構成図である。
【００４２】
同図に示される通り、外部メモリに記憶されている、４バイトからなる１命令は、１ビットのsignフィールド２０１と、１ビットのmask_dirフィールド２０２と、１ビットのoperationフィールド２０３と、６ビットのNフィールド２０４と、５ビットのwidthフィールド２０５と、５ビットのshift_lenフィールド２０６と４ビットのread_addrフィールド２０７と、４ビットのwrite_addrフィールド２０８と、５ビットのその他フィールド２０９とから構成されている。
【００４３】
再び図１に戻って、データ処理装置１００の構成の説明を続ける。
【００４４】
命令デコーダ１２０は、命令フェッチユニット１１０とロードストアユニット１３０とレジスタファイル１４０とビット操作回路１５０とに接続され、命令フェッチユニット１１０から入力される、予め定められたフォーマットで記述された命令を、予め定められたアルゴリズムに従ってデコードする機能を有する。
【００４５】
命令デコーダ１２０のデコード対象となる命令には、ロードストアユニット１３０とレジスタファイル１４０とを用いて行うロードストア処理に係るロードストア種命令と、レジスタファイル１４０とビット操作回路１５０とを用いて行うビット操作処理に係るビット操作種命令との２種類ある。
【００４６】
ここでは、命令デコーダ１２０の行うビット操作種命令のデコードについて、以下、図面を用いて説明する。
【００４７】
図３は、命令デコーダ１２０がビット操作種命令をデコードする場合における、デコード対象となるビット操作種命令とデコード信号との対応関係を示す、デコード信号対応表２００である。
【００４８】
同図において、命令形式２１０は、デコード対象となるビット操作種命令の、ニーモニック形式における命令形式を示すものである。
【００４９】
ビット操作種命令には、オペコードがshrnhN（Ｎは８又は１６又は３２のいずれか。以下同様）となるshrnhN命令と、オペコードがshrnlNとなるshrnlN命令と、オペコードがshrnlsNとなるshrnlsN命令と、オペコードがextrhNとなるextrhN命令と、オペコードがextrlNとなるextrlN命令と、オペコードがextrlsNとなるextrlsN命令との６種類ある。
【００５０】
そして、これらの命令は、レジスタファイル１４０内のデスティネーションレジスタを指定するレジスタ名Ｂと、レジスタファイル１４０内のソースレジスタを指定するレジスタ名Ａと、Ｎ未満となる第１のビット長を示すshift_lenと、Ｎ未満となる第２のビット長を示すwidthとをオペランドとする。
【００５１】
sign２２０と、mask_dir２３０と、operation２４０と、N２５０と、width２６０と、shift_len２７０と、read_addr２８０と、write_addr２９０とのそれぞれは、命令デコーダ１２０がビット操作種命令をデコードする際に出力するデコード信号である。
【００５２】
sign２２０は、オペコードの６文字目が“ｓ”である場合には論理値“１”となり、オペコードの６文字目が“ｓ”でない場合には論理値“０”となる信号であって、ビット操作回路１５０に出力される。このsign２２０は、ビット操作回路１５０の行うビット操作処理が、符号拡張を伴う符号拡張処理であるか、符号拡張を伴わないゼロ拡張処理であるかを示す信号である。
【００５３】
また、sign２２０は、図２におけるsignフィールド２０１に基づいてデコードされたものである。
【００５４】
mask_dir２３０は、オペコードの５文字目が“ｈ”である場合には論理値“０”となり、オペコードの５文字目が“ｈ”でない場合、すなわち、“ｌ”である場合には論理値“１”となる信号であって、ビット操作回路１５０に出力される。このmask_dir２３０は、ビット操作回路１５０の行うビット操作処理において、シフト処理対象とならないビット列を特定するための信号である。シフト処理対象とならないビット列については、後述する。
【００５５】
また、mask_dir２３０は、図２におけるmask_dirフィールド２０２に基づいてデコードされたものである。
【００５６】
operation２４０は、オペコードの１文字目〜４文字目が“shrn”である場合には論理値“０”となり、オペコードの１文字目〜４文字目が“shrn”でない場合、すなわち、“extr”である場合には論理値“１”となる信号であって、ビット操作回路１５０に出力される。このoperation２４０は、ビット操作回路１５０の行うビット操作処理において、シフト処理対象となるビット列の、シフト処理対象とならないビット列に対するシフト方向を特定するための信号である。シフト処理対象となるビット列については、後述する。
【００５７】
また、operation２４０は、図２におけるoperationフィールド２０３に基づいてデコードされたものである。
【００５８】
N２５０は、オペコードに含まれる数字Ｎを２進数で示す６ビットの信号であって、ビット操作回路１５０に出力される。このN２５０は、ビット操作回路１５０の行うビット操作処理対象となるビット列のビット長を示す信号である。
【００５９】
また、N２５０は、図２におけるNフィールド２０４に基づいてデコードされたものである。
【００６０】
width２６０は、オペランドwidthの数値を２進数で示す５ビットの信号であって、ビット操作回路１５０に出力される。このwidth２６０は、ビット操作回路１５０の行うビット操作処理において、シフト対象となるビット列のビット長を示す信号である。
【００６１】
また、width２６０は、図２におけるwidthフィールド２０５に基づいてデコードされたものである。
【００６２】
shift_len２７０は、オペランドshift_lenの数値を２進数で示す５ビットの信号であって、ビット操作回路１５０に出力される。このshift_len２７０は、ビット操作回路１５０の行うビット操作処理対象となるビット列のシフト量を示す信号である。
【００６３】
また、shift_len２７０は、図２におけるshift_lenフィールド２０６に基づいてデコードされたものである。
【００６４】
read_addr２８０は、オペランドＡで指定される、レジスタファイル１４０内のソースレジスタの４ビットのアドレスを示す信号（addrA）であって、レジスタファイル１４０に出力される。このread_addr２８０は、図２におけるread_addrフィールド２０７に基づいてデコードされたものである。
【００６５】
write_addr２９０は、オペランドＢで指定される、レジスタファイル１４０内のソースレジスタの４ビットのアドレスを示す信号（addrB）であって、レジスタファイル１４０に出力される。このwrite_addr２９０は、図２におけるwrite_addrフィールド２０８に基づいてデコードされたものである。
【００６６】
再び図１に戻って、データ処理装置１００の構成の説明を続ける。
【００６７】
ロードストアユニット１３０は、命令デコーダ１２０とレジスタファイル１４０と外部メモリとに接続され、以下の２つの機能を有する。
【００６８】
機能１：命令デコーダ１２０から、ロードストア種命令をデコードした際に出力される、外部メモリのアドレスを示す信号ld_addrが入力されると、クロックジェネレータ１６０から供給されるクロック信号に同期して、ld_addrによって示されるアドレスで指定される、外部メモリにおける記憶領域の４バイトのデータを外部メモリから読み出して、レジスタファイル１４０に出力する機能。
【００６９】
機能２：命令デコーダ１２０から、ロードストア種命令をデコードした際に出力される、外部メモリのアドレスを示す信号st_addrが入力されると、クロックジェネレータ１６０から供給されるクロック信号に同期して、レジスタファイル１４０から入力される４バイトのデータを、st_addrによって示されるアドレスで指定される、外部メモリにおける記憶領域に書き込む機能。
【００７０】
レジスタファイル１４０は、命令デコーダ１２０とロードストアユニット１３０とビット操作回路１５０とに接続され、内部に４バイトからなる汎用レジスタを１６本有し、以下の２つの機能を有する。
【００７１】
機能１：命令デコーダ１２０からread_addrが入力されると、クロックジェネレータ１６０から供給されるクロック信号に同期して、read_addrによって指定されるソースレジスタに格納されている４バイトのデータ出力する機能。
【００７２】
機能２：命令デコーダ１２０からwrite_addrが入力されると、クロックジェネレータ１６０から供給されるクロック信号に同期して、ロードストアユニット１３０又はビット操作回路１５０から、同じクロックサイクル内に出力された４バイトのデータを、write_addrによって指定されるデスティネーションレジスタに格納する機能。
【００７３】
ビット操作回路１５０は、命令デコーダ１２０とレジスタファイル１４０とに接続され、レジスタファイル１４０から入力されるデータdataAに対して、命令デコーダ１２０から入力されるデコード信号に応じた処理を行ってデータdataBを生成して出力する機能を有する。
【００７４】
図４は、ビット操作回路１５０の回路構成を示す回路構成図である。
【００７５】
同図に示される通り、ビット操作回路１５０は、排他的論理和ゲート３１０と左右シフタ３２０と符号拡張回路３３０と加算器３４０とマスクデータ生成回路３５０と第１ビットセレクタ３６０とから構成される。
【００７６】
排他的論理和ゲート３１０は、デコード信号mask_dirの信号線とデコード信号operationの信号線と左右シフタ３２０とに接続される、２入力排他的論理和回路である。
【００７７】
この排他的論理和ゲート３１０は、mask_dirとoperationとの２つのデコード信号が入力されると、左右シフタ３２０のシフト方向を示す１ビットの信号shift_dirを、左右シフタ３２０へ出力する。
【００７８】
左右シフタ３２０は、デコード信号signの信号線とデコード信号shift_lenの信号線と排他的論理和ゲート３１０と入力データdataAの信号線と符号拡張回路３３０とに接続される左右バレルシフタであって、制御信号である、sign、shift_len、及びshift_dirに基づいて、入力データdataAをシフトして出力データdataAAを出力する機能を有する。
【００７９】
以下、入力される制御信号それぞれについて説明する。
【００８０】
shift_dir：シフト方向が右方向（下位ビット側）であるか左方向（上位ビット側）であるかを制御する信号。左右シフタ３２０は、shift_dirが論理値“１”の場合に右方向へのシフトを行い、shift_dirが論理値“０”の場合に左方向へのシフトを行う。
【００８１】
shift_len：シフト量を示す制御信号。左右シフタ３２０は、shift_lenによって示されるシフト量だけ、右又は左にシフトする。
【００８２】
sign：右シフト時におけるシフト方式を、符号拡張を伴う右シフト、すなわち算術シフトとするか、符号拡張を伴わない右シフト、すなわち論理シフトとするかを制御する信号。左右シフタ３２０は、右シフト時おいてsignが論理値“１”の場合に、符号拡張を伴う右シフトを行い、右シフト時においてsignが論理値“０”の場合に、符号拡張を伴わない右シフトを行う。
【００８３】
符号拡張回路３３０は、デコード信号signの信号線とデコード信号mask_dirの信号線とデコード信号operationの信号線とデコード信号Nの信号線とデコード信号widthの信号線と左右シフタ３２０と第１ビットセレクタ３６０とに接続され、制御信号であるsign、mask_dir、operation、N、及びwidthに基づいて、入力データdataAAにおける所定のビット列の位置に、所定のビットの位置の信号の複製、又は論理値“０”を挿入して出力データdataAAAを出力する機能を有する。
【００８４】
図５は、符号拡張回路３３０の回路構成を示す回路構成図である。
【００８５】
同図に示される通り、符号拡張回路３３０は、減算器４１０と第１セレクタ４２０と第２セレクタ４３０と第３セレクタ４４０とデコーダ４５０と第２ビットセレクタ４６０とから構成される。
【００８６】
減算器４１０は、デコード信号widthの信号線とデコード信号Nの信号線と第１セレクタ４２０とに接続され、Nの値からwidthの値を減算し、６ビットの信号N-widthを出力する機能を有する。
【００８７】
第１セレクタ４２０は、デコード信号mask_dirの信号線とデコード信号widthの信号線と減算器４１０とに接続される、６ビットの２入力１出力セレクタであって、制御信号であるmask_dirが論理値“１”の場合にwidthを選択し、mask_dirが論理値“０”の場合にN-widthを選択して、６ビットの信号sign_offsetを出力する機能を有する。このsign_offsetは、ビット操作処理対象となるＮビットのビット列において、上記所定のビットの位置を示す信号となる。
【００８８】
第２セレクタ４３０は、入力データdataAAの信号線と第１セレクタ４２０と第３セレクタ４４０とに接続される、１ビットの３２入力１出力セレクタであって、３２ビットのビット列である入力データdataAAAから、制御信号であるsign_offsetによって示される位置のビットを選択して、１ビットの信号sign_dataを出力する機能を有する。
【００８９】
第３セレクタ４４０は、デコード信号signの信号線と第２セレクタ４３０と第２ビットセレクタ４６０とに接続される、１ビットの２入力１出力セレクタであって、制御信号であるsignが論理値“１”の場合にsign_dataを選択し、signが論理値“０”の場合に論理値“０”を選択して、１ビットの信号ext_dataを出力する機能を有する。
【００９０】
デコーダ４５０は、デコード信号operationの信号線とデコード信号mask_dirの信号線とデコード信号widthの信号線とデコード信号Nの信号線と第２ビットセレクタ４６０とに接続されるデコーダであって、入力されるoperation、mask_dir、width、及びNから、３２ビットのext_mask信号をデコードする機能を有する。
【００９１】
図６は、デコーダ４５０の行うデコードの真理値表である。
【００９２】
同図において、operation５１０とmask_dir５２０とwidth５３０とは、デコーダ４５０に入力される信号であって、ext_mask(Nbit)５４０は、３２ビットのデコード信号ext_maskのうちの下位Ｎビットからなるビット列である。３２ビットからなるext_maskのうちの下位Ｎビットを除く部分の値は、ドントケア値となっている（図示していない）。
【００９３】
デコーダ４５０は、operation、mask_dir、width、及びNが入力されると、同図に示される真理値表に従って、ext_maskを出力する。
【００９４】
再び図５に戻って、符号拡張回路３３０の説明を続ける。
【００９５】
第２ビットセレクタ４６０は、入力データdataAAの信号線と第３セレクタ４４０とデコーダ４５０と第１ビットセレクタ３６０（図４参照）とに接続され、３２個の２入力１出力セレクタからなり、dataAAに対して、ext_maskで指定されるビット位置に、ext_dataのビットを挿入してdataAAAを生成する機能を有する。
【００９６】
第２ビットセレクタ４６０を構成するセレクタのそれぞれは、ext_maskの各ビットを制御信号として、対応するdataAAのビットとext_dataとのいずれか一方を選択して出力する機能を有する。
【００９７】
再び図４に戻って、ビット操作回路１５０の説明を続ける。
【００９８】
加算器３４０は、デコード信号widthの信号線とデコード信号shift_lenの信号線とマスクデータ生成回路３５０とに接続され、widthの値とshift_lenの値とを加算し、６ビットの信号であるmask_widthを出力する機能を有する。
【００９９】
マスクデータ生成回路３５０は、デコード信号mask_dirの信号線とデコード信号Nの信号線と加算器３４０と第１ビットセレクタ３６０とに接続されるデコーダであって、入力されるmask_dir、N、及びmask_widthから、３２ビットのmask信号をデコードする機能を有する。
【０１００】
図７は、マスクデータ生成回路３５０の行うデコードの真理値表である。
【０１０１】
同図において、mask_dir６１０とmask_width６２０とは、マスクデータ生成回路３５０に入力される信号であって、mask(Nbit)６３０は、３２ビットのデコード信号maskのうちの下位Ｎビットからなるビット列である。３２ビットからなるmaskのうちの下位Ｎビットを除く部分の値は、ドントケア値となっている（図示していない）。
【０１０２】
マスクデータ生成回路３５０は、mask_dir、mask_width及びNが入力されると、同図に示される真理値表に従って、maskを出力する。
【０１０３】
再び図４に戻って、ビット操作回路１５０の説明を続ける。
【０１０４】
第１ビットセレクタ３６０は、入力データdataAの信号線と符号拡張回路３３０とマスクデータ生成回路３５０と出力データdataBの信号線とに接続され、３２個の２入力１出力セレクタからなり、dataAにおける、maskで指定されるビット位置に、dataAAAのデータを挿入してdataBを生成する機能を有する。
【０１０５】
これらのセレクタのそれぞれは、maskの各ビットを制御信号として、対応するdataAのビットと、対応するdataAAAのビットとのいずれか一方を選択して出力する機能を有する。
【０１０６】
上述の構成を備えるデータ処理装置１００について、命令デコーダ１２０がビット操作種命令をデコードした場合における、ビット操作回路１５０の動作について、以下図面を用いて説明する。
【０１０７】
＜ビット操作回路１５０の動作＞
図８は、命令デコーダ１２０がshrnhN命令をデコードした場合における、ビット操作回路１５０が利用、及び生成するデータの構成を示すデータ構成図である。
【０１０８】
同図において、dataA７００は、命令デコーダ１２０がデコード信号を出力したクロックサイクルと同じサイクルに、レジスタファイル１４０から出力された３２ビットの入力データのうちの下位Ｎビットの部分のビット列である。dataAA７１０は、レジスタファイル１４０から入力されるdataAに対応して、左右シフタ３２０から出力される３２ビットのデータdataAAのうちの下位Ｎビットの部分のビット列である。dataAAA７２０は、左右シフタ３２０から入力されるdataAAに対応して、符号拡張回路３３０から出力される３２ビットのデータdataAAAのうちの下位Ｎビットの部分のビット列である。dataB７３０は、符号拡張回路３３０から入力されるdataAAAに対応して、第１ビットセレクタ３６０から出力される３２ビットのデータdataBのうちの下位Ｎビットの部分のビット列である。width７４０は、命令デコーダ１２０から入力されるデコード信号widthによって指定されるビット長である。shift_len７５０は、命令デコーダ１２０から入力されるデコード信号shift_lenによって指定されるシフト量である。
【０１０９】
排他的論理和ゲート３１０（図４参照）は、命令デコーダ１２０からshrnhN命令に対応するデコード信号が入力されると、論理値“０”のshift_dirを左右シフタ３２０に出力する。すると、左右シフタ３２０は、dataA７００を左方向にshift_len７５０で指定されるシフト量だけシフトをして、dataAA７１０を出力する。
【０１１０】
また、デコーダ４５０（図５参照）は、命令デコーダ１２０からshrnhN命令に対応するデコード信号が入力されると、下位Ｎビットが全て論理値“０”のext_maskを第２ビットセレクタ４６０に出力する。すると、第２ビットセレクタ４６０は、dataAA７１０をそのままdataAAA７２０として出力する。
【０１１１】
一方、加算器３４０（図４参照）は、width７４０の値とshift_len７５０の値とを加算し、mask_widthを出力する。そして、マスクデータ生成回路３５０は、下位Ｎビットのうちの、mask_widthの値で示される最下位ビットを含むビット列が論理値“１”、下位Ｎビットのうちのそれら以外のビットが論理値“０”となるmaskを第１ビットセレクタ３６０に出力する。
【０１１２】
従って、第１ビットセレクタ３６０は、width７４０の値とshift_len７５０の値との和の値のビット幅の最下位ビットを含むビット列をdataAAA７２０から選択し、それら以外のビットをdataA７００から選択して、dataB７３０として出力する。
【０１１３】
このように、ビット操作回路１５０は、命令デコーダ１２０がshrnhN命令をデコードした場合に、dataA７００から、width７４０によって指定されるビット長の最下位ビットを含むビット列を、shift_len７５０によって指定されるシフト量だけ左シフトし、N−（width７４０＋shift_len７５０）の値によって指定されるビット長の最上位ビットを含むビット列をシフトしないことで、ビット列dataB７３０を生成して出力する。
【０１１４】
図９は、命令デコーダ１２０がshrnlN命令をデコードした場合における、ビット操作回路１５０が利用、及び生成するデータの構成を示すデータ構成図である。
【０１１５】
同図において、dataA８００、dataAA８１０、dataAAA８２０、dataB８３０、width８４０、及びshift_len８５０は、それぞれ、図８におけるdataA７００、dataAA７１０、dataAAA７２０、dataB７３０、width７４０、及びshift_len７５０と同様のものである。よって、ここではこれらの説明を省略する。
【０１１６】
排他的論理和ゲート３１０は、命令デコーダ１２０からshrnlN命令に対応するデコード信号が入力されると、論理値“１”のshift_dirを左右シフタ３２０に出力する。すると、左右シフタ３２０は、dataA８００を右方向にshift_len８５０で指定されるシフト量だけ符号拡張を伴わないシフトをして、dataAA８１０を出力する。ここで、左右シフタ３２０の行うシフトは、符号拡張を伴わないものであるため、図９中のゼロ拡張領域８６０には論理値“０”が挿入されることとなる。
【０１１７】
また、デコーダ４５０は、命令デコーダ１２０からshrnlN命令に対応するデコード信号が入力されると、下位Ｎビットが全て論理値“０”のext_maskを第２ビットセレクタ４６０に出力する。すると、第２ビットセレクタ４６０は、dataAA８１０をそのままdataAAA８２０として出力する。
【０１１８】
一方、加算器３４０は、width８４０の値とshift_len８５０の値とを加算し、mask_widthを出力する。そして、マスクデータ生成回路３５０は、下位Ｎビットのうちの、N−（width８４０＋shift_len８５０）の値によって指定されるビット長の最下位ビットを含むビット列が論理値“１”、下位Ｎビットのうちのそれら以外のビットが論理値“０”となるmaskを第１ビットセレクタ３６０に出力する。
【０１１９】
従って、第１ビットセレクタ３６０は、width８４０の値とshift_len８５０の値との和の値のビット幅の最上位ビットを含むビット列をdataAAA８２０から選択し、それら以外のビットをdataA８００から選択して、dataB８３０として出力する。
【０１２０】
このように、ビット操作回路１５０は、命令デコーダ１２０がshrnlN命令をデコードした場合に、dataA８００から、width８４０によって指定されるビット長の最上位ビットを含むビット列を、shift_len８５０によって指定されるシフト量だけ符号拡張を伴わずに右シフトし、N−（width８４０＋shift_len８５０）の値によって指定されるビット長の最下位ビットを含むビット列をシフトしないことで、ビット列dataB８３０を生成して出力する。
【０１２１】
図１０は、命令デコーダ１２０がshrnlsN命令をデコードした場合における、ビット操作回路１５０が利用、及び生成するデータの構成を示すデータ構成図である。
【０１２２】
同図において、dataA９００、dataAA９１０、dataAAA９２０、dataB９３０、width９４０、及びshift_len９５０は、それぞれ、図８におけるdataA７００、dataAA７１０、dataAAA７２０、dataB７３０、width７４０、及びshift_len７５０と同様のものである。よって、ここではこれらの説明を省略する。
【０１２３】
排他的論理和ゲート３１０は、命令デコーダ１２０からshrnlsN命令に対応するデコード信号が入力されると、論理値“１”のshift_dirを左右シフタ３２０に出力する。すると、左右シフタ３２０は、dataA８００を右方向にshift_len８５０で指定されるシフト量だけ符号拡張を伴うシフトをして、dataAA８１０を出力する。ここで、左右シフタ３２０の行うシフトは、符号拡張を伴うものであるため、図１０中の符号拡張領域９６０にはdataA９００の最上位ビットが符号拡張されることとなる。
【０１２４】
また、デコーダ４５０は、命令デコーダ１２０からshrnlsN命令に対応するデコード信号が入力されると、下位Ｎビットが全て論理値“０”のext_maskを第２ビットセレクタ４６０に出力する。すると、第２ビットセレクタ４６０は、dataAA９１０をそのままdataAAA９２０として出力する。
【０１２５】
一方、加算器３４０は、width９４０の値とshift_len９５０の値とを加算し、mask_widthを出力する。そして、マスクデータ生成回路３５０は、下位Ｎビットのうちの、N−（width９４０＋shift_len９５０）の値によって指定されるビット長の最下位ビットを含むビット列が論理値“１”、下位Ｎビットのうちのそれら以外のビットが論理値“０”となるmaskを第１ビットセレクタ３６０に出力する。
【０１２６】
従って、第１ビットセレクタ３６０は、width９４０の値とshift_len９５０の値との和の値のビット幅の最上位ビットを含むビット列をdataAAA９２０から選択し、それら以外のビットをdataA９００から選択して、dataB９３０として出力する。
【０１２７】
このように、ビット操作回路１５０は、命令デコーダ１２０がshrnlN命令をデコードした場合に、dataA９００から、width９４０によって指定されるビット長の最上位ビットを含むビット列を、shift_len９５０によって指定されるシフト量だけ符号拡張を伴って右シフトし、N−（width９４０＋shift_len９５０）の値によって指定されるビット長の最下位ビットを含むビット列をシフトしないことで、ビット列dataB８３０を生成して出力する。
【０１２８】
図１１は、命令デコーダ１２０がextrhN命令をデコードした場合における、ビット操作回路１５０が利用、及び生成するデータの構成を示すデータ構成図である。
【０１２９】
同図において、dataA１０００、dataAA１０１０、dataAAA１０２０、dataB１０３０、width１０４０、及びshift_len１０５０は、それぞれ、図８におけるdataA７００、dataAA７１０、dataAAA７２０、dataB７３０、width７４０、及びshift_len７５０と同様のものである。よって、ここではこれらの説明を省略する。
【０１３０】
排他的論理和ゲート３１０は、命令デコーダ１２０からextrhN命令に対応するデコード信号が入力されると、論理値“１”のshift_dirを左右シフタ３２０に出力する。すると、左右シフタ３２０は、dataA１０００を右方向にshift_len１０５０で指定されるシフト量だけ符号拡張を伴わないシフトをして、dataAA１０１０を出力する。ここで、左右シフタ３２０の行うシフトは、符号拡張を伴わないものであるため、図１１中の第１ゼロ拡張領域１０６０には論理値“０”が挿入されることとなる。
【０１３１】
また、第３セレクタ４４０は、命令デコーダ１２０から入力されるsignが論理値“０”であるため、論理値“０”をext_dataとして出力する。そして、デコーダ４５０は、命令デコーダ１２０からextrhN命令に対応するデコード信号が入力されると、下位Ｎビットのうちの、width１０４０の値によって指定されるビット長の最下位ビットを含むビット列が論理値“１”となり、下位Ｎビットのうちのそれら以外のビットが論理値“０”となるext_maskを出力する。すると、第２ビットセレクタ４６０は、dataAA１０１０から、width１０４０によって指定されるビット長の最下位ビットを含むビット列を選択し、それら以外のビットに論理値“０”を選択することで、ビット列dataAAA１０２０を生成して出力する。よって、図１１中の第２ゼロ拡張領域１０７０は、論理値“０”となる。
【０１３２】
一方、加算器３４０は、width１０４０の値とshift_len１０５０の値とを加算し、mask_widthを出力する。そして、マスクデータ生成回路３５０は、下位Ｎビットのうちの、width１０４０＋shift_len１０５０の値によって指定されるビット長の最下位ビットを含むビット列が論理値“１”、下位Ｎビットのうちのそれら以外のビットが論理値“０”となるmaskを第１ビットセレクタ３６０に出力する。
【０１３３】
従って、第１ビットセレクタ３６０は、width１０４０の値とshift_len１０５０の値との和の値のビット幅の最下位ビットを含むビット列をdataAAA１０２０から選択し、それら以外のビットをdataA１０００から選択して、dataB１０３０として出力する。
【０１３４】
このように、ビット操作回路１５０は、命令デコーダ１２０がextrhN命令をデコードした場合に、dataA１０００から、width１０４０＋shift_len１０５０の値によって指定されるビット長の最下位ビットを含むビット列を、shift_len１０５０によって指定されるシフト量だけ符号拡張を伴わずに右シフトし、N−（width１０４０＋shift_len１０５０）の値によって指定されるビット長の最上位ビットを含むビット列をシフトしないことで、ビット列dataB１０３０を生成して出力する。
【０１３５】
図１２は、命令デコーダ１２０がextrlN命令をデコードした場合における、ビット操作回路１５０が利用、及び生成するデータの構成を示すデータ構成図である。
【０１３６】
同図において、dataA１１００、dataAA１１１０、dataAAA１１２０、dataB１１３０、width１１４０、及びshift_len１１５０は、それぞれ、図８におけるdataA７００、dataAA７１０、dataAAA７２０、dataB７３０、width７４０、及びshift_len７５０と同様のものである。よって、ここではこれらの説明を省略する。
【０１３７】
排他的論理和ゲート３１０（図４参照）は、命令デコーダ１２０からextrlN命令に対応するデコード信号が入力されると、論理値“０”のshift_dirを左右シフタ３２０に出力する。すると、左右シフタ３２０は、dataA１１００を左方向にshift_len１１５０で指定されるシフト量だけシフトをして、dataAA１１１０を出力する。
【０１３８】
また、第３セレクタ４４０は、命令デコーダ１２０から入力されるsignが論理値“０”であるため、論理値“０”をext_dataとして出力する。そして、デコーダ４５０は、命令デコーダ１２０からextrlN命令に対応するデコード信号が入力されると、下位Ｎビットのうちの、width１０４０の値によって指定されるビット長の最上位ビットを含むビット列が論理値“１”となり、下位Ｎビットのうちのそれら以外のビットが論理値“０”となるext_maskを出力する。すると、第２ビットセレクタ４６０は、dataAA１１１０から、width１１４０によって指定されるビット長の最上位ビットを含むビット列を選択し、それら以外のビットに論理値“０”を選択することで、ビット列dataAAA１１２０を生成して出力する。よって、図１２中の第１ゼロ拡張領域１１６０は、論理値“０”となる。
【０１３９】
一方、加算器３４０は、width１１４０の値とshift_len１１５０の値とを加算し、mask_widthを出力する。そして、マスクデータ生成回路３５０は、下位Ｎビットのうちの、width１１４０＋shift_len１１５０の値によって指定されるビット長の最上位ビットを含むビット列が論理値“１”、下位Ｎビットのうちのそれら以外のビットが論理値“０”となるmaskを第１ビットセレクタ３６０に出力する。
【０１４０】
従って、第１ビットセレクタ３６０は、width１１４０の値とshift_len１１５０の値との和の値のビット幅の最上位ビットを含むビット列をdataAAA１１２０から選択し、それら以外のビットをdataA１１００から選択して、dataB１１３０として出力する。
【０１４１】
このように、ビット操作回路１５０は、命令デコーダ１２０がextrlN命令をデコードした場合に、dataA１１００から、width１１４０＋shift_len１１５０の値によって指定されるビット長の最上位ビットを含むビット列を、shift_len１１５０によって指定されるシフト量だけ左シフトして、N−（width１１４０＋shift_len１１５０）の値によって指定されるビット長の最下位ビットを含むビット列をシフトせず、図１２中の第２ゼロ拡張領域１１７０の部分の論理値を０とすることで、ビット列dataB１１３０を生成して出力する。
【０１４２】
図１３は、命令デコーダ１２０がextrlsN命令をデコードした場合における、ビット操作回路１５０が利用、及び生成するデータの構成を示すデータ構成図である。
【０１４３】
同図において、dataA１２００、dataAA１２１０、dataAAA１２２０、dataB１２３０、width１２４０、及びshift_len１２５０は、それぞれ、図８におけるdataA７００、dataAA７１０、dataAAA７２０、dataB７３０、width７４０、及びshift_len７５０と同様のものである。よって、ここではこれらの説明を省略する。
【０１４４】
排他的論理和ゲート３１０（図４参照）は、命令デコーダ１２０からextrlN命令に対応するデコード信号が入力されると、論理値“０”のshift_dirを左右シフタ３２０に出力する。すると、左右シフタ３２０は、dataA１１００を左方向にshift_len１１５０で指定されるシフト量だけシフトをして、dataAA１１１０を出力する。
【０１４５】
また、第１セレクタ４２０は、命令デコーダ１２０から出力されるmask_dirが論理値“１”であるため、減算器４１０から出力されるN-widthを選択して、sign_offsetとして出力する。すると、第２セレクタ４３０は、dataAA１２１０のうちのN-widthビット目の信号をsign_dataとして出力する。さらに、第３セレクタ４４０は、命令デコーダ１２０から入力されるsignが論理値“１”であるため、dataAA１２１０のうちのN-widthビット目の信号をext_dataとして出力する。そして、デコーダ４５０は、命令デコーダ１２０からextrlsN命令に対応するデコード信号が入力されると、下位Ｎビットのうちの、width１０４０の値によって指定されるビット長の最上位ビットを含むビット列が論理値“１”となり、下位Ｎビットのうちのそれら以外のビットが、論理値“０”となるext_maskを出力する。すると、第２ビットセレクタ４６０は、dataAA１２１０から、width１１４０によって指定されるビット長の最上位ビットを含むビット列を選択し、それら以外のビットにdataAA１２１０のうちのN-widthビット目の信号を選択することで、ビット列dataAAA１１２０を生成して出力する。よって、図１３中の第１符号拡張領域１２６０は、dataAA１２１０のうちのN-widthビット目の論理値となる。
【０１４６】
一方、加算器３４０は、width１２４０の値とshift_len１２５０の値とを加算し、mask_widthを出力する。そして、マスクデータ生成回路３５０は、下位Ｎビットのうちの、width１２４０＋shift_len１２５０の値によって指定されるビット長の最上位ビットを含むビット列が論理値“１”、下位Ｎビットのうちのそれら以外のビットがdataAA１２１０のうちのN-widthビット目の論理値となるmaskを第１ビットセレクタ３６０に出力する。
【０１４７】
従って、第１ビットセレクタ３６０は、width１２４０の値とshift_len１２５０の値との和の値のビット幅の最上位ビットを含むビット列をdataAAA１２２０から選択し、それら以外のビットをdataA１２００から選択して、dataB１２３０として出力する。
【０１４８】
このように、ビット操作回路１５０は、命令デコーダ１２０がextrlsN命令をデコードした場合に、dataA１２００から、width１２４０＋shift_len１２５０の値によって指定されるビット長の最上位ビットを含むビット列を、shift_len１２５０によって指定されるシフト量だけ左シフトして、N−（width１２４０＋shift_len１２５０）の値によって指定されるビット長の最下位ビットを含むビット列をシフトせず、図１３中の第２符号拡張領域１２７０の部分に、dataAA１２１０のうちのN-widthビット目の信号を複製することで、ビット列dataB１２３０を生成して出力する。
【０１４９】
＜動作＞
データ処理装置１００の行う特徴的な動作に、ビット操作処理がある。以下、このビット操作処理について、図面を用いて説明する。
【０１５０】
＜ビット操作処理＞
ビット操作処理は、命令フェッチユニット１１０（図１参照）が外部メモリからビット操作種命令を読み出した場合に、命令デコーダ１２０とレジスタファイル１４０とビット操作回路１５０とが協働して行う処理である。
【０１５１】
図１４は、データ処理装置１００の行うビット操作処理のフローチャートである。
【０１５２】
ビット操作処理は、命令フェッチユニット１１０がビット操作種命令を外部メモリから読み出すことで開始される。
【０１５３】
命令フェッチユニット１１０は、ビット操作種命令を外部メモリから読み出すと、読み出したビット操作種命令を、命令デコーダ１２０へ出力する。すると、命令デコーダ１２０は、入力されたビット操作種命令のデコードを開始する（ステップＳ１３１０）。
【０１５４】
命令デコーダ１２０は、ビット操作種命令をデコードすると、デコード信号read_addrとデコード信号write_addrとをレジスタファイル１４０へ出力し、デコード信号signとデコード信号mask_dirとデコード信号operationとデコード信号Nとデコード信号widthとデコード信号shift_lenとをビット操作回路１５０へ出力する（ステップＳ１３２０）。
【０１５５】
レジスタファイル１４０は、命令デコーダ１２０からread_addrが入力されると、read_addrによって指定されるレジスタに格納されているデータを出力する（ステップＳ１３３０）。
【０１５６】
ビット操作回路１５０は、レジスタファイル１４０から入力されるデータに対して、命令デコーダ１２０から入力される、sign、mask_dir、operation、N、width、及びshift_lenに基づくビット操作を実行して、ビット操作を実行するによって生成されたデータを、レジスタファイル１４０における、write_addrによって指定されるレジスタに書き込む（ステップＳ１３４０）。
【０１５７】
ステップＳ１３４０の処理が終了すると、データ処理装置１００は、そのビット操作処理を終了する。
【０１５８】
＜考察＞
データ処理装置１００は、１命令で上詰めアンパッキング処理を行うことができる。
【０１５９】
以下、データ処理装置１００が行う上詰めアンパッキング処理の具体例について、図面を用いながら説明する。
【０１６０】
ここで例示する具体例は、レジスタファイル１４０の中の第１レジスタに格納されている３２ビットのデータに対して、上詰めアンパッキング処理を実行して、実行結果を、レジスタファイル１４０の中の第２レジスタに格納する場合の例である。
【０１６１】
図１５は、例示する具体例における、ビット操作回路１５０が利用、及び生成するデータの構成を示すデータ構成図である。
【０１６２】
同図において、dataA１４００は、レジスタファイル１４０の中の第１レジスタに格納されている３２ビットのデータであって、７ビットの有効ビット列１４０１と９ビットの有効ビット列１４０２とからなる１６ビットのビット列と、１６ビットの論理値“０”となる不要ビット列１４０３とから構成されている。
【０１６３】
dataAA１４１０は、レジスタファイル１４０から入力されるdataA１４００に対応して、左右シフタ３２０（図４参照）から出力される３２ビットのビット列である。dataAAA１４２０は、左右シフタ３２０から入力されるdataAA１４１０に対応して、符号拡張回路３３０から出力される３２ビットのビット列である。dataB１４３０は、符号拡張回路３３０から入力されるdataAAAに対応して、第１ビットセレクタ３６０から出力される３２ビットのビット列である。width１４４０は、命令デコーダ１２０から入力されるデコード信号widthによって指定されるビット長であり、後述するようにここではその値が１６となっている。shift_len１４５０は、命令デコーダ１２０から入力されるデコード信号shift_lenによって指定されるシフト量であり、後述するようにここではその値が９となっている。
【０１６４】
レジスタファイル１４０の中の第１レジスタにdataA１４００が格納されている場合において、命令デコーダ１２０に、オペコードがextrh32で、オペランドＢが第２レジスタのレジスタ名で、オペランドＡが第１レジスタのレジスタ名で、オペランドshift_lenが有効ビット列１４０２のビット長となる９で、オペランドwidthがアンパック処理後のデータの単位ビット長となる１６である命令が入力されることで、データ処理装置１００は、本具体例における上詰めアンパッキング処理となるビット操作処理を開始する。
【０１６５】
ビット操作処理が開始されると、命令デコーダ１２０はデコード信号をビット操作回路１５０へ出力し、レジスタファイル１４０は、第１レジスタに格納されているdataA１４００をビット操作回路１５０へ出力する。
【０１６６】
ビット操作回路１５０にデコード信号とdataA１４００とが入力されると、左右シフタ３２０（図４参照）は、dataA１４００を右方向にshift_len１４５０で指定される９ビット分の符号拡張を伴わないシフトをして、dataAA１４１０を出力する。
【０１６７】
また、デコーダ４５０は、デコード信号が入力されると、width１０４０によって指定される１６ビットのビット長となる最下位ビットを含むビット列が論理値“１”となり、それら以外のビットが論理値“０”となるext_maskを出力する。すると、第２ビットセレクタ４６０は、dataAA１４１０から、最下位ビットを含む１６ビットのビット列を選択し、それら以外のビットに論理値“０”を選択することで、ビット列dataAAA１４２０を生成して出力する。
【０１６８】
一方、マスクデータ生成回路３５０は、width１４４０（＝１６）＋shift_len１４５０（＝９）の値すなわち、２５ビットのビット長となる最下位ビットを含むビット列が論理値“１”、それら以外のビットが論理値“０”となるmaskを第１ビットセレクタ３６０に出力する。
【０１６９】
従って、第１ビットセレクタ３６０は、２５ビットのビット幅の最下位ビットを含むビット列をdataAAA１４２０から選択し、それら以外のビットをdataA１４００から選択して、dataB１４３０として出力する。
【０１７０】
その後、レジスタファイル１４０は、ビット操作回路１５０から出力されるdataB１４３０を第２レジスタに格納する。
【０１７１】
このように、データ処理装置１００は、第１レジスタに格納されているデータのうちの上位側１６ビットにおける、７ビットの有効ビット列１４０１と９ビットの有効ビット列１４０２とのそれぞれを、１６ビットのビット列の最上位ビット側に配置して第２レジスタに格納させるという上詰めアンパッキング処理を、１命令で実行することができる。
＜実施の形態２＞
以下、本発明に係るデータ処理装置の一実施形態として、実施の形態１に係るデータ処理装置１００の一部を変形したデータ処理装置１５００について説明する。
【０１７２】
このデータ処理装置１５００は、実施の形態１におけるビット操作回路１５０と同様のビット操作回路を複数備え、これら複数のビット操作回路を並列に実行させることで、ＳＩＭＤ（Single Instruction Multi Data）型データ処理を行うことができる。
【０１７３】
以下、本実施の形態２に係るデータ処理装置１５００の構成について、図面を参照しながら、実施の形態１に係るデータ処理装置１００の構成との相違点を中心に説明する。
【０１７４】
＜データ処理装置１５００の構成＞
図１６は、データ処理装置１５００の主要なハードウエア構成を示すブロック図である。
【０１７５】
同図に示される通り、データ処理装置１５００は、実施の形態１に係るデータ処理装置１００から、命令デコーダ１２０が命令デコーダ１５２０に変更され、レジスタファイル１４０がレジスタファイル１５４０に変更され、アライナ１５７０が追加され、さらに、備えるビット操作回路が、第１ビット操作回路１５５１〜第８ビット操作回路１５５８の８つとなるように変更されたものである。
【０１７６】
命令デコーダ１５２０は、実施の形態１に係る命令デコーダ１２０から、ＳＩＭＤ型ビット操作種命令をデコードする機能が追加されるように変形されたものである。
【０１７７】
図１７は、命令デコーダ１２０がＳＩＭＤ型ビット操作種命令をデコードする場合における、デコード対象となるＳＩＭＤ型ビット操作種命令とデコード信号との対応関係を示す、デコード信号対応表１６００である。
【０１７８】
同図において、命令形式１６１０は、デコード対象となるＳＩＭＤ型ビット操作種命令の、ニーモニック形式における命令形式を示すものである。
【０１７９】
ＳＩＭＤ型ビット操作種命令には、オペコードがshrnhNxM（Ｎは８又は１６又は３２のいずれか。Ｍは２又は４又は８のいずれか。以下同様）となるshrnhNxM命令と、オペコードがshrnlNxMとなるshrnlNxM命令と、オペコードがshrnlsNxMとなるshrnlsNxM命令と、オペコードがextrhNxMとなるextrhNxM命令と、オペコードがextrlNxMとなるextrlNxM命令と、オペコードがextrlsNxMとなるextrlsNxM命令との６種類ある。
【０１８０】
そして、これらの命令は、レジスタファイル１５４０内のデスティネーションレジスタを指定するレジスタ名Ｂと、レジスタファイル１５４０内のソースレジスタを指定するレジスタ名Ａと、Ｎ未満となる第１のビット長を示すshift_lenと、Ｎ未満となる第２のビット長を示すwidthとをオペランドとする。
【０１８１】
sign１６２０と、mask_dir１６３０と、operation１６４０と、N１６５０と、M１６５５と、width１６６０と、shift_len１６７０と、read_addr１６８０と、write_addr１６９０とのそれぞれは、命令デコーダ１５２０がビット操作種命令をデコードする際に出力するデコード信号である。
【０１８２】
これらのデコード信号のうち、sign１６２０と、mask_dir１６３０と、operation１６４０と、N１６５０と、width１６６０と、shift_len１６７０と、read_addr１６８０と、write_addr１６９０とは、それぞれ、実施の形態１における、sign２２０と、mask_dir２３０と、operation２４０と、N２５０と、width２６０と、shift_len２７０と、read_addr２８０と、write_addr２９０と同様のものである。よって、ここではこれらの説明を省略する。
【０１８３】
M１６５５は、オペコードに含まれる数字Ｍを２進数で示す４ビットの信号であって、レジスタファイル１５４０に出力される。このM１６５５は、レジスタファイル１５４０がデータの読み出し、又は書き込みを行う場合における、読み出し対象、又は書き込み対象となるレジスタの本数を示す信号である。
【０１８４】
再び図１６に戻って、データ処理装置１５００の構成の説明を続ける。
【０１８５】
レジスタファイル１５４０は、実施の形態１に係るレジスタファイル１４０から、１６本の汎用レジスタそれぞれのビット長が、４バイトから８バイトとなるように変形されたものである。
【０１８６】
アライナ１５７０は、命令デコーダ１２０とレジスタファイル１５４０と第１ビット操作回路１５５１〜第８ビット操作回路１５５８とに接続され、以下の６つの機能を有する。
【０１８７】
機能１：命令デコーダ１５２０から、M１６５５が入力された場合において、M１６５５が“２”を示すときに、レジスタファイル１５４０から６４ビットのビット列が入力されると、入力ビット列のうちの上位３２ビットからなるビット列を第１ビット操作回路１５５１に出力し、入力ビット列のうちの下位３２ビットからなるビット列を第２ビット操作回路１５５２に出力する機能。
【０１８８】
機能２：命令デコーダ１５２０から、M１６５５が入力された場合において、M１６５５が“２”を示すときに、第１ビット操作回路１５５１から３２ビットのビット列（以後、ビット列Ａと呼ぶ。）と第２ビット操作回路１５５２から３２ビットのビット列（以後、ビット列Ｂと呼ぶ。）とが入力されると、ビット列Ａが上位側となりビット列Ｂが下位側となる６４ビットのビット列を生成して、レジスタファイル１５４０へ出力する機能。
【０１８９】
機能３：命令デコーダ１５２０から、M１６５５が入力された場合において、M１６５５が“４”を示すときに、レジスタファイル１５４０から６４ビットのビット列が入力されると、入力ビット列のうちの最上位１６ビットからなるビット列を３２ビットのビット列となるように上位側にビット拡張して第１ビット操作回路１５５１に出力し、入力ビット列のうちの２番目に上位の１６ビットからなるビット列を３２ビットのビット列となるように上位側にビット拡張して第２ビット操作回路１５５２に出力し、３番目に上位の１６ビットからなるビット列を３２ビットのビット列となるように上位側にビット拡張して第３ビット操作回路１５５３に出力し、最下位１６ビットからなるビット列を３２ビットのビット列となるように上位側にビット拡張して第４ビット操作回路１５５４に出力する機能。ここで、ビット拡張は、例えば、拡張する部分に論理値“０”を挿入することで実現される。
【０１９０】
機能４：命令デコーダ１５２０から、M１６５５が入力された場合において、M１６５５が“４”を示すときに、第１ビット操作回路１５５１から１６ビットのビット列（以後、ビット列Ｃと呼ぶ。）と第２ビット操作回路１５５２から１６ビットのビット列（以後、ビット列Ｄと呼ぶ。）と第３ビット操作回路１５５３から１６ビットのビット列（以後、ビット列Ｅと呼ぶ。）と第４ビット操作回路１５５４から１６ビットのビット列（以後、ビット列Ｆと呼ぶ。）とが入力されると、上位側から順に、ビット列Ｃ、ビット列Ｄ、ビット列Ｅ、ビット列Ｆとなる６４ビットのビット列を生成して、レジスタファイル１５４０へ出力する機能。
【０１９１】
機能５：命令デコーダ１５２０から、M１６５５が入力された場合において、M１６５５が“８”を示すときに、レジスタファイル１５４０から６４ビットのビット列が入力されると、入力ビット列のうちの最上位１８ビットからなるビット列を３２ビットのビット列となるように上位側にビット拡張して第１ビット操作回路１５５１に出力し、入力ビット列のうちの２番目に上位の８ビットからなるビット列を３２ビットのビット列となるように上位側にビット拡張して第２ビット操作回路１５５２に出力し、３番目に上位の８ビットからなるビット列を３２ビットのビット列となるように上位側にビット拡張して第３ビット操作回路１５５３に出力し、４番目に上位の８ビットからなるビット列を３２ビットのビット列となるように上位側にビット拡張して第４ビット操作回路１５５４に出力し、５番目に上位の８ビットからなるビット列を３２ビットのビット列となるように上位側にビット拡張して第５ビット操作回路１５５５に出力し、６番目に上位の８ビットからなるビット列を３２ビットのビット列となるように上位側にビット拡張して第６ビット操作回路１５５６に出力し、７番目に上位の８ビットからなるビット列を３２ビットのビット列となるように上位側にビット拡張して第７ビット操作回路１５５７に出力し、最下位８ビットからなるビット列を３２ビットのビット列となるように上位側にビット拡張して第８ビット操作回路１５５４に出力する機能。ここで、ビット拡張は、例えば、拡張する部分に論理値“０”を挿入することで実現される。
【０１９２】
機能６：命令デコーダ１５２０から、M１６５５が入力された場合において、M１６５５が“８”を示すときに、第１ビット操作回路１５５１から８ビットのビット列（以後、ビット列Ｇと呼ぶ。）と第２ビット操作回路１５５２から８ビットのビット列（以後、ビット列Ｈと呼ぶ。）と第３ビット操作回路１５５３から８ビットのビット列（以後、ビット列Ｉと呼ぶ。）と第４ビット操作回路１５５４から８ビットのビット列（以後、ビット列Ｊと呼ぶ。）と第５ビット操作回路１５５５から８ビットのビット列（以後、ビット列Ｋと呼ぶ。）と第６ビット操作回路１５５６から８ビットのビット列（以後、ビット列Ｌと呼ぶ。）と第７ビット操作回路１５５７から８ビットのビット列（以後、ビット列Ｍと呼ぶ。）と第８ビット操作回路１５５８から８ビットのビット列（以後、ビット列Ｎと呼ぶ。）とが入力されると、上位側から順に、ビット列Ｇ、ビット列Ｈ、ビット列Ｉ、ビット列Ｊ、ビット列Ｋ、ビット列Ｌ、ビット列Ｍ、ビット列Ｎとなる６４ビットのビット列を生成して、レジスタファイル１５４０へ出力する機能。
【０１９３】
第１ビット操作回路１５５１〜第８ビット操作回路１５５８は、それぞれ、実施の形態１におけるビット操作回路１５０と同様の機能と同様の構成とを有し、それぞれ、命令デコーダ１５２０とアライナ１５７０とに接続され、それぞれ、互いに共通の命令デコーダ１５２０からのデコード信号が入力される。
【０１９４】
＜まとめ＞
上記構成を備えるデータ処理装置１５００は、１命令で、実施の形態１に係るデータ処理装置１００の行うビット操作処理と同様の処理を、レジスタファイル１５４０のレジスタに格納されているデータに対して並列に実行することができる。すなわち、いわゆるＳＩＭＤ型ビット操作処理を行うことができる。
＜実施の形態３＞
以下、本発明に係るデータ処理装置の一実施形態として、実施の形態１に係るデータ処理装置１００の一部を変形したデータ処理装置１７００について説明する。
【０１９５】
このデータ処理装置１７００は、命令デコーダが、オペコードがextrhNとextrlNとextrlsNとなる命令（以下、これらの命令を「伸張命令」と呼ぶ。）のうちのいずれかをデコードした場合に、レジスタファイルから出力されたデータに対して、プレアンパック処理を実施してからビット操作回路に入力し、命令デコーダが、オペコードがshrnhNとshrnlNとshrnlsNとなる命令（以下、これらの命令を「収縮命令」と呼ぶ。）のうちのいずれかをデコードした場合に、ビット操作回路から出力されたデータに対して、ポストパック処理を実施してからレジスタファイルに出力するものである。
【０１９６】
ここで、プレアンパック処理とは、アンパック処理の対象となるビット列において、ビット長を０拡張あるいは符号拡張に拡張する処理であり、ポストパック処理とは、パック処理後のビット列において、不要ビット列が格納されている部分のデータを無効なものとする処理のことをいう。
【０１９７】
以下、本実施の形態３に係るデータ処理装置１７００の構成について、図面を参照しながら、実施の形態１に係るデータ処理装置１００の構成との相違点を中心に説明する。
【０１９８】
＜データ処理装置１７００の構成＞
図１８は、データ処理装置１７００の主要なハードウエア構成を示すブロック図である。
【０１９９】
同図に示される通り、データ処理装置１７００は、実施の形態１に係るデータ処理装置１００に対して、プレアンパック回路１７１０とポストパック回路１７２０とが追加されるように変形されたものである。
【０２００】
同図において、プレアンパック回路１７１０は、命令デコーダ１２０とレジスタファイル１４０とビット操作回路１５０とに接続され、以下の４つのプレアンパック機能を有する。
【０２０１】
プレアンパック機能１：命令デコーダ１２０が伸張命令をデコードした場合において、命令デコーダ１２０から入力される、デコード信号signの論理値が“０”でデコード信号mask_dirの論理値が“０”のときに、レジスタファイル１４０から入力される３２ビットのビット列のうちの下位Ｎビットのビット列について、ビット長がＮ／２となる最下位ビットを含むビット列を左にＮ／２ビットシフトして、シフト後の、ビット長がＮ／２となる最下位ビットを含むビット列の部分に、論理値“０”からなるビット列を挿入して、出力する機能。
【０２０２】
プレアンパック機能２：命令デコーダ１２０が伸張命令をデコードした場合において、命令デコーダ１２０から入力される、デコード信号signの論理値が“０”でデコード信号mask_dirの論理値が“１”のときに、レジスタファイル１４０から入力される３２ビットのビット列のうちの下位Ｎビットのビット列について、ビット長がＮ／２となる最上位ビットを含むビット列に論理値“０”を挿入して、出力する機能。
【０２０３】
プレアンパック機能３：命令デコーダ１２０が伸張命令をデコードした場合において、命令デコーダ１２０から入力されるデコード信号signの論理値が“１”のときに、レジスタファイル１４０から入力される３２ビットのビット列のうちの下位Ｎビットのビット列について、ビット長がＮ／２ビットとなる最上位ビットを含むビット列に、ビット長がＮ／２となる最下位ビットを含むビット列の最上位ビットの複製を挿入して、出力する機能。
【０２０４】
プレアンパック機能４：命令デコーダ１２０が収縮命令をデコードした場合に、レジスタファイル１４０から入力される３２ビットのビット列を、そのまま出力する機能。
【０２０５】
ポストパック回路１７２０は、命令デコーダ１２０とビット操作回路１５０とレジスタファイル１４０とに接続され、以下の３つのポストパック機能を有する。
【０２０６】
ポストパック機能１：命令デコーダ１２０が収縮命令をデコードした場合において、命令デコーダから出力されるデコード信号mask_dirが論理値“０”のときに、ビット操作回路１５０から入力される３２ビットのビット列のうちの下位Ｎビットのビット列について、ビット長がＮ／２となる最上位ビットを含むビット列を右にＮ／２ビットシフトして、シフト後の、ビット長がＮ／２となる最上位ビットを含むビット列の部分に、論理値“０”からなる無効ビット列を挿入して、出力する機能。
【０２０７】
ポストパック機能２：命令デコーダ１２０が収縮命令をデコードした場合において、命令デコーダから出力されるデコード信号mask_dirが論理値“１”のときに、ビット操作回路１５０から入力される３２ビットのビット列のうちの下位Ｎビットのビット列について、ビット長がＮ／２となる最上位ビットを含むビット列に論理値“０”からなる無効ビット列を挿入して出力する機能。
【０２０８】
ポストパック機能３：命令デコーダ１２０が伸張命令をデコードした場合に、ビット操作回路１５０から入力される３２ビットのビット列を、そのまま出力する機能。
【０２０９】
＜まとめ＞
上記構成を備えるデータ処理装置１７００は、命令デコーダ１２０が伸張命令をデコードした場合に、プレアンパック回路１７１０がプレアンパック処理を実施した後に、ビット操作回路１５０がビット操作を行い、命令デコーダ１２０が収縮命令をデコードした場合に、ビット操作回路１５０がビット操作を行った後に、ポストパック回路１７２０がポストパック処理を行うことができる。
＜補足＞
以上、本発明に係るデータ処理装置の一実施形態として、実施の形態１、実施の形態２において、データ処理装置の例について説明したが、以下のように変形することも可能であり、本発明は上述した実施の形態で示した通りのデータ処理装置に限られないことはもちろんである。
（１）実施の形態１において、命令デコーダ１２０がデコード対象とする命令は、４バイト、すなわち３２ビットのビット長となる構成の例について説明したが、ビット操作種命令を表現することができるビット数であれば、必ずしも３２ビットのビット長となる構成に限られず、例えば６４ビットのビット長となる構成あっても構わない。さらには、命令デコーダがデコード対象とする命令は、可変長命令となる構成であっても構わない。
（２）実施の形態１において、ビット操作回路１５０は、３２ビットのビット長のデータに対してビット操作処理を行う構成の例について説明したが、命令デコーダ１２０からのデコード信号に基づいて、ビット操作処理を行うことができれば、必ずしも３２ビットのビット長のデータに対してビット操作処理を行う構成に限られず、例えば、１２８ビットや１６ビットのビット長のデータに対してビット操作処理行う構成であっても構わない。
（３）実施の形態１において、オペコードに含まれる“N”は、８又は１６又は３２のいずれかである構成の例について説明したが、ビット操作回路１５０のビット操作処理対象となるデータのビット数以下であれば、必ずしも、８又は１６又は３２のいずれかである構成に限られず、例えば、１２となる構成であっても構わない。
（４）実施の形態１において、レジスタファイル１４０は、レジスタを１６本で有する構成の例について説明したが、命令デコーダ１２０からのデコード信号に基づいて、レジスタの値を読み出し、又は書き込みを行うことができれば、必ずしもレジスタを１６本有する構成に限られず、例えば、レジスタを３２本有する構成であっても構わない。
（５）実施の形態１において、ビット操作回路１５０は、図４、図５で示される構成の例について説明したが、図４、図５で示される構成の回路と同様の機能を有する回路であれば、必ずしも図４、図５で示される通りの構成に限られない。一例として、図４、図５で示されるビット操作回路１５０の有する機能と同様の機能を記述するＲＴＬ（Resister Transfer Language）記述に対して、論理合成ツールを利用して得られる論理合成回路が考えられる。
（６）実施の形態１において、mask_dirとoperationとshift_dirとは、これら３つの信号のうちの任意の２つの信号によって、他の１つの信号が一意に決定されるという関係にある。
【０２１０】
よって、実施の形態１において、データ処理装置１００は、命令デコーダ１２０がmask_dirとoperationとをデコード信号として出力し、ビット操作回路１５０がこれらの信号からshift_dirを生成して利用する構成の例について説明したが、命令デコーダ１２０が、mask_dirとoperationとshift_dirとのうちのいずれか２つの信号をデコード信号として出力し、ビット操作回路１５０がそれら２つの信号から他の１つの信号を生成して利用する構成であれば、必ずしも、命令デコーダ１２０がmask_dirとoperationとをデコード信号として出力し、ビット操作回路１５０がこれらの信号からshift_dirを生成して利用する構成に限られない。
【０２１１】
さらには、命令デコーダ１２０から出力されるデコード信号によって、（１）デコード対象の命令が、収縮命令と伸張命令とのいずれであるかと、（２）シフト対象とならないビット列が、最上位ビットを含むビット列と最下位ビットを含むビット列とのいずれであるかとを特定することができれば、必ずしも、命令デコーダ１２０が、mask_dirとoperationとshift_dirとのうちのいずれか２つの信号をデコード信号として出力する構成に限られない。例えば、デコード対象の命令が、収縮命令と伸張命令とのいずれであるかを示す信号（operation）と、シフト対象となるビットビット列のシフト方向が、上位ビット側と下位ビット側とのいずれの方向であるかを示す信号との２つの信号をデコード信号として出力する構成の例等が考えられる。
（７）実施の形態１において、widthとshift_lenとmask_widthとは、これら３つの信号のうちの任意の２つの信号によって、他の１つの信号が一意に決定されるという関係にある。
【０２１２】
よって、実施の形態１において、データ処理装置１００は、命令デコーダ１２０がwidthとshift_lenとをデコード信号として出力し、ビット操作回路１５０がこれらの信号からmask_widthを生成して利用する構成の例について説明したが、命令デコーダ１２０が、widthとshift_lenとmask_widthとのうちのいずれか２つの信号をデコード信号として出力し、ビット操作回路１５０がそれら２つの信号から他の１つの信号を生成して利用する構成であれば、必ずしも、命令デコーダ１２０がwidthとshift_lenとをデコード信号として出力し、ビット操作回路１５０がこれらの信号からmask_widthを生成して利用する構成に限られない。
【０２１３】
さらには、命令デコーダ１２０から出力されるデコード信号によって、シフト対象となるビット列のビット長と、シフト対象とならないビット列のビット長とを特定することができれば、必ずしも、命令デコーダ１２０が、widthとshift_lenとmask_widthとのうちのいずれか２つをデコード信号として出力する構成に限られない。例えば、シフト対象となるビット列のビット長を示す信号（width）と、シフト対象とならないビット列のビット長を示す信号との２つの信号をデコード信号として出力する構成の例が考えられる。また、例えば、シフト対象とならないビット列のビット長を示す信号と、シフト対象とならないビット列のビット長とシフト対象となるビット列のビット長との差を示す信号との２つの信号をデコード信号として出力する構成の例等が考えられる。
（８）実施の形態１において、命令デコーダ１２０のデコード対象となるビット操作種命令は、ソースレジスタとデスティネーションレジスタとを互いに独立に指定する構成の例について説明したが、ソースレジスタとデスティネーションレジスタとが同一のレジスタとなるように、ソースレジスタとデスティネーションレジスタとを単一のレジスタとして指定する構成であっても構わない。
（９）実施の形態１において、データ処理装置１００は、ビット操作処理の対象となるビット列がレジスタファイル１４０のレジスタに格納されているものである構成の例について説明したが、一意に特定することができる記憶領域に格納されているビット列であれば、必ずしもビット操作処理の対象となるビット列がレジスタファイル１４０のレジスタに格納されているものである構成に限られず、例えば、メモリ等の外部記憶装置に格納されているビット列をビット操作処理の対象とする構成であっても構わない。
（１０）実施の形態２において、データ処理装置１５００は、８つのビット操作回路を備える構成の例について説明したが、それぞれのビット操作回路が、互いに共通の命令デコーダ１２０からのデコード信号に基づいて動作する構成であれば、必ずしも８つのビット操作回路を備える構成に限られず、例えば、１６のビット操作回路を備える構成であっても構わない。
（１１）実施の形態３において、命令デコーダ１２０のデコード対象となるビット操作種命令は、図３に示されるものである構成の例について説明したが、命令デコーダ１２０がレジスタファイル１４０とビット操作回路１５０とプレアンパック回路１７１０とを制御する信号をデコードすることができれば、プレアンパック回路１７１０を動作させるための部分と、ビット操作回路１５０を動作させるための部分とを１つの命令に含む複合命令となる構成であっても構わない。また、命令デコーダ１２０のデコード対象となるビット操作種命令は、図３に示されるものである構成の例について説明したが、命令デコーダ１２０がレジスタファイル１４０とビット操作回路１５０とポストパック回路１７２０とを制御する信号をデコードすることができれば、ポストパック回路１７２０を動作させるための部分と、ビット操作回路１５０を動作させるための部分とを１つの命令に含む複合命令となる構成であっても構わない。
（１２）実施の形態１において、データ処理装置１００は、命令デコーダ１２０が、図３に示される命令形式２１０からなるビット操作種命令をデコード対象とする構成の例であった。しかしながら、命令デコーダ１２０が、ビット操作回路１５０が必要とする全ての制御信号を含むデコード信号を出力することができれば、デコード対象とするビット操作種命令の命令形式は、必ずしも図３に示される命令形式２１０に限られる必要はない。一例として、図１９に例示される命令形式の例等が考えられる。
【０２１４】
図１９（ａ）に例示される命令形式は、デコード対象となるビット操作種命令が伸張命令である場合における命令形式をニーモニック形式で模式的に示したものであり、図１９（ｂ）に例示される命令形式は、デコード対象となるビット操作種命令が収縮命令である場合における命令形式をニーモニック形式で模式的に示したものである。
【０２１５】
図１９（ａ）、（ｂ）に示されるように、これらの命令形式は、１つのオペコードと３つのオペランドとから命令が構成される。
【０２１６】
ここで、オペランドｓｈ１５、オペランドｓｈ２５で示されるシフト量は、任意の値を指定し得る形式であっても構わないし、複数の固定シフト量のうちのいずれか１つを指定する形式であっても構わない。また、オペランドｍｓｋ１６、オペランドｍｓｋ２６で示されるビット長は、任意の値を指定し得る形式であっても構わないし、複数の固定ビット長のうちのいずれか１つを指定する形式であっても構わない。
（１３）以下、さらに本発明の一実施形態に係るデータ処理装置の構成及びその変形例と各効果について説明する。
【０２１７】
（ａ）本発明の一実施形態に係るデータ処理装置は、１命令から、Ｎ（Ｎは２以上の整数）ビットの対象ビット列を格納するビット列格納領域を指定する情報と、Ｎビットのビット列に含まれる、当該Ｎビットのビット列における第１の端ビットを含む第１ビット範囲を示す情報と、当該Ｎビットのビット列に含まれる、当該第１ビット範囲に連続するビット範囲であって、当該Ｎビットのビット列における第２の端ビットを含まない第２ビット範囲を示す情報とを読み取って、読み取った情報に応じたデコード信号を出力するデコーダと、前記デコーダからデコード信号が出力されると、当該デコード信号に応じて、前記ビット列格納領域に格納される前記対象ビット列に基づく、Ｎビットからなる出力ビット列を生成して出力するビット操作回路とを備え、前記ビット操作回路は、前記出力ビット列における前記第１ビット範囲に、前記対象ビット列における前記第１ビット範囲のビット列と同値のビット列を配置し、前記出力ビット列における、前記第２の端ビットを含む、前記第２ビット範囲のビット長からなる第３ビット範囲に、前記対象ビット列における前記第２ビット範囲のビット列と同値のビット列を配置し、前記出力ビット列における、前記第１ビット範囲と前記第３ビット範囲とのいずれにも属さない部分に、同一の所定値を配置することで、前記出力ビット列の生成を行うことを特徴とする。
【０２１８】
上述の構成を備える本実施形態に係るデータ処理装置によると、１命令からデコードされたデコード信号に応じて動作するビット操作回路が、ビット列格納領域に格納されるビット列のうちの第１ビット範囲と第２ビット範囲とにパッキングされているデータを、第１ビット範囲と第２ビット範囲との間に同一の所定値からなるビット列を挿入するようにアンパッキングして出力することとなる。このことにより、このデータ処理装置は、パッキングされたデータのアンパッキングを比較的効率良く実行することができるようになる。
【０２１９】
図２０は、上記変形例におけるデータ処理装置２２００の構成を示すブロック図である。
【０２２０】
同図に示されるように、データ処理装置２２００は、デコーダ２２１０とビット操作回路２２２０とから構成される。
【０２２１】
デコーダ２２１０は、ビット操作回路２２２０に接続され、１命令から、Ｎ（Ｎは２以上の整数）ビットの対象ビット列を格納するビット列格納領域を指定する情報と、Ｎビットのビット列に含まれる、当該Ｎビットのビット列における第１の端ビットを含む第１ビット範囲を示す情報と、当該Ｎビットのビット列に含まれる、当該第１ビット範囲に連続するビット範囲であって、当該Ｎビットのビット列における第２の端ビットを含まない第２ビット範囲を示す情報とを読み取って、読み取った情報に応じたデコード信号を出力する機能を有する。一例として、実施の形態１における命令デコーダ１２０として実現される。
【０２２２】
ビット操作回路２２２０は、デコーダ２２１０に接続される、デコーダ２２１０からデコード信号が出力されると、当該デコード信号に応じて、前記ビット列格納領域に格納される前記対象ビット列に基づく、Ｎビットからなる出力ビット列を生成して出力するビット操作回路であって、前記出力ビット列における前記第１ビット範囲に、前記対象ビット列における前記第１ビット範囲のビット列と同値のビット列を配置し、前記出力ビット列における、前記第２の端ビットを含む、前記第２ビット範囲のビット長からなる第３ビット範囲に、前記対象ビット列における前記第２ビット範囲のビット列と同値のビット列を配置し、前記出力ビット列における、前記第１ビット範囲と前記第３ビット範囲とのいずれにも属さない部分に、同一の所定値を配置することで、前記出力ビット列の生成を行う機能を有する。一例として、実施の形態１におけるビット操作回路１５０として実現される。
【０２２３】
（ｂ）また、前記デコーダは、さらに、１命令から、符号拡張を行わせるか否かを示す符号拡張情報を読み取って、当該符号拡張情報に応じた、符号拡張を行わせるか否かを示す符号拡張信号を、出力するデコード信号に含ませ、前記ビット操作回路は、前記デコーダから出力されるデコード信号に含まれる符号拡張信号が符号拡張を行わせる旨を示す場合に、前記出力ビット列における、前記第１ビット範囲と前記第３ビット範囲とのうち、より下位側となるビット範囲に配置されることとなるビット列における最上位ビットの値を前記所定値とし、前記デコーダから入力されるデコード信号に含まれる前記符号拡張信号が符号拡張を行わせる旨を示さない場合に、数値ゼロを前記所定値とするとしてもよい。
【０２２４】
このような構成にすることによって、デコーダのデコード対象となる１命令に符号拡張情報を含ませることで、データ処理装置に対して、符号拡張をする処理とゼロ挿入をする処理とのいずれの処理をさせるかを指定することができるようになる。
【０２２５】
（ｃ）また、前記デコーダによるデコード対象となる１命令は、前記第１ビット範囲のビット長と前記第２ビット範囲のビット長とを指定するためのビット長信号を含むビット列であり、前記デコーダは、前記デコード信号の出力を、当該デコード信号に、前記ビット長信号に応じた、前記第１ビット範囲のビット長と前記第２ビット範囲のビット長とを指定するためのビット長デコード信号を含ませて行い、前記ビット操作回路は、前記デコーダから出力されるデコード信号に含まれるビット長デコード信号に応じて、前記出力ビット列の生成を行うとしてもよい。
【０２２６】
このような構成にすることによって、第１ビット範囲のビット長と第２ビット範囲のビット長との指定を、ビット長信号を用いて行うことができるようになる。
【０２２７】
（ｄ）また、前記ビット長信号は、前記第１ビット範囲のビット長を示す信号と、前記第２ビット範囲のビット長を示す信号と、Ｎビットからなるビット列における、前記第２ビット範囲と前記第３ビット範囲との差分ビット数を示す信号とのうちのいずれか２つを含むとしてもよい。
【０２２８】
このような構成にすることによって、第１ビット範囲のビット長と第２ビット範囲のビット長との指定を、第１ビット範囲のビット長を示す信号と、第２ビット範囲のビット長を示す信号と、Ｎビットからなるビット列における、第２ビット範囲と第３ビット範囲との差分ビット数を示す信号とのうちのいずれか２つを用いて行うことができるようになる。
【０２２９】
（ｅ）また、前記デコーダによるデコード対象となる１命令は、さらに、前記第１の端ビットが、最上位ビットと最下位ビットとのいずれであるかを示す端ビット信号を含み、前記デコーダは、前記デコード信号の出力を、さらに、当該デコード信号に、前記端ビット信号に応じた、最上位ビットと最下位ビットとのいずれであるかを示す端ビットデコード信号を含ませて行い、前記ビット操作回路は、さらに、前記デコーダから出力されるデコード信号に含まれる端ビットデコード信号を利用して、前記出力ビット列の生成を行うとしてもよい。
【０２３０】
このような構成にすることによって、第１の端ビットが最上位ビットと最下位ビットとのいずれであるかの指定を、端ビット信号を用いて行うことができるようになる。
【０２３１】
（ｆ）また、前記デコーダは、さらに、１命令から、プレアンパック処理を行わせるか否かを示すプレアンパック情報を読み取って、当該プレアンパック情報に応じた、プレアンパック処理を行わせるか否かを示すプレアンパック信号を、出力するデコード信号に含ませ、前記ビット操作回路は、前記デコーダから出力されるデコード信号に含まれるプレアンパック信号がプレアンパック処理を行わせる旨を示す場合に、プレアンパック処理を行うとしてもよい。
【０２３２】
このような構成にすることによって、デコーダのデコード対象となる１命令にプレアンパック情報を含ませることで、データ処理装置にプレアンパック処理をさせることができるようになる。
【０２３３】
（ｇ）また、前記デコーダからデコード信号が出力されると、当該デコード信号に応じて、前記ビット列格納領域に対応付けられた追加ビット列格納領域に格納されるＮビットからなる追加対象ビット列に基づく、Ｎビットからなる追加出力ビット列を生成して出力する追加ビット操作回路を備え、前記追加ビット操作回路は、前記追加出力ビット列における前記第１ビット範囲に、前記追加対象ビット列における前記第１ビット範囲のビット列と同値のビット列を配置し、前記追加出力ビット列における前記第３ビット範囲に、前記追加対象ビット列における前記第２ビット範囲のビット列と同値のビット列を配置し、前記追加出力ビット列における、前記第１ビット範囲と前記第３ビット範囲とのいずれにも属さない部分に、同一の追加所定値を配置することで、前記追加出力ビット列の生成を行うとしてもよい。
【０２３４】
このような構成にすることによって、１命令で、ビット列格納領域に格納される対象ビット列と追加ビット列格納領域に格納される追加対象ビット列とから、これらのビット列のそれぞれに基づく、出力ビット列と追加出力ビット列とを生成して出力することができるようになる。
【産業上の利用可能性】
【０２３５】
本発明に係るデータ処理装置は、複数ビットからなるデジタル信号を取り扱う機器に広く利用することができる。
【符号の説明】
【０２３６】
１００  データ処理装置
１１０  命令フェッチユニット
１２０  命令デコーダ
１３０  ロードストアユニット
１４０  レジスタファイル
１５０  ビット操作回路
１６０  クロックジェネレータ
【図１】
2012137428.tif 000003
【図２】
2012137428.tif 000004
【図３】
2012137428.tif 000005
【図４】
2012137428.tif 000006
【図５】
2012137428.tif 000007
【図６】
2012137428.tif 000008
【図７】
2012137428.tif 000009
【図８】
2012137428.tif 000010
【図９】
2012137428.tif 000011
【図１０】
2012137428.tif 000012
【図１１】
2012137428.tif 000013
【図１２】
2012137428.tif 000014
【図１３】
2012137428.tif 000015
【図１４】
2012137428.tif 000016
【図１５】
2012137428.tif 000017
【図１６】
2012137428.tif 000018
【図１７】
2012137428.tif 000019
【図１８】
2012137428.tif 000020
【図１９】
2012137428.tif 000021
【図２０】
2012137428.tif 000022
【図２１】
2012137428.tif 000023
【図２２】
2012137428.tif 000024
【図２３】
2012137428.tif 000025
【図２４】
2012137428.tif 000026
【国際調査報告】
2012137428.tif 000027
2012137428.tif 000028
2012137428.tif 000029