日本-日本語 |
|
|
|
OpenVMS マニュアル |
|
HP OpenVMS
|
目次 | 索引 |
この章では,OpenVMS I64 向けに提供される主要なコンパイラに関して,ポーティング上の検討事項の概要を示します。 表 6-1 は,I64 バージョンへのポーティングに使用された Alpha コンパイラのバージョンの対応関係を示しています。
コンパイラ | OpenVMS Alpha | OpenVMS I64 | 参照先 |
---|---|---|---|
BASIC | V1.6 | V1.6 | 第 6.2 節 を参照 |
BLISS | V1.11-004 | V1.12-067 | 第 6.3 節 を参照 |
COBOL | V2.8 | V2.8 | 第 6.4 節 を参照 |
Fortran 77 | --- | 提供されません 1 | 第 6.5.2 項 を参照 |
Fortran 90 | V7.5 | V8.0 | 第 6.5 節 を参照 |
GNAT Pro Ada 95 | 他社製 | --- | 第 6.1 節 を参照 |
HP Ada 83 | V3.5A | 提供されません 1 | --- |
HP C | V6.5 | V7.1 | 第 6.6 節 を参照 |
HP C++ | V6.5 | 7.1 | --- |
HP Pascal | V5.9 | V5.9 | --- |
Java | 1.4.2 | 1.4.2-1 | 第 6.8 節 を参照 |
Macro-32 | V4.1-18 | T1.0-77 | 第 6.9 節 を参照 |
Macro-64 | V1.2 | 提供されません 1 | --- |
大部分の OpenVMS I64 コンパイラには,以下に示す共通の特徴があります。
これらの新しいコンパイラで発生する問題を振るい落とすために, OpenVMS I64 にポーティングされているバージョンのコンパイラを使って,まず OpenVMS Alpha 上でアプリケーションをコンパイルすることをお勧めします (新しいバージョンのコンパイラでは,既存のコンパイラ標準より厳密な解釈が適用されたり,新しい厳密な標準が適用されていることがあります)。新しいコンパイラを使って OpenVMS Alpha システム上でアプリケーションをコンパイルし,リンクし,実行してエラーが発生しなければ,そのアプリケーションは OpenVMS I64 へのポーティングが可能です。
6.1 ADA
OpenVMS I64 Version 8.2 では ADA 95 が使用できます。 ADA 83 は,I64 ではサポートされません。
6.2 BASIC
Alpha と I64 では同じ BASIC がサポートされます。 OpenVMS I64 上で BASIC を使用する場合の注意事項については, BASIC のリリース・ノートを参照してください。
OpenVMS Alpha の BASIC コンパイラのデフォルトは /REAL_SIZE=SINGLE (VAX F-float) で,OpenVMS I64 では /REAL_SIZE=SFLOAT がデフォルトです。
BASIC コンパイラは /IEEE_MODE 修飾子をサポートしません。コンパイラと RTL は,例外処理とラウンディング処理に関しては I64 上でも Alpha 版と同じようにランタイム環境を設定します。
6.3 BLISS コンパイラ
ここでは,OpenVMS Alpha と OpenVMS I64 の BLISS コンパイラの相違点について説明します。
BLISS-32EN と BLISS-64EN は, OpenVMS Alpha システム用のコードを生成する OpenVMS Alpha のネイティブ・コンパイラです。
BLISS-32IN と BLISS-64IN は, OpenVMS I64 システム用のコードを生成する OpenVMS I64 のネイティブ・コンパイラです。
BLISS-32xx コンパイラは 32 ビット操作を実行します (つまり,BLISS の値はロングワードです)。デフォルトは 32 ビットです。この章では,これらのコンパイラを総称して「32 ビット・コンパイラ」と呼びます。
BLISS-64xx は 64 ビット操作を実行します (つまり,BLISS の値はクォドワードです)。デフォルトは 64 ビットです。この章では,これらのコンパイラを総称して「64 ビット・コンパイラ」と呼びます。
コンパイラを起動するには,以下のコマンドを使用します。
プラットフォーム | コンパイラ | コマンド |
---|---|---|
Alpha | BLISS-32EN | BLISS/A32 または BLISS |
Alpha | BLISS-64EN | BLISS/A64 |
I64 | BLISS-32IN | BLISS/I32 または BLISS |
I64 | BLISS-64IN | BLISS/I64 |
ソース・コード: | .B32E,.B32,.BLI |
リクワイア・ファイル: | .R32E,.R32,,REQ |
ライブラリ・ファイル: | .L32E,.L32,.LIB |
BLISS-64EN の検索リストは以下のとおりです。
ソース・コード: | .B64E,.B64,.BLI |
リクワイア・ファイル: | .R64E,.R64,.REQ |
ライブラリ・ファイル: | .L64E,.L64,.LIB |
BLISS-32IN の検索リストは以下のとおりです。
ソース・コード: | .B32I,.B32,.BLI |
リクワイア・ファイル: | .R32I,.R32,.REQ |
ライブラリ・ファイル: | .L32I,.L32,.LIB |
BLISS-64IN の検索リストは以下のとおりです。
ソース・コード: | .B64I,.B64,,BLI |
リクワイア・ファイル: | .R64I,.R64,.REQ |
ライブラリ・ファイル: | .L64I,.L64,.LIB |
OpenVMS コンパイラの出力ファイルの場所は, Alpha で動作する場合も I64 で動作する場合も,出力修飾子がコマンド・ラインのどこに指定されているかに応じて決まります。
Alpha の BLISS でも I64 の BLISS でも,入力ファイル指定の後に /OBJECT,/LIST, /LIBRARY などの出力ファイル修飾子が指定されていて,出力ファイル指定がない場合は,出力ファイルのデフォルトは,直前に指定されている入力ファイルのデバイス,ディレクトリ,およびファイル名に設定されます。以下の例を参照してください。
$ BLISS /A32 [FOO]BAR/OBJ ! Puts BAR.OBJ in directory FOO $ BLISS /I32 [FOO]BAR/OBJ ! Puts BAR.OBJ in directory FOO $ $ BLISS /A32 /OBJ [FOO]BAR ! Puts BAR.OBJ in default directory $ BLISS /I32 /OBJ [FOO]BAR ! Puts BAR.OBJ in default directory $ $ BLISS /A32 [FOO]BAR/OBJ=[] ! Puts BAR.OBJ in default directory $ BLISS /I32 [FOO]BAR/OBJ=[] ! Puts BAR.OBJ in default directory |
ここでは,OpenVMS I64 BLISS ではサポートされていない Alpha BLISS の機能について説明します。
以下の Alpha BLISS のマシン固有の組み込み関数は,I64 ではサポートされなくなりました。
CMP_SWAP_LONG と CMP_SWAP_QUAD の詳細については,
比較 (Compare) およびスワップ (Swap) 組み込み関数 を参照してください。
以下の Alpha BLISS PALcode 組み込み関数は,I64 ではサポートされなくなりました。
6.3.2 提供されない Alpha BLISS の機能
CMP_STORE_LONG (CMP_SWAP_LONG に変更)
CMP_STORE_QUAD (CMP_SWAP_QUAD に変更)
CMPBGE
DRAINT
RPCC
TRAPB
WRITE_MBX
ZAP
ZAPNOT
CALL_PAL PAL_MFPR_PCBB PAL_MTPR_SIRR PAL_BPT PAL_MFPR_PRBR PAL_MTPR_SSP PAL_BUGCHK PAL_MFPR_PTBR PAL_MTPR_TBIA PAL_CFLUSH PAL_MFPR_SCBB PAL_MTPR_TBIAP PAL_CHME PAL_MFPR_SISR PAL_MTPR_TBIS PAL_CHMK PAL_MFPR_SSP PAL_MTPR_TBISD PAL_CHMS PAL_MFPR_TBCHK PAL_MTPR_TBISI PAL_CHMU PAL_MFPR_USP PAL_MTPR_USP PAL_DRAINA PAL_MFPR_VPTB PAL_MTPR_VPTB PAL_HALT PAL_MFPR_WHAMI PAL_PROBER PAL_GENTRAP PAL_MTPR_ASTEN PAL_PROBEW PAL_IMB PAL_MTPR_ASTSR PAL_RD_PS PAL_LDQP PAL_MTPR_DATFX PAL_READ_UNQ PAL_MFPR_ASN PAL_MTPR_ESP PAL_RSCC PAL_MFPR_ASTEN PAL_MTPR_FEN PAL_STQP PAL_MFPR_ASTSR PAL_MTPR_IPIR PAL_SWPCTX PAL_MFPR_ESP PAL_MTPR_IPL PAL_SWASTEN PAL_MFPR_FEN PAL_MTPR_MCES PAL_WRITE_UNQ PAL_MFPR_IPL PAL_MTPR_PRBR PAL_WR_PS_SW PAL_MFPR_MCES PAL_MTPR_SCBB PAL_MTPR_PERFMON |
PALCALL 組み込み関数用のマクロ定義が STARLET.REQ に含まれています。 OpenVMS はサポーティング・コードを提供しています。特権 CALL_PAL はエグゼクティブ・ルーチンを呼び出し,非特権 CALL_PAL はシステム・サービスを呼び出します。
以下のレジスタは,I64 のデフォルトでは下記に示すような機能で使用されているため, REGISTER,GLOBAL REGISTER,および EXTERNAL REGISTER での名前の指定や,LINKAGE 宣言に対するパラメータとしてはサポートされません。
R0 ゼロ・レジスタ R1 グローバル・ポインタ R2 揮発性および GEM スクラッチ・レジスタ R12 スタック・ポインタ R13 スレッド・ポインタ R14-R16 揮発性および GEM スクラッチ・レジスタ R17-R18 揮発性スクラッチ・レジスタ |
INTERRUPT リンケージと EXCEPTION リンケージ
INTERRUPT リンケージと EXCEPTION リンケージはサポートされません。
BUILTIN キーワードに I64 のレジスタ名を指定することはできません。
OpenVMS I64 BLISS では,OpenVMS I64 をサポートするのに必要な既存の Alpha BLISS の機能だけが提供されます。 Alpha BLISS では,OpenVMS 以外のオペレーティング・システムの機能もサポートしていますが, I64 BLISS コンパイラでは,このような機能は提供されません。
I64 の BLISS コンパイラでは,OpenVMS I64 が正常に動作するのに必要な組み込み関数だけがサポートされています。
既存の共通の BLISS 組み込み関数で,サポートされている関数は以下のとおりです。
6.3.3 OpenVMS I64 BLISS の機能
ABS CH$FIND_NOT_CH CH$WCHAR ACTUALCOUNT CH$FIND_SUB CH$WCHAR_A ACTUALPARAMETER CH$GEQ MAX ARGPTR CH$GTR MAXA BARRIER CH$LEQ MAXU CH$ALLOCATION CH$LSS MIN CH$A_RCHAR CH$MOVE MINA CH$A_WCHAR CH$NEQ MINU CH$COMPARE CH$PLUS NULLPARAMETER CH$COPY CH$PTR REF CH$DIFF CH$RCHAR SETUNWIND CH$EQL CH$RCHAR_A SIGN CH$FAIL CH$SIZE SIGNAL CH$FILL CH$TRANSLATE SIGNAL_STOP CH$FIND_CH CH$TRANSTABLE |
新しい組み込み関数 RETURNADDRESS は,呼び出し元の関数を呼び出した関数の PC を返します。
この組み込み関数には引数がなく,形式は次のとおりです。
RETURNADDRESS() |
I64 BLISS コンパイラでは,Alpha BLISS の以下のマシン固有の組み込み関数がサポートされています。
BARRIER ESTABLISH REVERT ROT SLL SRA SRL UMULH AdaWI ADD_ATOMIC_LONG AND_ATOMIC_LONG OR_ATOMIC_LONG ADD_ATOMIC_QUAD AND_ATOMIC_QUAD OR_ATOMIC_QUAD |
組み込み関数 xxx_ATOMIC_xxxでは,オプションの入力引数 retry-count はサポートされなくなりました。詳細については, 不可分な操作のための ADD,AND,OR 組み込み関数 を参照してください。
TESTBITSSI TESTBITCC TESTBITCS TESTBITCCI TESTBITSS TESTBITSC |
TESTBITxx インストラクションでは,オプションの入力引数 retry-count およびオプションの出力引数 success-flag はサポートされません。詳細については, 不可分な操作のための TESTBITxxI および TESTBITxx 組み込み関数 を参照してください。
ADDD DIVD MULD SUBD CMPD ADDF DIVF MULF SUBF CMPF ADDG DIVG MULG SUBG CMPG ADDS DIVS MULS SUBS CMPS ADDT DIVT MULT SUBT CMPT CVTDF CVTFD CVTGD CVTSF CVTTD CVTDG CVTFG CVTGF CVTSI CVTTG CVTDI CVTFI CVTGI CVTSL CVTTI CVTDL CVTFL CVTGL CVTSQ CVTTL CVTDQ CVTFQ CVTGQ CVTST CVTTQ CVTDT CVTFS CVTGT CVTTS CVTID CVTLD CVTQD CVTIF CVTLF CVTQF CVTIG CVTLG CVTQG CVTIS CVTLS CVTQS CVTIT CVTLT CVTQT CVTRDL CVTRDQ CVTRFL CVTRFQ CVTRGL CVTRGQ CVTRSL CVTRSQ CVTRTL CVTRTQ |
OpenVMS I64 BLISS に追加された多くの新しい組み込み関数では,オペレーティング・システムで使用できるシングル I64 インストラクションにアクセスする機能が提供されます。
以下の一覧で大文字で示されている関数は,指定可能な新しい組み込み関数です。括弧内の小文字の名前は,実際に実行される I64 のインストラクションです。これらのインストラクションに対する引数 (および関連の BLISS 組み込み関数名) の詳細については,『Intel IA-64 Architecture Software Developer's Manual』を参照してください。
BREAK (break) LOADRS (loadrs) RUM (rum) BREAK2 (break)* PROBER (probe.r) SRLZD (srlz.d) FC (fc) PROBEW (probe.w) SRLZI (srlz.i) FLUSHRS (flushrs) PCTE (ptc.e) SSM (ssm) FWB (fwb) PCTG (ptc.g) SUM (sum) INVALAT (invala) PCTGA (ptc.ga) SYNCI (sync.i) ITCD (itc.d) PTCL (ptc.l) TAK (tak) ITCI (itc.i) PTRD (ptr.d) THASH (thash) ITRD (itr.d) PTRI (ptr.i) TPA (tpa) ITRI (itr.i) RSM (rsm) TTAG (ttag) |
注意 BREAK2 組み込み関数には,2 つのパラメータが必要です。最初のパラメータはコンパイル時リテラルでなければならず, BREAK インストラクションの 21 ビットの即値 (immediate value) を指定します。 2 番目のパラメータには任意の式を指定でき,その値が, BREAK インストラクションを実行する直前に IPF 汎用レジスタ R17 に移動されます。 |
OpenVMS I64 BLISS コンパイラでは, IPF インプリメンテーションの多くのさまざまなプロセッサ・レジスタへの読み書きアクセスのための組み込み関数が提供されています。これらの組み込み関数は以下のとおりです。
これらの組み込み関数は mov.i インストラクションを実行します。このインストラクションの詳細については,『Intel IA-64 Architecture Software Developer's Manual』を参照してください。 2 つの GET 組み込み関数は,指定されたレジスタの値を返します。
レジスタを指定するには,特殊なエンコードの整数定数を使用します。この定数は Intel C ヘッダ・ファイルに定義されています。このファイルの内容については,『Intel IA-64 Architecture Software Developer's Manual』を参照してください。
以下の Alpha BLISS PALcode 組み込み関数は I64 でもサポートされます。
PAL_INSQHIL PAL_REMQHIL PAL_INSQHILR PAL_REMQHILR PAL_INSQHIQ PAL_REMQHIQ PAL_INSQHIQR PAL_REMQHIQR PAL_INSQTIL PAL_REMQTIL PAL_INSQTILR PAL_REMQTILR PAL_INSQTIQ PAL_REMQTIQ PAL_INSQTIQR PAL_REMQTIQR PAL_INSQUEL PAL_REMQUEL PAL_INSQUEL_D PAL_REMQUEL_D PAL_INSQUEQ PAL_REMQUEQ PAL_INSQUEQ_D PAL_REMQUEQ_D |
24 のキュー操作 PALcall はそれぞれ,OpenVMS の実行時ルーチン SYS$PAL_xxxx の呼び出しとして, BLISS でインプリメントされています。
VAX の CALLG( .AP, ...) は,OpenVMS Alpha BLISS ではアセンブリ・ルーチン BLI$CALLG(ARGPTR(), .RTN) に変更されています。このルーチンはもともと OpenVMS Alpha BLISS 向けに定義されたものですが,I64 アーキテクチャ向けに書き直され, OpenVMS I64 BLISS でサポートされています。
I64 の汎用レジスタはR3 〜 R11 および R19 〜 R31 であり, REGISTER,GLOBAL REGISTER,および EXTERNAL REGISTER に名前を指定でき, LINKAGE 宣言に対するパラメータとして指定することもできます。さらに,パラメータ・レジスタ R32 〜 R39 は, LINKAGE 宣言のみでパラメータとして指定できます。
現在のところ,I64 の汎用レジスタ R40 〜 R127 の名前を指定する機能をサポートする予定はありません。
REGISTER,GLOBAL REGISTER,EXTERNAL REGISTER,および LINKAGE 宣言によって,I64 の浮動小数点レジスタ,プレディケート・レジスタ,分岐レジスタ,およびアプリケーション・レジスタの名前を指定する機能は提供されていません。
特定のレジスタに対するユーザ要求を満たすことができない場合は,レジスタ競合のメッセージが出力されます。
OpenVMS I64 BLISS では,新しいモジュール・レベル・スイッチ ALPHA_REGISTER_MAPPING が提供されています。
このスイッチは,MODULE 宣言または SWITCHES 宣言に指定できます。このスイッチを使用すると,この項で説明するように, Alpha のレジスタ番号を I64 のレジスタ番号に再マップできます。
REGISTER,GLOBAL REGISTER,および EXTERNAL REGISTER に指定されたレジスタ番号,またはリンケージ宣言の GLOBAL,PRESERVE,NOPRESERVE,または NOT USED に対するパラメータとして指定されたレジスタ番号 (0 〜 31 の範囲) は,以下の IMACRO マッピング・テーブルに従って再マッピングされます。
0 = GEM_TS_REG_K_R8 16 = GEM_TS_REG_K_R14 1 = GEM_TS_REG_K_R9 17 = GEM_TS_REG_K_R15 2 = GEM_TS_REG_K_R28 18 = GEM_TS_REG_K_R16 3 = GEM_TS_REG_K_R3 19 = GEM_TS_REG_K_R17 4 = GEM_TS_REG_K_R4 20 = GEM_TS_REG_K_R18 5 = GEM_TS_REG_K_R5 21 = GEM_TS_REG_K_R19 6 = GEM_TS_REG_K_R6 22 = GEM_TS_REG_K_R22 7 = GEM_TS_REG_K_R7 23 = GEM_TS_REG_K_R23 8 = GEM_TS_REG_K_R26 24 = GEM_TS_REG_K_R24 9 = GEM_TS_REG_K_R27 25 = GEM_TS_REG_K_R25 10 = GEM_TS_REG_K_R10 26 = GEM_TS_REG_K_R0 11 = GEM_TS_REG_K_R11 27 = GEM_TS_REG_K_R0 12 = GEM_TS_REG_K_R30 28 = GEM_TS_REG_K_R0 13 = GEM_TS_REG_K_R31 29 = GEM_TS_REG_K_R29 14 = GEM_TS_REG_K_R20 30 = GEM_TS_REG_K_R12 15 = GEM_TS_REG_K_R21 31 = GEM_TS_REG_K_R0 |
目次 | 索引 |
|