Statistics
| Branch: | Revision:

root / tcg / tcg-opc.h @ 3d575329

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