5 CPU命令



o 命令形式


計算機中の各命令は1パーセル(16bit)命令か、2パーセル(32bit)命令である。 命令は1ワードにつき、4パーセルがパックされている。ワード中のパーセルは 左から右に、0から3まで番号が振られており、分岐命令でどのパーセル位置で もアドレスすることができる。2パーセル命令はワードのどのパーセルからで も始まり、ワード境界を越えてもよい。例えば、ある2パーセル命令があるワー ドの第4パーセルから始まり、次のワードの最初のパーセルで終わる。ワード 境界のためのパディングは不要である。図5-1は命令の一般的な形式を示す。


図5-1. 命令の一般形式

一般形式には、 フィールドを違った使用をする 4つのバリエーションがある; 2つの形は、1パーセル形式であり、 2つの形は、2パーセル形式である。 これらの4つの形式は以下で述べる。




- 1パーセル命令形式, jとkフィールドがバラバラ

1パーセル命令の多くの共通形式は、i,j,kフィールドをそれぞれオペランドと 結果のレジスタの指定子とする(図5-2参照)。g,hフィールドはオペレーション・ コードを定義する。iフィールドは結果レジスタを指定し、j,kフィールドはオ ペランド・レジスタを指定する。いくつかの命令は、1つかそれ以上のi,j,k フィールドを無視する。次の型の命令が、この形式を使用する。


図5-2. 1パーセル命令形式,j,kフィールドがバラバラ

- 1パーセル命令形式,j,kフィールド結合

いくつかの1パーセル命令はj,kフィールドを、 結合された6bitフィールドとして 使用する(図5-3参照)。 g,hフィールドは オペレーション・コードを 持ち、iフィールドは 一般的にデスティネーション・レジスタ 識別子である。 結合されたj,kフィールドは、 一般的に定数,BかTレジスタ指定子 を持つ。 分岐命令005と 次に示す型の命令が、 j,kフィールドが結合された 1パーセル命令形式を使用する。


図5-3. 1パーセル命令形式,j,kフィールド結合

- 2パーセル命令形式,j,k,mフィールド結合

22bit即値のための命令の型は、 定数を保持するために、 結合されたj,k,mフィールドを使用する。 7bitのghフィールドは オペレーション・コードを 持ち、3bitのiフィールドが 結果レジスタを指定する。 この形式を使用する命令は、 22bitのjkm定数をAかSレジスタに 転送する。

スカラ・メモリ転送に使用される 命令の型は、 アドレス偏差(ディスプレイスメント (修飾のオフセット))のために、 22bitのjkmフィールドを 要求する。 この命令型は、 4bitのgフィールドを 命令コードに使用し、 3bitのhフィールドを インデックス・レジスタの指定に、 3bitのiフィールドを ソースか結果レジスタの指定に 使用する。 (「特殊レジスタの値」節を参照)

図5-4は、 j,k,mフィールドを結合した2パーセル 命令形式の、一般的な2つの 適用を示している。


図5-4. 2パーセル命令形式,j,k,mフィールド結合

- 2パーセル命令形式,i,j,k,mフィールド結合

分岐のための2パーセル命令型(図5-5)は、 ある命令パーセルへ 分岐するのための 24bitアドレスを持つために、 結合したi,j,k,mフィールドを 使用する。 7bitオペレーション・コード(gh) に、ijkmフィールドが続く。 iフィールドの最上位ビットは 0である。

24bit即値のための2パーセル 命令型(図5-6)は、 結合したi,j,k,mフィールドを 定数を保持するために 使用する。 この命令の型は 4bitのgフィールドを オペレーション・コードに、 3bitのhフィールドを結果アドレス ・レジスタを指定するのに使用する。 iフィールドの最上位ビットは1である。


図5-5. 結合したi,j,k,mフィールドを持つ、分岐のための2パーセル命令形式


図5-6. 結合したi,j,k,mフィールドを持つ、24bit即値定数のための2パーセル命令形式
pp5.4

- 特殊レジスタ値

もし、S0とA0レジスタが、 命令のjかkフィールドで 参照されていたら、 各々のレジスタの内容は 使用されない。 その代わり、特別なオペランドが 生成される。 特殊値は、 A0かS0への予約の存在には 無頓着に利用可能である (そして、このケースでは予約はチェックされない) もし、S0かA0がiフィールドで オペランドとして使用されていたら、 レジスタの本当の値が提供される。 次の表が、特殊値を示す。

フィールド オペランド値
Ah, h=0 0
Ai, i=0 (A0)
Aj, j=0 0
Ak, k=0 1
Si, i=0 (S0)
Sj, j=0 0
Sk, k=0 2^63
pp.5-5 --

命令は 一度に1パーセルが 命令バッファから読まれ、 次命令パーセル(NIP)レジスタへ 配送される。 直前の命令が発行したら、 命令は現在命令パーセル(CIP) レジスタへ渡される。 実行に必要な機能の実行が 先に発行された命令と 衝突無しに可能であるというような、 条件が、機能ユニットとレジスタで満たされるとき、 CIPレジスタ中の命令が発行される。 CIPレジスタ外の 命令パーセルは、最高レート、 1クロック周期ごとに発行可能である。

実行時間(発行から、デスティネーションの操作レジスタへデータが届けられ るまでの時間)は命令000から077まで固定である。ただし、メモリ参照をする もの(命令000,004, 分岐命令005から017までと、ブロック転送命令034から 037)を除いて。スカラ・メモリ命令100から137は、可変長時間で完了する。 ベクトル操作命令140から177は、命令がメモリ・フェッチとチェインされてい なければ固定時間で完了する。

実行時間は、jkで指定されたセマフォをテスト・アンド・セットする命令 0034jkによって影響を受ける。もし、セマフォがセットされていたら、他の CPUがそのセマフォをクリアするまで、命令発行はホールドされる。もしセマ フォがクリアされていたら、命令は発行し、セマフォをセットする。クラスタ 中の全CPUがテスト・アンド・セットで発行がホールドされたら、(モニタ・モー ドでなければ) 交換パッケージ中のフラグがセットされ、交換が発生する。テ スト・アンド・セット命令がCIPレジスタ内でホールドの期間中に割り込みが 発生したら、交換パッケージ中のフラグはセットされ、CIPとNIPレジスタはク リアされ、Pレジスタがテスト・アンド・セット命令を指すようにしながら、 交換が発生する。

2パーセル命令の2番目のパーセルのNIPレジスタへの登録はブロックされ、 NIPは空になる。その代わり、そのパーセルは低側命令パーセル(Lower Instruction Parcel:LIP) レジスタへ送られる。NIP中の零(仮想第二パーセル) がCIPへ送られ、何もしない命令として発行する。

Ah,Aj,Ak,Sj,Skのための命令で特殊レジスタ値(A0かS0)が選択された時、通常 の「オペランドが準備できるまで発行がホールドする」条件は適用されない。 これらの値は、常に即座に利用できる。

- 命令解説

この節には、個々の命令や関連した命令のグループについての細かい情報があ る。各命令は、CAL(Crayアセンブリ言語)文法形式、各命令の要約記述、ghフィー ルドで定義された八進コード列の情報から成る箱型の情報から始まる。形式中 のmの出現は、命令が2つのパーセルから成ることを示す。

引き続く箱型情報は、発行ホールド条件のリスト、実行時間、特殊なケースを 含む、命令や命令達のもっと詳しい記述がある。発行ホールド条件は、条件が 一致するまで命令の発行を遅らせる条件を参照する。

命令発行時間は、次のようなものである、もしある命令がクロック周期n (CP n)で発行したのであれば、次の命令は、それの発行条件が一致したら
CP n+発行時間(注+)
で発行する。
(注+ : 前の命令が発行した後)

次の特殊文字は、記号機械命令のオペランド・フィールド記述に現れ、実行さ れる操作を決定するアセンブラで使用される。

pp.5-6

命令中では、以下の文字の前にレジスタ指定子が置かれる。それらはアセンブ ラで特別な意味を持つ。

pp.5-6
命令000
CAL文法 記述 八進コード
ERR エラー終了 000000

命令000は、エラー状態として扱われ、交換シーケンスが起動する。命令バッ ファの内容は、交換シーケンスにより破棄される。命令000は、誤って記述さ れたメモリの未使用領域(もし、メモリが0で埋めつくされていれば)や、デー タ領域(もしデータが、正の整数、右詰ASCII、浮動小数点0ならば) へ分岐す るプログラムの実行を停止する。もしモニタモードが有効でなければ、Fレジ スタ中のErrorExitフラグがセットされる。この命令の前に発行された全命令 は完了するまで実行される。先に発行された命令の結果がオペレーティング・ レジスタ(操作レジスタ)に到着した時、XAレジスタの内容によって指定された、 交換パッケージで交換が起動する。交換シーケンス終了時に、交換中に格納さ れるプログラムのアドレスはPレジスタの内容を1進めたものである(つまり、 ErrorExit命令に引き続く命令のアドレスである)。

ホールド発行条件: A,S,Vレジスタのどれかが予約済み

実行時間: 命令発行, 40CP; この時間には交換シーケンス(24CP) とフェッチ操作(16CP)を含む

特殊条件: 無し


--
命令 0010 - 0013
CAL文法 記述 八進コード
CA,Aj Ak (Aj)で示される チャンネルの カレント・アドレス(CA)レジスタをから(Ak)にセットし、 チャンネルをアクティベートする。 0010jk
CL,Aj Ak (Aj)で示される チャンネルの リミット・アドレス(LA)レジスタをから(Ak)にセットする。 0011jk
CI,Aj (Aj)で示されるチャンネルの 割り込みフラグとエラーフラグ をクリアする; デバイスのマスタ-クリアをクリアする(出力チャンネルの)。 0012j0
MC,Aj (Aj)で示されるチャンネルの 割り込みフラグとエラーフラグ をクリアする; デバイスのマスタ-クリアをクリアする(出力チャンネル); デバイスのレディ-保持(入力チャンネル); 0012j1
XA Aj (Aj)をXAレジスタに登録 0013j0

命令0010から0013は、モニタモードの特権でオペレーティング・システムを便 利な操作が提供されている。機能はi指定子で選択される。もしモニタモード・ ビットがセットされていなければ、命令はパス(pass)命令と同様に扱われる。

i指定子が0,1,2のどれかの時、命令はIOチャンネルの操作を制御する。各チャ ンネルはチャンネルのアクティビティを指定するのに、2つのレジスタを持っ ている。チャンネルのCAレジスタは、現在の(カレント)チャンネル・ワードの アドレスを持っている。CLレジスタは、限界(リミット) アドレスを指定する。 チャンネルのプログラミングでは、最初にCLレジスタを初期化し、それからCA レジスタをセットして、チャンネルをアクティベートする。CAがCLになるまで 転送が続く。(CA)が(CL)と同一になった時、最初の(CA)から(CL)-1までのワー ドの転送が完了する。j指定子が0であるかAjの下4ビットが7(八進)より小さい とき、機能はパス(pass)命令と同様に実行される。正しいチャンネル番号は 7-17(八進)である。k指定子が0の時、CAかCLは1にセットされる。

i指定子が3の時、命令は(Aj)の2^11ビットから2^4をXAレジスタへ転送する。j 指定子が0の時、XAレジスタはクリアされる。

命令0012j0はデバイス・マスタ・クリアをクリアするために使用される。命令 0012では、もし出力チャンネル用のk指定子が1ならば、マスタ・クリアがセッ トされ、もし入力チャンネル用のk指定子が1ならば、レディ・フラグがクリア される。

ホールド発行条件:

実行時間:

特殊条件:

----
注意

CPU間にはハードウェア・インターロックはまったく無い。2つのCPUでこれら の命令を同時に発行することが可能になっている。しかし、それにより、決定 できない結果が発生する。

ソフトウェアは、モニタ・モードの間、一時に、ただ一つのCPUがIOサービス を行うように保証しなければならない。
-------
pp.5-10


---
命令0014
CAL文法 記述 八進コード
RT Sj 実時間クロック・レジスタに(Sj)を登録 0014j0
IP 1 他のプロセッサへのプロセッサ間割り込み要求をセット 001401
IP 0 他のプロセッサからの、プロセッサ間割り込み要求をクリア 001402
CLN 0 クラスタ番号=0に 001403
CLN 1 クラスタ番号=1に 001413
CLN 2 クラスタ番号=2に 001423
CLN 3 クラスタ番号=3に 001433
PCI Sj 割り込みインターバル(II)レジスタに(Sj)を登録 0014j4
CCI プログラム可能クロックの割り込み要求をクリア 001405
ECI プログラム可能クロックの割り込み要求をイネーブルに 001406
DCI プログラム可能クロックの割り込み要求を禁止に 001407

命令0014は、実時間とプログラム可能クロックを管理するための特別な機能を 実行し、割り込み要求とクラスタ番号操作を取り扱う。命令0014はモニタ・モー ドでの特権であり、モニタ・モード・ビットがセットされていないときには、 パス命令として扱われる。

k指定子が0の時は、命令はSjレジスタの内容をRTCレジスタに入れる。j指定子 が0か(Sj)=0ならば、RTCレジスタはクリアされる。

k指定子が1の時、命令は他のCPU内の内部CPU割り込み要求をセットする。もし、 他のCPUがモニタ・モードでなければ、Fレジスタ内の「内部CPUからの割り込 み(ICP)フラグ」がセットされ、割り込みが引き起こされる。要求は、受け取っ たCPUが命令001402を発行することによって、クリアされるまで、残る。

k指定子が2の時、命令は、他のCPUによってセットされた内部CPU割り込み要求 をクリアする。

k指定子が3の時、命令は、次のクラスタ選択を行うために、クラスタ番号をj にする:

クラスタ1,2,3は、それぞれSM,SB,STレジスタのセマフォの組を持つ。

k指定子が4の時、命令はSjレジスタから下32ビットをIIレジスタとICDカウン タの両方へロードする。j指定子が0か(Sj)=0の時、IIとICDはクリアされる。

k指定子が5の時、もし要求がICDカウントダウンが0になったことによって、先 んじてプログラマブル・クロック割り込み要求がセットされていた場合、命令 は、要求をクリアする。

k指定子が6の時、プログラマブル・クロック割り込み要求の繰り返しをイネー ブルする。繰り返し率はIIレジスタ中の値で決定される。

k指定子が7の時、プログラマブル・クロック割り込み要求の繰り返しを、ディ スエーブルする。命令001406が実行されると、この要求はイネーブルされる。

ホールド発行条件:

実行時間:

特殊条件:


5-12
命令0015
CAL文法 記述 八進コード
注* 性能モニタを選択 0015j0
注* メンテナンス読み出しモードにセット 001501
注* 診断チェックバイトをS1にロード 001511
注* メンテナンス書き込みモード1にセット 001521
注* メンテナンス書き込みモード2にセット 001531
注* 現在はサポートされていない

これらの命令はすべてモニタ・モードに特権が許されている。

命令0015j0は、性能カウンタによって監視されるハードウェアに関するイベン トの4つのグループうちの1つを選択する。性能監視がどのように成し遂げられ ているかの記述は、付録C を参照。

命令001501から001531は、SECDECに関係するモジュールの操作のチェックと、 エラーの検出と訂正の検証に使用される。メインフレームの制御パネルの「メ ンテナンス・モード」スイッチは、これらの命令の実行中はONに入っていなけ ればならない。そうでなければ、命令はno-opになる。SECDECメンテナンス・ モード機能の記述については、付録Dを参照。

命令001501と001521はチェック・ビットメモリ記憶の検証に使用される。命令 001501は、引き続くすべてのメモリ読み出し(フェッチとI/Oも含む)の、CPUパ スのいくつかのデータ・ビットを、SECDED用の8チェック・ビットと置き換え るようにする。命令001521は、引き続くすべてのメモリ書き込みの、いくつか のデータ・ビットを、SECDED用の8チェック・ビットと置き換えるようにする。

命令001511と001531は、エラー検出訂正の検証に使用される。命令001511は、 診断チェック・バイトをS1の上位8bitにロードする。命令001531は、引き続く すべてのメモリ書き込みの、書き込もうとしているSECDED用の8チェック・ビッ トを8bitの診断チェック・バイトと置き換えるようにする。

pp 5-13


命令0020
CAL文法 記述 八進コード
VL Ak (Ak)をVLレジスタへ転送 00200k
VL 1 (注+) lをVLレジスタへ転送 002000
(注+: 特殊CAL文法)

命令00200kは、 Akの内容で指定される値を VLレジスタへ入れる。 (Ak)の下位6bitがVLレジスタに入る。 もし。(Ak)の下位6bitが0ならば、 VLの7番目のビットがセットされる。 (***訳注:(Ak)の下6bitが0の時は、64を表し、 VLレジスタには、64が入る***) 例えば、もし(Ak)=0または100(八進)の倍数 であったら、VL=100(八進)である。 VLの内容はいつも1から100(八進)の間である。 命令002000は、値1をVLレジスタに送る。 ホールド発行条件:Akが予約済み (A0を除く) 実行時間: 命令発行, 1CP VLレジスタ・レディ, 1CP 特殊条件: 最大ベクトル長は64. (Ak)=1 とする、もし k=0 なら. (VL)=100(八進) とする、もし k≠0 かつ (Ak)=0か(Ak)が100(八進)の倍数であれば. pp 5-14


命令0021 - 0027
CAL文法 記述 八進コード
EFI 浮動小数点エラー割り込みを許可 002100
DFI 浮動小数点エラー割り込みを禁止 002200
ERI オペランド(アドレス)範囲エラー割り込みを許可 002300
DRI オペランド(アドレス)範囲エラー割り込みを禁止 002400
DBM 双方向メモリ転送を禁止 002500
EBM 双方向メモリ転送を許可 002600
CMR メモリ参照を完了 002700

命令002100は、Mレジスタ中の浮動小数点モード(Floating-point Mode)フラグ を、セットする。命令002200は、Mレジスタ中の浮動小数点モード (Floating-point Mode)フラグを、クリアする。2つの命令はフラグの前の状態 をチェックしない。浮動小数点モード(Floating-point Mode)フラグがセット されているとき、4章で述べた浮動小数点範囲エラーでの割り込みを許可する。 これらの命令のどちらかが発行するとき、同時に、浮動小数点エラー・ステー タス・フラグがクリアされる。

命令002300は、Mレジスタ中のオペランド範囲モード(Operand Range Mode)フ ラグをセットする。命令002400は、Mレジスタ中のオペランド範囲モード・フ ラグをクリアする。2つの命令はフラグの前の状態をチェックしない。オペラ ンド範囲モード(Operand Range Mode)フラグがセットされているとき、3章で 述べた、オペランド(アドレス)範囲エラーでの割り込みを許可する。

命令002500は双方向メモリ転送を禁止する。命令002600は双方向メモリ転送を 許可する。双方向メモリモードでは、ブロック・リードとブロック・ライトは、 並行に動作できる。もし双方向メモリモードが禁止されていると、複数のブロッ ク・リードだけが並行に動作できる。

命令002700は、命令を発行中のCPU内のすべてのメモリ参照の完了を保証する。 命令002700は、この命令の前のすべてのメモリ参照が実行ステージにあるうち は、発行しない。参照の完了は、全部の合計時間後に発生する。例えば、CPU によってCMR命令が発行されたストアによるデータを、ロードするとき、 002700はCMR命令の後に発行されたロードが、更新されたデータを受け取るこ とを保証する。
(***訳注: ある番地に、ストア命令を発行し、CMRを発行せずに、同じ番地を 読み込むとストア前の古いデータを読むことがある。CMR でストアの完了を待っ てから、ロードを発行すると、必ず更新後のデータを読み込み事ができる***)
プロセッサ間のメモリ参照の同期は、セマフォ命令とこの命令を連結すること によって行われる。

ホールド発行条件:

実行時間:

特殊条件:

pp 5-16
命令0030, 0034, 0036,0037
CAL文法 記述 八進コード
VM Sj (Sj)をVMレジスタへ転送 0030j0
VM 0 (注+) VMレジスタをクリア 003000
SMjk 1,TS セマフォjkのテスト・アンド・セット, 0<= jk <= 31(十進) 0034jk
SMjk 0 セマフォjkのクリア, 0<= jk <= 31(十進) 0036jk
SMjk 1 セマフォjkのセット, 0<= jk <= 31(十進) 0037jk
(注+: 特殊CAL文法)

命令0030j0は、VMレジスタにSjの内容を入れる。命令003000でj指定子が0の時、 VMレジスタはクリアされる。これらの命令は、ベクトル・マージ命令(146と 147)と組み合わせて使用される。VMの内容によって、ベクトル・マージ操作が 実行される。

命令0034jkは、jkで指定されるセマフォのテスト・アンド・セットである。も しセマフォがセットされていたら、他のCPUがセマフォをクリアするまで発行 がホールドされる。もしセマフォがクリアされていたら、命令は発行し、セマ フォはセットされる。

もしクラスタ内の全CPUがテスト・アンド・セットの発行でホールドされてい たら、交換パッケージ中のDLフラグがセットされ(モニタ・モードでないとして)、 交換が発生する。

CIPレジスタ内でテスト・アンド・セット命令がホールド中に、割り込みが発 生したら、交換パッケージ中のWSフラグがセットされ、CIPとNIPレジスタがク リアされ、そして、テスト・アンド・セット命令を指しているPレジスタを持っ た交換が発生する。SMレジスタは32bitであり、SM0は最上位ビットである。

命令0036jkはjkで指定されるセマフォをクリアする。

命令0037jkはjkで指定されるセマフォをセットする。

ホールド発行条件:

実行時間:

特殊条件:

pp 5-18
命令004
CAL文法 記述 八進コード
EX 正常終了 004000

命令004は、命令バッファの内容を捨てる交換シーケンスを発生する。もしモ ニタ・モードが有効でなければ、Fレジスタ中の正常終了(Normal Exit)フラグ がセットされる。この命令の前に発行されたすべての命令は、完了まで走行さ せられる; つまり、先立って発行された命令の全結果が操作レジスタに到着し たときに、XAレジスタの内容で指定される交換パッケージへの、交換シーケン スが起動される。交換パッケージに格納されるプログラム・アドレスは、EX (正常終了)命令のアドレスから、1進んでいる。命令004はユーザ・プログラム からモニタ要求を発行するのに使用される。

ホールド発行条件:

実行時間:

特殊条件:

pp 5-19
命令005
CAL文法 記述 八進コード
J Bjk (Bjk)への分岐 0050jk

命令05 は、Pレジスタを、Bjkの内容である24bitのパーセル・アドレスにセッ トし、実行を引き続きそのアドレスから行うようにする。この命令は、サブルー チンからのリターンに使用される。

ホールド発行条件:

実行時間:

特殊条件:

pp 5-20
命令006
CAL文法 記述 八進コード
J 式 ijkmへの分岐 006ijkm

2パーセル命令006は、Pレジスタを、ijkmフィールドの下位24bitで指定される パーセル・アドレスにセットする。実行はそのアドレスから引き続く。ijkm フィールドの上位ビットは無視される。

ホールド発行条件:

実行時間:

特殊条件:

pp 5-21
命令007
CAL文法 記述 八進コード
R 式 ijkmへリターン・ジャンプする; B00を(P)+2にセット。 007ijkm

2パーセル命令007は、B00に、命令の2パーセル目に続くパーセルのアドレスを セットする。そして、Pレジスタは、ijkmフィールドの下位24bitで指定される パーセル・アドレスにセットされる。実行はそのアドレスから引き続く。ijkm フィールドの上位ビットは無視される。

この命令はサブルーチン・コールの戻りのリンクを提供する。サブルーチンに はリターン・ジャンプを通して入る。

サブルーチンは、B00レジスタの内容への分岐を実行することによって、呼び 出し元の、呼び出しに引き続く命令に戻ることができる。

ホールド発行条件:

実行時間:

特殊条件:

pp 5-22
命令010-013
CAL文法 記述 八進コード
JAZ 式 もし(A0)=0 (i2=0) なら、ijkmへの分岐 010ijkm
JAN 式 もし(A0)≠0 (i2=0) なら、ijkmへの分岐 011ijkm
JAP 式 もし(A0)が正 ((A0)=0 (i2=0)を含む) なら、ijkmへの分岐 012ijkm
JAM 式 もし(A0)が負なら、ijkmへの分岐 013ijkm

010から013の2パーセル命令は、hフィールドで指定される条件でA0の内容をテ ストする。条件が満たされたら、Pレジスタは、ijkmフィールドの下位24bitで 指定されるパーセル・アドレスにセットされ、実行はそのアドレスから引き続 く。ijkmフィールドの上位ビットは0でなければならない。条件が満たされな い時は、実行は、分岐命令の後に続く命令から引き続く。

ホールド発行条件:

実行時間:

-------
注意
フェッチが発生した場合、 メモリ衝突は遅延を生じるであろう
---

特殊条件:

pp 5-24
命令014-017
CAL文法 記述 八進コード
JSZ 式 もし(S0)=0 (i2=0) なら、ijkmへの分岐 014ijkm
JSN 式 もし(S0)≠0 (i2=0) なら、ijkmへの分岐 015ijkm
JSP 式 もし(S0)が正( (S0)=0 (i2=0)を含む) なら、ijkmへの分岐 016ijkm
JSM 式 もし(S0)が負なら、ijkmへの分岐 017ijkm

014から017の2パーセル命令は、hフィールドで指定される条件でS0の内容をテ ストする。条件が満たされたら、Pレジスタは、ijkmフィールドの下位24bitで 指定されるパーセル・アドレスにセットされ、実行はそのアドレスから引き続 く。ijkmフィールドの上位ビットは0でなければならない。条件が満たされな い時は、実行は、分岐命令の後に続く命令から引き続く。

ホールド発行条件:

実行時間:

-------
注意
フェッチが発生した場合、 メモリ衝突は遅延を生じるであろう
---

特殊条件:

pp 5-26
命令020-021
CAL文法 記述 八進コード
Ai 式 jkmを Aiへ送る 020ijkm
Ai 式 jkmの1の補数を Aiへ送る 021ijkm

2パーセル命令020は、jkmフィールドの22bitと最上位2bitの0でできた24bitの 値をAiへ入れる。

2パーセル命令021は、jkmフィールドの22bit と最上位2bitの0でできた24bit の補数をAiへ入れる。補数は、すべての1のビットを0にし、すべての0のビッ トを1にすることで作られる。命令021は、Aiの最上位2bitを1にセットする。 この命令は、負の値をAiに入れる機能を提供する。

しかし、この命令が負の数を入れるのに使用されるならば、jkmフィールドに 使用する正の数は最終的に期待する負の数の絶対値から1減少させておかねば ならない。(***訳注: インバート後に2の補数にするために、jkmに入れる数は、 1減じておく***)

ホールド発行条件:

実行時間:

特殊条件:

pp 5-27
命令022
CAL文法 記述 八進コード
Ai 式 jkをAiへ転送 022ijk

命令022は、jkフィールドの6bitをAiの下位6bitに入れる。Aiの最上位18bitは 0である。符号拡張は無い。

ホールド発行条件:

実行時間:

特殊条件: pp 5-28
命令023
CAL文法 記述 八進コード
Ai Sj (Sj)をAiへ転送 023ij0
Ai VL ベクタ長を読み出す 023i01

命令023ij0は、(Sj)の下位24bitをAiへ入れる。(Sj)の上位ビットは無視され る。

命令023i01はVLの内容をAiへ入れる。

ホールド発行条件:

実行時間:

特殊条件:

pp 5-29
命令024-025
CAL文法 記述 八進コード
Ai Bjk (Bjk)をAiへ転送 024ijk
Bjk Ai Aiを(Bjk)へ転送 025ijk

命令024はBjkの内容をAiへ入れる。

命令025はAiの内容をBjkへ入れる。

ホールド発行条件:

実行時間:

特殊条件:

pp 5-30
命令026
CAL文法 記述 八進コード
Ai PSj (Si)のポピュレーション・カウントをAiに 026ij0
Ai QSj (Si)のポピュレーション・カウント・パリティをAiに 026ij1
Ai SBj (SBi)をAiに送る 026ij7

命令026ij0は(Sj)中の1にセットされているビットの数を数える、そして結果 をAiの下位7bitに入れる。Aiの上位17bitは0である。もし(Sj)=0なら、(Ai)=0 である。

命令026ij1は(Sj)中の1にセットされているビットの数を数える。そして、最 下位ビットは結果が奇数か偶数かを表しており、それがAjの最下位ビット位置 に送られる。上位23bitはクリアされる。ポピュレーションカウントそのもの は転送されない。

命令026ij0と026ij1はポピュレーション/リーディング・ゼロ・カウント機能 ユニットで実行される。

命令026ij7は、CPU間で共有されているSBjレジスタの内容をAjへ送る。

ホールド発行条件:

実行時間:

特殊条件:

pp. 5-32
命令027
CAL文法 記述 八進コード
Ai ZSj (Sj)のリーディング・ゼロのカウントをAiへ。 027ij0
SBj Ai (Ai)をSBjへ。 027ij7

命令027ij0はSjのリーディング・ゼロの数を数え、結果をAiの下位7bitに入れ る。上位17bitは0である。命令027ij0はポピュレーション/リーディング・ゼ ロ・カウント機能ユニットで実行される。
(訳注: リーディング・ゼロとは、1の立っているビットまでの上位ビットの0 の部分である)

命令027ij7は(Aj)を、同一クラスタ中のCPU間で共有されているSBjレジスタへ 格納する。

ホールド発行条件:

実行時間:

特殊条件:

pp 5-33
命令030-031
CAL文法 記述 八進コード
Ai Aj+Ak (Aj)と(Ak)の整数加算してAiに 030ijk
Ai Ak (注+) (Ak)をAiに送る 030i0k
Ai Aj+1 (注+) (Aj)と1の整数加算してAiへ 0303ij0
Ai Aj-Ak (Aj)から(Ak)を整数減算してAiに 031ijk
Ai -1 (注+) Aiに-1を送る 031i00
Ai -Ak (注+) Aiに(Ak)の補数を送る 031i0k
Ai Aj-1 (注+) (Aj)から1を整数減算してAiに 031ij0

命令030は(Aj)と(Ak)を加算して、結果をAiに入れる。オーバーフローは検出 されない。

命令031は(Aj)と(Ak)を減算して、結果をAiに入れる。オーバーフローは検出 されない。

命令030と031はアドレス加算機能ユニットで実行される。

ホールド発行条件:

実行時間:

特殊条件:

pp 5-34
命令032
CAL文法 記述 八進コード
Ai Aj*Ak (Aj)と(Ak)の整数積をAiに 032ijk

命令032は(Aj)と(Ak)の整数積をとり、結果の下位24bitをAiに入れる。オーバー フローは検出されない。

命令032は、アドレス乗算機能ユニットで実行される。

ホールド発行条件:

実行時間:

特殊条件:

pp 5-35
命令033
CAL文法 記述 八進コード
Ai CI 割り込み要求の最高優先度のチャンネル番号をAiに。 033i00
Ai CA,Aj チャンネル(Aj)の現在のアドレスを、Aiに。 033ij0
Ai CE,Aj チャンネル(Aj)のエラーフラグを、Aiに。 033ij1

命令033は、チャンネルの状態情報をAiに入れる。j,k指定子とAjの内容は、欲 している情報を定義する。

j指定子が0の時、割り込み要求の最高優先度のチャンネル番号がAiへ入る。Aj の内容はjが0でないとき、チャンネル番号を指定する。チャンネルの現在アド レス(Current Address:CA)レジスタの値は、k指定子が0の時、Aiに入る。

チャンネルのエラーフラグの値は、k指定子が1の時、Aiの最下位ビットに入る。 Aiの上位ビットはクリアされる。エラーフラグは、モニタ・モードで命令0012 を使用してのみクリアできる。

命令033は、チャンネル操作と干渉せず、ユーザの実行を妨げない。

ホールド発行条件:

実行時間:

特殊条件:

pp 5-37 (151)
命令034-037
CAL文法 記述 八進コード
Bjk,Ai ,A0 アドレス(A0)で始まるメモリの(Ai)語だけを、レジスタjkで先頭を指定され るレジスタBにブロック転送。 034ijk
Bjk,Ai 0,A0 (+) アドレス(A0)で始まるメモリの (Ai)語だけを、 レジスタjkで先頭を指定される レジスタBにブロック転送。 034ijk
,A0 Bjk,Ai レジスタjkで先頭を指定される レジスタBから ブロック転送(Ai)語だけを、 アドレス(A0)で始まるメモリに ブロック転送。 035ijk
0,A0 Bjk,Ai (注+) レジスタjkで先頭を指定される レジスタBから ブロック転送(Ai)語だけを、 アドレス(A0)で始まるメモリに ブロック転送。 035ijk
Tjk,Ai ,A0 アドレス(A0)で始まるメモリの (Ai)語だけを、 レジスタjkで先頭を指定される レジスタTにブロック転送。 036ijk
Tjk,Ai 0,A0 アドレス(A0)で始まるメモリの (Ai)語だけを、 レジスタjkで先頭を指定される レジスタTにブロック転送。 036ijk
,A0 Tjk,Ai レジスタjkで先頭を指定される レジスタTから ブロック転送(Ai)語だけを、 アドレス(A0)で始まるメモリに ブロック転送。 037ijk
0,A0 Tjk,Ai (注+) レジスタjkで先頭を指定される レジスタTから ブロック転送(Ai)語だけを、 アドレス(A0)で始まるメモリに ブロック転送。 037ijk
(注+: 特殊CAL文法)

命令034から037は、メモリとB,Tレジスタ間のブロック転送を行う。

全命令において、転送されるデータの総数は、(Ai)の下位7bitで指定される。 精は、特殊条件を参照。

転送に使用されるレジスタの最初は、jkで指定される。転送が進行するにつれ、 B.TレジスタはB77かT77になるまで進む。レジスタの処理は、環状に行われる、 よって、(Ai)のカウントが終わっていなければ、B77の後はB00、T77の後はT00 が処理される。

転送命令によって参照される最初のメモリ番地は、(A0)によって指定される。 A0レジスタの内容は、命令の実行によって変更されない。メモリ参照は転送の 進行とともに1づつ増加する。

Bレジスタのメモリへの転送は、各々ワード中の24bit右詰され、上位40bitは0 にされる。メモリからBレジスタへの転送の時、下位24bitが転送され、上位 40bitは無視される。

ホールド発行条件:

実行時間:

特殊条件:

---------
注意

命令034はポートAを使用する。
命令035はポートCを使用する。
命令036はポートBを使用する。
命令037はポートCを使用する。

--------
pp 5-40 (155)
命令040-041
CAL文法 記述 八進コード
Si 式 jkmをSiへ転送 040ijkm
Si 式 jkmのコンプリメントをSiへ転送 041ijkm

2パーセル命令040と041は、即値をSへ入れる。

命令040は、22bitのjkmフィールドと上位42bitの0からなる64bitの値をSiに入 れる。

命令041は、22bitのjkmフィールドと上位42bitの0からなる値のコンプリメン トの64bitの値をSiに入れる。コンプリメントは、すべての1のビットを0に、 すべての0のビットを1に変えることでできる。したがって、命令041による、 Siの上位42bit は1にセットされる。この命令は、Siに負の値を入れるために 提供されている。レジスタの値は、jkmの1の補数(コンプリメント)であるから、 2の補数を得るためには、jkmには、-1が欲しければ0を、-2が欲しければ1を、- 4が欲しければ3、などとしなければならない。

ホールド発行条件:

実行時間:

特殊条件:

pp 5-41 (156)
命令042-043
CAL文法 記述 八進コード
Si <式 式で指定したビットだけ、右から1を立てたマスクを作りSiに入れる;jkフィー ルドには、64-expが入る。 042ijk
Si #>式 (注+) 式で指定したビットだけ、左から0の入ったマスクを作りSiに入れる;jkフィー ルドには、expが入る。 042ijk
Si 1 (注+) Siに1を入れる 042i77
Si -1 (注+) Siに1を入れる 042i00
Si >式 (注+) 式で指定したビットだけ、 左から1の入ったマスクを作り Siに入れる;jkフィールドには、 expが入る。 043ijk
Si #<式 式で指定したビットだけ、 右から0の入ったマスクを作り Siに入れる;jkフィールドには、 64-expが入る。 043ijk
Si 0 (注+) Siをクリア 043i00
(注+: 特殊CAL文法)

命令042は、Si中に、右から左に64-jk個の1が入ったマスクを生成する。例え ば、jk=0なら、Siは全部1になったビット(整数値の-1)を持ち、jk=77(八進)な ら、Siは最下位ビット以外が全部0になったビット(整数値の1)を持つ。

命令043は、Si中に、左から右にjk個の1が入ったマスクを生成する。例えば、 jk=0なら、Siは全部0になったビット(整数値の0)を持ち、jk=77(八進)なら、 Siは最下位ビット以外が全部1になったビット(整数値の-2)を持つ。

命令042と043はスカラ論理機能ユニットで実行される。

ホールド発行条件:

実行時間:

特殊条件:

pp 5-42
命令044-051
CAL文法 記述 八進コード
Si Sj&Sk (Sj)と(Sk)の論理積をSiに。 044ijk
Si Sj&SB (注+) (Sj)の符号ビットをSiに。 044ij0
Si SB&Sj (注+) (Sj)の符号ビットをSiに。(j≠0) 044ij0
Si #Sj&Sk (Sk)の補数と(Sj)の論理積をSiに。 045ijk
Si #SB&Sj (注+) (Sj)の符号ビットをクリアしてSiに。 045ij0
Si Sj Sk (Sk)と(Sj)の論理差をSiに。 046ijk
Si Sj SB (注+) (Sj)の符号ビットを反転しSiに。 046ij0
Si SB Sj (注+) (Sj)の符号ビットを反転しSiに。(j≠0) 046ij0
Si #Sj Sk (Sk)と(Sj)の論理一致をSiに。 047ijk
Si #Sk (注+) (Sk)の1の補数をSiに。 047i0k
Si #Sj SB (注+) (Sj)と符号ビットの論理一致をSiに。 047ij0
Si #SB Sj (注+) (Sj)と符号ビットの論理一致をSiに。(j≠0) 047ij0
Si #SB (注+) 符号ビットの1の補数をSiに。 047i00
Si Sj!Si&Sk スカラのマージ 050ijk
Si Sj!Si&SB (注+) (Si)と(Sj)の 符号ビットの スカラのマージをSiに 050ij0
Si Sj!Sk (Sj)と(Sk)の論理和をSiに 051ijk
Si Sk (注+) (Sk)をSiに転送 051i0k
Si Sj!SB (注+) (Sj)と符号ビットの論理和をSiに 051ij0
Si SB!Sj (注+) (Sj)と符号ビットの論理和をSiに (j≠0) 051ij0
Si SB (注+) 符号ビットをSiに 051i00
(注+: 特殊CAL文法)

-------
注意
命令044から051では、レジスタ指定子無しのSBは、符号ビットである。共有 アドレス・レジスタではなく。
-------

命令044から051は、スカラ論理機能ユニットで実行される。

命令044は(Sj)と(Sk)の論理積(AND)を取り、結果をSiに入れる。(Sj)と(Sk)の 対応するビットがともに1の時、Siのビットが1 にセットされる。次の例のよ うに:

 (Sj)= 1100
 (Sk)= 1010
      ------
 (Si)= 1000
 

もし、j,k指定子が0でない同じ値の時、(Sj)がSiに転送される。もし、j指定 子が0なら、Siはクリアされる。もし、j指定子が0でなく、k指定子が0なら、 (Sj)の符号ビットがSiに転送される。

命令045は、(Sk)のコンプリメントと(Sj)の論理積(AND)を取り、結果をSiに入 れる。(Sk)のコンプリメントと(Sj)の対応するビットともに1の時、Siのビッ トが1 にセットされる。次の例のように。ここで(Sk')は(Sk)のコンプリメン トである:
もし (Sk)=1010なら

  (Sj) = 1100
  (Sk')= 0101
        ------
  (Si) = 0100
 

もし、j,k指定子が同じ値か、j指定子が0なら、Siはクリアされる。もし、j指 定子が0でなく、k指定子が0なら、(Sj)の符号ビットがクリアされてSiに転送 される。

命令046は(Sj)と(Sk)の論理差(排他的論理和;EOR)を取り、結果をSiに入れる。 (Sj)と(Sk)の対応するビットが違うとき、Siのビットが1 にセットされる。次 の例のように:

 (Sj)= 1100
 (Sk)= 1010
      ------
 (Si)= 0110
 

もし、j,k指定子が0でない同じ値の時、Siはクリアされる。もし、j指定子が0 で、k指定子が0でないなら、(Sk)がSiに転送される。もし、j指定子が0でなく、 k指定子が0なら、(Sj)の符号ビットが反転され、Siに転送される。

命令047は(Sj)と(Sk)の論理的一致(訳注:EORの反転)を取り、結果をSiに入れ る。(Sj)と(Sk)の対応するビットが同じとき、Siのビットが1 にセットされる。 次の例のように:

 (Sj)= 1100
 (Sk)= 1010
      ------
 (Si)= 1001
 

もし、j,k指定子が0でない同じ値の時、Siはすべて1がセットされる。もし、j 指定子が0で、k指定子が0でないなら、(Sk)のコンプリメントがSiに転送され る。もし、j指定子が0でなく、k指定子が0なら、(Sj)の符号ビットを除くすべ てのビットが反転され、結果がSiに転送される。結果は、命令046によって生 成されたものの反転である。

命令050は(Sk)中の1のマスクによって、(Sj)と(Si)の内容をマージする。結果 は、次の論理方程式で定義される。ここでSk'はSkのコンプリメント(反転) で ある:

(Si)= (Sj)(Sk) + (Si)(Sk')

もし、(Sk)=11110000なら

 (Sk')=00001111
 (Si) =11001100
 (Sj) =10101010
     -----------
 (Si) =10101100
 

命令050は、64bitワードの一部をマージして、組み合わせたワードにすること を意図している。もし、j指定子が0で、k指定子が0でないなら、Skの対応する ビットが1の時、Siのビットはクリアされる。もし、j指定子が0でなく、k指定 子が0なら、(Sj)の符号ビットはSiの符号ビットに置き換わる。もし、j,k指定 子が両方0の時、Siの符号ビットはクリアされる。

命令051は、(Sj)と(Sk)の論理和(OR)を取り、結果をSoに入れる。(Sj)と(Sk) の対応するビットのどちらかが1の時、Siのビットがセットされる。次の例の ように:

 (Sj)= 1100
 (Sk)= 1010
      -----
 (Si)= 1110
 

もし、j,k指定子が0でない同じ値の時、Siに(Si)が転送される。もし、j指定 子が0で、k指定子が0でないなら、(Sk) がSiに転送される。もし、j指定子が0 でなく、k指定子が0なら、(Sj)の符号ビットを1にして、Siに転送される。も し、j,k指定子が両方0の時、Siの符号ビットのみからなる1のマスクがSiに入 る。

ホールド発行条件:

実行時間:

特殊条件:

pp5-46 (160)
命令 052 - 055
CAL文法 記述 八進コード
S0 Si<式 (Si)を式だけ左シフトして、S0に置く。式=jk 052ijk
S0 Si>式 (Si)を式だけ右シフトして、S0に置く。式=64-jk 053ijk
Si Si<式 (Si)を式だけ左シフトして、Siに置く。式=jk 054ijk
Si Si>式 (Si)を式だけ右シフトして、Siに置く。式=64-jk 055ijk

命令052から055はスカラ・シフト機能ユニットで実行される。Sレジスタ中の 値をjkで指定された分だけシフトする。どのシフトも終端からは0が満たされ る。

命令052は(Si)をjkだけ左にシフトし、結果をS0に入れる。シフト幅は0から63 左である。

命令053は(Si)を64-jkだけ右にシフトし、結果をS0に入れる。シフト幅は1か ら64右である。

命令054は(Si)をjkだけ左にシフトし、結果をSiに入れる。シフト幅は0から63 左である。

命令055は(Si)を64-jkだけ右にシフトし、結果をSiに入れる。シフト幅は1か ら64右である。

ホールド発行条件:

実行時間:

特殊条件:

pp 5-47
命令 056 - 057
CAL文法 記述 八進コード
Si Si,Sj (Si)と(Sj)を(Ak)だけ左シフトして、Siに置く。 056ijk
Si Si,Sj<1 (注+) (Si)と(Sj)を左に1シフトして、Siに置く。 056ij0
Si Si (Si)を左に(Ak)だけシフトして、Siに置く。 056i0k
Si Sj,Si>Ak (Sj)と(Si)を(Ak)だけ右シフトして、Siに置く。 057ijk
Si Sj,Si>1 (注+) (Sj)と(Si)を右に1シフトして、Siに置く。 057ij0
Si Si>Ak (注+) (Si)を右に(Ak)だけシフトして、Siに置く。 057i0k
(注+: 特殊CAL文法)

命令056から057はスカラ・シフト機能ユニットで実行される。

論理的につながれたSレジスタの128bitの値をシフトする。シフト数はAkレジ スタに保持される。すべてのシフト数(Ak)は、正であると考えられ、(Ak)の 24bitすべてがシフト数に使用される。もしk指定子が0なら、1ビットシフトと なる。もしj=0なら、シフトされる数は、Sjの値には0が使用されるので、 128bitというより、64bitである。

シフト数が64を超えず、iとj指定子が同じでかつ0でなければ、シフトは環状 である。命令056と057では、i≠jで与えられたら、(Sj)は変化しない。シフト 数が64より大きければ終端から0が満たされる。もしi=jでシフト数が64より大 きければ、それぞれ命令054か055をシフト数64 より小さい数で使った時と同 じシフトである。

命令056は、最初に、(Si)が2つのレジスタの最上位ビットを持っているとして、 (Si)と(Sj)の左シフトを行う。結果の上位64bitがSiに送られる。シフト数が 127を超える時、Siはクリアされる。命令056は、シフト数が63を超えず、j指 定子が0のとき、命令054と同じ結果を生成する。

命令057は最初に、(Sj)が2つのレジスタの最上位ビットを持っているとして、 (Sj)と(Si)の右シフトを行う。結果の下位64bitがSiに送られる。シフト数が 127を超える時、Siはクリアされる。命令057は、シフト数が63を超えず、j指 定子が0のとき、命令055と同じ結果を生成する。

ホールド発行条件:

実行時間:

特殊条件:

pp 5-49 (pp163)
命令 060 - 061
CAL文法 記述 八進コード
Si Sj+Sk (Sj)と(Sk)の整数加算をSiに 060ijk
Si Sj-Sk (Sj)と(Sk)の整数差をSiに 061ijk
Si -Sk (注+) (Sk)の2の補数をSiに 061i0k
(注+: 特殊CAL文法)

命令060は(Sj)と(Sk)の整数和をとり、結果をSiに入れる。オーバーフローは 検出されない。

命令061は(Sj)と(Sk)の整数差をとり、結果をSiに入れる。オーバーフローは 検出されない。

命令060と061はスカラ加算機能ユニットで実行される。

ホールド発行条件:

実行時間:

特殊条件:

pp 5-50
命令 062 - 063
CAL文法 記述 八進コード
Si Sj+FSk (Sj)と(Sk)の浮動小数点和をSiに 062ijk
Si +FSk (注+) (Sk)を正規化してSiに 062i0k
Si Sj-FSk (Sj)と(Sk)の浮動小数点差をSiに 063ijk
Si -FSk (注+) (Sk)の2の補数を正規化してSiに 063i0k
(注+: 特殊CAL文法)

命令062と063は、浮動小数点加算ユニットで実行される。オペランドは浮動小 数点形式であると想定される。オペランドが正規化されていなくても、結果は 正規化される。

命令062はSjとSkの浮動小数点量の和を取って、正規化された結果をSiに入れ る。

命令063はSjとSkの浮動小数点量の差を取って、正規化された結果をSiに入れ る。

オーバーフロー条件については4章に記述されている。符号ビットのセット (bit=1)された浮動小数点オペランドでは、指数0で仮数0なら0(64bit全部0)と して扱われる(注++)。
(注++: -0と考える。浮動小数点乗算機能ユニットにおいて片方のオペランド が-0である場合を除いて、浮動小数点ユニットが-0を生成することはない。通 常、数に符号を付けようとする論理操作で-0が発生する;それは0であろう。)

ホールド発行条件:

実行時間:

特殊条件:

pp 5-52 (165)
命令 064 - 067
CAL文法 記述 八進コード
Si Sj*FSk (Sj)と(Sk)の浮動小数点積をSiに 064ijk
Si Sj*HSk (Sj)と(Sk)の半精度の丸められた浮動小数点積をSiに 065ijk
Si Sj*RSk (Sj)と(Sk)の丸められた浮動小数点積をSiに 066ijk
Si Sj*ISk 逆数繰り返し; 2-(Sj)*(Sk)をSiに 067ijk

命令064から067は浮動小数点乗算ユニットで実行される。オペランドは浮動小 数点形式であると想定される。オペランドが正規化されていない時、結果が正 規化されていることは保証されない。

命令064はSjとSkの浮動小数点量の積を取って、結果をSiに入れる。

命令065はSjとSkの浮動小数点量の半精度の丸められた積を取って、結果をSi に入れる。結果の下位19bitはクリアされる。

命令066はSjとSkの浮動小数点量の丸められた積を取って、結果をSiに入れる。

命令067はSjとSkの浮動小数点量の積を取り、それを2から引いた結果をSiに入 れる。この命令は、4章浮動小数点算術演算で説明された、除算シーケンスで 使用される。

C=2-B*Aの評価において、Bは上位47ビットより小さいAのその逆数であり、正 確な逆数ではない。そうでなければ、Cは不正確であろう。逆数近似命令によっ て生成される逆数は、この規範に合致している。

ホールド発行条件:

実行時間:

特殊条件:

pp 5-54 (p168)
命令 070
CAL文法 記述 八進コード
Si /HSj (Sj)の浮動小数点逆数近似をSiに 070ij0

命令070は逆数近似機能ユニットで実行される。

命令070は、Sj内の正規化された浮動小数点量の逆数の近似の結果をSiに入れ る。この命令は、4章の浮動小数点算術演算で述べられている2つの浮動小数点 数量の除算シーケンスに現れる。

逆数近似命令は結果を上位30bitに生成する。下位18bitは0である。上位ビッ トは逆数繰り返し命令と乗算を使用して、48bitに拡張される。

ホールド発行条件:

実行時間:

特殊条件:

pp 5-55 (169)
命令 071
CAL文法 記述 八進コード
Si Ak (Ak)を符号拡張なしでSiに転送 071j0k
Si +Ak (Ak)を符号拡張付きでSiに転送 071j1k
Si +FAk (Ak)を非正規化浮動小数点数としてSiに転送 071j2k
Si 0.6 定数0.75×2^48をSiに転送 071j30
Si 0.4 定数0.5をSiに転送 071j40
Si 1. 定数1.0をSiに転送 071j50
Si 2. 定数2.0をSiに転送 071j60
Si 4. 定数4.0をSiに転送 071j70

命令071はj指定子の値に依存して機能を実行する。AレジスタからSレジスタへ の情報の転送と、頻繁に使用する浮動小数点定数の生成がその機能である。

j指定子が0なら、Ak中の24bitの値をSiへ転送する。値は符号無し整数として 扱われる。Siの上位ビットは0となる。

j指定子が1なら、Ak中の24bitの値をSiへ転送する。値は符号付き整数として 扱われる。Akの符号ビットがSiの上位ビットに拡張される。

j指定子が2なら、Ak中の24bitの値を非正規化浮動小数点数としてSiへ転送す る。(結果を正規化するには、0との加算を行う) この命令では、ビット2^62か ら2^48までに存在する指数部が40060(八進)にセットされる。仮数部の符号は Akの符号に従ってセットされる。Akの符号ビットがセットされていれば、Akの 2の補数が仮数部の大きさとしてSiに入れられ、そして、Siのビット2^63は仮 数部の符号としてセットされる。(訳注: 仮数部は符号ビットを除くと、絶対 値(正数)で保持する。仮数部の符号は、ビット2^63に置く)

その絶対値が24bitより小さい整数を浮動小数点数に変換する命令のシーケン ス:

 CAL code: A1 S1
           S1 +FA1
           S1 +FS1  9CP必要
 

j指定子が3なら、定数0.75×2^48 がSiに入れられる。(0 40060 6000 0000 0000 0000(八進)) この定数は、絶対値が47ビットより小さな整数(正数でも負 数でも) から、浮動小数点数を生成するのに使用される。

Si中の整数を変換する命令列:

 CAL code: S2 0.6
           S1 S2-S1
           S1 S2-FS1  11CP必要
 

j指定子が4なら、定数0.5 (= 0 40000 4000 0000 0000 0000(八進)) がSiに入 れられる。

j指定子が5なら、定数1.0 (= 0 40001 4000 0000 0000 0000(八進)) がSiに入 れられる。

j指定子が6なら、定数2.0 (= 0 40002 4000 0000 0000 0000(八進)) がSiに入 れられる。

j指定子が7なら、定数4.0 (= 0 40003 4000 0000 0000 0000(八進)) がSiに入 れられる。

ホールド発行条件:

実行時間:

特殊条件:

pp 5-57 (p170)
命令 072 - 075
CAL文法 記述 八進コード
Si RT (RTC)をSiへ転送 072i00
Si SM セマフォをSiへ読み出し 072i02
Si STj STjレジスタをSiへ読み出し 072i03
Si VM (VM)をSiへ転送 073i00
(注+) 性能カウンタをSiへ読み出す 073i11
(注+) 性能カウンタをインクリメント 073i21
(注+) 全メンテナンス・モードをクリア 073i31
Si SRj (SRj)をSiに転送;j=0 073ij1
SM Si Siからセマフォへロード 073i02
STj Si Siから(STj)レジスタへロード 073ij3
Si Tjk (Tjk)をSiへ転送 074ijk
Tjk Si (Si)をTjkへ転送 075ijk
(注+: 現在は未サポート)

命令072i00は、リアルタイム・クロック(RTC)の64bitの値をSiに入れる。クロッ クは、毎CPごとに1インクリメントされる。RTCは、モニタのみによって、命令 0014j0の使用を通してセットできる。

命令072i02は、全セマフォの値をSiに入れる。32bitのSMレジスタは、SM00が 符号ビットになるように、Siに左詰される。

命令072i03は、STjの内容を Siに入れる。

命令073i00は、VMレジスタの64bitの値をSiに入れる。VMレジスタは、通常、 命令175でセットされた後に読まれる。

命令073i11は性能監視に使用され、モニタ・モードの特権である。073i11命令 の各実行はポインタを進め、そして性能カウンタの上位ビットか下位ビットか をSiの上位ビットに入れる。性能カウンタの情報は付録Cを参照のこと。

命令073i21と073i31は、SECDECメンテナンス・モード機能の一部で、メイン フレームの制御パネルのメインテナンス・モード・スイッチがONの時だけしか 実行されない。073i21は、引き続くメモリ書き込み(I/Oのメモリ書き込みは除 く)で書き込まれる、SECDEDで使用される8チェック・ビットを、あるデータ・ ビットで置き換えることを可能にする。命令073i31は、3つのSECDEDメンテナ ンス・モード命令001501, 001521, 001531のすべてをクリアする。SECDECメン テナンス・モードの完全な情報については付録Dを参照。

命令073ij1は状態レジスタSRjの内容を、Siに入れる。命令073i01はSiの上位 ビットに次の状態を返す:

 Siビット   説明

 2^63   クラスタ化済み, CLN # 0 (CL)
 2^57   プログラム・ステータス  (PS)
 2^51   浮動小数点エラー発生 (FPS)
 2^50   浮動小数点割込み許可 (IFP)
 2^49   オペランド範囲割込み許可(IOR)
 2^48   双方向メモリ許可 (BDM)
 2^40(注+) プロセッサ番号ビット0 (PN0)
 2^33(注+) クラスタ番号ビット1 (CLN1)
 2^32(注+) クラスタ番号ビット0 (CLN0)

 (注+: モニタ・モードでの実行でなければ、これらのビットの位置は値0を返す)
 

命令073i02はSiの上位32bitに上から、セマフォをセットするSM00はSiの符号 ビットに受け取られる。

命令073ij3は、Siの内容をSTjに入れる。

命令074は、Tjkの内容をSiに入れる。

命令075は、Siの内容をTjkに入れる。

ホールド発行条件:

実行時間:

特殊条件:

pp 5-60 (p 174)
命令 076 - 077
CAL文法 記述 八進コード
Si Vj,Ak (Vjの要素(Ak))をSiに転送 076ijk
Vi.Ak Sj (Sj)をVjの要素(Ak)に転送 077ijk
Vi.Ak 0 (注+) Vjの要素(Ak)をクリア 077i0k
(注+: 特殊CAL文法)

命令076と077は、64bitの量をVレジスタ要素とSレジスタの間で転送する。

命令076は、Vjレジスタの要素の内容をSjに転送する。

命令077は、Sjレジスタの内容をVjレジスタの要素に転送する。

(Ak)の下位6bitは、各命令のためのベクトルの要素を決定する。

ホールド発行条件:

実行時間:

特殊条件:

pp 5-61
命令 10h - 13h
CAL文法 記述 八進コード
Ai 式,Ah ((Ah) + jkm)からAiへ読み出す 10hijkm
Ai 式,0 (注+) (jkm)からAiへ読み出す 100ijkm
Ai 式, (注+) (jkm)からAiへ読み出す 100ijkm
Ai ,Ah (注+) (Ah)からAiへ読み出す 10hi000
式,Ah Ai (Ai)を(Ah)+jkmへストアする 11hijkm
式,0 Ai (注+) (Ai)をjkmへストアする 110ijkm
式, Ai (注+) (Ai)を式へストアする 110ijkm
,Ah Ai (注+) (Ai)を(Ah)へストアする 11hi000
Si 式,Ah ((Ah) + jkm)からSiへ読み出す 12hijkm
Si 式,0 (注+) (式)からSiへ読み出す 120ijkm
Si 式, (注+) (式)からSiへ読み出す 120ijkm
Si ,Ah (注+) (Ah)からSiへ読み出す 12hi000
式,Ah Si (Si)を(Ah)+jkmへストアする 13hijkm
式,0 Si (注+) (Si)を式へストアする 130ijkm
式, Si (注+) (Si)を式へストアする 130ijkm
,Ah Si (注+) (Si)を(Ah)へストアする 13hi000
(注+: 特殊CAL文法)

2パーセル命令10hから13hは、メモリとAレジスタかSレジスタの間でデータを 転送する。Ahの内容(符号付の22bit整数として扱われる) は、jkmフィールド の符号付22bit整数と加算されて、メモリのアドレスを決定する。もしhが0な ら、(Ah)は0であり、jkmフィールドだけがアドレスに使用される。アドレス算 術演算は、アドレス加算機能ユニットと同様だが、それから分離されたアドレ ス加算器によって実行される。

命令10hと11hはAレジスタから,またはAへ24bit量を転送する。メモリからAレジスタへ データを転送するときは、メモリ・ワードの上位40bitは無視される。Aiから メモリへのストア時は、メモリの上位40bitは0である。

命令12hと13hはSiレジスタから,またはSiへ64bit量を転送する。

ホールド発行条件:

実行時間:

---------
注意
命令10hから13hが発行した後、命令034から037,176.177がが発行しようとし たら、ポートA,B,Cは4CPの間、ビジーであろう(衝突があれば、余計にCPが足 される)。
---------

特殊条件:

pp 5-63 (p 177)
命令 140 - 147
CAL文法 記述 八進コード
Vi Sj&Vk (Sj)と(Vk要素)の論理積をVi要素に(複数個) 140ijk
Vi Vj&Vk (Vj要素)と(Vk要素)の論理積をVi要素に(複数個) 141ijk
Vi Sj!Vk (Sj)と(Vk要素)の論理和をVi要素に(複数個) 142ijk
Vi Vk (注+) (Vk要素)をVi要素に転送(複数個) 142i0k
Vi Vj!Vk (Vj要素)と(Vk要素)の論理和をVi要素に(複数個) 143ijk
Vi Sj\Vk (Sj)と(Vk要素)の論理差をVi要素に(複数個) 144ijk
Vi Vj\Vk (Vj要素)と(Vk要素)の論理和をVi要素に(複数個) 145ijk
Vi 0 (注+) Vi要素をクリア(複数個) 145iii
Vi Sj!Vk&VM もしVMビット=1なら、(Sj)をViの対応する要素に転送。もしVMビット=0なら、(Vkの対応する要素)をViの対応する要素に転送。 146ijk
Vi #VM&Vk (注+) もしVMビット=1なら、(0)をViの対応する要素に転送。もしVMビット=0なら、(Vkの対応する要素)をViの対応する要素に転送。 146i0k
Vi Vj!Vk&VM もしVMビット=1なら、(Vjの対応する要素)をViの対応する要素に転送。もしVMビット=0なら、(Vkの対応する要素)をViの対応する要素に転送。 147ijk
(注+: 特殊CAL文法)

第2ベクトル論理機能ユニット付きのメインフレームでは、命令140から145は、 フル・ベクトルか、第二ベクトル論理ユニットが許可されて提供されているな ら第二ベクトル論理ユニットで実行できる。もし、第二ベクトル論理ユニット が禁止されていれば、命令140から145は、フル・ベクトル論理ユニットだけで 実行できる。

命令146と147は、フル・ベクトル論理ユニットだけで実行する。実行される操 作の数は、VLレジスタの内容で決定される。すべての操作は、Vi,Vj,Vkレジス タの要素0から始まり、各操作が実行されるごとに1づつ要素番号が増加する。 すべての結果は、Viに配送される。

命令140,142,144,146では、Sjの内容のコピーが機能ユニットへ送られる。操 作の完了まで内容のコピーはオペランドの一つとして保持される。従って、Sj は、ベクトル操作の影響なしに即座に変化させられることができる。命令 141.143.145,147ではすべてのオペランドは、Vレジスタから得られる。

命令140と141はオペランドの組の論理積(AND) を作り、結果をViに入れる。 (Sj)か(Vjの要素)と(Vkの要素)が1ならば、Viの要素のビットは1にセットされ る、次のように:

 (Sj) か (Vjの要素) = 1100
 (Vkの要素)         = 1010
                    ---------
 (Viの要素)         = 1000
 

命令142と143はオペランドの組の論理和(OR) を作り、結果をViに入れる。 (Sj)か(Vjの要素)と(Vkの要素)のどれかが1ならば、Viの要素のビットは1にセッ トされる、次のように:

 (Sj) か (Vjの要素) = 1100
 (Vkの要素)         = 1010
                    ---------
 (Viの要素)         = 1110
 

命令144と145はオペランドの組の論理差(EOR) を作り、結果をViに入れる。 (Sj)か(Vjの要素)と(Vkの要素)からの差がViの要素のビットにセットされる、 次のように:

 (Sj) か (Vjの要素) = 1100
 (Vkの要素)         = 1010
                    ---------
 (Viの要素)         = 0110
 

命令146と147は、VMレジスタの内容に依存して、オペランドをViに転送する。 マスクのビット2^63はVレジスタの要素0に対応している。ビット2^0はVレジス タの要素63に対応している。選択に使用されるオペランドの組は、命令に依存 している。命令146では、第1オペランドは常に(Sj)で、第2オペランドは(Vkの 要素)である。命令147では、第1オペランドは(Vjの要素)で第2オペランドは (Vkの要素)である。もしベクトル・マスクのビットnが1なら、第1オペランド が転送される; もしベクトル・マスクのビットnが0なら、第2オペランド(Vkの 要素)が選択される。

例:

1. もし命令146が実行されるとして、 次のレジスタ条件があったら:

 (VL)   = 4
 (VM)   = 0 60000 0000 0000 0000 0000
 (S2)   = -1
 (V600) = 1
 (V601) = 2
 (V602) = 3
 (V603) = 4
 
命令146726が実行されると。以下の実行、V7の最初の4要素が次の値になる:
 (V700) = 1
 (V701) = -1
 (V702) = -1
 (V703) = 4
 
V7の残りの要素は変化しない。

2. もし命令147が実行されるとして、次のレジスタ条件があったら:

 (VL)   = 4
 (VM)   = 0 60000 0000 0000 0000 0000
 (S2)   = -1
 (V200) = 1   (V300) = -1
 (V201) = 2   (V301) = -2
 (V202) = 3   (V302) = -3
 (V203) = 4   (V303) = -4
 
命令147123が実行されると。以下の実行、V1の最初の4要素が次の値になる:
 (V100) = -1
 (V101) = 2
 (V102) = 3
 (V103) = -4
 
V1の残りの要素は変化しない。

ホールド発行条件:

実行時間:

特殊条件:

(注+: ベクトル命令は即座に実行開始したり、しなかったりする; データが 利用可能になった時に実行する。特に、ベクトルのいくつかの要素のロードの 実行を遅くするメモリ競合は、ロードから始まるオペレーション・チェインの すべての命令の遅延を引き起こすことがある。)

(注++: 第二ベクトル論理機能ユニット付きのメインフレームの場合だけ) pp 5-67 (p 181) ****************----------------***********


命令 150 -151
CAL文法 記述 八進コード
Vi Vj (Vj)の要素を(Ak)だけ左シフトしてViの要素に置く 150ijk
Vi Vj<1 (注+) (Vj)の要素を1だけ左シフトしてViの要素に置く 150ij0
Vi Vj>Ak (Vj)の要素を(Ak)だけ右シフトしてViの要素に置く 151ijk
Vi Vj>1 (注+) (Vj)の要素を1だけ右シフトしてViの要素に置く 151ij0
(注+: 特殊CAL文法)

命令150と151はベクトル・シフト機能ユニットで実行される。実行される操作 の数はVLレジスタの内容で決定される。操作は、ViとVjレジスタの要素の0か ら開始し、(VL)-1で指定された要素で終わる。

全てのシフトは、終端まで0で埋められる。シフト数は(Ak)から得られ、Akの 24bitすべてがシフト数として使用される。もしシフト数が63を超えたら、Vi の要素はクリアされる。すべてのシフト数(Ak)は正数として扱われる。

シフト命令052から055と違って、これらの命令はjkフィールドではなく、Akか らシフト数を受け取る。

ホールド発行条件:

実行時間:

(注++: ベクトル命令は即座に実行開始したり、しなかったりする; データが 利用可能になった時に実行する。特に、ベクトルのいくつかの要素のロードの 実行を遅くするメモリ競合は、ロードから始まるオペレーション・チェインの すべての命令の遅延を引き起こすことがある。)

特殊条件:

pp 5-69 (p 183)
命令 152 -153
CAL文法 記述 八進コード
Vi Vj,Vj (Vjの要素)を(Ak)だけ、左倍シフトしViの要素に置く 152ijk
Vi Vj,Vj<1 (注+) (Vjの要素)を1だけ、左倍シフトしViの要素に置く 152ij0
Vi Vj,Vj>Ak (Vjの要素)を(Ak)だけ、右倍シフトしViの要素に置く 153ijk
Vi Vj,Vj>1 (注+) (Vjの要素)を1だけ、右倍シフトしViの要素に置く 153ij0
(注+: 特殊CAL文法)

命令152と153はベクトル・シフト機能ユニットで実行される。命令は、論理的 につながれたVjレジスタの2つの要素の内容である128bitの値をシフトする。 シフトの方向が、Viに送られる結果が、上位ビットか下位ビットかを決定する。 シフト数はAkレジスタから得られる。

全てのシフトの終端は0で埋められる。

操作の数は、VLレジスタの内容で決められる。

命令152は左シフトを実行する。操作は、Vjの要素0から開始する。もし(VL)が 1なら、要素0は64bitの0と一緒につながれ、そして、128bit量として(Ak)で指 定されただけ左にシフトされ結果となる。ただ1つの操作だけが実行される。 残った上位64bitがViの要素0に送られる。(訳注: 64個の0は、下位64bitにつ ながれる)

もし(VL)が2なら、操作は要素0から開始され、Vjの要素0は要素1と一緒につな がれ、そして、128bit量として(Ak)で指定されただけ左にシフトされ結果とな る。残った上位64bitがViの要素0に送られる。図5-7がこの操作を図解する。

もし(VL)が2より大きいなら、要素1と要素2をつないで操作は継続し、64bitの 結果をViの要素1に送る。図5-8がこの操作を図解する。

もし(VL)が2なら、要素1は64bitの0と一緒につながれ、そして、ただ2つの操 作だけが実行される。一般的に、(VL)によって決められたVjの最後の要素は 64bitの0とつながれる。図5-9がこの操作を図解する。 pp 5-70 --- pp 5-71


図5-7. ベクトル左倍シフト、最初の要素、VLが1より大きい




図5-8. ベクトル左倍シフト、第二要素、VLが2より大きい




図5-9. ベクトル左倍シフト、最終要素
(注+: Vレジスタ中の要素は0から63まで番号が付けられている; よって要素(VL)-1はVL番目の要素を参照する)

もし(Ak)が128以上なら、結果はすべて0となる。もし(Ak)が64より大きいなら、 結果レジスタは、少なくとも(Ak)-64個の0を含む。

例:

1. もし命令152が実行されるとして、次のレジスタ条件があったら:

 (VL)   = 4
 (A1)   = 3
 (V400) = 0 00000 0000 0000 0000 0007
 (V401) = 0 60000 0000 0000 0000 0005
 (V402) = 1 00000 0000 0000 0000 0006
 (V403) = 1 60000 0000 0000 0000 0007
 
命令152541が実行されると。以下の実行、V5の最初の4要素が次の値になる:
 (V500) = 0 00000 0000 0000 0000 0073
 (V501) = 0 00000 0000 0000 0000 0054
 (V502) = 0 00000 0000 0000 0000 0067
 (V503) = 0 00000 0000 0000 0000 0070
 
命令153は右シフトを実行する。Vjの開始要素0は64bitの0とつながれて、 128bitの量として(Ak)で指定されただけ右シフトされる。結果の下位64bitが Viの要素0に送られる。図5-10がこの操作を図解する。

図5-10. ベクトル右倍シフト, 最初要素
pp 5-72

もし(VL)=1なら、ただ1つの操作が実行される。一般に、要素0と要素1がつな いで命令実行は継続し、128bitの量として(Ak)で指定されただけシフトし、結 果が、Vjの要素1に送られる。図5-11がこの操作を図解する。


図5-11. ベクトル右倍シフト, 第二要素,VLが1より大きい
pp 5-73

命令による最後の操作の実行は、(VL)によって指定されたVjの最後の要素を 直前の要素とつなぐ。図5-12がこの操作を図解する。

図5-12. ベクトル右倍シフト,最終操作
(注+: Vレジスタ中の要素は0から63まで番号が付けられている; よって要素(VL)-1はVL番目の要素を参照する) pp 5-73

例2. もし命令153が実行されるとして、次のレジスタ条件があったら:

 (VL)   = 4
 (A6)   = 3
 (V200) = 0 00000 0000 0000 0000 0017
 (V201) = 0 60000 0000 0000 0000 0006
 (V202) = 1 00000 0000 0000 0000 0006
 (V203) = 1 60000 0000 0000 0000 0007
 
命令153026が実行されると。 以下の実行、 V0の最初の4要素が次の値になる:
 (V000) = 0 00000 0000 0000 0000 0001
 (V001) = 1 66000 0000 0000 0000 0000
 (V002) = 1 50000 0000 0000 0000 0000
 (V003) = 1 56000 0000 0000 0000 0000
 
V0の残りの要素は変化しない。


ホールド発行条件:

実行時間:

特殊条件:

pp 5-74 (p 188)
命令 154 -157
CAL文法 記述 八進コード
Vi Sj+Vk (Sj)と(Vkの要素)の整数和をViの要素に。 154ijk
Vi Vj+Vk (Vjの要素)と(Vkの要素)の整数和をViの要素に。 155ijk
Vi Sj-Vk (Sj)と(Vkの要素)の整数差をViの要素に。 156ijk
Vi -Vk (注+) (Vkの要素)のネガティブをViの要素に。 156i0k
Vi Vj-Vk (Vjの要素)と(Vkの要素)の整数差をViの要素に。 157ijk
(注+: 特殊CAL文法)

命令154から157はベクトル加算機能ユニットで実行される。

命令154と155は整数加算を行う。命令156と157は整数減算を行う。加算や減算 の実行される個数は、VLレジスタの内容で決定される。すべての操作は、Vレ ジスタの要素0から始まり、各操作が実行される度に、要素番号は1インクリメ ントされる。すべての結果は、Viの要素に送られる。オーバーフローは検出さ れない。

命令154と156は、(Sj)を機能ユニット内にコピーし、ベクトル操作が完了する まで、オペランドの一つとして、そのコピーが保持される。他方のオペランド はVkの要素である。命令155と157では、両オペランドともVレジスタから得る。

ホールド発行条件:

実行時間:


(注+: ベクトル命令は即座に実行開始したり、しなかったりする; データが 利用可能になった時に実行する。特に、ベクトルのいくつかの要素のロードの 実行を遅くするメモリ競合は、ロードから始まるオペレーション・チェインの すべての命令の遅延を引き起こすことがある。)

特殊条件:

pp 5-76 (p 190)
命令 160 - 167
CAL文法 記述 八進コード
Vi Sj*FVk (Sj)と(Vkの要素)の浮動小数点積をViの要素に 160ijk
Vi Vj*FVk (Vjの要素)と(Vkの要素)の浮動小数点積をViの要素に 161ijk
Vi Sj*HVk (Sj)と(Vkの要素)の半精度浮動小数点積をViの要素に 162ijk
Vi Vj*HVk (Vjの要素)と(Vkの要素)の半精度浮動小数点積をViの要素に 163ijk
Vi Sj*RVk (Sj)と(Vkの要素)の丸め付き浮動小数点積をViの要素に 164ijk
Vi Vj*RVk (Vjの要素)と(Vkの要素)の丸め付き浮動小数点積をViの要素に 165ijk
Vi Sj*IVk 逆数繰り返し;2-(Sj)*(Vkの要素)をViの要素に 166ijk
Vi Vj*IVk 逆数繰り返し;2-(Vjの要素)*(Vkの要素)をViの要素に 167ijk

命令160から167は、浮動小数点乗算機能ユニットで実行される。一つの命令に よる操作の繰り返しは、VLレジスタの内容で決定される。全操作は、Vレジス タの要素0から開始し、各操作の進行の度に、要素番号が1増加する。

オペランドは、浮動小数点形式であると想定される。命令160,162,164と166は (Sj)のコピーを機能ユニット内に送り、操作が完了するまで、オペランドの一 つとしてコピーを保持する。それによって、Sjは、ベクトル操作に影響するこ となく、即座に値を変更できる。他方のオペランドは、Vkの要素である。命令 161,163,165,167では、両オペランドともVレジスタから得られる。

全結果はViの要素に送られる。もし、どちらかのオペランドが正規化されてい なければ、積が正規化されていることは保証されない。もし、両オペランドと も正規化されていなければ、積は正規化されていないだろう。

範囲外の条件については、4章に記述している。

命令160はSj内の浮動小数点量とVkの要素の浮動小数点量の積を取り、Viに結 果を入れる。

命令161はVjとVkの要素の浮動小数点量の積を取り、Viに結果を入れる。

命令162はSj内の浮動小数点量とVkの要素の浮動小数点量の半精度の丸められ た積を取り、Viに結果を入れる。結果の要素の下位19bitは0である。

命令163はVjとVkの要素の浮動小数点量の半精度の丸められた積を取り、Viに 結果を入れる。結果の要素の下位19bitは0である。

命令164はSj内の浮動小数点量とVkの要素の浮動小数点量の丸められた積を取 り、Viに結果を入れる。

命令165はVjとVkの要素の浮動小数点量の丸められた積を取り、Viに結果を入 れる。

命令166は、各要素につき、Sj内の浮動小数点量とVkの要素の浮動小数点量の 積を取りそれを2から減じる。結果はViに入れる。詳しくは、命令067の記述を 参照。

命令167は、各要素の組につき、VjとVkの要素の浮動小数点量の積を取りそれ を2から減じて、結果をViに入れる。詳しくは、命令067の記述を参照。

ホールド発行条件:

実行時間:

(注++: ベクトル命令は即座に実行開始したり、しなかったりする; データが 利用可能になった時に実行する。特に、ベクトルのいくつかの要素のロードの 実行を遅くするメモリ競合は、ロードから始まるオペレーション・チェインの すべての命令の遅延を引き起こすことがある。)

特殊条件:

pp 5-79 (p 193)
命令 170 - 173
CAL文法 記述 八進コード
Vi Sj+FVK (Sj)と(Vkの要素)の浮動小数点和をViの要素へ 170ijk
Vi +FVK (注+) 正規化した(Vkの要素)をViの要素へ送る 170i0k
Vi Vj+FVK (Vjの要素)と(Vkの要素)の浮動小数点和をViの要素へ 171ijk
Vi Sj-FVK (Sj)と(Vkの要素)の浮動小数点差をViの要素へ 172ijk
Vi -FVK (注+) (Vkの要素)のネガティブを取って正規化し、Viの要素へ送る 172i0k
Vi Vj-FVK (Vjの要素)と(Vkの要素)の浮動小数点差をViの要素へ 173ijk
(注+: 特殊CAL文法)

命令170から173は浮動小数点加算機能ユニットで実行される。命令170と171は 浮動小数点の加算を行う; 命令172と173は浮動小数点の減算を行う。一つの命 令によって、実行される加算か減算の数はVLレジスタの内容によって決定され る。すべての操作はVレジスタの要素0から始まり、各操作が実行される度に、 要素番号は1インクリメントされる。Viへ送られるすべての結果は、正規化さ れる。もしオペランドが正規化されていなかったとしても、結果は正規化され る。

命令170と172は、(Sj)のコピーを機能ユニット内に送り、操作が完了するまで、 オペランドの一つとしてコピーを保持する。他方のオペランドは、Vkの要素で ある。命令171と173では、両オペランドともVレジスタから得られる。範囲外 の条件については、4章に記述している。

ホールド発行条件:

実行時間:

(注++: ベクトル命令は即座に実行開始したり、しなかったりする; データが 利用可能になった時に実行する。特に、ベクトルのいくつかの要素のロードの 実行を遅くするメモリ競合は、ロードから始まるオペレーション・チェインの すべての命令の遅延を引き起こすことがある。)

特殊条件:

pp 5-81 (p 195)
命令 174
CAL文法 記述 八進コード
Vi /HVj (Vjの要素)の浮動小数点逆数近似をViの要素に 174ij0

命令174は逆数近似機能ユニットで実行される。命令はVjの要素の正規化され た浮動小数点量の逆数の近似値を作り、結果をViの要素に入れる。近似を求め る要素の数は、VLレジスタの内容によって決定される。

命令174は、4節の浮動小数点算術演算に記述されているように、浮動小数点量 の商を計算する除算シーケンスで使われる。

逆数近似命令は上位30bitの結果を生成する。下位18bitは0である。上位ビッ トは、近似繰り返し命令と乗算によって、48bitに拡張できる。

ホールド発行条件:

実行時間:

(注++: ベクトル命令は即座に実行開始したり、しなかったりする; データが 利用可能になった時に実行する。特に、ベクトルのいくつかの要素のロードの 実行を遅くするメモリ競合は、ロードから始まるオペレーション・チェインの すべての命令の遅延を引き起こすことがある。)

特殊条件:

pp 5-82 (p 196)
命令 174ij1 - 174ij2
CAL文法 記述 八進コード
Vj PVj (Vjの要素)のポピュレーション・カウントをViの要素に 174ij1
Vj QVj (Vjの要素)のポピュレーション・カウントのパリティをViの要素に 174ij2

命令174ij1と174ij2はベクトル・ポピュレーション/パリティ機能ユニットで 実行され、いくつかの論理回路が逆数近似機能ユニットと共有されている。

命令174ij1はVjの各要素の1にセットされているビットの数を数えて、結果を Viの対応する要素に入れる。結果はViの各要素の下位7bit に入る。Viの各要 素の残りの上位ビットには、0が入る。

命令174ij2はVjの各要素の1にセットされているビットの数を数える。各要素 の結果の最下位ビットが、結果が奇数か偶数かを表している。各要素の最下位 ビットだけがViの対応する要素の最下位ビット位置に転送される。要素の残り の上位ビットには、0が入る。本当のポピュレーション・カウントの結果は転 送されない。

ホールド発行条件:

実行時間:

(注++: ベクトル命令は即座に実行開始したり、しなかったりする; データが 利用可能になった時に実行する。特に、ベクトルのいくつかの要素のロードの 実行を遅くするメモリ競合は、ロードから始まるオペレーション・チェインの すべての命令の遅延を引き起こすことがある。) pp 5-84 (p 197)
命令 175
CAL文法 記述 八進コード
VM Vj,Z (Vjの要素)=0ならVM=1 1750j0
VM Vj,N (Vjの要素)≠0ならVM=1 1750j1
VM Vj,P (Vjの要素)が正(ビット2^63=0,(VJの要素)=0を含む)ならVM=1 1750j2
VM Vj,P (Vjの要素)を負(ビット2^63=1)ならVM=1 1750j3
(注+: 特殊CAL文法)

ベクトル・マスク命令175はフル・ベクトル論理機能ユニットで実行される。

命令1750jkは、Vjレジスタの要素の内容をテストした結果により、VM中にベク トル・マスクを生成する。VMの各ビットは、Vjの要素に対応する。ビット2^63 は要素0に対応し; ビット2^0は要素63に対応する。

命令によって行われるテストの型は、k指定子の下位2bitによる。k指定子の上 位ビットは使われない。

もしk指定子が0なら、(Vjの要素)が0ならVMビットは1に、(Vjの要素)が非0な らVMビットは0に、セットされる。

もしk指定子が1なら、(Vjの要素)が非0ならVMビットは1に、(Vjの要素)が0な らVMビットは0に、セットされる。

もしk指定子が2なら、(Vjの要素)が正ならVMビットは1に、(Vjの要素)が負な らVMビットは0に、セットされる。0は正とする。

もしk指定子が3なら、(Vjの要素)が負ならVMビットは1に、(Vjの要素)が正な らVMビットは0に、セットされる。0は正とする。

テストされる要素の数はVLレジスタの内容によって決定される。テストされな いVjの要素に対応するVMビットは0にされる。

ベクトル・マスク命令175は、ベクトルにおけるスカラの条件分岐命令に対応 するものを提供する。

ホールド発行条件:

実行時間:

(注++: ベクトル命令は即座に実行開始したり、しなかったりする; データが 利用可能になった時に実行する。特に、ベクトルのいくつかの要素のロードの 実行を遅くするメモリ競合は、ロードから始まるオペレーション・チェインの すべての命令の遅延を引き起こすことがある。)

特殊条件:

pp 5-86 (200)
命令 176 - 177
CAL文法 記述 八進コード
Vi ,A0,Ak (A0)メモリ番地から始まるメモリから、(Ak)のアドレス増分で、(VL)ワードだけ、メモリからViの要素へ転送。 176i0k
Vi ,A0,1 (注+) (A0)メモリ番地から始まるメモリから、アドレス増分を1で、(VL)ワードだけ、メモリからViの要素へ転送。 176i00
,A0,Ak Vj (A0)メモリ番地から始まるメモリに、(Ak)のアドレス増分で、(VL)ワードだけ、Viの要素から転送。 1770jk
,A0,1 Vj (注+) (A0)メモリ番地から始まるメモリに、アドレス増分を1で、(VL)ワードだけ、Viの要素から転送。 1770j0
(注+: 特殊CAL文法)

命令176と177はVレジスタとメモリの間で、データのブロック転送を行う。

命令176はデータをメモリから、レジスタViの要素に転送する。

命令177はデータをレジスタViの要素から、メモリへ転送する。

レジスタ要素は0から始まり、転送ごとに1づつ増える。メモリ番地は(A0)から 始まり、Akの内容だけ増加する。Akは符号付22bit整数を保持し、次のワード のアドレスを得るために、現在のワードのアドレスに加算される。(Ak)の上位 2bitは無視される。Akは正数も負数も増分に指定でき、メモリ参照の流れは前 向きも後ろ向きも許される。

転送されるワードの数はVLレジスタの内容で決定される。

ホールド発行条件:

実行時間:

特殊条件:

 pp 5-89 --- EOF

CRAY X-MPについて (index) by たけおか

たけおか(竹岡尚三)のホームページ