(57)【特許請求の範囲】
【請求項１】
データ処理動作を遂行するように動作可能な処理論理と、
プログラム命令によって指定されたデータ処理動作を遂行する前記処理論理を制御する前記プログラム命令を復号するように動作可能な命令復号器と、
を含むデータ処理装置において、
前記命令復号器は、ハンドラ分岐命令に応答して、
（ｉ）ベース・アドレス・レジスタ内に格納されたベース・アドレスと、前記ハンドラ分岐命令内のインデックス値フィールドによって指定されるインデックス値とからハンドラ・ポインタを計算し、
（ｉｉ）前記ハンドラ・ポインタによって指示された位置にあるメモリに格納されたハンドラ・プログラムのプログラム命令の実行に分岐し、
（ｉｉｉ）前記ハンドラ・プログラムから復帰すると実行されるプログラム命令を格納するメモリ位置を指示する復帰アドレスを格納し、
前記インデックス値は、前記ハンドラ・ポインタを計算するために使用される前に左方向論理シフトを受け、前記ハンドラ・ポインタは、前記ベース・アドレスと前記インデックス値を左方向論理シフトした値との合計として計算される、データ処理装置。
【請求項２】
請求項１に記載の装置において、前記ベース・アドレス・レジスタは、コプロセッサ構成レジスタである前記装置。
【請求項３】
請求項１に記載の装置において、前記ハンドラ・ポインタは、前記ベース・アドレスと前記インデックス値とに依存する値の合計から計算される前記装置。
【請求項４】
請求項１に記載の装置において、前記ハンドラ分岐命令は、即値フィールドを含み、前記命令復号器は、前記ハンドラ分岐命令に応答して前記処理論理を制御し、即値が前記ハンドラ・プログラムに対してアクセス可能であるように、前記即値フィールド内に格納された値に依存する即値を、所定のレジスタの中に格納する前記装置。
【請求項５】
請求項４に記載の装置において、前記命令復号器は、第１の長さのインデックス値フィールドと即値フィールドとを含む第１の型式のハンドラ分岐命令と、前記第１の長さより長い第２の長さのインデックス値フィールドを含み即値フィールドを含まない第２の型式のハンドラ分岐命令とに応答する前記装置。
【請求項６】
請求項１に記載の装置において、前記ハンドラ・プログラムは、前記命令復号器によって直接復号可能ではない非ネイティブ・プログラム命令である１つまたは複数のプログラム命令をエミュレートするように動作可能である前記装置。
【請求項７】
請求項６に記載の装置において、各種型式の非ネイティブ・プログラム命令は、各種インデックス値に応答して分岐した先の各種ハンドラ・プログラムでエミュレートされる前記装置。
【請求項８】
請求項７に記載の装置において、
所定の型式の非ネイティブ・プログラム命令の１つまたは複数は所定のハンドラ・プログラムによってエミュレートされ、
複数型式の非ネイティブ・プログラム命令の１つまたは複数は所定のハンドラ・プログラムによってエミュレートされ、
所定の型式の非ネイティブ・プログラム命令の１つまたは複数は、前記所定の型式の非ネイティブ・プログラム命令に関連する１つまたは複数のパラメータに依存して選択された、複数のハンドラ・プログラムの１つによってエミュレートされる、
前記装置。
【請求項９】
請求項６に記載の装置において、前記非ネイティブ・プログラム命令は、対マシン独立型プログラム命令である前記装置。
【請求項１０】
請求項９に記載の装置において、前記対マシン独立型プログラム命令は、
Ｊａｖａ（登録商標）バイトコード、
ＭＳＩＬバイトコード、
ＣＩＬバイトコード、
．ＮＥＴバイトコード、
のなかの１つである前記装置。
【請求項１１】
請求項６に記載の装置において、前記非ネイティブ命令は、異なるデータ処理装置のネイティブ・プログラム命令である前記装置。
【請求項１２】
請求項１１に記載の装置において、前記処理論理と前記命令復号器は、ＲＩＳＣプロセッサの一部であり、前記非ネイティブ命令はＣＩＳＣプロセッサのネイティブ命令である前記装置。
【請求項１３】
請求項１に記載の装置において、前記ハンドラ・ポインタは、前記ハンドラ・プログラムの開始アドレスである前記装置。
【請求項１４】
請求項１に記載の装置において、前記ハンドラ・ポインタは、前記ハンドラ・プログラムの開始アドレスに実行を飛び越させるように動作可能な飛び越し命令のアドレスである前記装置。
【請求項１５】
データ処理動作を遂行するように動作可能な処理論理と、プログラム命令によって指定されたデータ処理動作を遂行する前記処理論理を制御する前記プログラム命令を復号するように動作可能な命令復号器とを有するデータ処理装置を使用してデータを処理する方法であって、
前記命令復号器によって復号されたハンドラ分岐命令に応答して、：
（ｉ）前記処理論理を制御する前記命令復号器が、ベース・アドレス・レジスタ内に格納されたベース・アドレスと、前記ハンドラ分岐命令内のインデックス値フィールドによって指定されたインデックス値とからハンドラ・ポインタを計算するステップと、
（ｉｉ）前記処理論理を制御する前記命令復号器が、前記ハンドラ・ポインタによって指示された位置にあるメモリに格納されたハンドラ・プログラムのプログラム命令の実行に分岐するステップと、
（ｉｉｉ）前記処理論理を制御する前記命令復号器が、前記ハンドラ・プログラムから復帰すると実行されるプログラム命令を格納するメモリ位置を指示する復帰アドレスを格納するステップと、を備え、
前記インデックス値は、前記ハンドラ・ポインタを計算するために使用される前に左方向論理シフトを受け、前記ハンドラ・ポインタは、前記ベース・アドレスと前記インデックス値を左方向論理シフトしたものとの合計として計算される、
を含む方法。
【請求項１６】
請求項１５に記載の方法において、前記ベース・アドレス・レジスタは、コプロセッサ構成レジスタである前記方法。
【請求項１７】
請求項１５に記載の方法において、前記ハンドラ・ポインタは、前記ベース・アドレスと前記インデックス値とに依存する値の合計から計算される前記方法。
【請求項１８】
請求項１５に記載の方法において、前記ハンドラ分岐命令は、即値フィールドを含み、前記命令復号器は、前記ハンドラ分岐命令に応答して前記処理論理を制御し、即値が前記ハンドラ・プログラムに対してアクセス可能であるように、前記即値フィールド内に格納された値に依存する即値を、所定のレジスタの中に格納する前記方法。
【請求項１９】
請求項１８に記載の方法において、前記命令復号器は、第１の長さのインデックス値フィールドと即値フィールドとを含む第１の型式のハンドラ分岐命令と、前記第１の長さより長い第２の長さのインデックス値フィールドを含み即値フィールドを含まない第２の型式のハンドラ分岐命令とに応答する前記方法。
【請求項２０】
請求項１５に記載の方法において、前記ハンドラ・プログラムは、前記命令復号器によって直接復号可能ではない非ネイティブ・プログラム命令である１つまたは複数のプログラム命令をエミュレートするように動作可能である前記方法。
【請求項２１】
請求項２０に記載の方法において、各種型式の非ネイティブ・プログラム命令は、各種インデックス値に応答して分岐した先の各種ハンドラ・プログラムでエミュレートされる前記方法。
【請求項２２】
請求項２１に記載の方法において、所定の型式の非ネイティブ・プログラム命令の１つまたは複数は所定のハンドラ・プログラムによってエミュレートされ、
複数型式の非ネイティブ・プログラム命令の１つまたは複数は所定のハンドラ・プログラムによってエミュレートされ、
所定の型式の非ネイティブ・プログラム命令の１つまたは複数は、前記所定の型式の非ネイティブ・プログラム命令に関連する１つまたは複数のパラメータに依存して選択された複数のハンドラ・プログラムの１つによってエミュレートされる、前記方法。
【請求項２３】
請求項２０に記載の方法において、前記非ネイティブ・プログラム命令は、対マシン独立型プログラム命令である前記方法。
【請求項２４】
請求項２３に記載の方法において、前記対マシン独立型プログラム命令は、
Ｊａｖａバイトコード、
ＭＳＩＬバイトコード、
ＣＩＬバイトコード、
．ＮＥＴバイトコード、
のなかの１つである前記方法。
【請求項２５】
請求項２０に記載の方法において、前記非ネイティブ命令は、異なるデータ処理装置のネイティブ・プログラム命令である前記方法。
【請求項２６】
請求項２５に記載の方法において、前記処理論理と前記命令復号器は、ＲＩＳＣプロセッサの一部であり、前記非ネイティブ命令はＣＩＳＣプロセッサのネイティブ命令である前記方法。
【請求項２７】
請求項１５に記載の方法において、前記ハンドラ・ポインタは、前記ハンドラ・プログラムの開始アドレスである前記方法。
【請求項２８】
請求項１５に記載の方法において、前記ハンドラ・ポインタは、前記ハンドラ・プログラムの開始アドレスに実行を飛び越させるように動作可能な飛び越し命令のアドレスである前記方法。
【請求項２９】
データ処理動作を遂行するように動作可能な処理論理と、プログラム命令によって指定されたデータ処理動作を遂行する前記処理論理を制御する前記プログラム命令を復号するように動作可能な命令復号器とを有するデータ処理装置を制御するように動作可能なコンピュータプログラムを含むコンピュータ読み取り可能な記録媒体であって、
前記処理論理を制御して、
（ｉ）ベース・アドレス・レジスタ内に格納されたベース・アドレスと、前記ハンドラ分岐命令内のインデックス値フィールドによって指定されるインデックス値とからハンドラ・ポインタを計算し、
（ｉｉ）前記ハンドラ・ポインタによって指示された位置にあるメモリに格納されたハンドラ・プログラムのプログラム命令の実行に分岐し、
（ｉｉｉ）前記ハンドラ・プログラムから復帰すると実行されるプログラム命令を格納するメモリ位置を指示する復帰アドレスを格納する、
前記命令復号器によって復号可能なハンドラ分岐命令を前記コンピュータプログラムが含み、
前記インデックス値は、前記ハンドラ・ポインタを計算するために使用される前に左方向論理シフトを受け、そして、前記ハンドラ・ポインタは、前記ベース・アドレスと前記インデックス値を左方向論理シフトしたものとの合計として計算される、
コンピュータ読み取り可能な記録媒体。
【請求項３０】
請求項２９に記載のコンピュータ読み取り可能な記録媒体において、前記ベース・アドレス・レジスタは、コプロセッサ構成レジスタである前記コンピュータ読み取り可能な記録媒体。
【請求項３１】
請求項２９に記載のコンピュータ読み取り可能な記録媒体において、前記ハンドラ・ポインタは、前記ベース・アドレスと前記インデックス値とに依存する値の合計から計算される前記コンピュータ読み取り可能な記録媒体。
【請求項３２】
請求項２９に記載のコンピュータ読み取り可能な記録媒体において、前記ハンドラ分岐命令は、即値フィールドを含み、前記命令復号器は、前記ハンドラ分岐命令に応答して前記処理論理を制御し、即値が前記ハンドラ・プログラムに対してアクセス可能であるように、前記即値フィールド内に格納された値に依存する即値を、所定のレジスタの中に格納する前記コンピュータ読み取り可能な記録媒体。
【請求項３３】
請求項３２に記載のコンピュータ読み取り可能な記録媒体において、前記命令復号器は、第１の長さのインデックス値フィールドと即値フィールドとを含む第１の型式のハンドラ分岐命令と、前記第１の長さより長い第２の長さのインデックス値フィールドを含み即値フィールドを含まない第２の型式のハンドラ分岐命令とに応答する前記コンピュータ読み取り可能な記録媒体。
【請求項３４】
請求項２９に記載のコンピュータ読み取り可能な記録媒体において、前記ハンドラ・プログラムは、前記命令復号器によって直接復号可能ではない非ネイティブ・プログラム命令である１つまたは複数のプログラム命令をエミュレートするように動作可能である前記コンピュータ読み取り可能な記録媒体。
【請求項３５】
請求項３４に記載のコンピュータ読み取り可能な記録媒体において、各種型式の非ネイティブ・プログラム命令は、各種インデックス値に応答して分岐した先の各種ハンドラ・プログラムでエミュレートされる前記コンピュータ読み取り可能な記録媒体。
【請求項３６】
請求項３５に記載のコンピュータ読み取り可能な記録媒体において、所定の型式の非ネイティブ・プログラム命令の１つまたは複数は所定のハンドラ・プログラムによってエミュレートされ、
複数型式の非ネイティブ・プログラム命令の１つまたは複数は所定のハンドラ・プログラムによってエミュレートされ、
所定の型式の非ネイティブ・プログラム命令の１つまたは複数は、前記所定の型式の非ネイティブ・プログラム命令に関連する１つまたは複数のパラメータに依存して選択された複数のハンドラ・プログラムの１つによってエミュレートされる、
前記コンピュータ読み取り可能な記録媒体。
【請求項３７】
請求項３４に記載のコンピュータ読み取り可能な記録媒体において、前記非ネイティブ・プログラム命令は、対マシン独立型プログラム命令である前記コンピュータ読み取り可能な記録媒体。
【請求項３８】
請求項３７に記載のコンピュータ読み取り可能な記録媒体において、前記対マシン独立型プログラム命令は、
Ｊａｖａバイトコード、
ＭＳＩＬバイトコード、
ＣＩＬバイトコード、
．ＮＥＴバイトコード、
のなかの１つである前記コンピュータ読み取り可能な記録媒体。
【請求項３９】
請求項３４に記載のコンピュータ読み取り可能な記録媒体において、前記非ネイティブ命令は、異なるデータ処理装置のネイティブ・プログラム命令である前記コンピュータ読み取り可能な記録媒体。
【請求項４０】
請求項３９に記載のコンピュータ読み取り可能な記録媒体において、前記処理論理と前記命令復号器は、ＲＩＳＣプロセッサの一部であり、前記非ネイティブ命令はＣＩＳＣプロセッサのネイティブ命令である前記コンピュータ読み取り可能な記録媒体。
【請求項４１】
請求項２９に記載のコンピュータ読み取り可能な記録媒体において、前記ハンドラ・ポインタは、前記ハンドラ・プログラムの開始アドレスである前記コンピュータ読み取り可能な記録媒体。
【請求項４２】
請求項２９に記載のコンピュータ読み取り可能な記録媒体において、前記ハンドラ・ポインタは、前記ハンドラ・プログラムの開始アドレスに実行を飛び越させるように動作可能な飛び越し命令のアドレスである前記コンピュータ読み取り可能な記録媒体。
【請求項４３】
非ネイティブ・プログラム命令を変換し、データ処理動作を遂行するように動作可能な処理論理と、プログラム命令によって指定されたデータ処理動作を遂行する前記処理論理を制御する前記プログラム命令を復号するように動作可能な命令復号器とを有するデータ処理装置によって直接復号可能なネイティブ・プログラム命令を形成するように動作可能なコンピュータプログラムを含むコンピュータ読み取り可能な記録媒体であって、
前記処理論理を制御して、
（ｉ）ベース・アドレス・レジスタ内に格納されたベース・アドレスと、前記ハンドラ分岐命令内のインデックス値フィールドによって指定されるインデックス値とからハンドラ・ポインタを計算し、
（ｉｉ）前記ハンドラ・ポインタによって指示された位置にあるメモリに格納されたハンドラ・プログラムのプログラム命令の実行に分岐し、
（ｉｉｉ）前記ハンドラ・プログラムから復帰すると実行されるプログラム命令を格納するメモリ位置を指示する復帰アドレスを格納する、
前記命令復号器によって復号可能なハンドラ分岐命令を前記ネイティブ・プログラム命令が含み、
前記インデックス値は、前記ハンドラ・ポインタを計算するために使用される前に左方向論理シフトを受け、そして、前記ハンドラ・ポインタは、前記ベース・アドレスと前記インデックス値を左方向論理シフトしたものとの合計として計算される、
コンピュータ読み取り可能な記録媒体。
【請求項４４】
請求項４３に記載のコンピュータ読み取り可能な記録媒体において、前記ベース・アドレス・レジスタは、コプロセッサ構成レジスタである前記コンピュータ読み取り可能な記録媒体。
【請求項４５】
請求項４３に記載のコンピュータ読み取り可能な記録媒体において、前記ハンドラ・ポインタは、前記ベース・アドレスと前記インデックス値とに依存する値の合計から計算される前記コンピュータ読み取り可能な記録媒体。
【請求項４６】
請求項４３に記載のコンピュータ読み取り可能な記録媒体において、前記ハンドラ分岐命令は、即値フィールドを含み、前記命令復号器は、前記ハンドラ分岐命令に応答して前記処理論理を制御し、即値が前記ハンドラ・プログラムに対してアクセス可能であるように、前記即値フィールド内に格納された値に依存する即値を、所定のレジスタの中に格納する前記コンピュータ読み取り可能な記録媒体。
【請求項４７】
請求項４６に記載のコンピュータ読み取り可能な記録媒体において、前記命令復号器は、第１の長さのインデックス値フィールドと即値フィールドとを含む第１の型式のハンドラ分岐命令と、前記第１の長さより長い第２の長さのインデックス値フィールドを含み即値フィールドを含まない第２の型式のハンドラ分岐命令とに応答する前記コンピュータ読み取り可能な記録媒体。
【請求項４８】
請求項４３に記載のコンピュータ読み取り可能な記録媒体において、前記ハンドラ・プログラムは、前記命令復号器によって直接復号可能ではない非ネイティブ・プログラム命令である１つまたは複数のプログラム命令をエミュレートするように動作可能である前記コンピュータ読み取り可能な記録媒体。
【請求項４９】
請求項４８に記載のコンピュータ読み取り可能な記録媒体において、各種型式の非ネイティブ・プログラム命令は、各種インデックス値に応答して分岐した先の各種ハンドラ・プログラムでエミュレートされる前記コンピュータ読み取り可能な記録媒体。
【請求項５０】
請求項４９に記載のコンピュータ読み取り可能な記録媒体において、
所定の型式の非ネイティブ・プログラム命令の１つまたは複数は所定のハンドラ・プログラムによってエミュレートされ、
複数型式の非ネイティブ・プログラム命令の１つまたは複数は所定のハンドラ・プログラムによってエミュレートされ、
所定の型式の非ネイティブ・プログラム命令の１つまたは複数は、前記所定の型式の非ネイティブ・プログラム命令に関連する１つまたは複数のパラメータに依存して選択された複数のハンドラ・プログラムの１つによってエミュレートされる、前記コンピュータ読み取り可能な記録媒体。
【請求項５１】
請求項４８に記載のコンピュータ読み取り可能な記録媒体において、前記非ネイティブ・プログラム命令は、対マシン独立型プログラム命令である前記コンピュータ読み取り可能な記録媒体。
【請求項５２】
請求項５１に記載のコンピュータ読み取り可能な記録媒体において、前記対マシン独立型プログラム命令は、
Ｊａｖａバイトコード、
ＭＳＩＬバイトコード、
ＣＩＬバイトコード、
．ＮＥＴバイトコード、
のなかの１つである前記コンピュータ読み取り可能な記録媒体。
【請求項５３】
請求項４８に記載のコンピュータ読み取り可能な記録媒体において、前記非ネイティブ命令は、異なるデータ処理装置のネイティブ・プログラム命令である前記コンピュータ読み取り可能な記録媒体。
【請求項５４】
請求項５３に記載のコンピュータ読み取り可能な記録媒体において、前記処理論理と前記命令復号器は、ＲＩＳＣプロセッサの一部であり、前記非ネイティブ命令はＣＩＳＣプロセッサのネイティブ命令である前記コンピュータ読み取り可能な記録媒体。
【請求項５５】
請求項４３に記載のコンピュータ読み取り可能な記録媒体において、前記ハンドラ・ポインタは、前記ハンドラ・プログラムの開始アドレスである前記コンピュータ読み取り可能な記録媒体。
【請求項５６】
請求項４３に記載のコンピュータ読み取り可能な記録媒体において、前記ハンドラ・ポインタは、前記ハンドラ・プログラムの開始アドレスに実行を飛び越させるように動作可能な飛び越し命令のアドレスである前記コンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理システムの分野に関する。より詳細には、この発明は、命令復号器がプログラム命令に応答して、プログラム命令によって指定されるデータ処理動作を遂行する処理論理を制御するプログラム可能なデータ処理装置に関する。
【背景技術】
【０００２】
処理論理を制御して、これらのプログラム命令によって指定されるデータ処理動作を遂行するプログラム命令を復号するように動作可能な命令復号器を含むデータ処理システムを提供することは知られている。そのようなデータ処理システムの一例は、英国ケンブリッジのＡＲＭ社によって設計されたプロセッサコアである。またＪａｖａ（登録商標）バイトコードのような、第１の命令セットのプログラム命令が、ＡＲＭ社によってサポートされるプログラム命令のような第２の命令セットのプログラム命令に変換されることも知られている。この変換器は、ジャスト・イン・タイム（ＪＩＴ）変換器または動的適応型変換器（ｄｙｎａｍｉｃ  ａｄａｐｔｉｖｅ  ｔｒａｎｓｌａｔｏｒ）のようなソフトウエア・メカニズムによって便利に与えられる。そのような変換器に付随する問題は、変換されたコードの大きさが当初のコードの大きさよりもかなり大きくなることがあるため、メモリの記憶容量を大きくする必要があるという欠点が生じることである。この問題は、「コードの肥大（ｃｏｄｅ  ｂｌｏａｔ）」と呼ばれることがある。
【発明の開示】
【課題を解決するための手段】
【０００３】
１つの態様から見ると、本発明はデータ処理装置を提供しており、このデータ処理装置は、
データ処理動作を遂行するように動作可能な処理論理と、
プログラム命令によって指定されたデータ処理動作を遂行する前記処理論理を制御する前記プログラム命令を復号するように動作可能な命令復号器と、
を含み、
前記命令復号器は、ハンドラ分岐命令に応答して、
（ｉ）ベース・アドレス・レジスタ内に格納されたベース・アドレスと、前記ハンドラ分岐命令内のインデックス値フィールドによって指定されるインデックス値とからハンドラ・ポインタを計算し、
（ｉｉ）前記ハンドラ・ポインタによって指示された位置にあるメモリに格納されたハンドラ・プログラムのプログラム命令の実行に分岐し、
（ｉｉｉ）前記ハンドラ・プログラムから復帰すると実行されるプログラム命令を格納するメモリ位置を指示する復帰アドレスを格納する。
【０００４】
本手法は、ハンドラ分岐命令内のインデックス・フィールドに依存してハンドラ・プログラムを選択することを可能にするハンドラ分岐命令を用意すると、変換されたコードのコード密度において並びにより一般的にはコード変換の分野以外においてかなりの改善をすることができる。単一命令としてのハンドラ分岐命令は、インデックス・フィールドに基づく分岐プログラムのアドレスの計算、ハンドラ・プログラムが終了した時に使用される復帰アドレスの格納、およびハンドラ・プログラムに対する分岐を制御する。
【０００５】
例えば、標準レジスタ・ファイル内の汎用レジスタの１つのように、ベース・アドレス・レジスタをいくつもの方法で与えることができることは理解されるであろう。しかし、好適実施例におけるベース・アドレス・レジスタは、コプロセッサ構成レジスタとして与えられる。一般にハンドラ・プログラムのベース・アドレス・レジスタは、静的な値を保持するので、コプロセッサ構成レジスタ内に都合良く格納され、他の目的のために有効に使用することができるのでレジスタファイのレジスタが不必要に消耗されることを防いでいる。
【０００６】
ハンドラ・プログラムは或る一定の最大サイズを有し、ベース・アドレスに続いて配置されるので、インデックス値は、ハンドラ・ポインタを計算するために使用される前に、左方へ論理シフト（ｌｏｇｉｃａｌ  ｌｅｆｔ  ｓｈｉｆｔ）されると有利に想定することができる。したがって、論理的に左方にシフトされると、インデックス値が効果的に変換されハンドラ・プログラム間のアドレスの増分になる。
【０００７】
好適実施例におけるハンドラ・ポインタは、ベース・アドレスとインデックス値によって決まる値の合計から計算される。更に好適な実施例におけるハンドラ・ポインタは、ベース・アドレスと論理的に左方にシフトされたインデックス値との合計から直接与えられる。
【０００８】
各種状態において、ハンドラ・プログラムにパラメータを転送するハンドラ分岐命令が即値（ｉｍｍｅｄｉａｔｅ  ｖａｌｕｅ）フィールドを含んでいる場合は、ハンドラ分岐命令の有用性が改善されるので、そのようなメカニズムが与えられていると、ハンドラ・プログラムの機能が向上し、より少数のハンドラ・プログラムを使用するだけで所望の処理条件のセットに対処することが可能になる。例えば、複雑な命令と、そのような複雑な命令に付随するパラメータをハンドラ・プログラムに転送するために使用されるインデックス値とをエミュレートするためにハンドラ・プログラムを使用することができる。
【０００９】
インデックス値フィールドだけが与えられる第２型式のハンドラ分岐命令とともに、即値フィールドとインデックス値フィールドが与えられる第１型式のハンドラ分岐命令を備えたシステムを提供することができる。第２型式のハンドラ分岐命令は、第１型式のハンドラ分岐命令で使用することができるよりも大きいビット空間をインデックス値フィールドのためだけに使用することができる。何故ならば、第１型式のハンドラ分岐命令は、即値フィールドを用意する必要があるからである。したがって、第１型式のハンドラ分岐命令に関連するハンドラ・プログラムを、ハンドラのベース・アドレス値に近いメモリ位置に与えてより小さい関連するインデックス値がそれに到達することができるようにし、他方、第２型式のハンドラ分岐命令に関連するハンドラ・プログラムが、第２型式のハンドラ分岐命令のより大きい使用可能なインデックス値フィールド内でのみ指定できる型式のより大きいインデックス値に関連する位置で与えられるようにすることは便利なのである。
【００１０】
ハンドラ・プログラムは様々な異なる機能を備え得るが、復号器によって直接復号可能ではない非ネイティブ命令である１つまたは複数のプログラム命令のエミュレーションに対して特に都合良くできている。この種の状態は、各種非ネイティブ・プログラム命令をエミュレートするために比較的多数のハンドラ・プログラムが与えられ、インデックス値フィールドを備えたハンドラ分岐命令が高密度の命令型式（ｃｏｄｅ  ｄｅｎｓｅ  ｉｎｓｔｒｕｃｔｉｏｎ  ｆｏｒｍ）を使用するこれらのハンドラ・プログラムを参照する便利な方法を与える状態である。
【００１１】
非ネイティブ命令とハンドラ・プログラムとの間のマッピングは、多数対１のマッピング、１対１のマッピング、および１対多数のマッピングに変化するとともにこれらのマッピングを含むことができる。
【００１２】
非ネイティブ・プログラム命令は各種型式を取りうるが、非ネイティブ命令が、Ｊａｖａバイトコード、ＭＳＩＬバイトコード、ＣＩＬバイトコードおよび．ＮＥＴバイトコードのようなマシンに依存しないプログラム命令（ｍａｃｈｉｎｅ  ｉｎｄｅｐｅｎｄｅｎｔ  ｐｒｏｇｒａｍ  ｉｎｓｔｒｕｃｔｉｏｎｓ：以下、「対マシン独立型プログラム命令」と記す）の場合、本手法は特に有用である。
【００１３】
対マシン独立型プログラム命令のエミュレーションにおける使用と同様、本ハンドラ分岐命令は、非ネイティブ命令がデータを処理する異なる装置のネイティブ・プログラム命令である状態で使用される。したがって、ＡＲＭ  ＲＩＳＣプロセッサのような特定のプロセッサは、例えば、ｘ８６プロセッサのような異なるプロセッサに対してネイティブであるプログラム命令のエミュレーション中に、そのような命令を使用することができる。
【００１４】
ハンドラ分岐命令によって計算され使用されるハンドラ・ポインタは、様々な型式をとることができることは理解されるであろう。いくつかの実施例におけるハンドラ・ポインタは、ハンドラ・プログラムの開始アドレスを直接表すことができる。代替的にハンドラ・ポインタは、実行をハンドラ・プログラムの開始アドレスへ飛び越す（ｊｕｍｐ）ように動作可能な飛び越し命令に対するアドレスでもよい（例えば、ハンドラ・ポインタは、各飛び越し命令が異なるハンドラ・プログラムに対応する飛び越し命令テーブル内の特定の飛び越し命令を指示する）。
【００１５】
他の態様から見ると、本発明は、データ処理動作を遂行するように動作可能な処理論理と、プログラム命令によって指定されたデータ処理動作を遂行する前記処理論理を制御する前記プログラム命令を復号するように動作可能な命令復号器とを有するデータ処理装置を使用してデータを処理する方法を提供しており、この方法は、
前記処理論理を制御する前記命令復号器によって復号されたハンドラ分岐命令に応答して、
（ｉ）ベース・アドレス・レジスタ内に格納されたベース・アドレスと、前記ハンドラ分岐命令内のインデックス値フィールドによって指定されるインデックス値とからハンドラ・ポインタを計算するステップと、
（ｉｉ）前記ハンドラ・ポインタによって指示された位置にあるメモリに格納されたハンドラ・プログラムのプログラム命令の実行に分岐するステップと、
（ｉｉｉ）前記ハンドラ・プログラムから復帰すると実行されるプログラム命令を格納するメモリ位置を指示する復帰アドレスを格納するステップと、
を含む。
【００１６】
更なる態様から見ると、本発明は、データ処理動作を遂行するように動作可能な処理論理と、プログラム命令によって指定されたデータ処理動作を遂行する前記処理論理を制御する前記プログラム命令を復号するように動作可能な命令復号器とを有するデータ処理装置を制御するように動作可能なコンピュータプログラムを含むコンピュータプログラム製品を提供しており、前記コンピュータプログラム製品は、
前記命令復号器によって復号可能であるとともに、前記処理論理を制御するハンドラ分岐命令であって、
（ｉ）ベース・アドレス・レジスタ内に格納されたベース・アドレスと、前記ハンドラ分岐命令内のインデックス値フィールドによって指定されるインデックス値とからハンドラ・ポインタを計算し、
（ｉｉ）前記ハンドラ・ポインタによって指示された位置にあるメモリに格納されたハンドラ・プログラムのプログラム命令の実行に分岐し、
（ｉｉｉ）前記ハンドラ・プログラムから復帰すると実行されるプログラム命令を格納するメモリ位置を指示する復帰アドレスを格納する、
ハンドラ分岐命令を含む。
【００１７】
更なる態様から見ると、本発明は、非ネイティブ・プログラム命令を変換し、データ処理動作を遂行するように動作可能な処理論理と、プログラム命令によって指定されたデータ処理動作を遂行する前記処理論理を制御する前記プログラム命令を復号するように動作可能な命令復号器とを有するデータ処理装置によって直接復号可能なネイティブ・プログラム命令を形成するように動作可能なコンピュータプログラムを含むコンピュータプログラム製品を提供しており、前記コンピュータプログラム製品は、
前記処理論理を制御して、
（ｉ）ベース・アドレス・レジスタ内に格納されたベース・アドレスと、前記ハンドラ分岐命令内のインデックス値フィールドによって指定されるインデックス値とからハンドラ・ポインタを計算し、
（ｉｉ）前記ハンドラ・ポインタによって指示された位置にあるメモリに格納されたハンドラ・プログラムのプログラム命令の実行に分岐し、
（ｉｉｉ）前記ハンドラ・プログラムから復帰すると実行されるプログラム命令を格納するメモリ位置を指示する復帰アドレスを格納する、
前記命令復号器によって復号可能なハンドラ分岐命令を含む。
【００１８】
この発明に関する上記および他の目的、特徴および利点は、添付の図面とともに読むべき、以下に示す例示的実施例の詳細な説明から明らかであろう。
【実施例】
【００１９】
図１は、メモリ４、プロセッサ６およびコプロセッサ８を含むデータ処理システム２を示している。メモリ４、プロセッサ６およびコプロセッサ８は、別々の集積回路として与えられても良いし、単一集積回路上に一緒に組み込まれても良いし、あるいは、２素子が結合される中間的な型式でも良いことは理解されるであろう。プロセッサ６は、レジスタ・ファイル１０、乗算器１２、シフタ１４および加算器１６を含む。レジスタ・ファイル１０、乗算器１２、シフタ１４および加算器１６は一緒になり、命令パイプライン２０の復号ステージに到達すると命令復号器１８によって復号されると考えることができるプログラム命令に制御されて処理動作を遂行する処理論理を表す（実際には、復号はいくつかのパイプラインステージに展開される）。処理論理が更なる各種処理動作を追加する回路を含むことができることは理解されるであろう。一般にプロセッサ６は、簡単にするため図１に示されていない多数の他の回路素子を含む。
【００２０】
メモリ４は、データとプログラム命令を格納する。プログラム命令は命令パイプライン２０の中にフェッチされ、処理論理を制御する制御信号を発生する。１つの型式の動作では、プロセッサ６によって実行されるＪＩＴコンパイラまたは動的適応型コンパイラが、メモリ４内に格納されたプログラムを対マシン独立型プログラム命令言語から（プロセッサ６に対してネイティブな）ネイティブ・プログラム命令言語に変換する役目をする。一例として、Ｊａｖａバイトコード、ＭＳＩＬバイトコード、ＣＩＬバイトコードまたは．ＮＥＴバイトコードは、メモリ４内に格納され、プロセッサ６のネイティブＡＲＭな、ＴｈｕｍｂまたはＴｈｕｍｂ−２に変換されるプログラムを形成することができる。変換されたプログラムは、続けて実行するためにメモリ４の中に復帰して格納される。少なくとも効率とコストのためには、変換されたプログラムは、あまりにも多くのメモリの記憶容量を消費してはならないことは理解されるであろう
【００２１】
コプロセッサ８は、プロセッサ６に関連する構成パラメータ（ｃｏｎｆｉｇｕｒａｔｉｏｎ  ｐａｒａｍｅｔｅｒｓ）を格納する多数の構成レジスタを含む構成コプロセッサである。これらの構成レジスタの１つは、ハンドラ・ベース・ポインタの値を格納するレジスタ２２として示されている。ハンドラ・ベース・ポインタの値はメモリ４に対するアドレスの位置であり、この値は後で詳細に考察する命令復号器１８によって復号されたハンドラ分岐命令によって呼び出すことができるハンドラ・プログラムの集まりの開始点である。
【００２２】
図２は、対マシン独立型プログラム命令ＢＣ１からＢＣ１０を含む仮想マシンプログラムの一部を示している。これらの命令は、図示のように、ＪＩＴコンパイラまたは動的適応型コンパイラに支配されてネイティブなＴｈｕｍｂ−２命令を形成する。図示のように、この変換は、１対１の変換、１対多数の変換または多数対１の変換でもよい。
【００２３】
変換される対マシン独立型プログラム命令の或るものは、少数のネイティブ命令によっては容易に表すことができない複雑な機能を表しており、必要に応じて変換されたプログラム内から再使用することができるハンドラ・プログラムによって、より効果的に処理される。図示のように、バイトコードＢＣ７は、即値フィールドを含まないハンドラ分岐命令ＨＢＬ１に変換される。ハンドラ分岐命令ＨＢＬ１は、値Ｎを指定するインデックス値フィールドを含んでいるのである。このことは、ハンドラ分岐命令ＨＢＬ１を実行するときの分岐目標アドレスが、ハンドラ・ベース・アドレス・ポインタＨＢＡと（３２＊Ｎ）の合計によって与えられることを示している。この位置にあるハンドラ・プログラム２４は、ハンドラＮである。そのハンドラ・プログラム２４が実行を終了すると、その終了時点の復帰命令により、ネイティブ・プログラム命令Ｔ８の処理が復帰するように、ハンドラ分岐命令が実行された時に格納されたリンク・レジスタ値がプログラム・カウンタ・レジスタＰＣに再ロードされる。
【００２４】
対マシン独立型バイトコードＢＣ９は、異なるハンドラ分岐命令ＨＢＬＰ１に変換される。この第２の型式のハンドラ分岐命令は、インデックス値フィールドと即値フィールドを含む。即値フィールドは、バイトコードＢＣ９から取り出された、またはバイトコードＢＣ９に関連するパラメータを、呼び出すべきハンドラ・プログラム２６に転送するために使用される。これによって、ハンドラ・プログラム２６は、転送されたパラメータに応答する機能を追加することが可能になる。ハンドラ・プログラム２６が終了すると、処理はネイティブ・プログラム命令ＢＣ１０に復帰する。
【００２５】
図３は、即値フィールドを含むハンドラ分岐命令ＨＢＬＰの復号に続く命令復号器１８によって制御される処理動作を、模式的に示す流れ図である。ステップ２８で命令復号器１８は、ＨＢＬＰ命令が命令パイプライン２０の復号ステージの中に受信されるまで待ち合わせているとみなし得る。そのような命令が認識されると、処理はステップ３０に進み、ここでレジスタ・ファイル１０のレジスタＲ８に即値が格納される。ハンドラ・プログラムが実行を開始すると、ハンドラ・プログラムは、ＨＢＬＰプログラムに関連する即値がレジスタＲ８の中に存在していると想定する。
【００２６】
ステップ３２は、レジスタ・ファイル１０のレジスタＲ１５の中に格納されている現在のプログラムカウンタの値ＰＣを、リンク・レジスタＲ１４の中に格納する。ハンドラ・プログラムの終わりにある復帰命令は、レジスタＲ１４の中に格納されたアドレス値が復帰アドレスの値であると想定する。通常、復帰アドレスの値は、分岐を実行させたハンドラ分岐命令に続くアドレスを指示することは理解されるであろう。
【００２７】
ステップ３４で、コプロセッサ構成レジスタ２２から読み出されたハンドラ・ベース・ポインタと、ハンドラ分岐命令ＨＢＬＰの中からのインデックス値フィールドを左に（５ビットだけ）論理シフトした値とを一緒にした合計として分岐アドレスの計算が実行される。計算されたハンドラ・プログラム・アドレスは、ステップ３６でプログラム・カウンタ・レジスタＲ１５の中に格納され、ステップ３８でハンドラ・プログラムへの分岐をもたらす。
【００２８】
ステップ４０は、ハンドラ・プログラムの実行を表しており、これは通常はレジスタＲ８内のハンドラ・プログラムに渡される即値の何等かの使用を含む（ハンドラ・プログラムがその即値を実際利用しないかもしれない状況もあることは理解されるであろう）。
【００２９】
ハンドラ・プログラムの終了時点で復帰命令に到達するとステップ４２が遂行され、レジスタＲ１４内に保持されているリンク・レジスタの値をプログラム・カウンタ・レジスタＲ１５の中にローディングすることによって、ハンドラ分岐命令に続く命令に対して復帰が実行される。ハンドラ分岐命令に関連する処理は効果的に終了する。
【００３０】
実際にステップ４０、４２は、ＨＢＬＰ命令自体によって直接遂行されるのではなく、命令復号器１８によって復号されるＨＢＬＰ以外のプログラム命令に制御されて遂行されることは理解されるであろう。
【００３１】
図４は、第２の型式のハンドラ分岐命令ＨＢＬを示している。この型式のハンドラ分岐命令は、即値フィールドを含まない。即値フィールドが無いために、インデックス値フィールドに割り当てられる命令ビットのスペース量が大きくなるので、計算することができるハンドラ・ポインタの範囲を広くすることができる。このため、即値フィールドを含むハンドラ分岐命令に関連するハンドラ・プログラムは、ハンドラ・ベース・アドレス・ポインタの位置に近いメモリ内の位置が割り当てられ、図４に示す型式のハンドラ分岐命令に関連するハンドラ・プログラムは、ハンドラ・ベース・アドレス・ポインタから遠くに配置される。
【００３２】
図４に示す処理ステップは、即値の格納が無いことと、ハンドラ・プログラムが、所定のレジスタ、例えば、Ｒ８内に格納されている即値を参照することができないことを除き、図３の処理ステップと同じである。
【００３３】
図５は、図３，４に示す２つの型式のハンドラ分岐命令の符号化の例を示している。図５で使用されている文法（ｓｙｎｔａｘ）は、正規（ｎｏｒｍａｌ）のＡＲＭ命令の文法である。Ｔｈｕｍｂ−２Ｅｑｕｉｖａｌｅｎｔを示している部分に示されている機能は、ただ１つの関連するハンドラ分岐命令によって遂行される機能の表現である。したがって、ハンドラ分岐命令はこの機能を指定する方法のコード密度がより多くなっていることが判るであろう。
【００３４】
図６は、非ネイティブ・プログラム、仮想マシン、ネイティブ・プログラムおよびそのネイティブ・プログラムの実行の間の関係を模式的に表している。図示のように、Ｊａｖａバイトコード・プログラム４４はメモリ４の中に格納され、ＪＩＴコンパイラ４８を含むＪａｖａ仮想マシン４６によって処理され、Ｔｈｕｍｂ−２命令５０を含むネイティブ・プログラムに変換される。ＪＩＴコンパイラ４８は動的適応型コンパイラであっても良いことは理解されるであろう。更にＪａｖａバイトコード・プログラム４４は、ＭＳＩＬバイトコード、ＣＩＬバイトコード、．ＮＥＴバイトコードなど、対マシン独立型プログラム命令で形成されてもよい。代替的使用におけるＪａｖａバイトコード・プログラム４４は、実行が所望されるプロセッサ６に対してはネイティブではないＣＩＳＣプロセッサ（例えば、ｘ８６）のような他のプロセッサのプログラム命令の代わりとなりうる。
【００３５】
変換されたプログラム５０が形成されると、このプログラムは、適切な位置にあるハンドラ・プログラム２４、２６を呼び出すために使用されるハンドラ分岐命令ＨＢＬＰとＨＢＬを含む。これらのハンドラ・プログラムは、Ｊａｖａ仮想マシン４６とＪＩＴコンパイラ４８に制御されてハンドラ・ベース・アドレス・ポインタに続く所定のメモリにセットアップされるとともに格納される。図示の例におけるハンドラ・プログラムは、ハンドラ・ベース・アドレス・ポインタＨＢＡに続くアドレス空間に直接与えられる。代替実施例におけるハンドラ・ベース・アドレス・ポインタは、ハンドラ分岐命令のインデックス値フィールドに依存して選択的に分岐される飛び越し命令（ｊｕｍｐ  ｉｎｓｔｒｕｃｔｉｏｎｓ）のリストを指している。これらの飛び越し命令は、他の位置に格納されているハンドラ・プログラムに対する飛び越しをトリガする。そのような配列は、各種サイズのハンドラ・プログラムがメモリの中に密集して格納されることを容易に可能にするとともに、ハンドラ・プログラムのサイズが広範囲に変わることを可能にする。代替方法として、ハンドラ・ベース・アドレス・ポインタに続く位置にプログラムの或る一部を組み込み、オーバーフロー分は別の位置に与え、ハンドラ・ベース・アドレス・ポインタに続くアドレス空間内の最終命令によって上記別の位置に飛ぶことによってその特定のプログラムを得るようにして、各種サイズのハンドラ・プログラムを収容することができる。ハンドラ分岐命令に続くネイティブ命令に対する復帰は、拡張された部分の終わりに移動するであろう。
【００３６】
図６に戻り、メモリ４内に格納された変換されたプログラム５０は、メモリ４から読み出されて、命令パイプライン２０に転送され命令復号器１８によって復号されるとともに、レジスタ・ファイル１０、乗算器１２、シフタ１４および加算器１６を含む処理論理を制御するために使用される。変換されたプログラム５０は、特殊なハンドラ分岐命令を含む。ＪＩＴコンパイラ４８または動的適応型コンパイラの型式をした変換プログラムは、つくり出された変換されたプログラム５０の中に新しい特殊用途ハンドラ分岐命令を発生する役目をする。したがって、変換されたプログラム５０は、その変換４８を遂行するプログラムとともに、本発明の相補的態様である。
【００３７】
添付の図面を参照して本発明の例示的実施例を詳細に説明してきたが、本発明がこれらの正確な実施例に限定されないことと、特許請求の範囲によって定義された本発明の範囲と趣旨を逸脱することなく当業者によって各種変更や改造を実施できることとを理解すべきである。
【図面の簡単な説明】
【００３８】
【図１】ハンドラ分岐命令を使用するデータ処理装置を模式的に示す図である。
【図２】対マシン独立型バイトコード、これら対マシン独立型バイトコードのネイティブ・プログラム命令への変換およびネイティブ・プログラム命令からハンドラ・プログラムへの分岐の間の関係を模式的に示す図である。
【図３】即値フィールドを含むハンドラ分岐命令に続く処理論理によって遂行される動作を、模式的に示す流れ図である。
【図４】即値フィールドを含まないハンドラ分岐命令に続く処理論理によって遂行される動作を、模式的に示す図である。
【図５】２種類のハンドラ分岐命令の符号化を模式的に示す図である。
【図６】対マシン独立型バイトコード、バーチャル・マシン・プログラム、変換されたプログラムおよび変換されたプログラムの実行の間の関係を模式的に示す図である。
【符号の説明】
【００３９】
２  データ処理システム
４  メモリ
６  プロセッサ
８  コプロセッサ
１０  レジスタ・ファイル、
１４  乗算器
１６  加算器
１８  命令復号器
２０  命令パイプライン
２２  コプロセッサ構成レジスタ
２４、２６  ハンドラ・プログラム
４４  Ｊａｖａバイトコード・プログラム
４６  Ｊａｖａ仮想マシン
５０  Ｔｈｕｍｂ−２命令（変換されたプログラム）
【図１】
0004799016.tif 000002
【図２】
0004799016.tif 000003
【図３】
0004799016.tif 000004
【図４】
0004799016.tif 000005
【図５】
0004799016.tif 000006
【図６】
0004799016.tif 000007