! *** PREDECLARED TYPES %IF %DECLARED ( %BASIC$QUADWORD_DECLARED ) = 0 %THEN RECORD BASIC$QUADWORD LONG FILL ( 2 ) END RECORD %LET %BASIC$QUADWORD_DECLARED = 1 %END %IF %IF %DECLARED ( %BASIC$OCTAWORD_DECLARED ) = 0 %THEN RECORD BASIC$OCTAWORD LONG FILL ( 4 ) END RECORD %LET %BASIC$OCTAWORD_DECLARED = 1 %END %IF %IF %DECLARED ( %BASIC$HFLOAT_AXP_DECLARED ) = 0 %THEN RECORD BASIC$HFLOAT_AXP LONG FILL ( 4 ) END RECORD %LET %BASIC$HFLOAT_AXP_DECLARED = 1 %END %IF %IF %DECLARED ( %BASIC$F_FLOATING_COMPLEX_DECL ) = 0 %THEN RECORD BASIC$F_FLOATING_COMPLEX SINGLE REAL_PART SINGLE IMAGINARY_PART END RECORD %LET %BASIC$F_FLOATING_COMPLEX_DECL = 1 %END %IF %IF %DECLARED ( %BASIC$D_FLOATING_COMPLEX_DECL ) = 0 %THEN RECORD BASIC$D_FLOATING_COMPLEX DOUBLE REAL_PART DOUBLE IMAGINARY_PART END RECORD %LET %BASIC$D_FLOATING_COMPLEX_DECL = 1 %END %IF %IF %DECLARED ( %BASIC$G_FLOATING_COMPLEX_DECL ) = 0 %THEN RECORD BASIC$G_FLOATING_COMPLEX GFLOAT REAL_PART GFLOAT IMAGINARY_PART END RECORD %LET %BASIC$G_FLOATING_COMPLEX_DECL = 1 %END %IF %IF %DECLARED ( %BASIC$H_FLOAT_AXP_CMPLX_DCL ) = 0 %THEN RECORD BASIC$H_FLOATING_COMPLEX_AXP BASIC$HFLOAT_AXP REAL_PART BASIC$HFLOAT_AXP IMAGINARY_PART END RECORD %LET %BASIC$H_FLOAT_AXP_CMPLX_DCL = 1 %END %IF ! ! Operating System Specific Data area offset definitions for the IA64 ! VMS calling standard. ! ! ! Spill Data triple ! DECLARE LONG CONSTANT OSSD$M_REG = x'0000001F' DECLARE LONG CONSTANT OSSD$M_MBZ_5_7 = x'000000E0' DECLARE LONG CONSTANT OSSD$M_TREG = x'00007F00' DECLARE LONG CONSTANT OSSD$M_MBZ_15 = x'00008000' DECLARE LONG CONSTANT OSSD$S_OSSD_SPILL_DATA = 3 record OSSD_SPILL_DATA group OSSD$R_SPILL_OVERLAY variant case group OSSD$R_SPILL_STRUCT_1 ! Static general register being saved ! MBZ ! Target register for save or zero for restore ! MBZ WORD REG_bits ! COMMENT ADDED BY SDL - REG_bits contains bits REG through MBZ_15 end group OSSD$R_SPILL_STRUCT_1 case group OSSD$R_SPILL_STRUCT_2 BYTE OSSD$B_REG_BYTE ! Byte containing 5-bit REG field BYTE OSSD$B_TREG_BYTE ! Byte containing 7-bit TREG field end group OSSD$R_SPILL_STRUCT_2 end variant end group OSSD$R_SPILL_OVERLAY BYTE OSSD$T_T ( 1 to 1 ) ! ULEB128 slot offset to save/restore instruction end record OSSD_SPILL_DATA ! ! OSSD layout for general and caller spill register information segments ! DECLARE LONG CONSTANT OSSD$M_TYPE = x'00007FFF' DECLARE LONG CONSTANT OSSD$K_GENERAL_INFO = 1 ! General info (always one quadword) DECLARE LONG CONSTANT OSSD$K_CALL_SPILL_INFO = 2 ! Caller spill info (variable length) DECLARE LONG CONSTANT OSSD$K_CONTEXT_INFO = 3 ! Context info (always one quadword) DECLARE LONG CONSTANT OSSD$M_S = x'00008000' DECLARE LONG CONSTANT OSSD$M_EXCEPTION_MODE = x'00070000' DECLARE LONG CONSTANT OSSD$K_EXC_MODE_SIGNAL = 0 ! Signal DECLARE LONG CONSTANT OSSD$K_EXC_MODE_SIGNAL_ALL = 1 ! Signal all DECLARE LONG CONSTANT OSSD$K_EXC_MODE_SIGNAL_SILENT = 2 ! Signal silent DECLARE LONG CONSTANT OSSD$K_EXC_MODE_FULL_IEEE = 3 ! Signal full IEEE DECLARE LONG CONSTANT OSSD$K_EXC_MODE_CALLER = 4 ! Use caller's mode DECLARE LONG CONSTANT OSSD$M_TARGET_INVO = x'00080000' DECLARE LONG CONSTANT OSSD$M_BASE_FRAME = x'00100000' DECLARE LONG CONSTANT OSSD$M_HANDLER_REINVOKABLE = x'00200000' DECLARE LONG CONSTANT OSSD$M_AST_FRAME = x'00400000' DECLARE LONG CONSTANT OSSD$M_EXCEPTION_FRAME = x'00800000' DECLARE LONG CONSTANT OSSD$M_TIE_FRAME = x'01000000' DECLARE LONG CONSTANT OSSD$M_BOTTOM_OF_STACK = x'02000000' DECLARE LONG CONSTANT OSSD$M_HANDLER_DATA_VALID = x'04000000' DECLARE LONG CONSTANT OSSD$M_SS_DISPATCH_FRAME = x'08000000' DECLARE LONG CONSTANT OSSD$M_KP_START_FRAME = x'10000000' DECLARE LONG CONSTANT OSSD$M_FRAMELESS_HELPER = x'20000000' DECLARE LONG CONSTANT OSSD$M_MBZ_30_63 = x'00000000' DECLARE LONG CONSTANT OSSD$K_GENERAL_INFO_LENGTH = 8 ! Size of general data segment DECLARE LONG CONSTANT OSSD$M_CONTEXT_TYPE = x'00FF0000' DECLARE LONG CONSTANT OSSD$K_CTX_TYPED = 0 ! A VMS typed data structure DECLARE LONG CONSTANT OSSD$K_CTX_CHFCTX = 1 ! A CHFCTX block DECLARE LONG CONSTANT OSSD$M_CONTEXT_GR = x'FF000000' DECLARE LONG CONSTANT OSSD$M_CONTEXT_OFFSET = x'00000000' DECLARE LONG CONSTANT OSSD$M_CONTEXT_HINT = x'00000000' DECLARE LONG CONSTANT OSSD$K_HINT_EXCEPTION = 1 ! Exception dispatcher DECLARE LONG CONSTANT OSSD$K_HINT_SS = 2 ! System Service dispatcher DECLARE LONG CONSTANT OSSD$K_HINT_AST = 3 ! AST dispatcher DECLARE LONG CONSTANT OSSD$K_HINT_KP_START = 4 ! KP_START frame DECLARE LONG CONSTANT OSSD$K_CONTEXT_INFO_LENGTH = 8 ! Size of context info segment DECLARE LONG CONSTANT OSSD$S_OSSDDEF = 8 record OSSDDEF group OSSD$R_DATA_OVERLAY variant case BASIC$QUADWORD OSSD$Q_GENERAL_INFO_SEGMENT ! Entire general info segment case group OSSD$R_GENERAL_STRUCT ! OSSD segment type ! Continuation marker ! Desired exception-reporting behavior ! Invoke handler when unwind target ! Logical base frame of stack ! Handler may be invoked when already active ! AST dispatch frame ! Exception dispatch frame ! Frame created by Translated Image Executive ! End of call stack (no predecessors) ! Exception handler data field exists in unwind info ! System Service dispatch frame ! Used to tag EXE$KP_START ! Tags code executing in context of another routine whose IP is in B0 ! MBZ BYTE TYPE_bits ( 8 ) ! COMMENT ADDED BY SDL - TYPE_bits contains bits TYPE through MBZ_30_63 end group OSSD$R_GENERAL_STRUCT case group OSSD$R_SPILL_STRUCT_3 WORD OSSD$W_FILL_3 ! Overlays segment type and continuation marker WORD OSSD$W_LENGTH ! # quadwords in this segment OSSD_SPILL_DATA OSSD$T_SPILL_DATA ! Start of first spill data triple end group OSSD$R_SPILL_STRUCT_3 case BASIC$QUADWORD OSSD$Q_CONTEXT_INFO_SEGMENT ! Entire context info segment case group OSSD$R_CONTEXT_INFO_STRUCT WORD OSSD$W_FILL_4 ! Overlays segment type and continuation marker ! Type of context block described ! GR containing pointer to context block ! Offset (in octawords) from SP, or GR ! Hint as to purpose of context block ! Hints: (0 = no hint) BYTE CONTEXT_TYPE_bits ( 6 ) ! COMMENT ADDED BY SDL - CONTEXT_TYPE_bits contains bits CONTEXT_TYPE through & ! CONTEXT_HINT end group OSSD$R_CONTEXT_INFO_STRUCT end variant end group OSSD$R_DATA_OVERLAY end record OSSDDEF ! The following macro can be used in IAS code to create a context info OSSD ! segment. Cut and paste to your IAS module ! ! #define __CONTEXT_OSSD(type,gr,offset,hint) \ ! .vms_ossd ((hint) << OSSD$V_CONTEXT_HINT) | \ ! (((offset) ? 0xFFFFFF) << OSSD$V_CONTEXT_OFFSET) | \ ! ((gr) << OSSD$V_CONTEXT_GR) | \ ! ((type) << OSSD$V_CONTEXT_TYPE) | OSSD$K_CONTEXT_INFO !