* src/vm/jit/argument.c (argument_vmarray_from_jvalue): Fixed warning
[cacao.git] / src / vm / builtin.h
index ed2a820730346514c7aaf2e551f39e37019b9bd0..a68519d629085635154fba8fad19037167a55fe5 100644 (file)
@@ -1,6 +1,6 @@
 /* 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 5251 2006-08-18 13:01:00Z twisti $
-
 */
 
 
 #ifndef _BUILTIN_H
 #define _BUILTIN_H
 
+/* forward typedefs ***********************************************************/
+
+typedef struct builtintable_entry builtintable_entry;
+
 #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 */
 
 /* builtin functions table ****************************************************/
 
-typedef struct builtintable_entry builtintable_entry;
-
 struct builtintable_entry {
        s4           opcode;                /* opcode which is replaced           */
+       u4           flags;                 /* e.g. check for exception           */
        functionptr  fp;                    /* function pointer of builtin        */
+       u1          *stub;                  /* pointer to builtin stub code       */
        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;
 };
 
 
+/* builtin table flag defines *************************************************/
+
+#define BUILTINTABLE_FLAG_STUB         0x0001 /* builtin needs a stub         */
+#define BUILTINTABLE_FLAG_EXCEPTION    0x0002 /* check for excepion on return */
+
+
 /* function prototypes ********************************************************/
 
 bool builtin_init(void);
@@ -95,7 +94,7 @@ bool builtin_init(void);
 builtintable_entry *builtintable_get_internal(functionptr fp);
 builtintable_entry *builtintable_get_automatic(s4 opcode);
 
-bool builtintable_replace_function(instruction *iptr);
+bool builtintable_replace_function(void *iptr);
 
 
 /**********************************************************************/
@@ -123,76 +122,80 @@ bool builtintable_replace_function(instruction *iptr);
  * ICMD_BUILTIN3.)
  */
 
-s4 builtin_instanceof(java_objectheader *obj, classinfo *class);
-#define BUILTIN_instanceof (functionptr) builtin_instanceof
-s4 builtin_isanysubclass (classinfo *sub, classinfo *super);
+s4 builtin_instanceof(java_handle_t *obj, classinfo *class);
+/* NOT AN OP */
+s4 builtin_checkcast(java_handle_t *obj, classinfo *class);
 /* NOT AN OP */
-s4 builtin_isanysubclass_vftbl (vftbl_t *sub, vftbl_t *super);
+s4 builtin_arrayinstanceof(java_handle_t *h, classinfo *targetclass);
 /* NOT AN OP */
-s4 builtin_checkcast(java_objectheader *obj, classinfo *class);
+s4 builtin_fast_arrayinstanceof(java_object_t *o, classinfo *targetclass);
+#define BUILTIN_arrayinstanceof (functionptr) builtin_fast_arrayinstanceof
+s4 builtin_fast_arraycheckcast(java_object_t *o, classinfo *targetclass);
+#define BUILTIN_arraycheckcast (functionptr) builtin_fast_arraycheckcast
+
+s4 builtin_canstore(java_handle_objectarray_t *oa, java_handle_t *o);
 /* NOT AN OP */
-s4 builtin_arrayinstanceof(java_objectheader *o, classinfo *targetclass);
-#define BUILTIN_arrayinstanceof (functionptr) builtin_arrayinstanceof
-s4 builtin_arraycheckcast(java_objectheader *o, classinfo *targetclass);
-#define BUILTIN_arraycheckcast (functionptr) builtin_arraycheckcast
+s4 builtin_fast_canstore(java_objectarray_t *oa, java_object_t *o);
+#define BUILTIN_FAST_canstore (functionptr) builtin_fast_canstore
 
-void *builtin_throw_exception(java_objectheader *exception);
+void *builtin_throw_exception(java_object_t *exception);
 /* NOT AN OP */
-java_objectheader *builtin_trace_exception(java_objectheader *xptr,
-                                                                                  methodinfo *m,
-                                                                                  void *pos,
-                                                                                  s4 indent);
+java_object_t *builtin_retrieve_exception(void);
 /* NOT AN OP */
 
-java_objectheader *builtin_new(classinfo *c);
-#define BUILTIN_new (functionptr) builtin_new
+java_handle_t *builtin_new(classinfo *c);
+/* NOT AN OP */
+java_handle_t *builtin_java_new(java_handle_t *c);
+#define BUILTIN_new (functionptr) builtin_java_new
+java_object_t *builtin_fast_new(classinfo *c);
+#define BUILTIN_FAST_new (functionptr) builtin_fast_new
 
-java_arrayheader *builtin_newarray(s4 size, classinfo *arrayclass);
-#define BUILTIN_newarray (functionptr) builtin_newarray
+java_handle_t *builtin_newarray(s4 size, classinfo *arrayclass);
+/* NOT AN OP */
+java_handle_t *builtin_java_newarray(s4 size, java_handle_t *arrayclass);
+#define BUILTIN_newarray (functionptr) builtin_java_newarray
 
-java_objectarray *builtin_anewarray(s4 size, classinfo *componentclass);
-#define BUILTIN_anewarray (functionptr) builtin_anewarray
+java_handle_objectarray_t *builtin_anewarray(s4 size, classinfo *componentclass);
+/* NOT AN OP */
 
-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,
+                                                                                                 java_handle_t *arrayclass,
+                                                                                                 long *dims);
 #define BUILTIN_multianewarray (functionptr) builtin_multianewarray
 
-s4 builtin_canstore(java_objectarray *oa, java_objectheader *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);
@@ -300,13 +303,14 @@ s8       asm_builtin_d2l(double a);
 float    builtin_d2f(double a);
 #define BUILTIN_d2f (functionptr) builtin_d2f
 
-java_arrayheader *builtin_clone_array(void *env, java_arrayheader *o);
-/* NOT AN OP */
+java_handle_t *builtin_clone(void *env, java_handle_t *o);
+#define BUILTIN_clone (functionptr) builtin_clone
 
-bool builtin_arraycopy(java_arrayheader *src, s4 srcStart,
-                                          java_arrayheader *dest, s4 destStart, s4 len);
+void builtin_arraycopy(java_handle_t *src, s4 srcStart,
+                                          java_handle_t *dest, s4 destStart, s4 len);
 #define BUILTIN_arraycopy (functionptr) builtin_arraycopy
 
+s8 builtin_nanotime(void);
 s8 builtin_currenttimemillis(void);
 #define BUILTIN_currenttimemillis (functionptr) builtin_currenttimemillis
 
@@ -328,4 +332,5 @@ void builtin_print_cycles_stats(FILE *file);
  * c-basic-offset: 4
  * tab-width: 4
  * End:
+ * vim:noexpandtab:sw=4:ts=4:
  */