日本-日本語

製品  >  ソフトウェア  >  OpenVMS  >  マニュアル

OpenVMS マニュアル


≫ 

OpenVMS
ライブラリ

タイトルページ
目次
まえがき
第 1 章:移行プロセスの概要
第 2 章:移行方法の選択
第 3 章:アプリケーションの移行
第 4 章:再コンパイルと再リンクの概要
第 5 章:ページサイズの拡大に対するアプリケーションの対応
第 6 章:共用データの整合性の維持
第 7 章:アプリケーションデータ宣言の移植性の確認
第 8 章:アプリケーション内の条件処理コードの確認
第 9 章:OpenVMS I64コンパイラ
付録 A :アプリケーション評価チェックリスト
用語集
索引
PDF
OpenVMS ホーム

HP OpenVMS
OpenVMS VAX から OpenVMS I64 への
アプリケーションの移行


目次 索引



レコード・タイプは,HP Fortran 77 でも HP Fortran でも同じです。必要な場合には,EXCHANGE コマンドと /NETWORK 修飾子および /TRANSFER=BLOCK 修飾子を使用してデータを移植してください。コピー操作でファイルを Stream_LF 形式に変換するには, /TRANSFER=BLOCK の代わりに/TRANSFER=(BLOCK,RECORD_SEPARATOR=LF) を使用するか,または EXCHANGE コマンドで /FDL 修飾子を使用して,レコード・タイプや他のファイル属性を変更します。

フォーマッティングされていない浮動小数点データを変換しなければならない場合には, HP Fortran 77 プログラム (VAX ハードウェア) が REAL*4 または COMPLEX*8 データを F 浮動小数点形式で格納し,REAL*8,REAL*16,または COMPLEX*16 データを D 浮動小数点または G 浮動小数点形式で格納し, REAL*16 データを H 浮動小数点形式で格納することを念頭に置いてください。 HP Fortran for OpenVMS Alpha プログラム ( Alpha ハードウェアで実行されるプログラム) は,REAL*4,REAL*8,REAL*16,COMPLEX*8,および COMPLEX*16 データをそれぞれ, 表 9-5 に示す形式のいずれかで格納します。

表 9-5 VAX システムと I64 システムでの浮動小数点データ
データ宣言 VAX 形式 I64 形式
REAL*4 と COMPLEX*8 VAX F 浮動小数点形式 IEEE S 浮動小数点または VAX F 浮動小数点 1 形式
REAL*8 と COMPLEX*16 VAX D 浮動小数点または G 浮動小数点形式 IEEE T 浮動小数点,VAX D 浮動小数点 1,または VAX G 浮動小数点形式
REAL*16 VAX H 浮動小数点 X 浮動小数点。変換が必要。一般には,/CONVERT 修飾子または関連する OPTION 文,論理名, OPEN 文の /CONVERT キーワードのいずれかを使用する。 RTL ルーチン CVT$CONVERT_FLOAT を使用することもできる。

1I64 システムでは,多数の演算を実行するときに VAX の F 浮動小数点, D 浮動小数点,または G 浮動小数点形式を使用することは望ましくない。このような場合には, HP Fortran for OpenVMS I64 の変換ルーチンを使用する変換プログラムで, F 浮動小数点形式を IEEE S 浮動小数点形式に変換し, D 浮動小数点形式と G 浮動小数点形式を IEEE T 浮動小数点形式に変換することを考慮しなければならない。



ここでは, HP Pascal と他の HP Pascal コンパイラを比較し, VAX システムと I64 システムの HP Pascal の違いを示します。これらの機能の完全な説明については,『DEC Pascal Language Reference Manual』を参照してください。

9.6.1 使用されない外部シンボル

OpenVMS VAX では,HP Pascal コンパイラは,最終的な命令ストリーム中にあるシンボルに対してだけグローバル・シンボル定義 (GSD) を生成します。 OpenVMS I64 システムでは,HP Pascal は,プログラム中で使用されているかどうかにかかわらず,すべての外部定義に対して GSD を生成します。これにより,リンク時に追加のオブジェクトが必要になったり,一部のプログラムを実行する際に追加の共有イメージが必要になる場合があります。

このようなプログラムは,実際にプログラム中で使用している場合にだけ該当する外部定義を宣言するように変更してください。

9.6.2 プラットフォームにまたがった環境ファイル

コンパイラは,同じターゲット・プラットフォームのコンパイラが作成した環境ファイルだけを継承します。たとえば,HP Pascal for OpenVMS VAX が生成した環境ファイルを HP Pascal for OpenVMS I64 コンパイラで継承することはできません。

9.6.3 列挙型と論理型のデフォルトのサイズ

パックされていない構造体での列挙型と論理型のデフォルトのサイズは, I64 ではロングワードです。 VAX システムでは,論理型と小さな列挙型のデフォルトはバイトで,大きな列挙型はワードです。 I64 システムで VAX と同じ動作をさせる必要がある場合は, /ENUMERATION_SIZE=BYTE 修飾子または [ENUMERATION_SIZE(BYTE)] 属性を使用するか,該当するフィールドや構成要素に対して,個別に [BYTE] 属性または [WORD] 属性を記述します。 OpenVMS VAX コンパイラでのデフォルトは,互換性を維持するために /ENUMERATION_SIZE=BYTE のままです。

9.6.4 パックされていない配列とレコードのデフォルトのデータ・レイアウト

I64 システムでは,デフォルトのデータ・レイアウトは自然なアラインメントです。そのため,レコード・フィールドと配列の構成要素は,サイズに応じた境界にアラインされます。 VAX システムのデフォルトのアラインメント規則では,このようなフィールドは次のバイト境界に割り当てられます。 I64 システムで VAX と同じ動作をさせる必要がある場合は, /ALIGN=VAX 修飾子または [ALIGN(VAX)] 属性を使用します。

9.6.5 デフォルトの浮動小数点形式

I64 システムのデフォルトの浮動小数点形式は IEEE 形式です。コンパイラは,REAL データ型に対しては IEEE S 浮動小数点を使用し, DOUBLE データ型に対しては IEEE T 浮動小数点, QUADRUPLE データ型に対しては X 浮動小数点を使用します。 VAX システムでは,デフォルトの浮動小数点形式は VAX 形式です。 OpenVMS I64 システムで VAX の浮動小数点形式を使用する必要がある場合は, /FLOAT=G_FLOAT 修飾子または /FLOAT=D_FLOAT 修飾子を使用するか,モジュール・レベル属性 [FLOAT()] を使用します。 I64 システムで VAX 形式が要求されると,コンパイラは演算を行う前に VAX 形式の値を IEEE 形式に変換します。その後,コンパイラはメモリに格納する前に値を元の VAX 形式に変換します。 VAX 形式と IEEE 形式の違いにより,有効桁数と精度に若干違いが生じます。

9.6.6 IADDRESS と VOLATILE

IADDRESS 組み込み機能では,パラメータが VOLATILE 変数であるか, VOLATILE パラメータであるか,ルーチン・エントリ・ポイントであることを仮定しています。 ADDRESS 組み込み機能と異なり,IADDRESS 組み込み機能は,パラメータに VOLATILE 属性がなくても警告を生成しません。

VAX システムでは,HP Pascal コンパイラは,変数が宣言されているルーチン全体に対して変数が存在するように変数を割り当てることがあります。このような状況では,組み込み機能 IADDRESS を使用して変数のアドレスを取得する処理は,期待どおりに動作します。通常は,アドレスは項目リストまたは同等の方法でシステム・サービスに渡されます。

I64 システムでは,HP Pascal コンパイラがスタックにデータを配置する際,より最適化されるように配置します。 VOLATILE 属性がないと,コンパイラは最低限の期間だけ変数を割り当てます。 IADDRESS を使用してアドレスを取得すると,システム・サービスがそのアドレスにデータを書き込む時点では,その変数はすでに存在せず,メモリに書き込むと別の変数が壊れる可能性があります。

要約すると,自動変数またはパラメータに対して IADDRESS 組み込み機能を使用する場合は, VOLATILE 属性を使用して正しい動作を保証しなければなりません。

9.6.7 値が大きな符号なし数値での INT のオーバフロー

VAX システムでは,INT 組み込み関数は,値が大きな符号なし数値を受け取ると,そのまま負の整数に変換します。しかし,HP Pascal に 64 ビット整数型を追加するにあたり,この動作は誤りであることが明らかとなりました。そのため,オーバフロー・チェックが有効な場合,実パラメータを INTEGER32 で表すことができない場合は, INT 組み込み関数は実行時エラーを通知するようになりました。

負の整数に変換したい大きな符号なし数値がある場合は,型キャストを使用して演算を実行しなければなりません。

9.6.8 バウンド・プロシージャ値

VAX システムでは,バウンド・プロシージャ値は 2 つのロングワードからなる構造体であり,エントリ・ポイントのアドレスとネストした環境を定義するためのフレーム・ポインタが格納されます。 HP Pascal では,PROCEDURE または FUNCTION パラメータとして,これら 2 ロングワードの構造体のいずれかを期待します。さらに,呼び出されたルーチンは,バウンド・プロシージャ値を受け取ったのか,単純なルーチン・アドレスを受け取ったのかを識別できる必要があります。仮ルーチン・パラメータ %IMMED にルーチンを渡す場合, HP Pascal はエントリ・ポイントのアドレスを渡します。

I64 システムでは,バウンド・プロシージャ値は単に特別な種類の関数記述子であり,隠れたジャケット・ルーチンを呼び出します。ジャケット・ルーチンがさらにフレーム・ポインタを初期化して,実際のルーチンを呼び出します。この構造により,別のルーチンを間接的に呼び出すルーチンは,バウンド・プロシージャ値に対して何も特別なことを実行する必要はありません。同様に,%IMMED によってルーチンを渡す場合 (またはルーチンの IADDRESS を要求する場合) は,%IMMED がないかのように関数記述子のアドレスが渡されます。 HP Pascal には,ルーチンの実際のコード・アドレスを取得する直接的な方法はありません。これは,対応する関数記述子がないと,一般にはルーチンの使い道がないためです。

9.6.9 整合配列パラメータ用のさまざまな記述子クラス

整合パラメータについては,HP Pascal は「記述子渡し」メカニズムを使用してルーチン間で受け渡しを行います。整合配列パラメータに関して,HP Pascal は,VAX システムでは CLASS_A 記述子を使用し, I64 システムでは CLASS_NCA 記述子を使用します。 CLASS_NCA 記述子では,配列の構成要素にアクセスする際に,より効率の良いコードが生成されます。 Pascal 用の CLASS_A 記述子を構成するフォーリン・ルーチンがある場合は,コードを調べて,変更が必要かどうかを確認する必要があります。いくつかの実パラメータでは,CLASS_A 記述子と CLASS_NCA 記述子は, DSC$B_CLASS フィールド (HP Pascal は参照しません) を除いて同じです。それ以外のパラメータでは,CLASS_NCA 記述子を生成するか, Pascal ルーチンの仮整合パラメータに明示的な CLASS_A 属性を追加しなければなりません。

9.6.10 OpenVMS I64 では利用できない Pascal の機能

OpenVMS VAX システム用の HP Pascal の以下の機能は, OpenVMS I64 用の HP Pascal では利用できません。

  • 組み込みルーチン MFPR および MTPR

  • DCL 修飾子 /DESIGN=COMMENTS

  • DCL 修飾子 /SHOW=TABLE_OF_CONTENTS およびリスト・セクション

  • DCL 修飾子 /SHOW=INLINE およびリスト・セクション

これらの機能に代わる機能や回避策はありません。

OpenVMS VAX から OpenVMS I64 に移行する前に, /PLATFORM=OPENVMS_AXP 修飾子付きでプログラムをコンパイルすることができます。 OPENVMS_AXP キーワードを使用しなければならない理由は,現在出荷中の OpenVMS VAX システム用の HP Pascal コンパイラは, /PLATFORM DCL 修飾子の OPENVMS_I64 キーワードを認識しないためです。 OpenVMS VAX から OpenVMS I64 への移植に関する問題は, OpenVMS VAX から OpenVMS Alpha に移植する際の問題と基本的に同じです。唯一の違いは,デフォルトの浮動小数点形式です。

9.6.11 Pascal レコード・レイアウト・ガイド

HP Pascal キットには, OpenVMS VAX から OpenVMS I64 にプログラムを移植する際のデータ・レイアウトとデータ変換の問題について,詳しく説明したドキュメントが付属しています。ファイルは,SYS$HELP:PASCAL_RECORD_LAYOUT_GUIDE.MEM にあります。


目次 索引

印刷用画面へ
プライバシー 本サイト利用時の合意事項