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


前へ 次へ 目次 索引


11.2.3.1 Alpha命令のアクセス

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

11.2.3.2 Alpha特権付きアーキテクチャ・ライブラリ(PALcode)命令のアクセス

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

11.2.3.3 複数の操作の組み合わせに対する不可分性の保証

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インターロック命令と同じ機能を実行するために次の命令をサポートします。

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

11.2.4 VAX CとDEC C for OpenVMS Alphaシステムのコンパイラの相違点

次の機能はVAX Cでも使用できますが,DEC C for OpenVMS Alphaシステムの省略時の動作とは異なります。しかし,これらの機能の一部に対しては,コマンド行修飾子とプラグマ命令を使用することにより,VAX Cと同じ動作を実行できます。

11.2.4.1 データ・アラインメントの制御

自然な境界にアラインされていないデータをアクセスすると,Alphaシステムでは性能が著しく低下するため,DEC C for OpenVMS Alphaシステムは省略時の設定により,データを自然な境界にアラインします。この機能を無効にし,VAXのアラインメント(パックされたアラインメント)を実行するには,ソース・ファイルに #pragma nomember_alignmentプリプロセッサ命令を指定するか,/NOMEMBER_ALIGNMENTコマンド行修飾子を使用します。

11.2.4.2 引数リストのアクセス

&argv1などの引数のアドレスを検出すると,DEC C for OpenVMS Alphaシステムは,すべての引数をスタックに移動する関数に対してプロローグ・コードを生成します ( homing 引数と呼ぶ)が,その結果,性能が低下します。また,引数リスト"walking"は,<varargs.h>または<stdargs.h>インクルード・ファイルで関数を使用しなければ実現できません。

11.2.4.3 例外の同期化

Alphaアーキテクチャでは,算術演算例外がただちに報告されないため,後続の例外が通知される前に静的変数への代入が実行されることを期待することはできません (volatile属性を使用した場合でも)。

11.2.4.4 動的条件ハンドラ

OpenVMS Alpha システム用の DEC C と DEC C++ は,LIB$ESTABLISH を組み込み関数として取り扱いますが,OpenVMS VAX システムまたは OpenVMS Alpha システムで LIB$ESTABLISH を使用することは望ましくありません。C および C++ プログラマは,LIB$ESTABLISH の代わりに VAXC$ESTABLISH を呼び出してください (VAXC$ESTABLISH は OpenVMS Alpha システム用の DEC C および DEC C++ で提供される組み込み関数です)。

11.2.5 CプログラマのためのSTARLETデータ構造体と定義

OpenVMS Alpha バージョン 1.0 には,SYS$STARLET_C.TLB という新しいファイルが含まれており,このファイルには STARLETSD.TLB に相当する STARLET 機能を提供するすべての .H ファイルが格納されています。現在,DEC C コンパイラには DECC$RTLDEF.TLB の他に SYS$STARLET_C.TLB ファイルが同梱されており,以前の VAX C Compiler に同梱されていた VAXCDEF.TLB の代わりに使用されます。DECC$RTLDEF.TLB には,コンパイラと RTL をサポートするすべての .H ファイル,たとえば,STDIO.H などが格納されています。

次の相違点があるために,ソースを変更しなければならない可能性があります。

11.2.6 /STANDARD=VAXCモードでサポートされないVAX Cの機能

VAX Cでサポートされる大部分のプログラミング方式は,DEC C for OpenVMS Alphaシステムでも/STANDARD=VAXCモードでサポートされますが,ANSI標準規格と矛盾する特定のプログラミング方式はサポートされません。次のリストはこれらの相違点を示しています。詳しくは DEC Cコンパイラに関する解説書を参照してください。

11.3 VAX COBOL と DEC COBOL の互換性と移行

DEC COBOL は,OpenVMS VAX システム上で動作する VAX COBOL に基づいており,高い互換性があります。以下の項では,両者のおもな違いの要約を示します。 この情報は,両製品との互換性がある COBOL アプリケーションを開発したり,VAX COBOL アプリケーションを OpenVMS Alphaオペレーティング・システム上の DEC COBOL に移行する際に役立ちます。

11.3.1 DEC COBOL の拡張仕様と機能の違い

DEC COBOL は,VAX COBOL にはない以下の言語拡張仕様と機能を含んでいます。

さらに,DEC COBOL には以下の機能が含まれています。

DEC COBOL は,VAX COBOL の以下の機能を含んでいません。

DEC COBOL と VAX COBOL の詳細については,製品のリリース・ノートおよび解説書をご覧ください。OpenVMS Alphaオペレーティング・システムでは,システム・プロンプトで HELP COBOL RELEASE_NOTESと入力すると,インストールされているコンパイラのリリース・ノートのオンライン・バージョンを見ることができます。


前へ 次へ 目次 索引