]> git.proxmox.com Git - qemu.git/blame - tcg/tcg-opc.h
monitor: fix build breakage with --disable-vnc
[qemu.git] / tcg / tcg-opc.h
CommitLineData
c896fe29
FB
1/*
2 * Tiny Code Generator for QEMU
3 *
4 * Copyright (c) 2008 Fabrice Bellard
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 * THE SOFTWARE.
23 */
c61aaf7a
AJ
24
25/*
26 * DEF(name, oargs, iargs, cargs, flags)
27 */
c896fe29
FB
28
29/* predefined ops */
c61aaf7a
AJ
30DEF(end, 0, 0, 0, 0) /* must be kept first */
31DEF(nop, 0, 0, 0, 0)
32DEF(nop1, 0, 0, 1, 0)
33DEF(nop2, 0, 0, 2, 0)
34DEF(nop3, 0, 0, 3, 0)
35DEF(nopn, 0, 0, 1, 0) /* variable number of parameters */
c896fe29 36
c61aaf7a 37DEF(discard, 1, 0, 0, 0)
5ff9d6a4 38
c61aaf7a
AJ
39DEF(set_label, 0, 0, 1, 0)
40DEF(call, 0, 1, 2, TCG_OPF_SIDE_EFFECTS) /* variable number of parameters */
41DEF(jmp, 0, 1, 0, TCG_OPF_BB_END | TCG_OPF_SIDE_EFFECTS)
42DEF(br, 0, 0, 1, TCG_OPF_BB_END | TCG_OPF_SIDE_EFFECTS)
c896fe29 43
c61aaf7a
AJ
44DEF(mov_i32, 1, 1, 0, 0)
45DEF(movi_i32, 1, 0, 1, 0)
46DEF(setcond_i32, 1, 2, 1, 0)
c896fe29 47/* load/store */
c61aaf7a
AJ
48DEF(ld8u_i32, 1, 1, 1, 0)
49DEF(ld8s_i32, 1, 1, 1, 0)
50DEF(ld16u_i32, 1, 1, 1, 0)
51DEF(ld16s_i32, 1, 1, 1, 0)
52DEF(ld_i32, 1, 1, 1, 0)
53DEF(st8_i32, 0, 2, 1, TCG_OPF_SIDE_EFFECTS)
54DEF(st16_i32, 0, 2, 1, TCG_OPF_SIDE_EFFECTS)
55DEF(st_i32, 0, 2, 1, TCG_OPF_SIDE_EFFECTS)
c896fe29 56/* arith */
c61aaf7a
AJ
57DEF(add_i32, 1, 2, 0, 0)
58DEF(sub_i32, 1, 2, 0, 0)
59DEF(mul_i32, 1, 2, 0, 0)
c896fe29 60#ifdef TCG_TARGET_HAS_div_i32
c61aaf7a
AJ
61DEF(div_i32, 1, 2, 0, 0)
62DEF(divu_i32, 1, 2, 0, 0)
63DEF(rem_i32, 1, 2, 0, 0)
64DEF(remu_i32, 1, 2, 0, 0)
30138f28
AJ
65#endif
66#ifdef TCG_TARGET_HAS_div2_i32
c61aaf7a
AJ
67DEF(div2_i32, 2, 3, 0, 0)
68DEF(divu2_i32, 2, 3, 0, 0)
c896fe29 69#endif
c61aaf7a
AJ
70DEF(and_i32, 1, 2, 0, 0)
71DEF(or_i32, 1, 2, 0, 0)
72DEF(xor_i32, 1, 2, 0, 0)
d42f183c 73/* shifts/rotates */
c61aaf7a
AJ
74DEF(shl_i32, 1, 2, 0, 0)
75DEF(shr_i32, 1, 2, 0, 0)
76DEF(sar_i32, 1, 2, 0, 0)
f31e9370 77#ifdef TCG_TARGET_HAS_rot_i32
c61aaf7a
AJ
78DEF(rotl_i32, 1, 2, 0, 0)
79DEF(rotr_i32, 1, 2, 0, 0)
f31e9370 80#endif
b7767f0f
RH
81#ifdef TCG_TARGET_HAS_deposit_i32
82DEF(deposit_i32, 1, 2, 2, 0)
83#endif
c896fe29 84
c61aaf7a 85DEF(brcond_i32, 0, 2, 2, TCG_OPF_BB_END | TCG_OPF_SIDE_EFFECTS)
c896fe29 86#if TCG_TARGET_REG_BITS == 32
c61aaf7a
AJ
87DEF(add2_i32, 2, 4, 0, 0)
88DEF(sub2_i32, 2, 4, 0, 0)
89DEF(brcond2_i32, 0, 4, 2, TCG_OPF_BB_END | TCG_OPF_SIDE_EFFECTS)
90DEF(mulu2_i32, 2, 2, 0, 0)
91DEF(setcond2_i32, 1, 4, 1, 0)
c896fe29
FB
92#endif
93#ifdef TCG_TARGET_HAS_ext8s_i32
c61aaf7a 94DEF(ext8s_i32, 1, 1, 0, 0)
c896fe29
FB
95#endif
96#ifdef TCG_TARGET_HAS_ext16s_i32
c61aaf7a 97DEF(ext16s_i32, 1, 1, 0, 0)
c896fe29 98#endif
cfc86988 99#ifdef TCG_TARGET_HAS_ext8u_i32
c61aaf7a 100DEF(ext8u_i32, 1, 1, 0, 0)
cfc86988
AJ
101#endif
102#ifdef TCG_TARGET_HAS_ext16u_i32
c61aaf7a 103DEF(ext16u_i32, 1, 1, 0, 0)
cfc86988 104#endif
84aafb06 105#ifdef TCG_TARGET_HAS_bswap16_i32
c61aaf7a 106DEF(bswap16_i32, 1, 1, 0, 0)
84aafb06 107#endif
66896cb8 108#ifdef TCG_TARGET_HAS_bswap32_i32
c61aaf7a 109DEF(bswap32_i32, 1, 1, 0, 0)
c896fe29 110#endif
0dd0dd55 111#ifdef TCG_TARGET_HAS_not_i32
c61aaf7a 112DEF(not_i32, 1, 1, 0, 0)
0dd0dd55
AJ
113#endif
114#ifdef TCG_TARGET_HAS_neg_i32
c61aaf7a 115DEF(neg_i32, 1, 1, 0, 0)
0dd0dd55 116#endif
241cbed4 117#ifdef TCG_TARGET_HAS_andc_i32
c61aaf7a 118DEF(andc_i32, 1, 2, 0, 0)
241cbed4 119#endif
791d1262 120#ifdef TCG_TARGET_HAS_orc_i32
c61aaf7a 121DEF(orc_i32, 1, 2, 0, 0)
791d1262 122#endif
8d625cf1 123#ifdef TCG_TARGET_HAS_eqv_i32
c61aaf7a 124DEF(eqv_i32, 1, 2, 0, 0)
8d625cf1 125#endif
9940a96b 126#ifdef TCG_TARGET_HAS_nand_i32
c61aaf7a 127DEF(nand_i32, 1, 2, 0, 0)
9940a96b 128#endif
32d98fbd 129#ifdef TCG_TARGET_HAS_nor_i32
c61aaf7a 130DEF(nor_i32, 1, 2, 0, 0)
32d98fbd 131#endif
c896fe29
FB
132
133#if TCG_TARGET_REG_BITS == 64
c61aaf7a
AJ
134DEF(mov_i64, 1, 1, 0, 0)
135DEF(movi_i64, 1, 0, 1, 0)
136DEF(setcond_i64, 1, 2, 1, 0)
c896fe29 137/* load/store */
c61aaf7a
AJ
138DEF(ld8u_i64, 1, 1, 1, 0)
139DEF(ld8s_i64, 1, 1, 1, 0)
140DEF(ld16u_i64, 1, 1, 1, 0)
141DEF(ld16s_i64, 1, 1, 1, 0)
142DEF(ld32u_i64, 1, 1, 1, 0)
143DEF(ld32s_i64, 1, 1, 1, 0)
144DEF(ld_i64, 1, 1, 1, 0)
145DEF(st8_i64, 0, 2, 1, TCG_OPF_SIDE_EFFECTS)
146DEF(st16_i64, 0, 2, 1, TCG_OPF_SIDE_EFFECTS)
147DEF(st32_i64, 0, 2, 1, TCG_OPF_SIDE_EFFECTS)
148DEF(st_i64, 0, 2, 1, TCG_OPF_SIDE_EFFECTS)
c896fe29 149/* arith */
c61aaf7a
AJ
150DEF(add_i64, 1, 2, 0, 0)
151DEF(sub_i64, 1, 2, 0, 0)
152DEF(mul_i64, 1, 2, 0, 0)
c896fe29 153#ifdef TCG_TARGET_HAS_div_i64
c61aaf7a
AJ
154DEF(div_i64, 1, 2, 0, 0)
155DEF(divu_i64, 1, 2, 0, 0)
156DEF(rem_i64, 1, 2, 0, 0)
157DEF(remu_i64, 1, 2, 0, 0)
30138f28
AJ
158#endif
159#ifdef TCG_TARGET_HAS_div2_i64
c61aaf7a
AJ
160DEF(div2_i64, 2, 3, 0, 0)
161DEF(divu2_i64, 2, 3, 0, 0)
c896fe29 162#endif
c61aaf7a
AJ
163DEF(and_i64, 1, 2, 0, 0)
164DEF(or_i64, 1, 2, 0, 0)
165DEF(xor_i64, 1, 2, 0, 0)
d42f183c 166/* shifts/rotates */
c61aaf7a
AJ
167DEF(shl_i64, 1, 2, 0, 0)
168DEF(shr_i64, 1, 2, 0, 0)
169DEF(sar_i64, 1, 2, 0, 0)
f31e9370 170#ifdef TCG_TARGET_HAS_rot_i64
c61aaf7a
AJ
171DEF(rotl_i64, 1, 2, 0, 0)
172DEF(rotr_i64, 1, 2, 0, 0)
f31e9370 173#endif
b7767f0f
RH
174#ifdef TCG_TARGET_HAS_deposit_i64
175DEF(deposit_i64, 1, 2, 2, 0)
176#endif
c896fe29 177
c61aaf7a 178DEF(brcond_i64, 0, 2, 2, TCG_OPF_BB_END | TCG_OPF_SIDE_EFFECTS)
c896fe29 179#ifdef TCG_TARGET_HAS_ext8s_i64
c61aaf7a 180DEF(ext8s_i64, 1, 1, 0, 0)
c896fe29
FB
181#endif
182#ifdef TCG_TARGET_HAS_ext16s_i64
c61aaf7a 183DEF(ext16s_i64, 1, 1, 0, 0)
c896fe29
FB
184#endif
185#ifdef TCG_TARGET_HAS_ext32s_i64
c61aaf7a 186DEF(ext32s_i64, 1, 1, 0, 0)
c896fe29 187#endif
cfc86988 188#ifdef TCG_TARGET_HAS_ext8u_i64
c61aaf7a 189DEF(ext8u_i64, 1, 1, 0, 0)
cfc86988
AJ
190#endif
191#ifdef TCG_TARGET_HAS_ext16u_i64
c61aaf7a 192DEF(ext16u_i64, 1, 1, 0, 0)
cfc86988
AJ
193#endif
194#ifdef TCG_TARGET_HAS_ext32u_i64
c61aaf7a 195DEF(ext32u_i64, 1, 1, 0, 0)
cfc86988 196#endif
9a5c57fd 197#ifdef TCG_TARGET_HAS_bswap16_i64
c61aaf7a 198DEF(bswap16_i64, 1, 1, 0, 0)
9a5c57fd
AJ
199#endif
200#ifdef TCG_TARGET_HAS_bswap32_i64
c61aaf7a 201DEF(bswap32_i64, 1, 1, 0, 0)
9a5c57fd 202#endif
66896cb8 203#ifdef TCG_TARGET_HAS_bswap64_i64
c61aaf7a 204DEF(bswap64_i64, 1, 1, 0, 0)
c896fe29 205#endif
d2604285 206#ifdef TCG_TARGET_HAS_not_i64
c61aaf7a 207DEF(not_i64, 1, 1, 0, 0)
d2604285 208#endif
390efc54 209#ifdef TCG_TARGET_HAS_neg_i64
c61aaf7a 210DEF(neg_i64, 1, 1, 0, 0)
390efc54 211#endif
241cbed4 212#ifdef TCG_TARGET_HAS_andc_i64
c61aaf7a 213DEF(andc_i64, 1, 2, 0, 0)
241cbed4 214#endif
791d1262 215#ifdef TCG_TARGET_HAS_orc_i64
c61aaf7a 216DEF(orc_i64, 1, 2, 0, 0)
791d1262 217#endif
8d625cf1 218#ifdef TCG_TARGET_HAS_eqv_i64
c61aaf7a 219DEF(eqv_i64, 1, 2, 0, 0)
8d625cf1 220#endif
9940a96b 221#ifdef TCG_TARGET_HAS_nand_i64
c61aaf7a 222DEF(nand_i64, 1, 2, 0, 0)
9940a96b 223#endif
32d98fbd 224#ifdef TCG_TARGET_HAS_nor_i64
c61aaf7a 225DEF(nor_i64, 1, 2, 0, 0)
32d98fbd 226#endif
0dd0dd55 227#endif
c896fe29
FB
228
229/* QEMU specific */
7e4597d7 230#if TARGET_LONG_BITS > TCG_TARGET_REG_BITS
c61aaf7a 231DEF(debug_insn_start, 0, 0, 2, 0)
7e4597d7 232#else
c61aaf7a 233DEF(debug_insn_start, 0, 0, 1, 0)
7e4597d7 234#endif
c61aaf7a
AJ
235DEF(exit_tb, 0, 0, 1, TCG_OPF_BB_END | TCG_OPF_SIDE_EFFECTS)
236DEF(goto_tb, 0, 0, 1, TCG_OPF_BB_END | TCG_OPF_SIDE_EFFECTS)
c896fe29
FB
237/* Note: even if TARGET_LONG_BITS is not defined, the INDEX_op
238 constants must be defined */
239#if TCG_TARGET_REG_BITS == 32
240#if TARGET_LONG_BITS == 32
c61aaf7a 241DEF(qemu_ld8u, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
c896fe29 242#else
c61aaf7a 243DEF(qemu_ld8u, 1, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
c896fe29
FB
244#endif
245#if TARGET_LONG_BITS == 32
c61aaf7a 246DEF(qemu_ld8s, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
c896fe29 247#else
c61aaf7a 248DEF(qemu_ld8s, 1, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
c896fe29
FB
249#endif
250#if TARGET_LONG_BITS == 32
c61aaf7a 251DEF(qemu_ld16u, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
c896fe29 252#else
c61aaf7a 253DEF(qemu_ld16u, 1, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
c896fe29
FB
254#endif
255#if TARGET_LONG_BITS == 32
c61aaf7a 256DEF(qemu_ld16s, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
c896fe29 257#else
c61aaf7a 258DEF(qemu_ld16s, 1, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
c896fe29
FB
259#endif
260#if TARGET_LONG_BITS == 32
c61aaf7a 261DEF(qemu_ld32, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
c896fe29 262#else
c61aaf7a 263DEF(qemu_ld32, 1, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
c896fe29
FB
264#endif
265#if TARGET_LONG_BITS == 32
c61aaf7a 266DEF(qemu_ld64, 2, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
c896fe29 267#else
c61aaf7a 268DEF(qemu_ld64, 2, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
c896fe29
FB
269#endif
270
271#if TARGET_LONG_BITS == 32
c61aaf7a 272DEF(qemu_st8, 0, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
c896fe29 273#else
c61aaf7a 274DEF(qemu_st8, 0, 3, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
c896fe29
FB
275#endif
276#if TARGET_LONG_BITS == 32
c61aaf7a 277DEF(qemu_st16, 0, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
c896fe29 278#else
c61aaf7a 279DEF(qemu_st16, 0, 3, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
c896fe29
FB
280#endif
281#if TARGET_LONG_BITS == 32
c61aaf7a 282DEF(qemu_st32, 0, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
c896fe29 283#else
c61aaf7a 284DEF(qemu_st32, 0, 3, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
c896fe29
FB
285#endif
286#if TARGET_LONG_BITS == 32
c61aaf7a 287DEF(qemu_st64, 0, 3, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
c896fe29 288#else
c61aaf7a 289DEF(qemu_st64, 0, 4, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
c896fe29
FB
290#endif
291
292#else /* TCG_TARGET_REG_BITS == 32 */
293
c61aaf7a
AJ
294DEF(qemu_ld8u, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
295DEF(qemu_ld8s, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
296DEF(qemu_ld16u, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
297DEF(qemu_ld16s, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
298DEF(qemu_ld32, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
299DEF(qemu_ld32u, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
300DEF(qemu_ld32s, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
301DEF(qemu_ld64, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
c896fe29 302
c61aaf7a
AJ
303DEF(qemu_st8, 0, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
304DEF(qemu_st16, 0, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
305DEF(qemu_st32, 0, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
306DEF(qemu_st64, 0, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
c896fe29
FB
307
308#endif /* TCG_TARGET_REG_BITS != 32 */
309
c61aaf7a 310#undef DEF