144c9e94bSRichard Henderson /* SPDX-License-Identifier: MIT */ 244c9e94bSRichard Henderson /* 344c9e94bSRichard Henderson * Define target-specific opcode support 444c9e94bSRichard Henderson * Copyright (c) 2009 Ulrich Hecht <uli@suse.de> 544c9e94bSRichard Henderson */ 644c9e94bSRichard Henderson 744c9e94bSRichard Henderson #ifndef TCG_TARGET_HAS_H 844c9e94bSRichard Henderson #define TCG_TARGET_HAS_H 944c9e94bSRichard Henderson 1044c9e94bSRichard Henderson /* Facilities required for proper operation; checked at startup. */ 1144c9e94bSRichard Henderson 1244c9e94bSRichard Henderson #define FACILITY_ZARCH_ACTIVE 2 1344c9e94bSRichard Henderson #define FACILITY_LONG_DISP 18 1444c9e94bSRichard Henderson #define FACILITY_EXT_IMM 21 1544c9e94bSRichard Henderson #define FACILITY_GEN_INST_EXT 34 1644c9e94bSRichard Henderson #define FACILITY_45 45 1744c9e94bSRichard Henderson 1844c9e94bSRichard Henderson /* Facilities that are checked at runtime. */ 1944c9e94bSRichard Henderson 2044c9e94bSRichard Henderson #define FACILITY_LOAD_ON_COND2 53 2144c9e94bSRichard Henderson #define FACILITY_MISC_INSN_EXT2 58 2244c9e94bSRichard Henderson #define FACILITY_MISC_INSN_EXT3 61 2344c9e94bSRichard Henderson #define FACILITY_VECTOR 129 2444c9e94bSRichard Henderson #define FACILITY_VECTOR_ENH1 135 2544c9e94bSRichard Henderson 2644c9e94bSRichard Henderson extern uint64_t s390_facilities[3]; 2744c9e94bSRichard Henderson 2844c9e94bSRichard Henderson #define HAVE_FACILITY(X) \ 2944c9e94bSRichard Henderson ((s390_facilities[FACILITY_##X / 64] >> (63 - FACILITY_##X % 64)) & 1) 3044c9e94bSRichard Henderson 3144c9e94bSRichard Henderson /* optional instructions */ 3244c9e94bSRichard Henderson #define TCG_TARGET_HAS_extr_i64_i32 0 3344c9e94bSRichard Henderson #define TCG_TARGET_HAS_qemu_ldst_i128 1 3444c9e94bSRichard Henderson #define TCG_TARGET_HAS_tst 1 3544c9e94bSRichard Henderson 3644c9e94bSRichard Henderson #define TCG_TARGET_HAS_v64 HAVE_FACILITY(VECTOR) 3744c9e94bSRichard Henderson #define TCG_TARGET_HAS_v128 HAVE_FACILITY(VECTOR) 3844c9e94bSRichard Henderson #define TCG_TARGET_HAS_v256 0 3944c9e94bSRichard Henderson 4044c9e94bSRichard Henderson #define TCG_TARGET_HAS_andc_vec 1 4144c9e94bSRichard Henderson #define TCG_TARGET_HAS_orc_vec HAVE_FACILITY(VECTOR_ENH1) 4244c9e94bSRichard Henderson #define TCG_TARGET_HAS_nand_vec HAVE_FACILITY(VECTOR_ENH1) 4344c9e94bSRichard Henderson #define TCG_TARGET_HAS_nor_vec 1 4444c9e94bSRichard Henderson #define TCG_TARGET_HAS_eqv_vec HAVE_FACILITY(VECTOR_ENH1) 4544c9e94bSRichard Henderson #define TCG_TARGET_HAS_not_vec 1 4644c9e94bSRichard Henderson #define TCG_TARGET_HAS_neg_vec 1 4744c9e94bSRichard Henderson #define TCG_TARGET_HAS_abs_vec 1 4844c9e94bSRichard Henderson #define TCG_TARGET_HAS_roti_vec 1 4944c9e94bSRichard Henderson #define TCG_TARGET_HAS_rots_vec 1 5044c9e94bSRichard Henderson #define TCG_TARGET_HAS_rotv_vec 1 5144c9e94bSRichard Henderson #define TCG_TARGET_HAS_shi_vec 1 5244c9e94bSRichard Henderson #define TCG_TARGET_HAS_shs_vec 1 5344c9e94bSRichard Henderson #define TCG_TARGET_HAS_shv_vec 1 5444c9e94bSRichard Henderson #define TCG_TARGET_HAS_mul_vec 1 5544c9e94bSRichard Henderson #define TCG_TARGET_HAS_sat_vec 0 5644c9e94bSRichard Henderson #define TCG_TARGET_HAS_minmax_vec 1 5744c9e94bSRichard Henderson #define TCG_TARGET_HAS_bitsel_vec 1 5844c9e94bSRichard Henderson #define TCG_TARGET_HAS_cmpsel_vec 1 5944c9e94bSRichard Henderson #define TCG_TARGET_HAS_tst_vec 0 6044c9e94bSRichard Henderson 6142103c4cSRichard Henderson #define TCG_TARGET_extract_valid(type, ofs, len) 1 62*6482e9d2SRichard Henderson #define TCG_TARGET_deposit_valid(type, ofs, len) 1 6342103c4cSRichard Henderson 6442103c4cSRichard Henderson static inline bool tcg_target_sextract_valid(TCGType type,unsigned ofs,unsigned len)6542103c4cSRichard Hendersontcg_target_sextract_valid(TCGType type, unsigned ofs, unsigned len) 6642103c4cSRichard Henderson { 6742103c4cSRichard Henderson if (ofs == 0) { 6842103c4cSRichard Henderson switch (len) { 6942103c4cSRichard Henderson case 8: 7042103c4cSRichard Henderson case 16: 7142103c4cSRichard Henderson return true; 7242103c4cSRichard Henderson case 32: 7342103c4cSRichard Henderson return type == TCG_TYPE_I64; 7442103c4cSRichard Henderson } 7542103c4cSRichard Henderson } 7642103c4cSRichard Henderson return false; 7742103c4cSRichard Henderson } 7842103c4cSRichard Henderson #define TCG_TARGET_sextract_valid tcg_target_sextract_valid 7942103c4cSRichard Henderson 8044c9e94bSRichard Henderson #endif 81