|
HP OpenVMS systems documentation |
Previous | Contents | Index |
The OpenVMS Calling Standard on the Intel Itanium processor family is designed to follow the Intel Itanium software conventions as much as possible while avoiding user-visible differences from the OpenVMS VAX and Alpha conventions. The design methodology was basically to start with the Intel Itanium conventions and make changes only where it was deemed necessary to maintain compatibility with the historical OpenVMS design in ways that minimize the cost and difficulty of porting applications and OpenVMS itself to the Intel Itanium architecture.
Following is a brief summary of the differences between the
Itanium® Software Conventions and Runtime Architecture Guide and this Calling Standard. This summary assumes the
reader is already familiar with the Intel Itanium processor
family and related software specifications.
C.1 Changes
Data Model---OpenVMS on Alpha systems is deliberately ambiguous about the data model in use: many programs are compiled using what appears to be an ILP32 model, yet most of the system operates as though using either a P64 or LP64 model. The sign extension rules for integer parameters play a key role in making this more or less transparent. OpenVMS I64 preserves this characteristic, while the Itanium conventions define a pure LP64 data model.
Data Terminology---This specification uses the terms word and quadword to mean 2 bytes and 8 bytes, respectively, while the Itanium terminology uses these words to mean 4 bytes and 16 bytes respectively.
General Register Usage---General registers are used for integer arithmetic, some parts of VAX floating-point emulation, and other general-purpose computation. OpenVMS uses the same (default) conventions for these registers except for the following cases:
Floating-Point Register Usage---Floating-point registers are used for floating-point computations, some parts of VAX floating-point emulation, and certain integer computations. OpenVMS uses the same (default) conventions for these registers except for the following cases:
Parameter Passing---OpenVMS parameter passing is similar to the Itanium conventions, but with the following differences:
Return Values--- Return values up to at most 16 bytes
in size may be returned in registers; larger return values are returned
using a hidden parameter method using the first or second
parameter slot.
C.2 Extensions
Some differences are not changes but rather additions or extensions. These include:
Floating-Point Data Types--- The calling standard for OpenVMS I64 includes support for the VAX F_floating (32-bit), D_floating (64-bit) and G_floating (64-bit) data types found on VAX and Alpha systems; it omits support for the Itanium 80-bit double-extended floating-point type.
VAX Compatible Record Layout---The OpenVMS standard adds a user optional VAX compatible record layout.
Linkage Options---OpenVMS allows additional flexibility and user control in the use of the static general registers as inputs, outputs, global registers and whether used at all.
Memory Stack Overflow Checking---OpenVMS defines how memory stack overflow checking should be performed.
Function Descriptors---OpenVMS defines extended forms of function descriptors to support additional functionality for bound procedure values and translated image support.
Unwind Information--- OpenVMS adds an operating system-specific data area to the Itanium unwind information block. The presence of an operating system-specific data area is indicated by a flag in the unwind information header.
Handler Invocation--- OpenVMS does not invoke a handler while control is in either a prologue or epilogue region of a routine. This difference in behavior is indicated by a flag in the unwind information header.
Translated Images--- OpenVMS adds support (signature information and special ABIs) for calls between native and translated VAX or Alpha images.
Index | Contents |