Files
org-hyperion-cules/featchk.h

1290 lines
45 KiB
C

/* FEATCHK.H (C) Copyright Jan Jaeger, 2000-2012 */
/* (C) and others 2013-2023 */
/* Feature definition consistency checks */
/* */
/* Released under "The Q Public License Version 1" */
/* (http://www.hercules-390.org/herclic.html) as modifications to */
/* Hercules. */
/*-------------------------------------------------------------------*/
/* Perform various checks on feature combinations, and set */
/* additional flags to percolate certain features such as */
/* SIE down to lower architecture levels such that these */
/* can include emulation support */
/* */
/* FEATURE_XXXX is defined per architecture mode, and */
/* _FEATURE_XXXX is defined for ALL architecture modes when */
/* FEATURE_XXXX is defined for ANY architecture mode. */
/*-------------------------------------------------------------------*/
#if defined( FEATCHK_DO_DEFINES ) // (pass 1: do #defines)
/*-------------------------------------------------------------------*/
/* PASS 1: remember features */
/*-------------------------------------------------------------------*/
/* In this section of code we simply (for ther most part) #define */
/* the underscore '_FEATURE_XXXX' constant if the non-underscored */
/* 'FEATURE_XXX' constant is #defined. This allows us to detect */
/* the need for a given feature if ANY of the build archtectures */
/* should need it. That is to say, if at least ONE of the build */
/* architectures needs support for a given feature, then we must */
/* enable the code that provides support for that feature regard- */
/* less of whether the current build architecture needs it or not. */
/* You should NOT be checking FEATURE combinations here. That is */
/* done during pass 2. You should only be doing #defines here. */
/*-------------------------------------------------------------------*/
/*-------------------------------------------------------------------*/
/* Some FEATUREs force other FEATUREs */
/*-------------------------------------------------------------------*/
#if defined( FEATURE_EXTENDED_STORAGE_KEYS )
#define FEATURE_S370E_EXTENDED_ADDRESSING
#endif
/*-------------------------------------------------------------------*/
/* Some build options override/disable certain FEATUREs */
/*-------------------------------------------------------------------*/
#if defined( NO_IEEE_SUPPORT )
#undef FEATURE_037_FP_EXTENSION_FACILITY
#undef FEATURE_BINARY_FLOATING_POINT
#undef FEATURE_FPS_EXTENSIONS
#endif
/*-------------------------------------------------------------------*/
/* Facility-bit FEATUREs */
/*-------------------------------------------------------------------*/
#if defined( FEATURE_000_N3_INSTR_FACILITY )
#define _FEATURE_000_N3_INSTR_FACILITY
#endif
#if defined( FEATURE_001_ZARCH_INSTALLED_FACILITY )
#define _FEATURE_001_ZARCH_INSTALLED_FACILITY
#endif
#if defined( FEATURE_003_DAT_ENHANCE_FACILITY_1 )
#define _FEATURE_003_DAT_ENHANCE_FACILITY_1
#endif
#if defined( FEATURE_004_IDTE_SC_SEGTAB_FACILITY )
#define _FEATURE_004_IDTE_SC_SEGTAB_FACILITY
#endif
#if defined( FEATURE_005_IDTE_SC_REGTAB_FACILITY )
#define _FEATURE_005_IDTE_SC_REGTAB_FACILITY
#endif
#if defined( FEATURE_006_ASN_LX_REUSE_FACILITY )
#define _FEATURE_006_ASN_LX_REUSE_FACILITY
#endif
#if defined( FEATURE_007_STFL_EXTENDED_FACILITY )
#define _FEATURE_007_STFL_EXTENDED_FACILITY
#endif
#if defined( FEATURE_008_ENHANCED_DAT_FACILITY_1 )
#define _FEATURE_008_ENHANCED_DAT_FACILITY_1
#endif
#if defined( FEATURE_009_SENSE_RUN_STATUS_FACILITY )
#define _FEATURE_009_SENSE_RUN_STATUS_FACILITY
#endif
#if defined( FEATURE_010_CONDITIONAL_SSKE_FACILITY )
#define _FEATURE_010_CONDITIONAL_SSKE_FACILITY
#endif
#if defined( FEATURE_011_CONFIG_TOPOLOGY_FACILITY )
#define _FEATURE_011_CONFIG_TOPOLOGY_FACILITY
#endif
#if defined( FEATURE_013_IPTE_RANGE_FACILITY )
#define _FEATURE_013_IPTE_RANGE_FACILITY
#endif
#if defined( FEATURE_014_NONQ_KEY_SET_FACILITY )
#define _FEATURE_014_NONQ_KEY_SET_FACILITY
#endif
#if defined( FEATURE_016_EXT_TRANSL_FACILITY_2 )
#define _FEATURE_016_EXT_TRANSL_FACILITY_2
#endif
#if defined( FEATURE_017_MSA_FACILITY )
#define _FEATURE_017_MSA_FACILITY
#endif
#if defined( FEATURE_018_LONG_DISPL_INST_FACILITY )
#define _FEATURE_018_LONG_DISPL_INST_FACILITY
#endif
#if defined( FEATURE_019_LONG_DISPL_HPERF_FACILITY )
#define _FEATURE_019_LONG_DISPL_HPERF_FACILITY
#endif
#if defined( FEATURE_020_HFP_MULT_ADD_SUB_FACILITY )
#define _FEATURE_020_HFP_MULT_ADD_SUB_FACILITY
#endif
#if defined( FEATURE_021_EXTENDED_IMMED_FACILITY )
#define _FEATURE_021_EXTENDED_IMMED_FACILITY
#endif
#if defined( FEATURE_022_EXT_TRANSL_FACILITY_3 )
#define _FEATURE_022_EXT_TRANSL_FACILITY_3
#endif
#if defined( FEATURE_023_HFP_UNNORM_EXT_FACILITY )
#define _FEATURE_023_HFP_UNNORM_EXT_FACILITY
#endif
#if defined( FEATURE_024_ETF2_ENHANCEMENT_FACILITY )
#define _FEATURE_024_ETF2_ENHANCEMENT_FACILITY
#endif
#if defined( FEATURE_025_STORE_CLOCK_FAST_FACILITY )
#define _FEATURE_025_STORE_CLOCK_FAST_FACILITY
#endif
#if defined( FEATURE_026_PARSING_ENHANCE_FACILITY )
#define _FEATURE_026_PARSING_ENHANCE_FACILITY
#endif
#if defined( FEATURE_027_MVCOS_FACILITY )
#define _FEATURE_027_MVCOS_FACILITY
#endif
#if defined( FEATURE_028_TOD_CLOCK_STEER_FACILITY )
#define _FEATURE_028_TOD_CLOCK_STEER_FACILITY
#endif
#if defined( FEATURE_030_ETF3_ENHANCEMENT_FACILITY )
#define _FEATURE_030_ETF3_ENHANCEMENT_FACILITY
#endif
#if defined( FEATURE_031_EXTRACT_CPU_TIME_FACILITY )
#define _FEATURE_031_EXTRACT_CPU_TIME_FACILITY
#endif
#if defined( FEATURE_032_CSS_FACILITY )
#define _FEATURE_032_CSS_FACILITY
#endif
#if defined( FEATURE_033_CSS_FACILITY_2 )
#define _FEATURE_033_CSS_FACILITY_2
#endif
#if defined( FEATURE_034_GEN_INST_EXTN_FACILITY )
#define _FEATURE_034_GEN_INST_EXTN_FACILITY
#endif
#if defined( FEATURE_035_EXECUTE_EXTN_FACILITY )
#define _FEATURE_035_EXECUTE_EXTN_FACILITY
#endif
#if defined( FEATURE_036_ENH_MONITOR_FACILITY )
#define _FEATURE_036_ENH_MONITOR_FACILITY
#endif
#if defined( FEATURE_037_FP_EXTENSION_FACILITY )
#define _FEATURE_037_FP_EXTENSION_FACILITY
#endif
#if defined( FEATURE_038_OP_CMPSC_FACILITY )
#define _FEATURE_038_OP_CMPSC_FACILITY
#endif
#if defined( FEATURE_040_LOAD_PROG_PARAM_FACILITY )
#define _FEATURE_040_LOAD_PROG_PARAM_FACILITY
#endif
#if defined( FEATURE_041_FPS_ENHANCEMENT_FACILITY )
#define _FEATURE_041_FPS_ENHANCEMENT_FACILITY
#endif
#if defined( FEATURE_041_DFP_ROUNDING_FACILITY )
#define _FEATURE_041_DFP_ROUNDING_FACILITY
#endif
#if defined( FEATURE_041_FPR_GR_TRANSFER_FACILITY )
#define _FEATURE_041_FPR_GR_TRANSFER_FACILITY
#endif
#if defined( FEATURE_041_FPS_SIGN_HANDLING_FACILITY )
#define _FEATURE_041_FPS_SIGN_HANDLING_FACILITY
#endif
#if defined( FEATURE_041_IEEE_EXCEPT_SIM_FACILITY )
#define _FEATURE_041_IEEE_EXCEPT_SIM_FACILITY
#endif
#if defined( FEATURE_042_DFP_FACILITY )
#define _FEATURE_042_DFP_FACILITY
#endif
#if defined( FEATURE_043_DFP_HPERF_FACILITY )
#define _FEATURE_043_DFP_HPERF_FACILITY
#endif
#if defined( FEATURE_044_PFPO_FACILITY )
#define _FEATURE_044_PFPO_FACILITY
#endif
#if defined( FEATURE_045_DISTINCT_OPERANDS_FACILITY )
#define _FEATURE_045_DISTINCT_OPERANDS_FACILITY
#endif
#if defined( FEATURE_045_FAST_BCR_SERIAL_FACILITY )
#define _FEATURE_045_FAST_BCR_SERIAL_FACILITY
#endif
#if defined( FEATURE_045_HIGH_WORD_FACILITY )
#define _FEATURE_045_HIGH_WORD_FACILITY
#endif
#if defined( FEATURE_045_INTERLOCKED_ACCESS_FACILITY_1 )
#define _FEATURE_045_INTERLOCKED_ACCESS_FACILITY_1
#endif
#if defined( FEATURE_045_LOAD_STORE_ON_COND_FACILITY_1 )
#define _FEATURE_045_LOAD_STORE_ON_COND_FACILITY_1
#endif
#if defined( FEATURE_045_POPULATION_COUNT_FACILITY )
#define _FEATURE_045_POPULATION_COUNT_FACILITY
#endif
#if defined( FEATURE_047_CMPSC_ENH_FACILITY )
#define _FEATURE_047_CMPSC_ENH_FACILITY
#endif
#if defined( FEATURE_048_DFP_ZONE_CONV_FACILITY )
#define _FEATURE_048_DFP_ZONE_CONV_FACILITY
#endif
#if defined( FEATURE_049_EXECUTION_HINT_FACILITY )
#define _FEATURE_049_EXECUTION_HINT_FACILITY
#endif
#if defined( FEATURE_049_LOAD_AND_TRAP_FACILITY )
#define _FEATURE_049_LOAD_AND_TRAP_FACILITY
#endif
#if defined( FEATURE_049_PROCESSOR_ASSIST_FACILITY )
#define _FEATURE_049_PROCESSOR_ASSIST_FACILITY
#endif
#if defined( FEATURE_049_MISC_INSTR_EXT_FACILITY_1 )
#define _FEATURE_049_MISC_INSTR_EXT_FACILITY_1
#endif
#if defined( FEATURE_050_CONSTR_TRANSACT_FACILITY )
#define _FEATURE_050_CONSTR_TRANSACT_FACILITY
#endif
#if defined( FEATURE_051_LOCAL_TLB_CLEARING_FACILITY )
#define _FEATURE_051_LOCAL_TLB_CLEARING_FACILITY
#endif
#if defined( FEATURE_052_INTERLOCKED_ACCESS_FACILITY_2 )
#define _FEATURE_052_INTERLOCKED_ACCESS_FACILITY_2
#endif
#if defined( FEATURE_053_LOAD_STORE_ON_COND_FACILITY_2 )
#define _FEATURE_053_LOAD_STORE_ON_COND_FACILITY_2
#endif
#if defined( FEATURE_053_LOAD_ZERO_RIGHTMOST_FACILITY )
#define _FEATURE_053_LOAD_ZERO_RIGHTMOST_FACILITY
#endif
#if defined( FEATURE_054_EE_CMPSC_FACILITY )
#define _FEATURE_054_EE_CMPSC_FACILITY
#endif
#if defined( FEATURE_057_MSA_EXTENSION_FACILITY_5 )
#define _FEATURE_057_MSA_EXTENSION_FACILITY_5
#endif
#if defined( FEATURE_058_MISC_INSTR_EXT_FACILITY_2 )
#define _FEATURE_058_MISC_INSTR_EXT_FACILITY_2
#endif
#if defined( FEATURE_061_MISC_INSTR_EXT_FACILITY_3 )
#define _FEATURE_061_MISC_INSTR_EXT_FACILITY_3
#endif
#if defined( FEATURE_066_RES_REF_BITS_MULT_FACILITY )
#define _FEATURE_066_RES_REF_BITS_MULT_FACILITY
#endif
#if defined( FEATURE_067_CPU_MEAS_COUNTER_FACILITY )
#define _FEATURE_067_CPU_MEAS_COUNTER_FACILITY
#endif
#if defined( FEATURE_068_CPU_MEAS_SAMPLNG_FACILITY )
#define _FEATURE_068_CPU_MEAS_SAMPLNG_FACILITY
#endif
#if defined( FEATURE_073_TRANSACT_EXEC_FACILITY )
#define _FEATURE_073_TRANSACT_EXEC_FACILITY
#endif
#if defined( FEATURE_074_STORE_HYPER_INFO_FACILITY )
#define _FEATURE_074_STORE_HYPER_INFO_FACILITY
#endif
#if defined( FEATURE_075_ACC_EX_FS_INDIC_FACILITY )
#define _FEATURE_075_ACC_EX_FS_INDIC_FACILITY
#endif
#if defined( FEATURE_076_MSA_EXTENSION_FACILITY_3 )
#define _FEATURE_076_MSA_EXTENSION_FACILITY_3
#endif
#if defined( FEATURE_077_MSA_EXTENSION_FACILITY_4 )
#define _FEATURE_077_MSA_EXTENSION_FACILITY_4
#endif
#if defined( FEATURE_078_ENHANCED_DAT_FACILITY_2 )
#define _FEATURE_078_ENHANCED_DAT_FACILITY_2
#endif
#if defined( FEATURE_080_DFP_PACK_CONV_FACILITY )
#define _FEATURE_080_DFP_PACK_CONV_FACILITY
#endif
#if defined( FEATURE_081_PPA_IN_ORDER_FACILITY )
#define _FEATURE_081_PPA_IN_ORDER_FACILITY
#endif
#if defined( FEATURE_084_MISC_INSTR_EXT_FACILITY_4 )
#define _FEATURE_084_MISC_INSTR_EXT_FACILITY_4
#endif
#if defined( FEATURE_129_ZVECTOR_FACILITY )
#define _FEATURE_129_ZVECTOR_FACILITY
#endif
#if defined( FEATURE_130_INSTR_EXEC_PROT_FACILITY )
#define _FEATURE_130_INSTR_EXEC_PROT_FACILITY
#endif
#if defined( FEATURE_131_SIDE_EFFECT_ACCESS_FACILITY )
#define _FEATURE_131_SIDE_EFFECT_ACCESS_FACILITY
#endif
#if defined( FEATURE_131_ENH_SUPP_ON_PROT_2_FACILITY )
#define _FEATURE_131_ENH_SUPP_ON_PROT_2_FACILITY
#endif
#if defined( FEATURE_133_GUARDED_STORAGE_FACILITY )
#define _FEATURE_133_GUARDED_STORAGE_FACILITY
#endif
#if defined( FEATURE_134_ZVECTOR_PACK_DEC_FACILITY )
#define _FEATURE_134_ZVECTOR_PACK_DEC_FACILITY
#endif
#if defined( FEATURE_135_ZVECTOR_ENH_FACILITY_1 )
#define _FEATURE_135_ZVECTOR_ENH_FACILITY_1
#endif
#if defined( FEATURE_138_CONFIG_ZARCH_MODE_FACILITY )
#define _FEATURE_138_CONFIG_ZARCH_MODE_FACILITY
#endif
#if defined( FEATURE_139_MULTIPLE_EPOCH_FACILITY )
#define _FEATURE_139_MULTIPLE_EPOCH_FACILITY
#endif
#if defined( FEATURE_142_ST_CPU_COUNTER_MULT_FACILITY )
#define _FEATURE_142_ST_CPU_COUNTER_MULT_FACILITY
#endif
#if defined( FEATURE_144_TEST_PEND_EXTERNAL_FACILITY )
#define _FEATURE_144_TEST_PEND_EXTERNAL_FACILITY
#endif
#if defined( FEATURE_145_INS_REF_BITS_MULT_FACILITY )
#define _FEATURE_145_INS_REF_BITS_MULT_FACILITY
#endif
#if defined( FEATURE_146_MSA_EXTENSION_FACILITY_8 )
#define _FEATURE_146_MSA_EXTENSION_FACILITY_8
#endif
#if defined( FEATURE_148_VECTOR_ENH_FACILITY_2 )
#define _FEATURE_148_VECTOR_ENH_FACILITY_2
#endif
#if defined( FEATURE_149_MOVEPAGE_SETKEY_FACILITY )
#define _FEATURE_149_MOVEPAGE_SETKEY_FACILITY
#endif
#if defined( FEATURE_150_ENH_SORT_FACILITY )
#define _FEATURE_150_ENH_SORT_FACILITY
#endif
#if defined( FEATURE_151_DEFLATE_CONV_FACILITY )
#define _FEATURE_151_DEFLATE_CONV_FACILITY
#endif
#if defined( FEATURE_152_VECT_PACKDEC_ENH_FACILITY )
#define _FEATURE_152_VECT_PACKDEC_ENH_FACILITY
#endif
#if defined( FEATURE_155_MSA_EXTENSION_FACILITY_9 )
#define _FEATURE_155_MSA_EXTENSION_FACILITY_9
#endif
#if defined( FEATURE_158_ULTRAV_CALL_FACILITY )
#define _FEATURE_158_ULTRAV_CALL_FACILITY
#endif
#if defined( FEATURE_161_SEC_EXE_UNPK_FACILITY )
#define _FEATURE_161_SEC_EXE_UNPK_FACILITY
#endif
#if defined( FEATURE_165_NNET_ASSIST_FACILITY )
#define _FEATURE_165_NNET_ASSIST_FACILITY
#endif
#if defined( FEATURE_168_ESA390_COMPAT_MODE_FACILITY )
#define _FEATURE_168_ESA390_COMPAT_MODE_FACILITY
#endif
#if defined( FEATURE_169_SKEY_REMOVAL_FACILITY )
#define _FEATURE_169_SKEY_REMOVAL_FACILITY
#endif
#if defined( FEATURE_192_VECT_PACKDEC_ENH_2_FACILITY )
#define _FEATURE_192_VECT_PACKDEC_ENH_2_FACILITY
#endif
#if defined( FEATURE_193_BEAR_ENH_FACILITY )
#define _FEATURE_193_BEAR_ENH_FACILITY
#endif
#if defined( FEATURE_194_RESET_DAT_PROT_FACILITY )
#define _FEATURE_194_RESET_DAT_PROT_FACILITY
#endif
#if defined( FEATURE_196_PROC_ACT_FACILITY )
#define _FEATURE_196_PROC_ACT_FACILITY
#endif
#if defined( FEATURE_197_PROC_ACT_EXT_1_FACILITY )
#define _FEATURE_197_PROC_ACT_EXT_1_FACILITY
#endif
#if defined( FEATURE_198_VECTOR_ENH_FACILITY_3 )
#define _FEATURE_198_VECTOR_ENH_FACILITY_3
#endif
#if defined( FEATURE_199_VECT_PACKDEC_ENH_FACILITY_3 )
#define _FEATURE_199_VECT_PACKDEC_ENH_FACILITY_3
#endif
/*-------------------------------------------------------------------*/
/* Non-facility-bit FEATUREs */
/*-------------------------------------------------------------------*/
#if defined( FEATURE_2K_STORAGE_KEYS )
#define _FEATURE_2K_STORAGE_KEYS
#endif
#if defined( FEATURE_4K_STORAGE_KEYS )
#define _FEATURE_4K_STORAGE_KEYS
#endif
#if defined( FEATURE_ADDRESS_LIMIT_CHECKING )
#define _FEATURE_ADDRESS_LIMIT_CHECKING
#endif
#if defined( FEATURE_BASIC_STORAGE_KEYS )
#define _FEATURE_BASIC_STORAGE_KEYS
#endif
#if defined( FEATURE_CMPSC )
#define _FEATURE_CMPSC
#endif
#if defined( FEATURE_EXTENDED_STORAGE_KEYS )
#define _FEATURE_EXTENDED_STORAGE_KEYS
#endif
#if defined( FEATURE_370_EXTENSION )
#define _FEATURE_370_EXTENSION
#endif
#if defined( FEATURE_CHANNEL_SUBSYSTEM )
#define _FEATURE_CHANNEL_SUBSYSTEM
#endif
#if defined( FEATURE_CPU_RECONFIG )
#define _FEATURE_CPU_RECONFIG
#endif
#if defined( FEATURE_ECPSVM )
#define _FEATURE_ECPSVM
#endif
#if defined( FEATURE_EMULATE_VM )
#define _FEATURE_EMULATE_VM
#endif
#if defined( FEATURE_EXPANDED_STORAGE )
#define _FEATURE_EXPANDED_STORAGE
#endif
#if defined( FEATURE_EXPEDITED_SIE_SUBSET )
#define _FEATURE_EXPEDITED_SIE_SUBSET
#endif
#if defined( FEATURE_EXTERNAL_INTERRUPT_ASSIST )
#define _FEATURE_EXTERNAL_INTERRUPT_ASSIST
#endif
#if defined( FEATURE_HARDWARE_LOADER )
#define _FEATURE_HARDWARE_LOADER
#endif
#if defined( FEATURE_HERCULES_DIAGCALLS )
#define _FEATURE_HERCULES_DIAGCALLS
#endif
#if defined( FEATURE_HOST_RESOURCE_ACCESS_FACILITY )
#define _FEATURE_HOST_RESOURCE_ACCESS_FACILITY
#endif
#if defined( FEATURE_HYPERVISOR )
#define _FEATURE_HYPERVISOR
#endif
#if defined( FEATURE_INTEGRATED_3270_CONSOLE )
#define _FEATURE_INTEGRATED_3270_CONSOLE
#endif
#if defined( FEATURE_INTEGRATED_ASCII_CONSOLE )
#define _FEATURE_INTEGRATED_ASCII_CONSOLE
#endif
#if defined( FEATURE_INTERVAL_TIMER )
#define _FEATURE_INTERVAL_TIMER
#endif
#if defined( FEATURE_IO_ASSIST )
#define _FEATURE_IO_ASSIST
#endif
#if defined( FEATURE_MSA_EXTENSION_FACILITY_1 )
#define _FEATURE_MSA_EXTENSION_FACILITY_1
#endif
#if defined( FEATURE_MSA_EXTENSION_FACILITY_2 )
#define _FEATURE_MSA_EXTENSION_FACILITY_2
#endif
#if defined( FEATURE_MULTIPLE_CONTROLLED_DATA_SPACE )
#define _FEATURE_MULTIPLE_CONTROLLED_DATA_SPACE
#endif
#if defined( FEATURE_NEW_ZARCH_ONLY_INSTRUCTIONS ) // 'N' instructions
#define _FEATURE_NEW_ZARCH_ONLY_INSTRUCTIONS
#endif
#if defined( FEATURE_PER )
#define _FEATURE_PER
#endif
#if defined( FEATURE_PER1 )
#define _FEATURE_PER1
#endif
#if defined( FEATURE_PER2 )
#define _FEATURE_PER2
#endif
#if defined( FEATURE_PER3 )
#define _FEATURE_PER3
#endif
#if defined( FEATURE_PER_STORAGE_KEY_ALTERATION_FACILITY )
#define _FEATURE_PER_STORAGE_KEY_ALTERATION_FACILITY
#endif
#if defined( FEATURE_PER_ZERO_ADDRESS_DETECTION_FACILITY )
#define _FEATURE_PER_ZERO_ADDRESS_DETECTION_FACILITY
#endif
#if defined( FEATURE_QDIO_TDD )
#define _FEATURE_QDIO_TDD
#endif
#if defined( FEATURE_QDIO_THININT )
#define _FEATURE_QDIO_THININT
#endif
#if defined( FEATURE_QEBSM )
#define _FEATURE_QEBSM
#endif
#if defined( FEATURE_REGION_RELOCATE )
#define _FEATURE_REGION_RELOCATE
#endif
#if defined( FEATURE_S370_S390_VECTOR_FACILITY )
#define _FEATURE_S370_S390_VECTOR_FACILITY
#endif
#if defined( FEATURE_SCSI_IPL )
#define _FEATURE_SCSI_IPL
#endif
#if defined( FEATURE_SVS )
#define _FEATURE_SVS
#endif
#if defined( FEATURE_SYSTEM_CONSOLE )
#define _FEATURE_SYSTEM_CONSOLE
#endif
#if defined( FEATURE_VM_BLOCKIO )
#define _FEATURE_VM_BLOCKIO
#endif
#if defined( FEATURE_WAITSTATE_ASSIST )
#define _FEATURE_WAITSTATE_ASSIST
#endif
#if defined( FEATURE_TCPIP_EXTENSION )
#define _FEATURE_TCPIP_EXTENSION
#endif
#if defined( FEATURE_V128_SSE )
#define _FEATURE_V128_SSE
#endif
#if defined( FEATURE_ZVM_ESSA )
#define _FEATURE_ZVM_ESSA
#endif
/*-------------------------------------------------------------------*/
/* PROGRAMMING NOTE */
/*-------------------------------------------------------------------*/
/* Ideally, none of the #defines made in pass 1 should be dependent */
/* on any other #define (i.e. your #if statements should not have */
/* multiple conditions ('&&' or '||') or be dependent on the order */
/* (sequence) that #defines are being made). The below tiny section */
/* of code pertaining to SIE appears to be an exception to the rule. */
/*-------------------------------------------------------------------*/
#if defined( FEATURE_SIE )
#define _FEATURE_SIE // (370/390/900 SIE)
#if defined( FEATURE_001_ZARCH_INSTALLED_FACILITY )
#define _FEATURE_ZSIE // (900 SIE)
#endif
#if defined( FEATURE_PROTECTION_INTERCEPTION_CONTROL )
#define _FEATURE_PROTECTION_INTERCEPTION_CONTROL
#endif
#if defined( FEATURE_STORAGE_KEY_ASSIST )
#define _FEATURE_STORAGE_KEY_ASSIST
#endif
#endif
/*-------------------------------------------------------------------*/
/* Build architecture #defines */
/*-------------------------------------------------------------------*/
/* _nnn (_370, _390, _900) are architectures present in the build. */
/* _ARCH_NUM_n controls self including for arch-dependent compiles. */
/* _ARCH_nnn_IDX is the index for each arch within various tables. */
/*-------------------------------------------------------------------*/
#if !defined( OPTION_370_MODE ) \
&& !defined( OPTION_390_MODE ) \
&& !defined( OPTION_900_MODE )
#error At least one of OPTION_370_MODE, OPTION_390_MODE or OPTION_900_MODE must be specified
#endif
/*-------------------------------------------------------------------*/
#if defined( OPTION_370_MODE )
#define _370 // (define if arch gen'ed)
#define ARCH_370_IDX 0 // (array index for arch)
#define _ARCH_NUM_0 370 // (the arch to be gen'ed)
#endif
#if defined( OPTION_390_MODE )
#define _390
#if !defined( _ARCH_NUM_0 )
#define ARCH_390_IDX 0
#define _ARCH_NUM_0 390
#else
#define ARCH_390_IDX 1
#define _ARCH_NUM_1 390
#endif
#endif
#if defined( OPTION_900_MODE )
#define _900
#if !defined( _ARCH_NUM_1 )
#define ARCH_900_IDX 1
#define _ARCH_NUM_1 900
#else
#define ARCH_900_IDX 2
#define _ARCH_NUM_2 900
#endif
#endif
/*-------------------------------------------------------------------*/
#if defined( _900 ) && !defined( _390 )
#error OPTION_900_MODE requires OPTION_390_MODE to be #defined too
#endif
/*-------------------------------------------------------------------*/
#if !defined( ARCH_370_IDX )
#define ARCH_370_IDX -1
#endif
#if !defined( ARCH_390_IDX )
#define ARCH_390_IDX -1
#endif
#if !defined( ARCH_900_IDX )
#define ARCH_900_IDX -1
#endif
/*-------------------------------------------------------------------*/
/* The "NUM_GEN_ARCHS" value is used as an array size for any table */
/* which needs a slot for each gen'ed architecture. Use either the */
/* "ARCH_nnn_IDX" constant or the 'sysblk.arch_mode' value to index */
/* into the table to reach the desired entry. */
/*-------------------------------------------------------------------*/
#if defined( _ARCH_NUM_2 )
#define NUM_GEN_ARCHS 3
#elif defined( _ARCH_NUM_1 )
#define NUM_GEN_ARCHS 2
#else
#define NUM_GEN_ARCHS 1
#endif
//--------------------------------------------------------------------
// PROGRAMMING NOTE
//--------------------------------------------------------------------
//
// We need an extra 2 slots in each opcode table entry to allow for
// the 2 extra pointers needed by the instruction printing functions.
//
// Notice the ROUTE_IPRINT macro in opcode.c accessing these 2 extra
// pointers in the opcode table entry:
//
// iprt_func = gen_opcode_{tabname} [...] [ NUM_INSTR_TAB_PTRS - 2 ];
// mnemonic = gen_opcode_{tabname} [...] [ NUM_INSTR_TAB_PTRS - 1 ];
// return iprt_func( inst, mnemonic, prtbuf );
//
// and how the IPRINT_ROUT2 macro defines its routing function:
//
// int iprint_{asmfmt}( BYTE inst[], char mnemonic[], char* prtbuf );
//
// Finally also notice the definition of the "GENx370x390x900" macro
// in opcode.h, which defines opcode table entries for each opcode:
// it defines not only a pointer to the intruction function for each
// architecture, but also defines those 2 extra pointers as the last
// two entries for each opcode table entry:
//
// #define GENx370x___x900( ... )
//
// _GEN370( _ifunc_name )
// _GEN390( _ifunc_name )
// _GEN900( _ifunc_name )
//
// (void*) &iprint_ ## _asmfmt,
// (void*) & _mnemonic "\0" #_ifunc_name
//
// Thus we need "+2" in the below #define for "NUM_INSTR_TAB_PTRS"
// so the opcode tables in opcode.c defined by the "GENx370x390x900"
// macro have room for the 2 extra pointers used by the IPRINT_ROUT2
// instruction printing functions called during instruction tracing.
//
//--------------------------------------------------------------------
#define NUM_INSTR_TAB_PTRS NUM_GEN_ARCHS + 2 // (see NOTE above)
/*-------------------------------------------------------------------*/
#else // (featchk pass 2: check sanity of #defined features)
/*-------------------------------------------------------------------*/
/*-------------------------------------------------------------------*/
/* PASS 2: check FEATURE sanity */
/*-------------------------------------------------------------------*/
/* In this section of code you should sanity-check your FEATURE */
/* combinations. That is, if one of your features requires that */
/* some other feature also be defined, then you would check that */
/* combination here and issue an #error message if it wasn't true. */
/* IDEALLY, you should not be doing any #defines here. You should */
/* only be doing #if and #error. All of the #defines should have */
/* ideally already been done in the previous section above during */
/* the first pass of this header. This is to prevent any type of */
/* dependency on the order/sequence of checking. *NONE* of the */
/* below sanity checks should depend on any prior/previous check. */
/*-------------------------------------------------------------------*/
/*-------------------------------------------------------------------*/
/* Facility-bit FEATUREs */
/*-------------------------------------------------------------------*/
#if defined( FEATURE_001_ZARCH_INSTALLED_FACILITY ) && defined( FEATURE_SIE ) \
&& !defined( _FEATURE_SIE )
#error z/Arch SIE requires ESA/390 SIE too
#endif
#if defined( FEATURE_001_ZARCH_INSTALLED_FACILITY ) && defined( _FEATURE_SIE ) \
&& !defined( FEATURE_STORAGE_KEY_ASSIST )
#error SIE requires storage key assist
#endif
#if defined( FEATURE_001_ZARCH_INSTALLED_FACILITY ) && !defined( FEATURE_000_N3_INSTR_FACILITY )
#error z/Architecture requires the 'N3' instruction set (new to z/Arch and added to ESA/390)
#endif
#if defined( FEATURE_001_ZARCH_INSTALLED_FACILITY ) && !defined( FEATURE_NEW_ZARCH_ONLY_INSTRUCTIONS )
#error z/Architecture requires the 'N' instruction set (new to z/Architecture only)
#endif
#if defined( FEATURE_004_IDTE_SC_SEGTAB_FACILITY ) \
&& !defined( FEATURE_003_DAT_ENHANCE_FACILITY_1 )
#error FEATURE_004_IDTE_SC_SEGTAB_FACILITY requires FEATURE_003_DAT_ENHANCE_FACILITY_1
#endif
#if defined( FEATURE_005_IDTE_SC_REGTAB_FACILITY ) \
&& (!defined( FEATURE_004_IDTE_SC_SEGTAB_FACILITY ) || !defined( FEATURE_003_DAT_ENHANCE_FACILITY_1 ))
#error FEATURE_005_IDTE_SC_REGTAB_FACILITY requires both FEATURE_004_IDTE_SC_SEGTAB_FACILITY and FEATURE_003_DAT_ENHANCE_FACILITY_1
#endif
#if defined( FEATURE_006_ASN_LX_REUSE_FACILITY ) && !defined( FEATURE_001_ZARCH_INSTALLED_FACILITY )
#error ASN-and-LX-Reuse facility is only supported with z/Arch
#endif
#if defined( FEATURE_006_ASN_LX_REUSE_FACILITY ) && !defined( FEATURE_DUAL_ADDRESS_SPACE )
#error ASN-and-LX-Reuse facility requires Dual Address-Space feature
#endif
#if defined( FEATURE_007_STFL_EXTENDED_FACILITY ) && !defined( FEATURE_000_N3_INSTR_FACILITY )
#error Store Facility List Extended Facility implies STFL (N3 instruction set)
#endif
#if defined( FEATURE_019_LONG_DISPL_HPERF_FACILITY ) && !defined( FEATURE_018_LONG_DISPL_INST_FACILITY )
#error FEATURE_019_LONG_DISPL_HPERF_FACILITY requires FEATURE_018_LONG_DISPL_INST_FACILITY
#endif
#if defined( FEATURE_020_HFP_MULT_ADD_SUB_FACILITY ) && !defined( FEATURE_HEXADECIMAL_FLOATING_POINT )
#error HFP multiply add/subtract facility requires Hexadecimal floating point support
#endif
#if defined( FEATURE_023_HFP_UNNORM_EXT_FACILITY ) && !defined( FEATURE_HEXADECIMAL_FLOATING_POINT )
#error HFP unnormalized extensions facility requires Hexadecimal floating point support
#endif
#if defined( FEATURE_033_CSS_FACILITY_2 ) && !defined( FEATURE_032_CSS_FACILITY )
#error FEATURE_033_CSS_FACILITY_2 requires FEATURE_032_CSS_FACILITY
#endif
#if defined( FEATURE_037_FP_EXTENSION_FACILITY ) && !defined( FEATURE_BINARY_FLOATING_POINT )
#error Floating point extensions facility requires Binary floating point support
#endif
#if defined( FEATURE_037_FP_EXTENSION_FACILITY ) && !defined( FEATURE_042_DFP_FACILITY )
#error Floating point extensions facility requires Decimal floating point facility
#endif
#if (defined( FEATURE_041_FPS_ENHANCEMENT_FACILITY ) || \
defined( FEATURE_041_DFP_ROUNDING_FACILITY ) || \
defined( FEATURE_041_FPR_GR_TRANSFER_FACILITY ) || \
defined( FEATURE_041_FPS_SIGN_HANDLING_FACILITY ) || \
defined( FEATURE_041_IEEE_EXCEPT_SIM_FACILITY )) \
&& ( \
!defined( FEATURE_041_FPS_ENHANCEMENT_FACILITY ) || \
!defined( FEATURE_041_DFP_ROUNDING_FACILITY ) || \
!defined( FEATURE_041_FPR_GR_TRANSFER_FACILITY ) || \
!defined( FEATURE_041_FPS_SIGN_HANDLING_FACILITY ) || \
!defined( FEATURE_041_IEEE_EXCEPT_SIM_FACILITY ))
#error ALL "FEATURE_041..." features must either be ALL defined or ALL not defined
#endif
#if defined( FEATURE_042_DFP_FACILITY ) && !defined( FEATURE_BASIC_FP_EXTENSIONS )
#error Decimal floating point facility requires Basic FP extensions
#endif
#if defined( FEATURE_043_DFP_HPERF_FACILITY ) && !defined( FEATURE_042_DFP_FACILITY )
#error DFP has high performance requires Decimal floating point facility
#endif
#if (defined( FEATURE_045_DISTINCT_OPERANDS_FACILITY ) || \
defined( FEATURE_045_FAST_BCR_SERIAL_FACILITY ) || \
defined( FEATURE_045_HIGH_WORD_FACILITY ) || \
defined( FEATURE_045_INTERLOCKED_ACCESS_FACILITY_1 ) || \
defined( FEATURE_045_LOAD_STORE_ON_COND_FACILITY_1 ) || \
defined( FEATURE_045_POPULATION_COUNT_FACILITY )) \
&& ( \
!defined( FEATURE_045_DISTINCT_OPERANDS_FACILITY ) || \
!defined( FEATURE_045_FAST_BCR_SERIAL_FACILITY ) || \
!defined( FEATURE_045_HIGH_WORD_FACILITY ) || \
!defined( FEATURE_045_INTERLOCKED_ACCESS_FACILITY_1 ) || \
!defined( FEATURE_045_LOAD_STORE_ON_COND_FACILITY_1 ) || \
!defined( FEATURE_045_POPULATION_COUNT_FACILITY ))
#error ALL "FEATURE_045..." features must either be ALL defined or ALL not defined
#endif
#if defined( FEATURE_048_DFP_ZONE_CONV_FACILITY ) && !defined( FEATURE_042_DFP_FACILITY )
#error Decimal-floating-point Zoned-conversion facility requires Decimal floating point facility
#endif
#if (defined( FEATURE_049_EXECUTION_HINT_FACILITY ) || \
defined( FEATURE_049_LOAD_AND_TRAP_FACILITY ) || \
defined( FEATURE_049_PROCESSOR_ASSIST_FACILITY ) || \
defined( FEATURE_049_MISC_INSTR_EXT_FACILITY_1 )) \
&& ( \
!defined( FEATURE_049_EXECUTION_HINT_FACILITY ) || \
!defined( FEATURE_049_LOAD_AND_TRAP_FACILITY ) || \
!defined( FEATURE_049_PROCESSOR_ASSIST_FACILITY ) || \
!defined( FEATURE_049_MISC_INSTR_EXT_FACILITY_1 ))
#error ALL "FEATURE_049..." features must either be ALL defined or ALL not defined
#endif
#if defined( FEATURE_050_CONSTR_TRANSACT_FACILITY ) && !defined( FEATURE_073_TRANSACT_EXEC_FACILITY )
#error Constrained-transactional-execution facility requires Transactional-execution facility
#endif
#if (defined( FEATURE_053_LOAD_STORE_ON_COND_FACILITY_2 ) || \
defined( FEATURE_053_LOAD_ZERO_RIGHTMOST_FACILITY )) \
&& ( \
!defined( FEATURE_053_LOAD_STORE_ON_COND_FACILITY_2 ) || \
!defined( FEATURE_053_LOAD_ZERO_RIGHTMOST_FACILITY ))
#error ALL "FEATURE_053..." features must either be ALL defined or ALL not defined
#endif
#if defined( FEATURE_061_MISC_INSTR_EXT_FACILITY_3 ) && !defined( FEATURE_045_POPULATION_COUNT_FACILITY )
#error Miscellaneous-Instruction-Extensions Facility 3 requires Population-Count facility
#endif
#if defined( FEATURE_068_CPU_MEAS_SAMPLNG_FACILITY ) && !defined( FEATURE_040_LOAD_PROG_PARAM_FACILITY )
#error CPU Measurement Sampling facility requires Load Program Parameter facility
#endif
#if defined( FEATURE_068_CPU_MEAS_SAMPLNG_FACILITY ) && !defined( FEATURE_067_CPU_MEAS_COUNTER_FACILITY )
#error CPU Measurement Sampling facility requires CPU Measurement Counter facility
#endif
#if defined( FEATURE_073_TRANSACT_EXEC_FACILITY ) && !defined( FEATURE_049_PROCESSOR_ASSIST_FACILITY )
#error Transactional-execution facility requires Processor-assist facility
#endif
#if defined( FEATURE_075_ACC_EX_FS_INDIC_FACILITY ) && !defined( FEATURE_ENHANCED_SUPPRESSION_ON_PROTECTION )
#error Access-Exception Fetch/Store Indication facility requires Enhanced Suppression on Protection feature
#endif
#if defined( FEATURE_076_MSA_EXTENSION_FACILITY_3 ) && !defined( FEATURE_MSA_EXTENSION_FACILITY_2 )
#error You cannot have "Message Security Assist extension 3" without having "Message Security Assist extension 2"
#endif
#if defined( FEATURE_077_MSA_EXTENSION_FACILITY_4 ) && !defined( FEATURE_076_MSA_EXTENSION_FACILITY_3 )
#error You cannot have "Message Security Assist extension 4" without having "Message Security Assist extension 3"
#endif
#if defined( FEATURE_057_MSA_EXTENSION_FACILITY_5 ) && !defined( FEATURE_077_MSA_EXTENSION_FACILITY_4 )
#error You cannot have "Message Security Assist extension 5" without having "Message Security Assist extension 4"
#endif
#if defined( FEATURE_078_ENHANCED_DAT_FACILITY_2 ) && !defined( FEATURE_008_ENHANCED_DAT_FACILITY_1 )
#error FEATURE_078_ENHANCED_DAT_FACILITY_2 requires FEATURE_008_ENHANCED_DAT_FACILITY_1
#endif
#if defined( FEATURE_080_DFP_PACK_CONV_FACILITY ) && !defined( FEATURE_042_DFP_FACILITY )
#error Decimal-floating-point Packed-conversion facility requires Decimal floating point facility
#endif
#if defined( FEATURE_081_PPA_IN_ORDER_FACILITY ) && !defined( FEATURE_049_PROCESSOR_ASSIST_FACILITY )
#error FEATURE_081_PPA_IN_ORDER_FACILITY requires FEATURE_049_PROCESSOR_ASSIST_FACILITY
#endif
#if defined( FEATURE_129_ZVECTOR_FACILITY ) && !defined( FEATURE_001_ZARCH_INSTALLED_FACILITY )
#error z/Arch Vector facility only valid for z/Arch mode
#endif
#if (defined( FEATURE_131_SIDE_EFFECT_ACCESS_FACILITY ) || \
defined( FEATURE_131_ENH_SUPP_ON_PROT_2_FACILITY )) \
&& ( \
!defined( FEATURE_131_SIDE_EFFECT_ACCESS_FACILITY ) || \
!defined( FEATURE_131_ENH_SUPP_ON_PROT_2_FACILITY ))
#error ALL "FEATURE_131..." features must either be ALL defined or ALL not defined
#endif
#if defined( FEATURE_134_ZVECTOR_PACK_DEC_FACILITY ) && !defined( FEATURE_129_ZVECTOR_FACILITY )
#error z/Arch Vector Packed-decimal facility requires z/Arch Vector facility
#endif
#if defined( FEATURE_135_ZVECTOR_ENH_FACILITY_1 ) && !defined( FEATURE_129_ZVECTOR_FACILITY )
#error z/Arch Vector Enhancements-1 facility requires z/Arch Vector facility
#endif
#if defined( FEATURE_139_MULTIPLE_EPOCH_FACILITY ) && !defined( FEATURE_025_STORE_CLOCK_FAST_FACILITY )
#error Multiple-epoch facility requires Store clock fast facility
#endif
#if defined( FEATURE_139_MULTIPLE_EPOCH_FACILITY ) && !defined( FEATURE_028_TOD_CLOCK_STEER_FACILITY )
#error Multiple-epoch facility requires TOD clock steering facility
#endif
#if defined( FEATURE_142_ST_CPU_COUNTER_MULT_FACILITY ) && !defined( FEATURE_067_CPU_MEAS_COUNTER_FACILITY )
#error Store-CPU-counter-multiple facility requires CPU-measurement counter facility
#endif
#if defined( FEATURE_146_MSA_EXTENSION_FACILITY_8 ) && !defined( FEATURE_076_MSA_EXTENSION_FACILITY_3 )
#error You cannot have "Message Security Assist extension 8" without having "Message Security Assist extension 3"
#endif
#if defined( FEATURE_148_VECTOR_ENH_FACILITY_2 ) \
&& (!defined( FEATURE_129_ZVECTOR_FACILITY ) || !defined( FEATURE_135_ZVECTOR_ENH_FACILITY_1 ))
#error FEATURE_148_VECTOR_ENH_FACILITY_2 requires both FEATURE_129_ZVECTOR_FACILITY and FEATURE_135_ZVECTOR_ENH_FACILITY_1
#endif
#if defined( FEATURE_149_MOVEPAGE_SETKEY_FACILITY ) && !defined( FEATURE_014_NONQ_KEY_SET_FACILITY )
#error Move-Page-and-Set-Key facility requires Nonquiescing Key-Setting facility
#endif
#if defined( FEATURE_152_VECT_PACKDEC_ENH_FACILITY ) \
&& (!defined( FEATURE_129_ZVECTOR_FACILITY ) || !defined( FEATURE_134_ZVECTOR_PACK_DEC_FACILITY ))
#error FEATURE_152_VECT_PACKDEC_ENH_FACILITY requires both FEATURE_129_ZVECTOR_FACILITY and FEATURE_134_ZVECTOR_PACK_DEC_FACILITY
#endif
#if defined( FEATURE_155_MSA_EXTENSION_FACILITY_9 ) \
&& (!defined( FEATURE_076_MSA_EXTENSION_FACILITY_3 ) || !defined( FEATURE_077_MSA_EXTENSION_FACILITY_4 ))
#error FEATURE_155_MSA_EXTENSION_FACILITY_9 requires both FEATURE_076_MSA_EXTENSION_FACILITY_3 and FEATURE_077_MSA_EXTENSION_FACILITY_4
#endif
#if defined( FEATURE_165_NNET_ASSIST_FACILITY ) && !defined( FEATURE_129_ZVECTOR_FACILITY )
#error Neural-Network-Processing-Assist Facility requires z/Architecture Vector Facility
#endif
#if defined( FEATURE_192_VECT_PACKDEC_ENH_2_FACILITY ) && !defined( FEATURE_129_ZVECTOR_FACILITY )
#error Vector-Packed-Decimal-Enhancement Facility 2 requires z/Architecture Vector Facility
#endif
#if defined( FEATURE_192_VECT_PACKDEC_ENH_2_FACILITY ) && !defined( FEATURE_134_ZVECTOR_PACK_DEC_FACILITY )
#error Vector-Packed-Decimal-Enhancement Facility 2 requires Vector Packed-Decimal Facility
#endif
#if defined( FEATURE_192_VECT_PACKDEC_ENH_2_FACILITY ) && !defined( FEATURE_152_VECT_PACKDEC_ENH_FACILITY )
#error Vector-Packed-Decimal-Enhancement Facility 2 requires Vector-Packed-Decimal-Enhancement Facility
#endif
#if defined( FEATURE_193_BEAR_ENH_FACILITY ) && !defined( FEATURE_PER3 )
#error BEAR-Enhancement Facility requires PER-3 Facility
#endif
#if defined( FEATURE_194_RESET_DAT_PROT_FACILITY ) && !defined( FEATURE_051_LOCAL_TLB_CLEARING_FACILITY )
#error Reset-DAT-Protection Facility requires Local-TLB-Clearing Facility
#endif
#if defined( FEATURE_197_PROC_ACT_EXT_1_FACILITY ) && !defined( FEATURE_196_PROC_ACT_FACILITY )
#error Processor-Activity-Instrumentation Extension 1 Facility requires Processor-Activity-Instrumentation Facility
#endif
#if defined( FEATURE_198_VECTOR_ENH_FACILITY_3 ) && !defined( FEATURE_129_ZVECTOR_FACILITY )
#error Vector-Enhancements Facility 3 requires z/Architecture Vector Facility
#endif
#if defined( FEATURE_198_VECTOR_ENH_FACILITY_3 ) && !defined( FEATURE_135_ZVECTOR_ENH_FACILITY_1 )
#error Vector-Enhancements Facility 3 requires Vector-Enhancements Facility 1
#endif
#if defined( FEATURE_198_VECTOR_ENH_FACILITY_3 ) && !defined( FEATURE_148_VECTOR_ENH_FACILITY_2 )
#error Vector-Enhancements Facility 3 requires Vector-Enhancements Facility 2
#endif
#if defined( FEATURE_199_VECT_PACKDEC_ENH_FACILITY_3 ) && !defined( FEATURE_129_ZVECTOR_FACILITY )
#error Vector-Packed-Decimal-Enhancement Facility 3 requires z/Architecture Vector Facility
#endif
#if defined( FEATURE_199_VECT_PACKDEC_ENH_FACILITY_3 ) && !defined( FEATURE_134_ZVECTOR_PACK_DEC_FACILITY )
#error Vector-Packed-Decimal-Enhancement Facility 3 requires Vector Packed-Decimal Facility
#endif
#if defined( FEATURE_199_VECT_PACKDEC_ENH_FACILITY_3 ) && !defined( FEATURE_152_VECT_PACKDEC_ENH_FACILITY )
#error Vector-Packed-Decimal-Enhancement Facility 3 requires Vector-Packed-Decimal-Enhancement Facility 1
#endif
#if defined( FEATURE_199_VECT_PACKDEC_ENH_FACILITY_3 ) && !defined( FEATURE_192_VECT_PACKDEC_ENH_2_FACILITY )
#error Vector-Packed-Decimal-Enhancement Facility 3 requires Vector-Packed-Decimal-Enhancement Facility 2
#endif
/*-------------------------------------------------------------------*/
/* Non-facility-bit FEATUREs */
/*-------------------------------------------------------------------*/
#if (!defined( FEATURE_2K_STORAGE_KEYS ) && !defined( FEATURE_4K_STORAGE_KEYS ))
|| ( defined( FEATURE_2K_STORAGE_KEYS ) && defined( FEATURE_4K_STORAGE_KEYS ))
#error Storage Keys must be either 2K or 4K
#endif
#if !defined( FEATURE_BASIC_STORAGE_KEYS ) && !defined( FEATURE_EXTENDED_STORAGE_KEYS )
#error FEATURE_BASIC_STORAGE_KEYS and/or FEATURE_EXTENDED_STORAGE_KEYS must be defined
#endif
#if defined( FEATURE_370_EXTENSION ) && !defined( OPTION_370_MODE )
#error S/370 Extensions feature requires OPTION_370_MODE
#endif
#if defined( FEATURE_370_EXTENSION ) && ( __GEN_ARCH != 370 )
#error S/370 Extensions feature only applies to OPTION_370_MODE
#endif
#if defined( FEATURE_BASIC_FP_EXTENSIONS ) && !defined( FEATURE_HEXADECIMAL_FLOATING_POINT )
#error Basic FP extensions requires Hexadecimal floating point
#endif
#if defined( FEATURE_BINARY_FLOATING_POINT ) && !defined( FEATURE_BASIC_FP_EXTENSIONS )
#error Binary floating point requires Basic FP extensions
#endif
#if defined( FEATURE_CANCEL_IO_FACILITY ) && !defined( FEATURE_CHANNEL_SUBSYSTEM )
#error Cancel I/O facility requires Channel Subsystem
#endif
#if defined( FEATURE_ENHANCED_SUPPRESSION_ON_PROTECTION ) && !defined( FEATURE_SUPPRESSION_ON_PROTECTION )
#error Enhanced Suppression on Protection facility requires Suppression on Protection feature
#endif
#if defined( FEATURE_EXPANDED_STORAGE ) && !defined( FEATURE_4K_STORAGE_KEYS )
#error Expanded storage cannot be defined with 2K Storage keys
#endif
#if defined( FEATURE_EXPEDITED_SIE_SUBSET ) && !defined( _FEATURE_SIE )
#error Expedited SIE Subset only supported with SIE
#endif
#if defined( FEATURE_EXTERNAL_INTERRUPT_ASSIST ) && !defined( _FEATURE_SIE )
#error External Interruption assist only supported with SIE
#endif
#if defined( FEATURE_FAST_SYNC_DATA_MOVER ) && !defined( FEATURE_MOVE_PAGE_FACILITY_2 )
#error Fast sync data mover facility requires Move page facility
#endif
#if defined( FEATURE_FPS_EXTENSIONS ) && !defined( FEATURE_BINARY_FLOATING_POINT )
#error FP support extensions requires Binary floating point
#endif
#if (defined( FEATURE_FPS_EXTENSIONS )|| defined( FEATURE_HFP_EXTENSIONS )) \
&& !defined( FEATURE_BASIC_FP_EXTENSIONS )
#error Floating point extensions requires Basic FP extensions
#endif
#if defined( FEATURE_HOST_RESOURCE_FACILITY ) && !defined( _FEATURE_HERCULES_DIAGCALLS )
#error Hercules Host Resource Access DIAGNOSE 0xF18 requires FEATURE_HERCULES_DIAGCALLS
#endif
#if defined( FEATURE_INTEGRATED_3270_CONSOLE ) && !defined( FEATURE_SYSTEM_CONSOLE )
#error Integrated 3270 console requires FEATURE_SYSTEM_CONSOLE
#endif
#if defined( FEATURE_INTEGRATED_ASCII_CONSOLE ) && !defined( FEATURE_SYSTEM_CONSOLE )
#error Integrated ASCII console requires FEATURE_SYSTEM_CONSOLE
#endif
#if defined( FEATURE_IO_ASSIST ) && !defined( _FEATURE_REGION_RELOCATE )
#error IO Assist requires Region Relocate Facility
#endif
#if defined( FEATURE_IO_ASSIST ) && !defined( _FEATURE_SIE )
#error I/O Assist Feature only supported with SIE
#endif
#if defined( FEATURE_MSA_EXTENSION_FACILITY_1 ) && !defined( FEATURE_017_MSA_FACILITY )
#error You cannot have "Message Security Assist extension 1" without having "Message Security Assist"
#endif
#if defined( FEATURE_MSA_EXTENSION_FACILITY_2 ) && !defined( FEATURE_MSA_EXTENSION_FACILITY_1 )
#error You cannot have "Message Security Assist extension 2" without having "Message Security Assist extension 1"
#endif
#if defined( FEATURE_MOVE_PAGE_FACILITY_2 ) && !defined( FEATURE_4K_STORAGE_KEYS )
#error Move page facility cannot be defined with 2K Storage keys
#endif
#if defined( FEATURE_MULTIPLE_CONTROLLED_DATA_SPACE ) && !defined( FEATURE_SIE )
#error MCDS is only supported with SIE
#endif
#if defined( FEATURE_MULTIPLE_CONTROLLED_DATA_SPACE ) && !defined( FEATURE_STORAGE_KEY_ASSIST )
#error MCDS requires Storage key assist
#endif
#if defined( FEATURE_PER1 ) && !defined( FEATURE_PER )
#error FEATURE_PER must be defined when using FEATURE_PER1
#endif
#if defined( FEATURE_PER2 ) && !defined( FEATURE_PER )
#error FEATURE_PER must be defined when using FEATURE_PER2
#endif
#if defined( FEATURE_PER3 ) && !defined( FEATURE_PER )
#error FEATURE_PER must be defined when using FEATURE_PER3
#endif
#if defined( FEATURE_PER1 ) && (defined( FEATURE_PER2 ) || defined( FEATURE_PER3 ))
#error FEATURE_PER1 cannot be defined if FEATURE_PER2 or FEATURE_PER3 is defined
#endif
#if defined( FEATURE_PER_STORAGE_KEY_ALTERATION_FACILITY ) && !defined( FEATURE_PER3 )
#error FEATURE_PER3 must be defined when using FEATURE_PER_STORAGE_KEY_ALTERATION_FACILITY
#endif
#if defined( FEATURE_PER_ZERO_ADDRESS_DETECTION_FACILITY ) && !defined( FEATURE_PER3 )
#error FEATURE_PER3 must be defined when using FEATURE_PER_ZERO_ADDRESS_DETECTION_FACILITY
#endif
#if defined( FEATURE_PROTECTION_INTERCEPTION_CONTROL ) && !defined( FEATURE_SIE )
#error Protection Interception Control is only supported with SIE
#endif
#if defined( FEATURE_REGION_RELOCATE ) && !defined( FEATURE_SIE )
#error Region Relocate Facility only supported with SIE
#endif
#if !defined( FEATURE_S370_CHANNEL ) && !defined( FEATURE_CHANNEL_SUBSYSTEM )
#error Either S/370 Channel or Channel Subsystem must be defined
#endif
#if defined( FEATURE_S370_CHANNEL ) && defined( FEATURE_CHANNEL_SUBSYSTEM )
#error S/370 Channel and Channel Subsystem cannot both be defined
#endif
#if defined( FEATURE_S370_S390_VECTOR_FACILITY ) && ( __GEN_ARCH == 900 )
#error S370/S390 Vector Facility not supported on z/Arch capable processors
#endif
#if defined( FEATURE_SCSI_IPL ) && !defined( FEATURE_HARDWARE_LOADER )
#error SCSI IPL requires FEATURE_HARDWARE_LOADER
#endif
#if defined( FEATURE_STORAGE_KEY_ASSIST ) && !defined( FEATURE_SIE )
#error Storage Key assist only supported with SIE
#endif
#if defined( FEATURE_VM_BLOCKIO ) && !defined( FEATURE_EMULATE_VM )
#error VM Standard Block I/O DIAGNOSE 0x250 requires FEATURE_EMULATE_VM
#endif
#endif /* !defined( FEATCHK_DO_DEFINES ) */
/* end of FEATCHK.H */