JPH09288564A - データ処理装置 - Google Patents

データ処理装置

Info

Publication number
JPH09288564A
JPH09288564A JP8241822A JP24182296A JPH09288564A JP H09288564 A JPH09288564 A JP H09288564A JP 8241822 A JP8241822 A JP 8241822A JP 24182296 A JP24182296 A JP 24182296A JP H09288564 A JPH09288564 A JP H09288564A
Authority
JP
Japan
Prior art keywords
instruction
bit
flag
operand
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.)
Pending
Application number
JP8241822A
Other languages
English (en)
Inventor
Takeshi Sakamura
健 坂村
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP8241822A priority Critical patent/JPH09288564A/ja
Publication of JPH09288564A publication Critical patent/JPH09288564A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Executing Machine-Instructions (AREA)

Abstract

(57)【要約】 【課題】 符号付き算術演算と符号なし算術演算とを実
行してもその算術結果の数学的解釈を容易に行えるよう
にする。 【解決手段】 2つのオペランドの間で2の補数表現に
よる符号付き二進数として加算する演算を指定する加算
命令ADD、及び2つのオペランドの間で絶対値表現さ
れた符号なし二進数として加算する演算を指定する加算
命令ADDUが命令セットとして用意され、それぞれの
加算演算結果のオーバーフローが発生したことを意味す
るフラッグをVフラッグで表現したものである。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明はデータ処理装置に関
し、演算結果の数学的解釈を容易にしたデータ処理装置
を提案するものである。
【0002】
【従来の技術及び発明が解決しようとする課題】従来の
データ処理装置における算術演算とフラッグ変化の関係
についてみると符号付き二進数と符号なし二進数とを1
種類の命令で演算し、オペランドを符号付き数と考えて
変化するフラッグと、符号なし数と考えて変化するフラ
ッグとを各別に持っている。ところがこのような装置で
は、オペランドを符号つき数と考えた場合及び符号なし
数と考えた場合の両方の演算結果の状態をフラッグに反
映するため、オペランドを符号つき数と考えた場合に独
立に意味をもつフラッグ、或はオペランドを符号なし数
と考えた場合に独立に意味をもつフラッグが少なくな
る。例えば、符号つき加算命令でオーバーフローが起こ
った場合でも結果の正負を正しく示すフラッグはなかっ
た。また符号なし減算命令でオーバーフローが起こった
場合も結果の正負を正しく示すフラッグはなかった。ま
た独立に意味をもつフラッグが少ないため、条件によっ
ては2つ以上のフラッグを同時に見ないと状態を判断で
きないという難点がある。
【0003】次に従来装置においてデスティネーション
が小さいときのフラッグ変化についてみると整数のビッ
ト列の演算結果又はソースオペランドサイズよりデステ
ィネーションオペランドのサイズが小さいとき格納され
なかったビットは無視する。又浮動小数点データの演算
結果又はソースオペランドサイズよりデスティネーショ
ンオペランドのサイズが小さいとき格納されなかった下
位ビットは一定規則により丸められる。このような装置
には、整数演算の場合、小さなデスティネーションに格
納しても値が正しく保てたかどうかをチェックするた
め、格納前に余分な演算を必要とした。またビット列演
算の場合、格納するビット又は格納しないビットがバイ
ト境界以外になる場合もありチェックが特に複雑とな
る。本発明は斯かる問題点を解決するためになされたも
ので、特に算術演算とフラッグ変化を密に対応づけ、演
算結果の数学的解釈を容易に行えるようにしたデータ処
理装置を提供することを目的とする。
【0004】
【課題を解決するための手段】本発明は、以上の問題点
を解決するために次のような手段をとっている。 1.符号つき演算と符号なし演算とを別命令にする。 2.全フラッグの変化を符号つき命令、符号なし命令に
従い符号つき二進数として意味のあるもの、符号なし二
進数として意味のあるものに専念させる。 3.演算結果、転送結果がデスティネーションサイズに
格納できないとき数学的に正しい値が保たれているかに
従い、フラッグを変化させる。
【0005】本発明に係る第1のデータ処理装置は、2
つのオペランド間の加算もしくは減算の算術演算を2の
補数表現による符号付き二進数として行う命令を指定す
る第1の命令コードと、2つのオペランド間の加算もし
くは減算の算術演算を絶対値表現された符号なし二進数
として行う命令を指定する第2の命令コードとのいずれ
が指定する算術演算を行った場合も、デスティネーショ
ンオペランドに格納された演算結果のオーバーフローの
発生をフラッグで示すことを特徴とする。
【0006】本発明に係る第2のデータ処理装置は、2
つのオペランド間の加算もしくは減算の算術演算を2の
補数表現による符号付き二進数として行う命令を指定す
る第1の命令コードと、2つのオペランド間の加算もし
くは減算の算術演算を絶対値表現された符号なし二進数
として行う命令を指定する第2の命令コードとのいずれ
が指定する算術演算を行った場合も、算術演算の演算結
果の正負をフラッグで示すことを特徴とする。
【0007】本発明に係る第3のデータ処理装置は、2
つのオペランド間で2の補数表現による符号付き二進数
としてその大小を比較する比較演算を指定する第1の命
令コードと、2つのオペランド間で絶対値表現された符
号なし二進数としてその大小を比較する比較演算を指定
する第2の命令コードとのいずれが指定する比較演算を
行った場合も、2つのオペランドの数学的大小関係をフ
ラッグで示すことを特徴とする。
【0008】
【発明の実施の形態】以下、本発明の実施の形態につき
詳しく説明する。以下の実施の形態では、 1.四則演算、比較命令、固定長ビット操作命令をすべ
て符号つきと符号なしの両方用意した。 2.Lフラッグにより、符号つき加算命令と符号つき減
算命令の結果の正負をオーバーフローに関係なく示す。 3.Vフラッグにより結果が格納できなかったときの数
学的意味(符号つき、符号なしに応じて)を示す。 従来のプロセッサ即ち32000,80386,680
00,IBM/370,VAXでは、図409、図41
0、図411、図412、図413、図414に示すよ
うに算術演算とフラッグ変化の関係を見ると、ほとんど
全てのプロセッサが符号付き数と符号なし数を1種類の
命令で演算し、オペランドを符号付き数と考えて変化す
るフラッグと、符号なし数と考えて変化するフラッグと
を共通に持っていた。
【0009】従来のプロセッサで符号なし加算命令が存
在しない場合は、符号付き加算命令として演算を実行し
た結果のフラッグ情報を調べることによって、得られた
結果が符号なし数として有効であるか否かを判断してい
る。図415に示すように、8ビット符号なし数として
192(10)、8ビット符号付き数として−64(1
0)を各々加算する場合に符号なし数として各々を加算
した結果はオーバーフローを生じるはずであるが、符号
付き数として加算された場合の結果は最上位からの桁上
げビットと最上位ビットへの桁上げが一致するためオー
バーフローを生じない。従って、符号なし数としてオー
バーフローを調べるには、他のフラッグ、VAXの場合
は桁上げフラッグがセットされていることにより検出さ
れる。但し、この場合でもオーバーフローフラッグがリ
セットされていることと桁上げフラッグがセットされて
いることの2個の条件を調べなければならず、プログラ
ム数が増え効率が悪くなる。一方、本発明では符号付き
と符号なしの両方の命令を備えており、各々の実行結果
でフラッグに反映されるので、符号なし数として扱いた
い場合は符号なし加算命令を実行し、その結果オーバー
フローを示すフラッグのみを参照すればオーバーフロー
を生じているかどうかを検出できる。また従来のプロセ
ッサでは符号付き加算命令を実行した場合、オーバーフ
ローが生じない時は結果の最上位ビットを見ることによ
り演算結果の正負が判断できたが、オーバーフローが生
じた場合は結果の最上位ビットを見ただけでは演算結果
の正負が判断できず、つまり結果としてのデータが無効
であるという理由からオーバーフローを優先させ演算結
果を無視していた。例えば図416に示すように、8ビ
ットの負の最大数同士(−128(10))を加算した
結果オーバーフローが検出されるが、結果の最上位ビッ
トは0であり(最上位ビットからの桁上げを除く)結果
が負であるということに反している。本発明では、オー
バーフローが生じた時にでも演算結果の正負を情報とし
て提供するフラッグが備わっており、そのビットを参照
するだけで処理結果が明瞭である。
【0010】更に、本発明では各演算におけるオペラン
ドサイズが異種サイズ間でも演算実行され、異種サイズ
間どうしの演算においてもオーバーフロー検出される。
例えば、演算結果がデスティネーションオペランドのデ
ータサイズを越えてしまうような場合、又、ビット抽出
命令によって取り出されたデータがデスティネーション
オペランドのデータサイズを越えてしまうような場合に
もオーバーフローを示すフラッグがセットされる。ま
た、図417に示すように異種サイズ間どうしの符号付
き加算演算においてオーバーフローが生じた場合に、デ
スティネーションオペランドに結果として保持されたデ
ータ(c)の最上位ビット((d)で示される)以外
に、(a)で示される演算結果の最上位ビット、つまり
(b)で示されるサインビットが、正負を示すフラッグ
に情報として格納される(この場合は正を表す。)の
で、たとえオーバーフローが生じて数値データとして意
味を持たなくても演算結果のデータの正負の真偽が検出
できる。
【0011】次に本発明における符号付き演算の場合の
例について説明する。 この命令は、オペランドR0をオペランドR1に符号付
きで足し込む。.Hは、オペランドR0がハーフワード
(16ビット)であることを示す。.Bは、オペランド
R1がバイト(8ビット)であることを示す。 −−−−−−−− この命令の実行例を次に示す。 即ち、8ビット符号付きでは演算結果を表現できない。
こういった場合にV−flagは1になる。 −−−−−−−− この命令の他の実行例を次に示す。 即ち、8ビット符号付きで演算結果を表現できる。こう
いった場合にV−flagは0になる。これは後のAD
D命令の項を参照。
【0012】次に符号なし演算の場合の例について説明
する。 この命令は、オペランドR0をオペランドR1に符号な
しで足し込む。.Hは、オペランドR0がハーフワード
(16ビット)であることを示す。.Bは、オペランド
R1がバイト(8ビット)であることを示す。 −−−−−−−− この命令の実行例を次に示す。 即ち、8ビット符号なしでは演算結果を表現できない。
こういった場合にV−flagは1になる。 −−−−−−−− この命令の他の実行例を次に示す。 即ち、8ビット符号なしで演算結果を表現できる。こう
いった場合にV−flagは0になる。これは後のAD
DU命令の項を参照。次に符号付き転送の場合の例につ
いて説明する。 この命令は、オペランドsrcの値を、オペランドba
seの中のビット番号2から4の始まる3ビット長のビ
ットフィールドに符号付きで転送する。.Hは、オペラ
ンドsrc,baseがハーフワード(16ビット)で
あることを示す。 −−−−−−−− この命令の実行例を次に示す。
【0013】
【数1】
【0014】即ち、3ビット符号付きでは演算結果を表
現できない。こういった場合にV−flagは1にな
る。 −−−−−−−− この命令の他の実行例を次に示す。
【0015】
【数2】
【0016】即ち、この場合は3ビット符号付きで演算
結果を表現できる。こういった場合にV−flagは0
になる。これは後のBFINS命令の項を参照。
【0017】次に符号なし転送の場合の例について説明
する。 この命令は、オペランドsrcの値を、オペランドba
seの中のビット番号2から4の始まる3ビット長のビ
ットフィールドに符号なしで転送する。.Hは、オペラ
ンドsrc,baseがハーフワード(16ビット)で
あることを示す。 −−−−−−−− この命令の実行例を次に示す。
【0018】
【数3】
【0019】即ち、3ビット符号なしでは演算結果を表
現できない。こういった場合にV−flagは1にな
る。 −−−−−−−− この命令の他の実行例を次に示す。
【0020】
【数4】
【0021】即ち、この場合は3ビット符号付きで演算
結果を表現できる。こういった場合にV−flagは0
になる。これは後のBFINSU命令の項を参照。
【0022】次に本発明におけるフラッグの構成を述べ
る。 P・・・Pビットエラーフラッグ F・・・ストリング命令やキュー命令等の高機能命令の
終了条件を示す X・・・多倍長計算用の桁上がりを示す V・・・オーバーフローが発生したことを示す L・・・比較命令等において第1オペランドの方が小さ
いことを示す M・・・演算結果のMSB(Most Signifi
cant Bit)が1であることを示す Z・・・演算結果が0になったことを示す 従来のプロセッサで使用するCarryフラッグは、符
号なし整数の大小関係を表すという意味と、多倍長演算
の桁上がりを表すという意味がある。しかし、本発明で
はXフラッグを備えているためCarryフラッグは整
数の大小関係を表すという意味でのみ用いられる。従っ
て、本発明ではこのCarryフラッグを大小関係を表
すフラッグであると定義し、名前をLフラッグとしてい
る。Lフラッグは符号なし演算の場合には従来のCar
ryフラッグと同じ振る舞いをするが、符号付き演算の
場合には従来のCarryフラッグとは異なり、オーバ
ーフローまで考慮した真の大小関係を意味する。Xフラ
ッグは、多倍長の演算を行う場合に桁下がりの状態を保
持するために使用される。符号付き演算でも符号なし演
算の時と同様な変化をする。これは、従来のプロセッサ
のCarryフラッグとほぼ同じ意味をなす。従来のプ
ロセッサではシフト命令等ではみ出したビットを入れる
ためにCarryフラッグを用いていたが、本発明では
Lフラッグを設けているため、はみ出したビットはXフ
ラッグに入れることにしている。Vフラッグは、演算の
結果がデスティネーションオペランドで指定されたサイ
ズでは表現できなかったことを示す。つまり、デスティ
ネーシヨンオペランドのサイズの符号付き整数で表現で
きない時にもVフラッグがセットされる。Mフラッグと
Zフラッグは演算結果をデスティネーションオペランド
のサイズに変換した後の値を基準にして変化する。従っ
て、ソースオペランドのサイズよりも、デスティネーシ
ョンオペランドのサイズの方が小さい場合は演算結果が
0でなくてもZフラッグがセットされることがありう
る。以下、符号付きと符号なしの両方を持つ演算命令各
々についてのフラッグの変化について述べる。
【0023】(1)ADD命令(符号付き)とADDU
命令(符号なし) Lフラッグ:演算結果が負になったことを示す。ADD
U命令では0にリセットされる。 Mフラッグ:演算の結果、デスティネーションオペラン
ドに格納された最上位ビットを示す。Mフラッグも正負
を表すが、オーバーフローを生じた場合正しい正負を表
示しているとは言えない。 Zフラッグ:演算の結果、デスティネーションオペラン
ドに格納された値が0であることを示す。 Vフラッグ:デスティネーションサイズを越えるような
演算結果になったことを示す。 Xフラッグ:デスティネーションサイズを越えて桁上げ
が生じたことを示す。 (2)SUB命令(符号付き)とSUBU命令(符号な
し) Lフラッグ:演算結果が負になったことを示す。 Mフラッグ:演算の結果、デスティネーションオペラン
ドに格納された最上位ビットを示す。Mフラッグも正負
を表すが、オーバーフローを生じた場合正しい正負を表
示しているとは言えない。 Zフラッグ:演算の結果、デスティネーションオペラン
ドに格納された値が0であることを示す。 Vフラッグ:デスティネーションサイズを越えるような
演算結果になったことを示す。SUBU命令では、結果
が負になった場合も相当する。 Xフラッグ:デスティネーションサイズを越えて桁下げ
が生じたことを示す。
【0024】(3)MUL命令(符号付き)とMULU
命令(符号なし) Lフラッグ:演算結果が負になったことを示す。MUL
U命令では0にリセットされる。 Mフラッグ:演算の結果、デスティネーションオペラン
ドに格納された最上位ビットを示す。Mフラッグも正負
を表すが、オーバーフローを生じた場合正しい正負を表
示しているとは言えない。 Zフラッグ:演算の結果、デスティネーションオペラン
ドに格納された値が0であることを示す。 Vフラッグ:デスティネーションサイズを越えるような
演算結果になったことを示す。 Xフラッグ:不変 (4)DIV命令(符号付き)とDIVU命令(符号な
し) Lフラッグ:演算結果が負になったことを示す。DIV
U命令では0にリセットされる。ただし、DIV命令に
おいて(最大負数)÷(−1)は実行した場合は0にリ
セットされる。又、零除算例外発生時のLフラッグは不
変である。 Mフラッグ:演算の結果、デスティネーションオペラン
ドに格納された最上位ビットを示す。Mフラッグも正負
を表すが、オーバーフローを生じた場合、つまりDIV
命令における(最大負数)÷(−1)を実行した際は1
にセットされ、零除算例外発生時は不変である。 Zフラッグ:演算の結果、デスティネーションオペラン
ドに格納された値が0であることを示す。ただし、DI
V命令における(最大負数)÷(−1)は実行した際は
0にリセットされ、零除算例外時は不変である。 Vフラッグ:デスティネーションサイズを越えるような
演算結果、つまりDIV命令における(最大負数)÷
(−1)の実行、及び、零除算例外を発生した場合にの
み1にセットされる。 Xフラッグ:不変
【0025】(5)MOV命令(符号付き)とMOVU
命令(符号なし) Lフラッグ:不変 Mフラッグ:演算の結果、デスティネーションオペラン
ドに格納された最上位ビットを示す。Mフラッグも正負
を表すが、オーバーフローを生じた場合正しい正負を表
示しているとは言えない。 Zフラッグ:演算の結果、デスティネーションオペラン
ドに格納された値が0であることを示す。 Vフラッグ:デスティネーションサイズを越えるような
演算結果になったことを示す。(符号ビット拡張部のは
み出しは許される) Xフラッグ:不変 (6)REM命令(符号付き)とREMU命令(符号な
し) Lフラッグ:演算結果が負になったことを示す。(演算
前のデスティネーションオペランドの符号をそのまま維
持する)REMU命令では0にリセットされる。ただ
し、零除算例外発生時は不変である。 Mフラッグ:演算の結果、デスティネーションオペラン
ドに格納された最上位ビットを示す。正負を示すフラッ
グであるが、零除算例外発生時は不変である。 Zフラッグ:演算の結果、0になったことを示す。ただ
し、零除算例外発生時は不変である。 Vフラッグ:0にリセットされる。零除算例外が生じて
も剰余がオーバーフローするわけではないのでクリアし
ておくことにすると、例外処理中でDIV命令によるエ
ラーか、REM命令によるエラーかが判別できる。 Xフラッグ:不変
【0026】(7)CMP命令(符号付き)とCMPU
命令(符号なし) Lフラッグ:演算の結果、オペランド1がオペランド2
よりも小さいことを示す。 Mフラッグ:不変 Zフラッグ:演算の結果、オペランド1とオペランド2
が等しいことを示す。(オペランドサイズが異なる場
合、サイズの大きい方に符号拡張又は、ゼロ拡張されて
実行される。) Vフラッグ:不変 Xフラッグ:不変 (8)BFCMP命令(符号付き)とBFCMPU命令
(符号なし) Lフラッグ:演算の結果、ビットフィールド値が小さい
ことを示す。 Mフラッグ:不変 Zフラッグ:演算の結果、ソース値とビットフィールド
が等しいことを示す。 Vフラッグ:不変 Xフラッグ:不変
【0027】(9)BFEXT命令(符号付き)とBF
EXTU命令(符号なし) Lフラッグ:不変 Mフラッグ:演算の結果、デスティネーションオペラン
ドに格納された最上位ビットを示す。正負を示すフラッ
グであるが、オーバーフローを生じた場合正しい正負を
表示しているとは言えない。 Zフラッグ:演算の結果、デスティネーションオペラン
ドに格納された値が0であることを示す。 Vフラッグ:デスティネーションサイズを越えるような
演算結果になったことを示す。ただし、抽出されるデー
タが、BFEXT命令の場合に符号拡張されたデータで
あり拡張された部分のみがサイズをオーバーしている時
はVフラッグはセットされない。同様に、BFEXTU
命令の場合に抽出データがゼロ拡張されたデータであり
拡張された部分のみがサイズをオーバーしている時もV
フラッグはセットされない。 Xフラッグ:不変 (10)BFINS命令(符号付き)とBFINSU命
令(符号なし) Lフラッグ:不変 Mフラッグ:演算の結果、データ挿入フィールドに格納
された最上位ビットを示す。正負を示すフラッグである
が、オーバーフローを生じた場合正しい正負を表示して
いるとは言えない。 Zフラッグ:演算の結果、データ挿入フィールドに格納
された値が0であることを示す。 Vフラッグ:データ挿入フィールドのサイズを越えるよ
うな演算結果になったことを示す。ただし、ソースオペ
ランドが、BFINS命令の場合に符号拡張されたデー
タであり拡張部分のみがサイズをオーバーしている時は
Vフラッグはセットされない。同様に、BFINSU命
令の場合にソースオペランドがゼロ拡張されたデータで
あり拡張された部分のみがサイズをオーバーしている時
もVフラッグはセットされない。 Xフラッグ:不変 以下本発明装置の全貌を詳細に説明する。説明が長大に
なるので目次を付し、また付加的説明、説明の整理のた
めに付録を付けた。
【0028】目 次 1.本発明装置の特徴 1−1.基本設計思想 1−2.OS向きアーキテクチャ 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−forma
t) 6−1−3.リテラル−メモリ間(Q−format) 6−1−4.イミディエート−メモリ間(I−form
at) 6−2.1オペランド一般形(G1−format) 6−3.2オペランド一般形 6−3−1.第一オペランドはメモリ読みだし(G−f
ormat) 6−3−2.第一オペランドは8ビットイミディエート
(E−format) 6−3−3.第一オペランドはアドレス計算(GA−f
ormat) 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.MMU関連命令 付録1.本発明装置命令セットレファレンス 付録2.本発明装置のアセンブラ表記について 付録3.本発明装置メモリ管理方式概要 付録4.本発明装置のフラッグ変化 付録5.異種サイズ間の演算について 付録6.高級言語向きサブルーチンコール 付録7.制御レジスタと制御空間 付録8.本発明装置のCTXB 付録9.本発明装置のEIT処理 付録10.本発明装置の命令セットパターン 付録11.高機能命令の詳細仕様と終了時のレジスタ値 付録12.オペランドが干渉した場合の動作 付録13.キャッシュやTLBの整合性確保について
【0029】1.本発明装置の特徴
【0030】1−1.基本設計思想 ・本発明装置はRISCではない。基本命令の高速実
行を第一目標とし、さらに高機能命令を追加した。 ・32ビット版の本発明装置32と64ビット版の本発
明装置64を同時に設計し、32ビット版と64ビッ
ト版のチップをシリーズ化した。したがって、64ビッ
トデータ、64ビットアドレッシングへの拡張が始めか
ら考慮されている。 ・OSと込みで開発し、リアルタイムOSであるITR
O N(Industorial−TRON)とワーク
ステーション用のOSであるBTRON(Busine
ss−TRON)を高速で実行することを目指した。本
発明装置はTRON〈〈LIR〉〉仕様を満たし、特に
実記憶環境での高速処理に重点を置く。 ・将来のASIC LSIの核となるマイクロプロセッ
サとする。
【0031】1−2.OS向きアーキテクチャ ・ビットマップ操作サポート命令 BTRONで必要となるビットマップの移動、演算を行
なう命令 ・コンテキストスイッチ命令 ITRONにおいて高速のタスク切り替えを行なうため
の命令 ・キュー操作命令 ITRONのレディキュー、ウエイトキューの操作を行
なう命令 ・2レベルのリング保護によるメモリ管理(将来の拡張
用にさらに2レベルのリングを用意している。)
【0032】1−3.チューニングされた命令セット ・頻度の高い命令、アドレッシングモードが短い命令と
なるようにチューニングレジスタ間演算、リテラル演算
の命令長を短縮
【0033】1−4.コンパイラ向きの命令セット ・直交化された命令セット ・データの保持、アドレスの保持、インデクス値の保持
といった各種の目的に使用できる16本の汎用レジスタ ・強力なアドレッシングモード 付加モードにより、任意段数のインデクス加算と間接参
照が可能。 ・異なるデータサイズ間での演算が可能 ソースオペランドとデスティネーションオペランドのサ
イズを別々に指定可能。 ・高級言語向きの高機能ジャンプ命令
【0034】2.本発明装置32と本発明装置64 本発明装置では、32ビット版の本発明装置32と64
ビット版の本発明装置64をシリーズ化して扱ってお
り、64ビット版への拡張が始めから考慮されているの
が大きな特徴である。本発明装置64では、64ビット
のリニアアドレスの空間が提供される。また、本発明装
置64では、本発明装置32で扱うデータタイプに加え
て、64ビット整数を扱うことができる。本発明装置6
4での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
ビットポインタを命令毎に切り替え、混在できるように
したとしても、大部分はコンテキスト単位で同じ指定を
繰り返すだけになり、ビット割り当てとしては効率の悪
いものになる。そのような状況では、モードの方が適当
である。
【0035】モードを使って32/64を切り替える場
合、モードをいつ設定するか、本発明装置32と本発明
装置64の互換性が大丈夫かといった疑問が生ずるかも
しれない。しかし、デフォルトが32ビットポインタと
なるようにしておき、64ビットアドレスを使用する時
にモード変更するという形態にすれば、本発明装置64
でも本発明装置32用のプログラムをそのまま走らせる
ことができる。また、32ビットポインタと64ビット
ポインタの切り替えをモードではなく命令単位にしたと
しても、OSがスタックをどこに設定するか、システム
コールのパラメータが32ビット/64ビットのどちら
か、といったことを判断するために、OSは各コンテキ
ストが32ビットか64ビットかということを認識して
おく必要がある。その場合には、(スタックに退避され
た)PSW中のモードを見て32ビット/64ビットを
判断できる方が便利なことがある。
【0036】3.本発明装置仕様のクラス分け 本発明装置では、64ビット版への拡張、シリーズ化、
多様な用途への適応、などといった要求に対応するた
め、インプリメントするかどうかオプションとなってい
る機能がある。このような「オプション機能」の位置付
けを明確にするため、本発明装置の仕様を次のようにク
ラス分けする。 〈〈L0〉〉仕様(Level 0) 本発明装置として必ず満たさなければならない仕様であ
る。〈〈L0〉〉仕様の例は、ユーザプログラムから見
たプログラミングモデル(ISPの大部分、汎用レジス
タ、PSH)、機械語のビットパターンなどである。仕
様書中では、特に何も書いてない部分が〈〈L0〉〉仕
様となる。 〈〈L1〉〉仕様(Level 1) インプリメントしておくのが原則であるが、特に用途の
限定された軽い仕様のプロセッサを作りたい場合には、
必ずしもインプリメントしなくてもよい仕様である。
〈〈L1〉〉仕様になるのは、ストリング命令、付加モ
ード、キュー操作命令、ビットマップ命令といった高機
能命令などであるが具体的にどの命令を〈〈L1〉〉仕
様とするかは別に定める。
【0037】〈〈L1R〉〉仕様(Level 1 R
eal) 〈〈L1〉〉仕様から命令再実行関係の機能とMMU関
係の機能を削除した仕様であり、ITRONとμBTR
ONなどを実記憶ベースで効率よく動かすための仕様で
ある。〈〈L1R〉〉の命令セットは〈〈L1〉〉とほ
ぼ同じであり、コンパイラやユーザプログラムは共通に
使用できるようにする。ただし、MMU関係(MOVP
Aなど)、OS関係(JRNGなど)の一部の命令につ
いては、サポートしないものがある。 〈〈L2〉〉仕様(Level 2) 将来のハードウエア量の増加にしたがって導入される予
定の仕様である。命令の対称性を高めるための仕様と、
演算の高速化に対応して新たに追加する命令の仕様とが
ある。前者の例としてはBVSCH命令の’/B’オプ
ション、ストリング命令での複雑な終了条件、無限段数
の付加モードなどがあり、後者の例としてはINDEX
命令などがある。仕様書中では、〈〈L2〉〉仕様の部
分を〈〈L2〉〉で示す。
【0038】〈〈LX〉〉仕様(eXtension) 本発明装置64への拡張にしたがって導入される予定の
仕様である。L2仕様と同様の意味を持つが、本発明装
置64への対応ということで別のクラスとして扱う。
〈〈LX〉〉仕様の例は、64ビット演算命令などであ
る。仕様書中では、〈〈LX〉〉仕様の部分を〈〈L
X〉〉で示す。 〈〈LU〉〉仕様(Undefined) 将来の拡張によって導入される予定の仕様であるが、現
段階ではまだ具体的な仕様まで提示されていないもので
ある。 〈〈LV〉〉仕様(Variable) 各メーカーが全く自由に仕様を決めてよい部分である。
チップのピン配置、パイプラインの段階や性能に関する
仕様、各メーカーに割り当てられた命令のビットパター
ン、制御レジスタの使い方などが〈〈LV〉〉仕様の例
である。このうち、各メーカーに割り当てられた命令ビ
ットパターンについては、ビットパターンのレファレン
ス中でLVreservedにより示されている。
【0039】〈〈LA〉〉仕様(Alternativ
e) 本発明装置としての標準仕様が提示されている(あるい
は、提示される予定がある)が、他にやむを得ない理由
があれば変更してもよいという仕様である。もちろん、
仕様を変更した部分に関しては互換性の失われる場合が
ある。〈〈LA〉〉仕様は、TRONとしての互換性を
保証しない仕様である。〈〈LA〉〉仕様の例は、メモ
リ管理方式、制御レジスタと特権命令の一部などであ
り、主にOSの関係する部分である。本発明装置はMM
Uを内蔵せず、特に実記憶環境での高速処理を目指す。
従ってメモリ管理に関する〈〈LA〉〉仕様の大部分は
本発明装置でサポートされない。
【0040】4.レジスタセット ・本発明装置32では32ビット長の汎用レジスタが1
6本、本発明装置64では64ビット長の汎用レジスタ
が16本存在する。 ・スタックポインタ(Stack Pointer−S
P)、フレームポインタ(Frame Pointer
−FP)は汎用レジスタに含まれる。SPはR15、F
PはR14となる。 ・プログラムカウンタ(Program Counte
r−PC)は汎用レジスタに含まれない。 ・汎用レジスタは、データ保持、ベースアドレス保持、
あるいはインデクスレジスタとして、各種の目的に使用
できる。 ・プロセッサの状態を保持するレジスタ(Proces
sor StatusWord−PSW)を持つ。図
1、図2は、本発明装置64の場合〈〈LX〉〉のレジ
スタセットを示す。 ・SPはコンテキスト(リング番号、割り込み処理中)
に応じて切り替わる。 ・PSWは4バイトからなる。下位第一バイトがステー
タスの表示(Processor Status By
te−PSB)、下位第二バイトがユーザのモード設定
(PSBと合わせてProcessor Status
Halfword−PSH)、上位の2バイトがシス
テムの状態表示用、となる。 ・本発明装置はいわゆるbig−endianのチップ
であり、レジスタ上のデータについては、8ビット、1
6ビットのデータをLSB側に詰めて配置する。したが
って、データサイズとは無関係な絶対的なビット番号を
定義することができない。ビット番号を議論する場合に
は、必ずデータサイズと組にして扱う必要がある。これ
を「ビット位置」と呼ぶ。 ・レジスタ上の8ビットデータに対しては、ビット位置
はMSB側から0,1,...7と付けられる。また、
レジスタ上の16ビットデータに対しては、ビット位置
はMSB側から0,1,...15と付けられ、レジス
タ上の32ビットデータに対しては、ビット位置はMS
B側から0,1,...31と付けられる。したがっ
て、8ビットデータのビット位置7のビット、16ビッ
トデータのビット位置15のビット、32ビットデータ
のビット位置31のビットが物理的には同一のビットと
なる。 ・レジスタをデスティネーションオペランドとする命令
において、レジスタ側のデータサイズが8ビット、16
ビットであった場合には、上位バイトは影響を受けず、
無変化となる。これは、メモリ上で演算を行なった場合
の仕様と合わせたものである。上位ビットにまで影響を
与えたい場合は、異種サイズ間の演算を利用する。 ・レジスタ上に8ビット、16ビットのデータを置く場
合には、LSB側に詰められるので、例えば、 の結果はR1=H’123456aaとなる。一方、メ
モリに対して同じことを行なった場合 には、8ビット、16ビットのデータのMSB側が揃う
ことになるので、R1=H’aa345678となる。
レジスタ上とメモリ上で結果が異なるので、注意が必要
である。
【0041】5.データタイプ 本発明装置では、いわゆるbig−endianを採用
している。すなわち、バイトアドレスの指定、ビット番
号の指定とも、小さい番号(アドレス)の方がMSB
(Most Significant Bit/Byt
e)となっている。big−endianでは、メモリ
上のあるデータについて、それを8ビットデータとして
見る時と16(32)ビットデータとして見る時のアド
レスが異なってくるため、注意が必要である。例えば、 といった場合に、32ビットデータとしてのアドレスN
の内容はH’00000012であるが、(H’は16
進を表わす)、同じ内容のデータを8ビットデータとし
て扱うときは、アドレスN+3を参照しなければならな
い。
【0042】ただし、レジスタ上のデータに関しては、
8ビットデータ、16ビットデータがLSB側に詰めて
配置されるため、レジスタ上に置かれたデータを、その
まま別のサイズのデータとして扱うことができる。例え
ば、 の結果はR1=H’00000012となる。(命令の
意味については本文参照) 一方、メモリに対して同じことを行なった場合 には、8ビットデータH’12と32ビットデータのM
SB側が揃うことになるので、R1=H’120000
00となる。本発明装置でサポートしているデータタイ
プを 以下に説明する。
【0043】5−1.ビット 図3のように太線内が対象ビットである。メモリ上のビ
ット操作の場合、offsetは任意レジスタ上のビッ
ト操作の場合、offsetは一つのレジスタ内に限定
(offsetの上位ビットを無視する) ビットの指定は、base_addressの指定、b
ase_addressのサイズの指定、offset
の指定の組によって行なわれる。メモリ上のビットを対
象とした場合には、base_addressで示され
るメモリアドレスのMSBがoffset=0のビット
となる。この時、base_addressのサイズの
指定は、実際に操作されるビットには影響しない。ビッ
ト操作命令では、メモリに対してread−modif
y−writeを行なうアクセスサイズを指定するため
にbase_addressのサイズの指定が利用され
るが、アクセスサイズが異なっても実際に操作されるビ
ットは同じである。一方、レジスタ上のビットを対象と
した場合には、base_addressのサイズとし
て指定されたデータサイズでのMSBがoffset=
0のビットとなる。baseaddressのサイズが
異なれば、実際に操作されるビットも異なったものにな
るので、注意が必要である。
【0044】5−2.ビットフィールド ・符号付きビットフィールド 図4に示すように太線内が対象ビットフィールドであ
る。 base_addressのMSBから、対象ビットフ
ィールドのMSB(符号ビット)までのビットの隔たり
がoffsetとなる。 BF:G命令によるメモリ上のビットフィールド操作の
場合、offsetは任意。 BF:E命令によるメモリ上のビットフィールド操作、
およびレジスタ上のビットフィールド操作の場合、ba
se_addressの1ワード(1ロングワード)を
はみ出した部分のビットフィールドについて、動作を保
証しない。 ・符号なしビットフィールド 図5に示すように太線内が対象ビットフィールドであ
る。 base_addressのMSBから、対象ビットフ
ィールドのMSBまでのビットの隔たりがoffset
となる。 BF:G命令によるメモリ上のビットフィールド操作の
場合、offsetは任意。 BF:E命令によるメモリ上のビットフィールド操作、
およびレジスタ上のビットフィールド操作の場合、ba
se_addressの1ワード(1ロングワード)を
はみ出した部分のビットフィールドについて、動作を保
証しない。 ・任意長ビットフィールド
【0045】5−3.整数 図6、図7に整数のデータタイプを示す。
【0046】5−4.浮動小数 浮動小数点の演算は、コプロセッサで扱う。浮動小数点
の形式はIEEE規格である。詳細は別に定める。 ・単精度32ビット浮動小数〈〈コプロセッサ〉〉 ・倍精度64ビット浮動小数〈〈コプロセッサ〉〉 ・80ビット浮動小数〈〈コプロセッサ〉〉
【0047】5−5.10進数 多倍長の10進数の四則演算は、コプロセッサで扱う。
本発明装置のメインプロセッサでは、以下に示すような
固定長の符号なしPACKED形式10進数、および符
号付きPACKED形式10進数を扱う。ただし、符号
付きPACKED形式10進数を扱う命令は、すべて
〈〈L2〉〉である。図8、図9にデータタイプをしめ
す。
【0048】5−6.ストリング 図10、図11にストリングの場合のデータタイプを示
す。
【0049】5−7.キュー 図12にダブルリンクでつながれた線形リストのデータ
タイプを示す。
【0050】6.命令フォーマット 命令は16ビット単位で可変長となっており、奇数バイ
ト長の命令はない。2オペランド命令には、大きくわけ
て、4バイト+拡張部の構成をもち、すべてのアドレッ
シングモード(Ea)が利用できる一般形、および頻度
の高い命令とアドレッシングモード(Sh)のみを使用
できる短縮形、の2つのフォーマットがある。必要とな
る命令機能とコードサイズに合わせて、より適した方を
選択することができる。
【0051】本発明装置の命令フォーマットは、細かい
点まで気をつければかなり多くの種類に分かれる。しか
し、理解を容易にするため、ここでは本発明装置の命令
フォーマットを大まかに分類して説明を行なう。命令フ
ォーマットの詳細については、付録10を参照のこと。
フォーマット中に現われる記号の意味は次の通りであ
る。 フォーマットの記述は、右側がLSB側で、かつ高いア
ドレスになっている。(big−endian) フォーマットの記述例を図13に示す。アドレスNとア
ドレスN+1の2バイトを見ないと命令フォーマットが
判別できないようになっているが、これは、命令が必ず
16ビット(2バイト)単位でフェッチ、デコードされ
ることを前提としたためである。いずれのフォーマット
の場合も、各オペランドのEaまたはShの拡張部は、
必ずそのEaまたはShの基本部を含むハーフワードの
直後に置かれる。これは、命令により暗黙に指定される
イミディエートデータや、命令の拡張部に優先する。し
たがって、4バイト以上の命令では、Eaの拡張部によ
って命令のオペコードが分断される場合がある。また、
付加モードなどによって、Eaの拡張部にさらに拡張部
が付く場合にも、次の命令オペコードよりもそちらの方
が優先される。例えば、第一ハーフワードにEa1を含
み、第二ハーフワードにEa2を含み、第三ハーフワー
ドまである6バイト命令の場合を考える。Ea1に付加
モードを使用したため、普通の拡張部のほかに付加モー
ド拡張部もつくものとする。この時、実際の命令ビット
パターンは の順となる。
【0052】なお、アラインメントの関係で16ビット
のフィールドのうちの8ビットのみを使用するケースで
は、使用する8ビットは下位順(アドレスの大きい方)
に詰めて置かれるものとする。これに該当するのは、オ
ペランドサイズが8ビットで、EaR,ShRに#im
m_dataのモードを指定した場合、I−forma
tでオペランドサイズが8ビットの場合、BRA:G,
Bcc:G,BSR:GでSS=00の場合、などであ
る。例えば、 の場合、第一バイトがMOV:I.Bのオペコード、第
二バイトがオペコードの一部とShW(@R0)の指
定、第三バイトは0、第四バイトがH’12となり、ビ
ットパターンは図14のようになる。この場合、16ビ
ットのフィールドの上位側(アドレスの小さい方)の8
ビットには必ず0を入れておかなければならない。上位
8ビットが0でない場合は、これによって表現されるデ
ータがインプリメント依存の不定値になるものとする。
つまり、I−format,#imm_dataモード
の場合はそのオペランドがインプリメント依存の値にな
り、BRA:G,Bcc:G,BSR:G命令の場合
は、ジャンプ先が不定となる。いずれの場合も、EIT
(例外)とはしない。
【0053】6−1.2オペランド短縮形
【0054】6−1−1.レジスタ−メモリ間(S−f
ormat,L−format) 図15にその例を示す。L−format,S−for
matの命令には、サイズ指定のできるもの(MOV:
L,MOV:S,CMP:L)とサイズ指定のできない
もの(ADD:L,SUB:L)がある。サイズ指定の
できる命令では、RR等によるサイズ指定はメモリ側の
みに適用され、レジスタ側のサイズは32ビット固定と
なっている。レジスタ側とメモリ側のサイズが異なる場
合には、ソース側のサイズが小さい場合に符号拡張が、
デスティネーション側のサイズが小さい場合に上位バイ
トのカットとオーバーフローのチェックが行なわれる。
一方、サイズ指定のできないADD:L,SUB:L命
令では、レジスタ側、メモリ側のオペランドサイズとも
32ビット固定である。レジスタ側のサイズを32ビッ
ト固定としたのは、本発明装置において、「レジスタ上
のデータは、できる限り32ビット符号付き整数として
扱う」という原則を設けているためである。この原則
は、L−format,S−format命令のほか、
ビットフィールド命令や高機能命令でレジスタ上にオペ
ランドを置く場合にも適用される。
【0055】6−1−2.レジスタ−レジスタ間(R−
format) 図16にその例を示す。
【0056】6−1−3.リテラル−メモリ間(Q−f
ormat) 図17にその例を示す。
【0057】6−1−4.イミディエート−メモリ間
(I−format) 図18にその例を示す。I−formatのイミディエ
ート値のサイズは、デスティネーション側のオペランド
のサイズと共通に8,16,32,64ビットとなり、
ゼロ拡張、符号拡張は行なわれない。
【0058】6−2.1オペランド一般形(G1−fo
rmat) 図19にその例を示す。
【0059】6−3.2オペランド一般形 ここに含まれるのは、8ビットで指定する一般形アドレ
ッシングモードのオペランドが2つ存在する命令であ
る。オペランドの総数は3つ以上になる場合がある。
【0060】6−3−1.第一オペランドはメモリ読み
だし(G−format) 図20にその例を示す。
【0061】6−3−2.第一オペランドは8ビットイ
ミディエート(E−format) 図21にその例を示す。このフォーマットとイミディエ
ート−メモリ間のフォーマット(I−format)と
は機能的には似たものであるが、考え方の点では大きく
違っている。E−formatはあくまでも2オペラン
ド一般形(G−format)の派生形であり、ソース
オぺランドのサイズが8ビット固定、ディスティネーシ
ョンオペランドのサイズが8/16/32/64ビット
から選択となっている。つまり、異種サイズ間の演算を
前提とし、destのサイズに合わせて8ビットのsr
cがゼロ拡張または符号拡張される。一方、I−for
matは、特にMOV,CMPで頻度の多いイミディエ
ートのパターンを短縮形にしたものであり、ソースとデ
ィスティネーションのサイズは等しい。
【0062】6−3−3.第一オペランドはアドレス計
算(GA−format) 図22にその例を示す。
【0063】6−3−4.その他の2オペランド命令 図23にその例を示す。
【0064】6−4.ショートブランチ 図24にその例を示す。
【0065】6−5.その他 以上の外に図25に示すようなものがある。
【0066】7.アドレッシングモード 本発明装置のアドレッシングモードには、レジスタを含
めて6ビットで指定する短縮形(Sh)と、8ビットで
指定する一般形(Ea)がある。未定義のアドレッシン
グモードを指定した場合や、意味的に考えて明らかにお
かしなアドレッシングモードの組み合わせを指定した場
合には、未定義命令を実行した場合と同じく予約命令例
外(RIE)を発生し、例外処理を起動する。これに該
当するのは、destinationがイミディエート
モードの場合、アドレス計算の命令でイミディエートモ
ードを使用した場合などである。
【0067】7−1.Pビット 本発明装置では、毎回のメモリアクセスに対応して1ビ
ットのオプション機能指定ビットを割り当てることがで
きるようになっており、このビットをPビットと呼ぶ。
Pビットは、メモリアクセスに伴って何らかの別の意味
を加えたい場合に使用するビットである。Pビットは、
毎回のメモリアクセス毎に独立に指定する。したがっ
て、レジスタ間接アドレッシング、アブソリュートアド
レッシングなどの場合はオペランドに対応して一つのP
ビットを指定するが、付加モードを使用した多段間接の
アドレッシングモードでは、その段数分だけのPビット
を指定することになる。Pビットの用途としては、タグ
のチェック、論理空間の切り替え、32ビットアドレッ
シングと64ビットアドレッシングの切り替えなどがあ
るが、これらはすべて将来の拡張用であり、現在の仕様
ではPビットはreservedとなっている。命令フ
ォーマットの説明では、Pビットの部分を’P’で表示
してあるが、ここは必ず0にしておかなければならな
い。Pビットが0になっていなかった場合には、予約命
令例外(RIE)が発生する。Pビットに関する機能は
〈〈LU〉〉仕様である。
【0068】7−2.フォーマット中で使われる記号 以下点線で囲まれた部分は、拡張部を示す。
【0069】7−3.レジスタ直接 アセンブラ表記: オペランド: フォーマット:図26に示す。
【0070】7−4.レジスタ間接 アセンブラ表記: オペランド: フォーマット:図27に示す。
【0071】7−5.レジスタ相対間接 アセンブラ表記: オペランド: フォーマット:図28に示す。 なおdispは符号付きとして扱う。
【0072】7−6.イミディエート アセンブラ表記: オペランド: フォーマット:図29に示す。 なおimm_dataのサイズは、オペランドサイズと
して命令中で指定される。
【0073】7−7.アブソリュート アセンブラ表記: オペランド: フォーマット:図30に示す。 なお32ビットアドレッシングの時は、abs:16で
指定したアドレスは32ビットに符号拡張される。ま
た、64ビットアドレッシングの時は、abs:16,
abs:32で指定したアドレスは64ビットに符号拡
張される。
【0074】7−8.PC相対間接 アセンブラ表記: オペランド: フォーマット:図31に示す。 PC相対間接モードにおいて参照されるPCの値は、そ
のオペランドを含む命令の先頭アドレスである。したか
って、例えば無限ループは という命令によって実現される。付加モードにおいてP
Cの値が参照される場合にも、同じように命令先頭のア
ドレスをPC相対の基準値として使用する。
【0075】7−9.スタックポップ アセンブラ表記: オペランド: フォーマット:図32に示す。 @SP+のモードでは、オペランドサイズだけSPをイ
ンクリメントする。例えば、本発明装置64で64ビッ
トデータを扱う時には、SPが+8だけ更新される。
B,Hのサイズのオペランドに対する@SP+の指定も
可能であり、それぞれSPが+1,+2だけ更新され
る。ただし、スタックのアラインメントがくずれて速度
低下の原因になるため、使用上は注意した方がよい。オ
ペランドに対して@SP+のモードが意味を持たないも
のに対しては、予約命令例外(RIE)を発生する。具
体的に予約命令例外(RIE)となるのは、write
オペランド、read−modify−writeオペ
ランドに対する@SP+である。
【0076】7−10.スタックプッシュ アセンブラ表記: オペランド: フォーマット:図33に示す。 @−SPのモードでは、オペランドサイズだけSPをデ
クリメントする。例えば、本発明装置64で64ビット
データを扱う時には、SPが−8だけ更新される。B,
Hのサイズのオペランドに対する@−SPの指定も可能
であり、それぞれSPが−1,−2だけ更新される。た
だし、スタックのアラインメントがくずれて速度低下の
原因になるため、使用上は注意した方がよい。オペラン
ドに対して@−SPのモードが意味を持たないものに対
しては、予約命令例外(RIE)を発生する。具体的に
予約命令例外(RIE)となるのは、readオペラン
ド、read−modify−writeオペランドに
対する@−SPである。
【0077】7−11.レジスタ相対付加モード オペランド: フォーマット:図34に示す。付加モードについては、
後の章でまとめて説明する。
【0078】7−12.PC相対付加モード オペランド: フォーマット:図35に示す。
【0079】7−13.絶対付加モード オペランド: フォーマット:図36に示す。
【0080】7−14.FP相対間接 アセンブラ表記: オペランド: フォーマット:図37に示す。 d4は符号付きとして扱い、オペランドのサイズとは関
係なく必ずd4を4倍して使用する。したがって、この
モードにより(FP−8*4)から(FP+7*4)ま
での4の倍数のメモリアドレスが参照可能である。アセ
ンブラで記述する場合には、ディスプレースメントとし
て4倍した値の方を書く。このアドレッシングモードは
〈〈L2〉〉である。本発明装置ではFP相対間接モー
ドは実装しないので、このアドレッシングモードが指定
された場合は、予約命令例外(RIE)となる。このア
ドレッシングモードは短縮形で利用できないので、例え
ば、 といった場合に、 がともに4バイトとなり、コードの選択に曖昧さが生じ
るという問題点がある。このモードが〈〈L2〉〉とな
っているのは、このような理由による。このモードは、
本発明装置64になって短縮形の割合が減った時に、有
効に利用することを狙ったものである。@(d4:4,
FP)、@(d4:4,SP)のモードでは、オペラン
ドサイズにかかわらずd4を4倍して使用するため、8
ビット、16ビット、32ビットのローカル変数をスタ
ックフレーム上に混在した場合に@(d4:4,F
P)、@(d4:4,SP)のモードを利用しようとす
ると、本発明装置がbig−endianである関係
上、各変数のMSB側をワード境界に合わせて配置する
必要がある。これによって特に問題が起きるわけではな
いが、注意が必要である。@(d4:4,FP),@
(d4:4,SP)モードを利用するためのローカル変
数配置の例を図38に示す。
【0081】7−15.SP相対間接 アセンブラ表記: オペランド: フォーマット:図39に示す。 d4は符号付きとして扱い、オペランドのサイズとは関
係なく必ずd4を4倍して使用する。ただし、d4が負
の値であった場合の動作は規定されていない。したがっ
て、このモードにより(SP)から(SP+7*4)ま
での4の倍数のメモリアドレスが参照可能である。アセ
ンブラで記述する場合には、ディスプレースメントとし
て4倍した値の方を書く。このアドレッシングモードは
〈〈L2〉〉である。本発明装置ではFP相対間接モー
ドは実装しないので、このアドレッシングモードが指定
された場合は、予約命令例外(RIE)となる。このモ
ードも、@(disp:4,FP)と同様に、本発明装
置64になって短縮形の割合が減った時に、有効に利用
することを狙ったものである。
【0082】7−16.付加モードのフォーマット 複雑なアドレッシングも、基本的には加算と間接参照の
組み合わせに分解することができる。したがって、加算
と間接参照のオペレーションをアドレッシングのプリミ
ティブとして与えておき、それを任意に組み合わせるこ
とができれば、どんな複雑なアドレッシングモードをも
実現することができる。付加モードはこのような考え方
にたったアドレッシングモードである。複雑なアドレッ
シングモードは、モジュール間のデータ参照やAI言語
の処理系に特に有用である。ただし、本発明装置ではメ
モリ間接アドレッシングモードが多用された場合処理速
度が低下する場合があるので、メモリ間接アドレッシン
グモードの使用に際しては十分な注意が必要である。付
加モードの指定は、16ビットを単位としており、これ
を任意回繰り返す。1段の付加モードにより、 を行なう。N段の付加モードにより、N+1段までの間
接参照ができる。 基本的な付加モードの処理: 基本フォーマット:図40に示す。 ・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のスケーリングの指定は
行なわないように、注意しておく必要がある。 フォーマットのバリエーシヨン:図41,図42に示
す。
【0083】7−17.付加モード仕様のレベル 付加モードの利用方法としては、普通の間接参照、オブ
ジェクトコードのモジュール化のための外部変数のテー
ブル参照、AI向け命令の実行などがあり、このうち、
AI向けの用途ではかなり多くの段数の間接参照を使う
ことがあるが、普通の用途では、3〜4段までの間接参
照で十分なことが多い。任意段数の付加モードが利用で
きれば、コンパイラの中で段数による場合分けが不要に
なるので、コンパイラの負担が軽減されるというメリッ
トがある。多段の間接参照の頻度が非常に少ないとして
も、コンパイラとしては必ず正しいコードを発生できな
ければならないからである。しかし、インプリメントの
方から考えると、任意の段数を許して実行中の割り込み
を受け付けるようにするのはかなり重くなるため、全体
のバランスとしてある程度の段数制限をするのはやむを
得ない。そこで、本発明装置としては4段(付加モード
基本フォーマットの4つ分)までの付加モードが利用で
きるものを〈〈L1〉〉仕様とし、任意段数の付加モー
ドのインプリメントは〈〈L2〉〉仕様としてクラス分
けする。〈〈L1〉〉仕様でも、5回のメモリ間接参照
まで可能である。5段(5ハーフワード)以上の付加モ
ードに対しては、予約命令例外(RIE)が起動され
る。ただし、フォーマット上は任意の段数が可能になっ
ているので、将来はそのままのフォーマットで段数を拡
張することができる。本発明装置では任意段数の付加モ
ードを許す。ただし、本発明装置では付加モードをもち
いてメモリ間接アドレッシングを多用した場合、処理速
度が低下することがあるので注意を要する。特に第2オ
ペランドで多段の付加モードが用いられた場合、付加モ
ード処理中は割り込みが受け付けられない場合があるの
で注意を要する。また、本発明装置32でも浮動小数点
を扱うことを考え、’×8’のスケーリングをインプリ
メントする。’×8’のスケーリングは〈〈LX〉〉仕
様ではなく〈〈L1〉〉仕様である。
【0084】8.インプリメント関連事項
【0085】8−1.仮想記憶のサポート (本発明装置では仮想記憶のサポートは行わない。) 仮想記憶を実現するため、命令の実行途中で発生したペ
ージフォールトに対してうまく回復処理を行なう必要が
ある。本発明装置では、原則として命令再実行方式を採
用する。命令再実行方式でページフォールトが起こった
場合には、それまでに変更したレジスタ類をプロセッサ
がすべてもとに戻してから、ページインの処理ルーチン
を起動する。したがって、処理再開後に命令の始めより
再実行しても矛盾は生じない。命令再実行方式では、原
則として実行途中の状態を保持する必要がないので、実
現機構は比較的簡単である。また、本発明装置では、命
令再実行のことを考慮し、処理の途中で副作用を残す命
令やアドレッシングモード(オートインクリメントな
ど)を極力避けるようにしている。ただし、ページフォ
ールトからの再実行では余分なメモリアクセスが起こる
ことがあり、OSで入出力装置を操作する場合などには
注意が必要である。例えば、一般形の命令において、第
一オペランドでI/Oのリードを行ない、第二オペラン
ドでページフォールトを起こした場合、命令の再実行で
もう一度I/Oのリードを行なうため、I/Oの種類に
よっては矛盾を起こす。したがって、リードによって副
作用のあるI/Oをアクセスする場合は、その命令のも
う一方のオペランドでページフォールトを起こさないよ
うに注意し、マニュアルにも明記する必要がある。具体
的には、もう一方のオペランドが必ずレジスタか常駐ペ
ージであればよい。また、MOV命令などでソースオペ
ランドとデスティネーションオペランドが一部重なって
いた場合、単なる再実行では矛盾を生じることがあるの
で、この点に対する注意も必要である。 例:2バイトのデータを1バイトずらす。デスティネー
ションがページ境界にまたがる。図43で、MOV.H
命令により[N−2:N−1]を[N−1:N]に移す
場合、デスティネーションの書き込みバスサイクルは2
回に分かれる。まず[N−2]のデータが[N−1]に
書かれ、次に[元のN−1]が[N]に書かれるものと
する。[N−1]への書き込みの際にpageM−1が
フォールトを起こすと、ページイン後[N−2:N−
1]−−〉[N−1:N]を再試行しようとしても、N
−lの内容が既に書き変わっているので、矛盾を起こ
す。さらに、LDMのような複数のデータ転送を行なう
命令でも、転送元と転送先が重なっていた場合に、命令
の再実行で矛盾が生じないようにする必要がある。例え
ば、 の場合、R6,R7をロードした後でR8を読んだ時に
ページフォールトが起きると、再実行した時に既にR6
が書き換わっており、本当に命令の最初から実行する
と、矛盾を生じる。これを避けるためには、以下のよう
な対策をとる必要がある。 ・命令の最初でページフォールトが起きないことを確認
する。 ・ページフォールト時に転送中のアドレスを示すテンポ
ラリ値をスタックにセーブする。(一種の命令継続実行
方式) ・R6の初期値を記憶しておき、ページフォールト発生
時にはこれをもとの値に戻す。STMやその他の命令に
ついても同様である。なお、命令の再実行を矛盾なく行
なうため、LDM,STM,LDCTXでは付加モード
を禁止している。また、ENTER,EXIT,JRN
Gでは、メモリアクセスを伴うようなアドレッシングモ
ードをすべて禁止している。
【0086】8−2.プログラムによる命令の書き換え ストアドプログラム方式の計算機では、一般に、これか
ら自分の実行する命令プログラム自体をプログラムによ
って書き換えることが可能である。しかし、命令のプリ
フェッチや命令キャッシュなどを持つ最近の高性能プロ
セッサでは、プログラムで命令を書き換える場合の動作
を保証しようとすると、ハードウエアの負担が極めて大
きくなる。また、この機能は必要性が少なく、ソフトウ
エアの教育上も好ましくない。したがって、本発明装置
では、ソフトウエアによってこれから実行する命令コー
ドの書き換えを行なうことは原則として禁止し、そのよ
うな場合には動作を保証しないものとしている。ただ
し、OSからユーザまで含めたシステム全体の動作を見
ると、どこかでプログラムのロード〜実行といった流れ
を含んでいるため、すべての場合にわたって「動作を保
証しない」とするわけにはいかない。また、特殊な用途
では、ユーザプログラムで命令コードを生成し、それを
実行したいという場合もある。したがって、何らかの条
件が満たされた時には、ソフトウエアによって書き換え
られた命令コードの実行動作を保証する必要がある。そ
こで、本発明装置では、命令コードを書き換えたという
ことをプロセッサに知らせる命令PIBを用意し、この
命令を実行することにより、以後、書き換えられた命令
コードの実行動作を保証することにしている。この命令
は、これから実行すべき命令コードが、以前(リセット
時あるいは前回のPIB命令実行時)から変更されてい
る可能性があるということを、プロセッサに通知するた
めに使用する。インプリメント上は、この命令によって
パイプライン、命令キュー、命令キャッシュのパージを
行なうことになる。
【0087】9.EIT処理 本発明装置では、プログラムの実行の流れとは非同期に
行なわれる処理を総称して、EIT処理と呼んでいる。
EIT処理は、通常、例外処理や割り込み処理と呼ばれ
ているものである。EIT処理には、次のようなものが
含まれる。 ・内部割り込み(リング間コール、トラップ) システムコール発行などの際に、プログラマが意識して
発生させる。その時に実行中のコンテキストとは関連が
ある。 ・例外割り込み(例外) 一般の命令の実行中に、何らかのエラーが起った場合に
発生する。その時に実行中のコンテキストとは関連があ
る。 ・外部割り込み(割り込み) 外部からのハードウエア的な信号により発生する。その
時に実行中のコンテキストとは全く関連がない。EIT
とはException(例外割り込み)、Inter
rupt(外部割り込み)、Trap(内部割り込み)
の頭文字を合わせた名称である。EIT処理に関する詳
細は付録9を参照のこと。
【0088】10.PSWの構成 本発明装置のPSW(Processor Statu
s Word)は32ビットである。PSWの下位16
ビット(PSH−Processor Status
Halfword)はユーザプログラム用であり、ユー
ザプロセスから自由に操作可能である。PSWの上位1
6ビット(PSS−Processor Status
halfword forSystem)はシステム用
であり、ユーザプログラム(リング3)からは操作でき
ない。PSHのうち、上位8ビットは各種モードの設定
を行なう部分であり、PSM(Processor S
tatus byte for Mode)と呼ぶ。ま
た、PSHの下位8ビットは各種ステータスや演算結果
の表示を行なう部分であり、PSB(Processo
r Status Byte)と呼ぶ。図44に示す。
【0089】10−1.PSSの構成 図45に示す。 ・本発明装置では、〈〈LA〉〉仕様として4レベルの
リング保護によるメモリ管理を行なう(付録参照)。本
発明装置では2レベルのリング保護によるメモリ管理を
行なう。RNGフィールドは、現在プロセッサがどのリ
ングにいるかという状態を示すものである。リング保護
を行なわない場合にも、例えばスーパバイザ、ユーザモ
ードの切り換え用にこのフィールドを使用する。 ・XAビットは、本発明装置32ではreserved
であり、1を書き込もうとすると例外が発生する。 ・トレースなどデバッグ関係の情報については、その詳
細まで統一するのは難しいため、別の制御レジスタ(D
CR−Debug Control Registe
r)に分離している。ただし、デバッグ中がどうかを示
す情報のみDBとしてPSWに入れる。 ・本発明装置の外部割り込みは、低い優先度の方が大き
な数字になる。外部割り込みの優先度は、0〜6の7レ
ベルであり、優先度0はマスク不能割り込み(NMI)
である。 ・キャッシュやMMUの制御情報は完全な統一が難しい
ため、PSWとは分離している。 ・AT(アドレス変換指定フィールド)をPSWに入れ
たことによって、コンテキスト毎にアドレス変換やメモ
リ保護の方法を変えたり、EIT処理ハンドラ実行中の
み一時的にアドレス変換を止めたりすることが可能にな
っている。 なお、LDC,REIT,LDCTX,EIT起動など
によって、PSW中のAT(アドレス変換ビット)が0
0から01に変更された場合には、TLBやキャッシュ
のパージが自動的に行なわれ、TLBや論理キャッシュ
の整合性が保証されるものとする。また、ATが01か
ら00に変更された場合にも、キャッシュ(この場合は
論理キャッシュ兼物理キャッシュ)の整合性が保証され
るものとする。
【0090】10−2.PSHの構成 図46に示す。 ・PRNGフィールドで「一つ前のリング」とは、「一
つ外側のリング」あるいは、「そのリングにサービスを
依頼したリング」を表わすものである。したがって、E
IT発生時のPRNGの変化は、 リターン時(REIT命令)でのPRNGの変化は、 となる。リターン時はRNGよりコピーするのではな
く、必ずスタックより復帰する必要がある。常にRNG
≦PRNGが成立する。PRNGは、ACS命令などで
の参照を目的としたもので、実際のリング遷移はあくま
でもRNGの情報を使用する。 ・本発明装置以外のプロセッサでは、比較〜条件ジャン
プ、といった命令の流れをとる場合に、符号付きと符号
なしの区別を比較命令ではなく条件ジャンプ命令で行な
うのが普通である。例えば、符号なし整数の比較を で、符号付き整数の比較を で行なう。したがって、フラッグの表現する情報とし
て、大小の区別のほかに、符号付きと符号なしの区別も
必要である。しかし、本発明装置では、符号付きと符号
なしの区別がCMP命令、CMPU命令といったように
命令別になっており、条件ジャンプ命令は符号付きも符
号なしも共通である。したがって、フラッグ構成を簡単
にすることができる。 ・通常のプロセッサで使用するCarry Flag
は、符号なし整数の大小関係を表わすという意味と、多
倍長演算の桁上がりを表わすという意味がある。しか
し、後者に関しては本発明装置ではX_flagを使用
するため、CarryFlagは整数の大小関係を表わ
すという意味でのみ用いられる。したがって、TRON
CHIPではこのフラッグを大小関係を表わすフラッ
グであると定義し、名前をL_flag(Lower
Flag)としている。このフラッグは、符号なし演算
の場合には従来のCarry Flagと同じ振る舞い
をするが、符号付き演算の場合には従来のCarry
Flagとは異なり、オーバーフローまで考慮した真の
大小関係を表現する。 ・そのほか、ストリング命令やキューの命令の終了条件
を示すためのF_flag(General Fla
g)とPビットのエラーを表現するためのP_flag
(P−bit Error Flag)を設ける。P_
flagは、現在の仕様では’0’にreserved
となっている。 ・通常のプロセッサでは、シフト命令ではみだしたビッ
トを入れるためにCarry Flagを用いている
が、本発明装置ではCarry Flagの代わりにL
_flagを実装しているため、はみだしたビットはX
_flagに入れることにする。
【0091】10−3.フラッグの変化 加減算命令、比較命令、論理演算命令は2オペランド命
令であり、 の形をとる。destとsrcのサイズが異なる場合に
は、小さいサイズの方が大きいサイズに合わせて符号拡
張(ADDU,SUBU,CMPUではゼロ拡張)され
た上で演算され、演算結果がdestのサイズに変換さ
れてからdestに格納される。CMP,CMPU,S
UB,SUBUの場合、L_flagは、前の演算で第
一オペランドの方が値が小さかったことを示す。符号な
し演算CMPU,SUBUの場合には、L_flagは
通常のプロセッサのCarry(Borrow)Fla
gと同じ意味になる。符号付き演算の場合には、L_f
lagは単なるM_flagのコピーとは異なり、オー
バーフローまで含めた真の大小関係を表現する。ADD
命令の場合には、L_flagは結果が負であることを
示す。これも、単なるM_flagのコピーとは異な
り、オーバーフローまで含めた真の正負を示す。ADD
Uの場合には、結果が必ず正になるため、L_flag
は0となる。V_flagは、演算の結果がdestで
指定されたサイズでは表現できなかったということを示
す。つまり、演算結果がdestのサイズの符号付き整
数(ADDU,SUBUでは符号なし整数)で表現でき
ない時に、V_flagがセットされる。CMP,CM
PU命令では、V_flagは不変である。X_fla
gは、多倍長の演算を行なう場合に、桁上がりの状態を
保持するために使用する。符号付き演算でも符号なし演
算の時と同じような変化をする。これは、通常のプロセ
ッサの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のサイズには関係しない。 ADDX,SUBX命令のフラッグの変化は、多少変則
的になっている。これは、符号なし整数の拡張演算にも
符号付き整数の拡張演算にも対処するためである。この
場合、条件ジャンプ命令のニモニックとの対応がうまく
とれなくなるが、拡張演算自体が頻度も少なく、変則的
な面を持っているので、やむを得ない。 ADDX,SUBXで異種サイズ間の演算を行なう場合
には、サイズの短い方が符号拡張される。しかし、符号
拡張後の値を符号付きの数とみて演算するか、符号なし
の数とみて演算するかはフラッグによって異なる。MO
V命令、MOVU命令および論理演算命令では、X_f
lag,L_flagは変化しない。論理演算命令で
は、V_flagも変化しない。各命令に対応したフラ
ッグの変化は、命令セットの説明の中に示されている。 ’☆’は要注意個所である。
【0092】11.命令セットの記述について
【0093】11−1.記述形式の概要 〔ニモニック〕その命令の名前(ニモニック)を示す。 〔命令の機能〕その命令の機能の概要を示す。 〔命令オプション〕その命令で使用できる命令オプショ
ンの種類を示す。命令オプションは、命令の機能の細か
い点を変更するために用いるものであり、アセンブラ表
記では’/xxx’により記述する。 〔命令ビットパターンとアセンブラ表記〕命令のビット
パターン、そのアセンブラ表記、使用できるサイズの種
類などを示す。本発明装置では、一つの命令ニモニック
に対して一般形や短縮形といった複数の命令フォーマッ
トが存在する場合があり、それぞれ使用できるアドレッ
シングモードやサイズが異なっている。この項では、命
令フォーマット別にそういった内容を明らかにする。 〔フラッグ変化〕命令実行後のステータスフラッグ(P
SB)の変化を示す。 〔解説〕その命令の機能を解説する。なお、説明の中で
現れるアセンブラニモニックの詳細については、巻末の
付録を参照のこと。
【0094】11−2.命令ビットパターンとアセンブ
ラ表記 命令ビットパターンとアセンブラ表記の部分は、フォー
マット別ニモニック、オペランド名、オペランドフィー
ルド名、命令ビットパターンから成る。 記述例:図47に示す。 AND:G−−フォーマット別ニモニック 説明を行なう命令ビットパターンのフォーマット別ニモ
ニック(付録参照)を示す。 src,dest−−オペランド名 その命令の機能を説明するために使用する変数である。
この変数は、「命令の機能」「解説」で参照される。こ
こで記述されたオペランドの順番が、そのままアセンブ
ラにおけるオペランドの順番になる。 EaR,EaM−−オペランドフィールド名 オペランドフィールド名は、ビットパターンとの対応、
使用できるオペランドサイズやアドレッシングモード、
メモリアクセス方法、その他の制約事項などの情報をま
とめて表わすものである。オペランドフィールド名を表
わす文字とその意味との間には一定の原則を設けてお
き、いろいろな意味を簡潔に表現できるようにしてい
る。 枠でかこまれた部分−−命令ビットパターン 命令ビットパターン中では、オペランドフィールドやサ
イズ指定フィールドの位置、命令のオペコードなどを示
す。’*’で示されるビットは、don’tcareの
ビットである。このビットの0/1は、命令デコードに
は影響しない。’−’,’+’,’=’,’#′で示さ
れるビットは、現在のところ、命令機能やオペランドの
区別には使用されていないビットである。ただし、ユー
ザプログラムでは’−’,’=’の部分には0を、’
+’,’#’の部分には1を入れておかなければならな
い。’−’のビットが0でない場合や’+’のビットが
1でない場合は、予約命令例外(RFE)となる。’
=’のビットが0でない場合や’#’のビットが1でな
い場合は、単に無視される。つまり、ハード的には’
*’,’=’,’#’は同等の意味を持つ。しかし、将
来の拡張のために、ユーザ向けのマニュアルには’
=’,’#’を’0’,’1’としておくように明記し
ておかなければならない。
【0095】11−3.フィールド名 命令ビットパターン中には、オペランドフィールドのほ
かに、オプションフィールド、サイズ指定フィールドが
ある。本発明装置で使用しているオプションフィールド
名、サイズ指定フィールド名には、次のようなものがあ
る。 ・サイズ指定フィールド名 ・オプションフィールド名 命令オプションの指定を行なうオプションビットの名前
としては、主として小文字を使う。(Pビット関係を除
く) オプションフィールド名には、以下に示すようなものが
ある。いずれの場合にも、最初に記述した方(オプショ
ン値が0,00..の方)がアセンブラでのデフォルト
になる。 以上の項目に当てはまらないフィールド名は、オペラン
ドフィールド名を示すものになる。できるだけ、同じ文
字が複数の意味を表わさないようにしている。
【0096】11−4.オペランドフィールド名 オペランドフィールド名を表わす文字には、以下のよう
な意味を持たせている。オペランドフィールド名はこれ
らの文字の組み合わせによって構成されるため、フィー
ルド名だけで、使用できるアドレッシングモード、オペ
ランドサイズ、アクセス方法などの情報を得ることがで
きる。
【0097】・アクセス方法 一部の基本アドレッシングモードでは、以下のようなア
クセス方法がデフォルトとして決まっている。この場合
には、特にアクセス方法を示す文字を付けない。 その他の基本アドレッシングモードについては、以下に
示す文字を使用してアクセス方法を示す。 ・アドレッシングモードに対する制限 基本アドレッシングモードとアクセス方法が決まると、
自動的にアドレッシングモードに対する制限(EaWに
対するイミディエートモードの禁止など)が決まる。た
だし、それ以外に命令特有の制限事項がある場合には、
以下の文字を後ろに付ける。
【0098】・サイズ指定 サイズ指定は、原則として以下に示すフィールドによっ
て行なう。 サイズは指定されない。
【0099】これより例外がある場合には、以下の文字
を付け加えることにより区別する。原則として、数字と
小文字が固定サイズを表わし、大文字は可変サイズを表
わす。例えば、’w’は32ビット(ワード)固定のサ
イズを示すのに対して、’W’はWWフィールドにより
サイズが指定されることを示す。 なお、ストリング命令などの高機能命令において、命令
によって暗黙に指定されるオペランドのサイズを指定す
る場合には、フィールド名としてSSを使用する。任意
長ビットフィールド命令では、Xも使用される。
【0100】・その他 す場合を示す。ビットパターンとオペランド値との対応
は、以下のようになる。(Nはリテラルのビット数) 1,2...一つの命令の中で、同じアクセス方法を持
つオペランドが複数存在した場合に、それらを区別する
ために使用する。なお、サイズに関する種々の制限事項
のうち、命令機能に大きな関係を持つものについては、
オペランドフィールド名やサイズ指定フィールド名では
なく、各命令の説明のところでその制限を示す。これに
は、シフトカウントで8ビット以外のサイズを指定した
場合や、異種サイズ間の論理演算などが含まれる。
【0101】11−5.アドレッシングモードに関する
制限 オペランドフィールド名のうち、次のものは、使用でき
るアドレッシングモードに制限が設けられている。 このほか、各命令の説明のところでもアドレッシングモ
ードに関する制限が述べられている。
【0102】11−6.解説に関する注意 スタック操作の命令では、TOSによりスタックトップ
を示している。↑TOSはスタックからのポップ、↓T
OSはスタックへのプッシュである。
【0103】
【数5】
【0104】
【0105】12.「本発明装置」の命令セット
【0106】12−1.データ転送命令 〔ニモニック〕 MOV src,dest 〔命令の機能〕 src==〉dest データの移動と符号拡張 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図48に示
す。 〔フラッグ変化〕図48の最下部に示す。 〔解説〕ソースオペランドsrcをデスティネーション
オペランドdestに転送する。ソースオペランドのサ
イズがデスティネーションオペランドのサイズよりも小
さい時は、ソースが符号拡張される。デスティネーショ
ンの方がサイズが小さく、ソースの値がデスティネーシ
ョンのサイズの符号付き整数として表現できない時は、
V_flagがセットされる。MOV:Zはいわゆるc
lear命令であるが、動作やフラッグ変化が同じであ
るため、MOVの短縮形の一つとして扱っている。MO
V,ADD,MOV,CMP命令は符号付きの演算を行
なう命令であるが、MOV:Q,ADD:Q,SUB:
Q,CMP:Qで利用できるリテラルの範囲は1〜8
(オペランドフィールド名#3n)となっており、正の
範囲しか含んでいないので、注意が必要である。MO
V,MOVU命令でsrcがイミディエート値である場
合に、そのイミディエート値と利用できるフォーマット
との関係をまとめると、次のようになる。
【0107】〔プログラム例外〕 〔ニモニック〕 〔命令の機能〕 データの移動とゼロ拡張 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図49に示
す。 〔フラッグ変化〕図50に示す。 〔解説〕ソースオペランドsrcをデスティネーション
オペランドdestに転送する。ソースオペランドのサ
イズがデスティネーションオペランドのサイズよりも小
さい時は、ソースがゼロ拡張される。デスティネーショ
ンの方がサイズが小さく、ソースの値がデスティネーシ
ョンのサイズの符号なし整数として表現できない時は、
V_flagがセットされる。
【0108】〔プログラム例外〕 〔ニモニック〕 PUSH src 〔命令の機能〕 push to stack スタックにプッシュ 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図51に示
す。 〔フラッグ変化〕図52に示す。 〔解説〕ソースオペランドsrcをスタックにプッシュ
する。この命令は、MOV *,@−SPの短縮形と考
えることもできるが、フラッグ変化をしないこと、およ
びPOPとの対称性により、別命令となっている。sr
c/EaRLで指定されるアドレッシングモードでは、
@SP+のモードは使用できない。これは、POP命令
のdest/EaWLで@−SPのモードが使用できな
いのに合わせたものである。PUSH SPなど、sr
cオペランドにSPを含む場合の命令動作規定について
は、付録12を参照のこと。
【0109】〔プログラム例外〕 〔ニモニック〕 POP dest 〔命令の機能〕 pop from stack スタックからポップ 〔命令オプシヨン〕なし 〔命令ビットパターンとアセンブラ表記〕図53に示
す。 〔フラッグ変化〕図54に示す。 〔解説〕スタックからポップした値をdestに転送す
る。この命令は、MOV @SP+,*の短縮形と考え
ることもできるが、srcにSPを含んだ場合の動作が
MOV @SP+とは異なること、およびフラッグ変化
をしないこと、によって別命令となっている。dest
/EaWLで指定されるアドレッシングモードでは、@
−SPのモードを使用することは禁止されており、指定
した場合には予約命令例外RIEとなる。これは、PO
P @−SPという命令を実行した場合に、SP更新が
いつ行なわれるかという点について誤解を生じやすいた
めである。POP SPなど、destオペランドにS
Pを含む場合の命令の動作規定については、付録12を
参照のこと。
【0110】〔ブログラム例外〕 〔ニモニック〕 LDM src,reglist 〔命令の機能〕 load multiple registers 複数レジスタのロード 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図55に示
す。 〔フラッグ変化〕図56に示す。 〔解説〕複数のレジスタをメモリからロードする。ロー
ドするレジスタはビットマップreglist/LIR
L(レジスタリスト)で指定する。LIRLは、EaR
mLの拡張部よりも後に置かれる。ロードするレジスタ
リスト(reglist)のビットマップ指定は、図5
7に示すように行なう。EaRmLで@SP+のアドレ
ッングモードを指定した場合は、小さい番号のレジスタ
から順にポップされ、SPはロードしたレジスタ数の4
倍(または8倍)だけ増加する。それ以外のアドレッシ
ングモードを指定した場合は、得られた実効アドレスが
レジスタにロードすべきメモリデータの先頭を指す。い
ずれの場合にも、メモリ中では小さい番号のレジスタの
方が低いアドレスに置かれる。ロードするレジスタのビ
ットマップのフォーマットは、BSCH/F,BVSC
H/F命令で使用する回路(次に出現する’0’また
は’1’のビットをMSB方向にサーチする回路)と同
じ回路によって、次に転送するレジスタを見付けられる
ように決めたものである。したがって、LDM @SP
+の場合は小さな番号のレジスタから転送するためにレ
ジスタ番号の小さな方がMSB側となっている。それ以
外のアドレッシングモードの場合にも、レジスタ退避ブ
ロックの先頭アドレスを実効アドレスとしているため、
やはりレジスタ番号の小さい方から転送するのがよく、
LDM @SP+と同じフォーマットになる。なお、こ
れらのフォーマットはレジスタの転送順序まで考えて決
めたものであり、ハードウエア資源が少ない場合には、
ここで説明したような転送順序にするのが最適と考えら
れる。しかし、実際の転送の順序は「本発明装置」で規
定されたものではなく、インプリメント側の自由であ
る。EaRmLのアドレッシングモードでは、@−S
P、レジスタ直接モードRn,イミディエートモード#
imm_data、付加モードの指定はイリーガルとす
る。付加モードを禁止するのは、LDMやSTMによっ
て退避、復帰したレジスタやレジスタ退避エリアと、付
加モードで使用するレジスタやメモリの間にオーバーラ
ップがあった場合に、命令の再実行が難しくなるためで
ある。レジスタリストがオール0の時は、何もせずに命
令を終了する。(特にエラーとはしない) LDM @SP+でレジスタリストにSPが含まれる場
合の動作規定については、付録12を参照のこと。
【0111】〔プログラム例外〕 〔ニモニック〕 STM reglist,dest 〔命令の機能〕 store multiple registers 複数レジスタのストア 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図58に示
す。 〔フラッグ変化〕図59に示す。 〔解説〕複数のレジスタをメモリにセーブする。セーブ
するレジスタはビットマップreglist/LsWL
(レジスタリスト)で指定する。LsWLは、EaWm
Lの拡張部よりも後に置かれる。ストアするレジスタリ
スト(reglist)のビットマップ指定は、EaW
mLが@−SPモードの時、図60に示すように、また
その他のモードの時、図61に示すように行う。EaW
mLに@−SPのアドレッシングモードを指定した場合
は、大きい番号のレジスタから順にプッシュされ、SP
はセーブしたレジスタ数の4倍(または8倍)だけ減少
する。それ以外のアドレッシングモードを指定した場合
は、得られた実効アドレスがレジスタをセーブすべきメ
モリ領域の先頭を指す。いずれの場合にも、メモリ中で
は小さい番号のレジスタの方が低いアドレスに置かれ
る。このフォーマットは、BSCH/F,BVSCH/
F命令で使用する回路(次に出現する’0’または’
1’のビットをMSB方向にサーチする回路)と同じ回
路によって、次に転送するレジスタを見付けられるよう
に決めたものである。したがって、STM @−SPの
時は大きな番号のレジスタから転送するためにレジスタ
番号の大きな方がMSB側となる。それ以外のアドレッ
シングモードの場合には、レジスタ退避ブロックの先頭
アドレスを実効アドレスとしているため、レジスタ番号
の小さい方から転送するのがよく、レジスタ番号の小さ
な方がMSB側となっている。なお、これらのフォーマ
ットはレジスタの転送順序まで考えて決めたものであ
り、ハードウエア資源が少ない場合には、ここで説明し
たような転送順序にするのが最適と考えられる。しか
し、実際の転送の順序は「本発明装置」で規定されたも
のではなく、インプリメント側の自由である。EaWm
Lのアドレッシングモードでは、@SP+、レジスタ直
接モードRn、イミディエートモード#imm_dat
a、付加モードの指定はイリーガルとする。付加モード
を禁止するのは、LDMやSTMによって退避、復帰し
たレジスタやレジスタ退避エリアと、付加モードで使用
するレジスタやメモリの間にオーバーラップがあった場
合に、命令の再実行が難しくなるためである。LDM,
STM命令では、転送しないレジスタに対するメモリ領
域は割り当てない。例えば、 の場合は次のような動作を行なう。(ただし、命令実行
前のSP値をinitSPとする。) レジスタリストがオール0の時は、何もせずに命令を終
了する。(特にエラーとはしない) STM @−SPでレジスタリストにSPが含まれる場
合の動作規定については、付録12を参照のこと。
【0112】〔プログラム例外〕 〔ニモニック〕 MOVA srcaddr,dest 〔命令の機能〕 address of src==〉dest 実効アドレスを得る 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図62に示
す。 〔フラッグ変化〕図63に示す。 〔解説〕ソースオペランドの実効アドレスをデスティネ
ーションオペランドに転送する。この命令のオペレーシ
ョンそのものは、MOV命令などで代用可能であるが、
高級言語での左辺値のアドレス計算やポインタ演算にす
なおに使用できること、アドレス計算用の回路を使用す
るため、より高速な演算が期待できること、により別命
令となっている。短縮形の は、実質的には3オペランド加算命令 となるが、フラッグ変化をおこさないためMOVA命令
に分類されている。srcaddrにPC相対間接モー
ドを指定し、PC相対のディスプレースメントを0とし
た場合には、現在のPC値、つまりMOVA命令の先頭
アドレスをdestに格納することになる。また、PC
相対のディスプレースメントとしてMOVA命令の命令
長を指定した場合には、MOVA命令の次の命令のアド
レスをdestに格納することになる。これらの機能
は、ユーザプログラムのレベルでコルーチン処理を行な
う時に有効である。アセンブラでは、<オペレーション
>またはdest側でサイズ指定を行なう。srcad
dr側はアドレス計算のみなので、サイズの指定はしな
い。EaAで指定されるアドレッシングモードでは、イ
ミディエート、@SP+,@−SPのモードは使用でき
ない。
【0113】〔ブログラム例外〕 〔ニモニック〕 PUSHA srcaddr 〔命令の機能〕 push address to stack 実効アドレスをスタックにプッシュ 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ記法〕図64に示
す。 〔フラッグ変化〕図65に示す。 〔解説〕ソースオペランドsrcaddrの実効アドレ
スをスタックにプッシュする。この命令は、MOVA
*,@−SPの短縮形と考えることもできるが、実行速
度の向上や、MOV命令〜PUSH命令の区別との対応
をとるために、別命令となっている。srcにSPを含
んだ場合の動作規定については、付録12を参照のこ
と。
【0114】〔プログラム例外〕
【0115】12−2.比較、テスト命令 〔ニモニック〕 CMP srcl,src2 〔命令の機能〕 src2−src1,flags affected 比較、符号拡張と比較 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図66に示
す。 〔フラッグ変化〕図67に示す。 〔解説〕src1オペランドをsrc2オペランドと比
較し、その結果によりPSB(L_flag,Z_fl
ag)をセットする。src1オペランドのサイズとs
rc2オペランドのサイズが異なる時は、サイズの小さ
い方のオペランドが符号拡張された上で比較される。な
お、EaR!I,ShR!Iのモードではイミディエー
トを禁止しているが、@SP+は可能である。CMP
@SP+,@SP+の場合、スタックポインタはオペラ
ンドサイズの2倍だけ変化し、他の命令と比較すると変
則的であるが、この命令はスタックマシンをシミュレー
トする場合に使用することがある。 CMP:Zはいわゆるtest命令であるが、動作やフ
ラッグ変化が同じであるため、CMPの短縮形の一つと
して扱っている。
【0116】〔プログラム例外〕 〔ニモニック〕 CMPU src1,src2 〔命令の機能〕 src2−src1,flags affected ゼロ拡張と比較 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図68に示
す。 〔フラッグ変化〕図69に示す。 〔解説〕src1オペランドをsrc2オペランドと比
較し、その結果によりPSB(L_flag,Z_fl
ag)をセットする。src1オペランドのサイズとs
rc2オペランドのサイズが異なる時は、サイズの小さ
い方のオペランドがゼロ拡張された上で比較される。E
aR!Iのモードではイミディエートを禁止している
が、@SP+は可能である。
【0117】〔プログラム例外〕 ・予約命令例外 〔ニモニック〕 CHK bound,index,xreg 〔命令の機能〕 check upper and lower bou
nds 配列の範囲のチェック 〔命令オプション〕 /S 下限値を引く /N 下限値を引かない(デフォルト) 〔命令ビットパターンとアセンブラ表記〕図70に示
す。 〔フラッグ変化〕図71に示す。 〔解説〕配列のインデクスの範囲のチェックとレジスタ
へのロードを行なう。boundの指すアドレスには上
限値と下限値が組みになって置かれており、その上限
値、下限値とindexによりフェッチされた比較値オ
ペランドが比較される。boundの実効アドレスに置
かれているのが上限値であり、(boundの実効アド
レス+オペランドサイズ)のアドレスに置かれているの
が下限値である。比較は符号付き整数として行なわれ
る。比較値が上限値と下限値の間に入っていない場合に
は、V_flagがセットされるので、続けてTRAP
命令を実行することにより、例外処理を起動することが
できる。/Sを指定した場合、比較値から下限値を引い
たものがレジスタxregにロードされる。/Sを指定
しない場合、比較値はそのままレジスタxregにロー
ドされる。比較値をレジスタにロードするのは、次にそ
れを配列のインデクスのアドレス計算に使うことが多い
ためである。 オペレーション: index<下限値 の場合である。つまり、図72のようになる。 上限値<下限値の場合には、下限値との比較により1
になることもある。この場合、index−下限値の演
算結果によってフラッグがセットされることになる。次
の3つの命令は、すべて第二オペランドが第一オペラン
ド(CHKでは第一オペランドboundの下限値)よ
りも小さい時にL_flagがセットされるという仕様
である。 CHK命令では、上限値≧下限値のチェックは特に行な
わない。上限値と下限値の大小にかかわらず、「オペレ
ーション」に書かれたものと等価の動作を行なうものと
する。EaRdRで指定されるアドレッシングモードで
は、レジスタ直接Rn,@−SP,@SP+,#imm
_dataのモードは使用できない。どうしてもレジス
タ上の値と比較したい場合には、CHKではなくCMP
を2回行なえばよい。
【0118】〔プログラム例外〕
【0119】12−3.算術演算命令 〔ニモニック〕 ADD src,dest 〔命令の機能〕 dest+src==〉dest 加算、符号拡張と加算 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図73に示
す。 〔フラッグ変化〕図74に示す。 〔解説〕ソースオペランドをデスティネーションオペラ
ンドに加算する。ソースオペランドのサイズがデスティ
ネーションオペランドのサイズよりも小さい時は、ソー
スが符号拡張された上で加算される。デスティネーショ
ンのサイズが小さく、演算結果がデスティネーションの
サイズの符号付き整数として表現できない時は、V_f
lagがセットされる。なお、L_formatのAD
D:L @SP+,SPについては、ADD:G の動作を行なうのが望ましい。しかし、インプリメント
上、L−formatではこのような動作を行なうのが
難しい場合があるので、ADD:L @SP+,SPの
動作についてはインプリメント依存とする。これは、S
UB:L,CMP:L,INDEXも同様である。詳し
くは付録12を参照のこと。
【0120】〔プログラム例外〕 〔ニモニック〕 ADDU src,dest 〔命令の機能〕 dest+src==〉dest ゼロ拡張と加算 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図75に示
す。 〔フラッグ変化〕図76に示す。 〔解説〕ソースオペランドをデスティネーションオペラ
ンドに加算する。ソースオペランドのサイズがデスティ
ネーションオペランドのサイズよりも小さい時は、ソー
スがゼロ拡張された上で加算される。デスティネーショ
ンのサイズが小さく、演算結果がデスティネーションの
サイズの符号なし整数として表現できない時は、V_f
lagがセットされる。ADDUのL_flagは、結
果が正になるという意味で、必ず0にリセットされるも
のとする。
【0121】〔プログラム例外〕 〔ニモニック〕 ADDX src,dest 〔命令の機能〕 キャリーを含めた加算 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図77に示
す。 〔フラッグ変化〕図78に示す。 〔解説〕ソースオペランドとキャリーをデスティネーシ
ョンオペランドに加算する。ソースオペランドのサイズ
がデスティネーションオペランドのサイズよりも小さい
時は、ソースが符号拡張された上で加算される。Z_f
lagでは、フラッグ値を累積できるようになってい
る。また、ADDXとADDのフラッグ変化は、符号拡
張/ゼロ拡張を含めてほとんど同じである。ADDとA
DDXでフラッグ変化の異なるのは、Z_flagのみ
である。なお、ADDX,SUBXの累種サイズ間演算
については、例えば8バイトの数dest2〜dest
1に4バイトの数srcを加える場合、
【0122】〔プログラム例外〕 〔ニモニック〕 SUB src,dest 〔命令の機能〕 dest−src==〉dest 減算、符号拡張と減算 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図79に示
す。 〔フラッグ変化〕図80に示す。 〔解説〕ソースオペランドをデスティネーションオペラ
ンドから減ずる。ソースオペランドのサイズがデスティ
ネーションオペランドのサイズよりも小さい時は、ソー
スが符号拡張された上で減算される。デスティネーショ
ンのサイズが小さく、演算結果がデスティネーションの
サイズの符号付き整数として表現できない時は、V_f
lagがセットされる。
【0123】〔プログラム例外〕 〔ニモニック〕 SUBU src,dest 〔命令の機能〕 dest−src==〉dest ゼロ拡張と減算 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図81に示
す。 〔フラッグ変化〕図82に示す。 〔解説〕ソースオペランドをデスティネーションオペラ
ンドから減ずる。ソースオペランドのサイズがデスティ
ネーションオペランドのサイズよりも小さい時は、ソー
スがゼロ拡張された上で減算される。デスティネーショ
ンのサイズが小さく、演算結果がデスティネーションの
サイズの符号なし整数として表現できない時は、V_f
lagがセットされる。
【0124】〔プログラム例外〕 〔ニモニック〕 SUBX src,dest 〔命令の機能〕 キャリーを含めた減算 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図83に示
す。 〔フラッグ変化〕図84に示す。 〔解説〕ソースオペランドとキャリーをデスティネーシ
ョンオペランドから減ずる。ソースオペランドのサイズ
がデスティネーションオペランドのサイズよりも小さい
時は、ソースが符号拡張された上で減算される。Z_f
lagではフラッグ値を累積できるようになっている。
また、SUBXとSUBのフラッグ変化は、符号拡張/
ゼロ拡張を含めてほとんど同じである。SUBとSUB
Xでフラッグ変化の異なるのは、Z_flagのみであ
る。
【0125】〔プログラム例外〕 〔ニモニック〕 MUL src,dest 〔命令の機能〕 dest*src==〉dest 乗算 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図85に示
す。 〔フラッグ変化〕図86に示す。 〔解説〕ソースオペランドをデスティネーションオペラ
ンドに乗ずる。乗算は符号付きで行われ、オペランドも
符号付き整数とみなされる。この命令は、被乗数のサイ
ズと結果のサイズが等しいため、高級言語向きである。
デスティネーションのサイズが小さく、演算結果がデス
ティネーションのサイズの符号付き整数として表現でき
ない時は、V_flagがセットされる。オーバーフロ
ーが生じた場合にも、destにセットされるデータ
(正しい結果の下位ビット)が基準となってM_fla
g,Z_flagがセットされる。例えば、R0=H’
10000で を実行した場合、積がH’100000000となるた
め、R0=0(下位ビット),V_flag=1,Z_
flag=1となる。
【0126】〔プログラム例外〕 〔ニモニック〕 MULU src,dest 〔命令の機能〕 dest * src==〉dest 符号なし乗算 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図87に示
す。 〔フラッグ変化〕図88に示す。 〔解説〕ソースオペランドをデスティネーションオペラ
ンドに乗ずる。乗算は符号なしで行われ、オペランドも
符号なし整数とみなされる。デスティネーションのサイ
ズが小さく、演算結果がデスティネーションのサイズの
符号なし整数として表現できない時は、V_flagが
セットされる。
【0127】〔プログラム例外〕 〔ニモニック〕 MULX src,dest,tmp 〔命令の機能〕 拡張乗算、サイズが大きくなる 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図89に示
す。 〔フラッグ変化〕図90に示す。 〔解説〕ソースオペランドをデスティネーションオペラ
ンドに乗ずる。この命令は、積が倍長で得られるため、
srcとdestのほかに、積の上位ビットを入れるた
めのテンポラリレジスタtmpを指定する。サイズは3
2ビットに固定(32/64から選択)とする。乗算は
符号なしで行われ、積のサイズは被乗数のサイズの2倍
になる。 MULXでは、得るべき結果がdest,tmpの二つ
あるので、両者が重なった場合(destでtmpと同
じレジスタを指定した場合)の処置が問題となる。一般
に、tmp(MULXの上位桁)の方は次の桁への桁上
がりとして用いられることが多いので、最終桁の計算な
どでは使用しないこともある。したがって、両者が重な
った場合には、destに設定すべき値(MULXの下
位桁)の方が残るものとする。(付録12参照) MULXのM_flag,Z_flagのフラッグ変化
は、destを基準とする。tmpに設定される値は、
これらのフラッグには影響しない。このような仕様にな
ったのは、次のような理由による。・ADDX,SUB
Xなどのフラッグ変化の仕様に合わせたため。(ADD
X,SUBXでは、X_flagがセットされていて
も、destが0であればZ_flagがセットされ
る。) ・多倍長演算を考えた場合には、tmp&destのみ
でフラッグを変化させてもあまり意味がない。フラッグ
本来の意味で変化させるためには、全体の値を通して判
定することが必要であり、個々の命令だけでは対処でき
ない。tmp&destでフラッグ変化を行なったとし
ても、結局中途半端である。 例: [実行前] [実行後]
【0128】
【数6】
【0129】なお、MULX,DIVXでは、ADD
X,SUBXとは異なり、Z_flagは累積した変化
をするわけではない。F_flagによってtmp=0
のテストが可能である。!=0の場合は、動作を保証し
ない。実際「本発明装置」では!=0の場合、srcサ
イズを、!R(8ビットまたは16ビット)としてオペ
ランドのフェッチを行ない、それを32ビットに符号拡
張して命令が実行される。ただし、dest,tmpは
!Rによらず常に32ビットとして扱われる。
【0130】〔プログラム例外〕 〔ニモニック〕 DIV src,dest 〔命令の機能〕 dest/src==〉dest 除算 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図91に示
す。 〔フラッグ変化〕図92に示す。 〔解説〕ソースオペランドでデスティネーションオペラ
ンドを割る。除算は符号付きで行われ、オペランドも符
号付き整数とみなされる。この命令は、被除数のサイズ
と結果のサイズが等しいため、高級言語向きである。商
は0方向に丸められ、余りの符号は被除数と同じにな
る。 src=0の場合には、ゼロ除算例外(ZDE)とな
る。ゼロ除算の場合、V_flagがセットされて例外
処理が起動されるが、destの値は変化しない。この
とき、destのライトアクセスを行なうかどうか、す
なわち、同じ値を書き込むか、何も書き込まないかは規
定しないものとする。また、V_flag以外のフラッ
グも変化しない。これは、destに合わせたため、お
よび、例外処理プログラムで例外発生要因を解析するた
めには、できるだけ以前の状態(フラッグを含めて)が
保存されている方が望ましいためである。DIVで0除
算以外の場合にオーバーフローが発生するのは(最小負
数)÷(−1)の場合のみである。DIVはDIVXと
は異なり、コンパイラの生成する普通の演算命令である
ため、できるだけ他の演算命令と同じ仕様にする方が望
ましい。そこで、この場合のフラッグの変化は、それぞ
れのフラッグの意味を生かして、 とする。オーバーフローするのは(最小負数÷(−
1))に限るので、正しい結果の下位ビットがdest
にセットされると考えても、結局 destは変化しな
い。正しい結果の下位ビットになったと考えても結局同
じ値である。
【0131】〔プログラム例外〕 ・ゼロ除算例外 ・src=0のとき 〔ニモニック〕 DIVU src,dest 〔命令の機能〕 dest/src==〉dest 符号なし除算 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図93に示
す。 〔フラッグ変化〕図94に示す。 〔解説〕ソースオペランドでデスティネーションオペラ
ンドを割る。除算は符号なしで行われ、オペランドも符
号なし整数とみなされる。src=0の場合には、ゼロ
除算例外(ZDE)となる。ゼロ除算の場合、V_fl
agがセットされて例外処理が起動されるが、dest
は変化しない。このとき、destのライトアクセスを
行なうかどうか、すなわち、同じ値を書き込むか、何も
書き込まないかは規定しないものとする。また、V_f
lag以外のフラッグも変化しない。これは、dest
に合わせたため、および、例外処理プログラムで例外発
生要因を解析するためには、できるだけ以前の状態(フ
ラッグを含めて)が保存されている方が望ましいためで
ある。DIVU命令では、0除算以外の場合に、オーバ
ーフローが発生してV_flagがセットされることは
ない。したがって、0除算以外の場合は必ずV_fla
gがクリアされる。
【0132】〔プログラム例外〕 ・ゼロ除算例外 ・src=0のとき 〔ニモニック〕 DIVX src,dest,tmp 〔命令の機能〕 拡張除算、サイズが小さくなる、剰余を出す 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図95に示
す。 〔フラッグ変化〕図96に示す。 〔解説〕ソースオペランドでデスティネーションオペラ
ンドを割る。この命令は、多倍長除算のプリミティブと
なるため、srcとdestのほかに、拡張演算のため
のテンポラリ値(剰余)を置くレジスタを指定する。サ
イズは32ビットに固定(32/64から選択)とす
る。除算は符号なしで行われ、被除数のサイズは除数の
サイズの2倍になる。 [DIVXのオペレーション] 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,SU
BXとは異なり、Z_flagは累積した変化をするわ
けではない。DIVXで結0がオーバーフローした場
合、MOV,ADD,SUB,MULでのオーバーフロ
ーと仕様を合わせるという意味では、正しい結果の下位
ビットがdestに設定されるのが望ましい。しかし、
ADD,SUBのように、オーバーフローの時も自然に
正しい結果の下位ビットが得られるものと違って、除算
の場合には上位ビットから計算を行なうため、アルゴリ
ズムの関係で正しい結果の下位ビットを得るのが難し
い。したがって、DIVXのオーバーフローの場合に
は、destを変化させないという仕様にする。DIV
Xで商がdestに入らず、オーバーフローが発生した
場合には、V_flag以外のフラッグは変化しない。
これは、DIVXでオーバーフローが発生した場合に、
destが変化しないことに合わせたものである。sr
c=0の場合には、ゼロ除算例外(ZDE)となる。ゼ
ロ除算の場合dest,tmpは変化しない。このと
き、destのライトアクセスを行なうかどうか、すな
わち、同じ値を書き込むか、何も書き込まないかは規定
しないものとする。また、V_flag以外のフラッグ
も変化しない。これは、destに合わせたため、およ
ひ、例外処理プログラムで例外発生要因を解析するため
には、できるだけ以前の状態(フラッグを含めて)が保
存されている方が望ましいためである。!=0の場合
は、動作を保証しない。実際「本発明装置」では!=0
の場合、srcサイズを、!R(8ビットまたは16ビ
ット)としてオペランドのフェッチを行ない、それを3
2ビットに符号拡張して命令が実行される。ただし、d
est,tmpは!Rによらず常に32ビットとして扱
われる。
【0133】〔プログラム例外〕 ・ゼロ除算例外 ・src=0のとき 〔ニモニック〕 REM src,dest 〔命令の機能〕 dest % src==〉dest 剰余 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図97に示
す。 〔フラッグ変化〕図98に示す。 〔解説〕ソースオペランドでデスティネーションオペラ
ンドを割り、その剰余を求める。除算は符号付きで行わ
れ、オペランドも符号付き整数とみなされる。この命令
は、被除数のサイズと剰余のサイズが等しいため、高級
言語向きである。商は0方向に丸められ、余りの符号は
被除数と同じになる。 src=0の場合には、ゼロ除算例外(ZDE)とな
る。ただし、REMで0除算を行なった場合には、オー
バーフローをクリアして例外処理を起動するようにす
る。REM命令では、DIV命令とは異なり、0除算を
してもdest(剰余)がオーバーフローするわけでは
ないので、V_flagはクリアしておく方が合理的で
ある。また、V_flagをクリアしておくと、例外処
理の中でDIVによるエラーかREMによるエラーかが
判定しやすい。0除算の場合、destは無変化であ
る。destに対してメモリアクセスを行なうか(re
adまたは同じ値でread−modify−writ
e)、アクセスを行なわないか、については、インプリ
メント方法を縛ることになるので、規定しない。
【0134】〔プログラム例外〕 ・ゼロ除算例外 ・src=0のとき 〔ニモニック〕 REMU src,dest 〔命令の機能〕 dest % src==〉dest 符号なし除算による剰余 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図99に示
す。 〔フラッグ変化〕図100に示す。 〔解説〕ソースオペランドでデスティネーションオペラ
ンドを割り、その剰余を求める。除算は符号なしで行わ
れ、オペランドも符号なし整数とみなされる。srcと
destのサイズの違う場合にはゼロ拡張が行なわれ
る。この命令は、被除数のサイズと剰余のサイズが等し
いため、高級言語向きである。src=0の場合には、
ゼロ除算例外(ZDE)となる。0除算の場合の処置は
REMと同様である。
【0135】〔プログラム例外〕 ・ゼロ除算例外 ・src=0のとき 〔ニモニック〕 NEG dest 〔命令の機能〕 0−dest==〉dest 補数演算 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図101に示
す。 〔フラッグ変化〕図102に示す。 〔解説〕オペランドの符号を反転する。
【0136】〔プログラム例外〕 〔ニモニック〕 INDEX indexsize,subscrip
t,xreg 〔命令の機能〕 calculate address of arra
y 多次元配列のアドレス計算 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図103に示
す。 〔フラッグ変化〕図104に示す。 〔解説〕多次元配列を一次元配列に展開するためのアド
レス計算として、スケールの乗算とインデクスの加算を
行なう。subscriptのサイズがxregのサイ
ズよりも小さい時は、subscriptが符号拡張さ
れる。xreg,indexsize,subscri
ptは符号付きの整数と考え、乗算および加算は符号付
きで行なう。乗算または加算でオーバーフローを検出し
た場合には、V_flagをセットする。indexs
izeは固定値(immediate)で済むことが多
いが、メモリ上に配列のディスクリプタを作ることを考
え、汎用アドレッシングとしている。INDEX命令が
CHK命令の後で実行されるならば、subscrip
tはレジスタのみの指定でよい。しかし、高級言語の仕
様によっては範囲をチェックしない(CHK命令を実行
しない)こともあるので、メモリ上の変数をsubsc
riptとして使用できるように、subscript
も汎用アドレッシングとしている。 [INDEXのオペレーション] INDEX命令では、オペランドxreg,index
size,subscriptは、すべてポインタでは
なく符号付きの数として扱われる。負であってもそのま
ま演算し、EITなどの特別な動作はしない。また、フ
ラッグ変化(V_flag,L_flag,M_fla
g,Z_flag)も一般の算術演算命令に準じたもの
になっている。これに関して若干補足しておく。IND
EXで扱うオペランドは、ポインタというよりも配列の
インデクスであり、INDEXでは配列のインデクスを
一次元に展開するという処理を行なう。インデクスがポ
インタになるのは、付加モードのスケーリングで(×
4)などを行なった後である。したがって、INDEX
で扱うデータを符号付きと考えても特に不自然はない
し、インデクスが負になると困るような言語では、それ
をチェックすることもできる。!=0のときは、動作を
保証しない。実際「本発明装置」では!=0の場合、i
ndexsizeサイズを!R(8ビットまたは16ビ
ット)としてオペランドのフェッチを行ない、それを3
2ビットに符号拡張して命令が実行される。ただし、x
regは!Rによらず常に32ビットとして扱われる。
【0137】〔プログラム例外〕
【0138】12−4.論理演算命令 〔ニモニック〕 AND src,dest 〔命令の機能〕 dest.and.src==〉dest 論理積 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図105に示
す。 〔フラッグ変化〕図106に示す。 〔解説〕ソースオペランドとデスティネーションオペラ
ンドとの論理積をとる。ソースオペランドのサイズがデ
スティネーションオペランドのサイズと異なる異種サイ
ズ間の演算(AND:GのRR≠MM、AND:EのM
M≠00)になった場合、命令はそのまま実行され、予
約命令例外とはならないが、destに設定される結果
は保証できない(インプリメント依存になる)ものとす
る。「本発明装置」の仕様としては、異種サイズ間の論
理演算を規定していないので、この機能をソフトウエア
で利用してはいけない。異種サイズ間の論理演算はあま
り意味のない命令であるが、これを予約命令例外としな
いのは、インプリメントの負担が大きく、実行速度に影
響が出るためである。
【0139】〔プログラム例外〕 〔ニモニック〕 OR src,dest 〔命令の機能〕 dest.or.src==〉dest 論理和 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図107に示
す。 〔フラッグ変化〕図108に示す。 〔解説〕ソースオペランドとデスティネーションオペラ
ンドとの論理和をとる。ソースオペランドのサイズがデ
スティネーションオペランドのサイズと異なる異種サイ
ズ間の演算(OR:GのRR≠MM、OR:EのMM≠
00)になった場合、命令はそのまま実行され、予約命
令例外とはならないが、destに設定される結果は保
証できない(インプリメント依存になる)ものとする。
【0140】〔プログラム例外〕 〔ニモニック〕 XOR src,dest 〔命令の機能〕 dest.xor.src==〉dest 排他的論理和 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図109に示
す。 〔フラッグ変化〕図110に示す。 〔解説〕ソースオペランドとデスティネーションオペラ
ンドとの排他的論理和をとる。ソースオペランドのサイ
ズがデスティネーションオペランドのサイズと異なる異
種サイズ間の演算(XOR:GのRR≠MM、XOR:
EのMM≠00)になった場合、命令はそのまま実行さ
れ、予約命令例外とはならないが、destに設定され
る結果は保証できない(インプリメント依存になる)も
のとする。
【0141】〔プログラム例外〕 〔ニモニック〕 NOT dest 〔命令の機能〕
【0142】
【数7】
【0143】全ビット反転 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図111に示
す。 〔フラッグ変化〕図112に示す。 〔解説〕オペランドの各ビットの1と0を反転する。
【0144】〔プログラム例外〕
【0145】12−5.シフト命令 〔ニモニック〕 SHA count,dest 〔命令の機能〕 shift arithmetic 算術シフト 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図113に示
す。 〔フラッグ変化〕図114に示す。 〔解説〕デスティネーションオペランドdestをソー
スオペランドcountで指定されたビット数だけ算術
シフトする。一般形の命令では、countの符号によ
ってシフト方向を指定する。countが正の時左シフ
ト、負の時右シフトとなる。算術シフトであるため、右
シフトの場合にはデスティネーションのMSB(符号ビ
ット)が変化せず、同じ値が右側のビットにコピーされ
ていく。左シフトの場合には、LSBに0が入り、0が
左側のビットにコピーされていく。正負によるシフト方
向の指定は、浮動小数点演算のエミュレーションなどに
有効な場合がある。左シフトの場合はSHAの短縮形が
ないが、フラッグ変化がSHAと異なってもよければ、
SHLの短縮形SHL:Qで代用できる。 [左シフト(count>0)の場合]図115に示
す。 [右シフト(count<0)の場合]図116に示
す。 なお、count=0の場合は、X_flag=0とな
る。SHA命令では、countのサイズとして8ビッ
トのみが有効である。RR≠00の場合動作を保証しな
い。RR≠00の機能が利用できないのは、主としてイ
ンプリメント上の制約によるものである。RR≠00の
場合には、「本発明装置」では、サイズRRでcoun
tオペランドのフェッチを行ない、countの下位8
ビットのみを有効としてそのまま命令を実行する。SH
Aは算術演算なのでL_flagをセットするが、これ
はdestのはじめの値の符号(MSB)を反映する。
これは、L_flagが、オーバーフローやアンダーフ
ローが発生した場合にも、常に正しい計算結果の符号を
反映するという性質を持っているためである。シフト命
令の場合、オーバーフローが起こらなければ、dest
の符号は変化しない。右シフトの場合、または左シフト
でオーバーフローがなかった場合にはL_flag=M
_flagとなるが、左シフトでオーバーフローが発生
した場合には、L_flagとM_flagが異なる変
化をすることがある。「本発明装置」はbig−end
ianのチップであるため、countをビット位置の
増減の意味で考えるか、2の累乗の意味で考えるかによ
って、シフト方向が逆になってしまう。すなわち、前者
の考え方ではcount>0の時右シフトとすべきであ
るのに対して、後者の考え方では、little−en
dianの場合と同じように、count>0の時左シ
フトとなる。しかし、シフト命令はビット操作関係の命
令よりも算術演算関係の命令に近いものであるから、c
ountをビット位置の増減の意味で考えるよりは、2
の累乗の意味で考える方が自然である。したがって、
「本発明装置」ではcount>0の時左シフトという
仕様になっている。SHL,SHAでは、countの
絶対値が(destのサイズ+1)を越えた場合にも、
指定された数だけそのままシフトを続ける。結果的に、
countの絶対値が(destのサイズ+1)の場合
と同じ動作になる。例えば、次のような動作をする。 なお、X_flagを除けば、countの絶対値が
(destのサイズ)に等しい場合も同じ結果になる。
【0146】〔プログラム例外〕 〔ニモニック〕 SHL count,dest 〔命令の機能〕 shift logical 論理シフト 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図117に示
す。 〔フラッグ変化〕図118に示す。 〔解説〕デスティネーションオペランドをソースオペラ
ンドcountで指定されたビツト数だけ論理シフトす
る。一般形の時、シフト方向はcountの符号で指定
する。countが正の時左シフト、負の時右シフトと
なる。右シフトの場合には、MSBに0が入り、0が右
側のビットにコピーされていく。また、左シフトの場合
には、LSBに0が入り、0が左側のビットにコピーさ
れていく。 [左シフト(count>0)の場合]図119に示
す。 [右シフト(count<0)の場合]図120に示
す。 なお、count=0の場合は、X_flag=0とな
る。SHL命令では、countのサイズとして8ビッ
トのみが有効である。RR≠00の場合、動作を保証し
ない。RR≠00の機能が利用できないのは、主として
インプリメント上の制約によるものである。RR≠00
の場合には、「本発明装置」ではサイズRRでcoun
tオペランドのフェッチを行ない、countの下位8
ビットのみを有効としてそのまま命令を実行する。
【0147】〔プログラム例外〕 〔ニモニック〕 ROT count,dest 〔命令の機能〕 rotate 回転 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図121に示
す。 〔フラッグ変化〕図122に示す。 〔解説〕デスティネーションオペランドをソースオペラ
ンドcountで指定されたビット数だけ回転する。す
なわち、LSB(MSB)から溢れたビットをMSB
(LSB)に詰めながらシフトを行なう。回転方向はc
ountの符号で指定する。countが正の時左回
転、負の時右回転となる。回転の際、フラッグは通さな
い。 [左回転(count>0)の場合]図123に示す。 [右回転(count<0)の場合]図124に示す。 なお、count=0の場合は、X−flag=0とな
る。ROT命令では、countのサイズとして8ビッ
トのみが有効である。RR≠00の場合、動作を保証し
ない。RR≠00の機能が利用できないのは、主として
インプリメント上の制約によるものである。RR≠00
の場合には、「本発明装置」ではサイズRRでcoun
tオペランドのフェッチを行ない、countの下位8
ビットのみを有効としてそのまま命令を実行する。RO
Tでcountの絶対値が(destのサイズ)を越え
た場合にも、指定された数だけそのままローテイトを続
ける。結果的に、countを(destのサイズ)で
割った剰余をcountとした場合と同じ動作になる。
ただし、countが(destのサイズ)の整数倍
(≠0)の場合には、MSBまたはLSBに応じてX_
flagのセットされる点が、count=0の場合と
は異なる。例えば、データサイズと同じビット数だけ回
転した場合、データの値そのものは変化せず、dest
はcount=0の時と同じ値になる。しかし、フラッ
グにはもとのデータのLSBがコピーされるため、フラ
ッグ変化はcount=0の時とは異なったものにな
る。
【0148】〔プログラム例外〕 〔ニモニック〕 SHXL dest 〔命令の機能〕 shift left with extend 拡張左シフト 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図125に示
す。 〔フラッグ変化〕図126に示す。 〔解説〕destを1ビット左にシフトし、元のX f
lagの内容をLSBに詰める。MSBからあふれたビ
ットはX flagに入る。この命令は、複数ワードの
1ビットシフトを行なうためのプリミティブとして専用
化したものであり、シフト対象のサイズを32ビットに
固定している点、1ビットのシフトしかできない点、な
どにおいて SHA,SHL,ROTとはかなり仕様が
異なる。DIVXは被除数が多倍長の場合に使用できる
命令であるが、除数が多倍長になった場合には、DIV
Xが使用できず、プログラムによってシフトや減算を繰
り返しながら割り算を進めなければならない。その際、
多倍長のシフト演算が必要になる。この命令は、このよ
うな場合に使用することを目的とした命令である。図1
27にこれを示す。
【0149】〔プログラム例外〕 〔ニモニック〕 SHXR dest 〔命令の機能〕 shift right with extend 拡張右シフト 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図128に示
す。 〔フラッグ変化〕図129に示す。 〔解説〕destを1ビット右にシフトし、元のX f
lagの内容をMSBに詰める。LSBからあふれたビ
ットはX flagに入る。この命令は、複数ワードの
1ビットシフトを行なうためのプリミティブとして専用
化したものであり、シフト対象のサイズを32ビットに
固定している点、1ビットのシフトしかできない点、な
どにおいて SHA,SHL,ROTとはかなり仕様が
異なる。DIVXは被除数が多倍長の場合に使用できる
命令であるが、除数が多倍長になった場合には、DIV
Xが使用できず、プログラムによってシフトや減算を繰
り返しながら割り算を進めなければならない。その際、
多倍長のシフト演算が必要になる。この命令は、このよ
うな場合に使用することを目的とした命令である。図1
30にこれを示す。
【0150】〔プログラム例外〕 〔ニモニック〕 RVBY src,dest 〔命令の機能〕 reverse byte order バイト順の逆転 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図131に示
す。 〔フラッグ変化〕図132に示す。 〔解説〕srcのバイト順を逆転したものをdestに
転送する。srcよりもdestのサイズの方が大きい
場合には、srcをdestのサイズにまでゼロ拡張し
た後、destのサイズでバイト順を逆転する。src
よりもdestのサイズの方が小さい場合には、src
の上位バイトをカットしてdestのサイズとした後、
destのサイズでバイト順を逆転する。(srcのア
ドレスをずらした上でsrcとdestを同じサイズと
しても、結果は同じになる) この命令は、endianの変換に対するオーバーヘッ
ドを削減することを目的とした命令である。
【0151】〔プログラム例外〕 〔ニモニック〕 RVBI src,dest 但し〈〈L2〉〉 〔命令の機能〕 reverse bit order ビット順の逆転 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図133に示
す。 〔フラッグ変化〕図134に示す。 〔解説〕srcのビット順を逆転したものをdestに
転送する。srcよりもdestのサイズの方が大きい
場合には、srcをdestのサイズにまでゼロ拡張し
た後、destのサイズでビット順を逆転する。src
よりもdestのサイズの方が小さい場合には、src
の上位バイトをカットしてdestのサイズとした後、
destのサイズでビット順を逆転する。(srcのア
ドレスをずらした上でsrcとdestを同じサイズと
しても、結果は同じになる) この命令は、endianの変換に対するオーバーヘッ
ドを削減することを目的とした命令である。ビットマッ
プの処理を考えると、ビットを逆順にするビットリバー
ス命令RVBIもあった方がよいが、バイトリバース命
令RVBYよりも頻度が少ないこと、追加のハードウエ
アが必要となる可能性が強いこと、により、RVBI命
令は〈〈L2〉〉とする。
【0152】〔プログラム例外〕
【0153】12−6.ビット操作命令 「本発明装置」のビット操作命令では、次の図のように base(base address) offset(bit address) の2つのパラメータにより操作対象となるビットを指定
する。レジスタ上のビットを操作する場合には、このほ
かにbaseのサイズも対象ビットの指定に影響する。 [メモリ上のビット操作をする場合]図135に示す。 「本発明装置」の一般形のビット操作命令では、off
setの値に制限がなく、offsetがバイト境界を
越えてもよいようになっている。offsetは、符号
付き整数として扱われる。ビット操作命令では、BBフ
ィールドによりメモリアクセスの範囲を指定できるよう
になっている。これは、BTSTでreadを行なうメ
モリアドレスの範囲、およびBSET,BCLR,BN
OTで read−modify−writeを行なう
メモリアドレスの範囲を意味するものである。アクセス
されるメモリアドレスの範囲は、入出力やマルチプロセ
ッサを使用した場合に問題となることがある。しかし、
実際には、バイト単位のアクセス(’.B’)のみが使
用できればほとんどの場合に十分であるため、ハーフワ
ード、ワード単位のアクセスは〈〈L2〉〉とする(た
だしレジスタに対するビット操作命令を除く)。また、
ハーフワード、ワード単位のアクセスが意味を持つの
は、アラインメントのとれたハーフワードやワードをア
クセスする場合に限られているので、ハーフワード、ワ
ード単位のアクセスの機能を利用するためには、bas
eとして必ずアラインメントのとれたアドレスを指定し
なければならないという制限を設ける。これは、アクセ
ス範囲の指定に関するインプリメントを容易にするため
である。したがって、アラインメントのとれたハーフワ
ードの単位で、対象ビットを含むメモリアクセスを行な
いたい場合には、baseとして2の倍数を指定する必
要がある。また、アラインメントのとれたワードの単位
で、対象ビットを含むメモリアクセスを行ないたい場合
には、baseとして4の倍数を指定する必要がある。
offsetの値については制限はない。baseとし
てアラインメントのとれていないアドレスを指定した場
合のアクセス範囲は、インプリメントに依存するものと
する。「本発明装置」では、〈〈L2〉〉となっている
メモリに対するハーフワード、ワード単位のアクセスの
インプリメントを行なう。またbaseとしてアライン
メントのとれていないアドレスを指定した場合にも、ア
クセス範囲はアラインメントのとれたハーフワード、ワ
ード単位でアクセスを行なう。 なお、BBで示されるサイズは、「どの範囲に対してr
ead−modify−writeを行なうか?」とい
うことであり、オフセットの範囲(例えば、’.B’で
あればオフセットが8より小さくなる、など)を規定す
るものではない。レジスタに対するビット操作命令で
は、アクセスのサイズ(baseのサイズ)によってo
ffset=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はアクセスサイズのビット数でmod
uloをとって使用することにしている。レジスタ上に
8ビットデータ、16ビットデータ、32ビットデータ
を置いた場合では、それぞれのデータで同じビット位置
を持つビットであっても、実際には異なったビットに対
応することになるので、注意が必要である。仕様が複雑
化するのを避けるため、アセンブラのデフォルトはメモ
リ対象、レジスタ対象とも.Bとする。また、短縮形
も.Bの仕様である。したがって、短縮形でアクセスで
きるレジスタ上の範囲は、2^0〜2^7のビットであ
る(図136参照)。 例えば、2^17のビットをアクセスするつもりで BTST #14,R0 と書くと、実際は BTST.B #14,R0 と解釈され、offsetは上位ビットを無視するの
で、結局2^1のビットが対象となる。正しくは、 BTST.W #14,R0 と書かなければならない。このような場合には、アセン
ブラで警告を出すのが望ましいであろう。 〔ニモニック〕 BTST offset,base 〔命令の機能〕
【0154】
【数8】
【0155】ビットのテスト 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図137に示
す。 〔フラッグ変化〕図138に示す。 〔解説〕指定されたビットの値を反転したものをZ_f
lagにコピーする。EaRf,ShRfqで指定され
るアドレッシングモードでは、イミディエートモード#
imm_data、@−SP、@SP+は使用できな
い。また、Rnのモードを使用した場合、offset
の上位ビットの値は無視される。アセンブラ表記では、
メモリアクセスのサイズをbaseのサイズとして指定
する。BTST:Qでは、メモリアクセスのサイズは8
ビットに固定されており、サイズは’.B’のみを書く
ことができる。
【0156】〔プログラム例外〕 〔ニモニック〕 BSET offset,base 〔命令の機能〕
【0157】
【数9】
【0158】ビットのセット 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図139に示
す。 〔フラッグ変化〕図140に示す。 〔解説〕指定されたビットの値を反転したものをZ_f
lagにコピーし、その後そのビットを1にセットす
る。EaMf,ShMfqで指定されるアドレッシング
モードでは、イミディエートモード#imm_dat
a、@−SP,@SP+は使用できない。また、Rnの
モードを使用した場合、offsetの上位ビットの値
は無視される。アセンブラ表記では、メモリアクセスの
サイズをbaseのサイズとして指定する。BSET:
Qでは、メモリアクセスのサイズは8ビットに固定され
ており、サイズは’.B’のみを書くことができる。
【0159】〔プログラム例外〕 〔ニモニック〕 BCLR offset,base 〔命令の機能〕
【0160】
【数10】
【0161】ビットのクリア 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図141に示
す。 〔フラッグ変化〕図142に示す。 〔解説〕指定されたビットの値を反転したものをZ_f
lagにコピーし、その後そのビットを0にクリアす
る。EaMf,ShMfqで指定されるアドレッシング
モードでは、イミディエートモード#imm_dat
a、@−SP,@SP+は使用できない。また、Rnの
モードを使用した場合、offsetの上位ビットの値
は無視される。アセンブラ表記では、メモリアクセスの
サイズをbaseのサイズとして指定する。BCLR:
Qでは、メモリアクセスのサイズは8ビットに固定され
ており、サイズは’.B’のみを書くことができる。
【0162】〔プログラム例外〕 〔ニモニック〕 BNOT offset,base 〔命令の機能〕
【0163】
【数11】
【0164】ビットの反転 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図143に示
す。 〔フラッグ変化〕図144に示す。 〔解説〕指定されたビットの値を反転したものをZ_f
lagにコピーし、その後そのビットも反転する。Ea
Mfで指定されるアドレッシングモードでは、イミディ
エートモード#imm_data、@−SP,@SP+
は使用できない。また、Rnのモードを使用した場合、
offsetの上位ビットの値は無視される。アセンブ
ラ表記では、メモリアクセスのサイズをbaseのサイ
ズとして指定する。
【0165】〔プログラム例外〕 〔ニモニック〕 BSCH data,offset 〔命令の機能〕 0または1のサーチ(1ワード内) 〔命令オプション〕 〔命令ビットパターンとアセンブラ表記〕図145に示
す。 〔フラッグ変化〕図146に示す。 〔解説〕ワード中にある’0’ または’1’のビット
をサーチする。サーチを開始するビット番号(bit
offset)をoffsetオペランドにセットして
この命令を実行すると、命令実行後、サーチ結果のビッ
ト番号がoffsetオペランドにセットされている。
offsetはread−modify−writeと
なっている。offsetをread−modify−
writeの形にしたのは、ビットの検索を繰り返して
行なうことを想定したためである。サーチの行なわれる
ビット位置の範囲は、dataオペランドの0〜(da
taのサイズ)に限られており、ワード境界を越えるこ
とはできない。offsetとしてはすべてのサイズが
使用可能であるが、offsetの初期値の上位ビット
はサーチの際には無視される。これは、上位ビットに、
ワード境界を越えた分のビットオフセットや実効アドレ
スなどといった、別の情報が入っていることが多いと考
えられるためである。また、BSCHの仕様を軽くして
高速化するためである。なお、/Fの時dataのサイ
ズを表わす数、/Bの時(−1)となる。「上位ビッ
ト」とは、log2(dataのビット数)よりも上位
のビットを示す。dataが32ビットであれば、2^
5〜2^31のビットが上位ビットである。サーチはビ
ット番号の大きな方向へ向かって、つまり、big−e
ndianの「本発明装置」では LSBの方向へ向か
って行なわれるのが標準の仕様〈〈L0〉〉であり、/
Fオプションにより実現される。逆方向のサーチ/Bオ
プションは〈〈L2〉〉仕様となっている。これは、正
方向のサーチと逆方向のサーチで全く別のハードウエア
が必要なためである。また、サーチされるdataのサ
イズのうち、8ビットと16ビット(RR=00,0
1)の指定は〈〈L2〉〉となっている。「本発明装
置」では、〈〈L2〉〉となっている/Bオプション,
8ビットと16ビットのデータサイズ(RR=00,0
1)もサポートする。BSCHはビット操作命令と同じ
分類にしているが、かなり異なった性質をもっている。
BSCH命令でも、他のビット操作命令と同じようにオ
フセットを自由に設定できる方が使いやすいという考え
方があるが、その目的でBVSCH命令が別に設けられ
ているため、BSCHとしてはできるだけ軽い仕様に絞
り、オフセットの範囲を制限している。オフセットの有
効範囲は、他のビット操作命令でレジスタ直接モードR
nを指定した場合と同じ範囲である。また、一般のビッ
ト操作命令ではoffsetがread−only、b
aseがread−modify−writeとなって
いるのに対して、BSCHではそれとは逆にoffse
tがread−modify−write、data
(base address)がread−onlyと
なっており、注意が必要である。BSCH/Fで、指定
したビットが見付からなかった場合には、サーチを行な
った最後のビット(ワード境界)の次のビットのオフセ
ットがセットされ、V_flag=1となる。サーチ失
敗時にも、EITは起動しない。結果的に、サーチを行
なったビット数の分だけオフセットが加算される。 BSCH/Bで、指定したビットが見付からなかった場
合には、offsetに(−1)がセットされる。この
場合もV_flagがセットされるが、EITは起動さ
れない。BSCH命令では、offsetの初期値の上
位ビットは無視されるが、命令終了後にセットされるo
ffset値(サーチ結果)については、上位ビットま
で意味を持つ値になっている。つまり、offsetの
上位ビットに、ワード境界を越えた分のビットオフセッ
トや実効アドレスなどといった別の情報が入っていて
も、BSCH命令実行後は、offsetの上位ビット
も書き換えられてしまうわけである。サーチ成功の時は
offsetが0〜31の値をとる(dataが32ビ
ットの場合)ので、/F,/Bとも上位ビットは常に0
となる。また、/Fでサーチ失敗の場合はoffset
=32となるため、上位ビットが00....001
に、下位ビットが00000になる。/Bでサーチ失敗
の場合はoffset=(−1)となるため、上位ビッ
トが11....111に、下位ビットが11111に
なる。
【0166】〔プログラム例外〕
【0167】12−7.固定長ビットフィールド操作命
令 「本発明装置」の一つのデータタイプであるビットフィ
ールドは、ビットフィールド中のMSBの位置、および
ビットフィールドの長さ(width)により指定され
る。ビットフィールドのMSBの位置は、baseとo
ffsetとの組で示される。baseで示されるメモ
リのMSB(第0bit)がoffset=0になる。
offsetの意味は、ビット操作命令の時と同じであ
る。ビットフィールドとbase、offset、wi
dthとの関係を図147に示す。 [メモリ上のビットフィールド操作をする場合]図14
7に示すように太線内が対象ビットフィールドである。
固定長ビットフィールドの操作命令(BFEXT,BF
EXTU,BFCMP,BFCMPU,BFINS,B
FINSU)は、AI向き応用のタグ処理(タグの比較
やタグの切り出し)などに特に有効である。固定長ビッ
トフィールド命令には、次の2つのフォーマットがあ
る。 ・offsetを8ビットの一般形アドレッシングモー
ドで指定し、widthをレジスタで指定する形式。こ
れを’:G’フォーマットと呼ぶ。’:G’フォーマッ
トでは、baseにoffset/8の値を加えること
により、実際にアクセスするメモリのアドレスが決ま
る。26bit以上のビットフィールドで5バイトにま
たがるビットフィールドを扱うこともできる。 ・offsetを8ビットのイミディエート値で指定
し、widthをリテラルで指定する形式。これを’:
E’フォーマットと呼ぶ。’:E’フォーマットでは、
ワード境界を越えないビットフィールドのみを対象とし
て速度を上げるために、baseの1ワードからはみ出
した部分のビットフィールドについて、動作を保証しな
いものとしている。width+offset≧siz
eであってもEITは起動しないが、読みだし時、書き
込み時とも値が不定となる。baseの1ワードのみの
アクセスでも命令仕様を実現することができるので、o
ffsetとは無関係に、baseのみを見て操作対象
となるビットフィールドのメモリアドレスを決めること
が可能である。したがって、インプリメント次第で命令
実行を高速化することもできる。BF:EとBF:Gの
baseで許されるアドレッシングモードは、全く同じ
である。BFINS,BFINSU,BFCMP,BF
CMPUでは、:G,:Eフォーマットのそれぞれに対
して、さらに次の二つの形式がある。 ・srcオペランドをレジスタで指定する:Rフォーマ
ット ・srcオペランドをイミディエートで指定する:Iフ
ォーマット widthの値は、1〜32(〈〈LX〉〉では1〜6
4)に制限されており、命令実行前に0<width≦
32(64)のチェックが行なわれる。width=0
の場合もエラーである。違反した場合には、不正オペラ
ンド例外(IOE)となる。すべての命令について、o
ffset,widthとも符号付きの数として扱われ
る。ただし、widthはもともと1〜32(64)の
値しか許されていないため、符号付きと考えるか符号な
しと考えるかは実際の動作には影響せず、仕様書記述上
の問題となっている。また、:Eフォーマットの命令の
offsetも符号付きとして扱われ、この場合はof
fsetとして−128〜+127の数を表わすことに
なる。(ただし、後で述べるように、:Eフォーマット
ではbaseのアドレスの1ワードbase〜base
+3からハミ出すビットフィールドについて、ハミ出し
た部分に関する動作を保証していない。) BF命令のビットフィールドでない方のオペランドは、
普通の整数として扱われる。したがって、例えばBFE
XTの場合は、抽出されたビットフィールドがレジスタ
の LSB側に詰めてセットされ、MSB方向に符号拡
張される。ビット位置=0(MSB)に合わせてビット
フィールドをセットするのではない。baseとしてレ
ジスタを対象とした場合には、ビットフィールドは一つ
のレジスタの範囲内に限られる。レジスタ対象の固定長
ビットフィールド命令も「本発明装置」でサポートす
る。ただしこれは〈〈L2〉〉となっている。これは、
レジスタを対象としたビットフィールド操作の場合、現
段階では、BF:E命令よりもシフト命令とAND命令
を組み合せて実行する方が速くなる可能性があるためで
ある。レジスタ対象のビットフィールド命令(〈〈L
2〉〉)については、:Gでも次に述べる:Eと同じよ
うに、1ワード(レジスタ)からハミ出すビットフィー
ルドについて、ハミ出した部分に関する動作を保証しな
いものとする。BFEXT,BFEXTUでは不定値が
得られ、BFINS,BFINSUでは無視される。o
ffset+width≧sizeの場合もEITは起
動しない。:Eフォーマットでは、対象となるビットフ
ィールドのうちで、sizeを越えたビットオフセット
を持つ部分についてのみ動作を保証していない。同様
に、負のビットオフセットを持つ部分についても動作を
保証していない。いずれの場合も、指定されたビットフ
ィールドのうちで、baseのアドレスで示される1ワ
ードに含まれる部分については、正しく実行される。 width,src,destのレジスタのサイズ指定
は、Xフィールドによって共通に行なわれる。サイズ指
定フィールドXは、32ビット演算と64ビット演算
(〈〈LX〉〉)の切り換えを行なうものであるが、具
体的には次の3つの意味を持つ。 src(dest)レジスタのサイズ指定(:Rフォ
ーマット) widthレジスタのサイズ指定(:Gフォーマッ
ト) widthの範囲の指定 :E:Iフォーマットの場合は意味を持たないが、
の区別を行なうためにやはりXフィールドを使用す
る。すなわち、Xフィールドは、32ビットと64ビッ
トの互換性を高めるためのビットであると言える。:I
フォーマットの命令でSS≠00の時には、#iS8の
フィールドは使用しない。この時、もし#iS8のフィ
ールドが0になっていなくても、単に無視される。ただ
し、マニュアル上は、#iS8のフィールドには0を入
れるようにしておく。ビットフィールド命令のフォーマ
ットと、それに対して使用できるサイズを列挙すると、
図148,図149のようになる。ビットフィールド命
令についても、ビット操作命令と同じようにアクセスを
行なうメモリの範囲が問題となるが、インプリメントへ
の依存性が強いので、強い規定は設けない。[これにつ
いては詳細仕様調整中] 〔ニモニック〕 BFEXT offset,width,base,
dest 〔命令の機能〕 extract bit field(signed) ビットフィールドの抽出(符号付き) 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図150に示
す。 〔フラッグ変化〕図151に示す。 〔解説〕ビットフィールドの抽出を行ない結果をデステ
ィネーションに転送する。ビットフィールドのwidt
hよりもデスティネーションのサイズの方が大きい時
は、データが符号拡張される。また、BFEXT:Gの
offsetも符号拡張される。EaRbfのアドレッ
シングモードでは、@−SP,@SP+,#imm_d
ataのモードは使用できない。baseのレジスタ直
接モードRnは〈〈L2〉〉であるが「本発明装置」で
はサポートする。 [オペレーション] (d<wの時) 「本発明装置」32では起り得ないケースである。 「本発明装置」32であれば常にクリアされる。
【0168】〔プログラム例外〕 〔ニモニック〕 BFEXTU offset,width,bas
e,dest 〔命令の機能〕 extract bit field(unsigne
d) ビットフィールドの抽出(符号なし) 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図152に示
す。 〔フラッグ変化〕図153に示す。 〔解説〕ビットフィールドの抽出を行ない結果をデステ
ィネーションに転送する。ビットフィールドのwidt
hよりもデスティネーションのサイズの方が大きい時
は、データがゼロ拡張される。ただし、BFEXTU:
Gのoffsetは符号拡張される。EaRbfのアド
レッシングモードでは、@−SP,@SP+,#imm
_dataのモードは使用できない。baseのレジス
タ直接モードRnは〈〈L2〉〉であるが「本発明装
置」ではサポートする。 [オペレーション] とする。offset,widthは符号付きとして扱
われる。(width≦0,width>dの時はエラ
ー) この時、抽出される部分のビットフィールドとフラッグ
の変化は、次のようになる。 (d≧wの時) この部分をゼロ拡張してdestに設定する (d<wの時) 「本発明装置」32では起り得ないケースである。 「本発明装置」32であれば常にクリアされる。
【0169】〔プログラム例外〕 ・不正オペランド例外 〔ニモニック〕 BFINS src,offset,width,b
ase 〔命令の機能〕 insert bit field ビットフィールドの挿入(符号付き) 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図154に示
す。 〔フラッグ変化〕図155に示す。 〔解説〕ソースの値をビットフィールドに挿入する。ソ
ースのサイズよりもビットフィールドのwidthの方
が大きい時は、データが符号拡張される。また、BFI
NS:Gのoffsetも符号拡張される。EaRbf
のアドレッシングモードでは、@−SP,@SP+,#
imm_dataのモードは使用できない。baseの
レジスタ直接モードRnは〈〈L2〉〉であるが「本発
明装置」ではサポートする。 [オペレーション] とする。offset,widthとも符号付きとして
扱われる。(width≦0,width>dの時はエ
ラー) この時、挿入される部分のビットフィールドとフラッグ
の変化は、次のようになる。 (w≧sの時) ビットフィールドの変化 (w<sの時) ビットフィールドの変化
【0170】〔プログラム例外〕 〔ニモニック〕 BFINSU src,offset,width,
base 〔命令の機能〕 insert bit field ビットフィールドの挿入(符号なし) 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図156に示
す。 〔フラッグ変化〕図157に示す。 〔解説〕ソースの値をビットフィールドに挿入する。ソ
ースのサイズよりもビットフィールドのwidthの方
が大きい時は、データがゼロ拡張される。一方、BFI
NSU:Gのoffsetは符号拡張される。EaRb
fのアドレッシングモードでは、@−SP,@SP+,
#imm_dataのモードは使用できない。base
のレジスタ直接モードRnは〈〈L2〉〉であるが「本
発明装置」ではサポートする。 [オペレーション] とする。offset,widthとも符号付きとして
扱われる。(width≦0,width>dの時はエ
ラー) この時、挿入される部分のビットフィールドとフラッグ
の変化は、次のようになる。 (w≧sの時) ビットフィールドの変化 (w<sの時) ビットフィールドの変化
【0171】〔プログラム例外〕 〔ニモニック〕 BFCMP src,offset,width,b
ase 〔命令の機能〕 compare bit field(signed) ビットフィールドの比較(符号付き) 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図158に示
す。 〔フラッグ変化〕図159に示す。 〔解説〕ソースsrcの値とビットフィールドの値を比
較する。ソースのサイズとビットフィールドのwidt
hの値が異なっている場合は、サイズの小さい方のデー
タが符号拡張されてから比較される。また、BFCM
P:Gのoffsetも符号拡張される。EaRbfの
アドレッシングモードでは、@−SP,@SP+,#i
mm_dataのモードは使用できない。baseのレ
ジスタ直接モードRnは〈〈L2〉〉であるが「本発明
装置」ではサポートする。 [オペレーション] とする。offset,widthとも符号付きとして
扱われる。(width≦0,width>dの時はエ
ラー) この時、比較される部分のビットフィールドとフラッグ
の変化は、次のようになる。 (s≧wの時) (s<wの時) srcを符号拡張してこの部分と比較する
【0172】〔プログラム例外〕 〔ニモニック〕 BFCMPU src,offset,width,
base 〔命令の機能〕 compare bit field(unsigne
d) ビットフィールドの比較(符号なし) 〔命令オブション〕なし 〔命令ビットパターンとアセンブラ表記〕図160に示
す。 〔フラッグ変化〕図161に示す。 〔解説〕ソースsrcの値とビットフィールドの値を比
較する。ソースのサイズとビットフィールドのwidt
hの値が異なっている場合は、サイズの小さい方のデー
タがゼロ拡張されてから比較される。一方、BFCMP
U:Gのoffsetは符号拡張される。EaRbfの
アドレッシングモードでは、@−SP,@SP+,#i
mm_dataのモードは使用できない。baseのレ
ジスタ直接モードRnは〈〈L2〉〉であるが「本発明
装置」ではサポートする。 [オペレーション] とする。offset,wldthとも符号付きとして
扱われる。(wldth≦0,width>dの時はエ
ラー) この時、比較される部分のビットフィールドとフラッグ
の変化は、次のようになる。 (s≧wの時) (s<wの時) srcをゼロ拡張してこの部分と比較する
【0173】〔プログラム例外〕
【0174】12−8.任意長ビットフィールド操作命
令 任意長のビットフィールド操作命令には、次のようなも
のがある。 BVMAP,BVPAT,BVCPYは、ビットマップ
ディスプレイ上のウインドウ操作(bitblt)を主
な目的とした命令である。説明のため、ビットマップデ
ィスプレイの属性について用語を定義する。 (color scale,color offset
とbit−dot極性) ・color scale :1dotを連続の何bi
tで表すか。 ・bit−dot極性 これは、ビットマップディスプレイとプロセッサとの組
み合わせに対して生ずる概念である。小さいアドレスの
方が左側に表示されるような一般的なビットマップディ
スプレイにおいて、小さいビット番号に対応するドット
も左側に表示される場合、このようなビットマップディ
スプレイを正のbit−dot極性を持つという。ま
た、逆のものを負のbit−dot極性を持つという。
つまり、big−endianのプロセッサでは、MS
Bビットが左側に表示される場合に正のbit−dot
極性を持つことになる。 ・color offset 1dotを構成する複数のビットのうち、第何ビットを
操作するか、ということ。 という関係が成り立つ。これは、ビットマップディスプ
レイハードウエアの属性ではなく、ビットマップディス
プレイ操作上のパラメータである。base addr
essに対応するドットから、横方向にX(dot o
ffset)だけ変位したドットを操作する場合、その
メモリ上のbit offsetは次のように計算され
る。(dot offsetは画面上の点の概念、bi
t offsetはメモリ上のbitの概念である。) 正のbit−dot極性の時 負のbit−dot極性の時 ところで、実際の「本発明装置」のBVMAP,BVC
PY,BVPAT命令では、インプリメントのことを考
えて制約を設け、次のような場合にのみ使用できるよう
になっている。 ・bit−dot極性が正 ・color scaleが1 このため、ビットマップディスプレイのハードウエアを
ある程度規定することはやむを得ない。具体的な制限は
次のようになる。 ・bit−dot極性が正なので、「本発明装置」をb
ig−endianとした場合には、アドレスの小さい
方、ビット番号の小さい方(MSB)が画面の左側に表
示されなければならない。 ・color scale=1のみなので、color
scale≠1のビットマップディスプレイに対して
は次のような制約がある。color scale≠1
のビットマップディスプレイでは、color off
set毎に演算の種類を変えることができなくなる。B
VMAP命令でcolor scaleの変更をするこ
とはできないので、ビットマップディスプレイのcol
or scaleが1でない時には、内部表現も同じc
olor scaleにしないと、BVMAP命令は、
使えない。その場合、画面イメージの内部表現がハード
ウエアに依存することになるので、他のハードウエアと
の間でデータの転送を行なう時は、データ形式の変換が
必要になる。任意長ビットフィールド操作命令はオペラ
ンドが多く、実行時間も長い。したがって、実行中での
割り込み受け付けや、割り込み処理後の再実行のメカニ
ズムが必要である。「本発明装置」では、オペランドの
指定と演算の進行状況の表現のために固定番号のレジス
タを使用している。そのため、任意長ビットフィールド
命令実行中に割り込みが入っても、割り込み処理ハンド
ラ中でそのレジスタの退避と復帰が正しく行なわれてい
れば、割り込み処理後に、そのビットフィールド命令を
途中から再開できる。実行中断後に状態の退避やコンテ
キストスイッチを行なったり、コンテキストスイッチ後
に別のプロセスで同じビットマップ命令を実行し、再び
前のコンテキストに戻って前のビットマップ命令を再開
したとしても、問題なく動かなければならない。また、
BTRONの仕様では、VRAMではない普通のメイン
メモリに対しても、文字や図形の描画が行なわれること
がある。したがって、任意長ビットフィールド命令でも
ページフォールトの起こる可能性があり、ストリング命
令と同様に、ページフォールトによる実行中断にも対処
できなければならない。BVMAP,BVCPY命令で
は、インサートエディタなどで真横に図形を移動するこ
とを考え、ビットマップのソースとデスティネーション
のオーバーラップにも対応できるようになっている。具
体的には、ストリング命令と同じように、演算を行なう
方向を命令中のオプション/F,/Bとして指定する。
ソフトウエアにより適当な方向を判定し、デスティネー
ションがソースを破壊しないように演算を進める。ただ
し、インプリメントの負担を考え、逆方向の処理を指定
するオプション/Bは〈〈L2〉〉となっている。「本
発明装置」ではBTRONの動作を高速化するための逆
方向処理もサポートする。srcとdestがオーバー
ラップしていた場合、srcのbase〜offset
よりもdestのbase〜offsetの方が小さけ
れば、offsetの小さい方から処理することによっ
てdestがsrcを破壊することなく処理を進めるこ
とができる。この目的で/Fオプションを使用する。画
面とビットマップとの対応は、通常オフセット(アドレ
ス)の小さい方が左側になる。したがって、srcより
もdestのbase〜offsetの方が小さくなる
のは、文字の削除などによってビットマップデータを左
に動かそうとした時である。また、srcのbase〜
offsetよりもdestのbase〜offset
の方が大きければ、offsetの大きい方から処理す
ることによってdestがsrcを破壊することなく処
理を進めることができる。この目的で/Bオプションを
使用する。srcよりもdestのbase〜offs
etの方が大きくなるのは、文字の挿入などによってビ
ットマップデータを右に動かそうとした時である。sr
cとdestがオーバーラップする可能性がある場合に
は、ソフトウエアの判断により正しいオプションを使用
し、destがsrcを破壊しないように演算を進める
必要がある。ただし、/Bオプションは〈〈L2〉〉と
なっているので、/Bが使用できない場合には、src
を一旦他の場所にコピーしてからdestとの演算を行
なわなければならない。オーバーラップがない場合に
は、どちらのオプションを使っても結果は変わらない。
ここで、問題は、destのbase〜offsetの
方が小さいのに/Bオプションを使用した場合や、de
stのbase〜offsetの方が大きいのに/Fオ
プションを使用した場合にどのような動作を行なうかと
いうことである。基本的には、既に演算の終った部分の
destが、srcのまだ参照されていない部分を破壊
する形になるため、正しい結果が得られない。しかも、
この時は、アルゴリズム上、命令が途中で中断して再実
行を行なった場合に、結果が変わってくることがある。
もともと正しい結果を保証していないのであるから、実
行中断によって結果が変わったとしても構わないはずで
あるが、実行中断のなかった場合は正しい結果が得られ
ることもあるので、再現不可能なバグが入りやすい状況
になる。しかし、このエラーチェックをきちんと行なう
とオーバーヘッドが増え、実行時間の低下をもたらすの
で、エラーチェックは行なわない。ユーザの側で注意が
必要である。任意長ビットフィールド命令では、レジス
タ上のビットオフセットoffset、ビット幅wid
th、パターンデータpatternのサイズとして、
32ビットまたは64ビット〈〈LX〉〉のみが使用で
きる。8,16ビットの指定は行なわない。32ビット
と64ビットのレジスタサイズの選択は、Xフィールド
によって共通に行なわれる。BVMAP,BVCPY,
BVPAT命令のdest側のメモリアクセス方法につ
いては、writeまたはread−modify−w
riteということで特に規定しない。BV命令でwi
dth≦0の場合には、何もせずに命令を終了し、EI
Tとはしない。この時、BVSCH命令では、長さによ
る終了を示すV_flag(サーチ失敗と同じ)がセッ
トされる。これは、BV命令やストリング命令の様な高
機能命令の場合には、その外側でさらに高機能のサブル
ーチンを作ることが多く、チェックが必要であればその
サブルーチンで行なえばよいと考えているためである。
例えば、BVMAPであれば、それをライン数だけ繰り
返してBitBlt関数を作ることが多く、その時はw
idthがすべて共通になるので、毎回widthをチ
ェックする必要はない。一方、BF命令のように、コン
パイラが直接生成する可能性のあるコードでは、できる
だけチェックを厳重にする必要がある。したがって、B
F命令のwidthは例外で検出するようにしている。
任意長ビットフィールド命令でoffset+widt
hがオーバーフローする場合には、割り込みによる命令
実行中断時、および命令終了時のレジスタ上のoffs
et値がおかしな値になり、正常な命令の実行ができな
くなる。この場合は、動作を保証しないものとする。ア
ーキテクチャ上は、命令実行開始時にこれを検出して不
正オペランド例外(IOE)とするのが望ましいが、チ
ェックのために実行時間が伸びるので、チェックせずに
実行するものとする。(なお、ストリング命令の場合
は、offsetに相当するのが整数ではなくポインタ
アドレスとなっているため、オーバーフローとしては扱
わず、単にアドレスがラップアラウンドするだけであ
る。) 〔ニモニック〕 BVSCH 〔命令の機能〕 find first’0’or’1’in the
bitfield(variable length) 0または1のサーチ(任意長ビットフィールド) 〔命令オプション〕 〔命令ビットパターンとアセンブラ表記〕図162に示
す。 〔フラッグ変化〕図163に示す。 〔解説〕任意長のビットフィールドの中にある’0’ま
たは’1’のビットをサーチする。サーチを開始するビ
ット番号(bit offset)をoffsetオペ
ランド(R1)にセットしてこの命令を実行すると、命
令実行後、サーチ結果のビット番号がoffsetオペ
ランド(R1)にセットされている。つまり、offs
etはread−modify−writeとなってい
る。これは、ビットの検索を繰り返して行なうことを想
定したためである。offsetは符号付き整数として
扱われ、その値は任意である。BVSCHを実行した結
果、サーチ失敗だった場合には、V_flagをセット
し、offsetは次にサーチすべきビットを指示。E
ITは起動しない。BVSCH命令のオフセットやV_
flagの変化方法は、BSCH命令に準じたものであ
る。/Bによる逆方向のサーチは〈〈L2〉〉仕様とな
っているが「本発明装置」ではサポートする。この命令
は、ディスクやメモリの空きブロック検索などに使用す
ることを目的としたものである。なお、任意長ビツトフ
ィールド命令やストリング命令などの高機能命令の詳細
仕様や、命令終了後のレジスタ値については、付録11
を参照のこと。
【0175】〔プログラム例外〕 〔ニモニック〕 BVMAP 〔命令の機能〕 bit operation(one line Bi
tBlt) ビットマップ演算 〔命令オプション〕 〔命令ビットパターンとアセンブラ表記〕図164に示
す。 〔フラッグ変化〕図165に示す。 〔解説〕スクリーン上のビットマップ操作を行なうため
に、任意長のビットフィールドsrc,destに対す
る各種の論理演算をする命令である。演算の種類はR5
の下位4ビットで指定され、次の16種類が用意されて
いる。
【0176】
【数12】
【0177】このうちD(Dest)の演算モードは、
対称性のために設けられている。ニモニックと実際のビ
ットパターンとの対応については、付録を参照のこと。
演算を指定するレジスタR5の上位ビットが0でない場
合にも、特にチェックは行なわないものとする。ただ
し、チェックが行なわれていなくても、上位ビットには
必ず’0’を入れてもらうように、マニュアル等で指導
する必要がある。不正オペランド例外(IOE)としな
いのは、インプリメントの負担が大きく、実行速度に影
響が出るためである。/F,/Bオプションは、off
setの小さい方から処理するか、offsetの大き
い方から処理するかを指定する。これは、ビットマップ
のsrcとdestがオーバーラップしていた場合に、
処理の方向を明確にしておかないと、destがsrc
を破壊して正しい結果が得られないからである。src
とdestがオーバーラップしていた場合、srcのb
ase〜offsetよりもdestのbase〜of
fsetの方が小さければ、offsetの小さい方か
ら処理することによってdestがsrcを破壊するこ
となく処理を進めることができる。この目的で/Fオプ
ションを使用する。画面とビットマップとの対応は、通
常オフセット(アドレス)の小さい方が左側になる。し
たがって、srcよりもdestのbase〜offs
etの方が小さくなるのは、文字の削除などによってビ
ットマップデータを左に動かそうとした時である。ま
た、srcのbase〜offsetよりもdestの
base〜offsetの方が大きければ、offse
tの大きい方から処理することによってdestがsr
cを破壊することなく処理を進めることができる。この
目的で/Bオプションを使用する。srcよりもdes
tのbase〜offsetの方が大きくなるのは、文
字の挿入などによってビットマップデータを右に動かそ
うとした時である。なお、destのbase〜off
setの方が小さいのに/Bオプションを使用した場合
や、destのbase〜offsetの方が大きいの
に/Fオプションを使用した場合には、結果(des
t)を保証しないものとする。特に、このような場合に
は、命令実行中に割り込みやページフォールトなどが発
生して命令再実行が起こると、結果が変わってくること
もある。srcとdestがオーバーラップする可能性
がある場合には、ソフトウエアの判断により正しいオプ
ションを使用し、destがsrcを破壊しないように
演算を進める必要がある。ただし、/Bオプションは
〈〈L2〉〉となっているので、/Bが使用できない場
合には、srcを一旦他の場所にコピーしてからdes
tとの演算を行なわなければならない。「本発明装置」
では/Bオプションはサポートする。オーバーラップが
ない場合には、どちらのオプションを使っても結果は変
わらない。 [オーバーラップなし]図166に示す。 図167に示す。 図168に示す。
【0178】〔プログラム例外〕 〔ニモニック〕 BVCPY 〔命令の機能〕 bit transfer ビットマップ転送 〔命令オプション〕 〔命令ビットパターンとアセンブラ表記〕図169に示
す。 〔フラッグ変化〕図170に示す。 〔解説〕スクリーン上のビットマップ操作を行なうため
に、任意長のビットフィールドsrc,destの間の
転送をする命令である。この命令は、BVMAP命令か
ら演算の機能をはずして転送のみに限定し、高速化を目
指したものである。/F,/Bオプションの意味はBV
MAPと同じである。ビットマップのsrcとdest
がオーバーラップしていなければ、どちらのオプション
を使っても結果は変わらないが、srcとdestがオ
ーバーラップした場合には、ソフトウエアの判断により
正しいオプションを使用し、destがsrcを破壊し
ないように演算を進める必要がある。/Bオプションの
場合、R1,R4に入れるオフセット値としては、転送
の対象となるビットフィールドの最大+1のオフセット
値を指定する。これは、SMOV/B,SCMP/Bの
仕様との対応を考えたものである。/Bオプションは
〈〈L2〉〉であるが「本発明装置」ではサポートす
る。
【0179】〔プログラム例外〕 〔ニモニック〕 BVPAT 〔命令の機能〕 cyclic bit operation パターンとビットマップの演算 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図171に示
す。 〔フラッグ変化〕図172に示す。 〔解説〕スクリーン上のビットマップをあるパターンで
埋めたり、スクリーン上のビットマップとあるパターン
の演算を行ないたい場合に使用する命令である。pat
ternを繰り返し発生しながら、ビットフィールドと
の論理演算を行なう。演算指定(R5)の上位ビットが
0でない場合は単に無視され、特にチェックは行なわな
いものとする。ただし、チェックが行なわれていなくて
も、将来の拡張のため、上位ビットには必ず’0’を入
れてもらうように、マニュアル等で指導する必要があ
る。不正オペランド例外(IOE)としないのは、イン
プリメントの負担が大きく、実行速度に影響が出るため
である。この命令では、BVMAP,BVCPYとは異
なり、書き込みの際にシフトは行なわない。offse
tの指定は、単にパターンをクリッピングするだけであ
る。(これに対して、BVMAP命令では、srcとd
estのoffsetがずれていた場合にはシフトが行
なわれる)
【0180】〔プログラム例外〕
【0181】12−9.10進演算命令 10進演算に関しては、符号なしPACKED形式(B
CD)の10進数の1ワードの加減算とPACK/UN
PACK処理をメインプロセッサの〈〈L1〉〉仕様と
してサポートし、符号付きPACKED形式10進数の
1ワードの加減算を〈〈L2〉〉仕様としてサポートす
る。また、多桁の10進数の加減乗除はコプロセッサで
行なう。このうち、本章では符号なしPACKED形式
10進数の加減算とPACK/UNPACK処理につい
て説明を行なう。符号付きPACKED形式10進数を
サポートする〈〈L2〉〉の命令については、後の章で
説明を行なう。10進演算のアドレッシングモードは一
般命令と同じになっている。本発明装置では本節で述べ
る10進演算命令4種類はサポートしない。 〔ニモニック〕 ADDDX src,dest(本発明装置ではサポ
ートしない) 〔命令の機能〕 BCDの加算 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図173に示
す。 〔フラッグ変化〕図174に示す。 〔解説〕パックされたBCDの加算を行なう。8ビット
(2桁)、16ビット(4桁)、32ビット(8桁)、
64ビット(16桁)のBCDデータを扱うことができ
る。ただし、64ビットは〈〈LX〉〉仕様である。ソ
ースオペランドのサイズがデスティネーションオペラン
ドのサイズよりも小さい時は、ソースがゼロ拡張された
上で加算される。BCDの数は符号拡張が無意味なの
で、基本的には符号なしの数と考え、ADDDXのフラ
ッグ変化はADDUに準じるものとする。結果がdes
tに入らない時にV_flagがセットされること、d
<sの時はdestのサイズからの桁上げがX_fla
gにセットされること、などもADDUと同様である。
ただし、ADDUとは異なり、Z_flagはADD
X,SUBXのように累積で変化する。src,des
tの各桁が0〜9以外の数を含んでいた場合、つまりA
DDDX,SUBDXのオペランドがBCDでなかった
場合には、EITとはならないが、destやフラッグ
に設定される結果は保証できない(インプリメント依存
になる)ものとする。不正オペランド例外(IOE)と
しないのは、インプリメントの負担が大きく、実行速度
に影響が出るためである。
【0182】〔プログラム例外〕 ・〈〈L1〉〉機能例外 ・ADDDXの正しいビットパターンがデコードされた
とき 〔ニモニック〕 SUBDX src,dest(本発明装置ではサポ
ートしない) 〔命令の機能〕 10進BCDの減算 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図175に示
す。 〔フラッグ変化〕図176に示す。 〔解説〕パックされたBCDの減算を行なう。8ビット
(2桁)、16ビット(4桁)、32ビット(8桁)、
64ビット(16桁)のBCDデータを扱うことができ
る。ただし、64ビットは〈〈LX〉〉仕様である。ソ
ースオペランドのサイズがデスティネーションオペラン
ドのサイズよりも小さい時は、ソースがゼロ拡張された
上で加算される。BCDの数は符号拡張が無意味なの
で、基本的には符号なしの数と考え、SUBDXのフラ
ッグ変化はSUBUに準じるものとする。結果が負にな
った時にV_flagがセットされること、d<sの時
はdestのサイズからの桁下げがX_flagにセッ
トされること、などもSUBUと同様である。ただし、
SUBUとは異なり、Z_flagはADDX,SUB
Xのように累積で変化する。SUBDXで結果が負にな
った場合には、destは絶対値表現ではなく補数表現
(10の補数)となる。したがって、destは上位桁
からの繰り下がりがあった場合と同じ値になる。 src,destの各桁が0〜9以外の数を含んでいた
場合、つまりADDDX,SUBDXのオペランドがB
CDでなかった場合には、EITとはならないが、de
stやフラッグに設定される結果は保証できない(イン
プリメント依存になる)ものとする。不正オペランド例
外(IOE)としないのは、インプリメントの負担が大
きく、実行速度に影響が出るためである。
【0183】〔プログラム例外〕 ・〈〈L1〉〉機能例外 ・SUBDXの正しいビットパターンがデコードされた
とき 〔ニモニック〕 PACKss src,dest(本発明装置ではサ
ポートしない) 〔命令の機能〕 pack string into BCD BCDへのパック 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図177に示
す。 〔フラッグ変化〕図178に示す。 〔解説〕srcをBCD(Binary Coded
Decimal)にパックしてdestに転送する。実
際には、ssにB,H,W,Lのいずれかの文字が入
り、次のようなニモニックとオペレーションになる。 なお、PACKss,UNPKssにおいて、サイズの
違いによってニモニックまで変えているのは、サイズの
違いによって命令自体の意味もかなり変わると考えられ
るためである。つまり、一般の命令では、サイズの違い
によってゼロ拡張や符号拡張を行なうだけであったが、
PACKss,UNPKssでは命令のオペレーション
自体がかなり異なっている。PACK,UNPKで、上
記の説明に含まれない不合理なサイズの組み合わせを指
定した場合には、動作を保証しない(インプリメントに
依存した値がdestに設定される)ものとする。アー
キテクチャ上は予約命令例外(RIE)とするのが望ま
しいが、2つのオペランドのサイズの組み合わせによっ
て予約命令例外(RIE)を検出するのはインプリメン
トの負担が大きいため、予約命令例外(RIE)とはし
ない。これは、異種サイズ間の論理演算の場合も同様で
ある。srcのうち、destに影響を与えないフィー
ルド(PACKHBの2^7〜2^4のビットなど)に
ついては、0かどうかのチェックは行なわず、0でなく
ても無視する。文字コードをそのままパックするケース
を考えると、0でないことの方が多い。
【0184】〔プログラム例外〕 ・〈〈L1〉〉機能例外 ・PACKssの正しいビットパターンがデコードされ
たとき 〔ニモニック〕 UNPKss src,dest,adj(本発明装置
ではサポートしない) 〔命令の機能〕 unpack BCD BCDからのアンパック 〔命令オプション〕なし 図179に示す。 〔フラッグ変化〕図180に示す。 〔解説〕BCD(Binary Coded Deci
mal)のsrcのアンパックを行ない、アンパックし
た値に補正値adjを加えてdestに転送する。補正
値adjを加えるのは、UNPK命令によって直接文字
コードまで生成するためである。adjの加算は、BC
Dではなくバイナリの加算である。adjのサイズはd
estのサイズと共通にWWフィールドによって指定さ
れる。実際には、ssにB,H,W,Lのいずれかの文
字が入り、次のようなニモニックとオペレーションにな
る。図181に示す。PACK,UNPKで、上記の説
明に含まれない不合理なサイズの組み合わせを指定した
場合には、動作を保証しない(インプリメントに依存し
た値がdestに設定される)ものとする。アーキテク
チャ上は予約命令例外(RIE)とするのが望ましい
が、2つのオペランドのサイズの組み合わせによって予
約命令例外(RIE)を検出するのはインプリメントの
負担が大きいため、予約命令例外(RIE)とはしな
い。adjの加算によるオーバーフローは無視する。
【0185】〔プログラム例外〕 ・〈〈L1〉〉機能例外 ・UNPKssの正しいビットパターンがデコードされ
たとき
【0186】12−10.ストリング命令 「ストリング」とは、8ビット、16ビット、32ビッ
ト、または64ビットのデータを任意の長さだけ連続し
て並べたデータタイプである。(SSCH命令に限り、
連続ではなく、一定間隔で飛び飛びのアドレスにあるデ
ータの集合もサポートしている。) 個々のデータの意味は特に決まっておらず、実際の文字
コードになる場合、整数になる場合、浮動小数になる場
合などがある。これは、ユーザ側で解釈する。ストリン
グの範囲を示す方法には、 ・ストリングの長さ(データ数)を指定する方法 ・ストリング終了を示す文字(ターミネータ)を指定す
る方法 の2通りがあり、使用目的や言語によって適した方を選
択する必要がある。本発明装置のストリング命令ではス
トリングのデータ数がパラメータとなっているが、さら
にオプションの終了条件という形でターミネータを与え
ることができ、両方の指定方法をサポートしている。本
発明装置のストリング命令の特徴の一つとして、ポイン
タの増減量を自由に設定できるということがあげられ
る。そのため、ストリングサーチ命令(SSCH命令)
を使ってテーブル検索や多次元配列のスキャンなども行
なうことができる。また、本発明装置ではストリング命
令SMOV,SCMP,SSCHの終了条件として大小
比較や二値比較を含む豊富な条件が指定でき、これも大
きな特徴となっている。ストリング命令のうち、ストリ
ングサーチ用のSSCH命令は、検索条件が終了条件と
して指定されるため、終了条件にのみ意味がある命令と
なっている。本発明装置のストリング命令で指定できる
条件(eeee)については、付録を参照のこと。本発
明装置では〈〈L2〉〉仕様となっている、終了条件O
UTU−ZEはサポートしない。ストリング命令の用途
としては、文字どおり8/16ビットの文字列を処理す
るもののほか、特定のビットパターンのサーチ、メモリ
のブロック転送、構造体の代入、メモリ領域のクリアな
どの応用がある。ストリング命令は任意長ビットフィー
ルド命令と同じく不定長のデータを扱うため、実行中の
割り込み受付、実行再開の機能が不可欠である。一方、
ストリング命令自体がコンパイラの生成するコードとな
ることはほとんどなく、アセンブラで書かれたサブルー
チンとして提供されることが多い。そのため、対称性や
アドレッシングモードについての制限はあまり問題にな
らない。したがって、本発明装置のストリング命令で
は、オペランドや実行途中の状態保持のために固定番号
のレジスタ(R0−R4)を使うようになっている。主
なレジスタの使い方は次のようになる。 このうち、ストリングの長さを表わすR2はエレメント
数であって、バイト数ではない。R2は符号なしの数と
して扱われ、R2=0の場合はエレメント数による命令
終了は行なわないという意味に解釈される。つまり、エ
レメント数による終了を避けたい場合には、R2=0と
して命令を実行すれば良いことになる。インプリメント
上は、ストリング命令の実行パターンは次のようになる
のが一般的である。 ただし、R2=0とした場合に、エレメント数をH’1
00000000と考えるか、無限大(エレメント数の
チェックを行なわない)と考えるかはインプリメントに
依存する。つまり、H’100000000回のエレメ
ント操作を行なっても命令を終了しなかった場合に、そ
の後の動作はインプリメント依存になるものとする。た
だし、エレメント数以外の要因により命令を終了した場
合(R2=0の場合は普通こうなる)には、命令終了後
のR2の値(付録11参照)が正しくセットされていな
ければならない。実際には、SSCH/RでR5=0を
指定したような特殊な場合を除いて、H’100000
000回のエレメント操作を行なう間にアドレス変換例
外(ATRE)やバスアクセス例外(BAE)を起こ
し、命令中断となるのが普通である。ストリング命令は
いろいろな要因で終了するため、それらを区別するため
にフラッグを用いる。それぞれのフラッグの意味は、次
のようになっている。 これ以外に終了要因のないSCMP,SSCHでは、V
_flagとF_flagの変化が相補的となる。SC
MPの場合には、これ以外に比較データの不一致によっ
て命令を終了する場合がある。 〔ニモニック〕 SMOV 〔命令の機能〕 copy string ストリングのコピー 〔命令オプション〕 〔命令ビットパターンとアセンブラ表記〕図182に示
す。 〔フラッグ変化〕図183に示す。 〔解説〕ストリングの転送を行なう。減少方向の操作を
するストリング命令SMOV/Bでは、最初にR0,R
1で指定するアドレスが、操作対象となるストリングの
占めるアドレスの最大アドレス+1を指し、R0,R1
をプリデクリメントしながら操作を進める。SMOVで
srcとdestがオーバーラップしていた時に、/
F,/Bのうち正しくない方のオプションを指定した場
合の動作は、BVCPY,BVMAPと同じように保証
しないものとする。つまり、インプリメントや命令実行
中断の有無によって異なる場合がある。これは、高機能
命令の特徴を生かしてパイプライン的なメモリアクセス
をした場合に、メモリアクセスの順番が変わることがあ
り、必ずしも前エレメントの書き込みが終わってから次
エレメントの読み出しを行なうとは限らないからであ
る。なお、逆方向の処理オプション/Bは、この命令S
MOV/Bに限り〈〈L2〉〉ではなく、〈〈L1〉〉
となっている。任意長ビットフィールド命令やストリン
グ命令などの高機能命令の詳細仕様や、命令終了後のレ
ジスタ値については、付録11を参照のこと。
【0187】〔プログラム例外〕 〔ニモニック〕 SCMP 〔命令の機能〕 compare string ストリングの比較 〔命令オプション〕 〔命令ビットパターンとアセンブラ表記〕図184に示
す。 〔フラッグ変化〕図185に示す。 〔解説〕ストリングsrc1,src2,の比較を行な
う。2つのストリングが一致している間は比較を続け、
一致しない文字が見付かれば比較を終了する。SCMP
命令では、CMP命令と同様に、src2−src1の
結果をもとにしてフラッグの設定を行なう。例えばL_
flagは、src1に対してsrc2の方がより小さ
いということを示す。src1−src2の結果をもと
にしてフラッグの設定を行なうのではない。終了条件を
持つSCMP命令の応用としては、テキストを一行単位
で比較する(R3に改行の文字コードをセットしてSC
MP/EQを実行)、数字が続く間だけ比較する、全角
文字が続く間だけ比較する、といったものがある。SC
MPでは、命令を終了させる要因が次の3つ存在し、フ
ラッグ変化によってそれらを見分けることができる。 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_flag=
0となる。なお、SCMPでは符号なしデータ、符号付
きデータの両方を扱うため、L_flagにエレメント
を符号付きデータと考えた時の比較結果が入り、X_f
lagにエレメントを符号なしデータと考えた時の比較
結果が入るようになっている。BTRONの文字コード
は符号なしで扱う必要があるし、一般の整数を扱うので
あれば、符号付きのデータを扱う必要もある。SCMP
のフラッグ変化をまとめると図186のようになる。○
は終了要因が満たされたことを示し、×は終了要因が満
たされないことを示す。 /Bオプションは〈〈L2〉〉であるが本発明装置では
サポートする。
【0188】〔プログラム例外〕 〔ニモニック〕 SSCH 〔命令の機能〕 find a character in a str
ing ストリングのサーチ 〔命令オプション〕 〔命令ビットパターンとアセンブラ表記〕図187に示
す。 〔フラッグ変化〕図188に示す。 〔解説〕ストリングをサーチし、条件に合うエレメント
を見つけ出す。’/R’オプションの場合には、R5の
正負にかかわらず、常にエレメントの比較後にR0が更
新(ポストインクリメントまたはポストデクリメント)
される。SSCH/RのR5のサイズはR0のポインタ
サイズと等しくなる。つまり、本発明装置32では32
ビット固定であり、本発明装置64ではPビットまたは
モードによって指定される。SS(R3,R4,エレメ
ントサイズ)とは独立である。
【0189】〔プログラム例外〕 〔ニモニック〕 SSTR 〔命令の機能〕 store characters 同一データを繰り返し書き込み(ストリングのフィル) 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図189に示
す。 〔フラッグ変化〕図190に示す。 〔解説〕先頭アドレス(R1)と長さ(R2)により指
定されたメモリ領域に、R3の値を繰り返し書き込む。
SSTR命令では終了条件が意味を持たないため、終了
条件の指定は行なわない。なお、ストリング命令でR2
=0の場合はエレメント数による終了を行なわないが、
SSTR命令の場合はエレメント数による終了が唯一の
終了要因であり、R2=0を指定すると無限ループを形
成することになる。これについては、ハードウエアでは
特に対処せず、プログラム側で注意してもらうことにす
る。ただ、実行中の割り込み受付や再実行は可能なの
で、この命令によって間違って無限ループに入ったとし
ても、タスクやプロセスのスケジューリング等には影響
しない。通常は複数の命令によって構成される無限ルー
プが、たまたま一命令にまとめられただけと考える。R
2=0を不正オペランド例外IOEとしないのは、他の
ストリング命令との仕様の統一や、インプリメントの負
担、高速化を考えたためである。このほか、SSCHや
QSCH命令でも、パラメータや終了条件の指定によっ
ては一つの命令で無限ループを形成する場合がある。
【0190】〔プログラム例外〕
【0191】12−11.キュー命令 本発明装置ではキューを操作するための命令として、Q
INS(エントリの挿入)、QDEL(エントリの削
除)、QSCH(エントリのサーチ)の3つの命令が用
意されている。本発明装置でサポートしているキュー
は、各キューエントリの先頭から1番目と2番目のデー
タが絶対アドレスのリンクポインタとなった、ダブルリ
ンクのキューである。キューエントリの先頭にあるデー
タが次のキューエントリへのポインタとなり、キューエ
ントリの2番目にあるデータが前のキューエントリへの
ポインタとなっている。キュー命令の仕様は、キューヘ
ッダをキュー命令のオペランドとして直接指定できるよ
うに、以下のような方針で決められている。 1.QDELでは、指定したエントリではなく直後のエ
ントリが削除される。QUEUE HEADをオペラン
ドとして指定した場合には、先頭のエントリが削除され
ることになる。QSCH/Bで見付けたエントリを削除
する場合や、キューの最後のエントリを削除する場合に
は間接参照が必要になるが、QSCH/Fで見付けたエ
ントリを削除する場合やキューの先頭のエントリを削除
する場合に比較すれば、頻度は少ないと考えられる。 2.QINSでは、指定したエントリの直前に新しいエ
ントリが挿入される。QUEUE HEADをオペラン
ドとして指定した場合には、キューの最後にエントリが
挿入されることになる。これについては2つの考え方が
ある。QDEL命令との対称性を考えると、QINSで
は指定したエントリ(あるいはQUEUE HEAD)
の直後にエントリを挿入する方が望ましい。これは、Q
INSで挿入したエントリをQDELで削除するため
に、同じオペランドを指定できるからである。また、キ
ューをスタック(LIFO)的な使い方にする場合に
も、このような仕様の方が良い。一方、キューをFIF
Oで使う場合には、QINSでキューの最後にエントリ
を挿入し、QDELではキューの先頭のエントリを削除
することが多い。こちらの方がキュー本来の使い方であ
るし、ITRONでもそのような例がある。したがっ
て、後者の仕様にする。 3.QSCHでは、現在のエントリではなく直後のエン
トリからサーチを始める。QUEUE HEADをオペ
ランドとして指定した場合には、キューの先頭からサー
チを始めることになる。また、サーチが成功した場合に
次のサーチを行なうには、そのままもう一度QSCHを
実行すればよい。この考え方は、他の高機能命令(スト
リング、任意長ビットフィールド操作)とは異なったも
のである。すなわち、ストリング命令では現在ポインタ
の指しているデータ自体からサーチが始まり、連続サー
チを行なう場合には別命令でポインタを更新しておく必
要がある。これはキュー命令とは異なった動きである。
しかし、キューの場合にはヘッダが別になっているとい
う事情があり、扱いが異なっているため、別の仕様にし
ても構わないと判断した。 4.空のキューをフラッグで判定する。QINSで空の
キューにデータを挿入した場合、QDELでエントリの
削除の結果キューが空になった場合には、Z_flag
をセットする。また、QDELで空のキューからエント
リを削除しようとした場合は、エラーなのでポインタの
付け変えは行なわないが、この時V_flagをセット
する。 〔ニモニック〕 QINS entry,queue 〔命令の機能〕 insert a new entry into a
queue ダブルリンクのキューへ挿入 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図191に示
す。 〔フラッグ変化〕図192に示す。 〔解説〕entryで指定される新しいキューのエント
リが、queueで示されるキューエントリの直前に挿
入される。queueで指定されるキューエントリがキ
ューヘッダであった場合には、この命令によって、キュ
ーの最後に新しいエントリが挿入されることになる。命
令実行前にキューが空であったかどうかによって、Z_
flagがセットされる。 [32ビットで処理を行なう場合のQINS命令のオペ
レーション]図193に示す。 [実行前]図194に示す。 [実行後]図195に示す。EaMqP,EaMaP2
で指定されるアドレッシングモードでは、レジスタ直接
Rn、@−SP,@SP+,#imm_dataのモー
ドは使用できない。なお、QINSでは、命令の実行の
ために直接必要ではない部分のデータ構造のチェック
(queueの前後のキューエントリのリンク関係な
ど)は特に行なわない。オペレーションに書かれている
通りの動作を行なう。
【0192】〔プログラム例外〕 〔ニモニック〕 QDEL queue,dest 〔命令の機能〕 remove an entry from a qu
eue ダブルリンクのキューエントリを削除 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図196に示
す。 〔フラッグ変化〕図197に示す。 〔解説〕queueで指定されたキューエントリの次の
エントリを削除し、削除されたエントリのアドレスをd
estにセットする。削除されたエントリのアドレスを
destにセットするのは、それ以後削除したエントリ
を操作することが多いためである。queueとしてキ
ューヘッダを指定した場合には、キューの先頭のエント
リが削除されることになる。queueで指定されたキ
ューが空のキューであった場合は、命令の実行ができな
い。この時、EITは起動せず、V_flag,Z_f
lagのセットだけを行なって命令を終了する。des
tは無変化となる。dest/EaW!Sでは、@−S
Pのモードを禁止している。これは、キューが空でV_
flagがセットされ、destの転送ができない場合
に、destに@−SPが指定されていると命令動作が
まぎらわしくなるためである。 [32ビットで処理を行なう場合のQDEL命令の オ
ペレーション]図198に示す。 [実行前]図199に示す。 [実行後]図200に示す。EaRqPで指定されるア
ドレッシングモードでは、レジスタ直接、@−SP,@
SP+,#imm_dataのモードは使用できない。
なお、QDELでは、空のキューの判定以外のチェッ
ク、命令の実行のために直接必要ではない部分のデータ
構造のチェック(queueの前後のキューエントリの
リンク関係など)は特に行なわない。オペレーションに
書かれている通りの動作を行なう。
【0193】〔プログラム例外〕 〔ニモニック〕 QSCH 〔命令の機能〕 search queue entries キューのサーチ 〔命令オプション〕 〔命令ビットパターンとアセンブラ表記〕図201に示
す。セットの必要なのは、R0,R2,R3(オプショ
ン),R4(オプション),R5,R6(オプション)
であり、結果が入るのは、R0,R1である。続けて次
のサーチを行なうことができる。 〔フラッグ変化〕図202に示す。 〔解説〕キューのエントリをサーチし、条件に合ったも
のを見付ける。逆方向のサーチ機能/B、およびマスク
の機能/MRは〈〈L2〉〉となっている。本発明装置
では逆方向のサーチ機能/Bをサポートする。マスクの
機能/MRはサポートしない。この命令はキューの長さ
に依存した処理量となるので、ストリング命令と同じよ
うに実行中の中断に対する考慮が必要である。したがっ
て、オペランドと途中の実行状態は固定番号のレジスタ
に置く。サーチ条件としては、マスク(特定ビットの抽
出)と比較が用意されている。マスクはフラッグのサー
チに用い、比較は優先度の処理などに用いる。比較条件
の指定は、ストリング命令の終了条件の指定と同じであ
る。キューの終りを判定するために、キューのエントリ
アドレスとキューの終了アドレスR2との比較を行な
い、一致した場合には命令を終了する。R2との比較に
よって命令を終了した場合、すなわち、それまでにサー
チ条件を満たすものがなく、サーチ失敗であった場合に
は、V_flagをセットして命令を終了する。EIT
は起動しない。QSCH命令の条件指定によっては、一
つの命令の中で無限ループに入ることがある。これにつ
いては、ハードウエアでは特に対処せず、プログラム側
で注意してもらうことにする。ただ、実行中の割り込み
受付や再実行は可能なので、ユーザプログラムの中で間
違って無限ループに入ったとしても、タスクやプロセス
のスケジューリング等には影響しない。通常は複数の命
令によって構成される無限ループが、たまたま一命令に
まとめられただけと考える。サーチが終了した時に、R
0は指定した条件に合うエントリを、R1はその直前の
エントリを指している。R1は、シングルリンクのキュ
ーの時にエントリを削除するために使用することができ
る。また、QDELでは指定したエントリの次のエント
リが削除されるので、QSCH/Fで見付けたエントリ
自体を削除する場合には、QSCH実行後、@R0では
なく@R1をパラメータとしてQDELを実行すればよ
い。一般に、R0,R2にQUEUE HEADのアド
レスをセットしてQSCH命令を実行することにより、
キューが空の場合を含めてキュー全体のサーチを行なう
ことができる。QSCHは、シングルリンクキューとダ
ブルリンクキューで共用することを狙った命令である。 [QSCHのオペレーション]図203に示す。このう
ち、check_interruptは、外部から割り
込みがかかっているかどうかを調べ、割り込みがかかっ
ていれば、QSCHの実行を中断して割り込み処理を始
めるというものである。割り込み処理終了後にQSCH
命令の残りの部分を実行する。 [実行前]図204に示す。 [実行後]図205に示す。
【0194】〔プログラム例外〕
【0195】12−12.ジャンプ命令 〔ニモニック〕 BRA newpc 〔命令の機能〕 branch always ジャンプ(PC相対) 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図206に示
す。 〔フラッグ変化〕図207に示す。 〔解説〕BRA命令は、PC相対のみのアドレッシング
をサポートするジャンプ命令である。ディスプレースメ
ントのサイズとして、BRA:Dでは8ビットが、BR
A:Gでは8ビット、16ビット、32ビット、64ビ
ットが利用できる。本発明装置の命令は必ず偶数アドレ
スから始まるので、短縮形のBRA:D命令では、#d
8を2倍して使用する。すなわち、 となる。BRA:GでSS=00を指定した場合には、
#dSを2倍せずにそのまま使用する。BRA:Gでn
ewpcが16ビットの場合、JMP@(#dS:1
6,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にはしない。本発明装置ではこの命令に対
し、動的ブランチ予測処理をする。
【0196】〔プログラム例外〕 ・奇数アドレスジャンプ例外 ・奇数アドレスにジャンプしたとき 〔ニモニック〕 Bcc newpc 〔命令の機能〕 branch conditionally 条件ジャンプ(PC相対) 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図208に示
す。 〔フラッグ変化〕図209に示す。 〔解説〕Bcc命令は、PC相対のみのアドレッシング
をサポートする条件ジャンプ命令である。ディスプレー
スメントのサイズとして、Bcc:Dでは8ビットが、
Bcc:Gでは8ビット、16ビット、32ビット、6
4ビットが利用できる。本発明装置の命令は必ず偶数ア
ドレスから始まるので、Bcc:D命令では、#d8を
2倍して使用する。すなわち、 となる。Bcc:GでSS=00を指定した場合には、
#dSを2倍せずにそのまま使用する。Bccの条件指
定部分(’cc’部分)の詳細とニモニック、cccc
のビットパターンについては、付録を参照のこと。Bc
cで未定義の条件を指定した場合には、予約命令例外
(RIE)となる。Bcc:Gで条件不一致のためジャ
ンプしなかった時は、本発明装置では奇数アドレスジャ
ンプ例外(OAJE)を発生する場合と、発生しない場
合がある。本発明装置ではこの命令に対し、動的ブラン
チ予測処理をする。
【0197】〔プログラム例外〕 ・奇数アドレスジャンプ例外 ・奇数アドレスにジャンプしたとき 〔ニモニック〕 BSR newpc 〔命令の機能〕 jump to subroutine サブルーチンジャンプ(PC相対) 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図210に示
す。 〔フラッグ変化〕図211に示す。 〔解説〕BSR命令は、PC相対のみのアドレッシング
をサポートするサブルーチンジャンプ命令である。PC
の値がスタックに退避される。ディスプレースメントの
サイズとして、BSR:Dでは8ビットが、BSR:G
では8ビット、16ビット、32ビット、64ビットが
利用できる。本発明装置の命令は必ず偶数アドレスから
始まるので、BSR:D命令では、#d8を2倍して使
用する。すなわち、 となる。BSR:GでSS=00を指定した場合には、
#dSを2倍せずにそのまま使用する。BSR,JSR
命令でスタックに退避されるPC値としては、その次の
命令の先頭アドレスを使用する。これに対して、実効ア
ドレスの計算のためにPCを参照する場合(BSRなど
で暗黙にPCを参照する場合を含む)には、その命令
(次の命令ではない)の先頭アドレスをPC値として使
用するので、注意が必要である。BSR,JSRでは旧
のPCがスタックにセーブされるが、SPのアラインメ
ントに関しては特にチェックしない。SPが4の倍数で
ない場合にも、そのまま実行される。本発明装置ではこ
の命令に対し、動的ブランチ予測処理をする。
【0198】〔プログラム例外〕 ・奇数アドレスジャンプ例外 ・奇数アドレスにジャンプしたとき 〔ニモニック〕 JMP newpc 〔命令の機能〕 ジャンプ 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図212に示
す。 〔フラッグ変化〕図213に示す。 〔解説〕newpcの実効アドレスにジャンプする。一
般のアドレッシングモードが使用可能なジャンプ命令で
ある。case文の実行などにおいては、ジャンプテー
ブルを参照してジャンプ先アドレスを決める場合があ
る。これはJMP命令と付加モードによるインデックス
アドレッシングとを組み合せることにより実現する。
【0199】〔プログラム例外〕 ・奇数アドレスジャンプ例外 ・奇数アドレスにジャンプしたとき 〔ニモニック〕 JSR newpc 〔命令の機能〕 jump to subroutine サブルーチンジャンプ 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図214に示
す。 〔フラッグ変化〕図215に示す。 〔解説〕newpcの実効アドレスにサブルーチンジャ
ンプする。PCの値がスタックに退避される。BSR,
JSR命令でスタックに退避されるPC値としては、そ
の次の命令の先頭アドレスを使用する。これに対して、
実効アドレスの計算のためにPCを参照する場合(BS
Rなどで暗黙にPCを参照する場合を含む)には、その
命令(次の命令ではない)の先頭アドレスをPC値とし
て使用するので、注意が必要である。
【0200】〔プログラム例外〕 ・奇数アドレスジャンプ例外 ・奇数アドレスにジャンプしたとき 〔ニモニック〕 ACB step,xreg,limit,newp
c 〔命令の機能〕 add,compare and branch インデクス値を増加するループ命令 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図216に示
す。 〔フラッグ変化〕図217に示す。 〔解説〕加算、比較、条件ジャンプを一命令にした複合
命令であり、ループのプリミティブとして利用する。s
tep、xreg、limitは符号付き整数として演
算、比較される。stepは必ず正の値でないと条件ジ
ャンプの意味がないが(xregが終了値と反対の方向
に変化することになる)、stepの正負のチェックは
行なわず、オペレーションに書かれている通りの動作を
そのまま行なう。ACB命令では、ループ命令として高
速実行ができるように、step加算時のオーバーフロ
ーのチェックは行なわない。stepを加算した結果オ
ーバーフローが起こり、符号が反転した場合には、符号
反転した正しくない値がそのままlimitと比較され
る。ただし、比較のためのlimit−xregの減算
がオーバーフローしたとしても、xreg<limit
の比較は正確に行なわれる。ACB,SCBではPC相
対でジャンプを行なう。SS=00でディスプレースメ
ントが8ビットになる場合も、SS≠00の場合と同様
に、#dS8は2倍せずにそのまま使用する。SS≠0
0の場合は、#dS8のフィールドは使用せず(0にす
る)、SSで指定されたサイズ(16,32,64ビッ
ト)のデータが#dS8の直後に続く。例えば、 で、labelとACB:Q命令のアドレスの差がH’
1234であった場合は、図218に示すビットパター
ンになる。これは、固定長ビットフィールド命令の:I
フォーマットでも同じである。 [ACBのオペレーション] newpcが奇数であった場合には、ジャンプ先が奇数
アドレスになるため、奇数アドレスジャンプ例外(OA
JE)となる。本発明装置では、終了条件満足のためジ
ャンプしなかった時も、奇数アドレスジャンプ例外(O
AJE)を発生する。 [詳細仕様調整中]ACB,SCB命令でSS≠00の
時には、#dS8のフィールドは使用しない。この時、
もし#dS8のフィールドが0になっていなくても、単
に無視される。ただし、マニュアル上は、#dS8のフ
ィールドには常に0を入れるようにしておく。本発明装
置ではこの命令に対して、動的ブランチ予測処理をす
る。
【0201】〔プログラム例外〕 ・奇数アドレスジャンプ例外 ・奇数アドレスにジャンプしたとき 〔ニモニック〕 SCB step,xreg,limit,newp
c 〔命令の機能〕 subtract,compare and bran
ch インデクス値を減少するループ命令 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図219に示
す。 〔フラッグ変化〕図220に示す。 〔解説〕減算、比較、条件ジャンプを一命令にした複合
命令であり、ループのプリミティブとして利用する。s
tep、xreg、limitなどは符号付き整数とし
て比較される。stepは必ず正の値でないと条件ジャ
ンプの意味がないが、(xregが終了値と反対の方向
に変化することになる)。stepの正負のチェックは
行なわず、オペレーションに書かれている通りの動作を
そのまま行なう。SCB命令では、ループ命令として高
速実行ができるように、step減算時のオーバーフロ
ーのチェックは行なわない。stepを減算した結果オ
ーバーフローが起こり、符号が反転した場合には、符号
反転した正しくない値がそのままlimitと比較され
る。ただし、比較のためのlimit−xregの減算
がオーバーフローしたとしても、xreg<limit
の比較は正確に行なわれる。ACB,SCBではPC相
対でジャンプを行なう。SS=00でディスプレースメ
ントが8ビットになる場合も、SS≠00の場合と同様
に、#dS8は2倍せずにそのまま使用する。SS≠0
0の場合は、#dS8のフィールドは使用せず(0にす
る)、SSで指定されたサイズ(16,32,64ビッ
ト)のデータが#dS8の直後に続く。 [SCBのオペレーション] newpcが奇数であった場合には、ジャンプ先が奇数
アドレスになるため、奇数アドレスジャンプ例外(OA
JE)となる。本発明装置では、終了条件満足のためジ
ャンプしなかった時も、奇数アドレスジャンプ例外(O
AJE)を発生する。 [詳細仕様調整中]ACB,SCB命令でSS≠00の
時には、#dS8のフィールドは使用しない。この時、
もし#dS8のフィールドが0になっていなくても、単
に無視される。ただし、マニュアル上は、#dS8のフ
ィールドには常に0を入れるようにしておく。本発明装
置ではこの命令に対して、動的ブランチ予測処理をす
る。
【0202】〔プログラム例外〕 ・奇数アドレスジャンプ例外 ・奇数アドレスにジャンプしたとき 〔ニモニック〕 ENTER local,reglist 〔命令の機能〕 create new stack frame スタックフレームの形成、高級言語用サブルーチンジャ
ンプ 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図221に示
す。 〔フラッグ変化〕図222に示す。 〔解説〕高級言語用のスタックフレームを形成する。E
NTERのlocalは符号付きとして扱われ、loc
alのサイズが小さい場合には、localの値が符号
拡張される。localが負の場合は意味がないスタッ
クフレームが形成されるが、特にチェックは行なわず、
オペレーションに書かれている通りの動作を行なう。こ
の点は、ACB,SCBのstepと同じである。 高級言語用のスタックフレームの詳細は、付録を参照の
こと。退避するレジスタのビットマップ指定LnXL
は、図223のように行なう。LnXLは、EaRの拡
張部よりも後に置かれる。ENTERのreglist
でbit0,bit1(SP,FP)を指定した場合に
は、単にその指定が無視されるものとする。bit0,
bit1が”1”であっても、SP,FPは転送されな
い。これを不正オペランド例外(IOE)としないの
は、インプリメントの負担が大きく、実効速度に影響が
出るためである。ただし、チェックが行なわれていなく
ても、FP,SPのビットには必ず’0’を入れてもら
うように、マニュアル等で指導する必要がある。FP,
SPのアラインメントに関しては特にチェックしない。
FP,SPが4の倍数でない場合にも、オペレーション
に書かれた通りの実行が行なわれる。ENTER:Gの
localオペランドがメモリ上にあり、それがENT
ER命令の実行に伴って形成されるスタックフレーム領
域と重なっていた場合には、命令再実行がきわめて難し
くなる。そこで、ENTER:G,JRNG:G、およ
び対称性からEXITD:G命令では、メモリアクセス
を伴うアドレッシングモード、つまりレジスタ直接Rn
とイミディエート以外のアドレッシングモードは、すべ
て禁止している。この命令のオペランドとして動的な値
を設定したい場合には、テンポラリレジスタを一つ用意
し、レジスタ直接Rnのモードを利用するということに
なる。localとしてFP,SPを指定した場合の動
作は、インプリメント依存である。
【0203】〔プログラム例外〕 〔ニモニック〕 EXITD reglist,adjsp 〔命令の機能〕 exit and deallocate param
eters 高級言語用サブルーチンリターンとパラメータ解放 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図224に示
す。 〔フラッグ変化〕図225に示す。 〔解説〕高級言語用のスタックフレーム解放とレジスタ
の復帰を行ない、サブルーチンから戻る。その後adj
spをSPに加え、スタック上に残っていたサブルーチ
ンのパラメータを捨てる。EXITDのadjspは符
号付きとして扱われ、adjspのサイズが小さい場合
には、adjspの値が符号拡張される。adjspが
負の場合は意味のない動作をするが、特にチェックは行
なわず、オペレーションに書かれている通りに実行を行
なう。この点は、ACB,SCBのstepと同じであ
る。 高級言語用のスタックフレームの詳細は、付録を参照の
こと。復帰するレジスタのビットマップ指定LxXL
は、図226のように行なう。LxXLは、EaRの拡
張部よりも後に置かれる。EXITDのreglist
でbit14,bit15(SP,FP)を指定した場
合には、単にその指定が無視されるものとする。bit
14,bit15が”1”であっても、SP,FPは転
送されない。これを不正オペランド例外(IOE)とし
ないのは、インプリメントの負担が大きく、実効速度に
影響が出るためである。ただし、チェックが行なわれて
いなくても、FP,SPのビットには必ず’0’を入れ
てもらうように、マニュアル等で指導する必要がある。
FP,SPのアラインメントに関しては特にチェックし
ない。FP,SPが4の倍数でない場合にも、オペレー
ションに書かれた通りの実行が行なわれる。EXITD
で、スタックから復帰されたリターンアドレスが奇数で
あった場合には、ジャンプ先が奇数アドレスになるた
め、奇数アドレスジャンプ例外(OAJE)となる。E
XITDのオペランドadjsp/EaR!Mでは、メ
モリアクセスを伴うアドレッシングモード、つまりレジ
スタ直接Rnとイミディエート以外のアドレッシングモ
ードは、すべて禁止している。この命令のオペランドと
して動的な値を設定したい場合には、テンポラリレジス
タを一つ用意し、レジスタ直接Rnのモードを利用する
ということになる。adjspにレジスタ直接Rnのモ
ードを利用し、reglistに同じレジスタRnが含
まれていた場合には、adJspとして、レジスタ復帰
前の値を使用する。つまり、スタック中に退避されてい
たEXITD命令実行後のレジスタ値ではなく、EXI
TD命令実行前のレジスタ値がadJspとなる。ad
jspとしてFP,SPを指定した場合の動作は、イン
プリメント依存である。
【0204】〔プログラム例外〕 〔ニモニック〕 RTS 〔命令の機能〕 return from subroutine サブルーチンからのリターン 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図227に示
す。 〔フラッグ変化〕図228に示す。 〔解説〕サブルーチンからのリターンを行なう。 RTSで、スタックから復帰されたリターンアドレスが
奇数であった場合には、ジャンプ先が奇数アドレスにな
るため、奇数アドレスジャンプ例外(OAJE)とな
る。
【0205】〔プログラム例外〕 ・奇数アドレスジャンプ例外 ・リターンアドレスが奇数であったとき 〔ニモニック〕 NOP 〔命令の機能〕 no operation ノーオペレーション 〔命令オブション〕なし 〔命令ビットパターンとアセンブラ表記〕図229に示
す。 〔フラッグ変化〕図230に示す。 〔解説〕何もしない。
【0206】〔プログラム例外〕 〔ニモニック〕 PIB 〔命令の機能〕 purge instruction buffer 命令キャッシュやパイプラインの整合性をとる 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図231に示
す。 〔フラッグ変化〕図232に示す。 〔解説〕命令パイプライン、命令キュー、命令キャッシ
ュなど、命令実行の高速化のためのバッファ類をすべて
パージし、メモリ上に置かれた命令列とプロセッサの内
部状態との整合性を保証する。この命令は、これから実
行すべき命令コードが、以前(リセット時あるいは前回
のPIB命令実行時)から変更されている可能性がある
ということを、プロセッサに通知するために使用する。
本発明装置では、パイプラインや命令キュー、命令キャ
ッシュの制御を簡単化するため、プログラムにより命令
コードを書き換えることは許されていない。つまり、自
分自信で書き換えを行なった命令コードをそのまま実行
しようとしても、動作が保証されない。ところが、OS
の行なう処理をマクロ的に見ると、プログラムをロード
してからそれを実行するという流れがある。つまり、広
い範囲で見るとOSのプログラムにより命令コードを書
き換えていることになる。また、特殊な用途では、プロ
グラムによって生成した命令列を実行することもある。
この命令の目的は、そのような場合でも正しい命令の実
行ができるようにすることである。すなわち、書き換え
のあった命令コードに入る前にこの命令を実行しておけ
ば、新しい命令コードが正しく実行されることが保証さ
れる。インプリメント上は、この命令によってパイプラ
イン、命令キュー、命令キャッシュのパージを行なうこ
とになる。ただし、パイプラインやキャッシュのメカニ
ズムがメモリの書き換えに対するバスモニタリング機構
を持っており、メモリとの整合性がハードウエアで常に
保証されていれば、必ずしもPIB命令でパージを行な
う必要はない。この場合、PIB命令はNOP命令とし
て実行される。いずれにしても、この命令を実行した後
に、パイプラインや命令キャッシュとメモリとの整合性
が保証されていれば良いのである。MMUを用いて多重
論理空間を実現している場合には、PIB命令を実行し
た論理空間に対してのみ書き換えた命令コードの実行が
保証される。例えば、 といった命令列を実行した場合、context_Bで
は変更された命令コードを実行しても動作が保証される
が、次にLDCTX context_Aを実行した後
でも、context_Aの変更された命令コードの実
行に対しては動作が保証されない。context_A
の命令実行を保証するためには、context_Aの
コンテキストにおいて、もう一度PIB命令を実行する
必要がある。これは、命令キャッシュにLSIDが導入
された場合に、PIB命令では、LSIDの一致する命
令キャッシュエントリをパージするだけで済ませたいか
らである。PIB命令以外の命令では、いかなるジャン
プ命令やOS関連命令(LDCTX,REIT,RRN
G,TRAP,EIT起動など)を実行した後でも、命
令コード書き換え部分のプログラムの動作は保証されな
い。これは、命令キャッシュのパージをできるだけ減ら
すためである。したがって、OSがロードしたプログラ
ムを最初に実行する時には、新しいコンテキストに入っ
てから(例えばLDCTX〜REITの間で)、必ずP
IBを実行する必要がある。この命令のニモニックPI
B(Purge Instruction Buffe
r)の’Buffer’は、キャッシュやパイプライン
などを総括的に含めた意味で用いることばであり、PT
LBの’B’のBufferに同じ用例がある。PIB
というニモニックも、PTLBとの連想から作られたも
のである。この命令は特権命令ではない。ユーザプログ
ラムからも使用できる。 [命令コードの整合性について]PIB命令の動作を正
確に説明するため、「命令コードの整合性」という状態
を以下のように定義する。「命令コードの整合性」と
は、各論理空間の各論理アドレスについて、別々に定義
される状態である。例えば、論理空間AではH’000
00000〜H’000fffffについて「命令コー
ドの整合性」が保証され、論理空間BではH’0001
0000〜H’0003ffffについて「命令コード
の整合性」が保証されている、といった使い方をする。
「命令コードの整合性」が保証されている領域の命令を
実行した場合にのみ、正しい命令動作をする(exec
uteのアクセス権チェックを含む)ことが保証され
る。一般には、「命令コードの整合性」の保証されてい
る領域が命令コード領域であり、データ領域では「命令
コードの整合性」が保証されていない。 ・「命令コードの整合性」が保証されるようになるの
は、次の場合である。 −リセット時 物理空間(=論理空間)の全領域で「命令コードの整合
性」が得られる。 −PIB命令実行時 PIB命令を実行した論理空間の全領域で「命令コード
の整合性」が得られる。AT=00の場合は、リセット
時と同様、物理空間(=論理空間)の全領域で「命令コ
ードの整合性」が得られる。 ・「命令コードの整合性」が失われるようになるのは、
次の場合である。 −メモリ書き換え時 メモリ内容を書き換えた場合、書き換えた領域の「命令
コードの整合性」は失われる。これは、論理アドレスに
よるメモリアクセスの場合も、物理アドレスによるメモ
リアクセスの場合(AT=00やLDP命令など)も同
様である。 −ATE更新時 ATEを更新した場合、そのATEによりアドレス変換
される領域の「命令コードの整合性」は失われる。した
がって、例えば、LDATEでATE中の保護ビットを
変更した場合にも、その後PIB命令を実行しなければ
保護情報のチェックが正しく行なわれないことになる。
(これは、命令キャッシュと保護情報のチェックに関す
るインプリメントを軽くするために有効であろう) 以上の点に該当しない一般の命令実行ではBRA,JM
P,JRNG,RRNG,TRAP,REIT,LDC
TX,EIT起動などを含めて、「命令コード整合性の
状態」は変化しない。
【0207】12−13.マルチプロセッサ用の命令 〔ニモニック〕 BSETI offset,base 〔命令の機能〕
【0208】
【数13】
【0209】ビットのセット(バスをロック) 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図233に示
す。 〔フラッグ変化〕図234に示す。 〔解説〕指定されたビットの値を反転したものをZ_f
lagにコピーし、その後そのビットを1にセットす
る。この2つの操作はバスをロックして行なわれ、不可
分の操作になる。したがって、マルチプロセッサ間の同
期をとるためにこの命令が使用できる。ShMfqi,
EaMfiで指定されるアドレッシングモードでは、レ
ジスタ直接モードRn、@−SP,@SP+,#imm
_dataのモードは使用できない。アセンブラ表記で
は、メモリアクセスのサイズをbaseのサイズとして
指定する。BSETI:Qでは、メモリアクセスのサイ
ズは8ビットに固定されており、サイズは’B’のみを
書くことができる。また、BSETI:G,BSET
I:Eでのアクセスサイズ(baseのサイズ).
H,.Wの指定は、BSET,BCLRと同じく〈〈L
2〉〉とする。〈〈L2〉〉仕様でアクセスサイズ.
H,.Wを指定したのに、baseがアラインメントの
とれていないアドレスであった場合には、メモリアクセ
スの範囲がインプリメント依存となる。これは、ビット
操作命令と同様である。この時、インプリメントによっ
て、アラインメントのとれていないワードやハーフワー
ドのアクセスが行なわれる場合には、バスをロックした
まま複数のバスサイクルを実行する。これはCSI命令
と同様である。本発明装置では〈〈L2〉〉となってい
るハーフワード、ワード単位のアクセスのインプリメン
トを行なう。またbaseとしてアラインメントのとれ
ていないアドレスを指定した場合にも、アラインメント
のとれたハーフワード、ワード単位でアクセスを行な
う。
【0210】〔プログラム例外〕 〔ニモニック〕 BCLRI offset,base 〔命令の機能〕
【0211】
【数14】
【0212】ビットのクリア(バスをロック) 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図235に示
す。 〔フラッグ変化〕図236に示す。 〔解説〕指定されたビットの値を反転したものをZ_f
lagにコピーし、その後そのビットを0にセットす
る。この2つの操作はバスをロックして行なわれ、不可
分の操作になる。したがって、マルチプロセッサ間の同
期をとるためにこの命令が使用できる。EaMfiで指
定されるアドレッシングモードでは、レジスタ直接モー
ドRn、@−SP,@SP+,#imm_dataのモ
ードは使用できない。アセンブラ表記では、メモリアク
セスのサイズをbaseのサイズとして指定する。BC
LRI:G,BCLRI:Eでのアクセスサイズ(ba
seのサイズ).H,.Wの指定は、BSET,BCL
Rと同じく〈〈L2〉〉とする。〈〈L2〉〉仕様でア
クセスサイズ.H,.Wを指定したのに、baseがア
ラインメントのとれていないアドレスであった場合に
は、メモリアクセスの範囲がインプリメント依存とな
る。これは、ビット操作命令と同様である。この時、イ
ンプリメントによって、アラインメントのとれていない
ワードやハーフワードのアクセスが行なわれる場合に
は、バスをロックしたまま複数のバスサイクルを実行す
る。これはCSI命令と同様である。本発明装置では
〈〈L2〉〉となっているハーフワード、ワード単位の
アクセスのインプリメントを行なう。またbaseとし
てアラインメントのとれていないアドレスを指定した場
合にも、アラインメントのとれたハーフワード、ワード
単位でアクセスを行なう。
【0213】〔プログラム例外〕 〔ニモニック〕 CSI comp,update,dest 〔命令の機能〕 compare and store(interlo
cked) 比較とストア(バスをロック) 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図237に示
す。 〔フラッグ変化〕図238に示す。 〔解説〕destの値が以前の値(compにより指
定)と同じであれば、内容を更新する命令である。この
命令は、簡単な構造のデータをマルチプロセッサから更
新していく場合に利用できる。CSI命令を実行した結
果、destの値が以前の値と異なっていることがわか
った場合、それは他のプロセッサがデータ内容を書き換
えたことを意味している。したがって、CSI命令によ
ってdestの値の食い違いを発見したプロセッサは、
新しいdestの値をもとにして、そのデータ内容の更
新をやり直さなければならない。このような方法をとる
ことにより、マルチプロセッサの下でデータの一貫性を
保つことができる。[CSIのオペレーション] ビットパターン上の制約から、CSIでは、比較が成功
しなくてもupdateの読みだしが行なわれる。ま
た、CSI命令でのdestのアクセス権は、常にre
ad,writeとも必要であるものとする。すなわち
CSI命令で比較が失敗し、destに対して書き込み
が起らない場合でも、destに対してwriteアク
セス権がないとアドレス変換例外(ATRE)になる。
RMC,EaMiRのサイズはRRで指定される。Ea
MiRで指定されるアドレッシングモードでは、@−S
P,@SP+,Rn,#imm_dataのモードは使
用できない。CSI命令で、サイズ.H,.Wを指定
し、アラインメントの取れていないアドレスをオペラン
ドとした場合には、バスをロックしたまま複数のバスサ
イクルを実行する。この場合、read,writeの
それぞれが2回ずつのメモリアクセスに分かれるので、
命令全体では、バスをロックしながらread,rea
d,write,writeの4回のメモリアクセスを
行なうことになる。なお、CSI以外の一般命令で、ア
ラインメントの取れていないアドレスに対してメモリア
クセスを行なった場合には、バスはロックされない。し
たがって、例えば、 とした場合に、プロセッサAから を実行し、プロセッサBから を実行すると、メモリ書き込みのタイミングによって
は、 となって、プロセッサAのMOV命令が先に実行された
場合ともプロセッサBのMOV命令が先に実行された場
合とも異なる結果になる可能性がある。マルチプロセッ
サ間の共有変数に対しては、通常データの書き込みだけ
ではなくデータ更新(read−modify−wri
te)を行なうのが普通なので、必然的にCSI命令を
使うことになり、以上のような問題は発生しない。しか
し、マルチプロセッサからCSI以外の命令でアライン
メントのとれていない変数をアクセスする場合には、以
上のような問題が生じることがあるので、注意しておく
必要がある。
【0214】〔プログラム例外〕
【0215】12−14.制御空間、物理空間操作命令 本発明装置では、メインプロセッサの制御レジスタ群
が、コプロセッサの制御レジスタ群やチップバス上の高
速メモリなどとともに一つのアドレス空間を作ることが
できるようになっており、これを制御空間と呼ぶ。制御
空間の考え方は、現在別チップとなっているコプロセッ
サやコンテキスト退避用の高速メモリが、将来メインプ
ロセッサに内蔵された場合に、特に有効になる考え方で
ある。制御レジスタ操作命令は、制御空間に対してアク
セスを行なうための命令である。なお、LDC,STC
などの汎用的な制御空間操作命令は特権命令となってい
るため、ユーザが制御空間の一部であるPSB,PSM
を操作するためには、LDPSB,STPSB,LDP
SM,STPSM命令を使用する。本発明装置はアドレ
ス変換機構を持たない。よって、論理空間アドレスと物
理空間アドレスがつねに等しいため物理空間操作命令の
機能は論理空間を操作する他の命令に吸収されてしま
う。しかし、アドレス変換機構を持ち、論理空間と物理
空間を区別して扱う本発明装置とのソフトウエア互換性
を重視し、本発明装置では物理空間操作命令をサポート
する。 〔ニモニック〕 LDC src,dest 〔命令の機能〕 load control space or reg
ister 制御空間へのロード 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図239に示
す。 〔フラッグ変化〕図240に示す。 〔解説〕srcの値を制御空間のdestに転送する。
srcのサイズがdestより小さいときは、符号拡張
される。dest/EaW%では、レジスタ直接モード
Rnの指定、@−SPの指定はできない。この命令は特
権命令である。ring0以外から実行された場合に
は、特権命令違反例外(RIVE)となる。本発明装置
では制御空間に対する.B,.Hのアクセス機能はサポ
ートしない。制御空間としてはCPU内の制御レジスタ
のみをインプリメントする。また、UATB,SATB
を実装していないためLDCによりUATB,SATB
を変更することはできない。LDATE,STATE,
LDP,STP,LDC,STC,MOVPA命令の中
の特殊空間を参照するオペランドにおいて、付加モード
によりメモリの間接参照が起こった場合には、特殊空間
の方ではなく論理空間(LS)の方を参照する。また、
スタックポインタSPの参照があった場合には、PRN
Gではなく現在リングRNGのスタックが参照される。
特殊空間のアドレスという意味を持つのは、最終的に得
られた実効アドレスのみである。制御空間に対する.
B,.Hのアクセス機能が全くないプロセッサにおい
て、制御空間のオペランドのサイズとして.B,.Hを
指定した場合には、予約命令例外(RIE)となる。未
実装の制御レジスタ、または制御レジスタのないアドレ
スをLDCで指定した場合には、予約機能例外(RF
E)となる。〈〈LV〉〉の領域についても同様であ
る。制御空間で利用できるアドレスに何らかの制限のあ
るプロセッサの場合、それに違反した場合には予約機能
例外(RFE)とする。例えば、制御レジスタのアドレ
スを4の倍数に限るといった制限はこれに含まれる。コ
ンテキスト退避用の高速メモリを内蔵したプロセッサで
あれば、制御レジスタ部分のアドレスのみが4の倍数に
制限され、高速メモリ部分のアドレスは自由になるとい
うケースが考えられるが、この場合にも、違反すると予
約機能例外(RFE)になる。また、一部のアドレスに
ついてのみ.B,.Hの指定が可能なプロセッサにおい
て、.B,.Hのアクセスができないアドレスを指定し
た場合にも、予約命令例外(RIE)ではなく予約機能
例外(RFE)となる。これは、命令ビットパターン
(サイズ指定を含む)のみでエラーと判定できるものを
予約命令例外(RIE)とし、アドレスやオペランド値
によってエラーかどうかの状態が変化するものは予約機
能例外(RFE)とする、という考え方に基づいたもの
である。制御空間のアドレスがチップ外(コプロセッサ
のアドレスなど)になり、インプリメントの制約によっ
てその領域がアクセスできなくなっている場合にも、予
約機能例外(RFE)が発生する。LDC,STCで
は、制御空間のアドレスがコプロセッサのアドレスにな
った場合でも、コブロセッサ命令例外(CIE)は発生
しない。コプロセッサ命令例外(CIE)が発生するの
は、コプロセッサ用の命令を実行した場合に限られる。
LDCで、制御レジスタの’−’,’+’で表現される
reservedのビットに異なる値を書き込もうとし
た場合や、あるフィールドに対してreservedの
値を書き込もうとした場合には、予約機能例外(RF
E)になる。PSWのSMRNGのフィールドに’00
1’などのreservedの値を書き込んだ場合も、
これに含まれる。一方、’=’,’#’で表現されてい
るreservedのビットに異なる値を書き込んだ場
合には、単に無視される。ただし、ユーザ向けのマニュ
アルでは、’=’に対して必ず’O’を書き込んでもら
うように注意しなければならない。また、’*’で表現
されているビットには、何を書き込んでも単に無視され
る。このビットは、’=’,’#’とは異なり、今後仕
様を拡張した場合でも、使用されないことが保証された
ビットである。したがって、LDCを実行する前に、こ
のビットを’0’にマスクしておく必要はない。LDC
でCTXBBを変更した場合には、メモリ上のCTXB
Bの内容と実際のチップ内のコンテキストとの整合性が
とれなくなるが、これはプログラマの責任で処理する。
ハードウエア的には、単にCTXBBの変更のみを行な
う。CTXBBの変更とコンテキストのロードを両方行
なう場合は、LDCTXを使用すればよい。LDC命令
によってUATB,SATBが変更される時は、それに
伴ってTLBや論理キャッシュのパージ(PSTLB/
ATに相当する処理)が自動的に行なわれる。LSID
を実装したプロセッサの場合は、LSID制御レジスタ
により指定される論理空間がパージの対象となる。この
場合、LDC命令には、PSTLB命令のような/S
S,/ASのオプションは設けられていないが、これは
次のような理由によっている。PTLB,PSTLB命
令によるTLBのパージの場合は、LDC *,UAT
Bの場合とは異なり、他の論理空間のキャッシュやTL
Bもパージできるように、LSIDの機能に相当するパ
ラメータを、別のレジスタ(R1)によって指定してい
る。この場合、LSIDの制御レジスタは使用しない。
したがって、そのパラメータを使用するかどうかを区別
するために、/SS,/ASのオプションを切り換える
必要がある。ところが、LDC *,UATBの場合
は、データの矛盾をなくするために、現在使用中の空間
に対してキャッシュやTLBのパージを行なうのである
から、LSIDの制御レジスタは本来の意味で働く。つ
まり、一般のメモリアクセスと同様に、LSID制御レ
ジスタによって指定された論理空間がパージの対象とな
る。LSID未実装のプロセッサでは、全論理空間(一
つだけであるが)がパージの対象となる。
【0216】〔プログラム例外〕 ・特権命令違反例外 ・ring0以外から実行されたとき ・予約機能例外 ・未実装の制御レジスタをアクセスしたとき ・制御レジスタの特定フィールドに対してreserv
edの値を書き込もうとしたとき(=,#,*は除く) ・EaW%のアドレスのワードアラインメントがとれて
いないとき 〔ニモニック〕 STC src,dest 〔命令の機能〕 store control space or re
gister 制御空間からのストア 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図241に示
す。 〔フラッグ変化〕図242に示す。 〔解説〕制御空間にあるsrcの値をdestに転送す
る。STCでは、srcとdestのサイズが共通に指
定されるため、異種サイズ間の転送は行なわれない。こ
の命令は特権命令である。ring0以外から実行され
た場合には、特権命令違反例外(PIVE)となる。s
rc/EaR%では、レジスタ直接モードRnの指定、
イミディエート#imm_dataの指定、@SP+の
指定はできない。本発明装置では、制御空間に対する.
B,.Hのアクセス機能はサポートしない。制御空間に
ついてはCPU内の制御レジスタのみをインプリメント
する。LDATE,STATE,LDP,STP,LD
C,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’固
定の場合、以前に書き込んだ値がそのまま読み出される
場合がある。将来の拡張のため、’=’,’#’,’
*’のビットの値を利用したプログラミングは行なわな
いように、ユーザ向けのマニュアルに明記しなければな
らない。
【0217】〔プログラム例外〕 ・特権命令違反例外 ・ring0以外から実行されたとき ・予約機能例外 ・未実装の制御レジスタをアクセスしたとき ・EaR%のアドレスのワードアラインメントがとれて
いないとき 〔ニモニック〕 LDPSB src 〔命令の機能〕 load PSB PSBへのロード 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図243に示
す。 〔フラッグ変化〕図244に示す。 〔解説〕srcをPSBに転送する。ユーザのコルーチ
ンなどで、PSB,PSMの個々のビットの意味とは関
係なく退避や復帰を行なう場合を除けば、PSM,PS
Bでは、一部のフィールドのみの書き換えをしたいとい
うことが多い。そのため、LDPSB,LDPSM命令
のsrcオペランドは16ビット(EaRh)となって
おり、上位バイトがマスク(変更されるビットを0とす
る)、下位バイトが変更データを表わすという仕様にな
っている。つまり、srcを とすると、 [LDPSBのオペレーション]
【0218】
【数15】
【0219】となる。例えば、2^4の位置にあるX_
flagをセットする命令は、 となる。上位バイトで、変更されるビットの方を0、変
更されない方を1としたのは、変更される方をデフォル
トと考える方が自然だと判断したからである。8ビット
全部を変更する場合には、上位バイトをすべて0にして
単なるバイトデータを書けばよい。8ビット全部の変更
は、最初に述べたように、ユーザ側でPSB,PSMの
退避や復帰をする場合に必要である。LDPSB,LD
PSMで、PSB,PSMの未使用フィールドの値を”
1”にしようとした場合には、予約機能例外(RFE)
が発生する。
【0220】〔プログラム例外〕 ・予約命令例外 ・EaRhが@−SPのとき 〔ニモニック〕 LDPSM srC 〔命令の機能〕 load PSM PSMへのロード 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図245に示
す。 〔フラッグ変化〕図246に示す。 〔解説〕srcをPSMに転送する。ユーザのコルーチ
ンなどで、PSB,PSMの個々のビットの意味とは関
係なく退避や復帰を行なう場合を除けば、PSM,PS
Bでは、一部のフィールドのみの書き換えをしたいとい
うことが多い。そのため、LDPSB,LDPSM命令
のsrcオペランドは16ビット(EaRh)となって
おり、上位バイトがマスク(変更されるビットを0とす
る)、下位バイトが変更データを表わすという仕様にな
っている。つまり、srcを とすると、 [LDPSMのオペレーション]
【0221】
【数16】
【0222】となる。LDPSB,LDPSMで、PS
B,PSMの未使用フィールドの値を”1”にしようと
した場合には、予約機能例外(RFE)が発生する。
【0223】〔プログラム例外〕 〔ニモニック〕 STPSB dest 〔命令の機能〕 store PSB PSBからのストア 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図247に示
す。 〔フラッグ変化〕図248に示す。 〔解説〕PSBをdestに転送する。上位8ビットは
必ず0となる。destが8ビットではなく16ビット
となっており、上位8ビットが常に0を返すようになっ
ているのは、LDPSM,LDPSBでそのままPS
M,PSBの復帰ができるように配慮したためである。
【0224】〔プログラム例外〕 〔ニモニック〕 STPSM dest 〔命令の機能〕 store PSM PSMからのストア 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図249に示
す。 〔フラッグ変化〕図250に示す。 〔解説〕PSMをdestに転送する。上位8ビットは
必ず0となる。destが8ビットではなく16ビット
となっており、上位8ビットが常に0を返すようになっ
ているのは、LDPSM,LDPSBでそのままPS
M,PSBの復帰ができるように配慮したためである。
【0225】〔プログラム例外〕 〔ニモニック〕 LDP src,dest 〔命令の機能〕 load physical space 物理空間へのロード 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図251に示
す。 〔フラッグ変化〕図252に示す。 〔解説〕srcの値を物理空間のdestに転送する。
srcのサイズがdestより小さいときは、符号拡張
される。本発明装置はアドレス変換機構を持たないので
論理空間アドレスと物理空間アドレスがつねに等しく、
この命令の機能はMOV命令に吸収されてしまう。しか
し、アドレス変換機構をもち論理空間と物理空間を区別
して扱う本発明装置とのソフトウエア互換性を取るため
この命令をサポートする。この命令は特権命令である。
dest/EaW%では、レジスタ直接モードRnの指
定、@−SPの指定はできない。LDATE,STAT
E,LDP,STP,LDC,STC,MOVPA命令
の中の特殊空間を参照するオペランドにおいて、付加モ
ードによりメモリの間接参照が起こった場合には、特殊
空間の方ではなく論理空間(LS)の方を参照する。ま
た、スタックポインタSPの参照があった場合には、P
RNGではなく現在リングRNGのスタックが参照され
る。特殊空間のアドレスという意味を持つのは、最終的
に得られた実効アドレスのみである。
【0226】〔プログラム例外〕 ・特権命令違反例外 ・ring0以外から実行されたとき 〔ニモニック〕 STP src,dest 〔命令の機能〕 store physical space 物理空間からのストア 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図253に示
す。 〔フラッグ変化〕図254に示す。 〔解説〕物理空間にあるsrcの値をdestに転送す
る。STPでは、srcとdestのサイズが共通に指
定されるため、異種サイズ間の転送は行なわれない。本
発明装置はアドレス変換機構を持たないので論理空間ア
ドレスと物理空間アドレスがつねに等しく、この命令の
機能はMOV命令に吸収されてしまう。しかし、アドレ
ス変換機構を持ち論理空間と物理空間を区別して扱う本
発明装置とのソフトウエア互換性を取るためこの命令を
サポートする。この命令は特権命令である。src/E
aR%では、レジスタ直接モードRnの指定、イミディ
エート #imm_dataの指定、@SP+の指定は
できない。LDATE,STATE,LDP,STP,
LDC,STC,MOVPA命令の中の特殊空間を参照
するオペランドにおいて、付加モードによりメモリの間
接参照が起こった場合には、特殊空間の方ではなく論理
空間(LS)の方を参照する。また、スタックポインタ
SPの参照があった場合には、PRNGではなく現在リ
ングRNGのスタックが参照される。特殊空間のアドレ
スという意味を持つのは、最終的に得られた実効アドレ
スのみである。
【0227】〔プログラム例外〕 ・特権命令違反例外 ・ring0以外から実行されたとき
【0228】12−15.OS関連命令 〔ニモニック〕 JRNG vector (「本発明装置」ではサポ
ートしない) 〔命令の機能〕 jump to new ring リング間コール 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図255に示
す。 〔フラッグ変化〕図256に示す。 〔解説〕リング間の遷移とジャンプ(リング間コール)
を行なう。この命令は、現在のリングよりも内側のリン
グレベルにあるプログラムの呼び出し(システムコール
の呼び出しを含む)を行なうために使用される。外側の
リングから内側のリングを保護するため、JRNGでの
ジャンプ先は特定のアドレスに制限されている。このア
ドレスを入れたテーブルをリング間遷移テーブルJRN
GVT(JRNG Vector table)と呼
ぶ。JRNG命令では、vectorオペランドがJR
NGVTに対するインデクスとなる。JRNGVTの一
つのエントリを、JRNGVTEと呼ぶ。JRNGVT
は、vectorに対するエントリを65535個持つ
テーブルであり、そのベースの論理アドレスがJRNG
VBによって示される。vectorのサイズは16ビ
ットとなっている。JRNGVBは制御レジスタの一つ
であり、次のような構成になっている。
【0229】・JRNGVB JRNGVBは、図257に示すようにJRNG命令の
ベクトルテーブルの先頭の論理アドレスを示す。テーブ
ルのベースアドレスは、アラインメントのため、下位の
3ビットが0に固定される。Eが0の時はJRNGは実
行禁止であり、JRNGを実行するとリング遷移違反例
外(RTVE)となる。この時、JRNGVBは意味を
持たないので、OSはこのフィールドを自由に使用して
良い。’=’のビットには’0’を入れておかなければ
ならない。ただし、このビットが0でなくても単に無視
される。JRNGVTEは8バイトであり、図258の
ような構成になっている。これは、内側のリングへ入る
ためのゲートという意味合いをもったものである。 ・ARの機能は、そのvectorで示されるエントリ
のリング間コールが、最低でどのリングから発行可能で
あるかを示すものである。ARで示されるリングよりも
現在のリングの方が外側の場合には、リング間コール
(システムコール)が許可されていないものと見なさ
れ、リング遷移違反例外(RTVE)となる。ARは、
その意味から考えて、PSWのPRNGの位置に相当す
るフィールドを使う。これは、JRNGVT,EITV
Tの各エントリが、基本的にはPSW+PCのサブセッ
トの形になっているという考え方に基づいたものであ
る。 ・VXの機能は、OSとユーザプログラムとの間で32
/64ビットのモードが異なっている場合に有効であ
る。 ・JRNGVTEの未使用フィールド(’=’で示され
る)、および’VX’ビットには、’0’を入れておか
なければならない。ただし、実際には、これらのビット
が’1’であったとしても、単に無視されるだけであ
る。これを予約機能例外(RFE)としないのは、イン
プリメントの負担を考えたためである。 [詳細仕様調整中] ・また、JRNGVTEのVPCのフィールドは偶数で
なければならない。つまり、VPCのフィールドのLS
Bは’0’でなければならない。違反した場合には、J
RNG実行時に奇数アドレスジャンプ例外(OAJE)
が発生する。[詳細仕様調整中]
【0230】JRNGVBはMSB=0の時UATB、
MSB=1の時SATBを使ってアドレス変換される。
JRNGVBのアドレスを論理アドレスとしたのは、次
のような利点があるためである。 テーブルをコンテキスト毎に持つことが可能 テーブルの仮想化が可能である。すなわち、テーブル
自体をページ不在にすることができる。 EITであるTRAPAとの性格の違いが、よりはっ
きりする。 JRNGVBを論理アドレスと考えることにより、テー
ブルの仮想化が可能となる。「本発明装置」では、ベク
トルが16ビット(65536エントリ、512KBテ
ーブルサイズ)で非常に多くなっており、しかもベクト
ルの上限を指定するレジスタが設けられていない。しか
し、JRNGVBが論理アドレスとなっているため、M
MU機能との組合わせが可能であり、必ずしもテーブル
分の物理メモリを負担する必要はなくなっている。JR
NGVT部分のSTE,PTEを未使用領域にしておけ
ば、16ビット=65536エントリ分のテーブルをす
べて物理メモリで用意する必要はない。JRNGVTE
の読みだしは、論理アドレスを用いた一般のメモリアク
セスと同様に行なわれる。したがって、JRNGVTE
は、JRNGを実行したプログラムのリングのアクセス
権で読み出される。JRNGを実行したリングから、指
定したベクトルのJRNGVTEをreadする権利が
ない時は、アドレス変換例外(ATRE)のリング保護
違反エラーになる。また、指定したベクトルのJRNG
VTEが未使用領域となっていた場合には、アドレス変
換例外(ATRE)の未使用領域参照エラーとなる。使
用する側から見ると、これらのエラーはリング遷移違反
例外(RTVE)と同じように扱われる方が望ましいの
であるが、主としてインプリメントの都合により、上記
のような仕様になっている。JRNGVTEの読み出し
の際には、このほかページ不在例外(POE)、バスア
クセス例外(BAE)などの発生する可能性がある。J
RNG機能の導入により、JRNGVTのための論理空
間を必ず512KB消費することになる。また、不当な
リング間コールを防ぐためには、ユーザプログラムを実
行する前に、OSがJRNGVTの領域のSTE,PT
Eのセットを行なっておく必要がある。そこで、リング
間コール機能を使用しない場合に、こういった処理が全
く不用になるように、リング間コール機能全体をディス
エーブルにすることができるようになっている。この指
定には、JRNGVBのLSBのEビットを使う。JR
NGVBのEビットが0の場合は、リング間コール機能
は使用できなくなり、JRNGを実行した場合には無条
件にリング遷移違反例外(RTVE)となる。
【0231】結局、JRNGが成功するには次の条件を
満たさなければならない。 −−−JRNGVBのE=1。 E=0であれば、JRNGVTが用意されていないこと
を意味するのでリング遷移違反例外(RTVE)とな
る。 −−−指定したベクトルに対するJRNGVTEが、J
RNG実行前のリングからread可能。 ページ不在例外が発生した場合は、ページインの後再実
行することになる。アドレス変換例外(ATRE)の未
使用領域参照エラーが発生した場合は、そこまでテーブ
ルが用意されていないことを意味するので、そのユーザ
プログラムにエラーを返すのが普通である。readの
アクセス権がない場合は、保護の観点からJRNGの実
行を禁止していることを意味するので、やはりそのユー
ザプログラムにエラーを返すのが普通である。これはV
Aフィールドと同等の意味になるが、512ベクトル毎
の指定となる。 −−−現在リング≧VRが成立。 外側のリングには行けない。違反した場合はリング遷移
違反例外(RTVE)となる。 −−−現在リング≦ARが成立。 受け付け可能リングのチェック。違反した場合はリング
遷移違反例外(RTVE)となる。なお、ARはJRN
GVTEのARフィールドである。
【0232】[JRNGのオペレーション] JRNG命令により形成されるスタックフレームは、図
259のようになる。
【0233】ここで、旧リングのSPを新リングのスタ
ックに積んだのは、新リングから旧リングのスタックポ
インタSPやスタックをアクセスするためである。リン
グ毎のスタックは制御レジスタとしてアクセス可能であ
るが、アクセスのためには特権命令(STC)を利用し
なければならない。したがって、例えばring1から
ring3のスタックに積まれたパラメータを見たいと
いう場合には、この機能が必要である。JRNGでは、
PSSの一部とPSMのPRNGのみが更新され、PS
Bは更新されない。また、リング間コールの機能では、
EITとは異なり、スタックフォーマットは一種類しか
ないので、FORMAT(EITINF)はスタックに
積まれない。JRNG:Eの場合は、vectorがゼ
ロ拡張される。AT=00 (アドレス変換なし)の場
合は、JRNGVBは物理アドレスを表わす。JRNG
実行時に、リング遷移違反例外(RTVE)などの命令
再実行型のEITが発生した場合、JRNG固有の機能
であるリング間コール用のスタックフレームの形成は行
なわれず、EIT処理用のスタックフレームのみが形成
される。例えば、SMRNG=000の状態でJRNG
を実行し、RNG=00にジャンプしようとしたが、何
らかのエラーによりEITが発生した場合は、図260
のようなスタックフレームになる。図261ではない。
(A)のような仕様になっているのは、EIT発生後の
命令再実行のことを考えているからである。つまり、E
IT処理ハンドラに入る前に、プロセッサの状態をでき
るだけ命令実行前の状態に戻そうとしているからであ
る。EITで使用するスタックとJRNGで使用するス
タックが異なっていた場合は、EIT発生時にEITで
使用するスタックのみが変化し、JRNGで使用するス
タックのSPは変化しない。
【0234】JRNGでは、現在リングと同じリングに
ジャンプすることも可能である。この場合、JRNGで
スタックの切り換えは起こらない。SPとしてスタック
にプッシュされる値は、命令実行前のSPの値になる。
これは、JRNG命令の最初でPUSHSPを実行した
のと同じ動作である。この様子を図262に示す。JR
NGで現在リングと同じリングにジャンプする場合に、
JRNG:Gのvectorオペランドがメモリ上にあ
り、それがJRNG命令の実行に伴って形成されるスタ
ックフレーム領域と重なっていると、命令再実行がきわ
めて難しくなる。そこで、JRNG:G命令では、メモ
リアクセスを伴うアドレッシングモード、つまりレジス
タ直接Rnとイミディエート以外のアドレッシングモー
ドは、すべて禁止している。この命令のオペランドとし
て動的な値を設定したい場合には、テンポラリレジスタ
を一つ用意し、レジスタ直接Rnのモードを利用する必
要がある。リング間コールの機能はEITには含めな
い。TRAPAとJRNGは、どちらもOSのシステム
コールの呼出しを行なうことを目的にした命令である。
一般には、BTRONのようにシステムコールの数が多
く、複数のリングを利用するOSではJRNGを利用
し、ITRONのようにシステムコールの数があまり多
くなく、2リングで十分なOSではTRAPAを利用す
ることになる。TRAPAでは、ring1,ring
2に行くことはできないので、BTRONで外核をri
ng1に置く場合には、当然JRNGを使う必要があ
る。
【0235】なお、OSをユーザが拡張するような場合
には、外向きのリング間コールが必要になることがあ
り、BTRONでもそういった例がある。しかし、頻度
としては多くないこと、リング保護の趣旨とは矛盾して
いること、完全な保護を行なうためにはリターンスタッ
クを別に設ける必要があり、インプリメントの負担が大
きくなること、などの理由により、命令セットのレベル
では外向きのリング間コールをサポートしない。
【0236】〔プログラム例外〕 ・〈〈L1〉〉機能例外 ・JRNGの正しいビットパターンがデコードされたと
き 〔ニモニック〕 RRNG (「本発明装置」ではサポートしない) 〔命令の機能〕 return from previous ring リング間リターン 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図263に示
す 〔フラッグ変化〕図264に示す 〔解説〕リング間コールに対するリターンを行なう。
【0237】[RRNGのオペレーション] このほか、RRNG命令実行時にはDCEのEITが起
動される場合があり、そのチェックを行なう必要があ
る。詳しくは付録9を参照。ここで、PRNGの旧のス
タックポインタをRNGのスタックからポップして、再
びPRNGのスタックポインタとして設定しているの
は、PRNGのスタックに積まれたシステムコールのパ
ラメータのポップなどにより、OS側からユーザのスタ
ックポインタを更新することを想定したためである。R
RMGで内側のリングに入ろうとした場合には、リング
遷移違反例外(RTVE)となる。また、スタックから
ポップされたPCが奇数であった場合には、奇数アドレ
スジャンプ例外(OAJE)となる。現在のPSWのS
Mが0で、RRNG命令によりポップされるスタック中
のRNG(上記オペレーション中のtemp1<RNG
>)が0でない場合は、RRNG命令の実行によって、
PSW中のSMとRNGの組み合せがreserved
のパターンとなる。この場合には、予約機能例外(RF
E)となる。
【0238】RRNG命令で、命令再実行型の例外であ
るRTVE,RFEが発生した場合には、RRNG命令
実行後に無くなる予定であったリング間コールのスタッ
クフレームが、そのまま残る。したがって、EITとリ
ング間コールで同じスタックを使っていた場合には、そ
のスタックフレームに追加される形でEITのスタック
フレームが形成される。また、EITとリング間コール
で異なるスタックを使っていた場合には、リング間コー
ルで使用していたスタックの内容やスタックポインタは
変化しない。この点は、RRNGでDCEを起動する場
合とは異なっている。DCEの場合には、前のリング間
コールのスタックフレームをクリアしてから、DCEの
新しいスタックフレームを構成する。 〈〈RFE発生時のスタックの例−EITで同じスタッ
クを利用する場合〉〉図265に示すこれに対して、O
AJEは命令完了型のEITとなる予定である。[詳細
仕様調整中] その場合は、DCEと同じように、リング間コールのス
タックフレームをクリアしてからEITのスタックフレ
ームを生成するということになる。RRNG命令でOA
JEが発生する場合のスタックの動きは、次のようにな
る。 〈〈OAJE発生時のスタックの例−EITで同じスタ
ックを利用する場合〉〉 (RRNG実行前)図266に示す (RRNG実行後、OAJE起動後)図267に示す RRNG命令でスタック中からポップされたPSW(上
記のtemp1)のうち、PSH,RNG,XA以外の
フィールドは、無視される。ただし、プログラミング上
は、JRNG命令からRRNG命令までの間で、スタッ
ク中に退避されたPSWのPSH,RNG,XA以外の
フィールドを書き換えてはいけない。RRNG命令(3
2ビット)で同じリングに戻る場合、SPの最終値は となる。これは、PC,PSWの処理の後POP SP
を実行したのと同じ動作である。JRNGVBのEビッ
トは、RRNG命令の動作には関係しない。Eビットが
0の場合にも、RRNG命令の実行は行なわれる。
【0239】〔プログラム例外〕 ・予約命令例外 ・P=’1’のとき ・〈〈L1〉〉機能例外 ・RRNGの正しいビットパターンがデコードされたと
き 〔ニモニック〕 TRAPA vector 〔命令の機能〕 TRAP always ソフトウエア割り込み、トラップ 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図268に示
す 〔フラッグ変化〕図269に示す 〔解説〕内部割り込み(トラップ)を発生する。この命
令は、ユーザプロセスからOSを呼ぶ場合などに利用す
る。TRAPA命令ではEITが起動されるので、必ず
リング0に入ることになる。TRAP,TRAPAで
は、その他のEIT処理と同じく、PSSの一部および
PSMのPRNGのみが更新される。PSMのPRNG
以外のフィールド(PSBを含む)は更新されない。
【0240】〔プログラム例外〕 ・予約命令例外 ・P=’1’のとき ・無条件トラップ命令 〔ニモニック〕 TRAP 〔命令の機能〕 TRAP conditionally 条件によるソフトウエア割り込み、トラップ 〔命令オプション〕 /条件指定各種(cccc) 〔命令ビットパターンとアセンブラ表記〕図270に示
す 〔フラッグ変化〕図271に示す 〔解説〕指定された条件が満たされていた場合に内部割
り込み(トラップ)を発生する。TRAP命令ではEI
Tが起動されるので、必ずリング0に入ることになる。
条件の指定方法は、Bcc命令と同じである。TRA
P,TRAPAでは、その他のEIT処理と同じく、P
SSの一部およびPSMのPRNGのみが更新される。
PSMのPRNG以外のフィールド(PSBを含む)は
更新されない。TRAPで未定義の条件を指定した場合
には、予約命令例外(RIE)となる。
【0241】〔プログラム例外〕 ・条件トラップ命令 〔ニモニック〕 REIT 〔命令の機能〕 return from EIT EIT処理(割り込み、例外処理)からのリターン 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図272に示
す 〔フラッグ変化〕図273に示す 〔解説〕「本発明装置」では、例外、外部割り込み、内
部割り込みを総称してEIT(Exception,I
nterrupt,Trap)と呼ぶ。REIT命令
は、EITからのリターン、すなわち、OSからのリタ
ーンや割り込み処理からのリターンを行なうために使用
する命令である。この命令は特権命令である。
【0242】[REITのオペレーション] FORMAT/VECTORとして、サポートされない
スタックフォーマットが指定されていた場合には、予約
スタックフォーマット例外(RSFE)となる。この場
合、フォーマットが不当であったスタックフレームは、
追加情報の有無が判定できないためにそのまま残し、そ
のスタックフレームに追加される形でRSFEのスタッ
クフレームが形成される。この点は、REITでDI,
DCEを起動する場合とは異なっている。DI,DCE
の場合には、前のEITのスタックフレームをクリアし
てから、DI,DCEの新しいスタックフレームを構成
する。 〈〈RSFEの処理−RSFEで同じスタックを利用す
る場合〉〉図274に示す REIT命令で、スタックからポップされたPCが奇数
であった場合には、奇数アドレスジャンプ例外(OAJ
E)となる。また、スタックからポップされたPSWに
よって、PSW内のreserved(’−’)のビッ
ト(XAビットを含む)を’1’に書き換えようとした
場合や、SMRNGとしてreservedの値を書き
込もうとした場合には、予約機能例外(RFE)とな
る。SMビットの変化については特にチェックしない。
EITから戻るためにREIT命令を使う限り、REI
T命令の実行によってSMが1から0に変わることはな
いはずである。しかし、これは運用上の問題として対応
することにし、REIT命令ではSMが1から0になっ
たかどうかのチェックは行なわない。
【0243】〔プログラム例外〕 ・予約命令例外 ・P=’1’のとき ・特権命令違反例外 ・ring0以外から実行されたとき ・予約スタックフォーマット例外 ・EITから復帰する際に、サポートされていないスタ
ックフォーマットが指定されたとき ・奇数アドレスジャンプ例外 ・スタックからポップされたPCが奇数であったとき ・予約機能例外 ・スタツクからポップされたPSWによって、PSW内
にreservedの値を書き込もうとしたとき
【0244】〔ニモニック〕 WAIT imask 〔命令の機能〕 set IMASK and wait 停止、割り込み待ち 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図275に示
す 〔フラッグ変化〕図276に示す 〔解説〕PSWのIMASKフィールドをセットし、プ
ログラムの実行を停止する。外部割り込みまたはリセッ
トにより実行を再開する。この命令は特権命令である。
imaskは、符号なしの数として解釈される。ima
sk≧16の場合には、予約機能例外(RFE)を発生
する。外部割り込みの場合には、割り込みが起るまで確
定できない情報(SP1/SP0のスタックの選択、ベ
クトル番号)がある。したがって、WAIT命令では、
外部割り込みが発生してから情報をスタックに退避す
る。
【0245】
【表1】
【0246】〔プログラム例外〕 ・予約命令例外 ・−=’1’のとき ・特権命令違反例外 ・ring0から実行されたとき 〔ニモニック〕 LDCTX ctxaddr 〔命令の機能〕 load context from CTXB コンテキストのロード 〔命令オプション〕 /LS 論理空間からCTXBをロード /CS 制御空間からCTXBをロード 〈〈L
2〉〉 〔命令ビットパターンとアセンブラ表記〕図277に示
す 〔フラッグ変化〕図278に示す 〔解説〕ctxaddrで示される実効アドレスをCT
XBBレジスタにロードし、タスクやプロセスのコンテ
キストブロック(CTXB)の内容をプロセッサのレジ
スタにロードする。ロードの行なわれるレジスタは、M
MUの有無やCTXBFMの内容によって変化するが、
SP0〜SP3,UATB,CSWなどが含まれる。L
DCTXで転送されるレジスタの詳細については、付録
8を参照のこと。
【0247】/LSオプションを指定した場合には、c
txaddrは論理空間のアドレスを意味する。この場
合には、論理空間上にCTXBが置かれていることにな
る。また、/CSオプションを指定した場合には、ct
xaddrは制御空間のアドレスを意味する。このオプ
ションは、将来コンテキスト退避用の高速メモリをチッ
プに内蔵した場合に使用することを想定したものであ
り、現在は〈〈L2〉〉となっている。これらのオプシ
ョンは、チップやチップバスのインプリメントに合わせ
て最も高速なコンテキストスイッチを行なうため、CT
XBを置く空間に自由度を持たせるという目的で設けら
れたものである。「本発明装置」では/CSオプション
はサポートしない。「本発明装置」標準のMMUを内蔵
したプロセッサでは、LDCTX命令でUATBの変更
が行なわれる。この場合、LSIDを実装しないプロセ
ッサであれば、UATBの変更に伴ってTLBやキャッ
シュのパージ(PSTLB/ATに相当する処理)が自
動的に行なわれる。LDCTX命令では論理空間の切り
換えが行なわれるため、LDCTX/LSが意味のある
動作を行なうには、ctxaddrはSRを指している
必要がある。LDCTX/LSでctxaddrがUR
を指していた場合の動作は保証されない。「本発明装
置」のLDCTX,STCTX命令では、汎用レジスタ
R0〜R14の転送を行なっていない。これは、次のよ
うな理由による。
【0248】−汎用レジスタについては、LDM,ST
M命令で転送することが可能であり、LDM,STMな
らばレジスタの指定も可能である。実際のコンテキスト
スイッチの処理では、入れ換えを行なうレジスタ以外に
ワーキング用のレジスタが必要になることが多いので、
一部のレジスタは転送しない方がよい場合がある。した
がって、LDM,STMのような、より汎用的な命令を
使用する方が適当である。 −現在は、まだコンテキスト退避用のメモリをチップに
内蔵することが技術的に難しく、コンテキストの退避に
は外部メモリを利用せざるを得ない。その場合、LDC
TXで汎用レジスタの転送まで行なっても、汎用レジス
タの転送を別命令(LDM)としても、ほとんど速度差
は生じない。 −将来CTXBをすべてチップに内蔵して高速化しよう
という場合には、LDC TXのreservedのオ
プションやCTXBFMの機能を利用して仕様を拡張す
れば良い。また、LDCTX,STCTX命令では、P
C,PSWの転送も行なっていない。これは、次のよう
な理由による。 −一般に、コンテキストスイッチによって切り換える必
要があるのは、OSのPCやPSWではなく、ユーザプ
ログラムのPCやPSWである。ところが、ユーザプロ
グラムのPCやPSWは、普通はOS呼び出し時にスタ
ック中に退避されている。そこで、PC,PSWの退避
にSP0のスタックを使用するようにしておけば、コン
テキストスイッチでSP0を切り換えることにより、P
C,PSWも間接的に切り替わる。これを積極的に利用
し、CTXBの構造として、SP0から間接参照される
部分(スタック)にPC,PSWが置かれるようなもの
を考えれば、コンテキストスイッチ命令で、PC,PS
Wの操作(スタック〜CTXB間のコピー)をする必要
がなくなる。 −SPIを使用した外部割り込みの処理ハンドラの最後
で直接コンテキストスイッチを行なう場合には、どうし
てもSPIのスタック〜CTXB間でPC,PSWの転
送が必要になる。しかし、この場合、外部割り込みの中
ではコンテキストスイッチを遅延し、外部割り込みから
抜ける時にDCEやDIを使ってコンテキストスイッチ
を行なうようにすれば、DCEやDIでSP0を指定す
ることにより、上記のデータ構造が自然に実現できる。
この命令は特権命令である。
【0249】LDCTXによってセットされるPSWの
reservedのビット(’−’で表示される)に対
して、CTXBから’1’をロードしようとした場合に
は、予約機能例外(RFE)が発生する。また、UAT
Bなどの制御レジスタのreservedのビット(’
=’で表示される)に対して、CTXBから’1’をロ
ードしようとした場合には、単に無視される。これは、
LDCによって制御レジスタをセットしようとした場合
と同様である。〈〈L1〉〉仕様のチップでは、AT=
00 (アドレス変換なし)の場合にもUATBの転送
が行なわれる。これは、OS内のみで一時的にアドレス
変換を中止するというケースが考えられるためである。
ただし、AT=00の場合は、/LSを指定してもct
xaddrは物理アドレスとして扱われる。LDCTX
でUATBを転送しないことを指定するには、CTXB
FMを利用する。LDCTXの現在の仕様では、汎用レ
ジスタの転送を行なっていない。しかし、将来仕様が拡
張されたり、コンテキスト退避用のメモリをチップに内
蔵したりした場合には、LDCTX命令で複数の汎用レ
ジスタのロードまで行なう予定がある。その場合、ct
xaddt/EaA!Aで付加モードを許していると、
LDMと同様に、命令が途中で中断した場合の命令再実
行が難しくなる。したがって、LDCTXのctxad
dr/EaA!Aでは付加モードを禁止している。どう
しても付加モードの機能を利用したい場合には、MOV
Aを使って とすることにより、同等の機能が実現できる。
【0250】〔プログラム例外〕 ・特権命令違反例外 ・ring0以外から実行されたとき ・予約機能例外 ・PSWにreservedの値を書き込んだとき 〔ニモニック〕 STCTX 〔命令の機能〕 store context to CTXB コンテキストのストア 〔命令オプション〕 /LS 論理空間にCTXBをストア /CS 制御空間にCTXBをストア 〈〈L2〉〉 (検討中) 〔命令ビットパターンとアセンブラ表記〕図279に示
す 〔フラッグ変化〕図280に示す
【0251】〔解説〕プロセッサ中の現在のコンテキス
トの内容を、CTXBBレジスタで示される領域(CT
XB)に退避する。退避の行なわれるレジスタは、MM
Uの有無やCTXBFMの内容によって変化するが、S
P0〜SP3,UATB,CSWなどが含まれる。ST
CTXで転送されるレジスタの詳細については、付録8
を参照のこと。STCTXでは、LDCTXと同様に、
汎用レジスタやPC,PSWの転送は行なわれない。C
TXBBの指す空間は/LS,/CSのオプションで指
定する。ただし、/CSオプションは、将来コンテキス
ト退避用のメモリをチップに内蔵した場合にはじめて意
味を持つものであり、〈〈L2〉〉となっている。「本
発明装置」では、/CSオプションはサポートしない。
「本発明装置」標準のMMUを内蔵したプロセッサで
は、STCTX命令でUATB退避が行なわれる。この
場合、STCTX/LSが意味のある動作を行なうに
は、CTXBBがSRを指している必要があるが、CT
XBBがSRを指すかURを指すかのチェックは特に行
なわない。この命令は特権命令である。STCTXでC
TXBに退避される制御レジスタのreservedの
ビットのうち、’−’,’+’のビットについては、’
0’,’1’がCTXBにセットされる、また、’
=’,’#’,’*’のビットについては、CTXBに
セットされる値は不定であり、インプリメント依存であ
る。これらは、STC命令と同様である。〈〈L1〉〉
仕様のチップでは、AT=00(アドレス変換なし)の
場合にもUATBの転送が行なわれる。これは、OS内
のみで一時的にアドレス変換を中止するというケースが
考えられるためである。ただし、AT=00の場合は、
/LSを指定してもCTXBBは物理アドレスとして扱
われる。STCTXでUATBを転送しないことを指定
するには、CTXBFMを利用する。
【0252】〔プログラム例外〕 ・予約命令例外 ・XX=’00’以外のとき ・P=’1’のとき ・特権命令違反例外 ・リング0以外から実行されたとき
【0253】12−16.MMU関連命令 〔ニモニック〕 ACS chkaddr 〔命令の機能〕 test access rights アクセス権のチェック 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図281に示
す 〔フラッグ変化〕図282に示す 〔解説〕chkaddrで指定したアドレスを含むペー
ジのATEを調べ、chkaddrがPRNGからアク
セス可能かどうかをチェックする。チェックした結果に
応じてフラッグをセットする。 この命令は特権命令ではなく、ユーザが使用することも
可能である。例えばring3からPRNG=ring
3のアクセス権をチェックすることもできる。したがっ
て、ページアウトなどのOSの管理すべき情報はできる
だけ見せないようになっている。ACSの実行のために
必要なSection tableやPage tab
leがページアウトされていた場合には、通常の命令と
同じように、ページ不在例外(POE)として命令を再
実行する。このほか、ACS命令でATEを参照中に
は、アドレス変換例外(ATRE)、バスアクセス例外
(BAE)の発生する可能性がある。ACS命令でテス
トするオペランドのサイズは、バイトと考える。つま
り、EaAで示されるアドレスの1バイトが、PRNG
からアクセス可能かどうかを示す。複数バイトにまたが
る領域のチェックを行なう場合は、ソフトウエアで対処
する。
【0254】ACSでは、直前のリングからの処理要求
に対するアクセス権のチェックを行なう場合に、PRN
Gがそのまま利用できる。しかし、例えばring3か
らring2に処理を依頼し、ring2からさらにr
ing1を呼びたいという場合に、ring1でrin
g3からのアクセス権をチェックしたい場合がある。こ
の時、PRNGはring2となっているので、そのま
まACS命令を使うことはできず、PRNGをring
3に書き換えてからACSを実行する必要がある。この
ような要求に答えるために、PRNGはユーザからも操
作可能なPSMに置いている。PRNGは、ACS命令
に対するパラメータという意味を持ったフィールドであ
る。ただし、このままではring3からring0の
保護情報まで見えることになる。そこで、PRNG<R
NGの時は無条件に とすることによって、保護情報が見えるのを防ぐ。AC
Sにおいて、chkaddrが未使用領域(ページ範囲
外)であった場合には、R不可、W不可、E不可と同じ
ように、M_flag=0,Z_flag=0,L_f
lag=0アクセス権なしとして命令を正常終了するも
のとする。EITとはならない。
【0255】また、AT=00(アドレス変換なし)の
場合は、リング保護のチェックが行なわれないので、す
べてのアドレスに対してアクセス権をもっていると考え
る。実際には、バスアクセス例外(BAE)が発生する
ためにアクセスできない領域もあるわけだが、そのチェ
ックは行なわない。これは、システムバスに起因するア
クセスエラーとメモリ保護に起因するアクセスエラーは
レベルの違ったものであり、ACSでは後者のみのチェ
ックを行なうと考えるためである。したがって、AT=
00の場合、chkaddrが得られた後はいずれの例
外も発生せず、L_flag=M_flag=Z_fl
ag=1(アクセス権あり)として命令を終了するもの
とする。ACS命令は、命令エミュレーションのプログ
ラムで、リング保護レベルのチェックまできちんとエミ
ュレートしたい場合に利用できる命令である。エミュレ
ーションのプログラムは通常ring0に置かれるの
で、エミュレートされる命令とは異なったリングで実行
されるのが普通である。つまり、リング保護のレベルに
関しては、エミュレートされるプログラムとエミュレー
ションプログラムは異なった環境になっている。そこ
で、エミュレートされる命令のオペランドをアクセスす
る前に、ACS命令によって、そのオペランドがエミュ
レートされる命令と同じリング(PRNG)からアクセ
スできるかどうかをチェックしてやれば、リング保護に
関するエミュレーションまできちんと行なうことが可能
になる。ACSのchkaddrの実効アドレス計算に
おいて、スタックポインタSPの参照があった場合に
は、PRNGではなく現在リングRNGのスタックが参
照される。
【0256】〔プログラム例外〕 〔ニモニック〕 MOVPA srcaddr,dest (「本発明
装置」ではサポートしない) 〔命令の機能〕 move physical address 物理アドレスの転送 〔命令オプション〕なし 〔命令ビットパターンとアセンブラ表記〕図283に示
す 〔フラッグ変化〕第284に示す
【0257】〔解説〕srcaddrで指定したオペラ
ンドの実効アドレス(論理アドレス)を計算し、それを
物理アドレスに変換してからdestに転送する。sr
caddrで得られた実効アドレスのアドレス変換の方
法は通常の命令とは異なり、UATBレジスタではなく
R1レジスタをアドレス変換テーブルのベースアドレス
として使用する。これは、OS等から、現在プログラム
が走っている論理空間以外の空間に対する操作も行なえ
るようにするためである。この命令で、高機能命令と同
じように固定番号のレジスタを空間指定に使用したの
は、高級言語で直接使用することのない命令なので命令
の対称性があまり必要ないこと、ビット割り当てからの
制約があること、による。MOVPA命令において、s
rcaddrを得てから、それを物理アドレスに変換す
るまでの過程でページ不在例外、アドレス変換例外など
が発生した場合、そのエラーはフラッグに反映し、EI
Tは起動しない。これはsrcaddrのアドレス変換
に使用するSection TableやPage T
ableがページアウトされていた場合、また最終段の
ページ(ページテーブルではない)がページアウトの場
合、さらに変換テーブルのエントリ(ATE)のフォー
マットにエラー(予約ATEエラー)があった場合など
が含まれる。この時、destは変化せず、V_fla
gがセットされて命令を終了する。また、ページフォー
ルトがあったかどうかはF_flagで示される。エラ
ーやページフォールトがなく、命令を正常に終了した場
合には、V_flagはクリアされる。この命令は、基
本的にはアドレス演算と考えるので、その他のフラッグ
は無変化である。MOVPA命令のフラッグ変化をまと
めると、図285のようになる。なお、STATEでV
_flag=0,F_flag=1に相当する場合(次
の段のページアウト)は、MOVPAではV_flag
=1,F_flag=1のページアウトの場合に吸収さ
れているので、STATEとMOVPAとではフラッグ
変化のパターンが異なっている。srcaddr,de
stなどの実効アドレスを得るまでの過程でページフォ
ールトが生じた場合には、通常の命令と同じようにペー
ジ不在例外(POE)が起動される。この命令は特権命
令である。
【0258】dest/EaW!Sでは、@−SPのモ
ードを禁止している。これは、エラーやページアウトの
発生によってV_flagがセットされ、destの転
送ができない場合に、destに@−SPが指定されて
いると命令動作がまぎらわしくなるためである。LDA
TE,STATE,LDP,STP,LDC,STC,
MOVPA命令の中の特殊空間を参照するオペランドに
おいて、付加モードによりメモリの間接参照が起こった
場合には、特殊空間の方ではなく論理空間(LS)の方
を参照する。また、スタックポインタSPの参照があっ
た場合には、PRNGではなく現在リングRNGのスタ
ックが参照される。特殊空間のアドレスという意味を持
つのは、最終的に得られた実効アドレスのみである。M
OVPA,LDATE,STATE命令で、対象アドレ
スのMSBが1の場合(SRを示す場合)は、R1では
なくSATBを使ってアドレス変換を行なう。まとめる
と、図286のようになる。MOVPA,LDATE,
STATEでは、アドレス変換のベースレジスタを、U
ATBの代わりにR1によって指定している。この時、
UATBのreservedの部分に対応するR1のビ
ット(’=’で表現された2^4,2^5のビット)
が’1’でなくても、特にチェックは行なわず、単に無
視される。これは、インプリメントの負担を考慮したた
めである。チェックが行なわれていなくても、R1の2
^4,2^5のビットには必ず’0’を入れてもらうよ
うに、マニュアル等で指導する必要がある。srcad
drの実効アドレスを得てから、R1を使ってアドレス
変換を行ない、その物理アドレスを得るまでの動作は、
ATビットには影響されない。つまり、AT=00であ
っても、AT=01の時と同じようにsrcaddrの
アドレス変換が行なわれて物理アドレスが得られる。こ
れは、アドレス変換の前準備としてこの命令を使用する
ことを想定したためである。もちろん、srcadd
r,destの実効アドレス計算(間接参照など)やd
estへの書き込みは、AT=00の時物理アドレス対
象で行なわれる。
【0259】〔プログラム例外〕 ・〈〈L1〉〉機能例外 ・MOVPAの正しいビットパターンがデコードされた
とき 〔ニモニック〕 LDATE src,destaddr(「本発明装
置」ではサポートしない) 〔命令の機能〕 load address translation
table entry ATEのロード 〔命令オプション〕 〔命令ビットパターンとアセンブラ表記〕図287に示
す 〔フラッグ変化〕図288に示す
【0260】〔解説〕destaddrで指定したオペ
ランドの実効アドレス(論理アドレス)を計算し、それ
を物理アドレスに変換する際に使用するアドレス変換テ
ーブルのエントリ(ATE)に対して、srcで得られ
るデータの転送を行なう。destaddrに対するア
ドレス変換の方法は通常の命令とは異なり、UATBレ
ジスタではなくR1レジスタをアドレス変換テーブルの
ベースアドレス(物理アドレス)として使用する。これ
は、OS等から、現在プログラムが走っている論理空間
以外の空間に対する操作も行なえるようにするためであ
る。destaddrのMSBが1の場合(SRを示す
場合)は、R1ではなくSATBを使ってアドレス変換
を行なう。/PTオプションの場合、/STオプション
の場合とも、R1はSectionTableのベース
アドレスを指す。結果的に、/PTの場合には2段の間
接参照が、/STの場合には1段の間接参照が行なわれ
る。ATEへのセットが正常に行なわれた場合には、A
TE値の変更によって影響を受けるTLBと論理キャッ
シュのパージが自動的に行なわれる。
【0261】LSIDとは、複数のコンテキスト(プロ
セスやタスク)のTLBの混在を許す場合に、それを区
別する番号である。複数の論理空間の区別が可能なTL
Bの場合には、/SSオプションを指定することによっ
て、TLB中のLSIDとR0で示されるLSIDが一
致したTLBのみをパージすることができる。なお、現
在使用中の論理空間に対するLSIDは、LSID制御
レジスタに置かれているが、この命令の実行とは直接関
係しない。メモリ管理やTLBの構成はインプリメント
依存性の強いところなので、この命令を実装する場合に
も、必ずしも/SSオプションをインプリメントする必
要はない。また、LSIDの機能も必須のものではな
い。/SSのオプションが用意されているのは、LSI
DのあるプロセッサとLSIDのないプロセッサの互換
性を取るためである。PSTLBの項を参照のこと。こ
の命令で、高機能命令と同じように固定番号のレジスタ
を空間指定に使用したのは、高級言語で直接使用するこ
とのない命令なので命令の対称性があまり必要ないこ
と、ビット割り当てからの制約があること、による。こ
の命令では、ATE自体のエラーやページアウトなど、
いろいろな場合を見分けるため、F_flag,V_f
lagを使用する。それぞれの場合における動作は、次
のようになる。
【0262】1.destaddrのアドレス変換に使
用するSection TableやPage Tab
leのうち、操作する段より上位段のATEにフォーマ
ットエラー(予約 ATEエラー)があった場合 この場合は、操作対象となるATEまで到達できないの
で、ATEへのセットは行なわれない。V_flag=
1,F_flag=0となって命令を終了する。 2.destaddrのアドレス変換に使用するSec
tion TableやPage Tableのうち、
操作する段のATEを含むテーブル、あるいはそれより
上位段のテーブルがページアウトされていた場合 この場合も、操作対象となるATEまで到達できないの
で、ATEへのセットは行なわれない。V_flag=
1,F_flag=1となって命令を終了する。なお、
途中段のATEで、予約ATEエラーと次段のページア
ウトが同時に起こった場合には、予約ATEエラーの方
を優先し、V_flag=1,F_flag=0とす
る。 3.それ以外の場合 この場合には、srcのデータがATEにセットされ、
V_flagは0となる。LDATEによってATEに
セットしたデータのPIビットが0の場合には、それよ
り下位の段のページアウトを示すため、F_flag=
1となる。また、セットしたデータがATEとして予約
ATEエラーを起こすものであった場合には、やはりF
_flag=1となる。この二つのケースは、セットし
たATEを使ってアドレス変換を行なおうとすると例外
が発生するという点で共通している。セットしたATE
にエラーがなく、PIビットが1の場合には、F_fl
ag=0となる。LDATE命令のフラッグ変化をまと
めると図289のようになる。
【0263】この命令は、基本的にはアドレス演算と考
えるので、M_flag,Z_flagなどは変化しな
い。また、src,destaddrなどの実効アドレ
スを得るまでの過程でページフォールトが生じた場合に
は、通常の命令と同じようにページ不在例外(POE)
が起動される。この命令は特権命令である。LDATE
/STではPSTLB/STに相当する処理が、LDA
TE/PTではPSTLB/PTに相当する処理が自動
的に行なわれる。LDATE,STATE,LDP,S
TP,LDC,STC,MOVPA命令の中の特殊空間
を参照するオペランドにおいて、付加モードによりメモ
リの間接参照が起こった場合には、特殊空間の方ではな
く論理空間(LS)の方を参照する。また、スタックポ
インタSPの参照があった場合には、PRNGではなく
現在リングRNGのスタックが参照される。特殊空間の
アドレスという意味を持つのは、最終的に得られた実効
アドレスのみである。MOVPA,LDATE,STA
TEでは、アドレス変換のベースレジスタを、UATB
の代わりにR1によって指定している。この時、UAT
Bのreservedの部分に対応するR1のビッ
ト(’=’で表現された2^4,2^5のビット)が’
1’でなくても、特にチェックは行なわず、単に無視さ
れる。これは、インプリメントの負担を考慮したためで
ある。チェックが行なわれていなくても、R1の2^
4,2^5のビットには必ず’0’を入れてもらうよう
に、マニュアル等で指導する必要がある。AT=00で
LDATEを実行した場合、srcのフェッチとdes
taddrの実効アドレス計算は、他の命令と同様にア
ドレス変換なしで行なわれる。しかし、LDATEの命
令動作そのものは、ATの値に関係しない。すなわち、
AT=00であっても、得られたdestaddrの実
行アドレスは論理アドレスであると解釈され、それを物
理アドレスに変換する際に使用するATEに対して、s
rcの転送を行なう。これは、アドレス変換の前準備と
してこの命令を使用することを想定したためである。A
T=00の場合のLDATE,STATE,MOVPA
の仕様は、AT=01の場合の仕様との整合性のほか、
OSが最初にMMUの動作環境を設定するために利用で
きるように、また、ユーザプログラムがAT=01、O
SがAT=00で動く場合に矛盾なく利用できるよう
に、という意図で決められたものである。
【0264】〔プログラム例外〕 ・〈〈L1〉〉機能例外 ・LDATEの正しいビットパターンがデコードされた
とき 〔ニモニック〕 STATE srcaddr,dest 「本発明装置」ではサポートしない) 〔命令の機能〕 store address translation
table entry ATEのストア 〔命令オプション〕 /PT PTE操作 /ST STE操作 〔命令ビットパターンとアセンブラ表記〕図290に示
す 〔フラッグ変化〕図291に示す
【0265】〔解説〕srcaddrで指定したオペラ
ンドの実効アドレス(論理アドレス)を計算し、それを
物理アドレスに変換する際に使用するアドレス変換テー
ブルのエントリ(ATE)を読みだし、destに設定
する。srcaddrに対する実効アドレスのアドレス
変換の方法は通常の命令とは異なり、UATBレジスタ
ではなくR1レジスタをアドレス変換テーブルのベース
アドレス(物理アドレス)として使用する。これは、O
S等から、現在プログラムが走っている論理空間以外の
空間に対する操作も行なえるようにするためである。な
お、srcaddrのMSBが1の場合(SRを示す場
合)は、R1ではなくSATBを使ってアドレス変換を
行なう。/PTオプションの場合、/STオプションの
場合とも、R1はSectionTableのベースア
ドレスを指す。結果的に、/PTの場合には2段の間接
参照が、/STの場合には1段の間接参照が行なわれ
る。この命令で、高機能命令と同じように固定番号のレ
ジスタを空間指定に使用したのは、高級言語で直接使用
することのない命令なので命令の対称性があまり必要な
いこと、ビット割り当てからの制約があること、によ
る。この命令では、ATEの予約ATEエラーやページ
不在エラーなど、いろいろな場合を見分けるため、F_
flag,V_flagを使用する。それぞれの場合に
おける動作は、次のようになる。
【0266】1.srcaddrのアドレス変換に使用
するSection TableやPage Tabl
eのうち、操作する段より上位段のATEに予約ATE
エラーがあった場合 この場合は、操作対象となるATEまで到達できないの
で、ATEの読みだしは行なわれない。V_flag=
1,F_flag=0となって命令を終了する。 2.srcaddrのアドレス変換に使用するSect
ionTableやPage Tableのうち、操作
する段のATEを含むテーブルあるいはそれより上位段
のテーブルがページアウトされていた場合 この場合も、操作対象となるATEまで到達できないの
で、ATEの読みだしは行なわれない。V_flag=
1,F_flag=1となって命令を終了する。なお、
途中段のATEで、予約ATEエラーと次段のページア
ウトが同時に起こった場合には、予約ATEエラーの方
を優先し、V_flag=1,F_flag=0とす
る。 3.それ以外の場合 この場合には、ATEが読み出されてdestにセット
され、V_flagは0となる。STATEによって読
み出されたATEのPIビットが0の場合には、それよ
り下位の段のページアウトを示すため、F_flag=
1となる。また、読み出されたATEが予約ATEエラ
ーを起こすものであった場合には、やはりF_flag
=1となる。この二つのケースは、読み出されたATE
を使ってアドレス変換を行なおうとすると例外が発生す
るという点で共通している。読み出されたATEに予約
ATEエラーがなく、PIビットが1の場合には、F_
flag=0となる。STATE命令のフラッグ変化を
まとめると、図292のようになる。なお、フラッグ変
化の意味を考えると、STATEのF_flag.o
r.V_flagに相当するものがMOVPAのV_f
lagとなっており、STATEとMOVPAとではフ
ラッグ変化のパターンが異なっている。この命令は、基
本的にはアドレス演算と考えるので、M_flag,Z
_flagなどは変化しない。また、srcaddr,
destなどの実効アドレスを得るまでの過程でページ
フォールトが生じた場合には、通常の命令と同じように
ページ不在例外(POE)が起動される。この命令は特
権命令である。
【0267】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であっても、得られたs
rcaddrの実効アドレスは論理アドレスであると解
釈され、それを物理アドレスに変換する際に使用するA
TEをdestに転送する。これは、アドレス変換の前
準備としてこの命令を使用することを想定したためであ
る。MOVPA,LDATE,STATEでは、アドレ
ス変換のベースレジスタを、UATBの代わりにR1に
よって指定している。この時、UATBの reser
vedの部分に対応するR1のビット(’=’で表現さ
れた2^4,2^5のビット)が’1’でなくても、特
にチェックは行なわず、単に無視される。これは、イン
プリメントの負担を考慮したためである。チェックが行
なわれていなくても、R1の2^4,2^5のビットに
は必ず’0’を入れてもらうように、マニュアル等で指
導する必要がある。
【0268】〔プログラム例外〕 ・〈〈L1〉〉機能例外 ・STATEの正しいビットパターンがデコードされた
とき 〔ニモニック〕 〔命令の機能〕 〔命令オプション〕 〔命令ビットパターンとアセンブラ表記〕図293に示
す 〔フラッグ変化〕図294に示す
【0269】〔解説〕TLBのパージを行なう。TLB
のロックやイネーブルなどの細かい操作を行なうには、
制御レジスタを用いる。しかし、TLBに対するパージ
操作しか行なわない場合には、そのためだけに制御レジ
スタを追加するのはインプリメントの負担が大きいた
め、TLBのパージ命令を別に用意している。LSID
とは、複数のコンテキスト(プロセスやタスク)のTL
Bの混在を許す場合に、それを区別する番号である。/
SSオプションの際には、R0により示されたLSID
を持つ論理空間のTLBのみがパージされる。なお、現
在使用中の論理空間に対するLSIDは、LSID制御
レジスタに置かれているが、この命令の実行とは直接関
係しない。PTLB命令では、特定の論理アドレスのT
LBのみをパージする機能はなく、指定した論理空間の
すべてのTLBがパージされる。特定の論理アドレスの
TLBをパージする場合は、PSTLB命令を使う。た
だし、/SSオプションが指定された場合には、指定し
た論理空間のURのTLBのみがパージされ、SRのパ
ージは一切行なわれない。SR部分のパージを行なう場
合には、必ず/ASを使用する必要がある。この命令は
特権命令である。メモリ管理やTLBの構成はインプリ
メント依存性の強いところなので、この命令は〈〈L
2〉〉となっている。また、この命令を実装する場合に
も、必ずしもすべてのオプションをインプリメントする
必要はない。LSIDの機能も必須のものではない。P
TLBでは、AT=00の場合にも、AT=01の時と
同様にパージが実行される。これは、アドレス変換の前
準備としてPTLB命令を使用することを想定したため
である。
【0270】〔プログラム例外〕 ・予約命令例外 〔ニモニック〕 PSTLB prgaddr (「本発明装置」では
サポートしない。つまり《L2》である。) 〔命令の機能〕 purge specific TLB 特定のアドレスのTLBのパージ 〔命令オプション〕 〔命令ビットパターンとアセンブラ表記〕図295に示
す 〔フラッグ変化〕図296に示す
【0271】〔解説〕特定の論理アドレスのTLBをパ
ージする。/PTオプションを指定した場合には、対象
となる論理空間のTLBのうち、STE〜PTEのイン
デクスに相当する論理アドレス(すなわち論理アドレス
全体)がprgaddrと一致するものをパージする。
また、/STオプションを指定した場合には、対象とな
る論理空間のTLBのうち、STEのインデクスに相当
する論理アドレスがprgaddrと一致するものをパ
ージする。/ATオプションを指定した場合には、対象
となる論理空間のキャッシュのうち、論理アドレスのM
SBがprgaddrと一致するエントリをすべてパー
ジする。LSIDとは、複数のコンテキスト(プロセス
やタスク)のTLBの混在を許す場合に、それを区別す
る番号である。/SSオプションの際には、R0により
示されたLSIDを持つ論理空間のURのTLBのみが
パージされる。なお、現在使用中の論理空間に対するL
SIDは、LSID制御レジスタに置かれているが、こ
の命令の実行とは直接関係しない。この命令は特権命令
である。メモリ管理やTLBの構成はインプリメント依
存性の強いところなので、この命令は〈〈L2〉〉とな
っている。また、この命令を実装する場合にも、必ずし
もすべてのオプションをインプリメントする必要はな
い。LSIDの機能も必須のものではない。
【0272】/AS,/SSオプションは、LSIDの
有無に対する互換性を保つために設けてあるオプション
である。意味的には、PSTLBの場合に常に/SSの
みが指定できればよいが、PSTLBの場合に常に/S
S指定とすると、LSIDの有無によって互換性が失わ
れる恐れがある。例えば、最初にLSIDの機能のない
プロセッサができると、その上で動くプログラムは、R
0にLSIDのセットを行なわずにPSTLB命令を実
行するものになるだろう。同じプログラムを将来LSI
Dの機能の有るプロセッサで実行した場合、その時にR
0に残っていたゴミによって、全くでたらめのLSID
に対してPSTLBが実行されることになる。これを防
ぐためには、オプションを使って、R0をセットしてい
ない場合には/AS指定、将来R0をセットした場合は
/SS指定とすればよいわけで、PSTLBにおける/
AS指定はこのような意味を持っている。したがって、
PSTLBでは、 /ASオプションを使えば、LSIDのあるブロセッサ
でもLSIDのないプロセッサでも共通のプログラムを
書けるが、LSIDの機能は生かせないことになる。一
方、/SSオプションを使えば、LSIDの機能は生か
せるが、LSIDのないプロセッサでは未実装オプショ
ンということでエラー(予約命令例外など)になる。
【0273】PTLB,PSTLB命令で/SSオプシ
ョンが指定された場合には、指定した論理空間のURの
TLBのみがパージされ、SRのパージは一切行なわれ
ない。SR部分のパージを行なう場合には、必ず/AS
を使用する必要がある。PTLB,PSTLBで/SS
のオプションを指定した場合の動作をまとめると、以下
のようになる。 PSTLBで/STオプションの実装が難しい場合に
は、互換性のため機能を縮退してそのまま実行すること
にし、EITとはしない。具体的には、/STの代わり
に/AT相当の動作を行なうことになる。AT=00で
PSTLBを実行した場合、prgaddrの実効アド
レス計算は、他の命令と同様にアドレス変換なしで行な
われる。しかし、PSTLBの命令動作そのものは、A
Tの値に関係しない。すなわち、AT=00であって
も、得られたprgaddrの実効アドレスは論理アド
レスであると解釈され、AT=01の時と同様にパージ
が実行される。これは、アドレス変換の前準備としてP
STLB命令を使用することを想定したためである。
【0274】〔プログラム例外〕 ・予約命令例外
【0275】付録1.本発明装置命令セットレファレン
ス *:本発明装置ではサポートしない命令 (データ転送命令) (比較・テスト命令) (算術演算命令)
【0276】(論理演算命令) (シフト命令) (ビット操作命令)
【0277】(固定長ビットフィールド命令) (任意長ビットフィールド命令) (10進演算命令)
【0278】(ストリング命令) (キュー操作命令) (ジャンプ命令)
【0279】(マルチプロセッサ命令) (制御空間、物理空間操作命令)
【0280】(OS関連命令) (MMU関連命令)
【0281】(符号付き10進演算命令)
【0282】付録2.本発明装置のアセンブラ表記につ
いて
【0283】A2−1.概要 この資料は、命令ニモニック、アドレッシングモードの
ニモニック、などに関する本発明装置での規定を示した
ものである。ドキュメントの記述の意味を明確にし、本
発明装置に対する理解を深めてもらうことを目的として
いる。 A2−1−1.このドキュメントにおける記述方法 A2−1−2.ニモニック決定の方針 総称ニモニックとフォーマット別ニモニックを設け
る。総称ニモニックは各命令に対応したニモニックであ
り、短縮形、一般形などフォーマットが複数存在する命
令でも、総称ニモニックは一つである。これに対して、
フォーマット別ニモニックは、短縮形や一般形などの区
別をしたい場合のニモニックである。命令フォーマット
を表わす文字を決めておき、総称ニモニックから規則的
にフォーマット別ニモニックを作る。ユーザがアセンブ
ラのソースプログラムを書いた場合には、通常総称ニモ
ニックを使う。総称ニモニックに対する最適なフォーマ
ットの選択は、原則としてアセンブラが行なう。 データタイプ指定子に関して統一的な規則を設ける。
データタイプ関係で記述を必要とするものは、演算のた
めのデータタイプ指定、命令全体でのオペランドサイズ
指定、およびオペランド毎のサイズ指定である。これら
に関して統一的な規則を設ける。 ニモニックは、原則としてIEEE Micropr
ocessor Assembly Language
Standard(P694)を標準とする。ただ
し、これには一般的な感覚になじまないと思われるとこ
ろ、本発明装置のアーキテクチャに合わないところなど
があるので、あくまでも個々の名称を決める際の参考と
するだけである。考え方や規則まで完全にIEEEに合
わせるわけではない。 特殊記号の利用はできるだけ避ける。ここで定義する
アセンブラでは、できるだけ特殊記号を使用しないとい
う方針にしている。それは、オペランドに数式が来た
り、アセンブラを拡張した場合に、その中で使用する記
号と競合させないためである。また、文字セットの少な
い大型機でも開発を行なうためには、あまり多くの記号
を使用するのは望ましくない。特殊記号の利用をできる
だけ避けたため、アセンブラの中では括孤を一種類しか
使用しておらず、また’;’,’&’などが未使用の特
殊記号となっている。
【0284】A2−1−3.アセンブラ命令 本発明装置用アセンブラ言語における一つの命令は、一
つのオペレーションニモニックと複数個(0個,1個を
含む)、のオペランドニモニックにより記述される。オ
ペコードニモニックとオペランドニモニックの間は一個
以上の空白文字(スペースまたはタブ)により区切ら
れ、オペランドニモニックどおしの間はコンマ’,’に
より区切られる。 A2−1−4.オペランドの順序 オペランドの順序は命令毎に定まっているが、原則は次
のようになる。 移動命令(MOV) 第一オペランドがソース、第二オペランドがデスティネ
ーションになる。すなわち、 第一オペランド==〉第二オペランド これはIEEE標準と同じである。 2項演算の2オペランド命令(SUBなど) 第一オペランドが2番目のソース、第二オペランドが1
番目のソースとデスティネーションになる。すなわち、 第二オペランド.op.第一オペランド==〉第二オペ
ランド これはIEEE標準とは異なるが、多くのプロセッサで
用いられている方法であり、なじみやすい。
【0285】A2−2.オペレーションのニモニック A2−2−1.ニモニック生成規則 IEEEでは、演算操作を示す動詞をニモニックの先頭
にもってくるという考え方であるが、本発明装置ではさ
らにその前にデータタイプ指定子を置く。演算操作その
ものに対するニモニックは、ほぼIEEEに合わせる。
本発明装置での命令のニモニックは、次のような規則で
生成する。
【0286】 〈データタイプ〉 命令の先頭で指定するのは、演算方
法に大きな影響を与えるデータタイプ、すなわち、〈演
算操作〉に対して直交関係にないデータタイプである。
このデータタイプには、ストリング、キュー、ビットフ
ィールドなどが含まれる。データサイズ(整数の8,1
6,32,64ビット、浮動小数の32,64ビットな
ど)の指定は、ここではなく〈サイズ〉で行なう。ま
た、符号付き、符号なしの指定、およびアドレス演算の
指定は、ここではなく〈バリエーション〉で行なう。 〈演算操作〉 演算そのものの指定を行なう。でき
る限りIEEEに合わせる。条件ジャンプ命令の条件の
指定は本来オプションとするべきであるが、慣例にした
がって基本部分の〈演算操作〉に含める。 〈バリエーション〉演算に対する細かい操作や属性の指
定を行なう。 〈オプション〉 命令フォーマット中の数ビットで表
現される命令オプションを示す。オプションになるの
は、ストリング命令の終了条件、キューのサーチ条件な
どである。
【0287】〈フォーマット〉 短縮形、一般形などの
フォーマットを指定する。通常は書かなくてもよく、書
かない場合は総称ニモニックになる。アセンブラのソー
スで〈フォーマット〉を書かずに総称ニモニックを使っ
た場合には、アセンブラで自動的に最適なフォーマット
を選ぶ。〈フォーマット〉を書いた場合にはフォーマッ
ト別ニモニックの記述になる。アセンブラのソースでユ
ーザが〈フォーマット〉を書いた場合には、強制的にそ
のフォーマットを使うことを示す。〈フォーマット〉に
よるフォーマット別ニモニックは、仕様書やマニュアル
の記述において、あるいは逆アセンブラなどにおいて、
あえて命令フォーマットの区別をしたい場合に用いる。 〈サイズ〉 オペランドのサイズを指定する。
〈サイズ〉を使用する命令は、主として整数を扱う命令
と浮動小数を扱う命令である。〈サイズ〉は〈データタ
イプ〉とは異なり、〈演算操作〉に対して直交関係があ
るのが特徴である。
【0288】A2−2−2.データタイプ 〈データタイプ〉を表わす文字として、次のようなもの
がある。なし 整数演算、アドレス演算、雑命令など
【0289】A2−2−3.演算操作 原則としてIEEEのニモニックに従う。使用するもの
は次の通りである。ADD,SUB,MUL,DIV,
CMP,NEG,AND,OR,XOR,NOT,L
D,ST,MOV,PUSH,POP,WAIT,NO
P 注意 ・MOV,LD,STの使い分け MOV レジスタ間、メモリ間の転送 LD メモリからレジスタへの転送 ST レジスタからメモリへの転送 LD,STは、方向性を意識する必要のある命令に使用
する。 ・シフト関係のオペレーションは、左右の指定方法が異
なるためにIEEEのニモニックをそのまま使うわけで
はないが、IEEEの原則を生かしてSHA,SHL,
ROTとする。 ・ブランチ(条件分岐)命令に関しては、IEEEに従
うと’BV’などが別の意味とぶつかること、符号付き
整数の比較と符号なし整数の比較の区別をわかりやすく
したいこと、などを考慮したため、条件指定の部分がI
EEEには従っていない。 ・JMP,JSR,RTSは、ブランチ命令とのバラン
スからIEEEには従っていない。 ・〈バリエーション〉の’X’により拡張演算を表わす
ことに統一したため、ADDX,SUBX,MULX,
DIVXについてもIEEEに従っていない。
【0290】A2−2−4.バリエーション 〈バリエーション〉は、演算に対する属性などを指定す
るものである。次のような文字を使用する。
【0291】A2−2−5.フォーマット 〈フォーマット〉は、命令フォーマットの詳細を区別し
たい場合に用いる。次のような文字を使用する。 なお、ここで示した’:Q’,’:G’...といった
フォーマット指定は、一つの命令(総称ニモニック)の
中でフォーマットの区別を行ない、フォーマット別ニモ
ニックを作ることが目的のものである。つまり、アセン
ブラ表記上のフォーマット指定である。一方、命令フォ
ーマット説明で用いたG−format,E−form
at..といったフォーマットの方は、命令全体の中で
のフォーマットの説明を行なうことが目的のものであ
る。したがって、例えば同じ’:G’であっても’MO
VA:G’であればMOVA命令の一般形なのでGA−
formatであり、’MOV:G’であればMOV命
令の一般形なのでG−formatということになる。
【0292】A2−2−6.サイズ IEEEでは64ビット整数まで考慮されていないの
で、扱うデータサイズはどうしてもIEEEと異なった
ものになる。 整数の場合 4通りのサイズが対称的にサポートされている点、オペ
ランド側でもデータタイプが指定できる点、が特徴であ
る。オペレーション側にもオペランド側にも同じものを
書くので、’.’により区切っている。〈サイズ〉とし
て、次のような文字を使用する。
【0293】A2−3.オペランドのニモニック オペランドには、汎用のアドレッシングモードまたはそ
のサブセットが利用できるもの(一般オペランドと呼
ぶ)と、命令に応じた特殊な指定をするもの(特殊オペ
ランドと呼ぶ)とがある。特殊オペランドについては、
命令毎にフォーマットを定める。特殊オペランドをとる
命令は、 などである。 一般オペランドに関しては、本発明装置において、オペ
ランド毎にデータサイズを指定できる点が特色であり、
アセンブラにおける一般オペランドの記述方法にもその
ような能力を持たせている。また、オペランドに対して
も総称ニモニックとフォーマット別ニモニックを設けて
いる。一般オペランドのニモニックは、実際のオペラン
ドの値(実効アドレス)と付加モードフォーマットの区
別、およびサイズから成る。
【0294】A2−3−1.アドレッシングモード表記
の原則 従来のプロセッサでは、アドレッシングモードの数があ
まり多くなかったため、それぞれのモードを個別に考
え、別々の記号を割り当てておけばよかった。また、表
記法と実際のアドレッシングのオペレーションがうまく
対応していない場合も見られた。例えば、あるプロセッ
サではレジスタ相対間接のアドレッシングモードをdi
sp(Rn)で表現する場合があるがこれはオペレーシ
ョンとしてはmem[disp+Rn]であり、dis
pの部分とRnの部分の扱いが対称的ではない。これだ
けで使っている場合には問題は生じないが、これを組み
合わせて複雑なモードを作っていった場合には矛盾の起
きることがある。本発明装置では付加モードといった機
能があるため、統一的、規則的なアドレッシングの表記
を行なわないと混乱を招く。そこで、本発明装置では実
際のオペレーションとその表記との関係について原則を
設け、それに基づいて、付加モードまで一貫したアドレ
ッシングモードの表記を行なうこととした。アドレッシ
ングは、基本的には加算と間接参照の繰り返しである。
したがって、この二つのオペレーションに対する表記法
が決まればよい。本発明装置の表記原則をまとめると次
のようになる。 本発明装置における’()’は、間接参照などの特別な
意味は持たない。一般の数式と同じように、結合の順序
を示すに過ぎない。したがって、@Aと@(A)は全く
同じ意味ということになる。以下で説明するシンタック
スにおいて’(..)’が入る場合であって
も、’(..)’内に一つの項しかなけれ
ば、’(..)’を省略しても構わない。
【0295】従来のプロセッサでは’(..)’によっ
て間接参照を意味する場合があり、これがある程度慣用
的な表記法となっている。しかし、このような表記法で
は以下のような点で誤解を生みやすい。 本発明装置において、間接参照を必ず’@’によって表
現しているのは、こういった理由による。イミディエー
ト、スタック操作のアドレッシングモード、インデクス
のスケーリングなどの処理はこの原則に入らないので、
原則を参考にしながらそれぞれ別に表記法を定める。
【0296】A2−3−2.付加モードの指定 ’A’の指定は、付加モードのフォーマットを使うとい
うことを特に強調したい場合に付け加える。また、’
N’の指定は、付加モードを使用しないということを特
に強調したい場合に付け加える。これらの指定は、フォ
ーマット別ニモニックに相当するものである。’:
N’,’:A’とも書かれていない場合は、そのアドレ
ッシングが付加モード以外の短いモードで実現できるか
どうかをアセンブラが判断し、実現できればそのモード
を使う。付加モードでないと実現できなければ、付加モ
ードを使う。
【0297】A2−3−3.サイズ 〈サイズ〉は、オペランドの演算サイズを示すものであ
り、オペレーションのニモニックに示されたサイズと組
みになって実際のサイズ指定を行なう。サイズ指定の文
字は、オペレーションに使われるものと同じである。オ
ペランド中の〈サイズ〉と、オペレーション中の〈サイ
ズ〉の関係は、原則として次のようになる。 ・オペレーション中に〈サイズ〉の指定があった場合に
は、その〈サイズ〉が全部のオペランドのデフォルトの
サイズとして有効になる。ただし、サイズの指定ができ
ないオペランド、イミディエートのオペランド、特殊な
意味を持つオペランドの場合はこの限りではない。 ・オペランド中に〈サイズ〉の指定があった場合には、
それがそのオペランドのサイズになる。オペレーション
中で異なるサイズが指定されていても、オペランドで指
定された〈サイズ〉の方が優先される。 ・オペランド中で〈サイズ〉の指定を行ない、それが利
用できないサイズであった場合はエラーとなる。
【0298】A2−3−4.オペランド値 以下の項では、一般オペランドに関してアドレッシング
モード別にそのアセンブラ表記を示す。〈イミディエー
ト値〉、〈絶対アドレス〉などの内容としては、数値、
変数名、数式などが書けるが、そのシンタックスは別に
定める。〈フォーマット〉は、アドレッシングモードの
フォーマット選択を明示したい場合に書く。主としてア
ドレッシングモードの拡張部のサイズを指定するために
使用する。通常は書かなくてもよく、書かない場合はア
センブラで自動的に最適なフォーマット(サイズ)を選
ぶ。〈フォーマット〉によるフォーマット別ニモニック
は、仕様書やマニュアルの記述において、あるいは逆ア
センブラなどにおいて、あえてアドレッシング部のフォ
ーマットの区別をしたい場合に用いる。
【0299】〈フォーマット〉により指定されるのは、
あくまでも命令フォーマット自体のサイズである。一
方、〈サイズ〉により指定されるのは、演算されるオペ
ランドのサイズである。イミディエートモードの場合を
除けば、両者は全く異なるものである。 この命令では、R0の内容を’addr’で示されるメ
モリに転送する。絶対アドレッシングが用いられてい
る。’:16’は’addr’を16ビットで表現する
ことを示す。したがって、’addr’の範囲は$ff
ff8000〜$00007fffとなる。一方、’.
W’は演算をWORD(32ビット)で行なうことを示
す。つまり、この命令により4バイトのデータが転送さ
れる。〈レジスタ番号〉に入るのは、汎用レジスタのニ
モニックである。 FPとR14は全く同義、SPとR15は全く同義であ
る。
【0300】A2−3−4−1.レジスタ直接 オペランド=Rn A2−3−4−2.レジスタ間接
【0301】A2−3−4−3.レジスタ相対間接 A2−3−4−4.リテラルとイミディエート リテラルの命令フォーマットを使用するということを明
示したい場合は、オペレーションのニモニック中で示
す。イミディエートの場合には、拡張部のサイズがオペ
ランドのサイズとして決まるため、〈フォーマット〉と
〈サイズ〉が同じ意味になる。アセンブラとしては、
〈フォーマット〉としても〈サイズ〉としてもその大き
さを指定することができる。
【0302】なお、イミディエートのオペランドでオペ
ランド側にサイズ指定がなく、しかも命令機能の上でサ
イズの自由度がある場合には、自動的に最小のサイズが
選択されるものとする。
【0303】また、命令によっては、サイズが一つに固
定されているわけではないが、実質的にほとんど一つの
サイズでのみ使用されるものがある。そのようなものに
ついては、特にオペランド側に〈サイズ〉がついていな
い限り、命令によって定められるデフォルトサイズを適
用する。これは、〈オペレーション〉のニモニックが全
体のオペランドにかかるという原則に対しては、例外と
なる。 A2−3−4−5.アブソリュート
【0304】A2−3−4−6.PC相対間接 A2−3−4−7.スタックポップ
【0305】A2−3−4−8.スタックプッシュ
【0306】A2−3−4−9.FP相対間接 このアドレッシングモードでは、ビットパターン中に指
定されたdisp値を4倍して実際のディスプレースメ
ントとするが、アセンブラでの表記に使う値は、4倍し
た後のものである。〈フォーマット〉を指定しない場合
には、アセンブラでの表記がレジスタ相対間接のモード
と同じになるため、アセンブラによって最適なモードが
選択される。つまり、@(disp,Rn)と書かれた
オペランドでは、RnがR14またはFPであり、かつ
dispが−32〜31の4の倍数の時にはFP相対間
接のモードが選択され、それ以外の場合にはレジスタ相
対間接のモードが選択されるわけである。
【0307】A2−3−4−10.SP相対間接 このアドレッシングモードでは、ビットパターン中に指
定されたdisp値を4倍して実際のディスプレースメ
ントとするが、アセンブラでの表記に使う値は、4倍し
た後のものである。 A2−3−5.付加モード 付加モードについても、機能面の要求を示す総称ニモニ
ックと、フォーマットやビットパターンを記号化したフ
ォーマット別ニモニックを設ける。
【0308】[総称ニモニックに関して] ・@または@(...)により間接参照を表わ
し、(...,...,...)によりアドレスの加算
を表わすという原則はそのままである。 ・表記の順序は、 を原則とする。こうすると、実効アドレス計算の流れが
左から右への単純な形になり、先の段の付加モードに必
要な情報が先の方に、後の段の付加モードに必要な情報
が後ろの方に集まる。すなわち、総称ニモニックの表記
の順序が、付加モードの機械語ビットパターンの順序と
同じになる。したがって、フォーマット別ニモニックや
実際の機械語の付加モードとの対応がよく、アセンブラ
も簡単になり、理解しやすくなる。
【0309】[フォーマット別ニモニックに関して] ・フォーマット指定用として、つぎの3つの文字を導入
することにより、機械語のビットパターンと1対1に対
応した表記ができるようにする。 なお、「その部分の処理」とは、フォーマット指定文字
がディスプレースメントやレジスタに付いている場合に
はその値の加算処理を、フォーマット指定文字が閉じ括
弧’)’についている場合は間接参照の処理を意味す
る。また、’:A’で「その部分までの処理」とあるの
は、その’:A’の部分の処理と、それより左側で’:
N’の付いた部分(前の’:A’または’:B’との間
で’:N’の付いた部分)の処理を合わせて行なうこと
を示す。 ・フォーマットをすべて指定した場合には、’:A’の
個数が付加モードの段数になる。また、通常は一回
の’:A’が一段の間接参照に対応する。ただし、複数
のインデクスレジスタを加算する場合(間接参照がなく
ても’:A’が必要)、最後の段で二重間接を行なう場
合(二段の間接参照でも一回の’:A’でよい)は例外
である。 ・フォーマットの表記のない場合には、総称ニモニック
として表記した処理を実現できるような付加モードが自
動的に選択される。また、実際の付加モードでは実現で
きないフォーマットをフォーマット別ニモニックで指定
した場合は、エラーとなる。さらに、フォーマット指定
ニモニックからフォーマット指定文字を取り去ると、そ
のまま総称ニモニックになる。このような点は、フォー
マット別ニモニックの一般的な原則と同じである。
【0310】[フォーマット一般に関して] ・複数のアドレス加算がない場合、@(...)の 括
弧は書かなくてもよい。よって、例えば 付加モードで
実現される3重間接参照の@(@(@(R1)))は@
@@R1と書いてもよい。これは、付加モード以外のア
ドレッシングにも適用される原則であり、一種のシンタ
ックスシュガーと言える。 ・インデクスのスケール値は、IEEEでは’:
B’,’:W’などサイズ指定文字を使用しているが、
将来スケール値にもっと大きな値を入れることも考えら
れるので、ここは従来通りスケール値の数字を直接書く
ようにする。また、スケーリングを指定する文字もIE
EEの’:’ではなく、’*’を使用する。これ
は、’:’をフォーマット指定の目的で別に使用してい
るためである。 これは一段の付加モードで実現可能であるにもかかわら
ず、フォーマットを指定してわざわざ三段の付加モード
にしている例である。付加モードのシンタックスを以下
にまとめておく。ただし、括弧を省略する略記法、およ
び各部分を区切るコンマ’,’についてのシンタックス
は、ここには含めていない。
【0311】 これは途中にある一段の付加モードを表わす。
【0312】 これはベースモード(レジスタ相対付加モード、PC相
対付加モード、絶対付加モードの区別)を表わす。 ’*’は、アスタリスク’*’を文字として使うことを
示す。「繰り返し」を表わすメタ的な意味はもたない。
〈インデクス〉の〈サイズ〉は、インデクスレジスタの
有効なデータサイズである。本発明装置64で’.W’
を指定した場合には、レジスタの下位32ビットが64
ビットに符号拡張される。〈インデクス〉の〈スケー
ル〉を省略した場合には、1が仮定される。
【0313】A2−3−6.特殊オペランド 一般のアドレッシングモード以外の方法で指定されるオ
ペランド(特殊オペランド)に関しては、次のようなシ
ンタックスとする。なお、各部分を区切るコンマ’,’
についてのシンタックスは、ここには含めていない。 reglist (LDM,STM,ENTER,EX
ITD命令) 〈レジスタ番号〉または〈レジスタ番号〉−〈レジスタ
番号〉を’,’で区切って並べ、’(...)’でくく
ったもの アドレッシング方法は、PC相対モードのみである。オ
ペランドとしては、単にジャンプ先のラベルのみを書
く。この場合は、アセンブラによって、その命令の先頭
アドレスとジャンプ先のアドレスとの差がnewpcの
ビットパターンとして設定され、命令実行時にそのラベ
ルの場所へジャンプできるようになる。
【0314】 BRA,Bcc,BSR,ACB,SCB命令は、出現
頻度が高い、特殊なアドレッシング(PC相対のみ)で
ある、慣用的に行き先のラベルをそのまま書ける方がよ
い、といった理由から、〈行き先ラベル〉を書くだけで
自動的に〈行き先ラベル〉のアドレスと、これらの命令
の置かれたアドレスとの差がディスプレースメントに設
定されるようになっている。すべてのオペランド表記の
うちで、レジスタ以外のシンボル名が先頭に’#′も’
@′もなく現われるのは、この〈行き先ラベル〉に限ら
れる。したがって、例えば と同じ意味を表わすことになる。なお、’$’は、この
記号を含む命令(この場合はJMP命令)の先頭アドレ
スを表わす。
【0315】その他 ・ビットフィールド命令などのリテラル指定は、短縮形
のリテラル指定と同じように#〈リテラル値〉で表わ
す。 ・CHK,INDEX,ACB,SCBビットフィール
ド命令などのレジスタ指定は、一般のアドレッシングに
おけるレジスタ直接モードと同じように、〈レジスタ番
号〉で表わす。
【0316】A2−4.フォーマット別ニモニックと総
称ニモニック 「総称ニモニック」と「フォーマット別ニモニック」
は、本発明装置アセンブラの特徴の一つである。従来の
プロセッサでも一部の命令について似たような考え方は
見られたが(68020のMOVとMOVQなど)、本
発明装置では両方のニモニックを完全に体系化し、オペ
レーションだけではなくオペランドの記述にも同じ考え
方を取り入れた点に特色がある。フォーマット別ニモニ
ックと総称ニモニックの間には、次のような関係があ
る。 ・インプリメントやフォーマットから来るいろいろな制
約をユーザに押し付けないのが総称ニモニックであり、
総称ニモニックを書く限りアセンブラが最適なコードを
選ぶ。同じ機能を持ち、同じようにフラッグのセットさ
れる命令は、できる限り一つの総称ニモニックに統合す
る。 ・フォーマット別ニモニックは、機械語のビットパター
ンと1対1に対応するものである。フォーマット別ニモ
ニックが変わっても、それはオブジェクトサイズや実行
サイクル数にのみ影響し、ユーザから見た命令機能はフ
ラッグ変化まで含めて全く同じである。この点でフォー
マット指定子とサイズ指定子は根本的に異なる。サイズ
指定子の場合は、演算サイズが変わるとユーザから見た
命令機能も変化する。条件ジャンプ命令ではBRA l
abel:32のようなフォーマット指定子を使ってい
るのに、加算命令の場合は、ADD src.B,de
st.Wのようなサイズ指定子を使っているのは、この
ためである。 ・通常ユーザが使うのは、「総称」の方である。「フォ
ーマット別」は、仕様書でのフォーマットの説明、逆ア
センブラなどの特殊な用途でしか使わない。したがっ
て、場合によっては多少冗長な感じになることもある
が、使用目的を考えると特に問題はない。ユーザが主に
使用するのは、あくまで も総称ニモニックである。ま
た、「総称」と「フォーマット別」は両極端の表記法に
過ぎず、一部のみフォーマットを指定する中間的な記法
も存在する。例えば、@(offset,PC)を付加
モードで書きたいが、付加モードの各段のフォーマット
はどうでもよいという場合には、 と記述する。「フォーマット別」と言っても、どうして
もフォーマット指定の必要な部分のみ指定を行なえばよ
く、実際にはそれほど長い記述にはならないのが普通で
ある。 ・「フォーマット別」から「総称」への変換 は、’:
X’を取ることにより機械的にできるようになってい
る。また、逆の変換も、フォーマットが許される範囲で
適当に’:X’を付ければ済むようになっている。オペ
ランドの順序は変化しない。フォーマット別ニモニック
として、記号を変えたり、順序を変えたりする方法も考
えられるが、そうすると総称ニモニックとの関係がスム
ーズではなくなるため、そのような方法はとっていな
い。(いろいろな場合分けが必要になり、かえってわか
りにくくなる。拡張性もよくない。) また、前述の@(offset,PC):Aのように、
一部のフォーマットのみ指定したい場合には、「フォー
マット別」か「総称」かの区別が統一的に行なえる方が
望ましい。 ・結局、ユーザからの要求を受けるインタフェースが総
称ニモニックであり、機械語からくる制約を受けるイン
タフェースがフォーマット別ニモニックである。両者の
調整をとるのが、’:X’のフォーマット指定文字およ
びアセンブラである。 ・フォーマット別ニモニックと総称ニモニックを併用す
ることの欠点は、アセンブラが複雑化することである。
しかし、ユーザがフォーマットのことまで心配するより
は、アセンブラで処理できることはアセンブラで処理す
る方がよいと考えており、そのためにアセンブラが多少
複雑になるのはやむを得ない。 ・機械やフラッグ変化の異なる命令は、たとえ命令のビ
ットパターンが似ていたとしても別の総称ニモニックに
なる。
【0317】以上のような理由から、「フォーマット
別」の方は、多少記述が長くなっても、「フォーマット
別ニモニックであること」や「どのフォーマットを使う
かということ」がはっきりわかるようにした方がよいと
考えている。フォーマットを表わす部分をすべて’:
X’に統一しているのは、このためである。なお、シン
タックス中で’[...]’ とある部分は省略可能で
あるが、省略するかどうかが全体で統一されている必要
はない。例えば、ある’[...]’を省略し、別の’
[...]’を残してもよい。
【0318】A2−5.言語としてのアセンブラ これまでに述べたアセンブラ表記は、機械語のビットパ
ターンに命令としてのニモニックを与えるための表記法
であり、アセンブリ言語の核となる部分である。本発明
装置では、ここまでを〈〈L0〉〉仕様とする。しか
し、アセンブラを一つの言語として見た場合には、ニモ
ニック以外にも次のような項目を規定する必要がある。
これらの項目については、本発明装置のアーキテクチャ
と矛盾を起こさない範囲で、できるだけIEEEに合わ
せるように標準化する。 ・大文字と小文字の使用をどうするか・シンボルの文字
数は何文字までにするか ・シンボルに式が書けるかどうか、シンタックスはどう
なるか ・ラベルの形式はどうするか(ラベルの後に’:’をつ
けるかどうか) ・2進数、8進数、10進数、16進数の表記法はどう
するか ・コメントの表記法はどうするか ・ストリングの記述形式 ・特殊キャラクタ(改行文字’¥n’など)の表現形式 ・細かいシンタックスや使用できる文字 ・アセンブラ擬似命令 ・マクロ このうち、2進数、8進数、10進数、16進数の表記
法については、IEEEでは以下のような形式になって
いる。 本仕様書でも、16進数を表わすために”H”〜”を、
2進数を表わすために”B”〜”を使用している。
【0319】A2−5−1.大文字と小文字について IEEEでは特に決まっていない。本発明装置では、ニ
モニックや予約名に対しては、大文字と小文字を同等に
扱う。すなわち、この資料で大文字になっている部分に
対して、小文字を使用しても構わない。ただしユーザが
定義した一般の変数においては、大文字と小文字を区別
する方を標準とする。 A2−5−2.シンボル値 〈ディスプレースメント〉、〈リテラル値〉、〈イミデ
ィエート値〉、〈絶対アドレス〉などの項目(総称して
〈シンボル値〉と呼ぶ)には、定数、ラベルを含む四則
演算式が書けるものとする。式の中では、優先順位を変
えるために’(...)’を使用することができる。た
だし、未確定の値(外部名や後で定義されるラベルな
ど)を含む式に関しては、正しいリロケーションができ
るように、演算式の形を制限しても構わない。さらに、
式の中では現在注目している命令のアドレスを示す値と
して、’$’を使用することができる。PC相対間接モ
ードの表記は であり、dispの値が直接ディスプレースメントに設
定される。しかし、PC相対でリロケータブルなプログ
ラムを書く場合には、オペランドのアドレスそのものを
dispとして設定するのではなく、オペランドのアド
レスとこの命令のあるアドレスとの差をdisp値とし
て設定する必要がある。この目的で’$’を使用するこ
とができる。すなわち、(オペランド−$)をdisp
値として設定すればよい。
【0320】 アドレスH’0100のMOV.B命令の第二オペラン
ド@(loc−$:16,PC)では、実際のdisp
のビットパターンに設定される値がH’0180−H’
0100=H’0080となる。この命令により、アド
レスH’0180のlocに1がセットされる。一方、
H’0104のMOV.B命令では、アドレスH’01
04+8=H’010Cに2がセットされる。
【0321】付加モードと’$’を使ったオペランドの
表記 これは を表わす。ただし、 であり付加モードの拡張部は という構成になる。このモードは、リロケータブルなテ
ーブル(case文用のジャンプテーブルなど)をプロ
グラム領域に置く場合に使用できる。一段目のPC相対
間接 は、case文用のテーブル参照をリロケータブルにす
るために用いられる。また、二段目のPC相対間接 は、ジャンプ先アドレスの決定をリロケータブルに行な
うために用いられる。
【0322】付録3.本発明装置メモリ管理方式概要 本発明装置を組み込み用などの用途に用いることを考え
ると、命令セットは本発明装置になっているが、メモリ
管理のハードウエア(MMU)は持たないといったバー
ジョンのチップも考えられる。したがって、本発明装置
のメモリ管理機構は、必ずサポートの必要な〈〈L
0〉〉仕様ではなく、標準的な仕様の掲示のみを行なう
〈〈LA〉〉仕様となっている。以下では、〈〈L
A〉〉仕様としての本発明装置標準メモリ管理方式を説
明する。
【0323】A3−1.メモリ管理方式の選択と〈〈L
IR〉〉仕様 本発明装置では、ハードウエアによるアドレス変換とメ
モリ管理方式(以下MMUと呼ぶ)の標準仕様が、
〈〈LA〉〉仕様として用意されている。しかし、本発
明装置にITRONやμBTRONを実装するような場
合には、MMUが不要となることが多い。また、MMU
を使用する用途であっても、ページテーブルなどMMU
関係の実行環境の設定が終わるまでは、アドレス変換な
しで命令を実行する必要がある。そこで、本発明装置で
は、MMU機構を使用しているかどうか、アドレス変換
を行なっているかどうか、を示すフィールドをPSW内
に設け、このフィールドを書き換えることにより、アド
レス変換やメモリ保護の有無を指定できるようにしてい
る。このフィールドをAT(Address Tran
slation)フィールドと呼ぶ。ATはPSSのb
it6〜bit7に配置されている。ATをPSW内に
設けたことにより、LDCTX等によるコンテキストス
イッチや、EIT処理の起動、REIT命令によるタク
サ処理ハンドラからのリターンの際にも、アドレス変換
の有無を切り換えることが可能である。ATフィールド
の意味を以下に示す。
【0324】
【表2】
【0325】このうち、〈〈LA〉〉仕様の標準メモリ
管理を実装した本発明装置ではAT=00,01が利用
可能、〈〈L1R〉〉本発明装置ではAT=00,10
が利用可能となる。〈〈L1R〉〉仕様のAT=10の
場合、MMUがないのでページ毎のメモリ保護は行なえ
ないが、〈〈LA〉〉の4リングを縮退してリング0、
リング3のみを有効とし、アドレスによって簡単なメモ
リ保護を行なう。アドレスのMSB=1の領域(〈〈L
A〉〉でいうSR)はリング0からアクセス可能、リン
グ3からアクセス禁止の領域であり、通常はここにOS
を置く。一方、アドレスのMSB=0の領域(〈〈L
A〉〉でいうUR)はリング0からもリング3からもア
クセス可能な領域であり、通常はここにユーザプログラ
ムを置く。MMUがないのでユーザプログラム間のメモ
リ保護はできないが、ユーザプログラムからOSを保護
することは可能である。AT=00(アドレス変換な
し)の場合は、メモリアクセスに対するリング保護のチ
エックは行なわれない。したがって、ページ不在例外
(POE)、アドレス変換例外(ATRE)は発生しな
い。ただし、AT=00の場合も特権命令のチエックは
行なわれる。AT=00の時の動作については、〈〈L
1〉〉と〈〈L1R〉〉で全く同じになることが望まし
い。しかし、LDATEなどの命令では、〈〈L1〉〉
ならばMMU環境の設定という意味で実用的な命令であ
るのに対して、〈〈L1R〉〉では全く意味を持たな
い。また、PTLBなどの命令も〈〈L1〉〉のAT=
00ならば一応意味を持っているが、〈〈L1R〉〉で
はTLBそのものがないので全く意味を持たない。した
がって、〈〈L1R〉〉仕様ではこういったMMU関係
の命令を実装しないことにする。〈〈L1R〉〉でこう
いった命令を実行しようとした場合は、ATの値にかか
わらず予約命令例外(RIE)となる。
【0326】A3−2.本発明装置のメモリ管理方式 本発明装置は〈〈L1R〉〉仕様のチップである。本発
明装置のATフィールドの意味を図297に示す。
【0327】A3−3.本発明装置のI/O空間アクセ
スに関して IOMASK,IOADDRで示されるI/O空間に対
する命令フェッチ及びメモリ間接アドレッシング・モー
ドによるオペランドフェッチはアドレス変換例外とな
る。I/O空間に対するアクセスで、メモリ間接アドレ
ッシングの場合はアクセス動作は一切行なわれない。し
かし、命令フェッチの場合にはアクセス動作が行なわれ
る。そのため、外部のI/Oデバイスはバスアクセスタ
イプ(BAT)信号をみて命令フェッチであれば応答し
ないようにする必要がある。I/O空間は通常リング0
の領域におかれるためリング3からのアクセスはリング
保護違反が検出されることになると考える。リング保護
違反の場合は高速に検出可能なためメモリアクセスは行
なわれない。また、I/O空間とI/Oでない空間をま
たぐようなアクセスが行われた場合、アドレス変換例外
を起こすが、その場合の再実行動作を保証できない。
【0328】A3−4.メモリ管理の目的と概要 本発明装置では、以下のような目的を達成するために、
ハードウエアによるメモリ管理機構(MMU)を導入し
ている。 ・命令再実行と仮想記憶方式のサポートにより、実装さ
れている物理メモリの量を越える大きさの論理空間を提
供する。 ・多重論理空間の機能の導入により、コンテキスト(タ
スクやプロセス)間の独立性を維持し、プログラムを作
りやすくする。 ・リング保護の機能の導入により、OSや共有データと
ユーザプログラムやユーザデータとの間でメモリ保護を
行なう。 本発明装置では、以上のような機能を提供するために、
毎回のメモリアクセスでページング方式によるアドレス
変換を行なう。アドレス変換前のアドレス(論理アドレ
ス)の作る空間を、Logical Spaceの意味
でLSと予備、アドレス変換後のアドレス(物理アドレ
ス)の作る空間を、PhysicalSpaceの意味
でPSと呼ぶ。ページングの場合には、メモリアクセス
を高速化するために、TLB(Translation
Lookaside Buffer)と呼ばれるアド
レス変換対の記憶バッファを導入することが一般的であ
る。しかし、TLBはメモリアクセスを高速化するため
のインプリメント上の手段と考えられるため、本発明装
置のMMU仕様としてはTLBに関する規定は行なわな
い。本資料でも、TLBに関する説明は行なっていな
い。また、コンテキストの切り換えによるTLBのパー
ジを減らすため、〈〈L2〉〉として論理空間識別子
(LSID)の機能を導入することができる。LSID
は、コンテキスト毎にユニークに与えられた番号であ
り、LSIDまで含めてTLBの論理アドルス比較を行
なうようにすれば、コンテキストを切り換える際にもす
べてのTLBをパージする必要がなくなる。しかし、L
SIDの機能についてもインプリメント依存性が強いた
め、本発明装置のMMU仕様としては、LSIDの詳細
機能やビット数の規定を行なっていない。本発明装置の
仕様では、LSIDを示す制御レジスタのアドレス割り
当てと、LSIDを実装した場合のTLBやキャッシュ
の整合性確保に関する説明のみが行なわれている。
【0329】A3−4−1.ページング 本発明装置のアドレス変換は、ページングを基本として
いる。ページサイズは4KBとして本発明装置全体で統
一されている。これによって、TLBの構造などをある
程度限定することができ、メモリ管理機構を内蔵できる
チャンスが大きくなる。また、基本的なパラメータを固
定化すれば、それにチューニングすることで性能向上が
期待できる。アドレス変換に際し、本発明装置32の論
理アドレスは図298のように分割され、これによって
2段階のページングを行なう。32ビットの論理アドレ
スは、4GBの論理空間を作る。Rビット(論理アドレ
スのMSB)により、4GBの論理空間は2GBのUn
shared Region(UR)とShared
Region(SR)に分かれる。おのおののRegi
onは、SXフィールドにより4MBずつのSecti
onに分かれる。さらに、おのおののSection
は、PXフィールドによりRKBずつのPageに分か
れる。したがって、2段階のページングのうち上位段の
ページテーブルは、SXをインデクスとして、下位段の
ページテーブルのベースアドレスを引き出すものとな
る。これをSection Table(ST)と呼
び、その一つのテーブルエントリをそのエントリをST
Eと呼ぶ。また、2段階のページングのうち下位段のペ
ージテーブルは、PXをインデクスとして、物理ページ
のベースアドレスを引き出すものとなる。これをPag
e Table(PT)と呼び、その一つのテーブルエ
ントリをそのエントリをPTEと呼ぶ。一つのSTEの
変更により一つのSectionが、一つのPTEの変
更により一つのPageが影響を受けることになる。P
TE,STEの総称名としてATE(Address
Translaton table Entry)とい
う名称を用いる。STのベースアドレスは、URの場合
UATB、SRの場合SATBという制御レジスタによ
って示される。UATBまたはSATBの変更により、
一つのRegion(UR又はSR)が影響を受ける。
以上述べた関係をまとめたものを図299に示す。
【0330】A3−4−2.多重論理空間 本発明装置では、論理アドレスのMSBによって、共通
空間(SharedRegion)と個別空間(Uns
hared Region)が区別されている。それぞ
れのRegionに対して、アドレス変換のテーブルベ
ースレジスタUATB,SATBが存在するが、このう
ちUATBのみはコンテキスト毎に切り換わるようにな
っており、これによって多重論理空間を実現する。すな
わち、UR(論理アドレスH’00000000〜H’
7fffffff)ではコンテキスト毎に別々の物理空
間(物理メモリ)が割り当てられるのに対して、SR
(論理アドレスH’80000000〜H’fffff
fff)ではコンテキスト間で共通の物理空間(物理メ
モリ)が割り当てられる。Shared Region
は主に割り込み処理ハンドラやOSが使用し、Unsh
ared Regionは主にユーザプログラムが使用
するものであるが、ユーザデータでもタスクやプロセス
間で共用するものはSRを使用する場合があるし、OS
の管理するデータでもタスクやプロセス毎に持つ必要の
あるものはURを使用する場合がある。多重論理空間の
機能を利用すれば、同一の論理アドレスから複数のプロ
グラムを同時に実行することができるので、実行時にオ
ブジェクトコードのリロケーションをする必要がなくな
る。また、他のタスクやプロセスのURを直接参照する
ことはできないので、プログラム間のメモリ保護にも役
立つ。なお、UR,SRの区別と後述のメモリのリング
保護の機能とは、直接の関連はない。すなわち、rin
g3からSRを参照できないとか、PCがURにある間
はSRを参照できないとかといった制限は、UR,SR
自体の機能には含まれていない。このようなメモリのア
クセス制限を行ないたい場合には、メモリのリング保護
の機能を利用し、STE,PTEに適当な保護コードを
設定しておかなければならない。
【0331】〔多重論理空間の構成〕図300において ・Unshared Region/Shared R
egionの切り替えは、論理アドレスのMSBによっ
て行なわれる。 ・Unshared Regionでは、UATBレジ
スタによってアドレス変換される。 ・Shared Regionでは、SATBレジスタ
によってアドレス変換される。 ・UATBレジスタのみコンテキスト毎に切り換わるた
め、UnsharedRegionでは、それぞれのコ
ンテキストが別々の論理空間を持つことができる。アド
レス変換が2段のページングとなっているため、異なる
コンテキストの2つのSTEが同一のPage Tab
leを指すことにより、URの中での共用セクション、
共有ページを設けることもできる。なお、URとSRの
境界にまたがるようなプログラムやデータについては、
以下のように考える。 ・64ビット拡張時には、現在連続しているURとSR
の境界が不連続になるため、H’7fffffffから
先に伸びているプログラムは、64ビット拡張時に使用
できなくなる。これは、本発明装置32で、H’7ff
fffffの次のアドレスをH’00000000と考
えてもH’80000000と考えても同じである。し
たがって、URとSRの両方にまたがるようなメモリア
クセスや、UR〜SRで連続するような命令のフェッチ
を行なうべきではない。 ・しかしながら、URとSRにまたがっているかどうか
のチエックを毎回行なうのは、インプリメント上の負担
が大きいため、URとSRの両方にまたがるアクセスが
あったとしてもEITとはしない。この場合、Regi
onとは関係なく、アドレスがリニアアドレスであると
いう考え方を生かし、H’7fffffffの次はH’
80000000、H’ffffffffの次はH’0
0000000のアドレスをアクセスするものとする。
ただし、前項でも述べたように、この仕様を利用するよ
うなプログラムを書くべきではない。PSW,UAT
B,SATBに対するLDC命令や、LDATE,LD
CTX命令による論理空間の切り換えでは、現在実行中
のプログラム領域のアドレス変換に対しても影響を与え
ることができる。したがって、使い方によっては次の命
令から全く別の場所に飛んでしまうというケースも生じ
る。これはプログラムの責任で処理しなければならな
い。具体的には、ATビットの変更を行なう場合はV=
R領域を利用したり、LDCTXを実行する場合はSR
(Shared Region)を利用したりすること
になる。
【0332】A3−4−3.リング保護 本発明装置のメモリ保護方式は、4レベルのリング保護
である。保護情報は、論理アドレスやUR,SRの区別
には関係なくページ毎に指定することができる。リング
保護では、PSW中に示される現在リング番号(RN
G)と、アクセスすべき論理アドレスのSTE,PTE
に含まれている保護コードとの関係によって、アクセス
が可能かどうかが決まる。RNGが小さい値であるほ
ど、すなわち内側のリングであるほど強いアクセス権を
持っており、RNG=3が最もアクセス権が弱い。rn
g1<rng2とした場合、RNG=rng2でアクセ
スできるページは必ずRNG=rng1でもアクセスで
きることになる。
【0333】A3−5.MMU関係制御レジスタ MMUに関係する制御レジスタについて説明する。 ・PSW 別項参照。MMUに関連するのは、RNG,ATのフィ
ールドである。 ・LSID 別項参照。このレジスタの有無と有効なビット数は、イ
ンプリメントに依存する。 ・UATB(Unshared region Add
ress Translation table Ba
se) 図301に示す。 ・SATB(Shared region Addre
ss Translation table Bas
e) 図302に示す。
【0334】SATB,UATB中のPIビットは、正
確にはPage InではなくSectlon Tab
le Inの意味を表わす。また、後述するSTE中の
PIビットは、Page InではなくPage Ta
bleInの意味を表わす。しかし、あえて区別する必
要もないと思われるので、いずれも同じ’PI’という
名称を使用する。広義の「ページ」は、「ページテーブ
ル」や「セクションテーブル」、つまりディスクへの追
い出しの単位となるものをすべて含むことになり、ペー
ジテーブルやセクションテーブルの不在にも「ページ不
在例外」という例外の名称をそのまま適用する。Sec
tion Table,Page Table自体をペ
ージアウトすることも可能であるが、ページインされて
いるテーブルについては、テーブルのベースアドレス
(STB,PTB)は物理アドレスを表わすものとす
る。すなわち、ページテーブルは論理空間ではなく物理
空間に置かれていると考えることができる。また、Se
ction TableやPage Tableが4K
のフルサイズでない場合にST,PTのページアウトを
許すと、64B,256B,1KB,2KB単位でペー
ジ不在となるケースも生じる。つまり、UATB,SA
TB,STEでのPIビットは、必ずしも4K単位での
ページ不在を指すとは限らないので、注意する必要があ
る。セクションテーブル、ページテーブルの大きさが可
変になっているが、テーブルが最小(1/64)の大き
さでない時には、STBとSXの有効なビットに重なり
が生じる。例えば、UATB,SATBでD=0,LL
=00とした場合、以下のような計算によりSTEの実
効アドレスを算出する必要がある。
【0335】
【数17】
【0336】ここで、’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でなくてもよ
く、SectionTableに対して2^6より上位
のアラインメントは全く強制しない。インプリメント上
は、まず重なりのある5ビットの加算を行ない、桁上が
りを生じた場合には最上位桁まで桁上がりを伝搬させる
必要がある。つまり、2^6より上位のビットについて
すべて加算を行なう必要がある。(アラインメント自
由)
【0337】現在が本発明装置の仕様となっている。
LL=01,10の場合、またPTBとPXのアライン
メントの場合も同じようにの仕様とする。DとLLの
機能は、小規模な用途でSection Tableの
領域を節約するために設けられているものである。Dと
LLの指定が変わると、Section Tableが
小さくなるため、SXの取り得る値に制限ができる。
D,LLのそれぞれの値に対して、許されているSXの
値は図303のようになる。D=1,LL=00のre
servedの部分は、ソフトウェアで使用してはいけ
ない。マニュアルにもreservedであることを明
記する必要がある。ただし、この値を実際にUATBや
STABに設定した場合は、D=0,LL=00と同じ
動作をする。つまり、LL=00の場合にはDは無視さ
れる。論理アドレスとして、上の表に当てはまらない値
を指定した場合には、アドレス変更例外(ATRE)の
未使用領域参照エラーが発生する。ページ不在例外(P
OE)とアドレス変更例外(ATRE)が同時に発生し
た場合には、アドレス変更例外(ATRE)が優先され
る。例えば、UATBのD=0,LL=10,PI=0
で論理アドレスH’40000000をアクセスした場
合には、POEではなくATREとなる。DとLLの指
定によるテーブル領域の節約のようすを図示すると、図
304のようになる。この時、使用する論理アドレスの
範囲が狭いため、はじめの数個のSTEのみが利用でき
れば済むというの例であれば、図305のようにする
ことによって、section tableの大きさを
節約することができる。又、スタック領域やOS用の領
域などで、終わりの数個のSTEのみが利用できれば済
むというの例であれば、図306のようにすることに
よって、section tableの大きさを節約す
ることができる。 ※D=1の場合、STBはsection table
の有効部分の先頭アドレス(SXとしては途中の値に対
応する)を指すのではなく、SX=0に対応するSTE
(実際には存在しない)の置かれるべきアドレスを指
す。STE中のPTBの場合も同様である。
【0338】A3−6.STEとPTE STEとPTEは、メモリ上に置かれるアドレスの変換
用のディスクリプタである。STEとPTEのフォマッ
トについて説明する。 ・STE(Section Table Entry)
図307に示す。
【0339】 STBとSXの時と同様に、PTBとPXの場合にも、
PTBのアラインメントは自由とする。すなわち、LL
≠11の時には、PTBとPXの有効なビットに重なり
の生じる場合があるが、重なった部分のアドレスについ
ては最上位桁まで加算を行なう。DとLLの機能は、小
規模な用途でPage Tableの領域を節約するた
めに設けられているものである。DとLLの指定が変わ
ると、Page Tableが小さくなるため、PXの
取り得る値に制限ができる。D,LLのそれぞれの値に
対して、許されているPXの値は図308のようにな
る。論理アドレスとして、上に当てはまらない値を指定
した場合には、アドレス変換例外(ATRE)の未使用
領域参照エラーが発生する。D=1,LL=00の部分
に対しては、W,Eが特別な意味を持つ。D=1,LL
=00のSTEを使ってメモリアクセスを行なおうとし
た場合には、次のような動作をする。この時、SXの値
は関係しない。また、PTBのフィールドとEビット
は、ハードウェアで使用しないので、OSから自由に利
用することができる。
【0340】図309において ’*’はソフトウエアで自由に使用してよいビットであ
る。ハードウエア的にはこのビットが無視される。この
ビットは、reservedを示す’=’とは異なり、
将来の使用拡張でも使用しないことがはっきりしている
ビットである。’=’と’*’は、現在の使用における
ハードウエア的な動作は同じであるが、将来の拡張のた
めに仕様書上きの扱いが異なっている。なお、未使用領
域参照エラーと予約ATEエラーの区別は、アドレス変
換例外(ATRE)が起動された際にスタックに積まれ
るエラーコードによって行われる。これらのエラーによ
るアドレス変換例外の起動は、STE,PTEの値を設
定した時に検出されるのではなく、値を使用する時(ア
ドレス変換の時、つまりメモリアクセスを行った時)に
検出される。D=1,LL=00,W=0の機能は、一
つのsection全体を未使用領域としたい場合に利
用する機能である。この場合、このSTEに対するPa
geTableは無い。LL≠00の機能を利用して小
さいサイズのSection Table,Page
Tableを使用する場合でも、論理アドレス中のS
X,PXの位置は変わらない。したがって、複数のST
Eから小さいサイズのPage Tableを使用する
場合には、有効な論理アドレスが飛び飛びの値をとるこ
とになる。この様子を図310に示す。
【0341】このように、小さいサイズのPAge T
ableを使った場合には、有効な論理アドレスが連続
領域とはならないことがある。しかし、STEを1エン
トリしか使用しないような小規模な応用のため、あるい
は、長さが半端になった論理空間の最後の部分のテーブ
ルについて、「テーブル領域の節約」を行なうためにL
L≠00の機能が用意されているのだと考えると、LL
≠00の時にアドレスが連続しなくても、特に問題はな
い。STEでは、D,LLによるアドレス変換例外(A
TRE)の未使用領域参照エラー、W=0,E=0によ
るアドレス変換例外(ATRE)のリング保護違反エラ
ー、PI=0によるページ不在例外(POE)が同時に
発生する可能性があるが、例外の検出順序はこの順とす
る。つまり、まず未使用領域かどうかのチェックを行な
い、次にアクセス権のチェックを行ない、最後にページ
不在のチェックを行なう。これは、PTEの場合も同様
である。したがって、ページ不在の時でも、リング保護
関係の情報は有効である。ただし、この例外検出順序
は、一つの段(STEまたはPTE)の中での例外検出
順序であり、これよりもさらにテーブルを引く順序が優
先する。つまり、,さたで発生する例外よりもSTEで
発生する例外の方が優先される。
【0342】・PTE(Page Table Ent
ry) 図311に示す。
【0343】
【0344】PFNと論理アドレスのoffsetの間
では、有効なビットが重なり合うことはないため、アラ
インメントの問題は発生しない。PTEのRL,T,A
Lの値と、実際にそれをアクセス可能なリングとの関係
は、具体的には図312のようになる。 図において ・R0はring0からのアクセス権、R1はring
1からのアクセス権を示す。ring0〜ring3の
区別はPSW中のRNGフィールドで示される。 ・Rは読みだし可能、wは書き込み可能、Eは実行可能
を示す。T=00,AL≠00の場合、ALが特別な意
味を持ち、図313のような動作をする。この時、of
fsetの値は関係しない。このうち、T=00,AL
=01の場合には、ハードウエアで使用しないPTBの
フィールドとRLフィールドを、OSから自由に利用す
ることができる。T=01を指定すると、読みだしはで
きないが実行は可能であるというページを作ることがで
きる。これは、プログラムのコピーを禁止し、プログラ
ムの実行に対する課金メカニズムを導入することを意図
したものである。一方、T=00,T=10を指定する
と、読みだしや書き込みは可能であるが、実行は禁止で
あるというページを作ることができる。この機能を利用
すれば、プログラムカウンタがデータ領域に飛び込んで
来た場合に、それをチェックしてプログラムの暴走を阻
止することができる。実行を禁止する機能は、メモリの
データ保護のための機能というよりも、デバッグのため
の機能と考えることができる。書き込みが可能である場
合には、からなず読みだしも可能になっている。
【0345】A3−7.64ビットへの拡張性 SR/URの切り換えビットを論理アドレスのMSBに
固定すると、64bitへの拡張時に問題が生じる可能
性がある。本発明装置では、論理アドレスを符号付きの
数と考えることによって、この問題に対処する。SRと
URの双方を32ビットから64ビットに拡大するため
には、アドレス空間が二方向に伸びればよいわけであ
る。そこで、アドレスを符号付きの数と考え、UR領域
が正方向にSR領域が負方向に伸びると考えれば、この
問題は解決される。具体的には、32→64の拡張に対
して、論理アドレスは符号拡張するようにしておく。メ
モリマップは図314のようになる。あるいは、図の書
き換え方をかえて、図315のようになる。アドレスを
符号付きと考えることにより、SR,UR双方の領域で
拡張に対する連続性が保たれる。その代わり、H’80
000000におけるOS領域とユーザ領域の接点が切
られることになるが、これは問題ないと考えられる。な
お、本発明装置の16ビット絶対アドレッシングモード
(@ads:16)で、論理アドレスを符号拡張するよ
うになっているのも、アドレスを符号付きとする考え方
を適用したものである。
【0346】A3−8.MMU機能のバリエーションと
LSIDの機能 LSIDの機能は〈〈L2〉〉であるため、最初のチッ
プでは実装されず、将来のチップで導入される可能性が
高い。したがって、最初に出たチップのためのLSID
の機能を利用しないプログラムも、将来のLSIDの機
能の実装を見越したものにしておくのが望ましい。かと
いって、最初のチップでも不必要なオーバーヘッドは避
けなければならない。そこで、こういったLSID(論
理空間識別子)機能の有無やMMU機能の各種のバリエ
ーションと、プログラム(OS)の互換性との関係につ
いて、検討を行なう必要がある。一般的な話として、M
MU関係の仕様のバリエーションに対する対応には次の
2つの方針がある。 互換性を維持するため、実装していない機能であって
も、縮退した機能でそのまま実行する。この場合、性能
は落ちるだけで、オブジェクトレベルの互換性は達成さ
れる。 実装していない機能については、EITで検出する。
EIT起動の目的は、まちがいの検出とエミュレーショ
ンであるが、エミュレーションでは極端な性能の低下を
招く場合があるので、実際問題として、オブジェクトレ
ベルで変更の必要な場合が多い。 したがって、オブジェクトレベルの互換性は 難しい
が、あらかじめそれぞれのバリエーションの仕様が明ら
かになっていれば、ソースレベルで両方の仕様に対応で
きるようなプログラムを書くことは難しくない。例え
ば、PSTLB命令の機能を実装しない場合に、PST
LBをPTLBとして実行するのはの方針であり、E
IT(RIE9とするのはの方針となる。かかは
個別に検討する必要がある。
【0347】・PSTLBの/STオプションについて TLBやキャッシュのインプリメント方式によっては、
/STオプションの実装が難しい場合がある。しかし、
/STオプションの指定は、TLBのパージ範囲だけに
影響するので、互換性維持のためにの方針をとる。す
なわち、/STオプションの実装が難しい場合には、E
ITではなく/AT想到の動作を行なうということにす
る。 ・LSID機能の実装とPTLB,PSTLBの/SS
オプションについて PTLB,PSTLBの/SSオプションの実装につい
ては、TLBやキャッシュのタグにLSIDの値を含め
ない場合にも、/SSオプションで全パージすることに
より、の方針に合わせることは可能である。しかし、
LSID制御レジスタに値を書き込んだり、それを読み
だしたりすることを考えると、オブジェクトレベルでの
完全な互換性を達成するためには、LSID制御レジス
タに相当するものを設けておく必要がある。ところが、
互換性の確保だけのためにレジスタを一実装するのは無
駄が多い。また、ハードウエアだけではなくソフトウエ
アに関しても、OSの中でLSIDの操作を行なう部分
は、LSIDの機能を活かさなければ無駄な処理になっ
てしまう。したがって、LSIDの有無についてはの
方針をとる。それに合わせて、/SSオプションの実装
についてもの方針とする。
【0348】・LSID機能の実装とPTLB,PST
LBの/SSオプションについて PTLB,PSTLBの/SSオプションの実装につい
ては、TLBやキャッシュのタグにLSIDの値を含め
ない場合にも、/SSオプションで全パージすることに
よりの方針に合わせることは可能である。しかし、L
SID制御レジスタに値を書き込んだり、それを読みだ
したりすることを考えると、オブジェクトレベルでの完
全な互換性を達成するためには、LSID制御レジスタ
に相当するものを設けておく必要がある。ところが、互
換性の確保だけのためにレジスタを一つ実装するものを
設けておく必要がある。ところが、互換性の確保だけの
ためにレジスタに関しても、OSの中でLSIDの操作
を行なう部分は、LSIDの機能を生かさなければ無駄
な処理になってしまう。したがって、LSIDの有無に
ついてはの方針をとる。それに合わせて、/SSオプ
ションの実装についてもの方針とする。具体的なLS
ID関連の仕様は、次のようになっている。 −LSIDの機能の有無と/SSオプションの実装の有
無を一対一に対応させる。LSIDのあるプロセッサは
/SSオプションが利用できるし、LSIDのないプロ
セッサは/SSオプションを利用できない。 −LSIDのあるプロセッサは、LSIDのないプロセ
ッサに対してオブジェクトレベルで完全上位互換とす
る。つまり、LSIDのないプロセッサのために書かれ
たOSは、LSIDのあるプロセッサの上でもそのまま
動く。ただし、LSIDの機能は生かすことができな
い。 −LSIDのあるプロセッサのために書かれ、LSID
の機能を生かすようなOSは、LSIDのないプロセッ
サでは動かない場合がある。具体的には、LSID制御
レジスタの際に予約機能例外(RFE)が発生したり、
/SSオプションを指定した命令を実行した際に予約命
令例外(RIE)が発生したりすることになる。
【0349】また、MMU関連の命令におけるLSID
関係の仕様は、次のようになっている。 −LSIDのでは、LSIDのないときPSTLB/A
S/AT @uraddr相当の動作を行なう。また、
LSID実装時は、その機能を生かすため、LDCTX
でTLB,キャッシュのパージは行わない。LSID実
装時は、TLBやキャッシュのタグ部分にLSIDまで
含まれているので、LDCTXによりLSIDが変更さ
れると、LDCTX実行前の論理空間でヒットしていた
エントリがLDCTX実行後の新しい論理空間ではヒッ
トしなくなる。ヒットしなくても、新しいエントリのロ
ードに伴ってリプレースされない限りパージはされない
ので、再びLDCTXが実行されて以前の論理空間に戻
った場合には、そのエントリがそのまま有効になる。
(LDCTXでキャッシュやTLBをパージしていたの
では、LSIDの意味がなくなってしまう。) −LDATE/PTでは、LSIDのない時PSTLB
/AS/PT相当の動作を行なう。LSID実装時、p
rgaddrがSRであればPSTLB/AS/PT相
当の動作を行ない、prgaddrがURであればPS
TLB/SS/PT(LSID_of_TAG=R0)
相当の動作を行なう。prgaddrがSRかURかで
動作が異なっているように見えるが、これはLDATE
の問題ではあく、PSTLBの動作がURとSRで異な
っているためである。LDATE命令自体の動作は、A
TEの変更に伴って影響を受けるTLBやキャッシュを
パージする、ということで一貫している。 −LDATE/STでは、LSIDのない時PSTLB
/AS/PT相当の動作を行なう。LSID実装時、p
rgaddrがSRであればPSTLB/AS/PT相
当の動作を行ない、prgaddrがURであればPS
TLB/SS/ST(LSID_of_TAG=R0)
相当の動作を行なう。(/PTと同様) −LDC命令でUATB,SATBを変更した場合は、
仮想的な命令LDATE/ATを実行したと考えれば良
く、LDATE/PT,LDATE/STと同様の動作
を行なう。すなわち、LSIDのない時、SATBを変
更した場合にはPSTLB/AS/AT(prgadd
r=SR)相当の動作を行ない、UATBを変更した場
合にはPSTLB/AS/AT(prgaddr=U
R)相当の動作を行なう。LSID実装時、SATVを
変更した場合にはPSTLB/AS/AT(prgad
dr=SR)相当の動作を行ない、UATBを変更した
場合にはPSTLB/SS/AT(LSID_of_T
AG=LSID,prgaddr=UR)相当の動作を
行なう。
【0350】付録4.本発明装置のフラッグ変化 各命令のフラッグ変化の表記法は、以下の通りとする。
【0351】A4−1.データ転送命令 図316に示す。
【0352】A4−2.比較・テスト命令 図317に示す。
【0353】A4−3.算術演算命令 図318に示す。ADDX,SUBXのX_flag
は、destのサイズからの桁上げ、桁下げを示す。S
UBXでsrcとdestのサイズが等しい場合、X_
flagは符号なし演算としての大小関係といった意味
にもなる。一方、L_flagの方は符号付き演算とし
ての大小関係を表わす。MUL,MULU,MULX,
DIV,DIVU,DIVX,REM,REMU,NE
GのM_flag,Z_flagは、オーバーフローの
発生にかかわらずdest設定値が基準である。MUL
X,DIVXのM_flag,Z_flagは、reg
設定値には関係しない。DIVのV_flagは、0除
算または(最小負数)÷(−1)の時にセットされる。
DIVUのV_flagは0除算の時にセットされる。
DIVXのV_flagは、0除算または商がdest
のサイズに入らない時にセットされる。NEGのV_f
lagは、destが最小負数であった時にセットされ
る。INDEXのM_flag,Z_flagは、xr
eg設定値(結果の一部)が基準である。L_flag
は結果が負であること、V_flagは、乗算または加
算でのオーバーフローを示す。
【0354】A4−4.論理演算命令 図319に示す。NOTのM_flag,Z_flag
は、dest設定値(反転結果)が基準である。
【0355】A4−5.シフト命令 図320に示す。M_flag,Z_flagはdes
t設定値(シフト結果)が基準である。X_flagは
最後にシフトアウトされた値が入る。SHA,SHL,
ROTでcountが0の場合には、X_flag=0
となる。SHAでは、count>0で符号の変化があ
った場合にのみV_flag=1。それ以外の場合はV
_flag=0。
【0356】A4−6.ビット操作命令 図321に示す。
【0357】A4−7.固定長ビットフィールド命令 図322に示す。固定長ビットフィールド命令では、B
FCMP,BFCMPUがCMP,CMPUに準じたフ
ラッグ変化をし、それ以外の命令がMOV,MOVUに
準じたフラッグ変化をする。BFINS,BFINSU
の場合、図323のBBBBBBBBがフラッグ変化の
基準となる。また、BFEXT,BFEXTUでは、抽
出されたビットフィールドではなく、デスティネーショ
ンに設定される値を基準としてフラッグ変化する。これ
は、MOV命令などにおいて、デスティネーション側に
設定された値を基準としてフラッグ変化するのに合わせ
たものである。
【0358】A4−8.任意長ビットフィールド命令 図324に示す。
【0359】A4−9.10進演算命令 図325に示す。BCD数は符号拡張が無意味なので、
基本的に符号なしの数を扱うものと考え、ADDU,S
UBUに準じたフラッグ変化とする。なお、ADDX,
SUBXは、符号なし、符号付きの両方の数を扱うた
め、多少変則的なフラッグ変化になっており、ADD
U,ADDDX,SUBU,SUBDXとは異なったフ
ラッグ変化である。本発明装置では10進演算はサポー
トしない。
【0360】A4−10.ストリング命令 図326に示す。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はエレメントを符号付きデー
タと考えた時の大小を示す。
【0361】A4−11.キュー操作命令 図327に示す。QINSのZ_flagは、空のキュ
ーに挿入したことを示す。QDELのZ_flagは、
エントリの削除の結果キューが空になったことを示す。
また、QDELのV_flagは、空のキューからエン
トリを削除しようとしたことを示す。QSCHのF_f
lagは、終了条件による終了(サーチ成功)を示す。
V_flagは、キュー終了値R2による終了(サーチ
失敗)を示す。M_flagは、複数の終了条件を区別
するために用いる。R3に関係する条件で終了した場合
には0、それ以外の0またはR4の関係で終了した場合
(〈〈L2〉〉のみ)には1となる。
【0362】A4−12.ジャンプ命令 図328に示す。ジャンプ関係の命令では、フラッグは
全く変化しない。
【0363】A4−13.マルチプロセッサ命令 図329に示す。
【0364】A4−14.制御空間、物理空間操作命令 図330に示す。LDCでdestにPSWを指定した
場合には、全フラッグが変化する。
【0365】A4−15.OS関連命令 図331に示す。本発明装置ではJRNG,RRNGは
サポートしない。
【0366】A4−16.MMU関連命令 図332に示す。ACS命令のM_flagはread
可、L_flagはexucute可、Z_flagは
write可を示す。MOVPAのV_flagは、ペ
ージフォールトまたはエラーにより物理アドレスが得ら
れなかったことを示す。F_flagは、ページフォー
ルトを示す。LDATE,STATEのV_flag
は、ページフォールトまたはエラーによりATEの転送
ができなかったことを示す。本発明装置ではACS命令
以外のMMU関連命令をサポートしない。
【0367】付録5.異種サイズ間の演算について 本発明装置では、異なるバイト数の整数の間で各種の演
算を行なうことができ、これを「異種サイズ間の演算」
と呼んでいる。「異なるサイズ」といっても、現在は整
数のみを対象としているため、データサイズの変換はゼ
ロ拡張または符号拡張のみの簡単な処理で済む。例え
ば、32ビットの整数に8ビットの符号付き整数を加え
る場合、8ビット整数の符号ビット(MSB)を上位ビ
ットにまで拡張してから加算を行なうわけである。符号
拡張処理はゲート1〜2段で可能なので、一般の加算命
令と比べてそれほど複雑なわけではない。
【0368】A5−1.異種サイズ間の演算の有用性 異種サイズ間の演算は、次のような場合によく使用す
る。 オペランドの一方がイミディエート値の時 変数と定数の演算を行なう場合、定数のサイズはコンパ
イル時にわかるため、定数の方を小さいサイズとして扱
えば、命令長を減らすのに効果がある。例えば、32ビ
ットレジスタに8ビット定数の100を加える場合、3
2ビットの加算命令を使うと定数100を指定するのに
も32ビットのフィールドが必要である。しかし、32
ビットに8ビットを加算する命令を使えば、定数100
を指定するフィールドが8ビットで済むため、命令が短
くなる。さらに、乗除算の場合には、命令長だけではな
く性能面でも影響がある。マイクロプロセッサでは32
〜64ビットの並列乗算器を持つのは苦しいので、どう
しても加算とシフトで乗算を行なうことになるが、乗算
の計算量は、2つのオペランドサイズの積に比例して多
くなるため、2つのオペランドのうちの一方だけでもサ
イズの小さい方が有利である。異種サイズ間演算の機能
がない場合には、例えば、32ビットの変数に3を掛け
るだけでも32ビット*32ビットの乗算を行なわなけ
ればならない。
【0369】アドレス計算 アドレスの計算では、演算のデスティネーションのサイ
ズをアドレス幅と同じにする必要がある。したがって、
32ビットプロセッサの場合、32ビットと他のサイズ
との演算をよく行なう。例えば、文字の変換テーブルな
どにおいて、テーブルのインデクスの範囲が8ビットに
おさまる場合、インデクスとベースアドレスとの加算
は、8ビット符号なし整数と32ビット整数との加算と
して実現される。 高級言語 一般に、高級言語では、サブルーチンパラメータのサイ
ズを必ずマシンの基本サイズ(例えば32ビット)に拡
張することが多い。これは、スタックを使ってサブルー
チンパラメータの受け渡しをするため、また分割コンパ
イル等を容易にするためである。さらに、言語Cのよう
に、式の中の変数のデータサイズにかかわらず、式の評
価は必ずマシンの基本サイズで行なうという場合もあ
る。一方、メモリ上の変数、特に配列では、メモリ領域
の節約のため、必要最小限のサイズとするのが普通であ
る。したがって、配列とサブルーチンを同時に使用する
プログラムでは、データの移動中または演算処理の途中
のどこかでサイズの変換を行なわなければならない場合
が出てくる。式の評価とサイズの変換を同時に行なうた
めには、本発明装置のような異種サイズ間の演算が便利
である。
【0370】A5−2.本発明装置における実際 本発明装置では、異種サイズ間の演算をサポートするた
め、データサイズの指定に関する直交性が非常に強くな
っており、2オペランド一般形(G−format)の
基本演算命令のほとんどで異種サイズ間の演算が可能で
ある。つまり、2オペランド一般形の基本演算命令で
は、ソースのサイズとディスティネーションのサイズが
独立に指定でき、必要に応じて符号拡張、ゼロ拡張、上
位ビットの切り捨て、などを行なうようになっている。
デスティネーションのサイズがソースのサイズより小さ
い場合にも演算は実行され、デスティネーションのサイ
ズに従ってオーバーフローが検出される。
【0371】以下に、各命令における異種サイズ間演算
の実際例を述べる。 本発明装置では、ソースとデスティネーションのデータ
サイズが異なる場合に、通常符号拡張を行なう。ただ
し、特にゼロ拡張も必要と考えられる命令(MOV,C
MP,ADD,SUB)については、ゼロ拡張と符号拡
張を命令レベルで切り分け、MOVU,CMPU,AD
DU,SUBU命令としている。MOVU,CMPU,
ADDU,SUBU (加えてMULU,DIVU)で
は、デスティネーションのサイズがソースのサイズより
も大きい時にゼロ拡張を行ない、結果を符号なし整数と
考えてオーバーフローの検出をする。
【0372】A5−3.異種サイズ間の論理演算 論理演算の場合は各ビットが全く独立なので、異種サイ
ズ間の演算は意味がないし(フラッグの変化を除けば、
小さい方のサイズで行なうのと同等)、論理演算のオペ
ランドに対するゼロ拡張や符号拡張もほとんど意味を持
たない。しかし、例えばCで次のような関数を書いた場
合には、意味はなくても 符号拡張→論理演算 というオペレーションを実行しなければならないことが
ある。 ただ、このような例は、言語としての規則性や対称性の
ためにそう決まっているだけであり、一部のトリッキー
なプログラムを除けばほとんど使わない機能であると言
える。
【0373】論理演算の異種サイズ間演算をサポートす
るかどうかについて、問題点をまとめると以下のように
なる。 実行時 異種サイズ間の論理演算は、頻度としては非常に少な
く、論理的な意味も持たない。本質的に他の命令で代用
できるか、あるいはトリッキーなプログラムでしか使わ
ない。 コンパイル時 C言語では、論理演算でもゼロ拡張や符号拡張が必要に
なることがある。あまり使わない機能であっても、コン
パイラとしては必ず正しいコードを出す必要がある。命
令の対称性が重要。 チップのインプリメント 符号拡張/ゼロ拡張の区別が全命令で統一的に行なわれ
ていれば、インプリメントの規則性の面から、論理演算
でもゼロ拡張や符号拡張を導入するメリットがある。し
かし、そのためには命令の割り当てに多くのビットパタ
ーンが必要となり、命令のエンコーディングが苦しくな
ってしまう。現実的には、論理演算を含む全命令で符号
拡張/ゼロ拡張の区別を行なうことはできず、論理演算
の符号拡張やゼロ拡張に対してインプリメントの規則性
の面からのメリットは得られない。また、この部分はメ
ーカー間で見解の異なる可能性もあるため、仕様を合わ
せるのが難しい。
【0374】結局、以上の中でとのどちらを重視す
るかということになるが、実質的な性能向上をねらうの
であれば、やはりを選択するのが適当と考えている。
つまり、 ・異種サイズ間の論理演算のように、実行する意味の少
ない演算が足を引っ張ることによって、性能向上がはば
まれるのはよくない。 ・の問題に関しては、符号拡張を含む異種サイズ間の
論理演算は頻度の少ない演算であるから、多少実行速度
が落ちてもよい。 例えば、 の代わりに とすれば、多少実行速度は落ちるが、符号拡張〜演算命
令の統一的な置き換えが可能である。こうすれば、コン
パイラの負担はそれほど増えない。したがって、本発明
装置の仕様としては、異種サイズ間の論理演算をサポー
トしていない。異種サイズ間の論理演算に相当する命令
ビットパターンを実行した場合には、動作を保証しない
ということになっている。
【0375】A5−4異種サイズ間演算機能のまとめ 本発明装置でサポートする命令と、整数のデータタイプ
との関係をまとめると、次のようになる。 ・8,16,32,64ビット長の整数をサポートす
る。 ・符号付きの整数を優先してサポートする。 ・符号付き整数の算術演算に関しては、2オペランド命
令において異種サイズ間の演算がサポートされている。
ソースのサイズとディスティネーションのサイズは完全
に独立に指定でき、サイズの制限はない。ソースの方が
サイズが小さい場合は、符号拡張される。結果は符号付
き整数として扱われ、それに従ってフラッグ類がセット
される。 ・符号なし整数の演算は、一部の命令(MOV,C M
P,ADD,SUB,MUL,DIV)でのみサポート
されている。サイズに関してはやはりソースのサイズと
ディスティネーションのサイズが完全に独立に指定でき
る。ソースの方がサイズが小さい場合は、ゼロ拡張され
る。結果は符号なし整数として扱われ、それに従ってフ
ラッグ類がセットされる。 ・符号付きの整数と符号なしの整数の混在した演算はで
きない。ただし、加算命令などの場合は、デスティネー
ションの符号の有無はフラッグに影響するだけなので、
フラッグを見ないのであればADDまたはADDUで代
用できる。 ・異種サイズ間の論理演算はサポートしない。
【0376】付録6.高級言語向きサブルーチンコール 高級言語におけるサブルーチンコールでは、単なるリタ
ーンアドレスの退避だけではなく、フレームポインタの
設定、ローカル変数の領域の確保、汎用レジスタの退避
といった処理も必要である。これらの処理はJSR,S
TMなどの命令に分解することも可能であるが、頻度が
多いこと、処理が定型的であることにより、一つの命令
(ENTER,EXITD)としてまとめられている。
【0377】A6−1.本発明装置でのサブルーチンコ
ール 高級言語(特にC,PASCAL)のサブルーチンコー
ルでは、普通図333のような処理を行なう。本発明装
置では、高級言語用サブルーチン命令ENTERとリタ
ーン命令EXITDを設けている。いくつか注意する点
を述べる。 ・FP(フレームポインタ)とディスプレイレジスタ PASCALのようにスタティックスコープがある言語
では、中間レベル(ローカル変数とグローバル変数の中
間のレベル)の変数のアクセスにディスプレイレジスタ
を用いる。本発明装置のようにレジスタの多いプロセッ
サでは、汎用レジスタ上にこのディスプレイレジスタを
置くのが有効である。これは、複数のFPを持つことに
相当する。(実現方法は後述)
【0378】・パラメータ パラメータを渡すには、パケットにしてその先頭アドレ
スをレジスタ等で渡す方法、パラメータをスタックに積
む方法、等があり、高級言語では後者の方が一般的であ
る。呼ばれたサブルーチンの側でスタック上のパラメー
タをアクセスするにはFP相対のモードを使うことが多
い。サブルーチン実行後には、呼んだ側でスタック上の
パラメータを解放する必要がある。言語によって、また
分割コンパイルをしなければ、呼ばれた側で正確なパラ
メータ数がわかっているので、リターン命令の中で解放
するパラメータ数(SPへの加算値)を指定することが
できる。本発明装置では、この目的でEXITD命令を
設けている。パラメータ数が動的に決まる場合もあるの
で(例えば、パラメータ数をサブルーチンに知らせるた
めに、特定のレジスタやスタックを使う場合など)、E
XITD命令におけるSPへの加算値としては、イミデ
ィエート値だけではなくレジスタ上の値を使用すること
もできる。しかし、言語Cのようにサブルーチンのパラ
メータの個数が確定しない言語では、サブルーチンを呼
ばれた側からは、サブルーチンを呼ぶ側で決めたパラメ
ータの個数がわからない。したがって、呼ばれた側で実
行するEXITD命令では、解放するパラメータの個数
を指定できない。その場合には、サブルーチンを呼んだ
側でADD ♯n,SPを行なってパラメータを解放す
る。
【0379】結局、本発明装置のENTER命令では前
の図の2.〜4.の処理、EXITD命令では5.〜
7.の処理、または5〜8の処理(ただし、8.で解放
するパラメータ数はサブルーチン側で指定)を行なうこ
とになる。1.はJSRと同じ処理になり、8.はサブ
ルーチンを呼んだ側でADD ***,SPを行なう。
本発明装置における高級言語でのスタックフレームは、
図334のようになる。 ・local variablesとparamete
rsがなるべくFPから近い配慮となるように、ローカ
ル変数確保よりレジスタセーブを後にした。 ・EXITD命令にはPCのリストア(RTS)の操作
まで含めている。 命令シーケンスの実際 (サブルーチン側でパラメータ数がわからない場合)図
335に示す。 (サブルーチン側でパラメータ数がわかる場合)図33
6に示す。
【0380】A6−2.ブロック構造言語のためのディ
スプレイレジスタの構成例 ENTER−EXITDで処理するFPレジスタをダイ
ナミックリンクとして利用するためには、内側のブロッ
ク(最高のレキシカルレベル)に対するフレームポイン
タにFPレジスタを割り当てるのがよい。その他のレキ
シカルレベルのフレームポインタには、値の変化の少な
い順にR13,R12,R11...を使う。つまり、
レキシカルレベルの高い内側のブロックへ行くにしたが
って番号の小さいレジスタを使い、最小番号のレジスタ
の内容をFPと同じにする。各サブルーチンでは、EN
TER命令実行後、FPを自分のレキシカルレベルに対
応したフレームポインタ用レジスタにコピーし、その番
号以上のレジスタをディスプレイレジスタとして、その
番号以下のレジスタを評価用として利用すればよい。た
だし、新しく書き換えたレジスタは必ず退避して値を保
存しなければならない。
【0381】プログラム例(スタティックスコープ) 図337に示す。 実行状態の例(ダイナミックリンクとディスプレイレジ
スタ) 図338に示す。 proc0であるが、再帰呼び出しのため、最初のpr
oc0とは異なったフレームになっている。 ・FPのコピーにより破壊するレジスタは、コピー前に
すべてENTER命令で退避しなければならない。レジ
スタを退避しておけば、サブルーチンの実行が終って一
つ前の関数に戻った時、レキシカルレベルの大小にかか
わらずディスプレイはもとの値に戻る。上の例では、レ
ジスタの使い方について次のような関係が成立する。レ
キシカルレベルnのサブルーチン実行に関して R13..R13−n+1のn個のレジスタはディス
プレイレジスタとして参照のみを行ない、書き込みはし
ない。 R13−nのレジスタは、このレベルのローカル変数
のディスプレイとして使用するため、ENTER実行後
FPからコピーする。このディスプレイは、このサブル
ーチン実行中にさらに高いレベルのサブルーチンを呼ん
だ時に、呼ばれたサブルーチンからこのレベルの変数を
アクセスするために使用する。このサブルーチンからこ
のレベルの変数をアクセスするには、同じ内容であるF
Pを使うのが良い。 R13−n−1..R0の(13−n)個のレジスタ
は、レジスタ変数や評価用として利用する。 R13−nのレジスタとR13−n−1..R0のう
ちで使用するレジスタは、必ずENTER命令で退避す
る必要がある。全部のレジスタが保存されなければなら
ない。
【0382】付録7.制御レジスタと制御空間 制御レジスタ関係の仕様は、チップバス(コプロセッサ
やキャッシュ、TLBなどに接続されるバス)やインプ
リメント方法との関係が深いため、〈〈LA〉〉仕様と
なっている。
【0383】A7−1.制御空間の考え方 「本発明装置」では、チッブバス上のメインプロセッサ
やコプロセッサに含まれるすべてのレジスタ、MMUや
キャッシュ、TLBなどの制御レジスタ、およびチップ
バス上に接続されたコンテキストスイッチ用高速メモリ
に一意的なアドレスを付け、これを制御空間と呼ぶ。
「本発明装置」の制御空間は、従来のプロセッサに見ら
れたコプロセッサ用のアドレス空間(Coproces
sor−IDなど)をメインプロセッサの制御レジスタ
のアドレスと統合化、一般化したものであり、次のよう
な特徴を持つ。 ・「本発明装置」の制御空間には次のようなものが含ま
れる。 メインプロセッサの制御レジスタ PSW,各リングのスタックポインタなど MMU関係の制御レジスタ(「本発明装置」はMMUを
内蔵しない) UATB,SATBなど インプリメントに依存して必要となるレジスタ [コプロセッサの制御レジスタ] [コンテキスト退避用の高速メモリ]将来チップに内蔵
することを狙ったもの [プロセッサ内の汎用レジスタ、テンポラリレジスタ]
外部からの診断、デバッグの目的 ・制御空間は、コンテキスト(プロセスやタスク)間で
共通の空間である。制御空間のアクセスはアドレス変換
を伴わないため、単純化されたプロトコルで高速のアク
セスが可能である。この機能は、特に高速コンテキスト
スイッチでも利用される。制御空間の考え方は、将来、
コプロセッサやコンテキスト退避用メモリがメインプロ
セッサに内蔵された時に、特に有効になると考えられ
る。しかし、最初のバージョンのチップでは、インプリ
メントの制約上、あるいはチップバスの構成上、制御空
間の操作を統一的に行なうのが難しい場合があるので、
将来に備えてアドレスの割り当てのみを決めておき、制
御空間操作命令はいくつかの制限を付けて使用してもよ
いということにする。
【0384】具体的には、次のような制限が付く。 ・プロセッサの診断用の目的で、R0〜R15やPCに
も制御空間のアドレスが割り当てられているが、これは
〈〈L2〉〉であり、「本発明装置」では実装しない。 ・LDC,STCは、本来メインプロセッサ内の制御レ
ジスタ、FPUの制御レジスタ、コンテキスト退避用メ
モリなどを統一的にアクセスすることを狙ったものであ
る。しかし、「本発明装置」ではインプリメントの制限
により、メインプロセッサ内の制御レジスタ以外(実効
アドレスH’0〜H’07ff以外)のものについて
は、LDC,STCでアクセスできない。 ・「本発明装置」の制御空間のアドレスでは、バイトア
クセス、ハーフワードアクセスが利用できない。また、
ワードアクセスにおいてアラインメントが強制される。 ・コンテキスト退避用メモリは、制御レジスタを置く領
域(H’0〜)と重ねることはできない。コンテキスト
退避用メモリとしては、H’ffff8000〜H’f
fffffffのアドレスが割り当てられている(さら
に拡張領域としてH’80000000〜)ので、H’
80000000〜H’ffffffff以外の値をC
TXBBに設定してLDCTX/CS,STCTX/C
Sを実行した場合には、エラーとする。また、LDCT
X/CS,STCTX/CSの機能自体も〈〈L2〉〉
となっている。
【0385】・「本発明装置」ではLDCTX/CS,
STCTX/CSをサポートしない。 図339に示す制御空間では、バイトアクセス、ハーフ
ワードアクセスができないのにもかかわらず、バイトア
ドレッシングとなっている。これは、一般の命令で利用
される論理空間と同じように、制御空間でも汎用アドレ
ッシングによる実行アドレス指定が可能であり、論理空
間と同じ形のバイトアドレッシングにしておかないと、
混乱を招くからである。また、制御空間で汎用アドレッ
シングを利用可能としたのは、制御空間をコンテキスト
退避に利用することを考えたためである。LDC,ST
Cでメインプロセッサ内の制御レジスタしかアクセスで
きない場合には、バイトアドレッシングとした意味がな
くなってしまい、多少不自然な仕様になる。しかし、そ
の背景には上記のような将来的な見通しがあり、一部の
機能のみを実現した場合に多少不自然に見えるのはやむ
を得ない。
【0386】A7−2.メインプロセッサの制御レジス
タ 制御レジスタのニモニックとアドレスについては、次の
ようになる。制御レジスタのアドレスが8n+4の位置
にあるのは、レジスタを64ビットに拡張することを考
慮したためである。
【0387】
【0388】
【0389】
【0390】
【0391】
【0392】A7−3.制御レジスタの未使用ビット 制御レジスタのうち、使用していないビットについて
は、1を書き込んだ場合にそれをチェックしてEITと
するのが望ましい。しかし、中途半端なチェックを行な
うと、互換性(特に下位チップとの互換性)を保つのが
難しくなること、チェックのためにオーバーヘッドが生
じること、により、PSWを除いて未使用ビットのチェ
ックは行なわないことにする。CTXBFMなど〈〈L
2〉〉の機能を持つレジスタについても、〈〈L2〉〉
が実装されていない場合にはエラーチェックが行なわれ
ないし、書き込んだ値がそのまま読み出されるとは限ら
ない。ただし、チェックが行なわれていなくても、空き
ビットには必ず’0’を入れてもらうように、マニュア
ル等で指導する必要がある。PSWについては、未使用
のビット’−’に’1’を書き込もうとした場合に、予
約機能例外(RFE)とする。
【0393】以下の制御レジスタの内容の説明におけ
る’−’,’=’,’*’のビットの意味は次のとおり
である。 てもらうようにする。 ・IMASK,SMRNG,DI,DCE,CTXBF
Mでは、未使用のビットが’*’になっている。PSW
では、未使用のビットが’−’になっている。それ以外
の制御レジスタでは、未使用のビットは ’=’であ
る。 ・PSB,PSMの未使用フィールドも’−’である。
したがって、LDPSB,LDPSMでも予約機能例外
(RFE)が発生する。 ・’−’のビットの読みだした場合には、’0’が読み
出される。’=’,’*’のビットを読みだした場合に
得られる値は不定である。前に書き込んだ値がそのまま
読み出されるとも限らない。
【0394】A7−4.制御レジスタの内容 PSW 図340に示す Processor Status Word 内容については本文を参照。 PSM,PSB PSWのうち、ユーザのアクセス可能な下位の2バイト
のみを抜き出したもの。LDPSB,LDPSM,ST
PSB,STPSM命令によってアクセスする。制御レ
ジスタのうち、PSB,PSMのみがring0以外か
らアクセスできる。 IMASK 図341に示す PSWのうち、個別にアクセスすることの多いIMAS
Kのフィールドを抜き出して別レジスタとしたものであ
る。IMASKの操作を容易にすることと、性能向上を
狙ったものである。IMASK以外のフィールドには、
何を書き込んでも単に無視される。 SMRNG 図342に示す PSWのうち、個別にアクセスすることの多いSMRN
Gのフィールドを抜き出して別レジスタとしたものであ
る。SM,RNGの操作を容易にすることと、性能向上
を狙ったものである。SMRNG以外のフィールドに
は、何を書き込んでも単に無視される。
【0395】CTXBB 図343に示す Context Block Base CTXBのベースアドレスを指すレジスタ。L DCT
X,STCTX命令で使用される。CTXBBは「本発
明装置」64への拡張を考え、「本発明装置」32でも
8バイトのアラインメントを強制している。したがっ
て、CTXBBの下位3ビットは’===’となる。つ
まり、0にreservedであるが、違反時にも無視
される。 DI(Delayed Interrupt) 図344に示す
【0396】DI(Delayed Interrup
t)は、ソフトウエアによって外部割り込みを発生させ
るメカニズムであり、非同期に発生する各種の処理要求
をペンディングとしたい時や処理順序をシリアライズし
たい時に有効である。優先度の高い外部割り込みの処理
が終わった後で別に起動したい処理がある場合、その要
求をDIに登録しておくことによって自動的に処理が起
動される。DIは、外部割り込みに対してDCEと同等
の処理を行なうものである。REIT命令などによって
PSWのIMASKが変化した場合に、DI<IMAS
KであればDIのEIT処理が起動される。このレジス
タのDI以外のフィールドに何を書き込んでも単に無視
される。
【0397】CSW 図345に示す Context Status Word このレジスタは、コンテキスト毎に切り換えの必要な情
報のうち、ネストの行なわれないものを集めたものであ
る。DCE(Delayed ContextExce
ption)要求を示すDCEフィールドと、CTXB
のフォーマットを示すCTXBFMのフィールドから成
る。CTXBFMの機能は付録8を参照のこと。CTX
BFMの機能がインプリメントされない場合には、DC
EレジスタとCSWレジスタが全く同じ情報を扱うこと
になるので、CSWレジスタもインプリメントされない
(アクセス時RFE)場合がある。この時、CTXBに
置かれるのは、形式的にはCSWレジスタであるが、実
際はDCEレジスタとなる。CSWとDCE,CTXB
FMの関係は、PSWとIMASK,SMRNGの関係
に同じである。CTXBに置かれるのは、DCE,CT
XBFMなどの情報を圧縮したCSWの方である。「本
発明装置」ではDCE=’111’に固定とする。
【0398】DCE 図346に示す Delayed Context Exception CSWのうち、個別にアクセスすることの多いDCEの
フィールドを抜き出して別レジスタとしたものである。
DCEの操作を容易にすることと、性能向上を狙ったも
のである。DCE以外のフィールドには、何を書き込ん
でも単に無視される。CSWレジスタがインプリメント
されない場合、コンテキストスイッチ時にCSWレジス
タの代わりにCTXBとの転送が行なわれるのは、この
DCEレジスタである。この場合、コンテキスト退避の
時は、’*’のビットがすべて0となってCTXBに書
き込まれる。また、コンテキストをロードする時は、’
*’の部分のビットの値はチェックされない。
【0399】CTXBFM 図347に示す Context Block Format CSWのうち、個別にアクセスすることの多いCTXB
FMのフィールドを抜き出して別レジスタとしたもので
ある。CTXBFMの操作を容易にすることと、性能向
上を狙ったものである。CTXBFM以外のフィールド
には、何を書き込んでも単に無視される。このレジスタ
は〈〈L2〉〉である。 EITVB 図348に示す EIT Vector Base EIT (例外、割り込み)ベクトルテーブルの先頭の
物理アドレスを示す。EITVBは 「本発明装置」6
4への拡張を考え、「本発明装置」32でも8バイトの
アラインメントを強制している。したがって、EITV
Bの下位3ビットは’===’となる。つまり、0にr
eservedであるが、違反時にも無視される。
【0400】JRNGVB 図349に示す JRNG Vector Base JRNG命令のベクトルテーブルの先頭の論理アドレス
を示す。JRNGVBによるテーブルのベースアドレス
は、「本発明装置」64への拡張を考え、「本発明装
置」32でも8バイトのアラインメントを強制してい
る。また、JRNGVBのLSBはEnableビット
となっており、Eが0の時にはJRNG実行禁止とな
る。したがって、JRNGVBの下位3ビットは’==
E’で表記されている。’=’のビツトは、0にres
ervedであるが、違反時にも無視される。 SP0〜SP3 図350に示す Stack Pointer for ring3 ring0〜ring3で使用するスタックポインタ。
SPI,SP0〜SP3についてはアラインメントの制
約はなく、LSBまで有効である。 SPI 図351に示す Stack Pointer for Interru
pt 外部割り込み用のスタックポインタ。
【0401】IOADDR,IOMASK 図352に示す アドレス変換を行なわない場合(PSWのAT=00,
10)において、I/O領域の物理アドレスを指定する
レジスタである。通常MMUでアドレス変換を行なう場
合には、PTE中のNCビットによってI/O領域の指
定を行なうが、システムスタート時などでアドレス変換
ができない場合には、IOADDR,IOMASKの2
つのレジスタを使ってI/O領域の指定を行なう。アド
レス変換なしでメモリアクセスをする場合、物理アドレ
スとIOMASKの論理積がIOADDRと等しけれ
ば、そこはI/O領域と見なされる。その領域のデータ
については、データのキャッシュへの取り込みやプリフ
ェッチが行なわれず、命令の要求するメモリアクセスと
実際の物理的なメモリアクセスが1対1に対応する。ア
ドレス変換のある場合には、IOADDR,IOMAS
Kレジスタは使用しない。また、プロセッサのインプリ
メントによってキャッシュやプリフェッチを行なわない
場合には、必ずしもIOADDR,IOMASKレジス
タを使用する必要はない。
【0402】UATB 図353に示す Unshared region Address T
ranslationBase 内容については付録3を参照。 SATB 図354に示す Shared region Address Tra
nslation Base 内容については付録3を参照。 LSID (「本発明装置」では実装しない) 図355に示す Logical Space ID 複数の論理空間の間の区別を行なう番号を入れる。複数
の論理空間に属するTLBや論理キャッシュなどを混在
させる時に、この番号を利用する。LSIDの有効なビ
ット数については、インプリメント依存である。
【0403】付録8.「本発明装置」のCTXB A8−1.CTXBについて 「本発明装置」はMMUをもたないため「本発明装置」
でサポートするCTXBフォーマットをどのようにする
か現在検討中である。OSが、タスク、プロセスなどと
いった並行処理やコルーチンの機能をサポートしている
場合、PCや汎用レジスタなどのハードウエア資源の情
報は、並行処理の単位となるそれぞれのプログラム毎に
別々に持つのが普通である。これらのハードウエア資源
は、プロセッサと同様に時分割で使用されるため、現在
実行中でないプログラムに対するハードウエア資源の情
報は、メモリなどに退避しておく必要がある。「本発明
装置」では、こういった並行処理の単位となるプログラ
ムの流れをコンテキストと呼ぶ。また、それぞれのコン
テキストを実行するために、ハードウエア資源の情報を
メモリ上にまとめて退避したものをContext B
lock(CTXB)と呼ぶ。CTXB自体のおかれる
空間は、LDCTX,STCTX命令のオプションとし
て、論理空間LS、制御空間CSより選択できる。OS
の書きやすさという点ではLSを利用するのが適してい
るが、コンテキストスイッチを特に高速化したい場合
や、コンテキストスイッチ退避用のメモリをチップ内に
設ける場合には、CSを利用することもできる。ただ
し、CSの指定は、将来コンテキスト退避用のメモリを
チップに内蔵した場合に有効に活用されるものであり、
現在は〈〈L2〉〉となっている。また、「本発明装
置」では、現在実行中のコンテキストのCTXBの先頭
アドレスを保持するレジスタが設けられており、これを
CTXBBase Register(CTXBB)と
呼んでいる。「本発明装置」のCTXBのフォーマット
は、次のようになっている。このうちの一部は、LDC
TX,STCTX命令により、ハードウエアでサポート
されている。
【0404】「本発明装置」32での標準CTXBフォ
ーマット 図356に示す 一般に、コンテキストスイッチによって切り換える必要
があるのは、OSのPCや PSWではなく、ユーザプ
ログラムのPCやPSWである。ところが、ユーザプロ
グラムのPCやPSWは、普通はOS呼び出し時にスタ
ック中に退避されている。上記のCTXBフォーマット
において、PC,PSWがスタック中に置かれているの
は、そのためである。SPIを使用した外部割り込みの
処理ハンドラの最後で直接コンテキストスイッチを行な
う場合は、上記のCTXBフォーマットを実現するため
に、PC,PSWを別命令で転送する必要がある。しか
し、この場合はDCE,DIを活用し、外部割り込みか
ら抜ける時にDCE,DIを使ってコンテキストスイッ
チを行なうという方法がある。そうすれば、DCEやD
IでSP0を指定することにより、上記のデータ構造が
自然に実現できる。
【0405】A8−2.CTXBの可変性 CTXBに含まれる情報のうち、’*1’〜’*5’の
付いた部分は、システム構成などによって可変性のある
部分である。これらの点について説明する。CTXBの
内容やフォーマットは、以下のような要因によって動的
に(あるいはコンテキスト毎に)変化することがある。 ・OSの構成やMMUの有無(*1〜*3) OSの構成によっては、コンテキストスイッチでSP1
〜SP3の切り換えを行なっても意味のないケースが考
えられるため、SPI〜SP3を退避したくない場合が
ある。また、MMUを使用しない用途でのコンテキスト
スイッチでは、UATB,LSIDを切り換える必要が
ない。 (*1)JRNG〜RRNGでは、外側のリングが内側
のリングのスタックに退避されるため、現在リングより
も外側のリングのSPの値は意味を持たない。特に、r
ing0でのみ実行されるコンテキストスイッチの時点
では、SP1〜SP3の値が意味を持たない。SP1〜
SP3は、直接あるいは間接にSP0のスタックに保持
されているため、SP0の切り換えによってSP1〜S
P3も間接的に切り換わることになるからである。一
方、TRAPA〜REITの中でコンテキストスイッチ
が起こった場合にはSP1〜SP3の切り換えも必要で
ある。したがって、SP1〜SP3をCTXBに含めた
い場合と、そうでない場合がある。 (*2)MMUを実装しない。〈〈L1R〉〉仕様で
は、UATBは不要である。 (*3)LSIDは、複数の論理空間を区別するための
番号である。LSIDの実装は〈〈L2〉〉なので、L
SIDがCTXBに含まれる場合と、そうでない場合が
ある。
【0406】・退避する汎用レジスタの指定(*4) コンテキストで使用しないレジスタやOSで使用するワ
ーキングレジスタについて、CTXBとの退避、復帰を
行なわなければ、無駄な転送がなくなり、コンテキスト
スイッチ時間が短縮される。 ・コプロセッサ使用の有無(*5) FPUのレジスタは汎用レジスタとは別になるが、これ
もコンテキスト情報として持つ必要がある。したがっ
て、そのコンテキストがFPUを使用しているかどうか
によって、CTXBが動的に変わるケースが生じる。
【0407】以上のようなCTXBのバリエーションに
対処するため、「本発明装置」では、以下のような方法
をとっている。 ・最初のバージョンの〈〈L1〉〉のチップでは、LD
CTX,STCTXでCSW,SP0〜SP3,UAT
Bの転送のみを行なう。R0〜R14については、別命
令LDM,STMを利用して転送し、(*4)に対処す
る。 ・それ以外のCTXBのバリエーションに対しては、現
在のCTXBのフォーマットを識別するレジスタ(CT
XBFM)を導入し、このレジスタによって、CTXB
に何が含まれ、LDCTX,STCTXで何を転送しな
ければならないかを知ることにする。なお、CTXBF
MとDCEの情報を合わせたものは、CSWレジスタと
しても扱われる。
【0408】[CTXBFM]図357に示す [ただし、CTXBFMの詳細は検討中である。]
【0409】〈〈L1〉〉で標準的なフォーマットのC
TXBでは、LDCTX,STCTXにより、CSW
(DCE,CTXBFM)、SP0〜SP3,UATB
が転送される。これは、CTXBFMをすべて0にする
ことによって指定される。LDCTX命令では、CTX
Bからフェッチした新しいコンテキストのCSWの中の
CTXBFMを見て、CTXBの以下の部分のフォーマ
ットを判断し、指定されたものをロードする。また、S
TCTX命令では、現在のCTXBFMの値を見て、指
定されたものをCTXBに退避する。ただし、CTXB
FMの機能は〈〈L2〉〉となっており、将来の拡張で
ある。つまり、CTXB固定の仕様が〈〈L1〉〉,C
TXB可変の仕様(上位コンパチ)が〈〈L2〉〉であ
る。〈〈L1R〉〉のチッブについては、SP1,SP
2,UATBの転送が不要なので、CTXBにもこれら
の値は含めない。CTXBにこれらのレジスタ値が含ま
れているかどうかの識別は、CTXBFMによって行な
うことが可能である。ただし、CTXBFMの実装が重
い場合には、LDCTX,STCTX命令の追加オプシ
ョンにより直接CTXBのフォーマットを指定する仕様
や、LDCTX,STCTX命令の追加オプションによ
りCTXBFMの有効性の有無を指定する仕様にするこ
とも考えられる。
【0410】A8−3.ソフトウエアコンテキスト プロセスやタスク毎に持つ情報の中には、OSがソフト
ウエアによって管理する情報も含まれている。これらの
情報はOSによって一定していないので、当然ハードウ
エア(LTCTX,STCTX命令)ではサポートでき
ない。これらの情報をソフトウエアコンテキストと呼
ぶ。例えば、ITRONの場合、タスク状態、終了時処
理ルーチンのアドレス、例外処理ハンドラのアドレス、
wakeupのカウント、キューの構成のためのリンク
用領域などがソフトウエアコンテキストに含まれる。C
TXBを論理空間(LS)に置いた場合には、汎用レジ
スタなどのハードウエアコンテキストとソフトウエアコ
ンテキストを同じように扱うことができる。しかし、ハ
ードウエアコンテキストとして、CSなどの別空間を使
用した場合には、ソフトウエアコンテキストもCSに置
くか(この場合は、LDC,STCなどの命令が有効で
ある)、あるいは両者をポインタでつないでおいて間接
参照するか、といった方法をとる必要がある。
【0411】付録9. 「本発明装置」のEIT処理 EIT処理の概要は以下のとおりであるが、細部の仕様
は検討中である。通常のプログラム実行の流れをハード
ウェア機構によって中断し、それに割り込むような形で
非同期に起動される処理を、「本発明装置」ではEIT
処理と呼ぶ。EIT処理には、次のようなものが含まれ
る。 ・内部割り込み(トラップ−trap) ・例外割り込み(例外−exception) ・外部割り込み(割り込み−interrupt) トラップ、例外、割り込みの区別は、プログラマから見
たそのEITの発生原因によって行なわれるものであ
り、インプリメント上のメカニズムの違い(スタックに
退避される情報の違いなど)を意味するものではない。
プロセッサが命令実行中にEITを検出すると、シーケ
ンシャルな命令の実行を中断してEIT処理を開始す
る。EIT処理では、EITを検出した時のプロセッサ
の状態をスタックに退避し、EITハンドラを起動す
る。ここまでがプロセッサのハードウエアによって行な
われる。一方、起動されたEIT処理ハンドラでは、E
ITに応じてエラーの回復、エラーメッセージの表示、
エミュレーションなどの処理を行なう。EIT処理ハン
ドラは、ソフトウエアにより実現されるものである。大
部分のEITでは、EIT処理ハンドラの最後でREI
T命令を発行することにより、中断されたもとの命令列
に復帰し、処理を再開することが可能となっている。
「本発明装置」では、将来の機能拡張を考慮し、未定義
の命令、不当な命令についてのエラー検出やエミュレー
ション用のメカニズムを強化する方針である。したがっ
て、命令フォーマットの組み合わせにより不当なオペレ
ーションになる場合や、インプリメントされていない機
能を実行しようとした場合には、できるだけエラーとし
て検出し、例外割り込みを発生する。
【0412】A9−1.EITの種類 「本発明装置」で発生するEITには、次のようなもの
がある。 [メモリ、アドレス関係] ページ不在例外(POE)・・・・・・・ 「本発明装
置」では発生しない Page Out Exception(POE) 命令またはオペランドアクセス時のアドレス変換におい
て、UATB,SATB,STE,PTEのPIビット
が0であった場合に発生する。意味的には、ページ不
在、ページテーブル不在、セクションテーブル不在を含
めたものである。いわゆるページフォールトの例外であ
る。 アドレス変換例外(ATRE) Address Translation Excep
tion(ATRE) アドレス変換中のエラーによって発生する。具体的に
は、STE,PTEでreservedのビットパター
ンを使用していた場合、UATB,SATB,STE,
PTEによって未使用領域となっている部分を参照した
場合、リング保護に違反したメモリアクセスを行なった
場合などに発生する。EIT発生の原因や詳細な情報
は、ATRE発生時にスタックに積まれる情報によって
区別される。
【0413】バスアクセス例外(BAE) Bus Access Exception(BAE) 命令またはオペランドアクセスにおいて、一定時間以内
にバスからの応答がなく、メモリアクセスができなかっ
た場合に発生する。いわゆるバスエラーである。 奇数アドレスジャンプ例外(OAJE) Odd Address Jump Exceptio
n(OAJE) 分岐命令で、分岐先のアドレスが奇数であった場合に発
生する。この例外は、ジャンプ先をオペランドとして直
接指定する命令(JMP,ACB等)、スタックからリ
ターンアドレスを得る命令(RTS,EXITD,RR
NG,REIT)、およびJRNG命令で発生し、EI
T処理の起動時には発生しない。EIT処理起動時に新
PCが奇数であった場合には、システムエラー例外(S
EE)となる。[JRNG,EITは詳細仕様調整中]
【0414】[命令、演算関係] 特権命令違反例外(PIVE) Privileged Instruction Vi
olation Exception(PIVE) ring0以外から特権命令を実行しようとした場合に
発生する。 〈〈L1〉〉機能例外(L1E) L1 function Exception(L1
E) 〈〈L1〉〉機能のインプリメントされていないプロセ
ッサにおいて、〈〈L1〉〉の機能を実行しようとした
場合に発生する。〈〈L1〉〉を実装しているプロセッ
サであれば、この例外は発生せず、このEITに対する
ベクトル番号はreservedとなる。 予約命令例外(RIE) Reserved Instruction Exce
ption(RIE) 現在割り当てられていない命令やアドレッシングモード
のビットパターンを実行しようとした場合に発生する。
いわゆる未定義命令の例外である。「本発明装置」32
で64ビットのサイズを指定した場合、Pビットを1に
した場合、未実装の〈〈L2〉〉命令を実行しようとし
た場合、未定義、未実装のオプションを指定した場合
も、これに含まれる。また、命令によって禁止されてい
るアドレッシングモードを使用した場合 (JMP命令
におけるイミディエート指定など)や、インプリメント
されていない段数の付加モードを使用した場合も、これ
に含まれる。
【0415】予約機能例外(RFE) Reserved Function Excepti
on(RFE) 命令やアドレッシングモードのビットパターン以外で、
将来の拡張のために予約されている機能を利用しようと
した場合に発生する。例えば、PSWに関しては、XA
やreserved(’−’)のビットに1を書き込ん
だ場合、SMRNGのフィールドに reserved
の値(SM,RNG=001など)を書き込んだ場合、
非特権命令のLDPSB,LDPSMによってPSMや
PSBのreserved(’−’)のビットに1を書
き込んだ場合などに予約機能例外(RFE)が発生す
る。このほか、実装されていない制御レジスタをアクセ
スしようとした場合や、WAIT命令でimask≧1
6を指定した場合にも、予約機能例外(RFE)が発生
する。なお、「本発明装置」では、命令ビットパターン
(アドレッシングモードやサイズの指定を含む)のみで
エラーと判定できるものを予約命令例外(RIE)と
し、アドレスやオペランド値によってエラーかどうかの
状態が変化するものを予約機能例外(RFE)としてい
る。
【0416】コプロセッサ命令例外(CIE) Co−processor Instruction
Exception(CIE) コプロセッサが接続されていないのに、コプロセッサ用
に割り当てられた命令を実行しようとした場合に発生す
る。 コプロセッサコマンド例外(CCE) Co−processor Command Exce
ption(CCE) コプロセッサとのインタフェースでエラーがあった場合
に発生する。 コプロセッサ実行例外(CEE) Co−processor Execution Ex
ception コプロセッサの命令実行においてエラーがあった場合に
発生する。
【0417】不正オペランド例外(IOE) Illegal Operand Exception
(IOE) 不合理なオペランドの指定を行なった場合に発生する。
固定長ビットフィールド命令で32(64)ビット以上
のwidthを指定した場合などがこれに含まれる。奇
数アドレスへのジャンプやゼロ除算も意味的には不正オ
ペランド例外の一部と考えられるが、特別な意味を持つ
ために異なる例外に分類されている。なお、「本発明装
置」において命令のオペランドが不当な場合の対策とし
ては、不当オペランド例外やゼロ除算例外とするケース
のほかに、特にチェックを行なわないケース(CHK命
令の上限値と下限値の大小関係など)、適当な解釈をし
てそのまま命令を実行するケース(シフト命令でcou
ntが大きい場合など)、などがある。一方、命令を実
行した結果が不当(オーバーフローなど)な場合には、
EITが起動されることはない。この場合は、V_fl
agをセットして命令を終了するケース(ADD,MO
Vなど多数)、特に何もしないケース(UNPKssで
のオーバーフローなど)、などがある。 10進不正オペランド例外(DDE) Decimal Illegal OPerand E
xception(DDE) 符号付き10進演算命令において、0〜9以外のデータ
をオペランドとして指定した場合に発生する。この例外
も、意味的には不正オペランド例外(IOE)の一部で
あるが、別の例外に分類されている。
【0418】予約スタックフォーマット例外(RSF
E) Reserved Stack Format Exc
eption (RSFE) REIT命令によってEITから復帰する際に、EIT
スタックフレームのフォーマットを示す番号(FORM
AT)が、REIT命令で処理できないものであった場
合に発生する。 リング遷移違反例外(RTVE) Ring Transition Violation
Exception(RTVE) JRNG命令で外側のリングに移ろうとした場合、RR
NG命令で内側のリングに移ろうとした場合など、不当
なリング遷移を行なおうとした場合に発生する。なお、
JRNG命令で参照すべきJRNGVTEを含むページ
が未使用領域となっていた場合には、リング遷移違反例
外(RTVE)ではなくアドレス変換例外(ATRE)
の未使用領域参照エラーが発生する。 ゼロ除算例外(ZDE) Zero Divide Exception(ZD
E) 0除算を行なった場合に発生する。
【0419】[デバッグ] デバッグ例外(DBE) Debug Exception(DBE) デバッグに関係して発生する。具体的には、命令のシン
グルステップ実行やブレークポイントを実現するための
例外であるが、詳細な仕様は〈〈LV〉〉である。 [トラップ] 無条件トラップ命令(TRAPA) TRAPA Instruction TRAPA命令により発生する。TRAPAのEITベ
クトルは、TRAPAのオペランドvectorに対応
して16種類用意されている。 条件トラップ命令(TRAP) Conditional TRAP Instruct
ion TRAP命令により発生する。
【0420】[DCE,DI] 遅延割り込み(DI) Delayed Interrupt(DI) DIレジスタ中のDIフィールドが、PSW中のIMA
SKフィールドよりも小さい値になった場合に発生す
る。このEITは、コンテキストとは独立した非同期の
事象を処理するために有効である。DI処理のEITベ
クトルは、各割り込み優先度毎に15種類用意されてい
る。このEITは、REIT命令などの命令実行によっ
て発生するという点では例外であるが、その時実行中の
コンテキストと関係なく起動されるという意味では割り
込みである。つまり、例外と割り込みの中間的なもので
ある。(IMASKフィールドを含むPSWはコンテキ
スト依存であるが、IMASKフィールドのみはコンテ
キスト独立として運用されるのが普通である。)詳しく
は後の章を参照。 遅延コンテキスト例外(DCE) Delayed Context Exception
(DCE) CSWレジスタ(あるいはDCEレジスタ)中のDCE
フィールドが、PSW中のSMRNGフィールドよりも
小さい値になった場合に発生する。この例外は、コンテ
キストに依存した各種の非同期の事象(入出力の完了な
ど)を処理するために有効である。詳しくは後の章を参
照。
【0421】[その他] リセット割り込み(RI) Reset Interrupt(RI) 外部からのリセット信号により発生する。 システムエラー例外(SEE) System Error Exception(SE
E) EIT処理中に致命的なエラーが起きた場合に発生す
る。 [割り込み] 外部割り込み(EI) External Interrupt(EI) 外部からのハードウエア信号により発生する。EITベ
クトルは外部から指定する。一般に、外部割り込みのチ
ェックは命令の切れ目で行なわれるのが普通である。し
かし、「本発明装置」の場合は、実行時間の上限の決ま
らない高機能命令(任意長ビットフィールド命令、スト
リング命令、QSCH命令)が存在する。これらの命令
では、命令の実行途中であっても外部割り込みを受け付
けるようになっている。 固定ベクトル外部割り込み(FVEI) Fixed Vector External Int
errupt(FVEI) 外部からのハードウエア信号により発生する。EITベ
クトルは優先度毎に一つずつ決まっている。いわゆるオ
ートベクトルの割り込みである。
【0422】以上のEITのうち、予約例外、不正例
外、違反例外の区別は次のような考え方によっている。
予約XXX例外機能拡張によって解消される可能性のあ
るもの将来の機能拡張によって、例外ではなくなる可能
性がある。メーカー間のインプリメントの違いの出る場
合がある。不正XXX例外意味的に明らかにエラーであ
るもの予約例外とは異なり、将来の機能拡張があって
も、永久の例外のままである。メーカー間のインプリメ
ントの違いは出ないところである。XXX違反例外リン
グ保護の観点から実行を制限しているものその他OSや
システム構成上の例外、複数の分類に当てはまる例外な
【0423】A9−2.EITのオペレーション プロセッサがEITを検出すると、以下の手順にしたが
ってEIT処理を行なう。ただし、リセット割り込み
(RI)、システムエラー例外(SEE)については、
これとは違った動作をする。また、以下の説明は「本発
明装置」32に限ったものであり、「本発明装置」64
では、パラメータ等が異なってくる可能性がある。 (E1)ベクトル番号の生成 プロセッサはそのEITに応じたベクトル番号をブロセ
ッサ内部で生成する。ただし、外部割り込みEIの場合
は、プロセッサの外部(周辺LSIなど)からEITベ
クトル番号を得る。
【0424】(E2)EITVTEの読み込み 「本発明装置」では、それぞれのEITに対する処理ハ
ンドラの先頭アドレスと、EITのベクトル番号との対
応を示す表をEITベクトルテーブル(EITVT)と
呼ぶ。また、そのテーブルの一つのエントリをEITV
TEと呼ぶ。「本発明装置」のEITVTEは、EIT
処理の自由度と拡張性を考慮して8バイトとなってお
り、EIT処理ハンドラの先頭アドレス(PC)だけで
はなく、PSWの一部のフィールドもセットすることが
できる。そのため、EITVTEはPC+PSWに準じ
た構成になっている。EITVTEのフォーマットは、
図358のようになっている。 プロセッサは、(EI)で生成したEITベクトル番号
に従い、 の物理アドレスにあるEITVTEを読み込む。
【0425】(E3)PSWの更新 読み込んだEITVTEをもとに、以下のようにPSW
を更新する。 [外部割り込み以外の場合] スタックポインタの選択。 EIT発生前にSPI以外のスタックポインタを使って
いた場合は、VSによってEIT処理ハンドラで使用す
るスタックポインタ(SP0またはSPI)が選択され
る。EIT発生前に既にSPIを使っていた場合には、
VSに関係なく、EIT処理ハンドラでもSPIをその
まま使う。このような仕様になっているのは、EITが
ネストした場合を考慮したためである。 旧RNG==〉新PRNG 00==〉新RNG EIT処理ハンドラは、必ずリング0で実行される。な
お、EITVTEには未使用のビットがあるので、将来
的には、EITによってリング0以外のリングに入るよ
うな指定をすることも可能である。 VX==〉新XA 現在は0に固定されている。 VAT==〉新AT EIT処理ハンドラの実行中は、アドレス変換の有無を
切り換えることができる。 VD==〉新DB EIT処理ハンドラの実行中は、デバッグの環境を切り
換えることができる。 min(VIMASK,旧IMASK)==〉新IMA
SK 例外割り込みや内部割り込みによるEITの場合でも、
EIT処理でIMASKを操作することができる。この
機能を使えば、EIT処理に入るのと同時に外部割り込
みを禁止することができる。したがって、EIT処理と
不可分に何らかの処理(例えばEITによって生成され
たスタックフレームの転送など)を行ないたい場合に、
この機能が有効である。
【0426】[外部割り込みの場合] この部分のみ外部割り込み以外の場合とは異なってい
る。この機能により、優先度の低い多重割り込みを禁止
することができる。なお、割り込みマスクの機能によ
り、 発生した外部割り込みの優先度<旧IMASK という関係が成立しているはずである。
【0427】(E4)プロセッサ情報のスタックへの退
避 EIT発生前の旧PC、旧PSW、および発生した E
ITに関する各種の情報(EITNF−EITベクトル
やスタックフォーマットなどを含む)をスタックに退避
する。この退避に使用されるスタックは、新SMと新R
NG(=00)により選択されるスタックである。この
時に生成されるスタックフレームは、図359のように
なる。このうち、EITINFは、発生したEITによ
り生成されるスタックフレームのフォーマット(FOR
MAT)、EITのタイプ(TYPE)、EITのベク
トル番号(VECTOR)などの情報を32ビットに詰
めたものである。追加情報の有無や内容は、EITの種
類によって異なる。REIT命令では、EITINF中
のFORMATを見ることによって追加情報の有無やそ
のフォーマットを知り、EIT発生前のもとの命令列に
戻るための情報を得る。なお、「本発明装置」64にな
った場合に生成されるEITのスタックフレームは、旧
PCで1ロングワード、旧PSWとEITINFを合わ
せて1ロングワード、という構成になる予定である。E
ITINFをPSWに隣接した場所に置いたのは、「本
発明装置」64でのアラインメントの維持を考慮したた
めである。また、PSWをスタックトップに置いたの
は、将来「本発明装置」64で、32ビットのコンテキ
ストと64ビットのコンテキストが混在した場合でも、
スタック中に退避されたPSW中のXAビットが読み出
せるようにするためである。
【0428】(E5)EIT処理ハンドラの起動 VPCをPCに転送し、EIT処理ハンドラを起動す
る。なお、命令プリフェッチにおいて発生した EIT
は、フェッチしようとした命令が必要になるまでEIT
処理が遅らされる。これに対して、EIT処理ハンドラ
の最後に置かれたREIT命令では、次のような処理を
行なってもとの命令列に復帰する。
【0429】(R1)スタックからの読み込み スタックより、旧PSWとEITINFを読み込む。読
み込んだPSW中のXAビットが0であれば、EITを
発生したコンテキスト(タスクやプロセス)が32ビッ
トのコンテキストであったということがわかるので、続
いてスタックより32ビット幅で旧PCを読み込む。な
お、「本発明装置」、32では、すべてのコンテキスト
が32ビットのコンテキストである。さらに、EITI
NF中のFORMATにより追加情報の有無を判定し、
追加情報があれば、スタックからそれを読み込む。追加
情報には、EXPC,IOINF,ERADDR,ER
DATA,SPIなどがあるが、その詳細な意味はイン
プリメント依存である。FORMATがプロセッサのサ
ポートしていない値(EITで発生するはずのない値)
であった場合は、予約スタックフォーマット例外(RS
FE)となる。
【0430】(R2)PSWの復帰 スタックから読み込んだ旧PSWにより、PSWの全フ
ィールド(SMRNG,XA,AT,DB,IMAS
K,PSM, PSB)をEIT発生前の値に復帰す
る。この時、旧PSWがreservedの値を含んで
いた場合には、予約機能例外(RFE)を発生する。 (R3)ストアバッファの再実行(インプリメント依
存) FORMATと追加情報の値によっては、REIT命令
の中で、前回EITを発生したストアバッファによるラ
イトサイクルの再実行を行なう場合がある。この時、ラ
イトサイクルの実行に必要なアドレスとデータの情報と
しては、スタック上の追加情報の中にあったERADD
RとERDATAが使用される。詳しくは、EITのタ
イプの説明の項を参照。なお、ストアバッフアのみを再
実行する機能があるかどうかということは、プロセッサ
のインプリメント上の問題である。すなわち、REIT
命令のストアバッファ再実行機能を前提としてEIT処
理が作られている場合には、当然REIT命令でそれを
サポートする必要があるし、ストアバッファのみの再実
行機能が無くても矛盾のないEIT処理が実現できてい
れば、REIT命令でそれをサポートする必要はない。
プログラマから見た場合は、EIT処理とREIT命令
による処理がきちんと対応しており、REIT命令によ
ってEIT処理から戻った時に、EITを発生した命令
列が矛盾なく実行を続けられれば良いのである。この機
能の有無と、プロセッサとしての機能の高低とは直接関
係しない。
【0431】(R4)EIT検出時に実行していた命令
列への復帰 スタックから読み込んだ旧PCをPCに復帰し、PCの
示す命令から実行を再開する。この時、EITINF中
のTYPEフィールドによって、次に受け付けられるE
ITのタイプを変化させている。この機能は、多重EI
Tの処理を矛盾なく行なうために、また命令のシングル
ステップ動作を、エミュレーションによる実行を含めて
正確に行なうために利用される。なお、EITINFの
VECTORフィールドは、REIT命令では特に使用
されない。にもかかわらずVECTORがEITINF
に含まれているのは、EIT処理ハンドラのプログラム
に対して情報を提供するためである。
【0432】A9−3.EITのタイプ 「本発明装置」のEITを、EIT処理ハンドラ終了後
の実行再開時のPCの位置と、EIT処理の優先度に着
目して分類すると、以下のようになる。この分類は、E
ITINFのTYPEフィールドの値にそのまま対応す
る。 [命令中断型EIT(TYPE=0,PC不定)]この
EITが発生すると、直ちにそれが検出され、EIT処
理に入る。このEITが発生した場合、EITを発生し
た命令系列に復帰することはできない。これに該当する
のは、RI,SEEである。 [命令完了型EIT(TYPE=1〜3,PC次命
令)]このEITが発生すると、その時実行中の命令処
理が完了した後でそれが検出され、EIT処理に入る。
一般には、このEITに対するEIT処理ハンドラの最
後でREIT命令を実行することにより、EIT発生時
に実行していた命令の次の命令から、命令の実行を再開
できる。なお、TYPE=1〜3の区別は、優先度など
の関係によるものである。これに該当するのは、TRA
P,TRAPA,DBE,DI,DCEなどである。 [命令再実行型EIT(TYPE=4,PC現命令)]
このEITが発生すると、プロセッサやメモリの状態
は、EIT発生時に処理していた命令の実行開始前の時
点に戻される。一般には、このEITに対するEIT処
理ハンドラの最後でREIT命令を実行することによ
り、EIT発生時に実行していた命令から、命令の実行
を再開できる。これに該当するのは、POE,ATR
E,BAE,RIE,RFE,PIVE,IOEなどで
ある。
【0433】命令完了型のEITは、以前実行していた
命令に関するEITであり、命令再実行型のEITは、
現在実行中の命令に関するEITである。したがって、
複数のEITが同時に発生した場合には、一般に命令完
了型のEITを先に処理する必要がある。また、命令中
断型のEITは重要度の高いEITであり、これが検出
された場合には、他のEITを処理することは無意味で
ある。したがって、命令中断型のEITと他のEITが
同時に発生した場合には、命令中断型のEITを先に処
理する必要がある。結局、複数のEITが同時に発生し
た場合の優先度は 命令中断型>命令完了型>命令再実行型 となり、EITINFのTYPE=0〜4が、そのまま
EITの優先度を表わすことになる。EITの種類とT
YPEとの対応は、RI,TRAPのように明確に決ま
っているものもあるが、ある程度はインプリメント依存
の部分がある。したがって、ソフトウエアでEITの要
因を分析する際には、できるだけTYPEのフィールド
を参照したり、書き換えたりしない方がよい。
【0434】例えば、ページ不在例外(POE)の場
合、これは命令再実行型のEITであり、TYPE=4
となるのが普通である。しかし、メモリの書き込みにス
トアバッファを用いるようなインプリメントのプロセッ
サにおいて、命令の最後の書き込みサイクル(ストアバ
ッファ使用)でPOEが発生した場合には、この命令全
体を最初から再実行しなくても、最後の書き込みサイク
ルのみやり直せば処理上の矛盾は生じない。そこで、こ
のようなケースでのPOEを命令完了型のEITとし、
エラーを発生した最後のライトサイクルの処理はREI
T命令の中で行なうという場合がある。この場合は、P
OEでもTYPE=1となる。また、EIT処理でスタ
ック積まれるPCは、POE発生命令ではなく次の命令
になる。命令再実行方式に忠実にしたがう限り、命令実
行中にエラーが発生した場合は、命令実行前の状態に戻
してTYPE=4のEITを起動するというのが原則で
ある。しかし、命令がもう少しで終了するというところ
でエラーが発生した場合には、一応命令を終わったこと
にしてTYPE=1のEITを起動し、残りの処理(ス
トアバッファのライトサイクル)はREIT命令に任せ
るというインプリメントも可能なのである。このような
インプリメント方法をとるのであれば、POEのTYP
Eが1と4の2通りになる。この場合、TYPEの違い
によってREIT命令で必要となる処理が変わってくる
ので、REIT命令はそれに対応できるようになってい
なければならない。この方法では、命令最後のライトサ
イクルで発生したエラーによるEITに対して、命令全
体を再実行するのではなく、最後のライトサイクルのみ
を再実行するという形になっている。つまり、一種の命
令継続実行方式になっている。この場合、命令継続実行
のために退避される内部情報に相当するのが、EITの
追加情報としてスタック上に退避されるERADDRや
ERDATAである。なお、ストアバッファを用いた書
き込みサイクルで発生するEITの場合、その書き込み
を行なった命令の直後にEIT処理に入るとは限らな
い。
【0435】A9−4.EITのスタックフォーマット EITの検出にともなって、EIT処理に必要な情 が
スタックに退避される。そのスタックフォーマットは図
360の通りである。 この内、「その他の情報」は各EITのスタックフォー
マット番号に応じて異なり、EITの要因を解析するた
めの情報、EITハンドラから復帰するための情報が含
まれている。スタックフォーマット番号に応じたスタッ
クフォーマットを図361に示す。
【0436】フォーマット番号0:予約命令例外、予約
機能例外、予約スタックフォーマット例外、リング遷移
違反例外、〈〈L1〉〉命令例外、コプロセッサ命令例
外、特権命令違反例外、不正オペランド例外、固定ベク
トル外部割り込み、遅延割り込み例外、外部割り込み。 フォーマット番号1:バスアクセス例外、アドレス変換
例外。 フォーマット番号2:デバッグ例外、奇数アドレスジャ
ンプ例外、ゼロ除算例外、条件トラップ命令、トラップ
命令。 フォーマット番号3:DBG外部割込み、DBGトラッ
プ命令、DBGデバッグ例外、DBGアクセス違反例外
(つまりDBG EIT専用)
【0437】EXPCは次のような目的で導入されたも
のである。 ・エラー解析情報の提供 −ストアバッファの書き込みの際にTYPE=1のEI
Tが発生したような場合、その書き込みを行った命令を
指しているのが EXPCである。PCは先に進んでし
まっている。 −デバッグ例外では、PCは次の命令を指し、EXPC
は前の命令を指している。したがって、例えば、ジャン
プ命令実行時にデバッグ例外を起動するようにした場
合、EXPCによってジャンプ前のPCの値を、PCに
よってジャンプ後のPCの値を知ることができる。 ・多重EITの処理 −TYPE=1のTRAPAなどのEITの場合は、そ
の処理ハンドラの中でEXPCの情報が必要になること
はない。しかしながら、TYPE=1のEIT(TRA
PAなど)とTYPE=2の EIT(デバッグ例外な
ど)が同時に発生した場合、TYPE=1のEITにお
いて、TYPE=2で使用するEXPCを退避しておか
なければならない。TRAPAでもEXPCを退避する
ような仕様になっているのは、このためである。この場
合、TRAPAの処理に対するREIT命令実行後のE
XPCは、REIT命令の先頭を指すのではなく、スタ
ックからポップした旧EXPCの値を復帰したものにな
っていなければならない。すなわち、REIT命令の直
後になっていたデバッグ例外を起動した直後にペンディ
ングになっていたデバッグ例外を起動した場合、スタッ
クに退避されるEXPCは、REIT命令を指すのでは
なく、TRAPA命令を指すものでなければならない。
(なお、この例は、TRAPAのEITVTEでデバッ
グ例外をマスクすることを想定したものである。)
【0438】また、IOINFの構成は図362のよう
になっている。
【0439】A9−5.「本発明装置」のEITベクト
ル・テーブル 図363、図364に示す リセット割込みとDBGモードのEIT(No.0〜
5)に関するEITテーブルのエントリはSPI値とP
C値で構成される。その他のEITに関するEITテー
ブルのエントリはPSW値とPC値で構成される。EI
TVBのリセット時の初期値は’FFFFF000’で
あるため、リセット割込みでは物理番地の’FFFFF
000’からエントリ(SPI,PC)がフェッチされ
る。
【0440】A9−6.EIT処理中のエラー EIT処理中(EIT発生から状態の退避を経て新PS
Wの設定まで)に、別のEITが発生するような重大な
エラーが起きた場合には、システムエラー例外(SE
E)となる。システムエラー例外(SEE)となる可能
性があるのは、EITVTEの読み込みに伴うバスアク
セス例外、旧PC 、旧PSWの退避に伴うスタックの
ページ不在例外、アドレス変換例外などである。また、
EITVTEのVPCを含むワードのLSBが’1’で
あった場合にも、システムエラー例外(SEE)とな
る。システムエラー例外(SEE)の発生は、SPI,
SP0のどちらかのスタックを使用するかということに
は関係しない、SP0のスタツクでページ不在例外が起
った場合にも、SPIのスタックに切り換えてあるいは
ページ不在例外のEITVTEで指定されるスタックに
切り換えて)、EIT処理中を継続するという仕様にな
っていない。一方、JRNGによるリング遷移はEIT
でないので、JRNGの処理中にページ不在例外が起っ
た場合には、ページ不在例外のEITVTEで指定され
るスタックを使って、ページ不在例外のEIT処理中を
行うことになる。この点で、EIT処理中に含まれるT
RAPAとEIT処理中に含まれないJRNGでは、シ
ステムエラーとなるまでのステップが一段異なっている
ので、注意が必要である。(図365参照) いずれにしても、OSを作る場合には、SPIにより指
定されるスタック領域はメモリ常駐とし、SP0により
指定されるスタック領域も、特殊な使い方をする場合を
除けばメモリ常駐となるようにプログラミングする必要
がある。
【0441】A9−7.多重EIT TYP=0のEITを除けば、EITの検出とそれに対
する処理は、各命令の切れ目で行われる。したがって、
場合によっては、命令の切れ目において複数のEITが
同時に検出される可能性がある。これを多重EITと呼
ぶ。ここでは、多重EITの処理順序について説明す
る。例えば、TYP=0のTRAPAとTYP=3の外
字割り込み(EI)が同時に発生した場合、まずTRA
PAに対するEIT処理中が行なわれ、引続きEIに対
するEIT処理中が行なわれる。その結果、PC,PS
Wとスタックの状態は図366のようになる。したがっ
て、この例では、EIT処理中終了後にまずEIの処理
ハンドラが実行される。EIの処理ハンドラが終了した
後は、その最後に置かれたREIT命令により、一段浅
いレベルにあるTRAPAの処理ハンドラに移る。つま
り、優先度の高いTRAPA処理ハンドラの方が後回し
になるわけである。ただし、上の例ではTRAPAのE
IT処理中が先に行われるため、そこでPSWを変更し
てEIをマスクすることができる。つまり、TRAPA
のEITVTEで VIMASK < EIの優先度 となるような指定を行っておけば、TRAPAのEIT
処理中でIMASKが変更され、EIに対するEIT処
理中は行なわれなくなる。この場合は、TRAPAの処
理ハンドラが実行される。そして、ハンドラの最後のR
EIT命令でIMASKが元の値に戻った時に、マスク
されていたEIが起動されることになる。このように、
優先度の高い(TYPEの小さい)EIT処理中におけ
るPSWの更新によってマスクされるEITには、DB
E,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であるため、他のEI
Tに対する処理が終わった後でもう一度同じ命令を実行
すれば、再び同じEITが発生する。命令実行型(TY
P=4)のEITが最も低い優先度になつているのは、
このためである。したがって、多重EITの場合には、
TYP=4のEITの処理は行う必要がない。TYP=
4のEIT起動要求は、同時に発生しTYP=1〜3の
EITの検出に伴ってキャンセルされる。REIT命令
実行直後に受け付けられるEITとは異なっている。R
EIT命令では、スタック中からポップされたEITI
NFの中のTYPEによって、REIT命令終了直後に
受け付けるEITを調整している。REIT命令実行後
に受け付けられるEITのTYPEは図367の通りで
ある。このうち、TYPE=2はデバッグ例外(DB
E)である。つまり、デバッグ例外に対するEIT処理
中ハンドラのREIT命令実行直後には、デバッグ例外
を受け付けないということを意味している。
【0442】REIT命令実行直後かどうかによって、
TYPE=2のデバッグ例外の扱いが異なっているの
は、1命令毎のシングルステップ実行を行うためであ
る。この場合、デバッグ例外に対する REIT命令の
直後で再びデバッグ例外を起こしていたのでは、被デバ
ッグプログラムの実行が全く進まずに、デバッグ例外の
みが続けて発生するという状況になってしまう。したが
って、上記メカニズムにより、REIT命令の直後では
デバッグ例外を発生せず、1命令実行してからデバッグ
例外を発生するようにしているのである。一般に、シン
グルステップ実行を行う場合には、次に命令を実行する
か、デバッグ例外を起動するかの二つの内部状態を持つ
必要がある。「本発明装置」では、この二つの状態を、
REIT命令実行直後かどうかといった内部状態と、E
ITのTYPEとの組み合せによって表現していると考
えられる。なお、この考え方によるシングルステップ実
行は、デバッグ例外と同時にほかのEITが発生した場
合にも適用できる。予約命令例外(RIE)のEIT処
理中ハンドラで命令エミュレーションを行う場合は、他
のEIT(ページ不在など)に対する処理ハンドラとは
異なり、RIEの処理ハンドラの前後でデバッグ例外を
起動しなければならない。例えば、シングルステップ実
行後に通常命令→デバッグ例外→ページ不在例外であれ
ば次は通常命令を実行する必要があるが、通常命令→デ
バッグ例外→予約命令例外(エミュレーション)であれ
ば次はデバッグ例外の起動となる。これは、ページ不在
例外がデバッガやデバッグ対象プログラムにとって全く
見えないものであるのに対して、エミュレーション例外
は、デバッガ対象プログラムにとって「一命令の実行」
として見えるはずのものだからである。「本発明装置」
の場合は、予約命令例外の EIT処理中ハンドラの中
でEITINFのTYPEを調整することにより、以上
のようなことが可能である。
【0443】A9−8.「本発明装置」のDI A9−8−1.DIのオペレーション 「本発明装置」のDI(Delayed Interr
upt)は、DIレジスタ中のDIフィールドがPSW
中のIMASKフィールドよりも小さい値になった場合
に発生するEITである。この機能は、コンテキストと
は独立した非同期の事象をペンディングとして処理要求
だけを登録したり、処理順序をシリアライズしたりする
時など有効なものである。DI処理のEITベクトル
は、各割り込み優先度毎に15種類用意されている。I
MASKの値と、そのフラッグ変化のその時に許可され
る外部割り込みとの関係は、図368のようになってい
る。DIを起動するかどうかのチェックをする必要があ
るのはIMASKが大きくなった時、またはDIが小さ
くなった時である。したがってこれに該当するのは、 の各指令である。このうち、LDC src,@di以
外の場合には、これらの命令を実行する前のDIフィー
ルドの値が、起動されるDIのレベル(優先度)とな
る。DIのレベルは、DIとして起動されるEITのベ
クトル番号に影響する。また、LDC src,@di
によってDIが起動された場合には、LDC実行前のD
Iフィールドの値ではなく、LDCによって新しくセッ
トされたDIフィールドの値(つまりsrc)が起動さ
れるDIのレベルとなる。なお、EIT起動時(外部割
り込み、例外、TRAPすべて含む)にもIMASKの
変化するところがあるが、この場合にはIMASKの値
が大きくなることはないため、DIは起動されない。D
Iが起動された場合、DIフィールドは1111(要求
なし)にリセットされる。また、IMASKフィールド
は、受理されたDIのレベルを優先度とする外部割り込
みが発生したのと同じ変化をする。つまり、min(V
IMASK,受理されたDIのレベル)==〉新IMA
SKとなる。
【0444】A9−8−2.DIの使用例 [例;本発明装置の遅延ディスパッチ(delayed
dispatch)]本発明装置では、外部割り込み
処理ハンドラの中から発行したシステムコールによって
レディキューの状態が変わった場合に、それに伴うディ
スパッチング(レジスタの入れ替えなど)が割り込み処
理ハンドラから戻るまで遅らされる。これは、多重割り
込みに伴う矛盾を避けるためである。これをDIの機能
によって実現する。 前提条件 ・システムコールはTRAPAのEITVIEでは、V
IMASKでは、VIMASK=14を指定しておく。
これは、DI機能によって、システムコール処理の最後
のディスパッチングを行うためである。 ・ディスパッチングの処理を行う部分は、DI14に
よって起動される。
【0445】
【数18】
【0446】一般のシステムコール処理 図369に示す。 外字割り込み処理ハンドラからのシステムコール 図370に示す。DIの機能を使えば、本発明装置の遅
延ディスパッチの処理をすなおに実現することができ
る。また、多重割り込みやシステムコールのネストが起
こった場合にも容易に対処できる。
【0447】A9−9.本発明装置のDCE A9−9−1.DCEのオペレーション 本発明のDCE(Delayed Context E
xception)は、DCEレジスタ(またはCSW
レジスタ)中のDCEフイールドよりも小さい値になっ
た場合に発生するEITである。この機能は、コンテキ
ストに関連した非同期の事象(入出力の完了など)の処
理をペンディングとして処理要求だけを登録したり、処
理順序をシリアライズしたりする時などに有効なもので
ある。DCEレジスタ(またはCSWレジスタ)中のD
CEフィールドは、DCE要求を入れるためのフィール
ドは、DCE要求を入れるためのフィールドである。D
CEレジスタ(またはCSWレジスタ)はコンテキスト
毎に固有のレジストであるため、コンテキスト毎に別々
のDCE要求を与えることが可能である。DCEは各コ
ンテキストに付随したものであるから、コンテキストと
は独立した外部割り込みの処理中(SM=0の場合)に
は、DCEは起動されない。また、他のコンテキストA
でより高い優先度のDCE要求が出ていても、そのコン
テキストAにディスパッチされない限り、コンテキスト
AのDCEは起動されない。別のコンテキストBで出て
いるDCE要求がそれより低い優先度あつたとしても、
コンテキストBに先にディスパッチされれば、コンテキ
ストBのDCEが先に起動される。DCEフィールドの
値と、その時に起動されるDCEとの関係は図371の
ようになっている。いずれの場合にも、SMRNG>D
CEとなつた時にDCEが起動される。(reserv
ed)の指定をした場合、実際にはDCE=000と同
じ動作をする。ただし、将来の拡張のため、この機能を
利用したプログラミングを行なってはいけない。
【0448】DCEの起動される可能性があるのは、S
MRNGが大きくなつた時、またはDCEフィールドの
値が小さくなった時である。したがって、この条件に該
当する以下の命令において、DCEを起動するかどうか
のチエックをする必要がある。 なお、EIT起動時(外部割り込み、例外、TRAPす
べて含む)やJRNG実行時にもSMRNGの変化する
ことがあるが、EITやJRNGの場合はSMRNGの
値が大きくなることはないため、DCEが起動されるこ
とはない。DCE自体は、一つのEIT処理として起動
される。DCEのEITが起動された場合、DCEフィ
ールドは111(要求なし)にリセットされる。SMR
NGフィールドは、一般のEIT処理と同じように、D
CEのベクトル番号に割り当てられたEITVTEにし
たがって変化をする。DCEはコンテキスト毎の処理で
あるため、起動されたEIT処理ハンドラでは、SPI
ではなくSP0を使用するのが普通である。EITVT
Eの設定によっては、DCE処理でSM=0(SPI使
用)に入ることも可能であるが、これは運用上の問題と
して対処し、ハードウエアでは特にチエックは行なわな
い。REIT命令やRRNG命令によつてDCEが起動
された場合、実際にDCEを起動する処理はREITや
RRNGと同時に行なわれてもよいが、動作仕様上は、
一旦REITやRRNGの実行が終わってからEITを
起動するという形になる。たとえば、DCE=110の
時にRRNGでring1からring3に戻ると、そ
こでDCEが起動されてring0に入る。この時、P
RNGはring1ではなくring3となっていなけ
ればならない。DCEとDIや外部割り込みを比較する
と、図372のようになる。入出力の完了通知などの場
合には、外部割り込み処理ルーチンの中で、該当するコ
ンテキストDCEを起動するという流れになることもあ
る。DCEをソフトウエアによってシミュレーシヨンす
ることは不可能ではないが、一般には、スタック上に退
避されたPSWやPCの変更をしなければならないた
め、かなり面倒である。割り込んだプログラムが、割り
込まれたブログラムのスタックフオーマツトをすべて知
っていなければならないからである。
【0449】A9−9−2.DCEのネスト DCEは多重ネストができるとより効果の大きいものに
なる。したがって、DCE要求が複数発生した場合に、
どのような処理をするかが問題となる。本案装置では、
ネストの処理(要求のキユーイング)はソフトウエアで
行なう方針である。 <<複数のDCE要求のキューイング処理例>>
【0450】A9−9−3.DCEの使用例 〔例;入出力管理プログラムの起動〕外部割り込みによ
って入出力完了が通知され、それによつて、プロセスA
の入出力管理部(ring1)がプロセスAに対して非
同期に起動されるものとする(図373参照)。
【0451】
【数19】
【0452】の開始アドレスはプロセス(コンテキス
ト)毎に指定されるべきものだが、実際にはDCEのE
IT処理ベクトルがプロセス間で共通であるため、OS
でプロセス毎のDCE要求テーブルを解析し、そこへジ
ヤンプする必要がある。この図の場合は、外部割り込み
が発生した時にたまたまプロセスAが実行中だつたわけ
である。他のプロセスの実行中に入出力の外部割り込み
が発生した場合、ring1の入出力管理部の起動は、
プロセスAへのデイスパッチが行なわれるまで遅延させ
られる。
【0453】付録10.本発明装置の命令ビットパター
ン 〔表記法に関する注意〕命令ビットパターンの表記は、
次のように行なう。
【0454】A10−1.命令のフォーマット別ビット
割り当て 〔ビット割り当てに関する注意〕 ・本発明装置では使用できるアドレッシングモードが命
令毎にかなり異なっており、そのチェックをする必要が
ある。チェックを容易にするため許されるアドレッシッ
グモードが区別しやすいようにビットパターンの割り当
てを行なう。特定のアドレッシングモードを禁止してい
るオペランドの場合は、原則としてそれがそのオペラン
ドを含むハーフワードだけで分かるようになっている。 ・Pビットは、原則としてオペランド毎(レジスタ直接
指定とイミディエート指定を除く)、および暗黙のスタ
ック参照について一つずつ独立に入れる。命令パターン
中では、’P’または’Q’で表す。ただし、一般形の
命令でカバーできる場合は、同じ命令の短縮形ではPビ
ットが入らないこともある。(PUSH,POP,PU
SHAのみは、スタック参照に関するPビットがな
い。) ・ビットパターンのうちLVreservedで示され
ているものは、各メーカーで自由に使用してよい命令ビ
ットパターンである。この命令ビットパターンは、例え
ばICEとのインターフェースを行なうための、ユーザ
に解放しない命令として利用することができる。以下図
374〜図385に示す。
【0455】A10−2.予約命令例外の検出について 上記のビットパターン中で{RIE}で示されたパター
ンは、将来の拡張のために予約された(reserve
d)のビットパターンである。この命令ビットパターン
を実行すると、予約命令例外(RIE)は発生する。こ
のほか、インプリメントされていないオプションやサイ
ズ(未実装の〈〈L2〉〉を含む)を指定した場合、未
定義のオプションを指定した場合、命令ビットパターン
の’−’の部分を’1’にした場合、命令ビットパター
ンの’+’の部分を’0’にした場合、命令中の’
P’,’Q’のビットを’1’にした場合、reser
vedの条件(cccc)や終了条件(eeee)を指
定した場合にも、すべて予約命令例外(RIE)とな
る。現在、LDATE,MULXなどの例外を除けば、
原則として第一〜第四バイトについてはすべての命令パ
ターンをチェックし、パターンが違っている場合には、
RIEにしている。第五、第六バイトについてはチェッ
クを行わず、パターンが違っていてもエラーとはしてい
ない。上記のビットパターンのうちで、特に{RIE−
X}で示したものは、第一HWが汎用アドレッシングモ
ードを含み、第二HWまで読まないとRIEであること
がわからないビットパターンである。この場合は、第一
HWのEaの拡張部の後に第二HWが置かれる。現在使
用していないビットパターンのうち、将来の機能拡張に
ともなって実装の予定のあるパターンや、他のメーカー
のチップと動作の異なりそうなパターンについては、特
に積極的に検出を行なうべきである。これは、その命令
パターンを実行した場合の間違いを防ぐためである。こ
のような方針に基づいた場合、予約命令の例外(RI
E)のチェックの優先度は次のようになる。
【0456】↑高優先度 (既に意味が決まっているもの) 未定義の〈〈L2〉〉機能の指定 64ビットサイズの指定(RR,MM,WW,SS=1
1) (命令の拡張に利用される可能性の高いもの) {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だけでEITを起動するこ
とが明らかである場合にも、第二HWまで読んでもよ
い。また、オペコード部だけでEITを起動することが
明らかである場合(予約命令例外など)に、Eaの拡張
部まで処理しても構わない。
【0457】A10−3.オペランドフィールド名索引 図387、図388に示す。
【0458】A10−4.アドレッシングモードのビッ
ト割り当て 共通ビットパターン ・サイズ関係 ・アドレッシングモード ・レジスタ指定
【0459】付加モード 〈d4〉のサイズ指定部分とMISCモードのdis
p:16,disp:32の指定部分が同じビット位置
になっている。
【0460】基本モード ・***1 ****のパターンの時には拡張部が付か
ない。 ・@ads:64の割り当てが変則的であるが、64ビ
ット拡張部に対しては、おそらく内部の回路でも特殊な
扱いが必要であると思われる(例えば、本発明装置でも
@(disp:64,Rn)は基本モードで実現でき
ない)ので、それほど問題ではないと思われる。むし
ろ、付加モードとの関係が統一的になるようにした。
【0461】未定義のアドレッシングモードを指定した
場合(EA中のPビット=1を含む)には、予約命令例
外(RIE)となる。具体的には、以下のパターンの場
合にRIEとなる。 付加モードでリザーブのパターンを指定した場合にも、
予約命令例外(RIE)となる。M=1で〈Rn〉≠0
000,0001の場合、D=1で〈d4〉≠000
1,0010以外の場合、P=1の場合、XX=11の
場合もこれに含まれる。付加モードのある段で、PCに
対して、×2、×4、×8以外のスケーリングを指定し
た場合には、その段の終了処理後の中間値として、イン
プリメントに依存した不定値が入る。EITにはならな
い。〈〈L2〉〉未定義で、5段以上の付加モードを指
定した場合にも、予約命令例外(RIE)となる。〔詳
細調整中。予約機能例外RFEとなる可能性もある。〕 命令によって使用できないアドレッシングモードの組み
合わせを指定した場合(JMP #imm_data,
CMP#0,#1など)にも、予約命令例外(RIE)
となる。〈〈L2〉〉未実装のために実行できない組み
合わせを指定した場合も、これに含まれる。(これに当
てはまるものは、レジスタ指定のビットフィールド命令
である。)
【0462】A10−5.命令オプションのビット割り
当て いずれの場合にも、最初に記述した方(オプション値が
0,00..の方)がアセンブラでのデフォルトにな
る。
【0463】A10−6.Bcc命令、TRAP/cc
命令の条件指定(cccc) ccccの値の割り当ては、図389のようになる。
【0464】A10−7.終了条件の指定(eeee) eeeeの値の割り当ては、図390のようになる。0
000〜0101については、cccc(Bcond命
令の条件指定)のビットパターンに意味を合わせてあ
る。特に、LTU,GEUは、SUBX命令などにおい
て、オペランドを符号なしデータと考えた場合の比較結
果がX_flagに反映されるのに合わせたものであ
る。なお、〈〈L2〉〉の終了条件のうち、二つの条件
が.or.で結ばれているものについては、そのうちの
いずれの条件で終了したかを示すために、M_flag
を使用する。M_flagがセットされるのは、原則と
して R4との比較によって終了した時であり、具体的
には図391のような場合である。M_flag=1の
条件を満たさなかった場合、および、これ以外の終了条
件で終了した場合には、M_flag=0となる。
〈〈L2〉〉の終了条件をインプリメントしない場合に
は常にM_flag=0となるが、その場合でも、将来
はM_flag≠0となる場合が生じるということを、
マニュアルに明記しておくのが望ましい。
【0465】A10−8.BVMAP命令の演算コード R5の下位4ビットに入れる演算コードである。これを
図392に示す。
【0466】A10−9.アドレッシングモード対応 各命令のオペランドと、禁止されているアドレッシング
モードモードとの対応を図393〜図395に示す。○
の組み合わせに対しては、そのアドレッシングモードモ
ードが使用可能である。×の組み合わせに対しては、そ
れを実行しようとした場合に予約命令例外(RIE)が
発生する。
【0467】付録11.高機能命令の詳細仕様と終了時
のレジスタ値 各命令の解説の項では、高機能命令の詳細や終了時のレ
ジスタ値について明確に述べられていないので、ここで
まとめて説明を行なう。
【0468】A11−1.高機能命令の仕様決定の方針 SMOV/B,SCMP/B,BVMAP/B,BVC
PY/Bでは、@−SPとの対応などからプリデクリメ
ントの形で処理を行なうという考え方と、SMOV/
F,SSCH/Rなどとの整合性からポストデクリメン
トの形で処理を行なうという考え方とがある。例えば、
H’100〜H’1ffの領域をSMOV/B.Bによ
って転送する場合、SMOV/Bがプリデクリメントの
仕様であればレジスタの初期値はH’200となるし、
SMOV/Bがポストデクリメントの仕様であればレジ
スタの初期値はH’1ffとなる。 [ポストデクリメントのデメリット]SMOV/FとS
MOV/B,SCMP/FとSCMP/Bとの対称性が
悪くなる。例えば、H’000000ffまでの領域を
占めるストリングに対してSMOV/Bを実行する場
合、SMOV/B.Bであればポインタの初期値として
H’000000ffを設定し、SMOV/B.Wであ
ればポインタの初期値としてH’000000fcを設
定する必要がある。
【0469】[プリデクリメントのデメリット]SSC
H,BSCHなどのサーチ系の命令との整合性が悪くな
る。もし、SSCHで、命令終了後のポインタ最終値が
必ず終了条件成立のエレメント(サーチ結果のエレメン
ト)を指すという原則を設けるとすると、/F,/B,
/Rといった処理方向によってプリ更新/ポスト更新を
変えることはできなくなる。したがって、/Bのみプリ
デクリメントとするわけにはいかない。(実際にはSS
CH/Bは存在しないが、BSCH/Bなどの仕様との
関連がある) TRONCHIPでは、[ポストデクリメントのデメリ
ット]の方を重視し、SMOV/B,SCMP/Bでは
プリデクリメントの仕様にする。次に、SMOV,SC
MP,SSCHが終了条件によって終了した場合、ポイ
ンタの更新を行なってから命令を終了するか、ポインタ
の更新前に命令を終了するか、という問題がある。
【0470】[ポインタの更新前に命令を終了するデメ
リット]エレメントサイズによって命令を終了する場合
には、ポインタの更新が行なわれ、ポインタが次のエレ
メント(/Fの場合はまだ処理の終わっていないエレメ
ント)を指すようになってから命令を終了するので、そ
の仕様とは合わなくなる。つまり、終了条件が成立する
かどうかによってポインタを更新して良いかどうかの状
況が変わるため、仕様がわかりにくくなる上、高速なイ
ンプリメントが難しくなる。また、SSCHで、サーチ
が成功してから連続して次のサーチを行なう場合には、
次のSSCH実行前に別命令でポインタの更新が必要に
なる。SMOV,SCMPでも同様である。
【0471】[ポインタの更新後に命令を終了するデメ
リット]命令実行後のポインタ値が終了条件(サーチ条
件)成立のエレメントよりも進んでいるので、SSCH
命令としてはすなおな仕様ではない。BVSCH,BS
CH命令の仕様とも合わない。TRONCHIPでは、
[ポインタの更新前に命令を終了するデメリット]の方
を重視し、終了条件成立の場合には、ポインタの更新後
に命令を終了するという仕様にする。したがって、SM
OV/F,SCMP/F,SSCH/F,/R命令終了
後のポインタは、終了条件の成立したエレメントの次の
エレメントを指すことになる。また、SMOV/B,S
CMP/B命令の場合はプリデクリメントでポインタを
更新するため、命令終了後のポインタは終了条件の成立
したエレメントを指すことになる。SMOV/B,SS
CMP/Bとの仕様を合わせるという意味で、BVMA
P/B,BVCPY/Bの場合にも、演算の対象となる
ビットフィールドの最大オフセット+1をR1,R4で
指定する。
【0472】ただし、BVSCH,BSCHについて
は、命令終了後のビットオフセットが直接サーチ対象の
ビットを指している方が便利だと考えられるため、/
F,/Bともそのような仕様にする。また、QSCHに
ついては、ポインタがプリ更新となっているため、SS
CH,BSCHとはポインタ更新のタイミングが異なっ
ている。結局、BSCH/F(BVSCH/F),SS
CH/F,QSCH/Fのサーチのパターンをまとめる
と、次のようになる。 ストリング命令の場合、エレメント数R2は符号なしの
数として扱われる。これは、R2を符号なしと考えるこ
とにより、R2=0の指定によってエレメント数をH’
100000000と解釈し、エレメント数による終了
を行なわないようにできるためである。この機能は、言
語Cのstrcmp関数の実現などに利用できる。ま
た、インプリメント上も、R2を符号なしと考える方が
エレメント数による終了の判定が楽になる。一方、ビッ
トフィールド命令のwidthは、以下のような理由に
より、固定長ビットフィールド命令、任意長ビットフィ
ールド命令とも符号付きとして扱うことにする。
【0473】・命令実行時、ビットフィールド命令のw
idthはoffsetに加算される形になるが、of
fsetは符号付きである。widthを符号なしとす
ると、符号付きと符なしの数を足すことになり、すっき
りしない。ストリング命令のエレメントサイズの場合
は、サイズを乗じた上でポインタに加算するのであるか
ら、符号なしの方が自然である。 ・命令実行の上で符号付きか符号なしかの違いが出てく
るのは、任意長ビットフイールド命令でwidthが
H’80000000〜H’ffffffffの場合で
ある。widthを符号付きとしておけば、width
がこの値の時V_flagをセットするだけで命令を終
了するが、widthを符号なしとした場合には、wi
dthがこの値の時もビットフィールド操作を行なうこ
とになる。しかし、widthがH’80000000
〜H’ffffffffだとすると、offset+w
idthの値を符号付きとして扱う場合には既にオーバ
ーフローしているし、offset+widthを符号
なし(あるいは33ビット符号付き)として扱う場合に
も、offsetの値によってはオーバーフローする。
オーバーフローに関しては、「offset+ wid
thがオーバーフローした場合には動作を保証しない」
となっているのであるから、同じようなインプリメント
をするのであれば、widthを符号なしとしても「動
作を保証しない」ケースが増えるだけである。widt
hを符号なしとして、しかもwidth〉H’8000
0000の場合の動作を保証するのであれば、ハードウ
エアの負担を伴う。 ・ストリング命令の場合は、終了条件によって命令を終
了する場合があったため、エレメントサイズによる終了
をしたくない時に0を設定するという使い方がある。0
で無限大(H’100000000)を表現するには、
どうしてもエレメントサイズを符号なしとして扱う必要
があった。これに対して、BVMAP,BVCPYでは
width以外に命令終了の要素がないため、プログラ
ミング上、widthとして必ず意味のある値を設定す
ることになる。その場合は、「レジスタ上の値は原則と
して符号付きの数と考える」という原則に合わせる方が
自然である。
【0474】[ストリング命令、任意長ビットフィール
ド命令の基本原則のまとめ] ・サーチ系の命令では、ポインタ更新のタイミングはサ
ーチ方向に依存しない。BSCH,BVSCHでは、/
F,/Bともサーチ終了後のポインタは見付かったビッ
トを指す。SSCHでは、/F,/Rともサーチ終了後
のポインタは見付かったエレメントの次のエレメントを
指す。 ・実際にデータを操作する命令では、/Fの場合にポス
トインクリメント、/Bの場合にプリデクリメントの形
で処理を行なう。これに該当するのは、SMOV,SC
MP,BVMAP,BVCPYである。SSTR,BV
PATは/Fのみであるが、やはり同じ原則にあてはま
る。 ・ストリング命令では、エレメントサイズは符号なしと
して扱われ、’0’の場合はH’100000000を
表わす。一方、任意長ビットフィールド命令では、wi
dthは符号付きとして扱われ、widthがH’00
000001〜H’7fffffffの場合にのみ実際
のビットフィールド操作を行なう。
【0475】A11−2.ストリング命令の詳細仕様 SMOV SMOVのオペレーションをまとめると、次のようにな
る。ただし、最終的な結果が同じであれば、メモリアク
セスの順番が下記のものと異なっていても構わない(他
の高機能命令も同様)。また、srcとdestがオー
バーラップしていた時に、正しくない方のオプションを
使用した場合(src <destで/Fを使用した場
合、およびsrc >destで/Bを使用した場合)
の動作も、下記の通りでなくてもよい。
【0476】[SMOV/Fのオペレーション]
【0477】[SMOV/Bのオペレーション] SMOVでは、R2の初期値が何であっても、かならず
1個以上のエレメントは処理される。SMOVの終了要
因をまとめると、次のようになる。 1.エレメント(データ)数(R2)による終了 エレメント数によって命令を終了した場合には、V_f
lag=1となる。2のケースとは同時には起こらな
い。 2.終了条件による終了 この時は、F_flag=1となる。終了条件を満足し
たエレメントの転送も行なわれる。
【0478】SCMP SCMPでは、エレメント数による命令の終了と終了条
件による命令の終了のほかに、比較データの不一致によ
って命令を終了することがある。SCMPでデータの不
一致により命令を終了した場合にも、終了条件により命
令を終了した場合と同様に、ポインタの更新が行なわれ
てから命令が終了する。SCMPでは、エレメント数に
よる終了要因と他の終了要因とが同時に発生することは
ないが、終了条件とデータ不一致の終了要因が同時に満
たされる可能性はある。SCMPがエレメント数によっ
て終了した場合には、次のエレメントの比較は行なわ
ず、次のエレメントが不一致または終了条件成立であっ
ても、V_flag=0,F_flag=0,Z_fl
ag=1として命令を終了する。SCMPのオペレーシ
ョンをまとめると、次のようになる。ただし、最終的な
結果が同じであれば、メモリアクセスの順番が下記のも
のと異なっていても構わない。これと等価の動作をすれ
ばよい。
【0479】[SCMP/Fのオペレーション]
【0480】[SCMP/Bのオペレーション]
【0481】SCMPの終了要因をまとめると、次のよ
うになる。 1.エレメント(データ)数(R2)による終了 この時、Z_flag=1,F_flag=0,V_f
lag=1となる。2,3のケースとは同時には起こら
ない。 2.終了条件による終了 この時は、F_flag=1となる。終了条件を満足し
たエレメントの比較も行なわれ、その比較結果がZ_f
lag,L_flag,X_flagに設定される。比
較が不一致だった場合は、2,3の2つの終了要因が同
時に満たされたことに相当する。 3.比較中のエレメントの不一致による終了 この時は、不一致のあったエレメントの比較結果がZ_
flag(=0),L_flag,X_flagに設定
される。V_flagは0となる。
【0482】SSCH SSCHが終了条件(検索条件)によって終了した場合
には、/F,/Rとも、命令実行後のポインタは終了条
件の成立したエレメントの次のエレメントを指す。ま
た、SSCHがエレメント数によって終了した場合に
も、命令実行後のポインタは次のエレメントを指す。S
SCHのオペレーションをまとめると次のようになる。 [SSCH/Fのオペレーション]
【0483】[SSCH/Rのオペレーション] SSCHの終了要因をまとめると、次のようになる。 1.エレメント(データ)数(R2)による終了 この時、V_flag=1となる。2のケースとは同時
には起こらない。 2.終了条件(検索条件)による終了 この時は、F_flag=1となる。
【0484】SSTR SSTRではフラッグ変化は起こらない。SSTRのオ
ペレーションをまとめると次のようになる。 [SSTRのオペレーション]
【0485】A11−3.高機能命令終了時のレジスタ
値 TRONCHIPで高機能命令を実行した場合、命令終
了時の各レジスタの値は次のようになる。なお、RXi
nitは命令実行前のレジスタRXの値を示す。また、
RXendは命令実行後のレジスタRXの値を示す。
【0486】
【0487】
【0488】[SMOV] とすればよい。ただし、終了条件が成立した場合には、
処理が途中で打ち切られる。終了条件の成立したデータ
もdest側に転送される。
【0489】−エレメント数によって終了した場合
【0490】[SCMP] とすればよい。ただし、終了条件が成立した場合には、
処理が途中で打ち切られる。終了条件の成立したエレメ
ントについても比較が行なわれ、その結果がL_fla
g,X_flag,Z_flagにセットされる。ま
た、比較中に不一致のエレメントが見付かった場合に
も、処理が途中で打ち切られる。
【0491】−エレメント数によって終了した場合 −終了条件の成立、またはエレメント値の不一致によっ
て終了した場合
【0492】[SSCH] −エレメント数によって終了した場合 (V_flag
=1) −終了条件(検索条件)が成立して終了した場合(F_
flag=1)
【0493】[SSTR]R1init〜R1init
+R2init*エレメントサイズ−1のアドレスを持
つ領域に、R3で指定されるデータを繰り返し書き込
む。他のストリング命令とは異なり、終了条件の指定は
行なわない。また、フラッグのセットも行なわない。R
2init(width)≦0の場合は、即座に命令を
終了する。R1,R2は不変である。
【0494】[QSCH] −キュー終了値(R2)によって終了した場合(V_f
lag=1) −終了条件(検索条件)が成立して終了した場合(F_
flag=1)
【0495】付録12.オペランドが干渉した場合の動
作 一つの命令が複数のオペランドを持ち、その中で、@S
P+,@−SPモードとSPを参照するモードとを併用
した場合には、@SP+,@−SPモードによって更新
されたSP値がいつから反映されるかということが問題
になる。この問題をより一般的に考えると、オペランド
が干渉していた場合の動作を明確に規定すればよいとい
うことになる。この資料は、本発明装置で、命令中のオ
ペランドが干渉を起こした場合に、その動作をきちんと
定義することを目的としたものである。資料の最初の方
でこの問題に対する考え方を述べ、資料の後半では、実
際に本発明装置の動作の規定を行っている。
【0496】A12−1.命令実行モデル オペランド干渉の問題を整理するために、まず、各命令
からメモリやレジスタに対して行われるread,wr
ite,read−modify−writeの基本ア
クセス操作をすべて含むような仮想的な命令パターンを
考え、それを以下のようにモデル化する。
【0497】・モデルを構成するRA1〜WW1の夫々
の要素を「ステップ」と呼ぶ。 ・@SP+,@−SPのアドレッシングモードを指定し
た場合、SP値の更新は「実効アドレス計算」のステッ
プ(RA1,RA2,RA3,MA1,WA1)で行わ
れるものとする。 ・各ステップは、次のいずれかのパターンでリソースを
アクセスする。ただし、「リソース」とはメモリまたは
プログラムから見えるレジスタを指す。 −リソースアクセスなし −一つまたは複数のリソースからのread −一つのリソースへのwrite(EX1〜EXn,M
W1,WW1のみ) −リソースSPのread−modify−write
(RA1,RA2,RA3,MA1,WA1,WA2) ・各ステップでリソースの値の更新があった場合には、
次のステップから更新された値が反映される。 ・一般の命令では、このうち一部のステップのみが存在
する。 ・EX1〜EXnのステップは、実際には、命令の種類
によってEX1,EX2,EX3・・・のいくつかのス
テップに分かれている。 上記のモデルでは、各ステップで書き込みを行なうリソ
ースが高々一つであること、SPのread−modi
fy−writeのケースを除けば、一つのステップ内
でreadとwriteが混在するケースはないこと、
リソースに書き込んだ値が次のステップから反映される
こと、といった条件を明らかにしているので、ステップ
間で共通のオペランドをアクセスした場合にも動作は明
確に規定される。したがって、各命令の動作を上記のモ
デルにうまく当てはめることができれば、オペランドが
重なっていた場合の動作もきちんと規定することができ
る。本発明装置のほとんどの命令の動作は、上記の実行
パターンのサブセットとして成り立っている。ただしど
の動作がどのステップに対応するかということについて
は、命令動作の意味付けによっていろいろな解釈ができ
る。例えばACB:G @SP+,SP,@SP+,n
ewpcの場合には、次ののような解釈をするのが自
然である。つまり、ACB命令の各動作ステップやオペ
ランドと、上記のモデルとの対応は、次ののように行
なうのが普通であり、実際、これが正しいTRON仕様
となっている。
【0498】ACBのSTEPオペランドがモデルの
R01に対応 ACBのLIMITオペランドがモデルのR02に対応 xregオペランドはEX1〜EX3の中だけで扱い、
R0n,M0n,W0nとは考えない。 −ro1addr,ro2addr,step,lim
it xregは内部変数であり、モデルで使用する意
味での「リソース」には含めないこの場合、命令実行前
のSP値をinitSPとすると、 しかし、実際のACB命令の動作とモデルとの対応を次
ののようにすることも不可能ではない。の動作は、
厳密にはと同じではない。
【0499】ACBのstepオペランドがモデルの
R01に対応 ACBのxregオペランドが読みだし時R02に、書
き込み時W01に対応ACBのlimitオペランドが
モデルのR03に対応 −ro1addr,ro3addr,step lim
it,xregは内部変数であり、モデルで使用する意
味での「リソース」には含めないこの場合、命令実行前
のSP値をinitSPとすると、 これはとは異なる動作である。仕様書の命令の解説の
項だけではが正しいかが正しいかは厳密にはわから
ないため、命令によっては、モデルとの対応付けの曖昧
な場合が出てくる。モデルとの対応付けが違うと、上の
例のように細かい動作が異なってくることがある。この
資料では本発明装置の命令について、上記のような方法
で命令動作とモデルとの対応を決め手いくことにより、
オペランドが重なった場合の動作を明確に規定すること
を目的としている。
【0500】A12−2.基本原則 命令について個別に検討する前に、オペランドの干渉に
ついての基本原則を述べる。 (原則1)短縮形と一般形では、全く同じ動作をしなけ
ればならない。すなわち、命令フォーマットの違いはオ
ペランド干渉の問題には影響しない。短縮形は完全に一
般形のサブセットとなるべきであり、動作の異なる短縮
形は混乱を招く。命令実行モデルは、インプリメントへ
の依存性やインプリメントの都合を考えたものではない
ため、場合によっては、規定した通りにインプリメント
できないことがある。例えば、ADD:L @SP+,
SPがADD:G @SP+,SPと異なった動作をす
る場合があるというのは、この例である。このようなケ
ースに関しては、命令実行モデルの方はそのままにして
おき、場合に応じて例外として扱う。 (原則2)基本的には、命令ビットパターンの中でのオ
ペランドの出現順序にしたがって、命令のオペランドと
モデルでの第一readオペランド(R01)、第二r
eadオペランド(R02)・・・との対応を決める。
こうしておけば、一般にはインブリメント方法とも矛盾
しない。命令実行モデルは、各命令の動作とビットパタ
ーンから考えて、最も自然な形になるようにする。短縮
形と一般形を持つ命令の場合、命令実行モデルと実際の
命令動作との対応が自然になるかどうかは、どのフォー
マットの命令ビットパターンを基準にするかによって異
なるが、この場合は減速として一般形を基準にする。命
令動作とモデルとの対応という点に関しては、命令ビッ
トパターンの都合は考えるが、インブリメントの都合は
特に考えない。 (原則3)原則2があっても、汎用アドレッシングでな
いオペランド(ACBのxregなど)については、モ
デルでの第n−readオペランド(R0n)、第m−
writeオペランド(W0m)としては扱わず、EX
のステップ中だけで扱うのが普通である。 (原則4)また、命令の意味の中に暗黙に含まれている
メモリアクセス(PUSH,P0Pでのスタック操作な
ど)についても、モデルでの第n−readオペランド
(R0n)、第m−writeオペランド(W0m)と
しては扱わず、EXのステップ中だけで扱うのが普通で
ある。 さらに、各命令ごとに特殊な事情のある場合や、多数の
オペランドを持つ場合(LDM,STMなど)には、こ
れらの原則が当てはまらないことがある。詳しくは命令
ごとに検討する。
【0501】A12−3.各命令での実際 本発明装置の命令をいくつかのパターンに分類してモデ
ルとの対応付けを行ない、オペランドが干渉した場合の
動作を明確にする。(原則1)により、命令フォーマッ
トが違ってもオペランドが干渉した場合の動作は変わら
ないので、命令フォーマットの違いによる場合分けを行
なう必要はない。なお、動作例の中に出てくるinit
SPは、命令実行前のSPの意味である。また、動作例
で出てくる命令のオペランドサイズは、断わりのない限
りすべて32ビットとする。’==>’は値の代入
を、’〔〜〕’はコメントを示す。RA1〜WW1のス
テップのうち、その命令で使用していないステップにつ
いては、説明を省略してある。
【0502】Oオペランド(N) 該当命令: NOP PIB RTS RRNG TRAP REIT STCTX PTLB BVSCH BVMAP BVCPV BVPAT SMOV SCMP SSCH SSTR QSCH 命令の動作は、すべてモデルのEXのステップだけで行
なわれ、それ以外の部分は存在しない。したかって、オ
ペランドの干渉については特に問題とはならない。高機
能命令では、EXのステップ数が有限とはならない場合
も生じるため、このモデルでは正確に表現できないこと
がある。しかし、これはオペランドの干渉の問題には直
接関係しないので、ここでは議論しない。 〔命令実行モデルとオペランドとの対応〕 EX. 命令固有の動作
【0503】1オペランドイミディエート(I) 当該命令: オペランドを一つもつが、オペランドの値は命令コード
中で直接指定されるため、オペランドの干渉については
問題とならない。newpc,vector,imas
kはEXのステップで操作すると考える。 〔命令実行モデルとオペランドとの対応〕 EX. 命令固有の動作(newpc,vecto
r,imaskの参照を含む)
【0504】1オペランドread(R) 該当命令: このパターンの命令の場合、src,vectorをモ
デルの第一readオペランド(R01)として扱う。
src=@SP+の場合、命令固有の動作を行なう時点
では、既にSPのインクリメントが行なわれていること
になる。 〔命令実行モデルとオペランドとの対応〕 例えばPUSH@SP+にこのモデルを適用すると、E
XでPUSH命令固有の動作(src==>@−SP)
を行なう前に、RA1.で既にsrc−@SP+による
SPの更新が行われることがわかる。ただし、間違いを
防ぐため、PUSH@SP+は禁止(RIE)となって
いる(図396参照)。
【0505】1オペランドaddress(A) 該当命令: srcaddr,prgaddr,ctxaddr,c
hkaddr,newpcをモデルの第一addres
sオペランド(A01)として扱う。なお、AA1では
@SP+,@−SPのモードは利用できない。 〔命令実行モデルとオペランドとの対応〕 PUSHA @SPとJSR @SPの動作は図397
のとおり。
【0506】1オペランドwrite(W) 該当命令: destを第一writeオペランド(W01)として
扱う。この場合、EXのステップより前のWA1のステ
ップでdestの実効アドレス計算が行なわれ、値の書
き込みのみEXより後のWW1のステップで行なわれる
ことになる。 〔命令実行モデルとオペランドとの対応〕 例えばPOP @−SPにこのモデルを適用すると、E
X.でPOP命令固有の動作(@SP+==〉dest
2)を行なう前に、WA1.で既にdest=@−SP
によるSPの更新が行なわれることがわかる。また、P
OP @(d,SP)にこのモデルを適用すると、E
X.でPOP命令固有の動作(@SP+==〉dest
2)を行なう前に、WA1.でdest=@(d,S
P)のアドレス計算が行なわれ、destのアドレス計
算にはinitSPが使用されることがわかる。ただ
し、間違いを防ぐため、実際にはPOP @−SPは禁
止(RIE)となっている。また、POP @(d,S
P)については、@(d,Rn)のアドレッシングモー
ドでRn=SPの時のみ実行禁止とするのは無理がある
こと、スタック操作においてPOP @(disp,S
P)を使用する用途も考えられること、により、禁止に
はしていない。POP命令の動作例は図398のように
なる。
【0507】1オペランドrmw(M) 該当命令: destをM01に対応させる。この場合、MA1で@
SP+,@−SPを指定することはできない。 〔命令実行モデルとオペランドとの対応〕
【0508】2オペランドread〜write(R
W) 該当命令: srcをR01、destをW01に対応させる。した
がって、src側の実効アドレス計算とそれに伴うSP
の更新がすべて終わってからsrcのフエッチを行な
い、その後dest側の実効アドレス計算を行ない、最
後に命令固有の動作を行って結果をdestにセットす
る。UNPKssのadjはEXのステップで扱い、第
n−readオペランドとはしない。 〔命令実行モデルとオペランドとの対応〕 MOVの動作例は図399のとおり。PACK,UNP
Kの動作例は図400のとおり。
【0509】2オペランドaddress〜write
(AW) 該当命令: 制御空間、物理空間など特殊な空間からの読みだしを行
なう命令では、特殊空間側の実効アドレスsrc,sr
caddrをA01として扱い、特殊空間の実際のアク
セスはEXのステップで行なう。また、QDEL命令で
も、キューエントリを指定する側の実効アドレスque
ueをA01として扱い、キューリンクの実際の操作は
EXのステップで行なう。こうしておけば、命令ビット
パターンやインプリメント方法ともうまく対応する。A
A1では、@SP+,@−SPを指定することはできな
い。destはW01として扱う。 STC,MOVAの動作例との対応は図401のとお
り。mova @SP,@−SPの場合、srcadd
rの実効アドレス計算(AA1)のステップで既にSP
が参照されており、destの実効アドレス計算(WA
1)ステップにおけるSPの更新はsrcaddrに反
映されない。これに対して、STC @sp0,@−S
Pがモデル通りの動作をするものと考えると、srcの
実効アドレス計算(AA1)のステップではまだSPが
参照されておらず、制御レジスタとしてのSPのアドレ
ス(H’0124)が計算されるだけである。SPが参
照されるのはEXのステップであり、これはdestの
実効アドレス計算(WA1)ステップにおいてSPを更
新した後である。したがって、initSP−4がde
stに転送されることになる。ただし、STC @sp
0,@−SPの動作については、以上のようなモデル通
りの動作をするかどうかがインプリメント依存になって
いる。つまり、モデル通りinitSP−4を転送する
場合と、モデルに対しては例外の扱いとなるが、ini
tSPを転送する場合とがある。
【0510】2オペランドread〜address
(RA) 該当命令:
【0511】制御空間、物理空間など特殊な空間への書
き込みを行なう命令LDC,LDP,LDATEでは、
特殊空間側の実効アドレスdest,destaddr
をA01、srcをR01として扱う。特殊空間の実際
のアクセスはEXで行なう。ビット操作命令では、ba
seの実効アドレスをA01、offsetをR01と
して扱う。baseとoffsetの合成を行ない、操
作対象となるビットを実際にアクセスするのは、EXの
中で行なわれる。固定長ビットフィールド操作命令で
も、ビット操作命令と同様に、baseの実効アドレス
をA01、offsetをR01として扱う。offs
etとbase以外のオペランド、即ちwidth,s
rc,destについては、EXの中でのみアクセス
し、第n−readオペランド(R0n)、第m−wr
iteオペランド(W0m)としては扱わない。CHK
の場合は、ビットパターンとの関係から、indexを
R01、boundをA01として扱い、boundの
内容である(上限値:下限値)の読みだしとxregへ
の書き込みはEXで行なうことにする。以上のような形
で各命令の動作とモデルとの対応をつけておけば、命令
ビットパターンやインプリメント方法とも矛盾しない。
AA1では、@SP+,@−SPを指定することはでき
ない。src,offset,index=@SP+の
場合、dest,destaddr,base,bou
ndの実効アドレス計算で参照されるSP値としては、
インクリメント後の値が使用されることになる。CHK
命令の場合、これはアセンブラ表記での順序と逆になっ
ているので、注意が必要である。また、固定長ビットフ
ィールド命令でoffset=@SP+を指定し、sr
c,widthなどで同じSPを指定した場合のSP値
としては、やはりインクリメント後の値が使用されるこ
とになる。アセンブラ表記では、BFINS,BFCM
Pの場合にoffsetよりもsrcの方が先に書かれ
るようになっているが、実際にはoffsetの実効ア
ドレス計算で更新されたSPがsrcに反映されるの
で、注意が必要である。
【0512】
【0513】2オペランドread〜read(RR) 該当命令: CMP,CMPUでは、src1をR01に、src2
をR02に対応させる。INDEXでは、indexs
izeをR01に、subscriptをR02に対応
させる。xregはEXで扱う。ACB,SCBではs
tepをR01に、limitをR02に対応させる。
xreg,newpcはEXで扱う。したがって、sr
c1,indexsize,step=@SP+の場
合、src2,subscript,limitの実効
アドレス計算で参照されるSPとしては、インクリメン
ト後の値が使用される。また、INDEX,ACB,S
CB命令でindexsize,step=@SP+ま
たはsubscript,limit=@SP+の場
合、xregとして参照されるSPとしては、やはりイ
ンクリメント後の値が使用される。
【0514】 CMPの動作例は図403のとおり。INDEXの動作
例は図404のとおり。ただし、INDEX命令につい
ては、インプリメントの制約によって、subscri
pt=@SP+,xreg=SPの場合に必ずしもモデ
ル通りの動作ができない場合がある。詳しくは2オペラ
ンドread〜rmw(RM)の項を参照。ACB,S
CBの動作例は図405のとおり。
【0515】2オペランドread〜rmw(RM) 該当命令: src,count,dataをR01に、dest,
offsetをM01に対応させる。src=@SP+
の場合、destの実効アドレス計算で参照されるSP
としては、インクリメント後の値が使用される。MA1
では、@SP+,@−SPのモードを指定することはで
きない。MULX,DIVXの場合、srcがR01、
destがM01に対応し、tmpはEXの中で処理さ
れるものとする。したがって、src=@SP+の場合
に、destの実効アドレス計算で参照されるSP値、
およびtmpで参照されるSP値としては、インクリメ
ント後の値が使用される。また、tmpとdestで同
じレジスタを指定した場合には、tmpの値が消え、最
終的にdestの値が残ることになる。
【0516】 ADDの動作例は図406のとおり。このうち、一つの
ハーフワードの中で、レジスタ指定RgR,RgMと汎
用アドレッシング指定EaR,EaW,ShR,ShW
の両方を含む命令では、EaR,EaW,ShR,Sh
Wで@SP+,@−SPのモードを指定し、RgR,R
gMでSPを指定した場合に、EaR,EaW,Sh
R,ShWによるSP値の更新がRgR,RgMとして
のSPの読みだし値に影響するため、パイプライン実装
が難しいという意見がある。具体的に問題となるのは、
以下のような命令である。 そこで、これらの命令については、動作がインプリメン
ト依存になるものとする。つまり、ADD:L @SP
+,SP実行後のSP値は、インプリメントによって不
定の値をとるということにする。EITの検出も難しい
ので、EITとはしない。これらの命令は、短縮形が一
般形と同じ動作をするという原則には違反することにな
る。
【0517】2オペランドaddress〜addre
ss(AA) 該当命令: entryをA01に、queueをA02に対応させ
る。キューリンクの実際の操作はEXのステップで行な
われる。
【0518】2オペランドaddress〜read
(AR) 該当命令: CSI命令では、ビットパターンとの関係から、des
tをA01に、updateをR01に対応させるco
mpのアクセスと比較、交換の実際の操作は、EXで行
なわれる。CSI命令のオペランドの処理は、アセンブ
ラ表記とは異なり、updateの実効アドレス計算、
destの実効アドレス計算、comp値の参照といっ
た順序で行なわれる。destでは@SP+,@−SP
が使用できないが、updateでは@SP+が使用で
きるので、compでSPを参照した場合には注意が必
要である。 CSIの動作例は図407のとおり。
【0519】1オペランドread〜reglist
(RL) 該当命令: ENTER,EXITDでは、local,adjsp
をR01に対応させる。reglistの参照とスタッ
クフレームの操作は、EXのステップに含める。したが
って、local,adjspの実効アドレス計算の際
に参照されるSP,FP,R0〜R13は、スタックフ
レーム操作を始めてからの値ではなく、すべて命令実行
前の値を使用することになる。EXITDでは、アセン
ブラ表記でのオペランド順と逆の順番で実効アドレスが
評価されるので、注意が必要である。(ただし、命令再
実行の関係で、local,adjspはレジスタ直接
Rnとイミディエート#imm_dataのモードしか
使用できない。)
【0520】1オペランドaddress〜regli
st(AL)★ 該当命令: LDM,STMでは、src,destをA01に対応
させる。reglistの参照と実際のレジスタ転送
は、EXのステップに含める。したがって、src,d
estの実効アドレス計算の際に参照されるSP,F
P,R0〜R13は、レジスタ転送を始めてからの値で
はなく、すべて命令実行前の値を使用することになる。
LDM reglist,@SP+とSTM regl
ist,@−SPについては、SPが複数回更新される
ため、一般命令での@SP+,@−SPとは異なった扱
いをする必要がある。すなわち、モデルの「実効アドレ
ス計算」のステップで@SP+,@−SPによるSP値
の更新を扱うのではなく、EXのステップでSP値の更
新を扱うようにする。このため、SPをM01に対応さ
せる。 〔@SP+,@−SP以外のモードを使用した場合〕
【0521】〔@SP+,@−SPのモードを使用した
場合〕 〔実際のインプリメントでは、レジスタ転送の順序は自
由である。これと等価な動作をすればよい。〕 LDM @SP+,reglist,の場合、regl
ist中にSPが指定されていても、最後のMW1のス
テップでtmpaddrがSPにoverwriteさ
れるため、結果的にメモリからロードされたSP値が消
えてしまうことになる。LDM,STMの動作例は図4
08のとおり。
【0522】付録13.キャッシュやTLBの整合性確
保について キャッシュやTLBの整合性の確保については、それぞ
れ関連する命令のところで説明を行なっているが、整理
すると以下のようになる。 〔ATを変更した場合の整合性〕 ・TLB,論理キャッシュ(データキャッシュ)の整合
性 −LDC,LDCTX,EIT,REITによりPSW
の中のATが変更された場合、TLB,論理データキャ
ッシュの整合性が保証される。(LSIDがない場合は
パージされる。LSIDがある場合、AT=00の物理
空間に対して特別のLSIDを与えると考えれば、必ず
しもパージする必要はない。) ・命令パイプライン、命令キャッシュの整合性 −命令コード整合性の状態は変化しない。ATを変更し
ても、命令コード整合性が保証されるわけではない。
【0523】〔UATB,SATBの操作をした場合の
整合性〕 ・TLB,論理キャッシュ(データキャッシュ)の整合
性 −LDC,LDCTXによるUATB,SATBの操作
では、TLB,論理データキャッシュの整合性が保証さ
れる。(LSIDがない場合、一般にはパージされる) ・命令パイプライン、命令キャッシュの整合性 −LDC,LDCTXによりUATB,SATBを操作
しても、命令コード整合性の状態は変化しない。インプ
リメントによっては、命令キャッシュのパージによって
命令コード整合性が良くなる場合もあるが、それが保証
されているわけではない。例えば、論理空間A,論理空
間Bの命令コードをそれぞれ書き換えた後、論理空間A
でPIB命令を実行すると、論理空間Aでの命令コード
整合性は保証される。この後LDCまたはLDCTXで
UATBを操作し、論理空間Bに切り換えたとしても、
論理空間Bでの命令コード整合性は保証されず、それを
保証するためには論理空間Bでもう一度PIB命令を実
行する必要がある。ただし、論理空間BでPIB命令を
実行してもしなくても、再度UATBを操作して論理空
間Aに戻ってきた場合には、命令コードの整合性が保証
されている。実際には、論理命令キャッシュのパージに
より、UATB操作の後は自動的に命令コード整合性が
保証されるかもしれないが、プログラミング上はこの機
能を当てにしてはいけない。将来LSIDを導入してパ
ージを避けることを考えると、一般には、UATBを操
作しても命令コード整合性は変わらないと考えなければ
ならない。
【0524】〔ATEの操作をした場合の整合性〕 ・TLB,論理キャッシュ(データキャッシュ)の整合
性 −LDATEによるATEの操作では、TLB,論理デ
ータキャッシュの整合性が保証される。(影響のある部
分がパージされる) −LDATEを用いず、一般のメモリアクセス命令でA
TEに使用しているメモリ領域を書き換えた場合には、
TLB,論理データキャッシュの整合性は保証されな
い。 ・命令パイプライン、命令キャッシュの整合性 −ATEを更新した場合、そのATEによりアドレス変
換される領域の「命令コードの整合性」は失われる。つ
まり、その領域のメモリ内容をプログラムとして実行し
ても、動作は保証されない。これは、LDATE命令を
用いるかどうかには関係しない。命令コードの整合性を
回復する必要があれば、別にPIB命令を実行する。
【0525】〔メモリの操作をした場合の整合性〕 ・論理キャッシュ(データキャッシュ)の整合性 −論理アドレスによってメモリをアクセスする場合に
は、論理データキャッシュの整合性が保証される。(キ
ャッシュの制御機構による) −LDP命令を使って、物理アドレスによりメモリアク
セスする場合には、論理データキャッシュの整合性は保
証されない。 ・命令パイプライン、命令キャッシュの整合性 −メモリ内容を変更した場合、その領域の「命令コード
の整合性」は失われる。これは、論理アドレスによるア
クセスか物理アドレスによるアクセスかということには
関係しない。内容を変更したメモリをブログラムとして
実行するには、PIB命令を実行し、命令コードの整合
性を回復する必要がある。
【0526】
【発明の効果】以上のようにこの発明によれば、2つの
オペランド間の加算もしくは減算の算術演算を2の補数
表現による符号付き二進数として行う命令を指定する第
1の命令コードと、2つのオペランドの間の前記算術演
算と同一の演算を絶対値表現された符号なし二進数とし
て行う命令を指定する第2の命令コードとが用意された
命令セットにより表現されるプログラムを解読して、こ
れら命令コードの各々の指定する算術演算を実行し、各
演算によりデスティネーションオペランドに格納された
演算結果におけるオーバーフローの発生を示す情報、も
しくは各演算の演算結果の正負を示す情報をフラッグで
表現したので、加算もしくは減算の算術演算を符号付き
で扱いたいか符号なしで扱いたいかは、プログラムにお
いて第1の命令コードを用いるか第2の命令コードを用
いるかを選択するだけでよく、さらにそれぞれの演算結
果のオーバーフローもしくは正負の状態を調べてその後
の処理内容を決定する際にはフラッグを参照するだけで
よく、プログラム作成上の負担が少なくなるという効果
がある。
【0527】また、2つのオペランドの間で2の補数表
現による符号付き二進数としてその大小を比較する比較
演算を指定する第1の命令コードと、2つのオペランド
の間で絶対値表現された符号なし二進数としてその大小
を比較する比較演算を指定する第2の命令コードとが用
意された命令セットにより表現されるプログラムを解読
し、これら命令コードの各々の指定する比較演算を実行
し、それぞれ実行された比較演算によるそれぞれの数学
的大小関係の情報をフラッグで表現したので、比較演算
を符号付きで扱いたいか符号なしで扱いたいかは、プロ
グラムにおいて第1の命令コードを用いるか第2の命令
コードを用いるかを選択するだけでよく、さらにそれぞ
れの数学的大小関係を判断してその後の処理を行う場合
でもフラッグを参照するだけでよく、プログラムの作成
上の負担が少なくなるという効果がある。
【図面の簡単な説明】
【図1】本発明装置のレジスタセット説明図である。
【図2】本発明装置のレジスタセット説明図である。
【図3】本発明装置のビットについてのデータタイプ説
明図である。
【図4】本発明装置のビットフイールドについてのデー
タタイプ説明図である。
【図5】本発明装置の符号なしビットフィールドについ
てのデータタイプ説明図である。
【図6】本発明装置の整数についてのデータタイプ説明
図である。
【図7】本発明装置の整数についてのデータタイプ説明
図である。
【図8】本発明装置の10進数についてのデータタイプ
説明図である。
【図9】本発明装置の10進数についてのデータタイプ
説明図である。
【図10】本発明装置のストリングについてのデータタ
イプ説明図である。
【図11】本発明装置のストリングについてのデータタ
イプ説明図である。
【図12】第8図は、本発明装置のキューについてのデ
ータタイプ説明図である。
【図13】本発明装置の命令フォーマットの記述例を示
す説明図である。
【図14】そのビットパターン図である。
【図15】本発明装置の命令フォーマット図である。
【図16】本発明装置の命令フォーマット図である。
【図17】本発明装置の命令フォーマット図である。
【図18】本発明装置の命令フォーマット図である。
【図19】本発明装置の命令フォーマット図である。
【図20】本発明装置の命令フォーマット図である。
【図21】本発明装置の命令フォーマット図である。
【図22】本発明装置の命令フォーマット図である。
【図23】本発明装置の命令フォーマット図である。
【図24】本発明装置の命令フォーマット図である。
【図25】本発明装置の命令フォーマット図である。
【図26】本発明装置のアドレッシングモードのフォー
マット図である。
【図27】本発明装置のアドレッシングモードのフォー
マット図である。
【図28】本発明装置のアドレッシングモードのフォー
マット図である。
【図29】本発明装置のアドレッシングモードのフォー
マット図である。
【図30】 ・本発明装置のア
ドレッシングモードのフォーマット図である。
【図31】本発明装置のアドレッシングモードのフォー
マット図である。
【図32】本発明装置のアドレッシングモードのフォー
マット図である。
【図33】本発明装置のアドレッシングモードのフォー
マット図である。
【図34】本発明装置のアドレッシングモードのフォー
マット図である。
【図35】本発明装置のアドレッシングモードのフォー
マット図である。
【図36】本発明装置のアドレッシングモードのフォー
マット図である。
【図37】本発明装置のアドレッシングモードのフォー
マット図である。
【図38】本発明装置のローカル変数配置例の説明図で
ある。
【図39】本発明装置のアドレッシングモードのフォー
マット図である。
【図40】本発明装置のアドレッシングモードのフォー
マット図である。
【図41】本発明装置のアドレッシングモードのフォー
マット図である。
【図42】本発明装置のアドレッシングモードのフォー
マット図である。
【図43】命令MOVでの注意事項説明図である。
【図44】PSWのフォーマット図である。
【図45】PSSのフォーマット図である。
【図46】PSHのフォーマット図である。
【図47】命令セットの記述例を示すフォーマット図で
ある。
【図48】命令MOVのフォーマット図及びそのフラッ
グ変化の説明図である。
【図49】命令MOVUのフォーマット図である。
【図50】そのフラッグ変化の説明図である。
【図51】命令PUSHのフォーマット図である。
【図52】そのフラッグ変化の説明図である。
【図53】命令POPのフォーマット図である。
【図54】そのフラッグ変化の説明図である。
【図55】命令LDMのフォーマット図である。
【図56】そのフラッグ変化の説明図である。
【図57】ビットマップ指定の説明図である。
【図58】命令STMのフォーマット図である。
【図59】そのフラッグ変化の説明図である。
【図60】ビットマップ指定の説明図である。
【図61】ビットマップ指定の説明図である。
【図62】命令MOVAのフォーマット図である。
【図63】そのフラッグ変化の説明図である。
【図64】命令PUSHAのフォーマット図である。
【図65】そのフラッグ変化の説明図である。
【図66】命令CMPのフォーマット図である。
【図67】そのフラッグ変化の説明図である。
【図68】命令CMPUのフォーマット図である。
【図69】そのフラッグ変化の説明図である。
【図70】命令CHKのフォーマット図である。
【図71】そのフラッグ変化の説明図である。
【図72】命令CHKのオペレーションの説明図であ
る。
【図73】命令ADDのフォーマット図である。
【図74】そのフラッグ変化の説明図である。
【図75】命令ADDUのフォーマット図である。
【図76】そのフラッグ変化の説明図である。
【図77】命令ADDXのフォーマット図である。
【図78】そのフラッグ変化の説明図である。
【図79】命令SUBのフォーマット図である。
【図80】そのフラッグ変化の説明図である。
【図81】命令SUBUのフォーマット図である。
【図82】そのフラッグ変化の説明図である。
【図83】命令SUBXのフォーマット図である。
【図84】そのフラッグ変化の説明図である。
【図85】命令MULのフォーマット図である。
【図86】そのフラッグ変化の説明図である。
【図87】命令MULUのフォーマット図である。
【図88】そのフラッグ変化の説明図である。
【図89】命令MULXのフォーマット図である。
【図90】そのフラッグ変化の説明図である。
【図91】命令DIVのフォーマット図である。
【図92】そのフラッグ変化の説明図である。
【図93】命令DIVUのフォーマット図である。
【図94】そのフラッグ変化の説明図である。
【図95】命令DIVXのフォーマット図である。
【図96】そのフラッグ変化の説明図である。
【図97】命令REMのフォーマット図である。
【図98】そのフラッグ変化の説明図である。
【図99】命令REMUのフォーマット図である。
【図100】そのフラッグ変化の説明図である。
【図101】命令NEGのフォーマット図である。
【図102】そのフラッグ変化の説明図である。
【図103】命令INDEXのフォーマット図である。
【図104】そのフラッグ変化の説明図である。
【図105】命令ANDのフォーマット図である。
【図106】そのフラッグ変化の説明図である。
【図107】命令ORのフォーマット図である。
【図108】そのフラッグ変化の説明図である。
【図109】命令XORのフォーマット図である。
【図110】そのフラッグ変化の説明図である。
【図111】命令NOTのフォーマット図である。
【図112】そのフラッグ変化の説明図である。
【図113】命令SHAのフォーマット図である。
【図114】そのフラッグ変化の説明図である。
【図115】左シフトの説明図である。
【図116】右シフトの説明図である。
【図117】命令SHLのフォーマット図である。
【図118】そのフラッグ変化の説明図である。
【図119】左シフトの説明図である。
【図120】右シフトの説明図である。
【図121】命令ROTのフォーマット図である。
【図122】そのフラッグ変化の説明図である。
【図123】左回転の説明図である。
【図124】右回転の説明図である。
【図125】命令SHXLのフォーマット図である。
【図126】そのフラッグ変化の説明図である。
【図127】命令XHXLのフォーマット図である。
【図128】命令XHXRのフォーマット図である。
【図129】そのフラッグ変化の説明図である。
【図130】命令SHXRのフォーマット図である。
【図131】命令RVBYのフォーマット図である。
【図132】そのフラッグ変化の説明図である。
【図133】命令RVBIのフォーマット図である。
【図134】そのフラッグ変化の説明図である。
【図135】ビット操作命令の説明図である。
【図136】ビット操作命令の説明図である。
【図137】命令BTSTのフォーマット図である。
【図138】そのフラッグ変化の説明図である。
【図139】命令BSETのフォーマット図である。
【図140】そのフラッグ変化の説明図である。
【図141】命令BCLRのフォーマット図である。
【図142】そのフラッグ変化の説明図である。
【図143】命令BNOTのフォーマット図である。
【図144】そのフラッグ変化の説明図である。
【図145】命令BSCHのフォーマット図である。
【図146】そのフラッグ変化の説明図である。
【図147】固定長ビットフィールド操作命令の説明図
である。
【図148】ビットフィールド命令のフォーマット図で
ある。
【図149】ビットフィールド命令のフォーマット図で
ある。
【図150】命令BFEXTのフォーマット図である。
【図151】そのフラッグ変化の説明図である。
【図152】命令BFEXTUのフォーマット図であ
る。
【図153】そのフラッグ変化の説明図である。
【図154】命令BFINSのフォーマット図である。
【図155】そのフラッグ変化の説明図である。
【図156】命令BFINSUのフォーマット図であ
る。
【図157】そのフラッグ変化の説明図である。
【図158】命令BFCMPのフォーマット図である。
【図159】そのフラッグ変化の説明図である。
【図160】命令BFCMPUのフォーマット図であ
る。
【図161】そのフラッグ変化の説明図である。
【図162】命令BVSCHのフォーマット図である。
【図163】そのフラッグ変化の説明図である。
【図164】命令BVMAPのフォーマット図である。
【図165】そのフラッグ変化の説明図である。
【図166】命令BVMAPのフォーマット図である。
【図167】命令BVMAPのフォーマット図である。
【図168】命令BVMAPのフォーマット図である。
【図169】命令BVCPYのフォーマット図である。
【図170】そのフラッグ変化の説明図である。
【図171】命令BVPATのフォーマット図である。
【図172】そのフラッグ変化の説明図である。
【図173】命令ADDDXのフォーマット図である。
【図174】そのフラッグ変化の説明図である。
【図175】命令SUBDXのフォーマット図である。
【図176】そのフラッグ変化の説明図である。
【図177】命令PACKssのフォーマット図であ
る。
【図178】そのフラッグ変化の説明図である。
【図179】命令UNPKssのフォーマット図であ
る。
【図180】そのフラッグ変化の説明図である。
【図181】命令UNPKssの説明図である。
【図182】命令SMOVのフォーマット図である。
【図183】そのフラッグ変化の説明図である。
【図184】命令SCMPの説明図である。
【図185】そのフラッグ変化の説明図である。
【図186】そのフラッグ変化の説明図である。
【図187】命令SSCHのフォーマット図である。
【図188】そのフラッグ変化の説明図である。
【図189】命令SSTRのフォーマット図である。
【図190】そのフラッグ変化の説明図である。
【図191】命令QINSのフォーマット図である。
【図192】そのフラッグ変化の説明図である。
【図193】命令QINSの説明図である。
【図194】命令QINSの説明図である。
【図195】命令QINSの説明図である。
【図196】命令QDELのフォーマット図である。
【図197】そのフラッグ変化の説明図である。
【図198】命令QDELの説明図である。
【図199】命令QDELの説明図である。
【図200】命令QDELの説明図である。
【図201】命令QSCHのフォーマット図である。
【図202】そのフラッグ変化の説明図である。
【図203】命令QSCHの説明図である。
【図204】命令QSCHの説明図である。
【図205】命令QSCHの説明図である。
【図206】命令BRAのフォーマット図である。
【図207】そのフラッグ変化の説明図である。
【図208】命令Bccのフォーマット図である。
【図209】そのフラッグ変化の説明図である。
【図210】命令BSRのフォーマット図である。
【図211】そのフラッグ変化の説明図である。
【図212】命令JMPのフォーマット図である。
【図213】そのフラッグ変化の説明図である。
【図214】命令JSRのフォーマット図である。
【図215】そのフラッグ変化の説明図である。
【図216】命令ACBのフォーマット図である。
【図217】そのフラッグ変化の説明図である。
【図218】命令ACBの説明図である。
【図219】命令SCBのフォーマット図である。
【図220】そのフラッグ変化の説明図である。
【図221】命令ENTERのフォーマット図である。
【図222】そのフラッグ変化の説明図である。
【図223】命令ENTERの説明図である。
【図224】命令EXITDの説明図である。
【図225】そのフラッグ変化の説明図である。
【図226】命令EXITDの説明図である。
【図227】命令RTSのフォーマット図である。
【図228】そのフラッグ変化の説明図である。
【図229】命令NOPのフォーマット図である。
【図230】そのフラッグ変化の説明図である。
【図231】命令PIBのフォーマット図である。
【図232】そのフラッグ変化の説明図である。
【図233】命令BSETIのフォーマット図である。
【図234】そのフラッグ変化の説明図である。
【図235】命令BCLRIのフォーマット図である。
【図236】そのフラッグ変化の説明図である。
【図237】命令CSIのフォーマット図である。
【図238】そのフラッグ変化の説明図である。
【図239】命令LDCのフォーマット図である。
【図240】そのフラッグ変化の説明図である。
【図241】命令STCのフォーマット図である。
【図242】そのフラッグ変化の説明図である。
【図243】命令LDPSBのフォーマット図である。
【図244】そのフラッグ変化の説明図である。
【図245】命令LDPSMのフォーマット図である。
【図246】そのフラッグ変化の説明図である。
【図247】命令STPSBのフォーマット図である。
【図248】そのフラッグ変化の説明図である。
【図249】命令STPSMのフォーマット図である。
【図250】そのフラッグ変化の説明図である。
【図251】命令LDPのフォーマット図である。
【図252】そのフラッグ変化の説明図である。
【図253】命令STPのフォーマット図である。
【図254】そのフラッグ変化の説明図である。
【図255】命令JRNGのフォーマット図である。
【図256】そのフラッグ変化の説明図である。
【図257】命令JRNGのフォーマット図である。
【図258】命令JRNGのフォーマット図である。
【図259】命令JRNGのフォーマット図である。
【図260】命令JRNGのフォーマット図である。
【図261】命令JRNGのフォーマット図である。
【図262】命令JRNGのフォーマット図である。
【図263】命令RRNGのフォーマット図である。
【図264】そのフラッグ変化の説明図である。
【図265】命令RRNGの説明図である。
【図266】命令RRNGの説明図である。
【図267】命令RRNGの説明図である。
【図268】命令TRAPAのフォーマット図である。
【図269】そのフラッグ変化の説明図である。
【図270】命令TRAPのフォーマット図である。
【図271】そのフラッグ変化の説明図である。
【図272】命令REITのフォーマット図である。
【図273】そのフラッグ変化の説明図である。
【図274】命令REITのフォーマット図である。
【図275】命令WAITのフォーマット図である。
【図276】そのフラッグ変化の説明図である。
【図277】命令LDCTXのフォーマット図である。
【図278】そのフラッグ変化の説明図である。
【図279】命令STCTXのフォーマット図である。
【図280】そのフラッグ変化の説明図である。
【図281】命令ACSのフォーマット図である。
【図282】そのフラッグ変化の説明図である。
【図283】命令MOVPAのフォーマット図である。
【図284】そのフラッグ変化の説明図である。
【図285】命令MOVPAのフォーマット図である。
【図286】命令MOVPAのフォーマット図である。
【図287】命令LDATEの説明図である。
【図288】そのフラッグ変化の説明図である。
【図289】そのフラッグ変化の説明図である。
【図290】命令STATEのフォーマット図である。
【図291】そのフラッグ変化の説明図である。
【図292】そのフラッグ変化の説明図である。
【図293】命令PTLBのフォーマット図である。
【図294】そのフラッグ変化の説明図である。
【図295】命令PSTLBのフォーマット図である。
【図296】そのフラッグ変化の説明図である。
【図297】ATフィールドの説明図である。
【図298】論理アドレスの説明図である。
【図299】ページアドレスの説明図である。
【図300】多重論理空間の説明図である。
【図301】UATBのフォーマット図である。
【図302】SATBのフォーマット図である。
【図303】SXの制限を示す説明図である。
【図304】テーブル領域の説明図である。
【図305】テーブル領域の説明図である。
【図306】テーブル領域の説明図である。
【図307】STEのフォーマット図である。
【図308】PXの制限を示す説明図である。
【図309】STEの説明図である。
【図310】論理アドレスの説明図である。
【図311】PTEのフォーマット図である。
【図312】PTEの各値とアクセス可能リングとの関
係を示す説明図である。
【図313】PTEの説明図である。
【図314】本発明装置の論理アドレス拡張に係るメモ
リマップの図である。
【図315】本発明装置の論理アドレス拡張に係るメモ
リマップの図である。
【図316】データ転送命令のフラッグ変化の説明図で
ある。
【図317】比較テスト命令のフラッグ変化の説明図で
ある。
【図318】算術演算命令のフラッグ変化の説明図であ
る。
【図319】論理演算命令のフラッグ変化の説明図であ
る。
【図320】シフト命令のフラッグ変化の説明図であ
る。
【図321】ビット操作命令のフラッグ変化の説明図で
ある。
【図322】固定長ビットフィールド命令のフラッグ変
化の説明図である。
【図323】固定長ビットフィールド命令のフラッグ変
化の説明図である。
【図324】任意長ビットフィールド命令のフラッグ変
化の説明図である。
【図325】10進演算命令のフラッグ変化の説明図で
ある。
【図326】ストリング命令のフラッグ変化の説明図で
ある。
【図327】キュー操作命令のフラッグ変化の説明図で
ある。
【図328】ジャンプ命令のフラッグ変化の説明図であ
る。
【図329】マルチプロセッサ命令のフラッグ変化の説
明図である。
【図330】制御空間、物理空間操作命令のフラッグ変
化の説明図である。
【図331】OS関連命令のフラッグ変化の説明図であ
る。
【図332】MMU関連命令のフラッグ変化の説明図で
ある。
【図333】サブルーチンコールの説明図である。
【図334】スタックフレームの説明図である。
【図335】命令シーケンスの説明図である。
【図336】命令シーケンスの説明図である。
【図337】プログラム例を示す説明図である。
【図338】サブルーチンコールの説明図である。
【図339】制御空間の説明図である。
【図340】PSWのフォーマット図である。
【図341】IMASKのフォーマツト図である。
【図342】SMRNGのフォーマット図である。
【図343】CTXBBのフォーマット図である。
【図344】DIのフォーマット図である。
【図345】CSWのフォーマット図である。
【図346】DCEのフォーマット図である。
【図347】CTXBFMのフォーマット図である。
【図348】EITVBのフォーマット図である。
【図349】JRNGVBのフォーマット図である。
【図350】SP0〜SP3のフォーマット図である。
【図351】SPIのフォーマット図である。
【図352】IOADDR,IOMASKのフォーマッ
ト図である。
【図353】UATBのフォーマット図である。
【図354】SATBのフォーマット図である。
【図355】LSIDのフォーマット図である。
【図356】CTXBのフォーマット図である。
【図357】CTXBFMのフォーマット図である。
【図358】EITVTEのフォーマット図である。
【図359】スタックフレームの説明図である。
【図360】EITのスタックフォーマット図である。
【図361】EITのスタックフォーマット図である。
【図362】IOINFのフォーマット図である。
【図363】EITのベクトルテーブルの図である。
【図364】EITのベクトルテーブルの図である。
【図365】JRNGの説明図である。
【図366】EITの説明図である。
【図367】EITの説明図である。
【図368】IMASKの説明図である。
【図369】システムコールの説明図である。
【図370】システムコールの説明図である。
【図371】DCEの説明図である。
【図372】DCE,DI,EIの比較図である。
【図373】DCEの使用例の説明図である。
【図374】ビット割当図である。
【図375】ビット割当図である。
【図376】ビット割当図である。
【図377】ビット割当図である。
【図378】ビット割当図である。
【図379】ビット割当図である。
【図380】ビット割当図である。
【図381】ビット割当図である。
【図382】ビット割当図である。
【図383】ビット割当図である。
【図384】ビット割当図である。
【図385】ビット割当図である。
【図386】オペランドフィールド名索引図である。
【図387】オペランドフィールド名索引図である。
【図388】オペランドフィールド名索引図である。
【図389】ccccの割当て図である。
【図390】eeeeの割当て図である。
【図391】M_flagの説明図である。
【図392】BVMAP命令の演算コード図である。
【図393】アドレッシングモードの対応図である。
【図394】アドレッシングモードの対応図である。
【図395】アドレッシングモードの対応図である。
【図396】命令実行モデルのオペランドとの対応図で
ある。
【図397】PUSHA @ SP 等の説明図であ
る。
【図398】POP命令の説明図である。
【図399】MOV命令の説明図である。
【図400】PACK命令等の説明図である。
【図401】STC命令等の説明図である。
【図402】BFINS命令等の説明図である。
【図403】CMP命令の説明図である。
【図404】INDEX命令の説明図である。
【図405】ACB命令等の説明図である。
【図406】ADD命令の説明図である。
【図407】CSI命令の説明図である。
【図408】LDM命令等の説明図である。
【図409】四則演算命令の動作説明図である。
【図410】四則演算命令の動作説明図である。
【図411】四則演算命令の動作説明図である。
【図412】四則演算命令の動作説明図である。
【図413】四則演算命令の動作説明図である。
【図414】四則演算命令の動作説明図である。
【図415】オーバーフロー時のフラッグ説明図であ
る。
【図416】オーバーフロー時のフラッグ説明図であ
る。
【図417】オーバーフロー時のフラッグ説明図であ
る。

Claims (3)

    【特許請求の範囲】
  1. 【請求項1】 2つのオペランド間の加算又は減算の算
    術演算を2の補数表現による符号付き二進数として行う
    命令を指定する第1の命令コードと、2つのオペランド
    の間の前記算術演算と同一の演算を絶対値表現された符
    号なし二進数として行う命令を指定する第2の命令コー
    ドとが用意された命令セットにより表現されるプログラ
    ムを解読して、前記第1および第2の命令コードの各々
    が指定する算術演算を実行するデータ処理装置であっ
    て、 前記第1および第2の命令コードの各々で指定される命
    令によりデスティネーションオペランドに格納された演
    算結果におけるオーバーフローの発生を示す情報をフラ
    ッグで表現すべくなしてあることを特徴とするデータ処
    理装置。
  2. 【請求項2】 2つのオペランド間の加算又は減算の算
    術演算を2の補数表現による符号付き二進数として行う
    命令を指定する第1の命令コードと、2つのオペランド
    の間の前記算術演算と同一の演算を絶対値表現された符
    号なし二進数として行う命令を指定する第2の命令コー
    ドとが用意された命令セットにより表現されるプログラ
    ムを解読して、前記第1および第2の命令コードの各々
    が指定する算術演算を実行するデータ処理装置であっ
    て、 前記第1および第2の命令コードの各々で指定される命
    令によりなされた算術演算の演算結果の正負を示す情報
    をフラッグで表現すべくなしてあることを特徴とするデ
    ータ処理装置。
  3. 【請求項3】 2つのオペランドの間で2の補数表現に
    よる符号付き二進数としてその大小を比較する比較演算
    を指定する第1の命令コードと、2つのオペランドの間
    で絶対値表現された符号なし二進数としてその大小を比
    較する比較演算を指定する第2の命令コードとが用意さ
    れた命令セットにより表現されるプログラムを解読し、
    前記第1および第2の命令コードの各々が指定する比較
    演算を実行するデータ処理装置であって、 前記第1および第2の命令コードの各々に従って実行さ
    れた比較演算によるそれぞれの数学的大小関係の情報を
    フラッグで表現すべくなしてあることを特徴とするデー
    タ処理装置。
JP8241822A 1996-06-17 1996-06-17 データ処理装置 Pending JPH09288564A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP8241822A JPH09288564A (ja) 1996-06-17 1996-06-17 データ処理装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP8241822A JPH09288564A (ja) 1996-06-17 1996-06-17 データ処理装置

Publications (1)

Publication Number Publication Date
JPH09288564A true JPH09288564A (ja) 1997-11-04

Family

ID=17080021

Family Applications (1)

Application Number Title Priority Date Filing Date
JP8241822A Pending JPH09288564A (ja) 1996-06-17 1996-06-17 データ処理装置

Country Status (1)

Country Link
JP (1) JPH09288564A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002342073A (ja) * 2001-05-21 2002-11-29 Hitachi Ltd データプロセッサ
US7376820B2 (en) 2000-03-16 2008-05-20 Fujitsu Limited Information processing unit, and exception processing method for specific application-purpose operation instruction
KR20170097633A (ko) * 2014-12-23 2017-08-28 인텔 코포레이션 융합된 단일 사이클 증가-비교-점프를 수행하기 위한 명령어 및 로직

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7376820B2 (en) 2000-03-16 2008-05-20 Fujitsu Limited Information processing unit, and exception processing method for specific application-purpose operation instruction
JP2002342073A (ja) * 2001-05-21 2002-11-29 Hitachi Ltd データプロセッサ
KR20170097633A (ko) * 2014-12-23 2017-08-28 인텔 코포레이션 융합된 단일 사이클 증가-비교-점프를 수행하기 위한 명령어 및 로직
JP2018500657A (ja) * 2014-12-23 2018-01-11 インテル・コーポレーション 融合された単一のサイクルのインクリメント−比較−ジャンプを実施するための命令及びロジック

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
US5029069A (en) Data processor
US5201039A (en) Multiple address-space data processor with addressable register and context switching
Waterman et al. The RISC-V instruction set manual
US7487338B2 (en) Data processor for modifying and executing operation of instruction code according to the indication of other instruction code
SPARC International Inc et al. The SPARC architecture manual
US20040205325A1 (en) Method and software for store multiplex operation
KR101464808B1 (ko) 명령어가 이용할 수 있는 범용 레지스터의 수를 확장하는 상위-워드 기능
JP2000029704A (ja) デ―タ型によるコプロセッサの操作コ―ドの分割
WO2010004245A1 (en) Processor with push instruction
EP2083352A2 (en) Processing unit
Fog Optimizing software in C++
KR100308512B1 (ko) 편집 기능을 위한 전문 밀리코드 지시
JPH09288564A (ja) データ処理装置
JP2556870B2 (ja) データ処理装置
JPH11353305A (ja) ベクトルレジスタのアドレス指定
US5212779A (en) System for guarantee reexecution after interruption by conditionally used store buffer if microinstruction being executed is a memory write and last microinstruction
US20060026579A1 (en) Method and system for generating stacked register dumps from backing-store memory
JP2006302324A (ja) データ処理装置
Taylor 64-bit PowerPC ELF Application Binary Interface Supplement 1.7.
Gustedt Clean up atomics, non-normative changes
Darche Microprocessor 4: Core Concepts-Software Aspects
Przybylskic A Survey of RISC Architectures for Desktop, Server, and Embedded Computers
Mileff Improving Performance with SIMD Intrinsics