日本-日本語

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

OpenVMS マニュアル


≫ 

OpenVMS V8.3
ライブラリ

タイトルページ
目次
まえがき
第 1 章:移行プロセスの概要
第 2 章:移行方法の選択
第 3 章:アプリケーションの移行
第 4 章:再コンパイルと再リンクの概要
第 5 章:ページ・サイズの拡大に対するアプリケーションの対応
第 6 章:共有データの整合性の維持
第 7 章:アプリケーション・データ宣言の移植性の確認
第 8 章:アプリケーション内の条件処理コードの確認
第 9 章:アプリケーションのトランスレート
第 10 章: ネイティブなイメージとトランスレートされたイメージの間の相互操作性の確認
第 11 章:OpenVMS Alpha コンパイラ
付録 A :アプリケーション評価チェックリスト
用語集
索引
PDF
OpenVMS ホーム
OpenVMS Alpha オペレーティング・システム | HPE 日本

OpenVMS Alpha
オペレーティング・システム
OpenVMS VAX から OpenVMS Alpha へのアプリケーションの移行


目次 索引

第 11 章
OpenVMS Alpha コンパイラ

この章では,ネイティブなOpenVMS Alphaコンパイラ固有の機能について説明します。さらに,OpenVMS VAXコンパイラの機能のうち, OpenVMS Alphaコンパイラではサポートされない機能と,動作が変更された機能についても示します。

以下にこの章で説明するコンパイラを示します。

コンパイラの相違点が発生するのは,次の 2 つの理由によります。それは, OpenVMS VAX で動作するコンパイラの以前のバージョンと現在のバージョンとの間に違いがあるためと,VAX コンピュータと Alpha コンピュータで動作するバージョンに違いがあるためです。 OpenVMS Alpha コンパイラは,OpenVMS VAX の対応するコンパイラと互換性を維持するように設計されています。この後の節に示すように,互換性を維持するためにいくつかの修飾子が提供されます。

言語は言語標準規格に準拠し,OpenVMS VAX の大部分の言語拡張機能をサポートします。コンパイラは OpenVMS VAX システムの場合と同じ省略時のファイル・タイプを使用して出力ファイルを作成します。たとえば,オブジェクト・モジュールのファイル・タイプは .OBJ です。

しかし,OpenVMS VAX システムのコンパイラでサポートされていた機能のうち,一部の機能は OpenVMS Alpha システムで提供されません。

各言語のコンパイラの相違点の詳細については,その言語のマニュアル,とくにユーザーズ・ガイドとリリース・ノートを参照してください。

11.1 DEC Ada の AlphaシステムとVAXシステム間の互換性

DEC Ada は,VAX Ada に含まれる標準的および拡張されたAda言語機能を,ほとんどすべて含んでいます。これらの機能は次の解説書で説明されています。

  • 『DEC Ada Language Reference Manual』

  • 『Developing Ada Programs on OpenVMS Systems』

  • 『DEC Ada Run-Time Reference Manual for OpenVMS Systems』

しかし,プラットフォーム・ハードウェアの違いにより,いくつかの機能はサポートされておらす,VAXシステムとAlphaシステムでは異なる機能もあります。あるシステムから別のシステムへのプログラムの移行を助けるため,移行の節ではこれらの違いを説明します。

注意

すべてのシステムの各リリースごとに,これらの機能のすべてがサポートされるわけではありません。詳しくは,DEC Ada のリリース・ノートを参照してください。



概して,DEC Ada はすべてのプラットフォームで同じデータ・タイプをサポートします。しかし,以下の違いに注意してください。

  • H浮動小数点データ
    VAXシステムではサポートされているが,Alphaシステムではサポートされていない

  • IEEE浮動小数点データ型
    Alphaシステムではサポートされているが,VAXシステムではサポートされていない

  • 自然なアラインメント
    Alphaシステムでは,DEC Ada は省略時設定としてレコードとアレイの構成要素を自然な境界にアラインします。VAXシステムでは,DEC Adaはレコードとアレイの構成要素をバイト境界にアラインします。アラインメントはCOMPONENT_ALIGNMENT プラグマで指定できます。レコード表現節の最大アラインメントは,VAXシステムでもAlphaシステムでも 29 です。



11.1.2 タスクに関する相違点

タスクの優先順位とスケジューリング,およびタスク制御ブロック・サイズはアーキテクチャ固有です。詳しくは,リリース・ノートを参照してください。

11.1.3 プラグマに関する相違点

プラグマには以下のような違いがあります。

  • COMPONENT_ALIGNMENTプラグマ
    Alphaシステムでは,COMPONENT_SIZE が省略時の選択肢です。VAXシステムでは, STORAGE_UNIT が省略時の選択肢です。

  • FLOAT_REPRESENTATIONプラグマ
    Alphaシステムでは,このプラグマは IEEE_FLOAT と VAX_FLOAT という2つの選択肢をサポートします。VAXシステムでは,VAX_FLOAT をサポートします。

  • LONG_FLOAT プラグマ AlphaシステムではLONG_FLOATプラグマは,FLOAT_REPRESENTATIONプラグマの値が VAX_FLOATであるときのみサポートされます。

  • SHAREDプラグマ
    システム間で異なるデータ型の制限があります。詳しくは,『DEC Ada Run-Time Reference Manual for OpenVMS Systems』を参照してください。

  • MAIN_STORAGEプラグマ
    Alphaシステムではサポートされません。

  • SHARE_GENERICプラグマ
    Alphaシステムではサポートされません。

  • TIME_SLICEプラグマ
    VAXシステムとAlphaシステムでのこのプラグマのサポートには,実行に関するいくつかの違いがあります。詳しくは,『DEC Ada Run-Time Reference Manual for OpenVMS Systems』を参照してください。



11.1.4 SYSTEMパッケージの相違点

SYSTEMパッケージに関しては,以下の変更があります。

  • SYSTEM.IEEE_SINGLE_FLOAT と SYSTEM.IEEE_DOUBLE_FLOAT
    Alphaシステムではサポートしていますが,VAXシステムではサポートしていません。

  • SYSTEM.H_FLOAT
    VAXシステムではサポートしていますが,Alphaシステムではサポートしていません。

  • SYSTEM.MAX_DIGITS
    VAXシステムでの値は 33,Alphaシステムでの値は 15 です。

  • SYSTEM.NAME
    DEC Ada を使用できる各システムで特定の列挙型がサポートされます。

  • SYSTEM.SYSTEM_NAME
    Alphaシステムでは,OpenVMS_Alpha という名前がサポートされます。

  • SYSTEM.TICK
    Alphaシステムでの値は 10.0-3 (1 ms)です。 VAXシステムでの値は 10.0-2 (10 ms) です。

さらに,VAXシステムでサポートされる以下のタイプとサブプログラムは, Alphaシステムではサポートされません。

SYSTEM.READ_REGISTER
SYSTEM.WRITE_REGISTER
SYSTEM.MFPR
SYSTEM.MTPR
SYSTEM.CLEAR_INTERLOCKED
SYSTEM.SET_INTERLOCKED
SYSTEM.ALIGNED_WORD
SYSTEM.ADD_INTERLOCKED
SYSTEM.INSQ_STATUS
SYSTEM.REMQ_STATUS
SYSTEM.INSQHI
SYSTEM.REMQHI
SYSTEM.INSQTI
SYSTEM.REMQTI


以下に他のパッケージでの違いを示します。

  • CALENDARパッケージ
    システム間で実行方法に違いがあります。詳しくは,『DEC Ada Language Reference Manual』を参照してください。

  • MATH_LIBパッケージ
    システム間で実行方法に違いがあります。各パッケージの解説を参照してください。

  • SYSTEM_RUNTIME_TUNINGパッケージ
    このパッケージは VAX システムと,いくつかの制限事項はありますが Alpha システムでサポートされます。詳しくは,『DEC Ada Run-Time Reference Manual for OpenVMS Systems』を参照してください。



11.1.6 あらかじめ定義されている命令に対する変更

VAXシステムでサポートされる以下の2つのあらかじめ定義されている命令は Alphaシステムではサポートされません。

  • LONG_LONG_FLOAT_TEXT_IO

  • LONG_LONG_FLOAT_MATH_LIB



11.2 DEC C for OpenVMS AlphaシステムとVAX Cとの互換性

DEC Cを構成するコンパイラ群は,ANSIに準拠する基本的なC言語を定義し,これらの言語はAlphaアーキテクチャも含めて,すべてのDECプラットフォームで使用できます。詳しくは,DEC C の解説書を参照してください。

11.2.1 言語モード

DEC C for OpenVMS AlphaシステムはANSI C標準規格に準拠し,オプションとして VAX CおよびCommon C (pcc)の拡張機能をサポートします。オプションとして提供されるこれらの拡張機能はモードと呼び,これらの拡張機能を起動するには, /STANDARD修飾子を使用します。 表 11-1 はこれらのモードと,各モードを起動するのに必要なコマンドと修飾子の構文を示しています。

表 11-1 DEC C for OpenVMS Alphaコンパイラの操作モード
モード コマンド修飾子 説明
省略時の設定 /STANDARD=RELAXED_ANSI89 ANSI C標準規格に準拠するが,弊社の追加キーワードや,1文字目がアンダースコアでない事前定義マクロも使用できる。
ANSI C /STANDARD=ANSI89 厳密にANSI Cに準拠した言語のみを受け付ける。
VAX C /STANDARD=VAXC ANSI C標準規格の他にVAX Cの拡張機能も使用できる。これらの拡張機能が ANSI C標準規格と互換性がない場合でも使用可能である。
Common C (pcc) /STANDARD=COMMON ANSI C標準規格の他に,Common Cの拡張機能も使用できる。これらの拡張機能がANSI C標準規格と互換性がない場合も使用可能である。
Microsoftとの互換性 /STANDARD=MS Microsoft Visual C++コンパイラ製品に付属するCコンパイラの言語規則に従ってソース・プログラムを解釈する。



11.2.2 DEC C for OpenVMS Alphaシステムのデータ型のマッピング

DEC C for OpenVMS Alphaシステムのコンパイラは,対応するVAXコンパイラとほとんど同じデータ型マッピングをサポートします。 表 11-2 は,AlphaアーキテクチャでのC言語の算術演算データ型のサイズを示しています。

表 11-2 DEC C for OpenVMS Alphaコンパイラでの算術演算データ型のサイズ
Cデータ型 VAX Cのマッピング DEC C のマッピング
pointer 32 32または64 1
long 32 32
int 32 32
short 16 16
char 8 8
float 32 32 2
double 64 2 64 2
long double 64 2 64 2
__int16 NA 16
__int32 NA 32
__int64 NA 64

1実現されている場合には,ソース・ファイルでプラグマを使用するか,またはコマンド行修飾子を使用することにより,サイズを選択できる。
2コマンド行修飾子を使用することにより,Alphaで D,F,G,S,またはT浮動小数点データ型にマッピングする方法を選択できる。 第 11.2.2.1 項 を参照。

移植性を向上するために,DEC C for OpenVMS Alphaシステムのコンパイラでは,各データ型に対してマクロを定義するヘッダ・ファイルが準備されています。たとえば,64ビットの長さのデータ型が必要な場合には,int64マクロを使用します。

Cの浮動小数点データ型とAlphaの浮動小数点データ型の間のマッピングは,コマンド行修飾子によって制御されます。Alphaアーキテクチャでは,次の浮動小数点データ型をサポートします。

  • F浮動小数点 (OpenVMS VAXシステムと同じ)

  • D浮動小数点 (53ビットの精度)

  • G浮動小数点 (OpenVMS VAXシステムと同じ)

  • S浮動小数点 (IEEE単精度--32ビット)

  • T浮動小数点 (IEEE倍精度--64ビット)

  • X浮動小数点 (IEEE拡張倍精度--128ビット)

コマンド行修飾子を使用すれば,標準的なCデータ型のfloatとdoubleが Alphaのどの浮動小数点データ型にマッピングされるかを制御できます。たとえば, /FLOAT=G_FLOAT修飾子を指定した場合には,DEC Cはfloatデータ型をAlphaの F浮動小数点データ型にマッピングし,doubleデータ型をAlphaのG浮動小数点データ型にマッピングします。 表 11-3 は浮動小数点オプションを示しています。各コマンド行に浮動小数点修飾子は1つだけ指定できます。

表 11-3 DEC C の浮動小数点マッピング
コンパイラ・オプション Float Double Long Double
/FLOAT=F_GLOAT F浮動形式 G浮動形式  
/FLOAT=D_FLOAT F浮動形式 D-53浮動小数点  
/FLOAT=IEEE_FLOAT S浮動形式 T浮動形式  
/L_DOUBLE_SIZE=128 (省略時の値) --- --- X浮動形式



11.2.3 Alpha 命令にアクセスする組み込み機能

DEC C には, 表 11-4 に示す機能があり,これらの機能は Alphaシステム固有の機能です。この後の節では,これらの機能について説明します。

表 11-4 OpenVMS Alphaシステム固有の DEC Cコンパイラ機能
機能 説明
一部のAlpha命令へのアクセス 組み込み機能として使用できる
一部のVAX命令へのアクセス Alpha PALcodeを通じて使用できる
不可分な組み込み機能 AND,OR,およびADD演算の不可分性を保証する



DEC C は,特にシステムおプレベルのプログラミングのための C 言語により表現できない機能を提供するために正確な Alpha 命令をサポートします。例えば,次のようなものがあります。

  • TRAPBは命令パイプラインをドレインします。

  • MBはメモリ・バリアとして機能します。



Alphaアーキテクチャでは,特定のVAX命令を Alpha特権付きアーキテクチャ・ライブラリ(PALcode)命令として実現しています。 DEC Cでは,次のPALcode命令をアクセスできます。

  • INSQUEx --- エントリをロングワード・キューまたはクォドワード・キューに登録します。

  • INSQxI --- エントリをキューに登録し,インターロックします。

  • REMQUEx --- エントリをロングワード・キューまたはクォドワード・キューから削除します。

  • REMQxI --- エントリをキューから削除し,インターロックします。



VAXアーキテクチャでは,変数のインクリメントなど,特定の組み合わせ操作は不可分に実行されることが保証されます(つまり,途中で割り込みが発生することはありません)。 Alphaシステムでこれと同じ機能を実現するために,DEC Cは不可分性を保証して操作を実行できるような組み込み機能を準備しています。 表 11-5 はこれらの不可分な組み込み機能を示しています。これらの組み込み機能についてん詳細は DEC C 言語の解説書を参照してください。

表 11-5 不可分性組み込み機能
不可分性組み込み機能 説明
__ADD_ATOMIC_LONG(ptr, expr, retry_count)
__ADD_ATOMIC_QUAD(ptr,expr, retry_count)
ptr によって示されるデータ引数に式 expr を追加する。任意に指定できる retry_count パラメータは,操作を繰り返す回数を指定する(省略時の設定では,操作は永久に繰り返される)。
__AND_ATOMIC_LONG(ptr, expr, retry_count)
__AND_ATOMIC_QUAD(ptr, expr, retry_count)
ptr によって示されるデータ・セグメントをフェッチし,式 expr との間で論理AND演算を実行し,結果を格納する。 retry_count パラメータは,操作を繰り返す回数を指定する(省略時の設定では,操作は永久に繰り返される)。
__OR_ATOMIC_LONG(ptr, expr, retry_count)
__OR_ATOMIC_QUAD(ptr, expr, retry_count)
ptr によって示されるデータ・セグメントをフェッチし,式 expr との間で論理OR演算を実行し,結果を格納する。 retry_count パラメータは操作を繰り返す回数を指定する (省略時の設定では,操作は永久に繰り返される)。

これらの組み込み機能は,割り込みを発生させずに操作を最後まで実行することだけを保証します。同時に書き込みアクセスが実行されるような変数に対して不可分な操作を実行する場合(たとえば,ASTとメイン・ライン・コードから書き込まれる変数や 2つの並列プロセスから書き込まれる変数など),volatile 属性によって変数を保護しなければなりません。

さらに,DEC C for OpenVMS Alphaシステムでは,VAXインターロック命令と同じ機能を実行するために次の命令をサポートします。

  • TESTBITSSI

  • TESTBITCCI

これらの組み込み機能は,不可分な組み込み機能と同様に retry_count パラメータを使用して,ループが永久に実行されるのを防止します。


目次 索引

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