xref: /qemu/tcg/tcg-has.h (revision fd4841c0433c1b433f9b3f6ddddc3e653997b26e)
1*fd4841c0SRichard Henderson /* SPDX-License-Identifier: MIT */
2*fd4841c0SRichard Henderson /*
3*fd4841c0SRichard Henderson  * Define target-specific opcode support
4*fd4841c0SRichard Henderson  * Copyright (c) 2024 Linaro, Ltd.
5*fd4841c0SRichard Henderson  */
6*fd4841c0SRichard Henderson 
7*fd4841c0SRichard Henderson #ifndef TCG_HAS_H
8*fd4841c0SRichard Henderson #define TCG_HAS_H
9*fd4841c0SRichard Henderson 
10*fd4841c0SRichard Henderson #if TCG_TARGET_REG_BITS == 32
11*fd4841c0SRichard Henderson /* Turn some undef macros into false macros.  */
12*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_extr_i64_i32     0
13*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_div_i64          0
14*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_rem_i64          0
15*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_div2_i64         0
16*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_rot_i64          0
17*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_ext8s_i64        0
18*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_ext16s_i64       0
19*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_ext32s_i64       0
20*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_ext8u_i64        0
21*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_ext16u_i64       0
22*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_ext32u_i64       0
23*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_bswap16_i64      0
24*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_bswap32_i64      0
25*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_bswap64_i64      0
26*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_not_i64          0
27*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_andc_i64         0
28*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_orc_i64          0
29*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_eqv_i64          0
30*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_nand_i64         0
31*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_nor_i64          0
32*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_clz_i64          0
33*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_ctz_i64          0
34*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_ctpop_i64        0
35*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_deposit_i64      0
36*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_extract_i64      0
37*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_sextract_i64     0
38*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_extract2_i64     0
39*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_negsetcond_i64   0
40*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_add2_i64         0
41*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_sub2_i64         0
42*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_mulu2_i64        0
43*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_muls2_i64        0
44*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_muluh_i64        0
45*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_mulsh_i64        0
46*fd4841c0SRichard Henderson /* Turn some undef macros into true macros.  */
47*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_add2_i32         1
48*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_sub2_i32         1
49*fd4841c0SRichard Henderson #endif
50*fd4841c0SRichard Henderson 
51*fd4841c0SRichard Henderson #ifndef TCG_TARGET_deposit_i32_valid
52*fd4841c0SRichard Henderson #define TCG_TARGET_deposit_i32_valid(ofs, len) 1
53*fd4841c0SRichard Henderson #endif
54*fd4841c0SRichard Henderson #ifndef TCG_TARGET_deposit_i64_valid
55*fd4841c0SRichard Henderson #define TCG_TARGET_deposit_i64_valid(ofs, len) 1
56*fd4841c0SRichard Henderson #endif
57*fd4841c0SRichard Henderson #ifndef TCG_TARGET_extract_i32_valid
58*fd4841c0SRichard Henderson #define TCG_TARGET_extract_i32_valid(ofs, len) 1
59*fd4841c0SRichard Henderson #endif
60*fd4841c0SRichard Henderson #ifndef TCG_TARGET_extract_i64_valid
61*fd4841c0SRichard Henderson #define TCG_TARGET_extract_i64_valid(ofs, len) 1
62*fd4841c0SRichard Henderson #endif
63*fd4841c0SRichard Henderson 
64*fd4841c0SRichard Henderson /* Only one of DIV or DIV2 should be defined.  */
65*fd4841c0SRichard Henderson #if defined(TCG_TARGET_HAS_div_i32)
66*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_div2_i32         0
67*fd4841c0SRichard Henderson #elif defined(TCG_TARGET_HAS_div2_i32)
68*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_div_i32          0
69*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_rem_i32          0
70*fd4841c0SRichard Henderson #endif
71*fd4841c0SRichard Henderson #if defined(TCG_TARGET_HAS_div_i64)
72*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_div2_i64         0
73*fd4841c0SRichard Henderson #elif defined(TCG_TARGET_HAS_div2_i64)
74*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_div_i64          0
75*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_rem_i64          0
76*fd4841c0SRichard Henderson #endif
77*fd4841c0SRichard Henderson 
78*fd4841c0SRichard Henderson #if !defined(TCG_TARGET_HAS_v64) \
79*fd4841c0SRichard Henderson     && !defined(TCG_TARGET_HAS_v128) \
80*fd4841c0SRichard Henderson     && !defined(TCG_TARGET_HAS_v256)
81*fd4841c0SRichard Henderson #define TCG_TARGET_MAYBE_vec            0
82*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_abs_vec          0
83*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_neg_vec          0
84*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_not_vec          0
85*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_andc_vec         0
86*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_orc_vec          0
87*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_nand_vec         0
88*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_nor_vec          0
89*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_eqv_vec          0
90*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_roti_vec         0
91*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_rots_vec         0
92*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_rotv_vec         0
93*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_shi_vec          0
94*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_shs_vec          0
95*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_shv_vec          0
96*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_mul_vec          0
97*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_sat_vec          0
98*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_minmax_vec       0
99*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_bitsel_vec       0
100*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_cmpsel_vec       0
101*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_tst_vec          0
102*fd4841c0SRichard Henderson #else
103*fd4841c0SRichard Henderson #define TCG_TARGET_MAYBE_vec            1
104*fd4841c0SRichard Henderson #endif
105*fd4841c0SRichard Henderson #ifndef TCG_TARGET_HAS_v64
106*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_v64              0
107*fd4841c0SRichard Henderson #endif
108*fd4841c0SRichard Henderson #ifndef TCG_TARGET_HAS_v128
109*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_v128             0
110*fd4841c0SRichard Henderson #endif
111*fd4841c0SRichard Henderson #ifndef TCG_TARGET_HAS_v256
112*fd4841c0SRichard Henderson #define TCG_TARGET_HAS_v256             0
113*fd4841c0SRichard Henderson #endif
114*fd4841c0SRichard Henderson 
115*fd4841c0SRichard Henderson #endif
116