## Process this file with automake to produce Makefile.in
-# $Id: Makefile.am 218 2003-02-04 12:47:51Z stefan $
+# $Id: Makefile.am 221 2003-02-05 14:09:38Z stefan $
@SET_MAKE@
java.io.UnixFileSystem \
java.lang.ClassLoader_NativeLibrary
-@SYSDEP_DIR@/asmpart.o: $(top_srcdir)/@SYSDEP_DIR@/asmpart.S @SYSDEP_DIR@/offsets.h
- @CC@ $(INCLUDES) -c -g -o $@ $<
+@SYSDEP_DIR@/asmpart.o: $(top_srcdir)/@SYSDEP_DIR@/@ASMPART@ @SYSDEP_DIR@/offsets.h
+ @CC@ $(CFLAGS) $(INCLUDES) -c -g -o $@ $<
checkjvm:
$(MAKE) -C jvmtst $@
/* Define if mman.h defines MAP_ANONYMOUS */
#undef HAVE_MAP_ANONYMOUS
+#undef TRACE_ARGS_NUM
+
/* Define to include thread support */
#undef USE_THREADS
#undef EXTERNAL_OVERFLOW
#undef SYSDEP_DIR
#undef OLD_COMPILER
+#undef USE_CODEMMAP
#undef USE_BOEHM
}
+#ifdef TRACE_ARGS_NUM
void builtin_trace_args(long a0, long a1, long a2, long a3, long a4, long a5,
+#if TRACE_ARGS_NUM > 6
+ long a6, long a7,
+#endif
methodinfo *method)
{
sprintf (logtext, " ");
utf_sprint (logtext+strlen(logtext), method->descriptor);
sprintf (logtext+strlen(logtext), "(");
switch (method->paramcount) {
+#if TRACE_ARGS_NUM > 6
+ case 8:
+ sprintf(logtext+strlen(logtext), "%lx, %lx, %lx, %lx, %lx, %lx, %lx, %lx",
+ a0, a1, a2, a3, a4, a5, a6, a7);
+ break;
+ case 7:
+ sprintf(logtext+strlen(logtext), "%lx, %lx, %lx, %lx, %lx, %lx, %lx",
+ a0, a1, a2, a3, a4, a5, a6);
+ break;
+#endif
case 6:
sprintf(logtext+strlen(logtext), "%lx, %lx, %lx, %lx, %lx, %lx",
a0, a1, a2, a3, a4, a5);
dolog ();
methodindent++;
}
+#endif
void builtin_displaymethodstart(methodinfo *method)
{
methodindent++;
}
-void builtin_displaymethodstop(methodinfo *method, long l, double d)
+void builtin_displaymethodstop(methodinfo *method, long l, double d, float f)
{
methodindent--;
sprintf (logtext, " ");
sprintf (logtext+strlen(logtext), "->%ld", l);
break;
case TYPE_FLOAT:
+ sprintf (logtext+strlen(logtext), "->%g", f);
+ break;
case TYPE_DOUBLE:
sprintf (logtext+strlen(logtext), "->%g", d);
break;
s4 builtin_aastore (java_objectarray *a, s4 index, java_objectheader *o);
void asm_builtin_aastore (java_objectarray *a, s4 index, java_objectheader *o);
+#ifdef TRACE_ARGS_NUM
+#if TRACE_ARGS_NUM == 6
void builtin_trace_args(long a0, long a1, long a2, long a3, long a4, long a5, methodinfo *method);
+#else
+void builtin_trace_args(long a0, long a1, long a2, long a3, long a4, long a5, long a6, long a7, methodinfo *method);
+#endif
+#endif
void builtin_displaymethodstart(methodinfo *method);
-void builtin_displaymethodstop(methodinfo *method, long l, double d);
+void builtin_displaymethodstop(methodinfo *method, long l, double d, float f);
/* void builtin_displaymethodstop(methodinfo *method); */
void builtin_displaymethodexception(methodinfo *method);
dnl system type
+ASMPART="asmpart.S"
case "$host_cpu" in
alpha* )
SYSDEP_DIR="alpha"
COMPILER_SOURCES="compiler.h compiler.c"
COMPILER_OBJECTS="compiler.o"
AC_DEFINE(OLD_COMPILER)
+ AC_DEFINE(TRACE_ARGS_NUM, 6)
+ AC_DEFINE(USE_CODEMMAP)
;;
mips* )
SYSDEP_DIR="mips"
+ ASMPART="asmpart.s"
CFLAGS="-64 -g -DMAP_ANONYMOUS=0 -woff 1048,1110,1164,1515"
LIBS="-lelfutil"
COMPILER_SOURCES=""
COMPILER_OBJECTS=""
+ AC_DEFINE(TRACE_ARGS_NUM, 8)
;;
i386* | i486* | i586* | i686* )
AC_SUBST(COMPILER_SOURCES)
AC_SUBST(COMPILER_OBJECTS)
+AC_SUBST(ASMPART)
AC_DEFINE_UNQUOTED(SYSDEP_DIR, "$SYSDEP_DIR")
AC_SUBST(SYSDEP_DIR)
-EXTRA_DIST = asmpart.c disass.c gen.c ngen.c \
+EXTRA_DIST = asmpart.S disass.c gen.c ngen.c \
defines.h native-math.h ngen.h sigcontext.h \
types.h threads.h
#define skip_nbytes(len) classbuf_pos+=len;
-#define suck_u1() (*++classbuf_pos)
+inline u1 suck_u1()
+{
+ return *++classbuf_pos;
+}
+inline u2 suck_u2()
+{
+ u1 a=suck_u1(), b=suck_u1();
+ return ((u2)a<<8)+(u2)b;
+}
+inline u4 suck_u4()
+{
+ u1 a=suck_u1(), b=suck_u1(), c=suck_u1(), d=suck_u1();
+ return ((u4)a<<24)+((u4)b<<16)+((u4)c<<8)+(u4)d;
+}
#define suck_s8() (s8) suck_u8()
#define suck_s2() (s2) suck_u2()
#define suck_s4() (s4) suck_u4()
#define suck_s1() (s1) suck_u1()
-#define suck_u2() (u2) ((suck_u1()<<8)+suck_u1())
-#define suck_u4() (u4) ((((u4)suck_u1())<<24)+(((u4)suck_u1())<<16)+(((u4)suck_u1())<<8)+((u4)suck_u1()))
/* get u8 from classfile data */
-EXTRA_DIST = asmpart.S calling.doc defines.h disass.c \
+EXTRA_DIST = asmpart.S asmpart.s calling.doc defines.h disass.c \
native-math.h ngen.c ngen.h threads.h types.h
.globl asm_perform_threadswitch
.globl asm_initialize_thread_stack
.globl asm_switchstackandcall
+ .globl asm_getcallingmethod
/*************************** imported functions *******************************/
move sp,a0 /* switch to new stack */
move itmp3,a1
+ move a0,a3
jalr itmp3 /* and call function */
ld ra,0(sp) /* load return address */
j ra /* return */
.end asm_switchstackandcall
+
+ .ent asm_getcallingmethod
+asm_getcallingmethod:
+ li v0,0
+ j ra
+ .end asm_getcallingmethod
Authors: Andreas Krall EMAIL: cacao@complang.tuwien.ac.at
- Last Change: $Id: ngen.c 199 2003-01-21 12:32:18Z stefan $
+ Last Change: $Id: ngen.c 221 2003-02-05 14:09:38Z stefan $
*******************************************************************************/
#include "jitdef.h" /* phil */
+#include <errno.h>
+#include <unistd.h>
+
/* *****************************************************************************
Datatypes and Register Allocations:
if a and b are the same float-register, no code will be generated
*/
-#define M_FLTMOVE(a,b) if(a!=b){M_DMOV(a,b);}
+#define M_FLTMOVE(a,b) {if(a!=b){M_DMOV(a,b);}}
+
+#define M_TFLTMOVE(t,a,b) \
+ {if(a!=b) \
+ if ((t)==TYPE_DBL) \
+ {M_DMOV(a,b);} \
+ else {M_FMOV(a,b);} \
+ }
+#define M_TFLD(t,a,b,disp) \
+ if ((t)==TYPE_DBL) \
+ {M_DLD(a,b,disp);} \
+ else \
+ {M_FLD(a,b,disp);}
+
+#define M_TFST(t,a,b,disp) \
+ if ((t)==TYPE_DBL) \
+ {M_DST(a,b,disp);} \
+ else \
+ {M_FST(a,b,disp);}
+
+#define M_CCFLTMOVE(t1,t2,a,b) \
+ if ((t1)==(t2)) \
+ {M_TFLTMOVE(t1,a,b);} \
+ else \
+ if ((t1)==TYPE_DBL) \
+ {M_CVTDF(a,b);} \
+ else \
+ {M_CVTFD(a,b);}
+
+#define M_CCFLD(t1,t2,a,b,disp) \
+ if ((t1)==(t2)) \
+ {M_DLD(a,b,disp);} \
+ else { \
+ M_DLD(REG_FTMP1,b,disp); \
+ if ((t1)==TYPE_DBL) \
+ {M_CVTDF(REG_FTMP1,a);} \
+ else \
+ {M_CVTFD(REG_FTMP1,a);} \
+ }
+
+#define M_CCFST(t1,t2,a,b,disp) \
+ if ((t1)==(t2)) \
+ {M_DST(a,b,disp);} \
+ else { \
+ if ((t1)==TYPE_DBL) \
+ {M_CVTDF(a,REG_FTMP1);} \
+ else \
+ {M_CVTFD(a,REG_FTMP1);} \
+ M_DST(REG_FTMP1,b,disp); \
+ }
+
/* var_to_reg_xxx:
this function generates code to fetch data from a pseudo-register
}
+void docacheflush(u1 *p, long bytelen, int dummy);
+
/* NullPointerException handlers and exception handling initialisation */
/* NullPointerException signal handler for hardware null pointer check */
to arguments on stack. ToDo: save floating point registers !!!!!!!!!
*/
- if (runverbose && isleafmethod) {
+ if (runverbose) {
M_LDA (REG_SP, REG_SP, -(18*8));
M_LST(REG_RA, REG_SP, 1*8);
else { /* floating args */
if (p < FLT_ARG_CNT) { /* register arguments */
if (!(var->flags & INMEMORY)) /* reg arg -> register */
- {M_FLTMOVE (argfltregs[p], r);}
+ {M_TFLTMOVE (var->type, argfltregs[p], r);}
else /* reg arg -> spilled */
M_DST (argfltregs[p], REG_SP, 8 * r);
}
else { /* stack arguments */
pa = p - FLT_ARG_CNT;
- if (!(var->flags & INMEMORY)) /* stack-arg -> register */
+ if (!(var->flags & INMEMORY)) { /* stack-arg -> register */
M_DLD (r, REG_SP, 8 * (parentargs_base + pa) );
- else { /* stack-arg -> spilled */
+ } else { /* stack-arg -> spilled */
M_DLD (REG_FTMP1, REG_SP, 8 * (parentargs_base + pa));
M_DST (REG_FTMP1, REG_SP, 8 * r);
}
if (IS_FLT_DBL_TYPE(s2)) {
if (!(interfaces[len][s2].flags & INMEMORY)) {
s1 = interfaces[len][s2].regoff;
- M_FLTMOVE(s1,d);
+ M_TFLTMOVE(s2,s1,d);
}
else {
M_DLD(d, REG_SP, 8 * interfaces[len][s2].regoff);
(iptr->dst->varnum == iptr->op1))
break;
var = &(locals[iptr->op1][iptr->opc - ICMD_ILOAD]);
- if (var->flags & INMEMORY)
- M_DLD(d, REG_SP, 8 * var->regoff);
- else
- {M_FLTMOVE(var->regoff,d);}
+ {
+ int t2 = ((iptr->opc == ICMD_FLOAD) ? TYPE_FLT : TYPE_DBL);
+ if (var->flags & INMEMORY)
+ {M_CCFLD(var->type,t2,d, REG_SP, 8 * var->regoff);}
+ else
+ {M_CCFLTMOVE(var->type,t2,var->regoff,d);}
+ }
store_reg_to_var_flt(iptr->dst, d);
break;
(src->varnum == iptr->op1))
break;
var = &(locals[iptr->op1][iptr->opc - ICMD_ISTORE]);
- if (var->flags & INMEMORY) {
- var_to_reg_flt(s1, src, REG_FTMP1);
- M_DST(s1, REG_SP, 8 * var->regoff);
- }
- else {
- var_to_reg_flt(s1, src, var->regoff);
- M_FLTMOVE(s1, var->regoff);
- }
+ {
+ int t1 = ((iptr->opc == ICMD_FSTORE) ? TYPE_FLT : TYPE_DBL);
+ if (var->flags & INMEMORY) {
+ var_to_reg_flt(s1, src, REG_FTMP1);
+ M_CCFST(t1,var->type,s1, REG_SP, 8 * var->regoff);
+ }
+ else {
+ var_to_reg_flt(s1, src, var->regoff);
+ M_CCFLTMOVE(t1,var->type,s1, var->regoff);
+ }
+ }
break;
((from->flags ^ to->flags) & INMEMORY)) { \
if (IS_FLT_DBL_TYPE(from->type)) { \
var_to_reg_flt(s1, from, d); \
- M_FLTMOVE(s1,d); \
+ M_TFLTMOVE(from->type,s1,d); \
store_reg_to_var_flt(to, d); \
}\
else { \
break;
case ICMD_FREM: /* ..., val1, val2 ==> ..., val1 % val2 */
+ panic("FREM");
var_to_reg_flt(s1, src->prev, REG_FTMP1);
var_to_reg_flt(s2, src, REG_FTMP2);
var_to_reg_flt(s1, src, REG_FTMP1);
d = reg_of_var(iptr->dst, REG_ITMP3);
- M_CVTFI(s1, REG_FTMP1);
+ M_TRUNCFI(s1, REG_FTMP1);
M_MOVDI(REG_FTMP1, d);
+ M_NOP;
store_reg_to_var_int(iptr->dst, d);
break;
var_to_reg_flt(s1, src, REG_FTMP1);
d = reg_of_var(iptr->dst, REG_ITMP3);
- M_CVTDI(s1, REG_FTMP1);
+ M_TRUNCDI(s1, REG_FTMP1);
M_MOVDI(REG_FTMP1, d);
+ M_NOP;
store_reg_to_var_int(iptr->dst, d);
break;
var_to_reg_flt(s1, src, REG_FTMP1);
d = reg_of_var(iptr->dst, REG_ITMP3);
- M_CVTFL(s1, REG_FTMP1);
+ M_TRUNCFL(s1, REG_FTMP1);
M_MOVDL(REG_FTMP1, d);
+ M_NOP;
store_reg_to_var_int(iptr->dst, d);
break;
var_to_reg_flt(s1, src, REG_FTMP1);
d = reg_of_var(iptr->dst, REG_ITMP3);
- M_CVTDL(s1, REG_FTMP1);
+ M_TRUNCDL(s1, REG_FTMP1);
M_MOVDL(REG_FTMP1, d);
+ M_NOP;
store_reg_to_var_int(iptr->dst, d);
break;
}
#endif
var_to_reg_flt(s1, src, REG_FRESULT);
- M_FLTMOVE(s1, REG_FRESULT);
+ {
+ int t = ((iptr->opc == ICMD_FRETURN) ? TYPE_FLT : TYPE_DBL);
+ M_TFLTMOVE(t, s1, REG_FRESULT);
+ }
goto nowperformreturn;
case ICMD_RETURN: /* ... ==> ... */
M_ALD(argintregs[0], REG_PV, a);
M_MOV(REG_RESULT, argintregs[1]);
M_FLTMOVE(REG_FRESULT, argfltregs[2]);
+ M_FMOV(REG_FRESULT, argfltregs[3]);
a = dseg_addaddress ((void*) (builtin_displaymethodstop));
M_ALD(REG_ITMP3, REG_PV, a);
M_JSR (REG_RA, REG_ITMP3);
if (s3 < FLT_ARG_CNT) {
s1 = argfltregs[s3];
var_to_reg_flt(d, src, s1);
- M_FLTMOVE(d, s1);
+ M_TFLTMOVE(src->type,d, s1);
}
else {
var_to_reg_flt(d, src, REG_FTMP1);
s4 ml=-s1, mh=0;
while (ml<-32768) { ml+=65536; mh--; }
M_LUI(REG_PV, mh);
- M_IADD_IMM(REG_PV, ml, REG_RA);
- /* panic("method to big"); */
+ M_IADD_IMM(REG_PV, ml, REG_PV);
+ M_LADD(REG_PV, REG_RA, REG_PV);
}
/* d contains return type */
}
else {
s1 = reg_of_var(iptr->dst, REG_FRESULT);
- M_FLTMOVE(REG_FRESULT, s1);
+ M_TFLTMOVE(iptr->dst->type, REG_FRESULT, s1);
store_reg_to_var_flt(iptr->dst, s1);
}
}
if (IS_FLT_DBL_TYPE(s2)) {
var_to_reg_flt(s1, src, REG_FTMP1);
if (!(interfaces[len][s2].flags & INMEMORY)) {
- M_FLTMOVE(s1,interfaces[len][s2].regoff);
+ M_TFLTMOVE(s2,s1,interfaces[len][s2].regoff);
}
else {
M_DST(s1, REG_SP, 8 * interfaces[len][s2].regoff);
mcode_finish((int)((u1*) mcodeptr - mcodebase));
- (void) cacheflush((void*) method->entrypoint,
- (int)((u1*) mcodeptr - mcodebase), ICACHE);
+ docacheflush((void*) method->entrypoint,
+ ((u1*) mcodeptr - mcodebase), ICACHE);
}
in itmp1 is used as method pointer */
M_NOP;
- (void) cacheflush((void*) s, (char*) p - (char*) s, ICACHE);
-
s[2] = (u8) m; /* literals to be adressed */
s[3] = (u8) asm_call_jit_compiler; /* jump directly via PV from above */
+ (void) docacheflush((void*) s, (char*) p - (char*) s, ICACHE);
+
#ifdef STATISTICS
count_cstub_len += COMPSTUBSIZE * 8;
#endif
M_LDA (REG_ITMP2, REG_RA, -4); /* move fault address into reg. itmp2 */
/* delay slot */
- (void) cacheflush((void*) s, (char*) p - (char*) s, ICACHE);
-
s[14] = (u8) f; /* address of native method */
s[15] = (u8) (&exceptionptr); /* address of exceptionptr */
s[16]= (u8) (asm_handle_nat_exception); /* addr of asm exception handler */
s[17] = (u8) (&env); /* addr of jni_environement */
+ (void) docacheflush((void*) s, (char*) p - (char*) s, ICACHE);
+
#ifdef STATISTICS
count_nstub_len += NATIVESTUBSIZE * 8;
#endif
createcalljava();
}
+void docacheflush(u1 *p, long bytelen, int dummy)
+{
+ u1 *e = p + bytelen;
+ long psize = sysconf(_SC_PAGESIZE);
+ p -= (long) p & (psize-1);
+ e += psize - ((((long) e - 1) & (psize-1)) + 1);
+ bytelen = e-p;
+ mprotect(p, bytelen, PROT_READ|PROT_WRITE|PROT_EXEC);
+}
/*
* These are local overrides for various environment variables in Emacs.
*******************************************************************************/
#include <sys/cachectl.h>
+#include <sys/mman.h>
/* see also file calling.doc for explanation of calling conventions */
void asm_perform_threadswitch (u1 **from, u1 **to, u1 **stackTop);
u1* asm_initialize_thread_stack (void *func, u1 *stack);
-void asm_switchstackandcall (void *stack, void *func, void **stacktopsave);
+void asm_switchstackandcall (void *stack, void *func, void **stacktopsave, void *p);
/* access macros */
heap_size = align_size(size + ((1 << ALIGN) - 1));
#if !(defined(HAVE_MAP_ANONYMOUS))
- heap_base = malloc(heap_size);
+ heap_base = (void*)(((u8)malloc(heap_size+1023)+1023) & ~1023);
#else
heap_base = (void*) mmap ((void*) 0x10000000,
((size_t)heap_size + PAGESIZE_MINUS_ONE) & ~PAGESIZE_MINUS_ONE,
if (collectverbose) {
sprintf(logtext, "Garbage Collection: previous/now = %d / %d ",
- (int) (heap_top - heap_base),
- (int) (heap_top - heap_base));
+ (int) ((u1*) heap_top - (u1*) heap_base),
+ (int) ((u1*) heap_top - (u1*) heap_base));
dolog ();
}
}
*/
JNIEXPORT s4 JNICALL Java_java_io_UnixFileSystem_setLastModifiedTime (JNIEnv *env , struct java_io_UnixFileSystem* this , struct java_io_File* file, s8 time)
{
- log_text("Java_java_io_FileSystemImpl_setLastModifiedTime called");
+ struct utimbuf ub;
+ log_text("Java_java_io_FileSystemImpl_setLastModifiedTime called");
- if (!utime(javastring_tochar( (java_objectheader*) (file->path)), time / 1000))
+ ub.actime = time/1000;
+ ub.modtime = time/1000;
+ if (!utime(javastring_tochar( (java_objectheader*) (file->path)), &ub))
return 1;
else
return 0;
s4 colon;
} java_io_UnixFileSystem;
-/*
- * Class: java/io/UnixFileSystem
- * Method: isAbsolute
- * Signature: (Ljava/io/File;)Z
- */
-JNIEXPORT s4 JNICALL Java_java_io_UnixFileSystem_isAbsolute (JNIEnv *env , struct java_io_UnixFileSystem* this , struct java_io_File* par1);
/*
* Class: java/io/UnixFileSystem
* Method: canonicalize
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT struct java_lang_String* JNICALL Java_java_io_UnixFileSystem_canonicalize (JNIEnv *env , struct java_io_UnixFileSystem* this , struct java_lang_String* par1);
-/*
- * Class: java/io/UnixFileSystem
- * Method: getBooleanAttributes0
- * Signature: (Ljava/io/File;)I
- */
-JNIEXPORT s4 JNICALL Java_java_io_UnixFileSystem_getBooleanAttributes0 (JNIEnv *env , struct java_io_UnixFileSystem* this , struct java_io_File* par1);
/*
* Class: java/io/UnixFileSystem
* Method: checkAccess
JNIEXPORT s4 JNICALL Java_java_io_UnixFileSystem_checkAccess (JNIEnv *env , struct java_io_UnixFileSystem* this , struct java_io_File* par1, s4 par2);
/*
* Class: java/io/UnixFileSystem
- * Method: getLastModifiedTime
- * Signature: (Ljava/io/File;)J
- */
-JNIEXPORT s8 JNICALL Java_java_io_UnixFileSystem_getLastModifiedTime (JNIEnv *env , struct java_io_UnixFileSystem* this , struct java_io_File* par1);
-/*
- * Class: java/io/UnixFileSystem
- * Method: getLength
- * Signature: (Ljava/io/File;)J
+ * Method: createDirectory
+ * Signature: (Ljava/io/File;)Z
*/
-JNIEXPORT s8 JNICALL Java_java_io_UnixFileSystem_getLength (JNIEnv *env , struct java_io_UnixFileSystem* this , struct java_io_File* par1);
+JNIEXPORT s4 JNICALL Java_java_io_UnixFileSystem_createDirectory (JNIEnv *env , struct java_io_UnixFileSystem* this , struct java_io_File* par1);
/*
* Class: java/io/UnixFileSystem
* Method: createFileExclusively
JNIEXPORT s4 JNICALL Java_java_io_UnixFileSystem_deleteOnExit (JNIEnv *env , struct java_io_UnixFileSystem* this , struct java_io_File* par1);
/*
* Class: java/io/UnixFileSystem
- * Method: list
- * Signature: (Ljava/io/File;)[Ljava/lang/String;
+ * Method: getBooleanAttributes0
+ * Signature: (Ljava/io/File;)I
*/
-JNIEXPORT java_objectarray* JNICALL Java_java_io_UnixFileSystem_list (JNIEnv *env , struct java_io_UnixFileSystem* this , struct java_io_File* par1);
+JNIEXPORT s4 JNICALL Java_java_io_UnixFileSystem_getBooleanAttributes0 (JNIEnv *env , struct java_io_UnixFileSystem* this , struct java_io_File* par1);
/*
* Class: java/io/UnixFileSystem
- * Method: createDirectory
- * Signature: (Ljava/io/File;)Z
+ * Method: getLastModifiedTime
+ * Signature: (Ljava/io/File;)J
*/
-JNIEXPORT s4 JNICALL Java_java_io_UnixFileSystem_createDirectory (JNIEnv *env , struct java_io_UnixFileSystem* this , struct java_io_File* par1);
+JNIEXPORT s8 JNICALL Java_java_io_UnixFileSystem_getLastModifiedTime (JNIEnv *env , struct java_io_UnixFileSystem* this , struct java_io_File* par1);
+/*
+ * Class: java/io/UnixFileSystem
+ * Method: getLength
+ * Signature: (Ljava/io/File;)J
+ */
+JNIEXPORT s8 JNICALL Java_java_io_UnixFileSystem_getLength (JNIEnv *env , struct java_io_UnixFileSystem* this , struct java_io_File* par1);
+/*
+ * Class: java/io/UnixFileSystem
+ * Method: initIDs
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_java_io_UnixFileSystem_initIDs (JNIEnv *env );
+/*
+ * Class: java/io/UnixFileSystem
+ * Method: list
+ * Signature: (Ljava/io/File;)[Ljava/lang/String;
+ */
+JNIEXPORT java_objectarray* JNICALL Java_java_io_UnixFileSystem_list (JNIEnv *env , struct java_io_UnixFileSystem* this , struct java_io_File* par1);
/*
* Class: java/io/UnixFileSystem
* Method: rename
* Signature: (Ljava/io/File;)Z
*/
JNIEXPORT s4 JNICALL Java_java_io_UnixFileSystem_setReadOnly (JNIEnv *env , struct java_io_UnixFileSystem* this , struct java_io_File* par1);
-/*
- * Class: java/io/UnixFileSystem
- * Method: initIDs
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_java_io_UnixFileSystem_initIDs (JNIEnv *env );
#include <string.h>
#include <assert.h>
#include <sys/time.h>
+#include <utime.h>
#include "threads/thread.h" /* schani */
#include "threads/locks.h"
*******************************************************************************/
-#define CODEMMAP
-
#include "types.h"
#ifdef USE_BOEHM
#define MCOPY(dest,src,type,num) memcpy (dest,src, sizeof(type)* (num) )
-#ifdef CODEMMAP
+#ifdef USE_CODEMMAP
#define CNEW(type,num) ((type*) mem_mmap ( sizeof(type) * (num) ))
#define CFREE(ptr,num)
#else
#include <string.h>
#include <assert.h>
#include <sys/time.h>
+#include <utime.h>
#include "threads/thread.h" /* schani */
#include "threads/locks.h"
}
+#ifdef TRACE_ARGS_NUM
void builtin_trace_args(long a0, long a1, long a2, long a3, long a4, long a5,
+#if TRACE_ARGS_NUM > 6
+ long a6, long a7,
+#endif
methodinfo *method)
{
sprintf (logtext, " ");
utf_sprint (logtext+strlen(logtext), method->descriptor);
sprintf (logtext+strlen(logtext), "(");
switch (method->paramcount) {
+#if TRACE_ARGS_NUM > 6
+ case 8:
+ sprintf(logtext+strlen(logtext), "%lx, %lx, %lx, %lx, %lx, %lx, %lx, %lx",
+ a0, a1, a2, a3, a4, a5, a6, a7);
+ break;
+ case 7:
+ sprintf(logtext+strlen(logtext), "%lx, %lx, %lx, %lx, %lx, %lx, %lx",
+ a0, a1, a2, a3, a4, a5, a6);
+ break;
+#endif
case 6:
sprintf(logtext+strlen(logtext), "%lx, %lx, %lx, %lx, %lx, %lx",
a0, a1, a2, a3, a4, a5);
dolog ();
methodindent++;
}
+#endif
void builtin_displaymethodstart(methodinfo *method)
{
methodindent++;
}
-void builtin_displaymethodstop(methodinfo *method, long l, double d)
+void builtin_displaymethodstop(methodinfo *method, long l, double d, float f)
{
methodindent--;
sprintf (logtext, " ");
sprintf (logtext+strlen(logtext), "->%ld", l);
break;
case TYPE_FLOAT:
+ sprintf (logtext+strlen(logtext), "->%g", f);
+ break;
case TYPE_DOUBLE:
sprintf (logtext+strlen(logtext), "->%g", d);
break;
s4 builtin_aastore (java_objectarray *a, s4 index, java_objectheader *o);
void asm_builtin_aastore (java_objectarray *a, s4 index, java_objectheader *o);
+#ifdef TRACE_ARGS_NUM
+#if TRACE_ARGS_NUM == 6
void builtin_trace_args(long a0, long a1, long a2, long a3, long a4, long a5, methodinfo *method);
+#else
+void builtin_trace_args(long a0, long a1, long a2, long a3, long a4, long a5, long a6, long a7, methodinfo *method);
+#endif
+#endif
void builtin_displaymethodstart(methodinfo *method);
-void builtin_displaymethodstop(methodinfo *method, long l, double d);
+void builtin_displaymethodstop(methodinfo *method, long l, double d, float f);
/* void builtin_displaymethodstop(methodinfo *method); */
void builtin_displaymethodexception(methodinfo *method);
#define skip_nbytes(len) classbuf_pos+=len;
-#define suck_u1() (*++classbuf_pos)
+inline u1 suck_u1()
+{
+ return *++classbuf_pos;
+}
+inline u2 suck_u2()
+{
+ u1 a=suck_u1(), b=suck_u1();
+ return ((u2)a<<8)+(u2)b;
+}
+inline u4 suck_u4()
+{
+ u1 a=suck_u1(), b=suck_u1(), c=suck_u1(), d=suck_u1();
+ return ((u4)a<<24)+((u4)b<<16)+((u4)c<<8)+(u4)d;
+}
#define suck_s8() (s8) suck_u8()
#define suck_s2() (s2) suck_u2()
#define suck_s4() (s4) suck_u4()
#define suck_s1() (s1) suck_u1()
-#define suck_u2() (u2) ((suck_u1()<<8)+suck_u1())
-#define suck_u4() (u4) ((((u4)suck_u1())<<24)+(((u4)suck_u1())<<16)+(((u4)suck_u1())<<8)+((u4)suck_u1()))
/* get u8 from classfile data */
-EXTRA_DIST = x.java x.output jctest.java jctest.output fptest.java GCBench.java
+EXTRA_DIST = x.java x.output jctest.java fptest.java
check_DATA = checkall
*******************************************************************************/
-#define CODEMMAP
-
#include "types.h"
#ifdef USE_BOEHM
#define MCOPY(dest,src,type,num) memcpy (dest,src, sizeof(type)* (num) )
-#ifdef CODEMMAP
+#ifdef USE_CODEMMAP
#define CNEW(type,num) ((type*) mem_mmap ( sizeof(type) * (num) ))
#define CFREE(ptr,num)
#else