After much hacking I have a new alpha of VMMaker for 64 bit clean code.
I found a quite long list of changes neccessary, some of which might be
controversial. Before I release this widely I'd like to see if we can all agree
with the changes.
I've cut down all the 'normal' image changes to a bare minimum for release into
the 3.8 update stream. See attached VMM38-64bit-imageUpdates/1/cs. I have _not_
done anything with any of the image code that is not directly related to making
VMMaker work. SystemTracer etc were left alone. I also made a 'remove all
leftover VMM code' file to get the few remaining vmm related methods out of the
main image. See RemoveLeftoverVMMbits-38b4/1/cs.
- needs several int->sqInt changes
- adds several prims using named-in-no-module approach
- removes a couple of instvars and classvars
- alters prim table to correct a couple of missed obsoletes
Clean out new gc & instrumentation code to changeset. SystemDictionary stuff to
new fileout for update stream (VMM38-gc-instrument-image).
LowSpaceAndInterruptHandler-2-dtl needs to go into update stream. VMMLowSpace-
dtl-tpr-2 is corrected VM changes, included in VMM.
Lowspace problem in initializeMemoryFirstFree: which steals memory just when we
are short of it. I recommend setting the lowspacethreshold to 3-4Mb instead of
200kb. We could do some tweaking in the VM code to help but when you're down to
200kb things are going to get ugly no matter what. Virtual memory might stay
execution a while but even that will run out sometime.
add fix for FloatArrat>primitiveDivFloatArray quick-0 test.
fix primVMParameters to merge GC changes and wordSize
revert #isIntegerValue: to use EOR trick - works for 32 & 64 bit machine, I
think. Explicit range check will not work for actual 64bits.
fix storeInteger:ofObject:withValue: to skip root oop check and many
storePointerUnchecked where SmallInt is used, save checking for young. (several
make pop:thenPushIntegerOf:, check sends of pop: and pushInteger:
add an instantiate but don't fill, used for small classes like points
and the one that will annoy Ian, macros for longAtput etc in sqMemoryAccess.h
This proved neccessary after John & I discovered a noticable drop in benchmark
results when using the inlined accessor functions. Examing the compiled code
for both ARM and PPC showed that the inlining was being done (quite neatly I
thought for ARM) but not quite neatly enough in some crucial cases. It was
causing a 20% or so overall hit and 40% for tinyBenchmarks, a bit less for OSX.
Still to do:
there are lots of places where potential signed/unsigned/oop comparisons are
done and might cause problems. 'oop < endOfMemory' is pretty common in the
Tim Rowledge <[hidden email]> wrote:
> After much hacking I have a new alpha of VMMaker for 64 bit clean code.
> I found a quite long list of changes neccessary, some of which might be
> controversial. Before I release this widely I'd like to see if we can all agree
> with the changes.
> Image fileins:
> I've cut down all the 'normal' image changes to a bare minimum for release into
> the 3.8 update stream. See attached VMM38-64bit-imageUpdates/1/cs. I have _not_
Ehmmm, is the idea to post this as a post-3.8-release update? Because
3.8 went final today. :)
Since we have said that we plan to maintain post-release fixes for 3.8 I
assume this can be doable, or have I missed something?
I don't see any problem in making these be post-release updates aside from the
usual one of occasionally having to remind people to update. Given the time
constraints we all suffer from we just have to live with it and try not to make
it 'suffer with it'.
There is a perfectly ok VMMaker release for general use (3.8b3) until we
finally release the 64bit clean stuff, it just doesn't have the very latest
lowspace signalling and weak array GCing fixes. My opinion is that the VMM3.8-
64b stuff is pretty solid even in its unfinished state.