(57)【要約】      （修正有）【課題】SIMD処理の並列度を高めることと非SIMD処理の自由度を高めることをハードウエア規模の拡大を抑制しつつ実現する。【解決手段】演算処理装置は単数のデータを個別に又は複数データを並列に処理する３個以上の複数の演算器と，複数の演算器それぞれに対応して設けられる複数の格納先レジスタ群と，複数のリネーミングレジスタ群と，レジスタリネーミング部とを有し，格納先レジスタ群とリネーミングレジスタ群を有するレジスタのセットが，マルチデータ命令の演算と非マルチデータ命令の演算で使用される基本レジスタセットに加え，マルチデータ命令の演算と非マルチデータ命令の演算で使用する第１拡張レジスタセットと，マルチデータ命令の演算で使用し且つ非マルチデータ命令の演算で使用しない第２拡張レジスタセットとを有し，レジスタリネーミング部が，基本レジスタセットの対応関係と第１拡張レジスタセットの対応関係とを記憶する。【選択図】図９
2015191463.tif 000002
【特許請求の範囲】
【請求項１】
命令をデコードする命令デコーダと，
前記命令デコーダがデコードした命令が，複数のデータを１つの命令で並列処理するマルチデータ命令の場合に，前記複数のデータを並列に処理し，単数のデータを１つの命令で処理する非マルチデータ命令の場合に，前記単数のデータを個別に処理する３個以上の複数の演算器と，
前記複数の演算器それぞれに対応して設けられ，前記演算器の演算結果を格納可能な複数の格納先レジスタ群と，
前記複数の演算器それぞれに対応して設けられ，前記演算結果を格納可能な複数のリネーミングレジスタ群と，
前記格納先レジスタ群のうち命令により指定された指定格納先レジスタと，前記リネーミングレジスタ群から割り当てられた割当リネーミングレジスタとの対応関係を記憶するレジスタリネーミング部とを有し，
前記格納先レジスタ群と前記リネーミングレジスタ群を有するレジスタのセットが，前記マルチデータ命令の演算と前記非マルチデータ命令の演算で使用される基本レジスタセットに加えて，前記マルチデータ命令の演算と前記非マルチデータ命令の演算で使用される第１拡張レジスタセットと，前記マルチデータ命令の演算で使用され且つ前記非マルチデータ命令の演算で使用されない第２拡張レジスタセットとを有し，
前記レジスタリネーミング部が，前記基本レジスタセットの前記対応関係と，前記第１拡張レジスタセットの前記対応関係とを記憶する演算処理装置。
【請求項２】
前記基本レジスタセットの前記対応関係または前記第１拡張レジスタセットの前記対応関係は，前記第２拡張レジスタセットの前記対応関係と共通である請求項１に記載の演算処理装置。
【請求項３】
更に，
前記命令デコーダがデコードした命令を，前記命令の順番にかかわらず，前記演算器に出力するリザベーションステーションと，
前記割当リネーミングレジスタに格納された前記演算結果を，前記命令の順番に，前記割当リネーミングレジスタに対応する前記指定格納先レジスタに格納するよう制御するコミットスタックエントリとを有する請求項１または２に記載の演算処理装置。
【請求項４】
前記命令デコーダは，前記マルチデータ命令をデコードした場合，前記基本レジスタセットの前記対応関係と前記第１拡張レジスタセットの前記対応関係とを決定し，前記非マルチデータ命令をデコードした場合，前記基本レジスタセットの前記対応関係または前記第１拡張レジスタセットの対応関係を決定し，
前記マルチデータ命令の演算で使用される前記第２拡張レジスタセットの前記対応関係は，前記前記基本レジスタセットの前記対応関係または前記第１拡張レジスタセットの対応関係と同じである請求項１または２に記載の演算処理装置。
【請求項５】
前記複数の演算器は，前記マルチデータ命令を実行した場合，前記基本レジスタセットと前記第１拡張レジスタセットと前記第２拡張レジスタセット内の前記割当リネーミングレジスタに前記演算結果を格納し，
前記複数の演算器のいずれかは，前記非マルチデータ命令を実行した場合，前記基本レジスタセットまたは前記第１拡張レジスタセット内の前記割当リネーミングレジスタに前記演算結果を格納する請求項１または２に記載の演算処理装置。
【請求項６】
命令をデコードする命令デコーダと，
前記命令デコーダがデコードした命令が，複数のデータを１つの命令で並列処理するマルチデータ命令の場合に，前記複数のデータを並列に処理し，単数のデータを１つの命令で処理する非マルチデータ命令の場合に，前記単数のデータを個別に処理する３個以上の複数の演算器と，
前記複数の演算器それぞれに対応して設けられ，前記演算器の演算結果を格納可能な複数の格納先レジスタ群と，
前記複数の演算器それぞれに対応して設けられ，前記演算結果を格納可能な複数のリネーミングレジスタ群と，
前記格納先レジスタ群のうち命令により指定された指定格納先レジスタと，前記リネーミングレジスタ群から割り当てられた割当リネーミングレジスタとの対応関係を記憶するレジスタリネーミング部とを有する演算処理装置の制御方法であって，
前記マルチデータ命令を実行する場合，前記複数の格納先レジスタ群と前記複数のリネーミングレジスタ群とを使用する工程と，
前記非マルチデータ命令を実行する場合，前記複数の格納先レジスタ群内の基本格納先レジスタ群と，複数の拡張格納先レジスタ群の第１拡張格納先レジスタ群と，前記複数のリネーミングレジスタ群内の基本リネーミングレジスタ群と複数の拡張リネーミングレジスタ群の第１拡張リネーミングレジスタ群とを使用する工程を有する演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
演算処理装置であるCPU（Central Processing Unit）は，様々な高速化処理技術を採用する。高速化処理技術の一例として，例えば，連続する命令を複数のステージまたはサイクルに分けて順次処理するパイプライン処理方式，演算処理を並列に実行可能にするスーパースカラ方式，プログラムが指定する順番通り，すなわち，命令をインオーダに実行せず，命令実行に必要な入力データや演算器などの準備がそろった命令から実行を行うアウトオブオーダ実行方式などがある。
【０００３】
そして，アウトオブオーダ実行方式において，命令の実行が完了した出力データをリネーミングレジスタに一時的に格納し，処理順序が先の命令が完了した時点で命令が演算結果を保持するレジスタとして指定するデスティネーションレジスタに格納するレジスタリネーミング技術がある。
【０００４】
さらに，複数の処理を並列に行うことで処理を高速化する技術として，１命令で複数のデータの処理を並列に実行する処理方式として，SIMD（Single Instruction Multiple Data)処理方式がある。SIMD処理方式を実現するCPUは，１命令で４つのデータの処理を並列に行う4-SIMDの場合，１つの命令コード（オペコード）をデコードし，同じアドレスで指定されたソース側の第１〜第４のレジスタからデータ（ソースオペランドデータ）をそれぞれ読み出し，第１〜第４の演算器にそれぞれ入力し，それらの４つの演算結果をデスティネーション先（格納先）の第１〜第４のレジスタにそれぞれ出力する。
【０００５】
アウトオブオーダ方式とSIMD処理方式を取り入れたCPUは，アウトオブオーダ方式のために，処理結果を最終的に格納するレジスタとして命令が指定するデスティネーションレジスタ（格納先レジスタ）に加えて，一時的に処理結果を格納するリネーミングレジスタを有し，SIMD処理方式のために，演算器と，デスティネーションレジスタと，リネーミングレジスタと，デスティネーションレジスタとリネーミングレジスタの対応付けを記憶するレジスタリネーミング部を含むセットを，SIMDで並列処理可能な数のセットだけ有する。
【０００６】
アウトオブオーダ方式とSIMD方式を取り入れたCPUについては，例えば，以下の特許文献に記載されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１１−３４４５０号公報
【特許文献２】特開２００７−２３４０１１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
アウトオブオーダ方式とSIMD処理方式を取り入れたCPUは，１つの命令で複数のデータを処理するSIMD命令（またはマルチデータ命令と称する）を処理するために拡張して設けられている演算器やレジスタを，１命令で１つのデータを処理する非SIMD命令（または非マルチデータ命令と称する）を実行する場合にも，有効に利用することが望ましい。ハードウエアリソースを有効に活用することで，より多くの非SIMD命令（または非マルチデータ命令）を処理することができるからである。
【０００９】
しかしながら，SIMD命令（またはマルチデータ命令）を処理するために設けられた複数セットの演算器，デスティネーションレジスタ，リネーミングレジスタ，レジスタリネーミング部を，全て，非SIMD命令の処理でも利用できるようにハードウエアリソース利用の自由度を高めようとすると，ハードウエア回路の回路量が大規模化する。特に，レジスタの対応関係を記憶するレジスタリネーミング部の回路量の増大は，SIMD命令（マルチデータ命令）を処理する場合にレジスタリネーミング部のマップが全てのレジスタの対応関係を参照する必要はないので，無視できない。
【００１０】
すなわち，SIMD処理の並列度をより高くすることで，大量のデータを演算する命令を実行するアプリケーションの処理を高速化することができるが，同時に非SIMD命令（非マルチデータ命令）の処理に対するハードウエアリソース利用の高い自由度を確保しようとすると，ハードウエア回路の規模が大規模化する。したがって，SIMD処理の並列度をより高くすると共に，ハードウエア回路の規模をリーズナブルなレベルに抑制することが必要になる。
【００１１】
そこで，本発明の目的は，SIMD処理の並列度を高めることと非SIMD処理の自由度を高めることをハードウエア規模の拡大を抑制しつつ実現する演算処理装置と演算処理装置の制御方法を提供することにある。
【課題を解決するための手段】
【００１２】
本実施の形態の第１の側面は，命令をデコードする命令デコーダと，
前記命令デコーダがデコードした命令が，複数のデータを１つの命令で並列処理するマルチデータ命令の場合に，前記複数のデータを並列に処理し，単数のデータを１つの命令で処理する非マルチデータ命令の場合に，前記単数のデータを個別に処理する３個以上の複数の演算器と，
前記複数の演算器それぞれに対応して設けられ，前記演算器の演算結果を格納可能な複数の格納先レジスタ群と，
前記複数の演算器それぞれに対応して設けられ，前記演算結果を格納可能な複数のリネーミングレジスタ群と，
前記格納先レジスタ群のうち命令により指定された指定格納先レジスタと，前記リネーミングレジスタ群から割り当てられた割当リネーミングレジスタとの対応関係を記憶するレジスタリネーミング部とを有し，
前記格納先レジスタ群と前記リネーミングレジスタ群を有するレジスタのセットが，前記マルチデータ命令の演算と前記非マルチデータ命令の演算で使用される基本レジスタセットに加えて，前記マルチデータ命令の演算と前記非マルチデータ命令の演算で使用される第１拡張レジスタセットと，前記マルチデータ命令の演算で使用され且つ前記非マルチデータ命令の演算で使用されない第２拡張レジスタセットとを有し，
前記レジスタリネーミング部が，前記基本レジスタセットの前記対応関係と，前記第１拡張レジスタセットの前記対応関係とを記憶する演算処理装置である。
【発明の効果】
【００１３】
第１の側面によれば，SIMD処理の並列度を高めることと非SIMD処理の自由度を高めることをハードウエア規模の拡大を抑制しつつ実現することができる。
【図面の簡単な説明】
【００１４】
【図１】本実施の形態における演算処理装置を搭載した情報処理装置を示す図である。
【図２】本実施の形態におけるCPUコア（演算処理部）の構成を示す図である。
【図３】2-SIMD構成における非SIMD命令のレジスタリネーミング処理を示す図である。
【図４】2-SIMD構成におけるSIMD命令のレジスタリネーミング処理を示す図である。
【図５】2-SIMD構成における非SIMD命令の別のレジスタリネーミング処理を示す図である。
【図６】2-SIMD構成におけるSIMD命令の別のレジスタリネーミング処理を示す図である。
【図７】3-SIMD構成における非SIMD命令の別のレジスタリネーミング処理を示す図である。
【図８】3-SIMD構成におけるSIMD命令の別のレジスタリネーミング処理を示す図である。
【図９】本実施の形態におけるCPUコアの構成を示す図である。
【図１０】第１の実施の形態における3-SIMD構成における非SIMD命令のレジスタリネーミング処理を示す図である。
【図１１】第１の実施の形態における3-SIMD構成におけるSIMD命令のレジスタリネーミング処理を示す図である。
【図１２】第２の実施の形態における3-SIMD構成におけるSIMD命令のレジスタリネーミング処理を示す図である。
【図１３】本実施の形態における浮動小数点SIMD演算命令を実行する場合のパイプライン処理を説明する図である。
【図１４】本実施の形態における浮動小数点SIMD演算命令を実行する場合のパイプライン処理を説明する図である。
【図１５】本実施の形態における非SIMD演算命令を実行する場合のパイプライン処理を説明する図である。
【図１６】本実施の形態における非SIMD演算命令を実行する場合のパイプライン処理を説明する図である。
【発明を実施するための形態】
【００１５】
図１は，本実施の形態における演算処理装置を搭載した情報処理装置を示す図である。コンピュータなどの情報処理装置１０は，CPU/メモリボード１２と，大容量の記憶装置であるハードディスク１１とを有する。CPU/メモリボード１２は，CPUチップである演算処理装置２０と，演算処理装置２０と外部のハードディスク１１などを接続するインタコネクタ１３と，DRAM等のメインメモリ１４とを有する。
【００１６】
演算処理装置２０は，例えば，４つのCPUコア（演算処理部）３０Ａ−３０Ｄと，４つのCPUコアで共有される二次キャッシュ２４と，入出力インタフェース２６と，メインメモリ１４へのアクセスを制御するメモリアクセスコントローラ(Memory Access Controller : MAC)２８とを有する。
【００１７】
図２は，本実施の形態におけるCPUコア（演算処理部）の構成を示す図である。図２に示したＣＰＵコア３０は，準備が整った命令から実行を行うアウトオブオーダ命令実行機能と，アウトオブオーダで実行された命令をプログラムの順番で，つまりインオーダで完了するために，レジスタ競合による実行ストールを回避するレジスタリネーミング機能を有する。
【００１８】
特に，図２のＣＰＵコア３０は，浮動小数点演算，浮動小数点ロード（メモリの読み出し），または浮動小数点ストア（メモリへの書き込み）を複数のデータに対して実行するマルチデータ命令（以下SIMD命令と称する）に応じたSIMD処理を行うことができる。もちろん，１つのデータに対して実行する非マルチデータ命令（以下非SIMD命令と称する）に応じた処理も行うことができる。
【００１９】
図２のCPUコア３０は，プログラムカウンタＰＣまたは分岐予測機構が予測する分岐先アドレスのいずれかを選択する命令フェッチアドレス生成器３０１と，分岐命令の分岐予測を行う分岐予測部３０２と，命令が記憶されている一次命令キャッシュ３０３と，一次命令キャッシュから読み出した命令を一時的に格納する命令バッファ３０４と，命令をデコードする命令デコーダ３０５を有する。命令デコーダ３０５は，後述するとおり，命令に対応する制御信号を生成すると共に，命令で指定されている格納先レジスタにリネーミングレジスタを割り当てる。
【００２０】
更に，CPUコア３０は，格納先レジスタに割り当てられたリネーミングレジスタとの対応関係を記憶するレジスタリネーミング部REG_RENと，主記憶オペランド生成用リザベーションステーション（Reservation Station for Address generate : RSA）と，固定小数点演算用リザベーションステーション（Reservation Station for Execute: RSE）と，浮動小数点演算用リザベーションステーション（Reservation Station for Floating : RSF）と，分岐用Reservation Station（Reservation Station for Branch : RSBR）と，コミットスタックエントリ（Commit Stack Entry : CSE）とを有する。
【００２１】
各リザベーションステーションRSは，命令デコーダ３０５から発行された命令のキューであり，命令を実行する実行ユニットに対応して設けられる。特に，固定小数点演算用リザベーションステーションRSEと浮動小数点演算用リザベーションステーションRSFは，アウトオブオーダで，つまり入力データや演算器の準備が整った命令から対応する演算器に命令を発行する。一方，コミットスタックエントリCSEは，全ての命令のエントリについて命令の完了を判定し，アウトオブオーダで開始された命令をインオーダで完了させる。
【００２２】
そして，CPUコア３０は，オペランドデータ選択部３１０と，オペランドアドレス生成器３１１と，一次データキャッシュ部３１２と，ストアバッファ部３１３とを有する。また，CPUコア３０は，固定小数点演算を行う演算器３２０と，浮動小数点演算を行うSIMD演算器３３０と，固定小数点リネーミングレジスタ３２１と，浮動小数点リネーミングレジスタFR_REGと，固定小数点レジスタ３２２と，浮動小数点SIMDレジスタFS_REGと，プログラムカウンタPCとを有する。
【００２３】
命令フェッチアドレス生成器３０１は，プログラムカウンタPCのカウント値または分岐予測部３０２からの情報を基に命令アドレスを選択し，一次命令キャッシュ３０３に対して命令フェッチリクエストを発行する。分岐予測部３０２は，分岐リザベーションステーションRSBRのエントリに基づいて分岐予測を行う。一次命令キャッシュ３０３は，命令フェッチリクエストに応じて読み出した命令を命令バッファ３０４に格納する。そして，命令バッファ３０４から命令デコーダに対し，プログラムにより指定された命令の順番通りに，すなわちインオーダで命令が供給され，命令デコーダ３０５は命令バッファ３０４から供給された命令をインオーダでデコードする。
【００２４】
命令デコーダ３０５は，デコードした命令の種類に応じて４つのリザベーションステーションRSA，RSE，RSF，またはRSBRに対して，必要なエントリを作成する。これとともに命令デコーダ３０５は，コミットスタックエントリCSEに対して，デコードしたすべての命令に対応するエントリを作成する。また，命令デコーダ３０５は，命令が指定するアーキテクチャレジスタ内のレジスタに，リネーミングレジスタ内のレジスタを割り当てる。
【００２５】
レジスタリネーミング部REG_RENは，リザベーションステーションRSA，RSEまたはRSFのいずれかにエントリが作成された時に，命令が指定するアーキテクチャレジスタに割り当てられたリネーミングレジスタのアドレスを記憶する。指定されたアーキテクチャレジスタと割当リネーミングレジスタとの対応関係はレジスタリネーミング部内のリネーミングマップに登録される。CPUコアは，アーキテクチャレジスタとして，固定小数点レジスタ３２２および浮動小数点SIMDレジスタFS_REGを有する。これらのレジスタは，演算処理結果を格納する格納レジスタとして，命令により指定される。またリネーミングレジスタとして，固定小数点リネーミングレジスタ３２１および浮動小数点リネーミングレジスタFR_REGを有する。
【００２６】
命令デコーダ３０５は，固定小数点レジスタ３２２が格納先のレジスタとして使用される場合には，リネーミングレジスタとして固定小数点リネーミングレジスタ３２１のアドレスを割り当てる。また，命令デコーダ３０５は，浮動小数点SIMDレジスタが格納先のレジスタとして使用される場合には，リネーミングレジスタとして浮動小数点リネーミングレジスタFR_REGを割り当てる。前述の格納先レジスタのアドレスに対して割り当てられたリネーミングレジスタのアドレスは，対応関係として，その命令に対応するリザベーションステーションRSA，RSE，RSFと，コミットスタックエントリCSEに出力される。
【００２７】
リザベーションステーションRSA，RSE，RSFは，保持されたエントリのうち，処理に必要な資源，例えばデータや演算器の準備ができたものから順次出力し，後段の演算器などのブロックに対してエントリに対応する処理を実行させる。これにより，命令がアウトオブオーダで実行開始され，命令の処理結果は，固定小数点リネーミングレジスタ３２１または浮動小数点リネーミングレジスタFR_REGに一時的に格納される。
【００２８】
浮動小数点リザベーションステーションRSFには，例えば浮動小数点演算命令に対応するエントリが格納される。演算器３３０は，リザベーションステーションRSFからのエントリに基づいて，演算の対象となる入力データを選択し，浮動小数点演算を実行する。浮動小数点命令の実行時には，SIMD演算器３３０の演算結果は浮動小数点リネーミングレジスタFR_REGに一時的に格納される。
【００２９】
また，浮動小数点ストア命令の実行時には，SIMD演算器３３０は演算対象として選択したデータをストアバッファ部３１３に出力する。そして，ストアバッファ部３１３は，オペランドアドレス生成器３１１から出力されたオペランドアドレスを指定して，SIMD演算器３３０から出力されたデータを一次データキャッシュ部に書き込む。
【００３０】
コミットスタックエントリCSEは，命令デコーダ３０５によりデコードされたすべての命令に対応するエントリを保持し，各エントリに対応する処理の実行状況を管理し，これらの命令をインオーダで完了させる。例えば，コミットスタックエントリCSEは，次に完了させるべきエントリに対応する処理の結果が，固定小数点リネーミングレジスタ３２１または浮動小数点リネーミングレジスタFR_REGに格納されると共に，前の順番の命令が完了したと判定すると，リネーミングレジスタに格納されたデータを固定小数点レジスタ３２２または浮動小数点SIMDレジスタFS_REGに出力させる。これにより，各リザベーションステーションでアウトオブオーダで実行された命令がインオーダで完了する。
【００３１】
固定小数点リネーミングレジスタ３２１及び浮動小数点リネーミングレジスタFR_REGは，コミットスタックエントリCSEのエントリの数と同じか，それより少ない数の複数のレジスタを有する。
【００３２】
そして，SIMD演算器３３０は，基本演算器と拡張演算器を有する。基本演算器は，例えばより多くの演算を実行できる演算回路を有する。一方，拡張演算器は，一部の演算に対応できる演算回路を有する。例えば，１つの命令で４つの組のデータを並列処理できる4-SIMD処理に対応する場合は，SIMD演算器３３０は，１つの基本演算器と３つの拡張演算器を有する。
【００３３】
そして，浮動小数点SIMDレジスタFS_REGは，それぞれ同数の基本レジスタおよび拡張レジスタを有する。同様に，浮動小数点リネーミングレジスタFR_REGも，それぞれ同数の基本リネーミングレジスタおよび拡張リネーミングレジスタを有する。
【００３４】
図２において，演算器３２０と固定小数点レジスタ３２２と固定小数点リネーミングレジスタ３２１を有する固定小数点演算ユニットを，SIMD処理に対応できるように，基本演算器と拡張演算器，基本レジスタと拡張レジスタ，基本リネーミングレジスタと拡張リネーミングレジスタを有しても良い。但し，図２では，浮動小数点処理に対してのみSIMD処理ができるように構成されている。
【００３５】
図２の浮動小数点演算ユニットを構成する浮動小数点リザベーションステーションRSFと，SIMD演算器３３０と，浮動小数点SIMDレジスタFS_REGと，浮動小数点リネーミングレジスタFR_REGは，SIMD命令と非SIMD命令を次のように処理する。SIMD命令の場合は，SIMD演算器３３０内の基本演算器と拡張演算器が並行して処理を行い，それぞれに対して割り当てられている浮動小数点リネーミングレジスタFR_REG内の基本レジスタ及び拡張レジスタに処理結果を一時的に格納する。そして，コミットスタックエントリCSEが順番が前の命令の完了と現在の命令の完了を検出すると，浮動小数点リネーミングレジスタFR_REG内の基本レジスタ及び拡張レジスタに一時的に格納された処理結果が，浮動小数点SIMDレジスタFS_REG内の基本レジスタ及び拡張レジスタに格納される。
【００３６】
一方，非SIMD命令に対しても，同様に演算器の処理結果が浮動小数点リネーミングレジスタFR_ERGに一時的に格納され，コミットスタックエントリCSEが前述の命令完了を検出すると，浮動小数点リネーミングレジスタFR_ERG内のレジスタに一時的に格納された処理結果が，浮動小数点SIMDレジスタFS_REG内のレジスタに格納される。
【００３７】
［SIMD処理の並列度向上と非SIMD処理の自由度向上の問題点］
次に，SIMD処理の並列度を高めることと非SIMD処理の自由度を高めることを同時に追求した場合の問題点について説明する。
【００３８】
図３は，2-SIMD構成における非SIMD命令のレジスタリネーミング処理を示す図である。図４は，2-SIMD構成におけるSIMD命令のレジスタリネーミング処理を示す図である。図３，図４に示されるとおり，2-SIMD構成に対応して，浮動小数点SIMDレジスタFR_ERGは，１つの基本レジスタB_REGの群と，１つの拡張レジスタE_REGの群とを有する。基本レジスタB_REGと拡張レジスタE_REGの群は，それぞれ８バイトのビット幅を有し，それぞれ同じ数のレジスタを有する。図３，４では１２８個のレジスタを有する。
【００３９】
同様に，浮動小数点リネーミングレジスタFR_ERGも，１つの基本リネーミングレジスタBR_REGの群と，１つの拡張リネーミングレジスタER_REGの群とを有する。基本リネーミングレジスタBR_REGと拡張リネーミングレジスタER_REGの群は，それぞれ８バイトのビット幅を有し，それぞれ同じ数のレジスタを有する。図３，４では１２８個以下の数のレジスタを有する。
【００４０】
一方，レジスタリネーミング部REG_RENは，１つの基本レジスタリネーミングマップBRRMを有する。基本レジスタリネーミングマップBRRMは，浮動小数点SIMDレジスタFS_ERG内の基本レジスタB_REGの０〜１２７に対応するエントリを有し，基本レジスタB_REGそれぞれに割り当てられた基本リネーミングレジスタBR_REGのレジスタ番号またはアドレスを保持する。この基本リネーミングレジスタの割当処理は，前述のとおり，命令デコーダ３０５が行う。
【００４１】
図３，４の2-SIMD構成では，非SIMD命令実行時は，浮動小数点SIMDレジスタFS_REG内の基本レジスタB_REGと，それに対して割り当てられている浮動小数点リネーミングレジスタREN_REG内の基本リネーミングレジスタBR_REGとのレジスタのセットが使用される。一方，SIMD命令実行時は，浮動小数点SIMDレジスタFS_REG内の基本レジスタB_REG及び拡張レジスタE_REGと，それに対して割り当てられている浮動小数点リネーミングレジスタREN_REG内の基本リネーミングレジスタBR_REGと拡張リネーミングレジスタER_REGとのレジスタのセットが使用される。
【００４２】
図３の非SIMD命令実行時におけるレジスタリネーミング処理を説明する。非SIMD命令が実行された場合，CPUコアは１つのまたは１組の8バイトデータに対して一つの処理を実行する。この場合，浮動小数点SIMDレジスタFR_REGでは基本レジスタB_REGのみが使われ，拡張レジスタE_REGは使用されない。例えば，非SIMD命令は，ディスティネーションオペランドとして，浮動小数点SIMDレジスタFS_REG内の１２８個の基本レジスタB_REGの群のうち一つのレジスタを指定する。この場合，例えば，ディスティネーションオペランドとして，浮動小数点SIMDレジスタFS_REG内の基本レジスタB_REGの群内の一つのレジスタが０〜１２７のレジスタ番号により指定される。一方，レジスタリネーミング部REG_REN内の基本レジスタリネーミングマップBRRMには，非SIMD命令により指定された基本レジスタB_REGに対して割り当てられた基本リネーミングレジスタBR_REGのレジスタ番号またはアドレスが記憶される。浮動小数点SIMDレジスタFS_REG内の拡張レジスタE_REGは非SIMD演算では使用されないため，レジスタリネーミングREG_RENには，拡張レジスタリネーミングマップは必要なく，拡張リネーミングレジスタER_REGは使用されない。
【００４３】
次に，図４のSIMD命令実行時におけるレジスタリネーミング処理を説明する。SIMD演算が実行された場合，浮動小数点SIMDレジスタFS_REGにおいては，０〜１２７のレジスタ番号のうち同じレジスタ番号を有する基本レジスタB_REGと拡張レジスタE_REGとがセットで使用される。そして，SIMD命令に応じて並列処理される２つのまたは２組の８バイトデータのうち，1つ目のデータにより基本レジスタB_REGが使用され，２つ目のデータにより基本レジスタB_REGと同じレジスタ番号を有する拡張レジスタE_REGが使用される。
【００４４】
一方，浮動小数点リネーミングレジスタFR_ERGにおいても，０からある数までのレジスタ番号のうち同じレジスタ番号を有する基本リネーミングレジスタBR_REGと拡張リネーミングレジスタER_REGとがセットで使用される。並列処理される２つまたは２組の８バイトデータのうち，１つ目のデータにより基本リネーミングレジスタBR_REGが使用され，２つ目のデータにより同じレジスタ番号を有する拡張リネーミングレジスタER_REGが使用される。
【００４５】
そして，レジスタリネーミング部REG_RENでは，基本レジスタリネーミングマップBRRMの，浮動小数点SIMDレジスタFS_REGの指定されたレジスタ番号に対応するエントリ内に，割り当てられた浮動小数点リネーミングレジスタREN_REG内のレジスタ番号が記憶される。割り当てるレジスタ番号は，必ずしも浮動小数点SIMDレジスタのレジスタ番号と同じである必要はない。
【００４６】
図４に示される例では，例えばSIMD命令によりディスティネーションオペランドとして浮動小数点SIMDレジスタFS_REGのレジスタ番号“０”が指定された場合，CPUコアはSIMD命令により指定された２つまたは２組の８バイトデータに対して同じ処理を並列に実行する。そして，処理結果のデータは，一旦，浮動小数点リネーミングレジスタに書き込まれた後，順番が前の命令が完了し現在の命令を完了できるときに，浮動小数点リネーミングレジスタREN_REG内の基本，拡張リネーミングレジスタの２つの処理結果が，浮動小数点SIMDレジスタFS_REG内のレジスタ番号”０”の基本レジスタB_REGと拡張レジスタE_REGに書き込まれる。これにより，アウトオブオーダで開始された命令の処理は，インオーダで完了する。
【００４７】
一方，レジスタリネーミング部REG_RENでは，レジスタ番号”０”を有する基本レジスタB_REGおよび拡張レジスタE_REGに対して，同じレジスタ番号”０”を有するまたは異なるレジスタ番号を有する基本リネーミングレジスタBR_REGおよび拡張リネーミングレジスタER_REGが割り当てられる。図４の例ではレジスタ番号“０”の基本レジスタR_REG，拡張レジスタE_REGに対して同じレジスタ番号“０”の基本リネーミングレジスタBR_REG，拡張リネーミングレジスタER_REGが割り当てられている。
【００４８】
図５は，2-SIMD構成における非SIMD命令の別のレジスタリネーミング処理を示す図である。図６は，2-SIMD構成におけるSIMD命令の別のレジスタリネーミング処理を示す図である。図５，図６の図３，４と異なる構成は，次の通りである。まず，2-SIMD構成に対応して，浮動小数点SIMDレジスタFR_ERGは，１つの基本レジスタB_REGの群と，１つの拡張レジスタE_REGの群とを有し，非SIMD命令実行時には，基本レジスタB_REGと拡張レジスタE_REGとはそれぞれ独立して個別に非SIMD命令により指定される。それに対応して，浮動小数点リネーミングレジスタREN_REG内の基本リネーミングレジスタBR_REGと拡張リネーミングレジスタER_REGも，それぞれ個別に命令デコーダにより割り当てられる。それに伴って，レジスタリネーミング部REG_RENは，１つの基本レジスタリネーミングマップBRRMと，１つの拡張レジスタリネーミングマップERRMとを有する。
【００４９】
レジスタリネーミング部REG_REN内の基本，拡張レジスタリネーミングマップBRRM，ERRMは，浮動小数点SIMDレジスタFS_ERG内の基本レジスタB_REGの０〜１２７に対応するエントリと，拡張レジスタE_REGに対応するエントリとを有する。基本レジスタリネーミングマップBRRMは，基本レジスタB_REGそれぞれに割り当てられた基本リネーミングレジスタBR_REGのレジスタ番号またはアドレスを保持する。また，拡張レジスタリネーミングマップERRMは，拡張レジスタE_REGそれぞれに割り当てられた拡張リネーミングレジスタER_REGのレジスタ番号またはアドレスを保持する。
【００５０】
図５，６の2-SIMD構成では，非SIMD命令実行時は，浮動小数点SIMDレジスタFS_REG内の基本レジスタB_REGとそれに割り当てられている浮動小数点リネーミングレジスタREN_REG内の基本リネーミングレジスタBR_REGとのレジスタのセットまたは，拡張レジスタE_REGとそれに割り当てられている拡張リネーミングレジスタER_REGとのレジスタのセットのいずれかが使用される。一方，SIMD命令実行時は，浮動小数点SIMDレジスタFS_REG内の基本レジスタB_REG及び拡張レジスタE_REGと，それに対して割り当てられている浮動小数点リネーミングレジスタREN_REG内の基本リネーミングレジスタBR_REGと拡張リネーミングレジスタER_REGとのレジスタのセットが使用される。
【００５１】
図５の非SIMD命令実行時におけるレジスタリネーミング処理を説明する。非SIMD命令が実行された場合，CPUコアは１つの８バイトデータに対して１つの処理を実行する。この場合，浮動小数点SIMDレジスタFS_REGでは基本レジスタB_REGおよび拡張レジスタE_REGはそれぞれ独立したレジスタとして扱われ，これらの２５６個のレジスタのうち一つが非SIMD処理で使用される。例えば，非SIMD命令ではディスティネーションオペランドとして浮動小数点SIMDレジスタ内の２５６個のレジスタのうち１つを指定できる。この場合，例えばディスティネーションオペランドとして，浮動小数点SIMDレジスFS_REG内のレジスタが０〜２５５のレジスタ番号により指定される。
【００５２】
一方，レジスタリネーミング部REG_RENでは，非SIMD命令により指定された基本レジスタB_REGまたは拡張レジスタE_REGに対して，それぞれ基本リネーミングレジスタBR_REGまたは拡張リネーミングレジスタER_REGのレジスタ番号またはアドレスが割り当てられる。図５の例では，レジスタ番号１２８の拡張レジスタE_REGに対して，レジスタ番号“１”の拡張リネーミングレジスタER_REGが割り当てられている。
【００５３】
そして，浮動小数点SIMD演算器３３０内の基本SIMD演算器または拡張SIMD演算器のうち，拡張SIMD演算器が使用され，処理結果がレジスタ番号”１”の拡張リネーミングレジスタER_REGに格納され，処理完了時にレジスタ番号１２８の拡張レジスタE_REGに処理結果が格納される。
【００５４】
このように，非SIMD命令実行時に，拡張レジスタE_REGと拡張リネーミングレジスタER_REGも使用することができるので，非SIMD命令におけるハードウエアリソースの自由度を高めることができる。
【００５５】
図６の2-SIMD命令実行時におけるレジスタリネーミング処理を説明する。SIMD命令が実行された場合，浮動小数点SIMDレジスタFS_REGにおいては，０〜１２７のレジスタ番号のうち同じレジスタ番号を有する基本レジスタB_REGと拡張レジスタE_REGとがセットで利用される。そしてSIMD命令に応じて並列処理される２つのまたは２組の８バイトデータのうち，一方のデータにより基本レジスタB_REGが使用され，他の１つのデータにより基本レジスタと同じレジスタ番号を有する拡張レジスタE_REGが使用される。
【００５６】
一方，浮動小数点リネーミングレジスタREN_REGでも，基本リネーミングレジスタBR_REG内の割り当てられたレジスタと，拡張リネーミングレジスタER_REG内の割り当てられたレジスタとがセットで利用される。
【００５７】
それに対応して，レジスタリネーミング部REG_RENの基本レジスタリネーミングマップBRRMでは，基本レジスタB_REGに対応するエントリに基本レジスタB_REGに割り当てられた基本リネーミングレジスタBR_REGのレジスタ番号が記憶され，拡張レジスタE_REGに対応するエントリに拡張レジスタE_REGに割り当てられた拡張リネーミングレジスタER_REGのレジスタ番号が記憶される。
【００５８】
例えば，SIMD命令によりディスティネーションオペランドとして浮動小数点SIMDレジスタFS_REGのレジスタ番号“０”が指定された場合，CPUコアはSIMD命令により指定された２つのまたは２組の８バイトデータに対して同じ処理を並列に実行する。そして，２つの処理結果のデータは，一旦，浮動小数点リネーミングレジスタ内の割り当てられた基本，拡張リネーミングレジスタBR_REG，ER_REGにそれぞれ書き込まれた後，命令を完了する時に浮動小数点SIMDレジスタFS_REG内の指定された基本レジスタB_REGと拡張レジスタE_REGに書き込まれる。この場合，浮動小数点SIMDレジスタでは処理された１つめの８バイトデータがレジスタ番号“０”の基本レジスタB_REGに格納され，他方の１つ８バイトデータがレジスタ番号“０”の拡張レジスタE_REGに格納される。
【００５９】
一方，レジスタリネーミング部では，同じレジスタ番号を有する基本レジスタB_REGおよび拡張レジスタE_REGに対して，異なるレジスタ番号を有する基本リネーミングレジスタBR_REGおよび拡張リネーミングレジスタER_REGをそれぞれ割り当てることが可能となっている。例えば，図６の例ではレジスタ番号“０”の基本レジスタB_REGに対して，レジスタ番号“０”基本リネーミングレジスタBR_REGが割り当てられている。一方，レジスタ番号“０”の拡張レジスタE_REGに対しては，レジスタ番号“２”の拡張リネーミングレジスタER_REGが割り当てられている。
【００６０】
従って，例えばSIMD命令によりディスティネーションオペランドとして浮動小数点SIMDレジスタのレジスタ番号“０”が指定され，図６のようなリネーミングレジスタの割り当てが行われた場合には，処理された1つ目の８バイトデータはレジスタ番号“０”の基本リネーミングレジスタBR_REGにいったん格納される。また，処理された2つ目の８バイトデータはレジスタ番号“２”の拡張リネーミングレジスタER_REGに格納される。そして，命令の順番に基づいてSIMD命令を完了できる時に，それらの格納された２つのデータは，レジスタ番号“０”の基本レジスタB_REGおよび拡張レジスタE_REGに転送される。これによりSIMD命令がインオーダで完了する。
【００６１】
図５，６の例では，SIMD命令実行時に利用する拡張レジスタE_REGと拡張リネーミングレジスタER_REGを，非SIMD命令実行時にも自由に利用できるようにしている。これにより，SIMD命令の並列度を高めるとともに，非SIMD命令でのハードウエアの利用度を高めている。
【００６２】
そこで，更にSIMD命令の並列度を高めて3-SIMD構成にした場合について説明する。
【００６３】
図７は，3-SIMD構成における非SIMD命令の別のレジスタリネーミング処理を示す図である。図８は，3-SIMD構成におけるSIMD命令の別のレジスタリネーミング処理を示す図である。図７，図８において，図５，６と異なる構成は，次の通りである。まず，3-SIMD構成に対応して，浮動小数点SIMDレジスタFS_REGは，１つの基本レジスタB_REGの群と，２つの拡張レジスタE_REG1，E_REG2の群とを有し，非SIMD命令実行時には，基本レジスタB_REGと拡張レジスタE_REG1，E_REG2の３つのレジスタはそれぞれ独立して個別に非SIMD命令により指定される。それに対応して，浮動小数点リネーミングレジスタREN_REG内の１つの基本リネーミングレジスタBR_REGと２つの拡張リネーミングレジスタER_REG1，ER_REG2も，それぞれ個別に命令デコーダにより割り当てられる。それに伴って，レジスタリネーミング部REG_RENは，基本レジスタリネーミングマップBRRMと，２つの拡張レジスタリネーミングマップERRM1，ERRM2とを有する。
【００６４】
レジスタリネーミング部REG_REN内の基本，第１，第２拡張レジスタリネーミングマップBRRM，ERRM1，ERRM2は，浮動小数点SIMDレジスタFS_REG内の基本レジスタB_REGの０〜１２７に対応するエントリと，第１，第２拡張レジスタE_REG1，E_REG2の１２８〜２５５，２５６〜３８３に対応するエントリとを有する。基本レジスタリネーミングマップBRRMは，基本レジスタB_REGそれぞれに割り当てられた基本リネーミングレジスタBR_REGのレジスタ番号またはアドレスを保持する。また，２つの拡張レジスタリネーミングマップERRM1，ERRM2は，拡張レジスタE_REG1，E_REG2それぞれに割り当てられた拡張リネーミングレジスタER_REG1，FR_REG2のレジスタ番号またはアドレスをそれぞれ保持する。
【００６５】
図７，８の2-SIMD構成では，非SIMD命令実行時は，浮動小数点SIMDレジスタFS_REG内の基本レジスタB_REGとそれに割り当てられている浮動小数点リネーミングレジスタREN_REG内の基本リネーミングレジスタBR_REGとのレジスタのセットか，第１拡張レジスタE_REG1とそれに割り当てられている第１拡張リネーミングレジスタER_REG1とのレジスタのセットか，第２拡張レジスタE_REG2とそれに割り当てられている第２拡張リネーミングレジスタER_REG2とのレジスタのセットかのいずれかが使用される。一方，SIMD命令実行時は，浮動小数点SIMDレジスタFS_REG内の基本レジスタB_REG及び２つの拡張レジスタE_REG1，E_REG2と，それに対して割り当てられている浮動小数点リネーミングレジスタREN_REG内の基本リネーミングレジスタBR_REGと２つの拡張リネーミングレジスタER_REG1，ER_REG2とのレジスタのセットが使用される。
【００６６】
図７の非SIMD命令実行時では，非SIMD命令が第１拡張レジスタE_REG1内のレジスタを指定し，第１拡張リネーミングレジスタER_REG1が割り当てられている。それに伴い，レジスタリネーミング部REG_REN内の第１拡張レジスタリネーミングマップERRM1の拡張レジスタE_REG1と同じエントリに，割り当てられた第１拡張リネーミングレジスタER_REG1のレジスタ番号”１”が記憶される。
【００６７】
図８のSIMD命令実行時では，SIMD命令が浮動小数点SIMDレジスタFS_REG内のレジスタ番号”０”の基本レジスタB_REGと２つの拡張レジスタE_REG1，E_REG2のセットを指定し，浮動小数点リネーミングレジスタREN_REG内の基本リネーミングレジスタBR_REGのレジスタ番号”０”のレジスタと，第１拡張リネーミングレジスタER_REG1のレジスタ番号”２”のレジスタと，第２拡張リネーミングレジスタER_REG2のレジスタ番号”３”のレジスタとが割り当てられている。それに伴い，レジスタリネーミング部REG_REN内のレジスタ番号”０”の３つのマップに割り当てられたレジスタ番号が記憶される。
【００６８】
図７，８のように，3-SIMD構成にしてSIMD命令の並列度を高めると同時に，非SIMD命令で全ての拡張レジスタと拡張リネーミングレジスタを利用可能にして非SIMD命令のハードウエア利用の自由度も高めると，レジスタ群とレジスタリネーミング部REG_RENの回路規模が増大する。これを，4-SIMD構成にすると更に回路規模は増大する。その場合，CPUチップである演算処理装置が処理する演算プログラムによっては，SIMD命令の並列度が高いことは必要である一方で，非SIMD命令はそれほど多くなく，非SIMD命令のハードウエア利用の自由度の必要性はそれほどでもない場合がある。
【００６９】
そこで，SIMD命令の並列度を高めることと非SIMD命令のハードウエア利用の自由度を高めることとを，回路規模をリーズナブルなレベルに抑制しつつ実現することが望ましい。
【００７０】
［本実施の形態］
図９は，本実施の形態におけるCPUコアの構成を示す図である。図９には，図２のCPUコア３０のうち，レジスタリネーミング部REG_RENと，一次データキャッシュ部３１２と，SIMD演算器３３０と，浮動小数点リネーミングレジスタFR_ERGと，浮動小数点SIMDレジスタFS_REGの詳細な構成が示されている。
【００７１】
図９のCPUコアは，浮動小数点演算について3-SIMD構成を有する。すなわち，SIMD演算器３３０は，１つの基本演算器B_EXCと，２つの拡張演算器E_EXC1，E_EXC2を有し，3-SIMD命令を実行可能になっている。基本演算器B_EXCの入力側には入力データを格納するレジスタを選択する基本オペランドデータ選択器B_SELが，出力側には演算結果を格納する基本結果レジスタBr_regが設けられる。２つの拡張演算器E_EXC1，E_EXC2についても，拡張オペランドデータ選択器E_SEL1，E_SEL2と，拡張結果レジスタEr_reg1，Er_reg2が設けられる。
【００７２】
３つの演算器にそれぞれ対応して，浮動小数点リネーミングレジスタFR_REGは，１つの基本リネーミングレジスタBR_REGと，２つの拡張リネーミングレジスタER_REG1，ER_REG2とを有する。同様に，アーキテクチャレジスタである浮動小数点SIMDレジスタFS_REGは，１つの基本レジスタB_REGと２つの拡張レジスタE_REG1，E_REG2を有する。
【００７３】
更に，一次データキャッシュ部３１２は，図示しないキャッシュメモリとキャッシュ制御部に加えて，キャッシュメモリからロードしたデータを格納する１つの基本ロードレジスタ312_Bと，２つの拡張ロードレジスタ312_E1，312_E2とを有する。
【００７４】
演算器の入力データは，一次データキャッシュ部３１２内の３つのロードレジスタと，３つの基本結果レジスタと，３つの浮動小数点リネーミングレジスタと，３つの浮動小数点SIMDレジスタの，合計１２個のレジスタのいずれかに格納されたデータから選択することができる。したがって，基本オペランドデータ選択器B_SELと２つの拡張オペランドデータ選択器E_SEL1，E_SEL2は，１２個のレジスタから１つのレジスタを選択する。そして，演算器が入力可能なデータ数がＮ個の場合は，各演算器それぞれにＮ個の選択器が設けられる。
【００７５】
図９のＣＰＵコア３０は3-SIMD構成であるが，レジスタリネーミング部REG_RENは，１つの基本レジスタリネーミングマップBRRMと１つの拡張レジスタリネーミングマップERRM1を有する。そして，基本レジスタリネーミングマップBRRMは，命令で指定された基本レジスタB_REGのアドレスまたはレジスタ番号に対する割り当てられた基本リネーミングレジスタBR_REGのアドレスまたはレジスタ番号の第１の対応関係を記憶し，拡張レジスタリネーミングマップERRM1は，命令で指定された第１拡張レジスタE_REG1のアドレスまたはレジスタ番号に対する割り当てられた第１拡張リネーミングレジスタER_REG1のアドレスまたはレジスタ番号の第２の対応関係を記憶する。
【００７６】
但し，第２拡張レジスタE_REG2のアドレスまたはレジスタ番号に対する割り当てられた第２拡張リネーミングレジスタER_REG2のアドレスまたはレジスタ番号の第３の対応関係は，基本レジスタリネーミングマップBRRMに記憶されている第１の対応関係または拡張リネーミングマップERRM1に記憶されている第２の対応関係と同じになるように，命令デコーダ３０５がリネーミングレジスタの割当を行う。したがって，浮動小数点リザベーションステーションRSFは，第２拡張演算器E_EXC2で実行される演算結果を一時的に格納する第２拡張リネーミングレジスタER_REG2内のレジスタのアドレスまたはレジスタ番号を，基本レジスタリネーミングマップBRRMまたは拡張レジスタリネーミングマップERRM1を参照して取得する。
【００７７】
図９のCPUコアは，3-SIMD命令を実行する場合は，１つの基本演算器B_EXCと２つの拡張演算器E_EXC1，E_EXC2を使用し，１つの基本リネーミングレジスタBR_REGと２つの拡張リネーミングレジスタER_REG1，ER_REG2を使用し，１つの基本レジスタB_REGと２つの拡張レジスタE_REG1，E_REG2を使用する。
【００７８】
一方，非SIMD命令を実行する場合は，CPUコアは，基本演算器E_EXCか第１拡張演算器E_EXC1のいずれかを使用し，基本リネーミングレジスタBR_REGか第１拡張リネーミングレジスタER_REG1のいずれかを使用し，基本レジスタB_REGか第１拡張レジスタE_REG1のいずれかを使用する。したがって，非SIMD命令を実行する場合，基本リネーミングレジスタBR_REG以外に第１拡張リネーミングレジスタER_REG1を利用して，命令をアウトオブオーダで実行開始することができ，ハードウエア利用の自由度を高くすることができる。
【００７９】
但し，非SIMD命令を実行する場合，第２拡張リネーミングレジスタER_REG2を利用することはできない。このような制約により，レジスタリネーミング部REG_REN内には，基本レジスタリネーミングマップBRRMに加えて１つの拡張レジスタリネーミングマップERRM1を有するだけでよい。その結果，リネーミングマップの数を少なくすることができ，回路規模が膨大になるのを抑制することができる。
【００８０】
上記の通り，本実施の形態では，第１拡張リネーミングレジスタER_REG1は，SIMD命令の演算と非SIMD命令の演算で一時的に演算結果を格納するレジスタとして使用され，第２拡張リネーミングレジスタER_REG2は，SIMD命令の演算で一時的に演算結果を格納するレジスタとして使用されるが，非SIMD命令の演算ではそのようなレジスタとして使用されない。
【００８１】
言い換えると，本実施の形態のCPUコアは，浮動小数点SIMDレジスタFS_REGと浮動小数点リネーミングレジスタFR_ERGの演算結果を格納するレジスタセットとして，SIMD命令の演算と非SIMD命令の演算の両方で使用される基本レジスタセットと，SIMD命令の演算と非SIMD命令の演算の両方で使用される第１拡張レジスタセットと，SIMD命令の演算では使用されるが非SIMD命令の演算では使用されない第２拡張レジスタセットとを有する。
【００８２】
なお，浮動小数点SIMDレジスタと浮動小数点リネーミングレジスタのレジスタのセットは，基本レジスタB_REGと基本リネーミングレジスタBR_REGのレジスタのセット，第１拡張レジスタE_REG1と第１拡張リネーミングレジスタER_REG1のレジスタのセット，及び第２拡張レジスタE_REG1と第２拡張リネーミングレジスタER_REG2のレジスタのセットで使用される。
【００８３】
［第１の実施の形態］
図１０は，第１の実施の形態における3-SIMD構成における非SIMD命令のレジスタリネーミング処理を示す図である。図１１は，第１の実施の形態における3-SIMD構成におけるSIMD命令のレジスタリネーミング処理を示す図である。
【００８４】
図９と同様に，図１０，図１１では，浮動小数点SIMDレジスタFS_REGは，１つの基本レジスタB_REGの群と２つの拡張レジスタE_REG1，E_REG2の群とを有し，各レジスタの群は，それぞれ１２８個のレジスタを有する。それに対応して，浮動小数点リネーミングレジスタREN_REGは，１つの基本リネーミングレジスタBR_REGの群と２つの拡張リネーミングレジスタER_REG1，ER_REG2の群を有し，各レジスタ群は，それぞれコミットスタックエントリCSEのエントリ可能な数以下の数のレジスタをする。そして，レジスタリネーミング部REG_RENは，１つの基本レジスタリネーミングマップBRRMと１つの拡張レジスタリネーミングマップERRM1を有する。
【００８５】
図１０の非SIMD命令実行時におけるレジスタリネーミング処理を説明する。非SIMD命令が実行された場合，CPUコアは１つのまたは１組の８バイトデータに対して１つの処理を行う。この場合，浮動小数点SIMDレジスタFS_REGでは，基本レジスタB_REGおよび第１拡張レジスタE_REG1はそれぞれ独立したレジスタとして扱われ，これらの２５６個のレジスタのうち一つが非SIMD処理で使用される。但し，浮動小数点SIMDレジスタFS_REG内の第２拡張レジスタE_REG2は使用されない。即ち，非SIMD命令では，ディスティネーションオペランドとして浮動小数点SIMDレジスタFS_REG内の３８４個のレジスタのうち，第２拡張レジスタE_REG2の１２８個のレジスタは使用されず，基本レジスタB_REGと第１拡張レジスタE_REG1の２５６個のレジスタから１つを選んで非SIMD処理で使用する。この場合，例えばディスティネーションオペランド，つまり演算結果を格納する格納レジスタとして，浮動小数点SIMDレジスタFS_REG内の２５６個のレジスタから０〜２５５のレジスタ番号で命令により指定される。
【００８６】
一方，レジスタリネーミング部REG_RENでは，非SIMD命令により指定された浮動小数点SIMDレジスタFS_REG内の基本レジスタB_REGまたは第１拡張レジスタE_REG1に対して割り当てられた，それぞれ基本リネーミングレジスタBR_REGまたは第１拡張リネーミングレジスタER_REG1のレジスタ番号またはアドレスが記憶される。
【００８７】
図１０の例では，レジスタ番号“１２８”の第１拡張レジスタE_REG1に対してレジスタ番号“１”の第１拡張リネーミングレジスタER_REG1が割り当てられている。第２拡張レジスタE_REG2は非SIMD演算では使用されないため，第２拡張レジスタリネーミングマップは必要なく，レジスタリネーミング部REG_RENは第２拡張レジスタリネーミングマップを有していない。
【００８８】
図１１のSIMD命令実行時におけるレジスタリネーミング処理を説明する。SIMD命令が実行された場合，CPUコアは３つのまたは３組の８バイトデータに対して１つの同じ処理を行う。この場合，浮動小数点SIMDレジスタFS_REGにおいては，０〜１２７のレジスタ番号のうち同じレジスタ番号を有する基本レジスタB_REGと第１拡張レジスタE_REG1，第２拡張レジスタE_REG2とがセットで使用される。そして，SIMD命令に応じて並列処理される３つのまたは３組の８バイトデータのうち，１つ目のデータにより基本レジスタB_REGが使用され，２つ目，３つ目のデータにより基本レジスタと同じ番号の第１拡張レジスタE_REG1，第２拡張レジスタE_REG2が使用される。
【００８９】
図１１に示されるように，SIMD命令によりディスティネーションオペランドとして浮動小数点SIMDレジスタFS_REGのレジスタ番号“０”が指定された場合，CPUコアは，SIMD命令により指定された３つのまたは３組の８バイトデータに対して，３つの演算器B_EXC，E_EXC1，E_EXC2の演算ユニットが，同じ処理を並列で実行する。そして，処理結果のデータは，一旦，浮動小数点リネーミングレジスタFR_REGに書き込まれた後，その命令を完了できるタイミングで浮動小数点SIMDレジスタFS_REGに書き込まれる。この場合，浮動小数点SIMDレジスタFS_REGでは，処理された１つ目の８バイトデータがレジスタ番号“０”の基本レジスタB_REGに格納され，２つ目，３つ目のデータがレジスタ番号“０”の第１拡張レジスタE_REG1，第２拡張レジスタE_REG2にそれぞれ格納される。
【００９０】
一方，レジスタリネーミング部REG_RENでは，同じレジスタ番号を有する基本レジスタB_REGおよび第１拡張レジスタE_REG1に対して，異なるレジスタ番号を有する基本リネーミングレジスタBR_REGおよび第１拡張リネーミングレジスタER_REG1をそれぞれ割り当てることが可能である。但し，第２拡張レジスタE_REG2に対する第２拡張リネーミングレジスタER_REG2は，基本リネーミングレジスタBR_REGと同じ番号が割り当てられる。したがって，基本リネーミングレジスタBR_REGと第２拡張リネーミングレジスタER_REG2とは，それぞれ異なるレジスタ番号に割り当てられることはできない。
【００９１】
図１１の例では，レジスタ番号“０”の基本レジスタB_REGに対してレジスタ番号“０”の基本リネーミングレジスタBR_REGが割り当てられ，レジスタ番号“０”の第１拡張レジスタE_REG1に対してはレジスタ番号“２”の第１拡張リネーミングレジスタER_REG1が割り当てられている。第２拡張レジスタER_REG2に対しては，基本リネーミングレジスタBR_REGと同じレジスタ番号“０”の第２拡張リネーミングレジスタER_REG2が割り当てられている。
【００９２】
したがって，SIMD命令によりディスティネーションオペランドとして浮動小数点SIMDレジスタFS_ERGのレジスタ番号“０”のレジスタが指定され，図１１のように浮動小数点リネーミングレジスタREN_REG内の３つのリネーミングレジスタBR_REG，ER_REG1，ER_REG2が割り当てられた場合，次のように処理される。即ち，処理された一つ目の８バイトデータはレジスタ番号“０”の基本リネーミングレジスタBR_REGに一旦格納され，２つ目のデータはレジスタ番号“２”の第１拡張リネーミングレジスタER_REG1に格納され，３つ目のデータはレジスタ番号“０”の第２拡張リネーミングレジスタER_REG2に格納される。そして，命令の順番に基づいて実行中のSIMD命令を完了するタイミングで，３つのリネーミングレジスタに格納されたそれぞれのデータが，レジスタ番号“０”の基本レジスタB_REG，第１拡張レジスタE_REG1，第２拡張レジスタE_REG2にそれぞれ転送される。それによりSIMD命令がインオーダで完了する。
【００９３】
［第２の実施の形態］
図１２は，第２の実施の形態における3-SIMD構成におけるSIMD命令のレジスタリネーミング処理を示す図である。第２の実施の形態では，レジスタリネーミング部REG_REN内のリネーミングマップに，同じレジスタ番号を有する基本レジスタB_REGおよび第１拡張レジスタE_REG1に対して，異なるレジスタ番号を有する基本リネーミングレジスタBR_REGおよび第１拡張リネーミングレジスタER_REG1をそれぞれ割り当てることが可能である。一方，第２拡張レジスタE_REG2に対する第２拡張リネーミングレジスタER_REG2には，第１拡張リネーミングレジスタER_REG1と同じ番号が割り当てられる。図１１の第１の実施の形態では，第２拡張レジスタE_REG2に対する第２拡張リネーミングレジスタER_REG2に，基本リネーミングレジスタBR_REGと同じ番号が割り当てられており，この点が，第２の実施の形態の相違点である。
【００９４】
図１２の例では，SMMD命令によりディスティネーションオペランドとして浮動小数点SIMDレジスタFS_REG内のレジスタ番号”０”が指定され，命令デコーダが，レジスタ番号”０”の基本レジスタB_REGに対してレジスタ番号”０”の基本リネーミングレジスタBR_REGを割り当て，第１拡張レジスタE_REG1と第２拡張レジスタE_REG2に対して同じレジスタ番号”２”の第１拡張リネーミングレジスタER_REG1と第２拡張リネーミングレジスタER_REG2を割り当てている。
【００９５】
図１２のSIMD命令実行時におけるレジスタリネーミング処理は，図１１の第１のSIMD命令実行時の処理と同様である。
【００９６】
［本実施の形態のCPUコアの動作］
次に，浮動小数点演算命令を実行する時のCPUコアの動作について具体的に説明する。以下の説明では，例として浮動小数点演算命令の動作を説明するが，浮動小数点ロード命令や浮動小数点ストア命令であってもレジスタリネーミング処理は同様である。
【００９７】
命令デコーダ３０５が浮動小数点演算命令をデコードすると，CPUコアは，ソースオペランドで指定されるレジスタからデータを読み込み，演算命令を実行し，ディスティネーションオペランドで指定されるレジスタに対して書き込みを行う。
【００９８】
例えば，浮動小数点演算命令の例として，演算の実行に6サイクル必要とする次の命令を実行するものとする。浮動小数点のSIMD命令（以下SIMD演算命令と呼ぶ）の命令コードは，例えば次のように記述される。
Simd-fmad  %f127＊%f100＋%f50 = %f10
この命令では，ソースオペランドとして%f127，%f100，%f50の３つのレジスタが指定される。指定されたレジスタからはそれぞれ3つの8バイトデータが読み込まれて，３系統の乗算および加算処理が並列に実行される。つまり，それぞれ３つのデータを有する３組のデータが読み込まれて，３系統の演算器で３組のデータが並列に処理される。そして，それぞれの演算結果は，ディスティネーションオペランドである%f10で指定される浮動小数点SIMDレジスタFS_REGに書き込まれる。
【００９９】
一方，浮動小数点の非SIMD命令（以下非SIMD演算命令と呼ぶ）の命令コードは，オペコードが異なること以外は上記と同じ形式で記述される。この命令では，ソースオペランドで指定されるレジスタからそれぞれ1系統の演算を行い，演算結果がディスティネーションオペランドで指定される浮動小数点SIMDレジスタ内のレジスタに書き込まれる。
【０１００】
図１１または図１２のSIMD演算命令では，ディスティネーションオペランドにて０〜１２７のいずれかのレジスタ番号が指定される。一方，図１０の非SIMD演算命令では，ディスティネーションオペランドにて０〜２５５のいずれかのレジスタ番号が指定される。
【０１０１】
図１３，図１４は，本実施の形態における浮動小数点SIMD演算命令を実行する場合のパイプライン処理を説明する図である。
【０１０２】
Ｄサイクルは命令デコードサイクルである。Ｄサイクルでは，命令デコーダ３０５が，浮動小数点ＳＩＭＤ命令をデコードし，デコード結果に基づいて，コミットスタックエントリCSEと，浮動小数点リザベーションステーションRSFに，それぞれ対応するエントリを登録する（S1，S2）。コミットスタックエントリCSEには，浮動小数点SIMD演算命令以外の全ての命令に対応するエントリが登録される。また，浮動小数点リザベーションステーションRSFには，浮動小数点の命令に対応するエントリが登録される。
【０１０３】
命令デコーダ３０５は，主に，演算結果の書き込み先に関する情報をコミットスタックエントリCSEのエントリに登録する。また，命令デコーダ３０５は，書き込み先の浮動小数点SIMDレジスタFS_REG内の３つのレジスタに対して，浮動小数点リネーミングレジスタFR_ERG内の３つのレジスタを割り当て，その対応関係をレジスタリネーミング部REG_REN内の基本レジスタリネーミングマップBRRMと拡張レジスタリネーミングマップERRM1とに登録する（S3)。具体的には，命令デコーダ３０５は，書き込み先の浮動小数点SIMDレジスタFS_REG内の指定されたレジスタ番号に対応する両マップBRRM，ERRM1のエントリに，割り当てた基本リネーミングレジスタBR_REGと第１拡張リネーミングレジスタER_REG1のレジスタ番号またはアドレスを書き込む。そして，命令デコーダ３０５は，登録したリネーミングレジスタのレジスタ番号またはアドレスを，コミットスタックエントリCSEのエントリに登録する（S4)。
【０１０４】
また，命令デコーダ３０５は，ソースオペランドのソースデータに関する情報を浮動小数点リザベーションステーションRSFのエントリに登録する。ソースオペランドのソースデータのアドレスが，例えば浮動小数点SIMDレジスタFS_REG内のレジスタである場合に，それに対して割り当てられている浮動小数点リネーミングレジスタに一時的に格納されているデータを入力して演算する場合は，命令デコーダ３０５は，レジスタリネーミング部内のマップを参照して浮動小数点リネーミングレジスタのアドレスを取得して，RSFのエントリに登録する（S4)。
【０１０５】
Ｐサイクルはプライオリティサイクルである。Ｐサイクルでは，浮動小数点リザベーションステーションRSFは，登録されたエントリのデータの待ち合わせ制御を行う。RSFは，登録されたエントリーのうち，必要な入力データがそろったエントリの中で最も古いエントリをSIMD演算器３３０に発行する（S10)。次に，図１４に移る。
【０１０６】
次のＢサイクルはバッファサイクルである。Ｂサイクルでは，基本オペランドデータ選択器B_SELと，第１，第２拡張オペランドデータ選択器E_SEL1，E_SEL2が，ソースオペランドのデータを，ロードレジスタ312_B，312_E1，312_E2と，結果レジスタBr_reg，Er_reg1，Er_reg2と，リネーミングレジスタBR_REG，ER_REG1，ER_REG2と，レジスタB_REG，E_REG1，E_REG2のいずれから選択して，対応する演算器に入力する(S11)。ロード処理または演算器での演算は終了したがCSEでの完了処理が済んでいない命令の実行結果を入力とする際は，入力データはロードレジスタ，結果レジスタまたはリネーミングレジスタから入力される。また，実行完了した命令の処理結果は，レジスタB_REG，E_REG1，E_REG2から入力される。
【０１０７】
Ｘ１−Ｘ６は６つの演算実行サイクルである。Ｘ１−Ｘ６サイクルでは，基本演算器B_EXC，第１，第２拡張演算器E_EXC1，E_EXC2が，それぞれのオペランドデータ選択器が選択した入力データについて演算処理を実行する。そして，各演算器は，演算結果をそれぞれの結果レジスタBr_reg，Er_reg1，Er_reg2に格納する（S12)。また，各演算器は，演算結果を結果レジスタに格納すると，演算完了報告をコミットスタックエントリCSEに出力する（S13)。
【０１０８】
Ｕサイクルはアップデートサイクルである。Ｕサイクルでは，結果レジスタに格納された演算結果が対応するリネーミングレジスタBR_REG，ER_REG1，ER_REG2に格納される（S14)。
【０１０９】
Ｃサイクルは命令完了サイクルである。Ｃサイクルでは，コミットスタックエントリCSEは，浮動小数点SIMD演算器３３０からの演算報告に基づいて，SIMD演算命令が完了したことを判定する（S15)。
【０１１０】
最後に，Ｗサイクルはレジスタ更新サイクルである。コミットスタックエントリCSEは，命令順に基づいて現在のSIMD演算命令を完了できるタイミングで，リネーミングレジスタBR_REG，ER_REG1，ER_REG2内の演算結果を，浮動小数点SIMDレジスタFS_REG内の３つのレジスタB_REG,E_REG1,E_REG2に格納する（S16)。コミットスタックエントリCSEは，リネーミングレジスタのどのレジスタの演算結果を，浮動小数点SIMDレジスタのどのレジスタに格納するかの情報を，リネーミングレジスタに通知する。
【０１１１】
以上のように，浮動小数点SIMD演算命令を実行する場合は，浮動小数点SIMDレジスタFS_REG内の３つのレジスタB_REG，E_REG1，E_REG2と，それらに割り当てられた浮動小数点リネーミングレジスタFR_REG内の３つのリネーミングレジスタBR_REG，ER_REG1，ER_REG2とが使用される。
【０１１２】
図１５，図１６は，本実施の形態における非SIMD演算命令を実行する場合のパイプライン処理を説明する図である。各処理の番号は，図１３，１４と同じである。
【０１１３】
非SIMD演算命令を実行する場合は，浮動小数点SIMDレジスタFS_REG内の基本レジスタB_REG，または第１拡張レジスタE_REG1のいずれかと，それに割り当てられた浮動小数点リネーミングレジスタFR_REG内の基本リネーミングレジスタBR_REGまたは第１拡張リネーミングレジスタER_REG1のいずれかとが使用される。第２拡張レジスタE_REG2と第２拡張リネーミングレジスタER_REG2は使用されない。図１５，１６の例では，図１０と同様に，第１拡張レジスタE_REG1と第１拡張リネーミングレジスタER_REG1が使用される。それに伴い，レジスタリネーミング部REG_RENでは，拡張レジスタリネーミングマップERRMに対応関係が記憶される。
【０１１４】
Ｄサイクルでは，命令デコーダ３０５が，浮動小数点非ＳＩＭＤ命令をデコードし，デコード結果に基づいて，コミットスタックエントリCSEと，浮動小数点リザベーションステーションRSFに，それぞれ対応するエントリを登録する（S1，S2）。また，命令デコーダ３０５は，書き込み先の浮動小数点SIMDレジスタFS_REG内の第１拡張レジスタE_REG1に対して，浮動小数点リネーミングレジスタFR_REG内の第１拡張リネーミングレジスタER_REG1を割り当て，その対応関係をレジスタリネーミング部REG_REN内の拡張レジスタリネーミングマップERRM1に登録する（S3)。そして，命令デコーダ３０５は，登録したリネーミングレジスタのレジスタ番号またはアドレスを，コミットスタックエントリCSEのエントリに登録する（S4)。それ以外の処理は，図１３のSIMD演算命令と同様である。
【０１１５】
Ｐサイクルでは，浮動小数点リザベーションステーションRSFは，登録されたエントリーのうち，必要な入力データがそろったエントリの中で最も古いエントリをSIMD演算器３３０に発行する（S10)。次に，図１６に移る。
【０１１６】
次のＢサイクルでは，第１拡張オペランドデータ選択器E_SEL1が，ソースオペランドのデータを，ロードレジスタ312_B，312_E1，312_E2と，結果レジスタBr_reg，Er_reg1，Er_reg2と，リネーミングレジスタBR_REG，ER_REG1，ER_REG2と，レジスタB_REG，E_REG1，E_REG2のいずれから選択して，第１拡張演算器E_EXC1に入力する(S11)。
【０１１７】
Ｘ１−Ｘ６サイクルでは，第１拡張演算器E_EXC1が，オペランドデータ選択器E_SEL1が選択した入力データについて演算処理を実行する。そして，第１拡張演算器は，演算結果を結果レジスタEr_reg1に格納する（S12)。また，第１拡張演算器は，演算結果を結果レジスタに格納すると，演算完了報告をコミットスタックエントリCSEに出力する（S13)。
【０１１８】
Ｕサイクルでは，結果レジスタEr_reg1に格納された演算結果が対応する第１拡張リネーミングレジスタER_REG1に格納される（S14)。
【０１１９】
Ｃサイクルでは，コミットスタックエントリCSEは，浮動小数点SIMD演算器３３０からの演算報告に基づいて，SIMD演算命令が完了したことを判定する（S15)。
【０１２０】
最後に，Ｗサイクルでは，コミットスタックエントリCSEは，命令順に基づいて現在の非SIMD演算命令を完了できるタイミングで，第１拡張リネーミングレジスタER_REG1内の演算結果を，浮動小数点SIMDレジスタFS_REG内の第１拡張レジスタE_REG1に格納する（S16)。
【０１２１】
以上の実施の形態をまとめると，次の付記のとおりである。
【０１２２】
（付記１）
命令をデコードする命令デコーダと，
前記命令デコーダがデコードした命令が，複数のデータを１つの命令で並列処理するマルチデータ命令の場合に，前記複数のデータを並列に処理し，単数のデータを１つの命令で処理する非マルチデータ命令の場合に，前記単数のデータを個別に処理する３個以上の複数の演算器と，
前記複数の演算器それぞれに対応して設けられ，前記演算器の演算結果を格納可能な複数の格納先レジスタ群と，
前記複数の演算器それぞれに対応して設けられ，前記演算結果を格納可能な複数のリネーミングレジスタ群と，
前記格納先レジスタ群のうち命令により指定された指定格納先レジスタと，前記リネーミングレジスタ群から割り当てられた割当リネーミングレジスタとの対応関係を記憶するレジスタリネーミング部とを有し，
前記格納先レジスタ群と前記リネーミングレジスタ群を有するレジスタのセットが，前記マルチデータ命令の演算と前記非マルチデータ命令の演算で使用される基本レジスタセットに加えて，前記マルチデータ命令の演算と前記非マルチデータ命令の演算で使用される第１拡張レジスタセットと，前記マルチデータ命令の演算で使用され且つ前記非マルチデータ命令の演算で使用されない第２拡張レジスタセットとを有し，
前記レジスタリネーミング部が，前記基本レジスタセットの前記対応関係と，前記第１拡張レジスタセットの前記対応関係とを記憶する演算処理装置。
【０１２３】
（付記２）
前記基本レジスタセットの前記対応関係または前記第１拡張レジスタセットの前記対応関係は，前記第２拡張レジスタセットの前記対応関係と共通である付記１に記載の演算処理装置。
【０１２４】
（付記３）
前記レジスタリネーミング部は，前記基本レジスタセットの前記対応関係を記憶する基本マップと，前記第１拡張レジスタセットの前記対応関係とを記憶する第１拡張マップとを有し，前記第２拡張レジスタセットの前記対応関係を記憶するマップを有さない付記２に記載の演算処理装置。
【０１２５】
（付記４）
更に，
前記命令デコーダがデコードした命令を，前記命令の順番にかかわらず，前記演算器に出力するリザベーションステーションと，
前記割当リネーミングレジスタに格納された前記演算結果を，前記命令の順番に，前記割当リネーミングレジスタに対応する前記指定格納先レジスタに格納するよう制御するコミットスタックエントリとを有する付記１または２に記載の演算処理装置。
【０１２６】
（付記５）
前記命令デコーダは，前記マルチデータ命令をデコードした場合，前記基本レジスタセットの前記対応関係と前記第１拡張レジスタセットの前記対応関係とを決定し，前記非マルチデータ命令をデコードした場合，前記基本レジスタセットの前記対応関係または前記第１拡張レジスタセットの対応関係を決定し，
前記マルチデータ命令の演算で使用される前記第２拡張レジスタセットの前記対応関係は，前記前記基本レジスタセットの前記対応関係または前記第１拡張レジスタセットの対応関係と同じである付記１または２に記載の演算処理装置。
【０１２７】
（付記６）
前記複数の演算器は，前記マルチデータ命令を実行した場合，前記基本レジスタセットと前記第１拡張レジスタセットと前記第２拡張レジスタセット内の前記割当リネーミングレジスタに前記演算結果を格納し，
前記複数の演算器のいずれかは，前記非マルチデータ命令を実行した場合，前記基本レジスタセットまたは前記第１拡張レジスタセット内の前記割当リネーミングレジスタに前記演算結果を格納する付記１または２に記載の演算処理装置。
【０１２８】
（付記７）
命令をデコードする命令デコーダと，
前記命令デコーダがデコードした命令が，複数のデータを１つの命令で並列処理するマルチデータ命令の場合に，前記複数のデータを並列に処理し，単数のデータを１つの命令で処理する非マルチデータ命令の場合に，前記単数のデータを個別に処理する３個以上の複数の演算器と，
前記複数の演算器それぞれに対応して設けられ，前記演算器の演算結果を格納可能な複数の格納先レジスタ群と，
前記複数の演算器それぞれに対応して設けられ，前記演算結果を格納可能な複数のリネーミングレジスタ群と，
前記格納先レジスタ群のうち命令により指定された指定格納先レジスタと，前記リネーミングレジスタ群から割り当てられた割当リネーミングレジスタとの対応関係を記憶するレジスタリネーミング部とを有する演算処理装置の制御方法であって，
前記マルチデータ命令を実行する場合，前記複数の格納先レジスタ群と前記複数のリネーミングレジスタ群とを使用する工程と，
前記非マルチデータ命令を実行する場合，前記複数の格納先レジスタ群内の基本格納先レジスタ群と，複数の拡張格納先レジスタ群の第１拡張格納先レジスタ群と，前記複数のリネーミングレジスタ群内の基本リネーミングレジスタ群と複数の拡張リネーミングレジスタ群の第１拡張リネーミングレジスタ群とを使用する工程を有する演算処理装置の制御方法。
【０１２９】
（付記８）
前記非マルチデータ命令を実行する場合の工程では，前記複数の拡張格納先レジスタ群の第１拡張格納先レジスタ群とは異なる第２拡張格納先レジスタ群と，前記複数の拡張リネーミングレジスタ群の第１拡張リネーミングレジスタ群とは異なる第２拡張リネーミングレジスタ群とを使用しない付記７に記載の演算処理装置の制御方法。
【符号の説明】
【０１３０】
３０５：命令フェッチアドレス生成器
３０２：分岐予測機構
３０３：一次命令キャッシュ
３０４：命令バッファ
３０５：命令デコーダ
REG_REN：レジスタリネーミング部
BRM：基本レジスタリネーミングマップ
ERM：拡張レジスタリネーミングマップ
RSA：主記憶オペランド生成用リザベーションステーション（アドレス生成リザベーションステーション）
RSE：固定小数点演算用リザベーションステーション
RSF：浮動小数点演算用リザベーションステーション
RSBR：分岐用リザベーションステーション
CSE：コミットスタックエントリ
３１０：オペランドアドレス生成器
３１２：一次データキャッシュ
３１３ストアバッファ
３２０：固定小数点演算器
３２２：固定小数点レジスタ
３２１：固定小数点リネーミングレジスタ
３３０：浮動小数点SIMD演算器
B_EXC：基本演算器
E_EXC：拡張演算器
Br_reg：基本結果レジスタ
Er_reg：拡張結果レジスタ
FS_REG：浮動小数点SIMDレジスタ
B_REG：基本レジスタ
E_REG：拡張レジスタ
FR_REG：浮動小数点リネーミングレジスタ
BR_REG：基本リネーミングレジスタ
ER_REG：拡張リネーミングレジスタ
PC：プログラムカウンタ
【図１】
2015191463.tif 000003
【図２】
2015191463.tif 000004
【図３】
2015191463.tif 000005
【図４】
2015191463.tif 000006
【図５】
2015191463.tif 000007
【図６】
2015191463.tif 000008
【図７】
2015191463.tif 000009
【図８】
2015191463.tif 000010
【図９】
2015191463.tif 000011
【図１０】
2015191463.tif 000012
【図１１】
2015191463.tif 000013
【図１２】
2015191463.tif 000014
【図１３】
2015191463.tif 000015
【図１４】
2015191463.tif 000016
【図１５】
2015191463.tif 000017
【図１６】
2015191463.tif 000018