日本-日本語 |
|
|
|
OpenVMS マニュアル |
|
HP OpenVMS MACRO コンパイラ
|
目次 | 索引 |
5.5 符号拡張とチェック |
ビルトイン EVAX_SEXTL (ロングワード符号拡張) を使用すると, 64 ビット値の下位 32 ビットを符号拡張してデスティネーションに格納することができます。このビルトインは,ソースの下位ロングワードの符号拡張を明確にして,デスティネーションに格納します。
EVAX_SEXTL は,64 ビット値の下位 32 ビットを受け取り,上位 32 ビットに符号拡張 (値のビット 31 の内容) を設定して,結果の 64 ビットをデスティネーションに格納します。
以下の例はすべて正しい使用法です。
evax_sextl r1,r2 evax_sextl r1,(r2) evax_sextl (r2), (r3)[r4] |
これらの例が示すように,オペランドは必ずしもレジスタである必要はありません。
マクロ $IS_32BITS を使用すると, 64 ビット値の下位 32 ビットの符号拡張をチェックすることができます。説明については 付録 E を参照してください。
5.6 Alpha 命令ビルトイン
コンパイラは,多くの Alpha 命令をビルトインとしてサポートしています。これらのビルトインの多くは (コンパイラの最初のリリースから利用可能です), 64 ビットのデータを処理するために使用できます。各ビルトインの機能と有効なオペランドについては, 付録 C を参照してください。
これらビルトインの多くは OpenVMS I64 でも使用でき, 1 つ以上の Itanium 命令を使用して同じ動作がエミュレートされます。
5.7 ページ・サイズに依存する値の計算
以下に示す各ページ・マクロでは, 64 ビット仮想アドレスをサポートするためのパラメータ QUAD=NO/YES が使用できます。
これらのマクロは,ページ・サイズに依存した値を計算するための,標準的でアーキテクチャに依存しない方法を提供します。これらのマクロについての詳細は,
付録 D を参照してください。
5.8 64 ビット・アドレス空間内でのバッファの作成と使用
制御ブロック・マクロ $RAB と $RAB_STORE は 64 ビット・アドレス空間内にデータ・バッファを作成して使用できるように拡張されています。 64 ビット版の名前は,それぞれ $RAB64 と $RAB64_STORE です。残りの RMS インタフェースは,現時点では 32 ビットに制限されています。 $RAB64 および $RAB64_STORE についての詳細は, HP OpenVMS Programming Concepts Manual を参照してください。
5.9 64 KB を超える移動のコーディング
MACRO 命令 MOVC3 および MOVC5 は, 64 ビット・アドレスを適切に処理しますが,移動する長さは 64 KB までに制限されています。この制限は,MOVC3 と MOVC5 がワード・サイズの長さを受け取ることが原因です。
64 KB を超えて移動を行うには, OTS$MOVE3 と OTS$MOVE5 を使用します。 OTS$MOVE3 と OTS$MOVE5 は,ロングワード・サイズの長さを受け取ります。 (LIB$MOVC3 および LIB$MOVC5 には,MOVC3 および MOVC5 と同じ 64 KB の長さ制限があります。)
以下では,MOVC3 を OTS$MOVE3 で置き換える例を示します。
MOVC3 を使用したコード:
MOVC3 BUF$W_LENGTH(R5), (R6), OUTPUT(R7) ; Old code, word length |
長さがロングワードの,対応する 64 ビット・コード
$SETUP_CALL64 3 ; Specify three arguments in call EVAX_ADDQ R7, #OUTPUT, R7 $PUSH_ARG64 R7 ; Push destination, arg #3 $PUSH_ARG64 R6 ; Push source, arg #2 MOVL BUF$L_LENGTH(R5), R16 $PUSH_ARG64 R16 ; Push length, arg #1 $CALL64 OTS$MOVE3 MOVL BUF$L_LENGTH(R5), R16 EVAX_ADDQ R6, R16, R1 ; MOVC3 returns address past source EVAX_ADDQ R7, R16, R3 ; MOVC3 returns address past destination |
MOVC3 では R0,R2,R4,および R5 がクリアされるため,これらの副作用が必要でないことを確認してください。
OTS$MOVE3 と OTS$MOVE5 は,他の LIBOTS ルーチンとともに OpenVMS RTL General Purpose (OTS$) Manual で説明されています。
目次 | 索引 |
|