Statistics
| Branch: | Revision:

root / tcg / tcg-opc.h @ bffd92fe

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 c896fe29 bellard
#include "dyngen-opc.h"
25 c896fe29 bellard
26 c896fe29 bellard
#ifndef DEF2
27 c896fe29 bellard
#define DEF2(name, oargs, iargs, cargs, flags) DEF(name, oargs + iargs + cargs, 0)
28 c896fe29 bellard
#endif
29 c896fe29 bellard
30 c896fe29 bellard
/* predefined ops */
31 c896fe29 bellard
DEF2(end, 0, 0, 0, 0) /* must be kept first */
32 c896fe29 bellard
DEF2(nop, 0, 0, 0, 0)
33 c896fe29 bellard
DEF2(nop1, 0, 0, 1, 0)
34 c896fe29 bellard
DEF2(nop2, 0, 0, 2, 0)
35 c896fe29 bellard
DEF2(nop3, 0, 0, 3, 0)
36 c896fe29 bellard
DEF2(nopn, 0, 0, 1, 0) /* variable number of parameters */
37 c896fe29 bellard
/* macro handling */
38 c896fe29 bellard
DEF2(macro_2, 2, 0, 1, 0)
39 c896fe29 bellard
DEF2(macro_start, 0, 0, 2, 0)
40 c896fe29 bellard
DEF2(macro_end, 0, 0, 2, 0)
41 c896fe29 bellard
DEF2(macro_goto, 0, 0, 3, 0)
42 c896fe29 bellard
43 5ff9d6a4 bellard
DEF2(discard, 1, 0, 0, 0)
44 5ff9d6a4 bellard
45 c896fe29 bellard
DEF2(set_label, 0, 0, 1, 0)
46 5ff9d6a4 bellard
DEF2(call, 0, 1, 2, TCG_OPF_SIDE_EFFECTS) /* variable number of parameters */
47 5ff9d6a4 bellard
DEF2(jmp, 0, 1, 0, TCG_OPF_BB_END | TCG_OPF_SIDE_EFFECTS)
48 5ff9d6a4 bellard
DEF2(br, 0, 0, 1, TCG_OPF_BB_END | TCG_OPF_SIDE_EFFECTS)
49 c896fe29 bellard
50 c896fe29 bellard
DEF2(mov_i32, 1, 1, 0, 0)
51 c896fe29 bellard
DEF2(movi_i32, 1, 0, 1, 0)
52 c896fe29 bellard
/* load/store */
53 c896fe29 bellard
DEF2(ld8u_i32, 1, 1, 1, 0)
54 c896fe29 bellard
DEF2(ld8s_i32, 1, 1, 1, 0)
55 c896fe29 bellard
DEF2(ld16u_i32, 1, 1, 1, 0)
56 c896fe29 bellard
DEF2(ld16s_i32, 1, 1, 1, 0)
57 c896fe29 bellard
DEF2(ld_i32, 1, 1, 1, 0)
58 5ff9d6a4 bellard
DEF2(st8_i32, 0, 2, 1, TCG_OPF_SIDE_EFFECTS)
59 5ff9d6a4 bellard
DEF2(st16_i32, 0, 2, 1, TCG_OPF_SIDE_EFFECTS)
60 5ff9d6a4 bellard
DEF2(st_i32, 0, 2, 1, TCG_OPF_SIDE_EFFECTS)
61 c896fe29 bellard
/* arith */
62 c896fe29 bellard
DEF2(add_i32, 1, 2, 0, 0)
63 c896fe29 bellard
DEF2(sub_i32, 1, 2, 0, 0)
64 c896fe29 bellard
DEF2(mul_i32, 1, 2, 0, 0)
65 c896fe29 bellard
#ifdef TCG_TARGET_HAS_div_i32
66 c896fe29 bellard
DEF2(div_i32, 1, 2, 0, 0)
67 c896fe29 bellard
DEF2(divu_i32, 1, 2, 0, 0)
68 c896fe29 bellard
DEF2(rem_i32, 1, 2, 0, 0)
69 c896fe29 bellard
DEF2(remu_i32, 1, 2, 0, 0)
70 c896fe29 bellard
#else
71 c896fe29 bellard
DEF2(div2_i32, 2, 3, 0, 0)
72 c896fe29 bellard
DEF2(divu2_i32, 2, 3, 0, 0)
73 c896fe29 bellard
#endif
74 c896fe29 bellard
DEF2(and_i32, 1, 2, 0, 0)
75 c896fe29 bellard
DEF2(or_i32, 1, 2, 0, 0)
76 c896fe29 bellard
DEF2(xor_i32, 1, 2, 0, 0)
77 c896fe29 bellard
/* shifts */
78 c896fe29 bellard
DEF2(shl_i32, 1, 2, 0, 0)
79 c896fe29 bellard
DEF2(shr_i32, 1, 2, 0, 0)
80 c896fe29 bellard
DEF2(sar_i32, 1, 2, 0, 0)
81 c896fe29 bellard
82 5ff9d6a4 bellard
DEF2(brcond_i32, 0, 2, 2, TCG_OPF_BB_END | TCG_OPF_SIDE_EFFECTS)
83 c896fe29 bellard
#if TCG_TARGET_REG_BITS == 32
84 c896fe29 bellard
DEF2(add2_i32, 2, 4, 0, 0)
85 c896fe29 bellard
DEF2(sub2_i32, 2, 4, 0, 0)
86 5ff9d6a4 bellard
DEF2(brcond2_i32, 0, 4, 2, TCG_OPF_BB_END | TCG_OPF_SIDE_EFFECTS)
87 c896fe29 bellard
DEF2(mulu2_i32, 2, 2, 0, 0)
88 c896fe29 bellard
#endif
89 c896fe29 bellard
#ifdef TCG_TARGET_HAS_ext8s_i32
90 c896fe29 bellard
DEF2(ext8s_i32, 1, 1, 0, 0)
91 c896fe29 bellard
#endif
92 c896fe29 bellard
#ifdef TCG_TARGET_HAS_ext16s_i32
93 c896fe29 bellard
DEF2(ext16s_i32, 1, 1, 0, 0)
94 c896fe29 bellard
#endif
95 c896fe29 bellard
#ifdef TCG_TARGET_HAS_bswap_i32
96 c896fe29 bellard
DEF2(bswap_i32, 1, 1, 0, 0)
97 c896fe29 bellard
#endif
98 c896fe29 bellard
99 c896fe29 bellard
#if TCG_TARGET_REG_BITS == 64
100 c896fe29 bellard
DEF2(mov_i64, 1, 1, 0, 0)
101 c896fe29 bellard
DEF2(movi_i64, 1, 0, 1, 0)
102 c896fe29 bellard
/* load/store */
103 c896fe29 bellard
DEF2(ld8u_i64, 1, 1, 1, 0)
104 c896fe29 bellard
DEF2(ld8s_i64, 1, 1, 1, 0)
105 c896fe29 bellard
DEF2(ld16u_i64, 1, 1, 1, 0)
106 c896fe29 bellard
DEF2(ld16s_i64, 1, 1, 1, 0)
107 c896fe29 bellard
DEF2(ld32u_i64, 1, 1, 1, 0)
108 c896fe29 bellard
DEF2(ld32s_i64, 1, 1, 1, 0)
109 c896fe29 bellard
DEF2(ld_i64, 1, 1, 1, 0)
110 5ff9d6a4 bellard
DEF2(st8_i64, 0, 2, 1, TCG_OPF_SIDE_EFFECTS)
111 5ff9d6a4 bellard
DEF2(st16_i64, 0, 2, 1, TCG_OPF_SIDE_EFFECTS)
112 5ff9d6a4 bellard
DEF2(st32_i64, 0, 2, 1, TCG_OPF_SIDE_EFFECTS)
113 5ff9d6a4 bellard
DEF2(st_i64, 0, 2, 1, TCG_OPF_SIDE_EFFECTS)
114 c896fe29 bellard
/* arith */
115 c896fe29 bellard
DEF2(add_i64, 1, 2, 0, 0)
116 c896fe29 bellard
DEF2(sub_i64, 1, 2, 0, 0)
117 c896fe29 bellard
DEF2(mul_i64, 1, 2, 0, 0)
118 c896fe29 bellard
#ifdef TCG_TARGET_HAS_div_i64
119 c896fe29 bellard
DEF2(div_i64, 1, 2, 0, 0)
120 c896fe29 bellard
DEF2(divu_i64, 1, 2, 0, 0)
121 c896fe29 bellard
DEF2(rem_i64, 1, 2, 0, 0)
122 c896fe29 bellard
DEF2(remu_i64, 1, 2, 0, 0)
123 c896fe29 bellard
#else
124 c896fe29 bellard
DEF2(div2_i64, 2, 3, 0, 0)
125 c896fe29 bellard
DEF2(divu2_i64, 2, 3, 0, 0)
126 c896fe29 bellard
#endif
127 c896fe29 bellard
DEF2(and_i64, 1, 2, 0, 0)
128 c896fe29 bellard
DEF2(or_i64, 1, 2, 0, 0)
129 c896fe29 bellard
DEF2(xor_i64, 1, 2, 0, 0)
130 c896fe29 bellard
/* shifts */
131 c896fe29 bellard
DEF2(shl_i64, 1, 2, 0, 0)
132 c896fe29 bellard
DEF2(shr_i64, 1, 2, 0, 0)
133 c896fe29 bellard
DEF2(sar_i64, 1, 2, 0, 0)
134 c896fe29 bellard
135 5ff9d6a4 bellard
DEF2(brcond_i64, 0, 2, 2, TCG_OPF_BB_END | TCG_OPF_SIDE_EFFECTS)
136 c896fe29 bellard
#ifdef TCG_TARGET_HAS_ext8s_i64
137 c896fe29 bellard
DEF2(ext8s_i64, 1, 1, 0, 0)
138 c896fe29 bellard
#endif
139 c896fe29 bellard
#ifdef TCG_TARGET_HAS_ext16s_i64
140 c896fe29 bellard
DEF2(ext16s_i64, 1, 1, 0, 0)
141 c896fe29 bellard
#endif
142 c896fe29 bellard
#ifdef TCG_TARGET_HAS_ext32s_i64
143 c896fe29 bellard
DEF2(ext32s_i64, 1, 1, 0, 0)
144 c896fe29 bellard
#endif
145 c896fe29 bellard
#ifdef TCG_TARGET_HAS_bswap_i64
146 c896fe29 bellard
DEF2(bswap_i64, 1, 1, 0, 0)
147 c896fe29 bellard
#endif
148 c896fe29 bellard
#endif
149 c896fe29 bellard
150 c896fe29 bellard
/* QEMU specific */
151 5ff9d6a4 bellard
DEF2(exit_tb, 0, 0, 1, TCG_OPF_BB_END | TCG_OPF_SIDE_EFFECTS)
152 5ff9d6a4 bellard
DEF2(goto_tb, 0, 0, 1, TCG_OPF_BB_END | TCG_OPF_SIDE_EFFECTS)
153 c896fe29 bellard
/* Note: even if TARGET_LONG_BITS is not defined, the INDEX_op
154 c896fe29 bellard
   constants must be defined */
155 c896fe29 bellard
#if TCG_TARGET_REG_BITS == 32
156 c896fe29 bellard
#if TARGET_LONG_BITS == 32
157 5ff9d6a4 bellard
DEF2(qemu_ld8u, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
158 c896fe29 bellard
#else
159 5ff9d6a4 bellard
DEF2(qemu_ld8u, 1, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
160 c896fe29 bellard
#endif
161 c896fe29 bellard
#if TARGET_LONG_BITS == 32
162 5ff9d6a4 bellard
DEF2(qemu_ld8s, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
163 c896fe29 bellard
#else
164 5ff9d6a4 bellard
DEF2(qemu_ld8s, 1, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
165 c896fe29 bellard
#endif
166 c896fe29 bellard
#if TARGET_LONG_BITS == 32
167 5ff9d6a4 bellard
DEF2(qemu_ld16u, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
168 c896fe29 bellard
#else
169 5ff9d6a4 bellard
DEF2(qemu_ld16u, 1, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
170 c896fe29 bellard
#endif
171 c896fe29 bellard
#if TARGET_LONG_BITS == 32
172 5ff9d6a4 bellard
DEF2(qemu_ld16s, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
173 c896fe29 bellard
#else
174 5ff9d6a4 bellard
DEF2(qemu_ld16s, 1, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
175 c896fe29 bellard
#endif
176 c896fe29 bellard
#if TARGET_LONG_BITS == 32
177 5ff9d6a4 bellard
DEF2(qemu_ld32u, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
178 c896fe29 bellard
#else
179 5ff9d6a4 bellard
DEF2(qemu_ld32u, 1, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
180 c896fe29 bellard
#endif
181 c896fe29 bellard
#if TARGET_LONG_BITS == 32
182 5ff9d6a4 bellard
DEF2(qemu_ld32s, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
183 c896fe29 bellard
#else
184 5ff9d6a4 bellard
DEF2(qemu_ld32s, 1, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
185 c896fe29 bellard
#endif
186 c896fe29 bellard
#if TARGET_LONG_BITS == 32
187 5ff9d6a4 bellard
DEF2(qemu_ld64, 2, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
188 c896fe29 bellard
#else
189 5ff9d6a4 bellard
DEF2(qemu_ld64, 2, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
190 c896fe29 bellard
#endif
191 c896fe29 bellard
192 c896fe29 bellard
#if TARGET_LONG_BITS == 32
193 5ff9d6a4 bellard
DEF2(qemu_st8, 0, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
194 c896fe29 bellard
#else
195 5ff9d6a4 bellard
DEF2(qemu_st8, 0, 3, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
196 c896fe29 bellard
#endif
197 c896fe29 bellard
#if TARGET_LONG_BITS == 32
198 5ff9d6a4 bellard
DEF2(qemu_st16, 0, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
199 c896fe29 bellard
#else
200 5ff9d6a4 bellard
DEF2(qemu_st16, 0, 3, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
201 c896fe29 bellard
#endif
202 c896fe29 bellard
#if TARGET_LONG_BITS == 32
203 5ff9d6a4 bellard
DEF2(qemu_st32, 0, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
204 c896fe29 bellard
#else
205 5ff9d6a4 bellard
DEF2(qemu_st32, 0, 3, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
206 c896fe29 bellard
#endif
207 c896fe29 bellard
#if TARGET_LONG_BITS == 32
208 5ff9d6a4 bellard
DEF2(qemu_st64, 0, 3, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
209 c896fe29 bellard
#else
210 5ff9d6a4 bellard
DEF2(qemu_st64, 0, 4, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
211 c896fe29 bellard
#endif
212 c896fe29 bellard
213 c896fe29 bellard
#else /* TCG_TARGET_REG_BITS == 32 */
214 c896fe29 bellard
215 5ff9d6a4 bellard
DEF2(qemu_ld8u, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
216 5ff9d6a4 bellard
DEF2(qemu_ld8s, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
217 5ff9d6a4 bellard
DEF2(qemu_ld16u, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
218 5ff9d6a4 bellard
DEF2(qemu_ld16s, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
219 5ff9d6a4 bellard
DEF2(qemu_ld32u, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
220 5ff9d6a4 bellard
DEF2(qemu_ld32s, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
221 5ff9d6a4 bellard
DEF2(qemu_ld64, 1, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
222 c896fe29 bellard
223 5ff9d6a4 bellard
DEF2(qemu_st8, 0, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
224 5ff9d6a4 bellard
DEF2(qemu_st16, 0, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
225 5ff9d6a4 bellard
DEF2(qemu_st32, 0, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
226 5ff9d6a4 bellard
DEF2(qemu_st64, 0, 2, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
227 c896fe29 bellard
228 c896fe29 bellard
#endif /* TCG_TARGET_REG_BITS != 32 */
229 c896fe29 bellard
230 c896fe29 bellard
#undef DEF2