GNU header update.
[cacao.git] / src / vm / jit / x86_64 / emitfuncs.h
1 /* jit/x86_64/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: Andreas Krall
28             Christian Thalinger
29
30    $Id: emitfuncs.h 1735 2004-12-07 14:33:27Z twisti $
31
32 */
33
34
35 #ifndef _EMITFUNCS_H
36 #define _EMITFUNCS_H
37
38 #include "vm/jit/x86_64/types.h"
39
40
41 /* code generation prototypes */
42
43 void x86_64_emit_ialu(codegendata *cd, s4 alu_op, stackptr src, instruction *iptr);
44 void x86_64_emit_lalu(codegendata *cd, s4 alu_op, stackptr src, instruction *iptr);
45 void x86_64_emit_ialuconst(codegendata *cd, s4 alu_op, stackptr src, instruction *iptr);
46 void x86_64_emit_laluconst(codegendata *cd, s4 alu_op, stackptr src, instruction *iptr);
47 void x86_64_emit_ishift(codegendata *cd, s4 shift_op, stackptr src, instruction *iptr);
48 void x86_64_emit_lshift(codegendata *cd, s4 shift_op, stackptr src, instruction *iptr);
49 void x86_64_emit_ishiftconst(codegendata *cd, s4 shift_op, stackptr src, instruction *iptr);
50 void x86_64_emit_lshiftconst(codegendata *cd, s4 shift_op, stackptr src, instruction *iptr);
51 void x86_64_emit_ifcc(codegendata *cd, s4 if_op, stackptr src, instruction *iptr);
52 void x86_64_emit_if_lcc(codegendata *cd, s4 if_op, stackptr src, instruction *iptr);
53 void x86_64_emit_if_icmpcc(codegendata *cd, s4 if_op, stackptr src, instruction *iptr);
54 void x86_64_emit_if_lcmpcc(codegendata *cd, 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_mov_imm_memindex(codegendata *cd, s4 imm, s4 disp, s4 basereg, s4 indexreg, s4 scale);
87 void x86_64_movl_imm_memindex(codegendata *cd, s4 imm, s4 disp, s4 basereg, s4 indexreg, s4 scale);
88 void x86_64_movw_imm_memindex(codegendata *cd, s4 imm, s4 disp, s4 basereg, s4 indexreg, s4 scale);
89 void x86_64_movb_imm_memindex(codegendata *cd, s4 imm, s4 disp, s4 basereg, s4 indexreg, s4 scale);
90 void x86_64_alu_reg_reg(codegendata *cd, s8 opc, s8 reg, s8 dreg);
91 void x86_64_alul_reg_reg(codegendata *cd, s8 opc, s8 reg, s8 dreg);
92 void x86_64_alu_reg_membase(codegendata *cd, s8 opc, s8 reg, s8 basereg, s8 disp);
93 void x86_64_alul_reg_membase(codegendata *cd, s8 opc, s8 reg, s8 basereg, s8 disp);
94 void x86_64_alu_membase_reg(codegendata *cd, s8 opc, s8 basereg, s8 disp, s8 reg);
95 void x86_64_alul_membase_reg(codegendata *cd, s8 opc, s8 basereg, s8 disp, s8 reg);
96 void x86_64_alu_imm_reg(codegendata *cd, s8 opc, s8 imm, s8 dreg);
97 void x86_64_alul_imm_reg(codegendata *cd, s8 opc, s8 imm, s8 dreg);
98 void x86_64_alu_imm_membase(codegendata *cd, s8 opc, s8 imm, s8 basereg, s8 disp);
99 void x86_64_alul_imm_membase(codegendata *cd, s8 opc, s8 imm, s8 basereg, s8 disp);
100 void x86_64_test_reg_reg(codegendata *cd, s8 reg, s8 dreg);
101 void x86_64_testl_reg_reg(codegendata *cd, s8 reg, s8 dreg);
102 void x86_64_test_imm_reg(codegendata *cd, s8 imm, s8 reg);
103 void x86_64_testw_imm_reg(codegendata *cd, s8 imm, s8 reg);
104 void x86_64_testb_imm_reg(codegendata *cd, s8 imm, s8 reg);
105 void x86_64_lea_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 reg);
106 void x86_64_leal_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 reg);
107 void x86_64_inc_reg(codegendata *cd, s8 reg);
108 void x86_64_incl_reg(codegendata *cd, s8 reg);
109 void x86_64_inc_membase(codegendata *cd, s8 basereg, s8 disp);
110 void x86_64_incl_membase(codegendata *cd, s8 basereg, s8 disp);
111 void x86_64_dec_reg(codegendata *cd, s8 reg);
112 void x86_64_decl_reg(codegendata *cd, s8 reg);
113 void x86_64_dec_membase(codegendata *cd, s8 basereg, s8 disp);
114 void x86_64_decl_membase(codegendata *cd, s8 basereg, s8 disp);
115 void x86_64_cltd(codegendata *cd);
116 void x86_64_cqto(codegendata *cd);
117 void x86_64_imul_reg_reg(codegendata *cd, s8 reg, s8 dreg);
118 void x86_64_imull_reg_reg(codegendata *cd, s8 reg, s8 dreg);
119 void x86_64_imul_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg);
120 void x86_64_imull_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg);
121 void x86_64_imul_imm_reg(codegendata *cd, s8 imm, s8 dreg);
122 void x86_64_imul_imm_reg_reg(codegendata *cd, s8 imm,s8 reg, s8 dreg);
123 void x86_64_imull_imm_reg_reg(codegendata *cd, s8 imm, s8 reg, s8 dreg);
124 void x86_64_imul_imm_membase_reg(codegendata *cd, s8 imm, s8 basereg, s8 disp, s8 dreg);
125 void x86_64_imull_imm_membase_reg(codegendata *cd, s8 imm, s8 basereg, s8 disp, s8 dreg);
126 void x86_64_idiv_reg(codegendata *cd, s8 reg);
127 void x86_64_idivl_reg(codegendata *cd, s8 reg);
128 void x86_64_ret(codegendata *cd);
129 void x86_64_shift_reg(codegendata *cd, s8 opc, s8 reg);
130 void x86_64_shiftl_reg(codegendata *cd, s8 opc, s8 reg);
131 void x86_64_shift_membase(codegendata *cd, s8 opc, s8 basereg, s8 disp);
132 void x86_64_shiftl_membase(codegendata *cd, s8 opc, s8 basereg, s8 disp);
133 void x86_64_shift_imm_reg(codegendata *cd, s8 opc, s8 imm, s8 dreg);
134 void x86_64_shiftl_imm_reg(codegendata *cd, s8 opc, s8 imm, s8 dreg);
135 void x86_64_shift_imm_membase(codegendata *cd, s8 opc, s8 imm, s8 basereg, s8 disp);
136 void x86_64_shiftl_imm_membase(codegendata *cd, s8 opc, s8 imm, s8 basereg, s8 disp);
137 void x86_64_jmp_imm(codegendata *cd, s8 imm);
138 void x86_64_jmp_reg(codegendata *cd, s8 reg);
139 void x86_64_jcc(codegendata *cd, s8 opc, s8 imm);
140 void x86_64_setcc_reg(codegendata *cd, s8 opc, s8 reg);
141 void x86_64_setcc_membase(codegendata *cd, s8 opc, s8 basereg, s8 disp);
142 void x86_64_cmovcc_reg_reg(codegendata *cd, s8 opc, s8 reg, s8 dreg);
143 void x86_64_cmovccl_reg_reg(codegendata *cd, s8 opc, s8 reg, s8 dreg);
144 void x86_64_neg_reg(codegendata *cd, s8 reg);
145 void x86_64_negl_reg(codegendata *cd, s8 reg);
146 void x86_64_neg_membase(codegendata *cd, s8 basereg, s8 disp);
147 void x86_64_negl_membase(codegendata *cd, s8 basereg, s8 disp);
148 void x86_64_push_reg(codegendata *cd, s8 reg);
149 void x86_64_push_imm(codegendata *cd, s8 imm);
150 void x86_64_pop_reg(codegendata *cd, s8 reg);
151 void x86_64_xchg_reg_reg(codegendata *cd, s8 reg, s8 dreg);
152 void x86_64_nop(codegendata *cd);
153 void x86_64_call_reg(codegendata *cd, s8 reg);
154 void x86_64_call_imm(codegendata *cd, s8 imm);
155 void x86_64_call_mem(codegendata *cd, s8 mem);
156
157
158 /* floating point instructions (SSE2) */
159
160 void x86_64_addsd_reg_reg(codegendata *cd, s8 reg, s8 dreg);
161 void x86_64_addss_reg_reg(codegendata *cd, s8 reg, s8 dreg);
162 void x86_64_cvtsi2ssq_reg_reg(codegendata *cd, s8 reg, s8 dreg);
163 void x86_64_cvtsi2ss_reg_reg(codegendata *cd, s8 reg, s8 dreg);
164 void x86_64_cvtsi2sdq_reg_reg(codegendata *cd, s8 reg, s8 dreg);
165 void x86_64_cvtsi2sd_reg_reg(codegendata *cd, s8 reg, s8 dreg);
166 void x86_64_cvtss2sd_reg_reg(codegendata *cd, s8 reg, s8 dreg);
167 void x86_64_cvtsd2ss_reg_reg(codegendata *cd, s8 reg, s8 dreg);
168 void x86_64_cvttss2siq_reg_reg(codegendata *cd, s8 reg, s8 dreg);
169 void x86_64_cvttss2si_reg_reg(codegendata *cd, s8 reg, s8 dreg);
170 void x86_64_cvttsd2siq_reg_reg(codegendata *cd, s8 reg, s8 dreg);
171 void x86_64_cvttsd2si_reg_reg(codegendata *cd, s8 reg, s8 dreg);
172 void x86_64_divss_reg_reg(codegendata *cd, s8 reg, s8 dreg);
173 void x86_64_divsd_reg_reg(codegendata *cd, s8 reg, s8 dreg);
174 void x86_64_movd_reg_freg(codegendata *cd, s8 reg, s8 freg);
175 void x86_64_movd_freg_reg(codegendata *cd, s8 freg, s8 reg);
176 void x86_64_movd_reg_membase(codegendata *cd, s8 reg, s8 basereg, s8 disp);
177 void x86_64_movd_reg_memindex(codegendata *cd, s8 reg, s8 disp, s8 basereg, s8 indexreg, s8 scale);
178 void x86_64_movd_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg);
179 void x86_64_movdl_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg);
180 void x86_64_movd_memindex_reg(codegendata *cd, s8 disp, s8 basereg, s8 indexreg, s8 scale, s8 dreg);
181 void x86_64_movq_reg_reg(codegendata *cd, s8 reg, s8 dreg);
182 void x86_64_movq_reg_membase(codegendata *cd, s8 reg, s8 basereg, s8 disp);
183 void x86_64_movq_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg);
184 void x86_64_movss_reg_reg(codegendata *cd, s8 reg, s8 dreg);
185 void x86_64_movsd_reg_reg(codegendata *cd, s8 reg, s8 dreg);
186 void x86_64_movss_reg_membase(codegendata *cd, s8 reg, s8 basereg, s8 disp);
187 void x86_64_movsd_reg_membase(codegendata *cd, s8 reg, s8 basereg, s8 disp);
188 void x86_64_movss_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg);
189 void x86_64_movlps_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg);
190 void x86_64_movsd_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg);
191 void x86_64_movlpd_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg);
192 void x86_64_movss_reg_memindex(codegendata *cd, s8 reg, s8 disp, s8 basereg, s8 indexreg, s8 scale);
193 void x86_64_movsd_reg_memindex(codegendata *cd, s8 reg, s8 disp, s8 basereg, s8 indexreg, s8 scale);
194 void x86_64_movss_memindex_reg(codegendata *cd, s8 disp, s8 basereg, s8 indexreg, s8 scale, s8 dreg);
195 void x86_64_movsd_memindex_reg(codegendata *cd, s8 disp, s8 basereg, s8 indexreg, s8 scale, s8 dreg);
196 void x86_64_mulss_reg_reg(codegendata *cd, s8 reg, s8 dreg);
197 void x86_64_mulsd_reg_reg(codegendata *cd, s8 reg, s8 dreg);
198 void x86_64_subss_reg_reg(codegendata *cd, s8 reg, s8 dreg);
199 void x86_64_subsd_reg_reg(codegendata *cd, s8 reg, s8 dreg);
200 void x86_64_ucomiss_reg_reg(codegendata *cd, s8 reg, s8 dreg);
201 void x86_64_ucomisd_reg_reg(codegendata *cd, s8 reg, s8 dreg);
202 void x86_64_xorps_reg_reg(codegendata *cd, s8 reg, s8 dreg);
203 void x86_64_xorps_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg);
204 void x86_64_xorpd_reg_reg(codegendata *cd, s8 reg, s8 dreg);
205 void x86_64_xorpd_membase_reg(codegendata *cd, s8 basereg, s8 disp, s8 dreg);
206
207 #endif /* _EMITFUNCS_H */
208
209
210 /*
211  * These are local overrides for various environment variables in Emacs.
212  * Please do not remove this and leave it at the end of the file, where
213  * Emacs will automagically detect them.
214  * ---------------------------------------------------------------------
215  * Local variables:
216  * mode: c
217  * indent-tabs-mode: t
218  * c-basic-offset: 4
219  * tab-width: 4
220  * End:
221  */