New Cog VMs available

24 views
Skip to first unread message

Eliot Miranda

unread,
Mar 11, 2016, 2:05:04 PM3/11/16
to Squeak Virtual Machine Development Discussion, The general-purpose Squeak developers list, Discusses Development of Pharo, newspeak...@googlegroups.com

CogVM binaries as per VMMaker.oscog-eem.1722/r3643

General:
Change vm parameter 65 to be a set of flags, not merely the boolean for
MULTIPLE_BYTECODE_SETS, and make the flags answer MULTIPLE_BYTECODE_SETS &
IMMUTABILITY.

Nuke unused named prim primitiveOriginalMillisecondClock so VM can eliminate
ioOldMSecs.

Nuke ioOldMSecs and ioLowResMSecs to simplify the tiume management and avoid
mistakes were we use different versions of clocks for different parts of the
same basic io operations.  Nuke SqueakUIFlushUseHighPercisionClock preference.

Make the leak checker operational in the non-assert (& non-debug) VM.


Cogit:
Revise the register saving convention for trampoline calls.  Instead of passing
in a boolean to indicate if all registers should be saved or not (an aproach
Ryan correctly notes is bogus), pass in a register mask of registers to be
saved.  If the trampoline call has a machine code continuation then the
argument is usually callerSavedRegMask, and on MIPS and ARM this is empty.

Use the above to move the saving of registers in the store-check into the
store-check trampoline and out of the call of the trampoline.  Further, use
genJumpImmediate: in the immediate test, which saves an instruction.

64-bit Cogit:
Fix primtive 171 (primitiveImmediateAsInteger) in the Cogit for SmallFloat.
The old code only dealt with Characters.  The new code replicates the
rotatedFloatBitsOf: scheme in Spur64BitMemoryManager.


Spur:
Resolve the conflict between 32-bit and 64-bit tag assignments.  In 32-bits we
have 1=even SmallIntegers, 2=Characters, 3=odd SmallIntegers, and in 64-bits we
had 1=SmallIntegers, 2=Characters, 3=SmallFloats.  Hence we would want
SmallFloat64's identityHash to be 3, which conflicts with 32 bits' odd
SmallIntegers.  Change is for 64-bits to use 1=SmallIntegers, 2=Characters,
4=SmallFloats.  This also means single-bit tests in the Cogit, which produces
better code, and no scratch registers to hold masked tags.

Hence roll the 64-bit Spur image format version number from 68019 to 68021.
Delegate to the object memories to determine the image format version number.

Fix the bug in markAndTraceClassOf: that causes the first class table page to
become a visible array.


Plugins:
Fix primitiveFFIIntegerAt for signed 4-byte results.  Wuth the support for
64-bit results, signed 4-byte results must be sign-extended to 64-bits.

Update primitiveFileRead for Spur.  It doesn't need the PrimErrObjectMayMove
handling since Spur has pinning.

Don't use cCode: pointer aliasing for storing/fetching float/double in FFI
primitives.

Replace with a call to mem:cp:y:
- the first one is dangerous with modern C compilers
- while the second is optimized away (no call to memcpy)

Fix a missing guard in SmartSyntaxPlugin like explained at

Fix two missing guards in VM profiling primitives: one should not use the result
of stackObjectValue: before checking for success, otherwise a null pointer
exception will occur in case of failure.

_,,,^..^,,,_
best, Eliot
Reply all
Reply to author
Forward
0 new messages