Revision 8d625cf1
b/tcg/README | ||
---|---|---|
213 | 213 |
|
214 | 214 |
* eqv_i32/i64 t0, t1, t2 |
215 | 215 |
|
216 |
t0=~(t1^t2) |
|
216 |
t0=~(t1^t2), or equivalently, t0=t1^~t2
|
|
217 | 217 |
|
218 | 218 |
* nand_i32/i64 t0, t1, t2 |
219 | 219 |
|
b/tcg/arm/tcg-target.h | ||
---|---|---|
67 | 67 |
// #define TCG_TARGET_HAS_rot_i32 |
68 | 68 |
#define TCG_TARGET_HAS_andc_i32 |
69 | 69 |
// #define TCG_TARGET_HAS_orc_i32 |
70 |
// #define TCG_TARGET_HAS_eqv_i32 |
|
70 | 71 |
|
71 | 72 |
#define TCG_TARGET_HAS_GUEST_BASE |
72 | 73 |
|
b/tcg/i386/tcg-target.h | ||
---|---|---|
57 | 57 |
#define TCG_TARGET_HAS_not_i32 |
58 | 58 |
// #define TCG_TARGET_HAS_andc_i32 |
59 | 59 |
// #define TCG_TARGET_HAS_orc_i32 |
60 |
// #define TCG_TARGET_HAS_eqv_i32 |
|
60 | 61 |
|
61 | 62 |
#define TCG_TARGET_HAS_GUEST_BASE |
62 | 63 |
|
b/tcg/mips/tcg-target.h | ||
---|---|---|
87 | 87 |
#undef TCG_TARGET_HAS_bswap16_i32 |
88 | 88 |
#undef TCG_TARGET_HAS_andc_i32 |
89 | 89 |
#undef TCG_TARGET_HAS_orc_i32 |
90 |
#undef TCG_TARGET_HAS_eqv_i32 |
|
90 | 91 |
|
91 | 92 |
/* optional instructions automatically implemented */ |
92 | 93 |
#undef TCG_TARGET_HAS_neg_i32 /* sub rd, zero, rt */ |
b/tcg/ppc/tcg-target.h | ||
---|---|---|
89 | 89 |
#define TCG_TARGET_HAS_neg_i32 |
90 | 90 |
#define TCG_TARGET_HAS_andc_i32 |
91 | 91 |
#define TCG_TARGET_HAS_orc_i32 |
92 |
/* #define TCG_TARGET_HAS_eqv_i32 */ |
|
92 | 93 |
|
93 | 94 |
#define TCG_AREG0 TCG_REG_R27 |
94 | 95 |
|
b/tcg/ppc64/tcg-target.h | ||
---|---|---|
80 | 80 |
#define TCG_TARGET_HAS_neg_i32 |
81 | 81 |
/* #define TCG_TARGET_HAS_andc_i32 */ |
82 | 82 |
/* #define TCG_TARGET_HAS_orc_i32 */ |
83 |
/* #define TCG_TARGET_HAS_eqv_i32 */ |
|
83 | 84 |
|
84 | 85 |
#define TCG_TARGET_HAS_div_i64 |
85 | 86 |
/* #define TCG_TARGET_HAS_rot_i64 */ |
... | ... | |
96 | 97 |
#define TCG_TARGET_HAS_neg_i64 |
97 | 98 |
/* #define TCG_TARGET_HAS_andc_i64 */ |
98 | 99 |
/* #define TCG_TARGET_HAS_orc_i64 */ |
100 |
/* #define TCG_TARGET_HAS_eqv_i64 */ |
|
99 | 101 |
|
100 | 102 |
#define TCG_AREG0 TCG_REG_R27 |
101 | 103 |
|
b/tcg/s390/tcg-target.h | ||
---|---|---|
59 | 59 |
// #define TCG_TARGET_HAS_neg_i32 |
60 | 60 |
// #define TCG_TARGET_HAS_andc_i32 |
61 | 61 |
// #define TCG_TARGET_HAS_orc_i32 |
62 |
// #define TCG_TARGET_HAS_eqv_i32 |
|
62 | 63 |
|
63 | 64 |
// #define TCG_TARGET_HAS_div_i64 |
64 | 65 |
// #define TCG_TARGET_HAS_rot_i64 |
... | ... | |
75 | 76 |
// #define TCG_TARGET_HAS_neg_i64 |
76 | 77 |
// #define TCG_TARGET_HAS_andc_i64 |
77 | 78 |
// #define TCG_TARGET_HAS_orc_i64 |
79 |
// #define TCG_TARGET_HAS_eqv_i64 |
|
78 | 80 |
|
79 | 81 |
/* used for function call generation */ |
80 | 82 |
#define TCG_REG_CALL_STACK TCG_REG_R15 |
b/tcg/sparc/tcg-target.h | ||
---|---|---|
100 | 100 |
#define TCG_TARGET_HAS_not_i32 |
101 | 101 |
#define TCG_TARGET_HAS_andc_i32 |
102 | 102 |
#define TCG_TARGET_HAS_orc_i32 |
103 |
// #define TCG_TARGET_HAS_eqv_i32 |
|
103 | 104 |
|
104 | 105 |
#if TCG_TARGET_REG_BITS == 64 |
105 | 106 |
#define TCG_TARGET_HAS_div_i64 |
... | ... | |
117 | 118 |
#define TCG_TARGET_HAS_not_i64 |
118 | 119 |
#define TCG_TARGET_HAS_andc_i64 |
119 | 120 |
#define TCG_TARGET_HAS_orc_i64 |
121 |
// #define TCG_TARGET_HAS_eqv_i64 |
|
120 | 122 |
#endif |
121 | 123 |
|
122 | 124 |
/* Note: must be synced with dyngen-exec.h */ |
b/tcg/tcg-op.h | ||
---|---|---|
1740 | 1740 |
|
1741 | 1741 |
static inline void tcg_gen_eqv_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) |
1742 | 1742 |
{ |
1743 |
#ifdef TCG_TARGET_HAS_eqv_i32 |
|
1744 |
tcg_gen_op3_i32(INDEX_op_eqv_i32, ret, arg1, arg2); |
|
1745 |
#else |
|
1743 | 1746 |
tcg_gen_xor_i32(ret, arg1, arg2); |
1744 | 1747 |
tcg_gen_not_i32(ret, ret); |
1748 |
#endif |
|
1745 | 1749 |
} |
1746 | 1750 |
|
1747 | 1751 |
static inline void tcg_gen_eqv_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) |
1748 | 1752 |
{ |
1753 |
#ifdef TCG_TARGET_HAS_eqv_i64 |
|
1754 |
tcg_gen_op3_i64(INDEX_op_eqv_i64, ret, arg1, arg2); |
|
1755 |
#elif defined(TCG_TARGET_HAS_eqv_i32) && TCG_TARGET_REG_BITS == 32 |
|
1756 |
tcg_gen_eqv_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2)); |
|
1757 |
tcg_gen_eqv_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2)); |
|
1758 |
#else |
|
1749 | 1759 |
tcg_gen_xor_i64(ret, arg1, arg2); |
1750 | 1760 |
tcg_gen_not_i64(ret, ret); |
1761 |
#endif |
|
1751 | 1762 |
} |
1752 | 1763 |
|
1753 | 1764 |
static inline void tcg_gen_nand_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) |
b/tcg/tcg-opc.h | ||
---|---|---|
116 | 116 |
#ifdef TCG_TARGET_HAS_orc_i32 |
117 | 117 |
DEF2(orc_i32, 1, 2, 0, 0) |
118 | 118 |
#endif |
119 |
#ifdef TCG_TARGET_HAS_eqv_i32 |
|
120 |
DEF2(eqv_i32, 1, 2, 0, 0) |
|
121 |
#endif |
|
119 | 122 |
|
120 | 123 |
#if TCG_TARGET_REG_BITS == 64 |
121 | 124 |
DEF2(mov_i64, 1, 1, 0, 0) |
... | ... | |
199 | 202 |
#ifdef TCG_TARGET_HAS_orc_i64 |
200 | 203 |
DEF2(orc_i64, 1, 2, 0, 0) |
201 | 204 |
#endif |
205 |
#ifdef TCG_TARGET_HAS_eqv_i64 |
|
206 |
DEF2(eqv_i64, 1, 2, 0, 0) |
|
207 |
#endif |
|
202 | 208 |
#endif |
203 | 209 |
|
204 | 210 |
/* QEMU specific */ |
b/tcg/x86_64/tcg-target.h | ||
---|---|---|
84 | 84 |
// #define TCG_TARGET_HAS_andc_i64 |
85 | 85 |
// #define TCG_TARGET_HAS_orc_i32 |
86 | 86 |
// #define TCG_TARGET_HAS_orc_i64 |
87 |
// #define TCG_TARGET_HAS_eqv_i32 |
|
88 |
// #define TCG_TARGET_HAS_eqv_i64 |
|
87 | 89 |
|
88 | 90 |
#define TCG_TARGET_HAS_GUEST_BASE |
89 | 91 |
|
Also available in: Unified diff