/********************************************************************************************************************************/ /* Created: 30-Mar-2010 17:29:50 by OpenVMS SDL EV3-3 */ /* Source: 30-MAR-2010 17:29:21 $1$DGA7274:[STARLET_H.SRC]STARDEFAE.SDI;1 */ /********************************************************************************************************************************/ /*** MODULE $EVAX_INSTRDEF ***/ #ifndef __EVAX_INSTRDEF_LOADED #define __EVAX_INSTRDEF_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 /* */ /* All the different classes of instructions (used to decode). Each different */ /* class has a different printing format. */ /* */ #define EVX$K_IMEMORY 1 #define EVX$K_FMEMORY 2 #define EVX$K_IBRANCH 3 #define EVX$K_FBRANCH 4 #define EVX$K_OPERATE 5 #define EVX$K_FLOAT2 6 #define EVX$K_FLOAT3 7 #define EVX$K_JSR 8 #define EVX$K_RCC 9 #define EVX$K_PAL 10 #define EVX$K_SYNC0 11 #define EVX$K_SYNC1 12 #define EVX$K_FLOATOPER 13 #define EVX$K_OPERFLOAT 14 #define EVX$K_UNKNOWN 15 /* */ /* Codes to refer to the register operand numbers */ /* */ #define EVX$K_R0 0 #define EVX$K_R1 1 #define EVX$K_R2 2 #define EVX$K_R3 3 #define EVX$K_R4 4 #define EVX$K_R5 5 #define EVX$K_R6 6 #define EVX$K_R7 7 #define EVX$K_R8 8 #define EVX$K_R9 9 #define EVX$K_R10 10 #define EVX$K_R11 11 #define EVX$K_R12 12 #define EVX$K_R13 13 #define EVX$K_R14 14 #define EVX$K_R15 15 #define EVX$K_R16 16 #define EVX$K_R17 17 #define EVX$K_R18 18 #define EVX$K_R19 19 #define EVX$K_R20 20 #define EVX$K_R21 21 #define EVX$K_R22 22 #define EVX$K_R23 23 #define EVX$K_R24 24 #define EVX$K_R25 25 #define EVX$K_R26 26 #define EVX$K_R27 27 #define EVX$K_R28 28 #define EVX$K_R29 29 #define EVX$K_R30 30 #define EVX$K_R31 31 #define EVX$K_F0 0 #define EVX$K_F1 1 #define EVX$K_F2 2 #define EVX$K_F3 3 #define EVX$K_F4 4 #define EVX$K_F5 5 #define EVX$K_F6 6 #define EVX$K_F7 7 #define EVX$K_F8 8 #define EVX$K_F9 9 #define EVX$K_F10 10 #define EVX$K_F11 11 #define EVX$K_F12 12 #define EVX$K_F13 13 #define EVX$K_F14 14 #define EVX$K_F15 15 #define EVX$K_F16 16 #define EVX$K_F17 17 #define EVX$K_F18 18 #define EVX$K_F19 19 #define EVX$K_F20 20 #define EVX$K_F21 21 #define EVX$K_F22 22 #define EVX$K_F23 23 #define EVX$K_F24 24 #define EVX$K_F25 25 #define EVX$K_F26 26 #define EVX$K_F27 27 #define EVX$K_F28 28 #define EVX$K_F29 29 #define EVX$K_F30 30 #define EVX$K_F31 31 #define EIF$ZERO_REGISTER 32 /* */ /* The following fields define all the possible instruction formats */ /* */ #ifdef __NEW_STARLET typedef struct _instrdef { __union { unsigned int eif$l_instr; /* Entire instruction */ __struct { signed eif$v_mem_imm : 16; /* Memory displacement */ unsigned eif$v_rb : 5; /* Second register operand */ unsigned eif$v_ra : 5; /* First register operand */ unsigned eif$v_fill_124_ : 6; } eif$r_memory_fields; __struct { signed eif$v_brnch_imm : 21; /* Branch displacement */ unsigned eif$v_fill_125_ : 3; } eif$r_branch_fields; __struct { unsigned eif$v_rc : 5; /* Third register operand */ unsigned eif$v_opr_func : 7; /* Operate sub-opcode */ unsigned eif$v_lit_mode : 1; /* Set if literal mode */ unsigned eif$v_lit_val : 8; /* Literal value */ unsigned eif$v_fill_126_ : 3; } eif$r_operate_fields; __struct { unsigned eif$v_fc : 5; /* Third floating register operand */ unsigned eif$v_flt_func : 11; /* Floating sub-opcode */ unsigned eif$v_fb : 5; /* Second floating register operand */ unsigned eif$v_fa : 5; /* First floating register operand */ unsigned eif$v_fill_127_ : 6; } eif$r_float_fields; __struct { unsigned eif$v_pal_func : 26; /* PAL sub-opcode */ unsigned eif$v_fill_128_ : 6; } eif$r_pal_fields; __struct { unsigned eif$v_sync_func : 16; /* Sync function code */ } eif$r_sync_fields; __struct { unsigned eif$v_fill : 26; unsigned eif$v_opcode : 6; /* Instruction opcode */ } eif$r_opcode_fields; } eif$r_flags_overlay; } INSTRDEF; #if !defined(__VAXC) #define eif$l_instr eif$r_flags_overlay.eif$l_instr #define eif$v_mem_imm eif$r_flags_overlay.eif$r_memory_fields.eif$v_mem_imm #define eif$v_rb eif$r_flags_overlay.eif$r_memory_fields.eif$v_rb #define eif$v_ra eif$r_flags_overlay.eif$r_memory_fields.eif$v_ra #define eif$v_brnch_imm eif$r_flags_overlay.eif$r_branch_fields.eif$v_brnch_imm #define eif$v_rc eif$r_flags_overlay.eif$r_operate_fields.eif$v_rc #define eif$v_opr_func eif$r_flags_overlay.eif$r_operate_fields.eif$v_opr_func #define eif$v_lit_mode eif$r_flags_overlay.eif$r_operate_fields.eif$v_lit_mode #define eif$v_lit_val eif$r_flags_overlay.eif$r_operate_fields.eif$v_lit_val #define eif$v_fc eif$r_flags_overlay.eif$r_float_fields.eif$v_fc #define eif$v_flt_func eif$r_flags_overlay.eif$r_float_fields.eif$v_flt_func #define eif$v_fb eif$r_flags_overlay.eif$r_float_fields.eif$v_fb #define eif$v_fa eif$r_flags_overlay.eif$r_float_fields.eif$v_fa #define eif$v_pal_func eif$r_flags_overlay.eif$r_pal_fields.eif$v_pal_func #define eif$v_sync_func eif$r_flags_overlay.eif$r_sync_fields.eif$v_sync_func #define eif$v_fill eif$r_flags_overlay.eif$r_opcode_fields.eif$v_fill #define eif$v_opcode eif$r_flags_overlay.eif$r_opcode_fields.eif$v_opcode #endif /* #if !defined(__VAXC) */ #else /* __OLD_STARLET */ struct instrdef { __union { unsigned int eif$l_instr; /* Entire instruction */ __struct { signed eif$v_mem_imm : 16; /* Memory displacement */ unsigned eif$v_rb : 5; /* Second register operand */ unsigned eif$v_ra : 5; /* First register operand */ unsigned eif$v_fill_124_ : 6; } eif$r_memory_fields; __struct { signed eif$v_brnch_imm : 21; /* Branch displacement */ unsigned eif$v_fill_125_ : 3; } eif$r_branch_fields; __struct { unsigned eif$v_rc : 5; /* Third register operand */ unsigned eif$v_opr_func : 7; /* Operate sub-opcode */ unsigned eif$v_lit_mode : 1; /* Set if literal mode */ unsigned eif$v_lit_val : 8; /* Literal value */ unsigned eif$v_fill_126_ : 3; } eif$r_operate_fields; __struct { unsigned eif$v_fc : 5; /* Third floating register operand */ unsigned eif$v_flt_func : 11; /* Floating sub-opcode */ unsigned eif$v_fb : 5; /* Second floating register operand */ unsigned eif$v_fa : 5; /* First floating register operand */ unsigned eif$v_fill_127_ : 6; } eif$r_float_fields; __struct { unsigned eif$v_pal_func : 26; /* PAL sub-opcode */ unsigned eif$v_fill_128_ : 6; } eif$r_pal_fields; __struct { unsigned eif$v_sync_func : 16; /* Sync function code */ } eif$r_sync_fields; __struct { unsigned eif$v_fill : 26; unsigned eif$v_opcode : 6; /* Instruction opcode */ } eif$r_opcode_fields; } eif$r_flags_overlay; } ; #if !defined(__VAXC) #define eif$l_instr eif$r_flags_overlay.eif$l_instr #define eif$v_mem_imm eif$r_flags_overlay.eif$r_memory_fields.eif$v_mem_imm #define eif$v_rb eif$r_flags_overlay.eif$r_memory_fields.eif$v_rb #define eif$v_ra eif$r_flags_overlay.eif$r_memory_fields.eif$v_ra #define eif$v_brnch_imm eif$r_flags_overlay.eif$r_branch_fields.eif$v_brnch_imm #define eif$v_rc eif$r_flags_overlay.eif$r_operate_fields.eif$v_rc #define eif$v_opr_func eif$r_flags_overlay.eif$r_operate_fields.eif$v_opr_func #define eif$v_lit_mode eif$r_flags_overlay.eif$r_operate_fields.eif$v_lit_mode #define eif$v_lit_val eif$r_flags_overlay.eif$r_operate_fields.eif$v_lit_val #define eif$v_fc eif$r_flags_overlay.eif$r_float_fields.eif$v_fc #define eif$v_flt_func eif$r_flags_overlay.eif$r_float_fields.eif$v_flt_func #define eif$v_fb eif$r_flags_overlay.eif$r_float_fields.eif$v_fb #define eif$v_fa eif$r_flags_overlay.eif$r_float_fields.eif$v_fa #define eif$v_pal_func eif$r_flags_overlay.eif$r_pal_fields.eif$v_pal_func #define eif$v_sync_func eif$r_flags_overlay.eif$r_sync_fields.eif$v_sync_func #define eif$v_fill eif$r_flags_overlay.eif$r_opcode_fields.eif$v_fill #define eif$v_opcode eif$r_flags_overlay.eif$r_opcode_fields.eif$v_opcode #endif /* #if !defined(__VAXC) */ #endif /* #ifdef __NEW_STARLET */ /* */ /* bounds for the above fields */ /* */ #define EIF$OPC_LOWER_BOUND 0 #define EIF$OPC_UPPER_BOUND 64 #define EIF$OPR_LOWER_BOUND 0 #define EIF$OPR_UPPER_BOUND 128 #define EIF$FLT_LOWER_BOUND 0 #define EIF$FLT_UPPER_BOUND 2048 /* */ /* decode field printing widths */ /* */ #define EIF$MEM_IMM_WIDTH 4 #define EIF$BRNCH_IMM_WIDTH 6 #define EIF$OPR_IMM_WIDTH 2 #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 /* __EVAX_INSTRDEF_LOADED */