(57)【要約】      （修正有）【課題】ＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）間接アクセス命令を効率的に実行する。【解決手段】演算処理装置は命令デコーダと，メモリアクセスエントリ部ＲＳＡと，メモリアクセスパイプラインＥＡＧＡと，マルチデータ命令エントリ部ＲＳＦと，複数の演算器３３０と複数のマルチデータ命令用レジスタとを有し，ＲＳＦから出力されたマルチデータ命令のエントリの処理を複数の演算器３３０により並列に処理し，演算パイプラインＦＬＡは，マルチデータインダイレクトメモリアクセス命令のエントリの出力に応答して，ＥＡＧＡにマルチデータインダイレクトメモリアクセス命令に対応する複数のメモリアクセス要求を生成し，複数の演算器３３０が前記複数のマルチデータ命令用レジスタから取得した複数のメモリアドレスをＦＬＡに供給する。【選択図】図６
2015203950.tif 000002
【特許請求の範囲】
【請求項１】
命令をデコードする命令デコーダと，
前記命令デコーダによりメモリアクセス命令のエントリを生成されるメモリアクセスエントリ部と，
前記メモリアクセスエントリ部から出力された前記メモリアクセス命令のエントリをメモリに対して実行するメモリアクセスパイプラインと，
前記命令デコーダにより複数のデータを１つの命令で処理するマルチデータ命令のエントリを生成されるマルチデータ命令エントリ部と，
複数の演算器と複数のマルチデータ命令用レジスタとを有し，前記マルチデータ命令エントリ部から出力された前記マルチデータ命令のエントリの処理を前記複数の演算器により並列に処理し，前記複数のマルチデータ命令用レジスタに演算結果を格納する演算パイプラインとを有し，
前記演算パイプラインは，前記複数のマルチデータ命令用レジスタに格納されている複数のメモリアドレスについて前記メモリにメモリアクセスするマルチデータインダイレクトメモリアクセス命令のエントリの出力に応答して，前記メモリアクセスパイプラインに前記マルチデータインダイレクトメモリアクセス命令に対応する複数のメモリアクセス要求を生成し，前記複数の演算器が前記複数のマルチデータ命令用レジスタから取得した前記複数のメモリアドレスを前記メモリアクセスパイプラインに供給する演算処理装置。
【請求項２】
前記演算パイプラインは，前記メモリアクセスパイプラインの第１サイクルのステージに前記複数のメモリアクセス要求を生成し，前記メモリアクセスパイプラインの前記第１サイクルより後の第２サイクルのステージに前記複数のメモリアドレスを供給する
請求項１に記載された演算処理装置。
【請求項３】
前記演算パイプラインは，前記メモリアクセスパイプラインに生成した複数のメモリアクセス要求のパイプライン転送タイミングにあわせて前記複数のメモリアドレスを供給する
請求項２に記載された演算処理装置。
【請求項４】
さらに，前記メモリアクセスパイプラインに接続されたキャッシュユニットを有し，
前記演算パイプラインは，前記メモリアクセスパイプラインに生成する前記複数のメモリアクセス要求に前記キャッシュユニット内のアクセス先メモリアドレスを格納する複数のフェッチポートの識別情報を含める
請求項１に記載された演算処理装置。
【請求項５】
前記演算パイプラインは，前記メモリアクセスパイプラインに，前記複数のメモリアクセス要求をシリアルに生成し，前記複数のメモリアドレスをシリアルに供給する
請求項１，２，３のいずれかに記載された演算処理装置。
【請求項６】
前記メモリアクセスパイプラインが複数設けられ，
前記演算パイプラインは，前記複数のメモリアクセスパイプラインに，前記複数のメモリアクセス要求の少なくとも一部のメモリアクセス要求を並列に生成し，前記複数のメモリアドレスの少なくとも一部のアドレスを並列に供給する
請求項１，２，３のいずれかに記載された演算処理装置。
【請求項７】
さらに，前記メモリアクセスパイプラインに接続されたキャッシュユニットを有し，
前記キャッシュユニットは，前記複数のメモリアクセス要求に応答して，前記複数のマルチデータ命令用レジスタとの間でデータ転送を行う
請求項１に記載された演算処理装置。
【請求項８】
前記演算パイプラインは，前記メモリアクセスエントリ部に抑止信号を出力して，前記メモリアクセスエントリ部に，前記メモリアクセスパイプラインに生成する前記複数のメモリアクセス要求と衝突するメモリアクセス命令のエントリの出力を抑止させる
請求項１に記載された演算処理装置。
【請求項９】
前記演算パイプラインは，前記マルチデータ命令エントリ部に抑止信号を出力して，前記マルチデータ命令エントリ部に，前記メモリアクセスパイプラインにシリアルに生成する前記メモリアクセス要求と衝突するマルチデータインダイレクトメモリアクセス命令のエントリの出力を抑止させる
請求項５に記載された演算処理装置。
【請求項１０】
命令をデコードする命令デコーダと，
前記命令デコーダによりメモリアクセス命令のエントリを生成されるメモリアクセスエントリ部（ＲＳＡ）と，
前記メモリアクセスエントリ部から出力された前記メモリアクセス命令のエントリをメモリに対して実行するメモリアクセスパイプラインと，
前記命令デコーダにより複数のデータを１つの命令で処理するマルチデータ命令のエントリを生成されるマルチデータ命令エントリ部と，
複数の演算器と複数のマルチデータ命令用レジスタとを有し，前記マルチデータ命令エントリ部から出力された前記マルチデータ命令のエントリの処理を前記複数の演算器により並列に処理し，前記複数のマルチデータ命令用レジスタに演算結果を格納する演算パイプラインとを有する演算処理装置の制御方法において，
前記演算パイプラインが，前記複数のマルチデータ命令用レジスタに格納されている複数のメモリアドレスについて前記メモリにメモリアクセスするマルチデータインダイレクトメモリアクセス命令のエントリの投入に応答して，前記メモリアクセスパイプラインに前記マルチデータインダイレクトメモリアクセス命令に対応する複数のメモリアクセス要求を生成し，
前記演算パイプラインが，前記複数の演算器が前記複数のマルチデータ命令用レジスタから取得した前記複数のメモリアドレスを前記メモリアクセスパイプラインに供給する演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
演算処理装置であるＣＰＵまたは演算処理部であるＣＰＵコアの高速化手法として，スーパースカラやアウト・オブ・オーダ，ＳＩＭＤ（Single Instruction Multiple Data)などの技術が知られている。例えば，スーパースカラでは複数の命令を同時に処理し，アウト・オブ・オーダではＣＰＵコア内部の資源について処理が可能になったものを順不同で処理しプログラムの順序通り完了させる。
【０００３】
一方，ＳＩＭＤは，１つの命令で複数のデータを並列に処理する。ＳＩＭＤ処理ではＳＩＭＤレジスタと呼ばれるレジスタを用いる。ＳＩＭＤレジスタには，ＳＩＭＤ命令で並列に処理可能な個数と同数もしくはそれ以上の複数個のデータが１つの固まりとして格納される。ＳＩＭＤ命令で指定されるオペランドによりこの複数個のデータを１つの固まりとして格納するＳＩＭＤレジスタが選択され，ＳＩＭＤレジスタ内の複数個のデータごとに命令の処理が実行される。この複数個のデータの各々を要素と呼び並列に処理するデータの要素数をＳＩＭＤ幅と呼ぶ。ＳＩＭＤ命令においては，例えば命令で指定される第一ソースオペランド，第二ソースオペランド，第三ソースオペランドをＳＩＭＤレジスタから読み出し，ＳＩＭＤ演算を行いデスティネーションオペランドにデータを書き込む。このＳＩＭＤ処理では，複数個のデータについて同じ命令の処理が並列に実行される。
【０００４】
また，ＳＩＭＤ命令以外の命令の処理においては，汎用レジスタと呼ばれるレジスタを用いる。汎用レジスタには，例えばメモリアクセスやＳＩＭＤで並列に処理を行わないデータが格納される。
【０００５】
従来は，メモリとＳＩＭＤレジスタ間のデータ転送は，汎用レジスタに格納されたアドレスを用いて行われる。メモリアクセス命令においては，オペランドアドレス生成器が，命令で指定される第一ソースオペランド，第二ソースオペランドを汎用レジスタから読み出し，メモリアクセスのためのアドレスの生成を行う。この読み出したアドレスを先頭アドレスとして用いて，メモリの連続するアドレス領域に存在するＳＩＭＤ幅のデータを読み出し，デスティネーションオペランドに対するＳＩＭＤレジスタに読み出したデータをロードする，もしくはメモリの連続するアドレス領域にＳＩＭＤレジスタから読み出したＳＩＭＤ幅のデータをストアする。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００９−１６３４４２号公報
【特許文献２】特公平４−７９０２６号公報
【特許文献３】特開２００４−３８７５０号公報
【特許文献４】特開２０１１−３４４５０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら，並列に処理が可能なデータがメモリの連続するアドレス領域に存在しない場合は，上記のＳＩＭＤロード命令，ＳＩＭＤストア命令を適用することはできない。
【０００８】
さらに，従来のＣＰＵコアには，独立した複数のアドレスが格納されたＳＩＭＤレジスタをソースオペランドに指定してメモリアクセスするインダイレクトメモリアクセス命令をＳＩＭＤ命令で実行するための構成が設けられていない。したがって，従来のＣＰＵコアは，例えば，ＳＭＩＤレジスタの各々の要素を個別にアクセス可能な構成を利用して，ＳＩＭＤ幅に対する複数のメモリアクセス命令によりデータ転送を行う。
【０００９】
または，ブロックロード命令のようにインダイレクトアクセス命令を複数の命令に分解して，ＳＩＭＤ幅に対する回数の命令を順次実行することも考えられる。しかし，上記のように複数の命令を実行する方法では，命令デコーダをＳＩＭＤ幅と同じ回数使用しなければならず，また命令実行のためのリザベーションステーションやコミットスタックエントリをＳＩＭＤ幅と同数使用しなければならず，ＣＰＵコアの多くの内部資源を使用する。さらに，命令デコーダを複数サイクル占有するため，依存関係のない後続命令をアウト・オブ・オーダで実行することができず，アウト・オブ・オーダで処理できるＣＰＵコアの構成を生かすことができない。
【００１０】
そこで，本実施の形態の一つの目的は，レジスタに格納された複数個の独立したデータをアドレスとして使用し，メモリ領域の複数箇所にアクセスする命令を１つの命令で実行する演算処理装置及び演算処理装置の制御方法を提供することにある。
【課題を解決するための手段】
【００１１】
本実施の形態の第１の側面は，
命令をデコードする命令デコーダと，
前記命令デコーダによりメモリアクセス命令のエントリを生成されるメモリアクセスエントリ部（ＲＳＡ）と，
前記メモリアクセスエントリ部から出力された前記メモリアクセス命令のエントリをメモリに対して実行するメモリアクセスパイプライン（ＥＡＧＡ）と，
前記命令デコーダにより複数のデータを１つの命令で処理するマルチデータ命令のエントリを生成されるマルチデータ命令エントリ部（ＲＳＦ）と，
複数の演算器と複数のマルチデータ命令用レジスタとを有し，前記マルチデータ命令エントリ部から出力された前記マルチデータ命令のエントリの処理を前記複数の演算器により並列に処理し，前記複数のマルチデータ命令用レジスタに演算結果を格納する演算パイプライン（ＦＬＡ）とを有し，
前記演算パイプラインは，前記複数のマルチデータ命令用レジスタに格納されている複数のメモリアドレスについて前記メモリにメモリアクセスするマルチデータインダイレクトメモリアクセス命令のエントリの出力に応答して，前記メモリアクセスパイプラインに前記マルチデータインダイレクトメモリアクセス命令に対応する複数のメモリアクセス要求を生成し，前記複数の演算器が前記複数のマルチデータ命令用レジスタから取得した前記複数のメモリアドレスを前記メモリアクセスパイプラインに供給する演算処理装置である。
【発明の効果】
【００１２】
第１の側面によれば，マルチデータインダイレクトメモリアクセス命令を少ない資源で効率的に実行する。
【図面の簡単な説明】
【００１３】
【図１】本実施の形態における演算処理装置が実現可能なインダイレクトメモリアクセス方式を説明する図である。
【図２】ブロックロード命令によるパイプライン処理の例を示す図である。
【図３】本実施の形態におけるＳＩＭＤインダイレクトメモリアクセス命令によるパイプライン処理を示す図である。
【図４】本実施の形態における演算処理装置を搭載した情報処理装置を示す図である。
【図５】ＣＰＵコア３０の全体構成を示す図である。
【図６】本実施の形態のＳＩＭＤインダイレクトメモリアクセス（ロードまたはストア）命令を実行するＣＰＵコアの構成を示す図である。
【図７】浮動小数点演算リザベーションステーションＲＳＦにエントリとして格納されるフラグ構成を示す図である。
【図８】ＳＩＭＤインダイレクトロード命令と通常のロード命令の処理を示すフローチャートである。
【図９】ＳＩＭＤインダイレクトロード命令と通常のロード命令の処理を示すフローチャートである。
【図１０】ＳＩＭＤインダイレクトメモリアクセスの一つであるＳＩＭＤインダイレクトロード命令のパイプライン及びタイムチャートを示す図である。
【図１１】本実施の形態のＳＩＭＤインダイレクトメモリアクセス（ロードまたはストア）命令を実行するＣＰＵコアの構成を示す図である。
【図１２】演算用インタフェース３３１とアドレス用インタフェース３１０の構成を示す図である。
【図１３】ＳＩＭＤ幅が２のＳＩＭＤインダイレクトメモリアクセス命令の場合のパイプラインとアドレス用インタフェース３１０の入出力信号変化を示す図である。
【図１４】ＳＩＭＤ幅が４のＳＩＭＤインダイレクトメモリアクセス命令の場合のパイプラインとアドレス用インタフェース回路３１０の入出力信号変化を示す図である。
【図１５】図６の１つのメモリアクセスパイプラインＥＡＧＡを有する場合の演算用インタフェース３３１とアドレス用インタフェース３１０の構成を示す図である。
【図１６】ＳＩＭＤ幅２の場合での後続するＲＳＡから投入されるメモリアクセスとの衝突を示す図である。
【図１７】ＳＩＭＤ幅４の場合での後続するＲＳＡから投入されるメモリアクセスとの衝突を示す図である。
【図１８】ＳＩＭＤ幅４の場合での後続するＳＩＭＤインダイレクトメモリアクセス命令のエントリの投入により生成されるメモリアクセス要求との衝突を示す図である。
【図１９】インダイレクトメモリアクセス要求の衝突を回避する抑止信号を生成する演算用インタフェース３３３の構成を示す図である。
【図２０】ＲＳＦとそのＳＩＭＤインダイレクトメモリアクセス命令のエントリの出力抑止回路を示す図である。
【図２１】ＲＳＡとその通常のメモリアクセス命令のエントリの出力抑止回路を示す図である。
【図２２】ＣＳＥ内の完了待ち合わせ回路を示す図である。
【発明を実施するための形態】
【００１４】
本実施の形態において１つの命令で複数のデータについて処理を行う命令をＳＩＭＤ命令（またはマルチデータ命令）と称する。ＳＩＭＤ命令は，例えばＳＩＭＤ幅の数のデータについてＳＩＭＤ幅の数の演算器が並列に処理を行い，ＳＩＭＤ幅の数のレジスタを１つのレジスタ単位とするＳＩＭＤレジスタに処理結果を格納する。
【００１５】
図１は，本実施の形態における演算処理装置が実現可能なインダイレクトメモリアクセス方式を説明する図である。図１は，ＳＩＭＤレジスタ３３２＿１に格納された複数の独立したデータをアドレスとして使用し，１つの命令でメモリ領域１４の複数箇所にアクセスするインダイレクトメモリアクセス方式である。図１の例では，ＳＩＭＤ幅が４の例であり，このようなインダイレクトメモリアクセスを行う命令を，ＳＩＭＤインダイレクトメモリアクセス命令と称する。
【００１６】
図１（Ａ）は，ＳＩＭＤインダイレクトロード命令（またはＳＩＭＤ間接ロード命令）の例であり，ＳＩＭＤレジスタ３３２＿１に格納された４つの独立したデータをアドレスとして利用し，メモリ１４の４つのアドレスADD_0-ADD_3のデータDATA_0-DATA_3を読み出し，別のＳＩＭＤレジスタ３３２＿２に書込む。このＳＩＭＤインダイレクトロード命令は，例えば次のように記述される。
load %f100 %f200
ここで，%f100はアドレスが格納されたＳＩＭＤレジスタ３３２＿１のレジスタ番号であり，%f200はデータを書込むＳＩＭＤレジスタ３３２＿２のレジスタ番号である。
【００１７】
図１（Ｂ）は，ＳＩＭＤインダイレクトストア命令（またはＳＩＭＤ間接ストア命令）の例であり，ＳＩＭＤレジスタ３３２＿１に格納された４つの独立したデータをアドレスとして利用し，別のＳＩＭＤレジスタ３３２＿３内のデータDATA_0-DATA_3をメモリ１４の４つのアドレスADD_0-ADD_3の領域に書き込む。このＳＩＭＤインダイレクトストア命令は，例えば次のように記述される。
store %f100 %f300
ここで，%f100はアドレスが格納されたＳＩＭＤレジスタ３３２＿１のレジスタ番号であり，%f300は書き込みデータが格納されたＳＩＭＤレジスタ３３２＿３のレジスタ番号である。
【００１８】
上記の場合，ＳＩＭＤレジスタ３３２＿１に４つの独立したアドレスを書き込む処理は，例えば４回のロード命令を実行することで行われる。または，メモリの連続するアドレスに４つの独立したアドレスを書き込んでおき，メモリの先頭アドレスをソースアドレスとするＳＩＭＤロード命令を実行することで行われる。
【００１９】
図２は，ブロックロード命令によるパイプライン処理の例を示す図である。ここでのブロックロード命令は，例えばメモリの連続領域のデータを複数の汎用レジスタに書き込む命令である。ブロックロード命令は，命令デコーダでデコードされると，命令デコーダが複数のメモリアクセス命令を生成し，その複数のメモリアクセス命令が，順次命令デコーダでデコードされ，メモリアクセス用リザベーションステーションにエントリされ，メモリアクセスされる。つまり，マルチフロー方式である。
【００２０】
したがって，４つのデータをメモリからロードする場合は，ブロックロード命令は４つのメモリアクセス命令に分割され，それぞれ命令デコードとリザベーションステーションへのエントリとメモリアクセスとが４回繰り返される。そのため，後続の演算命令は，４サイクルにわたりデコード待ち状態となる。
【００２１】
このようなブロックロード命令の手法を利用して上記のＳＩＭＤインダイレクトロード命令を実現しようとすると，同様に，命令デコードとリザベーションステーションへのエントリとインダイレクトロードの処理とを４回繰り返す必要があり，ＣＰＵコア内の資源を４サイクルにわたり占有し，後続の演算命令の命令デコードが可能になるのはマルチフローの最後の命令のデコードが完了した後になる。これでは，後続命令が依存関係のない命令の場合に利用可能なアウト・オブ・オーダの利点を生かすことができない。
【００２２】
［本実施の形態］
図３は，本実施の形態におけるＳＩＭＤインダイレクトメモリアクセス命令によるパイプライン処理を示す図である。本実施の形態のＳＩＭＤインダイレクトメモリアクセス命令では，１つのＳＩＭＤインダイレクトメモリアクセス命令を命令デコーダがデコードし，命令デコーダが１つの命令をＳＩＭＤリザベーションステーションにエントリし，４回のメモリアクセスを繰り返し実行する。したがって，命令デコーダは１サイクルで開放されるので，ＳＩＭＤインダイレクトメモリアクセス命令と依存関係のない後続の演算命令を，次のサイクルで命令デコードすることができる。したがって，アウト・オブ・オーダのメリットを生かすことができる。さらに，図３には示されていないが，１つのＳＩＭＤインダイレクトメモリアクセス命令をＳＩＭＤリザベーションステーションにエントリするので，リザベーションステーションに複数のエントリを使用する必要はなく，コミットスタックエントリのエントリも１つしか使用しないので，ＣＰＵコア内の資源を効率的に使用する。
【００２３】
図４は，本実施の形態における演算処理装置を搭載した情報処理装置を示す図である。コンピュータなどの情報処理装置１０は，ＣＰＵ/メモリボード１２と，大容量の記憶装置であるハードディスク１１とを有する。ＣＰＵ/メモリボード１２は，ＣＰＵチップである演算処理装置２０と，演算処理装置２０と外部のハードディスク１１などを接続するインタコネクト１３と，DRAM等のメモリ１４とを有する。
【００２４】
演算処理装置２０は，例えば，４つのＣＰＵコア（演算処理部）３０Ａ−３０Ｄと，４つのＣＰＵコアで共有される二次キャッシュ２４と，入出力インタフェース２６と，メインメモリ１４へのアクセスを制御するメモリアクセスコントローラ２８とを有する。
【００２５】
図５は，ＣＰＵコア３０の全体構成を示す図である。ＣＰＵコア３０は，分岐命令の予測を行う分岐予測部３０２と，プログラムカウンタPCと分岐予測部３０２の予測に基づいて命令フェッチアドレスを生成する命令フェッチアドレス生成器３０１と，一次命令キャッシュ３０３と，フェッチされた命令をデコードする命令デコーダ３０５と，レジスタリネーミング部３０６と，メモリアクセス用リザベーションステーションＲＳＡ（Reservation Station for Address generate）と，整数演算用リザベーションステーションＲＳＥ（Reservation Station for Execute）と，浮動小数点ＳＩＭＤリザベーションステーションＲＳＦ（Reservation Station for Floating）と，分岐用リザベーションステーションＲＳＢＲ（Reservation Station for Branch）と，コミットスタックエントリＣＳＥ（Commit Stack Entry）とを有する。
【００２６】
メモリアクセス用リザベーションステーションＲＳＡのメモリアクセスパイプラインＥＡＧＡは，アドレス用インタフェース３１０と，オペランドアドレス生成器３１１と，アドレス選択回路３１３と，一次データキャッシュ３１２とを有する。整数演算用リザベーションステーションＲＳＥの整数演算パイプラインＥＸＡは，演算用インタフェース３３３と，固定小数点演算器３２０と，固定小数点リネーミングレジスタ３２１と，固定小数点レジスタ３２２とを有する。
【００２７】
また，浮動小数点ＳＩＭＤリザベーションステーションＲＳＦの浮動小数点ＳＩＭＤ演算パイプラインＦＬＡは，演算用インタフェース３３３と，最大ＳＩＭＤ幅の数のＳＩＭＤ演算器３３０と，浮動小数点ＳＩＭＤリネーミングレジスタ３３１と，浮動小数点ＳＩＭＤレジスタ３３２とを有する。さらに，ＣＰＵコア３０は，２つのプログラムカウンタＰＣ，ＮＥＸＴＰＣを有する。また，ＣＰＵコア３０は，演算器３２０，３３０が生成したデータを一時的に格納するストアバッファＳＴＢを有する。
【００２８】
ＳＩＭＤ演算器３３０のＳＩＭＤ幅は，例えば２もしくは４を命令で指定可能である。浮動小数点ＳＩＭＤレジスタは最大ＳＩＭＤ幅の４つ要素で構成されている。これらのレジスタの要素をそれぞれ，要素０，要素１，要素２，要素３と呼ぶ。浮動小数点ＳＩＭＤ幅２の演算を行う場合，ＳＩＭＤレジスタの要素０と要素１を使用する。浮動小数点ＳＩＭＤ幅４の演算を行う場合，ＳＩＭＤレジスタのすべての要素を使用する。
【００２９】
メモリアクセスパイプラインＥＡＧＡ，整数演算パイプラインＥＸＡ，浮動小数点ＳＩＭＤ演算パイプラインＦＬＡは，それぞれ１つのパイプラインまたは２つ以上のパイプラインを有してもよく，それぞれ独立に命令を実行可能である。また，一次データキャッシュ３１２は，メモリアクセスパイプラインＥＡＧＡのパイプライン数が２の場合，それに合わせて，２つのポートを設け同時に最大２つのアドレスによりアクセスを行うことができるようにしてもよい。さらに，メモリアクセスパイプラインＥＡＧＡのパイプライン数を，最大ＳＩＭＤ幅と同じ４組にしてもよい。その場合は，一次データキャッシュ３１２も４つのポートを有して同時の最大４つのアドレスによりアクセスを行うことできるようにするのが望ましい。
【００３０】
命令フェッチアドレス生成器３０１は，分岐予測部３０２またはプログラムカウンタＰＣからの命令アドレスを選択し，一次命令キャッシュ３０３に対して命令フェッチリクエストを発行する。一次命令キャッシュ３０３は，命令フェッチリクエストに応じた命令を命令バッファ３０４に格納する。命令バッファ３０４から命令デコーダ３０５に対しては，プログラムにより指定された順番通りに，すなわちインオーダで命令が供給され，命令デコーダ３０５は，命令バッファから供給された命令をインオーダでデコードする。
【００３１】
命令デコーダ３０５は，デコードした命令の種類に応じて，各リザベーションステーションＲＳＡ，ＲＳＥ，ＲＳＦ及びＲＳＢＲのいずれかに，命令に対応する必要なエントリを作成する。これとともに命令デコーダ３０５はデコードされたすべての命令に対応するエントリをＣＳＥに作成する。
【００３２】
レジスタリネーミング部３０６は，リザベーションステーションＲＳＡ，ＲＳＥ，ＲＳＦのいずれかにエントリが作成された場合に，命令に応じた処理で使用されるレジスタのアドレスに，リネーミングレジスタ３２１，３３１のアドレスを割り当てる。
【００３３】
リザベーションステーションＲＳＡ，ＲＳＥ，ＲＳＦは，保持されたエントリのうち，処理に必要な資源（データ，演算器，レジスタ等）が準備されたものから順次パイプラインに出力し，後段のパイプラインＥＡＧＡ，ＥＸＡ，ＦＬＡに出力したエントリに対応する処理を実行させる。これにより，命令がアウト・オブ・オーダで実行される。
【００３４】
浮動小数点演算用リザベーションステーションＲＳＦには，例えば，ＳＩＭＤ演算命令に対応するエントリが格納される。１つのパイプラインＦＬＡはＳＩＭＤ幅の数のＳＩＭＤ演算器３３０を有する。ＳＩＭＤ演算器３３０はＲＳＦからのエントリに基づいて演算対象とするデータを選択し，ＳＩＭＤ幅の数のＳＩＭＤ演算器で演算を並列に実行する。演算結果は浮動小数点・ＳＩＭＤリネーミングレジスタ３３１に一時的に格納される。
【００３５】
メモリアクセス用リザベーションステーションＲＳＡには，命令デコーダ３０５によりＳＩＭＤインダイレクトメモリアクセス命令以外のメモリアクセス命令に対応するエントリが生成され，格納される。そして，ＲＳＡは格納されている複数のエントリのいずれかを選択してパイプラインに出力する。メモリアクセス命令のエントリがパイプラインに出力されると，そのエントリに対応するメモリアクセス要求がパイプラインの各ステージを順番に転送する。オペランドアドレス生成回路３１１は，ＲＳＡのエントリのメモリアクセス要求に基づいて演算対象とするデータを選択し，アドレスを生成し，生成されたアドレスを用いてメモリアクセス要求を一次データキャッシュ３１２に入力する。一次データキャッシュ３１２は，メモリアクセス要求に対するメモリアクセスを実行する。
【００３６】
コミットスタックエントリＣＳＥは，命令デコーダ３０５によりデコードされたすべての命令に対応するエントリを保持し，各エントリに対応する処理の実行状況を管理し，これらの命令をインオーダで完了させる。例えば，ＣＳＥは，次に完了させるべきエントリに対応する処理の結果が，固定小数点リネーミングレジスタ３２１および浮動小数点ＳＩＭＤリネーミングレジスタ３３１に格納されたと判定すると，格納されたデータを固定小数点レジスタ３２２または浮動小数点ＳＩＭＤレジスタ３３２に出力させる。これにより，各リザベーションステーションでアウト・オブ・オーダに実行された命令が，インオーダで完了する。
【００３７】
図５のＣＰＵコア３０では，固定小数点演算パイプラインＥＸＡはＳＩＭＤ構成になっていない。一方，浮動小数点演算パイプラインＦＬＡはＳＩＭＤ構成になっていて，最大ＳＩＭＤ幅の数のＳＩＭＤ演算器３３０を有する。しかし，固定小数点演算パイプラインＥＸＡもＳＩＭＤ構成になっていてもよい。
【００３８】
本実施の形態のＣＰＵコア３０は，浮動小数点ＳＩＭＤ演算パイプラインＦＬＡの演算用インタフェース３３３の出力信号をメモリアクセスパイプラインＥＡＧＡのアドレス用インタフェース３１０に供給してメモリアクセス命令を生成させるためのバス３３４と，ＳＩＭＤ演算器３３０が取得したアドレスをアドレス選択回路３１３に供給するためのバス３３５とを有する。アドレス用インタフェース３１０は，演算用インタフェース３３３の出力信号に基づいて生成したＳＩＭＤ幅の数のメモリアクセス命令をメモリアクセスパイプラインＥＡＧＡに出力する。また，アドレス選択回路３１３は，オペランドアドレス生成器３３１からのバスに代えて浮動小数点ＳＩＭＤ演算器３３０からのバス３３５を選択し，ＳＩＭＤ演算器３３０が浮動小数点ＳＩＭＤレジスタ３３２や浮動小数点ＳＩＭＤリネーミングレジスタ３３１から取得したアドレスを，前述のＳＩＭＤ幅のメモリアクセス命令と共に一次データキャッシュ３１２へ供給する。
【００３９】
［実施の形態のＳＩＭＤインダイレクトメモリアクセス命令を処理する構成と処理の概略］
図６は，本実施の形態のＳＩＭＤインダイレクトメモリアクセス（ロードまたはストア）命令を実行するＣＰＵコアの構成を示す図である。図６には，後述するパイプラインの各サイクルが括弧付きで示されている。
【００４０】
図６のＣＰＵコア３０は，メモリアクセス用リザベーションステーションＲＳＡ（またはメモリアクセスエントリ部）がメモリアクセス命令のエントリを出力する１つのメモリアクセスパイプラインＥＡＧＡを有する。また，浮動小数点ＳＩＭＤリザベーションステーションＲＳＦ（またはマルチデータ命令エントリ部）がＳＩＭＤ命令のエントリを出力するＳＩＭＤ演算パイプラインＦＬＡも１つ有する。そして，ＳＩＭＤ演算パイプラインＦＬＡは，最大ＳＩＭＤ幅４と同じ数の浮動小数点ＳＩＭＤ演算器３３０を有する。
【００４１】
本実施の形態のＳＩＭＤインダイレクトメモリアクセス命令の処理の概略は次のとおりである。命令デコーダ３０５は，ＳＩＭＤインダイレクトメモリアクセス命令をデコードして，そのエントリを浮動小数点ＳＩＭＤリザベーションステーションＲＳＦに生成する。ＲＳＦは，ＳＩＭＤインダイレクトメモリアクセス命令のエントリをＳＩＭＤ演算パイプラインＦＬＡに出力すると，それに応答してＳＩＭＤ演算パイプラインＦＬＡがバス３３４を介してＳＩＭＤ幅に対応した数のメモリアクセス要求をメモリアクセスパイプラインＥＡＧＡに生成する。具体的には，演算用インタフェース３３３が投入されたエントリのフラグ信号群を，バス３３４を介してアドレス用インタフェース３１０に供給し，アドレス用インタフェース３１０がそのフラグ信号群に基づいてメモリアクセスパイプラインＥＡＧＡに複数のメモリアクセス命令のアクセス要求を順次生成する。または，演算用インタフェース３３３がそのフラグ信号に基づいて複数のメモリアクセス命令のアクセス要求を順次生成し，バス３３４を介してアドレス用インタフェース３１０に供給してパイプラインＥＡＧＡに生成してもよい。
【００４２】
また，ＳＩＭＤインダイレクトメモリアクセス命令のエントリの投入または出力に応答して，ＳＩＭＤ幅の数のＳＩＭＤ演算器３３０は，ＳＩＭＤ幅の数のアドレスを浮動小数点ＳＩＭＤレジスタ３３２から並列に取得し，バス３３５を介してメモリアクセスパイプラインＥＡＧＡに供給する。具体的には，ＳＩＭＤ演算器３３０は，取得した複数のアドレスをバス３３５を経由して順次アドレス選択回路３１３に供給する。アドレス選択回路３１３は，バス３３５から供給される複数のアドレスを，先に生成された複数のメモリアクセス命令のアクセス要求のタイミングに合わせて選択し，一次データキャッシュ３１２に出力する。
【００４３】
具体的には，図６中の右上に示したとおり，アドレス選択回路３１３は，オペランドアドレス生成器３１１のアドレスフラグＡ＿ＥＡＧＡ＿ＡＤＤとバス３３５のいずれかを選択するセレクタＬ５を有する。そして，後述するようにＳＩＭＤインダイレクトメモリ命令のエントリがＳＩＭＤ演算用パイプラインＦＬＡに出力されたことに応答してアドレス用インタフェース３１０が生成するフラグ信号Ｂ１＿ＥＡＧＡ＿ＩＮＤＩＲＥＣＴの「１」により，セレクタＬ５はバス３３５側を選択し，バス３３５を経由して供給されるアドレスを選択し，アドレスフラグＡ＿ＥＡＧＡ＿ＡＤＤとして一次データキャッシュ３１２に転送する。これにより，アドレス用インタフェース３１０がＢ１サイクルのステージで生成したメモリアクセス要求の転送タイミングに整合して，Ｂ１サイクルのステージより後のＡサイクルのステージでバス３３５を介してアドレスが供給され，ＳＩＭＤインダイレクトメモリアクセス命令のアドレスを加えたメモリアクセス要求が一次データキャッシュ３１２に転送される。
【００４４】
一次データキャッシュ３１２は，ロード命令の場合は一次キャッシュ３１２からまたはメモリ１４から読み出した複数のデータを，浮動小数点ＳＩＭＤリネーミングレジスタ３３１に格納する。そして，コミットスタックエントリからの指令に応じて，読み出した複数のデータを浮動小数点ＳＩＭＤリネーミングレジスタ３３１から浮動小数点ＳＩＭＤレジスタ３３２に転送する。これらのレジスタ３３１，３３２は，ＳＩＭＤ幅の数のレジスタが一括してレジスタ番号で特定される。また，ストア命令の場合は，浮動小数点ＳＩＭＤレジスタ３３２に格納されている複数のデータを一次キャッシュ３１２またはメモリ１４に順次書き込む。
【００４５】
ＳＩＭＤインダイレクトメモリアクセス命令の処理の概略をより具体的に説明すると次の通りである。
【００４６】
まず，命令デコーダ３０５はＳＩＭＤインダイレクトメモリアクセス命令をデコードし，ＲＳＦ及びＣＳＥにエントリを作成する。ＣＳＥのエントリ番号（エントリされた命令識別情報）をＩＩＤと呼ぶ。演算やメモリアクセスの完了の際にＣＳＥにこのＩＩＤと完了信号を通知することにより，ＣＳＥは命令完了の判定を行う。エントリの作成と同時に，命令デコーダ３０５は，一次データキャッシュ３１２が管理する資源であるフェッチポートＦＰをＳＩＭＤ幅と同数の連続した個数確保する。フェッチポートＦＰは，一次データキャッシュがメモリアクセスを行う際に必要なメモリアドレスを記憶しておく資源であり，通常のメモリアクセス命令では１つのＦＰが確保される。ＳＩＭＤインダイレクトメモリアクセス命令ではＳＩＭＤ幅と同数のアドレスによりアクセスを行うため，複数のプリフェッチポートＦＰを使用する。
【００４７】
図７は，浮動小数点演算リザベーションステーションＲＳＦにエントリとして格納されるフラグ構成を示す図である。ＳＩＭＤインダイレクトメモリアクセス命令を実行するため，インダイレクトフラグＩＮＤＩＲＥＣＴとフェッチポートフラグＦＰが追加されている。ＩＮＤＩＲＥＣＴフラグはデコードした命令がＳＩＭＤインダイレクトメモリアクセス命令の場合に「１」となる。ＦＰフラグはデコード時に確保した先頭のＦＰ番号を示す。また，ＲＳＦには，これら以外にもＳＩＭＤ演算器３３０に演算種の指示を行うＯＰＣＯＤＥ，命令のＳＩＭＤ幅を識別する４ＳＩＭＤフラグ（幅が２なら「０」，４なら「１」），演算に使用するオペランドを示すＲ１＿ＡＤＲＳ，ＣＳＥのエントリ番号を示すＩＩＤなどを格納する。
【００４８】
ＲＳＦは，ＳＩＭＤインダイレクトメモリアクセス命令のエントリに必要な資源が準備され実行可能となると，浮動小数点ＳＩＭＤパイプラインＦＬＡの演算用インタフェース３３３にその命令のエントリを出力または投入する。
【００４９】
演算用インタフェース３３３は，ＲＳＦから出力された命令がＳＩＭＤインダイレクトメモリアクセス命令のエントリである場合，そのエントリのインダイレクト命令，ＳＩＭＤ幅，ＩＩＤ，ＦＰ，ＦＬＡの命令が有効か否かを示すバリッドのフラグ信号群を，バス３３４を介して，アドレス用インタフェース３１０に転送する。アドレス用インタフェース３１０はこのフラグ信号群に基づいて，メモリアクセスパイプラインＥＡＧＡに複数のメモリアクセス命令のメモリアクセス要求をシリアルに生成する。
【００５０】
上記の複数のメモリアクセス命令の生成と同時に，ＳＩＭＤ演算器３３０は，演算用インタフェース３３３からのフラグ信号に基づいて，ＳＩＭＤ幅の数のアドレスをＳＩＭＤレジスタ３３２から並列に読み出す。ＳＩＭＤレジスタ３３２のレジスタ番号は，ＳＩＭＤインダイレクトメモリアクセス命令のソースオペランドに示されている。ＳＩＭＤ演算器３３０は，ＳＩＭＤレジスタ３３２からのアドレスの読み出しが完了すると，その複数のアドレスをアドレス選択回路３１３にバス３３５を介して転送する。そして，アドレス用インタフェース３１０が，アドレス用インタフェース３１０がパイプラインＥＡＧＡに順次生成した複数のメモリアクセス要求と，バス３３５を介して転送されてきた複数のアドレスとを，タイミングを整合させて，アドレス選択回路３１３に転送する。すなわち，アドレス選択回路３１３は，オペランドアドレス生成器３３１からのアドレスに代えて，ＳＩＭＤ演算器３３０から供給されてきたアドレスを選択し，複数のアドレスを一次データキャッシュ３１２にシリアルに転送する。一次データキャッシュ３１２は，複数のアドレスそれぞれについてデータの読み出しまたはＳＩＭＤレジスタ内のデータの書き込みを行う。
【００５１】
一次データキャッシュ３１２は，データの読み出しを完了すると読み出したデータを浮動小数点ＳＩＭＤリネーミングレジスタに格納するとともに，ＣＳＥに読み出しが完了したエントリ識別情報ＩＩＤと完了通知を送る。データの書き込みの場合は，一次データキャッシュ３１２は，単にＣＳＥに書き込みが完了したエントリ識別情報ＩＩＤと完了通知を送る。ＣＳＥはエントリ識別情報ＩＩＤと完了通知によりＳＩＭＤ幅すべての要素の読み出しまたは書き込みが完了するのを待ち，ＳＩＭＤインダイレクトメモリアクセス命令を完了させる。
【００５２】
次に，演算用インタフェース３３３は，ＳＩＭＤインダイレクト命令のエントリに基づいて生成されるメモリアクセス要求が，後続のメモリアクセス命令のアクセス要求と衝突することを防止するために，ＲＳＡとＲＳＦに命令のエントリの出力を抑止する抑止信号を生成する。すなわち，第１に，演算用インタフェース３３３は，ＳＩＭＤインダイレクトメモリアクセス命令のエントリに応答して，抑止信号３３６をＲＳＡに出力し，ＲＳＡに，そのＳＩＭＤインダイレクトメモリアクセス命令に基づいてアドレス用インタフェース３１０で生成されるメモリアクセス要求と衝突する後続のメモリアクセス命令のエントリの出力を抑止させる。第２に，演算用インタフェース３３３は，ＳＩＭＤインダイレクトメモリアクセス命令のエントリに応答して，抑止信号３３７をＲＳＦに出力し，ＲＳＦに，後続のＳＩＭＤインダイレクトメモリアクセス命令のエントリの出力を抑止させる。これにより，先行するＳＩＭＤインダイレクトメモリアクセス命令によりアドレス用インタフェース３１０に生成された複数サイクルにわたるメモリアクセス要求と，後続のＳＩＭＤインダイレクトメモリアクセス命令に基づいて生成されるメモリアクセス要求とが衝突することを防止する。
【００５３】
図８，図９は，ＳＩＭＤインダイレクトロード命令と通常のロード命令の処理を示すフローチャートである。まず，命令フェッチ（S1），命令バッファに格納（S2），命令デコード（S3）が行われ，命令デコーダの結果，通常のロード命令の場合（S4のNO），工程S5以下の処理が行われ，ＳＩＭＤインダイレクトメモリアクセス命令の場合（S4のYES），工程S21以下の処理が行われる。
【００５４】
通常のロード命令の場合（S4のNO），命令デコーダ３０５は，フェッチポートＦＰを１つ確保し，ＲＳＡへロード命令のエントリを作成する（S5）。ＲＳＡは，ロード命令のエントリを投入する準備が完了したことを確認し（S6のYES），先行するＳＩＭＤインダイレクトメモリアクセス命令に基づいて生成されるメモリアクセス命令と衝突していない場合（S7のNO），ロード命令のエントリをメモリアクセスパイプラインＥＡＧＡに出力または投入する。
【００５５】
メモリアクセスパイプラインＥＡＧＡでは，オペランドアドレス生成器３１１が固定小数点レジスタ３２２などからデータを読み出し（S8），オペランドアドレス生成器３１１がアドレスを生成し（S9），アドレス選択回路３１３がオペランドアドレス生成器からのアドレスを選択する（S10）。そして，一次データキャッシュ３１２がそのアドレスを使用してデータを読み出す処理を実行する（S11）。一次データキャッシュ３１２が読み出したデータを浮動小数点ＳＩＭＤリネーミングレジスタに格納してその処理を完了すると（S12），通常のロード命令の場合は，ＣＳＥがフェッチポートFPを１個開放し，ＳＩＭＤリネーミングレジスタ３３１からＳＩＭＤレジスタ３３２に読み出しデータを転送する（S19）。
【００５６】
以上のように，通常のロード命令は，ＲＳＡにロード命令のエントリが生成され，メモリアクセスパイプラインＥＡＧＡのオペランドアドレス生成器３３１がアドレスの取得と生成を行い，一次データキャッシュへ３１２にロード要求を行う。
【００５７】
なお，連続するメモリアドレスに対するＳＩＭＤロード命令のエントリがＲＳＡに生成された場合は，オペランドアドレス生成器３１１がその先頭のアドレスを固定小数点レジスタ３２２などから読み出し，一次データキャッシュ３１２が連続する例えば２つのアドレスのデータを２つのＳＩＭＤリネーミングレジスタに格納する。ただし，この連続するメモリアドレスに対するＳＩＭＤロード命令は，本実施の形態における複数のＳＩＭＤレジスタ内の独立した複数のアドレスに対するＳＩＭＤインダイレクトメモリアクセス命令とは異なる命令である。
【００５８】
次に，ＳＩＭＤインダイレクトメモリアクセス命令の場合（S4のYES），命令デコーダはフェッチポートＦＰをＳＩＭＤ幅の個数確保し，ＲＳＦにＳＩＭＤ命令のエントリを生成する（S21）。ＲＳＦは，エントリを投入する準備が完了したことを確認し（S22のYES），先行するＳＩＭＤインダイレクトメモリアクセス命令に基づいて生成されるメモリアクセス命令と衝突していない場合（S23のNO），ＳＩＭＤインダイレクトメモリアクセス命令のエントリをＳＩＭＤ演算パイプラインＦＬＡに出力または投入する。
【００５９】
そして，ＳＩＭＤ演算パイプラインＦＬＡのＳＩＭＤ演算器３３０が，ＳＩＭＤ幅の数のアドレスをＳＩＭＤレジスタ３３２から並列に読み出す（S23）。この読み出しには後述するとおり２サイクルを要する。そして，この読み出しとともに，ＳＩＭＤ演算パイプラインＦＬＡの演算用インタフェース３３３がバス３３４を介してアドレス用インタフェース３１０にフラグ信号群を転送し，メモリアクセスパイプラインＥＡＧＡにメモリアクセスのリクエスト０を生成させる（S24）。生成されたリクエストはメモリアクセスパイプラインＥＡＧＡを転送する。さらに，ＳＩＭＤ演算器３３０はＳＩＭＤレジスタ３３２から取得したＳＩＭＤ幅の数のアドレスを，バス３３５を介してアドレス選択回路３１３に供給し（S35），アドレス選択回路３１３は，リクエスト０に基づきＳＩＭＤ演算器からのアドレスを選択し（S26），リクエスト０にフェッチポートＦＰを割り当てる（S27）。
【００６０】
上記の工程S23-S27を２回繰り返す。２回目はメモリアクセスのリクエスト１が生成される。さらに，ＳＩＭＤ幅が４の場合（S28のYES），工程S23-S27と同じ処理工程S29-S32を２回繰り返す。これによりメモリアクセスのリクエスト２，３が生成される。
【００６１】
そして，一次データキャッシュ３１２は，フェッチポートＦＰのアドレスを利用してデータを読み出す処理を実行開始する（S11）。ＣＳＥは，ＳＩＭＤ幅が２の場合は２回の一次データキャッシュの処理完了通知（S12,S14）に応答して，ＳＩＭＤ幅が４の場合は４回の一次データキャッシュの処理完了通知（S12,S14,S16,S17）に応答して，ＳＩＭＤ処理の完了を検出し，フェッチポートＦＰをＳＩＭＤ幅の個数開放し，ＳＩＭＤリネーミングレジスタ３３１からＳＩＭＤレジスタ３３２に読み出しデータを転送する（S20）。
【００６２】
以上のように，ＳＩＭＤインダイレクトロード命令の場合は，命令デコーダがＳＩＭＤインダイレクトロード命令を１回デコードし，命令デコーダがＲＳＦにＳＩＭＤインダイレクトロード命令のエントリを１つ生成し，ＳＩＭＤ演算パイプラインＦＬＡがメモリアクセスパイプラインＥＡＧＡにＳＩＭＤ幅の数のメモリアクセスのリクエストを生成し，複数のＳＩＭＤ演算器に複数のアドレスをＳＩＭＤレジスタから並列に取得させ，ＳＩＭＤ演算器が取得した複数のアドレスをメモリアクセスパイプラインＥＡＧＡに転送して複数のメモリアクセスのリクエストに合体させ，メモリアクセスパイプラインＥＡＧＡが一次データキャッシュへのロードリクエストを行う。ＳＩＭＤインダイレクトストア命令の場合も，一次データキャッシュがメモリにストアすることを除いて上記のロード命令と同じ動作である。
【００６３】
次に，本実施の形態のＳＩＭＤインダイレクトメモリアクセス命令のパイプライン処理を説明する。まず，ＳＩＭＤインダイレクトロード命令のパイプラインステージを以下に示す。図６に括弧付きで示したステージを参照することで以下のパイプラインステージが明らかになる。
Ｄ（Ｄｅｃｏｄｅ）：命令デコーダが命令をデコードする。
ＤＴ（Ｄｅｃｏｄｅ  Ｔｒａｎｓｆｅｒ）：Ｄサイクルの命令を転送し，ＲＳＦに格納する。
Ｐ（Ｐｒｉｏｒｉｔｙ）：ＲＳＦがＳＩＭＤ演算器へ投入する命令のエントリを決定し出力（投入）する。
ＰＴ（Ｐｒｉｏｒｉｔｙ  Ｔｒａｎｓｆｅｒ）：Ｐサイクルのエントリのフラグ信号群を，演算用インタフェースを介して転送し，ＳＩＭＤ演算器３３０に投入する。
Ｂ１，Ｂ２（Ｂｕｆｆｅｒ）：ＳＩＭＤ演算器が演算に必要なデータをレジスタから入力する。例えば，データは浮動小数点ＳＩＭＤレジスタ３３２やリネーミングレジスタ３３１から取得される。この例では取得に２サイクルを要する。
Ｘ（ｅＸｅｃｕｔｉｏｎ）：ＳＩＭＤ演算器がメモリアクセスに必要なデータを読み出す。
Ａ（Ａｄｄｒｅｓｓ）：ＳＩＭＤ演算器がメモリにアクセスするアドレスをアドレス選択回路３１３に転送する。
Ｔ（Ｔａｇ）：一次データキャッシュがアドレスに基づいてタグにアクセスする。
Ｍ（Ｍａｔｃｈ）：一次データキャッシュが読み出したキャッシュタグを比較する。
Ｂ（Ｂｕｆｆｅｒ）：一次データキャッシュから読み出したデータをバッファする。
Ｒ（Ｒｅｓｕｌｔ）：一次データキャッシュアクセスを完了する。
ＲＴ（Ｒｅｓｕｌｔ）：Ｒサイクルのデータを転送し，リネーミングレジスタへの書き込みを行い，ＣＳＥへ完了通知を行う。
Ｃ（Ｃｏｍｍｉｔ）：すべての要素が完了したかどうかの命令完了の判定を行う。
Ｗ（Ｗｒｉｔｅ）：完了した命令による各種レジスタの更新やリソースの解放を行う。このとき，浮動小数点ＳＩＭＤリネーミングレジスタ３３１からＳＩＭＤレジスタ３３２に読み出したデータを転送する。
【００６４】
ＳＩＭＤインダイレクトロード命令以外の通常ロード命令のパイプラインステージを以下に示す。
Ｄ（Ｄｅｃｏｄｅ）：命令をデコードする。
ＤＴ（Ｄｅｃｏｄｅ  Ｔｒａｎｓｆｅｒ）：Ｄサイクルの命令を転送し，ＲＳＡに命令のエントリを格納する。
Ｐ（Ｐｒｉｏｒｉｔｙ）：リザベーションステーションＲＳＡから実行ユニットへ投入する命令のエントリを決定し出力（投入）する。
Ｂ１，Ｂ２（Ｂｕｆｆｅｒ）：オペランドアドレス生成器がロードアドレス生成に必要なデータを決定しレジスタから入力する。
Ａ（Ａｄｄｒｅｓｓ）：オペランドアドレス生成器がメモリにアクセスするアドレスを計算する。
Ｔ（Ｔａｇ）：一次データキャッシュが計算したアドレスに基づいてタグにアクセスする。
Ｍ（Ｍａｔｃｈ）：一次データキャッシュが読み出したキャッシュタグを比較する。
Ｂ（Ｂｕｆｆｅｒ）：一次データキャッシュから読み出したデータをバッファする。
Ｒ（Ｒｅｓｕｌｔ）：一次データキャッシュアクセスを完了する。
ＲＴ（Ｒｅｓｕｌｔ）：Ｒサイクルのデータを転送し，リネーミングレジスタへの書き込みを行い，ＣＳＥへ完了通知を行う。
Ｃ（Ｃｏｍｍｉｔ）：命令完了の判定を行う。
Ｗ（Ｗｒｉｔｅ）：完了した命令による，各種レジスタの更新やリソースの解放を行う。このとき，リネーミングレジスタからレジスタに転送する。
【００６５】
図１０は，ＳＩＭＤインダイレクトメモリアクセスの一つであるＳＩＭＤインダイレクトロード命令のパイプライン及びタイムチャートを示す図である。
【００６６】
ＲＳＦは，タイミング３のＰサイクルでＳＩＭＤインダイレクトロード命令のエントリをＳＩＭＤ演算パイプラインＦＬＡに投入する。そして，タイミング５のＢ１サイクルで，演算用インタフェース３３３がＳＩＭＤインダイレクトロード命令のフラグ信号を出力する。
【００６７】
ＳＩＭＤ幅２のＳＩＭＤインダイレクトロード命令の場合は，ＳＩＭＤ演算パイプラインＦＬＡが，タイミング６において，アドレス用インタフェース３１０内のパイプラインＥＡＧＡにメモリアクセス用のリクエスト０を生成し，次のタイミング７において，リクエスト１を生成する。生成されたメモリアクセスのリクエストは，メモリアクセスパイプラインＥＡＧＡにて，ＳＩＭＤインダイレクトロード命令以外のロード命令におけるＢ１サイクルとなる。生成したメモリアクセスのエントリ識別情報ＩＩＤはＳＩＭＤ演算パイプラインＦＬＡから送られたものを使用し，フェッチポートＦＰはＳＩＭＤ演算パイプラインＦＬＡのＦＰの値とそれに１を加算した値を使用する。ＳＩＭＤ演算パイプラインＦＬＡのＳＩＭＤ演算器３３０が，タイミング７のＸ１サイクルでＳＩＭＤレジスタ（またはＳＩＭＤリネーミングレジスタ）から読み出した複数のデータのうち要素０を，タイミング８のＸ２サイクルでＳＩＭＤレジスタ（またはＳＩＭＤリネーミングレジスタ）から読み出した要素１をそれぞれシリアルにメモリアクセスパイプラインＥＡＧＡのアドレス選択回路３１３に転送する。タイミング８，９（Ａサイクル）で，アドレス選択回路３１３は，ＳＩＭＤ演算パイプラインＦＬＡから転送されてきた要素０と要素１のアドレスを選択し，一次データキャッシュ３１２に転送する。一次データキャッシュにアクセスしたデータすべてが存在した場合，一次データキャッシュ３１２は，タイミング１３，１４で読み出したデータをＳＩＭＤリネーミングレジスタ３３１に転送し，タイミング１４ですべてのメモリアクセスの完了報告を行う。その結果，ＣＳＥは，命令完了の判定を行い，ＳＩＭＤリネーミングレジスタ３３１のデータをＳＩＭＤレジスタ３３２に転送する。
【００６８】
また，ＳＩＭＤ幅４のＳＩＭＤインダイレクトロード命令の場合は，ＳＩＭＤ演算パイプラインＦＬＡが，タイミング６，７，８，９において，アドレス用インタフェース内のパイプラインＥＡＧＡにメモリアクセス用のリクエスト０，１，２，３をシリアルに生成する。生成された４つのメモリアクセスのリクエストは，メモリアクセスパイプラインＥＡＧＡにて，ＳＩＭＤインダイレクトロード命令以外のロード命令におけるＢ１サイクルとなる。生成したメモリアクセスのリクエストのエントリ識別情報ＩＩＤはＳＩＭＤ演算パイプラインＦＬＡから送られたものを使用し，フェッチポートＦＰはＳＩＭＤ演算パイプラインＦＬＡのＦＰ値とそれに１，２，３を加算した値を使用する。ＳＩＭＤ演算パイプラインＦＬＡのＳＩＭＤ演算器３３０が，タイミング７，８，９，１０のＸ１，Ｘ２，Ｘ３，Ｘ４サイクルでＳＩＭＤレジスタ（またはＳＩＭＤリネーミングレジスタ）から読み出したＳＩＭＤのデータのうち要素０と要素１と要素２と要素３をそれぞれ，シリアルにメモリアクセスパイプラインＥＡＧＡのアドレス選択回路３１３に転送する。タイミング８，９，１０，１１（Ａサイクル）で，アドレス選択回路３１３は，ＳＩＭＤ演算パイプラインＦＬＡから転送されてきたアドレスをそれぞれ選択し，一次データキャッシュ３１２に転送する。一次データキャッシュにアクセスしたデータすべてが存在した場合，一次データキャッシュ３１２は，タイミング１３，１４，１５，１６で読み出したデータをＳＩＭＤリネーミングレジスタ３３１に転送し，タイミング１６ですべてのメモリアクセスの完了報告を行う。その結果，ＣＳＥは，命令完了の判定を行い，ＳＩＭＤリネーミングレジスタ３３１のデータをＳＩＭＤレジスタ３３２に転送する。
【００６９】
以上，ＳＩＭＤインダイレクトロード命令について説明したが，ＳＩＭＤインダイレクトストア命令でも，ＳＩＭＤ演算パイプラインＦＬＡがメモリアクセスパイプラインＥＡＧＡにＳＩＭＤ幅の数のメモリアクセスのリクエストを生成することと，ＳＩＭＤ演算器がＳＩＭＤ幅の数のアドレスをＳＩＭＤレジスタから並列に取得してメモリアクセスパイプラインＥＡＧＡにシリアルに転送することと，一次データキャッシュにＳＩＭＤ幅の数のメモリストアのリクエストを投入することは同じである。ＳＩＭＤインダイレクトストア命令の場合は，一次データキャッシュはＳＩＭＤレジスタに格納されているＳＩＭＤ幅の数のデータを一次キャッシュメモリまたはメモリに書き込む。
【００７０】
［本実施の形態におけるＳＩＭＤインダイレクトメモリアクセスの詳細説明］
図１１は，本実施の形態のＳＩＭＤインダイレクトメモリアクセス（ロードまたはストア）命令を実行するＣＰＵコアの構成を示す図である。図１１のＣＰＵコアの構成におけるＳＩＭＤダイレクトメモリアクセスの詳細な説明を行う。
【００７１】
図１１のＣＰＵコア３０は，図６と異なり，メモリアクセス用リザベーションステーションＲＳＡ（またはメモリアクセスエントリ部）が，メモリアクセス命令のエントリを出力するメモリアクセスパイプラインとして，２つのパイプラインＥＡＧＡ，ＥＡＧＢを有する。それに対応して，一次データキャッシュ３１２は，２つのメモリアクセス要求を並列に処理する構成を有する。また，浮動小数点ＳＩＭＤリザベーションステーションＲＳＦ（またはマルチデータ命令エントリ部）が，ＳＩＭＤ命令のエントリを出力するＳＩＭＤ演算パイプラインとして，２つのパイプラインＦＬＡ，ＦＬＢを有する。そして，ＳＩＭＤ演算パイプラインＦＬＡ，ＦＬＢは，最大ＳＩＭＤ幅４と同じ数の浮動小数点ＳＩＭＤ演算器３３０を，それぞれ有する。浮動小数点ＳＩＭＤレジスタ３３２と浮動小数点ＳＩＭＤリネーミングレジスタ３３１は，最大ＳＩＭＤ幅４と同じ数のレジスタが一括してレジスタ番号で指定可能である。それ以外の構成は，図６と同じである。
【００７２】
したがって，ＳＩＭＤ演算パイプラインＦＬＡは，ＳＩＭＤインダイレクトアクセスメモリ命令のエントリに応答して，２つのメモリアクセス要求を２つのメモリアクセスパイプラインＥＡＧＡ，ＥＡＧＢに同時に生成することができ，ＳＩＭＤ演算器３３０は，ＳＩＭＤレジスタ３３２から取得した２つのアドレスを２つのメモリアクセスパイプラインＥＡＧＡ，ＥＡＧＢのアドレス選択回路３１３に並列に転送することができる。後述する図１３に示す通りである。
【００７３】
ＳＩＭＤ幅が２の場合は，ＳＩＭＤ演算パイプラインＦＬＡは，バス３３４を介して，１サイクルで２つのメモリアクセス要求を２つのパイプラインＥＡＧＡ，ＥＡＧＢに生成する。すなわち，演算用インタフェース３３３がフラグ信号群をバス３３４を介してアドレス用インタフェース３１０に転送し，アドレス用インタフェース３１０は，その転送されたフラグ信号群に基づいて，１サイクルで２つのメモリアクセス要求を２つのパイプラインＥＡＧＡ，ＥＡＧＢに生成する。そして，ＳＩＭＤ演算器３３０は，バス３３５を介して，１サイクルで２つのアドレスを２つのパイプラインＥＡＧＡ，ＥＡＧＢのアドレス選択回路３１３に転送する。アドレス選択回路３１３内のセレクタＬ５（図６参照）は，前述のとおり，インダイレクトフラグ信号Ｂ１＿ＥＡＧＡ＿ＩＮＤＩＲＥＣＴ，Ｂ１＿ＷＡＧＢ＿ＩＮＤＩＲＥＣＴの「１」により，バス３３５側を選択し，ＳＩＭＤ演算器３３０から供給される２つのアドレスを２つのパイプラインＥＡＧＡ，ＥＡＧＢに出力する。これにより，アドレス用インタフェース３１０が生成した２つのメモリアクセス要求に，アドレス選択回路３１３のサイクルＡのステージで，バス３３５から供給された２つのアドレスが加えられる。
【００７４】
また，ＳＩＭＤ幅が４の場合は，ＳＩＭＤ演算パイプラインＦＬＡは，２サイクルで４つのメモリアクセス要求を２つのパイプラインＥＡＧＡ，ＥＡＧＢに生成し，２サイクルで４つのアドレスを転送する。図１４に示すとおりである。
【００７５】
図８，図９のフローチャート図は，図１１のＣＰＵコアの構成にも適用できる。ただし，図１のＣＰＵコアは，２つのメモリアクセスパイプラインＥＡＧＡ，ＥＡＧＢを有するので，図８の工程S24-S27，工程S29-S32をそれぞれ１回行えば良い。
【００７６】
［演算用インタフェース３３１とアドレス用インタフェース３１０によるインダイレクトメモリアクセス要求の生成］
図１２は，演算用インタフェース３３１とアドレス用インタフェース３１０の構成を示す図である。演算用インタフェース３３１は，ＲＳＦから投入される演算命令のエントリから後段のＳＩＭＤ演算器３３０などに対して制御信号を適切なタイミングで出力する。同様に，アドレス用インタフェース３１０は，ＲＳＡから投入されるメモリアクセス命令のエントリから後段のオペランドアドレス生成器３１１などに対して制御信号を適切なタイミングで出力する。
【００７７】
アドレス用インタフェース３１０は，ＲＳＡから２つのパイプラインＥＡＧＡ，ＥＡＧＢに投入された，ＳＩＭＤインダイレクトメモリアクセス命令以外の通常メモリアクセス命令のエントリのフラグ信号を，ラッチ回路群F1_A，F1_Bでラッチし，後段のオペランドアドレス生成器３１１に転送する。一方，演算用インタフェース３３１は，ＲＳＦからＳＩＭＤ演算パイプラインＦＬＡに投入されたＳＩＭＤインダイレクトメモリアクセス命令のエントリのフラグ信号を，アドレス用インタフェース３１０にバス３３４を介して転送する。そして，アドレス用インタフェース３１０内のアンドゲートA1,A2，ラッチ回路群F2，F3，セレクタL1,L2,L3,L4，オアゲートアR1,R2，加算器ADD1,ADD2らの回路が，その転送されてきたフラグ信号に基づいて，２つのメモリアクセスパイプラインＥＡＧＡ，ＥＡＧＢに，それぞれメモリアクセスのリクエストを生成する。
【００７８】
図１２では，アドレス用インタフェース３１０が破線で囲まれた回路を有するように示されている。しかし，破線で囲まれた回路の一部を演算用インタフェース３３３が有するようにしてもよい。したがって，演算用インタフェース３３３とアドレス用インタフェース３１０とバス３３４の構成により，ＳＩＭＤ演算パイプラインＦＬＡが，２つのメモリアクセスパイプラインＥＡＧＡ，ＥＡＧＢに，それぞれメモリアクセスのリクエストを生成する。
【００７９】
図１２の各信号について説明する。
【００８０】
パイプラインＦＬＡ側のエントリのフラグ信号については，次の通りである。入力信号（バリッド信号）Ｂ１＿ＦＬＡ＿ＶＡＬＩＤ＿ＥＡＩＴＦは，浮動小数点・ＳＩＭＤパイプラインのＢ１サイクルでパイプラインＦＬＡのＳＩＭＤ演算器３３０に演算要求が出たときに１となる。
【００８１】
入力信号（インダイレクト信号）Ｂ１＿ＦＬＡ＿ＩＮＤＩＲＥＣＴ＿ＥＡＩＴＦは，浮動小数点・ＳＩＭＤパイプラインのＢ１サイクルで演算要求がＳＩＭＤインダイレクトメモリアクセス命令であった場合１となる。
【００８２】
入力信号（４ＳＩＭＤ信号）Ｂ１＿ＦＬＡ＿４ＳＩＭＤ＿ＥＡＩＴＦは，浮動小数点・ＳＩＭＤパイプラインのＢ１サイクルでＳＩＭＤ幅が４であるときに１となる。
【００８３】
入力信号（ＩＩＤ信号）Ｂ１＿ＦＬＡ＿ＩＩＤ＿ＥＡＩＴＦには，パイプラインＦＬＡで実行される命令のエントリの識別情報ＩＩＤが転送される。
【００８４】
入力信号（ＦＰ信号）Ｂ１＿ＦＬＡ＿ＦＰ＿ＥＡＩＴＦは，ＳＩＭＤインダイレクトメモリアクセス命令において命令デコーダ３０５で確保したフェッチポートＦＰの先頭の番号を転送する。
【００８５】
パイプラインＥＡＧＡ，ＥＡＧＢ側のエントリのフラグ信号については，次の通りである。入力信号（バリッド信号）Ｐ＿ＥＡＧＡ＿ＶＡＬＩＤ，Ｐ＿ＥＡＧＢ＿ＶＡＬＩＤは，ＲＳＡからオペランドアドレス生成器３３１及び一次データキャッシュ３１２へメモリアクセス要求が出力された時に１となる。
【００８６】
入力信号（ＦＰ信号）Ｐ＿ＥＡＧＡ＿ＦＰ，Ｐ＿ＥＡＧＢ＿ＦＰには，ＲＳＡからオペランドアドレス生成器３３１にメモリアクセス要求が出たとき，一次キャッシュメモリ３１２で使用するフェッチポート番号ＦＰ番号が転送される。
【００８７】
入力信号（ＩＩＤ信号）Ｐ＿ＥＡＧＡ＿ＩＩＤ，Ｐ＿ＥＡＧＢ＿ＩＩＤには，ＲＳＡからオペランドアドレス生成器３３１にメモリアクセス要求が出たとき，それぞれの要求に対応するエントリ識別情報ＩＩＤが転送される。
【００８８】
アドレス用インタフェース回路３１０は，ＳＩＭＤインダイレクトメモリアクセス命令のエントリがＳＩＭＤ演算パイプラインＦＬＡに投入された場合，演算用インタフェース３３３が出力するフラグ信号を用いて，メモリアクセスパイプラインＥＡＧＡ，ＥＡＧＢに２つもしくは４つのメモリアクセス要求を生成する。このメモリアクセス要求は，以下に説明する４つの出力信号Ｂ１＿ＥＡＧＡ＿＊＊＊と，４つの出力信号Ｂ１＿ＥＡＧＢ＿＊＊＊に対応する。また，アドレス用インタフェース回路３１０は，通常のメモリアクセス命令のエントリがメモリアクセスパイプラインＥＡＧＡ，ＥＡＧＢに投入された場合は，そのエントリのフラグ信号をそのままオペランドアドレス生成器３１１に転送する。
【００８９】
出力信号（バリッド信号）Ｂ１＿ＥＡＧＡ＿ＶＡＬＩＤ＿ＯＲは，オアゲートＲ１により出力され，ＲＳＦが投入したＳＩＭＤインダイレクトメモリアクセス命令により生成されたメモリアクセス要求と，ＲＳＡからの通常のメモリアクセス命令に対するメモリアクセス要求の論理和である。このバリッド信号が１であるとき，メモリアクセスパイプラインＥＡＧＡのオペランドアドレス生成器３１１及び一次データキャッシュ３１２へのメモリアクセス要求が有効となる。
【００９０】
出力信号（バリッド信号）Ｂ１＿ＥＡＧＢ＿ＶＡＬＩＤ＿ＯＲは，メモリアクセスパイプラインＥＡＧＢ側のバリッド信号であり，上記と同様である。
【００９１】
出力信号（インダイレクト信号）Ｂ１＿ＥＡＧＡ＿ＩＮＤＩＲＥＣＴ，出力信号Ｂ１＿ＥＡＧＢ＿ＩＮＤＩＲＥＣＴは，対応するバリッド信号Ｂ１＿ＥＡＧＡ＿ＶＡＬＩＤ＿ＯＲ，Ｂ１＿ＥＡＧＢ＿ＶＡＬＩＤ＿ＯＲ信号が１であるときに有効になる信号であり，メモリアクセス要求がＳＩＭＤインダイレクトメモリアクセス命令により生成されたことを示す。オアゲートＲ２が出力する。この信号は，後続のオペランドアドレス生成器３１１を経由してアドレス選択回路３１３に転送され，アドレス選択回路３１３においてＳＩＭＤ演算器３３０からバス３３５を介して転送されるアドレスを選択するために使用される。
【００９２】
出力信号（ＩＩＤ信号）Ｂ１＿ＥＡＧＡ＿ＩＩＤ，出力信号（ＩＩＤ信号）Ｂ１＿ＥＡＧＢ＿ＩＩＤは，対応するバリッド信号Ｂ１＿ＥＡＧＡ＿ＶＡＬＩＤ＿ＯＲ，Ｂ１＿ＥＡＧＢ＿ＶＡＬＩＤ＿ＯＲ信号が１であるときに有効になる信号である。ＳＩＭＤインダイレクトメモリアクセス命令である場合，セレクタＬ４が演算用インタフェース３３３から転送されてきた入力信号Ｂ１＿ＦＬＡ＿ＩＩＤ＿ＥＡＩＴＦのエントリ識別情報ＩＩＤを選択する。もしそうでない場合，セレクタＬ４は，ＲＳＡからのＩＩＤ信号Ｐ＿ＥＡＧＡ＿ＩＩＤ，Ｐ＿ＥＡＧＢ＿ＩＩＤを選択する。
【００９３】
出力信号（ＦＰ信号）Ｂ１＿ＥＡＧＡ＿ＦＰ，出力信号（ＦＰ信号）Ｂ１＿ＥＡＧＢ＿ＦＰは，対応するバリッド信号Ｂ１＿ＥＡＧＡ＿ＶＡＬＩＤ＿ＯＲ，Ｂ１＿ＥＡＧＢ＿ＶＡＬＩＤ＿ＯＲ信号が１であるときに有効になる信号である。ＳＩＭＤインダイレクトメモリアクセス命令の場合の場合で，ＳＩＭＤ幅が２である場合は，入力ＦＰ信号Ｂ１＿ＦＬＡ＿ＦＰ＿ＥＡＩＴＦで転送されてきたＦＰ値と，加算器ＡＤＤ２で＋１加算したＦＰ値とが，セレクタＬ３で選択され出力される。一方，ＳＩＭＤ幅が４である場合は，次のクロックサイクルで，入力ＦＰ信号Ｂ１＿ＦＬＡ＿ＦＰ＿ＥＡＩＴＦで転送されてきたＦＰ値に加算器ＡＤＤ１で＋２されたＦＰ値と，加算器ＡＤＤ２で＋１加算したＦＰ値とが，セレクタＬ３で選択され出力される。例えば，ＳＩＭＤ幅４であり，ＳＩＭＤインダイレクトメモリアクセス命令でありかつＦＰ信号Ｂ１＿ＦＬＡ＿ＦＰ＿ＥＡＩＴＦで転送された値が５であった場合，図１４のタイミング６でパイプラインＥＡＧＡに生成されたリクエストのＦＰ信号Ｂ１＿ＥＡＧＡ＿ＦＰは５，パイプラインＥＡＧＢに生成されたリクエストのＦＰ信号Ｂ１＿ＥＡＧＢ＿ＦＰは６，タイミング７でパイプラインＥＡＧＡに生成されたリクエストのＦＰ信号Ｂ１＿ＥＡＧＡ＿ＦＰは７，パイプラインＥＡＧＢに生成されたリクエストのＦＰ信号Ｂ１＿ＥＡＧＢ＿ＦＰは８になる。ＳＩＭＤインダイレクトメモリアクセス命令でない場合は，ＲＳＡからのＦＰ信号Ｐ＿ＥＡＧＡ＿ＦＰ，Ｐ＿ＥＡＧＢ＿ＦＰがそれぞれセレクタＬ３で選択される。
【００９４】
図１３は，ＳＩＭＤ幅が２のＳＩＭＤインダイレクトメモリアクセス命令の場合のパイプラインとアドレス用インタフェース３１０の入出力信号変化を示す図である。ＳＩＭＤ演算パイプラインＦＬＡの演算用インタフェース３３３が，タイミング５のサイクルＢ１で図１２の入力信号（Ｂ１＿ＦＬＡ＿＊＊＊）を出力し，アドレス用インタフェース３１０が，それらの入力信号に基づいてタイミング６で図１２の出力信号（Ｂ１＿ＥＡＧＡ＿＊＊＊，Ｂ１＿ＥＡＧＢ＿＊＊＊）によるメモリアクセス要求を生成する。
【００９５】
タイミング５の入力ＩＩＤ信号Ｂ１＿ＦＬＡ＿ＩＤＤ＿ＥＡＩＴＦ（＝２）がセレクタＬ１を介してラッチＦ２でラッチされ，タイミング６の出力ＩＩＤ信号Ｂ１＿ＥＡＧＡ＿ＩＩＤ，Ｂ１＿ＥＡＧＢ＿ＩＩＤが共に２になる。
【００９６】
タイミング５の入力バリッド信号Ｂ１＿ＦＬＡ＿ＶＡＬＩＤ＿ＥＡＩＴＦ（＝１）と入力インダイレクト信号Ｂ１＿ＦＬＡ＿ＩＮＤＩＲＥＣＴ＿ＥＡＩＴＦ（＝１）の論理積がアンドゲートＡ１を介してラッチＦ２でラッチされ，オアゲートＲ１，Ｒ２を介して，タイミング６の出力バリッド信号Ｂ１＿ＥＡＧＡ＿ＶＡＬＩＤ＿ＯＲ，Ｂ１＿ＥＡＧＢ＿ＶＡＬＩＤ＿ＯＲが共に１になり，出力インダイレクト信号Ｂ１＿ＥＡＧＡ＿ＩＮＤＩＲＥＣＴ，Ｂ１＿ＥＡＧＢ＿ＩＮＤＩＲＥＣＴも共に１になる。
【００９７】
そして，タイミング５の入力ＦＰ信号Ｂ１＿ＦＬＡ＿ＥＡＩＴＦ（＝４）がセレクタＬ２を介してラッチＦ２＿ＦＰでラッチされ，セレクタＬ３を介して，タイミング６の出力ＦＰ信号Ｂ１＿ＥＡＧＡ＿ＦＰ（＝４），Ｂ１＿ＥＡＧＢ＿ＦＰ（＝５）になる。
【００９８】
上記の動作により，ＳＩＭＤ演算用パイプラインＦＬＡは，演算用インタフェース３３３が出力するフラグ信号により，タイミング６で，アドレス用インタフェース３１０内の２つのメモリアクセスパイプラインＥＡＧＡ，ＥＡＧＢに，２つのメモリアクセス要求を生成する。
【００９９】
図１４は，ＳＩＭＤ幅が４のＳＩＭＤインダイレクトメモリアクセス命令の場合のパイプラインとアドレス用インタフェース回路３１０の入出力信号変化を示す図である。ＳＩＭＤ演算パイプラインＦＬＡの演算用インタフェース３３３が，タイミング５のサイクルＢ１で図１２の入力信号（Ｂ１＿ＦＬＡ＿＊＊＊）を出力し，アドレス用インタフェース３１０が，それらの入力信号に基づいて，タイミング６，７で図１２の出力信号（Ｂ１＿ＥＡＧＡ＿＊＊＊，Ｂ１＿ＥＡＧＢ＿＊＊＊）によるメモリアクセス要求を生成する。
【０１００】
タイミング５の演算用インタフェース３３３が出力する入力信号と，タイミング６でアドレス用インタフェース３１０内のメモリアクセスパイプラインＥＡＧＡ，ＥＡＧＢに生成される出力信号は，図１３のＳＩＭＤ幅２の場合と同じである。
【０１０１】
ただし，ＳＩＭＤ幅４の場合は，タイミング６のラッチＦ２の入力ＩＩＤ信号をセレクタＬ１を介してラッチＦ２が再度ラッチし，タイミング６のアンドゲートＡ１の出力と入力４ＳＩＭＤ信号Ｂ１＿ＦＬＡ＿４ＳＩＭＤ＿ＥＡＩＴＦのラッチ信号の論理積を，アンドゲートＡ２を介してラッチＦ３がラッチする。また，タイミング６の入力ＦＰ信号Ｂ１＿ＦＬＡ＿ＦＰ＿ＥＡＩＴＦの値に加算器ＡＤＤ１で＋２した値を，セレクタＬ２を介してラッチＦ２＿ＦＰがラッチする。それに対応して，タイミング７では，タイミング６と同様にして，メモリアクセスパイプラインＥＡＧＡ，ＥＡＧＢの出力バリッド信号，出力インダイレクト信号が１を維持し，出力ＩＩＤ信号が２を維持し，出力ＦＰ信号が６，７になる。
【０１０２】
上記の動作により，ＳＩＭＤ演算用パイプラインＦＬＡは，演算用インタフェース３３３の出力する信号により，タイミング６で，アドレス用インタフェース３１０内の２つのメモリアクセスパイプラインＥＡＧＡ，ＥＡＧＢに，２つのメモリアクセス要求を生成し，さらに，タイミング７でメモリアクセスパイプラインＥＡＧＡ，ＥＡＧＢにさらに２つのメモリアクセス要求を生成する。
【０１０３】
図１５は，図６の１つのメモリアクセスパイプラインＥＡＧＡを有する場合の演算用インタフェース３３１とアドレス用インタフェース３１０の構成を示す図である。ＳＩＭＤインダイレクトメモリアクセス命令の場合，図１２と異なり次のような動作になる。図１０も参照して説明する。
【０１０４】
まず，タイミング５の入力バリッド信号Ｂ１＿ＦＬＡ＿ＶＡＬＩＤ＿ＥＡＩＴＦと入力インダイレクト信号Ｂ１＿ＦＬＡ＿ＩＮＤＩＲＥＣＴ＿ＥＡＩＴＦの論理積が，アンドゲートＡ１を介して２つのラッチＦ２＿１でラッチされ，そのラッチＦ２＿１の出力がさらに次のタイミングでラッチＦ２＿２でラッチされ，タイミング６，７で，出力バリッド信号Ｂ１＿ＥＡＧＡ＿ＶＡＬＩＤ＿ＯＲと出力インダイレクト信号Ｂ１＿ＥＡＧＡ＿ＩＮＤＩＲＥＣＴが２サイクルにわたり１を出力する。
【０１０５】
ＳＩＭＤ幅が４の場合は，さらに，タイミング７のラッチＦ２＿２の出力と入力４ＳＩＭＤ信号のラッチＦ２＿２の出力の論理積が，アンドゲートＡ２を介してラッチＦ３＿１でラッチされ，そのラッチＦ３＿１の出力がさらに次のタイミングでラッチされ，タイミング８，９で，出力バリッド信号Ｂ１＿ＥＡＧＡ＿ＶＡＬＩＤ＿ＯＲと出力インダイレクト信号Ｂ１＿ＥＡＧＡ＿ＩＮＤＩＲＥＣＴが２サイクルにわたり１を出力する。
【０１０６】
タイミング５の入力ＩＩＤ信号Ｂ１＿ＦＬＡ＿ＩＩＤ＿ＥＡＩＴＦは，セレクタＬ１を介してラッチＦ２で４回ラッチされ，タイミング６，７，８，９でセレクタＬ４を介して出力ＩＩＤ信号Ｂ１＿ＥＡＧＡ＿ＩＩＤとして出力される。
【０１０７】
タイミング５の入力ＦＰ信号Ｂ１＿ＦＬＡ＿ＦＰ＿ＥＡＩＴＦは，セレクタＬ２を介してラッチＦ２＿ＦＰがラッチし，その後，３サイクルで加算器ＡＤＤ１でそれぞれ＋１したフェッチポートＦＰの値をラッチＦ２＿ＦＰがラッチする。そして，タイミング６，７，８，９で，出力ＦＰ信号Ｂ１＿ＥＡＧＡ＿ＦＰが，入力ＦＰ値，それに＋１，＋２，＋３されたＦＰ値になる。
【０１０８】
［衝突を回避するためのＲＳＡとＲＡＦによる新たなエントリ投入の抑止］
図１６，図１７は，ＳＩＭＤ幅２の場合と４の場合での後続するＲＳＡから投入されるメモリアクセスとの衝突を示す図である。いずれも，図１１の例で示している。
【０１０９】
本実施の形態では，ＲＡＦがＳＩＭＤインダイレクトメモリアクセス命令のエントリをＳＩＭＤ演算パイプラインＦＬＡに投入すると，ＳＩＭＤ演算パイプラインＦＬＡが，演算用インタフェース３３３が出力する信号を利用して，アドレス用インタフェース３１０内のメモリアクセスパイプラインＥＡＧＡ，ＥＡＧＢに複数のメモリアクセス要求を生成する。そのため，その生成されたメモリアクセス要求と後続のＲＳＡから投入されるメモリアクセス要求とが衝突する場合がある。図１１の例では，ＳＩＭＤ幅が２の場合は１回メモリアクセス要求が生成されるので１回衝突する場合があり，ＳＩＭＤ幅が４の場合は２回メモリアクセス要求が生成されるので２回衝突する場合がある。図６のメモリアクセスパイプラインＥＡＧＡが１つの例では，ＳＩＭＤ幅２では２回衝突し，ＳＩＭＤ幅４では４回衝突する場合がある。
【０１１０】
図１１の例で説明すると以下のとおりである。図１６，１７には衝突がＢ１への取消線で示されている。
【０１１１】
（１）図１６のＳＩＭＤ幅２の場合は，タイミング３でＲＳＦがパイプラインＦＬＡにＳＩＭＤ幅２のＳＩＭＤインダイレクトメモリアクセス命令のエントリを出力し，タイミング５でＲＳＡがパイプラインＥＡＧＡもしくはＥＡＧＢにメモリアクセス命令のエントリを出力した場合，タイミング６で，ＳＩＭＤインダイレクトメモリアクセス命令により生成されるメモリアクセス要求のサイクルＢ１の信号と，ＲＳＡから転送されるメモリアクセス要求のサイクルＢ１の信号が衝突する。
【０１１２】
（２）図１７のＳＩＭＤ幅４の場合は，タイミング３でＲＳＦがパイプラインＦＬＡにＳＩＭＤ幅４のインダイレクト命令のエントリを出力し，タイミング５もしくは６においてＲＳＡがパイプラインＥＡＧＡもしくはＥＡＧＢにメモリアクセス命令のエントリを出力した場合，次の衝突が発生する。
【０１１３】
すなわち，タイミング５でＲＳＡがパイプラインＥＡＧＡもしくはＥＡＧＢにメモリアクセス命令のエントリを出力した場合，タイミング６でＳＩＭＤインダイレクトメモリアクセス命令により生成されるメモリアクセス要求のサイクルＢ１の信号と，ＲＳＡから転送されるメモリアクセス要求のサイクルＢ１の信号が衝突する。
【０１１４】
また，タイミング６でＲＳＡがパイプラインＥＡＧＡもしくはＥＡＧＢにメモリアクセス命令のエントリを出力した場合，タイミング７でＳＩＭＤインダイレクトメモリアクセス命令により生成されるメモリアクセス要求のサイクルＢ１の信号と，ＲＳＡから転送されるメモリアクセス要求のサイクルＢ１の信号とが衝突する。
【０１１５】
図１８は，ＳＩＭＤ幅４の場合での後続するＳＩＭＤインダイレクトメモリアクセス命令のエントリの投入により生成されるメモリアクセス要求との衝突を示す図である。いずれも，図１１の２つのメモリアクセスパイプラインＥＡＧＡ，ＥＧＡＢを有する例で示している。
【０１１６】
本実施の形態では，ＳＩＭＤインダイレクトメモリアクセス命令のエントリの投入に応答して，ＳＩＭＤ演算パイプラインＦＬＡが，演算用インタフェース３３３が出力する信号を利用して，メモリアクセスパイプラインＥＡＧＡ，ＥＡＧＢにメモリアクセス要求を生成する。そのため，その生成されたメモリアクセス要求が，後続のＳＩＭＤインダイレクトメモリアクセス命令のエントリの投入に応答してメモリアクセスパイプラインＥＡＧＡ，ＥＡＧＢに生成されるメモリアクセス要求と衝突する場合がある。図１１の例では，ＳＩＭＤ幅が４の場合に２回メモリアクセス要求が生成されるので，後続のＳＩＭＤインダイレクトメモリアクセス命令に対応するメモリアクセス要求と，１回衝突する場合がある。図６の例では，ＳＩＭＤ幅２では１回衝突し，ＳＩＭＤ幅４では３回衝突する場合がある。
【０１１７】
図１１の例で説明すると図１８に示されるように以下のとおりである。図１８には衝突がＢ１への取消線で示されている。
【０１１８】
（３）タイミング３でＲＳＦがＳＩＭＤ幅４のＳＩＭＤインダイレクトメモリアクセス命令のエントリを出力し，タイミング４でＲＳＦがＳＩＭＤ幅２もしくは４のＳＩＭＤインダイレクトメモリアクセス命令のエントリを出力した場合，次のとおり衝突が発生する。すなわち，タイミング３でＲＳＦから出力された４ＳＩＭＤインダイレクトメモリアクセス命令により生成されたメモリアクセス要求のサイクルＢ１の信号と，次のタイミング４でＲＳＦから出力された２または４ＳＩＭＤインダイレクトメモリアクセス命令により生成されたメモリアクセス要求のサイクルＢ１の信号とが，タイミング７で衝突する。
【０１１９】
図１９は，インダイレクトメモリアクセス要求の衝突を回避する抑止信号を生成する演算用インタフェース３３３の構成を示す図である。演算用インタフェース３３３は，ＲＳＦが投入するＳＩＭＤインダイレクトメモリアクセス命令のエントリのＰサイクルのフラグ信号を入力し，ラッチ群Ｆ１０でラッチし，さらにラッチ群Ｆ１１でラッチする。それにより，演算用インタフェース３３３は，Ｐサイクルから２サイクル後のＢ１サイクルの出力信号を，ＳＩＭＤ演算パイプラインＦＬＡのＳＩＭＤ演算器３３０と，メモリアクセスパイプラインＥＡＧＡ，ＥＡＧＢのアドレス用インタフェース３１０に転送する。演算用インタフェース３３３が２つのラッチ群Ｆ１０，Ｆ１１を有するのは，例えば，タイミングを調整するためである。
【０１２０】
そして，演算用インタフェース３３３は，Ｐサイクルの３つのフラグ信号からＲＳＦへの後続のＳＩＭＤインダイレクトメモリアクセス命令のエントリの投入を抑止する抑止信号ＩＮＨ＿ＦＬＡ＿ＩＮＤＩＲＥＣＴ＿ＯＰと，ＰＴサイクルの２つのフラグ信号からとともに，Ｂ１サイクルの３つのフラグ信号からも，ＲＳＡへの後続のメモリアクセス命令の投入を抑止する抑止信号ＩＮＨ＿ＲＳＡ＿ＰＲＩＯＲＩＴＹを生成する。
【０１２１】
演算用インタフェース３３３の動作は次のとおりである。
【０１２２】
入力信号（バリッド信号）Ｐ＿ＦＬＡ＿ＶＡＬＩＤは，浮動小数点・ＳＩＭＤパイプラインのＰサイクルでパイプラインＦＬＡへのＳＩＭＤ演算器に演算要求が出力されたときに１となる。
【０１２３】
入力信号（インダイレクト信号）Ｐ＿ＦＬＡ＿ＩＮＤＩＲＥＣＴは，入力バリッド信号Ｐ＿ＦＬＡ＿ＶＡＬＩＤが１のときに有効となる信号であり，演算要求がＳＩＭＤインダイレクトメモリアクセス命令の場合に，浮動小数点・ＳＩＭＤパイプラインのＰサイクルで１となる。
【０１２４】
入力信号（４ＳＩＭＤ信号）Ｐ＿ＦＬＡ＿４ＳＩＭＤは，入力バリッド信号Ｐ＿ＦＬＡ＿ＶＡＬＩＤが１のときに有効となる信号であり，ＳＩＭＤ演算器の演算幅が４であるときに浮動小数点・ＳＩＭＤパイプラインのＰサイクルで１となる。
【０１２５】
入力信号（ＩＤＤ信号）Ｐ＿ＦＬＡ＿ＩＩＤは，入力バリッド信号Ｐ＿ＦＬＡ＿ＶＡＬＩＤが１のときに有効となる信号であり，パイプラインＦＬＡで実行される演算のＣＳＥのエントリ番号を示す。
【０１２６】
入力信号（ＦＰ信号）Ｐ＿ＦＬＡ＿ＦＰは，入力バリッド信号Ｐ＿ＦＬＡ＿ＶＡＬＩＤが１かつ入力インダイレクト信号Ｐ＿ＦＬＡ＿ＩＮＤＩＲＥＣＴが１のときに有効となる信号であり，ＳＩＭＤインダイレクトメモリアクセス命令において命令デコーダで確保された一次データキャッシュ内のフェッチポートＦＰの先頭番号を示す。
【０１２７】
演算用インタフェース３３３は，５つの入力信号をラッチＦ１０，Ｆ１１でラッチして中継し，５つの出力信号Ｂ１＿ＦＬＡ＿ＶＡＬＩＤ＿ＥＡＩＴＦ，Ｂ１＿ＦＬＡ＿ＩＮＤＩＲＥＣＴ＿ＥＡＩＴＦ，Ｂ１＿ＦＬＡ＿４ＳＩＭＤ＿ＥＡＩＴＦ，Ｂ１＿ＦＬＡ＿ＩＩＤ＿ＥＡＩＴＦ，Ｂ１＿ＦＬＡ＿ＦＰ＿ＥＡＩＴＦを，アドレス用インタフェース３１０に転送し，メモリアクセスのリクエストを生成させる。
【０１２８】
同様に，演算用インタフェース３３３は，４つの入力信号をラッチＦ１０，Ｆ１１でラッチして中継し，４つの出力信号Ｂ１＿ＦＬＡ＿ＶＡＬＩＤ，Ｂ１＿ＦＬＡ＿ＩＮＤＩＲＥＣＴ，Ｂ１＿ＦＬＡ＿４ＳＩＭＤ，Ｂ１＿ＦＬＡ＿ＩＩＤを，ＳＩＭＤ演算器に転送する。
【０１２９】
演算用インタフェース３３３では，アンドゲートＡ４がＰサイクルの２つの入力信号Ｐ＿ＦＬＡ＿ＶＡＬＩＤ，Ｐ＿ＦＬＡ＿ＩＮＤＩＲＥＣＴの論理積を後続の通常メモリアクセス命令の抑止信号ＩＮＨ＿ＲＳＡ＿ＰＲＩＯＲＩＴＹとして生成し，ＲＳＡに転送する。これにより，ＲＳＡは，後続のメモリアクセス命令のエントリのメモリアクセスパイプラインＥＡＧＡ，ＥＡＧＢへの投入を抑止する。
【０１３０】
図１６に示されるとおり，タイミング３のＰサイクルの２つの信号が全て１の場合に，タイミング４で抑止信号ＩＮＨ＿ＲＳＡ＿ＰＲＩＯＲＩＴＹが１になり，タイミング５においてＲＳＡがメモリアクセス命令のエントリのパイプラインＥＡＧＡ，ＥＡＧＢへの投入を抑止する。これにより，タイミング６でＢ１サイクルの信号が発生せず，衝突が回避される。
【０１３１】
さらに，演算用インタフェース３３３では，アンドゲートＡ５がＰサイクルの３つの入力信号Ｐ＿ＦＬＡ＿ＶＡＬＩＤ，Ｐ＿ＦＬＡ＿ＩＮＤＩＲＥＣＴ，Ｐ＿ＦＬＡ＿４ＳＩＭＤの論理積を後続の通常メモリアクセス命令の抑止信号ＩＮＨ＿ＲＳＡ＿ＰＲＩＯＲＩＴＹとして生成し，ＲＳＡに転送する。これにより，ＲＳＡは，後続のメモリアクセス命令のメモリアクセスパイプラインＥＡＧＡ，ＥＡＧＢへの投入を抑止する。
【０１３２】
図１７に示されるとおり，タイミング３のＰサイクルの３つの信号が全て１の場合に，タイミング５で抑止信号ＩＮＨ＿ＲＳＡ＿ＰＲＩＯＲＩＴＹが１になり，タイミング６においてＲＳＡがメモリアクセス命令のパイプラインＥＡＧＡ，ＥＡＧＢへの投入を抑止する。これにより，タイミング７でＢ１サイクルの信号が発生せず，衝突が回避される。図１７では，図１６と同様にして，タイミング４で抑止信号ＩＮＨ＿ＲＳＡ＿ＰＲＩＯＲＩＴＹが１になり，タイミング５におけるＲＳＡでのメモリアクセス命令の投入が抑止されている。
【０１３３】
そして，演算用インタフェース３３３では，アンドゲートＡ３がＰサイクルの３つの入力信号Ｐ＿ＦＬＡ＿ＶＡＬＩＤ，Ｐ＿ＦＬＡ＿ＩＮＤＩＲＥＣＴ，Ｐ＿ＦＬＡ＿４ＳＩＭＤの論理積を後続のＳＩＭＤインダイレクトメモリアクセス命令の抑止信号ＩＮＨ＿ＦＬＡ＿ＩＮＤＩＲＥＣＴ＿ＯＰとして生成し，ＲＳＦに転送する。これにより，ＲＳＦは，後続のＳＩＭＤインダイレクトメモリアクセス命令のエントリのＳＩＭＤ演算パイプラインＦＬＡへの投入を抑止する。
【０１３４】
図１８に示されるとおり，タイミング３のＰサイクルの３つの信号が全て１の場合に，抑止信号ＩＮＨ＿ＦＬＡ＿ＩＮＤＩＲＥＣＴ＿ＯＰが１になり，次のタイミング４においてＲＳＦがＳＩＭＤインダイレクトメモリアクセス命令のエントリのパイプラインＦＬＡへの投入を抑止する。これにより，タイミング７で生成されたＢ１サイクルの信号が発生せず，衝突が回避される。
【０１３５】
図２０は，ＲＳＦとそのＳＩＭＤインダイレクトメモリアクセス命令のエントリの出力抑止回路を示す図である。ＲＳＦは，例えば２０個のエントリ保持部３３７を有し，リザベーションステーションＲＳＦに生成された命令のエントリに対応するフラグが格納されている。フラグの例は図７に示されている。
【０１３６】
各エントリ保持部３３７に対応するＲＳＦエントリ出力条件検出回路３３８は，これらのフラグを用い，ＲＳＦ内のエントリそれぞれについてパイプラインへの出力可能条件が成立したことを検出する。このＲＳＦエントリ出力条件検出回路３３８は，ＲＳＦそれぞれに格納された命令のエントリが処理可能となった場合に１を出力し，出力が可能でない場合は０を出力する。
【０１３７】
抑止回路３３９は，演算用インタフェース３３３で生成された抑止信号ＩＮＨ＿ＦＬＡ＿ＩＮＤＩＲＥＣＴ＿ＯＰと，ＲＳＦのエントリ保持部３３７に格納されているＩＮＤＩＲＥＣＴフラグが共に１の場合に，出力条件検出回路３３８の出力を強制的に０にする。これにより，対応するＲＳＦエントリが出力可能であるか否かを示すＲＥＡＤＹ信号がラッチＲＳＦｘｘ＿ＲＥＡＤＹにラッチされる。ｘｘは００−１９である。
【０１３８】
ＦＬＡ出力選択回路３４０は，このＲＥＡＤＹ信号が１のＲＳＦエントリから，次に出力するＲＳＦエントリを選択し，演算用インタフェース３３３へ出力する。ただし，ＳＩＭＤインダイレクトメモリアクセス命令の場合は，ＩＮＤＩＲＥＣＴフラグが１になるので，抑止信号ＩＮＨ＿ＦＬＡ＿ＩＮＤＩＲＥＣＴ＿ＯＰが１となったとき，そのエントリのＲＥＡＤＹ信号が０となるため，ＦＬＡ出力選択回路３４０はそのＳＩＭＤインダイレクトメモリアクセス命令のエントリを選択することはない。ＳＩＭＤインダイレクトメモリアクセス命令以外の命令の場合は，ＩＮＤＩＲＥＣＴフラグが０になるので，エントリ出力条件検出回路３３８の出力がＲＥＡＤＹ信号として使用される。したがって，ＳＩＭＤインダイレクトメモリアクセス命令以外の命令については，必要な資源が準備されたエントリがあればその命令のエントリが出力される。これによりＲＳＦが，抑止信号ＩＮＨ＿ＦＬＡ＿ＩＮＤＩＲＥＣＴ＿ＯＰに応じて，ＳＩＭＤインダイレクトメモリアクセス命令のエントリの出力を抑止する。
【０１３９】
図２１は，ＲＳＡとその通常のメモリアクセス命令のエントリの出力抑止回路を示す図である。ＲＳＡは，例えば２０個のエントリ保持部３１４を有する。各エントリ保持部３１４に対応するＲＳＡエントリ出力条件検出回路３１５は，ＲＳＡエントリそれぞれについてパイプラインへの出力可能条件が成立したことを検出する。このＲＳＡエントリ出力条件検出回路３１５は，ＲＳＡそれぞれに格納された命令が処理可能となった場合に１を出力し，出力が可能でない場合は０を出力する。
【０１４０】
抑止回路３１６は，演算用インタフェース３３３で生成された抑止信号ＩＮＨ＿ＲＳＡ＿ＰＲＩＯＲＩＴＹが１の場合に，ＲＳＡエントリ出力条件検出回路３１５の出力を強制的に０にする。これにより，対応するＲＳＡエントリが出力可能であるか否かを示すＲＥＡＤＹ信号がラッチＲＳＡｘｘ＿ＲＥＡＤＹにラッチされる。
【０１４１】
ＥＡＧＡ／ＥＡＧＢ出力選択回路３１７は，ＲＥＡＤＹ信号が１のＲＳＡエントリから出力するＲＳＡエントリを選択し，メモリアクセスパイプラインＥＡＧＡまたはＥＡＧＢに出力し，アドレス用インタフェースへ転送する。抑止信号ＩＮＨ＿ＲＳＡ＿ＰＲＩＯＲＩＴＹが１のとき，ＲＳＡエントリ出力条件検出回路３１５から出力された値に関わらず，すべてのＲＳＡのＲＥＡＤＹ信号が０になる。これによりＥＡＧＡ／ＥＡＧＢ出力選択回路３１５は出力可能なエントリがないため，メモリリクエストをメモリアクセスパイプラインＥＡＧＡ，ＥＡＧＢにエントリを出力しない。これによりＲＳＡが，抑止信号ＩＮＨ＿ＲＳＡ＿ＰＲＩＯＲＩＴＹに応じて，メモリアクセス命令のエントリの出力を抑止する。
【０１４２】
図２２は，ＣＳＥ内の完了待ち合わせ回路を示す図である。図２２には，ＣＳＥの１つのエントリに対する完了待ち合わせ回路が示されている。
【０１４３】
まず，ＣＳＥのエントリにインダイレクトフラグＣＳＥ＿ＩＮＤＩＲＥＣＴが含まれている。ＣＳＥのエントリがＳＩＭＤインダイレクトメモリアクセス命令の場合，そのエントリのインダイレクトフラグＣＳＥ＿ＩＮＤＩＲＥＣＴが１になる。また，その命令が４ＳＩＭＤの場合に４ＳＩＭＤ信号ＣＳＥ＿４ＳＩＭＤが１になる。ＣＳＥにエントリされた命令がＳＩＭＤインダイレクトメモリアクセス命令であった場合，一次データキャッシュ３１２が同じＣＳＥのエントリ番号ＩＩＤに対して２ＳＩＭＤなら２回，４ＳＩＭＤなら４回の完了報告をＣＳＥに行う。
【０１４４】
入力信号（インダイレクト信号）ＣＳＥ＿ＩＮＤＩＲＥＣＴ，入力信号（４ＳＩＭＤ信号）ＣＳＥ＿４ＳＩＭＤは，命令デコーダ３０５によりＣＳＥに登録されたエントリのフラグである。入力信号ＣＳＥ＿ＩＮＤＩＲＥＣＴが１のときＣＳＥのエントリがＳＩＭＤインダイレクトメモリアクセス命令であることを示す。入力信号ＣＳＥ＿４ＳＩＭＤが１のとき，ＣＳＥのエントリのＳＩＭＤ幅が４であることを示し，０のときＳＩＭＤ幅が２であることを示す。
【０１４５】
本実施の形態の一次データキャッシュ３１２は，２つの独立したメモリアクセスを同時に処理する。そのため，一次データキャッシュ３１２は，メモリアクセス完了信号を２つ独立して通知する。
【０１４６】
入力信号ＲＴ＿ＳＴＶ＿０，ＲＴ＿ＳＴＶ＿１は一次データキャッシュから転送されるメモリアクセスの完了信号である。
【０１４７】
入力信号ＲＴ＿ＳＴＶ＿０＿ＣＳＥ＿ＳＥＬ，ＲＴ＿ＳＴＶ＿１＿ＣＳＥ＿ＳＥＬは，一次データキャッシュにおいて処理中のエントリ番号ＩＩＤが，ＣＳＥのエントリ番号と一致したとき１となる。
【０１４８】
ＲＴ＿ＳＴＶ＿０とＲＴ＿ＳＴＶ＿０＿ＣＳＥ＿ＳＥＬが１となったとき，もしくはＲＴ＿ＳＴＶ＿１とＲＴ＿ＳＴＶ＿１＿ＣＳＥ＿ＳＥＬが１となったとき，アンドゲートＡ８またはＡ９の出力により，ＣＳＥへのメモリアクセス完了報告が有効となる。メモリアクセス完了報告が有効になると，加算器３５１が３ビットの入力信号に＋１加算してメモリアクセス完了回数記憶素子３５３に出力する。
【０１４９】
命令デコードがＣＳＥにエントリを作成したときに，メモリアクセス完了回数記憶素子３５３を０にリセットする。その後，一次データキャッシュ３１２からの完了報告により，ＲＴ＿ＳＴＶ＿０とＲＴ＿ＳＴＶ＿０＿ＣＳＥ＿ＳＥＬ両方が１になった場合，もしくはＲＴ＿ＳＴＶ＿１とＲＴ＿ＳＴＶ＿１＿ＣＳＥ＿ＳＥＬ両方が１となった場合，加算器３５１がメモリアクセス完了回数を＋１加算する。
【０１５０】
メモリアクセス命令の種類により，メモリアクセス完了回数が規定の値（１，２，４回）となったとき，出力信号（完了信号）ＣＳＥ＿ＭＥＭ＿ＣＯＭＰが１となる。アンドゲートＡ６により，ＳＩＭＤインダイレクトメモリアクセス命令かつＳＩＭＤ幅が４の場合，４回のメモリアクセス完了が通知されたとき，加算器３５１のビット２の出力が１になり，完了信号ＣＳＥ＿ＭＥＭ＿ＣＯＭＰが１となる。ＳＩＭＤインダイレクトメモリアクセス命令かつＳＩＭＤ幅が２の場合，２回のメモリアクセス完了が通知されたとき，加算器３５１のビット１の出力が１になり，完了信号が１となる。そして，ＳＩＭＤインダイレクト命令でないメモリアクセス命令の場合は，１回メモリアクセス完了が通知されたとき，加算器３５１のビット０の出力が１になり，完了信号ＣＳＥ＿ＭＥＭ＿ＣＯＭＰが１となる。
【０１５１】
完了判定回路３５４は，この完了信号ＣＳＥ＿ＭＥＭ＿ＣＯＭＰを入力し，命令が完了可能となったことを示す信号を生成する。完了判定回路３５４は，処理が完了した命令をプログラムの順番に完了したと判定し，例えばリネーミングレジスタからレジスタに処理結果を転送し，エントリを開放する。
【０１５２】
以上の通り，本実施の形態によれば，ＳＩＭＤインダイレクトメモリアクセス命令のエントリをＲＳＦに生成し，そのエントリがＳＩＭＤ演算用パイプラインＦＬＡに出力されると，メモリアクセスパイプラインＥＡＧＡ，ＥＧＡＢにＳＩＭＤ幅に応じた数のメモリアクセスを生成し，ＳＩＭＤ演算器３３０が複数のＳＩＭＤレジスタ３３２に格納されている独立した複数のアドレスを取得てメモリアクセスパイプラインＥＡＧＡ，ＥＧＡＢに転送し，一次データキャッシュ３１２がその複数のアドレスを使用して複数のＳＩＭＤレジスタ３３２に格納されている複数のデータについてメモリアクセスを行う。したがって，命令デコーダやＣＳＥ，ＲＳＡ，ＲＳＦのエントリなどの資源を効率的に使用してＳＩＭＤインダイレクトメモリアクセス命令を実行する。
【０１５３】
以上の実施の形態をまとめると，次の付記のとおりである。
【０１５４】
（付記１）
命令をデコードする命令デコーダと，
前記命令デコーダによりメモリアクセス命令のエントリを生成されるメモリアクセスエントリ部と，
前記メモリアクセスエントリ部から出力された前記メモリアクセス命令のエントリをメモリに対して実行するメモリアクセスパイプラインと，
前記命令デコーダにより複数のデータを１つの命令で処理するマルチデータ命令のエントリを生成されるマルチデータ命令エントリ部と，
複数の演算器と複数のマルチデータ命令用レジスタとを有し，前記マルチデータ命令エントリ部から出力された前記マルチデータ命令のエントリの処理を前記複数の演算器により並列に処理し，前記複数のマルチデータ命令用レジスタに演算結果を格納する演算パイプラインとを有し，
前記演算パイプラインは，前記複数のマルチデータ命令用レジスタに格納されている複数のメモリアドレスについて前記メモリにメモリアクセスするマルチデータインダイレクトメモリアクセス命令のエントリの出力に応答して，前記メモリアクセスパイプラインに前記マルチデータインダイレクトメモリアクセス命令に対応する複数のメモリアクセス要求を生成し，前記複数の演算器が前記複数のマルチデータ命令用レジスタから取得した前記複数のメモリアドレスを前記メモリアクセスパイプラインに供給する演算処理装置。
【０１５５】
（付記２）
前記演算パイプラインは，前記メモリアクセスパイプラインの第１サイクルのステージに前記複数のメモリアクセス要求を生成し，前記メモリアクセスパイプラインの前記第１サイクルより後の第２サイクルのステージに前記複数のメモリアドレスを供給する
付記１に記載された演算処理装置。
【０１５６】
（付記３）
前記演算パイプラインは，前記メモリアクセスパイプラインに生成した複数のメモリアクセス要求のパイプライン転送タイミングにあわせて前記複数のメモリアドレスを供給する
付記２に記載された演算処理装置。
【０１５７】
（付記４）
さらに，前記メモリアクセスパイプラインに接続されたキャッシュユニットを有し，
前記演算パイプラインは，前記メモリアクセスパイプラインに生成する前記複数のメモリアクセス要求に前記キャッシュユニット内のアクセス先メモリアドレスを格納する複数のフェッチポートの識別情報を含める
付記１に記載された演算処理装置。
【０１５８】
（付記５）
前記演算パイプラインは，前記メモリアクセスパイプラインに，前記複数のメモリアクセス要求をシリアルに生成し，前記複数のメモリアドレスをシリアルに供給する
付記１，２，３のいずれかに記載された演算処理装置。
【０１５９】
（付記６）
前記メモリアクセスパイプラインが複数設けられ，
前記演算パイプラインは，前記複数のメモリアクセスパイプラインに，前記複数のメモリアクセス要求の少なくとも一部のメモリアクセス要求を並列に生成し，前記複数のメモリアドレスの少なくとも一部のアドレスを並列に供給する
付記１，２，３のいずれかに記載された演算処理装置。
【０１６０】
（付記７）
さらに，前記メモリアクセスパイプラインに接続されたキャッシュユニットを有し，
前記キャッシュユニットは，前記複数のメモリアクセス要求に応答して，前記複数のマルチデータ命令用レジスタとの間でデータ転送を行う
付記１に記載された演算処理装置。
【０１６１】
（付記８）
前記演算パイプラインは，前記メモリアクセスエントリ部に抑止信号を出力して，前記メモリアクセスエントリ部に，前記メモリアクセスパイプラインに生成する前記複数のメモリアクセス要求と衝突するメモリアクセス命令のエントリの出力を抑止させる
付記１に記載された演算処理装置。
【０１６２】
（付記９）
前記演算パイプラインは，前記マルチデータ命令エントリ部に抑止信号を出力して，前記マルチデータ命令エントリ部に，前記メモリアクセスパイプラインにシリアルに生成する前記メモリアクセス要求と衝突するマルチデータインダイレクトメモリアクセス命令のエントリの出力を抑止させる
付記５に記載された演算処理装置。
【０１６３】
（付記１０）
前記演算パイプラインに出力される前記マルチデータインダイレクトメモリアクセス命令のエントリは，マルチデータインダイレクトメモリアクセスを示すインダイレクトメモリアクセス信号と，前記複数のデータの数を示すマルチデータ幅情報信号とを有し，
前記演算パイプラインは，前記メモリアクセスパイプラインに，前記マルチデータ幅情報信号が示す数の前記メモリアクセス要求を生成し，前記マルチデータ幅情報信号が示す数の前記複数のメモリアドレスを供給する
付記１に記載された演算処理装置。
【０１６４】
（付記１１）
命令をデコードする命令デコーダと，
前記命令デコーダによりメモリアクセス命令のエントリを生成されるメモリアクセスエントリ部と，
前記メモリアクセスエントリ部から出力された前記メモリアクセス命令のエントリをメモリに対して実行するメモリアクセスパイプラインと，
前記命令デコーダにより複数のデータを１つの命令で処理するマルチデータ命令のエントリを生成されるマルチデータ命令エントリ部と，
複数の演算器と複数のマルチデータ命令用レジスタとを有し，前記マルチデータ命令エントリ部から出力された前記マルチデータ命令のエントリの処理を前記複数の演算器により並列に処理し，前記複数のマルチデータ命令用レジスタに演算結果を格納する演算パイプラインとを有する演算処理装置の制御方法において，
前記演算パイプラインが，前記複数のマルチデータ命令用レジスタに格納されている複数のメモリアドレスについて前記メモリにメモリアクセスするマルチデータインダイレクトメモリアクセス命令のエントリの投入に応答して，前記メモリアクセスパイプラインに前記マルチデータインダイレクトメモリアクセス命令に対応する複数のメモリアクセス要求を生成し，
前記演算パイプラインが，前記複数の演算器が前記複数のマルチデータ命令用レジスタから取得した前記複数のメモリアドレスを前記メモリアクセスパイプラインに供給する演算処理装置の制御方法。
【０１６５】
（付記１２）
前記演算パイプラインが，前記メモリアクセスパイプラインの第１サイクルのステージに前記複数のメモリアクセス要求を生成し，前記メモリアクセスパイプラインの前記第１サイクルより後の第２サイクルのステージに前記複数のメモリアドレスを供給する
付記１１に記載された演算処理装置の制御方法。
【符号の説明】
【０１６６】
３０１：命令フェッチアドレス生成器
３０２：分岐予測機構
３０３：一次命令キャッシュ
３０４：命令バッファ
３０５：命令デコーダ
３０６：レジスタリネーミング部
ＲＳＡ：メモリアクセス用リザベーションステーション（アドレス生成リザベーションステーション），メモリアクセスエントリ部
３１０：アドレス用インタフェース
３１１：オペランドアドレス生成器
３１２：一次データキャッシュ
３１３：アドレス選択回路
ＥＡＧＡ，ＥＡＧＢ：オペランドアドレス生成器，メモリアクセスパイプライン
ＳＴＢ：ストアバッファ
ＲＳＥ：固定小数点演算用リザベーションステーション
３２０：固定小数点演算器
３２２：固定小数点レジスタ
３２１：固定小数点リネーミングレジスタ
ＲＳＦ：浮動小数点演算用リザベーションステーション，マルチデータ命令エントリ部
３３０：浮動小数点ＳＩＭＤ演算器，マルチデータ命令用演算器
３３２：浮動小数点ＳＩＭＤレジスタ，マルチデータ命令用レジスタ
３３１：浮動小数点ＳＩＭＤリネーミングレジスタ
３３３：演算用インタフェース
ＦＬＡ，ＦＬＢ：浮動小数点ＳＩＭＤ演算パイプライン，ＳＩＭＤ演算パイプライン
ＣＳＥ：コミットスタックエントリ
ＲＳＢＲ：分岐用リザベーションステーション
ＰＣ：プログラムカウンタ
【図１】
2015203950.tif 000003
【図２】
2015203950.tif 000004
【図３】
2015203950.tif 000005
【図４】
2015203950.tif 000006
【図５】
2015203950.tif 000007
【図６】
2015203950.tif 000008
【図７】
2015203950.tif 000009
【図８】
2015203950.tif 000010
【図９】
2015203950.tif 000011
【図１０】
2015203950.tif 000012
【図１１】
2015203950.tif 000013
【図１２】
2015203950.tif 000014
【図１３】
2015203950.tif 000015
【図１４】
2015203950.tif 000016
【図１５】
2015203950.tif 000017
【図１６】
2015203950.tif 000018
【図１７】
2015203950.tif 000019
【図１８】
2015203950.tif 000020
【図１９】
2015203950.tif 000021
【図２０】
2015203950.tif 000022
【図２１】
2015203950.tif 000023
【図２２】
2015203950.tif 000024