Compaq OpenVMS
デバッガ説明書


前へ 次へ 目次 索引


16.4.2 ベクタ命令の格納

VAX スカラ命令を格納する方法は,ベクタ命令を格納する方法にも適用されます ( 第 4.3.2 項 を参照)。たとえば,次のコマンドは現在の PC アドレスのマスクされた VVMULF ベクタ命令を格納します。


DBG> DEPOSIT/INSTRUCTION .%PC = "VVMULF/0 V2,V3,V7"

ベクタ命令を格納する場合,次のことにも注意してください。命令コードについての詳しい説明は『VAX MACRO and Instruction Set Reference Manual』を参照してください。

16.5 ベクタ・レジスタまたはベクタ命令を検査するときのマスクの使用方法

演算がベクタ・マスク・レジスタ (VMR) によってマスクされているかどうかにより,EXAMINE/OPERANDS .%PC コマンドがベクタ命令オペランドを表示する方法がどう変わるかは, 第 16.4.1 項 を参照してください。

本節では,任意のマスクを指定して,VMR の効果をシミュレートまたは上書きしたり,次の結果を得る方法を説明します。

EXAMINE コマンドで /TMASK 修飾子または /FMASK 修飾子のどちらかを使用してマスクを指定します。

注意

次に,ベクタ・レジスタを検査するときの /TMASK 修飾子と /FMASK 修飾子の使い方を説明します。他に指定しないかぎり,メモリ配列を検査する場合のこれらの修飾子の使用方法も同じです。

/TMASK 修飾子を指定すると,EXAMINE コマンドは,セットされたマスク・ビット ( ビットの値は 1 ) に対応したチェック済みレジスタの要素だけに適用されます。これに対し,/FMASK 修飾子を指定すると, EXAMINE コマンドはクリアされたマスク・ビット ( ビットの値は 0 ) に対応した要素だけに適用されます。

VLR の現在の値は,検査できるベクタ・レジスタの最上位の要素を制限します。ただし,VLR の値はメモリ内の配列の検査には影響しません。

/TMASK 修飾子と /FMASK 修飾子を使用すれば,マスクはマスク・アドレス式の形式で指定できますが省略することもできます。詳しい説明は,次の項を参照してください。

16.5.1 省略時のマスクとしての VMR の使用方法

省略時の設定では,EXAMINE/TMASK コマンドまたは EXAMINE/FMASK コマンドでマスクを指定しないと,VMR がマスクとして使用されます。すなわち,EXAMINE コマンドはセットされた VMR ビット ( /TMASK の場合 ) またはクリアされた VMR ビット ( /FMASK の場合 ) に対応したベクタ・レジスタの要素だけに適用されます。

次の例では,VLR の値は 6 であり,VMR(0:VLR--1) の値は次のとおりです。


DBG> EXAMINE %VMR(0:%VLR-1)
0\%VMR 
    (0):     1 
    (1):     0 
    (2):     1 
    (3):     0 
    (4):     1 
    (5):     0
DBG>

次のコマンドは,V3 の値をマスクを使用しないで示します。 V3 の 0 から VLR--1 までのすべての要素が表示されます。


DBG> EXAMINE %V3
0\%V3 
    (0):       17 
    (1):      138 
    (2):        3 
    (3):        9 
    (4):       51 
    (5):      252
DBG>

次のコマンドは,VMR(i) の値が 1 である V3 の要素 (0 から VLR--1) を表示します。


DBG> EXAMINE/TMASK %V3
0\%V3 
    (0):       17 
    (2):        3 
    (4):       51
DBG>

次のコマンドは,VMR(i) の値が 0 である V3 の要素 (0 から VLR--1 まで) を表示します。


DBG> EXAMINE/FMASK %V3
0\%V3 
    (1):      138 
    (3):        9 
    (5):      252
DBG>

次の例では,命令とそのベクタ・レジスタ・オペランドを検査するときに /FMASK 修飾子が使用されています。EXAMINE/OPERANDS/FMASK コマンドは, VMR(i) の値が 0 であるレジスタ・オペランド要素 (0 から VLR--1 まで) を表示します。


DBG> EXAMINE/OPERANDS/FMASK .%PC
PROG$MAIN\%LINE 341+16:  VVEQLL V0,V1 
V0 contains: 
        0\%V0(1):  0 
        0\%V0(3):  0 
        0\%V0(5):  0 
 
V1 contains: 
        0\%V1(1):  0 
        0\%V1(3):  0 
        0\%V1(5):  0
DBG>

16.5.2 VMR の断面をマスクとして使用する方法

EXAMINE/TMASK コマンドまたは EXAMINE/FMASK コマンドで VMR の断面を指定すると,次の規則に従って出力が表示されます。

16.5.3 VMR 以外のマスクの使用方法

EXAMINE/TMASK コマンドまたは EXAMINE/FMASK コマンドで VMR 以外のマスク・アドレス式を指定すると,次の規則に従い,そのアドレスの値がマスクとして使用されます。

16.6 複合ベクタ・アドレス式の検査

EXAMINE コマンドを使用すると,各種の形式の複合アドレス式 ( あるアドレスからのバイト・オフセットを含むアドレス式 ) を指定できます。たとえば,X が整変数であると,次の EXAMINE コマンドは,X のアドレスから 6 バイト先の記憶位置に現在格納されている値を表示します。


DBG> EXAMINE X + 6
MOD3\X+6:  274903
DBG>

本節で使用する例は,ベクタ化されたプログラムに適した形式の複合アドレス式を指定する方法を示しています。

次の例は,VSCATL 命令の効果をチェックできる方法を示しています。ここに示す命令は,Fortran プログラムからデコードされたものです。


DBG> EXAMINE %VLR
0\%VLR: 5
DBG> EXAMINE/OPERANDS .%PC   (1)
PROG1$MAIN\%LINE 9+32: VSCATL   V7,W^-804(R11),V9 
V7 contains: 
        0\%V7(0):  11   (2)
        0\%V7(1):  13 
        0\%V7(2):  15 
        0\%V7(3):  17 
        0\%V7(4):  19 
 
     W^-804(R11)PROG1$MAIN\ARRX(1) (address 1820) contains 0   (3)
V9 contains: 
        0\%V9(0):  0   (4)
        0\%V9(1):  8 
        0\%V9(2):  16 
        0\%V9(3):  24 
        0\%V9(4):  32
DBG> SHOW SYMBOL/TYPE ARRX   (5)
data PROG1$MAIN\ARRX 
 array descriptor type, 1 dimension, bounds: [1:200], size: 800 bytes 
 cell type: atomic type, longword integer, size: 4 bytes
DBG> EXAMINE ARRX(1) + .%V9(0:%VLR-1)   (6)
PROG1$MAIN\ARRX(1):       0 
PROG1$MAIN\ARRX(3):       0 
PROG1$MAIN\ARRX(5):       0 
PROG1$MAIN\ARRX(7):       0 
PROG1$MAIN\ARRX(9):       0
DBG> STEP/INSTRUCTION   (7)
stepped to PROG1$MAIN\%LINE 9+40: MOVZBL   I^#64,AP
DBG> EXAMINE ARRX(1) + .%V9(0:%VLR-1)   (8)
PROG1$MAIN\ARRX(1):       11 
PROG1$MAIN\ARRX(3):       13 
PROG1$MAIN\ARRX(5):       15 
PROG1$MAIN\ARRX(7):       17 
PROG1$MAIN\ARRX(9):       19
DBG>

次の番号は,上記の例の番号に対応しています。

  1. EXAMINE/OPERANDS コマンドは,VSCATL 命令が実行されようとしていることを示す。この命令は,ロングワード整数 (4 バイト) のデータをレジスタ V7 からメモリ記憶位置に転送する。これらの記憶位置は,レジスタ V9 に含まれるオフセット値を基底アドレスに追加することで決定される。

  2. レジスタ V7 には,メモリに転送するロングワード整数値が入っている。

  3. VSCATL 命令に対するオペランドとして指定された基底アドレスは, ARRX(1) のようにシンボル化されている。 ARRX(1) は配列 ARRX の要素 1 を表している。

  4. レジスタ V9 には,メモリ内の各ターゲット・ベクタ要素の基底アドレスからのバイト単位のオフセットが入っている。

  5. SHOW SYMBOL/TYPE コマンドは,ARRX が連続したロングワード整数の配列であることを示す。

  6. EXAMINE コマンドは,メモリ内のターゲット・ベクタ要素の値を表示する。指定されたアドレス式は,レジスタ V9 に入っているオフセット値を使用して,メモリ内の連続したベクタ要素の開始アドレスを,基底アドレスである ARRX(1) からの相対値として設定する。デバッガは,配列 ARRX の要素に対してメモリ内のベクタ要素の記憶位置をシンボル化する。この例では,ベクタ要素が 8 バイト置きに開始し,配列 ARRX の要素と 1 つ置きに対応している。 VSCATL 命令はまだ実行されていないので,メモリ内のベクタ要素の値はどれも 0 である。

  7. STEP/INSTRUCTION コマンドは VSCATL 命令を実行し,次の命令 MOVZBL で実行を中断する。

  8. の項目と同様に,EXAMINE コマンドはメモリ内のターゲット・ベクタ要素の値を表示する。ここで,メモリの内容が,値がレジスタ V7 から転送されていることを示す。

次の例は,EXAMINE コマンドでもう少し複雑なベクタ・アドレス式を指定する方法を示しています。

配列 ARRZ が連続したクォドワード整数 ( 8 バイト ) 要素を持っているものとします。例の 4 つめの EXAMINE コマンドは,メモリ内の要素 ARRZ(1) で始まるベクタ要素の値を表示します。先の例の場合と同様に,デバッガはベクタ要素の記憶位置を配列要素でシンボル化します。一連のベクタ要素の,ARRZ(1) に対する相対記憶位置は,レジスタ V1 とレジスタ V3 に入っている値を加えて求め,特定の要素に対する結合オフセットを指定します。ベクタ要素が表示される順番は,最初に指定されたレジスタ (V1) の各値に関して,最後に指定したレジスタ ( V3(0:2) ) のすべての値を振り当てる形になります。この例では,すべてのベクタ要素の値が 0 です。


DBG> EXAMINE %VLR
0\%VLR: 4
DBG> EXAMINE %V1
0\%V1 
     (0):        0 
     (1):        4 
     (2):        8 
     (3):       12
DBG> EXAMINE %V3
0\%V1 
     (0):        0 
     (1):        8 
     (2):       16 
     (3):       24
DBG> EXAMINE ARRZ(1) + .%V1(0:3) + .%V3(0:2)
PROG4$MAIN\ARRZ(1):       0    ! ARRZ(1)+0+0 
PROG4$MAIN\ARRZ(2):       0    ! ARRZ(1)+0+8 
PROG4$MAIN\ARRZ(3):       0    ! ARRZ(1)+0+16 
PROG4$MAIN\ARRZ(1)+4:     0    ! ARRZ(1)+4+0 
PROG4$MAIN\ARRZ(2)+4:     0    ! ARRZ(1)+4+8 
PROG4$MAIN\ARRZ(3)+4:     0    ! ARRZ(1)+4+16 
PROG4$MAIN\ARRZ(2):       0    ! ARRZ(1)+8+0 
PROG4$MAIN\ARRZ(3):       0    ! ARRZ(1)+8+8 
PROG4$MAIN\ARRZ(4):       0    ! ARRZ(1)+8+16 
PROG4$MAIN\ARRZ(2)+4:     0    ! ARRZ(1)+12+0 
PROG4$MAIN\ARRZ(3)+4:     0    ! ARRZ(1)+12+8 
PROG4$MAIN\ARRZ(4)+4:     0    ! ARRZ(1)+12+16
DBG>

16.7 ベクタ浮動小数点例外の結果の表示

ベクタ命令がベクタ要素内で浮動小数点例外を生成すると,例外結果がデスティネーション・レジスタの対応する要素にエンコードされます。

このような場合,EXAMINE/FLOAT コマンドを使用すると,関連したレジスタ要素にデコードした例外メッセージが表示されます。この方法を使用すると, 第 16.8 節 に示すとおりに実行要求をまだ保留している浮動小数点例外を識別できます。次の例は,ベクタ命令がレジスタ V5 の要素 2 の浮動小数点ゼロ除算例外を生成したことを示しています。


DBG> EXAMINE/FLOAT %V5
0\%V5 
     (0):   297.2800 
     (1):   87.41499 
     (2):   Reserved operand, encoded as floating divide by zero 
     (3):   173.8650
DBG>

プログラムがベクタ・レジスタの値をメモリにコピーすれば,ベクタ・レジスタの場合と同様に,デコードされた情報を表示するために EXAMINE/FLOAT コマンドをそのメモリ記憶位置に適用できます。

次の表にベクタ浮動小数点例外ごとにデコードされたデバッガ・メッセージを示します。

例外 デバッガ・メッセージ
浮動小数点アンダフロー 予約オペランド。浮動小数点アンダフローとしてエンコードされる。
浮動小数点ゼロ除算 予約オペランド。浮動小数点ゼロ除算としてエンコードされる。
浮動小数点予約オペランド 予約オペランド。浮動小数点予約オペランドとしてエンコードされる。
浮動小数点オーバフロー 予約オペランド。浮動小数点オーバフローとしてエンコードされる。

16.8 スカラとベクタの同期化の制御

高い性能を達成するため,VAX のスカラ型プロセッサとベクタ型プロセッサはできるだけ並行して稼働します。スカラ型プロセッサは,すべてのベクタ命令をベクタ型プロセッサに渡し,スカラ命令の実行を続けます。その間にベクタ型プロセッサはベクタ命令を実行しています。

場合によっては,2 つのプロセッサの動作の同期をとらなければならないことがあります。正しいプログラムの実行結果を得るには,SYNC,MSYNC,および VSYNC などの同期化命令を使用することにより,プログラムが特定の動作を完了させてからでないと,他の動作を開始しないようにします。これらの命令とスカラとベクタの同期化についての詳しい説明は『VAX MACRO and Instruction Set Reference Manual』を参照してください。

プログラムがコンパイラ ( たとえば,Compaq Fortran コンパイラ ) によってベクタ化されると,必要な同期化命令が自動的に生成されます。ただし,MACRO のプログラマは同期化命令を明示的に作成しなければなりません。

省略時の設定では,デバッガはプログラム ( 内部目的で実行しているものを除く ) の実行中は,スカラとベクタの同期化を行いません。プログラムはデバッガの制御を受けていないかのように実行し,同期化はプログラムによって完全に制御されています。この省略時の動作モードは, SET VECTOR_MODE NOSYNCHRONIZED コマンドによって設定されます。

デバッガを省略時の非同期化モードで使用すると,プログラムの実行がブレークポイント,ウォッチポイント,または STEP コマンドの完了時に中断されたときに,特定のベクタ動作が割り込みをかけられた状態になることがあります。次に例を示します。

このような場合に混乱しないようにするには,SYNCHRONIZE VECTOR_MODE コマンドを入力します。このコマンドは,スカラ型プロセッサとベクタ型プロセッサをただちに同期化します。このコマンドを入力するのは,実行が一時停止しているプログラム内の記憶位置で SYNC 命令と MSYNC 命令を入力するのと同じことです。これは,次のような効果があります。

次の MACRO 例は,SYNCHRONIZE VECTOR_MODE コマンドの機能を示しています。


DBG> STEP   (1)
stepped to .MAIN.\SUB\%LINE 99 
    99:         VVDIVD  V1,V0,V2
DBG> STEP   (2)
stepped to .MAIN.\SUB\%LINE 100 
   100:         CLRL    R0
DBG> EXAMINE/FLOAT %V2   (3)
0\%V2 
    [0]:        13.53400 
    [1]:        Reserved operand, encoded as floating divide by zero 
    [2]:        247.2450
   .
   .
   .
DBG> SYNCHRONIZE VECTOR_MODE   (4)
%SYSTEM-F-VARITH, vector arithmetic fault, summary=00000002, 
                  mask=00000004, PC=000002E1, PSL=03C00010 
break on unhandled exception preceding .MAIN.\SUB\%LINE 100 
   100:         CLRL    R0
DBG>

次の番号は,上記の例の番号に対応しています。


前へ 次へ 目次 索引