日本-日本語
日本HPホーム 製品 & サービス OpenVMS製品情報
≫  お問い合わせ


OpenVMS マニュアル


 

OpenVMS ドキュメント
ライブラリ

タイトルページ
目次
まえがき
第1章:はじめに
第2章:基本的な相違点
第3章:アプリケーションの調査
第4章:ソース・モジュールの移行
第5章:OpenVMS I64 開発環境
第6章:ポーティングの準備
第7章:その他の検討事項
付録A :アプリケーション評価チェックリスト
付録B :サポート対象外のレイヤード・プロダクト
付録C :アプリケーション固有のスタック切り換えコードの I64 へのポーティング
用語集
索引
PDF
OpenVMS ホーム

HP OpenVMS
OpenVMS Alpha から OpenVMS I64 へのアプリケーション・ポーティング・ガイド


目次 索引

第 6 章
アプリケーションのポーティングの準備

この章では,OpenVMS I64 向けに提供される主要なコンパイラに関して,ポーティング上の検討事項の概要を示します。 表 6-1 は,I64 バージョンへのポーティングに使用された Alpha コンパイラのバージョンの対応関係を示しています。

表 6-1 Alpha コンパイラのバージョンと I64 コンパイラのバージョンの対応関係
コンパイラ 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 ---

1コンパイラはプラットフォーム固有です (Alpha のみ)。

大部分の OpenVMS I64 コンパイラには,以下に示す共通の特徴があります。

  • デフォルトでは 32 ビット・コードを生成します。 64 ビット・プログラムをビルドするには,コンパイラ・オプションを指定する必要があります。

  • デフォルトは IEEE 浮動小数点データ・タイプであり, VAX 浮動小数点データ・タイプではありません。
    ホワイトペーパー『Intel® Itanium® アーキテクチャにおける OpenVMS 浮動小数点演算について』では,I64 で浮動小数点に関する問題にどのように対処しているかについて説明されています。このホワイトペーパーと,OpenVMS から Itanium アーキテクチャへの移行に関するその他のリソースが入手できる Web サイトについては,「まえがき」の「関連資料」の項を参照してください。

これらの新しいコンパイラで発生する問題を振るい落とすために, 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



6.3.1 BLISS ファイル・タイプとファイル位置のデフォルト

ここでは,BLISS コンパイラのデフォルトのファイル・タイプと,出力ファイルの位置について説明します。

ファイル・タイプ

OpenVMS コンパイラのオブジェクト・ファイルのデフォルトのファイル・タイプは .OBJ です。

ライブラリ・ファイルの出力ファイルのデフォルトのファイル・タイプは, BLISS-32EN と BLISS-32IN の場合は .L32, BLISS-64EN と BLISS-64IN の場合は .L64 です。これらのライブラリ・ファイルの間に互換性はありません。

BLISS-32EN の検索リストは以下のとおりです。

ソース・コード: .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 



6.3.2 提供されない Alpha BLISS の機能

ここでは,OpenVMS I64 BLISS ではサポートされていない Alpha BLISS の機能について説明します。

Alpha BLISS のマシン固有の組み込み関数

以下の Alpha BLISS のマシン固有の組み込み関数は,I64 ではサポートされなくなりました。

CMP_STORE_LONG (CMP_SWAP_LONG に変更)
CMP_STORE_QUAD (CMP_SWAP_QUAD に変更)
CMPBGE
DRAINT
RPCC
TRAPB
WRITE_MBX
ZAP
ZAPNOT

CMP_SWAP_LONG と CMP_SWAP_QUAD の詳細については, 比較 (Compare) およびスワップ (Swap) 組み込み関数 を参照してください。

Alpha BLISS PALcode 組み込み関数

以下の Alpha BLISS PALcode 組み込み関数は,I64 ではサポートされなくなりました。

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 はシステム・サービスを呼び出します。

Alpha BLISS のレジスタ名

以下のレジスタは,I64 のデフォルトでは下記に示すような機能で使用されているため, REGISTER,GLOBAL REGISTER,および EXTERNAL REGISTER での名前の指定や,LINKAGE 宣言に対するパラメータとしてはサポートされません。

   R0       ゼロ・レジスタ 
   R1       グローバル・ポインタ 
   R2       揮発性および GEM スクラッチ・レジスタ 
   R12      スタック・ポインタ 
   R13      スレッド・ポインタ 
   R14-R16  揮発性および GEM スクラッチ・レジスタ 
   R17-R18  揮発性スクラッチ・レジスタ 

INTERRUPT リンケージと EXCEPTION リンケージ

INTERRUPT リンケージと EXCEPTION リンケージはサポートされません。

BUILTIN Rn

BUILTIN キーワードに I64 のレジスタ名を指定することはできません。

6.3.3 OpenVMS I64 BLISS の機能

OpenVMS I64 BLISS では,OpenVMS I64 をサポートするのに必要な既存の Alpha BLISS の機能だけが提供されます。 Alpha BLISS では,OpenVMS 以外のオペレーティング・システムの機能もサポートしていますが, I64 BLISS コンパイラでは,このような機能は提供されません。

OpenVMS I64 BLISS の組み込み関数

I64 の BLISS コンパイラでは,OpenVMS I64 が正常に動作するのに必要な組み込み関数だけがサポートされています。

共通の BLISS 組み込み関数

既存の共通の 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 組み込み関数

新しい組み込み関数 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 インストラクションに対する組み込み関数

以下の一覧で大文字で示されている関数は,指定可能な新しい組み込み関数です。括弧内の小文字の名前は,実際に実行される 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 インプリメンテーションの多くのさまざまなプロセッサ・レジスタへの読み書きアクセスのための組み込み関数が提供されています。これらの組み込み関数は以下のとおりです。

  • GETREG

  • SETREG

  • GETREGIND

  • SETREGIND

これらの組み込み関数は mov.i インストラクションを実行します。このインストラクションの詳細については,『Intel IA-64 Architecture Software Developer's Manual』を参照してください。 2 つの GET 組み込み関数は,指定されたレジスタの値を返します。

レジスタを指定するには,特殊なエンコードの整数定数を使用します。この定数は Intel C ヘッダ・ファイルに定義されています。このファイルの内容については,『Intel IA-64 Architecture Software Developer's Manual』を参照してください。

PALcode 組み込み関数

以下の 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 でインプリメントされています。

BLI$CALLG

VAX の CALLG( .AP, ...) は,OpenVMS Alpha BLISS ではアセンブリ・ルーチン BLI$CALLG(ARGPTR(), .RTN) に変更されています。このルーチンはもともと OpenVMS Alpha BLISS 向けに定義されたものですが,I64 アーキテクチャ向けに書き直され, OpenVMS I64 BLISS でサポートされています。

I64 のレジスタ

I64 の汎用レジスタはR3 〜 R11 および R19 〜 R31 であり, REGISTER,GLOBAL REGISTER,および EXTERNAL REGISTER に名前を指定でき, LINKAGE 宣言に対するパラメータとして指定することもできます。さらに,パラメータ・レジスタ R32 〜 R39 は, LINKAGE 宣言のみでパラメータとして指定できます。

現在のところ,I64 の汎用レジスタ R40 〜 R127 の名前を指定する機能をサポートする予定はありません。

REGISTER,GLOBAL REGISTER,EXTERNAL REGISTER,および LINKAGE 宣言によって,I64 の浮動小数点レジスタ,プレディケート・レジスタ,分岐レジスタ,およびアプリケーション・レジスタの名前を指定する機能は提供されていません。

特定のレジスタに対するユーザ要求を満たすことができない場合は,レジスタ競合のメッセージが出力されます。

ALPHA_REGISTER_MAPPING スイッチ

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      


目次 索引

© 2012 Hewlett-Packard Development Company, L.P.