xref: /qemu/tcg/s390x/tcg-target-has.h (revision ffd642cb2ca25262342311a3bf2e8a77a00e6dfd)
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 Henderson tcg_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