(57)【特許請求の範囲】
【請求項１】
所定の精度を有する単精度データ又は前記単精度データの倍の精度を有する倍精度データのいずれかを格納可能なデータレジスタと、
前記単精度データを第一のデータ形式により前記データレジスタに書き込む場合、前記データレジスタの上位半分又は下位半分の一方に前記単精度データを書き込むとともに他方には所定値を書き込み、前記単精度データを第二のデータ形式により前記データレジスタに書き込む場合、前記データレジスタの上位半分又は下位半分の一方に前記単精度データを書き込むとともに他方には書き込みを行わない制御部を備えることを特徴とする演算処理装置。
【請求項２】
前記演算処理装置はさらに、
命令をデコードするデコーダを備え、
前記制御部は、
前記デコーダによる命令のデコード結果に基づいて、前記単精度データを前記第一のデータ形式又は前記第二のデータ形式のいずれにより前記データレジスタに書き込むことを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記演算処理装置はさらに、
前記第一のデータ形式又は前記第二のデータ形式のいずれにより前記データレジスタに書き込むかを指定するデータ形式指定情報を保持する拡張レジスタを備えることを特徴とする請求項１に記載の演算処理装置。
【請求項４】
前記演算処理装置はさらに、
命令をデコードするデコーダと、
データを保持するキャッシュメモリを備え、
前記デコーダが、単精度データに対する演算を前記第一のデータ形式により行う単精度演算命令、単精度データを前記第一のデータ形式により前記データレジスタにロードする単精度ロード命令又は前記データレジスタが前記第一のデータ形式により保持する単精度データを前記キャッシュメモリに保持させる単精度ストア命令のいずれかの命令をデコードする場合、前記いずれかの命令のオペコードに含まれるレジスタ指定情報と前記拡張レジスタに保持された前記レジスタ指定情報を拡張する拡張レジスタ指定情報とに基づいて、前記いずれかの命令がアクセスを行うデータレジスタを指定することを特徴とする請求項３記載の演算処理装置。
【請求項５】
前記演算処理装置はさらに、
命令をデコードするデコーダと、
演算命令を実行する演算処理部を有し、
前記デコーダは、
前記単精度データに対する演算を行う単精度演算命令を実行する場合、前記第一のデータ形式に対する単精度演算命令と前記第二のデータ形式に対する単精度演算命令との間で共通のオペコードを前記演算処理部に出力し、
前記演算処理部は、
前記デコーダが出力したオペコードに基づき、前記データレジスタの上位半分又は下位半分の一方に前記単精度演算命令の演算結果を出力するとともに、他方には所定値を出力することを特徴とする請求項１に記載の演算処理装置。
【請求項６】
前記演算処理装置はさらに、
命令をデコードするデコーダと、
ロード命令を実行するロード処理部を有し、
前記デコーダは、
前記単精度データを前記データレジスタにロードする単精度ロード命令をデコードする場合、前記第一のデータ形式に対する単精度演算命令と前記第二のデータ形式に対する単精度演算命令との間で共通のオペコードを前記ロード処理部に出力し、
前記ロード処理部は、
前記デコーダが出力したオペコードに基づき、前記データレジスタの上位半分又は下位半分の一方に前記単精度データを出力するとともに、他方には所定値を出力することを特徴とする請求項１に記載の演算処理装置。
【請求項７】
前記演算処理装置はさらに、
命令をデコードするデコーダと、
データを保持するキャッシュメモリと、
ストア命令を実行するストア処理部を有し、
前記デコーダは、
前記データレジスタが前記第一のデータ形式により保持する単精度データを前記キャッシュメモリに保持させる単精度ストア命令をデコードする場合、前記第一のデータ形式に対する単精度ストア命令と前記第二のデータ形式に対する単精度ストア命令との間で共通のオペコードを前記ストア処理部に出力し、
前記ストア処理部は、
前記デコーダが出力したオペコードに基づき、前記データレジスタの上位半分又は下位半分の一方に保持された前記単精度データのみを前記キャッシュメモリに出力することを特徴とする請求項１に記載の演算処理装置。
【請求項８】
所定の精度を有する単精度データ又は前記単精度データの倍の精度を有する倍精度データのいずれかを格納可能なデータレジスタを有する演算処理装置の制御方法において、
前記単精度データを第一のデータ形式により前記データレジスタに書き込む場合、前記演算処理装置が有する制御部が、前記データレジスタの上位半分又は下位半分の一方に前記単精度  データを書き込むとともに他方には所定値を書き込み、
前記単精度データを第二のデータ形式により前記データレジスタに書き込む場合、前記制御部が、前記データレジスタの上位半分又は下位半分の一方に前記単精度データを書き込むとともに他方には書き込みを行わないことを特徴とする演算処理装置の制御方法。
【請求項９】
前記演算処理装置の制御方法において、
前記演算処理装置はさらに、データレジスタ間の依存関係を検出するリネーミングレジスタを有し、
前記データレジスタに対する前記単精度データの書き込みを行う前に、前記単精度データを前記リネーミングレジスタに保持させ、
前記単精度データを前記第一のデータ形式により前記データレジスタに書き込む場合、前記演算処理装置が有する制御部が、レジスタ指定情報で指定されるデータレジスタの上位半分又は下位半分の一方に前記単精度データを書き込むとともに他方には所定値を書き込み、
前記単精度データを前記第二のデータ形式により前記データレジスタに書き込む場合かつ前記レジスタ指定情報が偶数である場合、前記制御部が、前記データレジスタの上位半分に前記リネーミングレジスタが保持する単精度データを書き込み、
前記単精度データを前記第二のデータ形式により前記データレジスタに書き込む場合かつ前記レジスタ指定情報が奇数である場合、前記制御部が、前記データレジスタの下位半分に前記リネーミングレジスタが保持する単精度データを書き込むことを特徴とする請求項８記載の演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセサに関し、更に詳しくはプロセサにおける単精度浮動小数点データの格納方法に関する。
【背景技術】
【０００２】
プロセサの処理性能を向上するために、演算の入力データを得て演算を実行する際に、先行する命令の結果が演算器から出力され浮動小数点レジスタに書き込む前に該演算器からの出力データを後続の入力データとして使用するバイパス機能がある。このバイパス機能を実現するためには、先行する命令の出力との依存関係を検出する回路が必要である。
【０００３】
ところで、例えばＳＰＡＲＣ−Ｖ９（ＳＰＡＲＣ：登録商標）アーキテクチャにおける浮動小数点レジスタは、レジスタアドレスが５ビットなので、３２本の指示が可能である。図１８にＳＰＡＲＣ−Ｖ９アーキテクチャでの浮動小数点レジスタの構成を示す。単精度浮動小数点レジスタ（４バイト）３２本を％ｆ０、％ｆ１、％ｆ２、・・・、％ｆ３０、％ｆ３１のように表して、倍精度浮動小数点レジスタ（８バイト）３２本を％ｄ０、％ｄ２、％ｄ４、・・・、％ｄ６２のように表す。倍精度浮動小数点レジスタは偶数番号のみアドレスの指定が可能である。割り当ては、倍精度浮動小数点レジスタ％ｄ（ｎ）（０≦ｎ≦３０）（８バイト）は、単精度浮動小数点レジスタ％ｆ（ｎ）（４バイト）と％ｆ（ｎ＋１）（４バイト）の２つを結合したものに対応する。
【０００４】
このＳＰＡＲＣ−Ｖ９アーキテクチャのように、単精度浮動小数点レジスタが４バイトのレジスタで、倍精度浮動小数点レジスタがこれを２つ合わせた８バイトのレジスタ、という使い方をすると、例えば倍精度浮動小数点データ（８バイト）を％ｄ０に入力するという演算を行うとき、上述したバイパス機能を実現するために、％ｆ０（４バイト）と％ｆ１（４バイト）の２つの出力タイミングを検出する必要がある。このように％ｄ０から％ｄ３０までの倍精度浮動小数点レジスタのための依存関係検出回路は、８バイトのレジスタだけで依存関係を検出するだけの回路に比べ、より多くの回路を必要とする。
【０００５】
プロセサにおいて回路量が増加してしまうと、コストパフォーマンスが落ちてしまうだけでなく、プロセサの動作周波数が低下する。これにより、プロセサの性能が低下してしまう。そこで、プロセサ中の回路量をできるだけ抑えることが求められる。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
そこで、本発明は、単精度浮動小数点データおよび倍精度浮動小数点データを扱うプロセサにおいて、新しい単精度浮動小数点データの格納方式を提案することで、バイパス機能のための依存関係検出回路を構成するハードウェア量を可能な限り低減することを目的とする。
【課題を解決するための手段】
【０００７】
本単精度浮動小数点データの格納方式は、倍精度浮動小数点データを格納可能な大きさを有する、倍精度浮動小数点データと単精度浮動小数点データとが格納されるレジスタを備えるプロセサにおいて、単精度浮動小数点データ処理が指定された場合、前記レジスタの上位半分に入力した単精度浮動小数点データを書き込むとともに、前記レジスタの下位半分にオールゼロを書き込む。
【発明の効果】
【０００８】
開示の単精度浮動小数点データの格納方式によれば、単精度浮動小数点データの処理を扱う場合でも倍精度小数点レジスタで扱うことが可能となるため、レジスタの依存関係検出回路として倍精度小数点レジスタの依存関係検出回路をそのまま利用することが可能となる。また、単精度浮動小数点データを代替単精度浮動小数点データとして扱うことで演算器入力レジスタへのデータ選択回路を大きく削減することができる。よって、プロセサ中のハードウェア量を低減することができ、これによりプロセサの複雑化を防ぐことができるため動作周波数を向上させることができる。
【発明を実施するための最良の形態】
【０００９】
以下、図面を参照して、本発明の実施の形態について説明する。
まずはじめに、本発明の実施例を適用するプロセサについて説明する。
ＳＰＡＲＣ−Ｖ９における浮動小数点レジスタの構成については上述したが、本発明の実施例を適用するプロセサは、浮動小数点レジスタを更に拡張する。
【００１０】
図１に示すように、このプロセサでは、拡張前置命令を用いて拡張演算レジスタ（ＸＡＲ）というレジスタを更新し、浮動小数点レジスタアドレスが示す領域を拡張する。つまり、拡張前置命令により浮動小数点レジスタにアクセスする命令を修飾し、浮動小数点レジスタの領域を拡張することになる。より詳細については後述するが、例えば拡張演算レジスタ（ＸＡＲ）のうち３ビットを浮動小数点レジスタアドレスとして追加し、倍精度浮動小数点レジスタ（８バイト）を２５６本まで増やす構成となっている。
【００１１】
図１に示した浮動小数点レジスタ構造を備えるプロセサで、倍精度浮動小数点レジスタを％ｄ０から％ｄ５１０（偶数番号のみ指定可能）の２５６本まで指定できる一方で、単精度浮動小数点レジスタを％ｆ０から％ｆ２５５まで４バイトの単位で２５６本指定できるようにすると、ハードウェアとして拡張レジスタの依存関係を検出するための回路が非常に大きくなってしまう。
【００１２】
そこで図１に示した拡張された浮動小数点レジスタを備えるプロセサにおける単精度浮動小数点データ格納方式について、以下に説明する。尚、本発明の実施例として以下に説明するが、本発明はこれから説明する実施例に限定されることはなく、その要旨を逸脱しない範囲で様々な応用が可能であることはいうまでもない。つまり本発明の単精度浮動小数点データ格納方式は、実施例のプロセサ構造に限定されることなくどのような構造のプロセサであってもよい。
【００１３】
本実施例では、拡張演算レジスタ（ＸＡＲ）により単精度浮動小数点命令が拡張された場合に、単精度浮動小数点データを倍精度浮動小数点データ長である８バイトレジスタの上位４バイトに配置し、下位４バイトにはオールゼロを配置してデスティネーションレジスタに書き込むように定義する。このような形式で単精度浮動小数点データを格納するのを代替単精度浮動小数点データと呼ぶことにする。代替単精度浮動小数点データのフォーマットを図２に示す。
【００１４】
それに対し、通常の単精度浮動小数点データ４バイトのみを浮動小数点レジスタに格納するものを通常単精度浮動小数点データと呼ぶことにする。通常単精度浮動小数点データのフォーマットを図３に示す。
【００１５】
このように本実施例では、単精度浮動小数点データを、代替単精度浮動小数点データ、つまり８バイトのデータとして格納可能なように構成する。これにより、従来からＳＰＡＲＣ−Ｖ９で定義されている％ｄ３２から％ｄ６２までのレジスタや、更に拡張演算レジスタ（ＸＡＲ）によりレジスタ拡張を指定された％ｄ６４から％ｄ５１０までのレジスタを用いて単精度浮動小数点演算が可能となる。
【００１６】
また、拡張演算レジスタ（ＸＡＲ）により単精度浮動小数点命令が修飾されたときには、％ｄ３２より小さいレジスタアドレスに対しても同様に８バイトの代替単精度浮動小数点データレジスタとして使用するように構成する。つまり％ｄ０から％ｄ３０（８バイト長、偶数番のみ指定可）として上位４バイトに単精度データを格納し、下位４バイトにオールゼロを格納するように構成する。
【００１７】
％ｆ０から％ｆ３１の４バイトレジスタ３２本を用いる通常の単精度浮動小数点データで格納するのか、代替単精度浮動小数点データで格納するかは、次のように判断する。
まず、命令セットに拡張演算レジスタ（ＸＡＲ）を更新するＳＸＡＲ（Ｓｅｔ  ＸＡＲ）命令という命令を定義する。
【００１８】
拡張演算レジスタ（ＸＡＲ）は、図４に示す構成となっている。図４のＶＡＬ（バリッド）は、１ビット幅の値で、バリッドが立っている場合（ＶＡＬ＝１）に拡張演算レジスタが有効であることを意味する。ＲＤは、拡張される命令のデスティネーションレジスタを指定するアドレスの拡張分の３ビットを格納する領域である。また、ＲＳ１〜ＲＳ３はそれぞれソースレジスタを指定するアドレスの拡張分の３ビットを格納するアドレス拡張領域である。この３ビットは、浮動小数点レジスタを２５６本に拡張するために既存の命令で不足する上位３ビットとなるものである。つまり拡張演算レジスタ（ＸＡＲ）のＶＡＬのバリッドビッドが立っている時、拡張アドレスと浮動小数点命令のオペランドレジスタアドレス５ビットを用いて８バイト（倍精度）レジスタを２５６本まで指定できるようになっている。
【００１９】
このようなＸＡＲの構成において、上述のＳＸＡＲ命令により、拡張演算レジスタ（ＸＡＲ）のＶＡＬ（バリッドビット）がセットされている場合に、単精度浮動小数点処理命令が修飾（拡張）されていると判断することができ、またバリッドビットが立っていない場合には単精度浮動小数点処理命令が修飾されていないと判断することができる。
【００２０】
図５に、通常単精度浮動小数点データで格納するのか、代替単精度浮動小数点データで格納するのかを判断する処理のフローを示す。まず、Ｓ５１で単精度浮動小数点命令をデコードする。Ｓ５２で、拡張演算レジスタ（ＸＡＲ）のバリッドビット（ＶＡＬ）が有効か否かを判断する。Ｓ５２で、ＶＡＬ＝１（ＹＥＳ）であれば浮動小数点レジスタが拡張されているとして代替単精度浮動小数点データとして扱い（Ｓ５３）、Ｓ５２でＶＡＬ＝０（ＮＯ）であれば通常の単精度浮動小数点データとして扱う（Ｓ５４）。
【００２１】
このように、拡張演算レジスタ（ＸＡＲ）により指定可能になった拡張レジスタに関しては、単精度浮動小数点データの処理を扱う場合でも、８バイトデータ単位でのレジスタ依存関係を検出するための回路を用いることができる。つまり、従来の倍精度浮動小数点データのレジスタ依存関係検出回路を用いることができるため、４バイトデータ単位のレジスタ依存関係検出回路は不要となる。
【００２２】
また、より詳しくは後述するが、浮動小数点レジスタのアドレス生成や、レジスタの更新を４バイトにするか８バイトにするかなどの、通常単精度浮動小数点データ処理か代替単精度浮動小数点データ処理かの区別は命令デコード部が行うため、演算処理部、ロード処理部、ストア処理部は、通常単精度浮動小数点データか代替単精度浮動小数点データかの区別する必要がない。演算処理部、ロード処理部、ストア処理部については共通の回路で処理することが可能で、これらを区別するためのハードウェアの追加が不要である。
【００２３】
以下、本実施例のプロセサにおける単精度浮動小数点レジスタ演算処理、ロード命令処理、ストア命令処理について図を参照してより詳しく説明する。
まず、プロセサの構成を図６に示す。
【００２４】
プロセサ６０は、１次命令キャッシュ６１、２次キャッシュ／メモリ部６２、命令デコード部６３、レジスタリネーミングテーブル６４、演算処理部６５、アドレス生成部６６、リネーミングレジスタ６７、ロード処理部６８、ストア処理部６９、固定小数点レジスタ７０、浮動小数点レジスタ７１、１次データキャッシュ７２、コミット制御部７３、拡張演算レジスタＸＡＲ７４を備える。
【００２５】
１次命令キャッシュ６１、１次データキャッシュ７２はキャッシュメモリであり、２次キャッシュ／メモリ６２は通常のメモリまたは２次キャッシュメモリである。固定小数点レジスタ７０は従来の構成であり、浮動小数点レジスタ７１は拡張演算レジスタＸＡＲ７４で拡張され、図１に示したような構成である。
【００２６】
命令デコード部６３は命令のデコードを行う。レジスタリネーミングテーブル６４は、ラッチで構成された回路で、レジスタの依存関係を検出する。演算処理部６５は、演算処理をおこなう演算器等で構成される。アドレス生成部６６はデコードされた命令から、アクセスするアドレスを生成する。リネーミングレジスタ６７は演算処理部６５で処理された結果を一時的に保持するレジスタである。ロード処理部６８、ストア処理部６９はロード命令またはストア命令をそれぞれ処理する回路である。コミット制御部７３は、レジスタ更新、メモリ更新を制御する。また、拡張演算レジスタＸＡＲ７４により単精度浮動小数点命令が拡張されたときには、代替単精度浮動小数点データとして８バイト長の単精度浮動小数点データを扱う。なお、代替単精度浮動小数点データの下位４バイトは、更新時にオールゼロとする。
【００２７】
例として、図７では、浮動小数点レジスタ％ｄ０に代替単精度浮動小数点命令で書き込む場合と、％ｆ０に通常単精度浮動小数点命令で書き込む場合について示す。浮動小数点レジスタ％ｄ０（％ｆ０、％ｆ１）にあらかじめ％ｆ０＝Ｘ、％ｆ１＝Ｙが入っている状態で、単精度浮動小数点データＺを書き込むとき、代替単精度浮動小数点命令で書き込むときは、％ｆ０＝Ｚ、％ｆ１＝オールゼロになる。通常単精度浮動小数点命令で書き込むときは、％ｆ０＝Ｚに更新されるが、％ｆ１は更新されず％ｆ１＝Ｙのままとなる。
【００２８】
さて、まず、浮動小数点レジスタに単精度浮動小数点データを書き込む通常単精度浮動小数点演算、ロード命令と、代替単精度浮動小数点演算、ロード命令について述べる。
図８に、単精度浮動小数点演算命令を処理する演算処理部のデータの流れを示す。図８に示すように、浮動小数点演算処理部６５では、命令制御を行う命令デコード部６３から命令オペコードを受け取り、命令オペコードがオペコードデコード８４される。デコードの結果、単精度浮動小数点演算を指示された場合は、浮動小数点演算器８１は入力レジスタ８２から入力される入力データの上位４バイトのみを用いた演算を行い、下位４バイトは無視する。そして出力時には上位４バイトに演算結果を、下位４バイトにはゼロを出力し、演算出力レジスタ８３に一旦格納し、次のサイクルでその８バイトをリネーミングレジスタ６７に書き込む。
【００２９】
また、図９に単精度浮動小数点ロード命令を処理するロード処理部のデータの流れを示す。図９に示すように、メモリのロード処理を行う１次データキャッシュ７２では、命令制御を行う命令デコード部６３から４バイト長ロードを指示された時には、ロード出力レジスタ９１の上位４バイトに対してキャッシュメモリのデータを、また下位４バイトにはゼロを一旦格納する。そして、次のサイクルで、合計８バイトのデータを、アドレス生成部６６から指定されるアドレスに基づいて、ロード出力レジスタ９１からリネーミングレジスタ６７に書き込む。
【００３０】
命令デコード部６３では、単精度浮動小数点命令が、拡張演算レジスタＸＡＲ７４により修飾されているか否かを解読するが、図８に示した演算処理部６５、および図９に示したロード処理部６８に対しては通常単精度浮動小数点命令と代替単精度浮動小数点命令とで同一のオペコードを生成し、送出する。各処理部はこのオペコードを受け取り単精度浮動小数点処理を行うが、単精度浮動小数点演算処理および単精度浮動小数点ロード処理については、各処理部が図８および図９に示した処理を行っていれば、通常単精度浮動小数点処理と代替単精度浮動小数点処理とで区別して処理を行う必要はない。
【００３１】
通常単精度浮動小数点処理を行うか、代替単精度浮動小数点処理を行うかという制御は命令デコード部６３で行う。
図１０に通常単精度浮動小数点データつまり４バイト書き込みをする場合を、図１１に代替単精度浮動小数点データつまり８バイト書き込みをする場合を示し、図を参照して説明する。
【００３２】
命令デコード部６３は、浮動小数点レジスタの更新を行う通常単精度浮動小数点演算命令、あるいは通常単精度浮動小数点ロード命令の場合、レジスタ更新指示を発行するコミット制御部７３に、４バイトで浮動小数点レジスタ７１の書き込みを行うように指示する。それに対し、代替浮動小数点演算命令あるいは、代替浮動小数点ロード命令の場合（および倍精度浮動小数演算命令、倍精度浮動小数点ロード命令の場合）は、命令デコード部６３はコミット制御部７３に８バイトで浮動小数点レジスタ７１の書き込みを行うように指示する。８バイトで書き込むという指示は、コミット制御部、レジスタファイル部ともに従来からの倍精度浮動小数点データを書き込む処理と同一のものである。
【００３３】
コミット制御部７３では、これらの指示、つまり浮動小数点レジスタに対し、４バイト書き込みをするのか８バイト書き込みを行うかについて記録する１ビットを備える（図１０および図１１の「８バイト長ビット」）。この１ビットの情報に基づき、命令コミット時に、演算結果、もしくはロードした結果を格納するリネーミングレジスタ６７の上位から指定されたレングスのデータを浮動小数点レジスタに書き込む。
【００３４】
図１０のコミット制御部７３の各要素を拡大した部分において、浮動小数点ライトビット＝‘１’、８バイト長ビット＝‘０’である。浮動小数点レジスタでは、書き込み先浮動小数点レジスタのアドレスが偶数の場合は、８バイトの浮動小数点レジスタの上位４バイトにリネーミングレジスタ６７の上位４バイトのデータを書き込み、書き込み先浮動小数点レジスタのアドレスが奇数の場合は、８バイトの浮動小数点レジスタの下位４バイトにリネーミングレジスタ６７の上位４バイトのデータを書き込む。
【００３５】
また、図１１のコミット制御部７３の各要素を拡大した部分において、浮動小数点ライトビット=‘１’、８バイト長ビット=’１’である。浮動小数点レジスタでは、書き込み先である８バイトの浮動小数点レジスタの上位４バイトにリネーミングレジスタ６７の上位４バイトのデータを、８バイトの浮動小数点レジスタの下位４バイトにリネーミングレジスタ６７の下位４バイトのデータを書き込む。
【００３６】
さて、次に、キャッシュメモリに単精度浮動小数点データを書き込む通常単精度浮動小数点ストア命令と、代替単精度浮動小数点ストア命令について説明する。
図１２に単精度浮動小数点ストア命令を処理するストア処理部６９のデータの流れを示す。ストア処理部６９においても、通常単精度浮動小数点ストア命令か、代替単精度浮動小数点ストア命令かによって処理を区別することなく、共通の処理を行う。すなわち、単精度浮動小数点ストア命令に対しストア処理部は、浮動小数点レジスタ７１からのストアデータの読み出しを行い、ストア対象となる４バイトデータを、ストア処理部６９にある、ストア命令ごとに１つ割り当てられるストアバッファ１２１の上位４バイトにアライン
して書き込む。ストアデータの下位４バイトに関しては、キャッシュへ書き込む際に無視をするのでデータは何であってもよい。
【００３７】
メモリアドレス生成部７５は、メモリアドレスを生成しストア処理部６９に送る。
命令デコード部６３では、キャッシュメモリ上に単精度浮動小数点データの書き込みを行う通常単精度小数点ストア命令と代替単精度小数点ストア命令ともに、キャッシュメモリに書き込むレングスを４バイトとしてデコードする。ストアバッファ１２１には、データをストアするアドレスを送出するとともに、このストアレングス情報（４バイト）を送出する。コミット制御部７３からはストア命令のコミット時に、通常単精度小数点ストア命令と代替単精度小数点ストア命令で共通のストアコミット指示信号がストア処理部６９に送出され、ストア処理部６９はこれを契機にストアデータの上位４バイトをキャッシュメモリ（１次データキャッシュ７２）に書き込む処理をする。このように単精度浮動小数点ストア命令を処理する場合、ストア処理部６９、コミット制御部７３では、通常単精度浮動小数点ストア命令と代替単精度浮動小数点ストア命令との区別をせずに同等の動作をする。通常単精度浮動小数点ストア命令か、代替単精度浮動小数点ストア命令かの差異は、読み出すレジスタアドレス生成の仕方にある。
【００３８】
次に、命令デコード部６３におけるレジスタアドレス生成について説明する。レジスタアドレスの生成については、拡張演算レジスタ（ＸＡＲ）により修飾されたすべての単精度浮動小数点命令(演算命令、ロード命令、ストア命令)で共通である。また命令デコード部６３は、拡張演算レジスタＸＡＲ７４により修飾された単精度浮動小数点命令についてのレジスタアドレスを生成するだけでなく、通常の単精度浮動小数点命令についてのレジスタアドレスも生成する。
【００３９】
図１３に、ＳＰＡＲＣ−Ｖ９アーキテクチャにおける、レジスタアドレスの生成を説明する図を示す。図１３は、オペコードのレジスタアドレスフィールドとレジスタアドレス番号の対応を示したもので、これに従ってレジスタアドレスが生成される。ＳＰＡＲＣ−Ｖ９アーキテクチャの場合は、単精度浮動小数点レジスタと倍精度浮動小数点レジスタでは、命令オペコードにある５ビットのレジスタアドレスフィールドが示すレジスタアドレスのビットアサインが異なる。通常単精度浮動小数点レジスタを用いる場合は、命令オペコードのレジスタアドレスフィールドと指示するレジスタ番号が一致し、０番から３１番を指し示す。倍精度浮動小数点レジスタを用いる命令の場合は、レジスタアドレスフィールドのビット［０］をレジスタアドレスビット［５］に持ってきて、レジスタアドレスビット［０］は常に０にする。つまり、倍精度浮動小数点のレジスタアドレスの指示は偶数番号のみで指示でき、０番から６２番までとなる。
【００４０】
図１４に、代替単精度浮動小数点データを扱う場合のレジスタアドレスの生成を説明する図を示す。代替単精度浮動小数点データを扱うか否かは、図５に示したように拡張演算レジスタＸＡＲ７４のバリッドビットが有効か否かで判断される。下位４バイトは更新時にオールゼロとする８バイトの代替単精度浮動小数点データを扱うときは、上述したように演算処理部６５、ロード処理部６８、ストア処理部６９では、入力データや出力データは単精度浮動小数点データとして扱われる。しかしながら、命令オペコードのレジスタアドレスフィールドから物理レジスタアドレスに変換する場合には、倍精度浮動小数点レジスタの変換方式に従うようにする。つまり、代替単精度浮動小数点の場合、レジスタアドレスの指示は偶数番号のみで行う。図１に示したプロセサでは２５６本までレジスタ拡張を行っており、レジスタアドレスは０番から５１０番（偶数番号のみ）まで指示可能である。
【００４１】
命令デコード部６３は、以上のように通常単精度浮動小数点データを扱う場合のレジスタアドレスを生成するとともに、代替単精度浮動小数点データを扱う場合のレジスタアド
レスを生成する。
以上のように本実施例のプロセサの、単精度浮動小数点演算命令、単精度浮動小数点ロード命令、単精度浮動小数点ストア命令の際の動作について説明した。
【００４２】
次に、命令間のデータ依存関係を検出する仕組みについて説明する。
レジスタリネーミングテーブルの構成を図１５に示す。
アウトオブオーダ処理を行うプロセサでは、レジスタの依存関係を検出するためのレジスタリネーミングを行うが、浮動小数点レジスタの更新を行う通常単精度演算命令の場合、レジスタリネーミングを４バイト単位で行い、代替浮動小数点演算命令の場合は８バイト単位で行う必要がある。レジスタリネーミングには、各レジスタがライト保留状態か否かを示す１ビットと、リネームされた最新のリネーミングレジスタアドレスを保持するテーブルが必要になる。一般的にプロセサにおいてこのテーブルは高速に参照更新される必要があるので、命令デコード回路の近い場所にラッチ回路によって構成される。このラッチで構成されたテーブルの参照更新にかかる回路規模の削減は、プロセサの動作周波数に大きく貢献する。ＳＰＡＲＣ−Ｖ９アーキテクチャにおいては、％ｆ０から％ｆ３１、つまり％ｄ０から％ｄ３０に関して、４バイト長のレジスタに対するリネーミングレジスタ番号を持つ必要があり、％ｄ０から％ｄ３０まで３２個のレジスタについてリネーミングレジスタ番号を保持するテーブルが必要である。一方％ｄ３２から％ｄ５１０までは、８バイト長のレジスタに対するリネーミングレジスタ番号を持つことになるので２４０個のレジスタについてリネーミングレジスタ番号を保持するテーブルになる。これは％ｄ３２から％ｄ５１０までが単精度浮動小数点データを代替単精度浮動小数点データとして８バイト長で管理するからであり、仮に通常の４バイト長の単精度浮動小数点データで管理し、単精度浮動小数点レジスタは％ｆ０から％ｆ２５５であるように定義してしまうと、％ｆ３２から％ｆ２５５までだけで、２２４個のリネーミングレジスタ番号を保持できるテーブルが必要になってしまう。
【００４３】
つまり、単精度浮動小数点データを代替単精度浮動小数点データとして扱う場合には、拡張されたレジスタ部分に単精度浮動小数点データを格納することが可能であるとともに、レジスタリネーミングテーブルにおいては倍精度浮動小数点レジスタの依存関係検出回路を用いることができるためハードウェアの追加が不要である。
【００４４】
また、単精度浮動小数点データを代替単精度浮動小数点データとして扱う場合には、演算器への入力データの選択回路も削減できる。一般的なプロセサでは、演算処理を早く実行開始するために、演算の入力データをレジスタからだけではなく、レジスタに書き込む前の演算器出力結果などからも得られるデータバイパス制御を行っている。
【００４５】
図１６に４バイト単位でデータを管理するときの演算器へのデータバイパス回路図を、図１７に８バイト単位でデータを管理するときの演算器へのデータバイパス回路図を示す。いずれも、演算器の３つある入力レジスタのうちの１つを拡大して表示し、入力するデータが浮動小数点レジスタ、リネーミングレジスタ、演算器出力結果、ロード出力結果のいずれかから選択される場合の構成図を示している。
【００４６】
８バイトの倍精度浮動小数点演算命令を実行するときは、８バイトのデータを入力データとして用いる必要がある。プログラムによっては、倍精度浮動小数点演算と単精度浮動小数点演算が混合するようなものがある。
【００４７】
仮に単精度浮動小数点データを４バイト長で管理する場合は、プログラムとして単精度浮動小数点レジスタ％ｆ０、％ｆ１を更新して、その直後に倍精度浮動小数点レジスタ％ｄ０を読み出し可能にする必要がある。つまり、上位４バイトと下位４バイトのデータが
異なる場所（例えば、上位４バイトから演算器出力結果から得られて、下位４バイトは浮動小数点レジスタから得られるなど）から出力される場合にも、ハードウェアでデータバイパス制御を正しく行うためには、４バイトごとに入力データの選択を行う必要があり、それぞれに対してこの選択回路が必要になる。図１６はこのことを示したものである。
【００４８】
一方８バイト長のデータで管理する場合は、図１７に示すように、上位４バイトと下位４バイトのデータを別々に扱わないので、合わせて８バイトに関するデータバイパス処理を行えばよい。
【００４９】
このように、単精度浮動小数点データを代替単精度浮動小数点データとして扱うことで、演算器入力レジスタへのデータ選択回路を大きく削減することができる。
以上のように、本実施例の単精度浮動小数点データの格納方式によれば、単精度浮動小数点データの処理を扱う場合でも倍精度浮動小数点レジスタで扱うことが可能となる。これにより、レジスタの依存関係を検出するための回路として倍精度浮動小数点レジスタの依存関係検出回路を利用することが可能となる。これによりハードウェア回路の追加を抑えることが可能となる。
【００５０】
また、レジスタアドレス生成や、レジスタの更新を４バイト（単精度浮動小数点データ長）にするか８バイト（代替単精度浮動小数点データ長）にするかなどの、通常単精度浮動小数点データ処理か代替単精度浮動小数点データ処理かの区別は命令デコード部で行う。そして、演算処理部、ロード処理部、ストア処理部としては、通常の単精度浮動小数点データと代替単精度浮動小数点データの場合を区別することなく、全く共通の回路でこの２種類の命令を処理することが可能である。
【００５１】
また、単精度浮動小数点データを代替単精度浮動小数点データとして扱うことで、演算器入力レジスタへのデータ選択回路を大きく削減することができる。
以上のように本実施例の単精度浮動小数点レジスタの格納方式によれば、プロセサのハードウェア量を抑えることができる。ハードウェア回路が複雑化しないため、プロセサの動作周波数を向上させることができ、これによってプロセサの性能向上に貢献することができる。
【００５２】
また、浮動小数点ロード、ストアの処理における単精度浮動小数点データのメモリ上でのデータの保持は、通常単精度浮動小数点命令の場合も代替単精度浮動小数点命令の場合も４バイト単位で行い、プログラムの入力データ、出力データが既存の単精度浮動小数点データであるものも処理することが可能である。
【００５３】
以上、本発明の実施例について詳細に説明したが、本発明は上述した実施例に限定されるものではない。浮動小数点レジスタ領域が拡張されたプロセサに本実施例の単精度浮動小数点データの格納方式を適用することを説明したが、浮動小数点レジスタ領域を拡張したプロセサでなくても、いずれの構成のプロセサに適用してもかまわない。
【００５４】
このように本発明の単精度浮動小数点データの格納方式によれば、単精度浮動小数点データの処理を扱う場合でも８バイトの倍精度小数点レジスタで扱うことが可能となるため、レジスタの依存関係検出回路として倍精度小数点レジスタの依存関係検出回路をそのまま利用することが可能となる。よって依存関係検出回路のためのハードウェアの追加を抑えることが可能である。
【００５５】
以上の実施例を含む実施形態に関し、更に以下の付記を開示する。
（付記１）
倍精度浮動小数点データを格納可能な大きさを有する、倍精度浮動小数点データと単精
度浮動小数点データとが格納されるレジスタを備えるプロセサにおいて、
単精度浮動小数点データが指定された場合、前記レジスタの上位半分に入力した単精度浮動小数点データを書き込むとともに、前記レジスタの下位半分にオールゼロを書き込むことを特徴とする単精度浮動小数点データ格納方式。
（付記２）
倍精度浮動小数点データを格納可能な大きさを有する、倍精度浮動小数点データと単精度浮動小数点データとが格納されるレジスタを備えるプロセサの単精度浮動小数点データ格納方法において、
単精度浮動小数点データ処理が指定され、且つ第一の処理が指定された場合、前記レジスタの上位半分に入力した単精度浮動小数点データを、前記レジスタの下位半分にオールゼロを書き込み、
単精度浮動小数点データ処理が指定され、且つ第二の処理が指定された場合、前記レジスタの上位半分に入力した単精度浮動小数点データを書き込むとともに、前記レジスタの下位半分には書き込みを行わない、
ことを特徴とする単精度浮動小数点データ格納方法。
（付記３）
更に、命令をデコードし、該命令のデコード結果に基づいて、前記レジスタへの書き込み処理を実行することを特徴とする付記２記載の単精度浮動小数点データ格納方法。
（付記４）
更に、前記レジスタへの書き込みを行う前に、前記第一の処理または前記第二の処理にそれぞれ対応するデータを一旦リネーミングレジスタに格納し、
前記第一の処理が指定された場合には、前記リネーミングレジスタのデータをそのまま書き込み、
前記第二の処理が指定された場合には、前記デコード結果に含まれる前記レジスタへの書き込み先アドレスが偶数の場合には、前記レジスタの上位半分に前記リネーミングレジスタの上位半分のデータを書き込み、前記レジスタへの書き込み先アドレスが奇数の場合には、前記レジスタの下位半分に前記リネーミングレジスタの上位半分のデータを書き込む、
ことを特徴とする付記３記載の単精度浮動小数点データ格納方法。
（付記５）
倍精度浮動小数点データと単精度浮動小数点データとを格納するレジスタと、
単精度浮動小数点データ処理が指定された場合、前記レジスタの上位半分に入力した単精度浮動小数点データを書き込むとともに、前記レジスタの下位半分にオールゼロを書き込む制御部と、
を備えることを特徴とするプロセサ。
（付記６）
倍精度浮動小数点データを格納可能な大きさを有する、倍精度浮動小数点データと単精度浮動小数点データとが格納されるレジスタと、
単精度浮動小数点データ処理が指定され、且つ第一の処理が指定された場合、前記レジスタの上位半分に入力した単精度浮動小数点データを、前記レジスタの下位半分にオールゼロを書き込む一方、単精度浮動小数点データ処理が指定され、且つ第二の処理が指定された場合、前記レジスタの上位半分に入力した単精度浮動小数点データを書き込むとともに、前記レジスタの下位半分には書き込みを行わない制御部と、
を備えることを特徴とするプロセサ。
（付記７）
更に、命令をデコードするデコーダを備え、
前記制御部は、前記デコーダによる命令デコード結果に基づいて、前記レジスタへの書き込み処理を実行することを特徴とする付記６記載のプロセサ。
（付記８）
更に、
前記レジスタへの書き込みを行う前に、前記第一の処理または前記第二の処理にそれぞれ対応するデータを一旦格納するリネーミングレジスタと、
前記デコーダがデコードした命令の制御信号および前記レジスタへの書き込み先アドレスをセットし、前記リネーミングレジスタに格納されたデータを前記レジスタへの格納をコミットするコミット制御部と、
を備え、
前記第一の処理が指定された場合には、前記リネーミングレジスタのデータをそのまま書き込み、
前記第二の処理が指定された場合に、前記コミット制御部にセットされたレジスタへの書き込み先アドレスが偶数の場合には、前記レジスタの上位半分に前記リネーミングレジスタの上位半分のデータを書き込み、前記レジスタへの書き込み先アドレスが奇数の場合には、前記レジスタの下位半分に前記リネーミングレジスタの上位半分のデータを書き込む、
ことを特徴とする付記６記載のプロセサ。
（付記９）
更に、
前記第一の処理または前記第二の処理を指定するとともに、該指定情報を保持する第二のレジスタを備えることを特徴とする付記６記載のプロセサ。
（付記１０）
前記第二のレジスタは拡張演算レジスタで、該拡張演算レジスタが有効か否かで、前記第一の処理または前記第二の処理を区別することを特徴とする付記９記載のプロセサ。
（付記１１）
更に、命令をデコードするデコーダを備え、
前記デコーダが単精度浮動小数点演算処理、単精度浮動小数点ロード・ストア処理を指示する命令をデコードするとき、前記第二のレジスタの指定に基づいて、読み出しまたは書き込みのレジスタアドレスを単精度浮動小数点データ単位で指示するか、倍精度浮動小数点データ単位で指示するかを使い分けることを特徴とする付記９記載のプロセサ。
（付記１２）
更に、
命令をデコードするデコーダと、
演算処理を行う演算処理部と、
ロード処理を行うロード処理部と、
を備え、
前記デコーダは、単精度浮動小数点演算処理、単精度浮動小数点ロード処理を指示する命令をデコードするとき、前記第一の処理および前記第二の処理に対応して共通のオペコードを前記演算処理部および前記ロード処理部に送り、
前記演算処理部および前記ロード処理部は前記第一のレジスタの上位半分に結果を出力し、下位半分のデータをオールゼロで出力する、ことを特徴とする付記９記載のプロセサ。
（付記１３）
更に、
命令をデコードするデコーダと
演算処理を行う演算処理部と、
ストア処理を行うストア処理部と、
を備え、
前記デコーダは、単精度浮動小数点演算処理、単精度浮動小数点ストア処理を指示する命令をデコードするとき、前記第一の処理および前記第二の処理に対応して共通のオペコードを前記演算処理部および前記ストア処理部に送り、
前記演算処理部および前記ストア処理部は前記第一のレジスタの上位半分の長さのデータだけを入力として演算処理、またはストア処理を行うことを特徴とする付記９記載のプ
ロセサ。
【図面の簡単な説明】
【００５６】
【図１】本実施例を適用する浮動小数点レジスタ拡張アーキテクチャを示す図である。
【図２】代替単精度浮動小数点データのフォーマットを示す図である。
【図３】通常単精度浮動小数点データのフォーマットを示す図である。
【図４】拡張演算レジスタ（ＸＡＲ）の構成を示す図である。
【図５】通常単精度浮動小数点データで扱うか、代替単精度浮動小数点データで扱うかを判断する処理フローを示す図である。
【図６】プロセサの構成を示す図である。
【図７】代替単精度浮動小数点命令と通常単精度浮動小数点命令との差異を説明する図である。
【図８】単精度浮動小数点演算命令を処理する演算処理部のデータの流れを示す図である。
【図９】単精度浮動小数点ロード命令を処理するロード処理部のデータの流れを示す図である。
【図１０】通常単精度浮動小数点データ処理におけるコミットの際の浮動小数点レジスタの更新処理を説明する図である。
【図１１】代替単精度浮動小数点データ処理におけるコミットの際の浮動小数点レジスタの更新処理を説明する図である。
【図１２】単精度浮動小数点ストア命令を処理するストア処理部のデータの流れを示す図である。
【図１３】ＳＰＡＲＣ−Ｖ９アーキテクチャにおけるレジスタアドレスの生成を説明する図である。
【図１４】代替単精度小数点データを扱う場合のレジスタアドレスの生成を説明する図である。
【図１５】レジスタリネーミングテーブルの構成を示す図である。
【図１６】４バイト単位でデータを管理するときの演算器へのデータバイパス回路図を示す。
【図１７】８バイト単位でデータを管理するときの演算器へのデータバイパス回路図を示す。
【図１８】ＳＰＡＲＣ−Ｖ９アーキテクチャの浮動小数点レジスタの構成を示す図である。
【符号の説明】
【００５７】
６１      １次命令キャッシュ
６２      ２次キャッシュ／メモリ部
６３      命令デコード部
６４      レジスタリネーミングテーブル
６５      演算処理部
６６      アドレス生成部
６７      リネーミングレジスタ
６８      ロード処理部
６９      ストア処理部
７０      固定小数点レジスタ
７１      浮動小数点レジスタ
７２      １次データキャッシュ
７３      コミット制御部
７４      拡張演算レジスタ（ＸＡＲ）
７５      メモリアドレス生成部
８１      浮動小数点演算器
８２      入力レジスタ
８３      演算出力レジスタ
８４      オペコードデコード
９１      ロード出力レジスタ
９２      オペコードデコード
１２１      ストアバッファ
【図１】
0005309636.tif 000002
【図２】
0005309636.tif 000003
【図３】
0005309636.tif 000004
【図４】
0005309636.tif 000005
【図５】
0005309636.tif 000006
【図６】
0005309636.tif 000007
【図７】
0005309636.tif 000008
【図８】
0005309636.tif 000009
【図９】
0005309636.tif 000010
【図１０】
0005309636.tif 000011
【図１１】
0005309636.tif 000012
【図１２】
0005309636.tif 000013
【図１３】
0005309636.tif 000014
【図１４】
0005309636.tif 000015
【図１５】
0005309636.tif 000016
【図１６】
0005309636.tif 000017
【図１７】
0005309636.tif 000018
【図１８】
0005309636.tif 000019