[kaffe] CVS kaffe (stack): Improve the allocation behavior of the jitter and small fixes for
Kaffe CVS
Kaffe Mailing List <kaffe@kaffe.org>
Sun Sep 21 11:24:02 2003
PatchSet 4051
Date: 2003/09/21 18:18:12
Author: stack
Branch: HEAD
Tag: (none)
Log:
Improve the allocation behavior of the jitter and small fixes for
linking in the tritonus native libs.
Members:
ChangeLog:1.1647->1.1648
configure:1.256->1.257
configure.in:1.223->1.224
kaffe/kaffevm/gc.h:1.18->1.19
kaffe/kaffevm/gcFuncs.c:1.47->1.48
kaffe/kaffevm/jit3/constpool.c:1.6->1.7
kaffe/kaffevm/jit3/icode.c:1.32->1.33
kaffe/kaffevm/jit3/labels.c:1.11->1.12
kaffe/kaffevm/jit3/machine.c:1.41->1.42
kaffe/kaffevm/jit3/seq.c:1.6->1.7
kaffe/kaffevm/jit3/seq.h:1.7->1.8
kaffe/kaffevm/jit3/slots.c:1.9->1.10
kaffe/xprof/callGraph.c:1.3->1.4
Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.1647 kaffe/ChangeLog:1.1648
--- kaffe/ChangeLog:1.1647 Sun Sep 21 17:26:32 2003
+++ kaffe/ChangeLog Sun Sep 21 18:18:12 2003
@@ -1,3 +1,29 @@
+2003-09-19 Timothy S. Stack <stack@cs.utah.edu>
+
+ * configure.in:
+ Add the tritonus alsa and esd libraries to the list that will be
+ linked into the executable.
+
+ * kaffe/kaffevm/gc.h,
+ kaffe/kaffevm/gcFuncs.c:
+ Add separate allocation types for temporary jitter data.
+
+ * kaffe/kaffevm/jit3/constpool.c,
+ kaffe/kaffevm/jit3/icode.c,
+ kaffe/kaffevm/jit3/labels.c,
+ kaffe/kaffevm/jit3/machine.c,
+ kaffe/kaffevm/jit3/slots.c:
+ Use separate allocation types for temporary jitter data.
+
+ * kaffe/kaffevm/jit3/seq.h,
+ kaffe/kaffevm/jit3/seq.c:
+ Change allocation behavior to free large pools of memory after
+ jitting is done.
+
+ * kaffe/xprof/callGraph.c:
+ Always write out a callgraph record, even if its out of bounds,
+ otherwise, a record might not make it into gmon file.
+
2003-09-19 Dalibor Topic <robilad@kaffe.org>
* libraries/javalib/javax/sound/midi/MetaMessage.java,
Index: kaffe/configure
diff -u kaffe/configure:1.256 kaffe/configure:1.257
--- kaffe/configure:1.256 Mon Sep 1 17:16:16 2003
+++ kaffe/configure Sun Sep 21 18:18:13 2003
@@ -41562,6 +41562,7 @@
*)
if test x"$have_alsa" = x"yes"; then
ALSA_DIR=alsa
+ ALSA_LIB="\$(top_builddir)/libraries/extensions/sound/alsa/libtritonusalsa.la"
fi
;;
esac
@@ -41580,6 +41581,7 @@
*)
if test x"$have_esd" = x"yes" && test x"$have_esd_h" = x"yes"; then
ESD_DIR=esd
+ ESD_LIB="\$(top_builddir)/libraries/extensions/sound/esd/libtritonusesd.la"
fi
;;
esac
@@ -41594,7 +41596,9 @@
case "$enable_sound" in
no)
ALSA_DIR=""
+ ALSA_LIB=""
ESD_DIR=""
+ ESD_LIB=""
;;
*)
;;
@@ -41959,6 +41963,8 @@
\$(top_builddir)/libraries/clib/io/libio.la \
\$(top_builddir)/libraries/clib/zip/libzip.la \
$MATH_LIB \
+$ALSA_LIB \
+$ESD_LIB \
\$(top_builddir)/libraries/clib/management/libmanagement.la \
\$(top_builddir)/libraries/clib/security/libsecurity.la \
$AWT_LIB \
Index: kaffe/configure.in
diff -u kaffe/configure.in:1.223 kaffe/configure.in:1.224
--- kaffe/configure.in:1.223 Mon Sep 1 17:16:20 2003
+++ kaffe/configure.in Sun Sep 21 18:18:15 2003
@@ -1238,6 +1238,7 @@
*)
if test x"$have_alsa" = x"yes"; then
ALSA_DIR=alsa
+ ALSA_LIB="\$(top_builddir)/libraries/extensions/sound/alsa/libtritonusalsa.la"
fi
;;
esac
@@ -1253,6 +1254,7 @@
*)
if test x"$have_esd" = x"yes" && test x"$have_esd_h" = x"yes"; then
ESD_DIR=esd
+ ESD_LIB="\$(top_builddir)/libraries/extensions/sound/esd/libtritonusesd.la"
fi
;;
esac
@@ -1265,7 +1267,9 @@
case "$enable_sound" in
no)
ALSA_DIR=""
+ ALSA_LIB=""
ESD_DIR=""
+ ESD_LIB=""
;;
*)
;;
@@ -1424,6 +1428,8 @@
\$(top_builddir)/libraries/clib/io/libio.la \
\$(top_builddir)/libraries/clib/zip/libzip.la \
$MATH_LIB \
+$ALSA_LIB \
+$ESD_LIB \
\$(top_builddir)/libraries/clib/management/libmanagement.la \
\$(top_builddir)/libraries/clib/security/libsecurity.la \
$AWT_LIB \
Index: kaffe/kaffe/kaffevm/gc.h
diff -u kaffe/kaffe/kaffevm/gc.h:1.18 kaffe/kaffe/kaffevm/gc.h:1.19
--- kaffe/kaffe/kaffevm/gc.h:1.18 Sat Jul 26 16:50:49 2003
+++ kaffe/kaffe/kaffevm/gc.h Sun Sep 21 18:18:18 2003
@@ -57,7 +57,14 @@
#define GC_ALLOC_JITTEMP 21
#define GC_ALLOC_JAVALOADER 22
#define GC_ALLOC_JAR 23
-#define GC_ALLOC_MAX_INDEX 24
+#define GC_ALLOC_JIT_SEQ 24
+#define GC_ALLOC_JIT_CONST 25
+#define GC_ALLOC_JIT_ARGS 26
+#define GC_ALLOC_JIT_FAKE_CALL 27
+#define GC_ALLOC_JIT_SLOTS 28
+#define GC_ALLOC_JIT_CODEBLOCK 29
+#define GC_ALLOC_JIT_LABELS 30
+#define GC_ALLOC_MAX_INDEX 31
/*
* Define a COM-like GC interface.
Index: kaffe/kaffe/kaffevm/gcFuncs.c
diff -u kaffe/kaffe/kaffevm/gcFuncs.c:1.47 kaffe/kaffe/kaffevm/gcFuncs.c:1.48
--- kaffe/kaffe/kaffevm/gcFuncs.c:1.47 Sun Aug 31 22:09:01 2003
+++ kaffe/kaffe/kaffevm/gcFuncs.c Sun Sep 21 18:18:18 2003
@@ -638,6 +638,13 @@
GC_registerFixedTypeByIndex(gc, GC_ALLOC_REF, "gc-refs");
GC_registerFixedTypeByIndex(gc, GC_ALLOC_JITTEMP, "jit-temp-data");
GC_registerFixedTypeByIndex(gc, GC_ALLOC_JAR, "jar");
+ GC_registerFixedTypeByIndex(gc, GC_ALLOC_JIT_SEQ, "jit-seq");
+ GC_registerFixedTypeByIndex(gc, GC_ALLOC_JIT_CONST, "jit-const");
+ GC_registerFixedTypeByIndex(gc, GC_ALLOC_JIT_ARGS, "jit-args");
+ GC_registerFixedTypeByIndex(gc, GC_ALLOC_JIT_FAKE_CALL, "jit-fake-call");
+ GC_registerFixedTypeByIndex(gc, GC_ALLOC_JIT_SLOTS, "jit-slots");
+ GC_registerFixedTypeByIndex(gc, GC_ALLOC_JIT_CODEBLOCK, "jit-codeblock");
+ GC_registerFixedTypeByIndex(gc, GC_ALLOC_JIT_LABELS, "jit-labels");
DBG(INIT, dprintf("initCollector() done\n"); )
return (gc);
Index: kaffe/kaffe/kaffevm/jit3/constpool.c
diff -u kaffe/kaffe/kaffevm/jit3/constpool.c:1.6 kaffe/kaffe/kaffevm/jit3/constpool.c:1.7
--- kaffe/kaffe/kaffevm/jit3/constpool.c:1.6 Wed Sep 17 21:14:08 2003
+++ kaffe/kaffe/kaffevm/jit3/constpool.c Sun Sep 21 18:18:19 2003
@@ -79,7 +79,7 @@
int i;
/* Allocate chunk of constpool elements */
- cpc = gc_malloc(sizeof(constpoolchunk), GC_ALLOC_JITTEMP);
+ cpc = gc_malloc(sizeof(constpoolchunk), GC_ALLOC_JIT_CONST);
/* XXX Ack! */
assert(cpc != 0);
Index: kaffe/kaffe/kaffevm/jit3/icode.c
diff -u kaffe/kaffe/kaffevm/jit3/icode.c:1.32 kaffe/kaffe/kaffevm/jit3/icode.c:1.33
--- kaffe/kaffe/kaffevm/jit3/icode.c:1.32 Sun Aug 31 22:09:04 2003
+++ kaffe/kaffe/kaffevm/jit3/icode.c Sun Sep 21 18:18:19 2003
@@ -4413,7 +4413,7 @@
args = gc_realloc(args,
sizeof(struct pusharg_info) * sz_args,
- GC_ALLOC_JITTEMP);
+ GC_ALLOC_JIT_ARGS);
if( !args )
{
/* XXX We should be a little more graceful */
Index: kaffe/kaffe/kaffevm/jit3/labels.c
diff -u kaffe/kaffe/kaffevm/jit3/labels.c:1.11 kaffe/kaffe/kaffevm/jit3/labels.c:1.12
--- kaffe/kaffe/kaffevm/jit3/labels.c:1.11 Wed Sep 17 21:14:08 2003
+++ kaffe/kaffe/kaffevm/jit3/labels.c Sun Sep 21 18:18:19 2003
@@ -63,6 +63,9 @@
#endif
void
+objectStatsPrint(void);
+
+void
resetLabels(void)
{
currLabel = firstLabel;
@@ -242,7 +245,7 @@
labelchunk *lc;
/* Allocate chunk of label elements */
- lc = gc_malloc(sizeof(labelchunk), GC_ALLOC_JITTEMP);
+ lc = gc_malloc(sizeof(labelchunk), GC_ALLOC_JIT_LABELS);
assert(lc != NULL);
lc->next = labelchunks;
Index: kaffe/kaffe/kaffevm/jit3/machine.c
diff -u kaffe/kaffe/kaffevm/jit3/machine.c:1.41 kaffe/kaffe/kaffevm/jit3/machine.c:1.42
--- kaffe/kaffe/kaffevm/jit3/machine.c:1.41 Tue Sep 16 19:23:38 2003
+++ kaffe/kaffe/kaffevm/jit3/machine.c Sun Sep 21 18:18:19 2003
@@ -724,7 +724,8 @@
/* Before generating code, try to guess how much space we'll need. */
codeblock_size = ALLOCCODEBLOCKSZ;
- codeblock = gc_malloc(codeblock_size + CODEBLOCKREDZONE, GC_ALLOC_JITTEMP);
+ codeblock = gc_malloc(codeblock_size + CODEBLOCKREDZONE,
+ GC_ALLOC_JIT_CODEBLOCK);
if (codeblock == 0) {
postOutOfMemory(einfo);
return (false);
@@ -761,7 +762,7 @@
new_codeblock = gc_realloc(codeblock,
codeblock_size +
CODEBLOCKREDZONE,
- GC_ALLOC_JITTEMP);
+ GC_ALLOC_JIT_CODEBLOCK);
if (new_codeblock == NULL) {
gc_free(codeblock);
codeblock = NULL;
@@ -978,7 +979,7 @@
#endif
c++; /* Add null slot on the end */
- mem = gc_malloc(c * sizeof(SlotData*), GC_ALLOC_JITCODE);
+ mem = gc_malloc(c * sizeof(SlotData*), GC_ALLOC_JIT_SLOTS);
i = maxLocal + maxStack + tmpslot;
c = 0;
@@ -1121,7 +1122,7 @@
}
/* Allocate an array for the slot pointers and copy them in */
- slots = gc_malloc((1+maxLocal) * sizeof(SlotInfo*), GC_ALLOC_JITCODE);
+ slots = gc_malloc((1+maxLocal) * sizeof(SlotInfo*), GC_ALLOC_JIT_SLOTS);
for (j = 0; j < maxLocal; j++) {
slots[j] = &localinfo[j];
}
@@ -1212,7 +1213,7 @@
arraydims = array;
}
else {
- arraydims = checkPtr(gc_calloc(dims+1, sizeof(int), GC_ALLOC_JITCODE));
+ arraydims = checkPtr(gc_calloc(dims+1, sizeof(int), GC_ALLOC_JITTEMP));
}
/* Extract the dimensions into an array */
@@ -1326,7 +1327,7 @@
{
fc = GC_malloc(main_collector,
sizeof(fakeCall),
- GC_ALLOC_JITCODE);
+ GC_ALLOC_JIT_FAKE_CALL);
}
#if defined(HAVE_branch_and_link)
fc->parent = findFakeCall(func);
Index: kaffe/kaffe/kaffevm/jit3/seq.c
diff -u kaffe/kaffe/kaffevm/jit3/seq.c:1.6 kaffe/kaffe/kaffevm/jit3/seq.c:1.7
--- kaffe/kaffe/kaffevm/jit3/seq.c:1.6 Mon May 12 21:13:30 2003
+++ kaffe/kaffe/kaffevm/jit3/seq.c Sun Sep 21 18:18:19 2003
@@ -15,6 +15,7 @@
#include "seq.h"
#include "gc.h"
+static sequencechunk* sequencechunks;
sequence* firstSeq;
sequence* lastSeq;
sequence* currSeq;
@@ -27,6 +28,18 @@
initSeq(void)
{
currSeq = firstSeq;
+ while( (sequencechunks != NULL) && (sequencechunks->next != NULL) )
+ {
+ sequencechunk *sc = sequencechunks;
+
+ sequencechunks = sc->next;
+ gc_free(sc);
+ }
+ if( sequencechunks != NULL )
+ {
+ lastSeq = &sequencechunks->data[ALLOCSEQNR - 1];
+ lastSeq->next = NULL;
+ }
}
/**
@@ -39,11 +52,18 @@
ret = currSeq;
if (ret == 0) {
+ sequencechunk *sc;
+
int i;
/* Allocate chunk of sequence elements */
- ret = gc_malloc(ALLOCSEQNR * sizeof(sequence),
- GC_ALLOC_JITTEMP);
+ sc = gc_malloc(sizeof(sequencechunk), GC_ALLOC_JIT_SEQ);
+ assert(sc != NULL);
+ sc->next = sequencechunks;
+ sequencechunks = sc;
+
+ ret = &sc->data[0];
+
/* Attach to current chain */
if (lastSeq == 0) {
firstSeq = ret;
@@ -51,13 +71,12 @@
else {
lastSeq->next = ret;
}
- lastSeq = &ret[ALLOCSEQNR-1];
+ lastSeq = &sc->data[ALLOCSEQNR-1];
/* Link elements into list */
for (i = 0; i < ALLOCSEQNR-1; i++) {
- ret[i].next = &ret[i+1];
+ sc->data[i].next = &sc->data[i+1];
}
- ret[ALLOCSEQNR-1].next = 0;
}
currSeq = ret->next;
ret->lastuse = 0;
Index: kaffe/kaffe/kaffevm/jit3/seq.h
diff -u kaffe/kaffe/kaffevm/jit3/seq.h:1.7 kaffe/kaffe/kaffevm/jit3/seq.h:1.8
--- kaffe/kaffe/kaffevm/jit3/seq.h:1.7 Mon May 12 21:13:30 2003
+++ kaffe/kaffe/kaffevm/jit3/seq.h Sun Sep 21 18:18:19 2003
@@ -68,6 +68,11 @@
#define ALLOCSEQNR 1024
+typedef struct _sequencechunk {
+ struct _sequencechunk *next;
+ sequence data[ALLOCSEQNR];
+} sequencechunk;
+
#define seq(s) ((s)->insn)
/**
Index: kaffe/kaffe/kaffevm/jit3/slots.c
diff -u kaffe/kaffe/kaffevm/jit3/slots.c:1.9 kaffe/kaffe/kaffevm/jit3/slots.c:1.10
--- kaffe/kaffe/kaffevm/jit3/slots.c:1.9 Mon May 12 21:13:30 2003
+++ kaffe/kaffe/kaffevm/jit3/slots.c Sun Sep 21 18:18:19 2003
@@ -81,10 +81,10 @@
if (nrslots > lastnrslots) {
basicslots = gc_realloc(basicslots,
nrslots * sizeof(SlotInfo),
- GC_ALLOC_JITTEMP);
+ GC_ALLOC_JIT_SLOTS);
basicdatas = gc_realloc(basicdatas,
nrslots * sizeof(SlotData),
- GC_ALLOC_JITTEMP);
+ GC_ALLOC_JIT_SLOTS);
lastnrslots = nrslots;
}
/* Set 'maxslot' to the maximum slot usable (excluding returns) */
Index: kaffe/kaffe/xprof/callGraph.c
diff -u kaffe/kaffe/xprof/callGraph.c:1.3 kaffe/kaffe/xprof/callGraph.c:1.4
--- kaffe/kaffe/xprof/callGraph.c:1.3 Tue Mar 11 08:00:19 2003
+++ kaffe/kaffe/xprof/callGraph.c Sun Sep 21 18:18:19 2003
@@ -2,7 +2,7 @@
* callGraph.c
* Routines for tracking the call graph of jitted code
*
- * Copyright (c) 2000, 2001 University of Utah and the Flux Group.
+ * Copyright (c) 2000, 2001, 2003 University of Utah and the Flux Group.
* All rights reserved.
*
* This file is licensed under the terms of the GNU Public License.
@@ -175,18 +175,22 @@
{
#if defined(KAFFE_VMDEBUG)
/* FIXME: add debug code like Janos VM. */
+ dprintf("Out of bounds call arc "
+ "%p -> %p : %d\n"
+ "low: %p high: %p\n",
+ ca->ca_from,
+ ca->ca_to,
+ ca->ca_count,
+ gf->gf_low,
+ gf->gf_high);
#endif
}
- else
- {
- retval = writeGmonRecord(
- gf,
- GRA_Type, GMON_TAG_CG_ARC,
- GRA_FromPC, ca->ca_from,
- GRA_SelfPC, ca->ca_to,
- GRA_Count, ca->ca_count,
- GRA_DONE);
- }
+ retval = writeGmonRecord(gf,
+ GRA_Type, GMON_TAG_CG_ARC,
+ GRA_FromPC, ca->ca_from,
+ GRA_SelfPC, ca->ca_to,
+ GRA_Count, ca->ca_count,
+ GRA_DONE);
}
}