JP3969895B2 - データ型によるコプロセッサの操作コードの分割 - Google Patents

データ型によるコプロセッサの操作コードの分割 Download PDF

Info

Publication number
JP3969895B2
JP3969895B2 JP14725799A JP14725799A JP3969895B2 JP 3969895 B2 JP3969895 B2 JP 3969895B2 JP 14725799 A JP14725799 A JP 14725799A JP 14725799 A JP14725799 A JP 14725799A JP 3969895 B2 JP3969895 B2 JP 3969895B2
Authority
JP
Japan
Prior art keywords
coprocessor
data
register
instruction
data processing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
JP14725799A
Other languages
English (en)
Other versions
JP2000029704A (ja
Inventor
ビビアン ジャガー デビッド
Original Assignee
エイアールエム リミテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by エイアールエム リミテッド filed Critical エイアールエム リミテッド
Publication of JP2000029704A publication Critical patent/JP2000029704A/ja
Application granted granted Critical
Publication of JP3969895B2 publication Critical patent/JP3969895B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30192Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Multi Processors (AREA)
  • Executing Machine-Instructions (AREA)

Description

【0001】
【発明の属する技術分野】
本発明はデータ処理の分野に関するものである。更に詳しく述べると、本発明はコプロセッサを組み込んだデータ処理システムに関するものである。
【0002】
【従来の技術】
主プロセッサとコプロセッサの両方を組み込んだデータ処理システムを提供することが知られている。システムによっては、主プロセッサとともに一つ以上の異なるコプロセッサを設け得ることが知られている。この場合、異なるコプロセッサはコプロセッサ番号の相違により区別することができる。主プロセッサの命令データストリームに生じるコプロセッサ命令は、コプロセッサに結合されたバス上に送出される。バスに取り付けられた(その各々が対応するハードワイヤードコプロセッサ番号をそなえている)一つ以上のコプロセッサが命令のコプロセッサ番号フィールドを調べることにより、自分がその命令に対する目的のコプロセッサであるか判定する。目的のコプロセッサである場合には、その一つ以上のコプロセッサは主プロセッサにアクセプト信号を送出する。主プロセッサがアクセプト信号を受けない場合には、主プロセッサは例外状態に入って、定義されていない命令を処理する。
【0003】
コプロセッサ命令が主プロセッサ命令のサブセットであると仮定すると、多くの場合、コプロセッサに対して命令ビットスペースが制限される。これらの問題は、コプロセッサが多数の広いオペレーションをそなえた豊富な命令を必要とする場合には、更に悪化する(たとえば、コプロセッサの中に多数のレジスタを設けることに対処するために、広いレジスタフィールドが必要とされる)。更に複雑化する問題は、コプロセッサは多数の異なる型のデータを操作することがあり、データ型の表示をコプロセッサ命令の中のコプロセッサに送らなければならないということである。
【0004】
【発明が解決しょうとする課題】
本発明の一つの目的は、コプロセッサに対する限られた命令ビットスペースの問題に対処することである。
【0005】
【課題を解決するための手段】
第一の側面から見ると、本発明はデータ処理装置を提供する。このデータ処理装置は、
データ処理命令群のストリームに応答してデータ処理を実行するための主プロセッサであって、前記データ処理命令群が
a)コプロセッサが実行すべきデータ処理オペレーションを指定する操作コード(opcode)と、
b)前記コプロセッサ命令に対する目的のコプロセッサを識別するためのコプロセッサ識別フィールドと、
をそなえた少なくとも一つのコプロセッサ命令を含み、
前記コプロセッサ識別フィールドの少なくとも1ビットが前記データ処理オペレーションで使用されるべきデータ型を示すデータ型フィールドとしての役目も果たす、主プロセッサと、
バスによって前記主プロセッサに結合されたコプロセッサであって、前記主プロセッサはコプロセッサ命令に応答して前記バス上に前記コプロセッサ命令の少なくとも表現を送出し、前記コプロセッサは前記バス上の前記コプロセッサ命令に応答して前記コプロセッサ識別フィールドを前記コプロセッサを識別する少なくとも一つのコプロセッサ番号値と比較し、前記コプロセッサが前記目的コプロセッサである場合には前記バスを介してアクセプト信号を前記主プロセッサに送出する、コプロセッサと、
を含み、
前記コプロセッサが多重データ型をサポートする多重データ型コプロセッサである場合には、前記コプロセッサは多重のコプロセッサ番号値をそなえ、前記多重のコプロセッサ番号値のいずれかに対してアクセプト信号を送出し、前記データ型フィールドを使用することにより、使用されるデータ型を制御する。
【0006】
コプロセッサ命令に対する目的コプロセッサを識別し、どのデータ型をそれが使用すべきかをコプロセッサに指定するという二つの機能をコプロセッサ番号が果たすようにできるということを本発明は理解し、用いる。これにより、コプロセッサ操作コード命令ビットスペースが他の目的に解放され、これを使用してより豊富な命令セットを提供することができる。更に、コプロセッサ番号を使用してこのデータ型の符号化を伝えることにより、容易に増減(スケーリング)できるアーキテクチャが提供される。特に、データ型サポートのサブセット(部分集合)またはスーパセット(上位集合)を提供する異なるコプロセッサを提供することができ、主プロセッサは異なるコプロセッサ番号とともに同じ操作コードを使用して、これらのコプロセッサのアドレス指定を行う。主プロセッサがコプロセッサによってサポートされないデータ型のコプロセッサ命令を送出する場合には、コプロセッサはそれをアクセプトせず(受け入れず)、主プロセッサはそれの既存の機構を使用して例外処理コードに分岐することにより、その状況を処理する。
【0007】
単一のデータ型だけをサポートする実施例では、コプロセッサはサポートされないデータ型に対応するデータ型フィールドを含む、どのコプロセッサ番号値に対してもアクセプト信号を送出せず、前記データ型フィールドにかかわりなく前記のサポートされるデータ型を使用する。
【0008】
このようにして、このデータ型指定機能をサポートするいかなる修正も行う必要無しに、ハードウェアが削減されたコプロセッサを提供することができ、主プロセッサは既存のアクセプトまたは非アクセプト機構を使用して、コプロセッサの削減された機能を処理することができる。
【0009】
コプロセッサは、データ型フィールドで指定され得るすべてのデータ型と単一のデータ型だけとの間の任意の個数のデータ型をサポートできることが理解されよう。サポートされるデータ型のデータ型フィールドをそなえたコプロセッサ番号のコプロセッサ命令をアクセプトするだけで、コプロセッサはこれを行うことができる。
【0010】
本発明の更に好ましい特徴は、操作コードをデータ型にかかわりなくできるということである。これにより、命令復号化が簡略化される。この場合、操作コードはデータ型に直交する。
【0011】
指定されているデータ型は種々の異なるパラメータ(たとえば、サイン符号化)とすることができるが、浮動小数点コプロセッサの中で単精度と倍精度のデータ型を処理するのに特に有用である。
【0012】
主プロセッサはサポートされないデータ型のコプロセッサ命令の処理を停止するか、または無視するように構成してもよいが、前記データ型フィールドによってサポートされないデータ型と指定されているためにコプロセッサがアクセプト信号を送出しない場合には、前記主プロセッサはエミュレーションコードを使用することにより、前記サポートされないデータ型に対する前記コプロセッサ命令のエミュレーションを行うことが好ましい。
【0013】
このようにして、性能低下の犠牲を払って、同じコードを主プロセッサで実行することができる。このことは、サポートされないデータ型のコプロセッサ命令がまれにしか生じない場合には、問題にならないかも知れない。
【0014】
もう一つの側面から見ると、本発明は主プロセッサとコプロセッサでデータを処理する方法を提供する。この方法は、
データ処理命令群のストリームに応答して前記主プロセッサでデータ処理を実行するステップであって、前記データ処理命令群が
a)前記コプロセッサが実行すべきデータ処理オペレーションを指定する操作コード(opcode)と、
b)前記コプロセッサ命令に対する目的のコプロセッサを識別するためのコプロセッサ識別フィールドと、
をそなえた少なくとも一つのコプロセッサ命令を含み、
前記コプロセッサ識別フィールドの少なくとも1ビットが前記データ処理オペレーションで使用されるべきデータ型を示すデータ型フィールドとしての役目も果たす、ステップと、
コプロセッサ命令に応答して、前記主プロセッサがバスで前記コプロセッサに前記コプロセッサ命令の少なくとも表現を送出するステップと、
前記コプロセッサ命令に応答して、前記コプロセッサが前記コプロセッサ識別フィールドを前記コプロセッサを識別する少なくとも一つのコプロセッサ番号値と比較し、前記コプロセッサが前記目的コプロセッサである場合にはアクセプト信号を前記主プロセッサに送出するステップと、
を含み、
前記コプロセッサが多重データ型をサポート(支援)する多重データ型コプロセッサである場合には、前記コプロセッサは多重のコプロセッサ番号値をそなえ、前記多重のコプロセッサ番号値のいずれかに対してアクセプト信号を送出し、前記データ型フィールドを使用することにより、使用されるデータ型を制御する。
【0015】
本発明を、付図に示されたその好適実施例を参照して更に説明する。これらは例を示しているに過ぎない。
【0016】
【発明の実施の形態】
図1は、主プロセッサ24、浮動小数点コユニットプロセッサ26、キャッシュメモリ28、主メモリ30、および入力/出力システム32を含むデータ処理システムを示す。主プロセッサ24、キャッシュメモリ28、主メモリ30、および入力/出力システム32は主バス34を介してリンクされる。コプロセッサバス36は主プロセッサ24を浮動小数点ユニットコプロセッサ26にリンクする。
【0017】
オペレーションについて説明する。主プロセッサ24(ARMコアとも呼ぶ)は、キャッシュメモリ28、主メモリ30、および入力/出力システム32の相互作用を含む一般の型のデータ処理オペレーションを制御するデータ処理命令のストリームを実行する。データ処理命令のストリームの中に、コプロセッサ命令が埋め込まれる。主プロセッサ24はこれらのコプロセッサ命令を、付属のコプロセッサが実行すべき型のものと認識する。これに応じて主プロセッサ24は、これらのコプロセッサ命令をコプロセッサバス36上に送出する。このコプロセッサバス36から、任意の付属のコプロセッサがコプロセッサ命令を受信する。この場合、浮動小数点ユニットコプロセッサ26は、自分宛てのものであると検出した受信コプロセッサ命令をアクセプトして受け入れて、実行する。この検出は、コプロセッサ命令の中のコプロセッサ番号フィールドを介して行われる。
【0018】
図2は、浮動小数点ユニットコプロセッサ26を更に詳しく示す概略図である。浮動小数点ユニットコプロセッサ26には、32個の32ビットレジスタ(図2には少ししか示されていない)で構成されるレジスタバンク38が含まれる。これらのレジスタは、32ビットデータ値を各々記憶する単精度レジスタとして個別に動作するか、または一緒になって64ビットデータ値を記憶する対として動作することができる。浮動小数点ユニットコプロセッサ26の中には、パイプライン形乗算累算ユニット40とロード記憶制御ユニット42とが設けられる。適当な状況では、乗算累算ユニット40とロード記憶制御ユニット42とが同時に動作することができる。この場合、乗算累算ユニット40がレジスタバンク38の中のデータ値に対して(乗算累算オペレーションと他のオペレーションを含む)算術オペレーションを行っている間に、ロード記憶制御ユニット42は乗算累算ユニット40が使用していないデータ値の、主プロセッサ24を介した浮動小数点ユニットコプロセッサ26とのやり取りを行う。
【0019】
浮動小数点ユニットコプロセッサ26の中では、アクセプトされたコプロセッサ命令が命令レジスタ44の中にラッチされる。この単純化された図ではコプロセッサ命令は、操作コード(opcode)部分の後に、3個のレジスタ指定フィールドR1とR2とR3とが続いて構成されると考えることができる(実際には、これらのフィールドは命令全体の中で別の仕方で分割、展開してもよい)。これらのレジスタ指定フィールドR1とR2とR3とは、実行されているデータ処理オペレーションに対するデスティネーション(宛て先)、第一のソース(発生源)、および第二のソースとしての役目を果たすレジスタバンク38の中のレジスタにそれぞれ対応する。ベクトル制御レジスタ46はベクトル制御レジスタ命令に応じて、長さとストライド値の初期化と更新を行うことができる。ベクトル長さとストライド値は浮動小数点ユニットコプロセッサ26の中で全体的に適用されるので、これらの値は全体的に動的に変更でき、自動修正モードに頼る必要は無い。
【0020】
レジスタ制御−命令送出ユニット48、ロード記憶制御ユニット42、およびベクトル制御ユニット50はまとめて、命令復号器の役割の主要部分を実行するものと考えることができる。レジスタ制御−命令送出ユニット48は操作コードとレジスタ指定フィールドR1とR2とR3とに応答し、まず、初期レジスタアクセス(アドレス)信号をレジスタバンク38に出力する。操作コードに対するふは行わないし、ベクトル制御ユニット50を使用する必要は無い。このように初期レジスタ値に直接アクセスすることは、より高速のインプリメンテーションを実現する助けとなる。ベクトルレジスタが指定されれば、ベクトル制御ユニット50は3ビットのインクリメンタ(加算器)52を使用してレジスタアクセス信号の必要な系列を発生する役目を果たす。ベクトル制御ユニット50は、レジスタバンク38のそのアドレス指定を行う際、ベクトル制御レジスタ46の中に記憶された長さの値とストライド値とに応答する。パイプライン形乗算累算ユニット40とそれと同時に動作するロード記憶制御ユニット42とがデータ一貫性の問題を生じないように、レジスタスコアボード54を設けてレジスタロッキングを行う(代わりに、レジスタスコアボード54をレジスタ制御−命令送出ユニット48の一部とみなしてもよい)。
【0021】
命令レジスタ44の中の操作コードは実行すべきデータ処理オペレーションの性質(たとえば、命令が加算、減算、乗算、除算、ロード、記憶等であるか)を指定する。これは、指定されているレジスタのベクトルまたはスカラの性質によらない。これは更に、命令復号化と乗算累算ユニット40の設定を単純化する。第一のレジスタ指定値R1と第二のレジスタ指定値R2は一緒になって、操作コードによって指定されるオペレーションのベクトル/スカラの性質を復号化する。符号化によってサポートされる三つの共通の場合は、S=S*S(たとえば、CコードのブロックからCコンパイラによって作成されるような基本ランダム計算)、V=VopS(たとえば、ベクトルの要素をスケーリングするため)、およびV=VopV(たとえば、FIRフィルタ、図形変換のようなマトリックスオペレーション)である(注意すべきことは、この前後関係では、「op」は一般的なオペレーションを示し、シンタクスはデスティネーション=第二のオペランドop第一のオペランドという形式になっているということである)。命令によっては(たとえば、比較、零または絶対値との比較)、デスティネーションレジスタが無い(たとえば、出力が条件フラグである)、または入力オペランドが少ない(零との比較に1入力オペランドしかない)ことがあり得る。これらの場合には、ベクトル/スカラの性質のようなオプションを指定するために、より大きな操作コードビット空間が利用でき、各オペランドに対してレジスタの全範囲を利用可能とすることができる(たとえば、レジスタがなんであれ、比較は常に完全にスカラとしてもよい)。
【0022】
一緒になって命令復号器の役割の主要部分を果たすレジスタ制御−命令送出ユニット48とベクトル制御ユニット50とは、第一のレジスタ指定フィールドR1と第二のレジスタ指定フィールドR2とに応答して、指定されたデータ処理オペレーションのベクトル/スカラの性質を判定した後、制御する。ベクトル制御レジスタ46の中に記憶された長さ値が1の長さ(0の記憶された値に対応する)を示していれば、これは純粋にスカラのオペレーションの初期表示として使用することができる。
【0023】
図3は、単精度モードでレジスタ指定値からベクトル/スカラの性質を復号するために使用される処理論理を示す流れ図である。ステップ56で、ベクトル長さが全体的に1として設定されているか(長さ値が0に等しい)のテストが行われる。ベクトル長さが1であれば、ステップ58ですべてのレジスタはスカラとして扱われる。ステップ60で、デスティネーションレジスタR1がレンジS0からS7の中にあるか否かについてのテストが行われる。これが事実であれば、オペレーションはすべてスカラであり、ステップ62に示されるように、S=SopSの形式になっている。ステップ60か”no”を返すと、ステップ64に示されるようにデスティネーションはベクトルであるものと判定される。デスティネーションがベクトルであれば、符号化は第二のオペランドもベクトルであるとみなす。したがって、この段階で残っている二つの可能性は、V=VopSとV=VopVである。これらの二つの可能性の区別は、第一のオペランドがS0からS7の中の一つであるか判定するステップ66のテストによって行われる。これが事実であれば、オペレーションはV=VopSであり、そうでなければV=VopVである。これらの状態はステップ68と70でそれぞれ認識される。
【0024】
注意すべきことは、ベクトル長さが1に設定されたときには、レジスタバンク38の32個のレジスタのすべてをスカラとして使用することができるということである。これは、オペレーションのスカラ性がステップ58で認識され、デスティネーションに使用し得るレジスタの範囲を制限するステップ60のテストに頼る必要が無いからである。ベクトルとスカラの混合の命令が使用されているときに、すべてがスカラのオペレーションを認識する際に、ステップ60のテストは有用である。ベクトルとスカラの混合のモードで動作しているとき、第一のオペランドがスカラであれば、それはS0からS7のいずれかであり得るのに対して、第一のオペランドがベクトルであれば、それはS8からS31のいずれかであり得るということもわかる。第一のオペランドがベクトルである場合に、レジスタバンクの中で利用し得るレジスタ数を3倍にしたのは、ベクトルオペレーションを使用するときにデータ値の系列を保持するために必要なレジスタ数が一般に多くなることに対する適応である。
【0025】
実行したい普通のオペレーションは図形変換であることが理解されよう。一般的な場合には、実行すべき変換は4*4マトリックスで表すことができる。このような計算でのオペランドの再使用は、ベクトルとして操作し得るレジスタにマトリックス値を記憶することが望ましいということを意味する。同様に、入力画素値は通常、4個のレジスタに記憶され、この4個のレジスタも再使用を助けるためにベクトルとして操作することができるべきである。マトリックスオペレーションの出力は通常、4個のレジスタに記憶された(別々のベクトル行乗算を累算した)スカラとなる。入力値と出力値とを二重に送り込む(double pump)ことが望ましい場合には、24(=16+4+4)個のベクトルレジスタと8(=4+4)個のスカラレジスタとが必要になる。
【0026】
図4は、図3の流れ図に対応する流れ図であるが、この場合には倍精度モードを示している。前に説明したように倍精度モードでは、レジスタバンク38の中のレジスタスロットは対として動作し、論理レジスタD0からD15に16個の64ビットデータ値を記憶する。この場合には、レジスタのベクトル/スカラの性質の符号化は図3のそれから変形され、ステップ60と66のテストがそれぞれステップ72と74の「デスティネーションはD0からD3の中の一つか?」と「第一のオペランドはD0からD3の中の一つか?」になる。
【0027】
上記したようなレジスタ指定フィールド内のレジスタのベクトル/スカラの性質の符号化により、命令ビット空間は著しく節約されるが、加算や除算のような非可換性のオペレーションに対してある種の困難が生じる。レジスタ構成V=VopSが与えられたとすると、非可換性のオペレーションに対する第一のオペランドと第二のオペランドとの間の対称性の欠如は、命令セットを拡張して、非可換性のオペレーションに対する二つの異なるオペランドオプションを表すSUB、RSUB、DIV、RDIVのような操作コードの対を含めるようにすることにより、レジスタ値を交換する付加的な命令無しに、克服することができる。
【0028】
図5はレジスタバンク38のサブセットの中のベクトルのラッピングを示す。特に、単精度モードでは、レジスタバンクはアドレスがS0からS7、S8からS15、S16からS23、およびS24からS31の四つの範囲のレジスタに分割される。これらの範囲は互いに素で、隣接している。図2に示すように、8個のレジスタを含むこれらのサブセットに対するラッピング機能は、ベクトル制御ユニット50の中の3ビットのインクリメンタ(加算器)52を用いることにより提供することができる。このようにして、サブセットの境界を横切るとき、インクリメンタはラップバックする。この簡単なインプリメンテーションは、レジスタアドレス空間の中の8ワード境界にサブセットをそろえることによって、容易になる。
【0029】
図5に戻って、レジスタのラッピングの理解を助けるために多数のベクトルオペレーションが示される。第一のベクトルオペレーションは、スタートレジスタS2、(ベクトル制御レジスタ46の長さ値3によって示される)ベクトル長さ4、および(ベクトル制御レジスタ46の中のストライド値0によって示される)ストライド1を指定する。したがって、これらのグローバルベクトル制御パラメータセットをそなえたベクトルとしてレジスタS2を参照するように復号された命令を実行するとき、レジスタS2、S3、S4、およびS5の中のデータ値をそれぞれ使用して命令が4回実行される。このベクトルがサブセット境界を横切らないので、ベクトルラッピングは無い。
【0030】
第二の例では、スタートレジスタはS14であり、長さはS14であり、ストライドは1である。その結果、レジスタS14から始まって、命令は6回実行される。使用される次のレジスタはS15となる。レジスタが再びストライドだけ歩進すると、レジスタS16を使用する代わりに、レジスタS8にラップされる。次に、命令が更に3回実行されることにより、S14、S15、S8、S9、S10、およびS11の全シーケンスが完了される。
【0031】
図5の最後の例は、S25のスタートレジスタ、8の長さ、および2のストライドを示す。使用される第一のレジスタはS25であり、ストライド値2に従ってその後にS27、S29、およびS31が続く。レジスタS31の使用に続いて、次のレジスタ値はサブセットのスタートにラップバックし、ストライド2であるからレジスタS24を通過し、レジスタS25を使用してオペレーションを実行する。インクリメンタ52は、ベクトルレジスタ相互間を動くとき現在値にストライドを加算する3ビット加算器の形式を取り得る。したがって、加算器に異なるストライド値を与えることにより、ストライドを調整することができる。
【0032】
図6は倍精度モードでのレジスタバンク38のラッピングを示す。このモードでは、レジスタのサブセットにD0からD3、D4からD7、D8からD11、およびD12からD15が含まれる。倍精度モードでインクリメンタ52としての役目を果たす加算器への最小値入力は2となる。これは倍精度ストライド1に対応する。倍精度ストライド2は加算器への入力4を必要とする。図6の第一の例では、スタートレジスタがD0、長さが4、ストライドが1である。その結果、D0、D1、D2およびD3のベクトルレジスタ系列が得られる。サブセット境界を横切らないので、この例ではラッピングは無い。第二の例では、スタートレジスタがD15、長さが2、ストライドが2である。その結果、D15およびD13のベクトルレジスタ系列が得られる。
【0033】
図2を参照して、ロード記憶制御ユニット42はその出力に5ビットのインクリメンタをそなえており、多重ロード/記憶オペレーションはベクトルオペレーションに適用されるレジスタラッピングを受けないことがわかる。これにより、単一の多重ロード/記憶命令はそれが必要とするだけの数の連続レジスタにアクセスすることができる。
【0034】
このラッピング構成を良好に使用するオペレーションの一例は、4個の信号値のユニットと4個のタップに分割されたFIRフィルタである。シンタックスR8−R11opR16−R19がベクトルオペレーションR8opR16、R9opR17、R10opR18、およびR11opR19を表す場合には、FIRフィルタオペレーションは次のように行うことができる。
【0035】
8個のタップをR8−R15に、8個の信号値をR16−R23にロードする。
【0036】
R8−R11opR16−R19、そして結果をR24−R27に入れる。
R9−R12opR16−R19、そして結果をR24−R27に入れる。
R10−R13opR16−R19、そして結果をR24−R27に入れる。
R11−R14opR16−R19、そして結果をR24−R27に入れる。
【0037】
R8−R11に新しいタップを再ロードする。
【0038】
R12−R15opR16−R19、そして結果をR24−R27に累積する。
R13−R8opR16−R19、そして結果をR24−R27に累積する(R15−>R8ラップ)。
R14−R9opR16−R19、そして結果をR24−R27に累積する(R15−>R8ラップ)。
R15−R10opR16−R19、そして結果をR24−R27に累積する(R15−>R8ラップ)。
【0039】
R12−R15に新しいタップを再ロードする。
【0040】
タップがなくなると、R16−R19に新しいデータを再ロードする。
【0041】
R12−R15opR20−R23、そして結果をR28−R31に入れる。
【0042】
R13−R8opR20−R23、そして結果をR28−R31に入れる(R15−>R8ラップ)。
R14−R9opR20−R23、そして結果をR28−R31に入れる(R15−>R8ラップ)。
R15−R10opR20−R23、そして結果をR28−R31に入れる(R15−>R8ラップ)。
【0043】
残りは上記と同様
【0044】
上記のことからわかるように、ロードは多重累算から異なるレジスタに対して行われるので、並列に行われ得る(すなわち、二重バッファを行う)。
【0045】
図7Aは、主プロセッサ24がコプロセッサ命令をどのように調べるかを示す概略図である。主プロセッサは命令の中の(分割できる)フィールド76のビット組み合わせを使用することにより、命令をコプロセッサ(coprocessor)命令と識別する。標準のARMプロセッサの命令のセットの中で、コプロセッサ命令にはコプロセッサ番号フィールド78が含まれる。主プロセッサに付属したコプロセッサ(一つまたは複数)はコプロセッサ番号フィールド78を使用して、特定のコプロセッサ命令がそれらを目標としているか識別する。DSPコプロセッサ(たとえば、ARM社製のピッコロ(Piccolo)コプロセッサ)または浮動小数点ユニットコプロセッサのような異なる型のコプロセッサには異なるコプロセッサ番号を割り当てることができ、したがって、同じコプロセッサバス36を使用して単一のシステムの中で別々にアドレス指定することができる。コプロセッサ命令には、コプロセッサが使用する操作コード(opcode)、ならびにコプロセッサレジスタの中からデスティネーション、第一のオペランド、および第二のオペランドをそれぞれ指定する3個の5ビットフィールドも含まれる。コプロセッサロードまたは記憶のような、いくつかの命令では、コプロセッサと主プロセッサが一緒になって所望のデータ処理オペレーションを完了できるように、主プロセッサは少なくとも部分的にコプロセッサ命令を復号する。主プロセッサは、このような状況でそれが行う命令復号の一部としてコプロセッサ番号の中で符号化されたデータ型に応答してもよい。
【0046】
図7Bは、倍精度と単精度の両方のオペレーションをサポートするコプロセッサが受信したコプロセッサ命令をどのように解釈するかを示す。このようなコプロセッサには二つの隣接したコプロセッサ番号が割り当てられる。コプロセッサはコプロセッサ番号の最上位の3ビットを使用して、それがターゲットのコプロセッサであるか識別する。このようにして、コプロセッサ番号の最下位ビットはターゲットのコプロセッサを識別する目的で冗長であり、代わりにこれを使用して、そのコプロセッサ命令を実行する際に使用されるべきデータ型を指定することができる。この例では、データ型はデータサイズが単精度であるか、倍精度であるかということに対応する。
【0047】
倍精度モードではレジスタ数が事実上32から16に減る。それに応じてレジスタのフィールドサイズを小さくすることは可能ではあるが、その場合には、使用すべきレジスタの復号化はコプロセッサ命令の中の既知の位置のそれだけで完備したフィールドから直接得ることはできず、コプロセッサ命令の他の部分の復号化に左右される。これには、複雑で、多分、コプロセッサのオペレーションが遅くなるという欠点がある。コプロセッサ番号の最下位ビットを使用してデータ型を復号するということは、操作コードは完全にデータ型によらないようにできることを意味し、これによっても、その復号化は簡単になり、速度が早くなる。
【0048】
図7Cは、図7Bのコプロセッサによってサポートされたデータ型のサブセットである単一のデータ型だけをサポートするコプロセッサがどのようにコプロセッサ命令を解釈するかを示す。この場合には、全コプロセッサ番号を使用して、その命令をアクセプトするべきか否か判定する。このようにして、コプロセッサ命令がサポートされていないデータ型である場合には、それは異なるコプロセッサ番号に対応し、アクセプトされない。このとき、主プロセッサ24は未定義の命令例外処理に頼って、サポートされていないデータ型に対してオペレーションのエミュレーションを行うことができる。
【0049】
図8は、主プロセッサとしての役目を果たし、単精度と倍精度の両方のデータ型をサポートするコプロセッサ84とコプロセッサバス82を介して通信するデータ処理システムを示す。コプロセッサ番号を含むコプロセッサ命令は命令ストリームの中に出て来たとき、ARMコア80からコプロセッサバス82上に送出される。次にコプロセッサ84は、コプロセッサ番号をそれ自身の番号と比較し、一致していればアクセプト信号をARMコア80に返送する。アクセプト信号を受信しなければ、ARMコアは未定義の命令例外と認識し、メモリシステム86に記憶されている例外処理コードを参照する。
【0050】
図9は、コプロセッサ84を単精度オペレーションのみをサポートするコプロセッサ88に置き換えることにより修正された図8のシステムを示す。この場合、コプロセッサ88は単一のコプロセッサ番号だけを認識する。したがって、図8のコプロセッサ84によって実行される、オリジナル命令ストリームの中の倍精度コプロセッサ命令は、単精度のコプロセッサ88によってアクセプトされない。したがって、同じコードを実行することが望ましい場合には、メモリシステム86の中の未定義の例外処理コードに倍精度エミュレーションルーチンを含めることができる。
【0051】
倍精度命令をエミュレーションしなければならないことにより、これらの命令の実行が遅くなるが、単精度コプロセッサ88は倍精度コプロセッサ84より小さく、安価にでき、倍精度命令が充分にまれであれば、正味の利点が得られる。
【0052】
図10は、単精度と倍精度の両方の命令をサポートし、二つの隣接したコプロセッサ番号をそなえたコプロセッサ84の中の命令ラッチ回路を示す。この場合、コプロセッサ命令の中の望ましいコプロセッサ番号の最上位3ビットCP#[3:1]がそのコプロセッサ84に割り当てられたものと比較される。この例で、コプロセッサ84がコプロセッサ番号10と11をそなえている場合には、コプロセッサ番号の最上位3ビットCP#[3:1]を2進101と比較することにより、この比較を行うことができる。一致が生じると、アクセプト信号がARMコア80に返送され、コプロセッサ命令が実行のためにラッチされる。
【0053】
図11は図9の単精度コプロセッサ88の中の同等の回路を示す。この場合には、単一のコプロセッサ番号だけが認識され、単精度オペレーションがデフォルトにより使用される。コプロセッサ命令をアクセプトしてラッチすべきか否かについて判定する際に行われる比較は、コプロセッサ番号CP#[3:0]の4ビット全体と単一の埋め込まれたコプロセッサ番号である2進1010との間で行われる。
【0054】
図12は、図9の実施例の未定義例外処理ルーチンをどのようにトリガして倍精度エミュレーションコードを動かせるかを示す流れ図である。これは、未定義命令例外を生じた命令が、コプロセッサ番号が2進1011であるコプロセッサ命令であるか検出する(ステップ90)ことにより、行われる。「イエス」であれば、これは倍精度命令を意図したものであるので、ステップ92でエミュレーションを行った後、主プログラムのフローに戻ることができる。ステップ90でトラップされなければ、以後のステップにより他の例外の型の検出と処理を行ってもよい。
【0055】
図13は、レジスタバンク220の各32ビットレジスタ、すなわち各データスロット、に記憶されたデータの型を識別する情報を記憶するための、フォーマットレジスタFPREG200の使用を示す。前に説明したように、各データスロットは32ビットのデータ値(1データワード)を記憶するための単精度レジスタとして個別に動作するか、またはもう一つのデータスロットと対にして64ビットのデータ値(2データワード)を記憶するための倍精度レジスタを提供することができる。本発明の好適実施例によれば、FPREGレジスタ200は任意の特定のデータスロットがその中に単精度のデータを記憶しているか、倍精度のデータを記憶しているかを識別するように構成される。
【0056】
図13に示すように、レジスタバンク220の中の32個のデータスロットは16対のデータスロットを提供するように配列される。ある第一のデータスロットがその中に単精度のデータ値を記憶している場合には、その対の他方のデータスロットは単精度のデータ値だけを記憶するように構成され、倍精度のデータ値を記憶するために他のどのデータスロットともリンクされることはない。これにより、どの特定のデータスロット対も二つの単精度データ値、または一つの倍精度データ値を記憶するように構成される。この情報は、レジスタバンク220の中の各データスロット対と結合された1ビットの情報により識別することができる。したがって好適実施例ではFPREGレジスタ200は、レジスタバンク220の各データスロット対に記憶されたデータの型を識別するために16ビットの情報を記憶するように構成される。したがって、レジスタFPREG200は16ビットのレジスタとして具体化するか、またはFPUコプロセッサ26の中の他のレジスタとの一貫性のため、16スペアビットの情報をそなえた32ビットのレジスタとして具体化することができる。
【0057】
図15はレジスタバンク220の中の6対のデータスロットを示す。好適実施例によれば、この6対のデータスロットを使用して、6個の倍精度のデータ値または12個の単精度のデータ値を記憶することができる。データスロットの中に記憶し得るデータの例が図15に示されている。DHは倍精度データ値の32個の最上位ビットを表し、DLは倍精度データ値の32個の最下位ビットを表し、Sは単精度のデータ値を表す。
【0058】
本発明の好適実施例によるFPREGレジスタ200の中の対応するエントリも図15に示されている。好適実施例によれば、対応するデータスロット対に倍精度データ値が入っていることを示すためにFPREGレジスタ200に値「1」が記憶され、対応するデータスロット対の少なくとも一方に単精度データ値が入っているか、または両方のデータスロットとも初期化されていないことを示すために値「0」が使用される。したがって、両方のデータスロットとも初期化されていない場合、一方のデータスロットが初期化されていなくて、その対の他方のデータスロットに単精度データ値が入っている場合、または対の両方のデータスロットに単精度データ値が入っている場合には、FPREGレジスタ200の対応するビットに論理「0」の値が記憶される。
【0059】
前に説明したように、好適実施例のFPUプロセッサ26を使用して単精度または倍精度のデータ値を処理してもよく、また主プロセッサ24が送出したコプロセッサ命令は、任意の特定の命令が単精度命令であるか倍精度命令であるかを識別する(図7Bと付属の説明参照)。命令がコプロセッサよりアクセプトされると、その命令はレジスタ制御−命令送出ユニット48に送られて、復号されて実行される。命令がロード命令であれば、レジスタ制御−命令送出論理48はロード記憶制御ユニット42に命じて、識別されたデータをメモリから検索させ、レジスタバンク220の指定されたデータスロットにそのデータを記憶させる。この段階でコプロセッサは単精度データ値が検索されているのか、倍精度データ値が検索されているのかを知り、ロード記憶制御ユニット42はそれに応じて動作する。したがって、ロード記憶制御ユニット42は経路225で32ビットの単精度データ値または64ビットの倍精度データ値をレジスタバンク入力論理230に送って、レジスタバンク220に記憶させる。
【0060】
データはロード記憶制御ユニット42によりレジスタバンク220にロードされるだけでなく、フォーマットレジスタFRPEG200にも与えられる。これにより、データを受ける各データスロット対が単精度データを記憶しようとしているのか、倍精度データを記憶しようとしているのかを表すために必要な情報ビットを付加することができる。好適実施例では、このデータがフォーマットレジスタFRPEG200に記憶された後に、データがレジスタバンクにロードされるので、この情報をレジスタバンク入力論理230が利用できる。
【0061】
好適実施例では、レジスタバンク220の内部フォーマットは外部フォーマットと同じであるので、レジスタバンク220の中では単精度データ値は32ビットのデータ値として記憶され、倍精度データ値は64ビットのデータ値として記憶される。レジスタバンク入力論理230はフォーマットレジスタFRPEG200にアクセスするので、レジスタバンク入力論理230はそれが受けているデータが単精度であるか、倍精度であるかがわかる。したがって、このような実施例では、レジスタバンク入力論理230はレジスタバンク220の適当なデータスロット(一つまたは複数)に記憶するために経路225で受け取ったデータを単に配列するだけである。しかし、代替実施例でレジスタバンクの中の内部表現が外部フォーマットと異なる場合には、レジスタバンク入力論理230は必要な変換を行うように構成される。たとえば、ある数は通常、1.abc...に基数を乗じて、ある指数の累乗としたもので表される。効率性のため、通常の単精度と倍精度の表現は10進小数点の左側の1を表すためにデータビットを使用しないで、1は暗示されているものとする。何らかの理由で、レジスタバンク220の中で使用される内部表現が1を明示しなければならない場合には、レジスタバンク入力論理230はデータの必要な変換を行う。このような実施例では、レジスタバンク入力論理230が発生する付加的なデータを収容するために、データスロットは通常、32ビットより若干大きくなる。
【0062】
データ値をレジスタバンク220にロードする他に、ロード記憶制御ユニット42はコプロセッサ26の一つ以上のシステムレジスタ、たとえばユーザステータス制御レジスタFPSCR210にデータをロードしてもよい。好適実施例では、FPSCRレジスタ210に、ユーザがアクセスできるコンフィギュレーションビットと例外ステータスビットとが含まれている。これについては、好適実施例の説明の最後に行う浮動小数点ユニットのアーキテクチャの説明で更に詳しく説明する。
【0063】
その内容をメモリに記憶すべきレジスタバンク220の中の特定のデータスロットを表す記憶命令をレジスタ制御−命令送出ユニット48が発すると、それに応じてロード記憶制御ユニット42が命令され、必要なデータワードがレジスタバンク220からレジスタバンク出力論理240を介してロード記憶制御ユニット42に呼び出される。読み出されつつあるデータが単精度データか倍精度データかを判定するために、レジスタバンク出力論理240はFPREGレジスタ200の内容にアクセスする。次にレジスタバンク出力論理240は、レジスタバンク入力論理230によって加えられたデータ変換を逆にするために適当なデータ変換を加え、そのデータを経路235でロード記憶制御ユニット42に与える。
【0064】
本発明の好適実施例によれば、記憶命令が倍精度命令であれば、コプロセッサ26は、命令が倍精度データ値に適用される第二のオペレーションモードで動作していると考えることができる。倍精度データ値には偶数個のデータワードが含まれているので、第二のオペレーションモードで送出されるどの記憶命令も通常、その内容がメモリに記憶されるべき偶数個のデータスロットを表す。しかし、本発明の好適実施例によれば、奇数個のデータスロットが指定された場合には、ロード記憶制御ユニット42は、FPREGレジスタ200の内容を読んで、まずそれらの内容をメモリに記憶した後、レジスタバンク220からの識別された偶数個のデータスロットを記憶するように構成される。通常、転送すべきデータスロットは、レジスタバンクの中の特定のデータスロットを表すベースアドレスの後に、そのデータスロットから数えた、記憶すべきデータスロット数(すなわち、データワード数)を示す数を続けたもので表される。
【0065】
ここで、たとえば、記憶命令がベースアドレスとしてレジスタバンク220の第一のデータスロットを与えて、33個のデータスロットを指定した場合には、これにより32個の全部のデータスロットの内容がメモリに記憶されるが、指定されたデータスロット数が奇数であるので、FPREGレジスタ200の内容もメモリに記憶される。
【0066】
このアプローチにより単一の命令を使用して、レジスタバンクの内容と、レジスタバンク220の種々のデータスロットの中に記憶されたデータの型を表すFPREGレジスタ200の内容の両方を記憶することができる。これにより、FPREGレジスタ200の内容を明示的に記憶するために別々の命令を発する必要が無くなるので、メモリへの記憶またはメモリプロセスからのロードの間の処理速度にあまり悪影響を及ぼすことは無い。
【0067】
本発明のもう一つの実施例では、この手法をもう一段階進めることにより、単一の命令を使用して、必要な場合には、FPSCRレジスタ210のような付加的なシステムレジスタもメモリに記憶し得るようにできる。したがって、32個のデータスロットをそなえたレジスタバンク220の例を考えると、前に説明したように、記憶命令で33個のデータスロットが表された場合には、レジスタバンク220の32個のデータスロットの内容の他に、FPREGレジスタ200がメモリに記憶される。しかし、レジスタバンクの中のデータスロット数を超える異なる奇数、たとえば、35が表された場合には、これをロード記憶制御ユニット42は、FPREGレジスタ200とレジスタバンク220のデータスロットの内容の他に、FPSCRレジスタ210の内容もメモリに記憶する必要性と解釈することができる。コプロセッサはそれ以上のシステムレジスタ、たとえば、コプロセッサによる命令の処理の間に生じた例外を表す例外レジスタを含んでもよい。記憶命令に異なる奇数、たとえば、37が表された場合には、これをロード記憶制御ユニット42は、FPSCRレジスタ210、FPREGレジスタ200、およびレジスタバンク220の内容の他に、一つ以上の例外レジスタの内容も付加的に記憶する必要性と解釈することができる。
【0068】
この手法が特に有用であるのは、記憶またはロードの命令を開始するコードがレジスタバンクの内容を知っていなくて、後でレジスタバンクで検索するためにレジスタバンクの内容が一時的にのみメモリに記憶される。コードがレジスタバンクの内容を知っている場合には、FPREGレジスタ200の内容もメモリに記憶する必要は無いかも知れない。レジスタバンクの内容を知らないことがあるコードの代表的な例は、コンテキストスイッチコードおよび手順呼エントリとエクジットルーチンである。
【0069】
このような場合には、レジスタバンクの内容の他にFPREGレジスタ200の内容を効率良くメモリに記憶することができる。実際、上記したように、必要に応じて他のある種のシステムレジスタも記憶することができる。
【0070】
後続のロード命令を受けると、同様のプロセスが用いられる。したがって、ロード記憶制御ユニット42は、奇数個のデータスロットを指定する倍精度ロード命令を受けると、FPREGレジスタ200の内容をFPREGレジスタ200にロードした後、ロード命令に表されたスロット数で示されるシステムレジスタの内容、その後に偶数個のデータワードをレジスタバンク220の指定されたデータスロットに記憶させるように構成される。したがって、前に説明した例を考えると、ロード命令で指定されたデータスロット数が33である場合には、FPREGレジスタ200の内容がFPREGレジスタ200にロードされた後、32個のデータスロットの内容がロードされる。同様に、ロード命令に指定されたデータスロット数が35である場合には、上記の内容の他に、FPSCRレジスタ210の内容もFPSCRレジスタにロードされる。最後に、指定されたデータスロット数が37である場合には、上記の内容の他に、例外レジスタの内容もそれらの例外レジスタにロードされる。熟練した当業者には明らかなように、特定の奇数と結合された特定のオペレーションは完全に任意であり、希望に応じて変えることができる。
【0071】
図14は、記憶とロードの命令を実行するときに本発明の好適実施例に従うレジスタ制御−命令送出ユニット48のオペレーションを示す流れ図である。最初に、ステップ300で、命令に表された第一のレジスタ番号、すなわちベースレジスタとともに、データワード数(これは好適実施例ではデータスロット数と同じである)が命令から読み出される。次に、ステップ310で、命令が倍精度命令であるか判定される。前に説明したように、命令が倍精度命令であるか単精度命令であるかを表すので、この段階でコプロセッサはこの情報を得ることができる。
【0072】
命令が倍精度命令である場合には、プロセスはステップ320に進む。ステップ320で、命令で指定されたワード数が奇数であるか判定される。この実施例に対して、FPREGレジスタ200の他に種々のシステムレジスタを選択的に転送するために上記の手法を使用しないものと仮定すると、ワード数が奇数である場合には、これはFPREGレジスタ200の内容を転送すべきであるということを示し、これに応じてステップ325で、FPREGレジスタ200の内容がロード記憶制御ユニット42により転送される。次に、ステップ327でワード数が1だけ減らされ。プロセスがステップ330に進む。ステップ320でワード数が偶数であると判定された場合には、プロセスは直接ステップ330に進む。
【0073】
ステップ330で、ワード数が零より大きいか判定される。ワード数が零より大きくなければ、命令は完了したと見なされ、プロセスはステップ340で出る。しかし、ワード数が零より大きければ、プロセスがステップ332に進む。ステップ332で、倍精度データ値(すなわち、二つのデータスロットの内容)が第一の指定されたレジスタ番号に、またはそれから転送される。次に、ステップ334でワード数が2だけ減らされ、ステップ336でレジスタ番号が1だけ増される。前に説明したように、倍精度命令の場合、レジスタは実際には二つのデータスロットで構成されるので、レジスタカウントを1だけ増すことはデータスロット番号を2だけ増すことと同等である。
【0074】
次に、手順はステップ330に戻る。ステップ330で、ワード数がまだ零より大きいか判定される。ワード数が零より大きければ、プロセスが繰り返される。ワード数が零に達すると、プロセスはステップ340で出る。
ステップ310で命令が倍精度命令でないと判定された場合には、プロセスはステップ350に進む。ステップ350で、ワード数が零より大きいか再び判定される。ワード数が零より大きければ、プロセスはステップ352に進む。ステップ352で、単精度データ値が命令に表された第一のレジスタ番号に、またはそれから転送される。次に、ステップ354で、ワード数が1だけ減らされ、ステップ356で、次のデータスロットを指すようにレジスタ番号カウントが1だけ増される。次に、プロセスはステップ350に戻る。ステップ350で、ワード数がまだ零より大きいか判定される。ワード数が零より大きければ、プロセスが繰り返され、ワード数が零に等しくなったときに、プロセスはステップ360で出る。
【0075】
レジスタバンク内容を知らないコード、たとえば、コンテキストスイッチコードまたは手順呼エントリとエクジット系列を実行するときに、上記のアプローチにより相当な柔軟性が得られる。これらの場合には、オペレーティングシステムはレジスタの内容を知らない、そしてそれらの内容に応じてレジスタに対して異なる取り扱いをする必要が無いことが望ましい。上記のアプローチにより、奇数のデータワードを指定する単一の記憶またはロードの命令でこれらのコードルーチンを書き込むことができる。コプロセッサがレジスタ内容情報の使用を必要とする場合には、コプロセッサは命令の中のデータワードの奇数を、レジスタバンクの中のデータの内容を表すために必要とされるフォーマット情報をメモリに記憶するか、またはメモリからロードする必要性と解釈する。この柔軟性により、レジスタ内容情報を必要とするコプロセッサをサポートするための特有のオペレーティングシステムソフトウェアが不要となる。
【0076】
この手法により、コードの中の別々のオペレーションでレジスタ内容情報をロードし、記憶する必要もなくなる。レジスタ内容情報をロードし、記憶するオプションが命令に組み込まれているので、付加的なメモリアクセスは不要となる。これにより、コード長さが短くなり、時間が多分節約される。
【0077】
上記の手法を組み込んだ浮動小数点ユニットのアーキテクチャについて以下に説明する。
【0078】
1.緒言
VFPv1はARMプロセッサモジュールと一緒に使用するためにコプロセッサとしてインプリメンテーションされるように設計された浮動小数点システム(FPS:floating point system)である。このアーキテクチャのインプリメンテーションはハードウェアまたはソフトウェアに特徴を組み込んでもよいし、あるいはインプリメンテーションはソフトウェアを使用することにより、機能を完全にするか、またはIEEE754の適合性を提供してもよい。この仕様は、ハードウェアとソフトウェアのサポートの組み合わせを使用して全IEEE754の適合性を達成しょうとするものである。
【0079】
二つのコプロセッサ番号はVFPv1によって使用される。単精度オペランドのオペレーションに対して10が使用されるのに対して、倍精度オペランドのオペレーションに対して11が使用される。単精度データと倍精度データとの間の変換は、ソースオペランドコプロセッサ空間で動作する2個の変換命令で実行される。
【0080】
VFPv1アーキテクチャの特徴には下記のものが含まれる。
【0081】
・ サポートコードをそなえたハードウェアでのIEEE754との完全な適合性。
・ 各々がソースオペランドまたはデスティネーションレジスタとしてアドレス指定可能な32個の単精度レジスタ。
・ 各々がソースオペランドまたはデスティネーションレジスタとしてアドレス指定可能な16個の倍精度レジスタ。(倍精度レジスタは物理的な単精度レジスタと重なる)。
・ ベクトルモードは浮動小数点コード密度およびロードと記憶のオペレーションとの同時作用を著しく増大する。
・ dsp(ディジタル信号処理)と図形のオペレーションを強化するための8個の循環単精度レジスタの4個のバンクまたは4個の循環倍精度レジスタの4個のバンク。
・ 非正規処理オプションはIEEE754適合性(浮動小数点エミュレーションパッケージからのサポートを意図)または高速フラッシュトゥゼロ(flush−to−zero)機能を選択する。
・ 完全なパイプラインチェーン乗算−累算の構成で、IEEE754に適合性のある結果を生じる。
・ FFTOSIZ命令によるC、C++、およびジャバ(Java)に対する浮動小数点から整数への変換。
インプリメンテーションを行う者は完全にハードウェアでVFPv1のインプリメンテーションを行うか、ハードウェアとサポートコードの組み合わせを利用するかを選択してもよい。VFPv1は完全にソフトウェアでインプリメンテーションを行ってもよい。
【0082】
2.用語
この仕様書では以下の用語を使用する。
【0083】
自動例外 − それぞれの例外イネーブルビットの値にかかわらずサポートコードに常にバウンス(bounce)する例外条件。どの例外が自動であるかの選択があれば、それはインプリメンテーションのオプションである。セクション1の6.例外処理を参照のこと。
バウンス(Bounce) − ユーザトラップハンドラを呼び出すことなく、または別の仕方でユーザコードの正規のフローを遮断することなく、全面的にサポートコードにより処理される、オペレーティングシステムに報告される例外。
CDP − コプロセッサデータ処理(Coprocessor Data Processing)。FPSの場合、CDPオペレーションはロードまたは記憶のオペレーションではなくて、算術オペレーションである。
【0084】
ConvertToUnsignedInteger(Fm)(無符号整数への変換) − Fmの内容を無符号32ビット整数値へ変換。結果は、最終丸めと32ビットの無符号整数の範囲の外側の浮動小数点値の処理について、丸めモードによって左右される。浮動小数点入力値が負または32ビットの無符号整数に対して大き過ぎる場合には、INVALID例外が可能である。
ConvertToSignedInteger(Fm)(符号つき整数への変換) − Fmの内容を符号つき32ビット整数値へ変換。結果は、最終丸めと32ビットの符号つき整数の範囲の外側の浮動小数点値の処理について、丸めモードによって左右される。浮動小数点入力値が32ビットの符号つき整数に対して大き過ぎる場合には、INVALID例外が可能である。
ConvertUnsignedIntToSingle/Double(Rd)(無符号整数を単/倍へ変換) − 32ビットの無符号整数と解釈されたARMレジスタの内容(Rd)を単精度または倍精度の浮動小数点値に変換。デスティネーション精度が単精度であれば、変換オペレーションでINEXACT例外が可能である。
ConvertSignedIntToSingle/Double(Rd)(符号つき整数を単/倍へ変換) − 32ビットの符号つき整数と解釈されたARMレジスタの内容(Rd)を単精度または倍精度の浮動小数点値に変換。デスティネーション精度が単精度であれば、変換オペレーションでINEXACT例外が可能である。
【0085】
非正規化値 − 範囲(−2Emin<x<2Emin)での値の表現。単精度と倍精度のオペランドに対するIEEE754フォーマットでは、非正規化値すなわちdenormalは零指数をそなえ、先行シグニフィカンド(significand)ビットは1ではなくて、0である。IEEE754−1985の仕様では、非正規化オペランドの生成と操作は正規オペランドの場合と同じ精度で行わなければならない。
ディスエーブルド(Disabled)例外 − FPSCRの中の対応する例外イネーブルビットが0に設定された例外は「ディスエーブルド」(disabled)と呼ばれる。これらの例外の場合、IEEE754仕様は正しい結果を返すように定める。例外条件を発生するオペレーションは、サポートコードにバウンスして、IEEE754で定められた結果を生じる。例外はユーザ例外ハンドラに報告されない。
イネーブルド(Enabled)例外 − それぞれの例外イネーブルビットが1に設定された例外。この例外の生起の際に、ユーザハンドラへのトラップが行われる。例外条件を生成するオペレーションはサポートコードにバウンスすることにより、IEEE754で定められた結果を生じる。次に、例外はユーザ例外ハンドラに報告される。
【0086】
指数 − 表現された数の値を判定する際に2の整数乗を通常表す浮動小数点の成分。時々、指数は符号つきまたは不偏の指数と呼ばれる。
小数部 − その暗示された2進小数点の右側にあるシグニフィカンドのフィールド。
フラッシュ−トゥー−ゼロモード − このモードでは、丸めの後の範囲(−2Emin<x<2Emin)のすべての値は非正規化された値に変換されるのではなくて、零として扱われる。
高(Fn/Fm) − メモリで表現された倍精度の上位32ビット[63:32]。
【0087】
IEEE754−1985 − アメリカ電気電子学会、「2進浮動小数点演算のIEEE規格」(”IEEE Standard for Binary Floating−Point Arithmetic”,ANSI/IEEEStd 754−1985,The Institute of Electrical and Electronics Engineers,Inc.New York,10017)。しばしばIEEE754規格と呼ばれるこの規格は、データ型、正しいオペレーション、例外の型と処理、および浮動小数点システムに対するエラー範囲を定める。ほとんどのプロセッサは、ハードウェアまたはハードウェアとソフトウェアとの組み合わせの規格に従って構築される。
無限大 − ∞を表現するために使用されるIEEE754の特殊フォーマット。指数が精度に対して最大となり、シグニフィカンドはオール零となる。
入力例外 − 与えられたオペレーションに対するオペランドの一つ以上がハードウェアによってサポートされない例外条件。オペレーションの完了のために、オペレーションはサポートコードにバウンスする。
【0088】
中間結果 − 丸めの前に計算の結果を記憶するために使用される内部フォーマット。このフォーマットは、デスティネーションフォーマットより大きな指数フィールドとシグニフィカンドフィールドをそなえ得る。
低(Fn/Fm) − メモリで表現された倍精度の下位32ビット[31:0]。
MCR − ”Move to Coprocessor from ARMRegister”(ARMレジスタからコプロセッサへ移動)。FPSの場合、これには、ARMレジスタとFPSレジスタとの間でデータの転送またはレジスタの制御を行う命令が含まれる。単一のMCRクラス命令を使用して、情報の32ビットだけを転送してもよい。
【0089】
MRC − ”Move to ARM Register from Coprocessor”(コプロセッサからARMレジスタへ移動)。FPSの場合、これには、FPSとARMレジスタとの間でデータの転送またはレジスタの制御を行う命令が含まれる。単一のMCRクラス命令を使用して、情報の32ビットだけを転送してもよい。
NaN − Not a number (数ではない)。浮動小数点フォーマットで符号化された記号存在。二つの型のNaN、シグナリングとノンシグナリング、すなわち静止とがある。シグナリングNaNは、オペランドとして使用された場合、無効オペランド例外を生じる。静止NaNは、シグナリング例外無しに殆どすべての算術オペレーションを通って伝搬する。NaNに対するフォーマットは、シグニフィカンドが非零である、すべて1の指数フィールドをそなえている。シグナリングNaNを表現するために、小数部の最上位ビットが0であるのに対して、静止NaNは1に設定されたビットをそなえている。
【0090】
Reserved (リザーブド) − 制御レジスタまたは命令フォーマットの中のフィールドは、そのフィールドがインプリメンテーションによって定義されるべき場合に「リザーブド」となる。フィールドの内容が0でない場合には、予測不能の(UNPREDICTABLE)結果を生じる。これらのフィールドは、アーキテクチャの将来の拡張で使用するために取って置かれる。すなわち、インプリメンテーション特有のものである。インプリメンテーションによって使用されない、すべてのリザーブドビットは零と書かれなければならず、零と読まれる。
【0091】
丸めモード − IEEE754仕様では、すべての計算をあたかも無限の精度までのように行うことが要求されている。すなわち、二つの単精度値の乗算では、シグニフィカンドのビット数の2倍までシグニフィカンドを正確に計算しなければならない。デスティネーション精度でこの値を表現するために、シグニフィカンドの丸めが、しばしば必要とされる。IEEE754規格では、四つの丸めモードが指定されている。すなわち、最も近いものへの丸め(RN:round to nearest)、零への丸め、すなわち(RZ:round tozero)、プラス無限大への丸め(RP:round to plus infinity)、およびマイナス無限大への丸め(RM:round to minus infinity)である。第一の丸めは、真ん中の点で丸めることによって行われ、真ん中の場合、シグニフィカンドの最下位ビットを零にするときは切り上げて「丁度」にする。第二の丸めは、シグニフィカンドの右側のどのビットも事実上切り捨てる。このように、第二の丸めは常に切り捨てを行い、整数変換でC、C++、およびジャバ(Java)言語により使用される。後の二つのモードは区間演算で使用される。
【0092】
シグニフィカンド − 暗示された2進小数点の左側の明示されるか暗示された先行ビットと右側の小数部フィールドで構成される2進浮動小数点数の成分。
【0093】
サポートコード − ハードウェアを補足することによりIEEE754規格との適合性が得られるように使用されなければならないソフトウェア。サポートコードは二つの成分をそなえるように考えられている。一つの成分はルーチンのライブラリである。ルーチンは、超越的な演算のような、ハードウェアの範囲を超えるオペレーション、およびサポートされない入力での除算または例外を生じ得る入力のようなサポートされた機能を行う。もう一つの成分は例外ハンドラのセットである。例外ハンドラはIEEE754に従うようにするために例外条件を処理する。サポートコードは、サポートされないデータ型またはデータ表現(たとえば、非正規値または10進データ型)の適切な処理のエミュレーションを行うために、インプリメンテーションされた機能を実行しなければならない。ルーチンの出口でユーザの状態を復帰させるように配慮されていれば、FSPを中間の計算で利用するようにルーチンを書いてもよい。
【0094】
トラップ − それぞれの例外イネーブルビットがFPSCRに設定された例外条件。ユーザのトラップハンドラが実行される。
未定義(UNDEFINED) − 未定義の命令トラップを生成する命令を示す。ARM例外についての更に詳しい情報については、ARMアーキテクチャのレファレンスマニュアルを参照のこと。
予測不能(UNPREDICTABLE) − 頼ることができない命令または制御レジスタのフィールド値の結果。予測不能(UNPREDICTABLE)な命令または結果は、セキュリティホールを表現してはならないし、プロセッサまたはシステムのどの部分をも停止させてはならない。
【0095】
サポートされないデータ(Unsupported Data) − ハードウェアによって処理されないが、完了のためサポートコードにバウンドされる特定のデータ値。これらのデータは無限大、NaN、非正規値、および零を含んでもよい。インプリメンテーションは、ハードウェアで全面的または部分的にこれらの値の中のどれをサポートするかを自由に選択し、あるいはオペレーションを完了するためにサポートコードからの助けを必要とする。例外に対する対応する例外イネーブルビットが設定されれば、サポートされないデータを処理することによって生じるいかなる例外もユーザコードにトラップされる。
【0096】
3.レジスタファイル
【0097】
3.1 緒言
このアーキテクチャは32個の単精度レジスタと16個の倍精度レジスタを提供する。これらはすべて、ソースまたはデスティネーションのオペランドとして、完全に定義された5ビットのレジスタインデックスの中で個々にアドレス指定することができる。
【0098】
32個の単精度レジスタは16個の倍精度レジスタと重なる。すなわち、D5への倍精度データの書き込みはS10とS11の内容の上書きである。オーバラップしたインプリメンテーションで単精度データ記憶装置としてのレジスタの使用と倍精度データ記憶装置の半分としてのレジスタの使用との間のレジスタ使用の衝突に気がつくことが、コンパイラまたはアセンブリ言語のプログラマの仕事である。レジスタの使用を一つの精度に限定するためのハードウェアは設けられていない。これに違反した場合には、結果は予測不能(UNPREDICTABLE)である。
【0099】
VFPv1は、1個、2個、または3個のオペランドレジスタを使用して結果を作成し、結果をデスティネーションレジスタに書き込むスカラモードで、または指定されたオペランドが1群のレジスタを参照するベクトルモードで、これらのレジスタへのアクセスを提供する。VFPv1は、単精度オペランドの場合は単一の命令で8個までの要素について、そして倍精度オペランドの場合は4個までの要素についてベクトルオペレーションをサポートする。
【0100】
Figure 0003969895
【0101】
ベクトルモードは、非零値をLENフィールドに書き込むことによってイネーブルされる。LENフィールドに0が含まれている場合には、FPSはスカラモードで動作し、レジスタフィールドはフラットレジスタモデルで32個の個々の単精度レジスタまたは16個の倍精度レジスタをアドレス指定するものと解釈される。LENフィールドが非零である場合には、FPSはベクトルモードで動作し、レジスタフィールドはレジスタのベクトルをアドレス指定するものと解釈される。LENフィールドの符号化については、表1参照。
【0102】
LENフィールドを変えることなくスカラオペレーションとベクトルオペレーションとを混合する手段は、デスティネーションレジスタの指定により利用できる。デスティネーションレジスタがレジスタの第一のバンク(S0−S7またはD0−D3)にある場合には、ベクトルモードにある間にスカラオペレーションを指定してもよい。更に詳しい情報についてはセクション1を参照のこと。
【0103】
3.2 単精度レジスタの使用
FPSCRのLENフィールドが0である場合には、S0からS31と番号を付けられた32個の単精度レジスタが利用できる。どのレジスタもソースレジスタまたはデスティネーションレジスタとして使用することができる。
【0104】
【外1】
Figure 0003969895
イラスト1 単精度レジスタマップ
【0105】
単精度(コプロセッサ10)のレジスタマップは、イラスト1に示すように描くことができる。
【0106】
FPSCRのLENフィールドが0より大きい場合には、イラスト2に示すように、レジスタファイルは8個の循環レジスタの4個のバンクとして振る舞う。ベクトルレジスタの第一のバンクV0からV7はスカラレジスタS0からS7と重なり、各オペランドに対して選択されたレジスタに応じてスカラまたはベクトルとしてアドレス指定される。より詳しい情報については、セクション1、3.4 レジスタの使用を参照のこと。
【0107】
【外2】
Figure 0003969895
イラスト2 単精度レジスタの循環
【0108】
たとえば、FPSCRのLENが3に設定されている場合には、参照ベクトルV10がレジスタS10、S11、S12、およびS13をベクトルオペレーションに含める。同様に、V22はS22、S23、S16、およびS17をオペレーションに含める。ベクトルモードでレジスタファイルがアクセスされると、順序でV7に続くレジスタはV0である。同様に、V8がV15に続き、V16がV23に続き、V24がV31に続く。
【0109】
3.3 倍精度レジスタの使用
FPSCRのLENフィールドが0である場合には、16個の倍精度スカラレジスタが利用できる。
【0110】
【外3】
Figure 0003969895
イラスト3 倍精度レジスタのマップ
【0111】
どのレジスタもソースレジスタまたはデスティネーションレジスタとして使用することができる。レジスタマップは、イラスト3に示すように描くことができる。
【0112】
FPSCRのLENフィールドが0より大きい場合には、イラスト4に示すように、4個の循環レジスタの4個のバンクでは、4個のスカラレジスタと16個のベクトルレジスタが利用できる。ベクトルレジスタの第一のバンクV0からV3はスカラレジスタD0からD3と重なる。各オペランドに対して選択されたレジスタに応じてスカラまたはベクトルとしてアドレス指定される。より詳しい情報については、セクション1、3.4 レジスタの使用を参照のこと。
【0113】
【外4】
Figure 0003969895
イラスト4 倍精度レジスタの循環
【0114】
セクション1の単精度の例と同様に、4個のバンクの中で倍精度レジスタが循環している。
【0115】
3.4 レジスタの使用
スカラとベクトルとの間のこれらのオペレーションがサポートされる。(OP2は浮動小数点コプロセッサによってサポートされる二つのオペランドオペレーションのどれであってもよい。OP3は三つのオペランドオペレーションのどれであってもよい。)
【0116】
以下の説明では、レジスタファイルの「第一のバンク」は、単精度のオペレーションの場合はレジスタS0−S7、倍精度のオペレーションの場合はD0−D3と定められる。
【0117】
・ ScalarD=OP2ScalarA または ScalarD=ScalarA OP3ScalarB または ScalarD=ScalarA*ScalarB+ScalarD
・ VectorD=OP2ScalarA または VectorD=ScalarA OP3VectorB または VectorD=ScalarA*VectorB+VectorD
・ VectorD=OP2VectorA または VectorD=VectorA OP3VectorB または VectorD=VectorA*VectorB+VectorD
【0118】
3.4.1 スカラオペレーション
二つの条件で、FPSがスカラモードで動作する。
【0119】
1? FPSCRのLENフィールドが0である。デスティネーションレジスタとソースレジスタは単精度オペレーションの場合にはスカラレジスタ0から31のどれであってもよく、倍精度オペレーションの場合にはスカラレジスタ0から15のどれであってもよい。命令で明示的に指定されたレジスタ上でだけ、オペレーションが行われる。
【0120】
2? デスティネーションレジスタは、レジスタファイルの第一のバンク内にある。ソーススカラは他のレジスタのどれであってもよい。このモードによって、FPSCRのLENフィールドを変える必要無しにスカラオペレーションとベクトルオペレーションとの混合が可能になる。
【0121】
3.4.2 ベクトルデスティネーションとともにスカラとベクトルのソースを含むオペレーション
このモードで動作するために、FPSCRのLENフィールドは零より大きく、デスティネーションレジスタはレジスタファイルの第一のバンクの中に無い。スカラソースレジスタはレジスタファイルの第一のバンクの中のどのレジスタであってもよいが、VectorBに対しては残りのレジスタのどれであってもよい。ソーススカラレジスタがVectorBのメンバである場合、またはLEN個より少ない要素でVectorDがVectorBと重なる場合には、振る舞いは予測不能(UNPREDICTABLE)である。VectorDとVectorBは同じベクトルであるか、またはすべてのメンバで完全に異なっていなければならない。セクション1の概括表参照。
【0122】
3.4.3 ベクトルオペレーションだけを含むオペレーション
このモードで動作するために、FPSCRのLENフィールドは零より大きく、デスティネーションベクトルレジスタはレジスタファイルの第一のバンクの中に無い。VectorAの個々の要素はVectorBの対応する要素と組合わされて、VectorDに書き込まれる。VectorAに対してはレジスタファイルの第一のバンクの中に無いどのレジスタも利用できるが、VectorBに対してはすべてのベクトルが利用できる。第二の場合のように、ソースベクトルのどちらかとデスティネーションベクトルがLENより少ない個数の要素で重なる場合には、振る舞いは予測不能(UNPREDICTABLE)である。それらは同じであるか、またはすべてのメンバで完全に異なっていなければならない。セクション1の概括表参照。
【0123】
注意すべきことは、FMACファミリのオペレーションについては、デスティネーションレジスタまたはベクトルは常に累算レジスタまたはベクトルである。
【0124】
3.4.4 オペレーション概括表
次の表は、単精度と倍精度の、オペランドが2個と3個の命令に対するレジスタ使用オプションを表す。「任意」は、指定されたオペランドに対する、その精度のすべてのレジスタの利用可能性を意味する。
【0125】
Figure 0003969895
【0126】
Figure 0003969895
【0127】
Figure 0003969895
【0128】
Figure 0003969895
【0129】
4.命令セット
FPS命令は三つのカテゴリーに分けることができる。
・ MCRとMRC − ARMとFPSとの間の転送オペレーション
・ LDCとSTC − FPSとメモリとの間のロードと記憶のオペレーション
・ CDP − データ処理オペレーション
【0130】
4.1 命令の同時実行性
FPSのアーキテクチャの仕様の意図は二つのレベル、すなわちパイプライン状の機能ユニットとCDP機能による並列のロード/記憶オペレーションでの同時実行性である。現在処理しているオペレーションと並列に実行するためにこれらのオペレーションに対するレジスタ依存性を持たないロードと記憶のオペレーションをサポートすることにより、著しい性能上の利点が得られる。
【0131】
4.2 命令の直列化
FPSは、現在実行しているすべての命令が完了して、各々の例外ステータスがわかるまで、FPSがARMをビジー待ち合わせさせる単一の命令を指定する。例外が生じている場合には、直列化命令は中断され、ARMで例外処理が始まる。FPSの中の直列化命令は次の通りである。
・ FMOVX − 浮動小数点システムレジスタに対する読み出しまたは書き込み
【0132】
現在の命令が完了するまで、浮動小数点システムレジスタに対するいかなる読み出しまたは書き込みも停止される。システムIDレジスタに対するFMOVX(FPSID)は、先行する浮動小数点命令によって生じた例外をトリガする。ユーザステータス−制御レジスタ(FPSCR)上で(FMOVXを使用して)読み出し/修正/書き込みを行うことを使用して、例外ステータスビットをクリアすることができる(FPSCR[4:0])。
【0133】
4.3 整数データを含む変換
浮動小数点データと整数データとの間の変換は、整数データを含むデータ転送命令と変換を行うCDP命令とで構成されるFPSの二段階のプロセスである。整数フォーマットのままFPSレジスタで整数データに対して何か算術オペレーションを試みると、結果は予測不能(UNPREDICTABLE)であり、このようなオペレーションはどれも避けるべきである。
【0134】
4.3.1 整数データからFPSレジスタ内の浮動小数点データへの変換
MCRのFMOVS命令を使用して、どちらかのARMレジスタから整数データを浮動小数点単精度レジスタにロードすることができる。このとき、整数−浮動のファミリのオペレーションにより、FPSレジスタ内の整数データを単精度または倍精度の浮動小数点値に変換して、デスティネーションのFPSレジスタに書き込むことができる。整数値がもはや必要とされない場合には、デスティネーションレジスタはソースレジスタであってもよい。整数は符号つきまたは符号無しの32ビットの数とすることができる。
【0135】
4.3.2 FPSレジスタ内の浮動小数点データから整数データへの変換
浮動−整数ファミリの命令により、FPSの単精度または倍精度のレジスタの中の値を符号つきまたは符号無しの32ビットの整数フォーマットに変換することができる。結果の整数は単精度のデスティネーションレジスタに入れられる。MRCのFMOVS命令を使用して、整数データをARMレジスタに記憶することができる。
【0136】
4.4 レジスタファイルのアドレス指定
単精度スペース(S=0)でオペレーションを行う命令は、オペランドアクセスに対して命令フィールドで利用できる5ビットを使用する。上位の4ビットはFn、Fm、またはFdと表されたオペランドフィールドに入っている。アドレスの最下位ビットはそれぞれN、M、またはDの中にある。
【0137】
倍精度スペース(S=1)で動作する命令はオペランドアドレスの上位4ビットだけを使用する。これらの4ビットはFn、Fm、およびFdのフィールドに入っている。対応するオペランドフィールドにオペランドアドレスが入っているとき、N、M、およびDビットに0が入っていなければならない。
【0138】
4.5 MCR(ARMレジスタからコプロセッサへの移動)
MCRオペレーションには、FPSによるARMレジスタ内のデータの転送または使用が含まれる。これには、ARMレジスタから単精度フォーマットでのデータの移動または一対のARMレジスタからFPSレジスタへの倍精度フォーマットでのデータの移動、ARMレジスタから単精度FPSレジスタへの符号つきまたは符号無しの整数値のロード、および制御レジスタへのARMレジスタの内容のロードが含まれる。
【0139】
MCR命令に対するフォーマットがイラスト5に示されている。
【外5】
Figure 0003969895
イラスト5 MCR命令のフォーマット
【0140】
Figure 0003969895
Figure 0003969895
【0141】
Figure 0003969895
【0142】
注:32ビットのデータオペレーションだけがFMOV[S,HD,LD]命令によってサポートされる。
【0143】
ARMレジスタまたは単精度レジスタの中のデータだけがFMOVSオペレーションによって移動される。2個のARMレジスタから倍精度オペランドを転送するために、FMOVLD命令とFMOVHD命令が下位半分と上位半分とをそれぞれ移動させる。
【0144】
4.6 MRC(コプロセッサからARMレジスタへの移動/浮動レジスタの比較)
MRCオペレーションには、FPSレジスタのデータのARMレジスタへの転送が含まれる。これには、単精度値、または浮動小数点値の整数への変換結果を一つのARMレジスタへ移動すること、あるいは倍精度FPSレジスタを2個のARMレジスタへ移動することと、前の浮動小数点比較オペレーションの結果によりCPSRのステータスビットを修正することが含まれる。
MRC命令のフォーマットがイラスト6に示されている。
【0145】
【外6】
Figure 0003969895
イラスト6 MRC命令のフォーマット
【0146】
Figure 0003969895
Figure 0003969895
【0147】
*FMOVX FPSCR命令の場合、RdフィールドにR15(1111)が入っている場合、CPSRの上位4ビットは結果の条件コードで更新される。
【0148】
Figure 0003969895
【0149】
注:MCR FMOV命令の注参照。
【0150】
4.7 LDC/STC(ロード/記憶FPSレジスタ)
LDCとSTCオペレーションはFPSとメモリとの間のデータ転送を行う。浮動小数点データは単一データ転送または多重データ転送でどちらかの精度で転送することができる。この際、ARMアドレスレジスタは更新されるか、または変化しないままとされる。移動多重オペーションでのデータ構造に対する多重オペランドアクセスとともに、満杯の降順スタックと空き昇順スタックがともにサポートされる。LDCとSTCに対する種々のオプションの説明については表11参照。
LDCとSTCの命令のフォーマットがイラスト7に示されている。
【0151】
【外7】
Figure 0003969895
イラスト7 LDC/STC命令のフォーマット
【0152】
Figure 0003969895
Figure 0003969895
【0153】
4.7.1 ロードと記憶のオペレーションについての一般的な注意
多重レジスタのロードと記憶は、ベクトルオペレーションが使用する4個または8個のレジスタ境界を横切るラッピングなしに、レジスタファイルを通って線形に行われる。
レジスタファイルの端を通り越してロードしようとすることは予測不能(UNPREDICTABLE)である。
【0154】
二重ロードまたは多重記憶に対するオフセットに奇数のレジスタカウント17以下が入っている場合には、インプリメンテーションはもう一つの32ビットのデータ項目を書き込んだり、もう一つの32ビットのデータ項目を読み出したりしてもよいが、そうする必要は無い。付加的なデータ項目を使用して、ロードされたり記憶されたりするときのレジスタの内容を識別することができる。これは、レジスタファイルフォーマットがその精度に対するIEEE754のフォーマットと異なり、各レジスタがメモリ内でそれを識別するために必要な型情報をそなえているインプリメンテーションで有用である。オフセットが奇数で、数が単精度レジスタの数より大きい場合には、これを使用して、レジスタのコンテキストスイッチとすべてのシステムレジスタを起動してもよい
【0155】
Figure 0003969895
Rnの実行開始アドレスから多重レジスタのロード/記憶、とRnの修飾無し。レジスタ数は、単精度の場合には1から16個、倍精度の場合には1から8個とすることができる。オフセットフィールドには、32ビットの転送数が入っている。このモードを使用して、グラフィックオペレーションに対する変換マトリックスおよび変換に対する点をロードすることができる。
例:
FLDMEQS r12,{f8−f11}はr12のアドレスからの4個の単精度データを4個の浮動小数点レジスタにロードする。s8、s9、s10、およびr12は変化しない。
FSTMEQD r4,{f0}はd0からの一つの倍精度データをr4のアドレスに記憶する。r4は変化しない。
型1転送:Rnのポストインデックスとライトバックを使用して多重をロード/記憶する。
Figure 0003969895
Rnの実行開始アドレスから多重レジスタのロード/記憶、とRnへの最後の転送の後に次のアドレスのライトバック。オフセットフィールドは32ビットの転送数である。RnへのライトバックはOffset*4である。多重ロードで転送される最大ワード数は16である。Uビットは1に設定しなければならない。これは、空きの昇順スタックに記憶するためか満杯の降順スタックからロードするため、または変換された点を記憶してポインタを次の点に歩進するため、そして多重データをフィルタオペレーションにロードし、記憶するために、使用される。
例:
FLDMEQIAS r13!,{f12−f15}はr13のアドレスから4個の浮動小数点レジスタs12、s13、s14、およびs15にロードし、系列の次のデータを指すアドレスでr13を更新する。
型2転送:プリインデックスまたはRnを使用し、ライトバック無しで一つのレジスタをロード/記憶する。
Figure 0003969895
Rnのアドレスのプリインクリメントを使用し、ライトバック無しで、単一のレジスタをロード/記憶する。オフセット値はOffset*4であり、加算(U=1)またはRnから減算(U=0)されて、アドレスを生成する。これは構造体へのオペランドアクセスに対して有用であり、浮動小数点データのためメモリにアクセスするために使用される代表的な方法である。
例:
FSTEQD f4,[r8,#+8]は32(8*4)だけオフセットされたr8のアドレスから倍精度データをd4に記憶する。r8は変化しない。
型3転送:プリインデックスとライトバックを使用して多重レジスタをロード/記憶する。
Figure 0003969895
Rnのアドレスのプリデクリメントと新しい目的アドレスで多重レジスタをRnへロード/記憶。オフセットフィールドには32ビットの転送数が入っている。ライトバック値はRnから減算されるOffset*4である。このモードは、満杯の降順スタックに記憶するため、または空きの昇順スタックからロードするために、使用される。
例:
FSTMEQDBS r9!,{f27−f29}は、r9に入っている最後のエントリアドレスでs27、s28、およびs29からの3個の単精度データを空きの降順スタックに記憶する。r9は新しい最後のエントリへの点に更新される。
【0156】
4.7.2 LDC/STCオペレーションのまとめ
表12は、LDC/STCオペレーションコードのP、W、およびUビットに対して許容できる組み合わせ、および妥当な各オペレーションに対するオフセットフィールドの機能を表にしたものである。
【0157】
Figure 0003969895
【0158】
4.8 CDP(コプロセッサデータ処理)
CDP命令には、浮動小数点レジスタファイルからのオペランドを含み、レジスタファイルにライトバックされる結果を生じる、すべてのデータ処理オペレーションが含まれている。特に関心があるのは、FMAC(乗算−累積連鎖)オペレーション、オペランドの中の二つに乗算を行い、第三のオペランドを加算するオペレーションである。このオペレーションは、積に対してIEEE丸めオペレーションを行った後、第三のオペランドの加算を行うという点で、融合された乗算−累積オペレーションと異なる。これにより、ジャバ(Java)コードはFMACオペレーションを利用することにより、別々に乗算した後、加算を行うオペレーションに比べて、乗算−累積オペレーションの速度を早くすることができる。
【0159】
CDPグループの二つの命令は、FPSレジスタ内の浮動小数点値をその整数値に変換する際に有用である。FFTOUI[S/D]は、FPSCR内で現在の丸めモードを使用して、単精度または倍精度の内容をFPSレジスタ内の符号無し整数に変換する。FFTOUI[S/D]は、符号つき整数への変換を行う。FFTOUIZ[S/D]とFFTOSIZ[S/D]は同じ機能を行うが、変換に対するFPSCR丸めモードを無視し、小数部のビットを切り捨てる。FFTOSIZ[S/D]の機能は、浮動小数点から整数への変換において、C、C++、およびジャバ(Java)が必要とする。FFTOSIZ[S/D]命令はこの機能を提供し、変換に対してFPSCRからRZへの丸めモードビットの調整を必要としない。変換のためのサイクルカウントはFFTOSIZ[S/D]オペレーションのサイクルカウントだけとなり、4サイクルから6サイクルが節約される。
【0160】
比較オペレーションは、CDPCMP命令とその後のMRC FMOVX FPSCR命令を使用して、結果のFPSフラグビットの付いたARM CPSRフラグビットをロードすることにより、行われる。比較オペランドの一つがNaNである場合には、INVALID例外に対する可能性がある状態と無い状態とで、比較オペレーションが提供される。比較オペランドの一つがNaNである場合には、FCMPEとFCMPE0とが例外を伝えている間に、FCMPとFCMP0とはINVALIDを伝えない。FCMP0とFCMPE0とはFmフィールドの中のオペランドを0と比較し、これに応じてFPSフラグを設定する。ARMフラグN、Z、C、およびVは、FMOVX FPSCRオペレーションの後で次のように定義される。
【0161】
N より小さい
Z 等しい
C 以上または無秩序
V 無秩序
【0162】
CDP命令のフォーマットがイラスト8に示されている。
【0163】
【外8】
Figure 0003969895
イラスト8 CDP命令のフォーマット
【0164】
Figure 0003969895
Figure 0003969895
【0165】
4.8.1 操作コード(Opcode)
表14はCDP命令に対する主要な操作コードを表にしたものである。すべてのニーモニックは[OPERATION][COND][S/D]の形式をそなえている。
【0166】
Figure 0003969895
Figure 0003969895
【0167】
4.8.2 拡張オペレーション
表15は、操作コードフィールドで拡張値を使用して利用できる拡張オペレーションを表にしたものである。直列化命令とFLSCB命令を除いて、すべての命令は[OPERATION][COND][S/D]の形式をそなえている。拡張オペレーションに対する命令符号化は、Fnオペランドに対するレジスタファイルへのインデックスと同様に形成される。すなわち、{Fn[3:0],N}の形式になっている。
【0168】
Figure 0003969895
Figure 0003969895
Figure 0003969895
【0169】
* ベクトル化不能のオペレーション。LENフィールドは無視され、スカラオペレーションは指定されたレジスタ上で行われる。
【0170】
5. システムレジスタ
【0171】
5.1 システムIDレジスタ(FPSID)
FPSIDには、FPSアーキテクチャ、およびインプリメンテーションで定義された識別値が入っている。このワードを使用して、FPSのモデル、特徴セット、および改訂、ならびにマスクセット番号を判定することができる。FPSIDは読み取り専用であり、FPSIDへの書き込みは無視される。FPSIDレジスタのレイアウトについては、イラスト9参照。
【0172】
【外9】
Figure 0003969895
イラスト9 FPSIDレジスタの符号化
【0173】
5.2 ユーザステータス−制御レジスタ(FPSCR)
FPSCRレジスタには、ユーザがアクセスできる構成ビットと例外ステータスビットが入っている。構成オプションには、例外イネーブルビット、丸め制御、ベクトルストライドと長さ、非正規オペランドの処理と結果、およびデバッグモードの使用が含まれる。このレジスタは、ユーザとオペレーティングシステムコードがFPSを構成し、完了したオペレーションのステータスを問い合わせるためのものである。これはコンテキストスイッチの間に、セーブされ、リストアされなければならない。ビット31から28には、最も最近の比較命令からのフラグ値が入っている。ビット31から28には、FPSCRの読み出しを使用してアクセスすることができる。FPSCRがイラスト10に示されている。
【0174】
【外10】
Figure 0003969895
イラスト10 ユーザステータス−制御レジスタ(FPSCR)
【0175】
5.2.1 ステータス比較と処理制御のバイト
ビット31から28には、最も最近の比較オペレーションの結果、および特殊な状況でのFPSの演算応答を指定するのに有用な数個の制御ビットが入っている。ステータス比較と処理制御のバイトのフォーマットがイラスト11に示されている。
【0176】
【外11】
Figure 0003969895
イラスト11 FPSCRのステータス比較と処理制御のバイト
【0177】
Figure 0003969895
【0178】
5.2.2 システム制御バイト
システム制御バイトは丸めモード、ベクトルストライド、およびベクトル長さフィールドを制御する。ビットはイラスト12に示されているように指定されている。
VFPv1アーキテクチャには、ベクトルオペレーションと一緒に使用するためのレジスタファイルストライド機構が組み入れられている。STRIDEビットが00に設定されている場合には、ベクトルオペレーションで選択される次のレジスタはレジスタファイルの中の前のレジスタの直後のレジスタとなる。正規のレジスタファイルのラッピング機構はストライド値の影響を受けない。11のSTRIDEは、入力レジスタの全部と出力レジスタを2だけインクリメントさせる。
【0179】
たとえば、
FMULEQS F8,F16,F24
は次の非ベクトルオペレーションを行う。
FMULEQS F8,F16,F24
FMULEQS F10,F18,F26
FMULEQS F12,F20,F28
FMULEQS F14,F22,F30
レジスタファイルの中の乗算に対するオペランドが事実上、1レジスタではなくて、2レジスタだけ「ストライド」する。
【0180】
【外12】
Figure 0003969895
イラスト12 FPSCRシステム制御バイト
【0181】
Figure 0003969895
Figure 0003969895
【0182】
5.2.3 例外イネーブルバイト
例外イネーブルバイトはビット15:8を占め、例外トラップに対するイネーブルが入っている。ビットはイラスト13に示すように指定されている。例外イネーブルビットは、浮動小数点例外条件の処理に対するIEEE754仕様の要求に合致する。ビットが設定された場合には、例外はイネーブルされる。現在の命令に対する例外条件が生じた場合には、FPSはユーザの可視トラップをオペレーティングシステムに伝える。ビットがクリアされた場合には、例外はイネーブルされない。例外条件の場合には、FPSはユーザの可視トラップをオペレーティングシステムに伝えないが、数学的に妥当な結果を生じる。例外イネーブルビットに対するデフォルトはディスエーブルされる。例外処理の更に詳しい情報については、IEEE754規格を参照されたい。
【0183】
インプリメンテーションによっては、例外がディスエーブルされたときでも、ハードウェアの機能の外側で例外条件を処理するために、サポートコードへのバウンスを生じる。これは一般に、ユーザコードには見えない。
【0184】
【外13】
Figure 0003969895
イラスト13 FPSCR例外イネーブル
【0185】
Figure 0003969895
【0186】
5.2.4 例外ステータスバイトはFPSCRのビット7:0を占め、例外ステータスフラグビットが入っている。浮動小数点例外毎に一つづつ、5個の例外ステータスフラグビットがある。これらのビットは「粘着性がある」。検出された例外によって一旦設定されると、これらのビットはFPSCRまたはFSERIALCLへのFMOVX書き込みの命令によってクリアされなければならない。ビットはイラスト14に示すように指定される。イネーブルされた例外の場合には、対応する例外ステータスビットは自動的に設定されることは無い。必要に応じて適当な例外ステータスビットを設定することは、サポートコードのタスクである。いくつかの例外は自動にし得る。すなわち、例外条件が検出されると、例外イネーブルビットがどのように設定されるかにかかわり無く、FPSは後続の浮動小数点命令にバウンスする。これにより、IEEE754規格が必要とする、より多くの関係する例外処理をハードウェアではなくソフトウェアで行うことができる。一例は、FZビットが0に設定されるアンダフロー条件である。この場合、正しい結果は、結果の指数と丸めモードによって決まる非正規化された数となり得る。FPSによって作成者は、バウンスするオプションを含む応答を選択し、サポートコードを利用することにより正しい結果を作成して、この値をデスティネーションレジスタに書き込むことができる。アンダフロー例外イネーブルビットが設定された場合には、サポートコードがオペレーションを完了した後、ユーザのトラップハンドラが呼び出される。このコードはFPSの状態を変更し、リターン、すなわちプロセスを終了させることができる。
【0187】
【外14】
Figure 0003969895
イラスト14 FPSCR例外ステータスバイト
【0188】
Figure 0003969895
【0189】
5.3 レジスタファイル内容レジスタ(FPREG)
レジスタファイル内容レジスタは特権レジスタである。デバッガはその中に入っている情報を使用して、現在実行中のプログラムにより解釈されたようにレジスタの内容を適当に提示することができる。FPREGには16ビットが含まれており、レジスタファイルの中の倍精度レジスタ毎に1ビットとなっている。ビットがセットされると、そのビットによって表現される物理的なレジスタ対が倍精度レジスタとしてディスプレイされるべきである。そのビットがクリアである場合には、物理的なレジスタが初期化される。すなわち、物理的なレジスタに一つまたは二つの単精度データ値が含まれる。
【0190】
【外15】
Figure 0003969895
イラスト15 FPREGレジスタの符号化
【0191】
Figure 0003969895
Figure 0003969895
【0192】
6.例外処理
FPSは、デバッグモードと正規モードの二つのモードの中の一つで動作する。FPSCRでDMビットがセットされれば、FPSはデバッグモードで動作する。このモードではFPSは一度に一つの命令を実行し、命令の実行ステータスがわかるまでARMは待たされる。これにより、命令の流れに対してレジスタファイルとメモリが的確になるが、実行時間がずっと長くなってしまう。FPSは、リソースが許せば、ARMから新しい命令を受け入れ、そして例外条件を検出したときに例外を伝える。ARMへの例外報告は常に、浮動小数点命令ストリームに対して的確となる。ただし、ベクトルオペレーションに続き、ベクトルオペレーションと並列に実行するロードまたは記憶のオペレーションの場合は除く。この場合には、ロードオペレーションに対するレジスタファイルの内容、または記憶オペレーションに対するメモリが的確でなくなることがある。
【0193】
6.1 サポートコード
FPSのインプリメンテーションは、ハードウェアとソフトウェアのサポートの組み合わせでIEEE754に従うように選ぶことができる。サポートされないデータ型と自動例外の場合、サポートコードはIEEE754に従うハードウェアの機能を果たし、該当するときデスティネーションレジスタに結果を返送し、そしてユーザのトラップハンドラを呼び出したり、別の仕方でユーザのコードの流れを修正することなく、ユーザのコードに戻る。ハードウェアだけが浮動小数点コードの処理に責任を負うべきであったように、ユーザには見える。サポートコードにバウンスしてこれらの特徴を取り扱うことにより、特徴の実行または処理に要する時間が著しく長くなるが、これらの状況の発生は通常、ユーザコード、組込みアプリケーション、および良好に書かれた数値アプリケーションでは最小限となる。
【0194】
サポートコードは二つの成分をそなえるように考えられている。すなわち、ルーチンのライブラリと例外ハンドラのセットである。ルーチンのライブラリは、超越的な演算のような、ハードウェアの範囲を超えるオペレーション、およびサポートされない入力または例外を発生し得る入力での除算のような、サポートされた機能を実行する。例外ハンドラのセットは、IEEE754に適合するために、例外トラップを処理する。サポートされないデータ型またはデータ表現(たとえば、非正規値)の適当な処理のエミュレーションを行うために、サポートコードはインプリメントされた機能を実行する必要がある。ルーチンの出口でユーザの状態を元に戻すように配慮された場合には、中間計算でFPSを利用するようにルーチンを書いてもよい。
【0195】
6.2 例外報告と処理
例外条件が検出された後に発せられる次の浮動小数点命令で、正規モードの例外がARMに報告される。ARMプロセッサ、FPSレジスタファイル、およびメモリの状態は、例外が得られた時点で、反する命令に対して的確でないかも知れない。命令の正しいエミュレーションを行い、命令によって生じるいかなる例外をも処理するために、サポートコードは充分な情報を利用できる。
【0196】
いくつかのインプリメンテーションでは、サポートコードを使用することにより、無限大、NaN、非正規データ、および零を含むIEEE754の特殊データでいくつかの、またはすべてのオペレーションを処理することができる。そうするインプリメンテーションは、これらのデータをサポートされないものとして参照し、ユーザコードには一般に見えない仕方でサポートコードにバウンスし、デスティネーションレジスタにIEEE754で指定された結果がある状態で戻る。オペレーションによって生じるどの例外も、例外についてのIEEE754の規則に従う。これには、対応する例外イネーブルビットがセットされている場合の、ユーザコードへのトラップも含めることができる。
【0197】
IEEE754規格は、FPSCRでイネーブルされ、ディスエーブルされた例外の両方の場合について例外条件に対する応答を定めている。VFPv1アーキテクチャは、IEEE754仕様に正しく従うために使用されるハードウェアとソフトウェアとの間の境界を指定していない。
【0198】
6.2.1 サポートされないオペレーションとフォーマット
FPSは、10進データでのオペレーション、もしくは10進データへの変換または10進データからの変換をサポートしない。これらのオペレーションはIEEE754規格によって必要とされ、サポートコードにより提供されなければならない。10進データを利用しようとするいかなる試みも、所望の機能に対するライブラリルーチンを必要とする。FPSは10進データ型をそなえていない。そしてFPSは、10進データを使用する命令をトラップするために使用することはできない。
【0199】
6.2.2 FPSがディスエーブルされるか、または例外的であるときのFMOVXの使用
SUPERVISORまたはUNDEFINEDモードで実行されるFMOVX命令は、FPSが例外状態にあるか、または(インプリメンテーションがディスエーブルオプションをサポートする場合に)ディスエーブルされているとき、例外をARMに伝えさせることなく、FPSCRの読み出しと書き込みを行うか、もしくはFPSIDまたはFPREGの読み出しを行うことができる。
【0200】
本発明の特定の実施例を説明してきたが、本発明はこれに限定されないこと、そして本発明の範囲内で多数の変形および追加を行い得ることは明らかであろう。たとえば、本発明の範囲から逸脱することなく、独立請求項の特徴に対して従属請求項の特徴を種々に組み合わせることができる。
【図面の簡単な説明】
【図1】データ処理システムの概略図である。
【図2】スカラレジスタとベクトルレジスタの両方をサポートする浮動小数点ユニットを示す図である。
【図3】単精度(single precision)オペレーションの場合に、与えられたレジスタがベクトルレジスタであるか、スカラレジスタであるかをどのように判定するかを示す流れ図である。
【図4】倍精度オペレーションの場合に、与えられたレジスタがベクトルレジスタであるか、スカラレジスタであるかをどのように判定するかを示す流れ図である。
【図5】単精度オペレーションの際の、レジスタバンクのサブセットへの分割と、各サブセット内のラッピングを示す図である。
【図6】倍精度オペレーションの際の、レジスタバンクのサブセットへの分割と、各サブセット内のラッピングを示す図である。
【図7】コプロセッサ命令がコプロセッサからどのように見えるかを示す図であって、Aはコプロセッサ命令が主コプロセッサからどのように見えるかを示し、Bはコプロセッサ命令が単精度と倍精度のコプロセッサからどのように見えるかを示し、Cはコプロセッサ命令が単精度のコプロセッサからどのように見えるかを示す図である。
【図8】単精度と倍精度のコプロセッサを制御する主コプロセッサを示す図である。
【図9】単精度のコプロセッサを制御する主コプロセッサを示す図である。
【図10】受信したコプロセッサ命令についてアクセプト信号を主コプロセッサに返送すべきか判定する単精度と倍精度のコプロセッサの中の回路を示す図である。
【図11】受信したコプロセッサ命令についてアクセプト信号を主コプロセッサに返送すべきか判定する単精度のコプロセッサの中の回路を示す図である。
【図12】主コプロセッサの中の未定義命令例外処理を示す図である。
【図13】本発明の好適実施例によるコプロセッサの要素を示すブロック図である。
【図14】本発明の好適実施例によるレジスタ制御−命令送出論理のオペレーションを示す流れ図である。
【図15】本発明の好適実施例による浮動小数点レジスタの内容の一例を示す図である。
【符号の説明】
22 データ処理システム
24 主プロセッサ
78 コプロセッサ番号フィールド
80 ARMコア
82 コプロセッサバス
84 単精度と倍精度のコプロセッサ
88 単精度コプロセッサ
92 エミュレーションステップ

Claims (9)

  1. データ処理装置であって、該データ処理装置が、
    データ処理命令群のストリームに応答してデータ処理を実行するための主プロセッサであって、前記データ処理命令群が
    a)コプロセッサが実行すべきデータ処理オペレーションを指定する操作コード(opcode)と、
    b)コプロセッサ命令に対する目的のコプロセッサを識別するためのコプロセッサ識別フィールドと、
    をそなえた少なくとも一つのコプロセッサ命令を含み、
    前記コプロセッサ識別フィールドの少なくとも1ビットが前記データ処理オペレーションで使用されるべきデータ型を示すデータ型フィールドとしての役目も果たす、主プロセッサと、
    バスによって前記主プロセッサに結合されたコプロセッサであって、前記主プロセッサはコプロセッサ命令に応答して前記バス上に前記コプロセッサ命令の少なくとも表現を送出し、前記コプロセッサは前記バス上の前記コプロセッサ命令に応答して前記コプロセッサ識別フィールドを前記コプロセッサを識別する少なくとも一つのコプロセッサ番号値と比較し、前記コプロセッサが前記目的コプロセッサである場合には前記バスを介してアクセプト信号を前記主プロセッサに送出する、コプロセッサと、
    を具備し、
    前記コプロセッサが複数データ型をサポートする複数データ型コプロセッサである場合には、前記コプロセッサは複数のコプロセッサ番号値をそなえ、前記複数のコプロセッサ番号値のいずれかに対するアクセプト信号を送出し、前記データ型フィールドを使用することにより、使用されるデータ型を制御する、データ処理装置。
  2. 請求項1記載のデータ処理装置であって、前記コプロセッサが単一のデータ型をサポートする単一データ型である場合には、前記コプロセッサはサポートされないデータ型に対応するデータ型フィールドを含むどのコプロセッサ番号値に対するアクセプト信号を送出せず、前記データ型フィールドに関係なくサポートされたデータ型を使用する、データ処理装置。
  3. 請求項1記載のデータ処理装置であって、前記複数データ型コプロセッサは、前記データ型フィールドによって指定され得るすべてのデータ型より少ないデータ型をサポートする、データ処理装置。
  4. 請求項1記載のデータ処理装置であって、前記操作コードが前記データ型に関係ない、データ処理装置。
  5. 請求項1記載のデータ処理装置であって、前記データ型フィールドは前記データ型が単精度データであるか、倍精度データであるかを示し、前記コプロセッサが浮動小数点ユニットである、データ処理装置。
  6. 請求項1記載のデータ処理装置であって、前記主プロセッサが前記コプロセッサ識別フィールドの前記少なくとも1ビットに応答して、前記主プロセッサと前記コプロセッサによって一緒に実行されるべきデータ処理オペレーションに対するデータ型を判定する、データ処理装置。
  7. 請求項1記載のデータ処理装置であって、前記コプロセッサの命令の前記少なくとも表現が前記コプロセッサ命令である、データ処理装置。
  8. 請求項1記載のデータ処理装置であって、前記データ型フィールドによって指定されたサポートされないデータ型であるため前記コプロセッサがアクセプト信号を送出しない場合には、前記主プロセッサはエミュレーションコードを使用することにより、前記サポートされないデータ型に対する前記コプロセッサ命令のエミュレーションを行う、データ処理装置。
  9. 主プロセッサとコプロセッサでデータを処理する方法であって、
    データ処理命令群のストリームに応答して前記主プロセッサでデータ処理を実行するステップであって、前記データ処理命令群が
    a)前記コプロセッサが実行すべきデータ処理オペレーションを指定する操作コード(opcode)と、
    b)コプロセッサ命令に対する目的のコプロセッサを識別するためのコプロセッサ識別フィールドと、
    をそなえた少なくとも一つのコプロセッサ命令を含み、
    前記コプロセッサ識別フィールドの少なくとも1ビットが前記データ処理オペレーションで使用されるべきデータ型を示すデータ型フィールドとしての役目も果たす、ステップと、
    コプロセッサ命令に応答して、前記主プロセッサがバスで前記コプロセッサに前記コプロセッサ命令の少なくとも表現を送出するステップと、
    前記コプロセッサ命令に応答して、前記コプロセッサが前記コプロセッサ識別フィールドを前記コプロセッサを識別する少なくとも一つのコプロセッサ番号値と比較し、前記コプロセッサが前記目的コプロセッサである場合にはアクセプト信号を前記主プロセッサに送出するステップと、
    含み
    前記コプロセッサが複数データ型をサポートする複数データ型コプロセッサである場合には、前記コプロセッサは複数のコプロセッサ番号値をそなえ、前記複数のコプロセッサ番号値のいずれかに対するアクセプト信号を送出し、前記データ型フィールドを使用することにより、使用されるデータ型を制御する、データ処理方法。
JP14725799A 1998-05-27 1999-05-26 データ型によるコプロセッサの操作コードの分割 Expired - Lifetime JP3969895B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US084386 1979-10-12
US09/084,386 US6247113B1 (en) 1998-05-27 1998-05-27 Coprocessor opcode division by data type

Publications (2)

Publication Number Publication Date
JP2000029704A JP2000029704A (ja) 2000-01-28
JP3969895B2 true JP3969895B2 (ja) 2007-09-05

Family

ID=22184646

Family Applications (1)

Application Number Title Priority Date Filing Date
JP14725799A Expired - Lifetime JP3969895B2 (ja) 1998-05-27 1999-05-26 データ型によるコプロセッサの操作コードの分割

Country Status (3)

Country Link
US (1) US6247113B1 (ja)
JP (1) JP3969895B2 (ja)
GB (1) GB2338095B (ja)

Families Citing this family (77)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6505290B1 (en) * 1997-09-05 2003-01-07 Motorola, Inc. Method and apparatus for interfacing a processor to a coprocessor
US6446195B1 (en) * 2000-01-31 2002-09-03 Intel Corporation Dyadic operations instruction processor with configurable functional blocks
US6411301B1 (en) * 1999-10-28 2002-06-25 Nintendo Co., Ltd. Graphics system interface
US6732203B2 (en) 2000-01-31 2004-05-04 Intel Corporation Selectively multiplexing memory coupling global bus data bits to narrower functional unit coupling local bus
US6588008B1 (en) * 2000-04-11 2003-07-01 International Business Machines Corporation Assembler tool for processor-coprocessor computer systems
US6671793B1 (en) * 2000-10-02 2003-12-30 International Business Machines Corporation Method and system for managing the result from a translator co-processor in a pipelined processor
US6658444B1 (en) * 2000-11-09 2003-12-02 Sun Microsystems, Inc. Method and apparatus for performing a mask-driven interval division operation
US6675376B2 (en) * 2000-12-29 2004-01-06 Intel Corporation System and method for fusing instructions
MY136087A (en) * 2001-10-22 2008-08-29 Shell Int Research Process to reduce the temperature of a hydrogen and carbon monoxide containing gas and heat exchanger for use in said process
US7073048B2 (en) * 2002-02-04 2006-07-04 Silicon Lease, L.L.C. Cascaded microcomputer array and method
US7523455B2 (en) * 2002-05-03 2009-04-21 Hewlett-Packard Development Company, L.P. Method and system for application managed context switching
JP2005535966A (ja) * 2002-08-09 2005-11-24 インテル・コーポレーション アライメントまたはブロードキャスト命令を含むマルチメディア・コプロセッサの制御メカニズム
US7392368B2 (en) * 2002-08-09 2008-06-24 Marvell International Ltd. Cross multiply and add instruction and multiply and subtract instruction SIMD execution on real and imaginary components of a plurality of complex data elements
US6986023B2 (en) * 2002-08-09 2006-01-10 Intel Corporation Conditional execution of coprocessor instruction based on main processor arithmetic flags
US20050071609A1 (en) * 2003-09-30 2005-03-31 International Business Machines Corporation Method and apparatus to autonomically take an exception on specified instructions
US20050071610A1 (en) * 2003-09-30 2005-03-31 International Business Machines Corporation Method and apparatus for debug support for individual instructions and memory locations
US7395527B2 (en) * 2003-09-30 2008-07-01 International Business Machines Corporation Method and apparatus for counting instruction execution and data accesses
US20050071611A1 (en) * 2003-09-30 2005-03-31 International Business Machines Corporation Method and apparatus for counting data accesses and instruction executions that exceed a threshold
US7937691B2 (en) * 2003-09-30 2011-05-03 International Business Machines Corporation Method and apparatus for counting execution of specific instructions and accesses to specific data locations
US20050071612A1 (en) * 2003-09-30 2005-03-31 International Business Machines Corporation Method and apparatus for generating interrupts upon execution of marked instructions and upon access to marked memory locations
US20050071816A1 (en) * 2003-09-30 2005-03-31 International Business Machines Corporation Method and apparatus to autonomically count instruction execution for applications
US7373637B2 (en) * 2003-09-30 2008-05-13 International Business Machines Corporation Method and apparatus for counting instruction and memory location ranges
US20050071821A1 (en) * 2003-09-30 2005-03-31 International Business Machines Corporation Method and apparatus to autonomically select instructions for selective counting
US20050071516A1 (en) * 2003-09-30 2005-03-31 International Business Machines Corporation Method and apparatus to autonomically profile applications
US7421681B2 (en) * 2003-10-09 2008-09-02 International Business Machines Corporation Method and system for autonomic monitoring of semaphore operation in an application
US8381037B2 (en) 2003-10-09 2013-02-19 International Business Machines Corporation Method and system for autonomic execution path selection in an application
US7053901B2 (en) * 2003-12-11 2006-05-30 Nvidia Corporation System and method for accelerating a special purpose processor
US7450120B1 (en) 2003-12-19 2008-11-11 Nvidia Corporation Apparatus, system, and method for Z-culling
US7895382B2 (en) * 2004-01-14 2011-02-22 International Business Machines Corporation Method and apparatus for qualifying collection of performance monitoring events by types of interrupt when interrupt occurs
US7496908B2 (en) * 2004-01-14 2009-02-24 International Business Machines Corporation Method and apparatus for optimizing code execution using annotated trace information having performance indicator and counter information
US7197586B2 (en) * 2004-01-14 2007-03-27 International Business Machines Corporation Method and system for recording events of an interrupt using pre-interrupt handler and post-interrupt handler
US7415705B2 (en) * 2004-01-14 2008-08-19 International Business Machines Corporation Autonomic method and apparatus for hardware assist for patching code
US7526757B2 (en) * 2004-01-14 2009-04-28 International Business Machines Corporation Method and apparatus for maintaining performance monitoring structures in a page table for use in monitoring performance of a computer program
US7114036B2 (en) * 2004-01-14 2006-09-26 International Business Machines Corporation Method and apparatus for autonomically moving cache entries to dedicated storage when false cache line sharing is detected
US7987453B2 (en) * 2004-03-18 2011-07-26 International Business Machines Corporation Method and apparatus for determining computer program flows autonomically using hardware assisted thread stack tracking and cataloged symbolic data
US7421684B2 (en) 2004-03-22 2008-09-02 International Business Machines Corporation Method and apparatus for autonomic test case feedback using hardware assistance for data coverage
US7895473B2 (en) * 2004-04-29 2011-02-22 International Business Machines Corporation Method and apparatus for identifying access states for variables
US20050251706A1 (en) * 2004-04-29 2005-11-10 International Business Machines Corporation Method and apparatus for data-aware hardware operations
US7328374B2 (en) * 2004-04-29 2008-02-05 International Business Machines Corporation Method and apparatus for implementing assertions in hardware
US7269718B2 (en) * 2004-04-29 2007-09-11 International Business Machines Corporation Method and apparatus for verifying data types to be used for instructions and casting data types if needed
US7386690B2 (en) * 2004-04-29 2008-06-10 International Business Machines Corporation Method and apparatus for hardware awareness of data types
US7395410B2 (en) * 2004-07-06 2008-07-01 Matsushita Electric Industrial Co., Ltd. Processor system with an improved instruction decode control unit that controls data transfer between processor and coprocessor
US7546441B1 (en) 2004-08-06 2009-06-09 Xilinx, Inc. Coprocessor interface controller
US7590823B1 (en) * 2004-08-06 2009-09-15 Xilinx, Inc. Method and system for handling an instruction not supported in a coprocessor formed using configurable logic
US7346759B1 (en) 2004-08-06 2008-03-18 Xilinx, Inc. Decoder interface
US7590822B1 (en) 2004-08-06 2009-09-15 Xilinx, Inc. Tracking an instruction through a processor pipeline
JP3938580B2 (ja) * 2004-12-21 2007-06-27 株式会社ソニー・コンピュータエンタテインメント 情報処理装置、情報処理方法、半導体装置、コンピュータプログラム
JP3867804B2 (ja) * 2005-03-22 2007-01-17 セイコーエプソン株式会社 集積回路装置
US8302082B2 (en) * 2006-06-07 2012-10-30 Intel Corporation Methods and apparatus to provide a managed runtime environment in a sequestered partition
US7496893B2 (en) * 2006-06-15 2009-02-24 International Business Machines Corporation Method for no-demand composition and teardown of service infrastructure
US7865882B2 (en) * 2006-08-18 2011-01-04 International Business Machines Corporation Fast correctly rounding floating point conversion and identifying exceptional conversion
US20080126747A1 (en) * 2006-11-28 2008-05-29 Griffen Jeffrey L Methods and apparatus to implement high-performance computing
US8224884B2 (en) * 2007-07-06 2012-07-17 XMOS Ltd. Processor communication tokens
US7865698B1 (en) * 2008-03-27 2011-01-04 Xilinix, Inc. Decode mode for an auxiliary processor unit controller in which an opcode is partially masked such that a configuration register defines a plurality of user defined instructions
US9690591B2 (en) 2008-10-30 2017-06-27 Intel Corporation System and method for fusing instructions queued during a time window defined by a delay counter
US8281075B2 (en) * 2009-04-14 2012-10-02 International Business Machines Corporation Processor system and methods of triggering a block move using a system bus write command initiated by user code
JP2012252374A (ja) * 2011-05-31 2012-12-20 Renesas Electronics Corp 情報処理装置
US10534606B2 (en) 2011-12-08 2020-01-14 Oracle International Corporation Run-length encoding decompression
CN103257884A (zh) * 2013-05-20 2013-08-21 深圳市京华科讯科技有限公司 设备虚拟化处理方法
CN103257885A (zh) * 2013-05-20 2013-08-21 深圳市京华科讯科技有限公司 媒体虚拟化处理方法
CN103309725A (zh) * 2013-05-20 2013-09-18 深圳市京华科讯科技有限公司 网络虚拟化处理方法
US10001993B2 (en) 2013-08-08 2018-06-19 Linear Algebra Technologies Limited Variable-length instruction buffer management
US11768689B2 (en) 2013-08-08 2023-09-26 Movidius Limited Apparatus, systems, and methods for low power computational imaging
US11113054B2 (en) 2013-09-10 2021-09-07 Oracle International Corporation Efficient hardware instructions for single instruction multiple data processors: fast fixed-length value compression
EP3410294A1 (en) * 2014-07-30 2018-12-05 Linear Algebra Technologies Limited Vector processor
US10733199B2 (en) 2014-11-05 2020-08-04 International Business Machines Corporation Optimizing data conversion using pattern frequency
US10599488B2 (en) * 2016-06-29 2020-03-24 Oracle International Corporation Multi-purpose events for notification and sequence control in multi-core processor systems
US10380058B2 (en) 2016-09-06 2019-08-13 Oracle International Corporation Processor core to coprocessor interface with FIFO semantics
US10783102B2 (en) 2016-10-11 2020-09-22 Oracle International Corporation Dynamically configurable high performance database-aware hash engine
US10725947B2 (en) 2016-11-29 2020-07-28 Oracle International Corporation Bit vector gather row count calculation and handling in direct memory access engine
US11263014B2 (en) * 2019-08-05 2022-03-01 Arm Limited Sharing instruction encoding space between a coprocessor and auxiliary execution circuitry
US11829187B2 (en) 2022-01-30 2023-11-28 Simplex Micro, Inc. Microprocessor with time counter for statically dispatching instructions
US11829762B2 (en) 2022-01-30 2023-11-28 Simplex Micro, Inc. Time-resource matrix for a microprocessor with time counter for statically dispatching instructions
US11954491B2 (en) 2022-01-30 2024-04-09 Simplex Micro, Inc. Multi-threading microprocessor with a time counter for statically dispatching instructions
US11829767B2 (en) 2022-01-30 2023-11-28 Simplex Micro, Inc. Register scoreboard for a microprocessor with a time counter for statically dispatching instructions
US12001848B2 (en) 2022-01-30 2024-06-04 Simplex Micro, Inc. Microprocessor with time counter for statically dispatching instructions with phantom registers
US20230393852A1 (en) * 2022-06-01 2023-12-07 Simplex Micro, Inc. Vector coprocessor with time counter for statically dispatching instructions

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5021991A (en) * 1983-04-18 1991-06-04 Motorola, Inc. Coprocessor instruction format
EP0523758B1 (en) 1983-04-18 1998-02-25 Motorola, Inc. A method and apparatus for coordinating execution of an instruction by a coprocessor
JPS63143660A (ja) 1986-12-08 1988-06-15 Fanuc Ltd コ・プロセツサを有する演算処理装置
JPS63261449A (ja) 1987-04-20 1988-10-28 Hitachi Ltd デ−タ処理装置
US5093908A (en) * 1989-04-17 1992-03-03 International Business Machines Corporation Method and apparatus for executing instructions in a single sequential instruction stream in a main processor and a coprocessor
US5673407A (en) 1994-03-08 1997-09-30 Texas Instruments Incorporated Data processor having capability to perform both floating point operations and memory access in response to a single instruction
US5857096A (en) * 1995-12-19 1999-01-05 Intel Corporation Microarchitecture for implementing an instruction to clear the tags of a stack reference register file
US5778247A (en) * 1996-03-06 1998-07-07 Sun Microsystems, Inc. Multi-pipeline microprocessor with data precision mode indicator
US5983338A (en) * 1997-09-05 1999-11-09 Motorola, Inc. Method and apparatus for interfacing a processor to a coprocessor for communicating register write information
US5923893A (en) * 1997-09-05 1999-07-13 Motorola, Inc. Method and apparatus for interfacing a processor to a coprocessor

Also Published As

Publication number Publication date
GB9905297D0 (en) 1999-04-28
GB2338095B (en) 2002-11-13
JP2000029704A (ja) 2000-01-28
US6247113B1 (en) 2001-06-12
GB2338095A (en) 1999-12-08

Similar Documents

Publication Publication Date Title
JP3969895B2 (ja) データ型によるコプロセッサの操作コードの分割
JP3828677B2 (ja) レジスタとメモリとの間のデータ転送
KR100563220B1 (ko) 재순환 레지스터 파일
KR100563219B1 (ko) 혼합 벡터/스칼라 레지스터 파일
US7127593B2 (en) Conditional execution with multiple destination stores
US6304963B1 (en) Handling exceptions occuring during processing of vector instructions
US6334176B1 (en) Method and apparatus for generating an alignment control vector
US5996057A (en) Data processing system and method of permutation with replication within a vector register file
US6986025B2 (en) Conditional execution per lane
CA1324671C (en) Decoding multiple specifiers in a variable length instruction architecture
EP0380849B1 (en) Method and data processing unit for preprocessing implied specifiers in a pipelined processor
EP1267258A2 (en) Setting up predicates in a processor with multiple data paths
WO2006010872A1 (en) Handling of conditional instructions in a data processing apparatus
US7861071B2 (en) Conditional branch instruction capable of testing a plurality of indicators in a predicate register
JPH11353305A (ja) ベクトルレジスタのアドレス指定
EP1080421B1 (en) Recirculating register file
WO1999061997A1 (en) Recirculating register file
IE901516A1 (en) Decoding multiple specifiers in a variable length¹instruction architecture
JPH0683623A (ja) キャッシュに対する複合化プリプロセッサ方式

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20051228

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20061031

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20061117

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070219

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20070529

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20070605

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100615

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110615

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120615

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120615

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130615

Year of fee payment: 6

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term