/* src/vm/builtin.h - prototypes of builtin functions
- Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,
+ Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel,
C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
J. Wenninger, Institut f. Computersprachen - TU Wien
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- Contact: cacao@cacaojvm.org
-
- Authors: Reinhard Grafl
-
- Changes: Edwin Steiner
- Christian Thalinger
-
- $Id: builtin.h 5123 2006-07-12 21:45:34Z twisti $
-
*/
#define _BUILTIN_H
#include "config.h"
+#include "vm/types.h"
#include "arch.h"
-#include "toolbox/logging.h"
+#include "md-abi.h"
-#if defined(ENABLE_THREADS)
-# include "threads/native/threads.h"
-#endif
+#include "toolbox/logging.h"
-#include "vm/jit/stacktrace.h"
+#include "vmcore/utf8.h"
/* define infinity for floating point numbers */
struct builtintable_entry {
s4 opcode; /* opcode which is replaced */
functionptr fp; /* function pointer of builtin */
- char *descriptor;
- char *name;
+ char *cclassname; /* char name of the class */
+ char *cname; /* char name of the function */
+ char *cdescriptor; /* char name of the descriptor */
+ utf *classname; /* class of the function */
+ utf *name; /* name of the function */
+ utf *descriptor; /* descriptor of the function */
+ bool checkexception; /* check for exception after return */
methoddesc *md;
};
builtintable_entry *builtintable_get_internal(functionptr fp);
builtintable_entry *builtintable_get_automatic(s4 opcode);
+bool builtintable_replace_function(void *iptr);
+
/**********************************************************************/
/* BUILTIN FUNCTIONS */
* ICMD_BUILTIN3.)
*/
-s4 builtin_instanceof(java_objectheader *obj, classinfo *class);
+s4 builtin_instanceof(java_handle_t *obj, classinfo *class);
#define BUILTIN_instanceof (functionptr) builtin_instanceof
-s4 builtin_isanysubclass (classinfo *sub, classinfo *super);
-/* NOT AN OP */
-s4 builtin_isanysubclass_vftbl (vftbl_t *sub, vftbl_t *super);
-/* NOT AN OP */
-s4 builtin_checkcast(java_objectheader *obj, classinfo *class);
+s4 builtin_checkcast(java_handle_t *obj, classinfo *class);
/* NOT AN OP */
-s4 builtin_arrayinstanceof(java_objectheader *o, classinfo *targetclass);
+s4 builtin_arrayinstanceof(java_handle_t *o, classinfo *targetclass);
#define BUILTIN_arrayinstanceof (functionptr) builtin_arrayinstanceof
-s4 builtin_arraycheckcast(java_objectheader *o, classinfo *targetclass);
+s4 builtin_arraycheckcast(java_handle_t *o, classinfo *targetclass);
#define BUILTIN_arraycheckcast (functionptr) builtin_arraycheckcast
-void *builtin_throw_exception(java_objectheader *exception);
+void *builtin_throw_exception(java_handle_t *exception);
/* NOT AN OP */
-java_objectheader *builtin_trace_exception(java_objectheader *xptr,
+java_handle_t *builtin_trace_exception(java_handle_t *xptr,
methodinfo *m,
void *pos,
s4 indent);
/* NOT AN OP */
-java_objectheader *builtin_new(classinfo *c);
+java_handle_t *builtin_new(classinfo *c);
#define BUILTIN_new (functionptr) builtin_new
-java_arrayheader *builtin_newarray(s4 size, classinfo *arrayclass);
+java_handle_t *builtin_newarray(s4 size, classinfo *arrayclass);
#define BUILTIN_newarray (functionptr) builtin_newarray
-java_objectarray *builtin_anewarray(s4 size, classinfo *componentclass);
+java_handle_objectarray_t *builtin_anewarray(s4 size, classinfo *componentclass);
#define BUILTIN_anewarray (functionptr) builtin_anewarray
-java_booleanarray *builtin_newarray_boolean(s4 size);
+java_handle_booleanarray_t *builtin_newarray_boolean(s4 size);
#define BUILTIN_newarray_boolean (functionptr) builtin_newarray_boolean
-java_chararray *builtin_newarray_char(s4 size);
+java_handle_chararray_t *builtin_newarray_char(s4 size);
#define BUILTIN_newarray_char (functionptr) builtin_newarray_char
-java_floatarray *builtin_newarray_float(s4 size);
+java_handle_floatarray_t *builtin_newarray_float(s4 size);
#define BUILTIN_newarray_float (functionptr) builtin_newarray_float
-java_doublearray *builtin_newarray_double(s4 size);
+java_handle_doublearray_t *builtin_newarray_double(s4 size);
#define BUILTIN_newarray_double (functionptr) builtin_newarray_double
-java_bytearray *builtin_newarray_byte(s4 size);
+java_handle_bytearray_t *builtin_newarray_byte(s4 size);
#define BUILTIN_newarray_byte (functionptr) builtin_newarray_byte
-java_shortarray *builtin_newarray_short(s4 size);
+java_handle_shortarray_t *builtin_newarray_short(s4 size);
#define BUILTIN_newarray_short (functionptr) builtin_newarray_short
-java_intarray *builtin_newarray_int(s4 size);
+java_handle_intarray_t *builtin_newarray_int(s4 size);
#define BUILTIN_newarray_int (functionptr) builtin_newarray_int
-java_longarray *builtin_newarray_long(s4 size);
+java_handle_longarray_t *builtin_newarray_long(s4 size);
#define BUILTIN_newarray_long (functionptr) builtin_newarray_long
-java_arrayheader *builtin_multianewarray(int n, classinfo *arrayclass,
- long *dims);
+java_handle_objectarray_t *builtin_multianewarray(int n, classinfo *arrayclass,
+ long *dims);
#define BUILTIN_multianewarray (functionptr) builtin_multianewarray
-s4 builtin_canstore(java_objectarray *oa, java_objectheader *o);
+s4 builtin_canstore(java_handle_objectarray_t *oa, java_handle_t *o);
#define BUILTIN_canstore (functionptr) builtin_canstore
#if defined(TRACE_ARGS_NUM)
-void builtin_trace_args(s8 a0, s8 a1,
-#if TRACE_ARGS_NUM >= 4
- s8 a2, s8 a3,
-#endif /* TRACE_ARGS_NUM >= 4 */
-#if TRACE_ARGS_NUM >= 6
- s8 a4, s8 a5,
-#endif /* TRACE_ARGS_NUM >= 6 */
-#if TRACE_ARGS_NUM == 8
- s8 a6, s8 a7,
-#endif /* TRACE_ARGS_NUM == 8 */
- methodinfo *m);
+void builtin_verbosecall_enter(s8 a0, s8 a1,
+# if TRACE_ARGS_NUM >= 4
+ s8 a2, s8 a3,
+# endif
+# if TRACE_ARGS_NUM >= 6
+ s8 a4, s8 a5,
+# endif
+# if TRACE_ARGS_NUM == 8
+ s8 a6, s8 a7,
+# endif
+ methodinfo *m);
/* NOT AN OP */
#endif /* defined(TRACE_ARGS_NUM) */
-void builtin_displaymethodstop(methodinfo *m, s8 l, double d, float f);
+void builtin_verbosecall_exit(s8 l, double d, float f, methodinfo *m);
/* NOT AN OP */
s4 builtin_idiv(s4 a, s4 b);
float builtin_d2f(double a);
#define BUILTIN_d2f (functionptr) builtin_d2f
-java_arrayheader *builtin_clone_array(void *env, java_arrayheader *o);
-/* NOT AN OP */
-
-/* this is a wrapper for calls from asmpart */
-java_objectheader **builtin_asm_get_exceptionptrptr(void);
+java_handle_t *builtin_clone(void *env, java_handle_t *o);
+#define BUILTIN_clone (functionptr) builtin_clone
-#if defined(ENABLE_THREADS)
-static inline java_objectheader **builtin_get_exceptionptrptr(void);
+bool builtin_arraycopy(java_handle_t *src, s4 srcStart,
+ java_handle_t *dest, s4 destStart, s4 len);
+#define BUILTIN_arraycopy (functionptr) builtin_arraycopy
-inline java_objectheader **builtin_get_exceptionptrptr(void)
-{
- return &(THREADOBJECT->_exceptionptr);
-}
-#endif
+s8 builtin_nanotime(void);
+s8 builtin_currenttimemillis(void);
+#define BUILTIN_currenttimemillis (functionptr) builtin_currenttimemillis
#if defined(ENABLE_CYCLES_STATS)
void builtin_print_cycles_stats(FILE *file);