CogVM binaries as per VMMaker.oscog-eem.1427/r3410
General:
Implement a machine code perform:[with:]* primitive. Eliminate the duplication
of SimpleStackBasedCogit/StackToRegisterMappingCogit>>compileOpenPIC:numArgs:
now that we have dead code elimination enabled.
Change the type of the event buffer from int[8] to long[8], along with the
matching event typedefs in sq.h (fixes 64-bit SPur issues). Add a fence before
reading checkSignalRequests and useTideA in doSignalExternalSemaphores.
ARM
Include the Alien support in the Squeak ARM VMs now that it works to a fair
extent in Newspeak.
ARM Cogits:
Use __aeabit_idivmod to implement machine code div/mod primitives on ARM.
64-bit Spur
Fix at least one set of 64-bit issues caused by Slang. In particular the
integerObjectOf: code resulted in
(objectMemory integerObjectOf: MillisecondClockMask)
evaluating to the -1 object, instead of the 16r1FFFFFFF object, which was the
cause of the initially nresponsive 64-bit image on the real VM.
Newspeak:
Compile Newspeak self and super sends as clean sends as well.
Slower in monomorphic case but net win for the larger benchmarks, presumably
because it avoids I-cache flushes in the polymorphic case.
Also means implementing polymorphic caches for clean sends will benefit all
non-ordinary sends.
DeltaBlue +8.2%
Splay +7.6%
ParserCombinators +4.7%
Richards +0.5%
SlotRead (replaced with self send) -17.6%
Spill ReceiverResultReg before runtime call to fix pushEnclosingObject on ARM.
(ReceiverResultReg is edx/caller-saved on IA32 but r7/callee-saved on ARM.)
Fix some primitiveFail[For:] calls in potential mirror primitives that did not
return after falure, and could hence continue to do damage after detecting a
failure condition.
Fix the 64-bit Newspeak builds' plugins.ext
Integrate Ryan's code for ARM call-out and callback support in the Alien plugin.
Implement the relevant implicitReceiveCacheAt: for the ARM Cogits.
ThreadedFFIPlugin:
Allow ffiCreateIntegralResultOop:ofAtomicType:in: to be inlined. Reduce the
number of tests leading to the common case of an integral return in
ffiCalloutTo:SpecOnStack:in: etc.
Refactor the remapOop:in: idiom up into InterpreterPlugin and use it in the
ThreadedFFIPlugin. Hence avoid unnecessary push/popRemappableOop calls.
--