CACAO
emit.hpp
Go to the documentation of this file.
1 /* src/vm/jit/i386/emit.hpp - machine dependent emit function prototypes
2 
3  Copyright (C) 1996-2013
4  CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
5 
6  This file is part of CACAO.
7 
8  This program is free software; you can redistribute it and/or
9  modify it under the terms of the GNU General Public License as
10  published by the Free Software Foundation; either version 2, or (at
11  your option) any later version.
12 
13  This program is distributed in the hope that it will be useful, but
14  WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  General Public License for more details.
17 
18  You should have received a copy of the GNU General Public License
19  along with this program; if not, write to the Free Software
20  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21  02110-1301, USA.
22 
23 */
24 
25 
26 #ifndef MD_EMIT_HPP_
27 #define MD_EMIT_HPP_ 1
28 
29 #include "config.h"
30 #include "vm/types.hpp"
31 
33 
34 
35 #define REG_AL 0
36 #define REG_CL 1
37 #define REG_DL 2
38 #define REG_BL 3
39 #define REG_AH 4
40 #define REG_CH 5
41 #define REG_DH 6
42 #define REG_BH 7
43 
44 
45 /* opcodes for alu instructions */
46 
47 #define ALU_ADD 0
48 #define ALU_OR 1
49 #define ALU_ADC 2
50 #define ALU_SBB 3
51 #define ALU_AND 4
52 #define ALU_SUB 5
53 #define ALU_XOR 6
54 #define ALU_CMP 7
55 
56 
57 #define SHIFT_ROL 0
58 #define SHIFT_ROR 1
59 #define SHIFT_RCL 2
60 #define SHIFT_RCR 3
61 #define SHIFT_SHL 4
62 #define SHIFT_SHR 5
63 #define SHIFT_SAR 7
64 
65 
66 #define CC_O 0
67 #define CC_NO 1
68 #define CC_B 2
69 #define CC_C 2
70 #define CC_NAE 2
71 #define CC_AE 3
72 #define CC_NB 3
73 #define CC_NC 3
74 #define CC_E 4
75 #define CC_Z 4
76 #define CC_NE 5
77 #define CC_NZ 5
78 #define CC_BE 6
79 #define CC_NA 6
80 #define CC_A 7
81 #define CC_NBE 7
82 #define CC_S 8
83 #define CC_LZ 8
84 #define CC_NS 9
85 #define CC_GEZ 9
86 #define CC_P 0x0a
87 #define CC_PE 0x0a
88 #define CC_NP 0x0b
89 #define CC_PO 0x0b
90 #define CC_L 0x0c
91 #define CC_NGE 0x0c
92 #define CC_GE 0x0d
93 #define CC_NL 0x0d
94 #define CC_LE 0x0e
95 #define CC_NG 0x0e
96 #define CC_G 0x0f
97 #define CC_NLE 0x0f
98 
99 
100 /* modrm and stuff */
101 
102 #define emit_address_byte(mod,reg,rm) \
103  do { \
104  *(cd->mcodeptr++) = ((((mod) & 0x03) << 6) | (((reg) & 0x07) << 3) | (((rm) & 0x07))); \
105  } while (0)
106 
107 
108 #define emit_imm8(imm) \
109  do { \
110  *(cd->mcodeptr++) = (u1) ((imm) & 0xff); \
111  } while (0)
112 
113 
114 #define emit_imm16(imm) \
115  do { \
116  imm_union imb; \
117  imb.i = (int) (imm); \
118  *(cd->mcodeptr++) = imb.b[0]; \
119  *(cd->mcodeptr++) = imb.b[1]; \
120  } while (0)
121 
122 
123 #define emit_imm32(imm) \
124  do { \
125  imm_union imb; \
126  imb.i = (int) (imm); \
127  *(cd->mcodeptr++) = imb.b[0]; \
128  *(cd->mcodeptr++) = imb.b[1]; \
129  *(cd->mcodeptr++) = imb.b[2]; \
130  *(cd->mcodeptr++) = imb.b[3]; \
131  } while (0)
132 
133 
134 #define emit_mem(r,mem) \
135  do { \
136  emit_address_byte(0,(r),5); \
137  emit_imm32((mem)); \
138  } while (0)
139 
140 
141 /* convenience macros *********************************************************/
142 
143 #define emit_reg(reg,rm) emit_address_byte(3,(reg),(rm))
144 
145 /* integer instructions */
146 
147 void emit_mov_reg_reg(codegendata *cd, s4 reg, s4 dreg);
148 void emit_mov_imm_reg(codegendata *cd, s4 imm, s4 dreg);
149 void emit_mov_imm2_reg(codegendata *cd, s4 imm, s4 dreg);
150 void emit_movb_imm_reg(codegendata *cd, s4 imm, s4 dreg);
151 void emit_mov_membase_reg(codegendata *cd, s4 basereg, s4 disp, s4 reg);
152 void emit_mov_membase32_reg(codegendata *cd, s4 basereg, s4 disp, s4 reg);
153 void emit_mov_reg_membase(codegendata *cd, s4 reg, s4 basereg, s4 disp);
154 void emit_mov_reg_membase32(codegendata *cd, s4 reg, s4 basereg, s4 disp);
155 void emit_mov_memindex_reg(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale, s4 reg);
156 void emit_mov_reg_memindex(codegendata *cd, s4 reg, s4 disp, s4 basereg, s4 indexreg, s4 scale);
157 void emit_movw_reg_memindex(codegendata *cd, s4 reg, s4 disp, s4 basereg, s4 indexreg, s4 scale);
158 void emit_movb_reg_memindex(codegendata *cd, s4 reg, s4 disp, s4 basereg, s4 indexreg, s4 scale);
159 void emit_mov_reg_mem(codegendata *cd, s4 reg, s4 mem);
160 void emit_mov_mem_reg(codegendata *cd, s4 mem, s4 dreg);
161 void emit_mov_imm_mem(codegendata *cd, s4 imm, s4 mem);
162 void emit_mov_imm_membase(codegendata *cd, s4 imm, s4 basereg, s4 disp);
163 void emit_mov_imm_membase32(codegendata *cd, s4 imm, s4 basereg, s4 disp);
164 void emit_movb_imm_membase(codegendata *cd, s4 imm, s4 basereg, s4 disp);
165 void emit_movsbl_reg_reg(codegendata *cd, s4 a, s4 b);
166 void emit_movsbl_memindex_reg(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale, s4 reg);
167 void emit_movswl_reg_reg(codegendata *cd, s4 a, s4 b);
168 void emit_movswl_memindex_reg(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale, s4 reg);
169 void emit_movzbl_reg_reg(codegendata *cd, s4 a, s4 b);
170 void emit_movzwl_reg_reg(codegendata *cd, s4 a, s4 b);
171 void emit_movzwl_memindex_reg(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale, s4 reg);
172 void emit_mov_imm_memindex(codegendata *cd, s4 imm, s4 disp, s4 basereg, s4 indexreg, s4 scale);
173 void emit_movw_imm_memindex(codegendata *cd, s4 imm, s4 disp, s4 basereg, s4 indexreg, s4 scale);
174 void emit_movb_imm_memindex(codegendata *cd, s4 imm, s4 disp, s4 basereg, s4 indexreg, s4 scale);
175 
176 void emit_alu_reg_reg(codegendata *cd, s4 opc, s4 reg, s4 dreg);
177 void emit_alu_reg_membase(codegendata *cd, s4 opc, s4 reg, s4 basereg, s4 disp);
178 void emit_alu_membase_reg(codegendata *cd, s4 opc, s4 basereg, s4 disp, s4 reg);
179 void emit_alu_imm_reg(codegendata *cd, s4 opc, s4 imm, s4 reg);
180 void emit_alu_imm32_reg(codegendata *cd, s4 opc, s4 imm, s4 reg);
181 void emit_alu_imm_membase(codegendata *cd, s4 opc, s4 imm, s4 basereg, s4 disp);
182 void emit_alu_imm_memabs(codegendata *cd, s4 opc, s4 imm, s4 disp);
183 void emit_alu_memindex_reg(codegendata *cd, s4 opc, s4 disp, s4 basereg, s4 indexreg, s4 scale, s4 reg);
184 void emit_inc_reg(codegendata *cd, s4 reg);
185 void emit_test_reg_reg(codegendata *cd, s4 reg, s4 dreg);
186 void emit_test_imm_reg(codegendata *cd, s4 imm, s4 dreg);
187 void emit_dec_mem(codegendata *cd, s4 mem);
188 void emit_imul_reg_reg(codegendata *cd, s4 reg, s4 dreg);
189 void emit_imul_membase_reg(codegendata *cd, s4 basereg, s4 disp, s4 dreg);
190 void emit_imul_imm_reg(codegendata *cd, s4 imm, s4 reg);
191 void emit_imul_imm_reg_reg(codegendata *cd, s4 imm, s4 reg, s4 dreg);
192 void emit_imul_imm_membase_reg(codegendata *cd, s4 imm, s4 basereg, s4 disp, s4 dreg);
193 void emit_mul_reg(codegendata *cd, s4 reg);
194 void emit_idiv_reg(codegendata *cd, s4 reg);
195 void emit_shift_reg(codegendata *cd, s4 opc, s4 reg);
196 void emit_shift_imm_reg(codegendata *cd, s4 opc, s4 imm, s4 reg);
197 void emit_shld_reg_reg(codegendata *cd, s4 reg, s4 dreg);
198 void emit_shld_imm_reg_reg(codegendata *cd, s4 imm, s4 reg, s4 dreg);
199 void emit_shld_reg_membase(codegendata *cd, s4 reg, s4 basereg, s4 disp);
200 void emit_shrd_reg_reg(codegendata *cd, s4 reg, s4 dreg);
201 void emit_shrd_imm_reg_reg(codegendata *cd, s4 imm, s4 reg, s4 dreg);
202 void emit_shrd_reg_membase(codegendata *cd, s4 reg, s4 basereg, s4 disp);
203 void emit_jmp_imm(codegendata *cd, s4 imm);
204 void emit_jmp_reg(codegendata *cd, s4 reg);
205 void emit_jcc(codegendata *cd, s4 opc, s4 imm);
206 void emit_setcc_reg(codegendata *cd, s4 opc, s4 reg);
207 void emit_setcc_membase(codegendata *cd, s4 opc, s4 basereg, s4 disp);
208 void emit_xadd_reg_mem(codegendata *cd, s4 reg, s4 mem);
209 void emit_neg_reg(codegendata *cd, s4 reg);
210 void emit_push_imm(codegendata *cd, s4 imm);
211 void emit_pop_reg(codegendata *cd, s4 reg);
212 void emit_push_reg(codegendata *cd, s4 reg);
213 void emit_lock(codegendata *cd);
214 void emit_call_reg(codegendata *cd, s4 reg);
215 void emit_call_imm(codegendata *cd, s4 imm);
216 void emit_call_mem(codegendata *cd, s4 mem);
217 
218 
219 /* floating point instructions */
220 
221 void emit_fld1(codegendata *cd);
222 void emit_fldz(codegendata *cd);
223 void emit_fld_reg(codegendata *cd, s4 reg);
224 void emit_flds_membase(codegendata *cd, s4 basereg, s4 disp);
225 void emit_flds_membase32(codegendata *cd, s4 basereg, s4 disp);
226 void emit_fldl_membase(codegendata *cd, s4 basereg, s4 disp);
227 void emit_fldl_membase32(codegendata *cd, s4 basereg, s4 disp);
228 void emit_fldt_membase(codegendata *cd, s4 basereg, s4 disp);
229 void emit_flds_memindex(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale);
230 void emit_fldl_memindex(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale);
231 void emit_flds_mem(codegendata *cd, s4 mem);
232 void emit_fldl_mem(codegendata *cd, s4 mem);
233 void emit_fildl_membase(codegendata *cd, s4 basereg, s4 disp);
234 void emit_fildll_membase(codegendata *cd, s4 basereg, s4 disp);
235 void emit_fst_reg(codegendata *cd, s4 reg);
236 void emit_fsts_membase(codegendata *cd, s4 basereg, s4 disp);
237 void emit_fstl_membase(codegendata *cd, s4 basereg, s4 disp);
238 void emit_fsts_memindex(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale);
239 void emit_fstl_memindex(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale);
240 void emit_fstp_reg(codegendata *cd, s4 reg);
241 void emit_fstps_membase(codegendata *cd, s4 basereg, s4 disp);
242 void emit_fstps_membase32(codegendata *cd, s4 basereg, s4 disp);
243 void emit_fstpl_membase(codegendata *cd, s4 basereg, s4 disp);
244 void emit_fstpl_membase32(codegendata *cd, s4 basereg, s4 disp);
245 void emit_fstpt_membase(codegendata *cd, s4 basereg, s4 disp);
246 void emit_fstps_memindex(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale);
247 void emit_fstpl_memindex(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale);
248 void emit_fstps_mem(codegendata *cd, s4 mem);
249 void emit_fstpl_mem(codegendata *cd, s4 mem);
250 void emit_fistl_membase(codegendata *cd, s4 basereg, s4 disp);
251 void emit_fistpl_membase(codegendata *cd, s4 basereg, s4 disp);
252 void emit_fistpll_membase(codegendata *cd, s4 basereg, s4 disp);
253 void emit_fchs(codegendata *cd);
254 void emit_faddp(codegendata *cd);
255 void emit_fadd_reg_st(codegendata *cd, s4 reg);
256 void emit_fadd_st_reg(codegendata *cd, s4 reg);
257 void emit_faddp_st_reg(codegendata *cd, s4 reg);
258 void emit_fadds_membase(codegendata *cd, s4 basereg, s4 disp);
259 void emit_faddl_membase(codegendata *cd, s4 basereg, s4 disp);
260 void emit_fsub_reg_st(codegendata *cd, s4 reg);
261 void emit_fsub_st_reg(codegendata *cd, s4 reg);
262 void emit_fsubp_st_reg(codegendata *cd, s4 reg);
263 void emit_fsubp(codegendata *cd);
264 void emit_fsubs_membase(codegendata *cd, s4 basereg, s4 disp);
265 void emit_fsubl_membase(codegendata *cd, s4 basereg, s4 disp);
266 void emit_fmul_reg_st(codegendata *cd, s4 reg);
267 void emit_fmul_st_reg(codegendata *cd, s4 reg);
268 void emit_fmulp(codegendata *cd);
269 void emit_fmulp_st_reg(codegendata *cd, s4 reg);
270 void emit_fmuls_membase(codegendata *cd, s4 basereg, s4 disp);
271 void emit_fmull_membase(codegendata *cd, s4 basereg, s4 disp);
272 void emit_fdiv_reg_st(codegendata *cd, s4 reg);
273 void emit_fdiv_st_reg(codegendata *cd, s4 reg);
274 void emit_fdivp(codegendata *cd);
275 void emit_fdivp_st_reg(codegendata *cd, s4 reg);
276 void emit_fxch(codegendata *cd);
277 void emit_fxch_reg(codegendata *cd, s4 reg);
278 void emit_fprem(codegendata *cd);
279 void emit_fprem1(codegendata *cd);
280 void emit_fucom(codegendata *cd);
281 void emit_fucom_reg(codegendata *cd, s4 reg);
282 void emit_fucomp_reg(codegendata *cd, s4 reg);
283 void emit_fucompp(codegendata *cd);
284 void emit_fnstsw(codegendata *cd);
285 void emit_sahf(codegendata *cd);
286 void emit_finit(codegendata *cd);
287 void emit_fldcw_mem(codegendata *cd, s4 mem);
288 void emit_fldcw_membase(codegendata *cd, s4 basereg, s4 disp);
289 void emit_wait(codegendata *cd);
290 void emit_ffree_reg(codegendata *cd, s4 reg);
291 void emit_fdecstp(codegendata *cd);
292 void emit_fincstp(codegendata *cd);
293 
294 #if defined(ENABLE_ESCAPE_CHECK)
295 void emit_escape_check(codegendata *cd, s4 reg);
296 void emit_escape_annotate_object(codegendata *cd, methodinfo *m);
297 #endif
298 
299 
300 /**
301  * Emit code to recompute the procedure vector. This is a nop,
302  * because we do not use a procedure vector.
303  */
304 static inline void emit_recompute_pv(codegendata* cd) {}
305 
306 #endif // MD_EMIT_HPP_
307 
308 
309 /*
310  * These are local overrides for various environment variables in Emacs.
311  * Please do not remove this and leave it at the end of the file, where
312  * Emacs will automagically detect them.
313  * ---------------------------------------------------------------------
314  * Local variables:
315  * mode: c++
316  * indent-tabs-mode: t
317  * c-basic-offset: 4
318  * tab-width: 4
319  * End:
320  */
void emit_fsubs_membase(codegendata *cd, s4 basereg, s4 disp)
Definition: emit.cpp:1910
void emit_imul_membase_reg(codegendata *cd, s4 basereg, s4 disp, s4 dreg)
Definition: emit.cpp:1355
void emit_test_reg_reg(codegendata *cd, s4 reg, s4 dreg)
Definition: emit.cpp:1315
void emit_fprem(codegendata *cd)
Definition: emit.cpp:2008
void emit_imul_imm_membase_reg(codegendata *cd, s4 imm, s4 basereg, s4 disp, s4 dreg)
Definition: emit.cpp:1391
void emit_neg_reg(codegendata *cd, s4 reg)
Definition: emit.cpp:1555
void emit_setcc_reg(codegendata *cd, s4 opc, s4 reg)
Definition: emit.cpp:1530
void emit_mov_reg_memindex(codegendata *cd, s4 reg, s4 disp, s4 basereg, s4 indexreg, s4 scale)
Definition: emit.cpp:1077
void emit_fmul_st_reg(codegendata *cd, s4 reg)
Definition: emit.cpp:1931
void emit_movb_imm_reg(codegendata *cd, s4 imm, s4 reg)
Definition: emit.cpp:1025
void emit_shrd_imm_reg_reg(codegendata *cd, s4 imm, s4 reg, s4 dreg)
Definition: emit.cpp:1483
void emit_mov_membase_reg(codegendata *cd, s4 basereg, s4 disp, s4 reg)
Definition: emit.cpp:1033
void emit_fsubp_st_reg(codegendata *cd, s4 reg)
Definition: emit.cpp:1896
void emit_flds_mem(codegendata *cd, s4 mem)
Definition: emit.cpp:1679
void emit_push_reg(codegendata *cd, s4 reg)
Definition: emit.cpp:1576
void emit_movw_reg_memindex(codegendata *cd, s4 reg, s4 disp, s4 basereg, s4 indexreg, s4 scale)
Definition: emit.cpp:1085
void emit_fmull_membase(codegendata *cd, s4 basereg, s4 disp)
Definition: emit.cpp:1959
void emit_mov_membase32_reg(codegendata *cd, s4 basereg, s4 disp, s4 reg)
Definition: emit.cpp:1045
void emit_fchs(codegendata *cd)
Definition: emit.cpp:1833
void emit_alu_membase_reg(codegendata *cd, s4 opc, s4 basereg, s4 disp, s4 reg)
Definition: emit.cpp:1253
void emit_sahf(codegendata *cd)
Definition: emit.cpp:2057
void emit_flds_membase(codegendata *cd, s4 basereg, s4 disp)
Definition: emit.cpp:1630
void emit_movzbl_reg_reg(codegendata *cd, s4 a, s4 b)
Definition: emit.cpp:1185
void emit_mov_mem_reg(codegendata *cd, s4 mem, s4 dreg)
Definition: emit.cpp:1110
void emit_push_imm(codegendata *cd, s4 imm)
Definition: emit.cpp:1563
void emit_shrd_reg_membase(codegendata *cd, s4 reg, s4 basereg, s4 disp)
Definition: emit.cpp:1492
void emit_shld_imm_reg_reg(codegendata *cd, s4 imm, s4 reg, s4 dreg)
Definition: emit.cpp:1458
void emit_fsub_st_reg(codegendata *cd, s4 reg)
Definition: emit.cpp:1889
void emit_fildll_membase(codegendata *cd, s4 basereg, s4 disp)
Definition: emit.cpp:1700
void emit_fdivp_st_reg(codegendata *cd, s4 reg)
Definition: emit.cpp:1987
void emit_finit(codegendata *cd)
Definition: emit.cpp:2063
void emit_alu_imm_memabs(codegendata *cd, s4 opc, s4 imm, s4 disp)
Definition: emit.cpp:1296
void emit_mov_reg_membase32(codegendata *cd, s4 reg, s4 basereg, s4 disp)
Definition: emit.cpp:1061
void emit_mov_imm_memindex(codegendata *cd, s4 imm, s4 disp, s4 basereg, s4 indexreg, s4 scale)
Definition: emit.cpp:1211
void emit_fistl_membase(codegendata *cd, s4 basereg, s4 disp)
Definition: emit.cpp:1812
void emit_movb_imm_memindex(codegendata *cd, s4 imm, s4 disp, s4 basereg, s4 indexreg, s4 scale)
Definition: emit.cpp:1228
void emit_alu_reg_reg(codegendata *cd, s4 opc, s4 reg, s4 dreg)
Definition: emit.cpp:1239
void emit_fmuls_membase(codegendata *cd, s4 basereg, s4 disp)
Definition: emit.cpp:1952
void emit_fldl_membase32(codegendata *cd, s4 basereg, s4 disp)
Definition: emit.cpp:1651
void emit_fadds_membase(codegendata *cd, s4 basereg, s4 disp)
Definition: emit.cpp:1868
void emit_jmp_reg(codegendata *cd, s4 reg)
Definition: emit.cpp:1511
void emit_fucompp(codegendata *cd)
Definition: emit.cpp:2043
void emit_faddp_st_reg(codegendata *cd, s4 reg)
Definition: emit.cpp:1861
void emit_alu_imm_membase(codegendata *cd, s4 opc, s4 imm, s4 basereg, s4 disp)
Definition: emit.cpp:1282
void emit_fdivp(codegendata *cd)
Definition: emit.cpp:1980
void emit_call_imm(codegendata *cd, s4 imm)
Definition: emit.cpp:1598
void emit_fstps_mem(codegendata *cd, s4 mem)
Definition: emit.cpp:1798
void emit_movzwl_memindex_reg(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale, s4 reg)
Definition: emit.cpp:1202
void emit_recompute_pv(codegendata *cd)
Emit code to recompute the procedure vector.
Definition: emit.cpp:495
void emit_fistpll_membase(codegendata *cd, s4 basereg, s4 disp)
Definition: emit.cpp:1826
void emit_shld_reg_reg(codegendata *cd, s4 reg, s4 dreg)
Definition: emit.cpp:1450
void emit_fstpl_membase32(codegendata *cd, s4 basereg, s4 disp)
Definition: emit.cpp:1770
void emit_fld1(codegendata *cd)
Definition: emit.cpp:1609
void emit_setcc_membase(codegendata *cd, s4 opc, s4 basereg, s4 disp)
Definition: emit.cpp:1539
void emit_imul_imm_reg(codegendata *cd, s4 imm, s4 dreg)
Definition: emit.cpp:1363
void emit_fst_reg(codegendata *cd, s4 reg)
Definition: emit.cpp:1707
void emit_xadd_reg_mem(codegendata *cd, s4 reg, s4 mem)
Definition: emit.cpp:1547
void emit_fsts_memindex(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale)
Definition: emit.cpp:1728
void emit_dec_mem(codegendata *cd, s4 mem)
Definition: emit.cpp:1340
void emit_fstps_membase(codegendata *cd, s4 basereg, s4 disp)
Definition: emit.cpp:1749
void emit_fucomp_reg(codegendata *cd, s4 reg)
Definition: emit.cpp:2036
void emit_test_imm_reg(codegendata *cd, s4 imm, s4 reg)
Definition: emit.cpp:1322
void emit_fldl_membase(codegendata *cd, s4 basereg, s4 disp)
Definition: emit.cpp:1644
void emit_fstpl_membase(codegendata *cd, s4 basereg, s4 disp)
Definition: emit.cpp:1763
void emit_fsubp(codegendata *cd)
Definition: emit.cpp:1903
void emit_fadd_reg_st(codegendata *cd, s4 reg)
Definition: emit.cpp:1847
void emit_fstp_reg(codegendata *cd, s4 reg)
Definition: emit.cpp:1742
void emit_call_reg(codegendata *cd, s4 reg)
Definition: emit.cpp:1591
void emit_movb_reg_memindex(codegendata *cd, s4 reg, s4 disp, s4 basereg, s4 indexreg, s4 scale)
Definition: emit.cpp:1094
void emit_imul_reg_reg(codegendata *cd, s4 reg, s4 dreg)
Definition: emit.cpp:1347
void emit_flds_membase32(codegendata *cd, s4 basereg, s4 disp)
Definition: emit.cpp:1637
void emit_mul_reg(codegendata *cd, s4 reg)
Definition: emit.cpp:1405
void emit_movsbl_memindex_reg(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale, s4 reg)
Definition: emit.cpp:1159
void emit_fldcw_membase(codegendata *cd, s4 basereg, s4 disp)
Definition: emit.cpp:2078
void emit_mov_imm_membase32(codegendata *cd, s4 imm, s4 basereg, s4 disp)
Definition: emit.cpp:1134
void emit_movswl_memindex_reg(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale, s4 reg)
Definition: emit.cpp:1176
void emit_fmulp(codegendata *cd)
Definition: emit.cpp:1938
void emit_fucom(codegendata *cd)
Definition: emit.cpp:2022
void emit_shift_reg(codegendata *cd, s4 opc, s4 reg)
Definition: emit.cpp:1430
void emit_fxch_reg(codegendata *cd, s4 reg)
Definition: emit.cpp:2001
void emit_shrd_reg_reg(codegendata *cd, s4 reg, s4 dreg)
Definition: emit.cpp:1475
void emit_flds_memindex(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale)
Definition: emit.cpp:1665
void emit_imul_imm_reg_reg(codegendata *cd, s4 imm, s4 reg, s4 dreg)
Definition: emit.cpp:1377
void emit_mov_imm_mem(codegendata *cd, s4 imm, s4 mem)
Definition: emit.cpp:1118
void emit_fdiv_st_reg(codegendata *cd, s4 reg)
Definition: emit.cpp:1973
void emit_fstl_membase(codegendata *cd, s4 basereg, s4 disp)
Definition: emit.cpp:1721
void emit_ffree_reg(codegendata *cd, s4 reg)
Definition: emit.cpp:2091
void emit_mov_imm2_reg(codegendata *cd, s4 imm, s4 reg)
Definition: emit.cpp:1016
void emit_fldl_mem(codegendata *cd, s4 mem)
Definition: emit.cpp:1686
int32_t s4
Definition: types.hpp:45
void emit_fmulp_st_reg(codegendata *cd, s4 reg)
Definition: emit.cpp:1945
void emit_wait(codegendata *cd)
Definition: emit.cpp:2085
void emit_mov_imm_reg(codegendata *cd, s4 imm, s4 reg)
Definition: emit.cpp:1009
void emit_mov_memindex_reg(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale, s4 reg)
Definition: emit.cpp:1069
void emit_alu_reg_membase(codegendata *cd, s4 opc, s4 reg, s4 basereg, s4 disp)
Definition: emit.cpp:1246
void emit_fsub_reg_st(codegendata *cd, s4 reg)
Definition: emit.cpp:1882
void emit_mov_reg_reg(codegendata *cd, s4 reg, s4 dreg)
Definition: emit.cpp:1001
void emit_fprem1(codegendata *cd)
Definition: emit.cpp:2015
void emit_alu_imm_reg(codegendata *cd, s4 opc, s4 imm, s4 dreg)
Definition: emit.cpp:1260
void emit_movswl_reg_reg(codegendata *cd, s4 a, s4 b)
Definition: emit.cpp:1168
void emit_fldz(codegendata *cd)
Definition: emit.cpp:1616
void emit_fstps_memindex(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale)
Definition: emit.cpp:1784
void emit_alu_memindex_reg(codegendata *cd, s4 opc, s4 disp, s4 basereg, s4 indexreg, s4 scale, s4 reg)
Definition: emit.cpp:1309
void emit_fadd_st_reg(codegendata *cd, s4 reg)
Definition: emit.cpp:1854
void emit_movzwl_reg_reg(codegendata *cd, s4 a, s4 b)
Definition: emit.cpp:1194
void emit_jcc(codegendata *cd, s4 opc, s4 imm)
Definition: emit.cpp:1518
void emit_fstl_memindex(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale)
Definition: emit.cpp:1735
void emit_fucom_reg(codegendata *cd, s4 reg)
Definition: emit.cpp:2029
void emit_fmul_reg_st(codegendata *cd, s4 reg)
Definition: emit.cpp:1924
void emit_pop_reg(codegendata *cd, s4 reg)
Definition: emit.cpp:1570
void emit_movw_imm_memindex(codegendata *cd, s4 imm, s4 disp, s4 basereg, s4 indexreg, s4 scale)
Definition: emit.cpp:1219
void emit_call_mem(codegendata *cd, s4 mem)
void emit_fsts_membase(codegendata *cd, s4 basereg, s4 disp)
Definition: emit.cpp:1714
void emit_mov_imm_membase(codegendata *cd, s4 imm, s4 basereg, s4 disp)
Definition: emit.cpp:1126
void emit_lock(codegendata *cd)
Definition: emit.cpp:1582
void emit_fxch(codegendata *cd)
Definition: emit.cpp:1994
void emit_faddl_membase(codegendata *cd, s4 basereg, s4 disp)
Definition: emit.cpp:1875
void emit_fstpl_mem(codegendata *cd, s4 mem)
Definition: emit.cpp:1805
void emit_movb_imm_membase(codegendata *cd, s4 imm, s4 basereg, s4 disp)
Definition: emit.cpp:1142
void emit_mov_reg_membase(codegendata *cd, s4 reg, s4 basereg, s4 disp)
Definition: emit.cpp:1053
void emit_jmp_imm(codegendata *cd, s4 imm)
Definition: emit.cpp:1504
void emit_shld_reg_membase(codegendata *cd, s4 reg, s4 basereg, s4 disp)
Definition: emit.cpp:1467
void emit_shift_imm_reg(codegendata *cd, s4 opc, s4 imm, s4 dreg)
Definition: emit.cpp:1437
void emit_alu_imm32_reg(codegendata *cd, s4 opc, s4 imm, s4 dreg)
Definition: emit.cpp:1274
void emit_fstpt_membase(codegendata *cd, s4 basereg, s4 disp)
Definition: emit.cpp:1777
void emit_fildl_membase(codegendata *cd, s4 basereg, s4 disp)
Definition: emit.cpp:1693
void emit_fincstp(codegendata *cd)
Definition: emit.cpp:2105
void emit_faddp(codegendata *cd)
Definition: emit.cpp:1840
void emit_inc_reg(codegendata *cd, s4 reg)
Definition: emit.cpp:1334
void emit_fdecstp(codegendata *cd)
Definition: emit.cpp:2098
void emit_fstpl_memindex(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale)
Definition: emit.cpp:1791
void emit_fldt_membase(codegendata *cd, s4 basereg, s4 disp)
Definition: emit.cpp:1658
void emit_mov_reg_mem(codegendata *cd, s4 reg, s4 mem)
Definition: emit.cpp:1102
void emit_fistpl_membase(codegendata *cd, s4 basereg, s4 disp)
Definition: emit.cpp:1819
void emit_fldl_memindex(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale)
Definition: emit.cpp:1672
void emit_fldcw_mem(codegendata *cd, s4 mem)
Definition: emit.cpp:2071
void emit_fdiv_reg_st(codegendata *cd, s4 reg)
Definition: emit.cpp:1966
void emit_idiv_reg(codegendata *cd, s4 reg)
Definition: emit.cpp:1419
void emit_fnstsw(codegendata *cd)
Definition: emit.cpp:2050
void emit_fstps_membase32(codegendata *cd, s4 basereg, s4 disp)
Definition: emit.cpp:1756
void emit_fsubl_membase(codegendata *cd, s4 basereg, s4 disp)
Definition: emit.cpp:1917
void emit_fld_reg(codegendata *cd, s4 reg)
Definition: emit.cpp:1623
void emit_movsbl_reg_reg(codegendata *cd, s4 a, s4 b)
Definition: emit.cpp:1150