日本-日本語
日本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 へのアプリケーション・ポーティング・ガイド


目次 索引

第 2 章
基本的な相違点

この章では,Alpha アーキテクチャと I64 アーキテクチャの基本的な相違点について説明します。

2.1 呼び出し規則

Intel® Itanium® プロセッサ・ファミリ上で OpenVMS 呼び出し規則を実装する際には,他のコンポーネントと同様に, OpenVMS VAX および OpenVMS Alpha の規則との違いができるだけ少なくなるように考慮しました。設計にあたっては,基本的に Itanium の呼び出し規則に従い,必要な場合だけ変更するようにしました。その結果,アプリケーションおよびオペレーティング・システムを Itanium アーキテクチャに移植する際に必要となるコストと問題点をできるだけ少なくする一方で,従来の OpenVMS の設計との互換性を維持することが可能になっています。

以降の各節では,『Itanium® Software Conventions and Runtime Architecture Guide』に定義されている規則と OpenVMS の呼び出し規則の相違点について説明します。詳細については,『OpenVMS Calling Standard』を参照してください。

2.1.1 OpenVMS の呼び出し規則の変更点

OpenVMS I64 での,OpenVMS の呼び出し規則の主な変更点を, 表 2-1 に示します。

表 2-1 OpenVMS の呼び出し規則の変更点
項目 説明
データ・モデル OpenVMS Alpha は,使用されているデータ・モデルに関して意図的にあいまいになっています。多くのプログラムは ILP32 モデルであるかのようにコンパイルされますが,システムの大部分は P64 または LP64 モデルを使用しているかのように動作します。整数の符号拡張規則は,このデータ・モデルの透過性を向上または低下させるのに重要な役割を果たします。 Itanium アーキテクチャの規則では純粋な LP64 データ・モデルが定義されていますが, OpenVMS I64 では上記の属性を維持しています。
データを表す用語 OpenVMS I64 のこの規則では, ワードは 2 バイト, クォドワードは 8 バイトを表します。一方, Itanium の用語では, ワードは 4 バイト, クォドワードは 16 バイトを表します。
汎用レジスタの使用 汎用レジスタは,整数演算,VAX 浮動小数点エミュレーションの一部,およびその他の汎用演算に使用されます。 OpenVMS は,これらのレジスタをこれまでと同じように使用しますが (デフォルト),以下の例外があります。

  • R8 と R9 に戻り値が格納されます。

  • R10 と R11 はスクラッチ・レジスタとして使用され,値を返すためには使用されません。

  • R25 は AI (引数情報) レジスタとして使用されます。

浮動小数点レジスタの使用 浮動小数点レジスタは,浮動小数点演算, VAX 浮動小数点エミュレーションの一部,特定の整数演算で使用されます。 OpenVMS は,これらのレジスタに対して同じ規則を使用しますが (デフォルトの動作),以下の例外があります。

  • F8 と F9 に戻り値が格納されます。

  • F10 〜 F15 はスクラッチ・レジスタとして使用され,値を返すためには使用されません。

引数の受け渡し OpenVMS の引数の受け渡しは, Itanium の規則とほぼ同じです。ただし,OpenVMS 規則での以下の相違点に注意してください。

  • OpenVMS 規則には,AI (引数情報) レジスタが追加されています (引数の数およびデータ・タイプに関する情報用)。

  • 引数は汎用レジスタにも浮動小数点レジスタにもコピーされません。

  • レジスタを介して受け渡される引数の場合,最初の引数は最初の汎用レジスタ・スロット (R32) または最初の浮動小数点レジスタ・スロット (F16) に渡され, 2 番目の引数は 2 番目の汎用レジスタ・スロット (R33) または 2 番目の浮動小数点レジスタ・スロット (F17) に渡されます。以下も同様です。浮動小数点引数が使用可能な浮動小数点レジスタにパックされることはなく,引数は最大 8 つまで,レジスタを介して受け渡されます。

  • 汎用レジスタを介して受け渡される引数の場合, 32 ビット値は,ビット 31 をコピーすることで,完全な 64 ビットのパラメータ・スロットに符号拡張されます (符号なしデータ・タイプの場合も同様)。

  • 64 ビットより大きな引数の場合,偶数スロット・アラインメントは行われません。

  • 一般に,HFA (homogeneous floating-point aggregate) に対する特別な処理は行われません。

  • OpenVMS では,__float128 の値渡しであっても,参照渡しとして実装されています。

  • OpenVMS では,リトル・エンディアン表現だけがサポートされます。

  • OpenVMS では,下位互換性を維持するために, F_floating (32 ビット),D_floating (64 ビット),および G_floating (64 ビット) の 3 つの VAX 浮動小数点データ・タイプが追加サポートされます。これらのデータ・タイプの値は,汎用レジスタを使用して渡されます。

戻り値 最大 16 バイトまでの戻り値は,レジスタを介して呼び出し元に返すことができます。それより大きな戻り値は,最初または 2 番目のパラメータ・スロットを使用して, 隠し引数方式で返されます。



2.1.2 OpenVMS 呼び出し規則の拡張

表 2-2 では, OpenVMS 呼び出し規則の追加規則や拡張規則について説明します。

表 2-2 OpenVMS 呼び出し規則の拡張
項目 説明
浮動小数点データ・タイプ OpenVMS の呼び出し規則では, VAX および Alpha システムでサポートされていた VAX F_floating (32 ビット),D_floating (64 ビット), G_floating (64 ビット) データ・タイプがサポートされます。 Itanium アーキテクチャの 80 ビット倍精度拡張浮動小数点データ・タイプはサポートされません。
VAX 互換のレコード・レイアウト OpenVMS の呼び出し規則では,ユーザ・オプションとして VAX 互換のレコード・レイアウトが追加されています。
リンケージ・オプション OpenVMS では,汎用レジスタを入力や出力,グローバル・レジスタ,その他の目的で使用する際に,柔軟性とユーザの制御機能を向上することができます。
メモリ・スタック・オーバーフローのチェック OpenVMS では,メモリ・スタック・オーバーフローのチェック方法が定義されています。
関数記述子 OpenVMS では,バインドされたプロシージャ値や変換されたイメージのサポートのために,関数記述子の拡張形式を定義して追加機能をサポートしています。
アンワインド情報 OpenVMS では,オペレーティング・システム固有のデータ領域が Itanium アーキテクチャのアンワインド情報ブロックに追加されています。オペレーティング・システム固有のデータ領域の存在は,アンワインド情報ヘッダのフラグによって示されます。
ハンドラの起動 OpenVMS では,制御がルーチンのプロローグ領域またはエピローグ領域にある間,ハンドラを起動しません。この動作の違いは,アンワインド情報ヘッダのフラグによって示されます。
変換されたイメージ OpenVMS では, VAX または Alpha のネイティブ・イメージと変換されたイメージの間の呼び出しのサポート (シグネチャ情報と特殊な ABI) が追加されています。



2.2 浮動小数点演算

この節では,OpenVMS VAX,OpenVMS Alpha,および OpenVMS I64 システムでの浮動小数点演算の相違点について説明します。

2.2.1 概要

Alpha アーキテクチャでは,IEEE 浮動小数点形式と VAX 浮動小数点形式の両方がハードウェアでサポートされます。 OpenVMS コンパイラは,デフォルトでは VAX 形式を使用してコードを生成しますが, Alpha 上では IEEE 形式を使用するためのオプションも提供しています。 Itanium アーキテクチャでは,IEEE 単精度と IEEE 倍精度を含む IEEE 浮動小数点形式を使用して,ハードウェアで浮動小数点演算を実装しています。

OpenVMS VAX または OpenVMS Alpha 用にデフォルトの浮動小数点形式を使用して作成されているアプリケーションを OpenVMS I64 へ移植する方法には,2 種類の方法があります。 1 つは HP 製コンパイラの変換機能を利用して今後も VAX 浮動小数点形式を使用する方法で,もう一つは IEEE 浮動小数点形式を使用するようにアプリケーションを変換する方法です。 VAX 浮動小数点形式は,以前に生成されたバイナリの浮動小数点データにアクセスすることが必要な状況で使用できます。 HP 製コンパイラは,VAX 形式と IEEE 形式の間でデータを変換するのに必要なコードを生成します。変換プロセスの詳細については,下記のWebサイトで提供されている『Intel Itanium アーキテクチャにおける OpenVMS 浮動小数点演算について』を参照してください。

http://h50146.www5.hp.com/products/software/oe/openvms/technical/ 

IEEE 浮動小数点形式は,VAX 浮動小数点形式が不要な場合に使用してください。 IEEE 浮動小数点形式を使用すると,より効率のよいコードを生成できます。

2.2.2 OpenVMS アプリケーションへの影響

Itanium アーキテクチャでは, IEEE 単精度および IEEE 倍精度浮動小数点データ・タイプに変換することにより VAX 浮動小数点形式がサポートされます。デフォルトでは,この処理は透過的に実行されるため,ほとんどのアプリケーションには影響を与えません。 HP は C,C++,Fortran,BASIC,Pascal,および COBOL 用のコンパイラを提供しており,すべてのコンパイラで同じ浮動小数点オプションが提供されます。アプリケーション開発者にとって必要な作業は,適切なコンパイラを使用してアプリケーションを再コンパイルすることだけです。浮動小数点オプションの詳細については,各コンパイラのドキュメントを参照してください。

IEEE 浮動小数点形式がデフォルトであるため,アプリケーションでVAX 浮動小数点形式オプションを明示的に指定しない限り,OpenVMS I64 向けにアプリケーションを単純に再ビルドするとネイティブな IEEE 形式が直接使用されます。 VAX 形式に直接依存しなくても正常に動作するプログラムの場合は, OpenVMS I64 向けのビルド方式としては,これが最も望ましい方法です。



2.3 オブジェクト・ファイルの形式

Intel が開発したコンパイラ・テクノロジを利用するための最も効率のよい方法は,以下に示す 2 つの業界標準 (いずれも Itanium のコンパイラで使用) を採用することであると弊社は考えています。

  • ELF (executable and linkable format) は,オブジェクト・ファイルと実行可能ファイルの形式を記述しています。

  • DWARF (debugging and traceback information format) は,デバッグおよびトレースバック情報がオブジェクト・ファイルおよび実行可能ファイルに保存される方法を記述しています。

弊社が下したこの判断には,将来,開発ツールを OpenVMS へ移植する作業がより容易になるという明確な利点があります。 OpenVMS I64 オペレーティング・システムで提供されるコンパイラ,開発ツール,およびユーティリティはすべて,これらの新しい形式を認識し,利用することができます。アプリケーションで ELF および DWARF を明示的に取り扱う場合を除き,アプリケーション開発者がこれらの形式について意識する必要はありません。

アプリケーションのコンパイル,リンク,デバッグ,そして導入が行われるという典型的なアプリケーション開発のシナリオでは,オブジェクト・ファイルの形式,実行イメージ・ファイルの形式,デバッグ情報やトレースバック情報などの詳細について,開発者が特に考慮することはありません。しかし,コンパイラやデバッガ,解析ツールをはじめ,これらのファイルの形式に依存するその他のユーティリティなどを開発するソフトウェア・エンジニアは,これらのファイルが OpenVMS でどのように実装されているかを理解しておく必要があります。


目次 索引

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