前へ | 次へ | 目次 | 索引 |
Cの浮動小数点データ型とAXPの浮動小数点データ型の間のマッピングは,コマンド・ライン修飾子によって制御されます。Alpha AXPアーキテクチャでは,次の浮動小数点データ型をサポートします。
コマンド・ライン修飾子を使用すれば,標準的なCデータ型のfloatとdoubleが AXPのどの浮動小数点データ型にマッピングされるかを制御できます。たとえば,/FLOAT=G_FLOAT修飾子を指定した場合には,DEC Cはfloatデータ型をAXPの F浮動小数点データ型にマッピングし,doubleデータ型をAXPのG浮動小数点データ型にマッピングします。表 A-3 は浮動小数点オプションを示しています。各コマンド・ラインに浮動小数点修飾子は1つだけ指定できます。
コンパイラ・オプション | Float | Double |
---|---|---|
/FLOAT=F_FLOAT | F浮動小数点フォーマット | G浮動小数点フォーマット |
/FLOAT=D_FLOAT | F浮動小数点フォーマット | D-53浮動小数点 |
/FLOAT=IEEE_FLOAT | S浮動小数点フォーマット | T浮動小数点フォーマット |
DEC C には,表 A-4 に示す機能があり,これらの機能は AXPシステム固有の機能です。この後の節では,これらの機能について説明します。
機能 | 説明 |
---|---|
一部のAlpha AXP命令へのアクセス | 組み込み機能として使用できる |
一部のVAX命令へのアクセス | AXP PALcodeを通じて使用できる |
不可分な組み込み機能 | AND,OR,およびADD演算の不可分性を保証する |
DEC C for OpenVMS AXPコンパイラは,C言語で表現できない機能を提供するために,ある種のAlpha AXP命令をサポートします。特に,システム・レベル・プログラミングの場合には,これらの命令を使用すると便利です。現在のところ,DEC Cは次のAlpha AXP命令をサポートする予定です。
A.2.3.2 Alpha AXP特権付きアーキテクチャ・ライブラリ(PALcode)命令のアクセス
Alpha AXPアーキテクチャでは,特定のVAX命令を Alpha特権付きアーキテクチャ・ライブラリ(PALcode)命令として実現しています。DEC Cでは,次のPALcode命令をアクセスできます。
しかし,VAX Cで組み込み機能としてサポートされる次のVAX命令は,DEC C では組み込み機能としてサポートされません。
ADAWI | BBCCI | BBSSI | FFC |
FFS | LDPCTX | LOCC | MFPR |
MTPR | MOVC3 | MOVPSL | PROBER |
PROBEW | READ_GPR | SCANC | SIMPLE_READ |
SKPC | SPANC | SCSVPCTX | WRITE_GPR |
A.2.3.3 複数の操作の組み合わせに対する不可分性の保証
VAXアーキテクチャでは,変数のインクリメントなど,特定の組み合わせ操作は不可分に実行されることが保証されます(つまり,途中で割り込みが発生することはありません)。AXPシステムでこれと同じ機能を実現するために,DEC Cは不可分性を保証して操作を実行できるような組み込み機能を準備しています。表 A-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 AXPシステムでは,VAXインターロック命令と同じ機能を実行するために次の命令をサポートします。
これらの組み込み機能は,不可分な組み込み機能と同様に retry_count パラメータを使用して,ループが永久に実行されるのを防止します。
A.2.4 VAX CとDEC C for OpenVMS AXPシステムのコンパイラの相違点
次の機能はVAX Cでも使用できますが,DEC C for OpenVMS AXPシステムの省略時の動作とは異なります。しかし,これらの機能の一部に対しては,コマンド・ライン修飾子とプラグマ命令を使用することにより,VAX Cと同じ動作を実行できます。
A.2.4.1 データ・アラインメントの制御
自然な境界にアラインされていないデータをアクセスすると,AXPシステムでは性能が著しく低下するため,DEC C for OpenVMS AXPシステムは省略時の設定により,データを自然な境界にアラインします。この機能を無効にし,VAXのアラインメント(パックされたアラインメント)を実行するには,ソース・ファイルに nomember_alignmentプラグマを指定するか,または/NOMEMBER_ALIGNMENT コマンド・ライン修飾子を使用します。
A.2.4.2 引数リストのアクセス
&argv1などの引数のアドレスを検出すると,DEC C for OpenVMS AXPシステムは,すべての引数をスタックに移動する関数に対してプロローグ・コードを生成します( homing 引数と呼ぶ)が,その結果,性能が低下します。また,引数リスト"walking"は,VARARGS.Hまたは STDARGS.Hインクルード・ファイルで関数を使用しなければ実現できません。
A.2.4.3 例外の同期化
Alpha AXPアーキテクチャでは,算術演算例外がただちに報告されないため,後続の例外が通知される前に静的変数への代入が実行されることを期待することはできません( volatile 属性を使用した場合でも)。
A.2.5 /STANDARD=VAXCモードでサポートされないVAX Cの機能
VAX Cでサポートされる大部分のプログラミング方式は,DEC C for OpenVMS AXPシステムでも/STANDARD=VAXCモードでサポートされますが,ANSI標準規格と矛盾する特定のプログラミング方式はサポートされません。次のリストはこれらの相違点を示しています。詳しくは DEC Cコンパイラに関する解説書を参照してください。
#ifdef a . . . #endif a |
テキストを削除するか,または次の例に示すようにテキストをコメント区切り文字で囲んでください。
#endif /* a */ |
array[SIZE] = NULL; /* accepted by VAX C */ array[SIZE] = {NULL}; /* required by DEC C */ |
#define x a #define x b /* generates a warning message in DEC C */ |
#include stdio |
このような場合には,かわりに次の構文を使用してください。
#include <stdio.h> |
A.3 DEC COBOL と VAX COBOL の互換性
OpenVMS AXPシステムで動作するDEC COBOL バージョン 1.0 コンパイラは,OpenVMS AXPシステムで動作するVAX COBOL バージョン 4.4 コンパイラに基づいており,高い互換性があります。DEC COBOLコンパイラはVAX COBOLの機能のうち,すべてではありませんが多くをサポートしています。以下に,DEC COBOLコンパイラとVAX COBOLコンパイラのおもな相違点の要約を示します。
この節の内容は,既存のCOBOLアプリケーションをVAX COBOLからDEC COBOLへ変換する手引きになるのと同様に,VAX COBOLおよびDEC COBOL間で互換性を持つ COBOLアプリケーションを作成する手引きとなります。
この節では,VAX COBOLバージョン4.4とDEC COBOLバージョン1.0の相似点と相違点について説明します。DEC COBOLとバージョン4.4以降のVAX COBOLとの相違点は,その都度示します。
DEC COBOLコンパイラの機能と将来のバージョン・アップについての最新情報は,DEC COBOLの最新のリリース・ノートをご覧ください。VAX COBOLの機能についての情報は,VAX COBOLのリリース・ノートおよびその他の解説書をご覧ください。現在インストールされているCOBOLコンパイラのリリース・ノートの概要は,DCLプロンプトで HELP COBOL RELEASE_NOTES コマンドを入力すると見ることができます。
DEC COBOL言語の機能に関するリファレンス情報は,『DEC COBOL Reference Manual』をご覧ください。VAX COBOL言語の機能に関するリファレンス情報は,『VAX COBOL Reference Manual』をご覧ください。DEC COBOLのコマンド・ライン修飾子に関する情報は,オペレーティング・システム・プロンプトでCOBOLのオンライン・ヘルプを起動してください。VAX COBOLのコマンド・ライン修飾子に関する情報は,『VAX COBOL User Manual』をご覧ください。
A.3.1 コマンド・ライン修飾子
表 A-6 ,表 A-7 および 表 A-8 は,DEC COBOLとVAX COBOLのコマンド・ライン修飾子の対比を示しています。
A.3.1.1 DEC COBOLとVAX COBOLが共有する修飾子
表 A-6 は,DEC COBOLとVAX COBOLが共有するコマンド・ライン修飾子を示しています。DEC COBOLで有効なコマンド・ライン修飾子についての詳細は,表 A-7 を参照するか,DEC COBOLのオンライン・ヘルプ・システムを起動してください。VAX COBOLで有効なコマンド・ライン修飾子について詳しくは,表 A-8 か『VAX COBOL User Manual』を参照してください。
修飾子 | 説明 |
---|---|
/ANALYSIS_DATA | 等しい |
/ANSI_FORMAT | 等しい |
/AUDIT | 等しい |
/CHECK | 新しいオプション(/CHECK=[NO]DECIMAL)が DEC COBOLで有効です(表 A-7 および 付録 A.3.2.2 項 を参照してください) |
/CONDITIONALS | 等しい |
/COPY_LIST | 等しい |
/CROSS_REFERENCE | 等しい |
/DEBUG | 等しい |
/DEPENDENCY_DATA | 等しい |
/DIAGNOSTICS | 等しい |
/FIPS | 機能的に小さな違いがあります(/FIPS=74 オプションの動作については,DEC COBOLのオンライン・ヘルプ・システムを起動してください) |
/FLAGGER | 等しい |
/LIST | 等しい |
/MACHINE_CODE | 等しい |
/MAP | 等しい |
/OBJECT | 等しい |
/SEQUENCE_CHECK | 等しい |
/STANDARD | いくつかのVAX COBOLオプションは,DEC COBOL でも有効です。(/STANDARD=V3 オプションについては,付録 A.3.2.7 項 を参照してください) |
/TRUNCATE | 等しい |
/WARNINGS | 機能的に小さな違いがあります(/WARNINGS 修飾子の動作については,付録 A.3.2.7.2 項 を参照するか,DEC COBOL のオンライン・ヘルプ・システムを起動してください) |
A.3.1.2 VAX COBOLで使えないDEC COBOL修飾子
表 A-7 は,DEC COBOL固有の修飾子とオプションを示します。これらの修飾子とオプションは,VAX COBOLでは使えません。DEC COBOLで有効なコマンド・ライン修飾子について詳しくは,DEC COBOLのオンライン・ヘルプ・システムを起動してください。
修飾子 | 説明 |
---|---|
/ALIGNMENT=([NO]BINARY, [NO]DECIMAL) | 数値項目に対するアラインメントを指定する(付録 A.3.2.1 項 を参照) |
/CHECK=[NO]DECIMAL | 数値が扱われる状況で表示用数字項目を使用した場合,項目の内容が数値として妥当かどうかを検査する(付録 A.3.2.2 項 を参照) |
/CONVERT=LEADING_BLANKS | 表示用数字項目で先行する空白文字の代りに0(ゼロ)を使用する(付録 A.3.2.3 項 を参照) |
/FLOAT=[D_FLOAT],[IEEE_FLOAT] | メモリ内で使用される浮動小数点データ型の表現形式として,VAX浮動小数点データ型式かIEEE形式かを指定する(付録 A.3.2.4 項 を参照) |
/OPTIMIZE | 最も効率の良いコードを生成するようにプログラムを最適化してコンパイルすることをコンパイラに指示する(付録 A.3.2.5 項 を参照) |
/RESERVED_WORDS=[NO]XOPEN | コンパイラがX/Open COBOL で定義された語を予約語として認識するかどうかを制御する(付録 A.3.2.6 項 を参照) |
/TIE | ネイティブなイメージがトランスレートされたイメージを,また,トランスレートされたイメージがネイティブなイメージを呼ぶことを許可するコードを生成する(付録 A.3.2.8 項 を参照) |
前へ | 次へ | 目次 | 索引 |