! *** 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 ! ! Procedure descriptor offset definitions for the Alpha-32 calling standard. ! This definition includes the offsets and fields for stack frame (SF) and ! register frame (RF) procedure descriptors. ! DECLARE LONG CONSTANT PDSC$K_KIND_BOUND = 0 ! bound procedure DECLARE LONG CONSTANT PDSC$K_KIND_NULL = 8 ! null procedure DECLARE LONG CONSTANT PDSC$K_KIND_FP_STACK = 9 ! SF procedure DECLARE LONG CONSTANT PDSC$K_KIND_FP_REGISTER = 10 ! RF procedure DECLARE LONG CONSTANT PDSC$M_HANDLER_VALID = x'00000010' DECLARE LONG CONSTANT PDSC$M_HANDLER_REINVOKABLE = x'00000020' DECLARE LONG CONSTANT PDSC$M_HANDLER_DATA_VALID = x'00000040' DECLARE LONG CONSTANT PDSC$M_BASE_REG_IS_FP = x'00000080' DECLARE LONG CONSTANT PDSC$M_REI_RETURN = x'00000100' DECLARE LONG CONSTANT PDSC$M_STACK_RETURN_VALUE = x'00000200' DECLARE LONG CONSTANT PDSC$M_BASE_FRAME = x'00000400' DECLARE LONG CONSTANT PDSC$M_TARGET_INVO = x'00000800' DECLARE LONG CONSTANT PDSC$M_NATIVE = x'00001000' DECLARE LONG CONSTANT PDSC$M_NO_JACKET = x'00002000' DECLARE LONG CONSTANT PDSC$M_TIE_FRAME = x'00004000' DECLARE LONG CONSTANT PDSC$M_FUNC_RETURN = x'0000000F' DECLARE LONG CONSTANT PDSC$M_EXCEPTION_MODE = x'00000070' DECLARE LONG CONSTANT PDSC$K_EXC_MODE_SIGNAL = 0 ! signal DECLARE LONG CONSTANT PDSC$K_EXC_MODE_SIGNAL_ALL = 1 ! signal all DECLARE LONG CONSTANT PDSC$K_EXC_MODE_SIGNAL_SILENT = 2 ! signal silent DECLARE LONG CONSTANT PDSC$K_EXC_MODE_FULL_IEEE = 3 ! signal full ieee DECLARE LONG CONSTANT PDSC$K_EXC_MODE_CALLER = 4 ! use caller's mode DECLARE LONG CONSTANT PDSC$K_NULL_SIZE = 16 ! length of NULL descriptor DECLARE LONG CONSTANT PDSC$K_BOUND_SIZE = 24 ! length of the basic bound precedure descriptor DECLARE LONG CONSTANT PDSC$K_MIN_BOUND_SIZE = 24 ! minimum size of the basic bound procedure descriptor DECLARE LONG CONSTANT PDSC$K_MIN_LENGTH_SF = 32 ! length of required portion of SF descriptor DECLARE LONG CONSTANT PDSC$K_MIN_STACK_SIZE = 32 ! min size of SF descriptor DECLARE LONG CONSTANT PDSC$K_MAX_STACK_SIZE = 48 ! max size of SF descriptor DECLARE LONG CONSTANT PDSC$K_MIN_LENGTH_RF = 24 ! length of required portion of RF descriptor DECLARE LONG CONSTANT PDSC$K_MIN_REGISTER_SIZE = 24 ! min size of RF descriptor DECLARE LONG CONSTANT PDSC$K_MAX_REGISTER_SIZE = 40 ! max size of RF descriptor DECLARE LONG CONSTANT PDSC$K_BOUND_ENVIRONMENT_SIZE = 32 ! length of the bound precedure descriptor with environment DECLARE LONG CONSTANT PDSC$S_PDSCDEF = 48 record PDSCDEF group PDSC$R_FILL_52_ variant case WORD PDSC$W_FLAGS ! flags including procedure kind bitfield case group PDSC$R_FILL_53_ ! kind of procedure ! optional STACK_HANDLER or REG_HANDLER is present and valid ! exception handler is reinvokable ! optional STACK_HANDLER_DATA or REG_HANDLER_DATA is present and valid ! FP is also base register (vs. SP) ! exit from procedure via REI ! function value returned on stack ! base frame indicator ! unwind target invo handler to be called ! set to 1 for compiled code ! set to 1 for compiled code ! must be 0 for compiled code ! must be zero WORD KIND_bits ! COMMENT ADDED BY SDL - KIND_bits contains bits KIND through FLAGS_MBZ2 end group PDSC$R_FILL_53_ end variant end group PDSC$R_FILL_52_ group PDSC$R_RSA_OFFSET_OVERLAY variant case WORD PDSC$W_RSA_OFFSET ! offset to register save area from base (SF only) case group PDSC$R_RSA_OFFSET_REG BYTE PDSC$B_SAVE_FP ! register number for saved FP (RF only) BYTE PDSC$B_SAVE_RA ! register number for saved return address (RF only) end group PDSC$R_RSA_OFFSET_REG end variant end group PDSC$R_RSA_OFFSET_OVERLAY BYTE PDSC$B_ENTRY_RA ! register in which return address is passed group PDSC$R_MORE_FLAGS_STRUCT ! register specificatons for function value return ! the caller's desired exception reporting behavior BYTE FUNC_RETURN_bits ! COMMENT ADDED BY SDL - FUNC_RETURN_bits contains bits FUNC_RETURN through MORE_FLAGS_MBZ1 end group PDSC$R_MORE_FLAGS_STRUCT WORD PDSC$W_SIGNATURE_OFFSET ! offset from procedure descriptor to signature group PDSC$R_FILL_54_ variant case BASIC$QUADWORD PDSC$Q_ENTRY ! address of start of procedure code case group PDSC$R_FILL_55_ LONG PDSC$L_ENTRY ! first longword is sign extended to quadword end group PDSC$R_FILL_55_ end variant end group PDSC$R_FILL_54_ group PDSC$R_SIZE_OVERLAY ! variant case LONG PDSC$L_SIZE ! size of fixed portion of stack case group PDSC$R_FILL_56_ variant case BASIC$QUADWORD PDSC$Q_PROC_VALUE ! for bound procedure descriptor, case group PDSC$R_FILL_57_ LONG PDSC$L_PROC_VALUE ! this value is a procedure descriptor. LONG PDSC$L_RESERVED1 ! reserved end group PDSC$R_FILL_57_ end variant end group PDSC$R_FILL_56_ end variant end group PDSC$R_SIZE_OVERLAY group PDSC$R_KIND_SPECIFIC variant case group PDSC$R_STACK_SPECIFIC ! stack frame specific... LONG PDSC$L_IREG_MASK ! integer register save mask LONG PDSC$L_FREG_MASK ! floating register save mask BASIC$QUADWORD PDSC$Q_STACK_HANDLER ! absolute pointer to procedure descriptor (opt) BASIC$QUADWORD PDSC$Q_STACK_HANDLER_DATA ! data for stack handler (opt) end group PDSC$R_STACK_SPECIFIC case group PDSC$R_REGISTER_SPECIFIC ! register frame specific... BASIC$QUADWORD PDSC$Q_REG_HANDLER ! absolute pointer to procedure descriptor (opt) BASIC$QUADWORD PDSC$Q_REG_HANDLER_DATA ! data for handler (opt) end group PDSC$R_REGISTER_SPECIFIC case group PDSC$R_ENVIRONMENT_UNION ! Bound procedure descriptor ENVIRONMENT variant case LONG PDSC$L_ENVIRONMENT case BASIC$QUADWORD PDSC$Q_ENVIRONMENT end variant end group PDSC$R_ENVIRONMENT_UNION end variant end group PDSC$R_KIND_SPECIFIC end record PDSCDEF DECLARE LONG CONSTANT PDSC$K_LKP_LENGTH = 16 ! Linkage pair size DECLARE LONG CONSTANT PDSC$S_PDSC_LKPDEF = 16 record PDSC_LKPDEF ! Linkage pair def group PDSC$R_FILL_58_ variant case BASIC$QUADWORD PDSC$Q_LKP_ENTRY ! Entry point addr case group PDSC$R_FILL_59_ LONG PDSC$PS_LKP_ENTRY end group PDSC$R_FILL_59_ end variant end group PDSC$R_FILL_58_ group PDSC$R_FILL_60_ variant case BASIC$QUADWORD PDSC$Q_LKP_PROC_VALUE ! Proc desc addr case group PDSC$R_FILL_61_ LONG PDSC$PS_LKP_PROC_VALUE end group PDSC$R_FILL_61_ end variant end group PDSC$R_FILL_60_ end record PDSC_LKPDEF DECLARE LONG CONSTANT LKP$K_SIZE = 16 ! Linkage pair size DECLARE LONG CONSTANT LKP$S_LKPDEF = 16 record LKPDEF ! Linkage pair def group LKP$R_ENTRY_UNION ! Entry point addr variant case BASIC$QUADWORD LKP$Q_ENTRY case LONG LKP$PS_ENTRY end variant end group LKP$R_ENTRY_UNION group LKP$R_PROC_VALUE_UNION ! Proc desc addr variant case BASIC$QUADWORD LKP$Q_PROC_VALUE case LONG LKP$PS_PROC_VALUE end variant end group LKP$R_PROC_VALUE_UNION end record LKPDEF