HP OpenVMS Systems Documentation |
| 前へ | 次へ | 目次 | 索引 |
OpenVMS I64 BLISS では,OpenVMS I64 をサポートするのに必要な既存の Alpha BLISS の機能だけが提供されます。 Alpha BLISS では,OpenVMS 以外のオペレーティング・システムの機能もサポートしていますが, I64 BLISS コンパイラでは,このような機能は提供されません。
I64 の BLISS コンパイラでは,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 |
レジスタ番号 16 〜 20,26 〜 28,30 〜 31 のマッピングは, OpenVMS I64 BLISS では,無効な指定であると解釈されるレジスタに変換されます ( Alpha BLISS のレジスタ名 および I64 のレジスタ を参照)。 ALPHA_REGISTER_MAPPING が指定されているときに,これらのレジスタを含む宣言を行うと,以下のようなエラーが発生します。
r30 = 30,
.........^
%BLS64-W-TEXT, Alpha register 30 cannot be declared, invalid mapping to
IPF register 12 at line number 9 in file ddd:[xxx]TESTALPHAREGMAP.BLI
|
ソース行にはレジスタ番号 30 が指定されていますが,エラー・テキストにはレジスタ 12 に問題があることが示されています。レジスタ 12 はレジスタ番号 30 が変換された結果であり,指定するとエラーになります。
Alpha のレジスタ R16 〜 R21 がリンケージ I/O パラメータとして指定されている場合は,これらのレジスタに対して特殊なマッピング・セットが用意されています。
リンケージ I/O パラメータのみの場合は, R16 〜 R21 のマッピングは次のようになります。
|
ALPHA_REGISTER_MAPPING と "NOTUSED"
ALPHA_REGISTER_MAPPING を指定すると, IA64 のスクラッチ・レジスタにマッピングされリンク宣言で NOTUSED が指定された Alpha レジスタは, PRESERVE セットに配置されます。
これにより,このレジスタを NOTUSED と宣言しているルーチンを実行するときにレジスタが退避され,ルーチンから抜けるときに復元されます。
OpenVMS I64 BLISS コンパイラでは,新しいコンパイル修飾子 /ANNOTATIONS がサポートされます。この修飾子は,コンパイル時にコンパイラが行っている (または行っていない) 最適化に関する情報をソース・リストに追加します。
この修飾子は,以下のキーワードにより,リストする情報を選択できます。
他のキーワードは GEM 最適化の情報を選択できます。
INLINING
LINKAGES
LOOP_TRANSFORMS
LOOP_UNROLLING
PREFETCHING
SHRINKWRAPPING
SOFTWARE_PIPELINING
TAIL_CALLS
TAIL_RECURSION
ALL と NONE を除き,他のすべてのキーワードは否定形にすることができます。修飾子自体を否定することもできます。デフォルトでは,修飾子はコマンド・ラインに指定されません。
/ANNOTATIONS 修飾子だけを指定し,パラメータを指定しなかった場合,デフォルトは ALL になります。
OpenVMS I64 BLISS コンパイラでは,ソースを変更せずに ALPHA_REGISTER_MAPPING を有効にすることができる新しいコンパイル修飾子がサポートされます。これは位置依存修飾子です。モジュールのコンパイル行にこの修飾子を指定すると,モジュール・ヘッダに ALPHA_REGISTER_MAPPING スイッチを設定した場合と同じ効果があります。
/ALPHA_REGISTER_MAPPING 情報メッセージ
OpenVMS I64 BLISS では,3 つの新しい情報メッセージが追加されています。
%BLS64-I-TEXT, Alpha Register Mapping enabled by the command line
|
MODULE SIMPLE (MAIN=TEST, ALPHA_REGISTER_MAPPING)=
..........................^
%BLS64-I-TEXT, Alpha Register Mapping enabled
|
MODULE SIMPLE (MAIN=TEST, NOALPHA_REGISTER_MAPPING)=
..........................^
%BLS64-I-TEXT, Alpha Register Mapping disabled
|
OpenVMS I64 BLISS では,不可分 (atomic) なメモリ更新のために, ADD_ATOMIC_XXXX,AND_ATOMIC_XXXX,および OR_ATOMIC_XXXX 組み込み関数がサポートされます。これらの組み込み関数の一覧については, マシン固有の組み込み関数 を参照してください。
これらの組み込み関数をサポートする I64 インストラクションは,操作が正常終了するまで待つため,オプションの retry-count 入力パラメータは除外されています。これらの組み込み関数の形式は以下のように変更されました。
option_ATOMIC_size(ptr, expr
[;old_value] ) !Optional output
|
ここで,
option は AND,ADD,OR のいずれかです。
size は LONG または QUAD です。
ptr は自然なアラインメントのアドレスでなければなりません。
返される値は 0 (操作失敗) または 1 (操作成功) です。
操作は,式 expr の,ptr によって示されるデータ・セグメントへの不可分な加算 (または AND もしくは OR) です。
オプションの出力パラメータ old_value は,ptr によって示されるデータ・セグメントの以前の値に設定されます。
OpenVMS Alpha BLISS のオプションの retry-count パラメータを使用すると,構文エラーになります。
不可分な操作のための TESTBITxxI および TESTBITxx 組み込み関数
OpenVMS I64 BLISS では,不可分な操作のために TESTBITxxI および TESTBITxx 組み込み関数がサポートされます。サポートされる組み込み関数の一覧については, マシン固有の組み込み関数 を参照してください。
これらの組み込み関数をサポートする I64 インストラクションは,操作が正常終了するのを待機するので,オプションの入力パラメータ retry-count とオプションの出力パラメータ success_flag は取り除かれています。これらの組み込み関数の形式は以下のとおりです。
TESTBITxxx( field ) |
OpenVMS Alpha BLISS のオプションのパラメータ retry-count や success_flag を使用すると,構文エラーになります。
OpenVMS I64 BLISS では,ここで説明する /GRANULARITY=keyword 修飾子,スイッチ DEFAULT_GRANULARITY=n,およびデータ属性 GRANUALRITY(n) がサポートされます。
ユーザはコマンド・ライン修飾子 /GRANULARITY=keyword,スイッチ DEFAULT_GRANULARITY=n,およびデータ属性 GRANULARITY(n) を使用することにより,ストアとフェッチの単位 (Granularity) を制御できます。
コマンド・ライン修飾子に指定するキーワードは, BYTE,LONGWORD または QUADWORD でなければなりません。値 n は,0 (バイト),2 (ロングワード) または 3 (クォドワード) でなければなりません。
これらを組み合わせて使用した場合,優先順位が最も高いのはデータ属性です。 SWITCHES 宣言でスイッチを使用した場合,同じスコープ内でその後に宣言されるデータの単位 (Granularity) を設定します。スイッチはモジュール・ヘッダでも使用できます。最も優先順位が低いのはコマンド・ライン修飾子です。
OpenVMS I64 BLISS では,既知の方向にシフトを行う組み込み関数がサポートされます。これらの組み込み関数の一覧については, マシン固有の組み込み関数 を参照してください。これらの関数は,0..%BPVAL-1 の範囲で行われるシフトに対してだけ有効です。
比較 (Compare) およびスワップ (Swap) 組み込み関数
OpenVMS Alpha と OpenVMS I64 の両方の BLISS で,以下の新しい比較およびスワップ組み込み関数がサポートされます。
これらの関数は,addr にあるロングワードまたはクォドワードを comparand と比較し,等しい場合は値を addr にストアするという,連動した操作を実行します。操作の成功 (1) または失敗 (0) を示すインジケータが返されます。
I64 固有のマルチメディア・タイプのインストラクションへのアクセスをサポートする計画はありません。
OpenVMS Alpha BLISS に関してここで説明する CALL リンケージは,OpenVMS I64 BLISS でもサポートされます。
32 ビット・コンパイラでコンパイルされたルーチンは, 64 ビット・コンパイラでコンパイルされたルーチンを呼び出すことができ,その逆も可能です。 64 ビットから 32 ビットに短縮される場合はパラメータが切り捨てられ,32 ビットから 64 ビットに拡張される場合は符号拡張されます。
デフォルト設定では,CALL リンケージは引数の数を渡します。この設定は,NOCOUNT リンケージ・オプションを使用することで無効にすることができます。
引数はクォドワードで渡されますが,32 ビット・コンパイラは下位 32 ビットしか「確認」できません。
OpenVMS I64 BLISS コンパイラには JSB リンケージ・タイプがあります。 JSB リンケージで宣言されたルーチンは,OpenVMS I64 用に開発された JSB ルールに従います。
この修飾子のサポートは,OpenVMS I64 でも継続されます。デフォルトは /NOTIE です。
コンパイルされたコードから変換されたイメージを呼び出したり,変換されたイメージからコンパイルされたコードを呼び出す必要がある場合には,TIE を使用すると,コンパイルされたコードと変換されたイメージとを組み合わせて使用できます。
特に,TIE は以下の操作を行います。
/ENVIRONMENT=([NO]FP) および ENVIRONMENT([NO]FP)
OpenVMS Alpha BLISS では, /ENVIRONMENT=([NO]FP) 修飾子と ENVIRONMENT([NO]FP) スイッチが提供されており,これらを使用すると,コンパイラは特定の整数除算に対して浮動小数点レジスタの使用を禁止します。
しかし,OpenVMS I64 BLISS では,I64 のアーキテクチャ上の機能により, /ENVIRONMENT=NOFP コマンド修飾子および ENVIRONMENT(NOFP) スイッチは,浮動小数点レジスタの使用を完全に禁止するわけではありません。ソース・コードでは浮動小数点演算は使用しないように制限されますが,特定の演算 (特に整数乗算と整数除算,およびそれを暗黙に含む構造) 用に生成されたコードでは,一部の浮動小数点レジスタだけを使用するように制限されます。特に,このオプションを指定した場合,コンパイラは f6 〜 f11 だけを使用するように制限され,『Intel Itanium Processor-Specific Application Binary Interface』で説明している ELF EF_IA_64_REDUCEFP オプションを設定します。
| 前へ | 次へ | 目次 | 索引 |