日本-日本語
日本HPホーム 製品 & サービス OpenVMS製品情報
≫  お問い合わせ


OpenVMS マニュアル


 

OpenVMS ドキュメント
ライブラリ

タイトルページ
目次
まえがき
第 1 部 : 概念と方法
第 1 章:Macro-32コードの移植の準備
第 2 章:MACROコンパイラのプラットフォームごとの動作
第 3 章:ソースに対する推奨される変更と必要な変更
第 4 章:移植したコードの性能改善
第 5 章:MACROの64ビット・アドレッシングのサポート
第 2 部:リファレンス・セクション
付録 A :MACROコンパイラの修飾子
付録 B :専用の指示文
付録 C :MACROコンパイラ・ビルトイン
付録 D :VAXからAlphaまたはI64への移植用のマクロ
付録 E :64ビット・アドレッシング用のマクロ
索引
PDF
OpenVMS ホーム
HP OpenVMS MACRO コンパイラポーティングおよびユーザーズ・ガイド

HP OpenVMS MACRO コンパイラ
ポーティングおよびユーザーズ・ガイド


目次 索引



ビルトイン 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 が使用できます。

  • $BYTES_TO_PAGES

  • $NEXT_PAGE

  • $PAGES_TO_BYTES

  • $PREVIOUS_PAGE

  • $START_OF_PAGE

これらのマクロは,ページ・サイズに依存した値を計算するための,標準的でアーキテクチャに依存しない方法を提供します。これらのマクロについての詳細は, 付録 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 で説明されています。


目次 索引

© 2012 Hewlett-Packard Development Company, L.P.