1 /* vm/jit/code.c - codeinfo struct for representing compiled code
3 Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,
4 C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
5 E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
6 J. Wenninger, Institut f. Computersprachen - TU Wien
8 This file is part of CACAO.
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.
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.
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., 51 Franklin Street, Fifth Floor, Boston, MA
25 Contact: cacao@cacaojvm.org
27 Authors: Edwin Steiner
41 #include "vm/jit/code.h"
42 #include "mm/memory.h"
43 #include "vm/options.h"
46 /* code_codeinfo_new ***********************************************************
48 Create a new codeinfo for the given method.
51 m................method to create a new codeinfo for
53 Note: codeinfo.m is set to m, all other fields are zeroed.
56 a new, initialized codeinfo, or
57 NULL if an exception occurred.
59 *******************************************************************************/
61 codeinfo *code_codeinfo_new(methodinfo *m)
67 memset(code,0,sizeof(codeinfo));
74 /* code_get_sync_slot_count ****************************************************
76 Return the number of stack slots used for storing the synchronized object
77 (and the return value around monitorExit calls) by the given code.
80 code.............the codeinfo of the code in question
84 the number of stack slots used for synchronization
86 *******************************************************************************/
88 int code_get_sync_slot_count(codeinfo *code)
95 if (!(code->m->flags & ACC_SYNCHRONIZED))
98 /* XXX generalize to all archs */
99 #ifdef HAS_4BYTE_STACKSLOT
100 return (IS_2_WORD_TYPE(code->m->parseddesc->returntype.type)) ? 2 : 1;
106 /* code_get_stack_frame_size ***************************************************
108 Return the number of stack slots that the stack frame of the given code
112 code.............the codeinfo of the code in question
116 the number of stack slots
118 *******************************************************************************/
120 int code_get_stack_frame_size(codeinfo *code)
126 /* XXX generalize to all archs */
127 #ifdef HAS_4BYTE_STACKSLOT
128 count = code->memuse + code->savedintcount + 2*code->savedfltcount;
130 count = code->memuse + code->savedintcount + code->savedfltcount;
133 count += code_get_sync_slot_count(code);
138 /* code_codeinfo_free **********************************************************
140 Free the memory used by a codeinfo.
143 code.............the codeinfo to free
145 *******************************************************************************/
147 void code_codeinfo_free(codeinfo *code)
153 CFREE((void *) (ptrint) code->mcode, code->mcodelength);
155 replace_free_replacement_points(code);
160 /* code_free_code_of_method ****************************************************
162 Free all codeinfos of the given method
165 m................the method of which the codeinfos are to be freed
167 *******************************************************************************/
169 void code_free_code_of_method(methodinfo *m)
180 nextcode = code->prev;
181 code_codeinfo_free(code);
188 * These are local overrides for various environment variables in Emacs.
189 * Please do not remove this and leave it at the end of the file, where
190 * Emacs will automagically detect them.
191 * ---------------------------------------------------------------------
194 * indent-tabs-mode: t
198 * vim:noexpandtab:sw=4:ts=4: