library home hp.com home products and services support and drivers solutions
cd-rom home
End of Jump to page title
HP OpenVMS Systems
Documentation

Jump to content


HP OpenVMS

HP OpenVMS
OpenVMS Alpha から OpenVMS I64 へのアプリケーション・ポーティング・ガイド


前へ 次へ 目次 索引


/ENVIRONMENT=FP コマンド修飾子と ENVIRONMENT(FP) スイッチには影響ありません。

浮動小数点のサポート

ここでは,BLISS コンパイラを使った浮動小数点演算のサポートについて説明します。

浮動小数点組み込み関数

BLISS では,浮動小数点数値に関して,高いレベルのサポートは提供されません。浮動小数点リテラルを作成する機能はサポートされます。また,浮動小数点演算および変換操作を行うためのマシン固有の組み込み関数も用意されています。サポートされる組み込み関数の一覧については, マシン固有の組み込み関数 を参照してください。

どの浮動小数点組み込み関数もオーバーフローは検出しないため,値を返しません。

浮動小数点リテラル

OpenVMS I64 BLISS でサポートされる浮動小数点リテラルは,OpenVMS Alpha BLISS の場合と同じで,%E,%D,%G,%S,および %T がサポートされます。

浮動小数点レジスタ

I64 浮動小数点レジスタの直接使用はサポートされていません。

浮動小数点パラメータを受け渡しする BLISS 以外のルーチンの呼び出し

値渡しで浮動小数点パラメータを受け取り,浮動小数点値または複素数値を返す BLISS 以外の標準ルーチンを呼び出すことができます。

OpenVMS I64 の BLISS では,以下の標準関数がサポートされます。

新しいレキシカルと拡張されたレキシカル

OpenVMS I64 のコンパイラ BLISS32I と BLISS64I をサポートするために,以下の新しいコンパイラ状態レキシカルが BLISS に追加されました。

OpenVMS I64 BLISS での IPF ショート・データ・セクションのサポート

IPF 呼び出し規則では,8 バイト以下のサイズのグローバル・データ・オブジェクトはすべて,ショート・データ・セクションに割り振ることが要求されています。

ショート・データ・セクションのアドレスは, GP ベース・レジスタの内容に 22 ビット・リテラルを加算する効率のよいコード・シーケンスによって設定されます。このコード・シーケンスは,すべてのショート・データ・セクションを組み合わせたサイズを制限します。ショート・データ・セクションに割り当てられたデータ容量の合計が 2**22 バイトを超えると,リンカ・エラーが発生します。 IPF のコンパイラは,ショート・グローバル・データ・セクションおよびショート・エクスターナル・データ・セクションにアクセスするときに, GP 相対アドレッシングを使用できます。

OpenVMS I64 BLISS は,PSECT 属性 GP_RELATIVE および新しい PSECT 属性 SHORT に対して,新しい動作を実行します。この新しい属性はショート・データ・セクションの割り当てをサポートします。

PSECT 属性として GP_RELATIVE キーワードを指定すると,PSECT はショート・データを含むセクションとしてラベルが付けられるため,リンカは GP ベース・アドレスの近くに PSECT を割り振ります。

SHORT 属性の構文は以下のとおりです。


    SHORT ( psect-name ) 

SHORT 属性には,以下のルールが適用されます。


BLISS コードで PSECT を使用する例を以下に示します。


PSECT 
 
  NODEFAULT = $GLOBAL_SHORT$ 
    (READ,WRITE,NOEXECUTE,NOSHARE,NOPIC,CONCATENATE,LOCAL,ALIGN(3), 
    GP_RELATIVE), 
 
! The above declaration of $GLOBAL_SHORT$ is not needed.  If the above 
! declaration were deleted then the SHORT($GLOBAL_SHORT$) attribute in 
! the following declaration would implicitly make an identical 
! declaration of $GLOBAL_SHORT$. 
 
  GLOBAL = $GLOBAL$ 
    (READ,WRITE,NOEXECUTE,NOSHARE,NOPIC,CONCATENATE,LOCAL,ALIGN(3), 
    SHORT($GLOBAL_SHORT$)), 
 
  NODEFAULT = MY_GLOBAL 
    (READ,WRITE,NOEXECUTE,SHARE,NOPIC,CONCATENATE,LOCAL,ALIGN(3)), 
 
  PLIT = $PLIT$ 
    (READ,NOWRITE,NOEXECUTE,SHARE,NOPIC,CONCATENATE,GLOBAL,ALIGN(3), 
    SHORT($PLIT_SHORT$)); 
 
GLOBAL 
        X1,                     ! allocated in $GLOBAL_SHORT$ 
        Y1 : VECTOR[2,LONG],    ! allocated in $GLOBAL_SHORT$ 
        Z1 : VECTOR[3,LONG],    ! allocated in $GLOBAL$ 
        A1 : PSECT(MY_GLOBAL),  ! allocated in MY_GLOBAL 
        B1 : VECTOR[3,LONG] PSECT(MY_GLOBAL), ! allocated in MY_GLOBAL 
        C1 : VECTOR[3,LONG] 
                PSECT($GLOBAL_SHORT$); ! allocated in $GLOBAL_SHORT$ 
 
PSECT GLOBAL = MY_GLOBAL; 
! use MY_GLOBAL as default for both noshort/short 
 
GLOBAL 
        X2,                     ! allocated in MY_GLOBAL 
        Y2 : VECTOR[2,LONG],    ! allocated in MY_GLOBAL 
        Z2 : VECTOR[3,LONG],    ! allocated in MY_GLOBAL 
        A2 : PSECT($GLOBAL$),   ! allocated in $GLOBAL_SHORT$ 
        B2 : VECTOR[3,LONG] PSECT($GLOBAL$); ! allocated in $GLOBAL$; 
 
! Note that the allocations of A1, X2 and Y2 violate the calling 
! standard rules.  These variables cannot be shared with other 
! languages, such as C or C++. 
 
PSECT GLOBAL = $GLOBAL$; 
! back to using $GLOBAL$/$GLOBAL_SHORT$ as default noshort/short 
 
GLOBAL BIND 
        P1 = UPLIT("abcdefghi"),        ! allocated in $PLIT$ 
        P2 = PLIT("abcdefgh"),          ! allocated in $PLIT_SHORT$ 
        P3 = PSECT(GLOBAL) PLIT("AB"),  ! allocated in $GLOBAL_SHORT$ 
        p4 = PSECT($PLIT_SHORT$) 
                PLIT("abcdefghijklmn"), ! allocated in $PLIT_SHORT$ 
        P5 = PSECT(MY_GLOBAL) PLIT("AB"); ! allocated in MY_GLOBAL 

注意

  • A1,X2,Y2,および P5 の割り当ては呼び出し規則に違反します。これらの変数は,C や C++ などの他の言語と共有できません。 BLISS および MACRO で書かれたモジュールとの共有は可能です。

  • 現在の OpenVMS I64 BLISS の設計では, EXTERNAL 変数参照で GP_RELATIVE アドレッシング・モードはサポートされていません。しかし,EXTERNAL変数で使用される通常の GENERAL アドレッシング・モードは, GP_RELATIVE セクションを正しく参照します。現時点では,ADDRESSING_MODE(GP_RELATIVE) 属性を BLISS に追加する予定はありません。

6.4 COBOL

COBOL Version 2.8 は,Alpha と I64 の両方でサポートされます。 OpenVMS I64 で COBOL を使用する場合の制限事項と既知の問題点については,COBOL のリリース・ノートを参照してください。

6.4.1 浮動小数点演算

OpenVMS Alpha の COBOL コンパイラのデフォルトは /FLOAT=D_FLOAT です。 I64 の場合,/FLOAT=IEEE_FLOAT がデフォルトです。

COBOL コンパイラは /IEEE_MODE 修飾子をサポートしません。 COBOL RTL は,例外処理とラウンディング処理の点で Alpha の COBOL ランタイム環境と同じ環境を I64 で設定します。

I64 上で浮動小数点を COBOL がどのように処理するかについては, COBOL のリリース・ノートとホワイト・ペーパー『Intel® Itanium® における OpenVMS 浮動小数点演算について』を参照してください。

このホワイト・ぺーパおよび関連の技術資料の入手方法については,本書のまえがきを参照してください。

6.4.2 /ARCH および /OPTIMIZE=TUNE 修飾子

「コンパイル・アンド・ゴー」の互換性を維持するために, /ARCH および /OPTIMIZE=TUNE 修飾子に対する Alpha 固有のキーワードがコンパイラ起動コマンドで受け付けられます。これらの値が無視されることを示す情報メッセージが出力されます。

/ARCH および /OPTIMIZE=TUNE 修飾子に対する I64 固有のキーワードは,OpenVMS I64 コンパイラで定義されていますが,これは開発用に提供されるものです。これらの修飾子の動作は予測できないため,使用すべきではありません。

6.5 Fortran

OpenVMS I64 では, Fortran 90 V8.0 がサポートされます。 Fortran 77 は OpenVMS I64 ではサポートされません。詳細については, 第 6.5.2 項 を参照してください。

OpenVMS I64 システム向けの HP Fortran では, OpenVMS Alpha システム向けの HP Fortran と同じコマンド・ライン・オプションおよび言語機能が提供されますが,いくつかの例外があります。ここでは,これらの例外について説明します。

6.5.1 浮動小数点演算

Fortran のリリース・ノートおよびホワイトペーパー『Intel® Itanium® アーキテクチャにおける OpenVMS 浮動小数点演算について』では,HP Fortran for I64 で浮動小数点の問題がどのように処理されるかについて説明しています。

このホワイトペーパーと,OpenVMS から Itanium アーキテクチャへの移行に関するその他のリソースが入手できる Web サイトについては,「まえがき」の「関連資料」の項を参照してください。

ここでは,その要点をまとめます。

ホワイトペーパー『Intel® Itanium® アーキテクチャにおける OpenVMS 浮動小数点演算について』にあるように,I64 でアプリケーションの実行中に発生する浮動小数点例外の番号,種類,場所は, Alpha と同じではありません。特に,VAX 形式の浮動小数点で違いが顕著で,一般に,計算後に元の VAX 形式に変換する際にだけ例外が発生します。

VAX 形式の浮動小数点のユーザに関係しそうな影響には,以下の 3 つがあります。

6.5.2 サポートされるのは F90 コンパイラのみ

F77 コンパイラは,以前は /OLD_F77 修飾子で起動されていましたが,現在は使用できなくなりました。 Alpha F77 コンパイラで提供されていて, I64 および Alpha の F90 ではまだ提供されていない機能のうち,以下の機能は現在開発中です。

注意

/OLD_F77 修飾子はサポートされませんが,これを /F77 修飾子と混同しないでください。 /F77 修飾子は,FORTRAN-66 との間で互換性のないステートメントについて,コンパイラが FORTRAN-77 の解釈ルールを使用することを示し,この修飾子は今後もサポートされます。

6.5.3 /ARCH および /OPTIMIZE=TUNE 修飾子

「コンパイル・アンド・ゴー」の互換性を維持するために, /ARCH および /OPTIMIZE=TUNE 修飾子に対する Alpha 固有のキーワードがコンパイラ起動コマンドで受け付けられます。これらの値が無視されることを示す情報メッセージが出力されます。

/ARCH および /OPTIMIZE=TUNE 修飾子に指定する I64 固有のキーワードは,OpenVMS I64 で定義されていますが,これは開発のためにだけ提供されるものです。これらの修飾子の動作は予測できないため,使用すべきではありません。


前へ 次へ 目次 索引