(57)【要約】Ｊａｖａ（Ｒ）バイトコード等の第１の命令ｓｃｔのプログラム命令の非処理操作が検出される。その非処理操作に直接対処する機構を呼び出すのではなく、ＡＲＭ（Ｒ）命令等の第２の命令セットからの一つ以上の命令が非処理操作された命令をエミュレートするのに使用される。第２の命令セットのこれらの命令も非処理操作される場合には、第２の命令セット内の非処理操作に対処する機構を呼び出してその操作を修復することができる。この方法はネイティブ固定長命令セットを有するプロセッサコアにより解釈される可変長命令の非処理操作に対処するのによく適している。特に、プリフェッチアボートおよび非処理浮動小数点演算はこの方法で簡便に対処することができる。
2004538556.tif 000002
【特許請求の範囲】
【請求項１】
第１の命令セットおよびさらに一つ以上の命令セットからのプログラム命令の制御下でデータを処理する装置であって、前記装置は、
前記第１の命令セットのプログラム命令の非処理操作を検出するように動作する非処理操作検出器と、
前記非処理操作が検出されると動作して前記さらに一つ以上の命令セットの少なくとも一つの一つ以上の命令を使用して前記第１の命令セットの前記命令のエミュレーションをトリガーする非処理操作ハンドラと、
を含む装置。
【請求項２】
請求項１に記載の装置であって、前記非処理操作検出器は命令語の非処理フェッチングを検出するように動作するフェッチアボート検出器である装置。
【請求項３】
請求項１に記載の装置であって、前記非処理操作検出器は非処理浮動小数点演算を検出するように動作する非処理浮動小数点演算検出器である装置。
【請求項４】
請求項１，２または３のいずれか一項に記載の装置であって、前記第１の命令セットは可変長命令セットであり前記さらに一つ以上の命令セットの少なくとも一つは固定長命令セットである装置。
【請求項５】
請求項１，２または３のいずれか一項に記載の装置であって、前記第１の命令セットは可変長命令セットであり前記さらに一つ以上の命令セットの全てが固定長命令セットである装置。
【請求項６】
請求項４および５のいずれか一項に記載の装置であって、
実行されるプログラム命令、一つ以上の命令語に跨る前記可変長命令セットからの少なくともいくつかのプログラム命令を含む固定長命令語をフェッチするように動作する命令フェッチャ（ｆｅｔｃｈｅｒ）を含む装置。
【請求項７】
請求項６に記載の装置であって、前記非処理操作検出器は可変長命令の一部を含む第２以降の命令語である命令語の非処理フェッチングの検出時に動作して前記可変長命令をアボートしかつ一つ以上の固定長命令を使用して前記可変長命令のエミュレーションをトリガーするフェッチアボート検出器である装置。
【請求項８】
請求項６に記載の装置であって、前記非処理操作検出器は前記可変長命令がメモリページ境界に交差することが決定される命令語の非処理フェッチングの検出時に動作して前記可変長命令をアボートしかつ一つ以上の固定長命令を使用して前記可変長命令のエミュレーションをトリガーするフェッチアボート検出器である装置。
【請求項９】
請求項６に記載の装置であって、前記非処理操作検出器は前記可変長命令がメモリページ境界の終りの固定数バイト内で開始することが決定され前記固定数バイトは第１の命令セットからのプログラム命令の制御下で前記データ処理装置により処理される最長可変長命令よりも小さい命令語の非処理フェッチングの検出時に動作して前記可変長命令をアボートしかつ一つ以上の固定長命令を使用して前記可変長命令のエミュレーションをトリガーするフェッチアボート検出器である装置。
【請求項１０】
請求項３に記載の装置であって、前記第１の命令セットの単一命令の実行中に複数の浮動小数点演算を実行することができ、前記複数の浮動小数点演算のいずれかにより潜在的に非処理浮動小数点演算が生じ前記非処理操作検出器は前記複数の浮動小数点演算のいずれかにより発生される非処理浮動小数点演算を検出するように動作する非処理浮動小数点演算検出器である装置。
【請求項１１】
請求項３および１０のいずれか一項に記載の装置であって、前記非処理操作検出器は非処理浮動小数点演算を生じる前記第１の命令セットの命令の実行時に即座に非処理浮動小数点演算を検出はせずに前記第１の命令セットの後続命令の実行時に非処理浮動小数点演算を検出し、前記非処理操作検出器は前記後続命令をアボートしかつ一つ以上の固定長命令を使用して前記後続命令のエミュレーションをトリガーする装置。
【請求項１２】
請求項１１に記載の装置であって、前記非処理操作検出器は前記後続命令も浮動小数点演算を生じる時だけ非処理浮動小数点演算を検出する装置。
【請求項１３】
請求項１１および１２のいずれか一項に記載の装置であって、さらに、非処理浮動小数点演算が発生していることを前記非処理操作ハンドラが決定できるようにする発生インジケータを含む装置。
【請求項１４】
請求項１１から１３のいずれか一項に記載の装置であって、さらに、非処理浮動小数点演算を生じた浮動小数点演算を決定できるようにする操作インジケータを含む装置。
【請求項１５】
請求項１１から１４のいずれか一項に記載の装置であって、前記非処理操作ハンドラは前記第１の命令セットの前記命令のエミュレーションの前に前記非処理操作を処理する既存の機構を利用する装置。
【請求項１６】
請求項１５に記載の装置であって、前記非処理操作ハンドラは固定長浮動小数点命令を実行し、前記固定長浮動小数点命令の実行は前記非処理操作を処理するのに既存の機構を利用する効果を有する装置。
【請求項１７】
前記いずれか一項に記載の装置であって、前記第２の命令セットは前記プログラム命令を実行するプロセッサコアのネイティブ命令セットである装置。
【請求項１８】
前記いずれか一項に記載の装置であって、前記第１の命令セットは解釈された命令セットである装置。
【請求項１９】
前記いずれか一項に記載の装置であって、前記第１の命令セットはＪａｖａ（Ｒ）バイトコード命令を含む装置。
【請求項２０】
前記いずれか一項に記載の装置であって、さらに、前記非処理操作後に実行を再開する再開論理を含み、
前記装置は前記複数の命令セットの少なくとも一つの命令を表わす前記複数の命令セットの中の一つの命令セットの命令に対応する一つ以上の変換器出力信号セットの系列を発生するように動作し、各系列は前記系列内の最終操作が実行されるまで入力変数は変化させないようにされており、
前記複数の命令セットの前記少なくとも一つの命令を表わす操作系列の実行中に非処理操作が発生した後で、
（ｉ）前記非処理操作が前記系列内の最終操作の実行を開始する前に生じたものであれば、前記再開論理は前記系列内の第１の操作において実行を再開し、
（ｉｉ）前記非処理操作が前記系列内の最終操作の実行を開始した後で生じたものであれば、前記再開論理は前記系列に続く次の命令において実行を再開する装置。
【請求項２１】
第１の命令セットおよびさらに一つ以上の命令セットからのプログラム命令の制御下でデータを処理する方法であって、前記方法は、
前記第１の命令セットのプログラム命令の非処理操作を検出するステップと、
前記非処理操作が検出されると前記さらに一つ以上の命令セットの少なくとも一つの命令セットの一つ以上の命令を使用して前記第１の命令セットの前記命令のエミュレーションをトリガーするステップと、
を含む方法。
【請求項２２】
請求項２１に記載の方法であって、前記検出ステップは命令語の非処理フェッチングを検出する方法。
【請求項２３】
請求項２１に記載の方法であって、前記検出ステップは非処理浮動小数点演算を検出する方法。
【請求項２４】
請求項２１，２２または２３のいずれか一項に記載の方法であって、前記第１の命令セットは可変長命令セットであり前記さらに一つ以上の命令セットの少なくとも一つは固定長命令セットである方法。
【請求項２５】
請求項２１，２２または２３のいずれか一項に記載の方法であって、前記第１の命令セットは可変長命令セットであり前記さらに一つ以上の命令セットの全てが固定長命令セットである方法。
【請求項２６】
請求項２４および２５のいずれか一項に記載の方法であって、
実行されるプログラム命令を含む固定長命令語をフェッチするステップを含み、前記可変長命令セットからの少なくともいくつかのプログラム命令は２つ以上の命令語に跨る方法。
【請求項２７】
請求項２６に記載の方法であって、可変長命令の一部を含む第２以降の命令語である命令語の非処理フェッチングの検出時に、前記可変長命令をアボートしかつ一つ以上の固定長命令を使用して前記可変長命令のエミュレーションをトリガーする方法。
【請求項２８】
請求項２６に記載の方法であって、前記可変長命令はメモリページ境界に交差することが決定される命令語の非処理フェッチングの検出時に、前記可変長命令をアボートしかつ一つ以上の固定長命令を使用して前記可変長命令のエミュレーションをトリガーする方法。
【請求項２９】
請求項２６に記載の方法であって、前記可変長命令はメモリページ境界の終りの固定数バイト内で開始することが決定され前記固定数バイトは処理された最長可変長命令よりも小さい命令語の非処理フェッチングの検出時に、前記可変長命令をアボートしかつ一つ以上の固定長命令を使用して前記可変長命令のエミュレーションをトリガーする方法。
【請求項３０】
請求項２３に記載の方法であって、前記第１の命令セットの単一命令の実行中に複数の浮動小数点演算を実行することができ、前記複数の浮動小数点演算のいずれかにより潜在的に非処理浮動小数点演算が生じ前記検出は前記複数の浮動小数点演算のいずれかにより発生される非処理浮動小数点演算を検出するように動作する方法。
【請求項３１】
請求項２３および３０のいずれか一項に記載の装置であって、前記検出は非処理浮動小数点演算を生じる前記第１の命令セットの命令の実行時に即座に非処理浮動小数点演算を検出はせずに前記第１の命令セットの後続命令の実行時に非処理浮動小数点演算を検出して前記後続命令をアボートしかつ一つ以上の固定長命令を使用して前記後続命令のエミュレーションをトリガーする方法。
【請求項３２】
請求項３１に記載の方法であって、前記検出は前記後続命令も浮動小数点演算を生じる時だけ非処理浮動小数点演算を検出する方法。
【請求項３３】
請求項３１および３２のいずれか一項に記載の方法であって、さらに、非処理浮動小数点演算が発生していることを前記非処理操作ハンドラが確認できるようにする発生インジケータを含む方法。
【請求項３４】
請求項３１から３３のいずれか一項に記載の方法であって、さらに、非処理浮動小数点演算を生じた浮動小数点演算を確認できるようにインジケータを設定するステップを含む方法。
【請求項３５】
請求項３１から３４のいずれか一項に記載の方法であって、前記非処理操作の処理は前記第１の命令セットの前記命令のエミュレーションの前に前記非処理操作を処理する既存の機構を利用する方法。
【請求項３６】
請求項３５に記載の方法であって、前記非処理操作の処理は固定長浮動小数点命令を実行し、前記固定長浮動小数点命令の実行は前記非処理操作を処理するのに既存の機構を利用する効果を有する方法。
【請求項３７】
請求項２１から３６のいずれか一項に記載の方法であって、前記第２の命令セットは前記プログラム命令を実行するプロセッサコアのネイティブ命令セットである方法。
【請求項３８】
請求項２１から３７のいずれか一項に記載の方法であって、前記第１の命令セットは解釈された命令セットである方法。
【請求項３９】
請求項２１から３８のいずれか一項に記載の方法であって、前記第１の命令セットはＪａｖａバイトコード命令を含む方法。
【請求項４０】
請求項２１から３９のいずれか一項に記載の方法であって、さらに、
前記複数の命令セットの少なくとも一つの命令を表わす前記複数の命令セットの中の一つの命令セットの命令に対応する一つ以上の変換器出力信号セットの系列を発生するステップであって、各系列はその中の最終操作が実行されるまで入力変数は変化させないようにされているステップと、
前記複数の命令セットの前記少なくとも一つの命令を表わす操作系列の実行中に非処理操作が発生した後で、
（ｉ）前記非処理操作が前記系列内の最終操作の実行を開始する前に生じたものであれば、前記再開論理は前記系列内の第１の操作において実行を再開し、
（ｉｉ）前記非処理操作が前記系列内の最終操作の実行を開始した後で生じたものであれば、前記再開論理は前記系列に続く次の命令において実行を再開するステップと、
を含む方法。
【請求項４１】
第１の命令セットおよびさらに一つ以上の命令セットからのプログラム命令の制御下でデータを処理するデータ処理装置を制御するコンピュータプロダクトであって、前記コンピュータプログラムプロダクトは、
非処理操作の検出時に前記さらに一つ以上の命令セットの少なくとも一つの命令セットの一つ以上の命令を使用して前記非処理操作を生じた命令セットの前記命令のエミュレーションをトリガーするように動作する非処理操作ハンドラ論理を含むコンピュータプログラムプロダクト。
【請求項４２】
請求項４１に記載のコンピュータプログラムプロダクトであって、前記非処理操作は命令語の非処理フェッチングであるコンピュータプログラムプロダクト。
【請求項４３】
請求項４１に記載のコンピュータプログラムプロダクトであって、前記非処理操作は一つ以上の非処理浮動小数点演算であるコンピュータプログラムプロダクト。
【請求項４４】
請求項４１，４２および４３のいずれか一項に記載のコンピュータプログラムプロダクトであって、前記第１の命令セットは可変長命令セットであり前記さらに一つ以上の命令セットの少なくとも一つは固定長命令セットであるコンピュータプログラムプロダクト。
【請求項４５】
請求項４１，４２および４３のいずれか一項に記載のコンピュータプログラムプロダクトであって、前記第１の命令セットは可変長命令セットであり前記さらに一つ以上の命令セットの全てが固定長命令セットであるコンピュータプログラムプロダクト。
【請求項４６】
請求項４４および４５のいずれか一項に記載のコンピュータプログラムプロダクトであって、実行されるプログラム命令を含む固定長命令語がフェッチされ、前記可変長命令セットからの少なくともいくつかのプログラム命令は２つ以上の命令語に跨るコンピュータプログラムプロダクト。
【請求項４７】
請求項４６に記載のコンピュータプログラムプロダクトであって、可変長命令の一部を含む第２以降の命令語である命令語の非処理フェッチングの検出時に、前記可変長命令をアボートし一つ以上の固定長命令を使用して前記可変長命令のエミュレーションをトリガーするコンピュータプログラムプロダクト。
【請求項４８】
請求項４６に記載のコンピュータプログラムプロダクトであって、前記可変長命令はメモリページ境界に交差することが決定される命令語の非処理フェッチングの検出時に、前記可変長命令をアボートし一つ以上の固定長命令を使用して前記可変長命令のエミュレーションをトリガーするコンピュータプログラムプロダクト。
【請求項４９】
請求項４６に記載のコンピュータプログラムプロダクトであって、前記可変長命令はメモリページ境界の終りの固定数バイト内で開始することが決定され前記固定数バイトは処理された最長可変長命令よりも小さい命令語の非処理フェッチングの検出時に、前記可変長命令をアボートしかつ一つ以上の固定長命令を使用して前記可変長命令のエミュレーションをトリガーするコンピュータプログラムプロダクト。
【請求項５０】
請求項４３に記載のコンピュータプログラムプロダクトであって、前記第１の命令セットの単一命令の実行中に複数の浮動小数点演算を実行することができ、前記複数の浮動小数点演算のいずれかにより潜在的に非処理浮動小数点演算が生じ、非処理浮動小数点演算の検出は前記複数の浮動小数点演算のいずれかにより発生される非処理浮動小数点演算を検出するように動作するコンピュータプログラムプロダクト。
【請求項５１】
請求項４３および５０のいずれか一項に記載のコンピュータプログラムプロダクトであって、非処理操作の検出は非処理浮動小数点演算を生じる前記第１の命令セットの命令の実行時に即座に非処理浮動小数点演算を検出はせずに前記第１の命令セットの後続命令の実行時に非処理浮動小数点演算を検出して前記後続命令をアボートしかつ一つ以上の固定長命令を使用して前記後続命令のエミュレーションをトリガーするコンピュータプログラムプロダクト。
【請求項５２】
請求項５１に記載のコンピュータプログラムプロダクトであって、非処理操作検出は前記後続命令も浮動小数点演算を生じる時だけ非処理浮動小数点演算を検出するコンピュータプログラムプロダクト。
【請求項５３】
請求項５１および５２のいずれか一項に記載のコンピュータプログラムプロダクトであって、さらに、非処理浮動小数点演算が発生していることを前記非処理操作ハンドラ論理が確認できるようにする発生インジケータ論理を含むコンピュータプログラムプロダクト。
【請求項５４】
請求項５１から５３のいずれか一項に記載のコンピュータプログラムプロダクトであって、さらに、非処理浮動小数点演算を生じた浮動小数点演算を確認できるようにする操作インジケータ論理を含むコンピュータプログラムプロダクト。
【請求項５５】
請求項５１から５４のいずれか一項に記載のコンピュータプログラムプロダクトであって、前記非処理操作ハンドラ論理は前記第１の命令セットの前記命令のエミュレーションの前に前記非処理操作を処理するのに既存の機構を利用するコンピュータプログラムプロダクト。
【請求項５６】
請求項５５に記載のコンピュータプログラムプロダクトであって、前記非処理操作ハンドラ論理は固定長浮動小数点命令を実行し、前記固定長浮動小数点命令の実行は前記非処理操作を処理するのに既存の機構を利用する効果を有するコンピュータプログラムプロダクト。
【請求項５７】
請求項４１から５６のいずれか一項に記載のコンピュータプログラムプロダクトであって、前記第２の命令セットは前記プログラム命令を実行するプロセッサコアのネイティブ命令セットであるコンピュータプログラムプロダクト。
【請求項５８】
請求項４１から５７のいずれか一項に記載のコンピュータプログラムプロダクトであって、前記第１の命令セットは解釈された命令セットであるコンピュータプログラムプロダクト。
【請求項５９】
請求項４１から５８のいずれか一項に記載のコンピュータプログラムプロダクトであって、前記第１の命令セットはＪａｖａバイトコード命令を含むコンピュータプログラムプロダクト。
【請求項６０】
請求項４１から５９のいずれか一項に記載のコンピュータプログラムプロダクトであって、さらに、前記非処理操作の後で実行を再開する再開論理を含み、
前記データ処理装置は前記複数の命令セット少なくとも一つの命令を表わす前記複数の命令セットの中の一つの命令セットの命令に対応する一つ以上の変換器出力信号セットの系列を発生するように動作し、各系列はその中の最終操作が実行されるまで入力変数は変化させないようにされており、
前記複数の命令セットの前記少なくとも一つの命令を表わす操作系列の実行中に非処理操作が発生した後で、
（ｉ）前記非処理操作が前記系列内の最終操作の実行を開始する前に生じたものであれば、前記再開論理は前記系列内の第１の操作において実行を再開し、
（ｉｉ）前記非処理操作が前記系列内の最終操作の実行を開始した後で生じたものであれば、前記再開論理は前記系列に続く次の命令において実行を再開する、コンピュータプログラムプロダクト。
を含む方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ処理システムの分野に関する。特に、本発明は複数命令セットをサポートするシステム内の非処理（ｕｎｈａｎｄｌｅｄ：非取扱）操作の処理に関する。
【背景技術】
【０００２】
複数命令セットをサポートするデータ処理システムを提供することが知られている。このようなシステムの例は英国、ケンブリッジのＡＲＭ（Ｒ）社製サムイネーブル（Ｔｈｕｍｂ  ｅｎａｂｌｅｄ）プロセッサである。これらのサムイネーブルプロセッサは３２ビットＡＲＭ命令および１６ビットサム命令の両方の実行をサポートする
【０００３】
プログラム命令をデータ処理システムにより直接処理できないことがしばしばデータ処理システム内で生じることがある。したがって、このような非処理操作を処理する機構を提供することが知られている。このような状況の例はプリフェッチ命令アボートである。仮想記憶システム内の命令をプリフェッチする時は、命令ロードがページ境界と交差することがあり、仮想記憶システム内にまだ適切にマッピングされていない新しいページによりアボートが生じることがある。その後、正しいマッピングを行って命令フェッチを再発行することができる。
【０００４】
このような状況のもう一つの例は浮動小数点命令実行である。浮動小数点演算の実行中に、データ処理システムにより直接処理できない状況が生じることがある。これはＩＥＥＥ７５４仕様とコンパチブルな浮動小数点システムにおいて特にそうである。このような状況の例はゼロによる減算、ＮａＮを含む任意の演算、無限大を含む演算または逆正規化された数（ｄｅｎｏｒｍａｌｉｓｅｄ  ｎｕｍｂｅｒ）を含む演算である。
【０００５】
新しい命令セットが付加される時に、起こり得る全てのアボートに対して適切なアボート機構が適所にあることを保証するために著しい努力および開発が必要となる問題が生じる。
【０００６】
非処理浮動小数点演算が生じる時に特有の問題が生じる。多くのシステムが処理されない浮動小数点演算を確認するのに命令ストリームの検査を頼りにしている。新しい命令セットによりこれらのシステムはその要求を満たすように書き換えなければならない。さらに、新しい命令セットがその単一命令に対して多数の浮動小数点演算を発生できる場合には問題が生じる。この場合、単一命令により２つ以上の非処理浮動小数点演算を生じることがあるため、命令ストリームの検査によりどの浮動小数点演算が処理されなかったかをシステムが決定できなくなることがある。
【０００７】
非処理浮動小数点演算が不正確である、すなわち、浮動小数点演算を発生する命令が実行されるポイントにおいて非処理浮動小数点演算が検出されずに幾分後で検出される場合にはもう一つの問題が生じる。多くの浮動小数点システムの並列性によりこの状況が生じる。データ処理システムは浮動小数点演算を指定する命令に遭遇すると、浮動小数点サブシステムに浮動小数点演算を配布する。浮動小数点サブシステムに浮動小数点演算が配布されると、主データ処理システムは命令ストリーム内のさらなる命令の実行を継続する。多くの命令は浮動小数点システムが非処理浮動小数点演算を検出する前に実行することができ、非処理演算状態を主データ処理システムに信号で知らせる。この場合、非処理浮動小数点演算の原因は命令ストリームの検査により確認することができない。このような場合には浮動小数点システムが非処理浮動小数点演算を識別するレジスタ、例えば、英国、ケンブリッジのＡＲＭ社製Ｖｅｃｔｏｒ  Ｆｌｏａｔｉｎｇ  Ｐｏｉｎｔ  システムを含むことが知られている。
【０００８】
多くのシステムでは、浮動小数点サブシステムは任意のポイントにおいて非処理演算を主データ処理システムに信号で知らせることはできず、非処理演算は主データ処理システムが浮動小数点サブシステムとのハンドシェークを実施する明示されたポイントでしか主データ処理システムに信号で知らせることができない。典型的に、これらのハンドシェークは浮動小数点演算を指定する命令の実行時にしか生じない。この場合、主データ処理システムが浮動小数点演算を指定するもう一つの命令を実行するまで非処理浮動小数点演算を主データ処理システムに信号で知らせることができない。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
不正確な非処理浮動小数点演算と共に命令当たり多数の浮動小数点演算を実施することができる新しい命令セットの導入は非常に困難な問題を生じ、システムは非処理浮動小数点演算を処理できなくなる。システムはどの命令が非処理浮動小数点演算を生じたかを決定することができず、さらに、非処理浮動小数点演算が処理された時に命令ストリーム内のどこで実行を継続すべきかを決定することができない。
【課題を解決するための手段】
【００１０】
一側面から見て、本発明は第１の命令セットおよびさらに一つ以上の命令セットからのプログラム命令の制御下でデータを処理する装置を提供し、前記装置は、
前記第１の命令セットのプログラム命令の非処理操作を検出するように動作する非処理操作検出器と、
前記非処理操作を検出すると、前記さらに一つ以上の命令セットの少なくとも一つの命令セットの一つ以上の命令を使用して、前記第１の命令セットの前記命令のエミュレーションをトリガーするように動作する非処理操作ハンドラと、を含んでいる。
【００１１】
本発明はシステムが第１の命令セット内の非処理操作を認識はするが、必ずしも状況を修理したり関連する第１の命令セット命令を再実行はしないようにすることにより、前記した問題を著しく低減できることを認識する。替わりに、非処理操作を生じる第１の命令セット（新しい命令セット）の命令がさらに一つ以上の命令セット（例えば、第２の命令セット）の一つ以上の命令によりエミュレートされる。発生した非処理操作のタイプに応じて、非処理操作はエミュレーション時に再発生しないことがある。あるいは、さらに一つ以上の命令セットの命令を使用するエミュレーション時でも非処理操作が生じる場合には、さらに一つ以上の命令セットのこのような非処理操作に対処するための既存の機構を利用して非処理操作を克服することができる。
【００１２】
非処理操作ハンドラはデータ処理システムの非処理操作状態をクリヤする命令を配布することができる。あるデータ処理システムはそれが非処理操作状態にあるかどうかを記録する一つ以上のフラグを含んでいる。このフラグは前記第１の命令セットの前記命令のエミュレーションの前に非処理操作ハンドラによりクリヤされる必要のあることがある。フラグがクリヤされる必要があるかどうかは非処理操作のタイプおよびその非処理操作タイプに関連づけられるフラグがあるかどうかによって決まる。
【００１３】
本技術は多方面に応用できるが、第１の命令セットが可変長命令セットでありさらに一つ以上の命令セットが固定長命令セットであるシステムに特に適している。この組合せでは、固定長命令セットでは不可能な新しいタイプの非処理操作が可変長命令セットでは可能となることがあり、さらに一つ以上の命令セットでこれらの非処理操作に対処するために開発された機構は、可変長第１の命令セット自体に関して生じる場合の非処理操作に容易に対処するようにはされない。
【００１４】
本発明が非常に有利である特別な状況は可変長命令のフェッチアボートへの対処である。このような状況では、可変長命令は２命令語に跨ることがあり、どの命令語が非処理操作を生じるかのフェッチングに関してクリヤとならないことがある。それにより、非処理操作に適切に対処することが困難となる。
【００１５】
本発明は第１の命令セットの単一命令が多数の浮動小数点演算を発生することがある、あるいは非処理浮動小数点演算のシグナリングが不正確である浮動小数点システムまたはサブシステムを含むシステムにも特によく適している。
【００１６】
本技術が非常に有利である特別な状況は、第１の命令セットの単一命令が非処理浮動小数点演算の不正確なシグナリングと共に多数の浮動小数点演算を発生することがあるシステムである。このような状況では、システムは第１の命令セットのどの命令が非処理浮動小数点演算を生じたかを確認できないことがある。
【００１７】
本技術は、さらに一つ以上の命令セットの一つ以上の命令を使用して非処理浮動小数点演算がトリガーされた時に実行していた第１の命令セットの命令のエミュレーションをトリガーすることによりこの状況を克服する。非処理浮動小数点演算がトリガーされた時に実行していた第１の命令セットの命令は非処理浮動小数点演算を生じた命令であることもないこともある。非処理浮動小数点演算がトリガーされた時に実行していた第１の命令セットの命令が非処理浮動小数点演算を生じたかどうかに拘らず、非処理浮動小数点演算がトリガーされた時に実行していた第１の命令セットの命令のエミュレーションにより、さらに一つ以上の命令セットのこのような非処理操作に対処するための既存の機構を利用して非処理操作を克服することができる。
【００１８】
さらに一つ以上の命令セットの命令を使用する第１の命令セットの命令のエミュレーションの前に、非処理浮動小数点演算ハンドラは、もく存在するならば、非処理浮動小数点演算フラグをクリヤすることが必要となることがある。
【００１９】
非処理浮動小数点演算がトリガーされた時に実行していた第１の命令セットの命令が非処理浮動小数点演算を生じた命令である場合には、命令がエミュレートされる時に同じ非処理浮動小数点演算が再発生し、さらに一つ以上の命令セットのこのような非処理操作に対処するための既存の機構が非処理操作を克服するために利用される。
【００２０】
データ処理システムが不正確な非処理浮動小数点演算検出を利用するために、非処理浮動小数点演算がトリガーされた時に実行していた第１の命令セットの命令が非処理浮動小数点演算を生じた命令ではない場合には、命令がエミュレートされる時に同じ非処理浮動小数点演算は再発生しない。この場合、データ処理システムは通常非処理浮動小数点演算フラグまたは非処理浮動小数点演算が生じている事実を記録するための等価機構を有する。さらに、データ処理システムは通常非処理浮動小数点演算を生じた浮動小数点演算を記録する。
【００２１】
非処理浮動小数点演算が生じている事実を記録するために使用される前記フラグまたは他の機構をクリヤすることにより、通常さらに一つ以上の命令セットのこのような非処理操作に対処するための既存の機構が非処理操作を克服するのに利用される。
【００２２】
別のシステムでは、フラグまたは他の機構をテストし、非処理浮動小数点演算が記録されていることを示す場合には、フラグまたは他の機構をクリヤする前にこのような非処理操作に対処するためのさらに一つ以上の命令セットの機構を利用することが明らかに必要となることがある。前記非処理操作に対処するためのさらに一つ以上の命令セットの機構を利用することにより、フラグまたは他の機構も自動的にクリヤされ、非処理浮動小数点演算ハンドラはフラグまたは他の機構を明白にクリヤする必要がない。
【００２３】
さらに別のシステムでは、フラグまたは他の機構をテストする必要のないことがある。替わりに、前記非処理操作に対処するためのさらに一つ以上の命令セットの機構を利用すれば十分である。フラグまたは他の機構はシステムが非処理浮動小数点演算ハンドラ内のコードを実行している事実によりセットされることが既に知られているためにこれで十分であり、あるいは、前記機構の利用はその一体部として前記フラグまたは他の機構のテストおよび恐らくはそれに続くクリヤを伴うことがある。
【００２４】
データ処理システム毎に変動することがある非処理浮動小数点ハンドラ内で利用される正確な技術に拘らず、非処理浮動小数点演算がトリガーされた時に実行していた第１の命令セットの命令が非処理浮動小数点演算を生じた命令ではなかった場合には、非処理浮動小数点演算をトリガーした第１の命令セットの命令のエミュレーションの前に非処理浮動小数点演算が分解される。この場合、第１の命令セットの命令のエミュレーションは非処理操作を生じることも生じないこともある。しかしながら、それが非処理演算を生じるかどうかは判らず、非処理浮動小数点演算が繰返しトリガーされ非処理浮動小数点演算ハンドラが繰返し命令を再実行する無限ループを生じることがあるため、単純に実行を再開することはできない。したがって、第１の命令セットの命令はエミュレートされ次の命令で実行を再開しなければならない。
【００２５】
本技術は、さらに一つ以上の命令セットがよく開発されたアボートハンドラを有する傾向があるプロセッサコアのネイティブ命令セットであり、第１の命令セットが後日サポートを加えたいことがあるタイプの解釈された命令セットである状況にも特によく適している。このような可変長の解釈された第１の命令セットの特定の例はＪａｖａ（Ｒ）バイトコード命令である。
【００２６】
もう一つの側面から見て、本発明は第１の命令セットおよびさらに一つ以上の命令セットからのプログラム命令の制御下でデータを処理する方法を提供し、前記方法は、
前記第１の命令セットのプログラム命令の非処理操作を検出するステップと、
前記非処理操作を検出したら、前記さらに一つ以上の命令セットの中の少なくとも一つの命令セットの一つ以上の命令を使用して前記第１の命令セットの前記命令のエミュレーションをトリガーするステップと、を含んでいる。
【００２７】
さらにもう一つの側面から見て、本発明は第１の命令セットおよびさらに一つ以上の命令セットからのプログラム命令の制御下でデータを処理するデータ処理装置を制御するコンピュータプログラムプロダクトを提供し、前記コンピュータプログラムプロダクトは、
非処理操作を検出したら、前記さらに一つ以上の命令セットの中の少なくとも一つの命令セットの一つ以上の命令を使用して前記非処理操作を生じた命令セットの前記命令のエミュレーションをトリガーするように動作する非処理操作ハンドラを含んでいる。
【００２８】
本発明は装置およびその動作方法によりそれ自体を表現するだけでなく、非処理操作ハンドラとして働くコンピュータサポートコードの形でそれ自体を表現する。このサポートコードは埋込処理システム内にファームウェアとして埋め込まれた独立した記録可能媒体または他の方法で配布することができる。
【実施例】
【００２９】
次に、本発明の実施例を単なる例として添付図について説明する。図１はＡＲＭプロセッサ等のプロセッサコア４、およびバイトコード変換ハードウェア６（Ｊａｚｅｌｌｅ（Ｒ）とも呼ばれる）を内蔵するデータ処理システム２を示す。プロセッサコア４はレジスタバンク８、命令デコーダ１０およびレジスタバンク８のレジスタ内に格納されたデータ値にさまざまなデータ処理操作を実施するデータパス１２を含んでいる。バイトコード変換ハードウェア６が現在イネーブルされるかディセーブルされるかを制御するフラグ２０を含むレジスタ１８が設けられる。さらに、バイトコード変換ハードウェアが現在アクティブであるかイナクティブであるかを示すフラグ２１を含むレジスタ１９が設けられる。すなわち、フラグ２１はデータ処理システムが現在Ｊａｖａバイトコードを実行するかＡＲＭ命令を実行するかを示す。他の実施例では、レジスタ１８および１９は両方のフラグ２０および２１を含む単一レジスタでありうることが理解される。
【００３０】
動作において、Ｊａｖａバイトコードが実行されバイトコード変換ハードウェア６がアクティブであれば、バイトコード変換ハードウェア６によりＪａｖａバイトコードが受信されて対応するＡＲＭ命令系列（この特定の非限定実施例において）、または少なくともＡＲＭ命令を表わすプロセッサコア制御信号を発生するように働き、それらは次にプロセッサコア４に通される。したがって、バイトコード変換ハードウェア６は単純なバイトコードをプロセッサコア４が実行できる対応するＡＲＭ命令系列へマッピングすることができる。バイトコード変換ハードウェアがイナクティブであれば、それはバイパスされ正規のＡＲＭ命令をＡＲＭ命令デコーダ１０を供給してプロセッサコア４をそのネイティブ命令セットに従って制御することができる。全体をとおして、ＡＲＭ命令系列はＴｈｕｍｂ命令および／または異なる命令セットからの混合命令とすることができ、このような代替策は考案され包含されることが理解される。
【００３１】
バイトコード変換ハードウェア６は遭遇する可能なＪａｖａバイトコードのサブセットに対してハードウェア変換サポートしか提供できないことが理解される。あるＪａｖａバイトコードはこれらをハードウェアで対応するＡＲＭ命令操作に試行およびマッピングするのが効率的ではない広範な抽象的処理を必要とすることがある。したがって、バイトコード変換ハードウェア６がこのような非ハードウェアサポートバイトコードに遭遇する時は、ＡＲＭネイティブ命令内に書き込まれたソフトウェア命令インタプリタをトリガしてその非ハードウェアサポートＪａｖａバイトコードにより指定された処理を実施する。
【００３２】
ソフトウェア命令インタプリタは解釈することができる全ての可能なＪａｖａバイトコードに対するソフトウェアサポートを提供する。バイトコード変換ハードウェア６が存在してイネーブルされると、非ハードウェアサポートＪａｖａバイトコードだけが通常ソフトウェア命令インタプリタ内の関連するコードフラグメントに参照される。しかしながら、バイトコード変換ハードウェア６が提供されないまたはディセーブルされる（デバギング中等）場合には、全てのＪａｖａバイトコードがソフトウェア命令インタプリタに参照される。
【００３３】
図２はソフトウェア命令インタプリタのアクションを示す略図である。Ｊａｖａバイトコードのストリーム２２はＪａｖａプログラムを表わす。これらのＪａｖａバイトコードにはオペランドを点在させることができる。したがって、所与のＪａｖａバイトコードの実行に続いて、実行される次のＪａｖａバイトコードはすぐ次のバイト位置に現れたり、介在オペランドバイトが存在する場合には数バイト後の位置に現れることができる。
【００３４】
図２に示すように、バイトコード変換ハードウェア６によりサポートされないＪａｖａバイトコードＢＣ４に遭遇する。これはバイトコード変換ハードウェア６内で例外をトリガして、非ハードウェアサポートバイトコードＢＣ４により指定された処理を実施するコードフラグメント２６へのポインターＰ＃４を読み出すインデクスとしてバイトコード値ＢＣ４を使用してポインターのテーブル２４内でルックアップを実施させる。ポインターのテーブルのベースアドレス値もレジスタ内に格納することができる。次に、選択されたコードフラグメントに非サポートバイトコードＢＣ４をポイントするＲ１４が入力される。
【００３５】
図からお判りのように、２５６の可能なバイトコード値があるため、ポインターのテーブル２４は２５６のポインターを含んでいる。同様に、可能な全てのＪａｖａバイトコードにより指定された処理を実施するために２５６までのＡＲＭネイティブ命令コードフラグメントが提供される。（２つのバイトコードが同じコードフラグメントを使用できる場合は２５６よりも少ないことがある）。バイトコード変換ハードウェア６は、典型的に、処理速度を高めるために多くの単純なＪａｖａバイトコードに対するハードウェアサポートを提供し、後述するように、デバッグ中やプリフェッチアボート等の他の状況において強制される場合を除き、ソフトウェア命令インタプリタ内の対応するコードフラグメントは決して使用されない。しかしながら、これらは典型的により単純かつ短いコードフラグメントであるため、それらを提供することにより被る追加メモリオーバヘッドは比較的小さい。さらに、この小さな追加メモリオーバヘッドはソフトウェア命令インタプリタの包括的性質およびバイトコード変換ハードウェアが存在しないまたはディセーブルされる状況において可能な全てのＪａｖａバイトコードに対処するその能力により十二分に補償される。
【００３６】
図２の各コードフラグメント２６は系列終端命令ＢＸＪにより終端されることが判る。図３に示すように、この系列終端命令ＢＸＪのアクションはデータ処理システム２の状態に応じて変動する。図３はソフトウェア命令インタプリタ内のコードフラグメント２６により実施される処理を非常に略形式で示すフロー図である。ステップ２８において、解釈されるＪａｖａバイトコードにより指定された操作が実施される。ステップ３０において、実行される次のＪａｖａバイトコードがバイトコードストリーム２２から読み出され、この次のＪａｖａバイトコードに対応するＪａｖａバイトコードストリーム２２内のバイトコードポインターがレジスタバンク８のレジスタ、すなわち、Ｒ１４内に格納される。したがって、図２のＪａｖａバイトコードＢＣ４に対しては、次のＪａｖａバイトコードはＢＣ５となりレジスタＲ１４にはＪａｖａバイトコードはＢＣ５のメモリ位置へのポインターがロードされる。
【００３７】
ステップ３２において、次のＪａｖａバイトコードＢＣ５に対応するポインターのテーブル２４内のポインターがポインターのテーブル２４から読み出されレジスタバンク８のレジスタ、すなわち、レジスタＲ１２内に格納される。
【００３８】
図３は別々に逐次実施されるステップ２８，３０および３２を示しているのが判る。しかしながら、公知のプログラミング技術に従って、ステップ３０および３２の処理はステップ２８の処理内に簡便にインターリーブしてステップ２８の処理内で浪費される処理機会（サイクル）を利用することができる。したがって、ステップ３０および３２の処理には比較的少ない実行速度オーバヘッドを与えることができる。
【００３９】
ステップ３４はオペランドとして指定されたレジスタＲ１４により系列終端命令ＢＸＪを実行する。
【００４０】
ステップ３４においてＢＸＪ命令を実行する前に、レジスタＲ１４内に格納されるＪａｖａバイトコードストリーム２２内の次のＪａｖａバイトコードへのポインターおよびレジスタＲ１２内に格納される次のＪａｖａバイトコードに対応するコードフラグメントへのポインターによりシステムの状態が設定されている。特定のレジスタの選択は変動することがあり、系列終端命令へのオペランドとしてどれも指定されないか、一方または両方が指定され、あるいはアーキテクチュアにより予め定められ規定される。
【００４１】
ステップ２８，３０，３２および３４はソフトウェアステップが支配的である。図３のステップ３４に続くステップはハードウェアステップが支配的であり別々の識別可能なプログラム命令無しで行われる。ステップ３６において、ハードウェアはバイトコード変換ハードウェア６がアクティブであるかどうかを検出する。それはバイトコード変換ハードウェア６の存在およびイネーブルメントに対するレジスタフラグ値を読み出してこれを行う。アクティブなバイトコード変換ハードウェア６の存在を決定するための他の機構も可能である。
【００４２】
バイトコード変換ハードウェア６が存在しイネーブルされておれば、処理はステップ３８に進み、そこで制御はバイトコード変換ハードウェア６がその次のバイトコードとして実行を試みなければならないバイトコードストリーム２２内のバイトコードへのバイトコードポインターを指定するレジスタＲ１４の内容と共にバイトコード変換ハードウェア６に渡される。次に、例示されたコードフラグメント２６のアクションが終止する。
【００４３】
あるいは、ステップ３６においてバイトコード変換ハードウェア６が無いまたはバイトコード変換ハードウェアがディセーブルされると決定されれば、処理はステップ４０に進みそこでネイティブＡＲＭ命令コード内の飛越しがなされて、レジスタＲ１２４内に格納されたアドレスによりポイントされるソフトウェア命令インタプリタ内のコードフラグメントの実行を開始する。したがって、次のコードフラグメントの迅速な実行が開始され処理速度が有利になる。
【００４４】
図４は特定のコードフラグメントをより詳細に示す。この特定の例は整数加算Ｊａｖａバイトコードであり、そのニューモニックはｉａｄｄである。
【００４５】
第１のＡＲＭネイティブ命令は１だけ増分されたレジスタＲ１４内のバイトコードポインターを使用して次のバイトコード値を読み出す（整数加算命令は後続するいかなるバイトコードオペランドも持たず、次のバイトコードは現在のバイトコードにすぐ続く）。レジスタＲ１４内のバイトコードポインターも増分された値により更新される。
【００４６】
第２および第３の命令は加算される２つの整数オペランド値をスタックから検索するように働く。
【００４７】
第４の命令はレジスタＲ０上でインターロックするレジスタにより浪費される処理サイクルを利用して、レジスタＲ４内に格納された次のバイトコードに対するコードフラグメントのアドレス値を検索しこのアドレスをレジスタＲ１２内に格納する。ベースポインターをポインターのテーブル２４の始めに格納するのにレジスタＲｅｘｃが使用される。
【００４８】
第５の命令はＪａｖａバイトコードにより指定された整数加算を実施する。
【００４９】
第６の命令はＪａｖａバイトコードの結果をスタックに格納し戻す。
【００５０】
最後の命令はオペランドＲ１２により指定された系列終端命令ＢＪＸである。レジスタＲ１２は、ソフトウェア解釈が必要であれば、次のＪａｖａバイトコードをソフトウェア解釈するのに必要なＡＲＭコードフラグメントのアドレスを格納する。ＢＸＪ命令の実行はイネーブルされたバイトコード変換ハードウェア６が存在するかどうかを決定する。存在すれば、制御は次のバイトコードアドレスを指定するレジスタＲ１４内に格納されたオペランドと共にこのバイトコード変換ハードウェア６に渡される。アクティブなバイトコード変換ハードウェア６が存在しなければ、レジスタＲ１２内のアドレス値によりポイントされる次のバイトコードに対するコードフラグメントの実行が開始される。
【００５１】
図５はバイトコード変換ハードウェア６が設けられていないことを除けば図１のそれと類似しているデータ処理システム４２を略示している。このシステムでは、フラグ２１は常にＡＲＭ命令が実行されていることを示し、ＢＸＪ命令によりＪａｖａバイトコード実行に入る試みは常にあたかもバイトコード変換ハードウェア６がディセーブルされたように処置され、フラグ２０は無視される。
【００５２】
図６はＪａｖａバイトコードの実行においてシステム４２により実施される処理のフロー図を示す。系列終端命令ＢＸＪが実施される時はハードウェアバイトコードサポートの可能性は決して無く、したがって、処理は常に次のＪａｖａバイトコードに対するコードフラグメントであるとしてＲ１２によりポイントされるコードフラグメントを実行する飛越しにより継続することを除けば、同じソフトウェアインタプリタコードが使用される点においてこれは図３の処理に類似している。
【００５３】
この場合、ソフトウェア命令インタプリタはＡＲＭネイティブ命令として提供されることが理解される。ソフトウェア命令インタプリタ（および他のサポートコード）はそれだけで独立したコンピュータプログラムプロダクトとして提供することができる。このコンピュータプログラムプロダクトはフロッピー（Ｒ）ディスクやＣＤ等の記録媒体として配布したり、ネットワークリンクを介してダイナミックにダウンロードすることができる。本発明が実際的によく適する埋込処理応用の状況では、ソフトウェア命令インタプリタはリードオンリーメモリ内のファームウェアまたは埋込システム内の他の非揮発性プログラム記憶装置として提供することができる。
【００５４】
図７はＪａｖａバイトコードとそれらが指定する処理操作間の関係を示す。図７から判るように、８ビットＪａｖａバイトコードは２５６の異なる可能なバイトコード値を与える。これらのＪａｖａバイトコードの最初の２０３はＪａｖａ標準内に指定された固定バインディング、前記したｉａｄｄ等の対応する処理操作を受ける。最後の２つのＪａｖａバイトコード、すなわち、２５４および２５５はインプリメンテーション定義されるものとしてＪａｖａ仮想マシン仕様に記述されている。したがって、Ｊａｖａインプリメンテーションはこれらのバイトコードに固定バインディングを自由に割り当てることができる。あるいは、Ｊａｖａインプリメンテーションはプログラマブルバインディングを有するものとしてこれらの処置を選択することができる。Ｊａｚｅｌｌｅはこれらのバイトコードに対する固定バインディングを指定する。バイトコード値２０３および２５３の間で、それらも含めて、プログラマブルバインディングはユーザが所望するように指定することができる。これらは、典型的に、実行時間中に分解されるクイックフォームバイトコードのような、バイトコードおよび処理操作間の媒体バインディングを提供するのに使用される（Ｔｈｅ  Ｊａｖａ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ，著者Ｔｉｍ  ＬｉｎｄｈｏｌｍおよびＦｒａｎｋ  Ｙｅｌｌｉｎ，出版者Ａｄｄｉｓｏｎ  Ｗｅｓｌｅｙ，ＩＳＢＮ  ０−２０１−６３４５２−Ｘ参照）。
【００５５】
図７から、ハードウェア加速解釈技術は固定バインディングに対処するのによく適しているが、これらの技術はプログラマブルバインディングに対処するのにあまり適さないことが理解される。全てのプログラマブルバインディングを、対応するコードフラグメントにより表わされる関連するバイトコードの解釈等の、ソフトウェア解釈技術を使用して処置することができるが、場合によっては性能臨界バイトコードとなることがあるものに対しては遅い。
【００５６】
図８はプログラマブル変換テーブルの一形式を示す。このプログラマブル変換テーブル１００はコンテントアドレサブルメモリの形状である。変換されるバイトコードがＣＡＭルックアップアレイ１０２に入力される。このアレイ１０２が一致するバイトコードエントリを含む場合には、出力される値を指定する対応する操作を生じるヒットが発生される、すなわち、
一致するバイトコードエントリがＣＡＭテーブル内にあれば、ハードウェアは操作指定コードを使用してハードウェア内で実施される操作を決定し、その操作を実施して次のバイトコードに移り、
一致するバイトコードエントリがＣＡＭテーブル内になければ、バイトコードは非ハードウェアサポートとして処置されそのコードフラグメントが呼び出される。
【００５７】
この例では、操作指定値は４ビット値でありヒットを生じるＣＡＭエントリはバイトコードｂｃ６に対応する。図７からお判りのように、このようなプログラム変換が行われる全てのバイトコードが“１”としての最上位２ビットを有し、したがって、バイトコードの最下位６ビットしかアレイ１０２に入力する必要がない。
【００５８】
本例のプログラマブル変換テーブル１００は８つのエントリを有する。存在するエントリ数はこのタスク専用としたいハードウェアリソース量に応じて変動することがある。ある例では４つのエントリしか提供されないことがあり、別の例では１０エントリが適切なことがある。また、可能な各プログラマブルバインディングバイトコード毎にエントリを提供することもできる。
【００５９】
利用可能なプログラマブルマッピングリソースが最初に最もクリティカルな変換で占められると、よりクリティカルではない変換がソフトウェア解釈されることがある。テーブルがオーバフローするとソフトウェアインタプリタにより必要な変換が捕捉され実施されるため、プログラマブル変換テーブルと組み合わせてソフトウェアインタプリタを提供することにより、どれだけ多くのテーブルエントリが利用可能かを知ることなくシステムの構成およびテーブルのプログラミングを行うことができる。
【００６０】
図９はプログラマブル変換テーブルの第２の例を示す。この例では、変換テーブルはランダムアクセスメモリの形で提供され、被変換バイトコードはデコーダ１０６に入力されそれはバイトコードを各々が操作指定コードを表わす４ビット語のＲＡＭアレイ１０８へのアドレスとして処理する。ここでは、操作指定コードはバイトコードに対して常に見つかる。その結果、このタイプのテーブルは一つの追加操作指定コードを使用し、それは“このバイトコードに対するコードフラグメントを呼び出す”を指定する。
【００６１】
図１０は図８の例の形状を有するプログラマブルマッピングハードウェアインタプリタの初期化および構成を示す略フロー図である。実際上、このフロー図に示されたアクションの異なる部分はソフトウェア初期化命令およびこれらの命令に応答するハードウェアによりそれぞれ実施される。
【００６２】
ステップ１１０において、存在する全てのテーブルエントリをクリヤしてテーブル内のトップエントリへのポインターを設定するように働くテーブル初期化命令が実行される。続いて、初期化コードを実行しコプロセッサレジスタロード等のプログラム命令を使用して変換テーブル内にマッピングをロードすることができる。これらのテーブルローディング命令の異なる形式は特定の状況および環境に応じて変動することができる。プログラマブルマッピングハードウェアインタプリタシステムはＪａｖａバイトコード等のプログラム命令値およびステップ１１２においてこれに関連づけられる操作値を受信することによりこれらの命令に応答する。ステップ１１４において、非サポート操作トラップハードウェアはプログラムされる操作値がそのプログラマブルマッピングハードウェアインタプリタによりサポートされるものであることをチェックする。異なるプログラマブルマッピングハードウェアインタプリタは異なる操作値セットをサポートすることができ、そのためそれ自体の特定のトラップハードウェアを提供することができる。例えば、特定のシステムが操作値０，１，２，３，４，５，６，７，８，１０をサポートするが９はサポートしないことを知っている場合には、トラップハードウェアは比較的単純とすることができる。ステップ１１４において、ハードウェア比較器は操作値が９の値に等しいかを比較して９が検出されたら処理をステップ１１６に向けることによりプログラミングを拒否することができる。
【００６３】
操作値がサポートされることをステップ１１４が示すものと仮定すると、ステップ１１８は既にプログラマブルマッピングテーブルの終りに達しているかどうかをチェックして決定する。プログラマブルマッピングテーブルが既に一杯であれば、新しいマッピングが追加されることなく処理は再びステップ１１６に進む。ハードウェア内にステップ１１８を提供することは、ハードウェアが単にオーバフローするエントリを拒否するだけでどれだけ多くのエントリを利用可能かの知識なしに、サポートコードがプログラマブルマッピングテーブルのプログラミングを試みられることを意味する。したがって、プログラマは最もクリティカルなマッピングをテーブルプログラミングの初めに配置してこれらが利用可能なスロットを占めることを保証しなければならない。サポートコードがどれだけ多くのプログラマブルスロットを利用可能であるかを知る必要性が回避されることは、単一セットのサポートコードが多数のプラットフォームで動作できることを意味する。
【００６４】
テーブルが空のエントリを有するものと仮定すると、ステップ１２０においてそのエントリに新しいマッピングが書き込まれステップ１２２においてテーブルポインターが進められる。
【００６５】
ステップ１６６において、システムはプログラマブルマッピングテーブル内にプログラミングされるさらに多くのプログラム命令値をテストする。ステップ１６６は典型的にサポートコードがシステムの初期化中により多くのマッピングをプログラムしようとするソフトウェアステップである。
【００６６】
図９に示すようにＲＡＭテーブルを初期化する場合には、下記の修正を条件に図１０に関して前記したプロセスに従うことができる。
ステップ１１０において、各エントリがいかなるバイトコードにも一致しないように図８のアレイ１０２を設定するのではなく、図９のアレイ１０８内の全てのテーブルを“このバイトコードに対するバイトコードフラグメントを呼び出す”に設定することによりテーブルがクリヤされる、
ステップ１１０において、初期化される変換テーブルポインターがない、
変換テーブルポインターがないため、ステップ１１８は存在しない、
ステップ１２０は“プログラム命令値により示されるテーブルに操作値を書き込む”、
変換テーブルポインターがないため、ステップ１２２は存在しない。
【００６７】
図１１はＪａｖａバイトコード解釈に使用することができる処理パイプラインの一部を示す。処理パイプライン１２４は変換ステージ１２６およびＪａｖａコードステージ１２８を含んでいる。後続ステージ１３０は特定のインプリメンテーションに応じて多様な異なる形式をとることができる。
【００６８】
Ｊａｖａバイトコードストリームからの語がスイングバァッファ１３２の２つの半部に交互にロードされる。通常、マルチプレクサ１３３はカレントバイトコードおよびそのオペランドをスイングバァッファ１３２から選択し、マルチプレクサ１３７を介してそれをラッチ１３４へ送る。パイプラインがフラッシュされているかまたは他の理由でスイングバァッファ１３２が空であれば、マルチプレクサ１３５はＪａｖａバイトコードストリームの着信語から直接正しいバイトコードを選択してラッチ１３４に送る。
【００６９】
バイトコードに対するデコードの最初のサイクルは、ラッチ１３４内のバイトコード上に作用する、第１サイクルデコーダ１４６により行われる。ハードウェアサポートバイトコードがオペランドを有するケースを考慮するために、さらにマルチプレクサがスイングバァッファ１３２からオペランドを選択して第１サイクルデコーダ１４６に送る。これらのマルチプレクサは図示されておらず、マルチプレクサ１３３に類似している。典型的に、第１サイクルデコーダ１４６はバイトコード入力に対するよりもオペランド入力に対するタイミング要求条件の方がより緩和されており、そのためマルチプレクサ１３５および１３７およびラッチ１３４により与えられるようなバイパス経路はオペランドには必要ない。
【００７０】
スイングバァッファ１３２がラッチ１３４内のバイトコードに対して不十分なオペランドバイトを含む場合には、十分なオペランドバイトが得られるまで第１サイクルデコーダ１４６は停止する。
【００７１】
第１サイクルデコーダ１４６の出力はマルチプレクサ１４２を介して後続パイプラインステージ１３０に通されるＡＲＭ命令（または、ＡＲＭ命令を表わすプロセッサ制御信号セット）である。第２の出力はマルチプレクサ１３９を介してラッチ１３８に書き込まれる操作指定コードである。操作指定コードはそれが単サイクルバイトコードであるかを指定するビット１４０を含んでいる。
【００７２】
次のサイクルで、後続バイトコードが第１サイクルデコーダ１４６により前記したようにデコードされる。ビット１４０が単サイクルバイトコードを示す場合には、そのバイトコードはデコードされて後続パイプラインステージ１３０を前記したように制御する。
【００７３】
ビット１４０がマルチサイクルバイトコードを示す場合には、第１サイクルデコーダ１４６は停止されマルチサイクルすなわち変換デコーダ１４４がラッチ１３８内の操作指定コードをデコードしてＡＲＭ命令（または、ＡＲＭ命令を表わすプロセッサ制御信号セット）を作り出し、マルチプレクサ１４２はそれを第１サイクルデコーダ１４６の対応する出力ではなく後続パイプラインステージ１３０に通す。マルチサイクルすなわち変換デコーダはもう一つの操作指定コードも作り出しそれは、やはり、第１サイクルデコーダ１４６の対応する出力ではなくマルチプレクサ１３９を介してラッチ１３８に書き込まれる。このもう一つの操作指定コードもそれがマルチサイクルバイトコードに対して作り出される最後のＡＲＭ命令であるかを指定するビット１４０を含んでいる。マルチサイクルすなわち変換デコーダ１４４は、前記したように、最後のＡＲＭ命令が作り出されていることをビット１４０が示すまでさらにＡＲＭ命令を発生し続け、そこで第１サイクルデコーダ１４６は終わって後続バイトコードに対する第１のＡＲＭ命令を作り出す。
【００７４】
前記したプロセスはラッチ１３４内のバイトコードを変換する必要がある場合には３つの方法で修正される。第１に、バイトコードはマルチプレクサ１３３によりスイングバァッファ１３２から抽出されかつバイトコード変換器１３６により変換されて、マルチプレクサ１３９を介してラッチ１３８に書き込まれる操作指定コードを作り出す。この操作指定コードはカレントバイトコードに対して最後のＡＲＭ命令が作り出されていないことを示すように設定されたビット１４０を有し、そのためマルチプレクサ１４２およびマルチプレクサ１３９は変換されたバイトコードの第１サイクルで第１サイクルデコーダ１４６の代わりにマルチサイクルすなわち変換デコーダ１４４の出力を選択する。
【００７５】
第２に、マルチサイクルすなわち変換デコーダ１４４は、変換を必要としないバイトコードに対するように第１サイクルの後でだけ発生するのではなく、後続パイプラインステージ１３０に通される全てのＡＲＭ命令およびラッチ１３８に書き戻される対応するさらに多くの操作指定コードを発生する。
【００７６】
第３に、バイトコードがマルチプレクサ１３５を介して直接ラッチ１３４に書き込まれ、そのためスイングバァッファ１３２内には存在せず前のサイクルでバイトコード変換器１３６により変換できていなければ、第１サイクルデコーダ１４６は再開して１サイクル停止すべきことをバイトコード変換器１３６に信号で知らせる。それにより、第１サイクルデコーダ１４６が停止を終える時に、ラッチ１３８は変換されたバイトコードに対して有効な操作指定コードを保持することが保証される。
【００７７】
バァッファされた命令は前もって変換され、所望により、パイプラインの残りに流れ込むことができるため、変換パイプラインステージの提供によりプログラマブル変換ステップが必要とする処理はパイプライン内に有効に隠されるすなわち畳み込まれることが図１１から判る。
【００７８】
図１１から、この実施例では、固定マッピングハードウェアインタプリタは主として第１サイクルデコーダ１４６および第１サイクルデコーダ１４６により第１サイクルデコーディングされているマルチサイクルバイトコードをデコードするモードで動作するマルチサイクルすなわち変換デコーダ１４４により形成されるものと考えられることが判る。この例では、プログラマブルマッピングハードウェアインタプリタはバイトコードトランスレータ１３６およびプログラマブルバイトコードの変換に続いて動作するマルチサイクルすなわち変換デコーダ１４４により形成されるものと考えることができる。固定マッピングハードウェアインタプリタおよびプログラマブルマッピングハードウェアインタプリタは広範な異なる方法で提供することができ、抽象的観点からそれらの異なる機能を保持しながら相当な共通ハードウェアを共有することができる。これらの異なる可能性は全て本技術に含まれる。
【００７９】
図１２は仮想メモリページ境界２０４を跨ぐ２つの３２ビット命令語２００，２０２を示す。これは１ｋＢページ境界とすることができ、他のページサイズも可能である。
【００８０】
第１の命令語２００は仮想メモリシステム内に適切にマッピングされる仮想メモリページ内にある。第２の命令語２０２は仮想メモリシステム内にマッピングされたこのステージではない仮想メモリページ内にある。したがって、命令語２００内にその第１のバイトを有し命令語２０２内にその第２のバイトを有する２バイト可変長命令２０６はその第２バイトに関連づけられたプリフェッチアボートを有する。例えば、命令語を並べた命令しかサポートしない従来のプリフェッチアボート処理機構はこの状況に対処できないことがあり、例えば、実際にアボートに導くその可変長命令語２０６の第２バイトを含む命令語２０２に集中するのではなく可変長命令２０６の第１バイトを含む命令語２００のフェッチングを調べて修理しようとすることがある。
【００８１】
図１３は図１２に示すタイプのプリフェッチアボートに対処する機構を含むＪａｖａバイトコードを処理するデータ処理システム内の命令パイプライン２０８の一部を示す図である。命令バァッファは各々が３２ビット命令語を格納する２つの命令語レジスタ２１０および２１２を含んでいる。Ｊａｖａバイトコードは各々が８ビット長であり、ゼロ以上のオペランド値を伴う。一群のマルチプレクサ２１４がデコードされるカレントＪａｖａバイトコードの第１バイトのアドレスを示すカレントＪａｖａバイトコードポインター位置に応じて命令語レジスタ２１０および２１２から適切なバイトを選択するように働く。
【００８２】
各命令語レジスタ２１０および２１２にはそれぞれ命令アドレスレジスタ２１６，２１８およびプリフェッチアボートフラグレジスタ２２０および２２２が関連づけられている。これらの関連づけられたレジスタは、それらが関連する命令語のアドレスおよびその命令語がメモリシステムからフェッチされた時にプリフェッチアボートが生じたかどうかをそれぞれ格納する。この情報は典型的にはパイプラインの下流でさらに必要とされるため、命令語自体と共にパイプラインに沿って通される。
【００８３】
マルチプレクサ２２４，２２６および２２８により入力バァッファ構成は、所望により、バイパスすることができる。このタイプの操作は前記されている。判り易くするために、命令パイプライン２０８は前記した命令パイプラインの全ての特徴は示していないことが理解される。同様に、前記した命令パイプラインは命令パイプライン２０８の全ての特徴は示していない。実際上、システムには２つの図解命令パイプラインに示された特徴の組合せを提供することができる。
【００８４】
命令パイプライン２０８のバイトコードデコーディングステージにおいて、バイトコードデコーダ２３０は少なくともマルチプレクサ２２４からのＪａｖａバイトコード、およびマルチプレクサ２２６および２２８からの１つまたは２つのオペランドバイトに応答し、パイプライン内のさらに多くのステージに通してデコードされたＪａｖａバイトコードに対応する処理を実施するためのマッピングされた命令または対応する制御信号を発生する。
【００８５】
図１２に示すタイプのプリフェッチアボートが発生していると、Ｊａｖａバイトコード自体は有効となるが、それに続くオペランド値は有効ではないことがあり、プリフェッチアボートがリペアされるないかぎり正しい操作は生じない。バイトコード例外発生器２３２はレジスタ２２０および２２２からのプリフェッチアボートフラグだけでなくレジスタ２１６および２１８からの命令語アドレスに応答して図１２に示すタイプの状況の発生を検出する。バイトコード例外発生器２３２はこのような状況を検出すると、バイトコードデコーダ２３０ではなくバイトコード例外発生器自体により発生される命令または制御信号を後続ステージに配布するようマルチプレクサ２３４に強制する。バイトコード例外発生器２３２はハードウェアがアボートされるＪａｖａバイトコードを解釈するのを許すのではなくそのＪａｖａバイトコードをエミュレートするＡＲＭ３２ビットコードフラグメントの実行をトリガーすることにより図１２のプリフェッチアボート状況の検出に応答する。したがって、プリフェッチアボートされた可変長Ｊａｖａ命令２０６自体は実行されず、３２ビットＡＲＭ命令系列により置換される。命令をエミュレートするのに使用されるＡＲＭ命令は一つ以上のオペランドバイトをロードする時にデータアボートされるものと思われ、これらのデータアボートはこれらのバイトが元々第２の命令語２０２の一部としてフェッチされる時にプリフェッチアボートが生じるのと同じ理由で生じ、ＡＲＭ３２ビットコードフラグメントの実行中にさらにプリフェッチおよびデータアボートが生じることもあり得る。これらのアボートは全てＡＲＭ命令実行中にに生じ、既存のアボート例外ハンドラルーチンにより正しく処理される。
【００８６】
このようにして、バイトコードのフェッチング時に生じたプリフェッチアボートは抑制される（すなわち、ＡＲＭコアには通されない）。替わりに、ＡＲＭ命令系列が実行されこれらのＡＲＭ命令により生じる任意のアボートが既存の機構を使用して処理され、問題のあったバイトコードを跨ぐ。バイトコードをアボートで置換するのに使用されたＡＲＭ命令のエミュレートを実行した後で、バイトコードの実行を再開することができる。
【００８７】
バイトコード自体がプリフェッチアボートを経験する場合には、プリフェッチアボートがマークされたＡＲＭ命令がＡＲＭパイプラインの残りに通される。それはパイプラインの実行ステージに達すると、プリフェッチアボート例外を生じさせそれはＡＲＭ命令上のプリフェッチアボートを処理する完全に標準的な方法である。
【００８８】
バイトコードがプリフェッチアボートを経験せずにその一つ以上のオペランドが経験する場合には、そのバイトコードに対するソフトウェアコードフラグメントが呼び出される。ＡＲＭパイプラインの残りに通されてコードフラグメントが呼び出されるようにするいかなるＡＲＭ命令もプリフェッチアボートでマークされず、パイプラインの実行ステージに達する時に正常に実行する。
【００８９】
図１２に示すタイプの状況を検出するためにバイトコード例外発生器２３２により使用されるタイプの論理式図１４に示す。“Ｈａｌｆ１”は現在第１の命令語（図１２における２００）を保持するのは図１３のスイングバァッファのいずれの半部かを示し（図１３にこれらのエレメント周りの破線で示すように、ブロック２１０，２１６および２２０は一方の半部を形成し、ブロック２１２，２１８，２２２は他方の半部を示す）、“Ｈａｌｆ２”はスイングバァッファの他方の半部を示し、それは第２の命令語（図１２の２０２）を保持する。ＰＡ（Ｈａｌｆ１）はブロック２２０および２２２のいずれのコンテンツがＨａｌｆ１内にあるかを意味するものとし、Ｈａｌｆ２についても同様とする。
【００９０】
すると、図１２に記述した状況のインジケータはＰＡ（Ｈａｌｆ１）は偽である、ＰＡ（Ｈａｌｆ２）は真であるとなり、バイトコードプラスそのオペランドが２つのスイングバァッファ半部間の境界を跨ぐ。（そこにマークされたページ境界があるという事実は、単純にそれが通常は２つのＰＡ（）値が異なることがあり得るというその要求条件であるためである）。
【００９１】
各スイングバァッファ半部が語を格納し、ハードウェアサポートバイトコードが最大２オペランドに制限されるような好ましい設計では、バイトコードプラスそのオペランドが境界を跨ぐかどうかを決定する公式は次のようになり、
（（オペランド数）＝１）ＡＮＤ（ｂｃａｄｄｒ［１：０］＝１１））
ＯＲ（（オペランド数）＝２）ＡＮＤ（ｂｃａｄｄｒ［１］＝１））
ここに、ｂｃａｄｄｒはバイトコードのアドレスである。これにより図１４に示す論理式を引出すことができる。
【００９２】
メモリページ境界の予め定められた距離内で開始する可変長命令等の、プリフェッチアボートを識別するための他の技術も使用することができる。
【００９３】
図１５はＪａｖａバイトコード解釈と関連づけられたサポートコードの構造を詳細に示す。これは前記した図と同様であるが、ここにはバイトコード例外イベントによりトリガーされるバイトコード例外処理コードフラグメントへのポインターが含まれている。したがって、各Ｊａｖａバイトコードはその操作エミュレートする関連づけられたＡＲＭコードフラグメントを有する。さらに、生じることがある各バイトコード例外はＡＲＭ例外処理コードの関連部を有する。図解するケースでは、バイトコード例外発生器２３２による前記したタイプのプリフェッチアボートの検出時にトリガーされるバイトコードプリフェッチアボート処理ルーチン２３６が提供される。このアボート処理コード２３６はそのトリガリングを生じる可変長命令の初めにバイトコードを識別するとにより作用し、次に、コードフラグメントの集まりの中のそのバイトコードに対する対応するエミュレーションコードフラグメントを呼び出す。
【００９４】
図１６はバイトコード例外発生器２３２および後続処理の操作を略示するフロー図である。ステップ２３８は図１４の式が真であるかどうかを確認するように働く。式が偽であればこのプロセスは終わる。
【００９５】
ステップ２３８が図１２に例示したタイプの状況を示しておれば、バイトコード例外発生器２３２により開始されるバイトコードプリフェッチアボート例外をトリガーするステップ２４６が実行される。バイトコード例外発生器２３２は単純にＡＲＭコードバイトコードプリフェッチアボートハンドラ２３６の実行をトリガーすることができる。アボートハンドラ２３６はステップ２４８において可変長命令を開始するバイトコードを識別し、次に、ステップ２５０においてその識別されたバイトコードをエミュレートするＡＲＭ命令のコードフラグメントの実行をトリガーするように働く。
【００９６】
プリフェッチアボートに対処する前記した機構は４つ以下のオペランド（すなわち、合計５バイト以下）がある状況に対してはうまく働き、そうでなければ、バイトコードおよびそのオペランドは第２のバァッファをオーバフローすることがある。実際上、ハードウェア加速機構を提供することが好ましいバイトコードは全て０，１または２オペランドを有し、残りのバイトコードは主としてその複雑さからいずれの場合もソフトウェアで処理される。
【００９７】
図１７は複数のユーザモードプロセス３０２，３０４，３０６および３０８を制御するオペレーティングシステム３００を示す。オペレーティングシステム３００はスーパバイザモードで動作し他のプロセス３０２，３０４，３０６および３０８はスーパバイザモードで動作するオペレーティングシステム３００よりも少ないシステムの構成制御パラメータへのアクセス権を有するユーザモードで動作する。
【００９８】
図１７に示すように、プロセス３０２および３０８はそれぞれ異なるＪａｖａ仮想マシンに関連する。これらの各Ｊａｖａ仮想マシン３０２，３０８がバイトコード変換マッピングデータ３１０，３１２および構成レジスタデータ３１４，３１６により形成されたそれ自体の構成データを有する。実際上、プロセス３０２，３０８の両方を実行するのにＪａｖａ加速ハードウェアの単一セットが提供されるが、これらの異なるプロセスがＪａｖａ加速ハードウェアを使用しているときは、各々がそれらの関連する構成データ３１０，３１２，３１４，３１６によりそれが構成されることを要求する。したがって、オペレーティングシステム３００がＪａｖａ加速ハードウェアを使用した前のプロセスとは異なるハードウェアを使用するプロセスに切り替える時は、Ｊａｖａ加速ハードウェアは再初期化および再構成しなければならない。オペレーティングシステム３００はＪａｖａ加速ハードウェア自体のこの再初期化および再構成を行わず、Ｊａｖａ加速ハードウェアに関連する構成無効インジケータを無効状態に設定することによりそれを行うべきことを示す。
【００９９】
図１８はネイティブ命令セット（例えば、ＡＲＭ命令セット）および関連するＪａｖａ加速ハードウェア３２２を有するプロセッサコア３２０を含むデータ処理システム３１８を略示している。メモリ３２４はＡＲＭ命令またはＪａｖａバイトコードの形とすることができるコンピュータプログラムコードを格納する。Ｊａｖａバイトコードの場合には、これらはＪａｖａ加速ハードウェア３２２に通され、それはＪａｖａバイトコードをプロセッサコア３２０により実行されるＡＲＭ命令（または、ＡＲＭ命令に対応する制御信号）のストリームに解釈するように働く。Ｊａｖａ加速ハードウェア３２２はＪａｖａバイトコードを実行したい各Ｊａｖａ仮想マシンに対するプログラミングを必要とするバイトコード変換テーブル３２６を含んでいる。さらに、構成データレジスタ３２８およびオペレーティングシステム制御レジスタ３３０がＪａｖａ加速ハードウェア３２２内にその構成を制御するために提供される。オペレーティングシステム制御レジスタ３３０内にはフラグＣＶの形の構成有効インジケータが含まれており、設定されるとＪａｖａ加速ハードウェア３２２の構成が有効であることを示し、設定されなければそれが無効であることを示す。
【０１００】
Ｊａｖａ加速ハードウェア３２２はＪａｖａ仮想バイトコードを実行しようとする時は構成有効インジケータに応答し、それが無効形式であるＪａｖａ加速ハードウェア３２２に対する構成データに対応する場合には構成無効例外をトリガーする。構成無効例外ハンドラはプリフェッチアボートハンドラに対して前記したのと同様に提供されるＡＲＭコードルーチンとすることができる。ハードウェア機構がＪａｖａ加速ハードウェア３２２内に設けられ、それは新しい有効構成データが実際に書き込まれる前に構成例外がトリガーされるため構成データは有効であることを示す形に構成有効インジケータを設定する。構成データが実際に書き込まれる前に構成有効インジケータをこのように設定するのは反直感的に見えるが、この方法には構成データの設定の途中でプロセスがスワップすることにより生じる問題を回避できるという著しい利点がある。次に、構成例外ルーチンは前記したようにバイトコード変換テーブルエントリおよび、所望により、任意他の構成データレジスタ値３２８を書き込むことにより対応するＪａｖａ仮想マシンに対する所要構成データを設定する。構成例外コードはＪａｖａ加速ハードウェア３２２により任意他のタスクが行われる前に構成データの書込みが完了されることを保証しなければならない。
【０１０１】
図１９はオペレーティングシステム３００の動作を略示している。ステップ３３２において、オペレーティングシステムは待機してプロセススイッチを検出する。プロセススイッチが検出されると、ステップ３３４は新しいプロセスがＪａｖａ加速ハードウェア３２２（前記したように、Ｊａｚｅｌｌｅとも呼ばれる）を使用するものかどうかを確認する。Ｊａｖａ加速ハードウェア３２２が使用されない場合には、処理はステップ３３６に進みそこでＪａｖａ加速ハードウェア３２２がディセーブルされた後でステップ３３９に進んで新しいプロセスに実行が転送される。Ｊａｖａ加速ハードウェア３２２が使用される場合には、処理はステップ３３８に進みそこで呼び出される新しいプロセスはオペレーティングシステム３００により記録されるＪａｖａ加速ハードウェア３２２の格納されたカレントオーナと同じであるかどうかが確認される。オーナが変わっていなければ（すなわち、新しいプロセスは実際上Ｊａｖａ加速ハードウェア３２２を使用した最後のプロセスと同じである）、処理はステップ３３７に進みそこでＪａｖａ加速ハードウェア３２２がイネーブルされた後でステップ３３９に進む。新しいプロセスが格納されたカレントオーナでなければ、処理はステップ３４０に進みそこで構成有効インジケータはＪａｖａ加速ハードウェア３２２の現在構成が有効ではないことを示すように設定される。これはこの構成変化を管理するオペレーティングシステム３００の責任限界であり、構成データの実際の更新はそれ自体の例外処理機構で動作するＪａｖａ加速ハードウェア３２２自体にタスクとして残される。
【０１０２】
ステップ３４０の後で、ステップ３４２は実行制御の転送がステップ３３７次ぎにステップ３３９に通される前に格納されたカレントオーナを新しいプロセスとして更新するように働く。
【０１０３】
図２０はＪａｖａ加速ハードウェア３２２により実施される操作を示す。ステップ３４４において、Ｊａｖａ加速ハードウェア３２２は待機して実行するバイトコードを受信する。バイトコードが受信されると、ハードウェアはステップ３４６を使用してＪａｖａ加速ハードウェア３２２の構成が有効であることを構成有効インジケータが示すことをチェックする。構成が有効であれば、処理はステップ３４８に進みそこで受信したバイトコードが実行される。
【０１０４】
構成が無効であれば、処理はステップ３５０に進みそこでＪａｖａ加速ハードウェア３２２はハードウェア機構を使用して構成が有効であることを示す構成有効インジケータを設定する。所望により、これは例外ハンドラ内のプログラム命令により行うこともできる。ステップ３５２は構成無効例外をトリガーするように働く。構成無効例外ハンドラはコードフラグメントへのポインターのテーブルおよび、この例のように、命令のソフトウェアエミュレーション、プリフェッチアボート（共に前記した）、または構成例外等の関連する各例外を処理する適切なコードフラグメントの組合せとして提供することができる。
【０１０５】
ステップ３５４は構成無効例外を構成しＪａｖａ加速ハードウェア３２２に必要な構成データを書き込むように働くＡＲＭコードを実行するように働く。このＡＲＭコードは他の構成レジスタ３３０だけでなくプログラマブル変換テーブル３２６をポピュレートするコプロセッサレジスタライト系列の形をとることができる。ステップ３５４の後で、ステップ３５６はオリジナルバイトコードの実行を再試行するようにＪａｖａバイトコードプログラム内にジャンプバックする。
【０１０６】
ステップ３５４またはステップ３５８中にプロセススイッチが生じる場合には、構成設定は他のプロセスにより無効とされ構成有効インジケータはオペレーティングシステムによりクリヤされること可能である。図２０の手順では、その結果３４４−３４６−３５０−３５２−３５４−ループを再び一回りすることになる、すなわち、再構成が初めから再試行される。バイトコードが最後に実際に実行される時に、構成は有効であることが保証される。
【０１０７】
図２１はさらに浮動小数点サブシステムを内蔵する図１に示すようなデータ処理システムを示す。非処理浮動小数点演算が生じる時は、浮動小数点サブシステムは非処理浮動小数点演算を処理する機構をＡＲＭコード内に提供する。
【０１０８】
このようなサブシステムの例は英国、ケンブリッジのＡＲＭ社からのＶＦＰソフトウェアエミュレータシステムである。ＶＦＰソフトウェアエミュレータシステムでは、浮動小数点演算を実施するのに利用可能なハードウェアがないため全ての浮動小数点演算が非処理浮動小数点演算として処理される。したがって、全ての浮動小数点演算がＡＲＭコード内のＶＦＰの行動をエミュレートするための提供された機構を使用して処理される。
【０１０９】
このようなシステムでは、非処理浮動小数点演算は精密である、すなわち、非処理浮動小数点演算の検出ポイントはその発生ポイントと同じである。
【０１１０】
図２２はさらに浮動小数点演算レジスタおよび非処理演算状態フラグを内蔵する図１および２１に示すようなデータ処理システムを示す。
【０１１１】
このようなサブシステムの例は英国、ケンブリッジのＡＲＭ社からのＶＦＰハードウェアシステムである。ＶＦＰハードウェアシステムでは、あるタイプの浮動小数点演算だけが非処理浮動小数点演算として処理され、残りはＶＦＰハードウェアにより処理される。
【０１１２】
非処理浮動小数点演算の対象となることがある演算のクラスには、下記のものが含まれる。
−ゼロによる割算
−ＮａＮを伴う演算
−無限大を伴う演算
−逆正規化された数を伴う演算
【０１１３】
このようなシステムでは非処理浮動小数点演算は不正確となることがある、すなわち、非処理浮動小数点演算の検出ポイントは必ずしもその発生ポイントと同じではない。
【０１１４】
通常はＡＲＭ命令ストリームの一部を形成するが図１に示すバイトコード変換器が存在する時はＡＲＭおよびＶＦＰ命令の組合せに変換されているバイトコードの結果となることがあるＶＦＰ命令の受諾をＶＦＰコプロセッサが拒否する時に非処理ＶＦＰ演算が生じる。
【０１１５】
非処理ＶＦＰ演算がＡＲＭ命令ストリームの一部として生じる場合には、非処理ＶＦＰ演算を処理するＡＲＭ機構は無定義命令例外を発生して無定義命令ベクトル上にインストールされた無定義命令ハンドラを実行することである。
【０１１６】
ＶＦＰソフトウェアエミュレータシステムの場合には、全てのＶＦＰ演算が非処理ＶＦＰ演算として処理されかつ同じＡＲＭ機構が適用され、無定義命令例外が発生され無定義命令ハンドラが実行される。
【０１１７】
非処理ＶＦＰ演算がＡＲＭ命令ストリームの一部として生じる場合には、無定義命令ハンドラは命令ストリームを調べることにより非処理ＶＦＰ演算を生じた命令は実際にＶＦＰ命令であって、他の種類の無定義命令ではないことを知ることができ、無定義命令ハンドラは特権モードで実行するため必要なコプロセッサ命令を配布して必要とする任意の内部状態をＶＦＰコプロセッサから抽出しソフトウェア内の必要な命令を完了することができる。無定義命令ハンドラはＡＲＭ命令ストリーム内で識別された命令およびＶＦＰの内部状態の両方を使用して非処理演算を処理する。
【０１１８】
多くのＶＦＰインプリメンテーションでは、非処理演算を生じた命令は非処理演算が検出された時に実行していた命令と同じではないことがある。非処理演算はより早期に発せられ、後続ＡＲＭ命令と並列に実行されたが非処理状態に遭遇した命令により生じていることがある。ＶＦＰは続くＶＦＰ命令の受諾を拒否し、ＶＦＰ無定義命令ハンドラを強制的に開始させることによりこれを信号で知らせ、それはＶＦＰに問いあわせて非処理演算のオリジナル原因を見つけることができる。
【０１１９】
ＪａｚｅｌｌｅがＶＦＰサブシステムを含むシステム内に一体化されると、下記の事柄が適用される。
−ＶＦＰ命令に直接対応する信号セットを使用してコア内に直接対応するＶＦＰ命令を発することによりＪａｖａ浮動小数点命令が変換される。
−非処理演算に遭遇するならばＶＦＰは非処理演算状態を信号で知らせることができる。
−Ｊａｚｅｌｌｅは非処理演算信号を遮断してコアに送られるのを防止し、ＡＲＭ命令ストリーム内のＶＦＰ命令が不正確な操作を信号で知らせている場合に生じる無定義命令ハンドラの実行を防止する。替わりに、ＪａｚｅｌｌｅＶＭサポートコードにより処理されるＪａｚｅｌｌｅＶＦＰ例外を発生する。
【０１２０】
このようなＪａｚｅｌｌｅＶＦＰ例外に遭遇すると、ＶＭサポートコードはＶＦＰ’ｎｏ−ｏｐｅｒａｔｉｏｎ’命令、すなわち、ＦＭＲＸＲｄ，ＦＰＳＣＲ命令等のＪａｚｅｌｌｅ状態を元のままとする任意のＶＦＰ命令を実行しなければならない。これによりＶＦＰハードウェアはサポートコードと同期し、ここでは非処理演算に遭遇したばかりとして設定すべき非処理演算状態と共に浮動小数点演算レジスタにより示された任意のＶＦＰ演算の操作が完了する。操作が完了すると、非処理演算状態フラグがクリヤされる。
【０１２１】
この方法は、その全体が本開示の一部としてここに組み入れられている２０００年１０月５日出願の同時係属出願英国特許出願第００２４４０２．０に記述されているように、Ｊａｚｅｌｌｅにより発せられる命令系列は再開可能である事実を利用する。本技術と共に前記参照に記載された技術を使用することにより、非処理演算を生じたＶＦＰ命令を発生させた命令を再開することができる。
【０１２２】
図２３は各Ｊａｖａ浮動小数点演算に対してＪａｖａバイトコード変換器により発せられる対応するＶＦＰ命令を示す。発せられるＶＦＰ命令しか図示されておらず、Ｊａｖａバイトコード変換器はＶＦＰ命令と共に追加ＡＲＭ命令を発することができる。Ｊａｚｅｌｌｅバイトコード変換器は浮動小数点値をロードまたはストアする追加ＶＦＰロードおよびストアを発することもできる。
【０１２３】
図２４は’ｄｃｍｐｇ’バイトコードが続く’ｄｍｕｌ’バイトコードからなるＪａｖａバイトコード系列に対してＪａｚｅｌｌｅバイトコード変換器により発せられる命令に対応する命令または信号系列を示す。例示された系列は二重精度レジスタＤ０，Ｄ１，およびＤ２が、それぞれ、Ｊａｖａ実行スタックの上から３番目、上から２番目および最上エレメントを保持しかつバイトコード系列の整数結果が整数レジスタＲ０内に置かれると予期される時に（ｄｍｕｌ，ｄｃｍｐｇ）バイトコード系列が実行される場合に生じる。
【０１２４】
図２５，２７，２９および３０は非処理浮動小数点演算が変換された命令系列内のさまざまなポイントで生じる時の演算系列を示す。図２５および２９は非処理浮動小数点演算がＦＭＵＬＤ命令により生じる時の演算系列を示す。図２７および３０は非処理浮動小数点演算がＦＣＭＰＤ命令により生じる時の演算系列を示す。図２５および２７は非処理浮動小数点演算のシグナリングが不正確である時の演算系列を示す。図２９および３０は非処理浮動小数点演算のシグナリングが正確である時の演算系列を示す。
【０１２５】
図からお判りのように、可能な４つのイベント系列がある。
１）図２５：不正確な非処理演算検出、非処理演算を信号で知らせるＪａｖａバイトコードは非処理演算を生じたものと同じではない。
２）図２７：不正確な非処理演算検出、非処理演算を信号で知らせるＪａｖａバイトコードはシステムが不正確な非処理演算検出を使用する事実にも拘らずそれを生じたものと同じである。それは第２のＪａｖａバイトコード’ｄｃｍｐｇ’が一つのＪａｖａバイトコードに対して２ＶＦＰを発し、その第１により非処理演算が生じ、その第２がそれを信号で知らせるためである。
３）図２９：正確な非処理演算検出、非処理演算を信号で知らせるＪａｖａバイトコードはそれを生じたものと同じである。
４）図３０：正確な非処理演算検出、非処理演算を信号で知らせるＪａｖａバイトコードはそれを生じたものと同じであるが、’ｄｃｍｐｇ’バイトコードを実行した結果発せられた２つのＶＦＰ命令のいずれが実際に非処理演算を生じそれを信号で知らせたかが判らない。
【０１２６】
前記した再開技術と本技術の組合せによりこれらの可能なイベント系列の全てを正確に処理することができる。
【０１２７】
図２６および２８は、それぞれ、図２５および２７に示す演算系列に対応する非処理演算が生じるすぐ後のポイントにおける浮動小数点演算レジスタおよび非処理演算状態フラグの状態を示す。
【０１２８】
全て２０００年１０月５日に出願された同時係属出願英国特許出願第００２４３９９．８号、第００２４４０２．０号、第００２４４０４．６号、および第００２４３９６．４号およびやはりＪａｖａバイトコード解釈システムについて記述している２０００年１１月２０日に出願された英国特許出願第００２８２４９．１号および２０００年１２月７日に出願された米国特許出願第０９／７３１，０６０号を参照されたい。これら同時係属出願の開示はその全体が本開示の一部としてここに組み入れられている。
【図面の簡単な説明】
【０１２９】
【図１】バイトコード変換ハードウェアを内蔵するデータ処理システムを示す図である。
【図２】バイトコードのソフトウェア命令解釈を示す略図である。
【図３】シーケンス終端命令で終わるソフトウェア命令インタプリタ内のコードフラグメントの動作を表わす略フロー図である。
【図４】バイトコードの替わりに実行されるコードフラグメントの例を示す図である。
【図５】ハードウェアバイトコード実行サポートを持たないデータ処理システムの例を示す図である。
【図６】図５のシステムで動作する時のソフトウェア命令インタプリタアクションを示すフロー図である。
【図７】Ｊａｖａバイトコードおよび処理操作間のマッピングを示す図である。
【図８】コンテンツアドレス可能メモリの形のプログラマブル変換テーブルを示す図である。
【図９】ランダムアクセスメモリの形のプログラマブル変換テーブルを示す図である。
【図１０】プログラマブル変換テーブルの初期化およびプログラミングを示す略フロー図である。
【図１１】Ｊａｖａバイトコード解釈を実施するシステム内の処理パイプラインの一部を示す略図である。
【図１２】２つの命令語および２つの仮想メモリページに跨る可変長命令を示す略図である。
【図１３】図１２に示すタイプのプリフェッチアボートに対処する機構を含むデータ処理システムパイプラインの一部を示す略図である。
【図１４】図１２に示すタイプのプリフェッチアボートをどのように検出することができるかを指定する一つの方法の論理式示す図である。
【図１５】アボート処理および命令エミュレーションに対するサポートコードの構成を示す略図である。
【図１６】可変長バイトコード命令のプリフェッチアボートに対処するために実施される処理を示す略フロー図である。
【図１７】オペレーティングシステムおよびそれにより制御されるさまざまなプロセス間の関係を示す図である。
【図１８】プロセッサコアおよびＪａｖａアクセラレータを含む処理システムを示す図である。
【図１９】Ｊａｖａアクセラレータの構成の制御におけるオペレーティングシステムの操作を示す略フロー図である。
【図２０】Ｊａｖａ加速機構の構成制御において使用しているＪａｃａ加速機構と共にＪａｖａ仮想マシンの操作を示す略フロー図である。
【図２１】図１のようにバイトコード変換ハードウェアを内蔵し、さらに、浮動小数点サブシステムを内蔵するデータ処理システムを示す図である。
【図２２】図１のようにバイトコード変換ハードウェアを内蔵しかつ図２のように浮動小数点サブシステムを内蔵し、さらに、浮動小数点演算レジスタおよび非処理操作状態フラグを内蔵するデータ処理システムを示す図である。
【図２３】Ｊａｖａ浮動小数点命令に対して発生されたＡＲＭ浮動小数点命令を示す図である。
【図２４】Ｊａｖａ‘ｄｍｕｌ’および‘ｄｃｍｐｇ’命令に対してＪａｖａ加速ハードウェアにより発生されるＡＲＭ命令系列を示す図である。
【図２５】Ｊａｖａ‘ｄｍｕｌ’命令に対してＪａｖａ加速ハードウェアにより発生されたＦＣＭＰＤ命令の実行により非処理浮動小数点演算が生じる‘ｄｃｍｐｇ’命令が続く‘ｄｍｕｌ’命令の実行時の演算系列であって、図２２に対応する不正確な非処理演算検出を使用するシステムに対する演算系列を示す図である。
【図２６】図２５のＦＭＵＬＤ命令を実行した後の浮動小数点演算レジスタおよび非処理操作状態フラグの状態を示す図である。
【図２７】Ｊａｖａ‘ｄｃｍｐｇ’命令に対してＪａｖａ加速ハードウェアにより発生されたＦＣＭＰＤ命令の実行により非処理浮動小数点演算が生じる‘ｄｃｍｐｇ’命令が続く‘ｄｍｕｌ’命令の実行時の演算系列であって、図２２に対応する不正確な非処理演算検出を使用するシステムに対する演算系列を示す図である。
【図２８】図２７のＦＣＭＰＤ命令の実行後の浮動小数点レジスタおよび非処理演算状態フラグの状態を示す図である。
【図２９】Ｊａｖａ‘ｄｍｕｌ’命令に対してＪａｖａ加速ハードウェアにより発生されたＦＭＵＬＤ命令の実行により非処理浮動小数点演算が生じる‘ｄｃｍｐｇ’命令が続く‘ｄｍｕｌ’命令実行時の演算系列であって、図２１に対応する正確な非処理演算検出を使用するシステムに対する演算系列を示す図である。
【図３０】Ｊａｖａ‘ｄｃｍｐｇ’命令に対してＪａｖａ加速ハードウェアにより発生されたＦＣＭＰＤ命令の実行により非処理浮動小数点演算が生じる‘ｄｃｍｐｇ’命令が続く‘ｄｍｕｌ’命令実行時の演算系列であって、図２１に対応する正確な非処理演算検出を使用するシステムに対する演算系列を示す図である。
【図１】
2004538556.tif 000003
【図２】
2004538556.tif 000004
【図３】
2004538556.tif 000005
【図４】
2004538556.tif 000006
【図５】
2004538556.tif 000007
【図６】
2004538556.tif 000008
【図７】
2004538556.tif 000009
【図８】
2004538556.tif 000010
【図９】
2004538556.tif 000011
【図１０】
2004538556.tif 000012
【図１１】
2004538556.tif 000013
【図１２】
2004538556.tif 000014
【図１３】
2004538556.tif 000015
【図１４】
2004538556.tif 000016
【図１５】
2004538556.tif 000017
【図１６】
2004538556.tif 000018
【図１７】
2004538556.tif 000019
【図１８】
2004538556.tif 000020
【図１９】
2004538556.tif 000021
【図２０】
2004538556.tif 000022
【図２１】
2004538556.tif 000023
【図２２】
2004538556.tif 000024
【図２３】
2004538556.tif 000025
【図２４】
2004538556.tif 000026
【図２５】
2004538556.tif 000027
【図２６】
2004538556.tif 000028
【図２７】
2004538556.tif 000029
【図２８】
2004538556.tif 000030
【図２９】
2004538556.tif 000031
【図３０】
2004538556.tif 000032
【国際公開パンフレット】
2004538556.tif 000033
2004538556.tif 000034
2004538556.tif 000035
2004538556.tif 000036
2004538556.tif 000037
2004538556.tif 000038
2004538556.tif 000039
2004538556.tif 000040
2004538556.tif 000041
2004538556.tif 000042
2004538556.tif 000043
2004538556.tif 000044
2004538556.tif 000045
2004538556.tif 000046
2004538556.tif 000047
2004538556.tif 000048
2004538556.tif 000049
2004538556.tif 000050
2004538556.tif 000051
2004538556.tif 000052
2004538556.tif 000053
2004538556.tif 000054
2004538556.tif 000055
2004538556.tif 000056
2004538556.tif 000057
2004538556.tif 000058
2004538556.tif 000059
2004538556.tif 000060
2004538556.tif 000061
2004538556.tif 000062
2004538556.tif 000063
2004538556.tif 000064
2004538556.tif 000065
2004538556.tif 000066
2004538556.tif 000067
2004538556.tif 000068
2004538556.tif 000069
2004538556.tif 000070
2004538556.tif 000071
2004538556.tif 000072
2004538556.tif 000073
2004538556.tif 000074
2004538556.tif 000075
2004538556.tif 000076
2004538556.tif 000077
2004538556.tif 000078
2004538556.tif 000079
2004538556.tif 000080
2004538556.tif 000081
2004538556.tif 000082
2004538556.tif 000083
2004538556.tif 000084
2004538556.tif 000085
2004538556.tif 000086
2004538556.tif 000087
2004538556.tif 000088
2004538556.tif 000089
2004538556.tif 000090
2004538556.tif 000091
2004538556.tif 000092
2004538556.tif 000093
2004538556.tif 000094
2004538556.tif 000095
2004538556.tif 000096
2004538556.tif 000097
2004538556.tif 000098
2004538556.tif 000099
【国際公開パンフレット（コレクトバージョン）】
2004538556.tif 000100
【国際調査報告】
2004538556.tif 000101
2004538556.tif 000102
2004538556.tif 000103