/* // Note: This header is use by both the CC compiler and the IA64 // assembler (via the CC preprocessor which creates the // IA64 assembler source file). // // The CC portion of this header starts at the comment line // 'CC header begins here'. // // ----------------------------------------------------------------------------- */ #ifdef IAS_ASSEMBLER /* IA64 assembler header begins here */ /* ************************************************************************* */ /* * * */ /* * HP CONFIDENTIAL. This software is confidential proprietary software * */ /* * licensed by Hewlett-Packard Development Company, L.P., and is not * */ /* * authorized to be used, duplicated OR disclosed to anyone without the * */ /* * prior written permission of HP. * */ /* * © 2021 Copyright Hewlett-Packard Development Company, L.P. * */ /* * * */ /* * VMS SOFTWARE, INC. CONFIDENTIAL. This software is confidential * */ /* * proprietary software licensed by VMS Software, Inc., and is not * */ /* * authorized to be used, duplicated or disclosed to anyone without * */ /* * the prior written permission of VMS Software, Inc. * */ /* * © 2021 Copyright VMS Software, Inc. * */ /* * * */ /* ************************************************************************* */ /* ******************************************************************************************************************************** */ /* Created: 9-Mar-2021 22:28:10 by OpenVMS SDL EV3-3 */ /* Source: 17-JUN-2004 16:11:31 $1$DGA8085:[STARLET_H.SRC]LIBICBDEF.SDL;1 */ /* ******************************************************************************************************************************** */ /* .MACRO $LIBICBDEF,$GBL */ /* $DEFINI LIBICB,$GBL */ #define LIB$K_PROC_VALUE_NULL 0 #define LIB$K_INVO_HANDLE_NULL 0 #define LIBICB$K_INVO_HANDLE_SIZE 8 #define LIBICB$K_INVO_CONTEXT_VERSION 2 /* The header quadword contains: */ #define LIBICB$M_FFLAGS_BITS 0xFFFFFF #define LIBICB$M_BOTTOM_OF_STACK 0x1 #define LIBICB$M_HANDLER_PRESENT 0x2 #define LIBICB$M_IN_PROLOGUE 0x4 #define LIBICB$M_IN_EPILOGUE 0x8 #define LIBICB$M_HAS_MEM_STK_FRAME 0x10 #define LIBICB$M_HAS_REG_STK_FRAME 0x20 #define LIBICB$K_INVO_CONTEXT_T_LENGTH 1888 #define LIBICB$K_SDA_COPY_LENGTH 1960 #define LIBICB$M_UO_FLAG_CACHE_UNWIND 0x1 #define LIBICB$M_UO_FLAG_EMULATION_MODE 0x2 #define LIBICB$K_UO_LENGTH 88 /* */ #define LIBICB$m_using_client_memread 0x1 #define LIBICB$m_my_mode 0x6 #define LIBICB$K_CONTEXT_BLK_SIZE 2080 /* The following is an "internal" area that's reserved for use by */ #define LIBICB$K_REGION_BLK_SIZE 1096 #define LIBICB$K_REGIONLABEL_BLK_SIZE 32 #define LIBICB$K_DESCRIPTOR_BLK_SIZE 1280 /* Action codes: */ #define LIBICB$K_ACTION_KP_FIND_UNWIND 1 /* override call to exe$kp_find_unwind_context */ /* prototype: */ /* uint64 sp = action_routine (enum action_code code, uint64 sp, uint64 ident); */ #define LIBICB$K_ACTION_USE_DEFAULT -1 /* action routine return value to "use default" */ /* Alert codes: (matches _UNW_ReturnCode enum in unwind.h) */ #define LIBICB$K_AC_STEP_KRNL_SAV_STATE -2 /* _UNW_STEP_KERNEL_SAVE_STATE = -2 */ #define LIBICB$K_AC_STEP_BOTTOM -1 /* _UNW_STEP_BOTTOM */ #define LIBICB$K_AC_OK 0 /* _UNW_OK = 0 */ #define LIBICB$K_AC_STEP_ERROR 1 /* _UNW_STEP_ERROR */ #define LIBICB$K_AC_STEP_INVALID_IP 2 /* _UNW_STEP_INVALID_IP */ #define LIBICB$K_AC_STEP_INVALID_SP 3 /* _UNW_STEP_INVALID_SP */ #define LIBICB$K_AC_STEP_INVALID_GR 4 /* _UNW_STEP_INVALID_GR */ #define LIBICB$K_AC_STEP_INVALID_PFS 5 /* _UNW_STEP_INVALID_PFS */ #define LIBICB$K_AC_STEP_INVALID_RSC 6 /* _UNW_STEP_INVALID_RSC */ #define LIBICB$K_AC_STEP_INVALID_BSP 7 /* _UNW_STEP_INVALID_BSP */ #define LIBICB$K_AC_STEP_INV_BSPSTORE 8 /* _UNW_STEP_INVALID_BSPSTORE */ #define LIBICB$K_AC_STEP_INVALID_CFM 9 /* _UNW_STEP_INVALID_CFM */ #define LIBICB$K_AC_STEP_INVALID_BR 10 /* _UNW_STEP_INVALID_BR */ #define LIBICB$K_AC_STEP_BAD_BSP_ALIGN 11 /* _UNW_STEP_BAD_BSP_ALIGNMENT */ #define LIBICB$K_AC_STEP_INVALID_RNAT 12 /* _UNW_STEP_INVALID_RNAT */ #define LIBICB$K_AC_STEP_NODSC4_NONLEAF 13 /* _UNW_STEP_NO_DESCRIPTOR_FOR_NON_LEAF */ #define LIBICB$K_AC_STEP_CORRUPT_DESC 14 /* _UNW_STEP_CORRUPT_DESCRIPTOR */ #define LIBICB$K_AC_STEP_RSE_NOT_FLUSHD 15 /* _UNW_STEP_RSE_NOT_FLUSHED */ #define LIBICB$K_AC_STEP_SIGNAL_CONTEXT 16 /* _UNW_STEP_SIGNAL_CONTEXT */ #define LIBICB$K_AC_STEP_BAD_STATE 17 /* _UNW_STEP_NOT_ALLOWED_IN_STATE */ #define LIBICB$K_AC_INIT_RANGE_ERROR 18 /* _UNW_INITIALIZATION_RANGE_ERROR */ #define LIBICB$K_AC_QUERY_RANGE_ERROR 19 /* _UNW_QUERY_RANGE_ERROR */ #define LIBICB$K_AC_QUERY_INVALID_ERROR 20 /* _UNW_QUERY_INVALID_ERROR */ #define LIBICB$K_AC_SET_BAD_STATE 21 /* _UNW_SET_NOT_ALLOWED_IN_STATE */ #define LIBICB$K_AC_CURR_CTXT_FAILED 22 /* _UNW_CURRENT_CONTEXT_FAILED */ #define LIBICB$K_AC_CURR_CTXT_BAD_STATE 23 /* _UNW_CURRENT_CONTEXT_NOT_ALLOWED_IN_STATE */ #define LIBICB$K_AC_MEMORY_ALLOC_ERROR 24 /* _UNW_MEMORY_ALLOCATION_ERROR */ #define LIBICB$K_AC_CLEAR_BAD_STATE 25 /* _UNW_CLEAR_NOT_ALLOWED_IN_STATE */ #define LIBICB$K_AC_QUERY_BAD_STATE 26 /* _UNW_QUERY_NOT_ALLOWED_IN_STATE */ #define LIBICB$K_AC_INTERNAL_ERROR 27 /* _UNW_INTERNAL_ERROR */ #define LIBICB$K_AC_STEP_I_ABI_MISMATCH 28 /* _UNW_STEP_INTERRUPTION_ABI_MISMATCH */ #define LIBICB$K_AC_UNALIGNED_ICB 29 /* _UNW_UNALIGNED_ICB */ #define LIBICB$K_AC_READ_MEM_FAILURE 30 /* _UNW_READ_MEMORY_FAILURE */ #define LIBICB$K_AC_WRITE_MEM_FAILURE 31 /* _UNW_WRITE_MEMORY_FAILURE */ #define LIBICB$K_AC_WRITE_REG_FAILURE 32 /* _UNW_WRITE_REGISTER_FAILURE */ #define LIBICB$K_AC_UO_INCON_CALLBACK 33 /* _UNW_USER_OVERRIDE_INCONSISTENT_CALLBACK_PARAM */ #define LIBICB$K_AC_PUT_REG_INVALID 34 /* _UNW_PUT_REGISTER_INVALID */ #define LIBICB$K_INVO_CONTEXT_BLK_SIZE 2112 #define LIBICB$S_INVO_CONTEXT_BLK 2112 /* */ /* The length of the structure in bytes (a longword field), */ /* The frame flags (a 3 byte field of bits), and */ /* The version number (a 1 byte field) */ #define LIBICB$S_HEADER 8 #define LIBICB$IH_HEADER 0 /* Header (length, flags, version) */ #define LIBICB$L_CONTEXT_LENGTH 0 #define LIBICB$S_FRAMEFLAGS 3 #define LIBICB$R_FRAMEFLAGS 4 #define LIBICB$V_FFLAGS_BITS 0 #define LIBICB$V_BOTTOM_OF_STACK 0 #define LIBICB$V_HANDLER_PRESENT 1 #define LIBICB$V_IN_PROLOGUE 2 #define LIBICB$V_IN_EPILOGUE 3 #define LIBICB$V_HAS_MEM_STK_FRAME 4 #define LIBICB$V_HAS_REG_STK_FRAME 5 #define LIBICB$B_BLOCK_VERSION 7 /* ***** Start of context_t ****************** */ /* */ /* a context_t structure should be octaword (16-byte) aligned, and is passed by */ /* reference to the "get initial context" callback routine and establishes */ /* the "current" state of the machine and forms the inital context for for unwinding. */ /* */ #define LIBICB$S_IREG 1024 #define LIBICB$IH_IREG 16 /* General (integer) Registers */ /* 32 static registers, plus */ /* up to 96 stacked/rotating registers */ #define LIBICB$S_i_used0 8 #define LIBICB$ih_i_used0 16 /* R0 */ #define LIBICB$S_GP 8 #define LIBICB$IH_GP 24 /* synonym for R1 (Global Data Pointer) */ #define LIBICB$S_SP 8 #define LIBICB$IH_SP 112 /* synonym for R12 (Memory Stack Pointer) */ #define LIBICB$S_TP 8 #define LIBICB$IH_TP 120 /* synonym for R13 (Thread Pointer) */ #define LIBICB$S_AI 8 #define LIBICB$IH_AI 216 /* synonym for R25 (Argument Information register) */ #define LIBICB$S_GRNAT 16 #define LIBICB$IH_GRNAT 1040 /* General Register NaT Collection Registers */ #define LIBICB$S_F2_F31 480 #define LIBICB$FO_F2_F31 1056 /* Floating Point Registers. */ /* 32 static floating point registers. */ /* Floating Point Registers are 82 bits wide */ /* but stored here in octawords. */ #define LIBICB$S_F32_F127 8 #define LIBICB$PH_F32_F127 1536 /* Pointer to upper Floating Register save */ /* area. Zero if not saved. */ #define LIBICB$S_BRANCH 64 #define LIBICB$IH_BRANCH 1544 /* Branch Registers */ /* Application Registers (ARs) */ /* */ #define LIBICB$S_RSC 8 #define LIBICB$IH_RSC 1608 /* Register Stack Configuration Register */ #define LIBICB$S_BSP 8 #define LIBICB$IH_BSP 1616 /* Backing store pointer */ #define LIBICB$S_BSPSTORE 8 #define LIBICB$IH_BSPSTORE 1624 /* Backing store write pointer */ #define LIBICB$S_RNAT 8 #define LIBICB$IH_RNAT 1632 /* RSE NaT Collection Register */ #define LIBICB$S_CCV 8 #define LIBICB$IH_CCV 1640 /* Compare & Exchange Value Register */ #define LIBICB$S_UNAT 8 #define LIBICB$IH_UNAT 1648 /* User NaT Collection Register */ #define LIBICB$S_FPSR 8 #define LIBICB$FH_FPSR 1656 /* OBSOLETE - do not rely on the contents of this field. */ #define LIBICB$S_PFS 8 #define LIBICB$IH_PFS 1664 /* Previous Function State */ #define LIBICB$S_LC 8 #define LIBICB$IH_LC 1672 /* Loop Count Register */ #define LIBICB$S_EC 8 #define LIBICB$IH_EC 1680 /* Epilogue Count Register */ #define LIBICB$S_CSD 8 #define LIBICB$IH_CSD 1688 /* Copy of AR.CSD */ #define LIBICB$S_SSD 8 #define LIBICB$IH_SSD 1696 /* Copy of AR.SSD */ /* */ /* End ARs */ #define LIBICB$S_PRED 8 #define LIBICB$Q_PRED 1704 /* Predicate Collection Register, PR0-PR63 */ #define LIBICB$S_PC 8 #define LIBICB$IH_PC 1712 /* Current PC (Instruction Pointer + slot) */ #define LIBICB$S_CFM 8 #define LIBICB$IH_CFM 1720 /* Current Frame Marker */ #define LIBICB$S_SOF 7 #define LIBICB$V_SOF 0 /* Size of stack frame */ #define LIBICB$S_SOL 7 #define LIBICB$V_SOL 7 /* Size of locals portion of stack frame */ #define LIBICB$S_SOR 4 #define LIBICB$V_SOR 14 /* Size of rotating portion of stack frame */ #define LIBICB$S_RRB_GR 7 #define LIBICB$V_RRB_GR 18 /* Register Rename Base for General Registers */ #define LIBICB$S_RRB_FR 7 #define LIBICB$V_RRB_FR 25 /* Register Rename Base for Floating-point Registers */ #define LIBICB$S_RRB_PR 6 #define LIBICB$V_RRB_PR 32 /* Register Rename Base for Predicate Registers */ #define LIBICB$S_UM 8 #define LIBICB$IH_UM 1728 /* User Mask bits of the PSR. */ #define LIBICB$V_BE 1 /* Big-endian memory access enable */ #define LIBICB$V_UP 2 /* User performance monitor enable */ #define LIBICB$V_AC 3 /* Alignment check data memory references */ #define LIBICB$V_MFL 4 /* Lower (F2-F31) Floating-point registers written */ #define LIBICB$V_MFH 5 /* Upper (F32-F127) Floating-point registers written */ #define LIBICB$S_next_bsp 8 #define LIBICB$ih_next_bsp 1736 /* Next frame's Backing Store Pointer (Internal use) */ #define LIBICB$S_next_pfs 8 #define LIBICB$ih_next_pfs 1744 /* Next frame's Previous Frame State (Internal use) */ /* The following two locations are used when walking from an inner */ /* mode stack to an outer mode and context has been saved in a INTSK structure, */ /* but the outer mode stacked registers have bee saved on the inner mode RSE backing store. */ /* */ #define LIBICB$S_bspbase 8 #define LIBICB$ih_bspbase 1752 /* Base for outer mode stacked registers saved in */ /* inner mode RSE backing store (Internal use) */ #define LIBICB$S_intstk_rnat 8 #define LIBICB$ih_intstk_rnat 1760 /* RNAT as saved in INTSTK (Internal use) */ /* the following "valid" bitmasks are used to record the validity */ /* of a given register for this context */ #define LIBICB$S_GR_VALID 16 #define LIBICB$O_GR_VALID 1768 /* General Register validity mask */ #define LIBICB$L_FR_VALID 1784 /* F2 - F31 validity mask (bit 2 for F2) */ #define LIBICB$l_fr_valid_fill 1788 #define LIBICB$S_BR_VALID 8 #define LIBICB$Q_BR_VALID 1792 /* Branch Register validity mask */ #define LIBICB$S_AR_VALID 8 #define LIBICB$Q_AR_VALID 1800 /* Application Register validity mask */ #define LIBICB$V_RSC_VALID 0 /* Register Stack Configuration Register */ #define LIBICB$V_BSP_VALID 1 /* Backing store pointer */ #define LIBICB$V_BSPSTORE_VALID 2 /* Backing store write pointer */ #define LIBICB$V_RNAT_VALID 3 /* RSE NaT Collection Register */ #define LIBICB$V_CCV_VALID 4 /* Compare & Exchange Value Register */ #define LIBICB$V_UNAT_VALID 5 /* User NaT Collection Register */ #define LIBICB$V_FPSR_VALID 6 /* Floating Point Status Register. */ #define LIBICB$V_PFS_VALID 7 /* Previous Function State */ #define LIBICB$V_LC_VALID 8 /* Loop Count Register */ #define LIBICB$V_EC_VALID 9 /* Epilogue Count Register */ #define LIBICB$V_CSD_VALID 10 /* Copy of AR.CSD */ #define LIBICB$V_SSD_VALID 11 /* Copy of AR.SSD */ #define LIBICB$S_OTHER_VALID 8 #define LIBICB$Q_OTHER_VALID 1808 /* PC, CFM validity mask */ #define LIBICB$V_PC_VALID 0 /* Current PC */ #define LIBICB$V_CFM_VALID 1 /* Current Frame Marker */ #define LIBICB$V_UM_VALID 2 /* User Mask field of PSR. */ #define LIBICB$S_PR_VALID 8 #define LIBICB$Q_PR_VALID 1816 /* Predicate Register validity mask */ #define LIBICB$S_ORIGINAL_SPILL_ADDR 8 #define LIBICB$IH_ORIGINAL_SPILL_ADDR 1824 /* Original address of GR spill area (&LIBICB$IH_IREG[0]) */ /* (needed for NaT bit podition calculations) */ #define LIBICB$S_true_psp 8 #define LIBICB$ih_true_psp 1832 /* True Previous SP (for Invo Handle) */ #define LIBICB$S_spare_03 8 #define LIBICB$ih_spare_03 1840 #define LIBICB$S_spare_04 8 #define LIBICB$ih_spare_04 1848 #define LIBICB$S_spare_05 8 #define LIBICB$ih_spare_05 1856 #define LIBICB$S_spare_06 8 #define LIBICB$ih_spare_06 1864 #define LIBICB$S_spare_07 8 #define LIBICB$ih_spare_07 1872 #define LIBICB$S_spare_08 8 #define LIBICB$ih_spare_08 1880 /* */ /* ******* End of context_t structure ********************* */ #define LIBICB$S_PSP 8 #define LIBICB$IH_PSP 1888 /* SP at entry to routine (Previous SP) */ #define LIBICB$S_psp_valid 8 #define LIBICB$ih_psp_valid 1896 /* PreviousSP valid */ #define LIBICB$S_RETURN_PC 8 #define LIBICB$IH_RETURN_PC 1904 /* Return PC for SDA. */ #define LIBICB$S_PREV_BSP 8 #define LIBICB$IH_PREV_BSP 1912 /* BSP of preceding frame for SDA. */ #define LIBICB$S_CHFCTX_ADDR 8 #define LIBICB$PH_CHFCTX_ADDR 1920 /* Pointer to condition handler facility context block */ #define LIBICB$S_OTHER 8 #define LIBICB$PH_OTHER 1928 /* Pointer to other interesting structure (if any) */ #define LIBICB$S_OSSD 8 #define LIBICB$IH_OSSD 1936 /* Copy of OSSD from Unwind Information Block */ #define LIBICB$S_HANDLER_FV 8 #define LIBICB$IH_HANDLER_FV 1944 /* Condition Handler Function Value */ #define LIBICB$S_LSDA 8 #define LIBICB$PH_LSDA 1952 /* Virtual Address of LSD area of UIB */ #define LIBICB$S_desc 8 #define LIBICB$ph_desc 1960 /* Pointer to _Unwind_Descriptor structure (Internal use) */ #define LIBICB$S_history 8 #define LIBICB$ph_history 1968 /* Pointer to _Unwind_History structure (Internal use) */ /* ******* Start of User Override ************************* */ /* */ /* The following locations can be used to alter the default behavior */ /* Typically this would be used for cross-process unwinding, and */ /* specifying an alternative memory allocation scheme. */ #define LIBICB$R_UO_BASE 1976 /* base of User Override area */ #define LIBICB$S_UO_FLAGS 8 #define LIBICB$Q_UO_FLAGS 1976 /* operational flags */ #define LIBICB$V_UO_FLAG_CACHE_UNWIND 0 /* cache unwind information between calls */ /* for effiecient stack walk. */ #define LIBICB$V_UO_FLAG_EMULATION_MODE 1 /* Internal use only */ #define LIBICB$S_UO_IDENT 8 #define LIBICB$IH_UO_IDENT 1984 /* user context variable, passed by value */ /* to the following callback routines. */ #define LIBICB$S_UO_READ_MEM 8 #define LIBICB$PH_UO_READ_MEM 1992 /* Pointer to user "read memory" routine */ #define LIBICB$S_UO_GETUEINFO 8 #define LIBICB$PH_UO_GETUEINFO 2000 /* Pointer to user "get Unwind Entry Information" routine */ #define LIBICB$S_UO_GETCONTEXT 8 #define LIBICB$PH_UO_GETCONTEXT 2008 /* Pointer to user "get Initial Context" routine */ #define LIBICB$S_UO_WRITE_MEM 8 #define LIBICB$PH_UO_WRITE_MEM 2016 /* Pointer to user "put memory" routine */ #define LIBICB$S_UO_WRITE_REG 8 #define LIBICB$PH_UO_WRITE_REG 2024 /* Pointer to user "put register" routine */ #define LIBICB$S_UO_MALLOC 8 #define LIBICB$PH_UO_MALLOC 2032 /* Pointer to user "malloc" routine */ #define LIBICB$S_UO_FREE 8 #define LIBICB$PH_UO_FREE 2040 /* Pointer to user "free" routine */ #define LIBICB$S_UO_ACTION_ROUTINE 8 #define LIBICB$PH_UO_ACTION_ROUTINE 2048 /* Pointer to user "action" routine - actions */ /* are defined by "action codes" (see below). */ #define LIBICB$S_spare_10 8 #define LIBICB$ih_spare_10 2056 /* ******* End of User Override area *************************** */ /* the following locations are used internally, and should not be */ /* modified by the user */ #define LIBICB$S_most_recent_context 8 #define LIBICB$ph_most_recent_context 2064 /* Most recent user context used */ #define LIBICB$l_internal_flags 2072 /* internal operational flags */ #define LIBICB$v_using_client_memread 0 #define LIBICB$S_my_mode 2 #define LIBICB$v_my_mode 1 #define LIBICB$l_interface_state 2076 /* enum InterfaceUsageState */ #define LIBICB$l_ip_source 2080 /* enum IP_SOURCE */ /* The alert code can be examined to a more detailed failure status */ #define LIBICB$L_ALERT_CODE 2084 /* enum _UNW_ReturnCode */ #define LIBICB$S_spare_11 8 #define LIBICB$ih_spare_11 2088 /* the operating system. It's size may vary over time. */ #define LIBICB$S_SYSTEM_DEFINED 16 #define LIBICB$IH_SYSTEM_DEFINED 2096 /* */ /* Action codes are passed as the first parameter to the UO_ACTION_ROUTINE to indicate */ /* an action to be performed. The remaining parameters to the action routine are action */ /* dependent, and usually include the ident value as the last parameter. */ /* */ /* Action routine prototype: */ /* */ /* uint64 return_value = action_routine (enum action_code code, ..., uint64 ident); */ /* */ /* A return_value of ACTION_USE_DEFAULT indicates that the action was not performed */ /* and the calling standard routines should fall back to "default" processing. */ /* Other return values are action dependent. */ /* */ /* Write Register callback routine - WhichReg enum. */ /* */ /* The Write Register callback routine is only used when a live */ /* register in another (remote) process needs to be written as */ /* a result of a call to LIB$I64_PUT_INVO_REGISTERS. */ /* It is permissible to implement a subset of these registers, */ /* or not implement it at all if you are sure that these registers */ /* have been saved to memory before PUT_INVO is called */ /* */ /* For the General Registers: */ /* whichReg = LIBICB$K_WhichReg_GR0 + register number */ /* value_1 = 64-bit register value */ /* value_2 = 0, or 1 for NaT bit value */ /* */ #define LIBICB$K_WhichReg_GR0 0 /* */ /* For the Floating Registers: */ /* whichReg = LIBICB$K_WhichReg_FR0 + floating register number */ /* value_1 = 64-bit lower floating fill value */ /* value_2 = 64-bit upper floating fill value */ /* */ #define LIBICB$K_WhichReg_FR0 128 /* */ /* For the Predicate Registers: */ /* whichReg = LIBICB$K_WhichReg_PR0 + predicate register number */ /* value_1 = 0, or 1 rgister (bit) value */ /* value_2 = ignored */ /* */ #define LIBICB$K_WhichReg_PR0 256 /* */ /* For the Branch Registers: */ /* whichReg = LIBICB$K_WhichReg_BR0 + branch register number */ /* value_1 = 64-bit register value */ /* value_2 = ignored */ /* */ #define LIBICB$K_WhichReg_BR0 320 /* */ /* For the Floating Point Status Register: */ /* whichReg = LIBICB$K_WhichReg_FPSR */ /* value_1 = 64-bit register value */ /* value_2 = ignored */ /* */ #define LIBICB$K_WhichReg_FPSR 328 /* $DEFEND LIBICB,$GBL,DEF */ /* .ENDM */ /* IA64 assembler header ends here */ #else /* IAS_ASSEMBLER */ /* CC header begins here */ /********************************************************************************************************************************/ /* Created: 9-Mar-2021 22:28:03 by OpenVMS SDL EV3-3 */ /* Source: 09-MAR-2021 22:28:01 $1$DGA8085:[STARLET_H.SRC]LIBICB.SDI;1 */ /********************************************************************************************************************************/ /*** MODULE LIBICB IDENT V2.0 ***/ #ifndef __LIBICB_LOADED #define __LIBICB_LOADED 1 #pragma __nostandard /* This file uses non-ANSI-Standard features */ #pragma __member_alignment __save #pragma __nomember_alignment #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __save /* Save the previously-defined required ptr size */ #pragma __required_pointer_size __short /* And set ptr size default to 32-bit pointers */ #endif #ifdef __cplusplus extern "C" { #define __unknown_params ... #define __optional_params ... #else #define __unknown_params #define __optional_params ... #endif #ifndef __struct #if !defined(__VAXC) #define __struct struct #else #define __struct variant_struct #endif #endif #ifndef __union #if !defined(__VAXC) #define __union union #else #define __union variant_union #endif #endif #define LIB$K_PROC_VALUE_NULL 0 #define LIB$K_INVO_HANDLE_NULL 0 #define LIBICB$K_INVO_HANDLE_SIZE 8 #define LIBICB$K_INVO_CONTEXT_VERSION 2 /* The header quadword contains: */ #define LIBICB$M_FFLAGS_BITS 0xFFFFFF #define LIBICB$M_BOTTOM_OF_STACK 0x1 #define LIBICB$M_HANDLER_PRESENT 0x2 #define LIBICB$M_IN_PROLOGUE 0x4 #define LIBICB$M_IN_EPILOGUE 0x8 #define LIBICB$M_HAS_MEM_STK_FRAME 0x10 #define LIBICB$M_HAS_REG_STK_FRAME 0x20 #define LIBICB$K_INVO_CONTEXT_T_LENGTH 1888 #define LIBICB$K_SDA_COPY_LENGTH 1960 #define LIBICB$M_UO_FLAG_CACHE_UNWIND 0x1 #define LIBICB$M_UO_FLAG_EMULATION_MODE 0x2 #define LIBICB$K_UO_LENGTH 88 /* */ #define LIBICB$M_USING_CLIENT_MEMREAD 0x1 #define LIBICB$M_MY_MODE 0x6 #define LIBICB$K_CONTEXT_BLK_SIZE 2080 /* The following is an "internal" area that's reserved for use by */ #define LIBICB$K_REGION_BLK_SIZE 1096 #define LIBICB$K_REGIONLABEL_BLK_SIZE 32 #define LIBICB$K_DESCRIPTOR_BLK_SIZE 1280 /* Action codes: */ #define LIBICB$K_ACTION_KP_FIND_UNWIND 1 /* override call to exe$kp_find_unwind_context */ /* prototype: */ /* uint64 sp = action_routine (enum action_code code, uint64 sp, uint64 ident); */ #define LIBICB$K_ACTION_USE_DEFAULT -1 /* action routine return value to "use default" */ /* Alert codes: (matches _UNW_ReturnCode enum in unwind.h) */ #define LIBICB$K_AC_STEP_KRNL_SAV_STATE -2 /* _UNW_STEP_KERNEL_SAVE_STATE = -2 */ #define LIBICB$K_AC_STEP_BOTTOM -1 /* _UNW_STEP_BOTTOM */ #define LIBICB$K_AC_OK 0 /* _UNW_OK = 0 */ #define LIBICB$K_AC_STEP_ERROR 1 /* _UNW_STEP_ERROR */ #define LIBICB$K_AC_STEP_INVALID_IP 2 /* _UNW_STEP_INVALID_IP */ #define LIBICB$K_AC_STEP_INVALID_SP 3 /* _UNW_STEP_INVALID_SP */ #define LIBICB$K_AC_STEP_INVALID_GR 4 /* _UNW_STEP_INVALID_GR */ #define LIBICB$K_AC_STEP_INVALID_PFS 5 /* _UNW_STEP_INVALID_PFS */ #define LIBICB$K_AC_STEP_INVALID_RSC 6 /* _UNW_STEP_INVALID_RSC */ #define LIBICB$K_AC_STEP_INVALID_BSP 7 /* _UNW_STEP_INVALID_BSP */ #define LIBICB$K_AC_STEP_INV_BSPSTORE 8 /* _UNW_STEP_INVALID_BSPSTORE */ #define LIBICB$K_AC_STEP_INVALID_CFM 9 /* _UNW_STEP_INVALID_CFM */ #define LIBICB$K_AC_STEP_INVALID_BR 10 /* _UNW_STEP_INVALID_BR */ #define LIBICB$K_AC_STEP_BAD_BSP_ALIGN 11 /* _UNW_STEP_BAD_BSP_ALIGNMENT */ #define LIBICB$K_AC_STEP_INVALID_RNAT 12 /* _UNW_STEP_INVALID_RNAT */ #define LIBICB$K_AC_STEP_NODSC4_NONLEAF 13 /* _UNW_STEP_NO_DESCRIPTOR_FOR_NON_LEAF */ #define LIBICB$K_AC_STEP_CORRUPT_DESC 14 /* _UNW_STEP_CORRUPT_DESCRIPTOR */ #define LIBICB$K_AC_STEP_RSE_NOT_FLUSHD 15 /* _UNW_STEP_RSE_NOT_FLUSHED */ #define LIBICB$K_AC_STEP_SIGNAL_CONTEXT 16 /* _UNW_STEP_SIGNAL_CONTEXT */ #define LIBICB$K_AC_STEP_BAD_STATE 17 /* _UNW_STEP_NOT_ALLOWED_IN_STATE */ #define LIBICB$K_AC_INIT_RANGE_ERROR 18 /* _UNW_INITIALIZATION_RANGE_ERROR */ #define LIBICB$K_AC_QUERY_RANGE_ERROR 19 /* _UNW_QUERY_RANGE_ERROR */ #define LIBICB$K_AC_QUERY_INVALID_ERROR 20 /* _UNW_QUERY_INVALID_ERROR */ #define LIBICB$K_AC_SET_BAD_STATE 21 /* _UNW_SET_NOT_ALLOWED_IN_STATE */ #define LIBICB$K_AC_CURR_CTXT_FAILED 22 /* _UNW_CURRENT_CONTEXT_FAILED */ #define LIBICB$K_AC_CURR_CTXT_BAD_STATE 23 /* _UNW_CURRENT_CONTEXT_NOT_ALLOWED_IN_STATE */ #define LIBICB$K_AC_MEMORY_ALLOC_ERROR 24 /* _UNW_MEMORY_ALLOCATION_ERROR */ #define LIBICB$K_AC_CLEAR_BAD_STATE 25 /* _UNW_CLEAR_NOT_ALLOWED_IN_STATE */ #define LIBICB$K_AC_QUERY_BAD_STATE 26 /* _UNW_QUERY_NOT_ALLOWED_IN_STATE */ #define LIBICB$K_AC_INTERNAL_ERROR 27 /* _UNW_INTERNAL_ERROR */ #define LIBICB$K_AC_STEP_I_ABI_MISMATCH 28 /* _UNW_STEP_INTERRUPTION_ABI_MISMATCH */ #define LIBICB$K_AC_UNALIGNED_ICB 29 /* _UNW_UNALIGNED_ICB */ #define LIBICB$K_AC_READ_MEM_FAILURE 30 /* _UNW_READ_MEMORY_FAILURE */ #define LIBICB$K_AC_WRITE_MEM_FAILURE 31 /* _UNW_WRITE_MEMORY_FAILURE */ #define LIBICB$K_AC_WRITE_REG_FAILURE 32 /* _UNW_WRITE_REGISTER_FAILURE */ #define LIBICB$K_AC_UO_INCON_CALLBACK 33 /* _UNW_USER_OVERRIDE_INCONSISTENT_CALLBACK_PARAM */ #define LIBICB$K_AC_PUT_REG_INVALID 34 /* _UNW_PUT_REGISTER_INVALID */ #define LIBICB$K_INVO_CONTEXT_BLK_SIZE 2112 #ifdef __NEW_STARLET #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __octaword #else #pragma __nomember_alignment #endif typedef struct _invo_context_blk { /* */ /* The length of the structure in bytes (a longword field), */ /* The frame flags (a 3 byte field of bits), and */ /* The version number (a 1 byte field) */ #pragma __nomember_alignment __union { __int64 libicb$ih_header; /* Header (length, flags, version) */ __struct { unsigned int libicb$l_context_length; __union { unsigned libicb$v_fflags_bits : 24; __struct { unsigned libicb$v_bottom_of_stack : 1; unsigned libicb$v_handler_present : 1; unsigned libicb$v_in_prologue : 1; unsigned libicb$v_in_epilogue : 1; unsigned libicb$v_has_mem_stk_frame : 1; unsigned libicb$v_has_reg_stk_frame : 1; unsigned libicb$v_fill_0_ : 2; } libicb$r_fflags_desc; } libicb$r_frameflags; unsigned char libicb$b_block_version; } libicb$r_hdr_desc; } libicb$r_hdr; __int64 libicb$ih_spare_01; /* Start of context_t must be octaword aligned */ /****** Start of context_t ****************** */ /* */ /* a context_t structure should be octaword (16-byte) aligned, and is passed by */ /* reference to the "get initial context" callback routine and establishes */ /* the "current" state of the machine and forms the inital context for for unwinding. */ /* */ __union { __int64 libicb$ih_ireg [128]; /* General (integer) Registers */ /* 32 static registers, plus */ /* up to 96 stacked/rotating registers */ __struct { __int64 libicb$ih_i_used0; /* R0 */ __int64 libicb$ih_gp; /* synonym for R1 (Global Data Pointer) */ __int64 libicb$ih_i_used1 [10]; /* R2 - R11 */ __int64 libicb$ih_sp; /* synonym for R12 (Memory Stack Pointer) */ __int64 libicb$ih_tp; /* synonym for R13 (Thread Pointer) */ __int64 libicb$ih_i_used2 [11]; /* R14 - R24 */ __int64 libicb$ih_ai; /* synonym for R25 (Argument Information register) */ __int64 libicb$ih_i_used3 [102]; /* R26 - R127 */ } libicb$r_i_overlay; } libicb$r_i_reg; __int64 libicb$ih_grnat [2]; /* General Register NaT Collection Registers */ int libicb$fo_f2_f31 [30] [4]; /* Floating Point Registers. */ /* 32 static floating point registers. */ /* Floating Point Registers are 82 bits wide */ /* but stored here in octawords. */ #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ void *libicb$ph_f32_f127; /* Pointer to upper Floating Register save */ #else unsigned __int64 libicb$ph_f32_f127; #endif /* area. Zero if not saved. */ __int64 libicb$ih_branch [8]; /* Branch Registers */ /* Application Registers (ARs) */ /* */ __int64 libicb$ih_rsc; /* Register Stack Configuration Register */ __int64 libicb$ih_bsp; /* Backing store pointer */ __int64 libicb$ih_bspstore; /* Backing store write pointer */ __int64 libicb$ih_rnat; /* RSE NaT Collection Register */ __int64 libicb$ih_ccv; /* Compare & Exchange Value Register */ __int64 libicb$ih_unat; /* User NaT Collection Register */ __int64 libicb$fh_fpsr; /* OBSOLETE - do not rely on the contents of this field. */ __int64 libicb$ih_pfs; /* Previous Function State */ __int64 libicb$ih_lc; /* Loop Count Register */ __int64 libicb$ih_ec; /* Epilogue Count Register */ __int64 libicb$ih_csd; /* Copy of AR.CSD */ __int64 libicb$ih_ssd; /* Copy of AR.SSD */ /* */ /* End ARs */ __int64 libicb$q_pred; /* Predicate Collection Register, PR0-PR63 */ __int64 libicb$ih_pc; /* Current PC (Instruction Pointer + slot) */ __union { __int64 libicb$ih_cfm; /* Current Frame Marker */ __struct { unsigned libicb$v_sof : 7; /* Size of stack frame */ unsigned libicb$v_sol : 7; /* Size of locals portion of stack frame */ unsigned libicb$v_sor : 4; /* Size of rotating portion of stack frame */ unsigned libicb$v_rrb_gr : 7; /* Register Rename Base for General Registers */ unsigned libicb$v_rrb_fr : 7; /* Register Rename Base for Floating-point Registers */ unsigned libicb$v_rrb_pr : 6; /* Register Rename Base for Predicate Registers */ unsigned libicb$v_fill_1_ : 2; } libicb$r_cfm_s; } libicb$r_cfm_u; __union { __int64 libicb$ih_um; /* User Mask bits of the PSR. */ __struct { unsigned libicb$v_rv : 1; /* Reserved */ unsigned libicb$v_be : 1; /* Big-endian memory access enable */ unsigned libicb$v_up : 1; /* User performance monitor enable */ unsigned libicb$v_ac : 1; /* Alignment check data memory references */ unsigned libicb$v_mfl : 1; /* Lower (F2-F31) Floating-point registers written */ unsigned libicb$v_mfh : 1; /* Upper (F32-F127) Floating-point registers written */ unsigned libicb$v_fill_2_ : 2; } libicb$r_um_s; } libicb$r_um_u; __int64 libicb$ih_next_bsp; /* Next frame's Backing Store Pointer (Internal use) */ __int64 libicb$ih_next_pfs; /* Next frame's Previous Frame State (Internal use) */ /* The following two locations are used when walking from an inner */ /* mode stack to an outer mode and context has been saved in a INTSK structure, */ /* but the outer mode stacked registers have bee saved on the inner mode RSE backing store. */ /* */ __int64 libicb$ih_bspbase; /* Base for outer mode stacked registers saved in */ /* inner mode RSE backing store (Internal use) */ __int64 libicb$ih_intstk_rnat; /* RNAT as saved in INTSTK (Internal use) */ /* the following "valid" bitmasks are used to record the validity */ /* of a given register for this context */ int libicb$o_gr_valid [4]; /* General Register validity mask */ int libicb$l_fr_valid; /* F2 - F31 validity mask (bit 2 for F2) */ int libicb$l_fr_valid_fill; __int64 libicb$q_br_valid; /* Branch Register validity mask */ __union { __int64 libicb$q_ar_valid; /* Application Register validity mask */ __struct { unsigned libicb$v_rsc_valid : 1; /* Register Stack Configuration Register */ unsigned libicb$v_bsp_valid : 1; /* Backing store pointer */ unsigned libicb$v_bspstore_valid : 1; /* Backing store write pointer */ unsigned libicb$v_rnat_valid : 1; /* RSE NaT Collection Register */ unsigned libicb$v_ccv_valid : 1; /* Compare & Exchange Value Register */ unsigned libicb$v_unat_valid : 1; /* User NaT Collection Register */ unsigned libicb$v_fpsr_valid : 1; /* Floating Point Status Register. */ unsigned libicb$v_pfs_valid : 1; /* Previous Function State */ unsigned libicb$v_lc_valid : 1; /* Loop Count Register */ unsigned libicb$v_ec_valid : 1; /* Epilogue Count Register */ unsigned libicb$v_csd_valid : 1; /* Copy of AR.CSD */ unsigned libicb$v_ssd_valid : 1; /* Copy of AR.SSD */ unsigned libicb$v_fill_3_ : 4; } libicb$r_ar_valid_s; } libicb$r_ar_valid_u; __union { __int64 libicb$q_other_valid; /* PC, CFM validity mask */ __struct { unsigned libicb$v_pc_valid : 1; /* Current PC */ unsigned libicb$v_cfm_valid : 1; /* Current Frame Marker */ unsigned libicb$v_um_valid : 1; /* User Mask field of PSR. */ unsigned libicb$v_fill_4_ : 5; } libicb$r_other_valid_s; } libicb$r_other_valid_u; __int64 libicb$q_pr_valid; /* Predicate Register validity mask */ __int64 libicb$ih_original_spill_addr; /* Original address of GR spill area (&LIBICB$IH_IREG[0]) */ /* (needed for NaT bit podition calculations) */ __int64 libicb$ih_true_psp; /* True Previous SP (for Invo Handle) */ __int64 libicb$ih_spare_03; __int64 libicb$ih_spare_04; __int64 libicb$ih_spare_05; __int64 libicb$ih_spare_06; __int64 libicb$ih_spare_07; __int64 libicb$ih_spare_08; /* */ /******** End of context_t structure ********************* */ __int64 libicb$ih_psp; /* SP at entry to routine (Previous SP) */ __int64 libicb$ih_psp_valid; /* PreviousSP valid */ __int64 libicb$ih_return_pc; /* Return PC for SDA. */ __int64 libicb$ih_prev_bsp; /* BSP of preceding frame for SDA. */ #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ void *libicb$ph_chfctx_addr; /* Pointer to condition handler facility context block */ #else unsigned __int64 libicb$ph_chfctx_addr; #endif #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ void *libicb$ph_other; /* Pointer to other interesting structure (if any) */ #else unsigned __int64 libicb$ph_other; #endif __int64 libicb$ih_ossd; /* Copy of OSSD from Unwind Information Block */ __int64 libicb$ih_handler_fv; /* Condition Handler Function Value */ #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ void *libicb$ph_lsda; /* Virtual Address of LSD area of UIB */ #else unsigned __int64 libicb$ph_lsda; #endif #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ void *libicb$ph_desc; /* Pointer to _Unwind_Descriptor structure (Internal use) */ #else unsigned __int64 libicb$ph_desc; #endif #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ void *libicb$ph_history; /* Pointer to _Unwind_History structure (Internal use) */ #else unsigned __int64 libicb$ph_history; #endif /******** Start of User Override ************************* */ /* */ /* The following locations can be used to alter the default behavior */ /* Typically this would be used for cross-process unwinding, and */ /* specifying an alternative memory allocation scheme. */ __union { int libicb$r_uo_base; /* base of User Override area */ __int64 libicb$q_uo_flags; /* operational flags */ __struct { unsigned libicb$v_uo_flag_cache_unwind : 1; /* cache unwind information between calls */ /* for effiecient stack walk. */ unsigned libicb$v_uo_flag_emulation_mode : 1; /* Internal use only */ unsigned libicb$v_fill_5_ : 6; } libicb$r_uo_flag_bits; } libicb$r_op_flags; __int64 libicb$ih_uo_ident; /* user context variable, passed by value */ /* to the following callback routines. */ #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ void *libicb$ph_uo_read_mem; /* Pointer to user "read memory" routine */ #else unsigned __int64 libicb$ph_uo_read_mem; #endif #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ void *libicb$ph_uo_getueinfo; /* Pointer to user "get Unwind Entry Information" routine */ #else unsigned __int64 libicb$ph_uo_getueinfo; #endif #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ void *libicb$ph_uo_getcontext; /* Pointer to user "get Initial Context" routine */ #else unsigned __int64 libicb$ph_uo_getcontext; #endif #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ void *libicb$ph_uo_write_mem; /* Pointer to user "put memory" routine */ #else unsigned __int64 libicb$ph_uo_write_mem; #endif #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ void *libicb$ph_uo_write_reg; /* Pointer to user "put register" routine */ #else unsigned __int64 libicb$ph_uo_write_reg; #endif #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ void *libicb$ph_uo_malloc; /* Pointer to user "malloc" routine */ #else unsigned __int64 libicb$ph_uo_malloc; #endif #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ void *libicb$ph_uo_free; /* Pointer to user "free" routine */ #else unsigned __int64 libicb$ph_uo_free; #endif #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ void *libicb$ph_uo_action_routine; /* Pointer to user "action" routine - actions */ #else unsigned __int64 libicb$ph_uo_action_routine; #endif /* are defined by "action codes" (see below). */ __int64 libicb$ih_spare_10; /******** End of User Override area *************************** */ /* the following locations are used internally, and should not be */ /* modified by the user */ #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ void *libicb$ph_most_recent_context; /* Most recent user context used */ #else unsigned __int64 libicb$ph_most_recent_context; #endif __union { int libicb$l_internal_flags; /* internal operational flags */ __struct { unsigned libicb$v_using_client_memread : 1; unsigned libicb$v_my_mode : 2; unsigned libicb$v_fill_6_ : 5; } libicb$r_int_flag_bits; } libicb$r_int_flags; int libicb$l_interface_state; /* enum InterfaceUsageState */ int libicb$l_ip_source; /* enum IP_SOURCE */ /* The alert code can be examined to a more detailed failure status */ int libicb$l_alert_code; /* enum _UNW_ReturnCode */ __int64 libicb$ih_spare_11; /* the operating system. It's size may vary over time. */ __int64 libicb$ih_system_defined [2]; /* */ /* Action codes are passed as the first parameter to the UO_ACTION_ROUTINE to indicate */ /* an action to be performed. The remaining parameters to the action routine are action */ /* dependent, and usually include the ident value as the last parameter. */ /* */ /* Action routine prototype: */ /* */ /* uint64 return_value = action_routine (enum action_code code, ..., uint64 ident); */ /* */ /* A return_value of ACTION_USE_DEFAULT indicates that the action was not performed */ /* and the calling standard routines should fall back to "default" processing. */ /* Other return values are action dependent. */ /* */ } INVO_CONTEXT_BLK; #if !defined(__VAXC) #define libicb$ih_header libicb$r_hdr.libicb$ih_header #define libicb$l_context_length libicb$r_hdr.libicb$r_hdr_desc.libicb$l_context_length #define libicb$r_frameflags libicb$r_hdr.libicb$r_hdr_desc.libicb$r_frameflags #define libicb$v_fflags_bits libicb$r_frameflags.libicb$v_fflags_bits #define libicb$v_bottom_of_stack libicb$r_frameflags.libicb$r_fflags_desc.libicb$v_bottom_of_stack #define libicb$v_handler_present libicb$r_frameflags.libicb$r_fflags_desc.libicb$v_handler_present #define libicb$v_in_prologue libicb$r_frameflags.libicb$r_fflags_desc.libicb$v_in_prologue #define libicb$v_in_epilogue libicb$r_frameflags.libicb$r_fflags_desc.libicb$v_in_epilogue #define libicb$v_has_mem_stk_frame libicb$r_frameflags.libicb$r_fflags_desc.libicb$v_has_mem_stk_frame #define libicb$v_has_reg_stk_frame libicb$r_frameflags.libicb$r_fflags_desc.libicb$v_has_reg_stk_frame #define libicb$b_block_version libicb$r_hdr.libicb$r_hdr_desc.libicb$b_block_version #define libicb$ih_ireg libicb$r_i_reg.libicb$ih_ireg #define libicb$ih_i_used0 libicb$r_i_reg.libicb$r_i_overlay.libicb$ih_i_used0 #define libicb$ih_gp libicb$r_i_reg.libicb$r_i_overlay.libicb$ih_gp #define libicb$ih_sp libicb$r_i_reg.libicb$r_i_overlay.libicb$ih_sp #define libicb$ih_tp libicb$r_i_reg.libicb$r_i_overlay.libicb$ih_tp #define libicb$ih_ai libicb$r_i_reg.libicb$r_i_overlay.libicb$ih_ai #define libicb$ih_cfm libicb$r_cfm_u.libicb$ih_cfm #define libicb$v_sof libicb$r_cfm_u.libicb$r_cfm_s.libicb$v_sof #define libicb$v_sol libicb$r_cfm_u.libicb$r_cfm_s.libicb$v_sol #define libicb$v_sor libicb$r_cfm_u.libicb$r_cfm_s.libicb$v_sor #define libicb$v_rrb_gr libicb$r_cfm_u.libicb$r_cfm_s.libicb$v_rrb_gr #define libicb$v_rrb_fr libicb$r_cfm_u.libicb$r_cfm_s.libicb$v_rrb_fr #define libicb$v_rrb_pr libicb$r_cfm_u.libicb$r_cfm_s.libicb$v_rrb_pr #define libicb$ih_um libicb$r_um_u.libicb$ih_um #define libicb$v_be libicb$r_um_u.libicb$r_um_s.libicb$v_be #define libicb$v_up libicb$r_um_u.libicb$r_um_s.libicb$v_up #define libicb$v_ac libicb$r_um_u.libicb$r_um_s.libicb$v_ac #define libicb$v_mfl libicb$r_um_u.libicb$r_um_s.libicb$v_mfl #define libicb$v_mfh libicb$r_um_u.libicb$r_um_s.libicb$v_mfh #define libicb$q_ar_valid libicb$r_ar_valid_u.libicb$q_ar_valid #define libicb$v_rsc_valid libicb$r_ar_valid_u.libicb$r_ar_valid_s.libicb$v_rsc_valid #define libicb$v_bsp_valid libicb$r_ar_valid_u.libicb$r_ar_valid_s.libicb$v_bsp_valid #define libicb$v_bspstore_valid libicb$r_ar_valid_u.libicb$r_ar_valid_s.libicb$v_bspstore_valid #define libicb$v_rnat_valid libicb$r_ar_valid_u.libicb$r_ar_valid_s.libicb$v_rnat_valid #define libicb$v_ccv_valid libicb$r_ar_valid_u.libicb$r_ar_valid_s.libicb$v_ccv_valid #define libicb$v_unat_valid libicb$r_ar_valid_u.libicb$r_ar_valid_s.libicb$v_unat_valid #define libicb$v_fpsr_valid libicb$r_ar_valid_u.libicb$r_ar_valid_s.libicb$v_fpsr_valid #define libicb$v_pfs_valid libicb$r_ar_valid_u.libicb$r_ar_valid_s.libicb$v_pfs_valid #define libicb$v_lc_valid libicb$r_ar_valid_u.libicb$r_ar_valid_s.libicb$v_lc_valid #define libicb$v_ec_valid libicb$r_ar_valid_u.libicb$r_ar_valid_s.libicb$v_ec_valid #define libicb$v_csd_valid libicb$r_ar_valid_u.libicb$r_ar_valid_s.libicb$v_csd_valid #define libicb$v_ssd_valid libicb$r_ar_valid_u.libicb$r_ar_valid_s.libicb$v_ssd_valid #define libicb$q_other_valid libicb$r_other_valid_u.libicb$q_other_valid #define libicb$v_pc_valid libicb$r_other_valid_u.libicb$r_other_valid_s.libicb$v_pc_valid #define libicb$v_cfm_valid libicb$r_other_valid_u.libicb$r_other_valid_s.libicb$v_cfm_valid #define libicb$v_um_valid libicb$r_other_valid_u.libicb$r_other_valid_s.libicb$v_um_valid #define libicb$r_uo_base libicb$r_op_flags.libicb$r_uo_base #define libicb$q_uo_flags libicb$r_op_flags.libicb$q_uo_flags #define libicb$v_uo_flag_cache_unwind libicb$r_op_flags.libicb$r_uo_flag_bits.libicb$v_uo_flag_cache_unwind #define libicb$v_uo_flag_emulation_mode libicb$r_op_flags.libicb$r_uo_flag_bits.libicb$v_uo_flag_emulation_mode #define libicb$l_internal_flags libicb$r_int_flags.libicb$l_internal_flags #define libicb$v_using_client_memread libicb$r_int_flags.libicb$r_int_flag_bits.libicb$v_using_client_memread #define libicb$v_my_mode libicb$r_int_flags.libicb$r_int_flag_bits.libicb$v_my_mode #endif /* #if !defined(__VAXC) */ #else /* __OLD_STARLET */ #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __octaword #else #pragma __nomember_alignment #endif struct invo_context_blk { /* */ /* The length of the structure in bytes (a longword field), */ /* The frame flags (a 3 byte field of bits), and */ /* The version number (a 1 byte field) */ #pragma __nomember_alignment __union { __int64 libicb$ih_header; /* Header (length, flags, version) */ __struct { unsigned int libicb$l_context_length; __union { unsigned libicb$v_fflags_bits : 24; __struct { unsigned libicb$v_bottom_of_stack : 1; unsigned libicb$v_handler_present : 1; unsigned libicb$v_in_prologue : 1; unsigned libicb$v_in_epilogue : 1; unsigned libicb$v_has_mem_stk_frame : 1; unsigned libicb$v_has_reg_stk_frame : 1; unsigned libicb$v_fill_0_ : 2; } libicb$r_fflags_desc; } libicb$r_frameflags; unsigned char libicb$b_block_version; } libicb$r_hdr_desc; } libicb$r_hdr; __int64 libicb$ih_spare_01; /* Start of context_t must be octaword aligned */ /****** Start of context_t ****************** */ /* */ /* a context_t structure should be octaword (16-byte) aligned, and is passed by */ /* reference to the "get initial context" callback routine and establishes */ /* the "current" state of the machine and forms the inital context for for unwinding. */ /* */ __union { __int64 libicb$ih_ireg [128]; /* General (integer) Registers */ /* 32 static registers, plus */ /* up to 96 stacked/rotating registers */ __struct { __int64 libicb$ih_i_used0; /* R0 */ __int64 libicb$ih_gp; /* synonym for R1 (Global Data Pointer) */ __int64 libicb$ih_i_used1 [10]; /* R2 - R11 */ __int64 libicb$ih_sp; /* synonym for R12 (Memory Stack Pointer) */ __int64 libicb$ih_tp; /* synonym for R13 (Thread Pointer) */ __int64 libicb$ih_i_used2 [11]; /* R14 - R24 */ __int64 libicb$ih_ai; /* synonym for R25 (Argument Information register) */ __int64 libicb$ih_i_used3 [102]; /* R26 - R127 */ } libicb$r_i_overlay; } libicb$r_i_reg; __int64 libicb$ih_grnat [2]; /* General Register NaT Collection Registers */ int libicb$fo_f2_f31 [30] [4]; /* Floating Point Registers. */ /* 32 static floating point registers. */ /* Floating Point Registers are 82 bits wide */ /* but stored here in octawords. */ unsigned __int64 libicb$ph_f32_f127; /* Pointer to upper Floating Register save */ /* area. Zero if not saved. */ __int64 libicb$ih_branch [8]; /* Branch Registers */ /* Application Registers (ARs) */ /* */ __int64 libicb$ih_rsc; /* Register Stack Configuration Register */ __int64 libicb$ih_bsp; /* Backing store pointer */ __int64 libicb$ih_bspstore; /* Backing store write pointer */ __int64 libicb$ih_rnat; /* RSE NaT Collection Register */ __int64 libicb$ih_ccv; /* Compare & Exchange Value Register */ __int64 libicb$ih_unat; /* User NaT Collection Register */ __int64 libicb$fh_fpsr; /* OBSOLETE - do not rely on the contents of this field. */ __int64 libicb$ih_pfs; /* Previous Function State */ __int64 libicb$ih_lc; /* Loop Count Register */ __int64 libicb$ih_ec; /* Epilogue Count Register */ __int64 libicb$ih_csd; /* Copy of AR.CSD */ __int64 libicb$ih_ssd; /* Copy of AR.SSD */ /* */ /* End ARs */ int libicb$q_pred [2]; /* Predicate Collection Register, PR0-PR63 */ __int64 libicb$ih_pc; /* Current PC (Instruction Pointer + slot) */ __union { __int64 libicb$ih_cfm; /* Current Frame Marker */ __struct { unsigned libicb$v_sof : 7; /* Size of stack frame */ unsigned libicb$v_sol : 7; /* Size of locals portion of stack frame */ unsigned libicb$v_sor : 4; /* Size of rotating portion of stack frame */ unsigned libicb$v_rrb_gr : 7; /* Register Rename Base for General Registers */ unsigned libicb$v_rrb_fr : 7; /* Register Rename Base for Floating-point Registers */ unsigned libicb$v_rrb_pr : 6; /* Register Rename Base for Predicate Registers */ unsigned libicb$v_fill_1_ : 2; } libicb$r_cfm_s; } libicb$r_cfm_u; __union { __int64 libicb$ih_um; /* User Mask bits of the PSR. */ __struct { unsigned libicb$v_rv : 1; /* Reserved */ unsigned libicb$v_be : 1; /* Big-endian memory access enable */ unsigned libicb$v_up : 1; /* User performance monitor enable */ unsigned libicb$v_ac : 1; /* Alignment check data memory references */ unsigned libicb$v_mfl : 1; /* Lower (F2-F31) Floating-point registers written */ unsigned libicb$v_mfh : 1; /* Upper (F32-F127) Floating-point registers written */ unsigned libicb$v_fill_2_ : 2; } libicb$r_um_s; } libicb$r_um_u; __int64 libicb$ih_next_bsp; /* Next frame's Backing Store Pointer (Internal use) */ __int64 libicb$ih_next_pfs; /* Next frame's Previous Frame State (Internal use) */ /* The following two locations are used when walking from an inner */ /* mode stack to an outer mode and context has been saved in a INTSK structure, */ /* but the outer mode stacked registers have bee saved on the inner mode RSE backing store. */ /* */ __int64 libicb$ih_bspbase; /* Base for outer mode stacked registers saved in */ /* inner mode RSE backing store (Internal use) */ __int64 libicb$ih_intstk_rnat; /* RNAT as saved in INTSTK (Internal use) */ /* the following "valid" bitmasks are used to record the validity */ /* of a given register for this context */ int libicb$o_gr_valid [4]; /* General Register validity mask */ int libicb$l_fr_valid; /* F2 - F31 validity mask (bit 2 for F2) */ int libicb$l_fr_valid_fill; int libicb$q_br_valid [2]; /* Branch Register validity mask */ __union { int libicb$q_ar_valid [2]; /* Application Register validity mask */ __struct { unsigned libicb$v_rsc_valid : 1; /* Register Stack Configuration Register */ unsigned libicb$v_bsp_valid : 1; /* Backing store pointer */ unsigned libicb$v_bspstore_valid : 1; /* Backing store write pointer */ unsigned libicb$v_rnat_valid : 1; /* RSE NaT Collection Register */ unsigned libicb$v_ccv_valid : 1; /* Compare & Exchange Value Register */ unsigned libicb$v_unat_valid : 1; /* User NaT Collection Register */ unsigned libicb$v_fpsr_valid : 1; /* Floating Point Status Register. */ unsigned libicb$v_pfs_valid : 1; /* Previous Function State */ unsigned libicb$v_lc_valid : 1; /* Loop Count Register */ unsigned libicb$v_ec_valid : 1; /* Epilogue Count Register */ unsigned libicb$v_csd_valid : 1; /* Copy of AR.CSD */ unsigned libicb$v_ssd_valid : 1; /* Copy of AR.SSD */ unsigned libicb$v_fill_3_ : 4; } libicb$r_ar_valid_s; } libicb$r_ar_valid_u; __union { int libicb$q_other_valid [2]; /* PC, CFM validity mask */ __struct { unsigned libicb$v_pc_valid : 1; /* Current PC */ unsigned libicb$v_cfm_valid : 1; /* Current Frame Marker */ unsigned libicb$v_um_valid : 1; /* User Mask field of PSR. */ unsigned libicb$v_fill_4_ : 5; } libicb$r_other_valid_s; } libicb$r_other_valid_u; int libicb$q_pr_valid [2]; /* Predicate Register validity mask */ __int64 libicb$ih_original_spill_addr; /* Original address of GR spill area (&LIBICB$IH_IREG[0]) */ /* (needed for NaT bit podition calculations) */ __int64 libicb$ih_true_psp; /* True Previous SP (for Invo Handle) */ __int64 libicb$ih_spare_03; __int64 libicb$ih_spare_04; __int64 libicb$ih_spare_05; __int64 libicb$ih_spare_06; __int64 libicb$ih_spare_07; __int64 libicb$ih_spare_08; /* */ /******** End of context_t structure ********************* */ __int64 libicb$ih_psp; /* SP at entry to routine (Previous SP) */ __int64 libicb$ih_psp_valid; /* PreviousSP valid */ __int64 libicb$ih_return_pc; /* Return PC for SDA. */ __int64 libicb$ih_prev_bsp; /* BSP of preceding frame for SDA. */ unsigned __int64 libicb$ph_chfctx_addr; /* Pointer to condition handler facility context block */ unsigned __int64 libicb$ph_other; /* Pointer to other interesting structure (if any) */ __int64 libicb$ih_ossd; /* Copy of OSSD from Unwind Information Block */ __int64 libicb$ih_handler_fv; /* Condition Handler Function Value */ unsigned __int64 libicb$ph_lsda; /* Virtual Address of LSD area of UIB */ unsigned __int64 libicb$ph_desc; /* Pointer to _Unwind_Descriptor structure (Internal use) */ unsigned __int64 libicb$ph_history; /* Pointer to _Unwind_History structure (Internal use) */ /******** Start of User Override ************************* */ /* */ /* The following locations can be used to alter the default behavior */ /* Typically this would be used for cross-process unwinding, and */ /* specifying an alternative memory allocation scheme. */ __union { int libicb$r_uo_base; /* base of User Override area */ int libicb$q_uo_flags [2]; /* operational flags */ __struct { unsigned libicb$v_uo_flag_cache_unwind : 1; /* cache unwind information between calls */ /* for effiecient stack walk. */ unsigned libicb$v_uo_flag_emulation_mode : 1; /* Internal use only */ unsigned libicb$v_fill_5_ : 6; } libicb$r_uo_flag_bits; } libicb$r_op_flags; __int64 libicb$ih_uo_ident; /* user context variable, passed by value */ /* to the following callback routines. */ unsigned __int64 libicb$ph_uo_read_mem; /* Pointer to user "read memory" routine */ unsigned __int64 libicb$ph_uo_getueinfo; /* Pointer to user "get Unwind Entry Information" routine */ unsigned __int64 libicb$ph_uo_getcontext; /* Pointer to user "get Initial Context" routine */ unsigned __int64 libicb$ph_uo_write_mem; /* Pointer to user "put memory" routine */ unsigned __int64 libicb$ph_uo_write_reg; /* Pointer to user "put register" routine */ unsigned __int64 libicb$ph_uo_malloc; /* Pointer to user "malloc" routine */ unsigned __int64 libicb$ph_uo_free; /* Pointer to user "free" routine */ unsigned __int64 libicb$ph_uo_action_routine; /* Pointer to user "action" routine - actions */ /* are defined by "action codes" (see below). */ __int64 libicb$ih_spare_10; /******** End of User Override area *************************** */ /* the following locations are used internally, and should not be */ /* modified by the user */ unsigned __int64 libicb$ph_most_recent_context; /* Most recent user context used */ __union { int libicb$l_internal_flags; /* internal operational flags */ __struct { unsigned libicb$v_using_client_memread : 1; unsigned libicb$v_my_mode : 2; unsigned libicb$v_fill_6_ : 5; } libicb$r_int_flag_bits; } libicb$r_int_flags; int libicb$l_interface_state; /* enum InterfaceUsageState */ int libicb$l_ip_source; /* enum IP_SOURCE */ /* The alert code can be examined to a more detailed failure status */ int libicb$l_alert_code; /* enum _UNW_ReturnCode */ __int64 libicb$ih_spare_11; #if defined(__VAXC) char libicb$t_align_2[]; #else /* Warning: empty char[] member for libicb$t_align_2 at end of structure not created */ #endif /* #if defined(__VAXC) */ /* the operating system. It's size may vary over time. */ __int64 libicb$ih_system_defined [2]; /* */ /* Action codes are passed as the first parameter to the UO_ACTION_ROUTINE to indicate */ /* an action to be performed. The remaining parameters to the action routine are action */ /* dependent, and usually include the ident value as the last parameter. */ /* */ /* Action routine prototype: */ /* */ /* uint64 return_value = action_routine (enum action_code code, ..., uint64 ident); */ /* */ /* A return_value of ACTION_USE_DEFAULT indicates that the action was not performed */ /* and the calling standard routines should fall back to "default" processing. */ /* Other return values are action dependent. */ /* */ } ; #if !defined(__VAXC) #define libicb$ih_header libicb$r_hdr.libicb$ih_header #define libicb$l_context_length libicb$r_hdr.libicb$r_hdr_desc.libicb$l_context_length #define libicb$v_fflags_bits libicb$r_hdr.libicb$r_hdr_desc.libicb$r_frameflags.libicb$v_fflags_bits #define libicb$v_bottom_of_stack libicb$r_hdr.libicb$r_hdr_desc.libicb$r_frameflags.libicb$r_fflags_desc.libicb$v_bottom_of_stack #define libicb$v_handler_present libicb$r_hdr.libicb$r_hdr_desc.libicb$r_frameflags.libicb$r_fflags_desc.libicb$v_handler_present #define libicb$v_in_prologue libicb$r_hdr.libicb$r_hdr_desc.libicb$r_frameflags.libicb$r_fflags_desc.libicb$v_in_prologue #define libicb$v_in_epilogue libicb$r_hdr.libicb$r_hdr_desc.libicb$r_frameflags.libicb$r_fflags_desc.libicb$v_in_epilogue #define libicb$v_has_mem_stk_frame libicb$r_hdr.libicb$r_hdr_desc.libicb$r_frameflags.libicb$r_fflags_desc.libicb$v_has_mem_stk_fra\ me #define libicb$v_has_reg_stk_frame libicb$r_hdr.libicb$r_hdr_desc.libicb$r_frameflags.libicb$r_fflags_desc.libicb$v_has_reg_stk_fra\ me #define libicb$b_block_version libicb$r_hdr.libicb$r_hdr_desc.libicb$b_block_version #define libicb$ih_ireg libicb$r_i_reg.libicb$ih_ireg #define libicb$ih_i_used0 libicb$r_i_reg.libicb$r_i_overlay.libicb$ih_i_used0 #define libicb$ih_gp libicb$r_i_reg.libicb$r_i_overlay.libicb$ih_gp #define libicb$ih_sp libicb$r_i_reg.libicb$r_i_overlay.libicb$ih_sp #define libicb$ih_tp libicb$r_i_reg.libicb$r_i_overlay.libicb$ih_tp #define libicb$ih_ai libicb$r_i_reg.libicb$r_i_overlay.libicb$ih_ai #define libicb$ih_cfm libicb$r_cfm_u.libicb$ih_cfm #define libicb$v_sof libicb$r_cfm_u.libicb$r_cfm_s.libicb$v_sof #define libicb$v_sol libicb$r_cfm_u.libicb$r_cfm_s.libicb$v_sol #define libicb$v_sor libicb$r_cfm_u.libicb$r_cfm_s.libicb$v_sor #define libicb$v_rrb_gr libicb$r_cfm_u.libicb$r_cfm_s.libicb$v_rrb_gr #define libicb$v_rrb_fr libicb$r_cfm_u.libicb$r_cfm_s.libicb$v_rrb_fr #define libicb$v_rrb_pr libicb$r_cfm_u.libicb$r_cfm_s.libicb$v_rrb_pr #define libicb$ih_um libicb$r_um_u.libicb$ih_um #define libicb$v_be libicb$r_um_u.libicb$r_um_s.libicb$v_be #define libicb$v_up libicb$r_um_u.libicb$r_um_s.libicb$v_up #define libicb$v_ac libicb$r_um_u.libicb$r_um_s.libicb$v_ac #define libicb$v_mfl libicb$r_um_u.libicb$r_um_s.libicb$v_mfl #define libicb$v_mfh libicb$r_um_u.libicb$r_um_s.libicb$v_mfh #define libicb$q_ar_valid libicb$r_ar_valid_u.libicb$q_ar_valid #define libicb$v_rsc_valid libicb$r_ar_valid_u.libicb$r_ar_valid_s.libicb$v_rsc_valid #define libicb$v_bsp_valid libicb$r_ar_valid_u.libicb$r_ar_valid_s.libicb$v_bsp_valid #define libicb$v_bspstore_valid libicb$r_ar_valid_u.libicb$r_ar_valid_s.libicb$v_bspstore_valid #define libicb$v_rnat_valid libicb$r_ar_valid_u.libicb$r_ar_valid_s.libicb$v_rnat_valid #define libicb$v_ccv_valid libicb$r_ar_valid_u.libicb$r_ar_valid_s.libicb$v_ccv_valid #define libicb$v_unat_valid libicb$r_ar_valid_u.libicb$r_ar_valid_s.libicb$v_unat_valid #define libicb$v_fpsr_valid libicb$r_ar_valid_u.libicb$r_ar_valid_s.libicb$v_fpsr_valid #define libicb$v_pfs_valid libicb$r_ar_valid_u.libicb$r_ar_valid_s.libicb$v_pfs_valid #define libicb$v_lc_valid libicb$r_ar_valid_u.libicb$r_ar_valid_s.libicb$v_lc_valid #define libicb$v_ec_valid libicb$r_ar_valid_u.libicb$r_ar_valid_s.libicb$v_ec_valid #define libicb$v_csd_valid libicb$r_ar_valid_u.libicb$r_ar_valid_s.libicb$v_csd_valid #define libicb$v_ssd_valid libicb$r_ar_valid_u.libicb$r_ar_valid_s.libicb$v_ssd_valid #define libicb$q_other_valid libicb$r_other_valid_u.libicb$q_other_valid #define libicb$v_pc_valid libicb$r_other_valid_u.libicb$r_other_valid_s.libicb$v_pc_valid #define libicb$v_cfm_valid libicb$r_other_valid_u.libicb$r_other_valid_s.libicb$v_cfm_valid #define libicb$v_um_valid libicb$r_other_valid_u.libicb$r_other_valid_s.libicb$v_um_valid #define libicb$r_uo_base libicb$r_op_flags.libicb$r_uo_base #define libicb$q_uo_flags libicb$r_op_flags.libicb$q_uo_flags #define libicb$v_uo_flag_cache_unwind libicb$r_op_flags.libicb$r_uo_flag_bits.libicb$v_uo_flag_cache_unwind #define libicb$v_uo_flag_emulation_mode libicb$r_op_flags.libicb$r_uo_flag_bits.libicb$v_uo_flag_emulation_mode #define libicb$l_internal_flags libicb$r_int_flags.libicb$l_internal_flags #define libicb$v_using_client_memread libicb$r_int_flags.libicb$r_int_flag_bits.libicb$v_using_client_memread #define libicb$v_my_mode libicb$r_int_flags.libicb$r_int_flag_bits.libicb$v_my_mode #endif /* #if !defined(__VAXC) */ #endif /* #ifdef __NEW_STARLET */ /* Write Register callback routine - WhichReg enum. */ /* */ /* The Write Register callback routine is only used when a live */ /* register in another (remote) process needs to be written as */ /* a result of a call to LIB$I64_PUT_INVO_REGISTERS. */ /* It is permissible to implement a subset of these registers, */ /* or not implement it at all if you are sure that these registers */ /* have been saved to memory before PUT_INVO is called */ /* */ /* For the General Registers: */ /* whichReg = LIBICB$K_WhichReg_GR0 + register number */ /* value_1 = 64-bit register value */ /* value_2 = 0, or 1 for NaT bit value */ /* */ #define LIBICB$K_WHICHREG_GR0 0 /* */ /* For the Floating Registers: */ /* whichReg = LIBICB$K_WhichReg_FR0 + floating register number */ /* value_1 = 64-bit lower floating fill value */ /* value_2 = 64-bit upper floating fill value */ /* */ #define LIBICB$K_WHICHREG_FR0 128 /* */ /* For the Predicate Registers: */ /* whichReg = LIBICB$K_WhichReg_PR0 + predicate register number */ /* value_1 = 0, or 1 rgister (bit) value */ /* value_2 = ignored */ /* */ #define LIBICB$K_WHICHREG_PR0 256 /* */ /* For the Branch Registers: */ /* whichReg = LIBICB$K_WhichReg_BR0 + branch register number */ /* value_1 = 64-bit register value */ /* value_2 = ignored */ /* */ #define LIBICB$K_WHICHREG_BR0 320 /* */ /* For the Floating Point Status Register: */ /* whichReg = LIBICB$K_WhichReg_FPSR */ /* value_1 = 64-bit register value */ /* value_2 = ignored */ /* */ #define LIBICB$K_WHICHREG_FPSR 328 #pragma __member_alignment __restore #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __restore /* Restore the previously-defined required ptr size */ #endif #ifdef __cplusplus } #endif #pragma __standard #endif /* __LIBICB_LOADED */ /* CC header ends here */ #endif /* IAS_ASSEMBLER */