Statistics
| Branch: | Revision:

root / tcg / tcg-opc.h @ 6ddbc6e4

History | View | Annotate | Download (7.4 kB)

1 c896fe29 bellard
/*
2 c896fe29 bellard
 * Tiny Code Generator for QEMU
3 c896fe29 bellard
 *
4 c896fe29 bellard
 * Copyright (c) 2008 Fabrice Bellard
5 c896fe29 bellard
 *
6 c896fe29 bellard
 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 c896fe29 bellard
 * of this software and associated documentation files (the "Software"), to deal
8 c896fe29 bellard
 * in the Software without restriction, including without limitation the rights
9 c896fe29 bellard
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 c896fe29 bellard
 * copies of the Software, and to permit persons to whom the Software is
11 c896fe29 bellard
 * furnished to do so, subject to the following conditions:
12 c896fe29 bellard
 *
13 c896fe29 bellard
 * The above copyright notice and this permission notice shall be included in
14 c896fe29 bellard
 * all copies or substantial portions of the Software.
15 c896fe29 bellard
 *
16 c896fe29 bellard
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 c896fe29 bellard
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 c896fe29 bellard
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 c896fe29 bellard
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 c896fe29 bellard
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 c896fe29 bellard
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 c896fe29 bellard
 * THE SOFTWARE.
23 c896fe29 bellard
 */
24 cf2be984 blueswir1
#ifndef CONFIG_NO_DYNGEN_OP
25 c896fe29 bellard
#include "dyngen-opc.h"
26 cf2be984 blueswir1
#endif
27 c896fe29 bellard
28 c896fe29 bellard
#ifndef DEF2
29 c896fe29 bellard
#define DEF2(name, oargs, iargs, cargs, flags) DEF(name, oargs + iargs + cargs, 0)
30 c896fe29 bellard
#endif
31 c896fe29 bellard
32 c896fe29 bellard
/* predefined ops */
33 c896fe29 bellard
DEF2(end, 0, 0, 0, 0) /* must be kept first */
34 c896fe29 bellard
DEF2(nop, 0, 0, 0, 0)
35 c896fe29 bellard
DEF2(nop1, 0, 0, 1, 0)
36 c896fe29 bellard
DEF2(nop2, 0, 0, 2, 0)
37 c896fe29 bellard
DEF2(nop3, 0, 0, 3, 0)
38 c896fe29 bellard
DEF2(nopn, 0, 0, 1, 0) /* variable number of parameters */
39 c896fe29 bellard
/* macro handling */
40 c896fe29 bellard
DEF2(macro_2, 2, 0, 1, 0)
41 c896fe29 bellard
DEF2(macro_start, 0, 0, 2, 0)
42 c896fe29 bellard
DEF2(macro_end, 0, 0, 2, 0)
43 c896fe29 bellard
DEF2(macro_goto, 0, 0, 3, 0)
44 c896fe29 bellard
45 5ff9d6a4 bellard
DEF2(discard, 1, 0, 0, 0)
46 5ff9d6a4 bellard
47 c896fe29 bellard
DEF2(set_label, 0, 0, 1, 0)
48 5ff9d6a4 bellard
DEF2(call, 0, 1, 2, TCG_OPF_SIDE_EFFECTS) /* variable number of parameters */
49 5ff9d6a4 bellard
DEF2(jmp, 0, 1, 0, TCG_OPF_BB_END | TCG_OPF_SIDE_EFFECTS)
50 5ff9d6a4 bellard
DEF2(br, 0, 0, 1, TCG_OPF_BB_END | TCG_OPF_SIDE_EFFECTS)
51 c896fe29 bellard
52 c896fe29 bellard
DEF2(mov_i32, 1, 1, 0, 0)
53 c896fe29 bellard
DEF2(movi_i32, 1, 0, 1, 0)
54 c896fe29 bellard
/* load/store */
55 c896fe29 bellard
DEF2(ld8u_i32, 1, 1, 1, 0)
56 c896fe29 bellard
DEF2(ld8s_i32, 1, 1, 1, 0)
57 c896fe29 bellard
DEF2(ld16u_i32, 1, 1, 1, 0)
58 c896fe29 bellard
DEF2(ld16s_i32, 1, 1, 1, 0)
59 c896fe29 bellard
DEF2(ld_i32, 1, 1, 1, 0)
60 5ff9d6a4 bellard
DEF2(st8_i32, 0, 2, 1, TCG_OPF_SIDE_EFFECTS)
61 5ff9d6a4 bellard
DEF2(st16_i32, 0, 2, 1, TCG_OPF_SIDE_EFFECTS)
62 5ff9d6a4 bellard
DEF2(st_i32, 0, 2, 1, TCG_OPF_SIDE_EFFECTS)
63 c896fe29 bellard
/* arith */
64 c896fe29 bellard
DEF2(add_i32, 1, 2, 0, 0)
65 c896fe29 bellard
DEF2(sub_i32, 1, 2, 0, 0)
66 c896fe29 bellard
DEF2(mul_i32, 1, 2, 0, 0)
67 c896fe29 bellard
#ifdef TCG_TARGET_HAS_div_i32
68 c896fe29 bellard
DEF2(div_i32, 1, 2, 0, 0)
69 c896fe29 bellard
DEF2(divu_i32, 1, 2, 0, 0)
70 c896fe29 bellard
DEF2(rem_i32, 1, 2, 0, 0)
71 c896fe29 bellard
DEF2(remu_i32, 1, 2, 0, 0)
72 c896fe29 bellard
#else
73 c896fe29 bellard
DEF2(div2_i32, 2, 3, 0, 0)
74 c896fe29 bellard
DEF2(divu2_i32, 2, 3, 0, 0)
75 c896fe29 bellard
#endif
76 c896fe29 bellard
DEF2(and_i32, 1, 2, 0, 0)
77 c896fe29 bellard
DEF2(or_i32, 1, 2, 0, 0)
78 c896fe29 bellard
DEF2(xor_i32, 1, 2, 0, 0)
79 c896fe29 bellard
/* shifts */
80 c896fe29 bellard
DEF2(shl_i32, 1, 2, 0, 0)
81 c896fe29 bellard
DEF2(shr_i32, 1, 2, 0, 0)
82 c896fe29 bellard
DEF2(sar_i32, 1, 2, 0, 0)
83 c896fe29 bellard
84 5ff9d6a4 bellard
DEF2(brcond_i32, 0, 2, 2, TCG_OPF_BB_END | TCG_OPF_SIDE_EFFECTS)
85 c896fe29 bellard
#if TCG_TARGET_REG_BITS == 32
86 c896fe29 bellard
DEF2(add2_i32, 2, 4, 0, 0)
87 c896fe29 bellard
DEF2(sub2_i32, 2, 4, 0, 0)
88 5ff9d6a4 bellard
DEF2(brcond2_i32, 0, 4, 2, TCG_OPF_BB_END | TCG_OPF_SIDE_EFFECTS)
89 c896fe29 bellard
DEF2(mulu2_i32, 2, 2, 0, 0)
90 c896fe29 bellard
#endif
91 c896fe29 bellard
#ifdef TCG_TARGET_HAS_ext8s_i32
92 c896fe29 bellard
DEF2(ext8s_i32, 1, 1, 0, 0)
93 c896fe29 bellard
#endif
94 c896fe29 bellard
#ifdef TCG_TARGET_HAS_ext16s_i32
95 c896fe29 bellard
DEF2(ext16s_i32, 1, 1, 0, 0)
96 c896fe29 bellard
#endif
97 c896fe29 bellard
#ifdef TCG_TARGET_HAS_bswap_i32
98 c896fe29 bellard
DEF2(bswap_i32, 1, 1, 0, 0)
99 c896fe29 bellard
#endif
100 c896fe29 bellard
101 c896fe29 bellard
#if TCG_TARGET_REG_BITS == 64
102 c896fe29 bellard
DEF2(mov_i64, 1, 1, 0, 0)
103 c896fe29 bellard
DEF2(movi_i64, 1, 0, 1, 0)
104 c896fe29 bellard
/* load/store */
105 c896fe29 bellard
DEF2(ld8u_i64, 1, 1, 1, 0)
106 c896fe29 bellard
DEF2(ld8s_i64, 1, 1, 1, 0)
107 c896fe29 bellard
DEF2(ld16u_i64, 1, 1, 1, 0)
108 c896fe29 bellard
DEF2(ld16s_i64, 1, 1, 1, 0)
109 c896fe29 bellard
DEF2(ld32u_i64, 1, 1, 1, 0)
110 c896fe29 bellard
DEF2(ld32s_i64, 1, 1, 1, 0)
111 c896fe29 bellard
DEF2(ld_i64, 1, 1, 1, 0)
112 5ff9d6a4 bellard
DEF2(st8_i64, 0, 2, 1, TCG_OPF_SIDE_EFFECTS)
113 5ff9d6a4 bellard
DEF2(st16_i64, 0, 2, 1, TCG_OPF_SIDE_EFFECTS)
114 5ff9d6a4 bellard
DEF2(st32_i64, 0, 2, 1, TCG_OPF_SIDE_EFFECTS)
115 5ff9d6a4 bellard
DEF2(st_i64, 0, 2, 1, TCG_OPF_SIDE_EFFECTS)
116 c896fe29 bellard
/* arith */
117 c896fe29 bellard
DEF2(add_i64, 1, 2, 0, 0)
118 c896fe29 bellard
DEF2(sub_i64, 1, 2, 0, 0)
119 c896fe29 bellard
DEF2(mul_i64, 1, 2, 0, 0)
120 c896fe29 bellard
#ifdef TCG_TARGET_HAS_div_i64
121 c896fe29 bellard
DEF2(div_i64, 1, 2, 0, 0)
122 c896fe29 bellard
DEF2(divu_i64, 1, 2, 0, 0)
123 c896fe29 bellard
DEF2(rem_i64, 1, 2, 0, 0)
124 c896fe29 bellard
DEF2(remu_i64, 1, 2, 0, 0)
125 c896fe29 bellard
#else
126 c896fe29 bellard
DEF2(div2_i64, 2, 3, 0, 0)
127 c896fe29 bellard
DEF2(divu2_i64, 2, 3, 0, 0)
128 c896fe29 bellard
#endif
129 c896fe29 bellard
DEF2(and_i64, 1, 2, 0, 0)
130 c896fe29 bellard
DEF2(or_i64, 1, 2, 0, 0)
131 c896fe29 bellard
DEF2(xor_i64, 1, 2, 0, 0)
132 c896fe29 bellard
/* shifts */
133 c896fe29 bellard
DEF2(shl_i64, 1, 2, 0, 0)
134 c896fe29 bellard
DEF2(shr_i64, 1, 2, 0, 0)
135 c896fe29 bellard
DEF2(sar_i64, 1, 2, 0, 0)
136 c896fe29 bellard
137 5ff9d6a4 bellard
DEF2(brcond_i64, 0, 2, 2, TCG_OPF_BB_END | TCG_OPF_SIDE_EFFECTS)
138 c896fe29 bellard
#ifdef TCG_TARGET_HAS_ext8s_i64
139 c896fe29 bellard
DEF2(ext8s_i64, 1, 1, 0, 0)
140 c896fe29 bellard
#endif
141 c896fe29 bellard
#ifdef TCG_TARGET_HAS_ext16s_i64
142 c896fe29 bellard
DEF2(ext16s_i64, 1, 1, 0, 0)
143 c896fe29 bellard
#endif
144 c896fe29 bellard
#ifdef TCG_TARGET_HAS_ext32s_i64
145 c896fe29 bellard
DEF2(ext32s_i64, 1, 1, 0, 0)
146 c896fe29 bellard
#endif
147 c896fe29 bellard
#ifdef TCG_TARGET_HAS_bswap_i64
148 c896fe29 bellard
DEF2(bswap_i64, 1, 1, 0, 0)
149 c896fe29 bellard
#endif
150 c896fe29 bellard
#endif
151 c896fe29 bellard
152 c896fe29 bellard
/* QEMU specific */
153 5ff9d6a4 bellard
DEF2(exit_tb, 0, 0, 1, TCG_OPF_BB_END | TCG_OPF_SIDE_EFFECTS)
154 5ff9d6a4 bellard
DEF2(goto_tb, 0, 0, 1, TCG_OPF_BB_END | TCG_OPF_SIDE_EFFECTS)
155 c896fe29 bellard
/* Note: even if TARGET_LONG_BITS is not defined, the INDEX_op
156 c896fe29 bellard
   constants must be defined */
157 c896fe29 bellard
#if TCG_TARGET_REG_BITS == 32
158 c896fe29 bellard
#if TARGET_LONG_BITS == 32
159 5ff9d6a4 bellard
DEF2(qemu_ld8u, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
160 c896fe29 bellard
#else
161 5ff9d6a4 bellard
DEF2(qemu_ld8u, 1, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
162 c896fe29 bellard
#endif
163 c896fe29 bellard
#if TARGET_LONG_BITS == 32
164 5ff9d6a4 bellard
DEF2(qemu_ld8s, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
165 c896fe29 bellard
#else
166 5ff9d6a4 bellard
DEF2(qemu_ld8s, 1, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
167 c896fe29 bellard
#endif
168 c896fe29 bellard
#if TARGET_LONG_BITS == 32
169 5ff9d6a4 bellard
DEF2(qemu_ld16u, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
170 c896fe29 bellard
#else
171 5ff9d6a4 bellard
DEF2(qemu_ld16u, 1, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
172 c896fe29 bellard
#endif
173 c896fe29 bellard
#if TARGET_LONG_BITS == 32
174 5ff9d6a4 bellard
DEF2(qemu_ld16s, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
175 c896fe29 bellard
#else
176 5ff9d6a4 bellard
DEF2(qemu_ld16s, 1, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
177 c896fe29 bellard
#endif
178 c896fe29 bellard
#if TARGET_LONG_BITS == 32
179 5ff9d6a4 bellard
DEF2(qemu_ld32u, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
180 c896fe29 bellard
#else
181 5ff9d6a4 bellard
DEF2(qemu_ld32u, 1, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
182 c896fe29 bellard
#endif
183 c896fe29 bellard
#if TARGET_LONG_BITS == 32
184 5ff9d6a4 bellard
DEF2(qemu_ld32s, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
185 c896fe29 bellard
#else
186 5ff9d6a4 bellard
DEF2(qemu_ld32s, 1, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
187 c896fe29 bellard
#endif
188 c896fe29 bellard
#if TARGET_LONG_BITS == 32
189 5ff9d6a4 bellard
DEF2(qemu_ld64, 2, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
190 c896fe29 bellard
#else
191 5ff9d6a4 bellard
DEF2(qemu_ld64, 2, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
192 c896fe29 bellard
#endif
193 c896fe29 bellard
194 c896fe29 bellard
#if TARGET_LONG_BITS == 32
195 5ff9d6a4 bellard
DEF2(qemu_st8, 0, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
196 c896fe29 bellard
#else
197 5ff9d6a4 bellard
DEF2(qemu_st8, 0, 3, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
198 c896fe29 bellard
#endif
199 c896fe29 bellard
#if TARGET_LONG_BITS == 32
200 5ff9d6a4 bellard
DEF2(qemu_st16, 0, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
201 c896fe29 bellard
#else
202 5ff9d6a4 bellard
DEF2(qemu_st16, 0, 3, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
203 c896fe29 bellard
#endif
204 c896fe29 bellard
#if TARGET_LONG_BITS == 32
205 5ff9d6a4 bellard
DEF2(qemu_st32, 0, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
206 c896fe29 bellard
#else
207 5ff9d6a4 bellard
DEF2(qemu_st32, 0, 3, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
208 c896fe29 bellard
#endif
209 c896fe29 bellard
#if TARGET_LONG_BITS == 32
210 5ff9d6a4 bellard
DEF2(qemu_st64, 0, 3, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
211 c896fe29 bellard
#else
212 5ff9d6a4 bellard
DEF2(qemu_st64, 0, 4, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
213 c896fe29 bellard
#endif
214 c896fe29 bellard
215 c896fe29 bellard
#else /* TCG_TARGET_REG_BITS == 32 */
216 c896fe29 bellard
217 5ff9d6a4 bellard
DEF2(qemu_ld8u, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
218 5ff9d6a4 bellard
DEF2(qemu_ld8s, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
219 5ff9d6a4 bellard
DEF2(qemu_ld16u, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
220 5ff9d6a4 bellard
DEF2(qemu_ld16s, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
221 5ff9d6a4 bellard
DEF2(qemu_ld32u, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
222 5ff9d6a4 bellard
DEF2(qemu_ld32s, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
223 5ff9d6a4 bellard
DEF2(qemu_ld64, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
224 c896fe29 bellard
225 5ff9d6a4 bellard
DEF2(qemu_st8, 0, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
226 5ff9d6a4 bellard
DEF2(qemu_st16, 0, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
227 5ff9d6a4 bellard
DEF2(qemu_st32, 0, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
228 5ff9d6a4 bellard
DEF2(qemu_st64, 0, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
229 c896fe29 bellard
230 c896fe29 bellard
#endif /* TCG_TARGET_REG_BITS != 32 */
231 c896fe29 bellard
232 c896fe29 bellard
#undef DEF2