Compaq OpenVMS
デバッガ説明書


前へ 次へ 目次 索引


16.3.3 ベクタ長レジスタの検査と値の格納

ベクタ長レジスタ(VLR)は,ベクタ命令が処理するベクタ・レジスタの最上位の要素を制限します。VLR の値は,0 から 64 までの整数です。この値は,処理されるレジスタ要素の数を指定します。要素 0 から指定できます。

デバッグ・セッションでは,VLR の現在の値が,EXAMINE デバッガ・コマンドまたは DEPOSIT デバッガ・コマンドでアクセスできるベクタ・レジスタの最上位の要素を制限します。

次のコマンド・シーケンスは,VLR の値を操作して,ベクタ・レジスタ V1 の別の要素数を検査する方法を示しています。


DBG> EXAMINE %VLR
0\%VLR: 4
DBG> EXAMINE %V1
0\%V1 
   (0):       12 
   (1):        3 
   (2):      138 
   (3):       51
DBG> DEPOSIT %VLR = 3
DBG> EXAMINE %VLR
0\%VLR: 3
DBG> EXAMINE %V1
0\%V1 
   (0):       12 
   (1):        3 
   (2):      138
DBG>

0 から VLR--1 までの範囲にないレジスタ要素にはアクセスできません。次の例では,EXAMINE コマンドがレジスタ VI の要素 7 を指定していますが,これは境界外です(Fortran 配列構文)。


DBG> EXAMINE %VLR
0\%VLR: 3
DBG> EXAMINE %V1(7)
%DEBUG-E-VECTSUBRNG, vector register subscript out of bounds, 
                     bounds are 0..2
DBG>

省略時の設定では,デバッガが VLR をロングワード整数として扱います。64 を超えた値を VLR に格納できますが,その場合,デバッガは診断メッセージを発行して値が境界外であることを知らせます。

16.3.4 ベクタ・マスク・レジスタの検査と値の格納

ベクタ・マスク・レジスタ(VMR)は,ベクタ命令がベクタ・レジスタ・オペランドの特定の要素だけに演算を行うために使用するマスク(ビット・パターン)を指定します。マスクされたベクタ命令は,VMR によってマスクされたベクタ・レジスタの要素には演算を行いません。

VMR には 0 から 63 までの番号がついた 64 個のビット(1 クォドワード)が含まれています。各ビットはベクタ・レジスタ内の要素と対応しています。特定のビットの値(0 または 1)は,マスクされた演算の場合に対応するレジスタ要素の演算を行うかどうかを決定します。

マスクされた演算については,第 16.4.1 項第 16.5 節 を参照してください。ここでは,VMR の値を表示したり変更する方法だけを説明します。

VMR の 1 つまたは複数の要素(ビット)を検査するには,配列変数を検査する場合と同じ方法を使用します。第 4.2.3 項 を参照してください。

たとえば,次のコマンドの出力は,VMR のビット 5 がセットされていることを示しています(Fortran 配列構文)。


DBG> EXAMINE %VMR(5)
0\%VMR(5):      1
DBG>

次のコマンドは,VMR のビット 4 〜 6 の値を表示します。ビット 4 と 5 がセットされ,ビット 6 はクリアされます。


DBG> EXAMINE %VMR(4:6)
0\%VMR
   (4):        1
   (5):        1
   (6):        0
DBG>

省略時の設定では,添字を指定せずに VMR を検査すると,デバッガはレジスタの値を 16 進形式のクォドワード整数として表示します。その結果,出力表示のサイズを削減できます。次に例を示します。


DBG> EXAMINE %VMR
0\%VMR
   (0):        0FFFFFFF FFFFFFFF
DBG>

EXAMINE/BIN %VMR コマンドまたは EXAMINE %VMR(0:63)コマンドを指定すると,VMR の各ビットの値を 64 行の配列形式で表示できます。

配列変数を使用したときと同様に,VMR への値の格納は一度に 1 ビットずつできます。次に例を示します。


DBG> EXAMINE %VMR(37)
0\%VMR(37):      1
DBG> DEPOSIT %VMR(37)= 0
DBG> EXAMINE %VMR(37)
0\%VMR(37):      0
DBG>

DEPOSIT/QUADWORD コマンドを使用すると,クォドワード整数値を集合体全体に格納することもできます。次に例を示します。


DBG> DEPOSIT/QUADWORD %VMR = %HEX 0FFFFF
DBG> EXAMINE %VMR
0\%VMR
   (0):        00000000 000FFFFF
DBG>

言語式で VMR の要素を指定する場合,VMR はビットの配列であることに注意してください。そのため,まず C または BLISS などのビット演算が可能な言語に一時的に設定しなければならないこともあります。次に例を示します。


DBG> SET LANGUAGE C
DBG> DEFINE/VALUE K = 0
DBG> FOR I=0 TO 63 DO(IF %VMR[I] == 1 THEN(DEF/VAL K = K + 1))

16.3.5 ベクタ・レジスタ(V0 〜 V15)の検査と値の格納

V0 から V15 までの 16 個のベクタ・レジスタがあります。各ベクタ・レジスタは番号 0 から 63 が割り当てられた 64 個の要素を持っています。また,各要素は64 ビット(1 クォドワード)から構成されます。

ベクタ・レジスタの 1 つまたは複数の要素を検査するには,配列変数の検査の場合と同じ方法を使用します( 第 4.2.3 項 を参照)。本項では,例に Fortran 配列構文を使用します。


DBG> EXAMINE %V3              !V3 のすべての要素を検査する 
DBG> EXAMINE %V3(27)         !V3 の要素 27 の要素を検査する 
 
DBG> EXAMINE %V3(3:14)       !V3 の要素 3 から 14 までを検査 
する 
DBG> EXAMINE %V0(2),%V3(1:4) !V0 の要素 2 と V3 の要素 1 から 
 4 までを 
                                   !検査する 

レジスタ要素の値は,配列変数で使用するものと似た添字付き形式で表示されます。たとえば,次のコマンドは,レジスタ V1 の要素 1 から 3 までの値を表示します。


DBG> EXAMINE %V1(1:3)
0\%V1 
   (1):        3 
   (2):      138 
   (3):       51
DBG>

ある範囲のベクタ・レジスタは検査できません。たとえば,次のコマンドは無効です。


DBG> EXAMINE %V0:%V3
DBG> EXAMINE %V2(7):%V3(12)

配列変数と同様に,値をベクタ・レジスタの 1 つだけの要素に一度に格納できます。たとえば,次のコマンドは整数値 8531 を VO の要素 9 に格納します。


DBG> DEPOSIT %V0(9)= 8531

ベクタ長レジスタ(VLR)の現在の値は,検査または格納できる最高のレジスタ要素を制限します(第 16.3.3 項 を参照)。したがって,次のコマンドは同じ機能を持っています。


DBG> EXAMINE %V1
DBG> EXAMINE %V1(0:%VLR-1)

式 0:%VLR--1 は,VLR の現在の値によって示された範囲内のレジスタ要素を指定します。

省略時の設定では,デバッガはベクタ・レジスタの各要素をロングワード整数として扱い,現在の基数で値を表示します。次に例を示します。


DBG> EXAMINE %V3(27)
0\%V3(27):      5983
DBG> DEPOSIT %V3(27)= 3625
DBG> EXAMINE %V3(27)
0\%V3(27):      3625
DBG>

ただし,ベクタ命令のコンテキストで調べられるレジスタ値(命令オペランド)は,その命令に適切なデータ型で表示されます。 第 16.4.1 項 を参照してください。

ベクタ・レジスタの要素の全(クォドワード)値をクォドワード整数として表示するには,EXAMINE/QUADWORD コマンドを使用します。同様に,クォドワード整数値をレジスタ要素に格納するには,DEPOSIT/QUADWORD コマンドを使用します。

また,EXAMINE コマンドや DEPOSIT コマンドに関連した他の型の修飾子(たとえば /FLOAT)を使用すると,省略時の型を上書きできます。次に例を示します。


DBG> EXAMINE %V5(2)
0\%V5(2):      0
DBG> EXAMINE/D_FLOAT %V5(2)
0\%V5(2):      0.0000000000000000
DBG>

言語式での集合体のデータ構造の使用に関する制限事項に従えば,言語式でレジスタ・シンボルを使用できます( 第 4.1.6.1 項 を参照)。たとえば,次の式は有効です(Fortran 構文)。


DBG> EVALUATE %V0(4).EQ. %V1(4)

ただし,次の式は,2 つ以上のレジスタ要素を指定しているので無効です。


DBG> EVALUATE %V0 .EQ. %V1

16.4 ベクタ命令の検査と値の格納

ベクタ命令を操作する方法には,スカラ命令(第 4.3 節 を参照)で使用するもののほかに,次のようなベクタ命令に固有の方法もあります。

ベクタ命令を検査するか値を格納する場合,デバッガは適用される命令に従ってベクタ命令修飾子を正しく処理します。次の表に,これらの修飾子の機能をまとめてあります。使用法についての詳しい説明は,『VAX MACRO and Instruction Set Reference Manual』を参照してください。

命令修飾子 説明
/U 浮動小数点アンダフロー(ベクタ浮動小数点命令)を使用可能にする。
/V 整数オーバフロー(ベクタ整数命令)を使用可能にする。
/M 意味を変更する(VLDx 命令と VGATHx 命令)。
/0 VMR ビットが 0 の要素に対してだけマスクされた演算を実行する。
/1 VMR ビットが 1 の要素に対してだけマスクされた演算を実行する。

16.4.1 ベクタ命令とそのオペランドの検査

ベクタ命令のあるプログラム記憶位置を検査すると,デバッガはその命令をデコードし,命令とそのオペランドを MACRO アセンブラ形式に変換します。ただし,次の制限事項があります。命令コードについての詳しい説明は『VAX MACRO and Instruction Set Reference Manual』を参照してください。

EXAMINE/OPERANDS .%PC コマンドを使用すると現在の PC 値の命令とそのオペランドを表示できます(第 4.3.1 項 を参照)。ベクタ命令をこのコマンドを使用して検査すると,ベクタ・レジスタ・オペランドの値が配列変数として表示されます。次に例を示します(Fortran 配列構文)。


DBG> EXAMINE/OPERANDS .%PC
PROG$MAIN\%LINE 81+19:      VSTL    V0,W^-572(FP),S^#4 
V0 contains: 
        0\%V0(0):  137445504 
        0\%V0(1):  137445504 
        0\%V0(2):  137445504 
 
     W^-572(FP)2145991456 contains 2
DBG>

スカラ命令の場合と同様に,オペランド値は,調べられた命令に適したデータ型で表示されます。

EXAMINE/OPERANDS コマンドを使用する場合,レジスタ要素の表示は次の要素によって異なります。

次の 2 つの例でこれを具体的に説明します。それぞれ,マスクされないレジスタ間の演算とマスクされたレジスタ間の演算を示しています。

次の例では,チェックした命令 VVADDF がマスクされない演算を実行しており,そのため VMR の現在の値は関係ありません。0 から 5 までのすべての要素が表示されています。


DBG> EXAMINE %VLR
0\%VLR: 6
DBG> EXAMINE %VMR(0:5)
0\%VMR 
   (0):     1 
   (1):     0 
   (2):     1 
   (3):     0 
   (4):     1 
   (5):     0
DBG> EXAMINE/OPERANDS .%PC
PROG$MAIN\%LINE 12:      VVADDF   V0,V1,V2 
V0 contains: 
        0\%V0(0):  7.0000000 
        0\%V0(1):  7.0000000 
            . 
            . 
        0\%V0(5):  7.0000000 
V1 contains: 
        0\%V1(0):  4.0000000 
        0\%V1(1):  4.0000000 
            . 
            . 
        0\%V1(5):  4.0000000 
V2 contains: 
        0\%V2(0):  5.0000000 
        0\%V2(1):  5.0000000 
            . 
            . 
        0\%V2(5):  5.0000000
DBG>

次の例では,同じ VVADDF 命令が,マスクされた演算を実行しています。命令修飾子 /1 を指定すると,セットされた VMR ビット(ビットの値が 1)に一致している要素に対して演算を行います。


DBG> EXAMINE %VLR
0\%VLR: 6
DBG> EXAMINE %VMR(0:5)
0\%VMR 
   (0):     1 
   (1):     0 
   (2):     1 
   (3):     0 
   (4):     1 
   (5):     0
DBG> EXAMINE/OPERANDS .%PC
PROG$MAIN\%LINE 12:      VVADDF/1   V0,V1,V2 
V0 contains: 
        0\%V0(0):  7.0000000 
        0\%V0(2):  7.0000000 
        0\%V0(4):  7.0000000 
V1 contains: 
        0\%V0(0):  4.0000000 
        0\%V0(2):  4.0000000 
        0\%V0(4):  4.0000000 
V2 contains: 
        0\%V0(0):  5.0000000 
        0\%V0(2):  5.0000000 
        0\%V0(4):  5.0000000
DBG>

次の例では,マスクされた演算でデータをメモリからベクタ・レジスタにロードしています。


DBG> EXAMINE %VLR
0\%VLR: 6
DBG> EXAMINE %VMR(0:5)
0\%VMR 
   (0):     1 
   (1):     0 
   (2):     1 
   (3):     0 
   (4):     1 
   (5):     0
DBG> EXAMINE/OPERANDS .%PC   (1)
PROG$MAIN\%LINE 31+12:      VLDL/1   ARR+8,#4,V0   (2)
     PROG$MAIN\ARR(3)(address 1024)contains 35   (3)
V0 contains: 
        0\%V0(0):   0   (4)
        0\%V0(2):   0 
        0\%V0(4):   0
DBG> EXAMINE ARR(1:8)  (5)
PROG$MAIN\ARR 
   (1):     9 
   (2):    17 
   (3):    35 
   (4):    73 
   (5):    81 
   (6):     6 
   (7):     7 
   (8):    49
DBG>

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

  1. EXAMINE/OPERANDS コマンドは,VLDL 命令が実行されようとしていることを示す。この命令は,図 16-1 に示すように,配列 ARR の ARR+8 バイトで始まるロングワード整数データをレジスタ V0 にロードする。図 16-1 は,命令が実行されたあとの V0 の内容を示している。配列 ARR には,1 からnまでの索引がついており,0 から n-1 までの索引ではないことに注意する(Fortran 例)。

  2. VLDL 命令のストライド値(#4)は,配列要素の開始アドレス間のバイト数を指定する。

  3. 命令オペランド ARR+8 は,配列要素 3 の開始点 ARR(3)を示している。EXAMINE/OPERANDS コマンドは演算が行われる配列 ARR の最初の要素だけを表示する(項目 を参照)。

  4. VLR と VMR の現在の値から,VLDL 命令は配列要素 ARR(3),ARR(5),および ARR(7)の内容をそれぞれレジスタ要素 V0(0),V0(2),および V0(4)にロードする。EXAMINE/OPERANDS コマンドは,命令が実行される前の V0 の値を表示する。

  5. 参考として,EXAMINE ARR(1:8)コマンドは,ロード操作に関連したすべての範囲の配列要素を表示する。

図 16-1 メモリからベクタ・レジスタへの配列要素のマスクされたロード



前へ 次へ 目次 索引