JP2556870B2 - データ処理装置 - Google Patents
データ処理装置Info
- Publication number
- JP2556870B2 JP2556870B2 JP62250216A JP25021687A JP2556870B2 JP 2556870 B2 JP2556870 B2 JP 2556870B2 JP 62250216 A JP62250216 A JP 62250216A JP 25021687 A JP25021687 A JP 25021687A JP 2556870 B2 JP2556870 B2 JP 2556870B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- bit
- flag
- dest
- size
- 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
Links
Description
込み処理の例外処理および内部割り込み命令であるトラ
ップ命令を統合して行うデータ処理装置を提案するもの
である。 [従来技術] 従来、割り込み処理機構、例外処理機構および内部割
り込み命令処理機構のようなEIT処理機構を備えたデー
タ処理装置においては、EIT処理の要求が発生し、それ
が受け付けられてEIT処理を起動した時に内部状態を示
す情報を外部記憶装置に退避した後、あらかじめデータ
処理装置の機能として定められている内部状態変数の値
に内部のレジスタ値を自動的に書換えて処理を行ってい
た。第388図に従来のEIT処理起動方法のフローチャート
を示す。第388図の1007でEIT処理要求が受け付けられる
と、1008でデータ処理装置内でEIT処理ハンドラの先頭
アドレスが格納されている外部記憶装置のアドレスが生
成され、1009でEIT処理ハンドラの先頭アドレスを読み
込むと共にデータ処理装置の内部状態を示すデータを格
納するプログラムステータスワード(以後PSWと記す)
がデータ処理装置においてEIT処理用のあらかじめ定め
られている値に更新される。例えば、外部割り込みが受
け付けられた時など、その受け付けられた外部割り込み
より高い優先度の外部割り込みの受付をそのEIT処理が
終了するまで禁止するような目的でPSW中のEIT処理の受
付優先度を示す変数を自動的に書き換える処理を行う。
次に、第388図中の1010でプロセッサ情報のスタックへ
退避を行った後1011でそのEITの内容に対してあらかじ
めプログラムされているEIT処理ハンドラを起動する。 [発明が解決しようとする問題点] しかしこの方式では、EIT処理ハンドラを起動すると
きのデータ処理装置の内部状態が一意的に定まっている
のでプログラム作成者にとって制約が大きく、特に多重
にEIT処理を行わせるような時のデータ処理装置におけ
る状態設定がプログラム作成者にとって困難であった。
即ち前述した如く従来はEIT処理ハンドラを起動する
際、データ処理装置によって予め定まった内部状態のも
とでしか行うことができず、プログラム作成者にとって
1つのプログラム作成上の制約となっていた。また、プ
ログラム作成者はEIT処理ハンドラ起動時のデータ処理
装置の内部状態を十分認識しなければならず、場合によ
っては内部状態変数を自ら設定し直す必要もあり、処理
が煩雑であった。 本発明におけるデータ処理装置は上記のような問題を
解決すべくなされたものであって、EIT処理が起動され
て外部の記憶装置よりEIT処理ハンドラの先頭アドレス
を読み込むとき、同時に通常PSWに格納されているデー
タ処理装置の内部状態変数のいくつかも読み込むように
し、それらの情報をもとにEIT処理ハンドラ起動時のデ
ータ処理装置の内部状態を設定できるようにし、また、
同時に複数のEIT処理要求が発生した場合、EIT処理の内
容を判断し、その処理の優先度にもとづく処理順序を決
定する多重EIT処理手段を備えると共に1つのEIT処理ハ
ンドラから復帰した時、その後のEIT処理受付条件を特
別扱いする手段とを持たせるようにして、プログラム作
成を容易にしたデータ処理装置を提供することを目的と
する。 [問題点を解決するための手段] 本発明に係るデータ処理装置は、 複数の命令からなるプログラムを処理するデータ処理
装置において、各命令処理の境界で、その外部から割り
込み要求信号を受けて割り込み処理を検出する手段と、 命令の例外事象を検出する手段と、 内部割り込み命令の実行であるトラップ処理を検出す
る手段とを備え、 上記3種類の処理のいずれか1つに分類される複数の
EIT処理がそれぞれ固有の優先度及び処理方法を持ち、 上記優先度に応じて検出されたEITのうちいずれのEIT
処理を起動するかを選択する手段と、 上記選択されたEIT処理が起動された時点の状態であ
り、EIT処理起動時に書換え対象となる第1の情報群を
含む内部状態を外部の記憶装置に格納する手段と、 上記選択されたEIT処理に対応する一連の処理を実行
すべきEIT処理ハンドラの先頭番地が格納されている上
記外部記憶装置の番地を上記選択されたEIT処理各々に
ついて1対1に生成する手段とを有し、 更に上記生成された外部記憶装置の番地に、上記EIT
処理ハンドラの先頭番地とともに上記EIT処理ハンドラ
の実行開始時の新たな内部状態の一部又は全部となるべ
き候補である第2の情報群を、上記選択されたEIT処理
の一部又は全部の各々について1対1に格納してあるこ
とを特徴とする。 [作用] 本発明におけるデータ処理装置ではEIT処理ハンドラ
の先頭アドレスと共にデータ処理装置の内部状態変数も
外部の記憶装置から読み込むことができるので、各EIT
処理に対してプログラム作成者はあらかじめEIT処理ハ
ンドラの先頭アドレスと共に各EIT処理を行うときのデ
ータ処理装置の内部状態変数を1対1に書き込んでおく
ことによって各EIT処理個別にデータ処理装置の内部状
態等をプログラムすることができる。またこの内部状態
変数がEIT処理ハンドラの先頭アドレスと隣接する位置
にあり、EIT処理時に自動的に読み込まれるので、EIT処
理のたびに内部状態変数を書き換える指定をプログラム
作成者は個々にする必要がない。またこの機能により格
納する内部状態変数の中にEIT処理の優先度の指定情報
を含めておくことにより多重にEIT処理が発生したよう
なとき、優先度の高いEIT処理によって優先度の低いEIT
処理の起動を禁止することができる。上記のようにプロ
グラム作成者にとって容易に幅広い処理の指定をするこ
とができる。また、EIT処理後にEIT処理の検出処理を特
別扱いする機能を備えることによって、例外処理により
シングルステップ実行をするようなとき、同一EIT処理
が繰り返して発生し、命令の実行が進まないような状態
を回避することができる。 [実施例] 第389図に本発明の一実施例であるデータ処理装置に
おけるEIT処理起動方法のフローチャートを示す。まず1
001でEIT処理の要求が受け付けられると、1002で受け付
けられたEIT処理の内容に応じてEITベクトル番号が生成
され、そのEITベクトル番号を8倍した値にEIT処理ハン
ドラが格納されているEITテーブルの基底アドレス値(E
ITVTB)を加えて、EIT処理ハンドラの先頭アドレスおよ
びPSWの一部(以後EITVTEと記す)が格納されている外
部記憶装置のアドレスが生成される。1003でそのアドレ
スのデータであるEITVTEが読み込まれ、1004でEIT処理
発生時のPSWの値と一部比較され更新される。更新され
たPSWの値で指定されたデータ処理装置の内部状態のも
とで、プロセッサ情報のスタック退避(1005)とEIT処
理ハンドラの起動(1006)が行われる。 第390図に本発明の一実施例であるEITVTEのフォーマ
ットを示す。第390図で示すEITVTEは8バイト構成にな
っており、そのうち4バイトがEIT処理ハンドラの先頭
アドレスであるVPC(1025)の値を、2バイトがPSWの一
部を指定するようになっており、残りの2バイトは自由
度と拡張性を考慮してあけてある。図390においてVS(1
020)はEIT処理ハンドラ起動時のスタックポインタ使用
モードの指定用の1ビットのデータ、VA(1021)はEIT
処理ハンドラ起動時のコンテキストのデータサイズが32
ビットか64ビットかを示す1ビットのデータ、VAT(102
2)はEIT処理ハンドラ起動時のアドレス変換モードの指
定を示す2ビットのデータ、VD(1023)はEIT処理ハン
ドラ起動時のデバッグモードの有無を示す1ビットのデ
ータ、VIMASK(1024)はEIT処理ハンドラ起動時の割り
込み受付レベルの指定を行う4ビットのデータである。 EIT処理起動時にPSW中のこれら5つのフィールドが更
新可能である。またこれらのフィールドは単純に更新す
るのではなく、一部のフィールドではEITVTE中の値とEI
T検出時の値を比較してから更新するかどうかを判断す
ることもできる。例えば、割り込み受付レベル指定フィ
ールドは、外部割り込み以外の時はEITVTE中の値と更新
前の値のレベルが高い(値が小さい)方が新しい値とな
り、外部割り込みでは発生した外部割り込みの優先度と
EITVTE中のレベルが高い(値が小さい)方が新しい値と
なる。 第391図は本発明のデータ処理装置においてEIT処理が
起動されたときスタックポインタの指す外部記憶装置に
退避されるデータ処理装置の内部状態を示す情報群の一
実施例を示したものである。図中1026はEIT処理が起動
された時点のデータ処理装置のPSW、1027はEIT処理の種
類に応じたスタックフォーマットの種類を示す1バイト
のデータ、1028はEIT処理の種類を示す1バイトのデー
タ、1029はEITベクトル番号を示す10ビットのデータ、1
030はEIT処理が起動された時点のデータ処理装置のPCの
値を格納する4バイトの領域、1031はEIT処理の種類に
応じたいろいろな追加情報を格納する数バイトの領域を
それぞれ示す。 第392図に本発明の一実施例であるデータ処理装置に
おけるEIT処理の種類に応じたスタックフォーマットを
示す。図中1032はフォーマット0の、1033はフォーマッ
ト1の、1034はフォーマット2の、1035はフォーマット
3のそれぞれEIT処理におけるスタックフォーマットを
示す。本実施例では各スタックフォーマットにおいて追
加情報の内容が異なっている。 第393図に本発明の一実施例であるデータ処理装置に
おいて多重EIT処理を行ったときの最終的に更新された
プログラムカウンタとPSW及び形成されるタックフレー
ムを示したものである。第393図においては内部割り込
み命令であるトラップ命令(TRAP)と外部割り込み要求
(EI)が多重に発生した例を示す。第393図の例におけ
るデータ処理装置ではトラップ命令の方が外部割り込み
要求よりも優先度の高いEIT処理なので、まずトラップ
命令に対するEIT処理を起動し、その後外部割り込みに
対するEIT処理を起動する。従って上記多重EIT処理受付
後、1036のPCには外部割り込みに対するEIT処理ハンド
ラの先頭アドレスが取り込まれ、1037のPSWには外部割
り込み処理において取り込まれるEITVTEによって比較、
更新された値が書き込まれる。また、上記多重EIT処理
によって形成されるスタックフレームについて最初に格
納される内容、すなわち高いアドレスのほうに格納され
る内容から説明していく。まず、1044にはトラップ命令
が発生した時点のPC値(EXPC)を、1043にはトラップ命
令の次の命令のPC値を、1042にはトラップ命令の図391
に示す1027、1028、1029に相当するEIT処理情報を、104
1にはトラップ命令実行前のPSWの値を、1040にはトラッ
プ命令に対するEIT処理ハンドラの先頭アドレスを、103
9には外部割り込みのEIT処理情報を、1038にはトラップ
命令のEITVTEによって比較、設定されたPSWの値をそれ
ぞれ格納していく。上記のように格納することによっ
て、EIT処理ハンドラが起動されたとき、まず外部割り
込みに対するEIT処理ハンドラがついでそのスタックフ
レームの情報からトラップ命令に対するEIT処理ハンド
ラが起動され、多重EITが処理できる。 以下本発明のさらに詳しい実施例であるデータ処理装
置について説明する。説明は長大であるので目次を付
し、また詳細な説明を必要とする部分は、付録の形で記
載した。EITに関することは特に付録9で多く述べられ
ている。 目次 1.本発明装置の特徴 1−1.基本設計思想 1−2.0S向きアーキテクチャ 1−3.チューニングされた命令セット 1−4.コンパイラ向きの命令セット 2.本発明装置32と本発明装置64 3.本発明装置仕様のクラス分け 4.レジスタセット 5.データタイプ 5-1.ビット 5-2.ビットフィールド 5-3.整数 5-4.浮動小数 5-5.10進数 5-6.ストリング 5-7.キュー 6.命令フォーマット 6-1.2オペランド短縮形 6-1-1.レジスタ−メモリ間(S-format,L-format) 6-1-2.レジスタ−レジスタ間(R-format) 6-1-3.リテラル−メモリ間(Q-format) 6-1-4.イミディエート−メモリ間(I-format) 6-2.1オペランド一般形(G1-format) 6-3.2オペランド一般形 6-3-1.第一オペランドはメモリ読みだし(G-format) 6-3-2.第一オペランドは8ビットイミディエート(E-fo
rmat) 6-3-3.第一オペランドはアドレス計算(GA-format) 6-3-4.その他の2オペランド命令 6-4.ショートブランチ 6-5.その他 7.アドレッシングモード 7-1.Pビット 7-2.フォーマット中で使われる記号 7-3.レジスタ直接 7-4.レジスタ間接 7-5.レジスタ相対間接 7-6.イミディエート 7-7.アブソリュート 7-8.PC相対間接 7-9.スタックポップ 7-10.スタックプッシュ 7-11.レジスタ相対付加モード 7-12.PC相対付加モード 7-13.絶対付加モード 7-14.FP相対間接 7-15.SP相対間接 7-16.付加モードのフォーマット 7-17.付加モード仕様のレベル 8.インプリメント関連事項 8-1.仮想記憶のサポート 8-2.プログラムによる命令の書き換え 9.EIT処理 10.PSWの構成 10-1.PSSの構成 10-2.PSHの構成 10-3.フラグの変化 11.命令セットの記述について 11-1.記述形式の概要 11-2.命令ビットパターンとアセンブラ表記 11-3.フィールド名 11-4.オペランドフィールド名 11-5.アドレッシングモードに関する制限 11-6.解説に関する注意 12.本発明装置の命令セット 12-1.データの転送命令 12-2.比較、テスト命令 12-3.算術演算命令 12-4.論理演算命令 12-5.シフト命令 12-6.ビット操作命令 12-7.固定長ビットフィールド操作命令 12-8.任意長ビットフィールド操作命令 12-9.10進演算命令 12-10.ストリング命令 12-11.キュー命令 12-12.ジャンプ命令 12-13.マルチプロセッサ用の命令 12-14.制御空間、物理空間操作命令 12-15.OS関連命令 12-16.MUU関連命令 付録1.本発明装置命令セットレファレンス 付録2.本発明装置のアセンブラ表記について 付録3.本発明装置メモリ管理方式概要 付録4.本発明装置のフラグ変化 付録5.異種サイズ間の演算について 付録6.高級言語向きサブルーチンコール 付録7.制御レジスタと制御空間 付録8.本発明装置のCTXB 付録9.本発明装置のEIT処理 付録10.本発明装置の命令セットパターン 付録11.高機能命令の詳細仕様と終了時のレジスタ値 付録12.オペランドが干渉した場合の動作 付録13.キャッシュやTLBの整合性確保について 1.本発明装置の特徴 1-1.基本設計思想 ・本発明装置はRISCではない。基本命令の高速実行を第
一目標とし、さらに高機能命令を追加した。 ・32ビット版の本発明装置32と64ビット版の本発明装置
64を同時に設計し、32ビット版と64ビット版のチップを
シリーズ化した。したがって、64ビットデータ、64ビッ
トアドレッシングへの拡張が始めから考慮されている。 ・OSと込みで開発し、リアルタイムOSであるITRON(Ind
ustorial-TRON)とワークステーション用のOSであるBTR
ON(Business-TRON)を高速で実行することを目指し
た。本発明装置はTRON<<L1R>>仕様を満たし、特に
実記憶環境での高速処理に重点を置く。 ・将来のASIC LSIの核となるマイクロプロセッサとす
る。 1-2.OS向きアーキテクチャ ・ビットマップ操作サポート命令 BTRONで必要となるビットマップの移動、演算を行な
う命令 ・コンテキストスイッチ命令 ITRONにおいて高速のタスク切り替えを行なうための
命令 ・キュー操作命令 ITRONのレディキュー、ウエイトキューの操作を行な
う命令 ・2レベルのリング保護によるメモリ管理 (将来の拡張用にさらに2レベルのリングを用意して
いる。) 1-3.チューニングされた命令セット ・頻度の高い命令、アドレッシングモードが短い命令と
なるようにチューニング レジスタ間演算、リテラル演算の命令長を短縮 1-4.コンパイラ向きの命令セット ・直交化された命令セット ・データの保持、アドレスの保持、インデクス値の保持
といった各種の目的に使用できる16本の汎用レジスタ ・強力なアドレッシングモード 付加モードにより、任意段数のインデクス加算と間接
参照が可能。 ・異なるデータサイズ間での演算が可能 ソースオペランドとデスティネーションオペランドの
サイズを別々に指定可能。 ・高級言語向き高機能ジャンプ命令 2.本発明装置32と本発明装置64 本発明装置では、32ビット版の本発明装置32と64ビット
版の本発明装置64をシリーズ化して扱っており、64ビッ
ト版へ拡張が始めから考慮されているのが大きな特徴で
ある。本発明装置64では、64ビットのリニアアドレスの
空間が提供される。また、本発明装置64では、本発明装
置32で扱うデータタイプに加えて、64ビット整数を扱う
ことができる。 本発明装置64での32ビット/64ビット切り替え方法は次
のようになっている。 ・オペランドのデータサイズについて 各命令、各オペランド毎に存在するサイズ指定ビットに
より、命令単位、オペランド単位で32ビット/64ビット
を選択する。データサイズの場合は、32ビット、64ビッ
トのほかに8ビット、16ビットも利用できるので、4つ
のサイズの選択を2ビットのフィールドで指定する。 本発明装置32では、64ビットデータを扱わず、64ビット
のデータサイズを指定した命令はエラーとする。 ・ポインタのサイズについて 通常は本発明装置32で32ビットポインタ、本発明装置64
で64ビットポインタを使用するが、本発明装置64で本発
明装置32用のオブジェクトコードを実行するため、本発
明装置64にはポインタサイズを32ビットにするモードを
設ける。このモードはPSW中で指定されるので、コンテ
キスト(プロセスやタスク)単位で32ビット用のプログ
ラムと64ビット用のプログラムを混在させることは可能
である。 このほか、64ビットアドレッシングを行なうための拡張
用ビットとして、メモリアクセスを伴なうオペランド毎
に「Pビット」と呼ばれる予約ビットが設けられてい
る。 ポインタサイズの32ビット/64ビット切り替えを命令単
位とせず、モードにしたのは、次のような理由による。 ポインタの場合、異種のサイズのものを混在させること
は本質的に無理がある。というのは、ポインタというの
は場所を区別するものであるため、一つでも64ビットの
ものがあれば、全体を64ビットのポインタにしないと区
別できないからである。したがって、32ビットポインタ
と64ビットポインタを命令毎に切り替え、混在できるよ
うにしたとしても、大部分はコンテキスト単位で同じ指
定を繰り返すだけになり、ビット割り当てとしては効率
の悪いものになる。そのような状況では、モードの方が
適当である。 モードを使って32/64を切り替える場合、モードをいつ
設定するか、本発明装置32と本発明装置64の互換性が大
丈夫かといった疑問が生ずるかもしれない。しかし、デ
フォルトが32ビットポインタとなるようにしておき、64
ビットアドレスを使用する時にモード変更するという形
態にすれば、本発明装置64でも本発明装置32用のプログ
ラムをそのまま走らせることができる。また、32ビット
ポインタと64ビットポインタの切り替えをモードではな
く命令単位にしたとしても、OSがスタックをどこに設定
するか、システムコールのパラメータが32ビット/64ビ
ットのどららか、といったことを判断するために、OSは
各コンテキストが32ビットか64ビットかということを認
識しておく必要がある。その場合には、(スタックに退
避された)PSW中のモードを見て32ビット/64ビットを判
断できる方が便利なことがある。 3.本発明装置仕様のクラス分け 本発明装置では、64ビット版への拡張、シリーズ化、多
様な用途へ適応、などといった要求に対応するため、イ
ンプリメントするかどうかオプションとなっている機能
がある。このような「オプション機能」の位置付けを明
確にするため、本発明装置の仕様を次のようにクラス分
けする。 <<L0>>仕様(Level 0) 本発明装置として必ず満たさなければならない仕様であ
る。 <<L0>>仕様の例は、ユーザプログラムから見たプロ
グラミングモデル(ISPの大部分、汎用レジスタ、PS
H)、機械語のビットパターンなどである。 仕様書中では、特に何も書いていない部分が<<L0>>
仕様となる。 <<L1>>仕様(Level 1) インプリメントしておくのが原則であるが、特に用途の
限定された軽い仕様のプロセッサを造りたい場合には、
必ずしもインプリメントしなくてもよい仕様である。 <<L1>>仕様になるのは、ストリング命令、付加モー
ド、キュー操作命令、ビットマップ命令といった高機能
命令などであるが具体的にどの命令を<<L1>>仕様と
するかは別に定める。 <<L1R>>仕様(Level 1 Real) <<L1>>仕様から命令再実行関係の機能とMMU関係の
機能を削除した仕様であり、ITRONとμBTRONなどを実記
憶ベースで効率よく動かすための仕様である。 <<L1R>>の命令セットは<<L1>>とほぼ同じであ
り、コンパイラやユーザプログラムは共通に使用できる
ようにする。ただし、MMU関係(MOVPAなど)、OS関係
(JRNGなど)の一部の命令については、サポートしない
ものがある。 <<L2>>仕様(Level 2) 将来のハードウエア量の増加にしたがって導入される予
定の仕様である。 命令の対称性を高めるための仕様と、演算の高速化に対
応して新たに追加する命令の仕様とがある。 前者の例としてはBVSCH命令の‘/B'オプション、ストリ
ング命令での複雑な終了条件、無限段数の付加モードな
どがあり、後者の例としてはINDEX命令などがある。 仕様書中では、<<L2>>仕様の部分を<<L2>>で示
す。 <<LX>>仕様(eXtension) 本発明装置64への拡張にしたがって導入される予定の仕
様である。L2仕様と同様の意味を持つが、本発明装置64
への対応ということで別のクラスとして扱う。 <<LX>>仕様の例は、64ビット演算命令などである。 仕様書中では、<<LX>>仕様の部分を<<LX>>で示
す。 <<LU>>仕様(Undefined) 将来の拡張によって導入される予定の仕様であるが、現
段階ではまだ具体的な仕様まで提示されていないもので
ある。 <<LV>>仕様(Variable) 各メーカーが全く自由に仕様を決めてよい部分である。 チップのピン配置、パイプラインの段階や性能に関する
仕様、各メーターに割り当てられた命令のビットパター
ン、制御レジスタの使い方などが<<LV>>仕様の例で
ある。このうち、各メーターに割り当てられた命令ビッ
トパターンについては、ビットパターンのレファレンス
中でLVreservedにより示されている。 <<LA>>仕様(Alternative) 本発明装置としての標準仕様が提示されている(あるい
は、提示される予定がある)が、他にやむを得ない理由
があれば変更してもよいという仕様である。もちろん、
仕様を変更した部分に関しては互換性の失われる場合が
ある。<<LA>>仕様は、TRONとしての互換性を保証し
ない仕様である。 <<LA>>仕様の例は、メモリ管理方式、制御レジスタ
と特権命令の一部などであり、主にOSの関係する部分で
ある。 本発明装置はMMUを内蔵せず、特に実記憶環境での高速
処理を目指す。従ってメモリ管理に関する<<LA>>仕
様の大部分は本発明装置でサポートされない。 4.レジスタセット ・本発明装置32では32ビット長の汎用レジスタが16本、
本発明装置64では64ビット長の汎用レジスタが16本存在
する。 ・スタックポインタ(Stack Pointer-SP)、フレームポ
インタ(Frame Pointer-FP)は汎用レジスタに含まれ
る。SPはR15、FPはR14となる。 ・プログラムカウンタ(Program Counter-PC)は汎用レ
ジスタに含まれない。 ・汎用レジスタは、データ保持、ベースアドレス保持、
あるいはインデクス レジスタとして、各種の目的に使
用できる。 ・プロセッサの状態を保持するレジスタ(Process or S
tatus Word-PSW)を持つ。第1図は、本発明装置64の場
合<<LX>>のレジスタセットを示す。 ・SPはコンテキスト(リング番号、割り込み処理中)に
応じて切り替わる。 ・PSWは4バイトからなる。下位第一バイトがステータ
スの表示(Processor Status Byte-PSB)、下位第二バ
イトがユーザのモード設定(PSBと合わせてProcessor S
tatus Halfword-PSH)、上位の2バイトがシステムの状
態表示用、となる。 ・本発明装置はいわゆるbig-endianのチップであり、レ
ジスタ上のデータについては、8ビット、16ビットのデ
ータをLSB側に詰めて配置する。したがって、データサ
イズとは無関係な絶対的なビット番号を定義することが
できない。ビット番号を議論する場合には、必ずデータ
サイズと組にして扱う必要がある。これを「ビット位
置」と呼ぶ。 ・レジスタ上の8ビットデータに対しては、ビット位置
はMSB側から0,1,...7と付けられる。また、レジスタ上
の16ビットデータに対しては、ビット位置はMSB側から
0,1,...15と付けられ、レジスタ上の32ビットデータに
対しては、ビット位置はMSB側から0,1,...31と付けられ
る。したがって、8ビットデータのビット位置7のビッ
ト、16ビットデータのビット位置15のビット、32ビット
データのビット位置31のビットが物理的には同一のビッ
トとなる。 ・レジスタをデスティネーションオペランドとする命令
において、レジスタ側のデータサイズが8ビット、16ビ
ットであった場合には、上位バイトは影響を受けず、無
変化となる。これは、メモリ上で演算を行なった場合の
仕様と合わせたものである。上位ビットにまで影響を与
えたい場合は、異種サイズ間の演算を利用する。 [例] MOV #H′12345678,R0.W MOV #H′aa,R0.B R0=H′123456aaとなる。 ・レジスタ上に8ビット、16ビットのデータを置く場合
には、LSB側に詰められるので、例えば、 MOV.W #H′12345678,R0 MOV.B #H′aa,R0 MOV.W R0,R1 の結果はR1=H′123456aaとなる。一方、メモリに対し
て同じことを行なった場合 MOV.W #H′12345678,@R0 MOV.B #H′aa,@R0 MOV.W @R0,R1 には、8ビット、16ビットのデータMSB側が揃うことに
なるので、R1=H′aa345678となる。レジスタ上とメモ
リ上で結果が異なるので、注意が必要である。 5.データタイプ 本発明装置では、いわゆるbig-endianを採用している。
すなわち、バイトアドレスの指定、ビット番号の指定と
も、小さい番号(アドレス)の方がMSB(Most Signific
ant Bit/Byte)となっている。 big-endianでは、メモリ上のあるデータについて、それ
を8ビットデータとして見る時と16(32)ビットデータ
として見る時のアドレスが異なってくるため、注意が必
要である。例えば、 address: N N+1 N+2 N+3 data: 0 0 0 H′12 といった場合に、32ビットデータとしてのアドレスNの
内容はH′00000012であるが、(H′は16進を表わ
す)、同じ内容のデータを8ビットデータとして扱うと
きは、アドレスN+3を参照しなければならない。 ただし、レジスタ上のデータに関しては、8ビットデー
タ、16ビットデータがLSB側に詰めて配置されるため、
レジスタ上に置かれたデータを、そのまま別のサイズの
データとして扱うことができる。例えば、 MOV #0,R0.W MOV #H′12,R0.B MOV R0.W,R1.W の結果はR1=H′00000012となる。(命令の意味につい
ては本文参照) 一方、メモリに対して同じことを行なった場合 MOV #0,@R0.W MOV #H′12,@R0.B MOV @R0.W,R1.W には、8ビットデータH′12と32ビットデータのMSB側
が揃うことになるので、R1=H′12000000となる。 本発明装置でサポートしているデータタイプを以下に説
明する。 5-1.ビット 第2図のように太線内が対象ビットである。メモリ上の
ビット操作の場合、offsetは任意レジスタ上のビット操
作の場合、offsetは一つのレジスタ内に限定 (offsetの上位ビットを無視する) ビットの指定は、base addressの指定、base address
のサイズの指定、offsetの指定の組によって行なわれ
る。 メモリ上のビットを対象とした場合には、base addres
sで示されるメモリアドレスのMSBがoffset=0のビット
となる。この時、base addressのサイズの指定は、実
際に操作されるビットには影響しない。ビット操作命令
では、メモリに対してread-modify-writeを行なうアク
セスサイズを指定するためにbase addressのサイズの
指定が利用されるが、アクセスサイズが異なっても実際
に操作されるビットは同じである。 一方、レジスタ上のビットを対象とした場合には、base
addressのサイズとして指定されたデータサイズでMSB
がoffset=0のビットとなる。base addressのサイズが
異なれば、実際に操作されるビットも異なったものにな
るので、注意が必要である。 5-2.ビットフィールド ・符号付きビットフィールド 第3図に示すように太線内が対象ビットフィールドで
ある。 0<width≦32(<<LX>>0<width≦64) S:符号ビット base addressのMSBから、対象ビットフィールドのMSB
(符号ビット)までのビットの隔たりがoffsetとなる。 BF:G命令によるメモリ上のビットフィールド操作の場
合、offsetは任意。 BF:E命令によるメモリ上のビットフィールド操作、およ
びレジスタ上のビットフィールド操作の場合、base ad
dressの1ワード(1ロングワード)をはみ出した部分
のビットフィールドについて、動作を保証しない。 ・符号なしビットフィールド 第4図に示すように太線内が対象ビットフィールドで
ある。 0<width≦32(<<LX>>0<width≦64) base addressのMSBから、対象ビットフィールドのMSB
までのビットの隔たりがoffsetとなる。 BF:G命令によるメモリ上のビットフィールド操作の場
合、offsetは任意。 BF:E命令によるメモリ上のビットフィールド操作、およ
びレジスタ上のビットフィールド操作の場合、base ad
dressの1ワード(1ロングワード)をはみ出した部分
のビットフィールドについて、動作を保証しない。 ・任意長ビットフィールド offset、widthとも任意。ただしwidth>0。 5-3.整数 第5図に整数のデータタイプを示す。 5-4.浮動小数 浮動小数点の演算は、コプロセッサで扱う。浮動小数
点の形式はIEEE規格である。詳細は別に定める。 ・単精度32ビット浮動小数 <<コプロセッサ>> ・倍精度64ビット浮動小数 <<コプロセッサ>> ・80ビット浮動小数 <<コプロセッサ>> 5-5.10進数 多倍長の10進数の四則演算は、コプロセッサで扱う。本
発明装置のメインプロセッサでは、以下に示すような固
定長の符号なしPACKED形式10進数、および符号付きPACK
ED形式10進数を扱う。ただし、符号付きPACKED形式10進
数を扱う命令は、すべて<<L2>>である。第6図にデ
ータタイプをしめす。 5-6.ストリング 第7図にストリングの場合のデータタイプを示す。 5-7.キュー 第8図にダブルリンクでつながれた線形リストのデータ
タイプを示す。 6.命令フォーマット 命令は16ビット単位で可変長となっており、奇数バイト
長の命令はない。 2オペランド命令には、大きくわけて、4バイト+拡張
部の構成をもち、すべてのアドレッシングモード(Ea)
が利用できる一般形、および頻度の高い命令とアドレッ
シングモード(Sh)のみを使用できる短縮形、の2つの
フォーマットがある。必要となる命令機能とコードサイ
ズに合わせて、より適した方を選択することができる。 本発明装置の命令フォーマットは、細かい点まで気をつ
ければかなり多くの種類に分かれる。しかし、理解を容
易にするため、ここでは本発明装置の命令フォーマット
を大まかに分類して説明を行なう。命令フォーマットの
詳細については、付録10を参照のこと。 フォーマット中に現われる記号の意味は次の通りであ
る。 ‐ オペコードの入る部分 # リテラル、またはイミディエート値の入る部分 Ea 8ビットで指定する一般形のアドレッシングモー
ド Sh 6ビットで指定する短縮形のアドレッシングモー
ド Rn レジスタの指定を行なう部分 フォーマットの記述は、右側がLSB側で、かつ高いアド
レスになっている。(big-endian) フォーマットの記述例を第9図に示す。 アドレスNとアドレスN+1の2バイトを見ないと命令
フォーマットが判別できないようになっているが、これ
は、命令が必ず16ビット(2バイト)単位でフェッチ、
デコードされることを前提としたためである。 いずれのフォーマットの場合も、各オペランドのEaまた
はShの拡張部は、必ずそのEaまたはShの基本部を含むハ
ーフワードの直後に置かれる。これは、命令により暗黙
に指定されるイミディエートデータや、命令の拡張部に
優先する。したがって、4バイト以上の命令では、Eaの
拡張部によって命令のオペコードが分断される場合があ
る。 また、付加モードなどによって、Eaの拡張部にさらに拡
張部が付く場合にも、次の命令オペコードよりもそちら
の方が優先される。 例えば第一ハーフワードにEa1を含み、第二ハーフワー
ドにEa2を含み、第三ハーフワードまである6バイト命
令の場合を考える。Ea1に付加モードを使用したため、
普通の拡張部のほかに付加モード拡張部もつくものとす
る。この時、実際の命令ビットパターンは 命令の第一ハーフワード (Ea1の基本部を含む) Ea1の拡張部 Ea1の付加モード拡張部 命令の第二ハーフワード (Ea2の基本部を含む) Ea1の拡張部 命令の第三ハーフワード の順となる。 なお、アライメントの関係で16ビットのフィールドのう
ちの8ビットのみを使用するケースでは、使用する8ビ
ットは下位順(アドレスの大きい方)に詰めて置かれる
ものとする。これに該当するのは、オペランドサイズが
8ビットで、EaR,ShRに#imm dataのモードを指定した
場合、I-formatでオペランドサイズが8ビットの場合、
BRA:G,Bcc:G,BSR:GでSS=00の場合、などである。 例えば、 MOV:I.B #H′12, @R0 の場合、第一バイトがMOV:I.Bのオペコード、第二バイ
トがオペコードの一部とShW(@R0)の指定、第三バイ
トは0、第四バイトがH′12となり、ビットパターンは
第10図のようになる。 この場合、16ビットのフィールドの上位側(アドレスの
小さい方)の8ビットには必ず0を入れておかなければ
ならない。上位8ビットが0でない場合は、これによっ
て表現されるデータがインプリメント依存の不定値にな
るものとする。つまり、I-format,#imm dataモードの
場合はそのオペランドがインプリメント依存の値にな
り、BRA:G,Bcc:G,BSR:G命令の場合は、ジャンプ先が不
定となる。いずれの場合も、EIT(例外)とはしない。 6-1.2オペランド短縮形 6-1-1.レジスタ−メモリ間(S-format,L-format) 第11図にその例を示す。 L-format,S-formatの命令には、サイズ指定のできるも
の(MOV:L,MOV:S,CMP:L)とサイズ指定できないもの(A
DD:L,SUB:L)がある。 サイズ指定のできる命令では、RR等によるサイズ指定は
メモリ側のみに適用され、レジスタ側のサイズは32ビッ
ト固定となっている。レジスタ側とメモリ側のサイズが
異なる場合には、ソース側のサイズが小さい場合に符号
拡張が、デスティネーション側のサイズが小さい場合に
上位バイトのカットとオーバーフローのチェックが行な
われる。 一方、サイズ指定のできないADD:L,SUB:L命令では、レ
ジスタ側、メモリ側のオペランドサイズとも32ビット固
定である。 レジスタ側のサイズを32ビット固定としたのは、本発明
装置において、「レジスタ上のデータは、できる限り32
ビット符号付き整数として扱う」という原則を設けてい
るためである。この原則は、L-format,S-formatの命令
のほか、ビットフィールド命令や高機能命令でレジスタ
上にオペランドを置く場合にも適用される。 6-1-2.レジスタ−レジスタ間(R-format) 第12図にその例を示す。 6-1-3.リテラル−メモリ間(Q-format) 第13図にその例を示す。 6-1-4.イミディエート−メモリ間(I-format) 第14図にその例を示す。 I-formatのイミディエート値のサイズは、デスティネー
ション側のオペランドのサイズと共通に8,16,32,64ビッ
トとなり、ゼロ拡張、符号拡張は行なわれない。 6-2.1オペランド一般形(G1-format) 第15図にその例を示す。 6-3.2オペランド一般形 ここに含まれるのは、8ビットで指定する一般形アドレ
ッシングモードのオペランドが2つ存在する命令であ
る。オペランドの総数は3つ以上になる場合がある。 6-3-1.第一オペランドはメモリ読みだし(G-format) 第16図にその例を示す。 6-3-2.第一オペランドは8ビットイミディエート(E-fo
rmat) 第17図にその例を示す。 このフォーマットとイミディエート−メモリ間のフォー
マット(I-format)とは機能的には似たものであるが、
考え方の点では大きく違っている。E-formatはあくまで
も2オペランド一般形(G-format)の派生形であり、ソ
ースオペランドのサイズが8ビット固定、ディスティネ
ーションオペランドのサイズが8/16/32/64ビットから選
択となっている。つまり、異種サイズ間の演算を前提と
し、destのサイズに合わせて8ビットのsrcがゼロ拡張
または符号拡張される。 一方、I-formatは、特にMOV,CMPで頻度の多いイミディ
エートのパターンを短縮形にしたものであり、ソースと
ディスティネーションのサイズは等しい。 6-3-3.第一オペランドはアドレス計算(GA-format) 第18図にその例を示す。 6-3-4.その他の2オペランド命令 第19図にその例を示す。 6-4.ショートブランチ 第20図にその例を示す。 6-5.その他 以上の外に第21図に示すようなものがある。 7.アドレッシングモード 本発明装置のアドレッシングモードには、レジスタを含
めて6ビットで指定する短縮形(Sh)と、8ビットで指
定する一般形(Ea)がある。 未定義のアドレッシングモードを指定した場合や、意味
的に考えて明らかにおかしなアドレッシングモードの組
み合わせを指定した場合には、未定義命令を実行した場
合と同じく予約命令例外(RIE)を発生し、例外処理を
起動する。 これに該当するのは、destinationがイミディエートモ
ードの場合、アドレス計算の命令でイミディエートモー
ドを使用した場合などである。 7-1.Pビット 本発明装置では、毎回のメモリアクセスに対応して1ビ
ットのオプション機能指定ビットを割り当てることがで
きるようになっており、このビットをPビットと呼ぶ。
Pビットは、メモリアクセスに伴って何らかの別の意味
を加えたい場合に使用するビットである。 Pビットは、毎回のメモリアクセス毎に独立に指定す
る。したがって、レジスタ間接アドレッシング、アブソ
リュートアドレッシングなどの場合はオペランドに対応
して一つのPビットを指定するが、付加モードを使用し
た多段間接のアドレッシングモードでは、その段数分だ
けのPビットを指定することになる。 Pビットの用途としては、タグのチェック、論理空間の
切り替え、32ビットアドレッシングと64ビットアドレッ
シングの切り替えなどがあるが、これらはすべて将来の
拡張用であり、現在の仕様ではPビットはreservedとな
っている。 命令フォーマットの説明では、Pビットの部分を‘P'で
表示してあるが、ここは必ず0にしておかなければなら
ない。Pビットが0になっていなかった場合には、予約
命令例外(RIE)、が発生する。 Pビットに関する機能は<<LU>>仕様である。 7-2.フォーマット中で使われる記号 Rn レジスタ指定 P Pビット(0でなければならない) mem[EA]EAで示されるアドレスのメモリ内容 以下点線で囲まれた部分は、拡張部を示す。 7-3.レジスタ直接 アセンブラ表記:Rn オペランド:Rn フォーマット:第22図に示す。 7-4.レジスタ間接 アセンブラ表記:@Rn オペランド:mem[Rn] フォーマット:第23図に示す。 7-5.レジスタ相対間接 アセンブラ表記: @(disp,Rn) @(disp:16,Rn) @(disp:32,Rn) オペランド:mem[disp+Rn] フォーマット:第24図に示す。 なおdispは符号付きとして扱う。 7-6.イミディエート アセンブラ表記:#imm data オペランド:imm data フォーマット:第25図に示す。 なおimm dataのサイズは、オペランドサイズとして命
令中で指定される。 7-7.アブソリュート アセンブラ表記:@abs @abs:16 @abs:32 @abs:64 <<LX>> オペランド:mem[abs] フォーマット:第26図に示す。 なお32ビットアドレッシングの時は、abs:16で指定した
アドレスは32ビットに符号拡張される。また、64ビット
アドレッシングの時は、abs:16,abs:32で指定したアド
レスは64ビットに符号拡張される。 7-8.PC相対間接 アセンブラ表記:@(disp,PC) @(disp:16,PC) @(disp:32,PC) オペランド:mem[disp+PC] フォーマット:第27図に示す。 PC相対間接モードにおいて参照されるPCの値は、そのオ
ペランドを含む命令の先頭アドレスである。したがっ
て、例えば無限ループは JMP @(0,PC) という命令によって実現される。 付加モードにおいてPCの値が参照される場合にも、同じ
ように命令先頭のアドレスをPC相対の基準値として使用
する。 7-9.スタックポップ アセンブラ表記:@SP+ オペランド:mem[SP] SPをインクリメント フォーマット:第28図に示す。 @SP+のモードでは、オペランドサイズだけSPをインク
リメントする。例えば、本発明装置64で64ビットデータ
を扱う時には、SPが+8だけ更新される。B,Hのサイズ
のオペランドに対する@SP+の指定も可能であり、それ
ぞれSPが+1,+2だけ更新される。ただし、スタックの
アラインメントがくずれて速度低下の原因にになるた
め、使用上は注意した方がよい。 オペランドに対して@SP+のモードが意味を持たないも
のに対しては、予約命令例外(RIE)を発生する。具体
的に予約命令例外(RIE)となるのは、writeオペラン
ド、read-modify-writeオペランドに対する@SP+であ
る。 7-10.スタックプッシュ アセンブラ表記:@‐SP オペランド:SPをインクリメント mem[SP] フォーマット:第29図に示す。 @‐SPのモードでは、オペランドサイズだけSPをデクリ
メントする。例えば、本発明装置64で64ビットデータを
扱う時には、SPが−8だけ更新される。B,Hのサイズの
オペランドに対する@‐SPの指定も可能であり、それぞ
れSPが−1,−2だけ更新される。ただし、スタックのア
ラインメントがくずれて速度低下の原因にになるため、
使用上は注意した方がよい。オペランドに対して@SP−
のモードが意味を持たないものに対しては、予約命令例
外(RIE)を発生する。具体的に予約命令例外(RIE)と
なるのは、readオペランド、read-modify-writeオペラ
ンドに対する@‐SPである。 7-11.レジスタ相対付加モード オペランド:Rn==>tmp 付加モード処理 フォーマット:第30図に示す。 付加モードについては、後の章でまとめて説明する。 7-12.PC相対付加モード オペランド:PC==>tmp 付加モード処理 フォーマット:第31図に示す。 7-13.絶対付加モード オペランド:0==>tmp 付加モード処理 フォーマット: 第32図に示す。 7-14.FP相対間接 アセンブラ表記:@(disp,FP) @(disp:4,FP) オペランド:mem[d4*4+FP] (disp=d4*4) フォーマット:第33図に示す。 d4は符号付きとして扱い、オペランドのサイズとは関係
なく必ずd4を4倍して使用する。したがって、このモー
ドにより(FP-8*4)から(FP+7*4)までの4の倍
数のメモリアドレスが参照可能である。アセンブラで記
述する場合には、ディスプレースメントとして4倍した
値の方を書く。 このアドレッシングモードは<<L2>>である。本発明
装置ではFP相対間接モードは実装しないので、このアド
レッシングモードが指定された場合は、予約命令例外
(RIE)となる。 このアドレッシングモードは短縮形で利用できないの
で、例えば、 MOV @(disp,FP),R1 といった場合に、 MOV:G.W @(disp:4,FP),R1 MOV:L.W @(disp:16,FP),R1 がともに4バイトとなり、コードの選択に曖昧さが生じ
るという問題点がある。このモードが<<L2>>となっ
ているのは、このような理由による。このモードは、本
発明装置64になって短縮形の割合が減った時に、有利に
利用することを狙ったものである。 @(d4:4,FP)、@(d4:4,SP)のモードでは、オペラン
ドサイズにかかわらずd4を4倍して使用するため、8ビ
ット、16ビット、32ビットのローカル変数をスタックフ
レーム上に混在した場合に@(d4:4,FP)、@(d4:4,S
P)のモードを利用しようとすると、本発明装置がbig-e
ndianである関係上、各変数のMSB側をワード境界に合わ
せて配置する必要がある。これによって特に問題が起き
るわけではないが、注意が必要である。 @(d4:4,FP),@(d4:4,SP)モードを利用するための
ローカル変数配置の例を第34図に示す。 7-15.SP相対間接 アセンブラ表記:@(disp,SP) @(disp:4,SP) オペランド:mem[d4*4+SP] (disp=d4*4) フォーマット:第35図に示す。 d4は符号付きとして扱い、オペランドのサイズとは関係
なく必ずd4を4倍して使用する。ただし、d4が負の値で
あった場合の動作は規定されていない。したがって、こ
のモードにより(SP)から(SP+7*4)までの4の倍
数のメモリアドレスが参照可能である。アセンブラで記
述する場合には、ディスプレースメントとして4倍した
値の方を書く。 このアドレッシングモードは<<L2>>である。本発明
装置ではFP相対間接モードは実装しないので、このアド
レッシングモードが指定された場合は、予約命令例外
(RIE)となる。 このモードも、@(disp:4,FP)と同様に、本発明装置6
4になって短縮形の割合が減った時に、有効に利用する
ことを狙ったものである。 7-16.付加モードのフォーマット 複雑なアドレッシングも、基本的には加算と間接参照の
組み合わせに分解することができる。したがって、加算
と間接参照のオペレーションをアドレッシングのプリミ
ティブとして与えておき、それを任意に組み合わせるこ
とができれば、どんな複雑なアドレッシングモードをも
実現することができる。 付加モードはこのような考え方にたったアドレッシング
モードである。複雑なアドレッシングモードは、モジュ
ール間のデータ参照やAI言語の処理系に特に有用であ
る。 ただし、本発明装置ではメモリ間接アドレッシングモー
ドが多用された場合処理速度が低下する場合があるの
で、メモリ間接アドレッシングモードを仕用に際しては
十分な注意が必要である。 付加モードの指定は、16ビットを単位としており、これ
を任意回繰り返す。1段の付加モードにより、 定数(displacement)の加算 インデクスレジスタのスケーリングと加算 スケーリングは×1、×2、×4、×8 メモリの間接参照 を行なう。N段の付加モードにより、N+1段までの間
接参照ができる。 基本的な付加モードの処理: tmp+Rx*scale+d4*4==>tmp 1=0,D=0の時 tmp+Rx*scale+dispx==>tmp 1=0,D=1の時 mem[tmp+Rx*scale+d4*4]==>tmp 1=1,D=0
の時 mem[tmp+Rx*scale+dispx]==>tmp1=1,D=1の
時 基本フォーマット: 第36図に示す。 EI=00 間接参照なし、付加モード継続 tmp+disp+Rx*scale==>tmp EI=01 間接参照あり、付加モード継続 mem[tmp+disp+Rx*scale]==>tmp EI=10 間接参照なし、付加モード終了 tmp+disp+Rx*scale==>address of operand EI=11 間接参照あり、付加モード終了 mem[tmp+disp+Rx*scale]==>address of operan
d M=0 <Rx>をインデクスとして使用 M=1 特殊なインデクス <Rx>=0 インデクスを加算しない(Rx=0) <Rx>=1 PCをインデクスRxとして使用(Rx=PC) <Rx>=2〜 reserved D=0 付加モード中の4ビットのd4を4倍してdispと
し、これを加算する。d4は符号付きとして扱い、オペラ
ンドのサイズとは関係なく必ずd4を4倍して使用する。 D=1 付加モードの拡張部で指定されたdispx(16/32
/64ビット)をdispとし、これを加算する。拡張部のサ
イズはd4フィールドで指定する。 d4=0001 dispxは16ビット d4=0010 dispxは32ビット d4=0011 dispxは64ビット <<LX>> XX インデクスのスケール(scale=1/2/4/8) S インデクスのレジスタのサイズ S=0 <Rx>は32ビットを符号拡張 S=1 <Rx>は64ビット <<LX>> P Pビット <<LU>> ・Pビットは付加モードの各段に入る。 Pビットは「すべてのメモリ参照で独立に指定できる
ビット」となっている。 ・間接参照をする場合としない場合を選択できる。 間接参照しない段は、多段のベースレジスタ、インデ
クスレジスタの加算に用いる。(mem[R1+R2+R3]な
ど)これは、ユーザレベルでrelocation base register
などを導入したい時に使用することがある。 ・インデクスレジスタのサイズ64ビットアドレス使用時
でも32ビットデータがかなりの頻度で出てくると予想さ
れるため、付加モードの各段で32/64のサイズ切り替え
ができるようになっている。 ・レジスタ相対間接の@(disp:64,Rn)やメモリ間接の
アドレッシングモードも付加モードを使用して実現す
る。 ・PCに対して×2、×4、×8のスケーリングを行なっ
た場合には、その段の処理終了後の中間値(tmp)とし
て、インプリメントに依存した不定値が入る。この付加
モードによって得られる実効アドレスは予測できない値
となるが、例外は発生しない。マニュアル等では、PCに
対する×2、×4、×8のスケーリングの指定は行なわ
ないように、注意しておく必要がある。 フォーマットのバリエーション: 第37,38図に示す。 7-17.付加モード仕様のレベル 付加モードの利用方法としては、普通の間接参照、オブ
ジェクトコードのモジュール化のための外部変数のテー
ブル参照、AI向け命令の実行などがあり、このうち、AI
向けの用途ではかなり多くの段数の間接参照を使うこと
があるが、普通の用途では、3〜4段までの間接参照で
十分なことが多い。 任意段数の付加モードが利用できれば、コンパイラの中
で段数による場合分けが不要になるので、コンパイラの
負担が軽減されるというメリットがある。多段の間接参
照の頻度が非常に少ないとしても、コンパイラとしては
必ず正しいコードを発生できなければならないからであ
る。 しかし、インプリメントの方から考えると、任意の段数
を許して実行中の割り込みを受け付けるようにするのは
かなり重くなるため、全体のバランスとしてある程度の
段数制限をするのはやむを得ない。 そこで、本発明装置としては4段(付加モード基本フォ
ーマットの4つ分)までの付加モードが利用できるもの
を<<L1>>仕様とし、任意段数の付加モードのインプ
リメントは<<L2>>仕様としてクラス分けする。<<
L1>>仕様でも、5回のメモリ間接参照まで可能であ
る。5段(5ハーフワード)以上の付加モードに対して
は、予約命令例外(RIE)が起動される。ただし、フォ
ーマット上は任意の段数が可能になっているので、将来
はそのままのフォーマットで段数を拡張することができ
る。 本発明装置では任意段数の付加モードを許す。ただし、
本発明装置では付加モードをもちいてメモリ間接アドレ
ッシングを多用した場合、処理速度が低下することがあ
るので注意を要する。特に第2オペランドで多段の付加
モードが用いられた場合、付加モード処理中は割り込み
が受け付けられない場合があるので注意を要する。 また、本発明装置32でも浮動小数点を扱うことを考え、
‘X8'のスケーリングをインプリメントする。‘X8'のス
ケーリングは<<LX>>仕様ではなく<<L1>>仕様で
ある。 8.インプリメント関連事項 8−1.仮想記憶のサポート (本発明装置では仮想記憶のサポートは行わない。) 仮想記憶を実現するため、命令の実行途中で発生したペ
ージフォールトに対してうまく回復処理を行なう必要が
ある。本発明装置では、原則として命令再実行方式を採
用する。 命令再実行方式でページフォールトが起こった場合に
は、それまでに変更したレジスタ類をプロセッサがすべ
てもとに戻してから、ページインの処理ルーチンを起動
する。したがって、処理再開後に命令の始めより再実行
しても矛盾は生じない。 命令再実行方式では、原則として実行途中の状態を保持
する必要がないので、実現機構は比較的簡単である。ま
た、本発明装置では、命令再実行のことを考慮し、処理
の途中で副作用を残す命令やアドレッシングモード(オ
ートインクリメントなど)を極力避けるようにしてい
る。ただし、ページフォールトからの再実行では余分な
メモリアクセスが起こることがあり、OSで入出力装置を
操作する場合などには注意が必要である。 例えば、一般形の命令において、第一オペランドでI/O
のリードを行ない、第二オペランドでページフォールト
を起こした場合、命令の再実行でもう一度I/Oのリード
を行なうため、I/Oの種類によっては矛盾を起こす。し
たがって、リードによって副作用のあるI/Oをアクセス
する場合は、その命令のもう一方のオペランドでページ
フォールトを起こさないように注意し、マニュアルにも
明記する必要がある。具体的には、もう一方のオペラン
ドが必ずレジスタか常駐ページであればよい。 また、MOV命令などでソースオペランドとデスティネー
ションオペランドが一部重なっていた場合、単なる再実
行では矛盾を生じることがあるので、この点に対する注
意も必要である。 例2:2バイトのデータを1バイトずらす。デスティネー
ションがページ境界にまたがる。 第39図で、MOV.H命令により[N−2:N−1]を[N−1:
N]に移す場合、デスティネーションの書き込みバスサ
イクルは2回に分かれる。まず[N−2]のデータが
[N−1]に書かれ、次に[元のN−1]が[N]に書
かれるものとする。[N−1]への書き込みの際にpage
M−1がフォールトを起こすと、ページイン後[N−2:
N−1]−−>[N−1:N]を再試行しようとしても、N
−1の内容が既に書き変わっているので、矛盾を起こ
す。 さらに、LDMのような複数のデータ転送を行なう命令で
も、転送元と転送先が重なっていた場合に、命令の再実
行で矛盾が生じないようにする必要がある。例えば、 LDM @R6,(R6-R10) の場合、R6,R7をロードした後でR8を読んだ時にページ
フォールトが起きると、再実行した時に既にR6が書き替
わっており、本当に命令の最初から実行すると、矛盾を
生じる。これを避けるためには、以下のような対策をと
る必要がある。 ・命令の最初でページフォールトが起きないことを確認
する。 ・ページフォールト時に転送中のアドレスを示すテンポ
ラリ値をスタックにセーブする。(一種の命令継続実行
方式) ・R6の初期値を記憶しておき、ページフォールト発生時
にはこれをもとの値に戻す。 STMやその他の命令についても同様である。 なお、命令の再実行を矛盾なく行なうため、LDM,STM,LD
CTXでは付加モードを禁止している。また、ENTER,EXIT,
JRNGでは、メモリアクセスを伴うようなアドレッシング
モードをすべて禁止している。 8−2.プログラムによる命令の書き換え ストアドプログラム方式の計算機では、一般に、これか
ら自分の実行する命令プログラム自体をプログラムによ
って書き変えることが可能である。しかし、命令のプリ
フェッチや命令キャッシュなどを持つ最近の高性能プロ
セッサでは、プログラムで命令を書き変えた場合の動作
を保証しようとすると、ハードウエアの負担が極めて大
きくなる。また、この機能は必要性が少なく、ソフトウ
エアの教育上も好ましくない。したがって、本発明装置
では、ソフトウエアによってこれから実行する命令コー
ドの書き換えを行なうことは原則として禁止し、そのよ
うな場合には動作を保証しないものとしている。ただ
し、OSからユーザまで含めたシステム全体の動作を見る
と、どこかでプログラムのロード〜実行といった流れを
含んでいるため、すべての場合にわたって「動作を保証
しない」とするわけにはいかない。また、特殊な用途で
は、ユーザプログラムで命令コードを生成し、それを実
行したいという場合もある。したがって、何らかの条件
が満たされた時には、ソフトウエアによって書き換えら
れた命令コードの実行動作を保証する必要がある。 そこで、本発明装置では、命令コードを書き換えたとい
うことをプロセッサに知らせる命令PIBを用意し、この
命令を実行することにより、以後、書き換えられた命令
コードの実行動作を保証することにしている。この命令
は、これから実行すべき命令コードが、以前(リセット
時あるいは前回のPIB命令実行時)から変更されている
可能性があるということを、プロセッサに通知するため
に使用する。インプリメント上は、この命令によってパ
イプライン、命令キュー、命令キャッシュのパージを行
なうことになる。 9.EIT処理 本発明装置では、プログラムの実行の流れとは非同期に
行なわれる処理を総称して、EIT処理と呼んでいる。 EIT処理は、通常、例外処理や割り込み処理と呼ばれて
いるものである。EIT処理には、次のようなものが含ま
れる。 ・内部割り込み(リング間コール、トラップ) システムコール発行などの際に、プログラマが意識して
発生させる。 その時に実行中のコンテキストとは関連がある。 ・例外割り込み(例外) 一般の命令の実行中に、何らかのエラーが起った場合に
発生する。 その時に実行中のコンテキストとは関連がある。 ・外部割り込み(割り込み) 外部からのハードウエア的な信号により発生する。 その時に実行中のコンテキストとは全く関連がない。 EITとはException(例外割り込み)、Interrupt(外部
割り込み)、Trap(内部割り込み)の頭文字を合わせた
名称である。EIT処理に関する詳細は付録9を参照のこ
と。 10.PSWの構成 本発明装置のPSW(Processor Status Word)は32ビット
である。PSWの下位16ビット(PSH-Processor Status Ha
lfword)はユーザプログラム用であり、ユーザプロセス
から自由に操作可能である。PSWの上位16ビット(PSS-P
rocessor Status halfword for System)はシステム用
であり、ユーザプログラム(リング3)からは操作でき
ない。PSHのうち、上位8ビットは各種モードの設定を
行なう部分であり、PSM(Processor Status byte for M
ode)と呼ぶ。また、PSHの下位8ビットは各種ステータ
スや演算結果の表示を行なう部分であり、PSB(Process
or Status Byte)と呼ぶ。第40図に示す。 10-1.PSSの構成 第41図に示す。 − ‘0'にreserved‘1'を書き込もうとした場合に
は、予約機能例外(RFE)が発生する。 SM,RNG=000 ring0で外部割り込みスタックポインタ
(SPI)使用 SM,RNG=001 reserved SM,RNG=010 reserved SM,RNG=011 reserved SM,RNG=100 ring0でリング0用スタックポインタ(SP
0)使用 SM,RNG=101 reserved(ring1用) SM,RNG=110 reserved(ring2用) SM,RNG=111 ring3でリング3用スタックポインタ(SP
3)使用 SM,RNGは<<LA>> XA=0 32ビットコンテキスト XA=1 64ビットコンテキスト <<LX>> AT=00 アドレス変換なし AT=01 アドレス変換あり(本発明装置標準のMMU仕
様) AT=10 アドレス変換なし、アドレスによるメモリ保護 (<<L1R>>) AT=11 reserved(Address Translation mode) DB=0 デバッグ中でないコンテキスト DB=1 デバッグ中コンテキスト IMASK 外部割り込み、DI(Delayed Interrupt)を禁止
する割り込み優先度 IMASK=0000 NMI(優先度0のマスク不能割り込み)の
み受け付け IMASK=0001 優先度1までマスク(結果的にNMIのみ受
け付けとなる) IMASK=0010 優先度2までマスク ・・・ IMASKの示す割り込みより優先度の高い割り込
みのみ受け付ける IMASK=1110 優先度14までマスク IMASK=1111 マスクしない ・本発明装置では、<<LA>>仕様として4レベルのリ
ング保護によるメモリ管理を行なう(付録参照)。本発
明装置では2レベルのリング保護によるメモリ管理を行
なう。 RNGフィールドは、現在プロセッサがどのリングにいる
かという状態を示すものである。リング保護を行なわな
い場合にも、例えばスーパバイザ、ユーザモードの切り
換え用にこのフィールドを使用する。 ・XAビットは、本発明装置32ではreservedであり、1を
書き込もうとすると例外が発生する。 ・トレースなどデバッグ関係の情報については、その詳
細まで統一するのは難しいため、別の制御レジスタ(DC
R-Debug Control Register)に分離している。ただし、
デバッグ中がどうかを示す情報のみDBとしてPSWに入れ
る。 ・本発明装置の外部割り込みは、低い優先度の方が大き
な数字になる。外部割り込みの優先度は、0〜6の7レ
ベルであり、優先度0はマスク不能割り込み(NMI)で
ある。 ・キャッシュやMMUの制御情報は完全な統一が難しいた
め、PSWとは分離している。 ・AT(アドレス変換指定フィールド)をPSWに入れたこ
とによって、コンテキスト毎にアドレス変換やメモリ保
護の方法を変えたり、EIT処理ハンドラ実行中のみ一時
的にアドレス変換を止めたりすることが可能になってい
る。 なお、LDC,REIT,LDCTX,EIT起動などによって、PSW中のA
T(アドレス変換ビット)が00から01に変更された場合
には、TLBやキャッシュのパージが自動的に行なわれ、T
LBや論理キャッシュの整合性が保証されるものとする。
また、ATが01から00に変更された場合にも、キャッシュ
(この場合は論理キャッシュ兼物理キャッシュ)の整合
性が保証されるものとする。 10-2.PSHの構成 第42図に示す。 − ‘0'にreserved‘1'を書き込もうとした場合に
は、予約機能例外(RFE)が発生する。 PRNG このリングに入る一つ前の状態のリング番号 PRNGは<<LA>> P P-bit Error Flag <<LU>> P-bit機能の関連でエラーが起きたときにセットされ、
他の場合にはクリアされる。 現在は0にreserved F General Flag 高機能命令の終了要因の判定などに用いる。 X Extension Flag 多倍長計算用の桁上がりなどを示す。 V Overflow Flag オーバーフローが発生したことを示す。 L Lower Flag 比較命令などにおいて、第一オペランドの方が小さいこ
とを示す。(符号付き演算、符号なし演算とも) M MSB Flag 演算結果のMSBが1であることを示す。 Z Zero Flag 演算結果が0になったことを示す。 ・PRNGフィールドで「一つ前のリング」とは、「一つ外
側のリング」あるいは、「そのリングにサービスを依頼
したリング」を表わすものである。したがって、EIT発
生時のPRNGの変化は、 PSW<RNG>==>PSW<PRNG> リターン時(REIT命令)でのPRNGの変化は、 スタック==>PSW(RNG,PRNGを含む) となる。リターン時はRNGよりコピーするのではなく、
必ずスタックより復帰する必要がある。常にRNG≦PRNG
が成立する。PRNGは、ACS命令などでの参照を目的とし
たもので、実際のリング遷移はあくまでもRNGの情報を
使用する。 ・本発明装置以外のプロセッサでは、比較〜条件ジャン
プ、といった命令の流れをとる場合に、符号付きと符号
なしの区別を比較命令ではなく条件ジャンプ命令で行な
うのが普通である。例えば、符号なし整数の比較を CMP src1,src2 BLTS next Branch Lower Than(Singned) で、符号付き整数の比較を CMP src1,src2 BLTU next Branch Lower Than(Unsigned) で行なう。したがって、フラグの表現する情報として、
大小の区別のほかに、符号付きと符号なしの区別も必要
である。 しかし、本発明装置では、符号付きと符号なしの区別が
CMP命令、CMPU命令といったように命令別になってお
り、条件ジャンプ命令は符号付きも符号なしも共通であ
る。したがって、フラグ構成を簡単にすることができ
る。 ・通常のプロセッサで使用するCarry Flagは、符号なし
整数の大小関係を表わすという意味と、多倍長演算の桁
上がりを表わすという意味がある。しかし、後者に関し
ては本発明装置ではX flagを使用するため、Carry Flag
は整数の大小関係を表わすという意味でのみ用いられ
る。したがって、TRON CHIPではこのフラグを大小関係
を表わすフラグであると定義し、名前をL flag(Lower
Flag)としている。このフラグは、符号なし演算の場合
には従来のCarry Flagと同じ振る舞いをするが、符号付
き演算の場合には従来のCarry Flagとは異なり、オーバ
ーフローまで考慮した真の大小関係を表現する。 ・そのほか、ストリング命令やキューの命令の終了条件
を示すためのF flag(General Flag)とPビットのエラ
ーを表現するためのP flag(P-bit Error Flag)を設
ける。P flagは、現在の仕様では‘0'にreservedとなっ
ている。 ・通常のプロセッサでは、シフト命令ではみだしたビッ
トを入れるためにCarry Flagを用いているが、本発明装
置ではCarry Flagの代わりにL flagを実装しているた
め、はみだしたビットはX flagに入れることにする。 10-3.フラグの変化 加減算命令、比較命令、論理演算命令は2オペランド命
令であり、 dest.op.src==>dest の形をとる。destとsrcのサイズが異なる場合には、小
さいサイズの方が大きいサイズに合わせて符号拡張(AD
DU,SUBU,CMPUではゼロ拡張)された上で演算され、演算
結果がdestのサイズに変換されてからdestに格納され
る。 CMP,CMPU,SUB,SUBUの場合、L flagは、前の演算で第一
オペランドの方が値が小さかったことを示す。符号なし
演算CMPU,SUBUの場合には、L flagは通常のプロセッサ
のCarry(Borrow)Flagと同じ意味になる。符号付き演
算の場合には、L flagは単なるM flagのコピーとは異な
り、オーバーフローまで含めた真の大小関係を表現す
る。ADD命令の場合には、L flagは結果が負であること
を示す。これも、単なるM flagのコピーとは異なり、オ
ーバーフローまで含めた真の正負を示す。ADDUの場合に
は、結果が必ず正になるため、L flagは0となる。 V flagは、演算の結果がdestで指定されたサイズでは表
現できなかったということを示す。つまり、演算結果が
destのサイズの符号付き整数(ADDU,SUBUでは符号なし
整数)で表現できない時に、V flagがセットされる。CM
P,CMPU命令では、V flagは不変である。 X flagは、多倍長の演算を行なう場合に、桁上がりの状
態を保持するために使用する。符号付き演算でも符号な
し演算の時と同じような変化をする。これは、通常のプ
ロセッサのCarry Flagとほぼ同じ意味であるが、X flag
を変化させる命令は加減算命令やシフト命令などに限ら
れている。 CMP命令とSUB命令、およびCMPU命令とSUBU命令のL flag
の変化は全く同じである。X flagは、SUB,SUBU,SUBX命
令では変化するが、CMP,CMPU命令では変化しない。 MOV,MOVU,ADD,ADDU,ADDX,SUB,SUBU,SUBX命令の場合、M
flagとZ flagは、演算結果をdestのサイズに変換した後
の値を基準にして変化する。したがって、srcのサイズ
よりもdestのサイズの方が小さい時は、演算結果が0で
なくてもZ flagがセットされることがありうる。一方、
CMP,CMPU命令の場合のZ flagは、演算結果そのものの値
を基準にして変化し、destのサイズには関係しない。 例:@dest.B=1の時 SUB #H′101.W,@dest.B ==>演算結果1−H′101は0でないが、destが0に
なるのでZ flagはセットされる。 CMP #H′101.W,@dest.B ==>演算結果1−H′101は0でないため、z flagは
クリアされる。 ADDX,SUBX命令のフラグの変化は、多少変則的になって
いる。これは、符号なし整数の拡張演算にも符号付き整
数の拡張演算にも対処するためである。この場合、条件
ジャンプ命令のニモニックとの対応がうまくとれなくな
るが、拡張演算自体が頻度も少なく、変則的な面を持っ
ているので、やむを得ない。 L flag 符号付き演算としての大小関係(SUBX)、正負
(ADDX)を示す。 V flag 符号付き演算としてのオーバーフローを示す。 X flag ADDXの場合はdest+src+X flagの演算におけ
るdestのサイズからの桁上がり、SUBXの場合は、dest-s
rc-X flagの演算におけるdestのサイズからの桁下がり
を表わす。ただし、いずれの場合も、srcのサイズがdes
tのサイズよりも小さい場合には、srcが符号拡張され
る。 SUBXにおいて、srcとdestのサイズが等しい場合には、
結果的に、X flagが符号なしデータとしての比較結果
を表わすことになる。 ADDX,SUBXで異種サイズ間の演算を行なう場合には、サ
イズの短い方が符号拡張される。しかし、符号拡張後の
値を符号付きの数とみて演算するか、符号なしの数とみ
て演算するかはフラグによって異なる。 MOV命令、MOVU命令および論理演算命令では、X flag,L
flagは変化しない。論理演算命令では、V flagも変化し
ない。 各命令に対応したフラグの変化は、命令セットの説明の
中に示されている。 ‘☆’は要注意個所である。 11.命令セットの記述について 11-1.記述形式の概要
めに用いるものであり、アセンブラ表記では‘/xxx'に
より記述する。
るサイズの種類などを示す。本発明装置では、一つの命
令ニモニックに対して一般形や短縮形といった複数の命
令フォーマットが存在する場合があり、それぞれ使用で
きるアドレッシングモードやサイズが異なっている。こ
の項では、命令フォーマット別にそういった内容を明ら
かにする。
ついては、巻末の付録を参照のこと。 11-2.命令ビットパターンとアセンブラ表記 命令ビットパターンとアセンブラ表記の部分は、フォー
マット別ニモニック、オペランド名、オペランドフィー
ルド名、命令ビットパターンから成る。 記述例:第43図に示す。 AND:G−−フォーマット別ニモニック 説明を行なう命令ビットパターンのフォーマット別ニモ
ニック(付録参照)を示す。 src,dest−−オペランド名 その命令の機能を説明するために使用する変数である。
この変数は、「命令の機能」「解説」で参照される。こ
こで記述されたオペランドの順番が、そのままアセンブ
ラにおけるオペランドの順番になる。 EaR,EaM−−オペランドフィールド名 オペランドフィールド名は、ビットパターンとの対応、
使用できるオペランドサイズやアドレッシングモード、
メモリアクセス方法、その他の制約事項などの情報をま
とめて表わすものである。オペランドフィールド名を表
わす文字とその意味との間には一定の原則を設けてお
き、いろいろな意味を簡潔に表現できるようにしてい
る。 枠でかこまれた部分−−命令ビットパターン 命令ビットパターン中では、オペランドフィールドやサ
イズ指定フィールドの位置、命令のオペコードなどを示
す。‘*’で示されるビットは、don't careのビットで
ある。このビットの0/1は、命令デコードには影響しな
い。 ‘−',‘+',‘=',‘#’で示されるビットは、現在の
ところ、命令機能やオペランドの区別には使用されてい
ないビットである。ただし、ユーザプログラムでは
‘−',‘=’の部分には0を、‘+',‘#’の部分には
1を入れておかなければならない。‘−’のビットが0
でない場合や‘+’のビットが1でない場合は、予約命
令例外(RFE)となる。 ‘=’のビットが0でない場合や‘#’のビットが1で
ない場合は、単に無視される。つまり、ハード的には
‘*',‘=',‘#’は同等の意味を持つ。しかし、将来
の拡張のために、ユーザ向けのマニュアルには‘=',
‘#’を‘0',‘1'としておくように明記しておかなけ
ればならない。 11-3.フィールド名 命令ビットパターン中には、オペランドフィールドのほ
かに、オプションフィールド、サイズ指定フィールドが
ある。本発明装置で使用しているオプションフィールド
名、サイズ指定フィールド名には、次のようなものがあ
る。 ・サイズ指定フィールド名 RR readアクセスを行なうオペランドのサイズ指定 WW writeアクセスを行なうオペランドのサイズ指定 MM read-modify-writeアクセスを行なうオペランドの
サイズ指定 BB ビット操作命令でのメモリアクセスサイズ XX 上記以外の一般的なサイズ指定 特にレジスタサイズの指定を行なう場合 SS 上記以外の一般的なサイズ指定 ディスプレースメントのサイズ、CMPの第二オペラン
ド、暗黙でオペランドを指定するストリング命令、暗黙
でスタックを指定するMOVA:U命令などに使用 必ず同じ文字(大文字)を反復する。ただし、32ビット
と64ビットの指定しかできない場合には、このうちの一
文字のみを使う。 ・オプションフィールド名 命令オプションの指定を行なうオプションビットの名前
としては、主として小文字を使う。(Pビット関係を除
く) オプションフィールド名には、以下に示すようなものが
ある。いずれの場合にも、最初に記述した方(オプショ
ン値が0,00..の方)がアセンブラでのデフォルトにな
る。 cccc Bcc,TRAP/ccでの条件指定 eeee ストリング命令、QSCH命令での終了条件指定 P,Q.. Pビット指定(Q..は、Pビットの必要なオペ
ランドが複数の場合) b /F=0,/B=1(BSCH,BVSCH,BVMAP,BVCPY,SCMP,
SMOV,QSCH) r /F=0,/R=1(SSCH) c /N=0,/S=1(CHK)‐‐CHK,change index va
lueの‘c' d /0=0,/1=1(BSCH,BVSCH)‐‐dataの‘d' m /NM=0,/MR=1(QSCH)‐‐maskの‘m' p /AS=0,/SS=1(PTLB,PSTLB,LDATE)‐‐PTL
B,sPeci fic spaceの‘p' ttt /PT=000,/ST=001,/AT=110,/reserved=010
〜101,111(PSTLB,LDATE,STATE) xx /LS=00,/CS=01 reserved=10,11(LDCTX,STC
TX) 以上の項目に当てはまらないフィールド名は、オペラン
ドフィールド名を示すものになる。できるだけ、同じ文
字が複数の意味を表わさないようにしている。 11-4.オペランドフィールド名 オペランドフィールド名を表わす文字には、以下のよう
な意味を持たせている。オペランドフィールド名はこれ
らの文字の組み合わせによって構成されるため、フィー
ルド名だけで、使用できるアドレッシングモード、オペ
ランドサイズ、アクセス方法などの情報を得ることがで
きる。 ・基本となるアドレッシングモード Ea 8ビットの一般形アドレッシングモードを使用 Sh 6ビットの短縮形アドレッシングモードを使用 # リテラル #i イミディエート #d ディスプレースメント Rg レジスタ L1 レジスタリスト(LDM用) Ls レジスタリスト(STM用) Ln レジスタリスト(ENTER用) Lx レジスタリスト(EXITD用) ・アクセス方法 一部の基本アドレッシングモードでは、以下のようなア
クセス方法がデフォルトとして決まっている。この場合
には、特にアクセス方法を示す文字を付けない。 #,#i,#d 命令空間からのread Ls,Ln レジスタのread L1,Lx レジスタへのwrite その他の基本アドレッシングモードについては、以下に
示す文字を使用してアクセス方法を示す。 R read W write M read-modify-write なお、フィールド名を短縮するため、RgRをRRに、RgWを
RWに、RgMをRMに省略することがある。(BF命令、CSI命
令) A アドレス計算のみを行なう。 f ビットオフセットとの組み合わせによって実際に操
作を行なうメモリアドレスが決まる。(R,Mのサフィッ
クス) 例:ビット操作命令 fq ビットオフセットが付くが、ビットオフセットはバ
イト境界を越えない。アクセスすべきアドレスは、オフ
セットを見なくても確定している。(R,Mのサフィック
ス) 例:短縮形のビット操作命令 bf ビットオフセットやビットフィールド幅との組み合
わせによって実際に操作を行なうメモリアドレスと範囲
が決まる。(R,Mのサフィックス) 例:固定長ビットフィールド操作命令 q キュー命令による複雑なアクセスを行なう。(他の
アクセス方法のサフィックス) 例:QINS,QDEL命令 i バスのインタロックによるアクセスを行なう。(M
のサフィックス) % 制御空間、物理空間などの特殊空間のアクセスを行
なう。(R,W,Mのサフィックス) d 2つのデータ(double)に対する操作を行なう。
(Rのサフィックス) 例:CHK命令 m 複数のデータ(multiple)に対する操作を行なう。
(R,Wのサフィックス) 例:LDM,STM命令 ・アドレッシングモードに対する制限基本アドレッシン
グモードとアクセス方法が決まると、自動的にアドレッ
シングモードに対する制限(EaWに対するイミディエー
トモードの禁止など)が決まる。ただし、それ以外に命
令特有の制限事項がある場合には、以下の文字を後ろに
付ける。 !I イミディエートモードの禁止 例:CMP命令の第二オペランド !M メモリ対象アドレッシングモードの禁止 例:ENTER:G命令のlocalオペランド !A 付加モードの禁止 例:LDCTX命令のctxaddrオペランド !S スタックポップ、スタックプッシュモードの禁止 例:QDEL命令のdestオペランド ・サイズ指定 サイズ指定は、原則として以下に示すフィールドによっ
て行なう。 アクセス方法がR RRフィールド アクセス方法がW WWフィールド アクセス方法がM MMフィールド アクセス方法がR!I,R!M,R2 SSフィールド アクセス方法が*f BBフィールド ただし、これはメモリ操作のアクセスサイズを意味す
る。 アクセス方法がA サイズは指定されない。 これより例外がある場合には、以下の文字を付け加える
ことにより区別する。原則として、数字と小文字が固定
サイズを表わし、大文字は可変サイズを表わす。例え
ば、‘w'は32ビット(ワード)固定のサイズを示すのに
対して、‘W'はWWフィールドによりサイズが指定される
ことを示す。 w オペランドサイズは必ず32ビット 例:MUL:R命令 h オペランドサイズは必ず16ビット 例:WAIT命令 b オペランドサイズは必ず8ビット 例:MOV:E命令のsrc S8 オペランド(ディスプレースメント)のサイズは、
SSフィールドにより指定される。ただし、このオペラン
ド指定フィールドを使うのは、SS=00(8bit指定)の時
に限られる。それ以外の場合には、拡張部によってオペ
ランドが指定され、このフィールドは無視される。(0
にしておくこと) 例:BF:I命令のsrc S オペランド(ディスプレースメント)のサイズは、
SSフィールドにより指定される。 例:BRA:G命令 R オペランドサイズは、もう一方のオペランドのサイ
ズと共通にRRフィールドにより指定される。 例:CMP:I命令 W オペランドサイズは、もう一方のオペランドのサイ
ズと共通にWWフィールドにより指定される。 例:MOV:I命令 M オペランドサイズは、もう一方のオペランドのサイ
ズと共通にMMフィールドにより指定される。 例::Iフォーマットの命令 L オペランドサイズとして8ビットまたは16ビットを
指定するためのビットパターンが割り当てられていない
ため、32ビットまたは64ビットのオペランドのみが指定
できる。サイズ指定は、RR,WW,MM,BBフィールドではな
く、R,M,W,Bフィールドにより行なわれる。 P ポインタを扱うため、命令中ではサイズ指定を行な
わない。実際のサイズ指定は、Pビットまたはモード
(PSW中のXAビット)等によって行なわれる。 例:QINS,QDEL命令 X オペランドサイズは、XXフィールドにより指定され
る。 例:ACB,SCB命令のxreg Xw オペランドサイズは、Xフィールドにより他のオペ
ランドと共通に指定される。これは、BF命令のwidth指
定用である。 Xs オペランドサイズは、Xフィールドにより他のオペ
ランドと共通に指定される。これは、BF命令のsrc指定
用である。 Xd オペランドサイズは、Xフィールドにより他のオペ
ランドと共通に指定される。これは、BF命令のdest指定
用である。 C オペランドサイズは、RRフィールドにより他のオペ
ランドと共通に指定される。これは、CSI命令の比較値
指定用である。 3 3ビットのリテラル 4 4ビットのリテラル 例:TRAPA命令 6 6ビットのリテラル 8 8ビットのディスプレースメント 例:BRA:8命令 16 16ビットのディスプレースメント 例:MOVA:R命令 なお、ストリング命令などの高機能命令において、命令
によって暗黙に指定されるオペランドのサイズを指定す
る場合には、フィールド名としてSSを使用する。任意長
ビットフィールド命令では、Xも使用される。 ・その他 Z リテラルで、ビットパターンの0をオペランド値の
0(zero)に対応させる場合を示す。ビットパターンと
オペランド値との対応は、以下のようになる。(Nはリ
テラルのビット数) 0...000 0 0...001 1 0...010 2 ... 1...110 2^N−2 1...111 2^N−1 例:BTST:Qのoffset n リテラルで、ビットパターンの0をオペランド値の
2^Nに対応させる場合を示す。ビットパターンとオペラ
ンド値との対応は、以下のようになる。(Nはリテラル
のビット数) 0...000 2^N 0...001 1 0...010 2 ... 1...110 2^N−2 1...111 2^N−1 例:MOV:Qのsrc c リテラルで、ビットパターンが2の補数(compleme
nt)を現わす場合を示す。ビットパターンとオペランド
値との対応は、以下のようになる。(Nはリテラルのビ
ット数) 0...000 −2^N 0...001 −(2^N−1) 0...010 −(2^N−2) ... 1...110 −2 1...111 −1 例:SHA:C,SHL:Cで右シフトの場合のシフトカウント 1,2... 一つの命令の中で、同じアクセス方法を持つオ
ペランドが複数存在した場合に、それらを区別するため
に使用する。 なお、サイズに関する種々の制限事項のうち、命令機能
に大きな関係を持つものについては、オペランドフィー
ルド名やサイズ指定フィールド名ではなく、各命令の説
明のところでその制限を示す。これには、シフトカウン
トで8ビット以外のサイズを指定した場合や、異種サイ
ズ間の論理演算などが含まれる。 11-5.アドレッシングモードに関する制限 オペランドフィールド名のうち、次のものは、使用でき
るアドレッシングモードに制限が設けられている。 EaR,ShR @−SPは利用できない。 EaW,ShW #imm data,@SP+は利用できない。 EaM,ShM #imm data,@−SP,@SP+は利用できない。 EaA @SP+,@−SP,Rn,#imm dataは利用できない。 このほか、各命令の説明のところでもアドレッシングモ
ードに関する制限が述べられている。 11-6.解説に関する注意 スタック操作の命令では、TOSによりスタックトップを
示している。↑TOSはスタックからのポップ、↓TOSはス
タックへのプッシュである。 2オペランドの基本命令(MOV,MOVU,ADD,ADDU,ADDX,SU
B,SUBU,SUBX,AND,OR,XOR,CMP,CMPU)では、次のような
記法でそのオペレーションを説明している。 dest(src2)のサイズ(ビット数)をdで、src(src
1)のサイズ(ビット数)をsで表わし、src(src1),d
est(src2)をビット分解した値をD0,D1,...Dd−1,S0,S
1,...Ss−1で表わす。したがって、 dest(src2)=[D0.D1....Dd−2.Dd−1] src(src1)=[S0.S1....Ss−2.Ss−1] と書ける。[..]は2進数による表示を、‘.'は各桁の
区切りを意味する。この時、演算結果によってdestに設
定される値を dest.op.src=result=[R0.R1....Rd−2.Rd−1] で表わす。MOV,MOVU,CMP,CMPU以外の命令では、result
がdestにセットされる。またs>dの場合は、一般に演
算結果の下位ビットのみをdestに設定することになる。
この時、演算結果の上位ビットをカットする前の値を result=[F0.F1....Fs−2.Fs−1] で表わす。Rのビット数はd、Fのビット数はsであ
る。 ビット列[..]を符号付きの2進数と解釈した場合に
は、そのビット列の表現する値をS[..]で表わし、符
号なしの2進数と解釈した場合には、そのビット列の表
現する値をU[..]で表わす。また、そのビット列を符
号付きPACKED形式10進数と解釈した場合には、そのビッ
ト列の表現する値をSD[..]で表わし、符号なしPACKED
形式10進数と解釈した場合には、そのビット列の表現す
る値をUD[..]で表わす。さらに、‘−’は真偽反転
を、‘^'は累乗を表わす。 同じように、固定長ビットフィールド命令の説明では、 bitfield=[Bo.Bo+1....Bo+w−2.Bo+w−1] といった記法でビット単位の詳細なオペレーションを説
明している。 略記法として、 [Sn.Sn+1....Sm−2.Sm−1] を [Sn〜m−1] で表わし、 [S0.S1....Sd−2.Sd−1]=[S0〜s−1] を単に [S] で表わすことがある。[D],[R],[B],[F]
についても同様である。 12.「本発明装置」の命令セット 12-1.データ転送命令
estに転送する。 ソースオペランドのサイズがデスティネーションオペラ
ンドのサイズよりも小さい時は、ソースが符号拡張され
る。 デスティネーションの方がサイズが小さく、ソースの値
がデスティネーションのサイズの符号付き整数として表
現できない時は、V flagがセットされる。 MOV:Zはいわゆるclear命令であるが、動作やフラグ変化
が同じであるため、MOVの短縮形の一つとして扱ってい
る。 MOV,ADD,MOV,CMP命令は符号付きの演算を行なう命令で
あるが、MOV:Q,ADD:Q,SUB:Q,CMP:Qで利用できるリテラ
ルの範囲は1〜8(オペランドフィールド名#3n)とな
っており、正の範囲しか含んでいないので、注意が必要
である。MOV,MOVU命令でsrcがイミディエート値である
場合に、そのイミディエート値と利用できるフォーマッ
トとの関係をまとめると、次のようになる。 [MOV] :Z src=0 :Q 1≦src≦8 :E −128≦src≦127 :I srcは任意 :G srcは任意 [MOVU] :E 0≦src≦255 :G srcは任意 ADD,SUB,CMP命令も同様である。 (d≧sの時) [S0. S1....Ss−2.Ss−1]==> [S0.S0....S0. S0. S1....Ss−2.Ss−1]==> d−sビットだけ符号拡張 [R0.R1....Rd−s+1.Rd−s.Rd−S+1....Rd−2.Rd−
1](destに設定される) (d<sの時) [S0.S1....Ss−d−1.Ss−d. Ss−d+1....Ss−2.Ss−1]==> [Ss−d.Ss−d+1....Ss−2.Ss−1]==> S0.S1....Ss−d−1 s−dビットがカットされる。 [R0. R1. Rd−2.Rd−1](destに設定される) M flag R0 Z flag [R0〜d−1]=0 V flag☆ S[S]<−2^(d−1).or. S[S]≧+2^(d−1) つまり、d≧sであればクリアされ、d<sであれば、 S0=S1=....=Ss−d−1=Ss−d(=R0)の時クリ
ア、それ以外の場合にセットとなる。
estに転送する。 ソースオペランドのサイズがデスティネーションオペラ
ンドのサイズよりも小さい時は、ソースがゼロ拡張され
る。 デスティネーションの方がサイズが小さく、ソースの値
がデスティネーションのサイズの符号なし整数として表
現できない時は、V flagがセットされる。 (d≧sの時) [S0. S1....Ss−2.Ss−1]==> [0.0....0.S0. S1....Ss−2.Ss−1]==> d−sビットだけゼロ拡張 [R0.R1....Rd−s+1.Rd−s.Rd−S+1....Rd−2.Rd−
1](destに設定される) (d<sの時) [S0.S1....Ss−d−1.Ss−d.Ss−d+1....Ss−2.Ss−
1]==> [Ss−d.Ss−d+1....Ss−2.Ss−1]==> S0.S1....Ss−d−1 s−dビットがカットされる。 [R0. R1. Rd−2.Rd−1(destに設定される) M flag R0 Z flag [R0〜d−1]=0 V flag☆ U[S]≧+2^d つまり、d≧sであればクリアされ、d<sであれば、 S0=S1=....=Ss−d−1=0の時クリア、それ以外の
場合にセットとなる。
できるが、フラグ変化をしないこと、およびPOPとの対
称性により、別命令となっている。 src/EaRLで指定されるアドレッシングモードでは、@SP
+のモードは使用できない。これは、POP命令のdest/Ea
WLで@−SPのモードが使用できないのに合わせたもので
ある。 PUSH SPなど、srcオペランドにSPを含む場合の命令動作
規定については、付録12を参照のこと。
できるが、srcにSPを含んだ場合の動作がMOV @SP+と
は異なること、およびフラグ変化をしないこと、によっ
て別命令となっている。 dest/EaWLで指定されるアドレッシングモードでは、@
−SPのモードを使用することは禁止されており、指定し
た場合には予約命令例外RIEとなる。これは、POP @−
SPという命令を実行した場合に、SP更新がいつ行なわれ
るかという点について誤解を生じやすいためである。 POP SPなど、destオペランドにSPを含む場合の命令の動
作規定については、付録12を参照のこと。
ジスタはビットマップreglist/LIRL(レジスタリスト)
で指定する。LIRLは、EaRmLの拡張部よりも後に置かれ
る。 ロードするレジスタリスト(reglist)のビットマップ
指定は、第53図に示すように行なう。 EaRmLで@SP+のアドレッシングモードを指定した場合
は、小さい番号のレジスタから順にポップされ、SPはロ
ードしたレジスタ数の4倍(または8倍)だけ増加す
る。それ以外のアドレッシングモードを指定した場合
は、得られた実効アドレスがレジスタにロードすべきメ
モリデータの先頭を指す。いずれの場合にも、メモリ中
では小さい番号のレジスタの方が低いアドレスに置かれ
る。 ロードするレジスタのビットマップのフォーマットは、
BSCH/F,BVSCH/F命令で使用する回路(次に出現する‘0'
または‘1'のビットをMSB方向にサーチする回路)と同
じ回路によって、次に転送するレジスタを見付けられる
ように決めたものである。したがって、LDM @SP+の
場合は小さな番号のレジスタから転送するためにレジス
タ番号の小さな方がMSB側となっている。それ以外のア
ドレッシングモードの場合にも、レジスタ退避ブロック
の先頭アドレスを実効アドレスとしているため、やはり
レジスタ番号の小さい方から転送するのがよく、LDM
@SP+と同じフォーマットになる。 なお、これらのフォーマットはレジスタの転送順序まで
考えて決めたものであり、ハードウエア資源が少ない場
合には、ここで説明したような転送順序にするのが最適
と考えられる。しかし、実際の転送の順序は「本発明装
置」で規定されたものではなく、インプリメント側の自
由である。 EaRmLのアドレッシングモードでは、@−SP、レジスタ
直接モードRn,イミディエートモード#imm data、付加
モードの指定はイリーガルとする。付加モードを禁止す
るのは、LDMやSTMによって退避、復帰したレジスタやレ
ジスタ退避エリアと、付加モードで使用するレジスタや
メモリの間にオーバーラップがあった場合に、命令の再
実行が難しくなるためである。 レジスタリストがオール0の時は、何もせずに命令を終
了する。(特にエラーとはしない) LDM @SP+でレジスタリストにSPが含まれる場合の動
作規定については、付録12を参照のこと。
スタはビットマップreglist/LsWL(レジスタリスト)で
指定する。LsWLは、EaWmLの拡張部よりも後に置かれ
る。 ストアするレジスタリスト(reglist)のビットマップ
指定は、EaWmLが@−SPモードの時、第56図に示すよう
に、またその他のモードの時、第57図に示すように行
う。 EaWmLに@−SPのアドレッシングモードを指定した場合
は、大きい番号のレジスタから順にプッシュされ、SPは
セーブしたレジスタ数の4倍(または8倍)だけ減少す
る。それ以外のアドレッシングモードを指定した場合
は、得られた実効アドレスがレジスタをセーブすべきメ
モリ領域の先頭を指す。いずれの場合にも、メモリ中で
は小さい番号のレジスタの方が低いアドレスに置かれ
る。 このフォーマットは、BSCH/F,BVSCH/F命令で使用する回
路(次に出現する‘0'または‘1'のビットをMSB方向に
サーチする回路)と同じ回路によって、次に転送するレ
ジスタを見付けられるように決めたものである。したが
って、STM @−SPの時は大きな番号のレジスタから転
送するためにレジスタ番号の大きな方がMSB側となる。
それ以外のアドレッシングモードの場合には、レジスタ
退避ブロックの先頭アドレスを実効アドレスとしている
ため、レジスタ番号の小さい方から転送するのがよく、
レジスタ番号の小さな方がMSB側となっている。 なお、これらのフォーマットはレジスタの転送順序まで
考えて決めたものであり、ハードウエア資源が少ない場
合には、ここで説明したような転送順序にするのが最適
と考えられる。しかし、実際の転送の順序は「本発明装
置」で規定されたものではなく、インプリメント側の自
由である。 EaWmLのアドレッシングモードでは、@SP+、レジスタ
直接モードRn、イミディエートモード#imm data、付加
モードの指定はイリーガルとする。付加モードを禁止す
るのは、LDMやSTMによって退避、復帰したレジスタやレ
ジスタ退避エリアと、付加モードで使用するレジスタや
メモリの間にオーバーラップがあった場合に、命令の再
実行が難しくなるためである。 LDM,STM命令では、転送しないレジスタに対するメモリ
領域は割り当てない。例えば、 STM.W(R1,R3,R9),@−SP の場合は次のような動作を行なう。(ただし、命令実行
前のSP値をinitSPとする。) R9==>mem[initSP-4] R3==>mem[initSP-8] R1==>mem[initSP-12] initSP-12==>SP レジスタリストがオール0の時は、何もせずに命令を終
了する。(特にエラーとはしない) STM @−SPでレジスタリストにSPが含まれる場合の動
作規定については、付録12を参照のこと。
オペランドに転送する。 この命令のオペレーションそのものは、MOV命令などで
代用可能であるが、高級言語での左辺値のアドレス計算
やポインタ演算にすなおに使用できること、アドレス計
算用の回路を使用するため、より高速な演算が期待でき
ること、により別命令となっている。 短縮形の MOVA:R @(disp:16,Rs),Rd は、実質的には3オペランド加算命令 Rs+disp:16−>Rd となるが、フラグ変化をおこさないためMOVA命令に分類
されている。 srcaddrにPC相対間接モードを指定し、PC相対のディス
プレースメントを0とした場合には、現在のPC値、つま
りMOVA命令の先頭アドレスをdestに格納することにな
る。また、PC相対のディスプレースメントとしてMOVA命
令の命令長を指定した場合には、MOVA命令の次の命令の
アドレスをdestに格納することになる。これらの機能
は、ユーザプログラムのレベルでコルーチン処理を行な
う時に有効である。 アセンブラでは、〈オペレーション〉またはdest側でサ
イズ指定を行なう。srcaddr側はアドレス計算のみなの
で、サイズの指定はしない。 EaAで指定されるアドレッシングモードでは、イミディ
エート、@SP+,@−SPのモードは使用できない。
プッシュする。 この命令は、MOVA *,@−SPの短縮形と考えることも
できるが、実行速度の向上や、MOV命令〜PUSH命令の区
別との対応をとるために、別命令となっている。 srcにSPを含んだ倍の動作規定については、付録12を参
照のこと。
よりPSB(L flag,Z flag)をセットする。 src1オペランドのサイズとsrc2オペランドのサイズが異
なる時は、サイズの小さい方のオペランドが符号拡張さ
れた上で比較される。 なお、EaR!|,ShR!|のモードではイミディエートを禁止
しているが、@SP+は可能である。 CMP @SP+,@SP+の場合、スタックポインタはオペラ
ンドサイズの2倍だけ変化し、他の命令と比較すると変
則的であるが、この命令はスタックマシンをシミュレー
トする場合に使用することがある。 CMP:Zはいわゆるtest命令であるが、動作やフラグ変化
が同じであるため、CMPの短縮形の一つとして扱ってい
る。 以下では、 src1=[S0.S1....Ss−2.Ss−1] src2=[D0.D1....Dd−2.Dd−1] によってオペレーションを説明する。 (d≧sの時) [D0.D1....Dd−s−1.Dd−s.Dd−s+1....Dd−2.Dd−
1]− [S0.S0....S0.S0. S1....Ss−2.Ss−1]==> d−sのビットだけ符号拡張 [R0.R1....Rd−s−1.Rd−s.Rd−s+1....Rd−2.Rd−
1](どこにも設定されない) (d<sの時) [D0.D0....D0.D0. D1....Dd−2.Dd−1]− s−dビットだけ符号拡張 [S0.S1....Ss−d−1.Ss−d.Ss−d+1....Ss−2.Ss−
1]==> [F0.F1....Fs−d−1.Fs−d.Fs−d+1....Fs−2.Fs−
1](どこにも設定されない) L flag☆ S[D]<S[S] SUB命令と同じ Z flag [R0〜d−1]=0 (d≧sの時) ☆ [F0〜s−1]=0 (d<sの時)
よりPSB(L flag,Z flag)をセットする。 src1オペランドのサイズとsrc2オペランドのサイズが異
なる時は、サイズの小さい方のオペランドがゼロ拡張さ
れた上で比較される。 EaR!|のモードではイミディエートを禁止しているが、
@SP+は可能である。 以下では、 src1=[S0.S1....Ss−2.Ss−1] src2=[D0.D1....Dd−2.Dd−1] によってオペレーションを説明する。 (d≧sの時) [D0.D1....Dd−s−1.Dd−s.Dd−s+1....Dd−2.Dd−
1]− [ 0. 0.... 0 S0. S1....Ss−2.Ss−1]==> d−sビットだけゼロ拡張 [R0.R1....Rd−s−1.Rd−s.Rd−s+1....Rd−2.Rd−
1](どこにも設定されない) (d<sの時) [ 0. 0.... 0.D0. D1....Dd−2.Dd−1]− s−dビットだけゼロ拡張 [S0.S1....Ss−d−1.Ss−d.Ss−d+1....Ss−2.Ss−
1]==> [F0.F1....Fs−d−1.Fs−d.Fs−d+1....Fs−2.Fs−
1](どこにも設定されない) L flag☆ U[D]<U[S] SUBU命令と同じ Z flag [R0〜d−1]=0 (d≧sの時) ☆ [F0〜s−1]=0 (d<sの時)
ドを行なう。 boundの指すアドレスには上限値と下限値が組みになっ
て置かれており、その上限値、下限値とindexによりフ
ェッチされた比較値オペランドが比較される。boundの
実効アドレスに置かれているのが上限値であり、(boun
dの実効アドレス+オペランドサイズ)のアドレスに置
かれているのが下限値である。比較は符号付き整数とし
て行なわれる。比較値が上限値と下限値の間に入ってい
ない場合には、V flagがセットされるので、続けてTRAP
命令を実行することにより、例外処理を起動することが
できる。 /Sを指定した場合、比較値から下限値を引いたものがレ
ジスタxregにロードされる。/Sを指定しない場合、比較
値はそのままレジスタxregにロードされる。比較値をレ
ジスタにロードするのは、次にそれを配列のインデクス
のアドレス計算に使うことが多いためである。 オペレーション: tmp=mem[address of bound+operand size] if(index≧mem[address of bound].or.index<tmp) then set V flag; if(A==1) then index-tmp==>xreg else index==>xreg ただし、‘address of ’は‘mem[..]’の逆演算子で
あり、boundとmem[address of bound]が同じ意味にな
る。 下限の方は、値が一致した場合に範囲内と見なされる
が、上限の方は、値が一致した場合には範囲外と見なさ
れる。例えばboundのメモリが(0,100)となっている
と、CHKで範囲内となるのはindexが0〜99の場合であ
る。 L flag,Z flagは、下限値とindexとの比較結果にしたが
ってCMPと同様にセットされるが、L flag=1となるの
は、 index<下限値 の場合である。つまり、第68図のようになる 上限値<下限値の場合には、下限値との比較により1
になることもある。 この場合、index−下限値の演算結果によってフラグが
セットされることになる。次の3つの命令は、すべて第
二オペランドが第一オペランド(CHKでは第一オペラン
ドboundの下限値)よりも小さい時にL flagがセットさ
れるという仕様である。 CMP src1,src2 SUB src,dest CHK bound,index,xreg CHK命令では、上限値≧下限値のチェックは特に行なわ
ない。上限値と下限値の大小にかかわらず、「オペレー
ション」に書かれたものと等価の動作を行なうものとす
る。 EaRdRで指定されるアドレッシングモードでは、レジス
タ直接Rn,@−SP,@SP+,#imm dataのモードは使用で
きない。どうしてもレジスタ上の値と比較したい場合に
は、CHKではなくCMPを2回行なえばよい。
算する。 ソースオペランドのサイズがデスティネーションオペラ
ンドのサイズよりも小さい時は、ソースが符号拡張され
た上で加算される。 デスティネーションのサイズが小さく、演算結果がデス
ティネーションのサイズの符号付き整数として表現でき
ない時は、V flagがセットされる。 なお、L-formatのADD:L @SP+,SPについては、ADD:G
@SP+,SPと同じく (initSP+4)+@initSP==>SP の動作を行なうのが望ましい。しかし、インプリメント
上、L-formatではこのような動作を行なうのが難しい場
合があるので、ADD:L @SP+,SPの動作についてはイン
プリメント依存とする。これは、SUB:L,CMP:L,INDEXも
同様である。 詳しくは付録12を参照のこと。 (d≧sの時) [D0.D1....Dd−s−1.Dd−s.Dd−s+1....Dd−2.Dd−
1]+ [S0.S0....S0.S0. S1....Ss−2.Ss−1]==> d−sビットだけ符号拡張 [R0.R1....Rd−s−1.Rd−s.Rd−s+1....Rd−2.Rd−
1](destに設定される) (d<sの時) [D0.D0....D0.D0. D1....Dd−2.Dd−1]+ s−dビットだけ符号拡張 [S0.S1....Ss−d−1.Ss−d.Ss−d+1....Ss−2.Ss−
1]==> [F0.F1....Fs−d−1.Fs−d.Fs−d+1....Fs−2.Fs−
1]==> [ R0. R1....Rd−2.Rd−1](destに設定さ
れる) F0.F1....Fs−d−1 s−dビットがカットされる L flag☆ S[D]+S[S]<0 結果が負になることを表わす。 (M flagも結果の正負を表わすが、M flagが正しい正負
を表示するのはオーバーフローのない時に限られる。) M flag R0 Z flag [R0〜d−1]=0 V flag S[D]+S[S]<−2^(d−1).or. S[D]+S[S]≧+2^(d−1) X flag☆ いずれの場合も、destのサイズからの桁上げ
がX flagにセットされる。 (d≧sの時) U[D0.D1....Dd−s−1.Dd−s.Dd−s+1....Dd−2.Dd
−1]+ U[S0.S0....S0.S0. S1....Ss−2.Ss−1]≧+2^d d−sビットだけ符号拡張 (d<sの時) U[ D0. D1....Dd−2.Dd−1]+ U[Ss−d.S
s−d+1....Ss−2.Ss−1]≧+2^d S0.S1....Ss−d−1 s−dビットがカットされる
算する。 ソースオペランドのサイズがデスティネーションオペラ
ンドのサイズよりも小さい時は、ソースがゼロ拡張され
た上で加算される。 デスティネーションのサイズが小さく、演算結果がデス
ティネーションのサイズの符号なし整数として表現でき
ない時は、V flagがセットされる。 ADDUのL flagは、結果が正になるという意味で、必ず0
にリセットされるものとする。 (d≧sの時) [D0.D1....Dd−s−1.Dd−s.Dd−s+1....Dd−2.Dd−
1]+ [ 0. 0.... 0.S0. S1....Ss−2.Ss−1]==> d−sビットだけゼロ拡張 [R0.R1....Rd−s−1.Rd−s.Rd−s+1....Rd−2.Rd−
1](destに設定される) (d<sの時) [ 0. 0.... 0.D0. D1....Dd−2.Dd−1]+ s−dビットだけゼロ拡張 [S0.S1....Ss−d−1.Ss−d.Ss−d+1....Ss−2.Ss−
1]==> [F0.F1....Fs−d−1.Fs−d.Fs−d+1....Fs−2.Fs−
1]==> [ R0. R1....Rd−2.Rd−1](destに設定さ
れる) F0.F1....Fs−d−1 s−dビットがカットされる L flag 0 M flag R0 Z flag [R0〜d−1]=0 V flag U[D]+U[S]≧+2^d X flag☆ いずれの場合も、destのサイズからの桁上げ
がX flagにセットされる。 (d≧sの時) U[D0.D1....Dd−s−1.Dd−s.Dd−s+1....Dd−2.Dd
−1]+ U[ 0. 0.... 0.S0. S1....Ss−2.Ss−1]≧+2^d d−sビットだけゼロ拡張 ADDU命令のV flagと同じ (d<sの時) [ D0. D1 ....Dd−2.Dd−1]+ U[Ss−d.Ss−d+ 1....Ss−2.Ss−1]≧+2^d S0.S1....Ss−d−1 s−dビットがカットされる
ランドに加算する。 ソースオペランドのサイズがデスティネーションオペラ
ンドのサイズよりも小さい時は、ソースが符号拡張され
た上で加算される。 Z flagでは、フラグ値を累積できるようになっている。
また、ADDXとADDのフラグ変化は、符号拡張/ゼロ拡張
を含めてほとんど同じである。ADDとADDXでフラグ変化
の異なるのは、Z flagのみである。 なお、ADDX,SUBXの累種サイズ間演算については、例え
ば8バイトの数dest2〜dest1に4バイトの数srcを加え
る場合、 ADD @src.W,@dest1.W ADDX #0,@dest2.W のADDX:E #0といった形で利用することがある。 (d≧sの時) [D0.D1....Dd−s−1.Dd−s.Dd−s+1....Dd−2.Dd−
1]+ [S0.S0....S0.S0. S1....Ss−2.Ss−1]+X flag=
=> d−sビットだけ符号拡張 [R0.R1....Rd−s−1.Rd−s.Rd−s+1....Rd−2.Rd−
1](destに設定される) (d<sの時) [D0.D0....D0.D0. D1....Dd−2.Dd−1]+ s−dビットだけ符号拡張 [S0.S1....Ss−d−1.Ss−d.Ss−d+1....Ss−2.Ss−
1]+X flag==> [F0.F1....Fs−d−1.Fs−d.Fs−d+1....Fs−2.Fs−
1]==> [ R0. R1....Rd−2.Rd−1](destに設定さ
れる) F0.F1....Fs−d−1 s−dビットがカットされる。 L flag☆ S[D]+S[S]+X flag<0 符号付きの数と見て演算を行ない、結果が負になること
を表わす。 d≠sの場合には、オペランドが符号拡張されてから比
較される。 (M flagも結果の正負を表わすが、M flagが正しい正負
を表示するのはオーバーフローのない時に限られる。) M flag R0 Z flag [R0〜d−1]=0.and.previous Z flag V flag S[D]+S[S]+X flag<−2^ (d−1).or. S[D]+S[S]+X flag≧+2^ (d−1) 符号付きの数と見て演算を行ない、結果がオーバーフロ
ーすることを表わす。d≠sの場合にはオペランドが符
号拡張される。 X flag☆ いずれの場合も、destのサイズからの桁上げ
がX flagにセットされる。 (d≧sの時) U[D0.D1....Dd−s−1.Dd−s.Dd−s+1....Dd−2.Dd
−1]+ U[S0.S0....S0.S0. S1....Ss−2.Ss−1]+X flag
≧+2^d d−sビットだけ符号拡張 d>sの場合には符号拡張を行なう。これは、destや他
のフラグの設定の処理と共通化したためである。しか
し、符号拡張後の演算、比較ではオペランドが符号なし
の数として扱われる。 (d<sの時) U[ D0. D1.... Dd−2.Dd−1]+ U[Ss−d.Ss−d+1.... Ss−2.Ss−1]+X flag≧+2^d S0.S1....Ss−d−1 s−dビットがカットされる
減ずる。 ソースオペランドのサイズがデスティネーションオペラ
ンドのサイズよりも小さい時は、ソースが符号拡張され
た上で減算される。 デスティネーションのサイズが小さく、演算結果がデス
ティネーションのサイズの符号付き整数として表現でき
ない時は、V flagがセットされる。 (d≧sの時) [D0.D1....Dd−s−1.Dd−s.Dd−s+1....Dd−2.Dd−
1]− [S0.S0....S0.S0. S1....Ss−2.Ss−1]==> d−sビットだけ符号拡張 [R0.R1....Rd−s−1.Rd−s.Rd−s+1....Rd−2.Rd−
1](destに設定される) (d<sの時) [D0.D0....D0.D0. D1....Dd−2.Dd−1]− s−dビットだけ符号拡張 [S0.S1....Ss−d−1.Ss−d.Ss−d+1....Ss−2.Ss−
1]==> [F0.F1....Fs−d−1.Fs−d.Fs−d+1....Fs−2.Fs−
1]==> [ R0. R1....Rd−2.Rd−1](destに設定さ
れる) F0.F1....Fs−d−1 s−dビットがカットされる。 L flag☆ S[D]−S[S]<0 結果が負になることを表わす。 (M flagも結果の正負を表わすが、M flagが正しい正負
を表示するのはオーバーフローのない時に限られる。) M flag R0 Z flag [R0〜d−1]=0 V flag S[D]−S[S]<−2^(d−1).or. S[D]−S[S]≧+2^(d−1) X flag☆ いずれの場合も、destのサイズからの桁下げ
がX flagにセットされる。 (d≧sの時) U[D0.D1....Dd−s−1.Dd−s.Dd−s+1....Dd−2.Dd
−1]− U[S0.S0....S0.S0. S1....Ss−2.Ss−1]<0 d−sビットだけ符号拡張 (d<sの時) U[ D0. D1 ....Dd−2.Dd−1]− U[Ss−d.Ss−d+1 ....Ss−2.Ss−1]<0 S0.S1....Ss−d−1 s−dビットがカットされる
減ずる。 ソースオペランドのサイズがデスティネーションオペラ
ンドのサイズよりも小さい時は、ソースがゼロ拡張され
た上で減算される。 デスティネーションのサイズが小さく、演算結果がデス
ティネーションのサイズの符号なし整数として表現でき
ない時は、V flagがセットされる。 (d≧sの時) [D0.D1....Dd−s−1.Dd−s.Dd−s+1....Dd−2.Dd−
1]− [ 0. 0.... 0.S0. S1....Ss−2.Ss−1]==> d−sビットだけゼロ拡張 [R0.R1....Rd−s−1.Rd−s.Rd−s+1....Rd−2.Rd−
1](destに設定される) (d<sの時) [ 0. 0.... 0.D0. D1....Dd−2.Dd−1]− s−dビットだけゼロ拡張 [S0.S1....Ss−d−1.Ss−d.Ss−d+1....Ss−2.Ss−
1]==> [F0.F1....Fs−d−1.Fs−d.Fs−d+1....Fs−2.Fs−
1]==> [ R0. R1....Rd−2.Rd−1](destに設定さ
れる) F0.F1....Fs−d−1 s−dビットがカットされる。 L flag☆ U[D]−U[S]<0 結果が負になることを表わす。 (M flagも結果の正負を表わすが、M flagが正しい正負
を表示するのはオーバーフローのない時に限られる。) M flag R0 Z flag [R0〜d−1]=0 V flag U[D]−U[S]<0 SUBU命令のL flagと同じ X flag☆ いずれの場合も、destのサイズからの桁下げ
がX flagにセットされる。 (d≧sの時) U[D0.D1....Dd−s−1.Dd−s.Dd−s+1....Dd−2.Dd
−1]− U[ 0. 0.... 0.S0. S1....Ss−2.Ss−1]<0 d−sビットだけゼロ拡張 SUB命令のX flag、SUBU命令のL flag,V flagと同じ (d<sの時) U[ D0. D1....Dd−2.Dd−1]− U[Ss−d.Ss−d+1 ....Ss−2.Ss−1]<0 S0.S1....Ss−d−1 s−dビットがカットされる
ランドから減ずる。 ソースオペランドのサイズがデスティネーションオペラ
ンドのサイズよりも小さい時は、ソースが符号拡張され
た上で減算される。 Z flagではフラグ値を累積できるようになっている。ま
た、SUBXとSUBのフラグ変化は、符号拡張/ゼロ拡張を
含めてほとんど同じである。SUBとSUBXでフラグ変化の
異なるのは、Z flagのみである。 (d≧sの時) [D0.D1....Dd−s−1.Dd−s.Dd−s+1....Dd−2.Dd−
1]− [S0.S0....S0.S0. S1....Ss−2.Ss−1]−X flag=
=> d-sビットだけ符号拡張 [R0.R1....Rd−s−1.Rd−s.Rd−s+1....Rd−2.Rd−
1](destに設定される) (d<sの時) [D0.D0....D0.D0. D1....Dd−2.Dd−1]− s−dビットだけ符号拡張 [S0.S1....Ss−d−1.Ss−d.Ss−d+1....Ss−2.Ss−
1]−X flag==> [F0.F1....Fs−d−1.Fs−d.Fs−d+1....Fs−2.Fs−
1]==> [ R0. R1....Rd−2.Rd−1](destに設定さ
れる) F0.F1....Fs−d−1 s−dビットがカットされる。 L flag☆ S[D]−S[S]−X flag<0 符号付きの数と見て演算を行ない、結果が負になること
を表わす。 d≠sの場合にはオペランドが符号拡張されてから比較
される。 (M flagも結果の正負を表わすが、M flagが正しい正負
を表示するのはオーバーフローのない時に限られる。) M flag R0 Z flag [R0〜d−1]=0.and.previous Z flag V flag S[D]−S[S]−X flag<−2^(d−
1).or. S[D]−S[S]−X flag≧+2^(d−
1) 符号付きの数と見て演算を行ない、結果がオーバーフロ
ーすることを表わす。d≠sの場合にはオペランドが符
号拡張される。 X flag☆ いずれの場合も、destのサイズからの桁下げ
がX flagにセットされる。 (d≧sの時) U[D0.D1....Dd−s−1.Dd−s.Dd−s+1....Dd−2.Dd
−1]− U[S0.S0....S0.S0. S1....Ss−2.Ss−1]−X flag
<0 d−sビットだけ符号拡張 d>sの場合には符号拡張を行なう。これは、destや他
のフラグの設定の処理と共通化したためである。しか
し、符号拡張後の演算、比較ではオペランドが符号なし
の数として扱われる。 (d<sの時) U[ D0. D1....Dd−2.Dd−1]− U[Ss−d.Ss−d+1 ....Ss−2.Ss−1]−X flag<0 S0.S1....Ss−d−1 s−dビットがカットされる
ずる。乗算は符号付きで行われ、オペランドも符号付き
整数とみなされる。 この命令は、被乗数のサイズと結果のサイズが等しいた
め、高級言語向きである。 デスティネーションのサイズが小さく、演算結果がデス
ティネーションのサイズの符号付き整数として表現でき
ない時は、V flagがセットされる。オーバーフローが生
じた場合にも、destにセットされるデータ(正しい結果
の下位ビット)が基準となってM flag,Z flagがセット
される。例えば、R0=H′10000で MUL.W #H′10000,R0 を実行した場合、積がH′100000000となるため、R0=
0(下位ビット),V flag=1,Z flag=1となる。
ずる。乗算は符号なしで行われ、オペランドも符号なし
整数とみなされる。 デスティネーションのサイズが小さく、演算結果がデス
ティネーションのサイズの符号なし整数として表現でき
ない時は、V flagがセットされる。
ずる。この命令は、積が倍長で得られるため、srcとdes
tのほかに、積の上位ビットを入れるためのテンポラリ
レジスタtmpを指定する。サイズは32ビットに固定(32/
64から選択)とする。乗算は符号なしで行われ、積のサ
イズは被乗数のサイズの2倍になる。 [MULXのオペレーション] dest[0:31]×src[0:31]==>tmp1[0:63] tmp1[32:63]==>tmp[0:31] tmp1[0:31]==>dest[0:31] MULXでは、得るべき結果がdest,tmpの二つあるので、両
者が重なった場合(destでtmpと同じレジスタを指定し
た場合)の処置が問題となる。一般に、tmp(MULXの上
位桁)の方は次の桁への桁上がりとして用いられること
が多いので、最終桁の計算などでは使用しないこともあ
る。したがって、両者が重なった場合には、destに設定
すべき値(MULXの下位桁)の方が残るものとする。(付
録12参照) MULXのM flag,Z flagのフラグ変化は、destを基準とす
る。tmpに設定される値は、これらのフラグには影響し
ない。このような仕様になったのは、次のような理由に
よる。 ・ADDX,SUBXなどのフラグ変化の仕様に合わせたため。
(ADDX,SUBXでは、X flagがセットされていても、dest
が0であればZ flagがセットされる。) ・多倍長演算を考えた場合には、tmp&destのみでフラ
グを変化させてもあまり意味がない。フラグ本体の意味
で変化させるためには、全体の値を通して判定すること
が必要であり、個々の命令だけでは対処できない。tmp
&destでフラグ変化を行なったとしても、結局中途半端
である。 例: [実行前] R1=H′00000000 dest=H′20000000 src=H′40000000 MULX @src,@dest,R1 [実行後] destに設定される値が0なので、Z flagがセットされ
る。 なお、MULX,DIVXでは、ADDX,SUBXとは異なり、Z flagは
累積した変化をするわけではない。 F flagによってtmp=0のテストが可能である。 !=0の場合は、動作を保証しない。 実際「本発明装置」では!=0の場合、srcサイズを、!
R(8ビットまたは16ビット)としてオペランドのフェ
ッチを行ない、それを32ビットに符号拡張して命令が実
行される。 ただし、dest,tmpは!Rによらず常に32ビットとして扱わ
れる。
る。除算は符号付きで行われ、オペランドも符号付き整
数とみなされる。 この命令は、被除数のサイズと結果のサイズが等しいた
め、高級言語向きである。 商は0方向に丸められ、余りの符号は被除数と同じにな
る。 例: 10/3 → 商=3, 剰余=1 (−10)/3 → 商=(−3),剰余=(−1) 10/(−3) → 商=(−3),剰余=1 src=0の場合には、ゼロ除算例外(ZDE)となる。ゼロ
除算の場合、V flagがセットされて例外処理が起動さ
れるが、destの値は変化しない。このとき、destのライ
トアクセスを行なうかどうか、すなわち、同じ値を書き
込むか、何も書き込まないかは規定しないものとする。
また、V flag以外のフラグも変化しない。これは、dest
に合わせたため、および、例外処理プログラムで例外発
生要因を解析するためには、できるだけ以前の状態(フ
ラグを含めて)が保存されている方が望ましいためであ
る。 DIVで0除算以外の場合にオーバーフローが発生するの
は(最小負数)÷(−1)の場合のみである。DIVはDIV
Xとは異なり、コンパイラの生成する普通の演算命令で
あるため、できるだけ他の演算命令と同じ仕様にする方
が望ましい。そこで、この場合のフラグの変化は、それ
ぞれのフラグの意味を生かして、 V flag=1,L flag=0,M flag=1,Z flag=0 {最小負数÷(−1)の時} とする。オーバーフローするのは(最小負数÷(−
1))に限るので、正しい結果の下位ビットがdestにセ
ットされると考えても、結局destは変化しない。正しい
結果の下位ビットになったと考えても結局同じ値であ
る。 例: src=H′ffff=(−1),dest=H′8000=(−3276
8) でDIV.Hを実行した場合 ==>dest=H′8000,V flag=1 destのH′8000は、正しい結果 (H′...008000=32768)の下位ビットと考えることも
できるし、destが変化しなかったと考えることもでき
る。
る。除算は符号なしで行われ、オペランドも符号なし整
数とみなされる。 src=0の場合には、ゼロ除算例外(ZDE)となる。ゼロ
除算の場合、V flagがセットされて例外処理が起動さ
れるが、destは変化しない。このとき、destのライトア
クセスを行なうかどうか、すなわち、同じ値を書き込む
か、何も書き込まないかは規定しないものとする。ま
た、V flag以外のフラグも変化しない。これは、destに
合わせたため、および、例外処理プログラムで例外発生
要因を解析するためには、できるだけ以前の状態(フラ
グを含めて)が保存されている方が望ましいためであ
る。 DIVU命令では、0除算以外の場合に、オーバーフローが
発生してV flagがセットされることはない。したがっ
て、0除算以外の場合は必ずV flagがクリアされる。
る。この命令は、多倍長除算のプリミティブとなるた
め、srcとdestのほかに、拡張演算のためのテンポラリ
値(剰余)を置くレジスタを指定する。サイズは32ビッ
トに固定(32/64から選択)とする。除算は符号なしで
行われ、被除数のサイズは除数のサイズの2倍になる。 [DIVXのオペレーション] concatinate(tmp[0:31],dest[0:31]) ==>tmp1[0:63] quo(tmp1[0:63],src[0:31])==>dest [0:31] rem(tmp1[0:63],src[0:31])==>tmp [0:31] DIVXでは、得るべき結果がdest,tmpの二つあるので、両
者が重なった場合(destでtmpと同じレジスタを指定し
た場合)の処置が問題となる。一般に、tmp(DIVXの剰
余)の方は次の桁への桁下がりとして用いられることが
多いので、最終桁の計算などでは使用しないこともあ
る。したがって、両者が重なった場合には、destに設定
すべき値(DIVXの商)の方が残るものとする。 なお、DIVXは被除数が多倍長の場合に使用できる命令で
あるが、除数が多倍長になった場合には、DIVXが使用で
きず、プログラムによってシフトや減算を繰り返しなが
ら割り算を進めなければならない。この際、多倍長のシ
フト演算が必要になる。多倍長のシフトを実現するた
め、X flagを通したローテイト命令(SHXR,SHXL)が用
意されている。 DIVXのM flag,Z flagのフラグ変化は、dest(商)を基
準とする。tmpに設定される値(剰余)は、これらのフ
ラグには影響しない。ただし、F flagによってtmp=0
のテストが可能である。 MULX,DIVXではADDX,SUBXとは異なり、Z flagは累積した
変化をするわけではない。 DIVXで結果がオーバーフローした場合、MOV,ADD,SUB,MU
Lでのオーバーフローと仕様を合わせるという意味で
は、正しい結果の下位ビットがdestに設定されるのが望
ましい。しかし、ADD,SUBのように、オーバーフローの
時も自然に正しい結果の下位ビットが得られるものと違
って、除算の場合には上位ビットから計算を行なうた
め、アルゴリズムの関係で正しい結果の下位ビットを得
るのが難しい。したがって、DIVXのオーバーフローの場
合には、destを変化させないという仕様にする。 DIVXで商がdestに入らず、オーバーフローが発生した場
合には、V flag以外のフラグは変化しない。これは、DI
VXでオーバーフローが発生した場合に、destが変化しな
いことに合わせたものである。 src=0の場合には、ゼロ除算例外(ZDE)となる。ゼロ
除算の場合dest,tmpは変化しない。このとき、destのラ
イトアクセスを行なうかどうか、すなわち、同じ値を書
き込むか、何も書き込まないかは規定しないものとす
る。また、V flag以外のフラグも変化しない。これは、
destに合わせたため、および、例外処理プログラムで例
外発生要因を解析するためには、できるだけ以前の状態
(フラグを含めて)が保存されている方が望ましいため
である。 !=0の場合は、動作を保証しない。 実際「本発明装置」では!=0の場合、srcサイズを、!
R(8ビットまたは16ビット)としてオペランドのフェ
ッチを行ない、それを32ビットに符号拡張して命令が実
行される。 ただし、dest,tmpは!Rによらず常に32ビットとして扱わ
れる。
り、その剰余を求める。除算は符号付きで行われ、オペ
ランドも符号付き整数とみなされる。 この命令は、被除数のサイズと剰余のサイズが等しいた
め、高級言語向きである。 商は0方向に丸められ、余りの符号は被除数と同じにな
る。 例: 10/3 → 商=3, 剰余=1 (−10)/3 → 商=(−3),剰余=(−1) 10/(−3) → 商=(−3),剰余=1 src=0の場合には、ゼロ除算例外(ZDE)となる。ただ
し、REMで0除算を行なった場合には、オーバーフロー
をクリアして例外処理を起動するようにする。REM命令
では、DIV命令とは異なり、0除算をしてもdest(剰
余)がオーバーフローするわけではないので、V flagは
クリアしておく方が合理的である。また、V flagをクリ
アしておくと、例外処理の中でDIVによるエラーかREMに
よるエラーかが判定しやすい。 0除算の場合、destは無変化である。destに対してメモ
リアクセスを行なうか(readまたは同じ値でread-modif
y-write)、アクセスを行なわないか、については、イ
ンプリメント方法を縛ることになるので、規定しない。
り、その剰余を求める。除算は符号なしで行われ、オペ
ランドも符号なし整数とみなされる。srcとdestのサイ
ズの違う場合にはゼロ拡張が行なわれる。 この命令は、被除数のサイズと剰余のサイズが等しいた
め、高級言語向きである。 src=0の場合には、ゼロ除算例外(ZDE)となる。0除
算の場合の処置はREMと同様である。
stの初期値が正のときセットされる。 M flag 命令実行後のdestのMSBが1のとき、すなわちd
estの初期値が正または最小負数のときセットされる。 Z flag 命令実行後のdestの値が0のとき、すなわちde
stの初期値が0のときセットされる。 V flag destの初期値が最小負数(MSBのみ1で他のビ
ットはall 0)のみセットされる。
として、スケールの乗算とインデクスの加算を行なう。 subscriptのサイズがxregのサイズよりも小さい時は、s
ubscriptが符号拡張される。xreg,indexsize,subscript
は符号付きの整数と考え、乗算および加算は符号付きで
行なう。乗算または加算でオーバーフローを検出した場
合には、V flagをセットする。 indexsizeは固定値(immediate)で済むことが多いが、
メモリ上に配列のディスクリプタを作ることを考え、汎
用アドレッシングとしている。 INDEX命令がCHK命令の後で実行されるならば、subscrip
tはレジスタのみの指定でよい。しかし、高級言語の仕
様によっては範囲をチェックしない(CHK命令を実行し
ない)こともあるので、メモリ上の変数をsubscriptと
して使用できるように、subscriptも汎用アドレッシン
グとしている。 [INDEXのオペレーション] xreg*indexsize+subscript==>xreg INDEX命令では、オペランドxreg,indexsize,subscript
は、すべてポインタではなく符号付きの数として扱われ
る。負であってもそのまま演算し、EITなどの特別な動
作はしない。また、フラグ変化(V flag,L flag,M fla
g,Z flag)も一般の算術演算命令に準じたものになって
いる。これに関して若干補足しておく。INDEXで扱うオ
ペランドは、ポインタというよりも配列のインデクスで
あり、INDEXでは配列のインデクスを一次元に展開する
という処理を行なう。インデクスがポインタになるの
は、付加モードのスケーリングで(×4)などを行なっ
た後である。したがって、INDEXで扱うデータを符号付
きと考えても特に不自然はないし、インデクスが負にな
ると困るような言語では、それをチェックすることもで
きる。 !=0のときは、動作を保証しない。 実際「本発明装置」では!=0の場合、indexsizeサイ
ズを!R(8ビットまたは16ビット)としてオペランドの
フェッチを行ない、それを32ビットに符号拡張して命令
が実行される。ただし、xregは!Rによらず常に32ビット
として扱われる。
い。 ・EaR,EaR2が@−SPのとき 12-4.論理演算命令
論理積をとる。 ソースオペランドのサイズがデスティネーションオペラ
ンドのサイズと異なる異種サイズ間の演算(AND:GのRR
≠MM、AND:EのMM≠00)になった場合、命令はそのまま
実行され、予約命令例外とはならないが、destに設定さ
れる結果は保証できない(インプリメント依存になる)
ものとする。「本発明装置」の仕様としては、異種サイ
ズ間の論理演算を規定していないので、この機能をソフ
トウエアで利用してはいけない。異種サイズ間の論理演
算はあまり意味のない命令であるが、これを予約命令例
外としないのは、インプリメントの負担が大きく、実行
速度に影響が出るためである。 M flag R0 Z flag [R0〜d−1]=0
論理和をとる。 ソースオペランドのサイズがデスティネーションオペラ
ンドのサイズと異なる異種サイズ間の演算(OR:GのRR≠
MM、OR:EのMM≠00)になった場合、命令はそのまま実行
され、予約命令例外とはならないが、destに設定される
結果は保証できない(インプリメント依存になる)もの
とする。 M flag R0 Z flag [R0〜d−1]=0
排他的論理和をとる。 ソースオペランドのサイズがデスティネーションオペラ
ンドのサイズと異なる異種サイズ間の演算(XOR:GのRR
≠MM、XOR:EのMM≠00)になった場合、命令はそのまま
実行され、予約命令例外とはならないが、destに設定さ
れる結果は保証できない(インプリメント依存になる)
ものとする。 M flag R0 Z flag [R0〜d−1]=0
estの初期値のMSBが0のときセットされる。 Z flag 命令実行後のdestの値が0のとき、すなわちde
stの初期値が0のときセットされる。
countで指定されたビット数だけ算術シフトする。一般
形の命令では、countの符号によってシフト方向を指定
する。countが正の時左シフト、負の時右シフトとな
る。 算術シフトであるため、右シフトの場合にはデスティネ
ーションのMSB(符号ビット)が変化せず、同じ値が右
側のビットにコピーされていく。左シフトの場合には、
LSBに0が入り、0が左側のビットにコピーされてい
く。 正負によるシフト方向の指定は、浮動小数点演算のエミ
ュレーションなどに有効な場合がある。 左シフトの場合はSHAの短縮形がないが、フラグ変化がS
HAと異なってもよければ、SHLの短縮形SHL:Qで代用でき
る。 [左シフト(count>0)の場合] 第111図に示す。 [右シフト(count<0)の場合] 第112図に示す。 なお、count=0の場合は、X flag=0となる。 SHA命令では、countのサイズとして8ビットのみが有効
である。RR≠00の場合動作を保証しない。RR≠00の機能
が利用できないのは、主としてインプリメント上の制約
によるものである。 RR≠00の場合には、「本発明装置」では、サイズRRでco
untオペランドのフェッチを行ない、countの下位8ビッ
トのみを有効としてそのまま命令を実行する。 SHAは算術演算なのでL flagをセットするが、これはdes
tのはじめの値の符号(MSB)を反映する。これは、L fl
agが、オーバーフローやアンダーフローが発生した場合
にも、常に正しい計算結果の符号を反映するという性質
を持っているためである。シフト命令の場合、オーバー
フローが起こらなければ、destの符号は変化しない。右
シフトの場合、または左シフトでオーバーフローがなか
った場合にはL flag=M flagとなるが、左シフトでオー
バーフローが発生した場合には、L flagとM flagが異な
る変化をすることがある。 「本発明装置」はbig-endianのチップであるため、coun
tをビット位置の増減の意味で考えるか、2の累乗の意
味で考えるかによって、シフト方向が逆になってしま
う。すなわち、前者の考え方ではcount>0の時右シフ
トとすべきであるのに対して、後者の考え方では、litt
le-endianの場合と同じように、count>0の時左シフト
となる。しかし、シフト命令はビット操作関係の命令よ
りも算術演算関係の命令に近いものであるから、count
をビット位置の増減の意味で考えるよりは、2の累乗の
意味で考える方が自然である。したがって、「本発明装
置」ではcount>0の時左シフトという仕様になってい
る。 SHL,SHAでは、countの絶対値が(destのサイズ+1)を
越えた場合にも、指定された数だけそのままシフトを続
ける。結果的に、countの絶対値が(destのサイズ+
1)の場合と同じ動作になる。例えば、次のような動作
をする。 SHA #33,dest.W ;dest =X flag=0 SHL #33,dest.W ;dest =X flag=0 SHA #−33,dest.W ;dest =X flag=旧destのMSB SHL #−33,dest.W ;dest =X flag=0 なお、X flagを除けば、countの絶対値が(destのサイ
ズ)に等しい場合も同じ結果になる。
tで指定されたビット数だけ論理シフトする。一般形の
時、シフト方向はcountの符号で指定する。countが正の
時左シフト、負の時右シフトとなる。 右シフトの場合には、MSBに0が入り、0が右側のビッ
トにコピーされていく。また、左シフトの場合には、LS
Bに0が入り、0が左側のビットにコピーされていく。 [左シフト(count>0)の場合] 第115図に示す。 [右シフト(count<0)の場合] 第116図に示す。 なお、count=0の場合は、X flag=0となる。 SHL命令では、countのサイズとして8ビットのみが有効
である。RR≠00の場合、動作を保証しない。RR≠00の機
能が利用できないのは、主としてインプリメント上の制
約によるものである。RR≠00の場合には、「本発明装
置」ではサイズRRでcountオペランドのフェッチを行な
い、countの下位8ビットのみを有効としてそのまま命
令を実行する。
tで指定されたビット数だけ回転する。すなわち、LSB
(MSB)から溢れたビットをMSB(LSB)に詰めながらシ
フトを行なう。 回転方向はcountの符号で指定する。countが正の時左回
転、負の時右回転となる。 回転の際、フラグは通さない。 [左回転(count>0)の場合] 第119図に示す。 [右回転(count<0)の場合] 第120図に示す。 なお、count=0の場合は、X flag=0となる。 ROT命令では、countのサイズとして8ビットのみが有効
である。RR≠00の場合、動作を保証しない。RR≠00の機
能が利用できないのは、主としてインプリメント上の制
約によるものである。RR≠00の場合には、「本発明装
置」ではサイズRRでcountオペランドのフェッチを行な
い、countの下位8ビットのみを有効としてそのまま命
令を実行する。 ROTでcountの絶対値が(destのサイズ)を越えた場合に
も、指定された数だけそのままローテイトを続ける。結
果的に、countを(destのサイズ)で割った剰余をcount
とした場合と同じ動作になる。ただし、countが(dest
のサイズ)の整数倍(≠0)の場合には、MSBまたはLSB
に応じてX flagのセットされる点が、count=0の場合
とは異なる。例えば、データサイズと同じビット数だけ
回転した場合、データの値そのものは変化せず、destは
count=0の時と同じ値になる。しかし、フラグにはも
とのデータのLSBがコピーされるため、フラグ変化はcou
nt=0の時とは異なったものになる。
に詰める。MSBからあふれたビットはX flagに入る。こ
の命令は、複数ワードの1ビットシフトを行なうための
プリミティブとして専用化したものであり、シフト対象
のサイズを32ビットに固定している点、1ビットのシフ
トしかできない点、などにおいてSHA,SHL,ROTとはかな
り仕様が異なる。 DIVXは被除数が多倍長の場合に使用できる命令である
が、除数が多倍長になった場合には、DIVXが使用でき
ず、プログラムによってシフトや減算を繰り返しながら
割り算を進めなければならない。その際、多倍長のシフ
ト演算が必要になる。この命令は、このような場合に使
用することを目的とした命令である。第123図にこれを
示す。
に詰める。LSBからあふれたビットはX flagに入る。こ
の命令は、複数ワードの1ビットシフトを行なうための
プリミティブとして専用化したものであり、シフト対象
のサイズを32ビットに固定している点、1ビットのシフ
トしかできない点、などにおいてSHA,SHL,ROTとはかな
り仕様が異なる。 DIVXは被除数が多倍長の場合に使用できる命令である
が、除数が多倍長になった場合には、DIVXが使用でき
ず、プログラムによってシフトや減算を繰り返しながら
割り算を進めなければならない。その際、多倍長のシフ
ト演算が必要になる。この命令は、このような場合に使
用することを目的とした命令である。第126図にこれを
示す。
stのサイズにまでゼロ拡張した後、destのサイズでバイ
ト順を逆転する。 srcよりもdestのサイズの方が小さい場合には、srcの上
位バイトをカットしてdestのサイズとした後、destのサ
イズでバイト順を逆転する。(srcのアドレスをずらし
た上でsrcとdestを同じサイズとしても、結果は同じに
なる) 例: src=H′1234 RVBY src.H,dest.H==>dest= H′3412 RVBY src.H,dest.W==>dest= H′34120000 RVBY src.H,dest.B==>dest= H′34(H′12ではない) この命令は、endianの変換に対するオーバーヘッドを削
減することを目的とした命令である。
stのサイズにまでゼロ拡張した後、destのサイズでビッ
ト順を逆転する。 srcよりもdestのサイズの方が小さい場合には、srcの上
位バイトをカットしてdestのサイズとした後、destのサ
イズでビット順を逆転する。(srcのアドレスをずらし
た上でsrcとdestを同じサイズとしても、結果は同じに
なる) この命令は、endianの変換に対するオーバーヘッドを削
減することを目的とした命令である。ビットマップの処
理を考えると、ビットを逆順にするビットリバース命令
RVBIもあった方がよいが、バイトリバース命令RVBYより
も頻度が少ないこと、追加のハードウエアが必要となる
可能性が強いこと、により、RVBI命令は<<L2>>とす
る。
する。レジスタ上のビットを操作する場合には、このほ
かにbaseのサイズも対象ビットの指定に影響する。 [メモリ上のビット操作をする場合] 第131図に示す。 「本発明装置」の一般形のビット操作命令では、offset
の値に制限がなく、offsetがバイト境界を越えてもよい
ようになっている。offsetは、符号付き整数として扱わ
れる。 ビット操作命令では、BBフィールドによりメモリアクセ
スの範囲を指定できるようになっている。これは、BTST
でreadを行なうメモリアドレスの範囲、およびBSET,BCL
R,BNOTでread-modify-writeを行なうメモリアドレスの
範囲を意味するものである。アクセスされるメモリアド
レスの範囲は、入出力やマルチプロセッサを使用した場
合に問題となることがある。 しかし、実際には、バイト単位のアクセス(‘.B')の
みが使用できればほとんどの場合に十分であるため、ハ
ーフワード、ワード単位のアクセスは<<L2>>とする
(ただしレジスタに対するビット操作命令を除く)。ま
た、ハーフワード、ワード単位のアクセスが意味を持つ
のは、アライメントのとれたハーフワードやワードをア
クセスする場合に限られているので、ハーフワード、ワ
ード単位のアクセスの機能を利用するためには、baseと
して必ずアライメントのとれたアドレスを指定しなけれ
ばならないという制限を設ける。これは、アクセス範囲
の指定に関するインプリメントを容易にするためであ
る。したがって、アライメントのとれたハーフワードの
単位で、対象ビットを含むメモリアクセスを行ないたい
場合には、baseとして2の倍数を指定する必要がある。
また、アライメントのとれたワードの単位で、対象ビッ
トを含むメモリアクセスを行ないたい場合には、baseと
して4の倍数を指定する必要がある。offsetの値につい
ては制限はない。baseとしてアライメントのとれていな
いアドレスを指定した場合のアクセス範囲は、インプリ
メントに依存するものとする。 「本発明装置」では、<<L2>>となっているメモリに
対するハーフワード、ワード単位のアクセスのインプリ
メントを行なう。またbaseとしてアラインメントのとれ
ていないアドレスを指定した場合にも、アクセス範囲は
アラインメントのとれたハーフワード、ワード単位でア
クセスを行なう。 [例] BSET.B♯H′84,@H′100 offset%8=4;base+offset/8=H′110なので、H′1
10のbit4をセットする。 H′110の1バイトについてread-modify-writeが行なわ
れる。 BSET.B♯H′7c,@H′101 offset%8=4;base+offset/8=H′110でアクセスサ
イズがバイトなので、BSET.B♯H′84,@H′100と全く
同じ動作をする。 BSET.W♯H′84,@H′100 offset%8=4;base+offset/8=H′110なので、H′1
10のbit4をセットする。 baseが4の倍数になっているので、H′100〜H′103の
アライメントのとれた32ビットについてread-modify-wr
iteを行ない、対象ビットをセットする。 BSET.W♯H′7c,@H′101 offset%8=4;base+offset/8=H′110なので、おな
じようにH′110のbit4をセットする。 しかし、baseが4の倍数ではないので、read-modify-wr
iteを行なうアクセス範囲についてはインプリメント依
存である。 なお、BBで示されるサイズは、「どの範囲に対してread
-modify-writeを行なうか?」ということであり、オフ
セットの範囲(例えば、‘.B'であればオフセットが8
より小さくなる、など)を規定するものではない。 レジスタに対するビット操作命令では、アクセスのサイ
ズ(baseのサイズ)によってoffset=0(MSB)のビッ
ト位置が変わるため、baseのサイズは重要な意味を持
つ。baseがレジスタ直接Rnの場合は、baseのサイズ‘.
H',‘,W'も<<L1>>である。 レジスタRnをbaseとしたビット操作命令の場合、offset
は‘.B'の時下位3ビット、‘.H'の時下位4ビッ
ト、‘.W'の時下位5ビット、‘.L'の時下位6ビットの
みが有効であり、上位ビットは無視される。上位ビット
が0でなくても、エラー、EITとはしない。アーキテク
チャ面から見ると、上位ビットを無視するよりも、BF命
令のwidthなどと同じように、きちんとoffsetの範囲を
チェックする方が望ましいが、チェックを行なうことに
より命令の実行時間が増大するため、offsetはアクセス
サイズのビット数でmoduloをとって使用することにして
いる。 レジスタ上に8ビットデータ、16ビットデータ、32ビッ
トデータを置いた場合では、それぞれのデータで同じビ
ット位置を持つビットであっても、実際には異なったビ
ットに対応することになるので、注意が必要である。仕
様が複雑化するのを避けるため、アセンブラのデフォル
トはメモリ対象、レジスタ対象とも.Bとする。また、短
縮形も.Bの仕様である。したがって、短縮形でアクセス
できるレジスタ上の範囲は、2^0〜2^7のビットである
(第132図参照)。 [例]BSET:Q♯1,r0では、 BSETの場合にデフォルトが.Bなので、 r0.Bのビット1がセットされる。 このビットは、r0.Wのビット1とは異なったものであ
り、r0.Wのビット25に対応する。 例えば、2^17のビットをアクセスするつもりで BTST ♯14,R0 と書くと、実際は BTST.B♯14,R0 と解釈され、offsetは上位ビットを無視するので、結局
2^1のビットが対象となる。正しくは、 BTST.W♯14,R0 と書かなければならない。このような場合には、アセン
ブラで警告を出すのが望ましいであろう。
する。 EaRf,ShRfqで指定されるアドレッシングモードでは、イ
ミディエートモード♯imm data、@−SP、@SP+は使用
できない。また、Rnのモードを使用した場合、offsetの
上位ビットの値は無視される。 アセンブラ表記では、メモリアクセスのサイズをbaseの
サイズとして指定する。BTST:Qでは、メモリアクセスの
サイズは8ビットに固定されており、サイズは‘.B'の
みを書くことができる。
し、その後そのビットを1にセットする。 EaMf,ShMfqで指定されるアドレッシングモードでは、イ
ミディエートモード♯imm data、@−SP,@SP+は使用
できない。また、Rnのモードを使用した場合、offsetの
上位ビットの値は無視される。 アセンブラ表記では、メモリアクセスのサイズをbaseの
サイズとして指定する。BSET:Qでは、メモリアクセスの
サイズは8ビットに固定されており、サイズは‘.B'の
みを書くことができる。
し、その後そのビットを0にクリアする。 EaMf,ShMfqで指定されるアドレッシングモードでは、イ
ミディエートモード♯imm data、@−SP,@SP+は使用
できない。また、Rnのモードを使用した場合、offsetの
上位ビットの値は無視される。 アセンブラ表記では、メモリアクセスのサイズをbaseの
サイズとして指定する。BCLR:Qでは、メモリアクセスの
サイズは8ビットに固定されており、サイズは‘.B'の
みを書くことができる。
し、その後そのビットも反転する。 EaMfで指定されるアドレッシングモードでは、イミディ
エートモード♯imm data、@−SP,@SP+は使用できな
い。また、Rnのモードを使用した場合、offsetの上位ビ
ットの値は無視される。 アセンブラ表記では、メモリアクセスのサイズをbaseの
サイズとして指定する。
d) 0または1のサーチ(1ワード内)
ペランドにセットしてこの命令を実行すると、命令実行
後、サーチ結果のビット番号がoffsetオペランドにセッ
トされている。offsetはread-modify-writeとなってい
る。offsetをread-modify-writeの形にしたのは、ビッ
トの検索を繰り返して行なうことを想定したためであ
る。 サーチの行なわれるビット位置の範囲は、dataオペラン
ドの0〜(dataのサイズ)に限られており、ワード境界
を越えることはできない。 offsetとしてはすべてのサイズが仕用可能であるが、of
fsetの初期値の上位ビットはサーチの際には無視され
る。これは、上位ビットに、ワード境界を越えた分のビ
ットオフセットや実効アドレスなどといった、別の情報
が入っていることが多いと考えられるためである。ま
た、BSCHの仕様を軽くして高速化するためである。な
お、/Fの時dataのサイズを表わす数、/Bの時(−1)と
なる。「上位ビット」とは、log2(dataのビット数)よ
りも上位のビットを示す。dataが32ビットであれば、2^
5〜2^31のビットが上位ビットである。 サーチはビット番号の大きな方向へ向かって、つまり、
big-endianの「本発明装置」ではLSBの方向へ向かって
行なわれるのが標準の仕様<<L0>>であり、/Fオプシ
ョンにより実現される。逆方向のサーチ/Bオプションは
<<L2>>仕様となっている。これは、正方向のサーチ
と逆方向のサーチで全く別のハードウエアが必要なため
である。また、サーチされるdataのサイズのうち、8ビ
ットと16ビット(RR=00,01)の指定は<<L2>>とな
っている。「本発明装置」では、<<L2>>となってい
る/Bオプション,8ビットと16ビットのデータサイズ(RR
=00,01)もサポートする。 BSCHはビット操作命令と同じ分類にしているが、かなり
異なった性質をもっている。BSCH命令でも、他のビット
操作命令と同じようにオフセットを自由に設定できる方
が使いやすいという考え方があるが、その目的でBVSCH
命令が別に設けられているため、BSCHとしてはできるだ
け軽い仕様に絞り、オフセットの範囲を制限している。
オフセットの有効範囲は、他のビット操作命令でレジス
タ直接モードRnを指定した場合と同じ範囲である。ま
た、一般のビット操作命令ではoffsetがread-only、bas
eがread-modify-writeとなっているのに対して、BSCHで
はそれとは逆にoffsetがread-modify-write、data(bas
e address)がread-onlyとなっており、注意が必要であ
る。 BSCH/Fで、指定したビットが見付からなかった場合に
は、サーチを行なった最後のビット(ワード境界)の次
のビットのオフセットがセットされ、V flag=1とな
る。サーチ失敗時にも、EITは起動しない。結果的に、
サーチを行なったビット数の分だけオフセットが加算さ
れる。 [例] @mem1=H′00000000,R0=0,big-endianで BSCH/0/F @mem1.W,R0を実行 ==>R0=0のまま、V flagは0 @mem1=H′ffff7fff,R0=0,big-endianで BSCH/0/F @mem1.W,R0を実行 ==>R0=16となり、V flagは0 @mem1=H′ffffffff,R0=0,big-endianで BSCH/0/F @mem1.W,R0を実行 ==>R0=32となり、V flagは1 BSCH/Bで、指定したビットが見付からなかった場合に
は、offsetに(−1)がセットされる。この場合もV fl
agがセットされるが、EITは起動されない。 BSCH命令では、offsetの初期値の上位ビットは無視され
るが、命令終了後にセットされるoffset値(サーチ結
果)については、上位ビットまで意味を持つ値になって
いる。つまり、offsetの上位ビットに、ワード境界を越
えた分のビットオフセットや実効アドレスなどといった
別の情報が入っていても、BSCH命令実行後は、offsetの
上位ビットも書き換えられてしまうわけである。サーチ
成功の時はoffsetが0〜31の値をとる(dataが32ビット
の場合)ので、/F,/Bとも上位ビットは常に0となる。
また、/Fでサーチ失敗の場合はoffset=32となるため、
上位ビットが00....001に、下位ビットが00000になる。
/Bでサーチ失敗の場合はoffset=(−1)となるため、
上位ビットが11....111に、下位ビットが11111になる。 [例] @mem1=H′00000000,R0=H′00000020で BSCH/0/F @mem1.W,R0.Wを実行 ==>R0=H′00000000となる。 (R0=H′00000020のままではない) @mem1=H′ffff7fff,R0=H′00000020で BSCH/0/F @mem1.W,R0.Wを実行 ==>R0=H′00000010となる。 (R0=H′00000030ではない) @mem1=H′ffffffff,R0=H′12345678で BSCH/0/F @mem1.W,R0.Wを実行 ==>サーチ失敗のため、R0=H′00000020, V flag=1となる。 @mem1=H′ffffffff,R0=H′00000020で BSCH/0/F @mem1.W,R0.Wを実行 ==>サーチ失敗のため、V flag=1となる。 R0はH′00000020のまま。 R0=H′00000040(上位に桁上げ伝播)ではない。
ールドは、ビットフィールド中のMSBの位置、およびビ
ットフィールドの長さ(width)により指定される。ビ
ットフィールドのMSBの位置は、baseとoffsetとの組で
示される。baseで示されるメモリのMSB(第0bit)がoff
set=0になる。offsetの意味は、ビット操作命令の時
と同じである。ビットフィールドとbase、offset、widt
hとの関係を下の図に示す。 [メモリ上のビットフィールド操作をする場合] 第143図に示すように太線内が対象ビットフィールドで
ある。 固定長ビットフィールドの操作命令 (BFEXT,BFEXTU,BFCMP,BFCMPU,BFINS,BFINSU)は、AI向
き応用のタグ処理(タグの比較やタグの切り出し)など
に特に有効である。 固定長ビットフィールド命令には、次の2つのフォーマ
ットがある。 ・offsetを8ビットの一般形アドレッシングモードで指
定し、widthをレジスタで指定する形式。これを‘:G'フ
ォーマットと呼ぶ。‘:G'フォーマットでは、baseにoff
set/8の値を加えることにより、実際にアクセスするメ
モリのアドレスが決まる。26bit以上のビットフィール
ドで5バイトにまたがるビットフィールドを扱うことも
できる。 ・offsetを8ビットのイミディエート値で指定し、widt
hをリテラルで指定する形式。これを‘:E'フォーマット
と呼ぶ。‘:E'フォーマットでは、ワード境界を越えな
いビットフィールドのみを対象として速度を上げるため
に、baseの1ワードからはみ出した部分のビットフィー
ルドについて、動作を保証しないものとしている。widt
h+offset≧sizeであってもEITは起動しないが、読みだ
し時、書き込み時とも値が不定となる。baseの1ワード
のみのアクセスでも命令仕様を実現することができるの
で、offsetとは無関係に、baseのみを見て操作対象とな
るビットフィールドのメモリアドレスを決めることが可
能である。したがって、インプリメント次第で命令実行
を高速化することもできる。 BF:EとBF:Gのbaseで許されるアドレッシングモードは、
全く同じである。 BFINS,BFINSU,BFCMP,BFCMPUでは、:G,:Eフォーマットの
それぞれに対して、さらに次の二つの形式がある。 ・srcオペランドをレジスタで指定する:Rフォーマット ・srcオペランドをイミディエートで指定する:lフォー
マット widthの値は、1〜32(<<LX>>では1〜64)に制限
されており、命令実行前に0<width≦32(64)のチェ
ックが行なわれる。width=0の場合もエラーである。
違反した場合には、不正オペランド例外(IOE)とな
る。すべての命令について、offset,widthとも符号付き
の数として扱われる。ただし、widthはもともと1〜32
(64)の値しか許されていないため、符号付きと考える
か符号なしと考えるかは実際の動作には影響せず、仕様
書記述上の問題となっている。また、:Eフォーマットの
命令のoffsetも符号付きとして扱われ、この場合はoffs
etとして−128〜+127の数を表わすことになる。(ただ
し、後で述べるように、:Eフォーマットではbaseのアド
レスの1ワードbase〜base+3からハミ出すビットフィ
ールドについて、ハミ出した部分に関する動作を保証し
ていない。) BF命令のビットフィールドでない方のオペランドは、普
通の整数として扱われる。したがって、例えばBFEXTの
場合は、抽出されたビットフィールドがレジスタのLSB
側に詰めてセットされ、MSB方向に符号拡張される。ビ
ット位置=0(MSB)に合わせてビットフィールドをセ
ットするのではない。 baseとしてレジスタを対象とした場合には、ビットフィ
ールドは一つのレジスタの範囲内に限られる。レジスタ
対象の固定長ビットフィールド命令も「本発明装置」で
サポートする。ただしこれは<<L2>>となっている。
これは、レジスタを対象としたビットフィールド操作の
場合、現段階では、BF:E命令よりもシフト命令とAND命
令を組み合せて実行する方が速くなる可能性があるため
である。レジスタ対象のビットフィールド命令(<<L2
>>)については、:Gでも次に述べる:Eと同じように、
1ワード(レジスタ)からハミ出すビットフィールドに
ついて、ハミ出した部分に関する動作を保証しないもの
とする。BFEXT,BFEXTUでは不定値が得られ、BFINS,BFIN
SUでは無視される。offset+width≧sizeの場合もEITは
起動しない。 :Eフォーマットでは、対象となるビットフィールドのう
ちで、sizeを越えたビットオフセットを持つ部分につい
てのみ動作を保証していない。同様に、負のビットオフ
セットを持つ部分についても動作を保証していない。い
ずれの場合も、指定されたビットフィールドのうちで、
baseのアドレスで示される1ワードに含まれる部分につ
いては、正しく実行される。 [例] の場合、 BFEXT:E.W ♯3,♯9,@N,R0 ==> R0=B′lmnopqrst となる。 BFEXT:E.W ♯−5,♯9,@N,R0 ==> R0=B′?????ijkl となる。 (?は不定値) width,src,destのレジスタのサイズ指定は、Xフィール
ドによって共通に行なわれる。サイズ指定フィールドX
は、32ビット演算と64ビット演算(<<LX>>)の切り
換えを行なうものであるが、具体的には次の3つの意味
を持つ。 src(dest)レジスタのサイズ指定(:Rフォーマッ
ト) widthレジスタのサイズ指定(:Gフォーマット) widthの範囲の指定 X=0の時 0<width≦32 X=1の時 0<width≦64 :E:lフォーマットの場合は意味を持たないが、の
区別を行なうためにやはりXフィールドを使用する。す
なわち、 Xフィールドは、32ビットと64ビットの互換性を高める
ためのビットであると言える。 :lフォーマットの命令でSS≠00の時には、♯iS8のフィ
ールドは使用しない。この時、もし♯iS8のフィールド
が0になっていなくても、単に無視される。ただし、マ
ニュアル上は、♯iS8のフィールドには0を入れるよう
にしておく。 ビットフィールド命令のフォーマットと、それに対して
使用できるサイズを列挙すると、第144図のようにな
る。 ビットフィールド命令についても、ビット操作命令と同
じようにアクセスを行なうメモリの範囲が問題となる
が、インプリメントへの依存性が強いので、強い規定は
設けない。[これについては詳細仕様調整中]
ョンに転送する。 ビットフィールドのwidthよりもデスティネーションの
サイズの方が大きい時は、データが符号拡張される。ま
た、BFEXT:Gのoffsetも符号拡張される。 EaRbfのアドレッシングモードでは、@−SP,@SP+,♯
imm dataのコードは使用できない。baseのレジスタ直接
モードRnは<<L2>>であるが「本発明装置」ではサポ
ートする。 [オペレーション] destの初期値を [D0.D1....Dd−2.Dd−1] d=32,64 destに設定される値を[R0.R1....Rd−2.Rd−1] d=32,64 offset=o,width=w とする。offset,widthは符号付きとして扱われる。(wi
dth≦0,.width>dの時はエラー) この時、抽出される部分のビットフィールドとフラグの
変化は、次のようになる。 (d≦wの時) この部分を符号拡張してdestに設定する [Bo.Bo+1....Bo+w−2.Bo+w−1]==> [Bo.Bo....Bo.Bo.Bo+1....Bo+w−2.Bo+w−1]=
=> d−wビットだけ符号拡張される [R0.R1....Rd−w−1.Rd−W.Rd−w+1....Rd−2.Rd−
1](destに設定される) (d<wの時) 「本発明装置」32では起り得ないケースである。 この部分はカットされる この部分をdestに設定する [Bo.Bo+1....Bo+w−d−1.Bo+w−d....Bo+w−
2.Bo+w−1]==> [Bo+w−d....Bo+w−2.Bo+w−1]==> この部分がカットされる [ R0....Rd−2.Rd−1](destに設定される) M flag R0 または(d≧wの時)Bo (d<wの時)Bo+w−d Z flag [R0〜d−1]=0 または(d≧wの時)[Bo〜o+w−1]=0 (d<wの時)[Bo+w−d〜o+w−1]=0 V flag☆ S[Bo〜o+w−1]<−2^(d−1).or. S[Bo〜o+w−1]≧+2^(d−1) または(d≧wの時)0 (d<wの時)Bo=Bo+1=..=.Bo+w−d−1=Bo
+w−dの時クリア、それ以外の場合にセットとなる。 「本発明装置」32であれば常にクリアされる。
ョンに転送する。 ビットフィールドのwidthよりもデスティネーションの
サイズの方が大きい時は、データがゼロ拡張される。た
だし、BFEXTU:Gのoffsetは符号拡張される。 EaRbfのアドレッシングモードでは、@−SP,@SP+,♯
imm dataのモードは使用できない。baseのレジスタ直接
モードRnは<<L2>>であるが「本発明装置」ではサポ
ートする。 [オペレーション] destの初期値を [D0.D1....Dd−2.Dd−1] d=32,64 destに設定される値を[R0.R1....Rd−2.Rd−1] d=32,64 offset=o,width=w とする。offset,widthは符号付きとして扱われる。(wi
dth≦o,width>dの時はエラー) この時、抽出される部分のビットフィールドとフラグの
変化は、次のようになる。 (d≧wの時) してdestに設定する [ Bo.Bo+1....Bo+w−2.Bo+w−1]==> [0.0....0.Bo.Bo+1....Bo+w−2.Bo+w−1]==
> d−wビットだけゼロ拡張される [R0.R1....Rd−w−1.Rd−w.Rd−w+1....Rd−2.Rd−
1](destに設定される) (d<wの時) 「本発明装置」32では起り得ないケースである。 この部分をdestに設定する [Bo.Bo+1....Bo+w−d−1.Bo+w−d....Bo+w−
2.Bo+w−1]==> [B+w−d....Bo+w−2.Bo+w−1]==> この部分がカットされる [ R0....Rd−2.Rd−1] (destに設定される) M flag R0 または(d>wの時)0 (d=wの時)Bo (d<wの時)Bo+w−d Z flag [R0〜d−1]=0 または(d≧wの時)[Bo〜o+w−1]=0 (d<wの時)[Bo+w−d〜o+w−1]=0 V flag☆ U[Bo〜o+w−1]≧+2^d または(d≧wの時)0 (d<wの時)Bo=Bo+1=...=Bo+w−d−1=0
の時クリア、それ以外の場合にセットとなる。 「本発明装置」32であれば常にクリアされる。
大きい時は、データが符号拡張される。また、BFINS:G
のoffsetも符号拡張される。 EaRbfのアドレッシングモードでは、@−SP,@SP+,♯
imm dataのモードは使用できない。baseのレジスタ直接
モードRnは<<L2>>であるが「本発明装置」ではサポ
ートする。 [オペレーション] srcの初期値を [S0.S1....Ss−2,Ss−1] s=8,16,32,64(:l) s=32,64(:R) offset=o,width=w とする。offset,widthは符号付きとして扱われる。(wi
dth≦o,width>dの時はエラー) この時、挿入される部分のビットフィールドとフラグの
変化は、次のようになる。 (w≧sの時) ビットフィールドの変化 (w<sの時) ビットフィールドの変化 M flag 対象ビットフィールドのMSB(Bo)の変化を基
準とする。 または(w≧sの時)S0 (w<sの時)Ss−w Z flag 対象ビットフィールド[Bo〜o+w−1]の変
化を基準とする。 または(w≧sの時)[S0〜s−1]=src=0 (w<sの時)[Ss〜w〜s−1]=0 V flag☆ S[S0〜s−1]=src<−2^(w−1).o
r. S[S0〜s−1]=src≧+2^(w−1) または(w≧sの時)0 (w<sの時)S0=S1=...=Ss−w−1=Ss−wの時
クリア、それ以外の場合にセットとなる。
大きい時は、データがゼロ拡張される。一方、BFINSU:G
のoffsetも符号拡張される。 EaRbfのアドレッシングモードでは、@−SP,@SP+,♯
imm dataのモードは使用できない。baseのレジスタ直接
モードRnは<<L2>>であるが「本発明装置」ではサポ
ートする。 [オペレーション] srcの初期値を [S0.S1....Ss−2,Ss−1] s=8,16,32,64(:l) s=32,64(:R) offset=o,width=w とする。offset,widthとも符号付きとして扱われる。
(width≦0,width>dの時はエラー) この時、挿入される部分のビットフィールドとフラグの
変化は、次のようになる。 (w≧sの時) ビットフィールドの変化 (w<sの時) ビットフィールドの変化 M flag 対象ビットフィールドのMSB(Bo)の変化を基
準とする。 または(w>sの時)0 (w=sの時)S0 (w<sの時)Ss−w Z flag 対象ビットフィールド[Bo〜o+w−1]の変
化を基準とする。 または(w≧sの時)[S0〜s−1]=src=0 (w<sの時)[Ss〜w〜s−1]=0 V flag☆ U[S0〜s−1]=src≧+2^w または(w≧sの時)0 (w<sの時)S0=S1=...=Ss−w−1=0の時クリ
ア、それ以外の場合にセットとなる。
っている場合は、サイズの小さい方のデータが符号拡張
されてから比較される。また、BFCMP:Gのoffsetも符号
拡張される。 EaRbfのアドレッシングモードでは、@−SP,@SP+,♯
imm dataのモードは使用できない。baseのレジスタ直接
モードRnは<<L2>>であるが「本発明装置」ではサポ
ートする。 [オペレーション] srcの初期値を [S0.S1....Ss−2.Ss−1] s=8,16,32,64(:l) s=32,64(:R) offset=o,width=w とする。offset,widthとも符号付きとして扱われる。
(width≦0,width>dの時はエラー) この時、比較される部分のビットフィールドとフラグの
変化は、次のようになる。 (s≧wの時) この部分を符号拡張してsrcと比較する (s<wの時) srcを符号拡張してこの部分と比較する L flag S[Bo〜o+w−1]−S[S0〜s−1]<0 比較結果によってセットされる。 Z flag S[Bo〜o+w−1]−S[S0〜s−1]=0 比較結果によってセットされる。
っている場合は、サイズの小さい方のデータがゼロ拡張
されてから比較される。一方、BFCMPU:Gのoffsetは符号
拡張される。 EaRbfのアドレッシングモードでは、@−SP,@SP+,♯
imm dataのモードは使用できない。baseのレジスタ直接
モードRnは<<L2>>であるが「本発明装置」ではサポ
ートする。 [オペレーション] srcの初期値を [S0.S1....Ss−2.Ss−1] s=8,16,32,64(:l) s=32,64(:R) offset=o,width=w とする。offset,widthとも符号付きとして扱われる。
(width≦0,width>dの時はエラー) この時、比較される部分のビットフィールドとフラグの
変化は、次のようになる。 (s≧wの時) この部分をゼロ拡張してsrcと比較する (s<wの時) srcをゼロ拡張してこの部分と比較する L flag U[Bo〜o+w−1]−U[S0〜s−1]<0 比較結果によってセットされる。 Z flag U[Bo〜o+w−1]−U[S0〜s−1]=0 比較結果によってセットされる。
のがある。 一般的な演算と転送 BVMA P 転送 BVCP Y 繰リ返しパターンの演算と転送 BVPA T 0または1のサーチ BVSC H BVMAP,BVPAT,BVCPYは、ビットマップディスプレイ上の
ウインドウ操作(bitblt)を主な目的とした命令であ
る。 説明のため、ビットマップディスプレイの属性について
用語を定義する。 (color scale,color offsetとbit-dot極性) ・color scale: 1dotを連続の何bitで表すか。 例: <color scale=1> 1bitが1dot。1バイトで連続した8dot。 白黒のビットマップディスプレイ。 または、colorを構成する各ビットをバンクにしたビッ
トマップディスプレイ。 <color scale=4> 隣合った4bitで1dot。1バイトで連続した2dot。 16色カラーのビットマップディスプレイ。 ・bit-dot極性 これは、ビットマップディスプレイとプロセッサとの組
み合わせに対して生ずる概念である。小さいアドレスの
方が左側に表示されるような一般的なビットマップディ
スプレイにおいて、小さいビット番号に対応するドット
も左側に表示される場合、このようなビットマップディ
スプレイを正のbit-dot極性を持つという。また、逆の
ものを負のbit-dot極性を持つという。つまり、big-end
ianのプロセッサでは、MSBビットが左側に表示される場
合に正のbit-dot極性を持つことになる。 ・color offset 1dotを構成する複数のビットのうち、第何ビットを操作
するか、ということ。 0≦color offset<color scale という関係が成り立つ。 これは、ビットマップディスプレイ ハードウエアの属
性ではなく、ビットマップディスプレイ操作上のパラメ
ータである。 base addressに対応するドットから、横方向にX(dot
offset)だけ変位したドットを操作する場合、そのメモ
リ上のbit offsetは次のように計算される。 (dot offsetは画面上の点の概念、bit offsetはメモリ
上のbitの概念である。) 正のbit-dot極性の時 bit offset=X*color scale+color offset 負のbit-dot極性の時 bit offset=(X*color scale+color offset).xor.
7 ところで、実際の「本発明装置」のBVMAP,BVCPY,BVPAT
命令では、インプリメントのことを考えて制約を設け、
次のような場合にのみ使用できるようになっている。 ・bit-dot極性が正 ・color scaleが1 このため、ビットマップディスプレイのハードウエアを
ある程度規定することはやむを得ない。具体的な制限は
次のようになる。 ・bit-dot極性が正なので、「本発明装置」をbig-endia
nとした場合には、アドレスの小さい方、ビット番号の
小さい方(MSB)が画面の左側に表示されなければなら
ない。 ・color scale=1のみなので、color scale≠1のビッ
トマップディスプレイに対しては次のような制約があ
る。 color scale≠1のビットディスプレイでは、color off
set毎に演算の種類を変えることができなくなる。 BVMAP命令でcolor scaleの変更をすることはできないの
で、ビットマップディスプレイのcolor scaleが1でな
い時には、内部表現も同じcolor scaleにしないと、BVM
AP命令は、使えない。その場合、画面イメージの内部表
現がハードウエアに依存することになるので、他のハー
ドウエアとの間でデータの転送を行なう時は、データ形
式の変換が必要になる。 任意長ビットフィールド操作命令はオペランドが多く、
実行時間も長い。したがって、実行中での割り込み受け
付けや、割り込み処理後の再実行のメカニズムが必要で
ある。「本発明装置」では、オペランドの指定と演算の
進行状況の表現のための固定番号のレジスタを使用して
いる。そのため、任意長ビットフィールド命令実行中に
割り込みが入っても、割り込み処理ハンドラ中でそのレ
ジスタの退避と復帰が正しく行なわれていれば、割り込
み処理後に、そのビットフィールド命令を途中から再開
できる。実行中断後に状態の退避やコンテキストスイッ
チを行なったり、コンテキストスイッチ後に別のプロセ
スで同じビットマップ命令を実行し、再び前のコンテキ
ストに戻って前のビットマップ命令を再開したとして
も、問題なく動かなければならない。 また、BTRONの仕様では、VRAMではない普通のメインメ
モリに対しても、文字や図形の描画が行なわれることが
ある。したがって、任意長ビットフィールド命令でもペ
ージフォールトの起こる可能性があり、ストリング命令
と同様に、ページフォールトによる実行中断にも対処で
きなければならない。 BVMAP,BVCPY命令では、インサートエディタなどで真横
に図形を移動することを考え、ビットマップのソースと
デスティネーションのオーバーラップにも対応できるよ
うになっている。具体的には、ストリング命令と同じよ
うに、演算を行なう方向を命令中のオプション/F,/Bと
して指定する。ソフトウエアにより適当な方向を判定
し、デスティネーションがソースを破壊しないように演
算を進める。ただし、インプリメントの負担を考え、逆
方向の処理を指定するオプション/Bは<<L2>>となっ
ている。 「本発明装置」ではBTRONの動作を高速化するための逆
方向処理もサポートする。 srcとdestがオーバーラップしていた場合、srcのbase〜
offsetよりもdestのbase〜offsetの方が小さければ、of
fsetの小さい方から処理することによってdestがsrcを
破壊することなく処理を進めることができる。この目的
で/Fオプションを使用する。画面とビットマップとの対
応は、通常オフセット(アドレス)の小さい方が左側に
なる。したがって、srcよりもdestのbase〜offsetの方
が小さくなるのは、文字の削除などによってビットマッ
プデータを左に動かそうとした時である。 また、srcのbase〜offsetよりもdestのbase〜offsetの
方が大きければ、offsetの大きい方から処理することに
よってdestがsrcを破壊することなく処理を進めること
ができる。この目的で/Bオプションを使用する。srcよ
りもdestのbase〜offsetの方が大きくなるのは、文字の
挿入などによってビットマップデータを右に動かそうと
した時である。 srcとdestがオーバーラップする可能性がある場合に
は、ソフトウエアの判断により正しいオプションを使用
し、destがsrcを破壊しないように演算を進める必要が
ある。ただし、/Bオプションは<<L2>>となっている
ので、/Bが使用できない場合には、srcを一旦他の場所
にコピーしてからdestとの演算を行なわなければならな
い。 オーバーラップがない場合には、どちらのオプションを
使っても結果は変わらない。 ここで、問題は、destのbase〜offsetの方が小さいのに
/Bオプションを使用した場合や、destのbase〜offsetの
方が大きいのに/Fオプションを使用した場合にどのよう
な動作を行なうかということである。基本的には、既に
演算の終った部分のdestが、srcのまだ参照されていな
い部分を破壊する形になるため、正しい結果が得られな
い。しかも、この時は、アルゴリズム上、命令が途中で
中断して再実行を行なった場合に、結果が変わってくる
ことがある。もともと正しい結果を保証していないので
あるから、実行中断によって結果が変わったとしても構
わないはずであるが、実行中断のなかった場合は正しい
結果が得られることもあるので、再現不可能なバグが入
りやすい状況になる。しかし、このエラーチェックをき
ちんと行なうとオーバーヘッドが増え、実行時間の低下
をもたらすので、エラーチェックは行なわない。ユーザ
の側で注意が必要である。 任意長ビットフィールド命令では、レジスタ上のビット
オフセットoffset、ビット幅width、パターンデータpat
ternのサイズとして、32ビットまたは64ビット<<LX>
>のみが使用できる。8,16ビットの指定は行なわない。
32ビットと64ビットのレジスタサイズの選択は、Xフィ
ールドによって共通に行なわれる。 BVMAP,BVCPY,BVPAT命令のdest側のメモリアクセス方法
については、writeまたはread-modify-writeということ
で特に規定しない。 BV命令でwidth≦Oの場合には、何もせずに命令を終了
し、EITとはしない。この時、BVSCH命令では、長さによ
る終了を示すV flag(サーチ失敗と同じ)がセットされ
る。これは、BV命令やストリング命令の様な高機能命令
の場合には、その外側でさらに高機能のサブルーチンを
作ることが多く、チェックが必要であればそのサブルー
チンで行なえばよいと考えているためである。例えば、
BVMAPであれば、それをライン数だけ繰り返してBitBlt
関数を作ることが多く、その時はwidthがすべて共通に
なるので、毎回widthをチェックする必要はない。一
方、BF命令のように、コンパイラが直接生成する可能性
のあるコードでは、できるだけチェックを厳重にする必
要がある。したがって、BF命令のwidthは例外で検出す
るようにしている。 任意長ビットフィールド命令でoffset+widthがオーバ
ーフローする場合には、割り込みによる命令実行中断
時、および命令終了時のレジスタ上のoffset値がおかし
な値になり、正常な命令の実行ができなくなる。この場
合は、動作を保証しないものとする。アーキテクチャ上
は、命令実行開始時にこれを検出して不正オペランド例
外(10E)とするのが望ましいが、チェックのために実
行時間が伸びるので、チェックせずに実行するものとす
る。(なお、ストリング命令の場合は、offsetに相当す
るのが整数ではなくポインタアドレスとなっているた
め、オーバーフローとしては扱わず、単にアドレスがラ
ップアラウンドするだけである。)
th) 0または1のサーチ(任意長ビットフィールド)
ビットをサーチする。 サーチを開始するビット番号(bit offset)をoffsetオ
ペランド(R1)にセットしてこの命令を実行すると、命
令実行後、サーチ結果のビット番号がoffsetオペランド
(R1)にセットされている。つまり、offsetはread-mod
ify-writeとなっている。これは、ビットの検索を繰り
返して行なうことを想定したためである。offsetは符号
付き整数として扱われ、その値は任意である。 BVSCHを実行した結果、サーチ失敗だった場合には、V f
lagをセットし、offsetは次にサーチすべきビットを指
示。EITは起動しない。 BVSCH命令のオフセットやV flagの変化方法は、BSCH命
令に準じたものである。 /Bによる逆方向のサーチは<<L2>>仕様となっている
が「本発明装置」ではサポートする。 この命令は、ディスクやメモリの空きブロック検索など
に使用することを目的としたものである。 なお、任意長ビットフィールド命令やストリング命令な
どの高機能命令の詳細仕様や、命令終了後のレジスタ値
については、付録11を参照のこと。
明装置」ではサポートする)
長のビットフィールドsrc,destに対する各種の論理演算
をする命令である。演算の種類はR5の下位4ビットで指
定され、次の16種類が用意されている。 このうちD(Dest)の演算モードは、対称性のために設
けられている。ニモニックと実際のビットパターンとの
対応については、付録を参照のこと。 演算を指定するレジスタR5の上位ビットが0でない場合
にも、特にチェックは行なわないものとする。ただし、
チェックが行なわれていなくても、上位ビットには必ず
‘0'を入れてもらうように、マニュアル等で指導する必
要がある。不正オペランド例外(10E)としないのは、
インプリメントの負担が大きく、実行速度に影響が出る
ためである。 /F,/Bオプションは、offsetの小さい方から処理する
か、offsetの大きい方から処理するかを指定する。これ
は、ビットマップのsrcとdestがオーバーラップしてい
た場合に、処理の方向を明確にしておかないと、destが
srcを破壊して正しい結果が得られないからである。 srcとdestがオーバーラップしていた場合、srcのbase〜
offsetよりもdestのbase〜offsetの方が小さければ、of
fsetの小さい方から処理することによってdestがsrcを
破壊することなく処理を進めることができる。この目的
で/Fオプションを使用する。画面とビットマップとの対
応は、通常オフセット(アドレス)の小さい方が左側に
なる。したがって、srcよりもdestのbase〜offsetの方
が小さくなるのは、文字の削除などによってビットマッ
プデータを左に動かそうとした時である。 また、srcのbase〜offsetよりもdestのbase〜offsetの
方が大きければ、offsetの大きい方から処理することに
よってdestがsrcを破壊することなく処理を進めること
ができる。この目的で/Bオプションを使用する。srcよ
りもdestのbase〜offsetの方が大きくなるのは、文字の
挿入などによってビットマップデータを右に動かそうと
した時である。 なお、destのbase〜offsetの方が小さいのに/Bオプショ
ンを使用した場合や、destのbase〜offsetの方が大きい
のに/Fオプションを使用した場合には、結果(dest)を
保証しないものとする。特に、このような場合には、命
令実行中に割り込みページフォールトなどが発生して命
令再実行が起こると、結果が変わってくることもある。 srcとdestがオーバーラップする可能性がある場合に
は、ソフトウエアの判断により正しいオプションを使用
し、destがsrcを破壊しないように演算を進める必要が
ある。ただし、/Bオプションは<<L2>>となっている
ので、/Bが使用できない場合には、srcを一旦他の場所
にコピーしてからdestとの演算を行なわなければならな
い。「本発明装置」では/Bオプションはサポートする。 オーバーラップがない場合には、どちらのオプションを
使っても結果は変わらない。 ←base〜offsetが小 base〜offsetが大→ [オーバーラップなし] 第161図に示す。 [オーバーラップあり−destのbase〜offsetが小] 第162図に示す。 [オーバーラップあり−destのbase〜offsetが大] 第163図に示す。
長のビットフィールドsrc,destの間の転送をする命令で
ある。この命令は、BVMAP命令から演算の機能をはずし
て転送のみに限定し、高速化を目指したものである。 /F,/Bオプションの意味はBVMAPと同じである。ビットマ
ップのsrcとdestがオーバーラップしていなければ、ど
ちらのオプションを使っても結果は変わらないが、src
とdestがオーバーラップした場合には、ソフトウエアの
判断により正しいオプションを使用し、destがsrcを破
壊しないように演算を進める必要がある。 /Bオプションの場合、R1,R2に入れるオフセット値とし
ては、転送の対象となるビットフィールドの最大+1の
オフセット値を指定する。 これは、SMOV/B,SCMP/Bの仕様との対応を考えたもので
ある。/Bオプションは<<L2>>であるが「本発明装
置」ではサポートする。
り、スクリーン上のビットマップとあるパターン上の演
算を行ないたい場合に使用する命令である。patternを
繰り返し発生しながら、ビットフィールドとの論理演算
を行なう。 演算指定(R5)の上位ビットが0でない場合は単に無視
され、特にチェックは行なわないものとする。 ただし、チェックが行なわれていなくても、将来の拡張
のため、上位ビットには必ず‘0'を入れてもらうよう
に、マニュアル等で指導する必要がある。不正オペラン
ド例外(10E)としないのは、インプリメントの負担が
大きく、実行速度に影響が出るためである。 この命令では、BVMAP,BVCPYとは異なり、書き込みの際
にシフトは行なわない。offsetの指定は、単にパターン
をクリッピングするだけである。(これに対して、BVMA
P命令では、srcとdestのoffsetがずれていた場合にはシ
フトが行なわれる)
進数の1ワードの加減算とPACK/UNPACK処理をメインプ
ロセッサの<<L1>>仕様としてサポートし、符号付き
PACKED形式10進数の1ワードの加減算を<<L2>>仕様
としサポートする。また、多桁の10進数の加減乗除はコ
プロセッサで行なう。 このうち、本章では符号なしPACKED形式10進数の加減算
とPACK/UNPACK処理について説明を行なう。符号付きのP
ACKED形式10進数をサポートする<<L2>>の命令につ
いては、後の章で説明を行なう。10進演算のアドレッシ
ングモードは一般命令と同じになっている。 本発明装置では本節で述べる10進演算命令4種類はサポ
ートしない。
桁)、64ビット(16桁)のBCDデータを扱うことができ
る。ただし、64ビットは<<LX>>仕様である。 ソースオペランドのサイズがデスティネーションオペラ
ンドのサイズよりも小さい時は、ソースがゼロ拡張され
た上で加算される。 BCDの数は符号拡張が無意味なので、基本的には符号な
しの数と考え、ADDDXのフラグ変化はADDUに準じるもの
とする。結果がdestに入らない時にV flagがセットさ
れること、d<sの時はdestのサイズからの桁上げがX
flagにセットされること、などもADDUと同様である。 ただし、ADDUとは異なり、Z flagはADDX,SUBXのように
累積で変化する。 src,destの各桁が0〜9以外の数を含んでいた場合、つ
まりADDDX,SUBDXのオペランドがBCDでなかった場合に
は、EITとはならないが、destやフラグに設定される結
果は保証できない(インプリメント依存になる)ものと
する。不正オペランド例外(IOE)としないのは、イン
プリメントの負担が大きく、実行速度に影響が出るため
である。
き
桁)、64ビット(16桁)のBCDデータを扱うことができ
る。ただし、64ビットは<<LX>>仕様である。 ソースオペランドのサイズがデスティネーションオペラ
ンドのサイズよりも小さい時は、ソースがゼロ拡張され
た上で加算される。 BCDの数は符号拡張が無意味なので、基本的には符号な
しの数と考え、SUBDXのフラグ変化はSUBUに準じるもの
とする。結果が負になった時にV flagがセットされるこ
と、d<sの時はdestのサイズからの桁下げがX flag
にセットされること、などもSUBUと同様である。ただ
し、SUBUとは異なり、Z flagはADDX,SUBXのように累積
で変化する。 SUBDXで結果が負になった場合には、destは絶対値表現
ではなく補数表現(10の補数)となる。したがって、de
stは上位桁からの繰り下がりがあった場合と同じ値にな
る。 例: 16ビットでSUBDXを実行する場合 dest src 0123-0456=(‐0333) destは(‐333)=9667となる。 src,destの各桁が0〜9以外の数を含んでいた場合、つ
まりADDDX,SUBDXのオペランドがBCDでなかった場合に
は、EITとはならないが、destやフラグに設定される結
果は保証できない(インプリメント依存になる)ものと
する。不正オペランド例外(IOE)としないのは、イン
プリメントの負担が大きく、実行速度に影響が出るため
である。
転送する。実際には、ssにB,H,W,Lのいずれかの文字が
入り、次のようなニモニックとオペレーションになる。 PACKHB src[.H],dest[.B] RR=01,WW=00 src[04:07] ==>dest[00:03], src[12:15] ==>dest[04:07] PACKWH src[.W],dest[.H] <<L2>> RR=10,WW=01 src[04:07] ==>dest[00:03], src[12:15] ==>dest[04:07] src[20:23] ==>dest[08:11], src[28:31] ==>dest[12:15] PACKWB src[.W],dest[.B] RR=10,WW=00 src[12:15] ==>dest[00:03], src[28:31] ==>dest[04:07] PACKLW src[.L],dest[.W]<<LX>> PACKLH src[.L],dest[.H]<<LX>> なお、PACKss,UNPKssにおいて、サイズの違いによって
ニモニックまで変えているのは、サイズの違いによって
命令自体の意味もかなり変わると考えられるためであ
る。つまり、一般の命令では、サイズの違いによってゼ
ロ拡張や符号拡張を行なうだけであったが、PACKss,UNP
Kssでは命令のオペレーション自体がかなり異なってい
る。 PACK,UNPKで、上記の説明に含まれない不合理なサイズ
の組み合わせを指定した場合には、動作を保証しない
(インプリメントに依存した値がdestに設定される)も
のとする。アーキテクチャ上は予約命令例外(RIE)と
するのが望ましいが、2つのオペランドのサイズの組み
合わせによって予約命令例外(RIE)を検出するのはイ
ンプリメントの負担が大きいため、予約命令例外(RI
E)とはしない。これは、異種サイズ間の論理演算の場
合も同様である。 srcのうち、destに影響を与えないフィールド(PACKHB
の2^7〜2^4のビットなど)については、0かどうかのチ
ェックは行なわず、0でなくても無視する。文字コード
をそのままバックするケースを考えると、0でないこと
の方が多い。
い)
い、アンパックした値に補正値adjを加えてdestに転送
する。補正値adjを加えるのは、UNPK命令によって直接
文字コードまで生成するためである。adjの加算は、BCD
ではなくバイナリの加算である。adjのサイズはdestの
サイズと共通にWWフィールドによって指定される。 実際には、ssにB,H,W,Lのいずれかの文字が入り、次の
ようなニモニックとオペレーションになる。第176図に
示す。 PACK,UNPKで、上記の説明に含まれない不合理なサイズ
の組み合わせを指定した場合には、動作を保証しない
(インプリメントに依存した値がdestに設定される)も
のとする。アーキテクチャ上は予約命令例外(RIE)と
するのが望ましいが、2つのオペランドのサイズの組み
合わせによって予約命令例外(RIE)を検出するのはイ
ンプリメントの負担が大きいため、予約命令例外(RI
E)とはしない。 adjの加算によるオーバーフローは無視する。
または64ビットのデータを任意の長さだけ連続して並べ
たデータタイプである。 (SSCH命令に限り、連続ではなく、一定間隔で飛び飛び
のアドレスにあるデータの集合もサポートしている。) 個々のデータの意味は特に決まっておらず、実際の文字
コードになる場合、整数になる場合、浮動少数になる場
合などがある。これは、ユーザ側で解釈する。 ストリングの範囲を示す方法には、 ・ストリングの長さ(データ数)を指定する方法 ・ストリング終了を示す文字(ターミネータ)を指定す
る方法 の2通りがあり、使用目的や言語によって適した方を選
択する必要がある。本発明装置のストリング命令ではス
トリングのデータ数がパラメータとなっているが、さら
にオプションの終了条件という形でターミネータを与え
ることができ、両方の指定方法をサポートしている。 本発明装置のストリング命令の特徴の一つとして、ポイ
ンタの増減量を自由に設定できるということがあげられ
る。そのため、ストリングサーチ命令(SSCH命令)を使
ってテーブル検索や多次元配列のスキャンなども行なう
ことができる。 また、本発明装置ではストリング命令SMOV,SCMP,SSCHの
終了条件として大小比較や二値比較を含む豊富な条件が
指定でき、これも大きな特徴となっている。ストリング
命令のうち、ストリングサーチ用のSSCH命令は、検索条
件が終了条件として指定されるため、終了条件にのみ意
味がある命令となっている。本発明装置のストリング命
令で指定できる条件(eeee)については、付録を参照の
こと。本発明装置では<<L2>>仕様となっている、終
了条件OUTU-ZEはサポートしない。 ストリング命令の用途としては、文字どおり8/16ビット
の文字列を処理するもののほか、特定のビットパターン
のサーチ、メモリのブロック転送、構造体の代入、メモ
リ領域のクリアなどの応用がある。 ストリング命令の任意長ビットフィールド命令と同じく
不定長のデータを扱うため、実行中の割り込み受付、実
行再開の機能が不可欠である。一方、ストリング命令自
体がコンパイラの生成するコードとなることはほとんど
なく、アセンブラで書かれたサブルーチンとして提供さ
れることが多い。そのため、対称性やアドレッシングモ
ードについての制限はあまり問題にならない。したがっ
て、本発明装置のストリング命令では、オペランドや実
行途中の状態保持のために固定番号のレジスタ(R0〜R
4)を使うようになっている。主なレジスタの使い方は
次のようになる。 R0:ソース側ストリングの先頭アドレス R1:デスティネーション側ストリングの先頭アドレス R2:ストリングの長さ、データ数 R3:終了条件の比較値(1) R4:終了条件の比較値(2) このうち、ストリングの長さを表わすR2はエレメント数
であって、バイト数ではない。R2は符号なしの数として
扱われ、R2=0の場合はエレメント数による命令終了は
行なわないという意味に解釈される。つまり、エレメン
ト数による終了を避けたい場合には、R2=0として命令
を実行すれば良いことになる。インプリメント上は、ス
トリング命令の実行パターンは次のようになるのが一般
的である。 ただし、R2=0とした場合に、エレメント数をH'100000
000と考えるか、無限大(エレメント数のチェックを行
なわない)と考えるかはインプリメントに依存する。つ
まり、H'100000000回のエレメント操作を行なっても命
令を終了しなかった場合に、その後の動作をインプリメ
ント依存になるものとする。 ただし、エレメント数以外の要因により命令を終了した
場合(R2=0の場合は普通こうなる)には、命令終了後
のR2の値(付録11参照)が正しくセットされていなけれ
ばならない。実際には、SSCH/RでR5=0を指定したよう
な特殊な場合を除いてH'100000000回のエレメント操作
を行なう間にアドレス変換例外(ATRE)やバスアクセス
例外(BAE)を起こし、命令中断となるのが普通であ
る。 ストリング命令はいろいろな要因で終了するため、それ
らを区別するためにフラグを用いる。それぞれのフラグ
の意味は、次のようになっている。 V flag エレメント数(ストリング長)による終了 F flag 終了条件(eeee)による終了 この時、複数の終了条件を区別するためにM flagを使用
する。 M flagの変化については付録参照。 これ以外に終了要因のないSCMP,SSCHでは、V flagとF
flagの変化が相補的となる。SCMPの場合には、これ以外
に比較データの不一致によって命令を終了する場合があ
る。
となっているOUTU-ZEはサポートしない。)
にR0,R1で指定するアドレスが、操作対象となるストリ
ングの占めるアドレスの最大アドレス+1を指し、R0,R
1をプリデクリメントしながら操作を進める。 SMOVでsrcとdestがオーバーラップしていた時に、/F,/B
のうち正しくない方のオプションを指定した場合の動作
は、BVCPY,BVMAPと同じように保証しないものとする。
つまり、インプリメントや命令実行中断の有無によって
異なる場合がある。 これは、高機能命令の特徴を生かしてパイプライン的な
メモリアクセスをした場合に、メモリアクセスの順番が
変わることがあり、必ずしも前エレメントの書き込みが
終わってから次エレメントの読み出しを行なうとは限ら
ないからである。 なお、逆方向の処理オプション/Bは、この命令SMOV/Bに
限り<<L2>>ではなく、<<L1>>となっている。 任意長ビットフィールド命令やストリング命令などの高
機能命令の詳細仕様や、命令終了後のレジスタ値につい
ては、付録11を参照のこと。
となっているOUTU-ZEはサポートしない。)
しない文字が見付かれば比較を終了する。SCMP命令で
は、CMP命令と同様に、src2-src1の結果をもとにしてフ
ラグの設定を行なう。例えばL flagは、src1に対してsr
c2の方がより小さいということを示す。src1-src2の結
果をもとにしてフラグの設定を行なうのではない。 終了条件を持つSCMP命令の応用としては、テキストを一
行単位で比較する(R3に改行の文字コードをセットして
SCMP/EQを実行)、数字が続く間だけ比較する、全角文
字が続く間だけ比較する、といったものがある。 SCMPでは、命令を終了させる要因が次の3つ存在し、フ
ラグ変化によってそれらを見分けることができる。 1.エレメント(データ)数(R2)による終了 V flag=1 2.終了条件による終了 F flag=1,終了要因によってM flagが変化 3.比較中のデータの不一致による終了 Z flag=0,比較結果によってL flag,X flagが変化 L flagは、最後のデータを符号付きと見て比較した時の
比較結果X flagは、最後のデータを符号なしと見て比較
した時の比較結果 1〜3の要因のうち、2と3のチェックを同時に行なう
ことは可能であるが、1の要因のチェックは、2,3とは
別のフェーズで行なわれる。したがって、2と3が同時
に成立することはあるが、1と2や1と3が同時に成立
することはない。1,2,3の少なくても一つの終了要因が
成立した場合にSCMP命令が終了する。 比較するデータが一致している間は、その値(src1=sr
c2)が終了条件のテスト対象となるが、データに不一致
があった場合には、R0により示されるsrc1の方を終了条
件のテスト対象とする。ただし、不一致によりSCMP命令
が終了した場合には、終了条件が成立したかどうかとい
う情報は必要ないことが多いため、これは単なる約束に
過ぎない。 また、終了条件が満たされないと意味を持たないM flag
については、別の終了要因により終了した場合に、意味
が不明確となる。そのような場合のフラグ変化は、0に
なるものと決めておく。 Z flag,L flag、X flagについては、一致、不一致にか
かわらず必ず最後のデータの比較結果を反映する。した
がって、3.以外の要因で終了した場合(データが一致し
ている場合)には、自動的にZ flag=1,L flag=0,X f
lag=0となる。なお、SCMPでは符号なしデータ、符号
付きデータの両方を扱うため、L flagにエレメントを符
号付きデータと考えた時の比較結果が入り、X flagにエ
レメントを符号なしデータと考えた時の比較結果が入る
ようになっている。BTRONの文字コードは符号なしで扱
う必要があるし、一般の整数を扱うのであれば、符号付
きのデータを扱う必要もある。 SCMPのフラグ変化をまとめると第181図のようになる。 ○は終了要因が満たされたことを示し、 ×は終了要因が満たされないことを示す。 +…フラグ本来の意味ではなく、約束としてこうなって
いることを示すものである *A…src1=src2が終了条件のどれに該当するか、によ
る *B…src1が終了条件のどれに該当するか、による *C…src1<src2かsrc2<src1か、による /Bオプションは<<L2>>であるが本発明装置ではサポ
ートする。
となっているOUTU-ZEはサポートしない。)
出す。 ‘/R'オプションの場合には、R5の正負にかかわらず、
常にエレメントの比較後にR0が更新(ポストインクリメ
ントまたはポストデクリメント)される。 SSCH/RのR5のサイズはR0のポインタサイズと等しくな
る。つまり、本発明装置32では32ビット固定であり、本
発明装置64ではPビットまたはモードによって指定され
る。SS(R3,R4,エレメントサイズ)とは独立である。
リ領域に、R3の値を繰り返し書き込む。 SSTR命令では終了条件が意味を持たないため、終了条件
の指定は行なわない。 なお、ストリング命令でR2=0の場合はエレメント数に
よる終了を行なわないが、SSTR命令の場合はエレメント
数による終了が唯一の終了要因であり、R2=0を指定す
ると無限ループを形成することになる。これについて
は、ハードウエアでは特に対処せず、プログラム側で注
意してもらうことにする。ただ、実行中の割り込み受付
や再実行は可能なので、この命令によって間違って無限
ループに入ったとしても、タスクやプロセスのスケジュ
ーリング等には影響しない。通常は複数の命令によって
構成される無限ループが、たまたま一命令にまとめられ
ただけと考える。R2=0を不正オペランド例外10Eとし
ないのは、他のストリング命令との仕様の統一や、イン
プリメントの負担、高速化を考えたためである。 このほか、SSCHやQSCH命令でも、パラメータや終了条件
の指定によっては一つの命令で無限ループを形成する場
合がある。
NS(エントリの挿入)、QDEL(エントリの削除)、QSCH
(エントリのサーチ)の3つの命令が用意されている。
本発明装置でサポートしているキューは、各キューエン
トリの先頭から1番目と2番目のデータが絶対アドレス
のリンクポインタとなった、ダブルリンクのキューであ
る。キューエントリの先頭にあるデータが次のキューエ
ントリへのポインタとなり、キューエントリの2番目に
あるデータが前のキューエントリへのポインタとなって
いる。 キュー命令の仕様は、キューヘッダをキュー命令のオペ
ランドとして直接指定できるように、以下のような方針
で決められている。 1.QDELでは、指定したエントリではなく直後のエントリ
が削除される。 QUEUE HEADをオペランドとして指定した場合には、先頭
のエントリが削除されることになる。QSCH/Bで見付けた
エントリを削除する場合や、キューの最後のエントリを
削除する場合には間接参照が必要になるが、QSCH/Fで見
付けたエントリを削除する場合やキューの先頭のエント
リを削除する場合に比較すれば、頻度は少ないと考えら
れる。 2.QINSでは、指定したエントリの直前に新しいエントリ
が挿入される。 QUEUE HEADをオペランドとして指定した場合には、キュ
ーの最後にエントリが挿入されることになる。 これについては2つの考え方がある。QDEL命令との対称
性を考えると、QINSでは指定したエントリ(あるいはQU
EUE HEAD)の直後にエントリを挿入する方が望ましい。
これは、QINSで挿入したエントリをQDELで削除するため
に、同じオペランドを指定できるからである。また、キ
ューをスタック(LIFO)的な使い方にする場合にも、こ
のような仕様の方が良い。 一方、キューをFIFOで使う場合には、QINSでキューの最
後にエントリを挿入し、QDELではキューの先頭のエント
リを削除することが多い。こちらの方がキュー本来の使
い方であるし、ITRONでもそのような例がある。 したがって、後者の仕様にする。 3.QSCHでは、現在のエントリではなく直後のエントリか
らサーチを始める。 QUEUE HEADをオペランドとして指定した場合には、キュ
ーの先頭からサーチを始めることになる。また、サーチ
が成功した場合に次のサーチを行なうには、そのままも
う一度QSCHを実行すればよい。 この考え方は、他の高機能命令(ストリング、任意長ビ
ットフィールド操作)とは異なったものである。すなわ
ち、ストリング命令では現在ポインタの指しているデー
タ自体からサーチが始まり、連続サーチを行なう場合に
は別命令でポインタを更新しておく必要がある。これは
キュー命令とは異なった動きである。 しかし、キューの場合にはヘッダが別になっているとい
う事情があり、扱いが異なっているため、別の仕様にし
ても構わないと判断した。 4.空のキューをフラグで判定する。 QINSで空のキューにデータを挿入した場合、QDELでエン
トリの削除の結果キューが空になった場合には、Z-flag
をセットする。また、QDELで空のキューからエントリを
削除しようとした場合は、エラーなのでポインタの付け
変えは行なわないが、この時V-flagをセットする。
示されるキューエントリの直前に挿入される。 queueで指定されるキューエントリがキューヘッダであ
った場合には、この命令によって、キューの最後に新し
いエントリが挿入されることになる。 命令実行前にキューが空であったかどうかによって、Z-
flagがセットされる。 [32ビットで処理を行なう場合のQINS命令のオペレーシ
ョン] 第188図に示す。 [実行前] 第189図に示す。 [実行後] 第190図に示す。 EaMqP,EaMaP2で指定されるアドレッシングモードでは、
レジスタ直接Rn、@‐SP,@SP+,#imm-dataのモード
は使用できない。 なお、QINSでは、命令の実行のために直接必要ではない
部分のデータ構造のチェック(queueの前後のキューエ
ントリのリンク関係など)は特に行なわない。オペレー
ションに書かれている通りの動作を行なう。
除し、削除されたエントリのアドレスをdestにセットす
る。削除されたエントリのアドレスをdestにセットする
のは、それ以後削除したエントリを操作することが多い
ためである。 queueとしてキューヘッダを指定した場合には、キュー
の先頭のエントリが削除されることになる。 queueで指定されたキューが空のキューであった場合
は、命令の実行ができない。この時、EITは起動せず、V
-flag,Z-flagのセットだけを行なって命令を終了する。
destは無変化となる。 dest/EaW!Sでは、@‐SPのモードを禁止している。これ
は、キューが空でV-flagがセットされ、destの転送がで
きない場合に、destに@‐SPが指定されていると命令動
作がまぎらわしくなるためである。 [32ビットで処理を行なう場合のQDEL命令のオペレーシ
ョン] 第193図に示す。 [実行前] 第194図に示す。 [実行後] 第195図に示す。 EaRqPで指定されるアドレッシングモードでは、レジス
タ直接、@‐SP,@SP+,#imm-dataのモードは使用で
きない。 なお、QDELでは、空のキューの判定以外のチェック、命
令の実行のために直接必要ではない部分のデータ構造の
チェック(queueの前後のキューエントリのリンク関係
など)は特に行なわない。オペレーションに書かれてい
る通りの動作を行なう。
となっているOUTU-ZEはサポートしない)
プション),R5,R6(オプション)であり、結果が入るの
は、R0,R1である。続けて次のサーチを行なうことがで
きる。
ける。逆方向のサーチ機能/B、およびマスクの機能/MR
は<<L2>>となっている。本発明装置では逆方向のサ
ーチ機能/Bをサポートする。マスクの機能/MRはサポー
トしない。 この命令はキューの長さに依存した処理量となるので、
ストリング命令と同じように実行中の中断に対する考慮
が必要である。したがって、オペランドと途中の実行状
態は固定番号のレジスタに置く。 サーチ条件としては、マスク(特定ビットの抽出)と比
較が用意されている。マスクはフラグのサーチに用い、
比較は優先度の処理などに用いる。比較条件の指定は、
ストリング命令の終了条件の指定と同じである。 キューの終りを判定するために、キューのエントリアド
レスとキューの終了アドレスR2との比較を行ない、一致
した場合には命令を終了する。R2との比較によって命令
を終了した場合、すなわち、それまでにサーチ条件を満
たすものがなく、サーチ失敗であった場合には、V-flag
をセットして命令を終了する。EITは起動しない。 QSCH命令の条件指定によっては、一つの命令の中で無限
ループに入ることがある。これについては、ハードウエ
アでは特に対処せず、プログラム側で注意してもらうこ
とにする。ただ、実行中の割り込み受付や再実行は可能
なので、ユーザプログラムの中で間違って無限ループに
入ったとしても、タスクやプロセスのスケジューリング
等には影響しない。通常は複数の命令によって構成され
る無限ループが、たまたま一命令にまとめられただけと
考える。 サーチが終了した時に、R0は指定した条件に合うエント
リを、R1はその直前のエントリを指している。R1は、シ
ングルリンクのキューの時にエントリを削除するために
使用することができる。また、QDELでは指定したエント
リの次のエントリが削除されるので、QSCH/Fで見付けた
エントリ自体を削除する場合には、QSCH実行後、@R0で
はなく@R1をパラメータとしてQDELを実行すればよい。 一般に、R0,R2にQUEUE HEADのアドレスをセットしてQSC
H命令を実行することにより、キューが空の場合を含め
てキュー全体のサーチを行なうことができる。 QSCHは、シングルリンクキューとダブルリンクキューで
共用することを狙った命令である。 [QSCHのオペレーション] 第198図に示す。 このうち、check-interruptは、外部から割り込みがか
かっているかどうかを調べ、割り込みがかかっていれ
ば、QSCHの実行を中断して割り込み処理を始めるという
ものである。割り込み処理終了後にQSCH命令の残りの部
分を実行する。 [実行前] 第199図に示す。 [実行後] 第200図に示す。
るジャンプ命令である。ディスプレースメントのサイズ
として、BRA:Dでは8ビットが、BRA:Gでは8ビット、16
ビット、32ビット、64ビットが利用できる。本発明装置
の命令は必ず偶数アドレスから始まるので、短縮形のBR
A:D命令では、#d8を2倍して使用する。すなわち、 PC+#d8*2==>PC となる。BRA:GでSS=00を指定した場合には、#dSを2
倍せずにそのまま使用する。 BRA:Gでnewpcが16ビットの場合、JMP @(#dS:16,PC)
と命令機能、コードサイズともに同じであるが、実行サ
イクル数を短くできる可能性があるため、別命令となっ
ている。 BRA:Gで、newpcが奇数であった場合には、ジャンプ先が
奇数アドレスになるため、奇数アドレスジャンプ例外
(OAJE)となる。これは、Bcc:G,BSR:G,JMP,JSR命令も
同様である。BRA:D,Bcc:D,BSR:Dでは、オペランドを2
倍して使用するため、OAJEは発生しない。 BRA:G,Bcc:G,BSR:GでSS=00の場合、オペランドサイズ
は8ビットであるが、#dSフィールドは16ビットとな
る。この時、#dSフィールドは下位8ビットのみを使用
し、上位8ビットには必ず0を入れておかなければなら
ない。上位8ビットが0でない場合は、これによって表
現されるデータがインプリメント依存の不定値になるも
のとする。つまり、BRA:G命令の場合は、ジャンプ先が
不定となる。EITにはしない。 本発明装置ではこの命令に対し、動的ブランチ予測処理
をする。
る条件ジャンプ命令である。ディスプレースメントのサ
イズとして、Bcc:Dでは8ビットが、Bcc:Gでは8ビッ
ト、16ビット、32ビット、64ビットが利用できる。本発
明装置の命令は必ず偶数アドレスから始まるので、Bcc:
D命令では、#d8を2倍して使用する。すなわち、 if(cccc) PC+#d8*2==>PC となる。Bcc:GでSS=00を指定した場合には、#dSを2
倍せずにそのまま使用する。 Bccの条件指定部分(‘cc'部分)の詳細とニモニック、
ccccのビットパターンについては、付録を参照のこと。
Bccで未定義の条件を指定した場合には、予約命令例外
(RIE)となる。Bcc:Gで条件不一致のためジャンプしな
かった時は、本発明装置では奇数アドレスジャンプ例外
(OAJE)を発生する場合と、発生しない場合がある。 本発明装置ではこの命令に対し、動的ブランチ予測処理
をする。
るサブルーチンジャンプ命令である。PCの値がスタック
に退避される。 ディスプレースメントのサイズとして、BSR:Dでは8ビ
ットが、BSR:Gでは8ビット、16ビット、32ビット、64
ビットが利用できる。本発明装置の命令は必ず偶数アド
レスから始まるので、BSR:D命令では、#d8を2倍して
使用する。すなわち、 PC+#d8*2==>PC となる。BSR:GでSS=00を指定した場合には、#dSを2
倍せずにそのまま使用する。 BSR,JSR命令でスタックに退避されるPC値としては、そ
の次の命令の先頭アドレスを使用する。これに対して、
実効アドレスの計算のためにPCを参照する場合(BSRな
どで暗黙にPCを参照する場合を含む)には、その命令
(次の命令ではない)の先頭アドレスをPC値として使用
するので、注意が必要である。 BSR,JSRでは旧のPCがスタックにセーブされるが、SPの
アライメントに関しては特にチェックしない。SPが4の
倍数でない場合にも、そのまま実行される。 本発明装置ではこの命令に対し、動的ブランチ予測処理
をする。
シングモードが使用可能なジャンプ命令である。 case文の実行などにおいては、ジャンプテーブルを参照
してジャンプ先アドレスを決める場合がある。これはJM
P命令と付加モードによるインデックスアドレッシング
とを組み合せることにより実現する。
の値がスタックに退避される。 BSR,JSR命令でスタックに退避されるPC値としては、そ
の次の命令の先頭アドレスを使用する。これに対して、
実効アドレスの計算のためにPCを参照する場合(BSRな
どで暗黙にPCを参照する場合を含む)には、その命令
(次の命令ではない)の先頭アドレスをPC値として使用
するので、注意が必要である。
り、ループのプリミティブとして利用する。 step、xreg、limitは符号付き整数として演算、比較さ
れる。stepは必ず正の値でないと条件ジャンプの意味が
ないが(xregが終了値と反対の方向に変化することにな
る)、stepの正負のチェックは行なわず、オペレーショ
ンに書かれている通りの動作をそのまま行なう。 ACB命令では、ループ命令として高速実行ができるよう
に、step加算時のオーバーフローのチェックは行なわな
い。stepを加算した結果オーバーフローが起こり、符号
が反転した場合には、符号反転した正しくない値がその
ままlimitと比較される。ただし、比較のためのlimit-x
regの減算がオーバーフローしたとしても、xreg<limit
の比較は正確に行なわれる。 ACB,SCBではPC相対でジャンプを行なう。SS=00でディ
スプレースメントが8ビットになる場合も、SS≠00の場
合と同様に、#dS8は2倍せずにそのまま使用する。SS
≠00の場合は、#dS8のフィールドは使用せず(0にす
る)、SSで指定されたサイズ(16,32,64ビット)のデー
タが#dS8の直後に続く。例えば、 ACB:Q #1,R0,#4,label で、labelとACB:Q命令のアドレスの差がH′1234であっ
た場合は、第213図に示すビットパターンになる。これ
は、固定長ビットフィールド命令の:1フォーマットでも
同じである。 [ACBのオペレーション] xreg+step==>xreg /*オーバーフローの場合は下位ビットのみ有効*/ if(xreg<limit)then PC+#dS8==>PC endif newpcが奇数であった場合には、ジャンプ先が奇数アド
レスになるため、奇数アドレスジャンプ例外(OAJE)と
なる。本発明装置では、終了条件満足のためジャンプし
なかった時も、奇数アドレスジャンプ例外(OAJE)を発
生する。 [詳細仕様調整中] ACB,SCB命令でSS≠00の時には、#dS8のフィールドは使
用しない。この時、もし#dS8のフィールドが0になっ
ていなくても、単に無視される。ただし、マニュアル上
は、#dS8のフィールドには常に0を入れるようにして
おく。 本発明装置ではこの命令に対して、動的ブランチ予測処
理をする。
り、ループのプリミティブとして利用する。 step、xreg、limitなどは符号付き整数として比較され
る。stepは必ず正の値でないと条件ジャンプの意味がな
いが、(xregが終了値と反対の方向に変化することにな
る)。stepの正負のチェックは行なわず、オペレーショ
ンに書かれている通りの動作をそのまま行なう。 SCB命令では、ループ命令として高速実行ができるよう
に、step減算時のオーバーフローのチェックは行なわな
い。stepを減算した結果オーバーフローが起こり、符号
が反転した場合には、符号反転した正しくない値がその
ままlimitと比較される。ただし、比較のためのlimit-x
regの減算がオーバーフローしたとしても、xreg<limit
の比較は正確に行なわれる。 ACB,SCBではPC相対でジャンプを行なう。SS=00でディ
スプレースメントが8ビットになる場合も、SS≠00の場
合と同様に、#dS8は2倍せずにそのまま使用する。SS
≠00の場合は、#dS8のフィールドは使用せず(0にす
る)、SSで指定されたサイズ(16,32,64ビット)のデー
タが#dS8の直後に続く。 [SCBのオペレーション] xreg−step==>xreg /*オーバーフローの場合は下位ビットのみ有効*/ if(xreg≧limit)then PC+#dS8==>PC endif newpcが奇数であった場合には、ジャンプ先が奇数アド
レスになるため、奇数アドレスジャンプ例外(OAJE)と
なる。本発明装置では、終了条件満足のためジャンプし
なかった時も、奇数アドレスジャンプ例外(OAJE)を発
生する。 [詳細仕様調整中] ACB,SCB命令でSS≠00の時には、#dS8のフィールドは使
用しない。この時、もし#dS8のフィールドが0になっ
ていなくても、単に無視される。ただし、マニュアル上
は、#dS8のフィールドには常に0を入れるようにして
おく。 本発明装置ではこの命令に対して、動的ブランチ予測処
理をする。
ンプ
が小さい場合には、localの値が符号拡張される。local
が負の場合は意味がないスタックフレームが形成される
が、特にチェックは行なわず、オペレーションに書かれ
ている通りの動作を行なう。この点は、ACB,SCBのstep
と同じである。 オペレーション: FP−>↓TOS SP−>FP SP−local−>SP registers(mask)−>↓TOS 高級言語用のスタックフレームの詳細は、付録を参照の
こと。 退避するレジスタのビットマップ指定LnXLは、第218図
のように行なう。 LnXLは、EaRの拡張部よりも後に置かれる。 ENTERのreglistでbit0,bit1(SP,FP)を指定した場合に
は、単にその指定が無視されるものとする。bit0,bit1
が“1"であっても、SP,FPは転送されない。これを不正
オペランド例外(IOE)としないのは、インプリメント
の負担が大きく、実効速度に影響が出るためである。た
だし、チェックが行なわれていなくても、FP,SPのビッ
トには必ず‘0'を入れてもらうように、マニュアル等で
指導する必要がある。 FP,SPのアライメントに関しては特にチェックしない。F
P,SPが4の倍数でない場合にも、オペレーションに書か
れた通りの実行が行なわれる。 ENTER:Gのlocalオペランドがメモリ上にあり、それがEN
TER命令の実行に伴って形成されるスタックフレーム領
域と重なっていた場合には、命令再実行がきわめて難し
くなる。そこで、ENTER:G,JRNG:G、および対称性からEX
ITD:G命令では、メモリアクセスを伴うアドレッシング
モード、つまりレジスタ直接Rnとイミディエート以外の
アドレッシングモードは、すべて禁止している。この命
令のオペランドとして動的な値を設定したい場合には、
テンポラリレジスタを一つ用意し、レジスタ直接Rnのモ
ードを利用するということになる。 localとしてFP,SPを指定した場合の動作は、インプリメ
ント依存である。
行ない、サブルーチンから戻る。その後adjspをSPに加
え、スタック上に残っていたサブルーチンのパラメータ
を捨てる。 EXITDのadjspは符号付きとして扱われ、adjspのサイズ
が小さい場合には、adjspの値が符号拡張される。adjsp
が負の場合は意味のない動作をするが、特にチェックは
行なわず、オペレーションに書かれている通りに実行を
行なう。この点は、ACB,SCBのstepと同じである。 オペレーション: adjsp==>tmp ↑TOS==>registers(mask) FP==>SP ↑TOS==>FP ↑TOS==>PC sp+adjsp==>SP 高級言語用のスタックフレームの詳細は、付録を参照の
こと。 復帰するレジスタのビットマップ指定LxXLは、第221図
のように行なう。 LxXLは、EaRの拡張部よりも後に置かれる。 EXITDのreglistでbit14,bit15(SP,FP)を指定した場合
には、単にその指定が無視されるものとする。bit14,bi
t15が“1"であっても、SP,FPは転送されない。これを不
正オペランド例外(IOE)としないのは、インプリメン
トの負担が大きく、実効速度に影響が出るためである。
ただし、チェックが行なわれていなくても、FP,SPのビ
ットには必ず‘0'を入れてもらうように、マニュアル等
で指導する必要がある。 FP,SPのアライメントに関しては特にチェックしない。F
P,SPが4の倍数でない場合にも、オペレーションに書か
れた通りの実行が行なわれる。 EXITDで、スタックから復帰されたリターンアドレスが
奇数であった場合には、ジャンプ先が奇数アドレスにな
るため、奇数アドレスジャンプ例外(OAJE)となる。 EXITDのオペランドadjsp/EaR!Mでは、メモリアクセスを
伴うアドレッシングモード、つまりレジスタ直接Rnとイ
ミディエート以外のアドレッシングモードは、すべて禁
止している。この命令のオペランドとして動的な値を設
定したい場合には、テンポラリレジスタを一つ用意し、
レジスタ直接Rnのモードを利用するということになる。 adjspにレジスタ直接Rnのモードを利用し、reglistに同
じレジスタRnが含まれていた場合には、adjspとして、
レジスタ復帰前の値を使用する。つまり、スタック中に
退避されていたEXITD命令実行後のレジスタ値ではな
く、EXITD命令実行前のレジスタ値がadjspとなる。 adjspとしてFP,SPを指定した場合の動作は、インプリメ
ント依存である。
数であった場合には、ジャンプ先が奇数アドレスになる
ため、奇数アドレスジャンプ例外(OAJE)となる。
命令実行の高速化のためのバッファ類をすべてパージ
し、メモリ上に置かれた命令列とプロセッサの内部状態
との整合性を保証する。この命令は、これから実行すべ
き命令コードが、以前(リセット時あるいは前回のPIB
命令実行時)から変更されている可能性があるというこ
とを、プロセッサに通知するために使用する。 本発明装置では、パイプラインや命令キュー、命令キャ
ッシュの制御を簡単化するため、プログラムにより命令
コードを書き変えることは許されていない。 つまり、自分自信で書き換えを行なった命令コードをそ
のまま実行しようとしても、動作が保証されない。とこ
ろが、OSの行なう処理をマクロ的に見ると、プログラム
をロードしてからそれを実行するという流れがある。つ
まり、広い範囲で見るとOSのプログラムにより命令コー
ドを書き変えていることになる。また、特殊な用途で
は、プログラムによって生成した命令列を実行すること
もある。 この命令の目的は、そのような場合でも正しい命令の実
行ができるようにすることである。すなわち、書き換え
のあった命令コードに入る前にこの命令を実行しておけ
ば、新しい命令コードが正しく実行されることが保証さ
れる。インプリメント上は、この命令によってパイプラ
イン、命令キュー、命令キャッシュのパージを行なうこ
とになる。 ただし、パイプラインやキャッシュのメカニズムがメモ
リの書き換えに対するバスモニタリング機構を持ってお
り、メモリとの整合性がハードウエアで常に保証されて
いれば、必ずしもPIB命令でパージを行なう必要はな
い。この場合、PIB命令はNOP命令として実行される。い
ずれにしても、この命令を実行した後に、パイプライン
や命令キャッシュとメモリとの整合性が保証されていれ
ば良いのである。 MMUを用いて多重論理空間を実現している場合には、PIB
命令を実行した論理空間に対してのみ書き変えた命令コ
ードの実行が保証される。例えば、 context Aの命令コードを書き換え STCTX LDCTX context B context Bの命令コードを書き換え PIB といった命令列を実行した場合、context Bでは変更さ
れた命令コードを実行しても動作が保証されるが、次に
LDCTX context Aを実行した後でも、context Aの変更さ
れた命令コードの実行に対しては動作が保証されない。
context Aの命令実行を保証するためには、context Aの
コンテキストにおいて、もう一度PIB命令を実行する必
要がある。これは、命令キャッシュにLSIDが導入された
場合に、PIB命令では、LSIDの一致する命令キャッシュ
エントリをパージするだけで済ませたいからである。 PIB命令以外の命令では、いかなるジャンプ命令やOS関
連命令(LDCTX,REIT,RRNG,TRAP,EIT起動など)を実行し
た後でも、命令コード書き換え部分のプログラムの動作
は保証されない。これは、命令キャッシュのパージをで
きるだけ減らすためである。したがって、OSがロードし
たプログラムを最初に実行する時には、新しいコンテキ
ストに入ってから(例えばLDCTX〜REITの間で)、必ずP
IBを実行する必要がある。 この命令のニモニックPIB(Purge Instruction Buffe
r)の‘Buffer'は、キャッシュやパイプラインなどを総
括的に含めた意味で用いることばであり、PTLBの‘B'の
Bufferに同じ用例がある。PIBというニモニックも、PTL
Bとの連想から作られたものである。 この命令は特権命令ではない。ユーザプログラムからも
使用できる。 [命令コードの整合性について] PIB命令の動作を正確に説明するため、「命令コードの
整合性」という状態を以下のように定義する。 「命令コードの整合性」とは、各論理空間の各論理アド
レスについて、別々に定義される状態である。例えば、
論理空間AではH′00000000〜H′000fffffについて
「命令コードの整合性」が保証され、論理空間Bでは
H′00010000〜H′0003ffffについて「命令コードの整
合性」が保証されている、といった使い方をする。「命
令コードの整合性」が保証されている領域の命令を実行
した場合にのみ、正しい命令動作をする(executeのア
クセス権チェックを含む)ことが保証される。一般に
は、「命令コードの整合性」の保証されている領域が命
令コード領域であり、データ領域では「命令コードの整
合性」が保証されていない。 ・「命令コードの整合性」が保証されるようになるの
は、次の場合である。 −リセット時 物理空間(=論理空間)の全領域で「命令コードの整合
性」が得られる。 −PIB命令実行時 PIB命令を実行した論理空間の全領域で「命令コードの
整合性」が得られる。AT=00の場合は、リセット時と同
様、物理空間(=論理空間)の全領域で「命令コードの
整合性」が得られる。 ・「命令コードの整合性」が失われるようになるのは、
次の場合である。 −メモリ書き換え時 メモリ内容を書き変えた場合、書き変えた領域の「命令
コードの整合性」は失われる。これは、論理アドレスに
よるメモリアクセスの場合も、物理アドレスによるメモ
リアクセスの場合(AT=00やLDP命令など)も同様であ
る。 −ATE更新時 ATEを更新した場合、そのATEによりアドレス変換される
領域の「命令コードの整合性」は失われる。したがっ
て、例えば、LDATEでATE中の保護ビットを変更した場合
にも、その後PIB命令を実行しなければ保護情報のチェ
ックが正しく行なわれないことになる。(これは、命令
キャッシュと保護情報のチェックに関するインプリメン
トを軽くするために有効であろう) 以上の点に該当しない一般の命令実行ではBRA,JMP,JRN
G,RRNG,TRAP,REIT,LDCTX,EIT起動などを含めて、「命令
コード整合性の状態」は変化しない。 12-13.マルチプロセッサ用の命令
し、その後そのビットを1にセットする。この2つの操
作はバスをロックして行なわれ、不可分の操作になる。
したがって、マルチプロセッサ間の同期をとるためにこ
の命令が使用できる。 ShMfqi,EaMfiで指定されるアドレッシングモードでは、
レジスタ直接モードRn、@−SP,@SP+,#imm dataの
モードは使用できない。 アセンブラ表記では、メモリアクセスのサイズをbaseの
サイズとして指定する。BSETI:Qでは、メモリアクセス
のサイズは8ビットに固定されており、サイズは‘B'の
みを書くことができる。また、BSETI:G,BSETI:Eでのア
クセスサイズ(baseのサイズ).H,.Wの指定は、BSET,BC
LRと同じく<<L2>>とする。 <<L2>>仕様でアクセスサイズ.H,.Wを指定したの
に、baseがアライメントのとれていないアドレスであっ
た場合には、メモリアクセスの範囲がインプリメント依
存となる。これは、ビット操作命令と同様である。この
時、インプリメントによって、アライメントのとれてい
ないワードやハーフワードのアクセスが行なわれる場合
には、バスをロックしたまま複数のバスサイクルを実行
する。これはCSI命令と同様である。 本発明装置では<<L2>>となっているハーフワード、
ワード単位のアクセスのインプリメントを行なう。また
baseとしてアライメントのとれていないアドレスを指定
した場合にも、アライメントのとれたハーフワード、ワ
ード単位でアクセスを行なう。
き
し、その後そのビットを0にセットする。この2つの操
作はバスをロックして行なわれ、不可分の操作になる。
したがって、マルチプロセッサ間の同期をとるためにこ
の命令が使用できる。 EaMfiで指定されるアドレッシングモードでは、レジス
タ直接モードRn、@−SP,@SP+,#imm dataのモード
は使用できない。 アセンブラ表記では、メモリアクセスのサイズをbaseの
サイズとして指定する。BCLRI:G,BCLRI:Eでのアクセス
サイズ(baseのサイズ).H,.Wの指定は、BSET,BCLRと同
じく<<L2>>とする。 <<L2>>仕様でアクセスサイズ.H,.Wを指定したの
に、baseがアライメントのとれていないアドレスであっ
た場合には、メモリアクセスの範囲がインプリメント依
存となる。これは、ビット操作命令と同様である。この
時、インプリメントによって、アライメントのとれてい
ないワードやハーフワードのアクセスが行なわれる場合
には、バスをロックしたまま複数のバスサイクルを実行
する。これはCSI命令と同様である。 本発明装置では<<L2>>となっているハーフワード、
ワード単位のアクセスのインプリメントを行なう。また
baseとしてアライメントのとれていないアドレスを指定
した場合にも、アライメントのとれたハーフワード、ワ
ード単位でアクセスを行なう。
ば、内容を更新する命令である。 この命令は、簡単な構造のデータをマルチプロセッサか
ら更新していく場合に利用できる。CSI命令を実行した
結果、destの値が以前の値と異なっていることがわかっ
た場合、それは他のプロセッサがデータ内容を書き替え
たことを意味している。したがって、CSI命令によってd
estの値の食い違いを発見したプロセッサは、新しいdes
tの値をもとにして、そのデータ内容の更新をやり直さ
なければならない。このような方法をとることにより、
マルチプロセッサの下でデータの一貫性を保つことがで
きる。 [CSIのオペレーション] update==>tmp /*以下の動作はバスをロックして行なわれる*/ if(dest=comp) then tmp==>dest 1==>Z flag else dest==>comp 0==>Z flag ビットパターン上の制約から、CSIでは、比較が成功し
なくてもupdateの読みだしが行なわれる。また、CSI命
令でのdestのアクセス権は、常にread,writeとも必要で
あるものとする。すなわちCSI命令で比較が失敗し、des
tに対して書き込みが起らない場合でも、destに対してw
riteアクセス権がないとアドレス変換例外(ATRE)にな
る。 RMC,EaMiRのサイズはRRで指定される。EaMiRで指定され
るアドレッシングモードでは、@−SP,@SP+,Rn,#imm
dataのモードは仕用できない。 CSI命令で、サイズ.H,.Wを指定し、アライメントの取れ
ていないアドレスをオペランドとした場合には、バスを
ロックしたまま複数のバスサイクルを実行する。この場
合、read,writeのそれぞれが2回ずつのメモリアクセス
に分かれるので、命令全体では、バスをロックしながら
read,read,write,writeの4回のメモリアクセスを行な
うことになる。 なお、CSI以外の一般命令で、アライメントの取れてい
ないアドレスに対してメモリアクセスを行なった場合に
は、バスはロックされない。したがって、例えば、 var1 EQU H′00000006 ;アライメントの取れていないアドレス とした場合に、プロセッサAから MOV.W #H′12345678,@var1 を実行し、プロセッサBから MOV.W #H′87654321,@var1 を実行すると、メモリ書き込みのタイミングによって
は、 H′00000006〜7=H′8765 H′00000008〜9=H′5678 となって、プロセッサAのMOV命令が先に実行された場
合ともプロセッサBのMOV命令が先に実行された場合と
も異なる結果になる可能性がある。 マルチプロセッサ間の共有変数に対しては、通常データ
の書き込みだけではなくデータ更新(read-modify-writ
e)を行なうのが普通なので、必然的にCSI命令を使うこ
とになり、以上のような問題は発生しない。しかし、マ
ルチプロセッサからCSI以外の命令でアライメントのと
れていない変数をアクセスする場合には、以上のような
問題が生じることがあるので、注意しておく必要があ
る。
が、コプロセッサの制御レジスタ群やチップバス上の高
速メモリなどとともに一つのアドレス空間を作ることが
できるようになっており、これを制御空間と呼ぶ。制御
空間の考え方は、現在別チップとなっているコプロセッ
サやコンテキスト退避用の高速メモリが、将来メインプ
ロセッサに内蔵された場合に、特に有効になる考え方で
ある。制御レジスタ操作命令は、制御空間に対してアク
セスを行なうための命令である。 なお、LDC,STCなどの汎用的な制御空間操作命令は特権
命令となっているため、ユーザが制御空間の一部である
PSB,PSMを操作するためには、LDPSB,STPSB,LDPSM,STPSM
命令を使用する。 本発明装置はアドレス変換機構を持たない。よって、論
理空間アドレスと物理空間アドレスがつねに等しいため
物理空間操作命令の機能は論理空間を操作する他の命令
に吸収されてしまう。しかし、アドレス変換機構を持
ち、論理空間と物理空間を区別して扱う本発明装置との
ソフトウエア互換性を重視し、本発明装置では物理空間
操作命令をサポートする。
stより小さいときは、符号拡張される。 dest/EaW%では、レジスタ直接モードRnの指定、@−SP
の指定はできない。 この命令は特権命令である。ring0以外から実行された
場合には、特権命令違反例外(RIVE)となる。 本発明装置では制御空間に対する.B,.Hのアクセス機能
はサポートしない。制御空間としてはCPU内の制御レジ
スタのみをインプリメントする。 また、UATB,SATBを実装していないためLDCによりUATB,S
ATBを変更することはできない。 LDATE,STATE,LDP,STP,LDC,STC,MOVPA命令の中の特殊空
間を参照するオペランドにおいて、付加モードによりメ
モリの間接参照が起こった場合には、特殊空間の方では
なく論理空間(LS)の方を参照する。また、スタックポ
インタSPの参照があった場合には、PRNGではなく現在リ
ングRNGのスタックが参照される。特殊空間のアドレス
という意味を持つのは、最終的に得られた実効アドレス
のみである。 制御空間に対する.B,.Hのアクセス機能が全くないプロ
セッサにおいて、制御空間のオペランドのサイズとし
て.B,.Hを指定した場合には、予約命令例外(RIE)とな
る。 未実装の制御レジスタ、または制御レジスタのないアド
レスをLDCで指定した場合には、予約機能例外(RFE)と
なる。<<LV>>の領域についても同様である。 制御空間で利用できるアドレスに何らかの制限のあるプ
ロセッサの場合、それに違反した場合には予約機能例外
(RFE)とする。例えば、制御レジスタのアドレスを4
の倍数に限るといった制限はこれに含まれる。コンテキ
スト退避用の高速メモリを内蔵したプロセッサであれ
ば、制御レジスタ部分のアドレスのみが4の倍数に制限
され、高速メモリ部分のアドレスは自由になるというケ
ースが考えられるが、この場合にも、違反すると予約機
能例外(RFE)になる。また、一部のアドレスについて
のみ.B,.Hの指定が可能なプロセッサにおいて、.B,.Hの
アクセスができないアドレスを指定した場合にも、予約
命令例外(RIE)ではなく予約機能例外(RFE)となる。
これは、命令ビットパターン(サイズ指定を含む)のみ
でエラーと判定できるものを予約命令例外(RIE)と
し、アドレスやオペランド値によってエラーかどうかの
状態が変化するものは予約機能例外(RFE)とする、と
いう考え方に基づいたものである。 制御空間のアドレスがチップ外(コプロセッサのアドレ
スなど)になり、インプリメントの制約によってその領
域がアクセスできなくなっている場合にも、予約機能例
外(RFE)が発生する。LDC,STCでは、制御空間のアドレ
スがコプロセッサのアドレスになった場合でも、コプロ
セッサ命令例外(CIE)は発生しない。コプロセッサ命
令例外(CIE)が発生するのは、コプロセッサ用の命令
を実行した場合に限られる。 LDCで、制御レジスタの‘−',‘+’で表現されるreser
vedのビットに異なる値を書き込もうとした場合や、あ
るフィールドに対してreseredの値を書き込もうとした
場合には、予約機能例外(RFE)になる。PSWのSMRNGの
フィールドに‘001'などのreservedの値を書き込んだ場
合も、これに含まれる。一方、‘=',‘#’で表現され
ているreservedのビットに異なる値を書き込んだ場合に
は、単に無視される。ただし、ユーザ向けのマニュアル
では、‘=’に対して必ず‘0'を書き込んでもらうよう
に注意しなければならない。また、‘*’で表現されて
いるビットには、何を書き込んでも単に無視される。こ
のビットは、‘=',‘#’とは異なり、今後仕様を拡張
した場合でも、仕用されないことが保証されたビットで
ある。したがって、LDCを実行する前に、このビットを
‘0'にマスクしておく必要はない。 LDCでCTXBBを変更した場合には、メモリ上のCTXBBの内
容と実際のチップ内のコンテキストとの整合性がとれな
くなるが、これはプログラマの責任で処理する。ハード
ウエア的には、単にCTXBBの変更のみを行なう。CTXBBの
変更とコンテキストのロードを両方行なう場合は、LDCT
Xを使用すればよい。 LDC命令によってUATB,SATBが変更される時は、それに伴
ってTLBや論理キャッシュのパージ(PSTLB/ATに相当す
る処理)が自動的に行なわれる。LSIDを実装したプロセ
ッサの場合は、LSID制御レジスタにより指定される論理
空間がパージの対象となる。この場合、LDC命令には、P
STLB命令のような/SS,/ASのオプションは設けられてい
ないが、これは次のような理由によっている。 PTLB,PSTLB命令によるTLBのパージの場合は、LDC *,UA
TBの場合とは異なり、他の論理空間のキャッシュやTLB
もパージできるように、LSIDの機能に相当するパラメー
タを、別のレジスタ(R1)によって指定している。この
場合、LSIDの制御レジスタは使用しない。したがって、
そのパラメータを使用するかどうかを区別するために、
/SS,/ASのオプションを切り換える必要がある。ところ
が、LDC *,UATBの場合は、データの矛盾をなくするた
めに、現在使用中の空間に対してキャッシュやTLBのパ
ージを行なうのであるから、LSIDの制御レジスタは本来
の意味で働く。つまり、一般のメモリアクセスと同様
に、LSID制御レジスタによって指定された論理空間がパ
ージの対象となる。LSID未実装のプロセッサでは、全論
理空間(一つだけであるが)がパージの対象となる。
を書き込もうとし たとき(=,#,*は除く) ・EaW%のアドレスのワードアラインメントがとれてい
ないとき
cとdestのサイズが共通に指定されるため、異種サイズ
間の転送は行なわれない。 この命令は特権命令である。ring0以外から実行された
場合には、特権命令違反例外(PIVE)となる。 src/EaR%では、レジスタ直接モードRnの指定、イミデ
ィエート#imm dataの指定、@SP+の指定はできない。 本発明装置では、制御空間に対する.B,.Hのアクセス機
能はサポートしない。制御空間についてはCPU内の制御
レジスタのみをインプリメントする。 LDATE,STATE,LDP,STP,LDC,STC,MOVPA命令の中の特殊空
間を参照するオペランドにおいて、付加モードによりメ
モリの間接参照が起こった場合には、特殊空間の方では
なく論理空間(LS)の方を参照する。また、スタックポ
インタSPの参照があった場合には、PRNGではなく現在リ
ングRNGのスタックが参照される。特殊空間のアドレス
という意味を持つのは、最終的に得られた実効アドレス
のみである。 制御空間に対する.B,.Hのアクセス機能が全くないプロ
セッサにおいて、制御空間のオペランドのサイズとし
て.B,.Hを指定した場合には、予約命令例外(RIE)とな
る。 未実装の制御レジスタ、または制御レジスタのないアド
レスをSTCで指定した場合には、予約機能例外(RFE)と
なる。<<LV>>の領域についても同様である。 制御空間で利用できるアドレスに何らかの制限のあるプ
ロセッサの場合、それに違反した場合には予約機能例外
(RFE)とする。例えば、制御レジスタのアドレスを4
の倍数に限るといった制限はこれに含まれる。コンテキ
スト退避用の高速メモリを内蔵したプロセッサであれ
ば、制御レジスタ部分のアドレスのみが4の倍数に制限
され、高速メモリ部分のアドレスは自由になるというケ
ースが考えられるが、この場合にも、違反すると予約機
能例外(RFE)になる。また、一部のアドレスについて
のみ.B,.Hの指定が可能なプロセッサにおいて、.B,.Hの
アクセスができないアドレスを指定した場合にも、予約
命令例外(RIE)ではなく予約機能例外(RFE)となる。
これは、命令ビットパターン(サイズ指定を含む)のみ
でエラーと判定できるものを予約命令例外(RIE)と
し、アドレスやオペランド値によってエラーかどうかの
状態が変化するものは予約機能例外(RFE)とする、と
いう考え方に基づいたものである。 制御空間のアドレスがチップ外(コプロセッサのアドレ
スなど)になり、インプリメントの制約によってその領
域がアクセスできなくなっている場合にも、予約機能例
外(RFE)が発生する。LDC,STCでは、制御空間のアドレ
スがコプロセッサのアドレスになった場合でも、コプロ
セッサ命令例外(CIE)は発生しない。コプロセッサ命
令例外(CIE)が発生するのは、コプロセッサ用の命令
を実行した場合に限られる。 STCで、制御レジスタの‘−’で表現されているビット
を読みだした場合には‘0'が、‘+’のビットを読みだ
した場合には‘1'が読み出される。また、‘=',‘#',
‘*’のビットを読み出そうとした場合に得られる値
は、不定である。インプリメントによって、‘0'固定の
場合、‘1'固定の場合、以前に書き込んだ値がそのまま
読み出される場合がある。将来の拡張のため、‘=',
‘#',‘*’のビットの値を利用したプログラミングは
行なわないように、ユーザ向けのマニュアルに明記しな
ければならない。
ないとき
意味とは関係なく退避や復帰を行なう場合を除けば、PS
M,PSBでは、一部のフィールドのみの書き換えをしたい
ということが多い。そのため、LDPSB,LDPSM命令のsrcオ
ペランドは16ビット(EaRh)となっており、上位バイト
がマスク(変更されるビットを0とする)、下位バイト
が変更データを表わすという仕様になっている。つま
り、srcを src=[S0.S1...S7.S8.S9...S15] とすると、 [LDPSBのオペレーション] ([S0.S1...S7].and.PSB).or.(-[S0.S1...S7].an
d.[S8.S9...S15])==>PSB ただし‘-’はビット否定 となる。例えば、2^4の位置にあるX flagをセットする
命令は、 LSPSB #H′ef10 となる。 上位バイトで、変更されるビットの方を0、変更されな
い方を1としたのは、変更される方をデフォルトと考え
る方が自然だと判断したからである。8ビット全部を変
更する場合には、上位バイトをすべて0にして単なるバ
イトデータを書けばよい。8ビット全部の変更は、最初
に述べたように、ユーザ側でPSB,PSMの退避や復帰をす
る場合に必要である。 LDPSB,LDPSMで、PSB,PSMの未使用フィールドの値を“1"
にしようとした場合には、予約機能例外(RFE)が発生
する。
意味とは関係なく退避や復帰を行なう場合を除けば、PS
M,PSBでは、一部のフィールドのみの書き換えをしたい
ということが多い。そのため、LDPSB,LDPSM命令のsrcオ
ペランドは16ビット(EaRh)となっており、上位バイト
がマスク(変更されるビットを0とする)、下位バイト
が変更データを表わすという仕様になっている。つま
り、srcを src=[S0.S1...S7.S8.S9...S15] とすると、 [LDPSMのオペレーション] ([S0.S1...S7].and.PSM).or.( -[S0.S1...S7].
and.[S8.S9...S15])==>PSM ただし‘ -’はビット否定 となる。 LDPSB,LDPSMで、PSB,PSMの未使用フィールドの値を"1"
にしようとした場合には、予約機能例外(RFE)が発生
する。
ビットが常に0を返すようになっているのは、LDPSM,LD
PSBでそのままPSM,PSBの復帰ができるように配慮したた
めである。
ビットが常に0を返すようになっているのは、LDPSM,LD
PSBでそのままPSM,PSBの復帰ができるように配慮したた
めである。
stより小さいときは、符号拡張される。 本発明装置はアドレス変換機構を持たないので論理空間
アドレスと物理空間アドレスがつねに等しく、この命令
の機能はMOV命令に吸収されてしまう。しかし、アドレ
ス変換機構をもち論理空間と物理空間を区別して扱う本
発明装置とのソフトウエア互換性を取るためこの命令を
サポートする。 この命令は特権命令である。 dest/EaW%では、レジスタ直接モードRnの指定、@−SP
の指定はできない。 LDATE,STATE,LDP,STP,LDC,STC,MOVPA命令の中の特殊空
間を参照するオペランドにおいて、付加モードによりメ
モリの間接参照が起こった場合には、特殊空間の方では
なく論理空間(LS)の方を参照する。また、スタックポ
インタSPの参照があった場合には、PRNGではなく現在リ
ングRNGのスタックが参照される。特殊空間のアドレス
という意味を持つのは、最終的に得られた実効アドレス
のみである。
cとdestのサイズが共通に指定されるため、異種サイズ
間の転送は行なわれない。 本発明装置はアドレス変換機構を持たないので論理空間
アドレスと物理空間アドレスがつねに等しく、この命令
の機能はMOV命令に吸収されてしまう。しかし、アドレ
ス変換機構を持ち論理空間と物理空間を区別して扱う本
発明装置とのソフトウエア互換性を取るためこの命令を
サポートする。 この命令は特権命令である。 src/EaR%では、レジスタ直接モードRnの指定、イミデ
ィエート#imm dataの指定、@SP+の指定はできない。 LDATE,STATE,LDP,STP,LDC,STC,MOVPA命令の中の特殊空
間を参照するオペランドにおいて、付加モードによりメ
モリの間接参照が起こった場合には、特殊空間の方では
なく論理空間(LS)の方を参照する。また、スタックポ
インタSPの参照があった場合には、PRNGではなく現在リ
ングRNGのスタックが参照される。特殊空間のアドレス
という意味を持つのは、最終的に得られた実効アドレス
のみである。
う。この命令は、現在のリングよりも内側のリングレベ
ルにあるプログラムの呼び出し(システムコールの呼び
出しを含む)を行なうために使用される。 外側のリングから内側のリングを保護するため、JRNGで
のジャンプ先は特定のアドレスに制限されている。この
アドレスを入れたテーブルをリング間遷移テーブルJRNG
VT(JRNG Vector table)と呼ぶ。JRNG命令では、vecto
rオペランドがJRNGVTに対するインデクスとなる。JRNGV
Tの一つのエントリを、JRNGVTEと呼ぶ。 JRNGVTは、vectorに対するエントリを65535個持つテー
ブルであり、そのベースの論理アドレスがJRNGVBによっ
て示される。vectorのサイズは16ビットとなっている。
JRNGVBは制御レジスタの一つであり、次のような構成に
なっている。 ・JRNGVB JRNGVBは、第252図に示すようにJRNG命令のベクトルテ
ーブルの先頭の論理アドレスを示す。テーブルのベース
アドレスは、アラインメントのため、下位の3ビットが
0に固定される。 Eが0の時はJRNGは実行禁止であり、JRNGを実行すると
リング遷移違反例外(RTVE)となる。この時、JRNGVBは
意味を持たないので、OSはこのフィールドを自由に使用
して良い。 ‘=’のビットには‘0'を入れておかなければならな
い。ただし、このビットが0でなくても単に無視され
る。 JRNGVTEは8バイトであり、第253図のような構成になっ
ている。これは、内側のリングへ入るためのゲートとい
う意味合いをもったものである。 ・ARの機能は、そのvectorで示されるエントリのリング
間コールが、最低でどのリングから発行可能であるかを
示すものである。ARで示されるリングよりも現在のリン
グの方が外側の場合には、リング間コール(システムコ
ール)が許可されていないものと見なされ、リング遷移
違反例外(RTVE)となる。ARは、その意味から考えて、
PSWのPRNGの位置に相当するフィールドを使う。これ
は、JRNGVT,EITVTの各エントリが、基本的にはPSW+PC
のサブセットの形になっているという考え方に基づいた
ものである。 ・VXの機能は、OSとユーザプログラムとの間で32/64ビ
ットのモードが異なっている場合に有効である。 ・JRNGVTEの未使用フィールド(‘=’で示される)、
および‘VX'ビットには、‘0'を入れておかなければな
らない。ただし、実際には、これらのビットが‘1'であ
ったとしても、単に無視されるだけである。これを予約
機能例外(RFE)としないのは、インプリメントの負担
を考えたためである。[詳細仕様調整中] ・また、JRNGVTEのVPCのフィールドは偶数でなければな
らない。つまり、VPCのフィールドのLSBは‘0'でなけれ
ばならない。違反した場合には、JRNG実行時に奇数アド
レスジャンプ例外(OAJE)が発生する。[詳細仕様調整
中] JRNGVBはMSB=0の時UATB、MSB=1の時SATBを使ってア
ドレス変換される。JRNGVBのアドレスを論理アドレスと
したのは、次のような利点があるためである。 テーブルをコンテキスト毎に持つことが可能 テーブルの仮想化が可能である。すなわち、テーブル
自体をページ不在にすることができる。 EITであるTRAPAとの性格の違いが、よりはっきりす
る。 JRNGVBを論理アドレスと考えることにより、テーブルの
仮想化が可能となる。「本発明装置」では、ベクトルが
16ビット(65536エントリ、512KBテーブルサイズ)で非
常に多くなっており、しかもベクトルの上限を指定する
レジスタが設けられていない。しかし、JRNGVBが論理ア
ドレスとなっているため、MMU機能との組合わせが可能
であり、必ずしもテーブル分の物理メモリを負担する必
要はなくなっている。JRNGVT部分のSTE,PTEを未使用領
域にしておけば、16ビット=65536エントリ分のテーブ
ルをすべて物理メモリで用意する必要はない。 JRNGVTEの読みだしは、論理アドレスを用いた一般のメ
モリアクセスと同様に行なわれる。したがって、JRNGVT
Eは、JRNGを実行したプログラムのリングのアクセス権
で読み出される。JRNGを実行したリングから、指定した
ベクトルのJRNGVTEをreadする権利がない時は、アドレ
ス変換例外(ATRE)のリング保護違反エラーになる。ま
た、指定したベクトルのJRNGVTEが未使用領域となって
いた場合には、アドレス変換例外(ATRE)の未使用領域
参照エラーとなる。使用する側から見ると、これらのエ
ラーはリング遷移違反例外(RTVE)と同じように扱われ
る方が望ましいのであるが、主としてインプリメントの
都合により、上記のような仕様になっている。JRNGVTE
の読み出しの際には、このほかページ不在例外(PO
E)、バスアクセス例外(BAE)などの発生する可能性が
ある。 JRNG機能の導入により、JRNGVTのための論理空間を必ず
512KB消費することになる。また、不当なリング間コー
ルを防ぐためには、ユーザプログラムを実行する前に、
OSがJRNGVTの領域のSTE,PTEのセットを行なっておく必
要がある。そこで、リング間コール機能を使用しない場
合に、こういった処理が全く不用になるように、リング
間コール機能全体をディスエーブルにすることができる
ようになっている。この指定には、JRNGVBのLSBのEビ
ットを使う。JRNGVBのEビットが0の場合は、リング間
コール機能は使用できなくなり、JRNGを実行した場合に
は無条件にリング遷移違反例外(RTVE)となる。 結局、JRNGが成功するには次の条件を満たさなければな
らない。 …JRNGVBのE=1。 E=0であれば、JRNGVTが用意されていないことを意味
するのでリング遷移違反例外(RTVE)となる。 …指定したベクトルに対するJRNGVTEが、JRNG実行前の
リングからread可能。 ページ不在例外が発生した場合は、ページインの後再実
行することになる。 アドレス変換例外(ATRE)の未使用領域参照エラーが発
生した場合は、そこまでテーブルが用意されていないこ
とを意味するので、そのユーザプログラムにエラーを返
すのが普通である。 readのアクセス権がない場合は、保護の観点からJRNGの
実行を禁止していることを意味するので、やはりそのユ
ーザプログラムにエラーを返すのが普通である。 これはVAフィールドと同等の意味になるが、512ベクト
ル毎の指定となる。 …現在リング≧VRが成立。 外側のリングには行けない。違反した場合はリング遷移
違反例外(RTVE)となる。 …現在リング≦ARが成立。 受け付け可能リングのチェック。違反した場合はリング
遷移違反例外(RTVE)となる。なお、ARはJRNGVTEのAR
フィールドである。 [JRNGのオペレーション] if JRNGVBのEビット=0 thenリング遷移違反例外(RTV
E) 論理アドレスmem[vector×8+JRNGVB]よりVR,AR,VPC
をフェッチ if旧RNG>AR.or.旧RNG<VR thenリング遷移違反例外(R
TVE) 旧SP==>TOS↓(VRで示される新しいスタックを使
用) 旧PC==>TOS↓ 旧PCとしては、JRNG命令の次の命令の先頭アドレスがス
タックにプッシュされる。 これは、JSR命令と同じである。 旧PSW.and.B′01110000 00000000 11111111 11111111=
=>TOS↓ 旧PSWは、RRNGで意味を持つフィールド、つまり、RNG,X
A,PSHのフィールドのみがそのままスタックにプッシュ
され、それ以外のSM,AT,IMASKのフィールドは0にマス
クされてからスタックにプッシュされる。これは、外側
のリングのプログラムが、OSのみが知っているべき情報
(IMASKなど)を読み出せないようにするためである。 旧RNG==>新PRNG VR==>新RNG VPC==>新PC JRNG命令により形成されるスタックフレームは、第254
図のようになる。 ここで、旧リングのSPを新リングのスタックに積んだの
は、新リングから旧リングのスタックポインタSPやスタ
ックをアクセスするためである。リング毎のスタックは
制御レジスタとしてアクセス可能であるが、アクセスの
ためには特権命令(STC)を利用しなければならない。
したがって、例えばring1からring3のスタックに積まれ
たパラメータを見たいという場合には、この機能が必要
である。 JRNGでは、PSSの一部とPSMのPRNGのみが更新され、PSB
は更新されない。また、リング間コールの機能では、EI
Tとは異なり、スタックフォーマットは一種類しかない
ので、FORMAT(EITINF)はスタックに積まれない。 JRNG:Eの場合は、vectorがゼロ拡張される。 AT=00(アドレス変換なし)の場合は、JRNGVBは物理ア
ドレスを表わす。 JRNG実行時に、リング遷移違反例外(RTVE)などの命令
再実行型のEITが発生した場合、JRNG固有の機能である
リング間コール用のスタックフレームの形成は行なわれ
ず、EIT処理用のスタックフレームのみが形成される。
例えば、SMRNG=000の状態でJRNGを実行し、RNG=00に
ジャンプしようとしたが、何らかのエラーによりEITが
発生した場合は、第255図のようなスタックフレームに
なる。第256図ではない。 (A)のような仕様になっているのは、EIT発生後の命
令再実行のことを考えているからである。つまり、EIT
処理ハンドラに入る前に、プロセッサの状態をできるだ
け命令実行前の状態に戻そうとしているからである。 EITで使用するスタックとJRNGで使用するスタックが異
なっていた場合は、EIT発生時にEITで使用するスタック
のみが変化し、JRNGで使用するスタックのSPは変化しな
い。 JRNGでは、現在リングと同じリングにジャンプすること
も可能である。この場合、JRNGでスタックの切り換えは
起こらない。SPとしてスタックにプッシュされる値は、
命令実行前のSPの値になる。これは、JRNG命令の最初で
PUSHSPを実行したのと同じ動作である。この様子を第25
7図に示す。 JRNGで現在リングと同じリングにジャンプする場合に、
JRNG:Gのvectorオペランドがメモリ上にあり、それがJR
NG命令の実行に伴って形成されるスタックフレーム領域
と重なっていると、命令再実行がきわめて難しくなる。
そこで、JRNG:G命令では、メモリアクセスを伴うアドレ
ッシングモード、つまりレジスタ直接Rnとイミディエー
ト以外のアドレッシングモードは、すべて禁止してい
る。この命令のオペランドとして動的な値を設定したい
場合には、テンポラリレジスタを一つ用意し、レジスタ
直接Rnのモードを利用する必要がある。 リング間コールの機能はEITには含めない。 TRAPAとJRNGは、どちらもOSのシステムコールの呼出し
を行なうことを目的にした命令である。一般には、BTRO
Nのようにシステムコールの数が多く、複数のリングを
利用するOSではJRNGを利用し、ITRONのようにシステム
コールの数があまり多くなく、2リングで十分なOSでは
TRAPAを利用することになる。 TRAPAでは、ring1,ring2に行くことはできないので、BT
RONで外核をring1に置く場合には、当然JRNGを使う必要
がある。 なお、OSをユーザが拡張するような場合には、外向きの
リング間コールが必要になることがあり、BTRONでもそ
ういった例がある。しかし、頻度としては多くないこ
と、リング保護の趣旨とは矛盾していること、完全な保
護を行なうためにはリターンスタックを別に設ける必要
があり、インプリメントの負担が大きくなること、など
の理由により、命令セットのレベルでは外向きのリング
間コールをサポートしない。
ドに相当する部分を表わす。 ・このチェックがないと、RRNG命令で不正に内側のリン
グに入ることが可能になる。 temp1<PSH>==>PSH(PRNGを含む) temp1<RNG>==>RNG temp1<XA>==>XA temp2==>PC このほか、RRNG命令実行時にはDCEのEITが起動される場
合があり、そのチェックを行なう必要がある。詳しくは
付録9を参照。 ここで、PRNGの旧のスタックポインタをRNGスタックか
らポップして、再びPRNGのスタックポインタとして設定
しているのは、PRNGのスタックに積まれたシステムコー
ルのパラメータのポップなどにより、OS側からユーザの
スタックポインタを更新することを想定したためであ
る。 RRMGで内側のリングに入ろうとした場合には、リング遷
移違反例外(RTVE)となる。また、スタックからポップ
されたPCが奇数であった場合には、奇数アドレスジャン
プ例外(OAJE)となる。 現在のPSWのSMが0で、RRNG命令によりポップされるス
タック中のRNG(上記オペレーション中のtemp1<RNG
>)が0でない場合は、RRNG命令の実行によって、PSW
中のSMとRNGの組み合せがreservedのパターンとなる。
この場合には、予約機能例外(RFE)となる。 RRNG命令で、命令再実行型の例外であるRTVE,RFEが発生
した場合には、RRNG命令実行後に無くなる予定であった
リング間コールのスタックフレームが、そのまま残る。
したがって、EITとリンク間コールで同じスタックを使
っていた場合には、そのスタックフレームに追加される
形でEITのスタックフレームが形成される。また、EITと
リング間コールで異なるスタックを使っていた場合に
は、リング間コールで使用していたスタックの内容やス
タックポインタは変化しない。この点は、RRNGでDCEを
起動する場合とは異なっている。DCEの場合には、前の
リング間コールのスタックフレームをクリアしてから、
DCEの新しいスタックフレームを構成する。 <<RFE発生時のスタックの例‐EITで同じスタックを利
用する場合>> 第260図に示す これに対して、OAJEは命令完了型のEITとなる予定であ
る。[詳細仕様調整中] その場合は、DCEと同じように、リンク間コールのスタ
ックフレームをクリアしてからEITのスタックフレーム
を生成するということになる。RRNG命令でOAJEが発生す
る場合のスタックの動きは、次のようになる。 <<OAJE発生時のスタックの例‐EITで同じスタックを
利用する場合>> (RRNG実行前) 第261図に示す (RRNG実行後、OAJE起動後) 第262図に示す RRNG命令でスタック中からポップされたPSW(上記のtem
p1)のうち、PSH,RNG,XA以外のフィールドは、無視され
る。ただし、プログラミング上は、JRNG命令からRRNG命
令までの間で、スタック中に退避されたPSWのPSH,RNG,X
A以外のフィールドを書き変えてはいけない。 RRNG命令(32ビット)で同じリングに戻る場合、SPの最
終値は mem[initSP+8]==>SP (ただし、+8はPC,PSWの分) となる。これは、PC,PSWの処理の後POP SPを実行したの
と同じ動作である。 JRNGVBのEビットは、RRNG命令の動作には関係しない。
Eビットが0の場合にも、RRNG命令の実行は行なわれ
る。
用する。TRAPA命令ではEITが起動されるので、必ずリン
グ0に入ることになる。 TRAP,TRAPAでは、その他のEIT処理と同じく、PSSの一部
およびPSMのPRNGのみが更新される。PSMのPRNG以外のフ
ィールド(PSBを含む)は更新されない。
(トラップ)を発生する。 TRAP命令ではEITが起動されるので、必ずリング0に入
ることになる。条件の指定方法は、Bcc命令と同じであ
る。 TRAP,TRAPAでは、その他のEIT処理と同じく、PSSの一部
およびPSMのPRNGのみが更新される。 PSMのPRNG以外のフィールド(PSBを含む)は更新されな
い。 TRAPで未定義の条件を指定した場合には、予約命令例外
(RIE)となる。
みを総称してEIT(Exception,Interrupt,Trap)と呼
ぶ。REIT命令は、EITからのリターン、すなわち、OSか
らのリターンや割り込み処理からのリターンを行なうた
めに使用する命令である。 この命令は特権命令である。 [REITのオペレーション] ↑TOS==>PSW; ↑TOS==>FORMAT/VECTOR; ↑TOS==>PC; このほか、EITのタイプによっては、スタックに付加情
報が積まれている場合がある。それをポップしてEIT発
生前の状態に戻す。追加情報の有無は、FORMAT/VECTOR
(EITINF)で判定する。また、REIT命令実行時には、D
I,DCEのEITが起動される場合があり、そのチェックを行
なう必要がある。詳しくは付録9を参照。 FORMAT/VECTORとして、サポートされないスタックフォ
ーマットが指定されていた場合には、予約スタックフォ
ーマット例外(RSFE)となる。この場合、フォーマット
が不当であったスタックフレームは、追加情報の有無が
判定できないためにそのまま残し、そのスタックフレー
ムに追加される形でRSFEのスタックフレームが形成され
る。この点は、REITでDI,DCEを起動する場合とは異なっ
ている。DI,DCEの場合には、前のEITのスタックフレー
ムをクリアしてから、DI,DCEの新しいスタックフレーム
を構成する。 <<RSFEの処理‐RSFEで同じスタックを利用する場合>
> 第269図に示す REIT命令で、スタックからポップされたPCが奇数であっ
た場合には、奇数アドレスジャンプ例外(OAJE)とな
る。また、スタックからポップされたPSWによって、PSW
内のreserved(‘−’)のビット(XAビットを含む)を
‘1'に書き変えようとした場合や、SMRNGとしてreserve
dの値を書き込もうとした場合には、予約機能例外(RF
E)となる。 SMビットの変化については特にチェックしない。EITか
ら戻るためにREIT命令を使う限り、REIT命令の実行によ
ってSMが1から0に変わることはないはずである。しか
し、これは運用上の問題として対応することにし、REIT
命令ではSMが1から0になったかどうかのチェックは行
なわない。
クフォーマットが指定されたとき ・奇数アドレスジャンプ例外 ・スタックからポップされたPCが奇数であったとき ・予約機能例外 ・スタックからポップされたPSWによって、PSW内にrese
rvedの値を書き込もうとしたとき
停止する。外部割り込みまたはリセットにより実行を再
開する。 この命令は特権命令である。 imaskは、符号なしの数として解釈される。 imask≧16の場合には、予約機能例外(RFE)を発生す
る。 外部割り込みの場合には、割り込みが起るまで確定でき
ない情報(SPI/SP0のスタックの選択、ベクトル番号)
がある。したがって、WAIT命令では、外部割り込みが発
生してから情報をスタックに退避する。 [WAITのオペレーション]
ドし、タスクやプロセスのコンテキストブロック(CTX
B)の内容をプロセッサのレジスタにロードする。ロー
ドの行なわれるレジスタは、MMUの有無やCTXBFMの内容
によって変化するが、SP0〜SP3,UATB,CSWなどが含まれ
る。LDCTXで転送されるレジスタの詳細については、付
録8を参照のこと。 /LSオプションを指定した場合には、ctxaddrは論理空間
のアドレスを意味する。この場合には、論理空間上にCT
XBが置かれていることになる。また、/CSオプションを
指定した場合には、ctxaddrは制御空間のアドレスを意
味する。このオプションは、将来コンテキスト退避用の
高速メモリをチップに内蔵した場合に使用することを想
定したものであり、現在は<<L2>>となっている。こ
れらのオプションは、チップやチップバスのインプリメ
ントに合わせて最も高速なコンテキストスイッチを行な
うため、CTXBを置く空間に自由度を持たせるという目的
で設けられたものである。 「本発明装置」では/CSオプションはサポートしない。 「本発明装置」標準のMMUを内蔵したプロセッサでは、L
DCTX命令でUATBの変更が行なわれる。この場合、LSIDを
実装しないプロセッサであれば、UATBの変更に伴ってTL
Bやキャッシュのパージ(PSTLB/ATに相当する処理)が
自動的に行なわれる。LDCTX命令では論理空間の切り換
えが行なわれるため、LDCTX/LSが意味のある動作を行な
うには、ctxaddrはSRを指している必要がある。LDCTX/L
SでctxaddrがURを指していた場合の動作は保証されな
い。 「本発明装置」のLDCTX,STCTX命令では、汎用レジスタR
0〜R14の転送を行なっていない。これは、次のような理
由による。 −汎用レジスタについては、LDM,STM命令で転送するこ
とが可能であり、LDM,STMならばレジスタの指定も可能
である。実際のコンテキストスイッチの処理では、入れ
換えを行なうレジスタ以外にワーキング用のレジスタが
必要になることが多いので、一部のレジスタは転送しな
い方がよい場合がある。したがって、LDM,STMのよう
な、より汎用的な命令を使用する方が適当である。 −現在は、まだコンテキスト退避用のメモリをチップに
内蔵することが技術的に難しく、コンテキストの退避に
は外部メモリを利用せざるを得ない。その場合、LDCTX
で汎用レジスタの転送まで行なっても、汎用レジスタの
転送を別命令(LDM)としても、ほとんど速度差は生じ
ない。 −将来CTXBをすべてチップに内蔵して高速化しようとい
う場合には、LDC TXのreservedのオプションやCTXBFMの
機能を利用して仕様を拡張すれば良い。 また、LDCTX,STCTX命令では、PC,PSWの転送も行なって
いない。これは、次のような理由による。 −一般に、コンテキストスイッチによって切り換える必
要があるのは、OSのPCやPSWではなく、ユーザプログラ
ムのPCやPSWである。ところが、ユーザプログラムのPC
やPSWは、普通はOS呼び出し時にスタック中に退避され
ている。そこで、PC,PSWの退避にSP0のスタックを使用
するようにしておけば、コンテキストスイッチでSP0を
切り換えることにより、PC,PSWも間接的に切り替わる。
これを積極的に利用し、CTXBの構造として、SP0から間
接参照される部分(スタック)にPC,PSWが置かれるよう
なものを考えれば、コンテキストスイッチ命令で、PC,P
SWの操作(スタック〜CTXB間のコピー)をする必要がな
くなる。 ‐SPIを使用した外部割り込みの処理ハンドラの最後で
直接コンテキストスイッチを行なう場合には、どうして
もSPIのスタック〜CTXB間でPC,PSWの転送が必要にな
る。しかし、この場合、外部割り込みの中ではコンテキ
ストスイッチを遅延し、外部割り込みから抜ける時にDC
EやDIを使ってコンテキストスイッチを行なうようにす
れば、DCEやDIでSP0を指定することにより、上記のデー
タ構造が自然に実現できる。 この命令は特権命令である。 LDCTXによってセットされるPSWのreservedのビット
(‘‐’で表示される)に対して、CTXBから‘1'をロー
ドしようとした場合には、予約機能例外(RFE)が発生
する。また、UATBなどの制御レジスタのreservedのビッ
ト(‘=’で表示される)に対して、CTXBから‘1'をロ
ードしようとした場合には、単に無視される。これは、
LDCによって制御レジスタをセットしようとした場合と
同様である。 <<L1>>仕様のチップでは、AT=00(アドレス変換な
し)の場合にもUATBの転送が行なわれる。これは、OS内
のみで一時的にアドレス変換を中止するというケースが
考えられるためである。ただし、AT=00の場合は、/LS
を指定してもctxaddrは物理アドレスとして扱われる。L
DCTXでUATBを転送しないことを指定するには、CTXBFMを
利用する。 LDCTXの現在の仕様では、汎用レジスタの転送を行なっ
ていない。しかし、将来仕様が拡張されたり、コンテキ
スト退避用のメモリをチップに内蔵したりした場合に
は、LDCTX命令で複数の汎用レジスタのロードまで行な
う予定がある。その場合、ctxaddt/EaA!Aで付加モード
を許していると、LDMと同様に、命令が途中で中断した
場合の命令再実行が難しくなる。 したがって、LDCTXのctxaddr/EaA!Aでは付加モードを禁
止している。どうしても付加モードの機能を利用したい
場合には、MOVAを使って MOVA @(@(@(...))):A,R0 LDCTX @R0 とすることにより、同等の機能が実現できる。
とき ・特権命令違反例外 ・ring0以外から実行されたとき ・予約機能例外 ・PSWにreservedの値を書き込んだとき
ジスタで示される領域(CTXB)に退避する。退避の行な
われるレジスタは、MMUの有無やCTXBFMの内容によって
変化するが、SP0〜SP3,UATB,CSWなどが含まれる。STCTX
で転送されるレジスタの詳細については、付録8を参照
のこと。 STCTXでは、LDCTXと同様に、汎用レジスタやPC,PSWの転
送は行なわれない。 CTXBBの指す空間は/LS,/CSのオプションで指定する。た
だし、/CSオプションは、将来コンテキスト退避用のメ
モリをチップに内蔵した場合にはじめて意味を持つもの
であり、<<L2>>となっている。 「本発明装置」では、/CSオプションはサポートしな
い。 「本発明装置」標準のMMUを内蔵したプロセッサでは、S
TCTX命令でUATB退避が行なわれる。この場合、STCTX/LS
が意味のある動作を行なうには、CTXBBがSRを指してい
る必要があるが、CTXBBがSRを指すかURを指すかのチェ
ックは特に行なわない。 この命令は特権命令である。 STCTXでCTXBに退避される制御レジスタのreservedのビ
ットのうち、‘−',‘+’のビットについては、‘0',
‘1'がCTXBにセットされる、また、‘=',‘♯',‘*’
のビットについては、CTXBにセットされる値は不定であ
り、インプリメント依存である。これらは、STC命令と
同様である。 <<L1>>仕様のチップでは、AT=00(アドレス変換な
し)の場合にもUATBの転送が行なわれる。これは、OS内
のみで一時的にアドレス変換を中止するというケースが
考えられるためである。ただし、AT=00の場合は、/LS
を指定してもCTXBBは物理アドレスとして扱われる。 STCTXでUATBを転送しないことを指定するには、CTXBFM
を利用する。
chkaddrがPRNGからアクセス可能かどうかをチェックす
る。チェックした結果に応じてフラグをセットする。 read可能 ==>M flag write可能 ==>Z flag execute可能 ==>L flag この命令は特権命令ではなく、ユーザが使用することも
可能である。例えばring3からPRNG=ring3のアクセス権
をチェックすることもできる。したがって、ページアウ
トなどのOSの管理すべき情報はできるだけ見せないよう
になっている。ACSの実行のために必要なSection table
やPage tableがページアウトされていた場合には、通常
の命令と同じように、ページ不在例外(POE)として命
令を再実行する。このほか、ACS命令でATEを参照中に
は、アドレス変換例外(ATRE)、バスアクセス例外(BA
E)の発生する可能性がある。 ACS命令でテストするオペランドのサイズは、バイトと
考える。つまり、EaAで示されるアドレスの1バイト
が、PRNGからアクセス可能かどうかを示す。複数バイト
にまたがる領域のチェックを行なう場合は、ソフトウエ
アで対処する。 ACSでは、直前のリングからの処理要求に対するアクセ
ス権のチェックを行なう場合に、PRNGがそのまま利用で
きる。しかし、例えばring3からring2に処理を依頼し、
ring2からさらにring1を呼びたいという場合に、ring1
でring3からのアクセス権をチェックしたい場合があ
る。この時、PRNGはring2となっているので、そのままA
CS命令を使うことはできず、PRNGをring3に書き変えて
からACSを実行する必要がある。 このような要求に答えるために、PRNGはユーザからも操
作可能なPSMに置いている。PRNGは、ACS命令に対するパ
ラメータという意味を持ったフィールドである。ただ
し、このままではring3からring0の保護情報まで見える
ことになる。そこで、PRNG<RNGの時は無条件に L flag=M flag=Z flag=0 とすることによって、保護情報が見えるのを防ぐ。 ACSにおいて、chkaddrが未使用領域(ページ範囲外)で
あった場合には、R不可、W不可、E不可と同じよう
に、M flag=0,Z flag=0,L flag=0アクセス権なしと
して命令を正常終了するものとする。EITとはならな
い。 また、AT=00(アドレス変換なし)の場合は、リング保
護のチェックが行なわれないので、すべてのアドレスに
対してアクセス権をもっていると考える。実際には、バ
スアクセス例外(BAE)が発生するためにアクセスでき
ない領域もあるわけだが、そのチェックは行なわない。
これは、システムバスに起因するアクセスエラーとメモ
リ保護に起因するアクセスエラーはレベルの違ったもの
であり、ACSでは後者のみのチェックを行なうと考える
ためである。したがって、AT=00の場合、chkaddrが得
られた後はいずれの例外も発生せず、L flag=M flag
=Z flag=1(アクセス権あり)として命令を終了する
ものとする。 ACS命令は、命令エミュレーションのプログラムで、リ
ング保護レベルのチェックまできちんとエミュレートし
たい場合に利用できる命令である。エミュレーションの
プログラムは通常ring0に置かれるので、エミュレート
される命令とは異なったリングで実行されるのが普通で
ある。つまり、リング保護のレベルに関しては、エミュ
レートされるプログラムとエミュレーションプログラム
は異なった環境になっている。そこで、エミュレートさ
れる命令のオペランドをアクセスする前に、ACS命令に
よって、そのオペランドがエミュレートされる命令と同
じリング(PRNG)からアクセスできるかどうかをチェッ
クしてやれば、リング保護に関するエミュレーションま
できちんと行なうことが可能になる。 ACSのchkaddrの実効アドレス計算において、スタックポ
インタSPの参照があった場合には、PRNGではなく現在リ
ングRNGのスタックが参照される。
ない)
ドレス)を計算し、それを物理アドレスに変換してから
destに転送する。srcaddrで得られた実効アドレスのア
ドレス変換の方法は通常の命令とは異なり、UATBレジス
タではなくR1レジスタをアドレス変換テーブルのベース
アドレスとして使用する。これは、OS等から、現在プロ
グラムが走っている論理空間以外の空間に対する操作も
行なえるようにするためである。 この命令で、高機能命令と同じように固定番号のレジス
タを空間指定に使用したのは、高級言語で直接使用する
ことのない命令なので命令の対称性があまり必要ないこ
と、ビット割り当てからの制約があること、による。 MOVPA命令において、srcaddrを得てから、それを物理ア
ドレスに変換するまでの過程でページ不在例外、アドレ
ス変換例外などが発生した場合、そのエラーはフラグに
反映し、EITは起動しない。これはsrcaddrのアドレス変
換に使用するSection TableやPage Tableがページアウ
トされていた場合、また最終段のページ(ページテーブ
ルではない)がページアウトの場合、さらに変換テーブ
ルのエントリ(ATE)のフォーマットにエラー(予約ATE
エラー)があった場合などが含まれる。この時、destは
変化せず、V flagがセットされて命令を終了する。ま
た、ページフォールトがあったかどうかはF flagで示さ
れる。エラーやページフォールトがなく、命令を正常に
終了した場合には、V flagはクリアされる。この命令
は、基本的にはアドレス演算と考えるので、その他のフ
ラグは無変化である。 MOVPA命令のフラグ変化をまとめると、第280図のように
なる。 なお、STATEでV flag=0,F flag=1に相当する場合
(次の段のページアウト)は、MOVPAではV flag=1,F f
lag=1のページアウトの場合に吸収されているので、S
TATEとMOVPAとではフラグ変化のパターンが異なってい
る。 srcaddr,destなどの実効アドレスを得るまでの過程でペ
ージフォールトが生じた場合には、通常の命令と同じよ
うにページ不在例外(POE)が起動される。 この命令は特権命令である。 dest/EaW!Sでは、@−SPのモードを禁止している。これ
は、エラーやページアウトの発生によってV flagがセッ
トされ、destの転送ができない場合に、destに@−SPが
指定されていると命令動作がまぎらわしくなるためであ
る。 LDATE,STATE,LDP,STP,LDC,STC,MOVPA命令の中の特殊空
間を参照するオペランドにおいて、付加モードによりメ
モリの間接参照が起こった場合には、特殊空間の方では
なく論理空間(LS)の方を参照する。また、スタックポ
インタSPの参照があった場合には、PRNGではなく現在リ
ングRNGのスタックが参照される。特殊空間のアドレス
という意味を持つのは、最終的に得られた実効アドレス
のみである。 MOVPA,LDATE,STATE命令で、対象アドレスのMSBが1の場
合(SRを示す場合)は、R1ではなくSATBを使ってアドレ
ス変換を行なう。まとめると、第281図のようになる。 MOVPA,LDATE,STATEでは、アドレス変換のベースレジス
タを、UATBの代わりにR1によって指定している。この
時、UATBのreservedの部分に対応するR1のビット
(‘=’で表現された2^4,2^5のビット)が‘1'でなく
ても、特にチェックは行なわず、単に無視される。これ
は、インプリメントの負担を考慮したためである。チェ
ックが行なわれていなくても、R1の2^4,2^5のビットに
は必ず‘0'を入れてもらうように、マニュアル等で指導
する必要がある。 srcaddrの実効アドレスを得てから、R1を使ってアドレ
ス変換を行ない、その物理アドレスを得るまでの動作
は、ATビットには影響されない。つまり、AT=00であっ
ても、AT=01の時と同じようにsrcaddrのアドレス変換
が行なわれて物理アドレスが得られる。これは、アドレ
ス変換の前準備としてこの命令を使用することを想定し
たためである。もちろん、srcaddr,destの実効アドレス
計算(間接参照など)やdestへの書き込みは、AT=00の
時物理アドレス対象で行なわれる。
する <<L2>> /PT PTE操作 /ST STE操作
ドレス)を計算し、それを物理アドレスに変換する際に
使用するアドレス変換テーブルのエントリ(ATE)に対
して、srcで得られるデータの転送を行なう。destaddr
に対するアドレス変換の方法は通常の命令とは異なり、
UATBレジスタではなくR1レジスタをアドレス変換テーブ
ルのベースアドレス(物理アドレス)として使用する。
これは、OS等から、現在プログラムが走っている論理空
間以外の空間に対する操作も行なえるようにするためで
ある。destaddrのMSBが1の場合(SRを示す場合)は、R
1ではなくSATBを使ってアドレス変換を行なう。 /PTオプションの場合、/STオプションの場合とも、R1は
Section Tableのベースアドレスを指す。 結果的に、/PTの場合には2段の間接参照が、/STの場合
には1段の間接参照が行なわれる。 ATEへのセットが正常に行なわれた場合には、ATE値の変
更によって影響を受けるTLBと論理キュッシュのパージ
が自動的に行なわれる。 LSIDとは、複数のコンテキスト(プロセスやタスク)の
TLBの混在を許す場合に、それを区別する番号である。
複数の論理空間の区別が可能なTLBの場合には、/SSオプ
ションを指定することによって、TLB中のLSIDとROで示
されるLSIDが一致したTLBのみをパージすることができ
る。なお、現在使用中の論理空間に対するLSIDは、LSID
制御レジスタに置かれているが、この命令の実行とは直
接関係しない。メモリ管理やTLBの構成はインプリメン
ト依存性の強いところなので、この命令を実装する場合
にも、必ずしも/SSオプションをインプリメントする必
要はない。また、LSIDの機能も必須のものではない。/S
Sのオプションが用意されているのは、LSIDのあるプロ
セッサとLSIDのないプロセッサの互換性を取るためであ
る。PSTLBの項を参照のこと。 この命令で、高機能命令と同じように固定番号のレジス
タを空間指定に使用したのは、高級言語で直接使用する
ことのない命令なので命令の対称性があまり必要ないこ
と、ビット割り当てからの制約があること、による。 この命令では、ATE自体のエラーやページアウトなど、
いろいろな場合を見分けるため、F flag,V flagを使用
する。それぞれの場合における動作は、次のようにな
る。 1.destaddrのアドレス変換に使用するSection TableやP
age Tableのうち、操作する段より上位段のATEにフォー
マットエラー(予約ATEエラー)があった場合 この場合は、操作対象となるATEまで到達できないの
で、ATEへのセットは行なわれない。V flag=1,F flag
=0となって命令を終了する。 2.destaddrのアドレス変換に使用するSection TableやP
age Tableのうち、操作する段のATEを含むテーブル、あ
るいはそれより上位段のテーブルがページアウトされて
いた場合 この場合も、操作対象となるATEまで到達できないの
で、ATEへのセットは行なわれない。V flag=1,F flag
=1となって命令を終了する。なお、途中段のATEで、
予約ATEエラーと次段のページアウトが同時に起こった
場合には、予約ATEエラーの方を優先し、V flag=1,F f
lag=0とする。 3.それ以外の場合 この場合には、srcのデータがATEにセットされ、V flag
は0となる。LDATEによってATEにセットしたデータのPI
ビットが0の場合には、それより下位の段のページアウ
トを示すため、F flag=1となる。また、セットしたデ
ータがATEとして予約ATEエラーを起こすものであった場
合には、やはりF flag=1となる。この二つのケース
は、セットしたATEを使ってアドレス変換を行なおうと
すると例外が発生するという点で共通している。 セットしたATEにエラーがなく、PIビットが1の場合に
は、F flag=0となる。 LDATE命令のフラグ変化をまとめると第284図のようにな
る。 この命令は、基本的にはアドレス演算と考えるので、M
flag,Z flagなどは変化しない。また、src,destaddrな
どの実効アドレスを得るまでの過程でページフォールト
が生じた場合には、通常の命令と同じようにページ不在
例外(POE)が起動される。 この命令は特権命令である。 LDATE/STではPSTLB/STに相当する処理が、LDATE/PTでは
PSTLB/PTに相当する処理が自動的に行なわれる。 LDATE,STATE,LDP,STP,LDC,STC,MOVPA命令の中の特殊空
間を参照するオペランドにおいて、付加モードによりメ
モリの間接参照が起こった場合には、特殊空間の方では
なく論理空間(LS)の方を参照する。また、スタックポ
インタSPの参照があった場合には、PRNGではなく現在リ
ングRNGのスタックが参照される。特殊空間のアドレス
という意味を持つのは、最終的に得られた実効アドレス
のみである。 MOVPA,LDATE,STATEでは、アドレス変換のベースレジス
タを、UATBの代わりにR1によって指定している。この
時、UATBのreservedの部分に対応するR1のビット
(‘=’で表現された2^4,2^5のビット)が‘1'でなく
ても、特にチェックは行なわず、単に無視される。これ
は、インプリメントの負担を考慮したためである。チェ
ックが行なわれていなくても、R1の2^4,2^5のビットに
は必ず‘0'を入れてもらうように、マニュアル等で指導
する必要がある。 AT=00でLDATEを実行した場合、srcのフェッチとdestad
drの実効アドレス計算は、他の命令と同様にアドレス変
換なしで行なわれる。しかし、LDATEの命令動作そのも
のは、ATの値に関係しない。すなわち、AT=00であって
も、得られたdestaddrの実行アドレスは論理アドレスで
あると解釈され、それを物理アドレスに変換する際に使
用するATEに対して、srcの転送を行なう。これは、アド
レス変換の前準備としてこの命令を使用することを想定
したためである。 AT=00の場合のLDATE,STATE,MOVPAの仕様は、AT=01の
場合の仕様との整合性のほか、OSが最初にMMUの動作環
境を設定するために利用できるように、また、ユーザプ
ログラムがAT=01、OSがAT=00で動く場合に矛盾なく利
用できるように、という意図で決められたものである。
き
ドレス)を計算し、それを物理アドレスに変換する際に
使用するアドレス変換テーブルのエントリ(ATE)を読
みだし、destに設定する。srcaddrに対する実効アドレ
スのアドレス変換の方法は通常の命令とは異なり、UATB
レジスタではなくR1レジスタをアドレス変換テーブルの
ベースアドレス(物理アドレス)として使用する。これ
は、OS等から、現在プログラムが走っている論理空間以
外の空間に対する操作も行なえるようにするためであ
る。なお、srcaddrのMSBが1の場合(SRを示す場合)
は、R1ではなくSATBを使ってアドレス変換を行なう。 /PTオプションの場合、/STオプションの場合とも、R1は
Section Tableのベースアドレスを指す。結果的に、/PT
の場合には2段の間接参照が、/STの場合には1段の間
接参照が行なわれる。 この命令で、高機能命令と同じように固定番号のレジス
タを空間指定に使用したのは、高級言語で直接使用する
ことのない命令なので命令の対称性があまり必要ないこ
と、ビット割り当てからの制約があること、による。 この命令では、ATEの予約ATEエラーやページ不在エラー
など、いろいろな場合を見分けるため、F flag,V flag
を使用する。それぞれの場合における動作は、次のよう
になる。 1.srcaddrのアドレス変換に使用するSection TableやPa
ge Tableのうち、操作する段より上位段のATEに予約ATE
エラーがあった場合 この場合は、操作対象となるATEまで到達できないの
で、ATEの読みだしは行なわれない。V flag=1,F flag
=0となって命令を終了する。 2.srcaddrのアドレス変換に使用するSection TableやPa
ge Tableのうち、操作する段のATEを含むテーブルある
いはそれより上位段のテーブルがページアウトされてい
た場合 この場合も、操作対象となるATEまで到達できないの
で、ATEの読みだしは行なわれない。V flag=1,F flag
=1となって命令を終了する。なお、途中段のATEで、
予約ATEエラーと次段のページアウトが同時に起こった
場合には、予約ATEエラーの方を優先し、V flag=1,F f
lag=0とする。 3.それ以外の場合 この場合には、ATEが読み出されてdestにセットされ、V
flagはOとなる。STATEによって読み出されたATEのPI
ビットがOの場合には、それより下位の段のページアウ
トを示すため、F flag=1となる。また、読み出された
ATEが予約ATEエラーを起こすものであった場合には、や
はりF flag=1となる。この二つのケースは、読み出さ
れたATEを使ってアドレス変換を行なおうとすると例外
が発生するという点で共通している。 読み出されたATEに予約ATEエラーがなく、PIビットが1
の場合には、F flag=0となる。 STATE命令のフラグ変化をまとめると、第287図のように
なる。 なお、フラグ変化の意味を考えると、STATEのF flag.o
r.V flagに相当するものがMOVPAのV flagとなってお
り、STATEとMOVPAとではフラグ変化のパターンが異なっ
ている。 この命令は、基本的にはアドレス演算と考えるので、M
flag,Z flagなどは変化しない。また、srcaddr,destな
どの実効アドレスを得るまでの過程でページフォールト
が生じた場合には、通常の命令と同じようにページ不在
例外(POE)が起動される。 この命令は特権命令である。 dest/EaW!Sでは、@−SPのモードを禁止している。これ
は、途中段の予約ATEエラーやページアウトの発生によ
ってV flagがセットされ、destの転送ができない場合に
destに@−SPが指定されていると命令動作がまぎらわし
くなるためである。 LDATE,STATE,LDP,STP,LDC,STC,MOVPA命令の中の特殊空
間を参照するオペランドにおいて、付加モードによりメ
モリの間接参照が起こった場合には、特殊空間の方では
なく論理空間(LS)の方を参照する。また、スタックポ
インタSPの参照があった場合には、PRNGではなく現在リ
ングRNGのスタックが参照される。特殊空間のアドレス
という意味を持つのは、最終的に得られた実効アドレス
のみである。 AT=00でSTATEを実行した場合、srcaddrとdestの実効ア
ドレス計算は、他の命令と同様にアドレス変換なしで行
なわれる。しかし、STATEの命令動作そのものは、ATの
値に関係しない。すなわち、AT=00であっても、得られ
たsrcaddrの実効アドレスは論理アドレスであると解釈
され、それを物理アドレスに変換する際に使用するATE
をdestに転送する。これは、アドレス変換の前準備とし
てこの命令を使用することを想定したためである。 MOVPA,LDATE,STATEでは、アドレス変換のベースレジス
タを、UATBの代わりにR1によって指定している。この
時、UATBのreservedの部分に対応するR1のビット
(‘=’で表現された2^4,2^5のビット)が‘1'でなく
ても、特にチェックは行なわず、単に無視される。これ
は、インプリメントの負担を考慮したためである。チェ
ックが行なわれていなくても、R1の2^4,2^5のビットに
は必ず‘0'を入れてもらうように、マニュアル等で指導
する必要がある。
L2>>である。)
する
は、制御レジスタを用いる。しかし、TLBに対するパー
ジ操作しか行なわない場合には、そのためだけに制御レ
ジスタを追加するのはインプリメントの負担が大きいた
め、TLBのパージ命令を別に用意している。 LSIDとは、複数のコンテキスト(プロセスやタスク)の
TLBの混在を許す場合に、それを区別する番号である。/
SSオプションの際には、ROにより示されたLSIDを持つ論
理空間のTLBのみがパージされる。なお、現在使用中の
論理空間に対するLSIDは、LSID制御レジスタに置かれて
いるが、この命令の実行とは直接関係しない。 PTLB命令では、特定の論理アドレスのTLBのみをパージ
する機能はなく、指定した論理空間のすべてのTLBがパ
ージされる。特定の論理アドレスのTLBをパージする場
合は、PSTLB命令を使う。ただし、/SSオプションが指定
された場合には、指定した論理空間のURのTLBのみがパ
ージされ、SRのパージは一切行なわれない。SR部分のパ
ージを行なう場合には、必ず/ASを使用する必要があ
る。 この命令は特権命令である。 メモリ管理やTLBの構成はインプリメント依存性の強い
ところなので、この命令は<<L2>>となっている。ま
た、この命令を実装する場合にも、必ずしもすべてのオ
プションをインプリメントする必要はない。LSIDの機能
も必須のものではない。 PTLBでは、AT=00の場合にも、AT=01の時と同様にパー
ジが実行される。これは、アドレス変換の前準備として
PTLB命令を使用することを想定したためである。
つまり<<L2>>である。)
する /PT 論理アドレス全体(2^31〜2^12ビット)がprgaddr
と一致するエントリをパージする つまり、PTEの変更時に影響を受ける部分をパージする /ST 論理アドレスの2^31〜2^22ビットがprgaddrと一致
するエントリをパージする つまり、STEの変更時に影響を受ける部分をパージする /AT 論理アドレスの2^31ビットがprgaddrと一致するエ
ントリをパージする つまり、UATB,SATBの変更時に影響を受ける部分をパー
ジする
間のTLBのうち、STE〜PTEのインデクスに相当する論理
アドレス(すなわち論理アドレス全体)がprgaddrと一
致するものをパージする。また、/STオプションを指定
した場合には、対象となる論理空間のTLBのうち、STEの
インデクスに相当する論理アドレスがprgaddrと一致す
るものをパージする。/ATオプションを指定した場合に
は、対象となる論理空間のキャッシュのうち、論理アド
レスのMSBがprgaddrと一致するエントリをすべてパージ
する。 LSIDとは、複数のコンテキスト(プロセスやタスク)の
TLBの混在を許す場合に、それを区別する番号である。/
SSオプションの際には、R0により示されたLSIDを持つ論
理空間のURのTLBのみがパージされる。なお、現在使用
中の論理空間に対するLSIDは、LSID制御レジスタに置か
れているが、この命令の実行とは直接関係しない。 この命令は特権命令である。 メモリ管理やTLBの構成はインプリメント依存性の強い
ところなので、この命令は<<L2>>となっている。ま
た、この命令を実装する場合にも、必ずしもすべてのオ
プションをインプリメントする必要はない。LSIDの機能
も必須のものではない。 /AS,/SSオプションは、LSIDの有無に対する互換性を保
つために設けてあるオプションである。意味的には、PS
TLBの場合に常に/SSのみが指定できればよいが、PSTLB
の場合に常に/SS指定とすると、LSIDの有無によって互
換性が失われる恐れがある。例えば、最初にLSIDの機能
のないプロセッサができると、その上で動くプログラム
は、R0にLSIDのセットを行なわずにPSTLB命令を実行す
るものになるだろう。同じプログラムを将来LSIDの機能
の有るプロセッサで実行した場合、その時にR0に残って
いたゴミによって、全くでたらめのLSIDに対してPSTLB
が実行されることになる。これを防ぐためには、オプシ
ョンを使って、R0をセットしていない場合には/AS指
定、将来R0をセットした場合は/SS指定とすればよいわ
けで、PSTLBにおける/AS指定はこのような意味を持って
いる。 したがって、PSTLBでは、 /AS/PT /AS/ST /SS/PT /SS/ST はすべて有効であり、 /SSはR0によって指定される論理空間のURのTLBをパージ /ASはすべての論理空間に対するTLBのパージ、あるいは
LSIDの機能のないプロセッサでのTLBのパージ(/PT,/ST
オプションも有効、R0は使用しない) となる。 /ASオプションを使えば、LSIDのあるプロセッサでもLSI
Dのないプロセッサでも共通のプログラムを書けるが、L
SIDの機能を生かせないことになる。一方、/SSオプショ
ンを使えば、LSIDの機能は生かせるが、LSIDのないプロ
セッサでは未実装オプションということでエラー(予約
命令例外など)になる。 PTLB,PSTLB命令で/SSオプションが指定された場合に
は、指定した論理空間のURのTLBのみがパージされ、SR
のパージは一切行なわれない。SR部分のパージを行なう
場合には、必ず/ASを使用する必要がある。PTLB,PSTLB
で/SSのオプションを指定した場合の動作をまとめる
と、以下のようになる。 PTLB/SS ROで指定された論理空間のURをパージ PSTLB/SS/AT@uraddr ;uraddrはURR0で指定された論理
空間のURをパージ PSTLB/SS/AT@sraddr ;sraddrはSR/SSでSRを指定した
ので、何もしない SR全体をパージする場合はPSTLB/AS/AT@sraddrを利用 PSTLB/SS/PT@uraddr ;uraddrはURR0で指定された論理
空間のURの一部をパージ PSTLB/SS/PT@sraddr ;sraddrはSR/SSでSRを指定した
ので、何もしない SRの一部をパージする場合はPSTLB/AS/PT@sraddrを利
用 PSTLBで/STオプションの実装が難しい場合には、互換性
のため機能を縮退してそのまま実行することにし、EIT
とはしない。具体的には、/STの代わりに/AT相当の動作
を行なうことになる。 AT=00でPSTLBを実行した場合、prgaddrの実効アドレス
計算は、他の命令と同様にアドレス変換なしで行なわれ
る。しかし、PSTLBの命令動作そのものは、ATの値に関
係しない。すなわち、AT=00であっても、得られたprga
ddrの実効アドレスは論理アドレスであると解釈され、A
T=01の時と同様にパージが実行される。これは、アド
レス変換の前準備としてPSTLB命令を使用することを想
定したためである。
ニモニック、などに関する本発明装置での規定を示した
ものである。ドキュメントの記述の意味を明確にし、本
発明装置に対する理解を深めてもらうことを目的として
いる。 A2-1−1.このドキュメントにおける記述方法 <...> メタキャラクタを示す。 [A] Aはあってもなくてもよい。 {A}* Aの0回以上の繰り返し {A}+ Aの1回以上の繰り返し A::=B||C AはBまたはC A::=BC AはBとCをつないだもの A2-1−2.ニモニック決定の方針 総称ニモニックとフォーマット別ニモニックを設け
る。 総称ニモニックは各命令に対応したニモニックであり、
短縮形、一般形などフォーマットが複数存在する命令で
も、総称ニモニックは一つである。これに対して、フォ
ーマット別ニモニックは、短縮形や一般形などの区別を
したい場合のニモニックである。命令フォーマットを表
わす文字を決めておき、総称ニモニックから規則的にフ
ォーマット別ニモニックを作る。ユーザがアセンブラの
ソースプログラムを書いた場合には、通常総称ニモニッ
クを使う。総称ニモニックに対する最適なフォーマット
の選択は、原則としてアセンブラが行なう。 データタイプ指定子に関して統一的な規則を設ける。 データタイプ関係で記述を必要とするものは、演算のた
めのデータタイプ指定、命令全体でのオペランドサイズ
指定、およびオペランド毎のサイズ指定である。これら
に関して統一的な規則を設ける。 ニモニックは、原則としてIEEE Microprocessor Asse
mbly Language Stan dard(P694)を標準とする。ただ
し、これには一般的な感覚になじまないと思われるとこ
ろ、本発明装置のアーキテクチャに合わないところなど
があるので、あくまでも個々の名称を決める際の参考と
するだけである。考え方や規則まで完全にIEEEに合わせ
るわけではない。 特殊記号の利用はできるだけ避ける。 ここで定義するアセンブラでは、できるだけ特殊記号を
使用しないという方針にしている。それは、オペランド
に数式が来たり、アセンブラを拡張した場合に、その中
で使用する記号と競合させないためである。また、文字
セットの少ない大型機でも開発を行なうためには、あま
り多くの記号を使用するのは望ましくない。特殊記号の
利用をできるだけ避けたため、アセンブラの中では括弧
を一種類しか使用しておらず、また‘;',‘&’などが
未使用の特殊記号となっている。 A2-1−3.アセンブラ命令 本発明装置用アセンブラ言語における一つの命令は、一
つのオペレーションニモニックと複数個(0個,1個を含
む)、のオペランドニモニックにより記述される。オペ
コードニモニックとオペランドニモニックの間は一個以
上の空白文字(スペースまたはタブ)により区切られ、
オペランドニモニックどおしの間はコンマ‘,'により区
切られる。 <アセンブラ命令>::= <オペレーション>[<オペランド>{,<オペランド
>}*] A2-1−4.オペランドの順序 オペランドの順序は命令毎に定まっているが、原則は次
のようになる。 移動命令(MOV) 第一オペランドがソース、第二オペランドがデスティネ
ーションになる。すなわち、 第一オペランド==>第二オペランド これはIEEE標準と同じである。 2項演算の2オペランド命令(SUBなど) 第一オペランドが2番目のソース、第二オペランドが1
番目のソースとデスティネーションになる。すなわち、 第二オペランド.op.第一オペランド==>第二オペラ
ンド これはIEEE標準とは異なるが、多くのプロセッサで用い
られている方法であり、なじみやすい。 A2-2.オペレーションのニモニック A2-2−1.ニモニック生成規則 IEEEでは、演算操作を示す動詞をニモニックの先頭にも
ってくるという考え方であるが、本発明装置ではさらに
その前にデータタイプ指定子を置く。演算操作そのもの
に対するニモニックは、ほぼIEEEに合わせる。 本発明装置での命令のニモニックは、次のような規則で
生成する。 <オペレーション>::= [<データタイプ>]<演算操作>{<バリエーション
>}*{/<オプション>}*{:<フォーマット>}
*[.<サイズ>] 例: MOV SMOV/NE.W MOV.W MOV:L MOV:Q.W <データタイプ> 命令の先頭で指定するのは、演算方
法に大きな影響を与えるデータタイプ、すなわち、<演
算操作>に対して直交関係にないデータタイプである。
このデータタイプには、ストリング、キュー、ビットな
どが含まれる。データサイズ(整数の8,16,32,64ビッ
ト、浮動小数の32,64ビットなど)の指定は、ここでは
なく<サイズ>で行なう。また、符号付き、符号なしの
指定、およびアドレス演算の指定は、ここではなく<バ
リエーション>で行なう。 <演算操作>演算そのものの指定を行なう。できる限り
IEEEに合わせる。条件ジャンプ命令の条件の指定は本来
オプションとするべきであるが、慣例にしたがって基本
部分の<演算操作>に含める。 <バリエーション>演算に対する細かい操作や属性の指
定を行なう。 <オプション>命令フォーマット中の数ビットで表現さ
れる命令オプションを示す。オプションになるのは、ス
トリング命令の終了条件、キューのサーチ条件などであ
る。 <フォーマット>短縮形、一般形などのフォーマットを
指定する。通常は書かなくてもよく、書かない場合は総
称ニモニックになる。アセンブラのソースで<フォーマ
ット>を書かずに総称ニモニックを使った場合には、ア
センブラで自動的に最適なフォーマットを選ぶ。<フォ
ーマット>を書いた場合にはフォーマット別ニモニック
の記述になる。アセンブラのソースでユーザが<フォー
マット>を書いた場合には、強制的にそのフォーマット
を使うことを示す。 <フォーマット>によるフォーマット別ニモニックは、
仕様書やマニュアルの記述において、あるいは逆アセン
ブラなどにおいて、あえて命令フォーマットの区別をし
たい場合に用いる。 <サイズ>オペランドのサイズを指定する。<サイズ>
を使用する命令は、主として整数を扱う命令と浮動小数
を扱う命令である。<サイズ>は<データタイプ>とは
異なり、<演算操作>に対して直交関係があるのが特徴
である。 A2-2−2.データタイプ <データタイプ>を表わす文字として、次のようなもの
がある。 なし 整数演算、アドレス演算、雑命令など F 浮動小数 S ストリング Q ダブルリンクによるキュー B 1ビットのビット操作 BF 固定長ビットフィールドの操作 BV 任意長ビットフィールドの操作 A2-2−3.演算操作 原則としてIEEEのニモニックに従う。使用するものは次
の通りである。 ADD,SUB,MUL,DIV,CMP,NEG,AND,OR,XOR,NOT,LD,ST,MOV,P
USH,POP,WAIT,NOP 注意 ・MOV,LD,STの使い分け MOV レジスタ間、メモリ間の転送 LD メモリからレジスタへの転送 ST レジスタからメモリへの転送 LD,STは、方向性を意識する必要のある命令に使用す
る。 ・シフト関係のオペレーションは、左右の指定方法が異
なるためにIEEEのニモニックをそのまま使うわけではな
いが、IEEEの原則を生かしてSHA,SHL,ROTとする。 ・ブランチ(条件分岐)命令に関しては、IEEEに従う
と'BV'などが別の意味とぶつかること、符号付き整数の
比較と符号なし整数の比較の区別をわかりやすくしたい
こと、などを考慮したため、条件指定の部分がIEEEには
従っていない。 ・JMP,JSR,RTSは、ブランチ命令とのバランスからIEEE
には従っていない。 ・<バリエーション>の'X'により拡張演算を表わすこ
とに統一したため、ADDX,SUBX,MULX,DIVXについてもIEE
Eには従っていない。 A2-2−4.バリエーション <バリエーション>は、演算に対する属性などを指定す
るものである。次のような文字を使用する。 X 拡張演算 例:ADDX,MULXなど U 符号なしデータの演算 例:MOVU,ADDU,MULUなど C 制御空間(制御レジスタ)に対する演算 例:LDC,STC P 物理空間に対する演算 例:LDP,STP I バスをロックして行なう処理 例:BSETI,BCLRI,CSI M 複数データの処理 例:LDM,STM A アドレス計算 例:MOVA,PUSHA,MOVPA D 10進演算(符号なし、データチェックなし) 例:ADDDX,SUBDX またはスタック上のパラメータを捨てる処理 例:EXITD A2-2−5.フォーマット <フォーマット>は、命令フォーマットの詳細を区別し
たい場合に用いる。次のような文字を使用する。 Q リテラル短縮形 ビットフィールド命令のスタティック形 ループ命令のリテラル短縮形 例:MOV:Q.W ♯3,@abs BTST:Q.B ♯4,@abs ACB:Q ♯1,R1,♯5,loop1 R レジスタ−レジスタ間演算の短縮形 ループ命令のレジスタ短縮形 例:AND:R.W R1,R2 MOVA:R.W @(disp:16,R2),R3 ACB:R ♯1,R1,R2,loop2 L メモリ−レジスタ間演算の短縮形 例:ADD:L.W @abs,R2 MOV:L.W @(disp,R2),R3 S レジスタ−メモリ間演算の短縮形(MOVのみ) 例:MOV:S.W R2,@abs I イミディエート短縮形 例:ADD:I.W ♯100000,@abs2 G 2オペランド命令の一般形 ループ命令の一般形 例:ADD:G.W @abs1,@abs2 ACB:G @abs1,R1,@abs2,loop3 E 2オペランド命令の一般形の8ビットイミディエー
ト 例:ADD:E.W ♯100.B,@abs2 8 newpcが8ビット 例:ACB:G @abs1,R1,@abs2,loop3:8 16 newpcが16ビット 例:BEQ:G error:16 32 newpcが32ビット 例:BNE:G next:32 64 newpcが64ビット 例:BRA:G loop:64 なお、ここで示した':Q',':G'...といったフォーマット
指定は、一つの命令(総称ニモニック)の中でフォーマ
ットの区別を行ない、フォーマット別ニモニックを作る
ことが目的のものである。つまり、アセンブラ表記上の
フォーマット指定である。一方、命令フォーマット説明
で用いたG-format,E-format..といったフォーマットの
方は、命令全体の中でのフォーマットの説明を行なうこ
とが目的のものである。したがって、例えば同じ':G'で
あっても'MOVA:G'であればMOVA命令の一般形なのでGA-f
ormatであり、'MOV:G'であればMOV命令の一般形なのでG
-formatということになる。 A2-2−6.サイズ IEEEでは64ビット整数まで考慮されていないので、扱う
データサイズはどうしてもIEEEと異なったものになる。 整数の場合 4通りのサイズが対称的にサポートされている点、 オペランド側でもデータタイプが指定できる点、が特徴
である。 オペレーション側にもオペランド側にも同じものを書く
ので、'.'により区切っている。 <サイズ>として、次のような文字を使用する。 B Byte 8ビット長の整数 H Halfword 16ビット長の整数 W Word 32ビット長の整数 L Longword 64ビット長の整数 'L'は本発明装置32では使用できない。 浮動小数点の場合 別に定める。 A2-3.オペランドのニモニック オペランドには、汎用のアドレッシングモードまたはそ
のサブセットが利用できるもの(一般オペランドと呼
ぶ)と、命令に応じた特殊な指定をするもの(特殊オペ
ランドと呼ぶ)とがある。特殊オペランドについては、
命令毎にフォーマットを定める。特殊オペランドをとる
命令は、 BRA,Bcc,BSR,ACB,SCB (newpcオペランド) LDM,STM (reglistオペランド) などである。 <オペランド>::= <一般オペランド> ||<特殊オペランド> 一般オペランドに関しては、本発明装置において、オペ
ランド毎にデータサイズを指定できる点が特色であり、
アセンブラにおける一般オペランドの記述方法にもその
ような能力を持たせている。また、オペランドに対して
も総称ニモニックとフォーマット別ニモニックを設けて
いる。 一般オペランドのニモニックは、実際のオペランドの値
(実効アドレス)と付加モードフォーマットの区別、お
よびサイズから成る。 <一般オペランド>::= <オペランド値>[:<付加モード指定>][.<サ
イズ>] A2-3−1.アドレッシングモード表記の原則 従来のプロセッサでは、アドレッシングモードの数があ
まり多くなかったため、それぞれのモードを個別に考
え、別々の記号を割り当てておけばよかった。また、表
記法と実際のアドレッシングのオペレーションがうまく
対応していない場合も見られた。例えば、あるプロセッ
サではレジスタ相対間接のアドレッシングモードをdisp
(Rn)で表現する場合があるがこれはオペレーションと
してはmem[disp+Rn]であり、dispの部分とRnの部分
の扱いが対称的ではない。これだけで使っている場合に
は問題は生じないが、これを組み合わせて複雑なモード
を作っていった場合には矛盾の起きることがある。 本発明装置では付加モードといった機能があるため、統
一的、規則的なアドレッシングの表記を行なわないと混
乱を招く。そこで、本発明装置では実際のオペレーショ
ンとその表記との関係について原則を設け、それに基づ
いて、付加モードまで一貫したアドレッシングモードの
表記を行なうこととした。 アドレッシングは、基本的には加算と間接参照の繰り返
しである。したがって、この二つのオペレーションに対
する表記法が決まればよい。 本発明装置の表記原則をまとめると次のようになる。 [本発明装置アドレッシングモードの表記原則] @Aまたは@(A) アドレスAのメモリ内容を参照 mem[A] @(A,B,C,...) A,B,C..を加算して、加算結果のアド
レスのメモリ内容を参照 mem[A+B+C+...] 本発明装置における‘( )’は、間接参照などの特別
な意味は持たない。一般の数式と同じように、結合の順
序を示すに過ぎない。したがって、@Aと@(A)は全
く同じ意味ということになる。以下で説明するシンタッ
クスにおいて‘(..)’が入る場合であって
も、‘(..)’内に一つの項しかなければ、‘(..)’
を省略しても構わない。 従来のプロセッサでは‘(..)’によって間接参照を意
味する場合があり、これがある程度慣用的な表記法とな
っている。しかし、このような表記法では以下のような
点で誤解を生みやすい。 例: 慣用的表記法 オペランド値 Rn Rn (Rn) mem[Rn] abs mem[abs]またはabs (abs) mem[mem[[abs]] またはmem[abs] うまく対応がとれない場合が生ずる。 本発明装置において、間接参照を必ず‘@’によって表
現しているのは、こういった理由による。 イミディエート、スタック操作のアドレッシングモー
ド、インデクスのスケーリングなどの処理はこの原則に
入らないので、原則を参考にしながらそれぞれ別に表記
法を定める。 A2-3−2.付加モードの指定 <付加モード指定>::=A||N ‘A'の指定は、付加モードのフォーマットを使うという
ことを特に強調したい場合に付け加える。また、‘N'の
指定は、付加モードを使用しないということを特に強調
したい場合に付け加える。これらの指定は、フォーマッ
ト別ニモニックに相当するものである。‘:N',‘:A'と
も書かれていない場合は、そのアドレッシングが付加モ
ード以外の短いモードで実現できるかどうかをアセンブ
ラが判断し、実現できればそのモードを使う。付加モー
ドでないと実現できなければ、付加モードを使う。 例: @(disp,PC):A 常にPC相対付加モードを使用 dispが32ビット以下であっても付加モードを使用 @(disp,PC):N 常にPC相対間接のモードを使用 dispが64ビットであるとエラー @(disp,PC) dispが32ビットであればPC相対間
接のモードを使用 dispが64ビットであればPC相対付加モードを使用 A2-3−3.サイズ <サイズ>は、オペランドの演算サイズを示すものであ
り、オペレーションのニモニックに示されたサイズと組
みになって実際のサイズ指定を行なう。サイズ指定の文
字は、オペレーションに使われるものと同じである。 オペランド中の<サイズ>と、オペレーション中の<サ
イズ>の関係は、原則として次のようになる。 ・オペレーション中に<サイズ>の指定があった場合に
は、その<サイズ>が全部のオペランドのデフォルトの
サイズとして有効になる。ただし、サイズの指定ができ
ないオペランド、イミディエートのオペランド、特殊な
意味を持つオペランドの場合はこの限りではない。 ・オペランド中に<サイズ>の指定があった場合には、
それがそのオペランドのサイズになる。オペレーション
中で異なるサイズが指定されていても、オペランドで指
定された<サイズ>の方が優先される。 ・オペランド中で<サイズ>の指定を行ない、それが利
用できないサイズであった場合はエラーとなる。 例: MOV.W @src,@dest src,destともW(WORD)型 MOV.W @src.B,@dest srcはB(BYTE)型、destはW(WORD)型 MOV @src.B,@dest.W srcはB(BYTE)型、destはW(WORD)型 A2-3−4.オペランド値 以下の項では、一般オペランドに関してアドレッシング
モード別にそのアセンブラ表記を示す。 <イミディエート値>、<絶対アドレス>などの内容と
しては、数値、変数名、数式などが書けるが、そのシン
タックスは別に定める。<フォーマット>は、アドレッ
シングモードのフォーマット選択を明示したい場合に書
く。主としてアドレッシングモードの拡張部のサイズを
指定するために使用する。通常は書かなくてもよく、書
かない場合はアセンブラで自動的に最適なフォーマット
(サイズ)を選ぶ。<フォーマット>によるフォーマッ
ト別ニモニックは、仕様書やマニュアルの記述におい
て、あるいは逆アセンブラなどにおいて、あえてアドレ
ッシング部のフォーマットの区別をしたい場合に用い
る。 <フォーマット>::=4||16||32||64 4 4ビット長のアドレッシング修飾部 16 16ビット長のアドレッシング拡張部 @(disp:16,Rn),abs:16など 32 32ビット長のアドレッシング拡張部 @(disp:32,Rn),abs:32など 64 64ビット長のアドレッシング拡張部 abs:64など <フォーマット>により指定されるのは、あくまでも命
令フォーマット自体のサイズである。一方、<サイズ>
により指定されるのは、演算されるオペランドのサイズ
である。イミディエートモードの場合を除けば、両者は
全く異なるものである。 例: MOV R0.W,@addr:16,W この命令では、R0の内容を‘addr'で示されるメモリに
転送する。 絶対アドレッシングが用いられている。 ‘:16'は‘addr'を16ビットで表現することを示す。し
たがって、 ‘addr'の範囲は$ffff8000〜$00007fffとなる。 一方、‘.W'は演算をWORD(32ビット)で行なうことを
示す。つまり、この命令により4バイトのデータが転送
される。 <レジスタ番号>に入るのは、汎用レジスタのニモニッ
クである。 <レジスタ番号>::= R0||R1||R2||R3||R4||R5||R6||R7||R8||R9||R10||R11
||R12||R13||R14||R15||FP||SP FPとR14は全く同義、SPとR15は全く同義である。 A2-3−4−1.レジスタ直接 オペランド=Rn <オペランド値>::= <レジスタ番号> 例: R1 A2-3−4−2.レジスタ間接 オペランド=mem[Rn] <オペランド値>::= @<レジスタ番号> 例: @R2 A2-3−4−3.レジスタ相対間接 オペランド=mem[disp16+Rn] mem[disp32+Rn] <オペランド値>::= @(<ディスプレースメント>[:<フォーマット
>],<レジスタ番号>) <フォーマット>::=16||32 例: @(disp:16,R5) A2-3−4−4.リテラルとイミディエート オペランド=imm data <オペランド値>::= ♯<リテラル値> <オペランド値>::= ♯<イミディエート値> リテラルの命令フォーマットを使用するということを明
示したい場合は、オペレーションのニモニック中で示
す。 イミディエートの場合には、拡張部のサイズがオペラン
ドのサイズとして決まるため、<フォーマット>と<サ
イズ>が同じ意味になる。アセンブラとしては、<フォ
ーマット>としても<サイズ>としてもその大きさを指
定することができる。 なお、イミディエートのオペランドでオペランド側にサ
イズ指定がなく、しかも命令機能の上でサイズの自由度
がある場合には、自動的に最小のサイズが選択されるも
のとする。 例: ADD:Q.W♯1,R0 リテラルのフォーマットを使用(2バイト) ADD:I.W♯1,R0 イミディエート形のフォーマットを使用(6バイト) ソースオペランド‘1'は32ビットで表現 ADD:L.W♯1,R0 短縮形のフォーマットを使用(6バイト) ソースオペランドとして32ビットイミディエートを指定 ADD:G.W♯1.B,R0 一般形のフォーマットを使用(6バイト) ソースオペランドとして8ビットイミディエートを指定 16ビットフィールドの下位8ビットを用いて‘1'を表
現。‘1'は32ビットに符号拡張される。 ADD:E.W♯1,R0 一般形8ビットイミディエートのフォーマットを使用
(4バイト)‘1'は32ビットに符号拡張される。 ADD:G.W♯1,R0 ♯1にはサイズの指定がなく、しかも:Gフォーマット
なのでサイズの自由度が残されている。したがって、自
動的に最小のサイズが選択され、 ADD:G♯1.B,R0.W(6バイト命令) と等価になる。 ADD:G♯1.W,R0.W(8バイト命令) になるのではない。 ADD:G.W♯1:16,R0 これは、<サイズ>ではなく<フォーマット>によって
命令を選択した例であり、 ADD:G.W♯1.H,R0 と等価になる。 総称ニモニックで単に ADD.W♯1,R0 と書くと、最もコードの短い ADD:Q.W♯1,R0 が選択される。 また、命令によっては、サイズが一つに固定されている
わけではないが、実質的にほとんど一つのサイズでのみ
使用されるものがある。そのようなものについては、特
にオペランド側に<サイズ>がついていない限り、命令
によって定められるデフォルトサイズを適用する。これ
は、<オペレーション>のニモニックが全体のオペラン
ドにかかるという原則に対しては、例外となる。 [例] ビット操作命令のアクセスサイズ(BB指定)は、8bit
(.B)がデフォルト.H,.Wは<<L2>>,.Lは<<LX>> 固定長ビットフィールド操作命令のレジスタサイズ(X
指定)は、32bit(.W)がデフォルト、 .H,.Bは使用不可、.Lは<<LX>> BTST.W R0,@addr=BTST R0.W,@addr.B A2-3−4−5.アブソリュート オペランド=mem[abs16] mem[abs32] mem[abs64] <オペランド値>::= @<絶対アドレス>[:<フォーマット>] <フォーマット>::=16||32||64 例: @abs:32 A2-3−4−6.PC相対間接 オペランド=mem[disp16+PC] mem[disp32+PC] <オペランド値>::= @([<ディスプレースメント>[:<フォーマット
>]],PC) <フォーマット>::=16||32 例: @(disp,PC) A2-3−4−7.スタックポップ オペランド=mem[SP++] <オペランド値>::= @SP+ 例: @SP+ A2-3−4−8.スタックプッシュ オペランド=mem[−−SP] <オペランド値>::= @−SP 例: @−SP A2-3−4−9.FP相対間接 オペランド=mem[disp4+FP] <オペランド値>::= @([<ディスプレースメント>[:<フォーマット
>]],<レジスタ番号>) <フォーマット>::=4 <レジスタ番号>::=FP||R14 例: @(disp4:4,FP) このアドレッシングモードでは、ビットパターン中に指
定されたdisp値を4倍して実際のディスプレースメント
とするが、アセンブラでの表記に使う値は、4倍した後
のものである。 <フォーマット>を指定しない場合には、アセンブラで
の表記がレジスタ相対間接のモードと同じになるため、
アセンブラによって最適なモードが選択される。つま
り、@(disp,Rn)と書かれたオペランドでは、RnがR14
またはFPであり、かつdispが−32〜31の4の倍数の時に
はFP相対間接のモードが選択され、それ以外の場合には
レジスタ相対間接のモードが選択されるわけである。 A2-3−4-10.SP相対間接 オペランド=mem[disp4+SP] <オペランド値>::= @([<ディスプレースメント>[:<フォーマット
>]],<レジスタ番号>) <フォーマット>::=4 <レジスタ番号>::=SP||R15 例: @(disp4:4,SP) このアドレッシングモードでは、ビットパターン中に指
定されたdisp値を4倍して実際のディスプレースメント
とするが、アセンブラでの表記に使う値は、4倍した後
のものである。 A2-3−5.付加モード 付加モードについても、機能面の要求を示す総称ニモニ
ックと、フォーマットやビットパターンを記号化したフ
ォーマット別ニモニックを設ける。 [総称ニモニックに関して] ・@または@(...)により間接参照を表わ
し、(...,...,...)によりアドレスの加算を表わすと
いう原則はそのままである。 ・表記の順序は、ベースモードまたはそれまでの付加モ
ードtmp値 ==>ディスプレースメント ==>インデクス を原則とする。こうすると、実効アドレス計算の流れが
左から右への単純な形になり、先の段の付加モードに必
要な情報が先の方に、後の段の付加モードに必要な情報
が後ろの方に集まる。すなわち、総称ニモニックの表記
の順序が、付加モードの機械語ビットパターンの順序と
同じになる。したがって、フォーマット別ニモニックや
実際の機械語の付加モードとの対応がよく、アセンブラ
も簡単になり、理解しやすくなる。 [フォーマット別ニモニックに関して] ・フォーマット指定用として、つぎの3つの文字を導入
することにより、機械語のビットパターンと1対1に対
応した表記ができるようにする。 :B その部分の処理をベースモードにより実現すること
を表わす :A その部分までの処理を一段の付加モードにより実現
することを表わす :N その部分の処理は次の段の付加モード(‘:A'の指
定のある部分)でまとめて実現することを表わす なお、「その部分の処理」とは、フォーマット指定文字
がディスプレースメントやレジスタに付いている場合に
はその値の加算処理を、フォーマット指定文字が閉じ括
弧‘)’についている場合は間接参照の処理を意味す
る。また、‘:A'で「その部分までの処理」とあるの
は、その‘:A'の部分の処理と、それより左側で‘:N'の
付いた部分(前の‘:A'または‘:B'との間で‘:N'の付
いた部分)の処理を合わせて行なうことを示す。 ・フォーマットをすべて指定した場合には、‘:A'の個
数が付加モードの段数になる。また、通常は一回の‘:
A'が一段の間接参照に対応する。ただし、複数のインデ
クスレジスタを加算する場合(間接参照がなくても‘:
A'が必要)、最後の段で二重間接を行なう場合(二段の
間接参照でも一回の‘:A'でよい)は例外である。 ・フォーマットの表記のない場合には、総称ニモニック
として表記した処理を実現できるような付加モードが自
動的に選択される。また、実際の付加モードでは実現で
きないフォーマットをフォーマット別ニモニックで指定
した場合は、エラーとなる。さらに、フォーマット指定
ニモニックからフォーマット指定文字を取り去ると、そ
のまま総称ニモニックになる。このような点は、フォー
マット別ニモニックの一般的な原則と同じである。 [フォーマット一般に関して] ・複数のアドレス加算がない場合、@(...)の括弧は
書かなくてもよい。よって、例えば付加モードで実現さ
れる3重間接参照の@(@(@(R1)))は@@@R1と
書いてもよい。これは、付加モード以外のアドレッシン
グにも適用される原則であり、一種のシンタックスシュ
ガーと言える。 ・インデクスのスケール値は、IEEEでは‘:B',‘:W'な
どサイズ指定文字を使用しているが、将来スケール値に
もっと大きな値を入れることも考えられるので、ここは
従来通りスケール値の数字を直接書くようにする。ま
た、スケーリングを指定する文字もIEEEの‘:'ではな
く、‘*’を使用する。これは、‘:'をフォーマット指
定の目的で別に使用しているためである。 例: @(offset,PC) mem[offset+PC] 総称ニモニック。offsetが32ビットに入ればPC相対間接
モードで実現し、32ビットに入らなければ付加モードで
実現する。 @(offset,PC):N mem[offset+PC] 必ずPC相対間接モードで実現し、付加モードにはしな
い。 本発明装置64で、offsetが32ビットに入らない時はエラ
ーとなる。 @(offset[:N],PC[:N]):A mem[offset+PC] 必ず付加モードで実現する。ベースモードの指定に相当
する部分がないので、 絶対付加モード +付加モード EI=10,disp=offset,index=PC,scale
=1になる。 @(PC[:B],offset[:N])[:A] mem[offset+PC] 必ず PC相対付加モード +付加モード EI=10,disp=offset,index=0,scale=
*で実現する。 @(@(@(R3[:B],base1[:N],R4*4[:N])[:
A],base2[:N],R5[*1][:N])[:N])[:A] mem[mem[mem[R3+base1+R4*4]+base2+R
5]] R3相対付加モード +付加モード EI=01,disp=base1,index=R4,scale=
4 +付加モード EI=11,disp=base2,index=R5,scale=
1 @(R3[:B],base1[:N],R4*4[:A],R5*2[:
N])[:A] mem[R3+base1+R4*4+R5*2] R3相対付加モード +付加モード EI=00,disp=base1,index=R4,scale=
4 +付加モード EI=10,disp=base2,index=R5,scale=
2 @(R3[:B],base1:A,R4*4:A):A mem[R3+base1+R4*4] R3相対付加モード +付加モード EI=00,disp=base1,index=0,scale=
* +付加モード EI=00,disp=0,index=R4,scale=4 +付加モード EI=10,disp=0,index=0,scale=* これは一段の付加モードで実現可能であるにもかかわら
ず、フォーマットを指定してわざわざ三段の付加モード
にしている例である。 付加モードのシンタックスを以下にまとめておく。ただ
し、括弧を省略する略記法、および各部分を区切るコン
マ‘,'についてのシンタックスは、ここには含めていな
い。 オペランド=mem[mem[...]+disp+Rn*Scale1+Rm
*Scale2...] <一般オペランド>::= <オペランド値>[:N][.<サイズ>] ||<付加モードオペランド値>[.<サイズ>] <付加モードオペランド値>::= @(<付加モード中間値>,[<disp値>[:N]],
[<インデクス値>[:N]])[:A] EI=10に対応 ||@(@(<付加モード中間値>,[<disp値>[:
N]],[<インデクス値>[:N]])[:N])[:A] E1=11に対応 これは付加モード最終段を表わす。 <付加モード中間値>::= <付加モード中間値>,<disp値>[:A] ||<付加モード中間値>,[<disp値>[:N]],<イ
ンデクス値>[:A] E1=00に対応 ||@(<付加モード中間値>,[<disp値>[:N]],
[<インデクス値>[:N]])[:A] E1=01に対応 これは途中にある一段の付加モードを表わす。 <付加モード中間値>::= [0[:B]]絶対付加モードに対応 || <レジスタ番号>[:B] レジスタ相対付加モード
に対応 || PC[:B] PC相対付加モードに対応 これはベースモード(レジスタ相対付加モード、PC相対
付加モード、絶対付加モードの区別)を表わす。 <disp値>::= <ディスプレースメント>[:<フォーマット>] D,ddddフィールドに対応 <フォーマット>::=4||16||32||64 <インデクス値>::= <レジスタ番号>[.<サイズ>][‘*’<スケー
ル値>] || PC[.<サイズ>][‘*’<スケール値>] S,M,Rx,XXフィールドに対応 <サイズ>::=W||L <スケール値>::=1||2||4||8 ‘*’は、アスタリスク‘*’を文字として使うことを
示す。「繰り返し」を表わすメタ的な意味はもたない。 <インデクス>の<サイズ>は、インデクスレジスタの
有効なデータサイズである。本発明装置64で‘.W'を指
定した場合には、レジスタの下位32ビットが64ビットに
符号拡張される。<インデクス>の<スケール>を省略
した場合には、1が仮定される。 A2-3−6.特殊オペランド 一般のアドレッシングモード以外の方法で指定されるオ
ペランド(特殊オペランド)に関しては、次のようなシ
ンタックスとする。なお、各部分を区切るコンマ‘,'に
ついてのシンタックスは、ここには含めていない。 reglist(LDM,STM,ENTER,EXITD命令) <レジスタ番号>または<レジスタ番号>−<レジスタ
番号>を‘,'で区切って並べ、‘(...)’でくくった
もの <特殊オペランド>::= ({<連続レジスタ番号>,}*) <連続レジスタ番号>::= <レジスタ番号> その番号のレジスタを指定 || <レジスタ番号>−<レジスタ番号> 間の番号のレジスタをすべて指定 例: ENTER.W♯10,( ) LDM.W @block,(SP) STM.W (R1,R3,R9-R13,FP),@−SP newpc(BRA,Bcc,BSR,ACB,SCB命令) アドレッシング方法は、PC相対モードのみである。 オペランドとしては、単にジャンプ先のラベルのみを書
く。 この場合は、アセンブラによって、その命令の先頭アド
レスとジャンプ先のアドレスとの差がnewpcのビットパ
ターンとして設定され、命令実行時にそのラベルの場所
へジャンプできるようになる。 <特殊オペランド>::= <行き先ラベル> 例: BEQ nextaddr nextaddrにジャンプ ACB.B ♯1,R1,@limit,loopaddr loopaddrにジャンプ BRA,Bcc,BSR,ACB,SCB命令は、出現頻度が高い、特殊な
アドレッシング(PC相対のみ)である、慣用的に行き先
のラベルをそのまま書ける方がよい、といった理由か
ら、<行き先ラベル>を書くだけで自動的に<行き先ラ
ベル>のアドレスと、これらの命令の置かれたアドレス
との差がディスプレースメントに設定されるようになっ
ている。すべてのオペランド表記のうちで、レジスタ以
外のシンボル名が先頭に‘♯’も‘@’もなく現われる
のは、この<行き先ラベル>に限られる。 したがって、例えば BRA label は JMP @(label−$,PC) と同じ意味を表わすことになる。なお、‘$’は、この
記号を含む命令(この場合はJMP命令)の先頭アドレス
を表わす。 adj(UNPKss命令) 頭に‘♯’を付ける。 <特殊オペランド>::= || ♯<補正値> 値がそのまま設定される 例: UNPKBW @src,@dest,♯H'23302330 vector(TRAPA命令) 頭に‘♯’を付ける。 <特殊オペランド>::= || ♯<ベクトル> 値がそのまま設定される 例: TRAPA ♯1 その他 ・ビットフィールド命令などのリテラル指定は、短縮形
のリテラル指定と同じように ♯<リテラル値> で表わす。 ・CHK,INDEX,ACB,SCBビットフィールド命令などのレジ
スタ指定は、一般のアドレッシングにおけるレジスタ直
接モードと同じように、 <レジスタ番号> で表わす。 A2-4.フォーマット別ニモニックと総称ニモニック 「総称ニモニック」と「フォーマット別ニモニック」
は、本発明装置アセンブラの特徴の一つである。従来の
プロセッサでも一部の命令について似たような考え方は
見られたが(68020のMOVとMOVQなど)、本発明装置では
両方のニモニックを完全に体系化し、オペレーションだ
けではなくオペランドの記述にも同じ考え方を取り入れ
た点に特色がある。 フォーマット別ニモニックと総称ニモニックの間には、
次のような関係がある。 ・インプリメントやフォーマットから来るいろいろな制
約をユーザに押し付けないのが総称ニモニックであり、
総称ニモニックを書く限りアセンブラが最適なコードを
選ぶ。同じ機能を持ち、同じようにフラグのセットされ
る命令は、できる限り一つの総称ニモニックに統合す
る。 ・フォーマット別ニモニックは、機械語のビットパター
ンと1対1に対応するものである。 フォーマット別ニモニックが変わっても、それはオブジ
ェクトサイズや実行サイクル数にのみ影響し、ユーザか
ら見た命令機能はフラグ変化まで含めて全く同じであ
る。この点でフォーマット指定子とサイズ指定子は根本
的に異なる。サイズ指定子の場合は、演算サイズが変わ
るとユーザから見た命令機能も変化する。条件ジャンプ
命令ではBRA label:32のようなフォーマット指定子を使
っているのに、加算命令の場合は、ADD src.B,dest.Wの
ようなサイズ指定子を使っているのは、このためであ
る。 ・通常ユーザが使うのは、「総称」の方である。「フォ
ーマット別」は、仕様書でのフォーマットの説明、逆ア
センブラなどの特殊な用途でしか使わない。したがっ
て、場合によっては多少冗長な感じになることもある
が、使用目的を考えると特に問題はない。ユーザが主に
使用するのは、あくまでも総称ニモニックである。ま
た、「総称」と「フォーマット別」は両極端の表記法に
過ぎず、一部のみフォーマットを指定する中間的な記法
も存在する。例えば、@(offset,PC)を付加モードで
書きたいが、付加モードの各段のフォーマットはどうで
もよいという場合には、 @(offset,PC):A と記述する。「フォーマット別」と言っても、どうして
もフォーマット指定の必要な部分のみ指定を行なえばよ
く、実際にはそれほど長い記述にはならないのが普通で
ある。 ・「フォーマット別」から「総称」への変換は、‘:X'
を取ることにより機械的にできるようになっている。ま
た、逆の変換も、フォーマットが許される範囲で適当に
‘:X'を付ければ済むようになっている。オペランドの
順序は変化しない。 フォーマット別ニモニックとして、記号を変えたり、順
序を変えたりする方法も考えられるが、そうすると総称
ニモニックとの関係がスムーズではなくなるため、その
ような方法はとっていない。(いろいろな場合分けが必
要になり、かえってわかりにくくなる。拡張性もよくな
い。) また、前述の@(offset,PC):Aのように、一部のフォ
ーマットのみ指定したい場合には、「フォーマット別」
か「総称」かの区別が統一的に行なえる方が望ましい。 ・結局、ユーザからの要求を受けるインタフェースが総
称ニモニックであり、機械語からくる制約を受けるイン
タフェースがフォーマット別ニモニックである。両者の
調整をとるのが、‘:X'のフォーマット指定文字および
アセンブラである。 ・フォーマット別ニモニックと総称ニモニックを併用す
ることの欠点は、アセンブラが複雑化することである。
しかし、ユーザがフォーマットのことまで心配するより
は、アセンブラで処理できることはアセンブラで処理す
る方がよいと考えており、そのためにアセンブラが多少
複雑になるのはやむを得ない。 ・機械はフラグ変化の異なる命令は、たとえ命令のビッ
トパターンが似ていたとしても別の総称ニモニックにな
る。 以上のような理由から、「フォーマット別」の方は、多
少記述が長くなっても、「フォーマット別ニモニックで
あること」や「どのフォーマットを使うかということ」
がはっきりわかるようにした方がよいと考えている。フ
ォーマットを表わす部分をすべて‘:X'に統一している
のは、このためである。 なお、シンタックス中で‘[...]’とある部分は省略
可能であるが、省略するかどうかが全体で統一されてい
る必要はない。例えば、ある‘[...]’を省略し、別
の‘[...]’を残してもよい。 A2-5.言語としてのアセンブラ これまでに述べたアセンブラ表記は、機械語のビットパ
ターンに命令としてのニモニックを与えるための表記法
であり、アセンブリ言語の核となる部分である。本発明
装置では、ここまでを<<L0>>仕様とする。 しかし、アセンブラを一つの言語として見た場合には、
ニモニック以外にも次のような項目を規定する必要があ
る。これらの項目については、本発明装置のアーキテク
チャと矛盾を起こさない範囲で、できるだけIEEEに合わ
せるように標準化する。 ・大文字と小文字の使用をどうするか ・シンボルの文字数は何文字までにするか ・シンボルに式が書けるかどうか、シンタックスはどう
なるか ・ラベルの形式はどうするか(ラベルの後に‘:'をつけ
るかどうか) ・2進数、8進数、10進数、16進数の表記法はどうする
か ・コメントの表記法はどうするか ・ストリングの記述形式 ・特殊キャラクタ(改行文字‘¥n'など)の表現形式 ・細かいシンタックスや使用できる文字 ・アセンブラ擬似命令 ・マクロ このうち、2進数、8進数、10進数、16進数の表記法に
ついては、IEEEでは以下のような形式になっている。 B′〜 2進数 例:B′00010010=H′12 Q′〜 8進数 例:Q′22=H′12 D′〜 10進数 例:D′18=H′12 H′〜 16進数 本仕様書でも、16進数を表わすために“H"〜”を、2進
数を表わすために“B"〜”を使用している。 A2-5−1.大文字と小文字について IEEEでは特に決まっていない。本発明装置では、ニモニ
ックや予約名に対しては、大文字と小文字を同等に扱
う。すなわち、この資料で大文字になっている部分に対
して、小文字を使用しても構わない。ただしユーザが定
義した一般の変数においては、大文字と小文字を区別す
る方を標準とする。 A2-5−2.シンボル値 <ディスプレースメント>、<リテラル値>、<イミデ
ィエート値>、<絶対アドレス>などの項目(総称して
<シンボル値>と呼ぶ)には、定数、ラベルを含む四則
演算式が書けるものとする。式の中では、優先順位を変
えるために‘(...)’を使用することができる。ただ
し、未確定の値(外部名や後で定義されるラベルなど)
を含む式に関しては、正しいリロケーションができるよ
うに、演算式の形を制限しても構わない。 さらに、式の中では現在注目している命令のアドレスを
示す値として、‘$’を使用することができる。 PC相対間接モードの表記は @(disp,PC) であり、dispの値が直接ディスプレースメントに設定さ
れる。しかし、PC相対でリロケータブルなプログラムを
書く場合には、オペランドのアドレスそのものをdispと
して設定するのではなく、オペランドのアドレスとこの
命令のあるアドレスとの差をdisp値として設定する必要
がある。この目的で‘$’を使用することができる。す
なわち、(オペランド−$)をdisp値として設定すれば
よい。 ‘$’を使ったプログラム例 <<アドレス>> H′00FE ... H′0100 MOV.B ♯1,@(loc−$:16,PC) H′0104 MOV.B ♯2,@(8:16,PC) H′0108 ... H′010C ... ... H′0180 loc: ... アドレスH′0100のMOV.B命令の第二オペランド@(loc
−$:16,PC)では、実際のdispのビットパターンに設定
される値がH′0180-H′0100=H′0080となる。この命
令により、アドレスH′0180のlocに1がセットされ
る。一方、H′0104のMOV.B命令では、アドレスH′010
4+8=H′010Cに2がセットされる。 付加モードと’$’を使ったオペランドの表記 @(@([0:B,]label1−$[:N],PC[:N])[:A],
label2−$[:N],PC[:N])[:A] これは mem[mem[disp1+PC]+disp2+PC] を表わす。 ただし、 disp1はlabel1の指すアドレスと現在アドレスとの差 disp2はlabel2の指すアドレスと現在アドレスとの差 であり付加モードの拡張部は 絶対付加モード +付加モード EI=01,disp=disp1,index=PC,scale=
1 +付加モード EI=10,disp=disp2,index=PC,scale=
1 という構成になる。 このモードは、リロケータブルなテーブル(case文用の
ジャンプテーブルなど)をプログラム領域に置く場合に
使用できる。 一段目のPC相対間接 mem[disp1+PC] は、case文用のテーブル参照をリロケータブルにするた
めに用いられる。また、二段目のPC相対間接 mem[mem[...]+disp2+PC] は、ジャンプ先アドレスの決定をリロケータブルに行な
うために用いられる。 付録3.本発明装置メモリ管理方式概要 本発明装置を組み込み用などの用途に用いることを考
えると、命令セットは本発明装置になっているが、メモ
リ管理のハードウエア(MMU)は持たないといったバー
ジョンのチップも考えられる。 したがって、本発明装置のメモリ管理機構は、必ずサ
ポートの必要な<<LO>>仕様ではなく、標準的な仕様
の掲示のみを行なう<<LA>>仕様となっている。以下
では、<<LA>>仕様としての本発明装置標準メモリ管
理方式を説明する。 A3-1.メモリ管理方式の選択と<<LIR>>仕様 本発明装置では、ハードウエアによるアドレス変換と
メモリ管理方式(以下MMUと呼ぶ)の標準仕様が、<<L
A>>仕様として用意されている。しかし、本発明装置
にITRONやμBTRONを実装するような場合には、MMUが不
要となることが多い。また、MMUを使用する用途であっ
ても、ページテーブルなどMMU関係の実行環境の設定が
終わるまでは、アドレス変換なしで命令を実行する必要
がある。 そこで、本発明装置では、MMU機構を使用しているか
どうか、アドレス変換を行なっているかどうか、を示す
フィールドをPSW内に設け、このフィールドを書き変え
ることにより、アドレス変換やメモリ保護の有無を指定
できるようにしている。このフィールドをAT(Address
Translation)フィールドと呼ぶ。ATはPSSのbit6〜bit7
に配置されている。ATをPSW内に設けたことにより、LDC
TX等によるコンテキストスイッチや、EIT処理の起動、R
EIT命令によるタクサ処理ハンドラからのリターンの際
にも、アドレス変換の有無を切り換えることが可能であ
る。 ATフィールドの意味を以下に示す。 このうち、<<LA>>仕様の標準メモリ管理を実装し
た本発明装置ではAT=00,01が利用可能、<<L1R>>本
発明装置ではAT=00,10が利用可能となる。 <<L1R>>仕様のAT=10の場合、MMUがないのでページ
毎のメモリ保護は行なえないが、<<LA>>の4リング
を縮退してリング0、リング3のみを有効とし、アドレ
スによって簡単なメモリ保護を行なう。アドレスのMSB
=1の領域(<<LA>>でいうSR)はリング0からアク
セス可能、リング3からアクセス禁止の領域であり、通
常はここにOSを置く。一方、アドレスのMSB=0の領域
(<<LA>>でいうUR)はリング0からもリング3から
もアクセス可能な領域であり、通常はここにユーザプロ
グラムを置く。MMUがないのでユーザプログラム間のメ
モリ保護はできないが、ユーザプログラムからOSを保護
することは可能である。 AT=00(アドレス変換なし)の場合は、メモリアクセ
スに対するリング保護のチエックは行なわれない。 したがって、ページ不在例外(POE)、アドレス変換
例外(ATRE)は発生しない。 ただし、AT=00の場合も特権命令のチエックは行なわ
れる。 AT=00の時の動作については、<<L1>>と<<L1R
>>で全く同じになることが望ましい。しかし、LDATE
などの命令では、<<L1>>ならばMMU環境の設定とい
う意味で実用的な命令であるのに対して、<<L1R>>
では全く意味を持たない。また、PTLBなどの命令も<<
L1>>のAT=00ならば一応意味を持っているが、<<L1
R>>ではTLBそのものがないので全く意味を持たない。
したがって、<<L1R>>仕様ではこういったMMU関係の
命令を実装しないことにする。<<L1R>>でこういっ
た命令を実行しようとした場合は、ATの値にかかわらず
予約命令例外(RIE)となる。 A3-2.本発明装置のメモリ管理方式 本発明装置は<<L1R>>仕様のチップである。 本発明装置のATフィールドの意味を第292図に示す。 A3-3.本発明装置のI/O空間アクセスに関して IOMASK,IOADDRで示されるI/O空間に対する命令フェッ
チ及びメモリ間接アドレッシング・モードによるオペラ
ンドフェッチはアドレス変換例外となる。 I/O空間に対するアクセスで、メモリ間接アドレッシ
ングの場合はアクセス動作は一切行なわれない。しか
し、命令フェッチの場合にはアクセス動作が行なわれ
る。そのため、外部のI/Oデバイスはバスアクセスタイ
プ(BAT)信号をみて命令フェッチであれば応答しない
ようにする必要がある。I/O空間は通常リング0の領域
におかれるためリング3からのアクセスはリング保護違
反が検出されることになると考える。リング保護違反の
場合は高速に検出可能なためメモリアクセスは行なわれ
ない。 また、I/O空間とI/Oでない空間をまたぐようなアクセ
スが行われた場合、アドレス変換例外を起こすが、その
場合の再実行動作を保証できない。 A3-4.メモリ管理の目的と概要 本発明装置では、以下のような目的を達成するため
に、ハードウエアによるメモリ管理機構(MMU)を導入
している。 ・命令再実行と仮想記憶方式のサポートにより、実装さ
れている物理メモリの量を越える大きさの論理空間を提
供する。 ・多重論理空間の機能の導入により、コンテキスト(タ
スクやプロセス)間の独立性を維持し、プログラムを作
りやすくする。 ・リング保護の機能の導入により、OSや共有データとユ
ーザプログラムやユーザデータとの間でメモリ保護を行
なう。 本発明装置では、以上のような機能を提供するため
に、毎回のメモリアクセスでページング方式によるアド
レス変換を行なう。アドレス変換前のアドレス(論理ア
ドレス)の作る空間を、Logical Spaceの意味でLSと予
備、アドレス変換後のアドレス(物理アドレス)の作る
空間を、Physical Spaceの意味でPSと呼ぶ。 ページングの場合には、メモリアクセスを高速化する
ために、TLB(Translation Lookaside Buffer)と呼ば
れるアドレス変換対の記憶バッファを導入することが一
般的である。しかし、TLBはメモリアクセスを高速化す
るためのインプリメント上の手段と考えられるため、本
発明装置のMMU仕様としてはTLBに関する規定は行なわな
い。本資料でも、TLBに関する説明は行なっていない。 また、コンテキストの切り換えによるTLBのパージを
減らすため、<<L2>>として論理空間識別子(LSID)
の機能を導入することができる。LSIDは、コンテキスト
毎にユニークに与えられた番号であり、LSIDまで含めて
TLBの論理アドレス比較を行なうようにすれば、コンテ
キストを切り換える際にもすべてのTLBをパージする必
要がなくなる。しかし、LSIDの機能についてもインプリ
メント依存性が強いため、本発明装置のMMU仕様として
は、LSIDの詳細機能やビット数の規定を行なっていな
い。本発明装置の仕様では、LSIDを示す制御レジスタの
アドレス割り当てと、LSIDを実装した場合のTLBやキャ
ッシュの整合性確保に関する説明のみが行なわれてい
る。 A3-4-1.ページング 本発明装置のアドレス変換は、ページングを基本とし
ている。ページサイズは4KBとして本発明装置全体で統
一されている。これによって、TLBの構造などをある程
度限定することができ、メモリ管理機構を内蔵できるチ
ャンスが大きくなる。また、基本的なパラメータを固定
化すれば、それにチューニングすることで性能向上が期
待できる。 アドレス変換に際し、本発明装置32の論理アドレスは
第293図のように分割され、これによって2段階のペー
ジングを行なう。 32ビットの論理アドレスは、4GBの論理空間を作る。
Rビット(論理アドレスのMSB)により、4GBの論理空間
は2GBのUnshared Region(UR)とShared Region(SR)
に分かれる。おのおののRegionは、SXフィールドにより
4MBずつのSectionに分かれる。さらに、おのおののSect
ionは、PXフィールドによりRKBずつのPageに分かれる。 したがって、2段階のページングのうち上位段のペー
ジテーブルは、SXをインデクスとして、下位段のページ
テーブルのベースアドレスを引き出すものとなる。これ
をSection Table(ST)と呼び、その一つのテーブルエ
ントリをそのエントリをSTEと呼ぶ。また、2段階のペ
ージングのうち下位段のページテーブルは、PXをインデ
クスとして、物理ページのベースアドレスを引き出すも
のとなる。これをPage Table(PT)と呼び、その一つの
テーブルエントリをそのエントリをPTEと呼ぶ。一つのS
TEの変更により一つのSectionが、一つのPTEの変更によ
り一つのPageが影響を受けることになる。 PTE,STEの総称名としてATE(Address Translaton tab
le Entry)という名称を用いる。 STのベースアドレスは、URの場合UATB、SRの場合SATB
という制御レジスタによって示される。UATBまたはSATB
の変更により、一つのRegion(UR又はSR)が影響を受け
る。以上述べた関係をまとめたものを第294図に示す。 A3-4-2.多重論理空間 本発明装置では、論理アドレスのMSBによって、共通
空間(Shared Region)と個別空間(Unshared Region)
が区別されている。それぞれのRegionに対して、アドレ
ス変換のテーブルベースレジスタUATB,SATBが存在する
が、このうちUATBのみはコンテキスト毎に切り換わるよ
うになっており、これによって多重論理空間を実現す
る。 すなわち、UR(論理アドレスH′00000000〜H′7fff
ffff)ではコンテキスト毎に別々の物理空間(物理メモ
リ)が割り当てられるのに対して、SR(論理アドレス
H′80000000〜H′ffffffff)ではコンテキスト間で共
通の物理空間(物理メモリ)が割り当てられる。Shared
Regionは主に割り込み処理ハンドラやOSが使用し、Uns
hared Regionは主にユーザプログラムが使用するもので
あるが、ユーザデータでもタスクやプロセス間で共用す
るものはSRを使用する場合があるし、OSの管理するデー
タでもタスクやプロセス毎に持つ必要のあるものはURを
使用する場合がある。 多重論理空間の機能を利用すれば、同一の論理アドレ
スから複数のプログラムを同時に実行することができる
ので、実行時にオブジェクトコードのリロケーションを
する必要がなくなる。また、他のタスクやプロセスのUR
を直接参照することはできないので、プログラム間のメ
モリ保護にも役立つ。 なお、UR,SRの区別と後述のメモリのリング保護の機
能とは、直接の関連はない。すなわち、ring3からSRを
参照できないとか、PCがURにある間はSRを参照できない
とかといった制限は、UR,SR自体の機能には含まれてい
ない。このようなメモリのアクセス制限を行ないたい場
合には、メモリのリング保護の機能を利用し、STE,PTE
に適当な保護コードを設定しておかなければならない。 〔多重論理空間の構成〕 第295図において ・Unshared Region/Shared Regionの切り替えは、論理
アドレスのMSBによって行なわれる。 ・Unshared Regionでは、UATBレジスタによってアドレ
ス変換される。 ・Shared Regionでは、SATBレジスタによってアドレス
変換される。 ・UATBレジスタのみコンテキスト毎に切り換わるため、
Unshared Regionでは、それぞれのコンテキストが別々
の論理空間を持つことができる。アドレス変換が2段の
ページングとなっているため、異なるコンテキストの2
つのSTEが同一のPage Tableを指すことにより、URの中
での共用セクション、共有ページを設けることもでき
る。 なお、URとSRの境界にまたがるようなプログラムやデ
ータについては、以下のように考える。 ・64ビット拡張時には、現在連続しているURとSRの境界
が不連続になるため、H′7fffffffから先に伸びている
プログラムは、64ビット拡張時に使用できなくなる。こ
れは、本発明装置32で、H′7fffffffの次のアドレスを
H′00000000と考えてもH′80000000と考えても同じで
ある。 したがって、URとSRの両方にまたがるようなメモリア
クセスや、UR〜SRで連続するような命令のフェッチを行
なうべきではない。 ・しかしながら、URとSRにまたがっているか同化のチエ
ックを毎回行なうのは、インプリメント上の負担が大き
いため、URとSRの両方にまたがるアクセスがあったとし
てもEITとはしない。この場合、Regionとは関係なく、
アドレスがリニアアドレスであるという考え方を生か
し、H′7fffffffの次はH′80000000、H′ffffffffの
次はH′00000000のアドレスをアクセスするものとす
る。ただし、前項でも述べたように、この仕様を利用す
るようなプログラムを書くべきではない。 PSW,UATB,SATBに対するLDC命令や、LDATE,LDCTX命令
による論理空間の切り換えでは、現在実行中のプログラ
ム領域のアドレス変換に対しても影響を与えることがで
きる。したがって、使い方によっては次の命令から全く
別の場所に飛んでしまうというケースも生じる。これは
プログラムの責任で処理しなければならない。具体的に
は、ATビットの変更を行なう場合はV=R領域を利用し
たり、LDCTXを実行する場合はSR(Shared Region)を利
用したりすることになる。 A3-4-3.リング保護 本発明装置のメモリ保護方式は、4レベルのリング保
護である。保護情報は、論理アドレスやUR,SRの区別に
は関係なくページ毎に指定することができる。 リング保護では、PSW中に示される現在リング番号(R
NG)と、アクセスすべき論理アドレスのSTE,PTEに含ま
れている保護コードとの関係によって、アクセスが可能
かどうかが決まる。RNGが小さい値であるほど、すなわ
ち内側のリングであるほど強いアクセス権を持ってお
り、RNG=3が最もアクセス権が弱い。rng1<rng2とし
た場合、RNG=rng2でアクセスできるページは必ずRNG=
rng1でもアクセスできることになる。 A3-5.MMU関係制御レジスタ MMUに関係する制御れしについて説明する。 ・PSW 別項参照。 MMUに関連するのは、RNG,ATのフィールドである。 ・LSID 別項参照。 このレジスタの有無と有効なビット数は、インプリメン
トに依存する。 ・UATB(Unshared region Address Translation table
Base) 第296図に示す。 ・SATB(Shared region Address Translation table Ba
se) 第297図に示す。 STB:Section Table Base Section Tableの物理ベースアドレス =:‘0'にreserved ユーザ向けのマニュアルでは、‘0'を書き込みように指
導しておく。ただし、‘1'を書き込んでも無視される。 読みだし時は値不定である。 D:Direction Section Tableのサイズが小さい場合のSection Tableの
方向 D=D Section Tableの下位アドレス側が有効 D=1 Section Tableの上位アドレス側が有効 DとLLのフィールドは、小規模な用途で、有効な論理ア
ドレスの範囲を制限し、同時にSection Tableのサイズ
を縮小するために使用するものである。 LL:Length Section Tableのサイズ LL=00 1/2サイズ 512エントリ 2K Bテーブル 2G B
Region LL=01 1/4サイズ 256エントリ 1K Bテーブル 1G B
Region LL=10 1/16サイズ 64エントリ 256Bテーブル 256M
B Region LL=11 1/64サイズ 16エントリ 64Bテーブル 64MB
Region PI:Page In PI=0 Section Tableが物理アドレスに存在しない。 この場合には、STBはハードウエア的な意味を持たない
ので、OSで自由に使用することができる。ただし、PI=
0でも、D,LLのフィールドは有効である。D,LLのふい
は、アドレス変換例外(ATRE)の未使用領域参照エラー
か、ページ不在例外(POE)かを区別するために使用さ
れ、例外の検出は前者が優先される。 つまり、PI=0の時にこのレジスタを使ってアドレス変
換を行おうとした場合、D,LLのフィールドにより未使用
領域参照エラーが検出されればアドレス変換例外(ATR
E)が発生し、そうでなければページ不在例外(POE)が
発生する。 PI=1 Section Tableが物理アドレス上に存在する。 PI=1であれば、このレジスタを使ってアドレス変換を
行なうことが可能である。ただし、D,LLのフィールドに
より未使用領域参照エラーが検出された場合には、アド
レス変換例外(ATRE)が発生する。 SATB,UATB中のPIビットは、正確にはPage Inではなく
Section Table Inの意味を表わす。また、後述するSTE
中のPIビットは、Page InではなくPage Table Inの意味
を表わす。しかし、あえて区別する必要もないと思われ
るので、いずれも同じ‘PI'という名称を使用する。広
義の「ページ」は、「ページテーブル」や「セクション
テーブル」、つまりディスクへの追い出しの単位となる
ものをすべて含むことになり、ページテーブルやセクシ
ョンテーブルの不在にも「ページ不在例外」という例外
の名称をそのまま適用する。 Section Table,Page Table自体をページアウトするこ
とも可能であるが、ページインされているテーブルにつ
いては、テーブルのベースアドレス(STB,PTB)は物理
アドレスを表わすものとする。すなわち、ページテーブ
ルは論理空間ではなく物理空間に置かれていると考える
ことができる。また、Section TableやPage Tableが4K
のフルサイズでない場合にST,PTのページアウトを許す
と、64B,256B,1KB,2KB単位でページ不在となるケースも
生じる。つまり、UATB,SATB,STEでのPIビットは、必ず
しも4K単位でのページ不在を指すとは限らないので、注
意する必要がある。 セクションテーブル、ページテーブルの大きさが可変
になっているが、テーブルが最小(1/64)の大きさでな
い時には、STBとSXの有効なビットに重なりが生じる。
例えば、UATB,SATBでD=0,LL=00とした場合、以下の
ような計算によりSTEの実効アドレスを算出する必要が
ある。 Xは有効なビット(0/1) ‐は無効なビット(0) ‘>>’はシフトを表わす ここで、‘X'の重なっているビット、すなわちSTBの2
^6〜2^11のビットの扱いが問題となる。以下のような案
が考えられる。 STBの2^6〜2^11のビットは‘0'でなければならないも
のとする。インプリメント上は、STBの2^7〜2^31とSXを
20ビット右にシフトしたものとを連結することによっ
て、STEのアドレスを算出することができる。 (アライメント強制) STBの2^6〜2^11のビットが0でなくてもよいが、2^11
までの範囲でSTEの実効アドレスがラップアラウンドす
る。インプリメント上は、重なりのある5ビットのみの
加算を行ない、加算により生じた桁上がりは無視するこ
とになる。(ラップアラウンド) STBの2^6〜2^11のビットが0でなくてもよく、Sectio
n Tableに対して2^6より上位のアラインメントは全く強
制しない。インプリメント上は、まず重なりのある5ビ
ットの加算を行ない、桁上がりを生じた場合には最上位
桁まで桁上がりを伝搬させる必要がある。つまり、2^6
より上位のビットについてすべて加算を行なう必要があ
る。(アライメント自由) 現在が本発明装置の仕様となっている。LL=01,10
の場合、またPTBとPXのアライメントの場合も同じよう
にの仕様とする。 DとLLの機能は、小規模な用途でSection Tableの領
域を節約するために設けられているものである。DとLL
の指定が変わると、Section Tableが小さくなるため、S
Xの取り得る値に制限ができる。D,LLのそれぞれの値に
対して、許されているSXの値は第298図のようになる。 D=1,LL=00のreservedの部分は、ソフトウェアで使用
してはいけない。マニュアルにもreservedであることを
明記する必要がある。ただし、この値を実際にUATBやST
ABに設定した場合は、D=0,LL=00と同じ動作をする。
つまり、LL=00の場合にはDは無視される。 論理アドレスとして、上の表に当てはまらない値を指定
した場合には、アドレス変更例外(ATRE)の未使用領域
参照エラーが発生する。ページ不在例外(POE)とアド
レス変更例外(ATRE)が同時に発生した場合には、アド
レス変更例外(ATRE)が優先される。例えば、UATBのD
=0,LL=10,PI=0で論理アドレスH′40000000をアク
セスした場合には、POEではなくATREとなる。 DとLLの指定によるテーブル領域の節約のようすを図示
すると、第299図のようになる。 この時、使用する論理アドレスの範囲が狭いため、はじ
めの数個のSTEのみが利用できれば済むというの例で
あれば、第300図のようにすることによって、section t
ableの大きさを節約することができる。 又、スタック領域やOS用の領域などで、終わりの数個の
STEのみが利用できれば済むというの例であれば、第3
01図のようにすることによって、section tableの大き
さを節約することができる。 ※D=1の場合、STBはsection tableの有効部分の先頭
アドレス(SXとしては途中の値に対応する)を指すので
はなく、SX=0に対応するSTE(実際には存在しない)
の置かれるべきアドレスを指す。STE中のPTBの場合も同
様である。 A3-6.STEとPTE STEとPTEは、メモリ上に置かれるアドレスの変換用のデ
ィスクリプタである。STEとPTEのフォマットについて説
明する。 ・STE(Section Table Entry)第302図に示す。 PTB:Page Table Base Page Tableの物理ベースアドレス W:Write可能 W=1 書き込みのアクセス権はPTEの保護コードに従
う W=0 PTEの保護コードにかかわらず、全リングから
書き込み禁止 違反した場合はアドレス変換例外(ATRE)のリング保護
違反エラーが発生 E:Execute可能 E=1 実行のアクセス権はPTEの保護コードに関わら
ず、全リングから実行禁止 違反した場合はアドレス変換例外(ATRE)のリング保護
違反エラーが発生 D:Direction Page Tableのサイズの小さい場合のPage Tableの方向 D=0 Page Tableの下位アドレス側が有効 D=1 Page Tableの上位アドレス側が有効 LL:Length Page Tableのサイズ LL=00 フルサイズ 1024エントリ 4K Bテーブル 4M
B Section LL=01 1/4サイズ 256エントリ 1K Bテーブル 1M B
Region LL=10 1/16サイズ 64エントリ 256Bテーブル 256K
B Region LL=11 1/64サイズ 16エントリ 64Bテーブル 64KB
Region PI:Page In PI=0 Page Tableが物理アドレス上に存在しない。 この場合には、PTBはハードウエア的な意味を持たない
ので、OSに自由に使用することができる。ただし、PI=
0でもD,LLのフィールドは有効である。D,LLのフィール
ドは、アドレス変換例外(ATRE)の未使用領域参照エラ
ーやリング保護違反エラーか、ページ不在例外(POE)
かを区別するために利用され、例外の検出は前者が優先
される。 つまり、PI=0の時にこのSTEを使ってアドレス変換を
行なおうとした場合、D,LLのフィールドにより未使用領
域参照エラーやリング保護違反エラーが検出されればア
ドレス変換例外(ATRE)が発生し、そうでなければペー
ジ不在例外(POE)が発生する。 PI=1 Page Tableが物理アドレス上に存在する。 PI=1であれば、このSTEを使ってアドレス変換を行な
うことが可能である。ただし、D,LLのフィールドにより
未使用用領域参照エラーやリング保護違反エラーが検出
された場合には、アドレス変換例外(ATRE)が発生す
る。 STBとSXの時と同様に、PTBとPXの場合にも、PTBのアラ
インメントは自由とする。すなわち、LL≠11の時には、
PTBとPXの有効なビットに重なりの生じる場合がある
が、重なった部分のアドレスについては最上位桁まで加
算を行なう。DとLLの機能は、小規模な用途でPage Tab
leの領域を節約するために設けられているものである。
DとLLの指定が変わると、Page Tableが小さくなるた
め、PXの取り得る値に制限ができる。D,LLのそれぞれの
値に対して、許されているPXの値は第303図のようにな
る。 論理アドレスとして、上に当てはまらない値を指定した
場合には、アドレス変換例外(ATRE)の未使用領域参照
エラーが発生する。 D=1,LL=00の部分に対しては、W,Eが特別な意味を持
つ。D=1,LL=00のSTEを使ってメモリアクセスを行な
おうとした場合には、次のような動作をする。この時、
SXの値は関係しない。また、PTBのフィールドとEビッ
トは、ハードウェアで使用しないので、OSから自由に利
用することができる。 第304図において ‘*’はソフトウエアで自由に使用してよいビットであ
る。ハードウエア的にはこのビットが無視される。 このビットは、reservedを示す‘=’とは異なり、将来
の使用拡張でも使用しないことがはっきりしているビッ
トである。‘=’と‘*’は、現在の使用におけるハー
ドウエア的な動作は同じであるが、将来の拡張のために
仕様書上きの扱いが異なっている。 なお、未使用領域参照エラーと予約ATEエラーの区別
は、アドレス変換例外(ATRE)が起動された際にスタッ
クに積まれるエラーコードによって行われる。これらの
エラーによるアドレス変換例外の起動は、STE,PTEの値
を設定した時に検出されるのではなく、値を使用する時
(アドレス変換の時、つまりメモレアクセスを行った
時)に検出される。 D=1,LL=00,W=0の機能は、一つのSection全体を未
使用領域としたい場合に利用する機能である。この場
合、このSTEに対するPage Tableは無い。 LL≠00の機能を利用して小さいサイズのSection Table,
Page Tableを使用する場合でも、論理アドレス中のSX,P
Xの位置は変わらない。したがって、複数のSTEから小さ
いサイズのPage Tableを使用する場合には、有効な論理
アドレスが飛び飛びの値をとることになる。この様子を
第305図に示す。 このように、小さいサイズのPage Tableを使った場合に
は、有効な論理アドレスが連続領域とはならないことが
ある。しかし、STEを1エントリしか使用しないような
小規模な応用のため、あるいは、長さが半端になった論
理空間の最後の部分のテーブルについて、「テーブル領
域の節約」を行なうためにLL≠00の機能が容易されてい
るのだと考えると、LL≠00の時にアドレスが連続しなく
ても、特に問題はない。 STEでは、D,LLによるアドレス変換例外(ATRE)の未使
用領域参照エラー、W=0,E=0によるアドレス変換例
外(ATRE)のリング保護違反エラー、PI=0によるペー
ジ不在例外(POE)が同時に発生する可能性があるが、
例外の検出順序はこの順とする。つまり、まず未使用領
域かどうかのチェックを行ない、次にアクセス権のチェ
ックを行ない、最後にページ不在のチェックを行なう。
これは、PTEの場合も同様である。したがって、ページ
不在の時でも、リング保護関係の情報は有効である。 ただし、この例外検出順序は、一つの段(STEまたはPT
E)の中での例外検出順序であり、これよりもさらにテ
ーブルを引く順序が優先する。つまり、,さたで発生す
る例外よりもSTEで発生する例外の方が優先される。 ・PTE(Page Table Entry)第306図に示す。 PFN:Page Frame Number 対応するページの先頭物理アドレス4KBが単位になる。 **:OSが自由に利用できるビット ハードウエア的には意味を持たない R:Referenced このページが参照されたとき、1にセットされる。 M:Modified このページの一部が変更されたとき、1にセットされ
る。 RL:Read Level RL=00 リング0のみから読みだし可能 RL=01 リング0〜1から読みだし可能 RL=10 リング0〜2から読みだし可能 RL=11 リング0〜3から読みだし可能 違反した場合はアドレス変換例外(ATRE)のリング保護
違反エラーを発生 T:Type T=00 書き込み禁止、実行禁止 T=01 書き込み禁止、実行可能 T=10 書き込み可能、実行禁止 T=11 書き込み可能、実行可能 「書き込み可能」の場合は、min(RL,AL)のリングから
書き込み可能、それより外側からは書き込み禁止とな
る。 「実行可能」の場合は、max(RL,AL)のリングから実行
可能、それより外側からは実行禁止となる。 違反した場合はアドレス変換例外(ATRE)のリング保護
違反エラーを発生 AL:Access Level for indicated type(T≠00の場合) AL=00 リング0のみからアクセス(書き込み、実行)
可能 AL=01 リング0〜1からアクセス(書き込み、実行)
可能 AL=10 リング0〜2からアクセス(書き込み、実行)
可能 AL=11 リング0〜3からアクセス(書き込み、実行)
可能 (T=00の場合) AL=00 リング0〜RLから読みだし可能 書き込み、実行は禁止(T,RLの本来の意味で使用) AL=01 アドレス変換例外(ATRE)の未使用領域参照エ
ラーを発生 AL=10 (reserved) AL=11 (reserved) T=00の場合は、ALによるアクセス可能リングの指定が
必要ないので、ALを別の意味に使っている。このうち、
AL=01の指定による未使用領域参照エラー発生の機能
は、一つのPage全体を未使用領域としたい場合に利用す
る機能である。この場合、このPTEに対する物理ページ
は存在しない。 NC:Non Cachable NC=1 キャッシュへの取り込みの禁止を指定 I/0レジスタやVRAMの領域などで、キャッシュへの取り
込みやメモリアクセスの順序の変更が許されないページ
の場合に、このビットをセットする。 NC=0 通常のページであるたとを指定 PI:Page In PI=0 Pageが物理アドレス上に存在しない。 この場合には、PFNはハードウエア的な意味を持たない
ので、OSに自由に使用することができる。ただし、PI=
0でもRL,T,ALなどのフィールドは有効である。これら
のフィールドは、アドレス変換例外(ATRE)の未使用領
域参照エラーやリング保護違反エラーか、ページ不在例
外(POE)かを区別するために利用され、例外の検出は
前者が優先される。 つまり、PI=0の時にこのPTEを使ってアドレス変換を
行おうとした場合、RL,T,ALなどのフィールドにより未
使用領域参照エラーやリング保護違反エラーが検出され
ればアドレス変換例外(ATRE)が発生し、そうでなけれ
ばページ不在例外(POE)が発生する。 PI=1 Page Tが物理アドレス上に存在する。 PI=1であれば、このPTEを使ってアドレス変換を行な
うことが可能である。 ただし、RL,T,ALなどのフィールドにより未使用領域参
照エラーやリング保護違反エラーが検出された場合に
は、アドレス変換例外(ATRE)が発生する。 PFNと論理アドレスのoffsetの間では、有効なビットが
重なり合うことはないため、アライメントの問題は発生
しない。 PTEのRL,T,ALの値と、実際にそれをアクセス可能なリン
グとの関係は、具体的には第307図のようになる。 図において ・ROはring0からのアクセス権、R1はring1からのアクセ
ス権を示す。ring0〜ring3の区別はPSW中のRNGフィール
ドで示される。 ・Rは読みだし可能、Wは書き込み可能、Eは実行可能
を示す。 T=00,AL≠00の場合、ALが特別な意味を持ち、第308図
のような動作をする。この時、offsetの値は関係しな
い。このうち、T=00,AL=01の場合には、ハードウエ
アで使用しないPTBのフィールドとRLフィールドを、OS
から自由に利用することができる。 T=01を指定すると、読みだしはできないが実行は可能
であるというページを作ることができる。これは、プロ
グラムのコピーを禁止し、プログラムの実行に対する課
金メカニズムを導入することを意図したものである。 一方、T=00,T=10を指定すると、読みだしや書き込み
は可能であるが、実行は禁止であるというページを作る
ことができる。この機能を利用すれば、プログラムカウ
ンタがデータ領域に飛び込んで来た場合に、それをチェ
ックしてプログラムの暴走を阻止することができる。実
行を禁止する機能は、メモリのデータ保護のための機能
というよりも、デバックのための機能と考えることがで
きる。 書き込みが可能である場合には、からなず読みだしも可
能になっている。 A3-7.64ビットへの拡張性 SR/URの切り換えビットを論理アドレスのMSBに固定する
と、64bitへの拡張時に問題が生じる可能性がある。本
発明装置では、論理アドレスを符号付きの数と考えるこ
とによって、この問題に対処する。 SRとURの双方を32ビットから64ビットに拡大するために
は、アドレス空間が二方向に伸びればよいわけである。
そこで、アドレスを符号付きの数と考え、UR領域が正方
向にSR領域が負方向に伸びると考えれば、この問題は解
決される。具体的には、32→64の拡張に対して、論理ア
ドレスは符号拡張するようにしておく。メモリマップは
第309図のようになる。 あるいは、図の書き換え方をかえて、第310図のように
なる。 アドレスを符号付きと考えることにより、SR,UR双方の
領域で拡張に対する連続性が保たれる。その代わり、
H′80000000におけるOS領域とユーザ領域の接点が切ら
れることになるが、これは問題ないと考えられる。 なお、本発明装置の16ビット絶対アドレッシングモード
(@ads:16)で、論理アドレスを符号拡張するようにな
っているのも、アドレスを符号付きとする考え方を適用
したものである。 A3-8.MMU機能のバリエーションとLSIDの機能 LSIDの機能は<<L2>>であるため、最初のチップでは
実装されず、将来のチップで導入される可能性が高い。
したがって、最初に出たチップのためのLSIDの機能を利
用しないプログラムも、将来のLSIDの機能の実装を見越
したものにしておくのが望ましい。かといって、最初の
チップでも不必要なオーバーヘッドは避けなければなら
ない。そこで、こういったLSID(論理空間識別子)機能
の有無やMMU機能の各種のバリエーションと、プログラ
ム(OS)の互換性との関係について、検討を行なう必要
がある。 一般的な話として、MMU関係の仕様のバリエーションに
対する対応には次の2つの方針がある。 互換性を維持するため、実装していない機能であって
も、縮退した機能でそのまま実行する。この場合、性能
は落ちるだけで、オブジェクトレベルの互換性は達成さ
れる。 実装していない機能については、EITで検出する。EIT
起動の目的は、まちがいの検出とエミュレーションであ
るが、エミュレーションでは極端な性能の低下を招く場
合があるので、実際問題として、オブジェクトレベルで
変更の必要な場合が多い。 したがって、オブジェクトレベルの互換性は難しいが、
あらかじめそれぞれのバリエーションの仕様が明らかに
なっていれば、ソースレベルで両方の仕様に対応できる
ようなプログラムを書くことは難しくない。 例えば、PSTLB命令の機能を実装しない場合に、PSTLBを
PTLBとして実行するのはの方針であり、EIT(RIE9と
するのはの方針となる。かかは個別に検討する必
要がある。 ・PSTLBの/STオプションについて TLBやキャッシュのインプリメント方式によっては、/ST
オプションの実装が難しい場合がある。しかし、/STオ
プションの指定は、TLBのパージ範囲だけに影響するの
で、互換性維持のためにの方針をとる。すなわち、/S
Tオプションの実装が難しい場合には、EITではなく/AT
想到の動作を行なうということにする。 ・LSID機能の実装とPTLB,PSTLBの/SSオプションについ
て PTLB,PSTLBの/SSオプションの実装については、TLBやキ
ャッシュのタグにLSIDの値を含めない場合にも、/SSオ
プションで全パージすることにより、の方針に合わせ
ることは可能である。しかし、LSID制御レジスタに値を
書き込んだり、それを読みだしたりすることを考える
と、オブジェクトレベルでの完全な互換性を達成するた
めには、LSID制御レジスタに相当するものを設けておく
必要がある。ところが、互換性の確保だけのためにレジ
スタを一実装するのは無駄が多い。また、ハードウエア
だけではなくソフトウエアに関しても、OSの中でLSIDの
操作を行なう部分は、LSIDの機能を活かさなければ無駄
な処理になってしまう。したがって、LSIDの有無につい
てはの方針をとる。それに合わせて、/SSオプション
の実装についてもの方針とする。 LSID機能の実装とPTLB,PSTLBの/SSオプションについて PTLB,PSTLBの/SSオプションの実装については、TLBやキ
ャッシュのタグにLSIDの値含めない場合にも、/SSオプ
ションで全パージすることによりの方針に合わせるこ
とは可能である。しかし、LSID制御レジスタに値を書き
込んだり、それを読みだしたりすることを考えると、オ
ブジェクトレベルでの完全な互換性を達成するために
は、LSID制御レジスタに相当するもおを設けておく必要
がある。ところが、互換性の確保だけのためにレジスタ
を一つ実装するものを設けておく必要がある。ところ
が、互換性の確保だけのためにレジスタに関しても、OS
の中でLSIDの操作を行なう部分は、LSIDの機能を生かさ
なければ無駄な処理になってしまう。したがって、LSID
の有無についてはの方針をとる。それに合わせて、/S
Sオプションの実装についてもの方針とする。 具体的なLSID関連の仕様は、次のようになっている。 −LSIDの機能の有無と/SSオプションの実装の有無を一
対一に対応させる。LSIDのあるプロセッサは/SSオプシ
ョンが利用できるし、LSIDのないプロセッサは/SSオプ
ションを利用できない。 −LSIDのあるプロセッサは、LSIDのないプロセッサに対
してオブジェクトレベルで完全上位互換とする。つま
り、LSIDのないプロセッサのために書かれたOSは、LSID
のあるプロセッサの上でもそのまま動く。ただし、LSID
の機能は生かすことができない。 −LSIDのあるプロセッサのために書かれ、LSIDの機能を
生かすようなOSは、LSIDのないプロセッサでは動かない
場合がある。具体的には、LSID制御レジスタの際に予約
機能例外(RFE)が発生したり、/SSオプションを指定し
た命令を実行した際に予約命令例外(RIE)が発生した
りすることになる。 また、MMU関連の命令におけるLSID関係の仕様は、次の
ようになっている。 −LSIDのでは、LSIDのないときPSTLB/AS/AT @uraddr
相当の動作を行なう。また、LSID実装時は、その機能を
生かすため、LDCTXでTLB,キャッシュのパージは行わな
い。LSID実装時は、TLBやキャッシュのタグ部分にLSID
まで含まれているので、LDCTXによりLSIDが変更される
と、LDCTX実行前の論理空間でヒットしていたエントリ
がLDCTX実行後の新しい論理空間ではヒットしなくな
る。ヒットしなくても、新しいエントリのロードに伴っ
てリプレースされない限りパージはされないので、再び
LDCTXが実行されて以前の論理空間に戻った場合には、
そのエントリがそのまま有効になる。(LDCTXでキャッ
シュやTLBをパージしていたのでは、LSIDの意味がなく
なってしまう。) −LDATE/PTでは、LSIDのない時PSTLB/AS/PT相当の動作
を行なう。LSID実装時、prgaddrがSRであればPSTLB/AS/
PT相当の動作を行ない、prgaddrがURであればPSTLB/SS/
PT(LSID of TAG=R0)相当の動作を行なう。prgaddrが
SRかURかで動作が異なっているように見えるが、これは
LDATEの問題ではあく、PSTLBの動作がURとSRで異なって
いるためである。LDATE命令自体の動作は、ATEの変更に
伴って影響を受けるTLBやキャッシュをパージする、と
いうことで一貫している。 −LDATE/STでは、LSIDのない時PSTLB/AS/PT相当の動作
を行なう。LSID実装時、prgaddrがSRであればPSTLB/AS/
PT相当の動作を行ない、prgaddrがURであればPSTLB/SS/
ST(LSID of TAG=R0)相当の動作を行なう。(/PTと同
様) −LDC命令でUATB,SATBを変更した場合は、仮想的な命令
LDATE/ATを実行したと考えれば良く、LDATE/PT,LDATE/S
Tと同様の動作を行なう。すなわち、LSIDのない時、SAT
Bを変更した場合にはPSTLB/AS/AT(prgaddr=SR)相当
の動作を行ない、UATBを変更した場合にはPSTLB/AS/AT
(prgaddr=UR)相当の動作を行なう。LSID実装時、SAT
Vを変更した場合にはPSTLB/AS/AT(prgaddr=SR)相当
の動作を行ない、UATBを変更した場合にはPSTLB/SS/AT
(LSID of TAG=LSID,prgaddr=UR)相当の動作を行な
う。 付録4.本発明装置のフラグ変化 各命令のフラグ変化の表記法は、以下の通りとする。 − 変化なし + 本来のフラグの意味に合わせて変化する * 本来のフラグの意味とは異なった変化をする 0 0にクリアされる 1 1にセットされる A4-1.データ転送命令 第311図に示す。 A4-2.比較・テスト命令 第312図に示す。 A4-3.算術演算命令 第313図に示す。 ADDX,SUBXのX flagは、destのサイズからの桁上げ、桁
下げを示す。SUBXでsrcとdestのサイズが等しい場合、X
flagは符号なし演算としての大小関係といった意味に
もなる。 一方、L flagの方は符号付き演算としての大小関係を表
わす。 MUL,MULU,MULX,DIV,DIVU,DIVX,REM,REMU,NEGのM flag,Z
flagは、オーバーフローの発生にかかわらずdest設定
値が基準である。 MULX,DIVXのM flag,Z flagは、reg設定値には関係しな
い。 DIVのV flagは、0除算または(最小負数)÷(−1)
の時にセットされる。 DIVUのV flagは0除算の時にセットされる。 DIVXのV flagは、0除算または商がdestのサイズに入ら
ない時にセットされる。 NEGのV flagは、destが最小負数であった時にセットさ
れる。 INDEXのM flag,Z flagは、xreg設定値(結果の一部)が
基準である。L flagは結果が負であること、V flagは、
乗算または加算でのオーバーフローを示す。 A4-4.論理演算命令 第314図に示す。 NOTのM flag,Z flagは、dest設定値(反転結果)が基準
である。 A4-5.シフト命令 第315図に示す。 M flag,Z flagはdest設定値(シフト結果)が基準であ
る。 X flagは最後にシフトアウトされた値が入る。 SHA,SHL,ROTでcountが0の場合には、X flag=0とな
る。 SHAでは、count>0で符号の変化があった場合にのみV
flag=1。それ以外の場合はV flag=0。 A4-6.ビット操作命令 第316図に示す。 A4-7.固定長ビットフィールド命令 第317図に示す。 固定長ビットフィールド命令では、BFCMP,BFCMPUがCMP,
CMPUに準じたフラグ変化をし、それ以外の命令がMOV,MO
VUに準じたフラグ変化をする。 BFINS,BFINSUの場合、第318図のBBBBBBBBがフラグ変化
の基準となる。 また、BFEXT,BFEXTUでは、抽出されたビットフィールド
ではなく、デスティネーションに設定される値を基準と
してフラグ変化する。これは、MOV命令などにおいて、
デスティネーション側に設定された値を基準としてフラ
グ変化するのに合わせたものである。 A4-8.任意長ビットフィールド命令 第319図に示す。 A4-9.10進演算命令 第320図に示す。 BCD数は符号拡張が無意味なので、基本的に符号なしの
数を扱うものと考え、ADDU,SUBUに準じたフラグ変化と
する。なお、ADDX,SUBXは、符号なし、符号付きの両方
の数を扱うため、多少変則的なフラグ変化になってお
り、ADDU,ADDDX,SUBU,SUBDXとは異なったフラグ変化で
ある。 本発明装置では10進演算はサポートしない。 A4-10.ストリング命令 第321図に示す。 SMOV,SCMP,SSCHのF flagは、終了条件による終了(SSCH
の場合はサーチ成功)を示す。 V flagは、エレメント数によって命令を終了した場合を
示す。 M flagは、複数の終了条件を区別するために用いる。R3
に関係する条件で終了した場合には0、それ以外の0ま
たはR4の関係で終了した場合(<<L2>>のみ)には1
となる。 SCMPのX flag,L flag,Z flagは、最終エレメントの比較
結果を基準としてセットされる。 X flagはエレメントを符号なしデータと考えた時の大
小、L flagはエレメントを符号付きデータと考えた時の
大小を示す。 A4-11.キュー操作命令 第322図に示す。 QINSのZ flagは、空のキューに挿入したことを示す。 QDELのZ flagは、エントリの削除の結果キューが空にな
ったことを示す。また、QDELのV flagは、空のキューか
らエントリを削除しようとしたことを示す。 QSCHのF flagは、終了条件による終了(サーチ成功)を
示す。 V flagは、キュー終了値R2による終了(サーチ失敗)を
示す。 M flagは、複数の終了条件を区別するために用いる。R3
に関係する条件で終了した場合には0、それ以外の0ま
たはR4の関係で終了した場合(<<L2>>のみ)には1
となる。 A4-12.ジャンプ命令 第323図に示す。 ジャンプ関係の命令では、フラグは全く変化しない。 A4-13.マルチプロセッサ命令 第324図に示す。 A4-14.制御空間、物理空間操作命令 第325図に示す。 LDCでdestにPSWを指定した場合には、全フラグが変化す
る。 A4-15.OS関連命令 第326図に示す。 本発明装置ではJRNG,RRNGはサポートしない。 A4-16.MMU関連命令 第327図に示す。 ACS命令のM flagはread可、L flagはexucute可、Z flag
はwrite可を示す。MOVPAのV flagは、ページフォールト
またはエラーにより物理アドレスが得られなかったこと
を示す。F flagは、ページフォールトを示す。 LDATE,STATEのV flagは、ページフォールトまたはエラ
ーによりATEの転送ができなかったことを示す。 本発明装置ではACS命令以外のMMU関連命令をサポートし
ない。 付録5.異種サイズ間の演算について 本発明装置では、異なるバイト数の整数の間で各種の演
算を行なうことができ、これを「異種サイズ間の演算」
と呼んでいる。「異なるサイズ」といっても、現在は整
数のみを対象としているため、データサイズの変換はゼ
ロ拡張または符号拡張のみの簡単な処理で済む。例え
ば、32ビットの整数に8ビットの符号付き整数を加える
場合、8ビット整数の符号ビット(MSB)を上位ビット
にまで拡張してから加算を行なうわけである。符号拡張
処理はゲート1〜2段で可能なので、一般の加算命令と
比べてそれほど複雑なわけではない。 A5-1.異種サイズ間の演算の有用性 異種サイズ間の演算は、次のような場合によく使用す
る。 オペランドの一方がイミディエート値の時 変数と定数の演算を行なう場合、定数のサイズはコンパ
イル時にわかるため、定数の方を小さいサイズとして扱
えば、命令長を減らすのに効果がある。例えば、32ビッ
トレジスタに8ビット定数の100を加える場合、32ビッ
トの加算命令を使うと定数100を指定するのにも32ビッ
トのフィールドが必要である。しかし、32ビットに8ビ
ットを加算する命令を使えば、定数100を指定するフィ
ールドが8ビットで済むため、命令が短くなる。 さらに、乗除算の場合には、命令長だけではなく性能面
でも影響がある。マイクロプロセッサでは32〜64ビット
の並列乗算器を持つのは苦しいので、どうしても加算と
シフトで乗算を行なうことになるが、乗算の計算量は、
2つのオペランドサイズの積に比例して多くなるため、
2つのオペランドのうちの一方だけでもサイズの小さい
方が有利である。異種サイズ間演算の機能がない場合に
は、例えば、32ビットの変数に3を掛けるだけでも32ビ
ット*32ビットの乗算を行なわなければならない。 アドレス計算 アドレスの計算では、演算のデスティネーションのサイ
ズをアドレス幅と同じにする必要がある。したがって、
32ビットプロセッサの場合、32ビットと他のサイズとの
演算をよく行なう。例えば、文字の変換テーブルなどに
おいて、テーブルのインデクスの範囲が8ビットにおさ
まる場合、インデクスとベースアドレスとの加算は、8
ビット符号なし整数と32ビット整数との加算として実現
される。 高級言語 一般に、高級言語では、サブルーチンパラメータのサイ
ズを必ずマシンの基本サイズ(例えば32ビット)に拡張
することが多い。これは、スタックを使ってサブルーチ
ンパラメータの受け渡しをするため、また分割コンパイ
ル等を容易にするためである。さらに、言語Cのよう
に、式の中の変数のデータサイズにかかわらず、式の評
価は必ずマシンの基本サイズで行なうという場合もあ
る。一方、メモリ上の変数、特に配列では、メモリ領域
の節約のため、必要最小限のサイズとするのが普通であ
る。したがって、配列とサブルーチンを同時に使用する
プログラムでは、データの移動中または演算処理の途中
のどこかでサイズの変換を行なわなければならない場合
が出てくる。式の評価とサイズの変換を同時に行なうた
めには、本発明装置のような異種サイズ間の演算が便利
である。 A5-2.本発明装置における実際 本発明装置では、異種サイズ間の演算をサポートするた
め、データサイズの指定に関する直交性が非常に強くな
っており、2オペランド一般形(G-format)の基本演算
命令のほとんどで異種サイズ間の演算が可能である。つ
まり、2オペランド一般形の基本演算命令では、ソース
のサイズとディスティネーションのサイズが独立に指定
でき、必要に応じて符号拡張、ゼロ拡張、上位ビットの
切り捨て、などを行なうようになっている。デスティネ
ーションのサイズがソースのサイズより小さい場合にも
演算は実行され、デスティネーションのサイズに従って
オーバーフローが検出される。 以下に、各命令における異種サイズ間演算の実際例を述
べる。 B:Byte 8ビット H:Halfword 16ビット W:Word 32ビット MOV src.B,dest.W 8ビットのsrcを32ビットに符号拡張してdestに転送。 MOV src.W,dest.B srcの下位8ビットをdestに転送。32ビット符号付き整
数としてのsrcの値と、8ビット符号付き整数としてのd
estの値が異なる時は、オーバーフローとなる。 ADD src.B,dest.W 8ビットのsrcを32ビットに符号拡張してdestに加算。 ADD src.W,dest.B destにセットされる値は、srcの下位8ビットをdestに
加算したものと同じである。しかし、命令の意味として
は、src(32ビット)とdest(8ビットを32ビットに符
号拡張)を加算し、それを8ビット符号付き整数に変換
してdestに格納するということである。したがって、32
ビットの和がdestの8ビットで表現できない値になった
時は、オーバーフローとなる。 本発明装置では、ソースとデスティネーションのデータ
サイズが異なる場合に、通常符号拡張を行なう。ただ
し、特にゼロ拡張も必要と考えられる命令(MOV,CMP,AD
D,SUB)については、ゼロ拡張と符号拡張を命令レベル
で切り分け、MOVU,CMPU,ADDU,SUBU命令としている。MOV
U,CMPU,ADDU,SUBU(加えてMULU,DIVU)では、デスティ
ネーションのサイズがソースのサイズよりも大きい時に
ゼロ拡張を行ない、結果を符号なし整数と考えてオーバ
ーフローの検出をする。 A5-3.異種サイズ間の論理演算 論理演算の場合は各ビットが全く独立なので、異種サイ
ズ間の演算は意味がないし(フラグの変化を除けば、小
さい方のサイズで行なうのと同等)、論理演算のオペラ
ンドに対するゼロ拡張や符号拡張もほとんど意味を持た
ない。 しかし、例えばCで次のような関数を書いた場合には、
意味はなくても 符号拡張→論理演算 というオペレーションを実行しなければならないことが
ある。 ただ、このような例は、言語としての規則性や対称性の
ためにそう決まっているだけであり、一部のトリッキー
なプログラムを除けばほとんど使わない機能であると言
える。 論理演算の異種サイズ間演算をサポートするかどうかに
ついて、問題点をまとめると以下のようになる。 実行時 異種サイズ間の論理演算は、頻度としては非常に少な
く、論理的な意味も持たない。本質的に他の命令で代用
できるか、あるいはトリッキーなプログラムでしか使わ
ない。 コンパイル時 C言語では、論理演算でもゼロ拡張や符号拡張が必要に
なることがある。あまり使わない機能であっても、コン
パイラとしては必ず正しいコードを出す必要がある。命
令の対称性が重要。 チップのインプリメント 符号拡張/ゼロ拡張の区別が全命令で統一的に行なわれ
ていれば、インプリメントの規則性の面から、論理演算
でもゼロ拡張や符号拡張を導入するメリットがある。し
かし、そのためには命令の割り当てに多くのビットパタ
ーンが必要となり、命令のエンコーディングが苦しくな
ってしまう。現実的には、論理演算を含む全命令で符号
拡張/ゼロ拡張の区別を行なうことはできず、論理演算
の符号拡張やゼロ拡張に対してインプリメントの規則性
の面からのメリットは得られない。また、この部分はメ
ーカー間で見解の異なる可能性もあるため、仕様を合わ
せるのが難しい。 結局、以上の中でとのどちらを重視するかというこ
とになるが、実質的な性能向上をねらうのであれば、や
はりを選択するのが適当と考えている。つまり、 ・異種サイズ間の論理演算のように、実行する意味の少
ない演算が足を引っ張ることによって、性能向上がはば
まれるのはよくない。 ・の問題に関しては、符号拡張を含む異種サイズ間の
論理演算は頻度の少ない演算であるから、多少実行速度
が落ちてもよい。 例えば、 AND src.B,dest.W srcを符号拡張の代わりに MOV src.B,@‐SP.W srcを符号拡張 AND @SP+.W,dest.W とすれば、多少実行速度は落ちるが、符号拡張〜演算命
令の統一的な置き換えが可能である。こうすれば、コン
パイラの負担はそれほど増えない。 したがって、本発明装置の仕様としては、異種サイズ間
の論理演算をサポートしていない。異種サイズ間の論理
演算に相当する命令ビットパターンを実行した場合に
は、動作を保証しないということになっている。 A5-4 異種サイズ間演算機能のまとめ 本発明装置でサポートする命令と、整数のデータタイプ
との関係をまとめると、次のようになる。 ・8,16,32,64ビット長の整数をサポートする。 ・符号付きの整数を優先してサポートする。 ・符号付き整数の算術演算に関しては、2オペランド命
令において異種サイズ間の演算がサポートされている。
ソースのサイズとディスティネーションのサイズは完全
に独立に指定でき、サイズの制限はない。ソースの方が
サイズが小さい場合は、符号拡張される。結果は符号付
き整数として扱われ、それに従ってフラグ類がセットさ
れる。 ・符号なし整数の演算は、一部の命令(MOV,CMP,ADD,SU
B,MUL,DIV)でのみサポートされている。サイズに関し
てはやはりソースのサイズとディスティネーションのサ
イズが完全に独立に指定できる。ソースの方がサイズが
小さい場合は、ゼロ拡張される。結果は符号なし整数と
して扱われ、それに従ってフラグ類がセットされる。 ・符号付きの整数と符号なしの整数の混在した演算はで
きない。ただし、加算命令などの場合は、デスティネー
ションの符号の有無はフラグに影響するだけなので、フ
ラグを見ないのであればADDまたはADDUで代用できる。 ・異種サイズ間の論理演算はサポートしない。 付録6.高級言語向きサブルーチンコール 高級言語におけるサブルーチンコールでは、単なるリタ
ーンアドレスの退避だけではなく、フレームポインタの
設定、ローカル変数の領域の確保、汎用レジスタの退避
といった処理も必要である。これらの処理はJSR,STMな
どの命令に分解することも可能であるが、頻度が多いこ
と、処理が定型的であることにより、一つの命令(ENTE
R,EXITD)としてまとめられている。 A6-1.本発明装置でのサブルーチンコール 高級言語(特にC,PASCAL)のサブルーチンコールでは、
普通第328図のような処理を行なう。 本発明装置では、高級言語用サブルーチン命令ENTERと
リターン命令EXITDを設けている。いくつか注意する点
を述べる。 ・FP(フレームポインタ)とディスプレイレジスタ PASCALのようにスタティックスコープがある言語では、
中間レベル(ローカル変数とグローバル変数の中間のレ
ベル)の変数のアクセスにディスプレイレジスタを用い
る。本発明装置のようにレジスタの多いプロセッサで
は、汎用レジスタ上にこのディスプレイレジスタを置く
のが有効である。これは、複数のFPを持つことに相当す
る。 (実現方法は後述) ・パラメータ パラメータを渡すには、パケットにしてその先頭アドレ
スをレジスタ等で渡す方法、パラメータをスタックに積
む方法、等があり、高級言語では後者の方が一般的であ
る。呼ばれたサブルーチンの側でスタック上のパラメー
タをアクセスするにはFP相対のモードを使うことが多
い。 サブルーチン実行後には、呼んだ側でスタック上のパラ
メータを解放する必要がある。言語によって、また分割
コンパイルをしなければ、呼ばれた側で正確なパラメー
タ数がわかっているので、リターン命令の中で解放する
パラメータ数(SPへの加算値)を指定することができ
る。本発明装置では、この目的でEXITD命令を設けてい
る。パラメータ数が動的に決まる場合もあるので(例え
ば、パラメータ数をサブルーチンに知らせるために、特
定のレジスタやスタックを使う場合など)、EXITD命令
におけるSPへの加算値としては、イミディエート値だけ
ではなくレジスタ上の値を使用することもできる。 しかし、言語Cのようにサブルーチンのパラメータの個
数が確定しない言語では、サブルーチンを呼ばれた側か
らは、サブルーチンを呼ぶ側で決めたパラメータの個数
がわからない。したがって、呼ばれた側で実行するEXIT
D命令では、解放するパラメータの個数を指定できな
い。その場合には、サブルーチンを呼んだ側でADD #n,
SPを行なってパラメータを解放する。 結局、本発明装置のENTER命令では前の図の2.〜4.の処
理、EXITD命令では5.〜7.の処理、または5〜8の処理
(ただし、8.で解放するパラメータ数はサブルーチン側
で指定)を行なうことになる。1.はJSRと同じ処理にな
り、8.はサブルーチンを呼んだ側でADD ***,SPを行
なう。 本発明装置における高級言語でのスタックフレームは、
第329図のようになる。 ・local variablesとparametersがなるべくFPから近い
配慮となるように、ローカル変数確保よりレジスタセー
ブを後にした。 ・EXITD命令にはPCのリストア(RTS)の操作まで含めて
いる。 命令シーケンスの実際 (サブルーチン側でパラメータ数がわからない場合) 第330図に示す。 (サブルーチン側でパラメータ数がわかる場合) 第331図に示す。 A6-2.ブロック構造言語のためのディスプレイレジスタ
の構成例 ENTER-EXITDで処理するFPレジスタをダイナミックリン
クとして利用するためには、内側のブロック(最高のレ
キシカルレベル)に対するフレームポインタにFPレジス
タを割り当てるのがよい。 その他のレキシカルレベルのフレームポインタには、値
の変化の少ない順にR13,R12,R11...を使う。つまり、レ
キシカルレベルの高い内側のブロックへ行くにしたがっ
て番号の小さいレジスタを使い、最小番号のレジスタの
内容をFPと同じにする。 各サブルーチンでは、ENTER命令実行後、FPを自分のレ
キシカルレベルに対応したフレームポインタ用レジスタ
にコピーし、その番号以上のレジスタをディスプレイレ
ジスタとして、その番号以下のレジスタを評価用として
利用すればよい。ただし、新しく書き換えたレジスタは
必ず退避して値を保存しなければならない。 プログラム側(スタティックスコープ) 第332図に示す。 実行状態の例(ダイナミックリンクとディスプレイレジ
スタ) 第333図に示す。 ・proc0*,var0* proc0であるが、再帰呼び出しのため、最初のproc0とは
異なったフレームになっている。 ・FPのコピーにより破壊するレジスタは、コピー前にす
べてENTER命令で退避しなければならない。レジスタを
退避しておけば、サブルーチンの実行が終って一つ前の
関数に戻った時、レキシカルレベルの大小にかかわらず
ディスプレイはもとの値に戻る。 上の例では、レジスタの使い方について次のような関係
が成立する。 レキシカルレベルnのサブルーチン実行に関して R13..R13-n+1のn個のレジスタはディスプレイレジ
スタとして参照のみを行ない、書き込みはしない。 R13-nのレジスタは、このレベルのローカル変数のデ
ィスプレイとして使用するため、ENTER実行後FPからコ
ピーする。このディスプレイは、このサブルーチン実行
中にさらに高いレベルのサブルーチンを呼んだ時に、呼
ばれたサブルーチンからこのレベルの変数をアクセスす
るために使用する。このサブルーチンからこのレベルの
変数をアクセスするには、同じ内容であるFPを使うのが
良い。 R13-n-1..R0の(13-n)個のレジスタは、レジスタ変
数や評価用として利用する。 R13-nのレジスタとR13-n-1..R0のうちで使用するレジ
スタは、必ずENTER命令で退避する必要がある。全部の
レジスタが保存されなければならない。 付録7.制御レジスタと制御空間 制御レジスタ関係の仕様は、チップバス(コプロセッサ
やキャッシュ、TLBなどに接続されるバス)やインプリ
メント方法との関係が深いため、<<LA>>仕様となっ
ている。 A7-1.制御空間の考え方 「本発明装置」では、チップバス上のメインプロセッサ
やコプロセッサに含まれるすべてのレジスタ、MMUやキ
ャッシュ、TLBなどの制御レジスタ、およびチップバス
上に接続されたコンテキストスイッチ用高速メモリに一
意的なアドレスを付け、これを制御空間と呼ぶ。「本発
明装置」の制御空間は、従来のプロセッサに見られたコ
プロセッサ用のアドレス空間(Coprocessor-IDなど)を
メインプロセッサの制御レジスタのアドレスと統合化、
一般化したものであり、次のような特徴を持つ。 ・「本発明装置」の制御空間には次のようなものが含ま
れる。 メインプロセッサの制御レジスタ PSW,各リングのスタックポインタなど MMU関係の制御レジスタ(「本発明装置」はMMUを内蔵し
ない) UATB,SATBなど インプリメントに依存して必要となるレジスタ [コプロセッサの制御レジスタ] [コンテキスト退避用の高速メモリ] 従来チップに内蔵することを狙ったもの [プロセッサ内の汎用レジスタ、テンポラリレジスタ] 外部からの診断、デバッグの目的 ・制御空間は、コンテキスト(プロセスやタスク)間で
共通の空間である。制御空間のアクセスはアドレス変換
を伴わないため、単純化されたプロトコルで高速のアク
セスが可能である。この機能は、特に高速コンテキスト
スイッチでも利用される。 制御空間の考え方は、将来、コプロセッサやコンテキス
ト退避用メモリがメインプロセッサに内蔵された時に、
特に有効になると考えられる。しかし、最初のバージョ
ンのチップでは、インプリメントの制約上、あるいはチ
ップバスの構成上、制御空間の操作を統一的に行なうの
が難しい場合があるので、将来に備えてアドレスの割り
当てのみを決めておき、制御空間操作命令はいくつかの
制限を付けて使用してもよいということにする。 具体的には、次のような制限が付く。 ・プロセッサの診断用の目的で、R0〜R15やPCにも制御
空間のアドレスが割り当てられているが、これは<<L2
>>であり、「本発明装置」では実装しない。 ・LDC,STCは、本来メインプロセッサ内の制御レジス
タ、FPUの制御レジスタ、コンテキスト退避用メモリな
どを統一的にアクセスすることを狙ったものである。し
かし、「本発明装置」ではインプリメントの制限によ
り、メインプロセッサ内の制御レジスタ以外(実効アド
レスH′0〜H′07ff以外)のものについては、LDC,ST
Cでアクセスできない。 ・「本発明装置」の制御空間のアドレスでは、バイトア
クセス、ハーフワードアクセスが利用できない。また、
ワードアクセスにおいてアライメントが強制される。 ・コンテキスト退避用メモリは、制御レジスタを置く領
域(H′0〜)と重ねることはできない。コンテキスト
退避用メモリとしては、H′ffff8000〜H′ffff ffff
のアドレスが割り当てられている(さらに拡張領域とし
てH′80000000〜)ので、H′80000000〜H′ffffffff
以外の値をCTXBBに設定してLDCTX/CS,STCTX/CSを実行し
た場合には、エラーとする。また、LDCTX/CS,STCTX/CS
の機能自体も<<L2>>となっている。 ・「本発明装置」ではLDCTX/CS,STCTX/CSをサポートし
ない。 −:必須の仕様<<L1>> …:アドレス割り当てのみ<<L2>> 第334図に示す制御空間では、バイトアクセス、ハーフ
ワードアクセスができないのにもかかわらず、バイトア
ドレッシングとなっている。これは、一般の命令で利用
される論理空間と同じように、制御空間でも汎用アドレ
ッシングによる実行アドレス指定が可能であり、論理空
間と同じ形のバイトアドレッシングにしておかないと、
混乱を招くからである。また、制御空間で汎用アドレッ
ングを利用可能としたのは、制御空間をコンテキスト退
避に利用することを考えたためである。 LDC,STCでメインプロセッサ内の制御レジスタしかアク
セスできない場合には、バイトアドレッシングとした意
味がなくなってしまい、多少不自然な仕様になる。しか
し、その背景には上記のような将来的な見通しがあり、
一部の機能のみを実現した場合に多少不自然に見えるの
はやむを得ない。 A7-2.メインプロセッサの制御レジスタ 制御レジスタのニモニックとアドレスについては、次の
ようになる。制御レジスタのアドレスが8n+4の位置に
あるのは、レジスタを64ビットに拡張することを考慮し
たためである。 A7-3.制御レジスタの未使用ビット 制御レジスタのうち、使用していないビットについて
は、1を書き込んだ場合にそれをチェックしてEITとす
るのが望ましい。しかし、中途半端なチェックを行なう
と、互換性(特に下位チップとの互換性)を保つのが難
しくなること、チェックのためにオーバーヘッドが生じ
ること、により、PSWを除いて未使用ビットのチェック
は行なわないことにする。 CTXBFMなど<<L2>>の機能を持つレジスタについて
も、<<L2>>が実装されていない場合にはエラーチェ
ックが行なわれないし、書き込んだ値がそのまま読み出
されるとは限らない。 ただし、チェックが行なわれていなくても、空きビット
には必ず‘0'を入れてもらうように、マニュアル等で指
導する必要がある。 PSWについては、未使用のビット‘−’に‘1'を書き込
もうとした場合に、予約機能例外(RFE)とする。 以下の制御レジスタの内容の説明における‘−',‘=',
‘*’のビットの意味は次のとおりである。 ‘−’ 0にreserved(違反時例外発生) ‘+’ 1にreserved(違反時例外発生)このビットに
0(1)を書き込むことは可能であるが、このビットに
1(0)を書き込もうとするとLDC,LDCTXなどで予約機
能例外(RFE)を発生する。 ‘=’ 0にreserved(違反時も無視) ‘#’ 1にreserved(違反時も無視)このビットは0
(1)を書き込むべきビットであるが、このビットに1
(0)を書き込もうとしても単に無視され、このビット
に0(1)を書き込んでも1(0)を書き込んでも動作
は同じである。 ユーザへのマニュアルには、将来の拡張のためこのビッ
トに0(1)を書き込むように明記する。 ‘*’ 書き込み時の値は自由。 ハードウエアの動作は‘=',‘#’と同じであり、どの
ような値が書き込まれても単に無視する。ただし、この
ビットは‘=',‘#’とは異なり、将来チップの機能が
拡張された場合にも使用しないビットである。したがっ
て、ユーザが自由な値を書き込んでも構わない。ユーザ
へのマニュアルの中でも、このビットは無視されるとい
うことを明記し、ビットのマスク処理などは省いてもら
うようにする。 ・IMASK,SMRNG,DI,DCE,CTXBFMでは、未使用のビットが
‘*’になっている。PS Wでは、未使用のビットが
‘−’になっている。それ以外の制御レジスタでは、未
使用のビットは‘=’である。 ・PSB,PSMの未使用フィールドも‘−’である。したが
って、LDPSB,LDPSMでも予約機能例外(RFE)が発生す
る。 ・‘−’のビットの読みだした場合には、‘0'が読み出
される。‘=',‘*’のビットを読みだした場合に得ら
れる値は不定である。前に書き込んだ値がそのまま読み
出されるとも限らない。 A7-4.制御レジスタの内容 PSW 第335図に示す Processor Status Word 内容については本文を参照。 PSM,PSB PSWのうち、ユーザのアクセス可能な下位の2バイトの
みを抜き出したもの。LDPSB,LDPSM,STPSB,STPSM命令に
よってアクセスする。制御レジスタのうち、PSB,PSMの
みがring0以外からアクセスできる。 IMASK 第336図に示す PSWのうち、個別にアクセスすることの多いIMASKのフィ
ールドを抜き出して別レジスタとしたものである。IMAS
Kの操作を容易にすることと、性能向上を狙ったもので
ある。IMASK以外のフィールドには、何を書き込んでも
単に無視される。 SMRNG 第337図に示す PSWのうち、個別にアクセスすることの多いSMRNGのフィ
ールドを抜き出して別レジスタとしたものである。SM,R
NGの操作を容易にすることと、性能向上を狙ったもので
ある。SMRNG以外のフィールドには、何を書き込んでも
単に無視される。 CTXBB 第338図に示す Context Block Base CTXBのベースアドレスを指すレジスタ。LDCTX,STCTX命
令で使用される。 CTXBBは「本発明装置」64への拡張を考え、「本発明装
置」32でも8バイトのアライメントを強制している。し
たがって、CTXBBの下位3ビットは‘===’となる。
つまり、0にreservedであるが、違反時にも無視され
る。 DI(Delayed Interrupt) 第339図に示す DI(Delayed Interrupt)要求を示すレジスタ。 DI=0000 優先度0の外部割り込み(NMI)処理後のDI
要求 DI=0001 優先度1の外部割り込み処理後のDI要求 DI=0010 優先度2の外部割り込み処理後のDI要求 ・・・ DI=1110 優先度15の外部割り込み処理後のDI要求 DI=1111 DI要求なし DI(Delayed Interrupt)は、ソフトウエアによって外
部割り込みを発生させるメカニズムであり、非同期に発
生する各種の処理要求をペンディングとしたい時や処理
順序をシリアライズしたい時に有効である。優先度の高
い外部割り込みの処理が終わった後で別に起動したい処
理がある場合、その要求をDIに登録しておくことによっ
て自動的に処理が起動される。 DIは、外部割り込みに対してDCEと同等の処理を行なう
ものである。REIT命令などによってPSWのIMASKが変化し
た場合に、DI<IMASKであればDIのEIT処理が起動され
る。このレジスタのDI以外のフィールドに何を書き込ん
でも単に無視される。 CSW 第340図に示す Context Status Word このレジスタは、コンテキスト毎に切り換えの必要な情
報のうち、ネストの行なわれないものを集めたものであ
る。DCE(Delayed Context Exception)要求を示すDCE
フィールドと、CTXBのフォーマットを示すCTXBFMのフィ
ールドから成る。CTXBFMの機能は付録8を参照のこと。 CTXBFMの機能がインプリメントされない場合には、DCE
レジスタとCSWレジスタが全く同じ情報を扱うことにな
るので、CSWレジスタもインプリメントされない(アク
セス時RFE)場合がある。この時、CTXBに置かれるの
は、形式的にはCSWレジスタであるが、実際はDCEレジス
タとなる。 CSWとDCE,CTXBFMの関係は、PSWとIMASK,SMRNGの関係に
同じである。CTXBに置かれるのは、DCE,CTXBFMなどの情
報を圧縮したCSWの方である。 「本発明装置」ではDCE=‘111'に固定とする。 DCE 第341図に示す Delayed Context Exception CSWのうち、個別にアクセスすることの多いDCEのフィー
ルドを抜き出して別レジスタとしたものである。DCEの
操作を容易にすることと、性能向上を狙ったものであ
る。DCE以外のフィールドには、何を書き込んでも単に
無視される。 CSWレジスタがインプリメントされない場合、コンテキ
ストスイッチ時にCSWレジスタの代わりにCTXBとの転送
が行なわれるのは、このDCEレジスタである。この場
合、コンテキスト退避の時は、‘*’のビットがすべて
0となってCTXBに書き込まれる。また、コンテキストを
ロードする時は、‘*’の部分のビットの値はチェック
されない。 CTXBFM 第342図に示す Context Block Format CSWのうち、個別にアクセスすることの多いCTXBFMのフ
ィールドを抜き出して別レジスタとしたものである。CT
XBFMの操作を容易にすることと、性能向上を狙ったもの
である。CTXBFM以外のフィールドには、何を書き込んで
も単に無視される。 このレジスタは<<L2>>である。 EITVB 第343図に示す EIT Vector Base EIT(例外、割り込み)ベクトルテーブルの先頭の物理
アドレスを示す。EITVBは「本発明装置」64への拡張を
考え、「本発明装置」32でも8バイトのアライメントを
強制している。したがって、EITVBの下位3ビットは
‘===’となる。つまり、0にreservedであるが、違
反時にも無視される。 JRNGVB 第344図に示す JRNG Vector Base JRNG命令のベクトルテーブルの先頭の論理アドレスを示
す。 JRNGVBによるテーブルのベースアドレスは、「本発明装
置」64への拡張を考え、「本発明装置」32でも8バイト
のアライメントを強制している。また、JRNGVBのLSBはE
nableビットとなっており、Eが0の時にはJRNG実行禁
止となる。したがって、JRNGVBの下位3ビットは‘==
E'で表記されている。‘=’のビットは、0にreserved
であるが、違反時にも無視される。 SP0〜SP3 第345図に示す Stack Pointer for rign3 ring0〜ring3で使用するスタックポインタ。 SPI,SP0〜SP3についてはアライメントの制約はなく、LS
Bまで有効である。 SPI 第346図に示す Stack Pointer for Interrupt 外部割り込み用のスタックポインタ。 IOADDR,IOMASK 第347図に示す アドレス変換を行なわない場合(PSWのAT=00,10)にお
いて、I/O領域の物理アドレスを指定するレジスタであ
る。 通常MMUでアドレス変換を行なう場合には、PTE中のNCビ
ットによってI/O領域の指定を行なうが、システムスタ
ート時などでアドレス変換ができない場合には、IOADD
R,IOMASKの2つのレジスタを使ってI/O領域の指定を行
なう。 アドレス変換なしでメモリアクセスをする場合、物理ア
ドレスとIOMASKの論理積がIOADDRと等しければ、そこは
I/O領域と見なされる。その領域のデータについては、
データのキャッシュへの取り込みやプリフェッチが行な
われず、命令の要求するメモリアクセスと実際の物理的
なメモリアクセスが1対1に対応する。 アドレス変換のある場合には、IOADDR,IOMASKレジスタ
は使用しない。また、プロセッサのインプリメントによ
ってキャッシュやプリフェッチを行なわない場合には、
必ずしもIOADDR,IOMASKレジスタを使用する必要はな
い。 UATB 第348図に示す Unshared region Address Translation Base 内容については付録3を参照。 SATB 第349図に示す Shared region Address Translation Base 内容については付録3を参照。 LSID(「本発明装置」では実装しない) 第350図に示す Logical Space ID 複数の論理空間の間の区別を行なう番号を入れる。 複数の論理空間に属するTLBや論理キャッシュなどを混
在させる時に、この番号を利用する。LSIDの有効なビッ
ト数については、インプリメント依存である。 付録8.「本発明装置」のCTXB A8-1.CTXBについて 「本発明装置」はMMUをもたないため「本発明装置」で
サポートするCTXBフォーマットをどのようにするか現在
検討中である。 OSが、タスク、プロセスなどといった並行処理やコルー
チンの機能をサポートしている場合、PCや汎用レジスタ
などのハードウエア資源の情報は、並行処理の単位とな
るそれぞれのプログラム毎に別々に持つのが普通であ
る。これらのハードウエア資源は、プロセッサと同様に
時分割で使用されるため、現在実行中でないプログラム
に対するハードウエア資源の情報は、メモリなどに退避
しておく必要がある。 「本発明装置」では、こういった並行処理の単位となる
プログラムの流れをコンテキストと呼ぶ。また、それぞ
れのコンテキストを実行するために、ハードウエア資源
の情報をメモリ上にまとめて退避したものをContext Bl
ock(CTXB)と呼ぶ。 CTXB自体のおかれる空間は、LDCTX,STCTX命令のオプシ
ョンとして、論理空間LS、制御空間CSより選択できる。
OSの書きやすさという点ではLSを利用するのが適してい
るが、コンテキストスイッチを特に高速化したい場合
や、コンテキストスイッチ退避用のメモリをチップ内に
設ける場合には、CSを利用することもできる。ただし、
CSの指定は、将来コンテキスト退避用のメモリをチップ
に内蔵した場合に有効に活用されるものであり、現在は
<<L2>>となっている。また、「本発明装置」では、
現在実行中のコンテキストのCTXBの先頭アドレスを保持
するレジスタが設けられており、これをCTXB Base Regi
ster(CTXBB)と呼んでいる。 「本発明装置」のCTXBのフォーマットは、次のようにな
っている。このうちの一部は、LDCTX,STCTX命令によ
り、ハードウエアでサポートされている。 「本発明装置」32での標準CTXBフォーマット 第351図に示す 一般に、コンテキストスイッチによって切り換える必要
があるのは、OSのPCやPSWではなく、ユーザプログラム
のPCやPSWである。ところが、ユーザプログラムのPCやP
SWは、普通はOS呼び出し時にスタック中に退避されてい
る。上記のCTXBフォーマットにおいて、PC,PSWがスタッ
ク中に置かれているのは、そのためである。 SPIを使用した外部割り込みの処理ハンドラの最後で直
接コンテキストスイッチを行なう場合は、上記のCTXBフ
ォーマットを実現するために、PC,PSWを別命令で転送す
る必要がある。しかし、この場合はDCE,DIを活用し、外
部割り込みから抜ける時にDCE,DIを使ってコンテキスト
スイッチを行なうという方法がある。そうすれば、DCE
やDIでSP0を指定することにより、上記のデータ構造が
自然に実現できる。 A8-2.CTXBの可変性 CTXBに含まれる情報のうち、‘*1'〜‘*5'の付いた部
分は、システム構成などによって可変性のある部分であ
る。これらの点について説明する。 CTXBの内容やフォーマットは、以下のような要因によっ
て動的に(あるいはコンテキスト毎に)変化することが
ある。 ・OSの構成やMMUの有無(*1〜*3) OSの構成によっては、コンテキストスイッチでSP1〜SP3
の切り換えを行なっても意味のないケースが考えられる
ため、SP1〜SP3を退避したくない場合がある。また、MM
Uを使用しない用途でのコンテキストスイッチでは、UAT
B,LSIDを切り換える必要がない。 (*1)JRNG〜RRNGでは、外側のリングが内側のリング
のスタックに退避されるため、現在リングよりも外側の
リングのSPの値は意味を持たない。特に、ring0でのみ
実行されるコンテキストスイッチの時点では、SP1〜SP3
の値が意味を持たない。SP1〜SP3は、直接あるいは間接
にSP0のスタックに保持されているため、SP0の切り換え
によってSP1〜SP3も間接的に切り換わることになるから
である。一方、TRAPA〜REITの中でコンテキストスイッ
チが起こった場合にはSP1〜SP3の切り換えも必要であ
る。したがって、SP1〜SP3をCTXBに含めたい場合と、そ
うでない場合がある。 (*2)MMUを実装しない。<<L1R>>仕様では、UATB
は不要である。 (*3)LSIDは、複数の論理空間を区別するための番号
である。LSIDの実装は<<L2>>なので、LSIDがCTXBに
含まれる場合と、そうでない場合がある。 ・退避する汎用レジスタの指定(*4) コンテキストで使用しないレジスタやOSで使用するワー
キングレジスタについて、CTXBとの退避、復帰を行なわ
なければ、無駄な転送がなくなり、コンテキストスイッ
チ時間が短縮される。 ・コプロセッサ使用の有無(*5) FPUのレジスタは汎用レジスタとは別になるが、これも
コンテキスト情報として持つ必要がある。したがって、
そのコンテキストがFPUを使用しているかどうかによっ
て、CTXBが動的に変わるケースが生じる。 以上のようなCTXBのバリエーションに対処するため、
「本発明装置」では、以下のような方法をとっている。 ・最初のバージョンの<<L1>>のチップでは、LDCTX,
STCTXでCSW,SP0〜SP3,UATBの転送のみを行なう。R0〜R1
4については、別命令LDM,STMを利用して転送し、(*
4)に対処する。 ・それ以外のCTXBのバリエーションに対しては、現在の
CTXBのフォーマットを識別するレジスタ(CTXBFM)を導
入し、このレジスタによって、CTXBに何が含まれ、LDCT
X,STCTXで何を転送しなければならないかを知ることに
する。なお、CTXBFMとDCEの情報を合わせたものは、CSW
レジスタとしても扱われる。 [CTXBFM] 第352図に示す FR FPUレジスタを退避することを指定 「本発明装置」標準のFPUレジスタのコンテキスト退避
を指定する。この機能は、特に、将来FPUがチップに内
蔵された場合にに利用する。 RG R0-R14を退避することを指定 この機能は、特に、将来コンテキスト退避用メモリがチ
ップに内蔵された場合に利用する。 SP SPの退避を指定 SP=00 SP0,SP1,SP2 SP3を退避する SP=01 reserved SP=10 SP0,SP3を退避する(<<L1R>>用) SP=11 SP0のみ退避する この機能は、JRNGによりOSを呼び出す場合に、SP1〜SP3
の無駄な転送を行なわないために利用する。 また、<<L1R>>でSP1 SP2を実装しない場合に利用す
る。 MM MMU関連レジスタの退避を指定 MM=00 UATBを退避 MM=01 UATB,LSIDを退避 MM=10 MMU関連レジスタは退避しない(<<L1R>>
用) MM=11 reserved [ただし、CTXBFMの詳細は検討中である。] <<L1>>で標準的なフォーマットのCTXBでは、LDCTX,
STCTXにより、CSW(DCE,CTXBFM)、SP0〜SP3,UATBが転
送される。これは、CTXBFMをすべて0にすることによっ
て指定される。 LDCTX命令では、CTXBからフェッチした新しいコンテキ
ストのCSWの中のCTXBFMを見て、CTXBの以下の部分のフ
ォーマットを判断し、指定されたものをロードする。 また、STCTX命令では、現在のCTXBFMの値を見て、指定
されたものをCTXBに退避する。ただし、CTXBFMの機能
は、<<L2>>となっており、将来の拡張である。つま
り、CTXB固定の仕様が<<L1>>,CTXB可変の仕様(上
位コンパチ)が<<L2>>である。 <<L1R>>のチップについては、SP1,SP2,UATBの転送
が不要なので、CTXBにもこれらの値は含めない。CTXBに
これらのレジスタ値が含まれているかどうかの識別は、
CTXBFMによって行なうことが可能である。ただし、CTXB
FMの実装が重い場合には、LDCTX,STCTX命令の追加オプ
ションにより直接CTXBのフォーマットを指定する仕様
や、LDCTX,STCTX命令の追加オプションによりCTXBFMの
有効性の有無を指定する仕様にすることも考えられる。 A8-3.ソフトウエアコンテキスト プロセスやタスク毎に持つ情報の中には、OSがソフトウ
エアによって管理する情報も含まれている。これらの情
報はOSによって一定していないので、当然ハードウエア
(LTCTX,STCTX命令)ではサポートできない。これらの
情報をソフトウエアコンテキストと呼ぶ。例えば、ITRO
Nの場合、タスク状態、終了時処理ルーチンのアドレ
ス、例外処理ハンドラのアドレス、wakeupのカウント、
キューの構成のためのリンク用領域などがソフトウエア
コンテキストに含まれる。 CTXBを論理空間(LS)に置いた場合には、汎用レジスタ
などのハードウエアコンテキストとソフトウエアコンテ
キストを同じように扱うことができる。しかし、ハード
ウエアコンテキストとして、CSなどの別空間を使用した
場合には、ソフトウエアコンテキストもCSに置くか(こ
の場合は、LDC,STCなどの命令が有効である)、あるい
は両者をポインタでつないでおいて間接参照するか、と
いった方法をとる必要がある。 付録9.「本発明装置」のEIT処理 EIT処理の概要は以下のとおりであるが、細部の仕様
は検討中である。 通常のプログラム実行の流れをハードウェア機構によっ
て中断し、それに割り込むような形で非同期に起動され
る処理を、「本発明装置」ではEIT処理と呼ぶ。 EIT処理には、次のようなものが含まれる。 ・内部割り込み(トラップ−trap) ・例外割り込み(例外−exception) ・外部割り込み(割り込み−interrupt) トラップ、例外、割り込みの区別は、プログラマから見
たそのEITの発生原因によって行なわれるものであり、
インプリメント上のメカニズムの違い(スタックに待避
される情報の違いなど)を意味するものではない。 プロセッサが命令実行中にEITを検出すると、シーケン
シャルな命令の実行を中断してEIT処理を開始する。EIT
処理では、EITを検出した時のプロセッサの状態をスタ
ックに待避し、EITハンドラを起動する。ここまでがプ
ロセッサのハードウエアによって行なわれる。一方、起
動されたEIT処理ハンドラでは、EITに応じてエラーの回
復、エラーメッセージの表示、エミュレーションなどの
処理を行なう。EIT処理ハンドラは、ソフトウエアによ
り実現されるものである。大部分のEITでは、EIT処理ハ
ンドラの最後でREIT命令を発行することにより、中断さ
れたもとの命令列に復帰し、処理を再開することが可能
となっている。 「本発明装置」では、将来の機能拡張を考慮し、未定義
の命令、不当な命令についてのエラー検出やエミュレー
ション用のメカニズムを強化する方針である。したがっ
て、命令フォーマットの組み合わせにより不当なオペレ
ーションになる場合や、インプリメントされていない機
能を実行しようとした場合には、できるだけエラーとし
て検出し、例外割り込みを発生する。 A9-1.EITの種類 「本発明装置」で発生するEITには、次のようなものが
ある。 [メモリ、アドレス関係] ページ不在例外(POE)…………「本発明装置」では発
生しない Page Out Exception(POE) 命令またはオペランドアクセス時のアドレス変換におい
て、UATB,SATB,STE,PTEのPIビットが0であった場合に
発生する。意味的には、ページ不在、ページテーブル不
在、セクションテーブル不在を含めたものである。いわ
ゆるページフォールトの例外である。 アドレス変換例外(ATRE) Address Translation Exception (ATRE) アドレス変換中のエラーによって発生する。具体的に
は、STE,PTEでreservedのビットパターンを使用してい
た場合、UATB,SATB,STE,PTEによって未使用領域となっ
ている部分を参照した場合、リング保護に違反したメモ
リアクセスを行なった場合などに発生する。EIT発生の
原因や詳細な情報は、ATRE発生時にスタックに積まれる
情報によって区別される。 バスアクセス例外(BAE) Bus Access Exception(BAE) 命令またはオペランドアクセスにおいて、一定時間以内
にバスからの応答がなく、メモリアクセスができなかっ
た場合に発生する。いわゆるバスエラーである。 奇数アドレスジャンプ例外(OAJE) Odd Address Jump Exception(OAJE) 分岐命令で、分岐先のアドレスが奇数であった場合に発
生する。 この例外は、ジャンプ先をオペランドとして直接指定す
る命令(JMP,ACB等)、スタックからリターンアドレス
を得る命令(RTS,EXITD,RRNG,REIT)、およびJRNG命令
で発生し、EIT処理の起動時には発生しない。EIT処理起
動時に新PCが奇数であった場合には、システムエラー例
外(SEE)となる。[JRNG,EITは詳細仕様調整中] [命令、演算関係] 特権命令違反例外(PIVE) Privileged Instruction Violation Exception(PIVE) ring0以外から特権命令を実行しようとした場合に発生
する。 <<L1>>機能例外(L1E) L1 function Exception(L1E) <<L1>>機能のインプリメントされていないプロセッ
サにおいて、<<L1>>の機能を実行しようとした場合
に発生する。 <<L1>>を実装しているプロセッサであれば、この例
外は発生せず、このEITに対するベクトツ番号はreserve
dとなる。 予約命令例外(RIE) Reserved Instruction Exception(RIE) 現在割り当てられていない命令やアドレッシングモード
のビットパターンを実行しようとした場合に発生する。
いわゆる未定義命令の例外である。 「本発明装置」32で64ビットのサイズを指定した場合、
Pビットを1にした場合、未実装の<<L2>>命令を実
行しようとした場合、未定義、未実装のオプションを指
定した場合も、これに含まれる。また、命令によって禁
止されているアドレッシングモードを使用した場合(JM
P命令におけるイミディエート指定など)や、インプリ
メントされていない段数の付加モードを使用した場合
も、これに含まれる。 予約機能例外(RFE) Reserved Function Exception(RFE) 命令やアドレッシングモードのビットパターン以外で、
将来の拡張のために予約されている機能を利用しようと
した場合に発生する。例えば、PSWに関しては、XAやres
erved(‘−’)のビットに1を書き込んだ場合、SMRNG
のフィールドにreservedの値(SM,RNG=001など)を書
き込んだ場合、非特権命令のLDPSB,LDPSMによってPSMや
PSBのreserved(‘−’)のビットに1を書き込んだ場
合などに予約機能例外(RFE)が発生する。このほか、
実装されていない制御レジスタをアクセスしようとした
場合や、WAIT命令でimask≧16を指定した場合にも、予
約機能例外(RFE)が発生する。 なお、「本発明装置」では、命令ビットパターン(アド
レッシングモードやサイズの指定を含む)のみでエラー
と判定できるものを予約命令例外(RIE)とし、アドレ
スやオペランド値によってエラーかどうかの状態が変化
するものを予約機能例外(RFE)としている。 コプロセッサ命令例外(CIE) Co-processor Instruction Exception(CIE) コプロセッサが接続されていないのに、コプロセッサ用
に割り当てられた命令を実行しようとした場合に発生す
る。 コプロセッサコマンド例外(CCE) Co-processor Command Exception(CCE) コプロセッサとのインタフェースでエラーがあった場合
に発生する。 コプロセッサ実行例外(CEE) Co-processor Execution Exception コプロセッサの命令実行においてエラーがあった場合に
発生する。 不正オペランド例外(IOE) Illegal Operand Exception(IOE) 不合理なオペランドの指定を行なった場合に発生する。
固定長ビットフィールド命令で32(64)ビット以上のwi
dthを指定した場合などがこれに含まれる。 奇数アドレスへのジャップやゼロ除算も意味的には不正
オペランド例外の一部と考えられるが、特別な意味を持
つために異なる例外に分類されている。 なお、「本発明装置」において命令のオペランドが不当
な場合の対策としては、不当オペランド例外やゼロ除算
例外とするケースのほかに、特にチェックを行なわない
ケース(CHK命令の上限値と下限値の大小関係など)、
適当な解釈をしてそのまま命令を実行するケース(シフ
ト命令でcountが大きい場合など)、などがある。一
方、命令を実行した結果が不当(オーバーフローなど)
な場合には、EITが起動されることはない。この場合
は、V Flagをセットして命令を終了するケース(ADD,MO
Vなど多数)、特に何もしないケース(UNPKssでのオー
バーフローなど)、などがある。 10進不正オペランド例外(DDE) Decimal Illegal OPerand Exception(DDE) 符号付き10進演算命令において、0〜9以外のデータを
オペランドとして指定した場合に発生する。この例外
も、意味的には不正オペランド例外(IOE)の一部であ
るが、別の例外に分類されている。 予約スタックフォーマット例外(RSFE) Reserved Stack Format Exception(RSFE) REIT命令によってEITから復帰する際に、EITスタックフ
レームのフォーマットを示す番号(FORMAT)が、REIT命
令で処理できないものであった場合に発生する。 リング遷移違反例外(RTVE) Ring Transition Violation Exception(RTVE) JRNG命令で外側のリングに移ろうとした場合、RRNG命令
で内側のリングに移ろうとした場合など、不当なリング
遷移を行なおうとした場合に発生する。 なお、JRNG命令で参照すべきJRNGVTEを含むページが不
使用領域となっていた場合には、リング遷移違反例外
(RTVE)ではなくアドレス変換例外(ATRE)の未使用領
域参照エラーが発生する。 ゼロ除算例外(ZDE) Zero Divide Exception(ZDE) 0除算を行なった場合に発生する。 [デバッグ] デバッグ例外(DBE) Debug Exception(DBE) デバッグに関係して発生する。 具体的には、命令のシングルステップ実行やブレークポ
イントを実現するための例外であるが、詳細な仕様は<
<LV>>である。 [トラップ] 無条件トラップ命令(TRAPA) TRAPA Instruction TRAPA命令により発生する。 TRAPAのEITベクトルは、TRAPAのオペランドvectorに対
応して16種類用意されている。 条件トラップ命令(TRAP) Conditional TRAP Instruction TRAP命令により発生する。 [DCE,DI] 遅延割り込み(DI) Delayed Interrupt(DI) DIレジスタ中のDIフィールドが、PSW中のIMASKフィール
ドよりも小さい値になった場合に発生する。 このEITは、コンテキストとは独立した非同期の事象を
処理するために有効である。 DI処理のEITベクトルは、各割り込み優先度毎に15種類
用意されている。 このEITは、REIT命令などの命令実行によって発生する
という点では例外であるが、その時実行中のコンテキス
トと関係なく起動されるという意味では割り込みであ
る。つまり、例外と割り込みの中間的なものである。
(IMASKフィールドを含むPSWはコンテキスト依存である
が、IMASKフィールドのみはコンテキスト独立として運
用されるのが普通である。) 詳しくは後の章を参照。 遅延コンテキスト例外(DCE) Delayed Context Exception(DCE) CSWレジスタ(あるいはDCEレジスタ)中のDCEフィール
ドが、PSW中のSMRNGフィールドよりも小さい値になった
場合に発生する。 この例外は、コンテキストに依存した各種の非同期の事
象(入出力の完了など)を処理するために有効である。 詳しくは後の章を参照。 [その他] リセット割り込み(RI) Reset Interrupt(RI) 外部からのリセット信号により発生する。 システムエラー例外(SEE) System Error Exception(SEE) EIT処理中に致命的なエラーが起きた場合に発生する。 [割り込み] 外部割り込み(EI) External Interrupt(EI) 外部からのハードウエア信号により発生する。 EITベクトルは外部から指定する。 一般に、外部割り込みのチェックは命令の切れ目で行な
われるのが普通である。しかし、「本発明装置」の場合
は、実行時間の上限の決まらない高機能命令(任意長ビ
ットフィールド命令、ストリング命令、QSCH命令)が存
在する。これらの命令では、命令の実行途中であっても
外部割り込みを受け付けるようになっている。 固定ベクトル外部割り込み(FVEI) Fixed Vector External Interrupt(FVEI) 外部からのハードウエア信号により発生する。 EITベクトルは優先度毎に一つずつ決まっている。 いわゆるオートベクトルの割り込みである。 以上のEITのうち、予約例外、不正例外、違反例外の区
別は次のような考え方によっている。 予約XXX例外機能拡張によって解消される可能性のある
もの 将来の機能拡張によって、例外ではなくなる可能性があ
る。 メーカー間のインプリメントの違いの出る場合がある。 不正XXX例外意味的に明らかにエラーであるもの 予約例外とは異なり、将来の機能拡張があっても、永久
の例外のままである。 メーカー間のインプリメントの違いは出ないところであ
る。 XXX違反例外リング保護の観点から実行を制限している
もの その他OSやシステム構成上の例外、複数の分類に当ては
まる 例外など A9-2.EITのオペレーション プロセッサがEITを検出すると、以下の手順にしたがっ
てEIT処理を行なう。ただし、リセット割り込み(R
I)、システムエラー例外(SEE)については、これとは
違った動作をする。また、以下の説明は「本発明装置」
32に限ったものであり、「本発明装置」64では、パラメ
ータ等が異なってくる可能性がある。 (E1)ベクトル番号の生成 プロセッサはそのEITに応じたベクトル番号をプロセッ
サ内部で生成する。ただし、外部割り込みEIの場合は、
プロセッサの外部(周辺LSIなど)からEITベクトル番号
を得る。 (E2)EITVTEの読み込み 「本発明装置」では、それぞれのEITに対する処理ハン
ドラの先頭アドレスと、EITのベクトル番号との対応を
示す表をEITベクトルテーブル(EITVT)と呼ぶ。また、
そのテーブルの一つのエントリをEITVTEと呼ぶ。「本発
明装置」のEITVTEは、EIT処理の自由度と拡張性を考慮
して8バイトとなっており、EIT処理ハンドラの先頭ア
ドレス(PC)だけでなく、PSWの一部のフィールドもセ
ットすることができる。そのため、EITVTEはPC+PSWに
準じた構成になっている。EITVTEのフォーマットは、第
353図のようになっている。 VS(Vector SM):EIT処理後のSM ただし、VSがそのままEIT処理後のSMとなるのではな
い。詳細後述。 VX(Vector XA):EIT処理後のXA 現在は0にreserved(違反時は無視) VAT(Vector AT):EIT処理後のAT VD(Vector DB):EIT処理後のDB VIMASK(Vector IMASK):EIT処理後のIMASK ただし、VIMASKがそのままEIT処理後のIMASKとなるので
はない。詳細後述。 VPC(Vector PC):EIT処理後のPC ‘=':0にreserved(違反時は無視) ‘−':0にreserved(違反時はシステムエラー例外) プロセッサは、(EI)で生成したEITベクトル番号に従
い、(EITベクトル番号)×8+EITVTB の物理アドレスにあるEITVTEを読み込む。 (E3)PSWの更新 読み込んだEITVTEをもとに、以下のようにPSWを更新す
る。 [外部割り込み以外の場合] min(VS,旧SM)==>新SM スタックポインタの選択。 EIT発生前にSPI以外のスタックポインタを使っていた場
合は、VSによってEIT処理ハンドラで使用するスタック
ポインタ(SP0またはSPI)が選択される。 EIT発生前に既にSPIを使っていた場合には、VSに関係な
く、EIT処理ハントラでもSPIをそのまま使う。 このような仕様になっているのは、EITがネストした場
合を考慮したためである。 旧RNG==>新PRNG OO==>新RNG EIT処理ハンドラは、必ずリング0で実行される。 なお、EITVTEには未使用のビットがあるので、将来的に
は、EITによってリング0以外のリングに入るような指
定をすることも可能である。 VX==>新XA 現在は0に固定されている。 VAT==>新AT EIT処理ハンドラの実行中は、アドレス変換の有無を切
り換えることができる。 VD==>新DB EIT処理ハンドラの実行中は、デバッグの環境を切り換
えることができる。 min(VIMASK,旧IMASK)==>新IMASK 例外割り込みや内部割り込みによるEITの場合でも、EIT
処理でIMASKを操作することができる。この機能を使え
ば、EIT処理に入るのと同時に外部割り込みを禁止する
ことができる。したがって、EIT処理と不可分に何らか
の処理(例えばEITによって生成されたスタックフレー
ムの転送など)を行ないたい場合に、この機能が有効で
ある。 [外部割り込みの場合] min(VS,旧SM)==>新SM 旧RNG==>新PRNG OO==>新RNG VX==>新XA VAT==>新AT VD==>新DB min(VIMASK,発生した外部割り込みの優先度)==>新
IMASK この部分のみ外部割り込み以外の場合とは異なってい
る。 この機能により、優先度の低い多重割り込みを禁止する
ことができる。 なお、割り込みマスクの機能により、 発生した外部割り込みの優先度<旧IMASK という関係が成立しているはずである。 (E4)プロセッサ情報のスタックへの退避 EIT発生前の旧PC、旧PSW、および発生したEITに関する
各種の情報(EITNF-EITベクトルやスタックフォーマッ
トなどを含む)をスタックに退避する。この退避に使用
されるスタックは、新SMと新RNG(=OO)により選択さ
れるスタックである。この時に生成されるスタックフレ
ームは、第354図のようになる。 このうち、EITINFは、発生したEITにより生成されるス
タックフレームのフォーマット(FORMAT)、EITのタイ
プ(TYPE)、EITのベクトル番号(VECTOR)などの情報
を32ビットに詰めたものである。追加情報の有無や内容
は、EITの種類によって異なる。REIT命令では、EITINF
中のFORMATを見ることによって追加情報の有無やそのフ
ォーマットを知り、EIT発生前のもとの命令列に戻るた
めの情報を得る。 なお、「本発明装置」64になった場合に生成されるEIT
のスタックフレームは、旧PCで1ロングワード、旧PSW
とEITINFを合わせて1ロングワード、という構成になる
予定である。 EITINFをPSWに隣接した場所に置いたのは、「本発明装
置」64でのアライメントの維持を考慮したためである。
また、PSWをスタックトップに置いたのは、将来「本発
明装置」64で、32ビットのコンテキストと64ビットのコ
ンテキストが混在した場合でも、スタック中に退避され
たPSW中のXAビットが読み出せるようにするためであ
る。 (E5)EIT処理ハンドラの起動 VPCをPCに転送し、EIT処理ハンドラを起動する。 なお、命令プリフェッチにおいて発生したEITは、ファ
ッチしようとした命令が必要になるまでEIT処理が遅ら
される。 これに対して、EIT処理ハンドラの最後に置かれたREIT
命令では、次のような処理を行なってもとの命令列に復
帰する。 (R1)スタックからの読み込み スタックより、旧PSWとEITINFを読み込む。読み込んだP
SW中のXAビットが0であれば、EITを発生したコンテキ
スト(タスクやプロセス)が32ビットのコンテキストで
あったということがわかるので、続いてスタックより32
ビット幅で旧PCを読み込む。なお、「本発明装置」32で
は、すべてのコンテキストが32ビットのコンテキストで
ある。 さらに、EITINF中のFORMATにより追加情報の有無を判定
し、追加情報があれば、スタックからそれを読み込む。
追加情報には、EXPC,IOINF,ERADDR,ERDATA,SPIなどがあ
るが、その詳細な意味はインプリメント依存である。 FORMATがプロセッサのサポートしていない値(EITで発
生するはずのない値)であった場合は、予約スタックフ
ォーマット例外(RSFE)となる。 (R2)PSWの復帰 スタックから読み込んだ旧PSWにより、PSWの全フィール
ド(SMRNG,XA,AT,DB,IMASK,PSM,PSB)をEIT発生前の値
に復帰する。この時、旧PSWがreservedの値を含んでい
た場合には、予約機能例外(RFE)を発生する。 (R3)ストアバッファの再実行(インプリメント依存) FORMATと追加情報の値によっては、REIT命令の中で、前
回EITを発生したストアバッファによるライトサイクル
の再実行を行なう場合がある。この時、ライトサイクル
の実行に必要なアドレスとデータの情報としては、スタ
ック上の追加情報の中にあったERADDRとERDATAが使用さ
れる。詳しくは、EITのタイプの説明の項を参照。 なお、ストアバッフアのみを再実行する機能があるかど
うかということは、プロセッサのインプリメント上の問
題である。すなわち、REIT命令のストアバッファ再実行
機能を前提としてEIT処理が作られている場合には、当
然REIT命令でそれをサポートする必要があるし、ストア
バッファのみの再実行機能が無くても矛盾のないEIT処
理が実現できていれば、REIT命令でそれをサポートする
必要はない。プログラマから見た場合は、EIT処理とREI
T命令による処理がきちんと対応しており、REIT命令に
よってEIT処理から戻った時に、EITを発生した命令列が
矛盾なく実行を続けられれば良いのである。この機能の
有無と、プロセッサとしての機能の高低とは直接関係し
ない。 (R4)EIT検出時に実行していた命令列への復帰 スタックから読み込んだ旧PCをPCに復帰し、PCの示す命
令から実行を再開する。 この時、EITINF中のTYPEフィールドによって、次に受け
付けられるEITのタイプを変化させている。この機能
は、多重EITの処理を矛盾なく行なうために、また命令
のシングルステップ動作を、エミュレーションによる実
行を含めて正確に行なうために利用される。 なお、EITINFのVECTORフィールドは、REIT命令では特に
使用されない。にもかかわらずVECTORがEITINFに含まれ
ているのは、EIT処理ハンドラのプログラムに対して情
報を提供するためである。 A9-3.EITのタイプ 「本発明装置」のEITを、EIT処理ハンドラ終了後の実行
再開時のPCの位置と、EIT処理の優先度に着目して分類
すると、以下のようになる。この分類は、EITINFのTYPE
フィールドの値にそのまま対応する。 [命令中断型EIT(TYPE=0,PC不定)] このEITが発生すると、直ちにそれが検出され、EIT処理
に入る。このEITが発生した場合、EITを発生した命令系
列に復帰することはできない。これに該当するのは、R
I,SEEである。 [命令完了型EIT(TYPE=1〜3,PC次命令)] このEITが発生すると、その時実行中の命令処理が完了
した後でそれが検出され、EIT処理に入る。一般には、
このEITに対するEIT処理ハンドラの最後でREIT命令を実
行することにより、EIT発生時に実行していた命令の次
の命令から、命令の実行を再開できる。なお、TYPE=1
〜3の区別は、優先度などの関係によるものである。こ
れに該当するのは、TRAP,TRAPA,DBE,DI,DCEなどであ
る。 [命令再実行型EIT(TYPE=4,PC現命令)] このEITが発生すると、プロセッサやメモリの状態は、E
IT発生時に処理していた命令の実行開始前の時点に戻さ
れる。一般には、このEITに対するEIT処理ハンドラの最
後でREIT命令を実行することにより、EIT発生時に実行
していた命令から、命令の実行を再開できる。これに該
当するのは、POE,ATRE,BAE,RIE,RFE,PIVE,IOEなどであ
る。 命令完了型のEITは、以前実行していた命令に関するEIT
であり、命令再実行型のEITは、現在実行中の命令に関
するEITである。したがって、複数のEITが同時に発生し
た場合には、一般に命令完了型のEITを先に処理する必
要がある。また、命令中断型のEITは重要度の高いEITで
あり、これが検出された場合には、他のEITを処理する
ことは無意味である。したがって、命令中断型のEITと
他のEITが同時に発生した場合には、命令中断型のEITを
先に処理する必要がある。結局、複数のEITが同時に発
生した場合の優先度は 命令中断型>命令完了型>命令再実行型となり、EITI
NFのTYPE=0〜4が、そのままEITの優先度を表わすこ
とになる。 EITの種類とTYPEとの対応は、RI,TRAPのように明確に決
まっているものもあるが、ある程度はインプリメント依
存の部分がある。したがって、ソフトウエアでEITの要
因を分析する際には、できるだけTYPEのフィールドを参
照したり、書き換えたりしない方がよい。 例えば、ページ不在例外(POE)の場合、これは命令再
実行型のEITであり、TYPE=4となるのが普通である。
しかし、メモリの書き込みにストアバッファを用いるよ
うなインプリメントのプロセッサにおいて、命令の最後
の書き込みサイクル(ストアバッファ使用)でPOEが発
生した場合には、この命令全体を最初から再実行しなく
ても、最後の書き込みサイクルのみやり直せば処理上の
矛盾は生じない。そこで、このようなケースでのPOEを
命令完了型のEITとし、エラーを発生した最後のライト
サイクルの処理はREIT命令の中で行なうという場合があ
る。この場合は、POEでもTYPE=1となる。また、EIT処
理でスタック積まれるPCは、POE発生命令ではなく次の
命令になる。 命令再実行方式に忠実にしたがう限り、命令実行中にエ
ラーが発生した場合は、命令実行前の状態に戻してTYPE
=4のEITを起動するというのが原則である。しかし、
命令がもう少しで終了するというところでエラーが発生
した場合には、一応命令を終わったことにしてTYPE=1
のEITを起動し、残りの処理(ストアバッファのライト
サイクル)はREIT命令に任せるというインプリメントも
可能なのである。このようなインプリメント方法をとる
のであれば、POEのTYPEが1と4の2通りになる。この
場合、TYPEの違いによってREIT命令で必要となる処理が
変わってくるので、REIT命令はそれに対応できるように
なっていなければならない。 この方法では、命令最後のライトサイクルで発生したエ
ラーによるEITに対して、命令全体を再実行するのでは
なく、最後のライトサイクルのみを再実行するという形
になっている。つまり、一種の命令継続実行方式になっ
ている。この場合、命令継続実行のために退避される内
部情報に相当するのが、EITの追加情報としてスタック
上に退避されるERADDRやERDATAである。 なお、ストアバッファを用いた書き込みサイクルで発生
するEITの場合、その書き込みを行なった命令の直後にE
IT処理に入るとは限らない。 A9-4.EITのスタックフォーマット EITの検出にともなって、EIT処理に必要な情報がスタ
ックに退避される。そのスタックフォーマットは第355
図の通りである。 PSW:EITを検出した時点のPSW Format:スタックフォーマット番号(8bit) Type:EITタイプ(8bit) Vector:EITベクタ番号(9bit) PC:EITハンドラからの復帰後の、実行再開アドレス この内、「その他の情報」は各EITのスタックフォー
マット番号に応じて異なり、EITの要因を解析するため
の情報、EITハンドラから復帰するための情報が含まれ
ている。スタックフォーマット番号に応じたスタックフ
ォーマットを第356図に示す。 PC:REIT命令でEITから戻った後に実行する命令の先頭ア
ドレス EXPC:EITの検出時に実行していた命令のPC。 IOINF:入出力に関する情報 Error Addr:EITを発生させたバスサイクルのアドレス Error Data:EITを発生させたバスサイクルのデータ(wr
iteのみ) SPI:EIT検出時のSPIの値 フォーマット番号0: 予約命令例外、予約機能例外、予約スタックフォーマッ
ト例外、リング遷移違反例外、<<L1>>命令例外、コ
プロセッサ命令例外、特権命令違反例外、不正オペラン
ド例外、固定ベクトル外部割り込み、遅延割り込み例
外、外部割り込み。 フォーマット番号1: バスアクセス例外、アドレス変換例外。 フォーマット番号2: デバッグ例外、奇数アドレスジャンプ例外、ゼロ除算例
外、条件トラップ命令、トラップ命令。 フォーマット番号3: DBG外部割り込み、DBGトラップ命令、DBGデバッグ例
外、DBGアクセス違反例外(つまりDBG EIT専用) EXPCは次のような目的で導入されたものである。 ・エラー解析情報の提供 −ストアバッファの書き込みの際にTYPE=1のEITが発
生したような場合、その書き込みを行った命令を指して
いるのがEXPCである。PCは先に進んでしまっている。 −デバッグ例外では、PCは次の命令を指し、EXPCは前の
命令を指している。したがって、例えば、ジャンプ命令
実行時にデバッグ例外を起動するようにした場合、EXPC
によってジャンプ前のPCの値を、PCによってジャンプ後
のPCの値を知ることができる。 ・多重EITの処理 −TYPE=1のTRAPAなどのEITの場合は、その処理ハンド
ラの中でEXPCの情報が必要になることはない。しかしな
がら、TYPE=1のEIT(TRAPAなど)とTYPE=2のEIT
(デバッグ例外など)が同時に発生した場合、TYPE=1
のEITにおいて、TYPE=2で使用するEXPCを退避してお
かなければならない。TRAPAでもEXPCを退避するような
仕様になっているのは、このためである。 この場合、TRAPAの処理に対するREIT命令実行後のEXP
Cは、REIT命令の先頭を指すのではなく、スタックから
ポップした旧EXPCの値を復帰したものになっていなけれ
ばならない。すなわち、REIT命令の直後になっていたデ
バッグ例外を起動した直後にペンディングになっていた
デバッグ例外を起動した場合、スタックに退避されるEX
PCは、REIT命令を指すのではなく、TRAPA命令を指すも
のでなければならない。(なお、この例は、TRAPAのEIT
VTEでデバッグ例外をマスクすることを想定したもので
ある。) また、IOINFの構成は第357図のようになっている。 =:‘0'にreserved WI:REIT命令におけるライトリトライの指示 メモリアクセス系のEIT(TYPE=1)で意味を持つ。 WI=0 ライトリトライ要 WI=1 ライトリトライ不要 MEL:アドレス変換例外の発生位置 0000 エラーなし 0001 アクセス権に関するエラー 0010〜1110 (reserved) 1111 1/O領域に関するアクセスエラー MEC:メモリアクセス関係のエラーのエラーコード 0000 エラーなし 0001 未使用領域参照エラー 0010 (reserved) 0011 (reserved) 0100 readに関するリング保護違反エラー 0101 writeに関するリング保護違反エラー 0110 executeに関するリング保護違反エラー 0111 (reserved) 1000 read時のバスアクセス不能 1001 write時のバスアクセス不能 1010 (reserved) 1011 (reserved) 1100 (reserved) 1101 I/O領域に対するメモリ間接アドレッシング 1110 I/O領域に対するexecute 1111 read時にI/O領域とI/O以外の領域をまたぐwrite
時にI/O領域とI/O以外の領域をまたぐ RW:バスサイクル種別 RW=0 write RW=1 read BL:バスロック状態 BL=0 バスロック中でない BL=1 バスロック中 PA:空間の指定 PA=0 (reserved)…論理空間(アドレス変換あり) PA=1 物理交換(アドレス変換なし) AT:EITが発生したバスサイクルのアクセスタイプ AT=000 データ AT=001 プログラム AT=010 割込みベクトルフェッチ AT=011〜111(reserved) SIZ:ライトリトライを行う際のデータサイズ 0000 (reserved) 0001 1バイト 0010 2バイト 0011 3バイト 0100 4バイト 0101〜1111 (reserved) A9-5.「本発明装置」のEITベクトル・テーブル 第358図に示す リセット割込みとDBGモードのEIT(No.0〜5)に関す
るEITテーブルのエントリはSPI値とPC値で構成される。
その他のEITに関するEITテーブルのエントリはPSW値とP
C値で構成される。 EITVBのリセット時の初期値は‘FFFFF000'であるた
め、リセット割込みでは物理番地の‘FFFF000'からエン
トリ(SPI,PC)がフェッチされる。 A9-6.EIT処理中のエラー EIT処理中(EIT発生から状態の退避を経て新PSWの設定
まで)に、別のEITが発生するような重大なエラーが起
きた場合には、システムエラー例外(SEE)となる。シ
ステムエラー例外(SEE)となる可能性があるのは、EIT
VTEの読み込みに伴うバスアクセス例外、旧PC、旧PSWの
退避に伴うスタックのページ不在例外、アドレス変換例
外などである。また、EITVTEのVPCを含むワードのLSBが
‘1'であった場合にも、システムエラー例外(SEE)と
なる。 システムエラー例外(SEE)の発生は、SPI,SPOのどちら
かのスタックを使用するかということには関係しない、
SPOのスタツクでページ不在例外が起った場合にも、SPI
のスタックに切り換えてあるいはページ不在例外のEITV
TEで指定されるスタックに切り換えて)、EIT処理中を
継続するという仕様になっていない。 一方、JRNGによるリング遷移はEITでないので、JRNGの
処理中にページ不在例外が起った場合には、ページ不在
例外のEITVTEで指定されるスタックを使って、ページ不
在例外のEIT処理中を行うことになる。この点で、EIT処
理中に含まれるTRAPAとEIT処理中に含まれないJRNGで
は、システムエラーとなるまでのステップが一段異なっ
ているので、注意が必要である。(第359図参照) いずれにしても、OSを作る場合には、SPIにより指定さ
れるスタック領域はメモリ常駐とし、SPOにより指定さ
れるスタック領域も、特殊な使い方をする場合を除けば
メモリ常駐となるようにプログラミングする必要があ
る。 A9-7.多重EIT TYP=0のEITを除けば、EITの検出とそれに対する処理
は、各命令の切れ目で行われる。したがって、場合によ
っては、命令の切れ目において複数のEITが同時に検出
される可能性がある。これを多重EITと呼ぶ。ここで
は、多重EITの処理順序について説明する。 例えば、TYP=0のTRAPAとTYP=3の外字割り込み(E
I)が同時に発生した場合、まずTRAPAに対するEIT処理
中が行なわれ、引続きEIに対するEIT処理中が行なわれ
る。その結果、PC,PSWとスタックの状態は第360図のよ
うになる。 したがって、この例では、EIT処理中終了後にまずEIの
処理ハンドラが実行される。EIの処理ハンドラが終了し
た後は、その最後に置かれたREIT命令により、一段浅い
レベルにある TRAPAの処理ハンドラに移る。つまり、優先度の高いTRA
PA処理ハンドラの方が後回しになるわけである。 ただし、上の例ではTRAPAのEIT処理中が先に行われるた
め、そこでPSWを変更してEIをマスクすることができ
る。つまり、TRAPAのEITVTEで VIMASK<EIの優先度 となるような指定を行っておけば、TRAPAのEIT処理中で
IMASKが変更され、EIに対するEIT処理中は行なわれなく
なる。この場合は、TRAPAの処理ハンドラが実行され
る。そして、ハンドラの最後のREIT命令でIMASKが元の
値に戻った時に、マスクされていたEIが起動されること
になる。 このように、優先度の高い(TYPEの小さい)EIT処理中
におけるPSWの更新によってマスクされるEITには、DBE,
EI,DI,DCEのEIT、つまりTYP=2〜3のEITがある。逆に
言えば、マスク可能なEIT(処理要求を保持することが
可能なEIT)が、優先度の低いTYP=2〜3になっている
わけである。 これに対して、TRAPAの場合は、EIT処理中要求を保持す
るレジスタやハードウエアは何も用意されていない。PC
も次の命令に進んでいるので、TRAPA命令を再実行する
こともできない。したがって、TRAPA命令実行直後にEIT
処理中を行わないと、EIT処理中要求が失われてしま
う。TRAPAをTYP=1の高い優先度にしているのは、この
たためである。 また、TYP=4のEITは命令再実行のEITであるため、他
のEITに対する処理が終わった後でもう一度同じ命令を
実行すれば、再び同じEITが発生する。命令実行型(TYP
=4)のEITが最も低い優先度になつているのは、この
ためである。したがって、多重EITの場合には、TYP=4
のEITの処理は行う必要がない。TYP=4のEIT起動要求
は、同時に発生しTYP=1〜3のEITの検出に伴ってキャ
ンセルされる。 REIT命令実行直後に受け付けられる。EITとは異なって
いる。REIT命令では、スタック中からポップされたEITI
NFの中のTYPEによって、REIT命令終了直後に受け付ける
EITわ調整している。REIT命令実行後に受け付けられるE
ITのTYPEは第361図の通りである。 このうち、TYPE=2はデバック例外(DBE)である。つ
まり、デバック例外に対するEIT処理中ハンドラのREIT
命令実行直後には、デバック例外を受け付けないという
ことを意味している。 REIT命令実行直後かどうかによって、TYPE=2のデバッ
ク例外の扱いが異なっているのは、1命令毎のシングル
ステップ実行を行うためである。この場合、デバック例
外に対するREIT命令の直後で再びデバック例外を起こし
ていたのでは、被デバックプログラムの実行が全く進ま
ずに、デバック例外のみが続けて発生するという状況に
なってしまう。したがって、上記メカニズムにより、RE
IT命令の直後い〃はデバック例外を発生せず、1命令実
行してからデバック例外を発生するようにしているので
ある。 一般に、シングルステップ実行を行う場合には、次に命
令を実行するか、デバック例外を起動するかの二つの内
部状態を持つ必要がある。「本発明装置」では、この二
つの状態を、REIT命令実行直後かどうかといった内部状
態と、EITのTYPEとの組み合せによって表現していると
考えられる。 なお、この考え方によるシングルステップ実行は、デバ
ック例外と同時にほかのEITが発生した場合にも適用で
きる。 予約命令例外(RIE)のEIT処理中ハンドラで命令エミュ
レーションを行う場合は、他のEIT(ページ不在など)
に対する処理ハンドラとは異なり、RIEの処理ハンドラ
の前後でデバック例外を起動しなければならない。例え
ば、シングルステップ実行後に 通常命令→デバック例外→ページ不在例外であれば次は
通常命令を実行する必要があるが、 通常命令→デバック例外→予約命令例外(エミュレーシ
ョン) であれば次はデバック例外の起動となる。これは、ペー
ジ不在例外がデバッガやデバック対象プログラムにとっ
て全く見えないものであるのに対して、エミュレーショ
ン例外は、デバッガ対象プログラムにとって「一命令の
実行」として見えるはずのものだからである。「本発明
装置」の場合は、予約命令例外のEIT処理中ハンドラの
中でEITINFのTYPEを調整することにより、以上のような
ことが可能である。 A9-8.「本発明装置」のDI A9-8-1.DIのオペレーション 「本発明装置」のDI(Delayed Interrupt)は、DIレジ
スタ中のDIフィールドがPSW中のIMASKフィールドよりも
小さい値になった場合に発生するEITである。この機能
は、コンテキストとは独立した非同期の事象をペンディ
ングとして処理要求だけを登録したり、処理順序をシリ
アライズしたりする時など有効なものである。 DI処理のEITベクトルは、各割り込み優先度毎に15種類
用意されている。IMASKの値と、そのフラグ変化のその
時に許可される外部割り込みとの関係は、第362図のよ
うになっている。 DIを起動するかどうかのチェックをする必要があるの
は、IMASKが大きくなった時、またはDIが小さくなった
時である。したがって、これに該当するのは、 LDC src,@psw;pswは制御空間中のPSWのアドレス LDC src,@imask;imaskは制御空間中のimaskのアドレス LDC src,@DI;DIは制御空間中のDIのアドレス REIT WAIT の各命令である。このうち、LDC srd,@di以外の場合に
は、これらの命令を実行する前のDIフィールドの値が、
起動されるDIのレベル(優先度)となる。DIのレベル
は、DIとして起動されるEITのベクトル番号に影響す
る。また、LDC srd,@diによってDIが起動された場合に
は、LDC実行前のDIフィールドの値ではなく、LDCによっ
て新しくセットされたDIフィールドの値(つまりscr)
が起動されるDIのレベルとなる。 なお、EIT起動時(外部割り込み、例外、TRAPすべて含
む)にもIMASKの変化するところがあるが、この場合に
はIMASKの値が大きくなることはないため、DIは起動さ
れない。 DIが起動された場合、DIフィールドは1111(要求なし)
にリセットされる。また、IMASKフィールドは、受理さ
れたDIのレベルを優先度とする外部割り込みが発生した
のと同じ変化をする。つまり、 min(VIMASK,受理されたDIのレベル)==> 新IMASK となる。 A9-8−2.DIの使用例 [例;本発明装置の遅延ディスパッチ(deiayed dispat
ch)] 本発明装置では、外部割り込み処理ハンドラの中から発
行したシステムコールによってレディキューの状態が変
わった場合に、それに伴うディスパッチング(レジスタ
の入れ替えなど)が割り込み処理ハンドラから戻るまで
遅らされる。これは、多重割り込みに伴う矛盾を避ける
ためである。これをDIの機能によって実現する。 前提条件 ・システムコールはTRAPAのEITVIEでは、VIMASKでは、V
IMASK=14を指定しておく。これは、DI機能によって、
システムコール処理の最後のディスパッチングを行うた
めである。 ・ディスパッチングの処理を行う部分は、DI14によって
起動される。 ・‘|'は実行中の状態を表し は実行を中断した状態を表す。 一般のシステムコール処理 第363図に示す 外字割り込み処理ハンドラからのシステムコール 第364図に示す DIの機能を使えば、本発明装置の遅延ディスパッチの処
理をすなおに実現することができる。また、多重割り込
みやシステムコールのネストが起こった場合にも容易に
対処できる。 A9-9.本発明装置のDCE A9-9−1.DCEのオペレーション 本発明のDCE(Delayed ontext Exception)は、DECレ
ジスタ(またはCSWレジスタ)中のDCEフイールドよりも
小さい値になった場合に発生するEITである。この機能
は、コンテキストに関連した非同期の事象(入出力の完
了など)の処理をペンディングとして処理要求だけを登
録したり、処理順序をシリアライズしたりする時などに
有効なものである。 DECレジスタ(またはCSWレジスタ)中のDCEフィール
ドは、DCE要求を入れるためのフィールドは、DCE要求を
入れるためのフィールドである。 DECレジスタ(またはCSWレジスタ)はコンテキスト毎に
固有のレジストであるため、コンテキスト毎に別々のDC
E要求を与えることが可能である。 DCEは各コンテキストに付随したものであるから、コン
テキストとは独立した外部割り込みの処理中(SM=0の
場合)には、DCEは起動されない。 また、他のコンテキストAでより高い優先度のDCE要求
が出ていても、そのコンテキストAにディスパッチされ
ない限り、コンテキストAのDCEは起動されない。別の
コンテキストBで出ているDCE要求がそれより低い優先
度あつたとしても、コンテキストBに先にディスパッチ
されれば、コンテキストBのDCEが先に起動される。 DCEフィールドの値と、その時に起動されるDCEとの関係
は第365図のようになつている。 いずれの場合にも、SMRNG>DCEとなつた時にDCEが起
動される。 (reserved)の指定をした場合、実際にはDCE=000と同
じ動作をする。ただし、将来の拡張のため、この機能を
利用したプログラミングを行なってはいけない。 DCEの起動される可能性があるのは、SMRNGが大きくな
つた時、またはDCEフィールドの値が小さくなった時で
ある。したがって、この条件に該当する以下の命令にお
いて、DCEを起動するかどうかのチエックをする必要が
ある。 LDC src,@psw;pswは制御空間中のPSWのアドレス LDC src,@smrng;smrngは制御空間中のSMRNGのアドレス LDC src,@dce;dceは制御空間中のDCEのアドレス LDC src,@csw;cswは制御空間中のCSWのアドレス ;ただし、CSWは実装されない場合がある。 REIT RRNG なお、EIT起動時(外部割り込み、例外、TRAPすべて含
む)やJRNG実行時にもSMRNGの変化することがあるが、E
ITやJRNG場合はSMRNGの値が大きくなることはないた
め、DCEが起動されることはない。 DCE自体は、一つのEIT処理として起動される。DCEのEIT
が起動された場合、DCEフィールドは111(要求なし)に
リセットされる。SMRNGフィールドは、一般のEIT処理と
同じように、DCEのベクトル番号に割り当てられたEITVT
Eにしたがって変化をする。DCEはコンテキスト毎の処理
であるため、起動されたEIT処理ハンドラでは、SPIでは
なくSPOを使用するのが普通である。EITVTEの設定によ
っては、DCE処理でSM=0(SPI使用)に入ることも可能
であるが、これは運用上の問題として対処し、ハードウ
エアでは特にチエックは行なわない。 REIT命令やRRNG命令によつてDCEが起動された場合、実
際にDCEを起動する処理はREITやRRNGと同時に行なわれ
てもよいが、動作仕様上は、一旦REITやRRNGの実行が終
わってからEIT起動するという形になる。たとえば、DCE
=110の時にRRNGでring1からring3に戻ると、そこでDCE
が起動されてring0に入る。この時、PRNGはring1ではな
くring3となっていなければならない。DCEとDIや外部割
り込みを比較すると、第366図のようになる。 入出力の完了通知などの場合には、外部割り込み処理
ルーチンの中で、該当するコンテキストDCEを起動する
という流れになることもある。 DCEをソフトウエアによってシュミレーションすること
は不可能ではないが、一般には、スタック上に退避され
たPSWやPCの変更をしなければならないため、かなり面
倒である。割り込んだプログラロムが、割り込まれたプ
ログラムのスタくックハフオーヘマツトをすべて知って
いなければならなにいからである。 A9-9−2.DCEのネスト DCEは多重ネストができるとより効果の大きいものに
りなる。したがって、DCE要求が複数発生した場合に、
どのような処理をするかが問題となる。 本案装置では、ネストの処理(要求のキユーイング)は
ソフトウエアで行なう方針である。 <<複数のDCE要求のキューイング処理例>> 〔DCE要求設定時〕 if(DCE=111)then 新しいDCE要求==>DCEフィールド/*DCE要求これだ
け*/ else 新しく発生したDCE要求を、リング順に構成されたDCE要
求キユーに入れる endif 〔DCE処理時〕 /*DCE起動の際、ハードウエアにより111==>DCEと
なる*/ if(DCE要求キユーが空でない)then DCE要求キユーの次のエントリをDCEフィールドにセット endif A9-9−3.DCEの使用例 〔例;入出力管理プログラムの起動〕 外部割り込みによって入出力完了が通知され、それに
よって、プロセスAの入出力管理部(ring1)がプロセ
スAに対して非同期に起動されるものとする(第367図
参照)。 ・‘|'は実行中の状態を表し は実行を中断した状態を表す。 の開始アドレスはプロセス(コンテキスト)毎に指定
されるべきものだが、実際にはDCEのEIT処理ベクトルが
プロセス間で共通であるため、OSでプロレス毎のDCE要
求テーブルを解析し、そこへジヤンプする必要がある。 この図の場合は、外部割り込みが発生した時にたまたま
プロセスAが実行中だつたわけである。他のプロセスの
実行中に入出力の外部割り込みが発生した場合、ring1
の入出力管理部の起動は、プロセスAへのデイスパッチ
が行なわれるまで遅延させられる。 付録10.本発明装置の命令ビットパターン 〔表記法に関する注意〕 命令ビットパターンの表記は、次のように行なう。 ‘−’ 0にreserved(違反時例外発生) ‘+’ 1にreserved(違反時例外発生) このビットが0(1)であれば処理が正常に行なわれ、
このビットが1(0)であれば予約命令例外(RIE)を
発生する。 ‘=’ 0にreserved(違反時も無視)...Ver0.87の
‘*’ ‘#’ 1にreserved(違反時も無視) ユーザへのマニュアルには、将来の拡張のためこのビッ
トを0(1)にしておくように明記する。実際には、こ
のビットが0(1)であっても1(0)であっても動作
は同じである。 「違反時も無視」というのは、アーキテクチャ上あまり
好ましいことではないが、命令ビットパターンの割り当
て、将来の拡張性、命令の高速実行の上からやむを得な
い場合がある。 ‘〜’ 0にreserved(違反時動作を保証しない) ‘!' 1にreserved(違反時動作を保証しない) ユーザへのマニュアルには、将来の拡張のためこのビッ
トを0(1)にしておくように明記する。実際には、こ
のビットが0(1)の場合は正常な動作を行なうが、1
(0)の場合の動作はインプリメントに依存して異なっ
ている。 「違反時動作を保証しない」というのは、アーキテクチ
ャ上あまり好ましいことではないが、インプリメントや
命令ビットパターンの割り当て、命令の高速実行の上か
らやむを得ない場合がある。例えば、LDATE,MULXの第一
ハーフワードの‘!R'がこれに該当する。 A10-1.命令のフォーマット別ビット割り当て 〔ビット割り当てに関する注意〕 ・本発明装置では、使用できるアドレッシングモードが
命令毎にかなり異なっており、そのチェックをする必要
がある。チェックを容易にするため、許されるアドレッ
シッグモードが区別しやすいようにビットパターンの割
り当てを行なう。特定のアドレッシングモードを禁止し
ているオペランドの場合は、原則として、それがそのオ
ペランドを含むハーフワードだけで分かるようになって
いる。 ・Pビットは、原則としてオペランド毎(レジスタ直接
指定とイミディエート指定を除く)、および暗黙のスタ
ック参照について一つずつ独立に入れる。命令パターン
中では、‘P'または‘Q'で表す。 ただし、一般形の命令でカバーできる場合は、同じ命令
の短縮形ではPビットが入らないこともある。(PUSH,P
OP,PUSHAのみは、スタック参照に関するPビットがな
い。) ・ビットパターンのうちLVreservedで示されているもの
は、各メーカーで自由に使用してよい命令ビットパター
ンである。この命令ビットパターンは、例えばICEとの
インターフェースを行なうための、ユーザに解放しない
命令として利用することができる。 以下第368図に示す。 A10-2.予約命令例外の検出について 上記のビットパターン中で{RIE}で示されたパターン
は、将来の拡張のために予約された(reserved)のビッ
トパターンである。この命令ビットパターンを実行する
と、予約命令例外(RIE)は発生する。このほか、イン
プリメントされていないオプションやサイズ(未実装の
<<L2>>を含む)を指定した場合、未定義のオプショ
ンを指定した場合、命令ビットパターンの‘−’の部分
を‘1'にした場合、命令ビットパターンの‘+’の部分
を‘0'にした場合、命令中の‘P',‘Q'のビットを‘1'
にした場合、reservedの条件(cccc)や終了条件(eee
e)を指定した場合にも、すべて予約命令例外(RIE)と
なる。現在、LDATE,MULXなどの例外を除けば、原則とし
て第一〜第四バイトについてはすべての命令パターンを
チェックし、パターンが違っている場合には、RIEにし
ている。第五、第六バイトについてはチェックを行わ
ず、パターンが違っていてもエラーとはしていない。 上記のビットパターンのうちで、特に{RIE-X}で示し
たものは、第一HWが汎用アドレッシングモードを含み、
第二HWまで読まないとRIEであることがわからないビッ
トパターンである。この場合は、第一HWのEaの拡張部の
後に第二HWが置かれる。現在使用していないビットパタ
ーンのうち、将来の機能拡張にともなって実装の予定の
あるパターンや、他のメーカーのチップと動作の異なり
そうなパターンについては、特に積極的に検出を行なう
べきである。これは、その命令パターンを実行した場合
の間違いを防ぐためである。このような方針に基づいて
場合、予約命令の例外(RIE)のチェックの優先度は次
のようになる。 ↑高優先度 (既に意味が決まっているもの) 未定義の<<L2>>機能の指定 64ビットサイズの指定(RR,MM,WW,SS=11) (命令の拡張に利用される可能性の高いもの) {RIE}となっている命令パターンの指定 BVPAT〜BVSCHの‘+X'の‘+’ PSTLB〜EXITD:Gのグループの第二HWの‘−’ Pビット指定 (命令の拡張にはまず利用されないもの) LDATE〜INDEXのグループの第一HW‘!R'の‘!' STATE〜QINSのグループの第二HW‘+W'の‘+’ PSTLB〜EXITD:Gのグループの第一HW‘+X'の‘+’ ACB:R,SCB:Rの第二HWの‘−’ ↓低優先度 現在チェックすべきビットパターンは前述のような仕様
になっているが、今後、このような方針に基づいて予約
命令例外の検出に関する詳細仕様の調整を行ない、一部
は変更の行われる可能性がある。 なお、命令をどこまで読んだ時にEITを起動するかとい
うことは、特に規定しないものとする。第一HWだけでEI
Tを起動することが明らかである場合にも、第二HWまで
読んでもよい。また、オペコード部だけでEITを起動す
ることが明らかである場合(予約命令例外など)に、Ea
の拡張部まで処理しても構わない。 A10-3.オペランドフィールド各索引 第369図に示す。 A10-4.アドレッシングモードのビット割り当て共通ビッ
トパターン ・サイズ関係 01 16bit 10 32bit 11 64bit ・アドレッシングモード00 @reg+など01 16bit相対間接モード10 32bit相対間接モード11 付加モード ・レジスタ指定00 (特殊)01 (SP)10 absまたは011 PC 付加モード EI<Rx>MS PXXD<d4> ‘−’は0にリザーブされるビット **<Rn>0* *XX***** Rnがインデクス ** −01* *−***** インデクスなし ** −11* *−***** RCがインデクス XX≠00によるスケーリングは利用できない ******** ***0<d4> 4ビットディスプ
レースメント ******** ***1-01 16ビットディスプレー
スメント ******** ***1-10 32ビットディスプレー
スメント ******** ***1-11 64ビットディスプレー
スメント <d4>のサイズ指定部分とMISCモードのdisp:16,disp:3
2の指定部分が同じビット位置になっている。 基本モード P000 xxxx MISC P=0:Sh 0000 {RIE} 0001 {RIE} 0010 {RIE} 0011 {RIE}−@ads:640100 @SP+(read:@sp+,write:illegal,rmw:illega
l)01 01 @SP+(write:illegal,read:@sp+,rmw:illega
l) 0110 {RIE} 0111 {RIE} 1000 {RIE}1001 @ads:161010 @ads:321011 絶対付加モード1100 Imm+(read:@sp+,write:illegal,rmw:illega
l)1101 @(disp:16,Rn)1110 @Rn1111 @(disp:32,Rn) 0001<Rn> Rn Sh 1001 xxxx {RIE} P010<Rn> @(disp:16,Rn) P=0:Sh P011 <Rn> @Rn P=0:Sh P100 <Rn> @(disp:32,Rn) P101 <d4> @(disp:4,FP) <<L2>> P110 <Rn> レジスタ相対付加モード P111 <d4> @(disp:4,SP) <<L2>> ・***1 ****のパターンの時には拡張部が付かな
い。 ・@ads:64の割り当てが変則的であるが、64ビット拡張
部に対しては、おそらく内部の回路でも特殊な扱いが必
要であると思われる(例えば、本発明装置でも@(dis
p:64,Rn)は基本モードで実現できない)ので、それほ
ど問題ではないと思われる。むしろ、付加モードとの関
係が統一的になるようにした。 未定義のアドレッシングモードを指定した場合(EA中の
Pビット=1を含む)には、予約命令例外(RIE)とな
る。具体的には、以下のパターンの場合にRIEとなる。 〔Ea〕 〔Sh〕 0000 00** 00 00** 0000 011* 00 011* 0000 1000 00 1000 0101 ****(<<L2>>未実装時のみ) 0111 ****(<<L2>>未実装時のみ) 1*** **** 付加モードでリザーブのパターンを指定した場合にも、
予約命令例外(RIE)となる。M=1で<Rn>≠0000,00
01の場合、D=1で<d4>≠0001,0010以外の場合、P
=1の場合、XX=11の場合もこれに含まれる。 付加モードのある段で、PCに対して、×2、×4、×8
以外のスケーリングを指定した場合には、その段の終了
処理後の中間値として、インプリメントに依存した不定
値が入る。EITにはならない。<<L2>>未定義で、5
段以上の付加モードを指定した場合にも、予約命令例外
(RIE)となる。〔詳細調整中。予約機能例外RFEとなる
可能性もある。〕 命令によって使用できないアドレッシングモードの組み
合わせを指定した場合(JMP #imm-data,CMP #0,#
1など)にも、予約命令例外(RIE)となる。 <<L2>>未実装のために実行できない組み合わせを指
定した場合も、これに含まれる。(これに当てはまるも
のは、レジスタ指定のビットフィールド命令である。) A10-5.命令オプションのビット割り当て いずれの場合にも、最初に記述した方(オプション値
が0,00..の方)がアセンブラでのデフォルトになる。 cccc Bcc,TRAP/ccでの条件指定 eeee ストリング命令、QSCH命令での終了条件指定 p,q.. Pビット指定(Q..は、Pビットの必要なオペ
ランドが複数の場合) b /F=0,/B=1(BSCH,BVSCH,BVMAP,BVCPY,SCMP,
SMOV,QSCH) r /F=0,/R=1(SSCH) c /N=0,/S=1(CHK)‐CHK,change index valu
eの‘c' d /0=0,/1=1(BSCH,BVSCH)‐dataの‘d' m /NM=0,/MR=1(QSCH)‐maskの‘m' p /AS=0,/SS=1(PTLB,PSTLB,LDATE)‐PTLB,s
pecific spaceの‘p' ttt /PT=000,/ST=001,/AT=110,{RIE}=010〜1
01,111(PSTLB,LDATE,STATE) xx /LS=00,/CS=01,{RIE}=10,11(LDCTX,STCT
X) A10-6.Bcc命令、TRAP/cc命令の条件指定(cccc) ccccの値の割り当ては、第370図のようになる。 A10-7.終了条件の指定(eeee) eeeeの値の割り当ては、第371図のようになる。 0000〜0101については、cccc(Bcond命令の条件指定)
のビットパターンに意味を合わせてある。特に、LTU,GE
Uは、SUBX命令などにおいて、オペランドを符号なしデ
ータと考えた場合の比較結果がX flagに反映されるのに
合わせたものである。 なお、<<L2>>の終了条件のうち、二つの条件が.or.
で結ばれているものについては、そのうちのいずれの条
件で終了したかを示すために、M flagを使用する。M fl
agがセットされるのは、原則としてR4との比較によって 終了した時であり、具体的には第372図のような場合で
ある。 M flag=1の条件を満たさなかった場合、および、これ
以外の終了条件で終了した場合には、M flag=0とな
る。<<L2>>の終了条件をインプリメントしない場合
には常にM flag=0となるが、その場合でも、将来はM
flag≠0となる場合が生じるということを、マニュアル
に明記しておくのが望ましい。 A10-8.BVMAP命令の演算コード R5の下位4ビットに入れる演算コードである。 これを第373図に示す。 A10-9.アドレッシングモード対応 各命令のオペランドと、禁止されているアドレッシング
モードモードとの対応を第374図に示す。 ○の組み合わせに対しては、そのアドレッシングモード
モードが使用可能である。 ×の組み合わせに対しては、それを実行しようとした場
合に予約命令例外(RIE)が発生する。 付録11.高機能命令の詳細仕様と終了時のレジスタ値 各命令の解説の項では、高機能命令の詳細や終了時のレ
ジスタ値について明確に述べられていないので、ここで
まとめて説明を行なう。 A11-1.高機能命令の仕様決定の方針 SMOV/B,SCMP/B,BVMAP/B,BVCPY/Bでは、@‐SPとの対応
などからプリデクリメントの形で処理を行なうという考
え方と、SMOV/F,SSCH/Rなどとの整合性からポストデク
リメントの形で処理を行なうという考え方とがある。例
えば、H′100〜H′1ffの領域をSMOV/B.Bによって転送
する場合、SMOV/Bがプリデクリメントの仕様であればレ
ジスタの初期値はH′200となるし、SMOV/Bがポストデ
クリメントの仕様であればレジスタの初期値はH′1ff
となる。 [ポストデクリメントのデメリット] SMOV/FとSMOV/B,SCMP/FとSCMP/Bとの対称性が悪くな
る。例えば、H′000000ffまでの領域を占めるストリン
グに対してSMOV/Bを実行する場合、SMOV/B.Bであればポ
インタの初期値としてH′000000ffを設定し、SMOV/B.W
であればポインタの初期値としてH′000000fcを設定す
る必要がある。 [プリデクリメントのデメリット] SSCH,BSCHなどのサーチ系の命令との整合性が悪くな
る。もし、SSCHで、命令終了後のポインタ最終値が必ず
終了条件成立のエレメント(サーチ結果のエレメント)
を指すという原則を設けるとすると、/F,/B,/Rといった
処理方向によってプリ更新/ポスト更新を変えることは
できなくなる。したがって、/Bのみプリデクリメントと
するわけにはいかない。(実際にはSSCH/Bは存在しない
が、BSCH/Bなどの仕様との関連がある) TRONCHIPでは、[ポストデクリメントのデメリット]の
方を重視し、SMOV/B,SCMP/Bではプリデクリメントの仕
様にする。 次に、SMOV,SCMP,SSCHが終了条件によって終了した場
合、ポインタの更新を行なってから命令を終了するか、
ポインタの更新前に命令を終了するか、という問題があ
る。 [ポインタの更新前に命令を終了するデメリット] エレメントサイズによって命令を終了する場合には、ポ
インタの更新が行なわれ、ポインタが次のエレメント
(/Fの場合はまだ処理の終わっていないエレメント)を
指すようになってから命令を終了するので、その仕様と
は合わなくなる。つまり、終了条件が成立するかどうか
によってポインタを更新して良いかどうかの状況が変わ
るため、仕様がわかりにくくなる上、高速なインプリメ
ントが難しくなる。 また、SSCHで、サーチが成功してから連続して次のサー
チを行なう場合には、次のSSCH実行前に別命令でポイン
タの更新が必要になる。SMOV,SCMPでも同様である。 [ポインタの更新後に命令を終了するデメリット] 命令実行後のポインタ値が終了条件(サーチ条件)成立
のエレメントよりも進んでいるので、SSCH命令としては
すなおな仕様ではない。BVSCH,BSCH命令の仕様とも合わ
ない。 TRONCHIPでは、[ポインタの更新前に命令を終了するデ
メリット]の方を重視し、終了条件成立の場合には、ポ
インタの更新後に命令を終了するという仕様にする。し
たがって、SMOV/F,SCMP/F,SSCH/F,/R命令終了後のポイ
ンタは、終了条件の成立したエレメントの次のエレメン
トを指すことになる。また、SMOV/B,SCMP/B命令の場合
はプリデクリメントでポインタを更新するため、命令終
了後のポインタは終了条件の成立したエレメントを指す
ことになる。 SMOV/B,SSCMP/Bとの仕様を合わせるという意味で、BVMA
P/B,BVCPY/Bの場合にも、演算の対象となるビットフィ
ールドの最大オフセット+1をR1,R4で指定する。 ただし、BVSCH,BSCHについては、命令終了後のビットオ
フセットが直接サーチ対象のビットを指している方が便
利だと考えられるため、/F,/Bともそのような仕様にす
る。また、QSCHについては、ポインタがプリ更新となっ
ているため、SSCH,BSCHとはポインタ更新のタイミング
が異なっている。結局、BSCH/F(BVSCH/F),SSCH/F,QSC
H/Fのサーチのパターンをまとめると、次のようにな
る。 BSCH/F 現在ポインタの指しているものからサーチす
る。 サーチ終了後のポインタは、見付かったデータを指す。 SSCH/F 現在ポインタの指しているものからサーチす
る。 サーチ終了後のポインタは、見付かったデータの次を指
す。 QSCH/F 現在ポインタの指している次のものからサーチ
する。 サーチ終了後のポインタは、見付かったデータを指す。 ストリング命令の場合、エレメント数R2は符号なしの数
として扱われる。これは、R2を符号なしと考えることに
より、R2=0の指定によってエレメント数をH′100000
000と解釈し、エレメント数による終了を行なわないよ
うにできるためである。この機能は、言語Cのstrcmp関
数の実現などに利用できる。また、インプリメント上
も、R2を符号なしと考える方がエレメント数による終了
の判定が楽になる。 一方、ビットフィールド命令のwidthは、以下のような
理由により、固定長ビットフィールド命令、任意長ビッ
トフィールド命令とも符号付きとして扱うことにする。 ・命令実行時、ビットフィールド命令のwidthはoffset
に加算される形になるが、offsetは符号付きである。wi
dthを符号なしとすると、符号付きと符号なしの数を足
すことになり、すっきりしない。 ストリング命令のエレメントサイズの場合は、サイズを
乗じた上でポインタに加算するのであるから、符号なし
の方が自然である。 ・命令実行の上で符号付きか符号なしかの違いが出てく
るのは、任意長ビットフィールド命令でwidthがH′800
00000〜H′ffffffffの場合である。widthを符号付きと
しておけば、widthがこの値の時V flagをセットするだ
けで命令を終了するが、widthを符号なしとした場合に
は、widthがこの値の時もビットフィールド操作を行な
うことになる。しかし、widthがH′80000000〜H′fff
fffffだとすると、offset+widthの値を符号付きとして
扱う場合には既にオーバーフローしているし、offset+
widthを符号なし(あるいは33ビット符号付き)として
扱う場合にも、offsetの値によってはオーバーフローす
る。 オーバーフローに関しては、「offset+widthがオーバ
ーフローした場合には動作を保証しない」となっている
のであるから、同じようなインプリメントをするのであ
れば、widthを符号なしとしても「動作を保証しない」
ケースが増えるだけである。 widthを符号なしとして、しかもwidth>H′80000000の
場合の動作を保証するのであれば、ハードウエアの負担
を伴う。 ・ストリング命令の場合は、終了条件によって命令を終
了する場合があったため、エレメントサイズによる終了
をしたくない時に0を設定するという使い方がある。0
で無限大(H′100000000)を表現するには、どうして
もエレメントサイズを符号なしとして扱う必要があっ
た。これに対して、BVMAP,BVCPYではwidth以外に命令終
了の要素がないため、プログラミング上、widthとして
必ず意味のある値を設定することになる。その場合は、
「レジスタ上の値は原則として符号付きの数と考える」
という原則に合わせる方が自然である。 [ストリング命令、任意長ビットフィールド命令の基本
原則のまとめ] ・サーチ系の命令では、ポインタ更新のタイミングはサ
ーチ方向に依存しない。 BSCH,BVSCHでは、/F,/Bともサーチ終了後のポインタは
見付かったビットを指す。 SSCHでは、/F,/Rともサーチ終了後のポインタは見付か
ったエレメントの次のエレメントを指す。 ・実際にデータを操作する命令では、/Fの場合にポスト
インクリメント、/Bの場合にプリデクリメントの形で処
理を行なう。 これに該当するのは、SMOV,SCMP,BVMAP,BVCPYである。 SSTR,BVPATは/Fのみであるが、やはり同じ原則にあては
まる。 ・ストリング命令では、エレメントサイズは符号なしと
して扱われ、‘0'の場合はH′100000000を表わす。一
方、任意長ビットフィールド命令では、widthは符号付
きとして扱われ、widthがH′00000001〜H′7fffffff
の場合にのみ実際のビットフィールド操作を行なう。 A11-2.ストリング命令の詳細仕様 SMOV SMOVのオペレーションをまとめると、次のようになる。
ただし、最終的な結果が同じであれば、メモリアクセス
の順番が下記のものと異なっていても構わない(他の高
機能命令も同様)。また、srcとdestがオーバーラップ
していた時に、正しくない方のオプションを使用した場
合(src<destで/Fを使用した場合、およびsrc>destで
/Bを使用した場合)の動作も、下記の通りでなくてもよ
い。 [SMOV/Fのオペレーション] 0==>V flag repeat R2-1==>R2 mem[R0]==>mem[R1]==> temp R0+size==>R0 R1+size==>R1 compare temp with R3,R4 and set F flag,M flag acc
ording to eeee /*終了条件成立の場合 F flag=1となる*/ if(F flag=1)then exit check interrupt until(R2=0) 1==>V flag [SMOV/Bのオペレーション] 0==>V flag repeat R2-1==>R2 R0-size==>R0 R1-size==>R1 mem[R0]==>mem[R1]==> temp compare temp with R3,R4 and set F flag,M flag acco
rding to eeee /*終了条件成立の場合 F flag=1となる*/ if(F flag=1)then exit check interrupt until(R2=0) 1==>V flag SMOVでは、R2の初期値が何であっても、かならず1個以
上のエレメントは処理される。 SMOVの終了要因をまとめると、次のようになる。 1.エレメント(データ)数(R2)による終了エレメント
数によって命令を終了した場合には、V flag=1とな
る。2つのケースとは同時には起こらない。 2.終了条件による終了 この時は、F flag=1となる。終了条件を満足したエレ
メントの転送も行なわれる。 SCMP SCMPでは、エレメント数による命令の終了と終了条件に
よる命令の終了のほかに、比較データの不一致によって
命令を終了することがある。SCMPでデータの不一致によ
り命令を終了した場合にも、終了条件により命令を終了
した場合と同様に、ポインタの更新が行なわれてから命
令が終了する。SCMPでは、エレメント数による終了要因
と他の終了要因とが同時に発生することはないが、終了
条件とデータ不一致の終了要因が同時に満たされる可能
性はある。 SCMPがエレメント数によって終了した場合には、次のエ
レメントの比較は行なわず、次のエレメントが不一致ま
たは終了条件成立であっても、V flag=0,F flag=0,Z
flag=1として命令を終了する。 SCMPのオペレーションをまとめると、次のようになる。
ただし、最終的な結果が同じであれば、メモリアクセス
の順番が下記のものと異なっていても構わない。これと
等価の動作をすればよい。 [SCMP/Fのオペレーション] 0==>V flag repeat R2-1==>R2 mem[R0]==>temp1 mem[R1]==>temp2 R0+size==>R0 R1+size==>R1 compare temp1 with temp2 and set Z flag,L flag,X
flag /*データ不一致の場合Z flag=0となる*/ compare temp1 with R3,R4 and set F flag,M flag ac
cording to eeee /*終了条件成立の場合F flag=1となる*/ if(F flag=1.or.Z flag=0)then exit /*終了条件またはデータ不一致による終了*/ check interrupt until(R2=0) 1==>V flag [SCMP/Bのオペレーション] 0==>V flag repeat R2-1==>R2 R0-size==>R0 R1-size==>R1 mem[R0]==>temp1 mem[R1]==>temp2 compare temp1 with temp2 and set Z flag,L flag,X
flag /*データ不一致の場合Z flag=0となる*/ compare temp1 with R3,R4 and set F flag,M flag ac
cording to eeee /*終了条件成立の場合F flag=1となる*/ if(F flag1.or.Z flag=0)then exit /*終了条件またはデータ不一致にる終了*/ check interrupt until(R2=0) 1==>V flag SCMPの終了要因をまとめると、次のようになる。 1.エレメント(データ)数(R2)による終了 この時、Z flag=1,F flag=0,V flag=1となる。2,3
のケースとは同時には起こらない。 2.終了条件による終了 この時は、F flag=1となる。終了条件を満足したエレ
メントの比較も行なわれ、その比較結果がZ flag,L fl
ag,X flagに設定される。比較が不一致だった場合
は、2,3の2つの終了要因が同時に満たされたことに相
当する。 3.比較中のエレメントの不一致による終了 この時は、不一致のあったエレメントの比較結果がZ fl
ag(=0),L flag,X flagに設定される。V flagは0
となる。 SSCH SSCHが終了条件(検索条件)によって終了した場合に
は、/F,/Rとも、命令実行後のポインタは終了条件の成
立したエレメントの次のエレメントを指す。また、SSCH
がエレメント数によって終了した場合にも、命令実行後
のポインタは次のエレメントを指す。 SSCHのオペレーションをまとめると次のようになる。 [SSCH/Fのオペレーション] 0==>V flag repeat R2-1==>R2 mem[R0]==>temp R0+size==>R0 compare temp with R3,R4 and set F flag,M flag acc
ording to eeee /*終了条件成立の場合F flag=1となる*/ if(F flag=1)then exit /*終了条件(検索条件)による終了*/ check interrupt until(R2=0) 1==>V flag [SSCH/Rのオペレーション] 0==>V flag repeat R2-1==>R2 mem[R0]==>temp R0+R5==>R0 compare temp with R3,R4 and set F flag,M flag acc
ording to eeee /*終了条件成立の場合F flag=1となる*/ if(F flag=1)then exit /*終了条件(検索条件)による終了*/ check interrupt until(R2=0) 1==>V flag SSCHの終了要因をまとめると、次のようになる。 1.エレメント(データ)数(R2)による終了 この時、V flag=1となる。2つのケースとは同時には
起こらない。 2.終了条件(検索条件)による終了 この時は、F flag=1となる。 SSTR SSTRではフラグ変化は起こらない。SSTRのオペレーショ
ンをまとめると次のようになる。 [SSTRのオペレーション] repeat R2-1==>R2 R3==>mem[R1] R1+size==>R1 check interrupt until(R2=0) A11-3.高機能命令終了時のレジスタ値 TRONCHIPで高機能命令を実行した場合、命令終了時の各
レジスタの値は次のようになる。なお、RXinitは命令実
行前のレジスタRXの値を示す。また、RXendは命令実行
後のレジスタRXの値を示す。 [BVSCH] /Fの時は、オフセットがR1init〜R1init+R2init-1 の範囲をサーチする。 /Bの時は、オフセットがR1init〜R1init-R2init+1 の範囲をサーチする。 R2init(width)≦0の場合は、V flagをセットして命
令を終了する。 R1,R2は不変である。 ・サーチが成功した場合 R0(base address):不変 R1(offset):サーチ結果 見付かったビットのビットオフセット。 R2(width):まだサーチしていないビットフィールド
と見付かったビットとを合わせたビットフィールドの長
さ つまり、/FであればR2init+R1init-R1end,/BであればR
2init-R1init+R1endとなる。 ・サーチが失敗した場合 RO(base address):不変 R1(offset):最後にサーチサーチしたビットの次のビ
ットオフセット。 つまり、/FであればR1init+R2init,/BであればR1init-
R2initとなる。 これはBSCHと同じ考え方である。 R2(width):0 [BVMAP] [BVCPY] /Fの時は、R1init〜R1init+R2init-1のビットオフセッ
トを持つ領域がsrc,R4init〜R4init+R2init-1のビット
オフセットを持つ領域がdestとなる。 /Bの時は、R1init〜R1init-R2init+1のビットオフセ
ットを持つ領域がsrc,R4init-1〜R4init-R2initのビッ
トオフセットを持つ領域がdestとなる。 R2init(width)≦0の場合は、何もせずに命令を終了
する。 R1,R2,R4は不変である。 R0(src base):不変 R1(src offset): /FであればR1init+R1init,/Bで
あればR1init-R2initとなる。 R2(width):0 R3(dest base)不変 R4(dest offset)/FであればR4init+R2init,/Bであれ
ばR4init-R2initとなる。 R5(演算の種類)不変(BVMAPのみ) [BVPAT] R4init〜R4init+R2init-1のビットオフセットを持つ領
域がdestとなる。 R2init(width)≦0の場合は、何もせずに命令を終了
する。 R2,R4は不変である。 R0(pattern):不変 R2(width):0 R3(dest base):不変 R4(dest offset):R4init+R2init R5(演算の種類)不変 [SMOV] /Fの時は、 R0init〜R0init+R2init*エレメントサイズ−1のアド
レスを持つ領域がsrc、 R1init〜R1init+R2init*エレメントサイズ−1のアド
レスを持つ領域がdestとなる。 /Bの時は、 R0init-1〜R0init-R2init*エレメントサイズのアドレ
スを持つ領域がsrc、 R1init-1〜R1init-R2init*エレメントサイズのアドレ
スを持つ領域がdestとなる。 例えば、H′0000〜H′00ffのストリングをH′0300〜
H′03ffに転送する場合、SMOV/F.Wでコピーすると、 R0=H′0000,R1=H′0300,R2=H′0040 SMOV/B.Wでコピーすると、 R0=H′0100,R1=H′0400,R2=H′0040 とすればよい。 ただし、終了条件が成立した場合には、処理が途中で打
ち切られる。終了条件の成立したデータもdest側に転送
される。 ・エレメント数によって終了した場合 (V flag=1) R0(src address):/FであればR0init+R2init*エレメ
ントサイズ、 /BであればR0init-R2init*エレメントサイズ R1(dest address):/FであればR1init+R2init*エレ
メントサイズ、 /BであればRlinit-R2init*エレメントサイズ R2(エレメント数):0 R3(終了条件1):不変 R4(終了条件2):不変 −終了条件が成立して終了した場合(F flag=1) R0(src address):/Fの時終了条件の成立したsrcのエ
レメントの次のエレメントのアドレス /Bの時終了条件の成立したsrcのエレメントのアドレス R1(dest address):/Fの時終了条件の成立したsrcのエ
レメントの次のエレメントを転送すべきdestのアドレス /Bの時終了条件の成立したsrcのエレメントを転送すべ
きdestのアドレス /F,/BともRlinit+R0end-R0initとなる。 R2(エレメント数):まだ転送されていないエレメント
の数 /Fの時R2init-(R0end-R0init)/エレメントサイズ、 /Bの時R2init-(R0init-R0end)/エレメントサイズと
なる。 R3(終了条件1):不変 R4(終了条件2):不変 [SCMP] /Fの時は、 R0init〜R0init+R2init*エレメントサイズ−1のアド
レスを持つ領域がsrc1、 R1init〜R1init+R2init*エレメントサイズ−1のアド
レスを持つ領域がsrc2となる。 /Bの時は、 R0init-1〜R0init-R2init*エレメントサイズのアドレ
スを持つ領域がsrc1、 R1init-1〜R1init-R2init*エレメントサイズのアドレ
スを持つ領域がsrc2となる。 例えば、H′0000〜H′00ffのストリングをH′0300〜
H′03ffのストリングとを比較する場合、 SCMP/F.Wで比較すると、 R0=H′0000,R1=H′0300,R2=H′0040 SCMP/B.Wで比較すると、 R0=H′0100,R1=H′0400,R2=H′0040とすればよ
い。 ただし、終了条件が成立した場合には、処理が途中で
打ち切られる。終了条件の成立したエレメントについて
も比較が行なわれ、その結果がL flag,X flag,Z flag
にセットされる。また、比較中に不一致のエレメントが
見付かった場合にも、処理が途中で打ち切られる。 −エレメント数によって終了した場合 (V flag=1) R0(src1 address):/FであればR0init+R2init*エレ
メントサイズ、 /BであればR0init-R2init*エレメントサイズただし、R
2init<0の場合には無変化 R1(src2 address):/FであればR1init+R2init*エレ
メントサイズ、 /BであればR1init-R2init*エレメントサイズ R2(エレメント数):0 R3(終了条件1):不変 R4(終了条件2):不変 −終了条件の成立、またはエレメント値の不一致によっ
て終了した場合(F flag=1 .or.Z flag=0) R0(src1 address):/Fの時終了条件の成立した(また
は不一致であった) src1のエレメントの次のエレメントのアドレス /Bの時終了条件の成立した(または不一致であった) src1のエレメントのアドレス R1(src2 address):/Fの時終了条件の成立した(また
は不一致であった) src1のエレメントの次のエレメントと対応するsrc2のエ
レメントのアドレス /Bの時終了条件の成立した(または不一致であった) src1のエレメントと対応するsrc2のエレメントのアドレ
ス /F,/BともR1init+R0end-R0initとなる。 R2(エレメント数):まだ比較されていないエレメント
の数 /Fの時R2init-(R0end-R0init)/エレメントサイズ、 /Bの時R2init-(R0init-R0end)/エレメントサイズ となる。 R3(終了条件1):不変 R4(終了条件2):不変 [SSCH] /Fの時は、 R0init〜R0init+R2init*エレメントサイズ‐1のアド
レスを持つ領域を検索する。 /Rの時は、 R0init〜R0init+R5*R2init-1のアドレスを持つ領域
を、R5毎に飛び飛びに検索する。 ただし、終了条件(検索条件)が成立した場合には、
処理が途中で打ち切られる。 −エレメント数によって終了した場合(V flag=1) R0(src address):/FであればR0init+R2init*エレメ
ントサイズ、 /RであればR0init+R2init*R5 R2(エレメント数):0 R3(終了条件1):不変 R4(終了条件2):不変 R5(ポインタ更新値):不変 −終了条件(検索条件)が成立して終了した場合(F fl
ag=1) R0(src address):終了条件の成立したsrcのエレメン
トのアドレス R2(エレメント数):終了条件の成立したエレメント
と、まだ検索されていないエレメントの合計数 /Fの時R2init-(R0end-R0init)/エレメントサイズ、 /Rの時R2init-(R0end-R0init)/R5となる。 R3(終了条件1):不変 R4(終了条件2):不変 R5(ポインタ更新値):不変 [SSTR] R1init〜R1init+R2init*エレメントサイズ−1のア
ドレスを持つ領域に、R3で指定されるデータを繰り返し
書き込む。他のストリング命令とは異なり、終了条件の
指定は行なわない。また、フラグのセットも行なわな
い。 R2init(width)≦0の場合は、即座に命令を終了す
る。R1,R2は不変である。 R1(dest address):R1init+R2init*エレメントサイ
ズ R2(エレメント数):0 R3(書き込みデータ):不変 [QSCH] −キュー終了値(R2)によって終了した場合(V flag=
1) R0(entry address):R2init R1(privious entry):R0endで示されるエントリの直前
(/Fの場合)または直後(/Bの場合)のエントリのアド
レス R2(キュー終了値):不変 R3(終了条件1):不変 R4(終了条件2):不変 R5(オフセット):不変 R6(マスク):不変 −終了条件(検索条件)が成立して終了した場合(V fl
ag=1) R0(entry address):終了条件の成立しているキュー
エントリのアドレス R1(privious entry):R0endで示されるエントリの直前
(/Fの場合)または直後(/Bの場合)のエントリのアド
レス R2(キュー終了値):不変 R3(終了条件1):不変 R4(終了条件2):不変 R5(オフセット):不変 R6(マスク):不変 付録12.オペランドが干渉した場合の動作 一つの命令が複数のオペランドを持ち、その中で、@
SP+,@−SPモードとSPを参照するモードとを併用した
場合には、@SP+,@−SPモードによって行進されたSP
値がいつから反映されるかということが問題になる。こ
の問題をより一般的に考えると、オペランドが干渉して
いた場合の動作を明確に規定すればよいということにな
る。 この試料は、本発明装置で、命令中のオペランドが干
渉を起こした場合に、その動作をきちんと定義すること
を目的としたものである。資料の最初の方でこの問題に
対する考え方を述べ、資料のこうせはんでは、実際に本
発明装置の動作の規定を行っている。 A12-1.命令実行モデル オペランド干渉の問題を整理するために、まず、各命
令からメモリやレジスタに対して行われるread,write,r
ead-modify-writeの基本アクセス操作をすべて含むよう
な仮想的な命令パターンを考え、それを以下のようにモ
デル化する。 ・モデルを構成するRA1〜WW1の夫々の要素を「ステッ
プ」と呼ぶ。 ・@SP+,@−SPのアドレッシングモードを指定した場
合、SP値の更新は「実効アドレス計算」のステップ(RA
1,RA2,RA3,MA1,WA1)で行われるものとする。 ・各ステップは、次のいずれかのパターンでリソースを
アクセスする。ただし、「リソース」とはメモリまたは
プログラムから見えるレジスタを指す。 −リソースアクセスなし −一つまたは複数のリソースからのread −一つのリソースへのwrite(EX1〜EXn,MW1,WW1のみ) −リソースSPのread-modify-write(RA1,RA2,RA3,MA1,W
A1,WA2) ・各ステップでリソースの値の更新があった場合には、
次のステップから更新された値が反映される。 ・一般の命令では、このうち一部のステップのみが存在
する。 ・EX1〜EXnのステップは、実際には、命令の種類によっ
てEX1,EX2,EX3…のいくつかのステップに分かれてい
る。 上記のモデルでは、各ステップで書き込みを行なうリ
ソースが高々一つであること、SPのread-modify-write
のケースを除けば、一つのステップ内でreadとwriteが
混在するケースはないこと、リソースに書き込んだ値が
次のステップから反映されること、といった条件を明ら
かにしているので、ステップ間で共通のオペランドをア
クセスした場合にも動作は明確に規定される。したがっ
て、各命令の動作を上記のモデルにうまく当てはめるこ
とができれば、オペランドが重なっていた場合の動作も
きちんと規定することができる。 本発明装置のほとんどの命令の動作は、上記の実効パ
ターンのサブセットとして成り立っている。ただしどの
動作がどのステップに対応するかということについて
は、命令動作の意味付けによっていろいろな解釈ができ
る。 例えばACB:G @SP+,SP,@SP+,newpcの場合には、
次ののような解釈をするのが自然である。つまり、AC
B命令の各動作ステップやオペランドと、上記のモデル
との対応は、次ののように行なうのが普通であり、実
際、これが正しいTRON仕様となっている。 ACBのSTEPオペランドがモデルのRO1に対応 ACBのLIMITオペランドがモデルのRO2に対応 xregオペランドはEX1〜EX3の中だけで扱い、ROn,MOn,WO
nとは考えない。 RA1. SP==>roladdr:SP+size==>SP RR1. @roladdr==>step RA2. SP==>ro2addr;SP+size==>SP RR2. @ro2addr==>limit RA3〜MR1. なし EX1. SP==>xreg EX2. xreg+step==>xreg if(xreg<limit)jump to newpc endif EX3. xreg==>SP MW1〜WW1. なし roladdr,ro2addr,step,limit xregは内部変数であり、
モデルで使用する意味での「リソース」には含めない この場合、命令実行前のSP値をinitSPとすると、 step: @(initSP) xreg初期値: initSP+size*2 limit : @(initSP+size) EXの後のxreg: initSP+size*2+@(initSP) ジャンプ条件: initSP+size*2+@(initSP)<@
(initSP+size) SP最終値: initSP+size*2+@(initSP) しかし、実際のACB命令の動作とモデルとの対応を次
ののようにすることも不可能ではない。 の動作は、厳密にはと同じではない。 ACBのstepオペランドがモデルのRO1に対応 ACBのxregオペランドが読みだし時RO2に、書き込み時WO
1に対応 ACBのlimitオペランドがモデルのRO3に対応 RA1. SP==>roladdr;SP+size==>SP RR1. @roladdr==>step RA2. 何も参照しない RR2. SP==>xreg RA3. SP==>ro3addr;SP+size==>SP RR3. @ro3addr==>1imit AA1〜MR1. なし EX. xreg+step==>xreg if(xreg<limit)jump to newpc endif MW1. なし WW1. xreg==>SP roladdr,ro3addr,step limit,xregは内部変数であり、
モデルで使用する意味での「リソース」には含めない この場合、命令実行前のSP値をinitSPとすると、 step: @(initSP) xreg初期値: initSP+size limit : @(initSP+size) EXの後のxreg: initSP+size+@(initSP) ジャンプ条件: initSP+size+@(initSP)<@(in
itSP+size) SP最終値: initSP+size+@(initSP) これはとは異なる動作である。 仕様書の命令の解説の項だけではが正しいかが正
しいかは厳密にはわからないため、命令によっては、モ
デルとの対応付けの曖昧な場合が出てくる。モデルとの
対応付けが違うと、上の例のように細かい動作が異なっ
てくることがある。 この資料では本発明装置の命令について、上記のよう
な方法で命令動作とモデルとの対応を決め手いくことに
より、オペランドが重なった場合の動作を明確に規定す
ることを目的としている。 A12-2.基本原則 命令について個別に検討する前に、オペランドの干渉
についての基本原則を述べる。 (原則1)短縮形と一般形では、全く同じ動作をしなけ
ればならない。すなわち、命令フォーマットの違いはオ
ペランド干渉の問題には影響しない。短縮形は完全に一
般形のサブセットとなるべきであり、動作の異なる短縮
形は混乱を招く。 命令実行モデルは、インプリメントへの依存性やインプ
リメントの都合を考えたものではないため、場合によっ
ては、規定した通りにインプリメントできないことがあ
る。例えば、ADD:L @SP+,SPがADD:G @SP+,SPと異
なった動作をする場合があるというのは、この例であ
る。このようなケースに関しては、命令実行モデルの方
はそのままにしておき、場合に応じて例外として扱う。 (原則2)基本的には、命令ビットパターンの中でのオ
ペランドの出現順序にしたがって、命令のオペランドと
モデルでの第一readオペランド(RO1)、第二readオペ
ランド(RO2)…との対応を決める。 こうしておけば、一般にはインブリメント方法とも矛盾
しない。 命令実行モデルは、各命令の動作とビットパターンから
考えて、最も自然な形になるようにする。短縮形と一般
形を持つ命令の場合、命令実行モデルと実際の命令動作
との対応が自然になるかどうかは、どのフォーマットの
命令ビットパターンを基準にするかによって異なるが、
この場合は減速として一般形を基準にする。命令動作と
モデルとの対応という点に関しては、命令ビットパター
ンの都合は考えるが、インブリメントの都合は特に考え
ない。 (原則3)原則2があっても、汎用アドレッシングでな
いオペランド(ACBのxregなど)については、モデルで
の第n-readオペランド(ROn)、第m-writeオペランド
(WOm)としては扱わず、EXのステップ中だけで扱うの
が普通である。 (原則4)また、命令の意味の中に暗黙に含まれている
メモリアクセス(PUSH,POPでのスタック操作など)につ
いても、モデルでの第n-readオペランド(ROn)、第m-w
riteオペランド(WOm)としては扱わず、EXのステップ
中だけで扱うのが普通である。 さらに、各命令ごとに特殊な事情のある場合や、多数
のオペランドを持つ場合(LDM,STMなど)には、これら
の原則が当てはまらないことがある。詳しくは命令ごと
に検討する。 A12-3.各命令での実際 本発明装置の命令をいくつかのパターンに分類してモ
デルとの対応付けを行ない、オペランドが緩衝した場合
の動作を明確にする。(原則1)により、命令フォーマ
ットが違ってもオペランドが干渉した場合の動作は替わ
らないので、命令フォーマットの違いによる場合分けを
行なう必要はない。 なお、動作例の中に出てくるinitSPは、命令実行前の
SPの意味である。また、動作例で出てくる命令のオペラ
ンドサイズは、断わりのない限りすべて32ビットとす
る。‘==>’は値の代人を、‘〔〜〕’はコメントを
示す。RA1〜WW1のステップのうち、その命令で使用して
いないステップについては、説明を省略してある。 0 オペランド(N) 該当命令: NOP PIB RTS RRNG TRAP REIT STCTX PTLB BVSCH BVMAP BVCPV BVPAT SMOV SCMP SSCH SSTR QSCH 命令の動作は、すべてモデルのEXのステップだけで行な
われ、それ以外の部分は存在しない。したがって、オペ
ランドの干渉については特に問題とはならない。 高機能命令では、EXのステップ数が有限とはならない場
合も生じるため、このモデルでは正確に表現できないこ
とがある。しかし、これはオペランドの干渉の問題には
直接官界しないので、ここでは議論しない。 〔命令実行モデルとオペランドとの対応〕 EX.命令固有の動作 1 オペランドイミディエート(1) 当該命令: BRA newpc Bcc newpc BSR newpc TRAPA vector WAIT imask オペランドを一つもつが、オペランドの値は命令コード
中で直接指定されるため、オペランドの干渉については
問題とならない。newpc,vector, imaskはEXのステップで操作すると考える。 〔命令実行モデルとオペランドとの対応〕 EX.命令固有の動作(newpc,vector,imaskの参照を含
む) 1オペランドread(R) 該当命令: PUSH src LDPSB src LDPSM src JRNG vector このパターンの命令の場合、src,vectorをモデルの第
一readオペランド(RO1)として扱う。 src=@SP+の場合、命令固有の動作を行なう時点で
は、既にSPのインクリメントが行なわれていることにな
る。 〔命令実行モデルとオペランドとの対応〕 RA1. src,vectorのアドレス計算==>roladdr RR1. @roladdr==>src,vector EX. 命令固有の動作(命令による暗黙のスタック操作
を含む) PUSHでは src==>PSB LDPSBでは .op.(PSB,src)==>PSB LDPSMでは .op.(PSM,src)==>PSM 例えばPUSH@SP+にこのモデルを適用すると、EXでPU
SH命令固有の動作(src==>@−SP)を行なう前に、R
A1.で既にsrc-@SP+によるSPの更新が行われることが
わかる。ただし、間違いを防ぐため、PUSH@SP+は禁止
(RIE)となっている(第375図参照)。 1 オペランドaddress(A) 該当命令: PUSHA srcaddr PSTLB prgaddr LDCTX ctxaddr ACS chkaddr JMP newpc JSR newpc srcaddr,prgaddr,ctxaddr,chkaddr,newpcをモデルの第
一addressオペランド(AO1)として扱う。なお、AA1で
は@SP+,@−SPのモードは利用できない。 〔命令実行モデルとオペランドとの対応〕 AA1. srcaddr,prgaddr,ctxaddr,chkaddr,newpcのアド
レス計算==>aoladdr EX. 命令固有の動作(命令による暗黙のスタック操作
を含む) PUSHAでは aoladdr==>@−SP JSRでは PC==>@−SP;aoladdr==>PC PUSHA @SPとJSR @SPの動作は第376図のとおり。 1 オペランドwrite(W) 該当命令: POP dest STPSB dest STPSM dest destを第一writeオペランド(WO1)として扱う。この場
合、EXのステップより前のWA1のステップでdestの実効
アドレス計算が行なわれ、値の書き込みのみEXより後の
WW1のステップで行なわれることになる。 〔命令実行モデルとオペランドとの対応〕 WA1. destの実効アドレス計算==>woladdr EX. 命令固有の動作(命令による暗黙のスタック操作
を含む) POPでは @SP+==>dest2 STPSBでは .op.(PSB)==>dest2 STPSMでは .op.(PSM)==>dest2 WW1. dest2==>@woladdr 例えばPOP @−SPにこのモデルを適用すると、EX.でPO
P命令固有の動作(@SP+==>dest2)を行なう前に、
WA1.で既にdest=@−SPによるSPの更新が行なわれるこ
とがわかる。また、POP @(d,SP)にこのモデルを適
用すると、EX.でPOP命令固有の動作(@SP+==>dest
2)を行なう前に、WA1.でdest=@(d,SP)のアドレス
計算が行なわれ、destのアドレス計算にはinitSPが使用
されることがわかる。 ただし、間違いを防ぐため、実際にはPOP @SPは禁止
(RIE)となっている。また、POP @(d,SP)について
は、@(d,Rn)のアドレッシングモードでRn=SPの時の
み実行禁止とするのは無理があること、スタック操作に
おいてPOP @(disp,SP)を使用する用途も考えられる
こと、により、禁止にはしていない。 POP命令の動作例は第377図のようになる。 1 オペランドrmw(M) 該当命令: NEG dest NOT dest SHXL dest SHXR dest destをMO1に対応させる。この場合、MA1で@SP+,@−
SPを指定することはできない。 〔命令実行モデルとオペランドとの対応〕 MA1. destの実効アドレス計算==>moladdr MR1. @moladdr==>dest1 EX. 命令固有の動作 .op.(dest1)==>dest2 MW1. dest2==>@moladdr 2 オペランドread〜write(RW) 該当命令: MOV src,dest MOVU src,dest RVBY src,dest RVBI src,dest PACKss src,dest UNPKss src,dest,adj srcをRO1、destをWO1に対応させる。したがって、src側
の実効アドレス計算とそれに伴うSPの更新がすべて終わ
ってからsrcのフエッチを行ない、その後dest側の実効
アドレス計算を行ない、最後に命令固有の動作を行って
結果をdestにセットする。 UNPKssのadjはEXのステップで扱い、第n-readオペラン
ドとはしない。 〔命令実行モデルとオペランドとの対応〕 RA1. srcの実効アドレス計算==>roladdr RR1. roladdr==>src1 WA1. destの実効アドレス計算==>woladdr EX. 命令固有の動作 .op.(src1)==>dest2 UNPKssではadjを参照 WW1. dest2==>@woladdr MOVの動作例は第378図のとおり。 PACK,UNPKの動作例は第379図のとおり。 2 オペランドaddress〜write(AW) 該当命令: STC src,dest STP src,dest MOVA srcaddr,dest MOVPA srcaddr,dest STATE srcaddr,dest QDEL queue,dest 制御空間、物理空間など特殊な空間からの読みだしを行
なう命令では、特殊空間側の実効アドレスsrc,srcaddr
をAO1として扱い、特殊空間の実際のアクセスはEXのス
テップで行なう。また、QDEL命令でも、キューエントリ
を指定する側の実効アドレスqueueをAO1として扱い、キ
ューリンクの実際の操作はEXのステップで行なう。こう
しておけば、命令ビットパターンやインプリメント方法
ともうまく対応する。AA1では、@SP+,@−SPを指定
することはできない。 destはWO1として扱う。 AA1. src,srcaddr,queueの実効アドレス計算==>aol
addr WA1. destの実効アドレス計算==>woladdr EX. 命令固有の動作 .op.(aoladdr)==>dest2 WW1. dest2==>@woladdr STC,MOVAの動作例との対応は第380図のとおり。 mova @SP,@−SPの場合、srcaddrの実効アドレス計算
(AA1)のステップで既にSPが参照されており、destの
実効アドレス計算(WA1)ステップにおけるSPの更新はs
rcaddrに反映されない。これに対して、STC @spO,@
−SPがモデル通りの動作をするものと考えると、srcの
実効アドレス計算(AA1)のステップではまだSPが参照
されておらず、制御レジスタとしてのSPのアドレス
(H′0124)が計算されるだけである。SPが参照される
のはEXのステップであり、これはdestの実効アドレス計
算(WA1)ステップにおいてSPを更新した後である。し
たがって、initSP-4がdestに転送されることになる。 ただし、STC @spO,@−SPの動作については、以上の
ようなモデル通りの動作をするかどうかがインプリメン
ト依存になっている。つまり、モデル通りinitSP-4を転
送する場合と、モデルにた4いしては例外の扱いとなる
が、initSPを転送する場合とがある。 2 オペランドread〜address(RA) 該当命令: LDC src,dest LDP src,dest LDATE src,destaddr BTST offset,base BSET offset,base BCLR offset,base BNOT offset,base BSETI offset,base BCLRI offset,base BFEXT offset,width,base,dest BFEXTU offset,width,base,dest BFINS src,offset,width,base BFINSU src,offset,width,base BFCMP src,offset,width,base BFCMPU src,offset,width,base CHK bound,index,xreg 制御空間、物理空間など特殊な空間への書き込みを行な
う命令LDC,LDP,LDATEでは、特殊空間側の実効アドレス
縦,destaddrをAO1、srcをRO1として扱う。特殊空間の実
際のアクセスはEXで行なう。 ビット操作命令では、baseの実効アドレスをAO1、offse
tをRO1として扱う。baseとoffsetの合成を行ない、操作
対象となるビットを実際にアクセスするのは、EXの中で
行なわれる。固定長ビットフィールド操作命令でも、ビ
ット操作命令と同様に、baseの実効アドレスをAO1、off
setをRO1として扱う。offsetとbase以外のオペランド、
即ちwidth,src,destについては、EXの中でのみアクセス
し、第一readオペランド(ROn)、第m-readオペランド
(WOm)としては扱わない。 CHKの場合は、ビットパターンとの関係から、indexをRO
1、boundをAO1として扱い、boundの内容である(上限
値:下限値)の読みだしとxregへの書き込みはEXで行な
うことにする。 以上のような形で各命令の動作とモデルとの対応をつけ
ておけば、命令ビットパターンやインプリメント方法と
も矛盾しない。 AA1では、@SP+,@−SPを指定することはできない。s
rc,offset,index= @SP+の場合、dest,destaddr,bas
e,boundの実効アドレス計算で参照されるSP値として
は、インクリメント後の値が使用されることになる。CH
K命令の場合、これはアセンブラ表記での順序と逆にな
っているので、注意が必要である。また、固定長ビット
フィールド命令でoffset= @SP+を指定し、src,widt
hなどで同じSPを指定した場合のSP値としては、やはり
インクリメント後の値が使用されることになる。アセン
ブラ表記では、BFINS,BFCMPの場合にoffsetよりもsrcの
方が先に書かれるようになっているが、実際にはoffset
の実効アドレス計算で更新されたSPがsrcに反映される
ので、注意が必要である。 RA1. src,offset,indexの実効アドレス計算==>rola
ddr RR1. roladdr==>src1 AA1. dest,destaddr,base,boundの実効アドレス計算=
=>aoladdr EX. 命令固有の動作 .op.(src1,aoladdr) CHKでは .op.(srcl,aoladdr)==>xreg BFINS,BFINSU,BFCMP,BFCMPUでは、 .op.(src1,aoladd
r,width,src) BFEXT,BFEXTUでは、 .op.(src1,aoladdr,width)==
>dest BFINS,BFEXTの動作例は第381図のとおり。 2 オペランドread〜read(RR) 該当命令: CMP src1,src2 CMPU src1,src2 INDEX indexsize,subscript,xreg ACB step,xreg,limit,newpc SCB step,xreg,limit,newpc CMP,CMPUでは、src1をRO1に、src2をRO2に対応させる。 INDEXでは、indexsizeをRO1に、subscriptをRO2に対応
させる。xregはEXで扱う。 ACB,SCBではstepをRO1に、limitをRO2に対応させる。xr
eg,newpcはEXで扱う。 したがって、src1,indexsize,step=@SP+の場合、src
2,subscript,limitの実効アドレス計算で参照されるSP
としては、インクリメント後の値が使用される。また、
INDEX,ACB,SCB命令でindexsize,step=@SP+またはsub
script,limit=@SP+の場合、xregとして参照されるSP
としては、やはりインクリメント後の値が使用される。 RA1. src1,indexsize,stepのアドレス計算==>rolad
dr RR1. roladdr==>src11 RA2. src2,subscript,limitの実効アドレス計算==>
ro2addr RR2. ro2addr==>src21 EX. 命令固有の動作 .op.(src11,src21) INDEXでは .op.(src11,src21,xreg)==>xreg ACB,SCBでは .op.(src11,src21,xreg,newpc)==>x
reg CMPの動作例は第382図のとおり。 INDEXの動作例は第383図のとおり。 ただし、INDEX命令については、インプリメントの制約
によって、subscript=@SP+,xreg=SPの場合に必ずし
もモデル通りの動作ができない場合がある。詳しくは2
オペランドread rmw(RM)の項を参照。 ACB,SCBの動作例は第384図のとおり。 2 オペランドread〜rmw(RM) 該当命令: ADD src,dest ADDU src,dest ADDX src,dest SUB src,dest SUBU src,dest SUBX src,dest MUL src,dest MULU src,dest DIV src,dest DIVU src,dest REM src,dest REMU src,dest AND src,dest OR src,dest XOR src,dest SHA count,dest SHL count,dest ROT count,dest ADDDX src,dest SUBDX src,dest BSCH data,offset MULX src,dest,tmp DIVX src,dest,tmp src,count,dataをRO1に、dest,offsetをMO1に対応させ
る。src=@SP+の場合、destの実効アドレス計算で参
照されるSPとしては、インクリメント後の値が使用され
る。 MA1では、@SP+,@−SPのモードを指定することはで
きない。 MULX,DIVXの場合、srcがRO1、destがMO1に対応し、tmp
はEXの中で処理されるものとする。したがって、src=
@SP+の場合に、destの実効アドレス計算で参照される
SP値、およびtmpで参照されるSP値としては、インクリ
メント後の値が使用される。また、tmpとdestで同じレ
ジスタを指定した場合には、tmpの値が消え、最終的にd
estの値が残ることになる。 RA1. src,count,dataの実効アドレス計算==>roladd
r RR1. @rlladdr==>src1 MA1. dest,offsetの実効アドレス計算==>moladdr MR1. @moladdr==>dest1 EX. 命令固有の動作 .op.(dest1,src1)==>dest
2 MULXでは .op.(dest1,src1)==>dest2,tmp DIVXでは .op.(dest1,src1,tmp)==>dest2,tmp MW1. dest2==>@moladdr ADDの動作例は第385図のとおり。 このうち、一つのハーフワードの中で、レジスタ指定Rg
R,RgMと汎用アドレッシング指定EaR,EaW,ShR,ShWの両方
を含む命令では、EaR,EaW,ShR,ShWで@SP+,@−SPの
モードを指定し、RgR,RgMでSPを指定した場合に、EaR,E
aW,ShR,ShWによるSP値の更新がRgR,RgMとしてのSPの読
みだし値に影響するため、パイプライン実装が難しいと
いう意見がある。具体的に問題となるのは、以下のよう
な命令である。 ADD:L @SP+,SP SUB:L @SP+,SP CMP:L @SP+,SP INDEX *,@SP+,SP (MOV:Lは含まない) そこで、これらの命令については、動作がインプリメン
ト依存になるものとする。つまり、ADD:L @SP+,SP実
行後のSP値は、インプリメントによって不定の値をとる
ということにする。 EITの検出も難しいのず、EITとはしない。 これらの命令は、短縮形が一般形と同じ動作をするとい
う原則には違反することになる。 2 オペランドaddress〜address(AA) 該当命令: QINS entry,queue entryをAO1に、queueをAO2に対応させる。キューリンク
の実際の操作はEXのステップで行なわれる。 AA1. entryの実効アドレス計算==>ao1addr AA2. queueの実効アドレス計算==>ao2addr MA1〜MR1. なし EX. 命令固有の動作 .op.(aoladdr,ao2addr) 2 オペランドaddress〜read(AR) 該当命令: CSI comp,update,dest CSI命令では、ビットパターンとの関係から、destをAO1
に、updateをRO1に対応させるcompのアクセスと比較、
交換の実際の操作は、EXで行なわれる。 CSI命令のオペランドの処理は、アセンブラ表記とは異
なり、updateの実効アドレス計算、destの実効アドレス
計算、comp値の参照といった順序で行なわれる。destで
は@SP+,@−SPが使用できないが、updateでは@SP+
が使用できるので、compでSPを参照した場合には注意が
必要である。 RA1. updateの実効アドレス計算==>roladdr RR1. @roladdr==>update1 AA1. destの実効アドレス計算==>aoladdr EX. 命令固有の動作 .op.(aoladdr,update1,comp)
==>comp CSIの動作例は第386図のとおり。 1 オペランドread〜reglist(RL) 該当命令: ENTER local,reglist EXITD reglist,adjsp ENTER,EXITDでは、local,adjspをRO1に対応させる。reg
listの参照とスタックフレームの操作は、EXのステップ
に含める。したがって、local,adjspの実効アドレス計
算の際に参照されるSP,FP,R0〜R13は、スタックフレー
ム操作を初めてからの値ではなく、すべて命令実行前の
値を使用することになる。EXITDでは、アセンブラ表記
でのオペランド順と逆の順番で実効アドレスが評価され
るので、注意が必要である。 (ただし、命令再実行の関係で、local.adjspはレジス
タ直接Rnとイミディエート#imm dataのモードした使
用できない。) RA1. local,adjspの実効アドレス計算==>roladdr (実際にはRnと#imm dataのモードしか使用できない
ので、このステップでは何もアクセスしない。) RR1. @roladdr==>src1 EX. reglist参照とスタックフレーム操作 ENTERでは .op.(src1,R0〜R13,FP,SP,reglist)==
>FP,SP,stack EXITDでは .op.(src1,FP,SP,stack,reglist)==>R
0〜R13,FP,SP,PC 1 オペランドaddress〜reglist(AL)★ 該当命令: LDM src,reglist STM reglist,dest LDM,STMでは、src,destをAO1に対応させる。reglistの
参照と実際のレジスタ転送は、EXのステップに含める。
したがって、src,destの実効アドレス計算の際に参照さ
れるSP,FP,R0〜R13は、レジスタ転送を始めてからの値
ではなく、すべて命令実行前の値を使用することにな
る。 LDM reglist,@SP+とSTM reglist,@−SPについては、
SPが複数回更新されるため、一般命令での@SP+,@−
SPとは異なった扱いをする必要がある。すなわち、モデ
ルの「実効アドレス計算」のステップで@SP+,@−SP
によるSP値の更新を扱うのではなく、EXのステップでSP
値の更新を扱うようにする。このため、SPをMO1に対応
させる。 〔@SP+,@−SP以外のモードを使用した場合〕 AA1. src,destの実効アドレス計算==>aoladdr EX. reglist参照とレジスタ転送 LDMでは @(aoladdr〜…)==>REG(reglist) STMでは REG(reglist)==>@(aoladdr〜…) 〔@SP+,@−SPのモードを使用した場合〕 MR1. SP==>tamaddr EX. reglist参照とレジスタ転送 LDMでは @(tmpaddr〜…)==>REG(reglist) tmpaddr+転送レジスタ数==>tmpaddr STMでは tmpaddr−転送レジスタ数==>tmpaddr REG(reglist)==>@(tmpaddr〜…) 〔実際のインプリメントでは、レジスタ転送の順序は自
由である。これと等価な動作をすればよい。〕 MW1. tmpaddr==>SP LDM @SP+,reglist,の場合、reglist中にSPが指定さ
れていても、最後のMW1のステップでtmpaddrがSPにover
writeされるため、結果的にメモリからロードされたSP
値が消えてしまうことになる。LDM,STMの動作例は第387
図のとおり。 付録13.キャッシュやTLBの整合性確保について キャッシュやTLBの整合性の確保については、それぞ
れ関連する命令のところで説明を行なっているが、整理
すると以下のようになる。 〔ATを変更した場合の整合性〕 ・TLB,論理キャッシュ(データキャッシュ)の整合性 −LDC,LDCTX,EIT,REITによりPSWの中のATが変更された
場合、TLB,論理データキャッシュの整合性が保証され
る。(LSIDがない場合はバージされる。LSIDがある場
合、AT=00の物理空間に対して特別のLSIDを与えると考
えれば、必ずしもパージする必要はない。) ・命令パイプライン、命令キャッシュの整合性 −命令コード整合性の状態は変化しない。 ATを変更しても、命令コード整合性が保証されるわけで
はない。 〔UATB,SATBの操作をした場合の整合性〕 ・TLB,論理キャッシュ(データキャッシュ)の整合性 −LDC,LDCTXによるUATB,SATBの操作では、TLB,論理デー
タキャッシュの整合性が保証される。(LSIDがない場
合、一般にはパージされる) ・命令パイプライン、命令キャッシュの整合性 −LDC,LDCTXによりUATB,SATBを操作しても、命令コード
整合性の状態は変化しない。インプリメントによって
は、命令キャッシュのパージによって命令コード整合性
が良くなる場合もあるが、それが保証されているわけで
はない。 例えば、論理空間A,論理空間Bの命令コードをそれぞれ
書き換えた後、論理空間AでPIB命令を実行すると、論
理空間Aでの命令コード整合性は保証される。この後LD
CまたはLDCTXでUATBを操作し、論理空間Bに切り換えた
としても、論理空間Bでの命令コード整合性は保証され
ず、それを保証するためには論理空間Bでもう一度PIB
命令を実行する必要がある。ただし、論理空間BでPIB
命令を実行してもしなくても、再度UATBを操作して論理
空間Aに戻ってきた場合には、命令コードの整合性が保
証されている。 実際には、論理命令キャッシュのパージにより、UATB操
作の後は自動的に命令コード整合性が保証されるかもし
れないが、プログラミング上はこの機能を当てにしては
いけない。将来LSIDを導入してパージを避けることを考
えると、一般には、UATBを操作しても命令コード整合性
は変わらないと考えなければならない。 〔ATEの操作をした場合の整合性〕 ・TLB,論理キャッシュ(データキャッシュ)の整合性 −LDATEによるATEの操作では、TLB,論理データキャッシ
ュの整合性が保証される。 (影響のある部分がパージされる) −LDATEを用いず、一般のメモリアクセス命令でATEに使
用しているメモリ領域を書き換えた場合には、TLB,論理
データキャッシュの整合性は保証されない。 ・命令パイプライン、命令キャッシュの整合性 −ATEを更新した場合、そのATEによりアドレス変換され
る領域の「命令コードの整合性」は失われる。つまり、
その領域のメモリ内容をプログラムとして実行しても、
動作は保証されない。これは、LDATE命令を用いるかど
うかには関係しない。命令コードの整合性を回復する必
要があれば、別にPIB命令を実行する。 〔メモリの操作をした場合の整合性〕 ・論理キャッシュ(データキャッシュ)の整合性 −論理アドレスによってメモリをアクセスする場合に
は、論理データキャッシュの整合性が保証される。(キ
ャッシュの制御機構による) −LDP命令を使って、物理アドレスによりメモリアクセ
スする場合には、論理データキャッシュの整合性は保証
されない。 ・命令パイプライン、命令キャッシュの整合性 −メモリ内容を変更した場合、その領域の「命令コード
の整合性は失われる。これは、論理アドレスによるアク
セスか物理アドレスによるアクセスかということには関
係しない。内容を変更したメモリをプロクラムとして実
行するには、PIB命令を実行し、命令コードの整合性を
回復する必要がある。 [発明の効果] 以上のように本発明によれば、EIT処理要求が受け付
けられ、EIT処理ハンドラの先頭アドレスを外部記憶装
置から読み込むのと同時に内部状態を示す情報も取り込
むので、EIT処理ハンドラ起動時のプロセッサの内部状
態が自由に設定できる。また、多重EIT処理に対して優
先度の高いEIT処理が優先度の低いEIT処理を禁止するこ
とをプログラムしておくことが容易にでき、EIT処理方
法に関してもプログラム作成者の自由度と容易性が向上
する。
説明図 第3図は、本発明装置のビットフイールドについてのデ
ータタイプ説明図 第4図は、本発明装置の符号なしビットフィールドにつ
いてのデータタイプ説明図 第5図は、本発明装置の整数についてのデータタイプ説
明図 第6図は、本発明装置の10進数についてのデータタイプ
説明図 第7図は、本発明装置のストリングについてのデータタ
イプ説明図 第8図は、本発明装置のキューについてのデータタイプ
説明図 第9図は、本発明装置の命令フォーマットの記述例を示
す説明図 第10図は、そのビットパターン図 第11〜21図は、本発明装置の命令フォーマット図 第22〜33図は、本発明装置のアドレッシングモードのフ
ォーマット図 第34図は、本発明装置のローカル変数配置例の説明図 第35〜38図は、本発明装置のアドレッシングモードのフ
ォーマット図 第39図は、命令MOVでの注意事項説明図 第40図は、PSWのフォーマット図 第41図は、PSSのフォーマット図 第42図は、PSHのフォーマット図 第43図は、命令セットの記述例を示すフォーマット図 第44図は、命令MOVのフォーマット図及びそのフラグ変
化の説明図 第45図は、命令MOVUのフォーマット図 第46図は、そのフラグ変化の説明図 第47図は、命令PUSHのフォーマット図 第48図は、そのフラグ変化の説明図 第49図は、命令POPのフォーマット図 第50図は、そのフラグ変化の説明図 第51図は、命令LDMのフォーマット図 第52図は、そのフラグ変化の説明図 第53図は、ビットマップ指定の説明図 第54図は、命令STMのフォーマット図 第55図は、そのフラグ変化の説明図 第56,57図は、ビットマップ指定の説明図 第58図は、命令MOVAのフォーマット図 第59図は、そのフラグ変化の説明図 第60図は、命令PUSHAのフォーマット図 第61図は、そのフラグ変化の説明図 第62図は、命令CMPのフォーマット図 第63図は、そのフラグ変化の説明図 第64図は、命令CMPUのフォーマット図 第65図は、そのフラグ変化の説明図 第66図は、命令CHKのフォーマット図 第67図は、そのフラグ変化の説明図 第68図は、命令CHKのオペレーションの説明図 第69図は、命令ADDのフォーマット図 第70図は、そのフラグ変化の説明図 第71図は、命令ADDUのフォーマット図 第72図は、そのフラグ変化の説明図 第73図は、命令ADDXのフォーマット図 第74図は、そのフラグ変化の説明図 第75図は、命令SUBのフォーマット図 第76図は、そのフラグ変化の説明図 第77図は、命令SUBUのフォーマット図 第78図は、そのフラグ変化の説明図 第79図は、命令SUBXのフォーマット図 第80図は、そのフラグ変化の説明図 第81図は、命令MULのフォーマット図 第82図は、そのフラグ変化の説明図 第83図は、命令MULUのフォーマット図 第84図は、そのフラグ変化の説明図 第85図は、命令MULXのフォーマット図 第86図は、そのフラグ変化の説明図 第87図は、命令DIVのフォーマット図 第88図は、そのフラグ変化の説明図 第89図は、命令DIVUのフォーマット図 第90図は、そのフラグ変化の説明図 第91図は、命令DIVXのフォーマット図 第92図は、そのフラグ変化の説明図 第93図は、命令REMのフォーマット図 第94図は、そのフラグ変化の説明図 第95図は、命令REMUのフォーマット図 第96図は、そのフラグ変化の説明図 第97図は、命令NEGのフォーマット図 第98図は、そのフラグ変化の説明図 第99図は、命令INDEXのフォーマット図 第100図は、そのフラグ変化の説明図 第101図は、命令ANDのフォーマット図 第102図は、そのフラグ変化の説明図 第103図は、命令ORのフォーマット図 第104図は、そのフラグ変化の説明図 第105図は、命令XORのフォーマット図 第106図は、そのフラグ変化の説明図 第107図は、命令NOTのフォーマット図 第108図は、そのフラグ変化の説明図 第109図は、命令SHAのフォーマット図 第110図は、そのフラグ変化の説明図 第111図は、左シフトの説明図 第112図は、右シフトの説明図 第113図は、命令SHLのフォーマット図 第114図は、そのフラグ変化の説明図 第115図は、左シフトの説明図 第116図は、右シフトの説明図 第117図は、命令ROTのフォーマット図 第118図は、そのフラグ変化の説明図 第119図は、左回転の説明図 第120図は、右回転の説明図 第121図は、命令SHXLのフォーマット図 第122図は、そのフラグ変化の説明図 第123図は、命令XHXLのフォーマット図 第124図は、命令XHXRのフォーマット図 第125図は、そのフラグ変化の説明図 第126図は、命令SHXRのフォーマット図 第127図は、命令RVBYのフォーマット図 第128図は、そのフラグ変化の説明図 第129図は、命令RVBIのフォーマット図 第130図は、そのフラグ変化の説明図 第131,132図は、ビット操作命令の説明図 第133図は、命令BTSTのフォーマット図 第134図は、そのフラグ変化の説明図 第135図は、命令BSETのフォーマット図 第136図は、そのフラグ変化の説明図 第137図は、命令BCLRのフォーマット図 第138図は、そのフラグ変化の説明図 第139図は、命令BNOTのフォーマット図 第140図は、そのフラグ変化の説明図 第141図は、命令BSCHのフォーマット図 第142図は、そのフラグ変化の説明図 第143図は、固定長ビットフィールド操作命令の説明図 第144図は、ビットフィールド命令のフォーマット図 第145図は、命令BFEXTのフォーマット図 第146図は、そのフラグ変化の説明図 第147図は、命令BFEXTUのフォーマット図 第148図は、そのフラグ変化の説明図 第145図は、命令BFEXTのフォーマット図 第146図は、そのフラグ変化の説明図 第147図は、命令BFEXTUのフォーマット図 第148図は、そのフラグ変化の説明図 第149図は、命令BFINSのフォーマット図 第150図は、そのフラグ変化の説明図 第151図は、命令BFINSUのフォーマット図 第152図は、そのフラグ変化の説明図 第153図は、命令BFCMPのフォーマット図 第154図は、そのフラグ変化の説明図 第155図は、命令BFCMPUのフォーマット図 第156図は、そのフラグ変化の説明図 第157図は、命令BVSCHのフォーマット図 第158図は、そのフラグ変化の説明図 第159図は、命令BVMAPのフォーマット図 第160図は、そのフラグ変化の説明図 第161〜163図は、命令BVMAPのフォーマット図 第164図は、命令BVCPYのフォーマット図 第165図は、そのフラグ変化の説明図 第166図は、命令BVPATのフォーマット図 第167図は、そのフラグ変化の説明図 第168図は、命令ADDDXのフォーマット図 第169図は、そのフラグ変化の説明図 第170図は、命令SUBDXのフォーマット図 第171図は、そのフラグ変化の説明図 第172図は、命令PACKssのフォーマット図 第173図は、そのフラグ変化の説明図 第174図は、命令UNPKssのフォーマット図 第175図は、そのフラグ変化の説明図 第176図は、命令UNPKssの説明図 第177図は、命令SMOVのフォーマット図 第178図は、そのフラグ変化の説明図 第179図は、命令SCMPの説明図 第180,181図は、そのフラグ変化の説明図 第182図は、命令SSCHのフォーマット図 第183図は、そのフラグ変化の説明図 第184図は、命令SSTRのフォーマット図 第185図は、そのフラグ変化の説明図 第186図は、命令QINSのフォーマット図 第187図は、そのフラグ変化の説明図 第188〜190図は、命令QINSの説明図 第191図は、命令QDELのフォーマット図 第192図は、そのフラグ変化の説明図 第193〜195図は、命令QDELの説明図 第196図は、命令QSCHのフォーマット図 第197図は、そのフラグ変化の説明図 第198〜200図は、命令QSCHの説明図 第201図は、命令BRAのフォーマット図 第202図は、そのフラグ変化の説明図 第203図は、命令Bccのフォーマット図 第204図は、そのフラグ変化の説明図 第205図は、命令BSRのフォーマット図 第206図は、そのフラグ変化の説明図 第207図は、命令JMPのフォーマット図 第208図は、そのフラグ変化の説明図 第209図は、命令JSRのフォーマット図 第210図は、そのフラグ変化の説明図 第211図は、命令ACBのフォーマット図 第212図は、そのフラグ変化の説明図 第213図は、命令ACBの説明図 第214図は、命令SCBのフォーマット図 第215図は、そのフラグ変化の説明図 第216図は、命令ENTERのフォーマット図 第217図は、そのフラグ変化の説明図 第218図は、命令ENTERの説明図 第219図は、命令EXITDの説明図 第220図は、そのフラグ変化の説明図 第221図は、命令EXITDの説明図 第222図は、命令RTSのフォーマット図 第223図は、そのフラグ変化の説明図 第224図は、命令NOPのフォーマット図 第225図は、そのフラグ変化の説明図 第226図は、命令PIBのフォーマット図 第227図は、そのフラグ変化の説明図 第228図は、命令BSETIのフォーマット図 第229図は、そのフラグ変化の説明図 第230図は、命令BCLRIのフォーマット図 第231図は、そのフラグ変化の説明図 第232図は、命令CSIのフォーマット図 第233図は、そのフラグ変化の説明図 第234図は、命令LDCのフォーマット図 第235図は、そのフラグ変化の説明図 第236図は、命令STCのフォーマット図 第237図は、そのフラグ変化の説明図 第238図は、命令LDPSBのフォーマット図 第239図は、そのフラグ変化の説明図 第240図は、命令LDPSMのフォーマット図 第241図は、そのフラグ変化の説明図 第242図は、命令STPSBのフォーマット図 第243図は、そのフラグ変化の説明図 第244図は、命令STPSMのフォーマット図 第245図は、そのフラグ変化の説明図 第246図は、命令LDPのフォーマット図 第247図は、そのフラグ変化の説明図 第248図は、命令STPのフォーマット図 第249図は、そのフラグ変化の説明図 第250図は、命令JRNGのフォーマット図 第251図は、そのフラグ変化の説明図 第252〜257図は、命令JRNGのフォーマット図 第258図は、命令RRNGのフォーマット図 第259図は、そのフラグ変化の説明図 第260〜262図は、命令RRNGの説明図 第263図は、命令TRAPAのフォーマット図 第264図は、そのフラグ変化の説明図 第265図は、命令TRAPのフォーマット図 第266図は、そのフラグ変化の説明図 第267図は、命令REITのフォーマット図 第268図は、そのフラグ変化の説明図 第269図は、命令REITのフォーマット図 第270図は、命令WAITのフォーマット図 第271図は、そのフラグ変化の説明図 第272図は、命令LDCTXのフォーマット図 第273図は、そのフラグ変化の説明図 第274図は、命令STCTXのフォーマット図 第275図は、そのフラグ変化の説明図 第276図は、命令ACSのフォーマット図 第277図は、そのフラグ変化の説明図 第278図は、命令MOVPAのフォーマット図 第279図は、そのフラグ変化の説明図 第280,281図は、命令MOVPAのフォーマット図 第282図は、命令LDATAの説明図 第283,284図は、そのフラグ変化の説明図 第285図は、命令STATEのフォーマット図 第286,287図は、そのフラグ変化の説明図 第288図は、命令PTLBのフォーマット図 第289図は、そのフラグ変化の説明図 第290図は、命令PSTLBのフォーマット図 第291図は、そのフラグ変化の説明図 第292図は、ATフィールドの説明図 第293図は、論理アドレスの説明図 第294図は、ページアドレスの説明図 第295図は、多重論理空間の説明図 第296図は、UATBのフォーマット図 第297図は、SATBのフォーマット図 第298図は、SXの制限を示す説明図 第299〜301図は、テーブル領域の説明図 第302図は、STEのフォーマット図 第303図は、PXの制限を示す説明図 第304図は、STEの説明図 第305図は、論理アトレスの説明図 第306図は、PTEのフォーマット図 第307図は、PTEの各値とアクセス可能リングとの関係を
示す説明図 第308図は、PTEの説明図 第309,310図は、本発明装置の論理アドレス拡張に係る
メモリマップ 第311図は、データ転送命令のフラグ変化の説明図 第312図は、比較テスト命令のフラグ変化の説明図 第313図は、算術演算命令のフラグ変化の説明図 第314図は、論理演算命令のフラグ変化の説明図 第315図は、シフト命令のフラグ変化の説明図 第316図は、ビット操作命令のフラグ変化の説明図 第317,318図は、固定表ビットフィールド命令のフラグ
変化の説明図 第319図は、任意表ビットフィールド命令のフラグ変化
の説明図 第320図は、10進演算命令のフラグ変化の説明図 第321図は、ストリング命令のフラグ変化の説明図 第322図は、キュー操作命令のフラグ変化の説明図 第323図は、ジャンプ命令のフラグ変化の説明図 第324図は、マルチプセッサ命令のフラグ変化の説明図 第325図は、制御空間、物理空間操作命令のフラグ変化
の説明図 第326図は、OS関連命令のフラグ変化の説明図 第327図は、MMU関連命令のフラグ変化の説明図 第328図は、サブルーチンコールの説明図 第329図は、スタッフクレームの説明図 第330,331図は、命令シーケンスの説明図 第332図は、プログラム例を示す説明図 第333図は、サブルーチンコールの説明図 第334図は、制御空間の説明図 第335図は、PSWのフォーマット図 第336図は、IMASKのフォーマツト図 第337図は、SMRNGのフォーマット図 第338図は、CTXBBのフォーマット図 第339図は、DIのフォーマット図 第340図は、CSWのフォーマット図 第341図は、DCEのフォーマット図 第342図は、CTXBFMのフォーマット図 第343図は、EITVBのフォーマット図 第344図は、JRNGVBのフォーマット図 第345図は、SP0〜SP3のフォーマット図 第346図は、SPIのフォーマット図 第347図は、IOADDR,IOMASKのフォーマット図 第348図は、UATBのフォーマット図 第349図は、SATBのフォーマット図 第350図は、LSIDのフォーマット図 第351図は、CTXBのフォーマット図 第352図は、CTXBFMのフォーマット図 第353図は、EITVTEのフォーマット図 第354図は、スタッフクレームの説明図 第355,356図は、EITのスタックフォーマット図 第357図は、IOINFのフォーマット図 第358図は、EITのベクトルテーブル 第359図は、JRNGの説明図 第360,361図は、EITの説明図 第362図は、IMASKの説明図 第363,364図は、システムコールの説明図 第365図は、DCEの説明図 第366図は、DCE,DI,EIの比較図 第367図は、DCEの使用例の説明図 第368図は、ビット割当図 第369図は、オペランドフィールド各索引図 第370図は、ccccの割当て図 第371図は、eeeeの割当て図 第372図は、M flagの説明図 第373図は、BVMAP命令の演算コード図 第374図は、アドレッシングモードの対応図 第375図は、命令実行モデルのオペランドとの対応図 第376図は、PUSHA @ SP等の説明図 第377図は、POP命令の説明図 第378図は、MOV命令の説明図 第379図は、PACK命令等の説明図 第380図は、STC命令等の説明図 第381図は、BFINS命令等の説明図 第382図は、CMP命令の説明図 第383図は、INDEX命令の説明図 第384図は、ACB命令等の説明図 第385図は、ADD命令の説明図 第386図は、CSI命令の説明図 第387図は、LDM命令等の説明図 第388図は従来のデータ処理装置におけるEIT処理起動方
法のフローチャート、 第389図は本発明のデータ処理装置におけるEIT処理起動
方法のフローチャート、 第390図は本発明におけるデータ処理装置においてEIT処
理発生時、外部記憶装置より取り込んでくるEIT処理ハ
ンドラの先頭アドレスとデータ処理装置の内部状態変数
の一部を含んだEITVTEのフォーマットを示した図、 第391図は本発明におけるデータ処理装置のEIT処理起動
時に形成されるスタックフォーマットを示した図、 第392図は本発明におけるデータ処理装置のEIT処理の種
類に応じたスタックフォーマットを示す図、 第393図は本発明におけるデータ処理装置が多重EIT処理
を行うとき形成されるスタックフォーマットおよびPC、
PSWのデータを示した図である。 1001〜1006……本発明装置におけるEIT処理の各ステッ
プの処理内容 1007〜1011……従来のデータ処理装置におけるEIT処理
の各ステップの処理内容 1020……EIT処理後のスタックポインタ使用モードの指
定を示す1ビットのデータ 1021……EIT処理後のコンテキストのデータサイズが32
ビットか64ビットかを示す1ビットのデータ 1022……EIT処理後のアドレス変換モードの指定を示す
2ビットのデータ 1023……EIT処理後のデバッグモードの有無を示す1ビ
ットのデータ 1024……EIT処理後の割り込み受付優先度のレベル指定
を行う4ビットのデータ 1027……EIT処理の種類に応じたスタックフォーマット
の種類を示す1バイトのデータ 1028……EIT処理の種類を示す1バイトのデータ 1029……EITベクトル番号を示す10ビットのデータ 1030……EIT処理が発生した時点のデータ処理装置のPC
の値 1031……EIT処理の種類に応じたいろいろな追加情報を
格納する数バイトの領域 1032〜1035……本発明の一実施例におけるデータ処理装
置の各種EIT処理によって形成されるスタックフォーマ
ット 1036……多重EIT発生時の最終的なPCの値 1037……多重EIT発生時の最終的なPSWの値 1038〜1044……多重EIT処理発生時に形成されるスタッ
クフォーマット
Claims (5)
- 【請求項1】複数の命令からなるプログラムを処理する
データ処理装置において、各命令処理の境界で、その外
部から割り込み要求信号を受けて割り込み処理を検出す
る手段と、 命令の例外事象を検出する手段と、 内部割り込み命令の実行であるトラップ処理を検出する
手段とを備え、 上記3種類の処理のいずれか1つに分類される複数のEI
T処理がそれぞれ固有の優先度及び処理方法を持ち、 上記優先度に応じて検出されたEITのうちいずれのEIT処
理を起動するかを選択する手段と、 上記選択されたEIT処理が起動された時点の状態であ
り、EIT処理起動時に書換え対象となる第1の情報群を
含む内部状態を外部の記憶装置に格納する手段と、 上記選択されたEIT処理に対応する一連の処理を実行す
べきEIT処理ハンドラの先頭番地が格納されている上記
外部記憶装置の番地を上記選択されたEIT処理各々につ
いて1対1に生成する手段とを有し、 更に上記生成された外部記憶装置の番地に、上記EIT処
理ハンドラの先頭番地とともに、上記EIT処理ハンドラ
の実行開始時の新たな内部状態の一部又は全部となるべ
き候補である第2の情報群を、上記選択されたEIT処理
の一部又は全部の各々について1対1に格納してあるこ
とを特徴とするデータ処理装置。 - 【請求項2】選択されたEIT処理において第2の情報群
を読みだす手段と、 第1の情報群と第2の情報群とを比較して、新たな内部
状態の一部又は全部である第3の情報群の一部又は全部
の値を決定する手段とを備える特許請求の範囲第1項記
載のデータ処理装置。 - 【請求項3】選択されたEIT処理において第2の情報群
を読みだす手段と、 割り込み要求信号に示された第1の割り込み優先度と第
2の情報群の一部である第2の割り込み優先度とを比較
して、新たな内部状態の一部又は全部である第3の情報
群の一部である第3の割り込み優先度を決定する手段と を備える特許請求の範囲第1項記載のデータ処理装置。 - 【請求項4】データ処理装置がある第1の内部状態にあ
る場合に、少なくとも2つのEIT処理が同時に検出され
たとき、固有の優先度に従い優先度が高い第1のEIT処
理を起動し、第1のEIT処理に対する処理プログラムの
最初の命令を実行する前の第2の内部状態で同時に検出
された優先度の低い第2のEIT処理を検出するかどうか
を新たに判断すべくなしてある特許請求の範囲第1項記
載のデータ処理装置。 - 【請求項5】EIT処理ハンドラからそのEIT処理ハンドラ
を起動したときに実行されていたプログラムにもどる専
用復帰命令をもち、 上記専用復帰命令の実行直後とその他の命令の実行直後
とでEIT処理検出条件を異にしていることを特徴とする
特許請求の範囲第1項記載のデータ処理装置。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP62250216A JP2556870B2 (ja) | 1987-10-02 | 1987-10-02 | データ処理装置 |
US07/554,945 US5182811A (en) | 1987-10-02 | 1990-07-10 | Exception, interrupt, and trap handling apparatus which fetches addressing and context data using a single instruction following an interrupt |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP62250216A JP2556870B2 (ja) | 1987-10-02 | 1987-10-02 | データ処理装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH0192840A JPH0192840A (ja) | 1989-04-12 |
JP2556870B2 true JP2556870B2 (ja) | 1996-11-27 |
Family
ID=17204555
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP62250216A Expired - Lifetime JP2556870B2 (ja) | 1987-10-02 | 1987-10-02 | データ処理装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2556870B2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2016066372A (ja) * | 2007-06-01 | 2016-04-28 | インテル コーポレイション | ページ属性サポートのある仮想アドレスから物理アドレスへの変換 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2899009B2 (ja) * | 1989-05-01 | 1999-06-02 | 富士通株式会社 | 情報処理装置 |
JP2581236B2 (ja) * | 1989-11-16 | 1997-02-12 | 三菱電機株式会社 | データ処理装置 |
-
1987
- 1987-10-02 JP JP62250216A patent/JP2556870B2/ja not_active Expired - Lifetime
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2016066372A (ja) * | 2007-06-01 | 2016-04-28 | インテル コーポレイション | ページ属性サポートのある仮想アドレスから物理アドレスへの変換 |
US11074191B2 (en) | 2007-06-01 | 2021-07-27 | Intel Corporation | Linear to physical address translation with support for page attributes |
Also Published As
Publication number | Publication date |
---|---|
JPH0192840A (ja) | 1989-04-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2902402B2 (ja) | データ処理装置 | |
US5182811A (en) | Exception, interrupt, and trap handling apparatus which fetches addressing and context data using a single instruction following an interrupt | |
US5201039A (en) | Multiple address-space data processor with addressable register and context switching | |
US5029069A (en) | Data processor | |
KR101826770B1 (ko) | 다수의 테스트 소스를 사용한 or-테스트 및 and-테스트 기능을 제공하는 융합가능 명령어 및 논리 | |
Sweetman | See MIPS run | |
JP6227621B2 (ja) | 複数の試験ソースに対するor試験及びand試験機能を提供するために命令をフュージングする方法及び装置 | |
JP5739961B2 (ja) | ベクトル圧縮及びローテート機能を提供する命令及び論理 | |
JP2931890B2 (ja) | データ処理装置 | |
KR101572770B1 (ko) | 벡터 로드-op/저장-op에 스트라이드 기능을 제공하는 명령어 및 로직 | |
US10635823B2 (en) | Compiling techniques for hardening software programs against branching programming exploits | |
KR100190252B1 (ko) | 고속 프로세서에서의 브랜치 처리 방법 및 장치 | |
JP6867082B2 (ja) | 装置、方法、プログラム、およびコンピュータ可読記録媒体 | |
JP6687232B2 (ja) | データ投機実行のためのシステム、装置および方法 | |
JP2008536240A (ja) | レジスタファイルとしてのオペランドスタックへの、ネイティブな命令を用いた、マイクロプロセッサのアクセス | |
CN112631657A (zh) | 用于字符串处理的字节比较方法以及指令处理装置 | |
CN116893894A (zh) | 同步微线程化 | |
CN115357332A (zh) | 处理器间中断的虚拟化 | |
JPH07120284B2 (ja) | データ処理装置 | |
Agner | Optimizing software in C++ An optimization guide for Windows, Linux and Mac platforms | |
JP2556870B2 (ja) | データ処理装置 | |
JPH09288564A (ja) | データ処理装置 | |
US20240004659A1 (en) | Reducing instrumentation code bloat and performance overheads using a runtime call instruction | |
US20240095063A1 (en) | User-level exception-based invocation of software instrumentation handlers | |
Darche | Microprocessor 4: Core Concepts-Software Aspects |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313115 |
|
R371 | Transfer withdrawn |
Free format text: JAPANESE INTERMEDIATE CODE: R371 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313115 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20070905 Year of fee payment: 11 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080905 Year of fee payment: 12 |
|
EXPY | Cancellation because of completion of term | ||
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080905 Year of fee payment: 12 |