Reentrant compiler changes.
[cacao.git] / src / vm / jit / x86_64 / emitfuncs.h
1 /* jit/x86_64/emitfuncs.h - emit function prototypes
2
3    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
4    R. Grafl, A. Krall, C. Kruegel, C. Oates, R. Obermaisser,
5    M. Probst, S. Ring, E. Steiner, C. Thalinger, D. Thuernbeck,
6    P. Tomsich, J. Wenninger
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: Andreas Krall
28             Christian Thalinger
29
30    $Id: emitfuncs.h 1353 2004-07-26 22:31:24Z twisti $
31
32 */
33
34
35 #ifndef _EMITFUNCS_H
36 #define _EMITFUNCS_H
37
38 #include "jit/x86_64/types.h"
39
40
41 /* code generation prototypes */
42
43 void x86_64_emit_ialu(methodinfo *m, s4 alu_op, stackptr src, instruction *iptr);
44 void x86_64_emit_lalu(methodinfo *m, s4 alu_op, stackptr src, instruction *iptr);
45 void x86_64_emit_ialuconst(methodinfo *m, s4 alu_op, stackptr src, instruction *iptr);
46 void x86_64_emit_laluconst(methodinfo *m, s4 alu_op, stackptr src, instruction *iptr);
47 void x86_64_emit_ishift(methodinfo *m, s4 shift_op, stackptr src, instruction *iptr);
48 void x86_64_emit_lshift(methodinfo *m, s4 shift_op, stackptr src, instruction *iptr);
49 void x86_64_emit_ishiftconst(methodinfo *m, s4 shift_op, stackptr src, instruction *iptr);
50 void x86_64_emit_lshiftconst(methodinfo *m, s4 shift_op, stackptr src, instruction *iptr);
51 void x86_64_emit_ifcc(methodinfo *m, s4 if_op, stackptr src, instruction *iptr);
52 void x86_64_emit_if_lcc(methodinfo *m, s4 if_op, stackptr src, instruction *iptr);
53 void x86_64_emit_if_icmpcc(methodinfo *m, s4 if_op, stackptr src, instruction *iptr);
54 void x86_64_emit_if_lcmpcc(methodinfo *m, s4 if_op, stackptr src, instruction *iptr);
55
56
57 /* integer instructions */
58
59 void x86_64_mov_reg_reg(codegendata *cd, s8 reg, s8 dreg);
60 void x86_64_mov_imm_reg(codegendata *cd, s8 imm, s8 reg);
61 void x86_64_movl_imm_reg(codegendata *cd, s8 imm, s8 reg);
62 void x86_64_mov_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 reg);
63 void x86_64_movl_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 reg);
64 void x86_64_mov_membase32_reg(codegendata *cd, s8 basereg, s8 disp, s8 reg);
65 void x86_64_mov_reg_membase(codegendata *cd, s8 reg, s8 basereg, s8 disp);
66 void x86_64_movl_reg_membase(codegendata *cd, s8 reg, s8 basereg, s8 disp);
67 void x86_64_mov_memindex_reg(codegendata *cd, s8 disp, s8 basereg, s8 indexreg, s8 scale, s8 reg);
68 void x86_64_movl_memindex_reg(codegendata *cd, s8 disp, s8 basereg, s8 indexreg, s8 scale, s8 reg);
69 void x86_64_mov_reg_memindex(codegendata *cd, s8 reg, s8 disp, s8 basereg, s8 indexreg, s8 scale);
70 void x86_64_movl_reg_memindex(codegendata *cd, s8 reg, s8 disp, s8 basereg, s8 indexreg, s8 scale);
71 void x86_64_movw_reg_memindex(codegendata *cd, s8 reg, s8 disp, s8 basereg, s8 indexreg, s8 scale);
72 void x86_64_movb_reg_memindex(codegendata *cd, s8 reg, s8 disp, s8 basereg, s8 indexreg, s8 scale);
73 void x86_64_mov_imm_membase(codegendata *cd, s8 imm, s8 basereg, s8 disp);
74 void x86_64_movl_imm_membase(codegendata *cd, s8 imm, s8 basereg, s8 disp);
75 void x86_64_movsbq_reg_reg(codegendata *cd, s8 reg, s8 dreg);
76 void x86_64_movsbq_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg);
77 void x86_64_movswq_reg_reg(codegendata *cd, s8 reg, s8 dreg);
78 void x86_64_movswq_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg);
79 void x86_64_movslq_reg_reg(codegendata *cd, s8 reg, s8 dreg);
80 void x86_64_movslq_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg);
81 void x86_64_movzwq_reg_reg(codegendata *cd, s8 reg, s8 dreg);
82 void x86_64_movzwq_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg);
83 void x86_64_movswq_memindex_reg(codegendata *cd, s8 disp, s8 basereg, s8 indexreg, s8 scale, s8 reg);
84 void x86_64_movsbq_memindex_reg(codegendata *cd, s8 disp, s8 basereg, s8 indexreg, s8 scale, s8 reg);
85 void x86_64_movzwq_memindex_reg(codegendata *cd, s8 disp, s8 basereg, s8 indexreg, s8 scale, s8 reg);
86 void x86_64_alu_reg_reg(codegendata *cd, s8 opc, s8 reg, s8 dreg);
87 void x86_64_alul_reg_reg(codegendata *cd, s8 opc, s8 reg, s8 dreg);
88 void x86_64_alu_reg_membase(codegendata *cd, s8 opc, s8 reg, s8 basereg, s8 disp);
89 void x86_64_alul_reg_membase(codegendata *cd, s8 opc, s8 reg, s8 basereg, s8 disp);
90 void x86_64_alu_membase_reg(codegendata *cd, s8 opc, s8 basereg, s8 disp, s8 reg);
91 void x86_64_alul_membase_reg(codegendata *cd, s8 opc, s8 basereg, s8 disp, s8 reg);
92 void x86_64_alu_imm_reg(codegendata *cd, s8 opc, s8 imm, s8 dreg);
93 void x86_64_alul_imm_reg(codegendata *cd, s8 opc, s8 imm, s8 dreg);
94 void x86_64_alu_imm_membase(codegendata *cd, s8 opc, s8 imm, s8 basereg, s8 disp);
95 void x86_64_alul_imm_membase(codegendata *cd, s8 opc, s8 imm, s8 basereg, s8 disp);
96 void x86_64_test_reg_reg(codegendata *cd, s8 reg, s8 dreg);
97 void x86_64_testl_reg_reg(codegendata *cd, s8 reg, s8 dreg);
98 void x86_64_test_imm_reg(codegendata *cd, s8 imm, s8 reg);
99 void x86_64_testw_imm_reg(codegendata *cd, s8 imm, s8 reg);
100 void x86_64_testb_imm_reg(codegendata *cd, s8 imm, s8 reg);
101 void x86_64_lea_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 reg);
102 void x86_64_leal_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 reg);
103 void x86_64_inc_reg(codegendata *cd, s8 reg);
104 void x86_64_incl_reg(codegendata *cd, s8 reg);
105 void x86_64_inc_membase(codegendata *cd, s8 basereg, s8 disp);
106 void x86_64_incl_membase(codegendata *cd, s8 basereg, s8 disp);
107 void x86_64_dec_reg(codegendata *cd, s8 reg);
108 void x86_64_decl_reg(codegendata *cd, s8 reg);
109 void x86_64_dec_membase(codegendata *cd, s8 basereg, s8 disp);
110 void x86_64_decl_membase(codegendata *cd, s8 basereg, s8 disp);
111 void x86_64_cltd(codegendata *cd);
112 void x86_64_cqto(codegendata *cd);
113 void x86_64_imul_reg_reg(codegendata *cd, s8 reg, s8 dreg);
114 void x86_64_imull_reg_reg(codegendata *cd, s8 reg, s8 dreg);
115 void x86_64_imul_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg);
116 void x86_64_imull_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg);
117 void x86_64_imul_imm_reg(codegendata *cd, s8 imm, s8 dreg);
118 void x86_64_imul_imm_reg_reg(codegendata *cd, s8 imm,s8 reg, s8 dreg);
119 void x86_64_imull_imm_reg_reg(codegendata *cd, s8 imm, s8 reg, s8 dreg);
120 void x86_64_imul_imm_membase_reg(codegendata *cd, s8 imm, s8 basereg, s8 disp, s8 dreg);
121 void x86_64_imull_imm_membase_reg(codegendata *cd, s8 imm, s8 basereg, s8 disp, s8 dreg);
122 void x86_64_idiv_reg(codegendata *cd, s8 reg);
123 void x86_64_idivl_reg(codegendata *cd, s8 reg);
124 void x86_64_ret(codegendata *cd);
125 void x86_64_shift_reg(codegendata *cd, s8 opc, s8 reg);
126 void x86_64_shiftl_reg(codegendata *cd, s8 opc, s8 reg);
127 void x86_64_shift_membase(codegendata *cd, s8 opc, s8 basereg, s8 disp);
128 void x86_64_shiftl_membase(codegendata *cd, s8 opc, s8 basereg, s8 disp);
129 void x86_64_shift_imm_reg(codegendata *cd, s8 opc, s8 imm, s8 dreg);
130 void x86_64_shiftl_imm_reg(codegendata *cd, s8 opc, s8 imm, s8 dreg);
131 void x86_64_shift_imm_membase(codegendata *cd, s8 opc, s8 imm, s8 basereg, s8 disp);
132 void x86_64_shiftl_imm_membase(codegendata *cd, s8 opc, s8 imm, s8 basereg, s8 disp);
133 void x86_64_jmp_imm(codegendata *cd, s8 imm);
134 void x86_64_jmp_reg(codegendata *cd, s8 reg);
135 void x86_64_jcc(codegendata *cd, s8 opc, s8 imm);
136 void x86_64_setcc_reg(codegendata *cd, s8 opc, s8 reg);
137 void x86_64_setcc_membase(codegendata *cd, s8 opc, s8 basereg, s8 disp);
138 void x86_64_cmovcc_reg_reg(codegendata *cd, s8 opc, s8 reg, s8 dreg);
139 void x86_64_cmovccl_reg_reg(codegendata *cd, s8 opc, s8 reg, s8 dreg);
140 void x86_64_neg_reg(codegendata *cd, s8 reg);
141 void x86_64_negl_reg(codegendata *cd, s8 reg);
142 void x86_64_neg_membase(codegendata *cd, s8 basereg, s8 disp);
143 void x86_64_negl_membase(codegendata *cd, s8 basereg, s8 disp);
144 void x86_64_push_reg(codegendata *cd, s8 reg);
145 void x86_64_push_imm(codegendata *cd, s8 imm);
146 void x86_64_pop_reg(codegendata *cd, s8 reg);
147 void x86_64_xchg_reg_reg(codegendata *cd, s8 reg, s8 dreg);
148 void x86_64_nop(codegendata *cd);
149 void x86_64_call_reg(codegendata *cd, s8 reg);
150 void x86_64_call_imm(codegendata *cd, s8 imm);
151 void x86_64_call_mem(codegendata *cd, s8 mem);
152
153
154 /* floating point instructions (SSE2) */
155
156 void x86_64_addsd_reg_reg(codegendata *cd, s8 reg, s8 dreg);
157 void x86_64_addss_reg_reg(codegendata *cd, s8 reg, s8 dreg);
158 void x86_64_cvtsi2ssq_reg_reg(codegendata *cd, s8 reg, s8 dreg);
159 void x86_64_cvtsi2ss_reg_reg(codegendata *cd, s8 reg, s8 dreg);
160 void x86_64_cvtsi2sdq_reg_reg(codegendata *cd, s8 reg, s8 dreg);
161 void x86_64_cvtsi2sd_reg_reg(codegendata *cd, s8 reg, s8 dreg);
162 void x86_64_cvtss2sd_reg_reg(codegendata *cd, s8 reg, s8 dreg);
163 void x86_64_cvtsd2ss_reg_reg(codegendata *cd, s8 reg, s8 dreg);
164 void x86_64_cvttss2siq_reg_reg(codegendata *cd, s8 reg, s8 dreg);
165 void x86_64_cvttss2si_reg_reg(codegendata *cd, s8 reg, s8 dreg);
166 void x86_64_cvttsd2siq_reg_reg(codegendata *cd, s8 reg, s8 dreg);
167 void x86_64_cvttsd2si_reg_reg(codegendata *cd, s8 reg, s8 dreg);
168 void x86_64_divss_reg_reg(codegendata *cd, s8 reg, s8 dreg);
169 void x86_64_divsd_reg_reg(codegendata *cd, s8 reg, s8 dreg);
170 void x86_64_movd_reg_freg(codegendata *cd, s8 reg, s8 freg);
171 void x86_64_movd_freg_reg(codegendata *cd, s8 freg, s8 reg);
172 void x86_64_movd_reg_membase(codegendata *cd, s8 reg, s8 basereg, s8 disp);
173 void x86_64_movd_reg_memindex(codegendata *cd, s8 reg, s8 disp, s8 basereg, s8 indexreg, s8 scale);
174 void x86_64_movd_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg);
175 void x86_64_movdl_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg);
176 void x86_64_movd_memindex_reg(codegendata *cd, s8 disp, s8 basereg, s8 indexreg, s8 scale, s8 dreg);
177 void x86_64_movq_reg_reg(codegendata *cd, s8 reg, s8 dreg);
178 void x86_64_movq_reg_membase(codegendata *cd, s8 reg, s8 basereg, s8 disp);
179 void x86_64_movq_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg);
180 void x86_64_movss_reg_reg(codegendata *cd, s8 reg, s8 dreg);
181 void x86_64_movsd_reg_reg(codegendata *cd, s8 reg, s8 dreg);
182 void x86_64_movss_reg_membase(codegendata *cd, s8 reg, s8 basereg, s8 disp);
183 void x86_64_movsd_reg_membase(codegendata *cd, s8 reg, s8 basereg, s8 disp);
184 void x86_64_movss_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg);
185 void x86_64_movlps_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg);
186 void x86_64_movsd_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg);
187 void x86_64_movlpd_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg);
188 void x86_64_movss_reg_memindex(codegendata *cd, s8 reg, s8 disp, s8 basereg, s8 indexreg, s8 scale);
189 void x86_64_movsd_reg_memindex(codegendata *cd, s8 reg, s8 disp, s8 basereg, s8 indexreg, s8 scale);
190 void x86_64_movss_memindex_reg(codegendata *cd, s8 disp, s8 basereg, s8 indexreg, s8 scale, s8 dreg);
191 void x86_64_movsd_memindex_reg(codegendata *cd, s8 disp, s8 basereg, s8 indexreg, s8 scale, s8 dreg);
192 void x86_64_mulss_reg_reg(codegendata *cd, s8 reg, s8 dreg);
193 void x86_64_mulsd_reg_reg(codegendata *cd, s8 reg, s8 dreg);
194 void x86_64_subss_reg_reg(codegendata *cd, s8 reg, s8 dreg);
195 void x86_64_subsd_reg_reg(codegendata *cd, s8 reg, s8 dreg);
196 void x86_64_ucomiss_reg_reg(codegendata *cd, s8 reg, s8 dreg);
197 void x86_64_ucomisd_reg_reg(codegendata *cd, s8 reg, s8 dreg);
198 void x86_64_xorps_reg_reg(codegendata *cd, s8 reg, s8 dreg);
199 void x86_64_xorps_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg);
200 void x86_64_xorpd_reg_reg(codegendata *cd, s8 reg, s8 dreg);
201 void x86_64_xorpd_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg);
202
203 #endif /* _EMITFUNCS_H */
204
205
206 /*
207  * These are local overrides for various environment variables in Emacs.
208  * Please do not remove this and leave it at the end of the file, where
209  * Emacs will automagically detect them.
210  * ---------------------------------------------------------------------
211  * Local variables:
212  * mode: c
213  * indent-tabs-mode: t
214  * c-basic-offset: 4
215  * tab-width: 4
216  * End:
217  */