1f33e5a8f23c990fc01e5076b10d06c308812fa1
[cacao.git] / src / vm / jit / i386 / emitfuncs.h
1 /* src/vm/jit/i386/emitfuncs.h - emit function prototypes
2
3    Copyright (C) 1996-2005 R. Grafl, A. Krall, C. Kruegel, C. Oates,
4    R. Obermaisser, M. Platter, M. Probst, S. Ring, E. Steiner,
5    C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, J. Wenninger,
6    Institut f. Computersprachen - TU Wien
7
8    This file is part of CACAO.
9
10    This program is free software; you can redistribute it and/or
11    modify it under the terms of the GNU General Public License as
12    published by the Free Software Foundation; either version 2, or (at
13    your option) any later version.
14
15    This program is distributed in the hope that it will be useful, but
16    WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18    General Public License for more details.
19
20    You should have received a copy of the GNU General Public License
21    along with this program; if not, write to the Free Software
22    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
23    02111-1307, USA.
24
25    Contact: cacao@complang.tuwien.ac.at
26
27    Authors: Christian Thalinger
28
29    Changes:
30
31    $Id: emitfuncs.h 3227 2005-09-19 14:03:36Z twisti $
32
33 */
34
35
36 #ifndef _EMITFUNCS_H
37 #define _EMITFUNCS_H
38
39 #include "vm/types.h"
40
41
42 /* code generation prototypes *************************************************/
43
44 void i386_emit_ialu(codegendata *cd, s4 alu_op, stackptr src, instruction *iptr);
45 void i386_emit_ialuconst(codegendata *cd, s4 alu_op, stackptr src, instruction *iptr);
46 void i386_emit_lalu(codegendata *cd, s4 alu_op, stackptr src, instruction *iptr);
47 void i386_emit_laluconst(codegendata *cd, s4 alu_op, stackptr src, instruction *iptr);
48 void i386_emit_ishift(codegendata *cd, s4 shift_op, stackptr src, instruction *iptr);
49 void i386_emit_ishiftconst(codegendata *cd, s4 shift_op, stackptr src, instruction *iptr);
50 void i386_emit_ifcc_iconst(codegendata *cd, s4 if_op, stackptr src, instruction *iptr);
51
52
53 /* integer instructions */
54
55 void i386_mov_reg_reg(codegendata *cd, s4 reg, s4 dreg);
56 void i386_mov_imm_reg(codegendata *cd, s4 imm, s4 dreg);
57 void i386_movb_imm_reg(codegendata *cd, s4 imm, s4 dreg);
58 void i386_mov_membase_reg(codegendata *cd, s4 basereg, s4 disp, s4 reg);
59 void i386_mov_membase32_reg(codegendata *cd, s4 basereg, s4 disp, s4 reg);
60 void i386_mov_reg_membase(codegendata *cd, s4 reg, s4 basereg, s4 disp);
61 void i386_mov_reg_membase32(codegendata *cd, s4 reg, s4 basereg, s4 disp);
62 void i386_mov_memindex_reg(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale, s4 reg);
63 void i386_mov_reg_memindex(codegendata *cd, s4 reg, s4 disp, s4 basereg, s4 indexreg, s4 scale);
64 void i386_movw_reg_memindex(codegendata *cd, s4 reg, s4 disp, s4 basereg, s4 indexreg, s4 scale);
65 void i386_movb_reg_memindex(codegendata *cd, s4 reg, s4 disp, s4 basereg, s4 indexreg, s4 scale);
66 void i386_mov_reg_mem(codegendata *cd, s4 reg, s4 mem);
67 void i386_mov_mem_reg(codegendata *cd, s4 mem, s4 dreg);
68 void i386_mov_imm_mem(codegendata *cd, s4 imm, s4 mem);
69 void i386_mov_imm_membase(codegendata *cd, s4 imm, s4 basereg, s4 disp);
70 void i386_mov_imm_membase32(codegendata *cd, s4 imm, s4 basereg, s4 disp);
71 void i386_movb_imm_membase(codegendata *cd, s4 imm, s4 basereg, s4 disp);
72 void i386_movsbl_memindex_reg(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale, s4 reg);
73 void i386_movswl_memindex_reg(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale, s4 reg);
74 void i386_movzwl_memindex_reg(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale, s4 reg);
75 void i386_mov_imm_memindex(codegendata *cd, s4 imm, s4 disp, s4 basereg, s4 indexreg, s4 scale);
76 void i386_movw_imm_memindex(codegendata *cd, s4 imm, s4 disp, s4 basereg, s4 indexreg, s4 scale);
77 void i386_movb_imm_memindex(codegendata *cd, s4 imm, s4 disp, s4 basereg, s4 indexreg, s4 scale);
78
79 void i386_alu_reg_reg(codegendata *cd, s4 opc, s4 reg, s4 dreg);
80 void i386_alu_reg_membase(codegendata *cd, s4 opc, s4 reg, s4 basereg, s4 disp);
81 void i386_alu_membase_reg(codegendata *cd, s4 opc, s4 basereg, s4 disp, s4 reg);
82 void i386_alu_imm_reg(codegendata *cd, s4 opc, s4 imm, s4 reg);
83 void i386_alu_imm32_reg(codegendata *cd, s4 opc, s4 imm, s4 reg);
84 void i386_alu_imm_membase(codegendata *cd, s4 opc, s4 imm, s4 basereg, s4 disp);
85 void i386_test_reg_reg(codegendata *cd, s4 reg, s4 dreg);
86 void i386_test_imm_reg(codegendata *cd, s4 imm, s4 dreg);
87 void i386_dec_mem(codegendata *cd, s4 mem);
88 void i386_cltd(codegendata *cd);
89 void i386_imul_reg_reg(codegendata *cd, s4 reg, s4 dreg);
90 void i386_imul_membase_reg(codegendata *cd, s4 basereg, s4 disp, s4 dreg);
91 void i386_imul_imm_reg(codegendata *cd, s4 imm, s4 reg);
92 void i386_imul_imm_reg_reg(codegendata *cd, s4 imm, s4 reg, s4 dreg);
93 void i386_imul_imm_membase_reg(codegendata *cd, s4 imm, s4 basereg, s4 disp, s4 dreg);
94 void i386_mul_membase(codegendata *cd, s4 basereg, s4 disp);
95 void i386_idiv_reg(codegendata *cd, s4 reg);
96 void i386_ret(codegendata *cd);
97 void i386_shift_reg(codegendata *cd, s4 opc, s4 reg);
98 void i386_shift_membase(codegendata *cd, s4 opc, s4 basereg, s4 disp);
99 void i386_shift_imm_reg(codegendata *cd, s4 opc, s4 imm, s4 reg);
100 void i386_shift_imm_membase(codegendata *cd, s4 opc, s4 imm, s4 basereg, s4 disp);
101 void i386_shld_reg_reg(codegendata *cd, s4 reg, s4 dreg);
102 void i386_shld_imm_reg_reg(codegendata *cd, s4 imm, s4 reg, s4 dreg);
103 void i386_shld_reg_membase(codegendata *cd, s4 reg, s4 basereg, s4 disp);
104 void i386_shrd_reg_reg(codegendata *cd, s4 reg, s4 dreg);
105 void i386_shrd_imm_reg_reg(codegendata *cd, s4 imm, s4 reg, s4 dreg);
106 void i386_shrd_reg_membase(codegendata *cd, s4 reg, s4 basereg, s4 disp);
107 void i386_jmp_imm(codegendata *cd, s4 imm);
108 void i386_jmp_reg(codegendata *cd, s4 reg);
109 void i386_jcc(codegendata *cd, s4 opc, s4 imm);
110 void i386_setcc_reg(codegendata *cd, s4 opc, s4 reg);
111 void i386_setcc_membase(codegendata *cd, s4 opc, s4 basereg, s4 disp);
112 void i386_xadd_reg_mem(codegendata *cd, s4 reg, s4 mem);
113 void i386_neg_reg(codegendata *cd, s4 reg);
114 void i386_neg_membase(codegendata *cd, s4 basereg, s4 disp);
115 void i386_push_imm(codegendata *cd, s4 imm);
116 void i386_pop_reg(codegendata *cd, s4 reg);
117 void i386_push_reg(codegendata *cd, s4 reg);
118 void i386_nop(codegendata *cd);
119 void i386_lock(codegendata *cd);
120 void i386_call_reg(codegendata *cd, s4 reg);
121 void i386_call_imm(codegendata *cd, s4 imm);
122 void i386_call_mem(codegendata *cd, s4 mem);
123
124
125 /* floating point instructions */
126
127 void i386_fld1(codegendata *cd);
128 void i386_fldz(codegendata *cd);
129 void i386_fld_reg(codegendata *cd, s4 reg);
130 void i386_flds_membase(codegendata *cd, s4 basereg, s4 disp);
131 void i386_flds_membase32(codegendata *cd, s4 basereg, s4 disp);
132 void i386_fldl_membase(codegendata *cd, s4 basereg, s4 disp);
133 void i386_fldl_membase32(codegendata *cd, s4 basereg, s4 disp);
134 void i386_fldt_membase(codegendata *cd, s4 basereg, s4 disp);
135 void i386_flds_memindex(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale);
136 void i386_fldl_memindex(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale);
137 void i386_flds_mem(codegendata *cd, s4 mem);
138 void i386_fldl_mem(codegendata *cd, s4 mem);
139 void i386_fildl_membase(codegendata *cd, s4 basereg, s4 disp);
140 void i386_fildll_membase(codegendata *cd, s4 basereg, s4 disp);
141 void i386_fst_reg(codegendata *cd, s4 reg);
142 void i386_fsts_membase(codegendata *cd, s4 basereg, s4 disp);
143 void i386_fstl_membase(codegendata *cd, s4 basereg, s4 disp);
144 void i386_fsts_memindex(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale);
145 void i386_fstl_memindex(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale);
146 void i386_fstp_reg(codegendata *cd, s4 reg);
147 void i386_fstps_membase(codegendata *cd, s4 basereg, s4 disp);
148 void i386_fstps_membase32(codegendata *cd, s4 basereg, s4 disp);
149 void i386_fstpl_membase(codegendata *cd, s4 basereg, s4 disp);
150 void i386_fstpl_membase32(codegendata *cd, s4 basereg, s4 disp);
151 void i386_fstpt_membase(codegendata *cd, s4 basereg, s4 disp);
152 void i386_fstps_memindex(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale);
153 void i386_fstpl_memindex(codegendata *cd, s4 disp, s4 basereg, s4 indexreg, s4 scale);
154 void i386_fstps_mem(codegendata *cd, s4 mem);
155 void i386_fstpl_mem(codegendata *cd, s4 mem);
156 void i386_fistl_membase(codegendata *cd, s4 basereg, s4 disp);
157 void i386_fistpl_membase(codegendata *cd, s4 basereg, s4 disp);
158 void i386_fistpll_membase(codegendata *cd, s4 basereg, s4 disp);
159 void i386_fchs(codegendata *cd);
160 void i386_faddp(codegendata *cd);
161 void i386_fadd_reg_st(codegendata *cd, s4 reg);
162 void i386_fadd_st_reg(codegendata *cd, s4 reg);
163 void i386_faddp_st_reg(codegendata *cd, s4 reg);
164 void i386_fadds_membase(codegendata *cd, s4 basereg, s4 disp);
165 void i386_faddl_membase(codegendata *cd, s4 basereg, s4 disp);
166 void i386_fsub_reg_st(codegendata *cd, s4 reg);
167 void i386_fsub_st_reg(codegendata *cd, s4 reg);
168 void i386_fsubp_st_reg(codegendata *cd, s4 reg);
169 void i386_fsubp(codegendata *cd);
170 void i386_fsubs_membase(codegendata *cd, s4 basereg, s4 disp);
171 void i386_fsubl_membase(codegendata *cd, s4 basereg, s4 disp);
172 void i386_fmul_reg_st(codegendata *cd, s4 reg);
173 void i386_fmul_st_reg(codegendata *cd, s4 reg);
174 void i386_fmulp(codegendata *cd);
175 void i386_fmulp_st_reg(codegendata *cd, s4 reg);
176 void i386_fmuls_membase(codegendata *cd, s4 basereg, s4 disp);
177 void i386_fmull_membase(codegendata *cd, s4 basereg, s4 disp);
178 void i386_fdiv_reg_st(codegendata *cd, s4 reg);
179 void i386_fdiv_st_reg(codegendata *cd, s4 reg);
180 void i386_fdivp(codegendata *cd);
181 void i386_fdivp_st_reg(codegendata *cd, s4 reg);
182 void i386_fxch(codegendata *cd);
183 void i386_fxch_reg(codegendata *cd, s4 reg);
184 void i386_fprem(codegendata *cd);
185 void i386_fprem1(codegendata *cd);
186 void i386_fucom(codegendata *cd);
187 void i386_fucom_reg(codegendata *cd, s4 reg);
188 void i386_fucomp_reg(codegendata *cd, s4 reg);
189 void i386_fucompp(codegendata *cd);
190 void i386_fnstsw(codegendata *cd);
191 void i386_sahf(codegendata *cd);
192 void i386_finit(codegendata *cd);
193 void i386_fldcw_mem(codegendata *cd, s4 mem);
194 void i386_fldcw_membase(codegendata *cd, s4 basereg, s4 disp);
195 void i386_wait(codegendata *cd);
196 void i386_ffree_reg(codegendata *cd, s4 reg);
197 void i386_fdecstp(codegendata *cd);
198 void i386_fincstp(codegendata *cd);
199
200 #endif /* _EMITFUNCS_H */
201
202
203 /*
204  * These are local overrides for various environment variables in Emacs.
205  * Please do not remove this and leave it at the end of the file, where
206  * Emacs will automagically detect them.
207  * ---------------------------------------------------------------------
208  * Local variables:
209  * mode: c
210  * indent-tabs-mode: t
211  * c-basic-offset: 4
212  * tab-width: 4
213  * End:
214  */