* M_LEA: removed
[cacao.git] / src / vm / builtin.h
index 556b3c11c62a82d166e5fd73262f0f3537040f8d..3303393ad69248f34b4fa06c383e9437a832ce4e 100644 (file)
@@ -29,7 +29,7 @@
    Changes: Edwin Steiner
             Christian Thalinger
 
-   $Id: builtin.h 2293 2005-04-12 22:00:37Z twisti $
+   $Id: builtin.h 3029 2005-07-13 11:45:07Z twisti $
 
 */
 
@@ -65,7 +65,7 @@
 #define DBL_NEGINF  0xfff0000000000000LL
 
 
-/* float versions are not defined in gnu classpath's fdlibm */
+/* float versions are not defined in GNU classpath's fdlibm */
 
 #define copysignf    copysign
 #define finitef      finite
 #define isnanf       isnan
 
 
-/**********************************************************************/
-/* BUILTIN FUNCTIONS TABLE                                            */
-/**********************************************************************/
+/* builtin functions table ****************************************************/
 
-/* IMPORTANT:
- * For each builtin function which is used in a BUILTIN* opcode there
- * must be an entry in the builtin_desc table in jit/jit.c.
- */
-typedef struct builtin_descriptor builtin_descriptor;
+typedef struct builtintable_entry builtintable_entry;
 
-/* There is a builtin_descriptor in builtin_desc for every builtin
- * function used in BUILTIN* opcodes.
- */
-struct builtin_descriptor {
-       int         opcode;   /* opcode which is replaced by this builtin */
-                             /* (255 means no automatic replacement,     */
-                             /*    0 means end of list.)                 */
-       functionptr builtin;  /* the builtin function (specify BUILTIN_...*/
-                             /* macro)                                   */
-       int         icmd;     /* the BUILTIN* opcode to use (# of args)   */
-       u1          type_s1;  /* type of 1st argument                     */
-       u1          type_s2;  /* type of 2nd argument, or TYPE_VOID       */
-       u1          type_s3;  /* type of 3rd argument, or TYPE_VOID       */
-       u1          type_d;   /* type of result (may be TYPE_VOID)        */
-       bool        supported;/* is <opcode> supported without builtin?   */
-       bool        isfloat;  /* is this a floating point operation?      */
-       char        *name;    /* display name of the builtin function     */
+struct builtintable_entry {
+       s4           opcode;                /* opcode which is replaced           */
+       functionptr  fp;                    /* function pointer of builtin        */
+       char        *descriptor;
+       char        *name;
+       methoddesc  *md;
 };
 
-extern builtin_descriptor builtin_desc[];
 
-/**********************************************************************/
-/* GLOBAL VARIABLES                                                   */
-/**********************************************************************/
+/* function prototypes ********************************************************/
+
+bool builtin_init(void);
 
-#if defined(USEBUILTINTABLE)
-void sort_builtintable(void);
-builtin_descriptor *find_builtin(int opcode);
-#endif /* defined(USEBUILTINTABLE) */
+builtintable_entry *builtintable_get_internal(functionptr fp);
+builtintable_entry *builtintable_get_automatic(s4 opcode);
 
 
 /**********************************************************************/
@@ -150,17 +129,8 @@ s4 builtin_checkcast(java_objectheader *obj, classinfo *class);
 /* NOT AN OP */
 s4 builtin_arrayinstanceof(java_objectheader *obj, vftbl_t *target);
 #define BUILTIN_arrayinstanceof (functionptr) builtin_arrayinstanceof
-
-#if defined(__I386__)
-s4 asm_builtin_arrayinstanceof(java_objectheader *obj, classinfo *class); /* XXX ? */
-#undef  BUILTIN_arrayinstanceof
-#define BUILTIN_arrayinstanceof (functionptr) asm_builtin_arrayinstanceof
-#endif
-
-s4 builtin_checkarraycast(java_objectheader *obj, vftbl_t *target);
-/* NOT AN OP */
-s4 asm_builtin_checkarraycast(java_objectheader *obj, vftbl_t *target);
-#define BUILTIN_checkarraycast (functionptr) asm_builtin_checkarraycast
+s4 builtin_arraycheckcast(java_objectheader *o, vftbl_t *target);
+#define BUILTIN_arraycheckcast (functionptr) builtin_arraycheckcast
 
 java_objectheader *builtin_throw_exception(java_objectheader *exception);
 /* NOT AN OP */
@@ -181,15 +151,10 @@ java_objectheader *builtin_new(classinfo *c);
 
 java_arrayheader *builtin_newarray(s4 size, vftbl_t *arrayvftbl);
 #define BUILTIN_newarray (functionptr) builtin_newarray
+
 java_objectarray *builtin_anewarray(s4 size, classinfo *component);
 #define BUILTIN_anewarray (functionptr) builtin_anewarray
 
-#if defined(__I386__)
-void asm_builtin_newarray(s4 size, vftbl_t *arrayvftbl);
-#undef  BUILTIN_newarray
-#define BUILTIN_newarray (functionptr) asm_builtin_newarray
-#endif
-
 java_booleanarray *builtin_newarray_boolean(s4 size);
 #define BUILTIN_newarray_boolean (functionptr) builtin_newarray_boolean
 java_chararray *builtin_newarray_char(s4 size);
@@ -206,15 +171,11 @@ java_intarray *builtin_newarray_int(s4 size);
 #define BUILTIN_newarray_int (functionptr) builtin_newarray_int
 java_longarray *builtin_newarray_long(s4 size);
 #define BUILTIN_newarray_long (functionptr) builtin_newarray_long
-java_arrayheader *builtin_nmultianewarray(int n, vftbl_t *arrayvftbl, long *dims);
-#define BUILTIN_nmultianewarray (functionptr) builtin_nmultianewarray
-/*  java_arrayheader *builtin_nmultianewarray(int n, classinfo *arrayclass, long *dims); */
-/* NOT AN OP */
+java_arrayheader *builtin_multianewarray(int n, vftbl_t *arrayvftbl, long *dims);
+#define BUILTIN_multianewarray (functionptr) builtin_multianewarray
 
 s4 builtin_canstore(java_objectarray *a, java_objectheader *o);
-/* NOT AN OP */
-void asm_builtin_aastore(java_objectarray *a, s4 index, java_objectheader *o);
-#define BUILTIN_aastore (functionptr) asm_builtin_aastore
+#define BUILTIN_canstore (functionptr) builtin_canstore
 
 #if defined(TRACE_ARGS_NUM)
 void builtin_trace_args(s8 a0, s8 a1, s8 a2, s8 a3,
@@ -227,32 +188,23 @@ void builtin_trace_args(s8 a0, s8 a1, s8 a2, s8 a3,
                                                methodinfo *m);
 /* NOT AN OP */
 #endif /* defined(TRACE_ARGS_NUM) */
-void builtin_displaymethodstart(methodinfo *m);
-/* NOT AN OP */
+
 void builtin_displaymethodstop(methodinfo *m, s8 l, double d, float f);
 /* NOT AN OP */
 
 #if defined(USE_THREADS)
 void builtin_monitorenter(java_objectheader *o);
-/* NOT AN OP */
+#define BUILTIN_monitorenter (functionptr) builtin_monitorenter
 void builtin_staticmonitorenter(classinfo *c);
-/* NOT AN OP */
-void asm_builtin_monitorenter(java_objectheader *o);
-#define BUILTIN_monitorenter (functionptr) asm_builtin_monitorenter
-void *builtin_monitorexit(java_objectheader *o);
-/* NOT AN OP */
-void *asm_builtin_monitorexit(java_objectheader *o);
-#define BUILTIN_monitorexit (functionptr) asm_builtin_monitorexit
+#define BUILTIN_staticmonitorenter (functionptr) builtin_staticmonitorenter
+void builtin_monitorexit(java_objectheader *o);
+#define BUILTIN_monitorexit (functionptr) builtin_monitorexit
 #endif
 
 s4 builtin_idiv(s4 a, s4 b);
-/* NOT AN OP */
-s4 asm_builtin_idiv(s4 a, s4 b);
-#define BUILTIN_idiv (functionptr) asm_builtin_idiv
+#define BUILTIN_idiv (functionptr) builtin_idiv
 s4 builtin_irem(s4 a, s4 b);
-/* NOT AN OP */
-s4 asm_builtin_irem(s4 a, s4 b);
-#define BUILTIN_irem (functionptr) asm_builtin_irem
+#define BUILTIN_irem (functionptr) builtin_irem
 
 s8 builtin_ladd(s8 a, s8 b);
 #define BUILTIN_ladd (functionptr) builtin_ladd
@@ -260,14 +212,12 @@ s8 builtin_lsub(s8 a, s8 b);
 #define BUILTIN_lsub (functionptr) builtin_lsub
 s8 builtin_lmul(s8 a, s8 b);
 #define BUILTIN_lmul (functionptr) builtin_lmul
+
 s8 builtin_ldiv(s8 a, s8 b);
-/* NOT AN OP */
-s8 asm_builtin_ldiv(s8 a, s8 b);
-#define BUILTIN_ldiv (functionptr) asm_builtin_ldiv
+#define BUILTIN_ldiv (functionptr) builtin_ldiv
 s8 builtin_lrem(s8 a, s8 b);
-/* NOT AN OP */
-s8 asm_builtin_lrem(s8 a, s8 b);
-#define BUILTIN_lrem (functionptr) asm_builtin_lrem
+#define BUILTIN_lrem (functionptr) builtin_lrem
+
 s8 builtin_lshl(s8 a, s4 b);
 #define BUILTIN_lshl (functionptr) builtin_lshl
 s8 builtin_lshr(s8 a, s4 b);
@@ -359,7 +309,7 @@ float    builtin_d2f(double a);
 java_arrayheader *builtin_clone_array(void *env, java_arrayheader *o);
 /* NOT AN OP */
 
-/* builtin_dummy just panics if it is executed. */
+/* builtin_dummy just exits if it is executed. */
 s4 builtin_dummy(void);
 /* NOT AN OP */
 
@@ -372,6 +322,7 @@ java_objectheader **builtin_asm_get_exceptionptrptr(void);
 
 #if defined(USE_THREADS) && defined(NATIVE_THREADS)
 static inline java_objectheader **builtin_get_exceptionptrptr(void);
+static inline u1 *builtin_get_dontfillinexceptionstacktrace(void);
 /* NOT AN OP */
 static inline methodinfo **builtin_get_threadrootmethod(void);
 /* NOT AN OP */
@@ -381,6 +332,11 @@ inline java_objectheader **builtin_get_exceptionptrptr(void)
        return &THREADINFO->_exceptionptr;
 }
 
+inline u1 *builtin_get_dontfillinexceptionstacktrace(void)
+{
+       return &THREADINFO->_dontfillinexceptionstacktrace;
+}
+
 inline methodinfo **builtin_get_threadrootmethod(void)
 {
        return &THREADINFO->_threadrootmethod;
@@ -403,7 +359,10 @@ points here---->| previous element in list                 |
                ------------------------------------------------
 */
 void *builtin_asm_get_stackframeinfo(void);
-stacktraceelement *builtin_stacktrace_copy(stacktraceelement **,stacktraceelement *begin, stacktraceelement *end);
+stacktraceelement *builtin_stacktrace_copy(stacktraceelement **el,
+                                                                                  stacktraceelement *begin,
+                                                                                  stacktraceelement *end);
+
 #endif /* _BUILTIN_H */