X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fvm%2Fbuiltin.h;h=3303393ad69248f34b4fa06c383e9437a832ce4e;hb=fcad1cc589c938f48a1746e9a7feb6a6eb151840;hp=6f269e7cf4cda8cc957205ac0f859e1f6f88daa4;hpb=e6c73f4c4e2d4afb0c4cd2332b168a0ba47348c1;p=cacao.git diff --git a/src/vm/builtin.h b/src/vm/builtin.h index 6f269e7cf..3303393ad 100644 --- a/src/vm/builtin.h +++ b/src/vm/builtin.h @@ -29,7 +29,7 @@ Changes: Edwin Steiner Christian Thalinger - $Id: builtin.h 2331 2005-04-22 13:18:19Z 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 @@ -73,46 +73,25 @@ #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 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 */ @@ -185,12 +155,6 @@ java_arrayheader *builtin_newarray(s4 size, vftbl_t *arrayvftbl); 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); @@ -210,16 +174,8 @@ java_longarray *builtin_newarray_long(s4 size); java_arrayheader *builtin_multianewarray(int n, vftbl_t *arrayvftbl, long *dims); #define BUILTIN_multianewarray (functionptr) builtin_multianewarray -#if defined(__I386__) -void asm_builtin_multianewarray(s4 size, vftbl_t *arrayvftbl); -#undef BUILTIN_multianewarray -#define BUILTIN_multianewarray (functionptr) asm_builtin_multianewarray -#endif - 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, @@ -232,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 @@ -265,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); @@ -364,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 */ @@ -377,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 */ @@ -386,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; @@ -408,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 */