[Vm-dev] New Cog VMs available

Tobias Pape Das.Linux at gmx.de
Fri Apr 17 00:10:29 UTC 2015

Updated on CI,
running at http://build.squeak.org/job/SqueakTrunk/1309/

On 17.04.2015, at 01:50, Eliot Miranda <eliot.miranda at gmail.com> wrote:

> ... at http://www.mirandabanda.org/files/Cog/VM/VM.r3311/.
> These should fix the regression introduced by the map changes in 3308.  They certainly fix the two crashes I've looked at, one an update of a squeak trunk image and the other the startup of recent Newspeak images.  Apologies for the inconvenience.
> CogVM binaries as per VMMaker.oscog-eem.1204/r3311
> Cogits:
> Fix regression in map machinery due to adding AnnotationExtension scheme.
> findMapLocationForMcpc:inMethod: must not be confused by IsDisplacementX2N
> bytes.  This is likely the cause of the recent crashes with r3308 and earlier.
> Introduce marryFrameCopiesTemps and use it to
> not copy temps in Spur context creation trampolines.
> Change initial usage counts to keep more recently jitted methods around for
> longer, and do *not* throw away PICs in freeOlderMethodsForCompaction, so that
> there's a better chance of Sista finding send and branch data for the tripping
> method.
> extendedPushBytecode /does/ need a frame.
> Don't save the header in a scratch register unless
> it is useful to do so in the Spur at:[put:] primitives.
> Fix slip in genGetNumBytesOf:into:.  And notice that
> genGetFormatOf:into:baseHeaderIntoScratch: et al can use byte access
> to get at format, as intended in the Spur header design.
> Fix unlinking dynamic super sends.
> Reduce false positives in access control violation reporting by marking the
> super send we actually use as privileged. Remove unused Newspeak bytecodes.
> Internal:
> Fix code generation bug surfaced by inline primitives.  On x86 movb N(%reg),%rl
> can only store into al, bl, cl & dl, whereas movzbl can store into any reg.  On
> ARM move byte also zero-extends.  So change definition of MoveMbrR to always
> zero-extend, use movzbl on x86 and remove all the MoveCq: 0 R: used to zero the
> bits of the target of a MoveMb:r:R:.  And now that we have
> genGetNumSlotsOf:into:, use it.
> Fix a slip in genTrinaryInlinePrimitive:, meet constraint that the target must
> be in ReceiverResultReg, and do a better job of register allocation there-in.
> Do dead code elimination for the branch following an inlined comparison (this
> is done in genBinaryInlineComparison:opFalse:destReg: copying the scheme in
> genSpecialSelectorEqualsEquals).
> Do register allocation in the right place in genUnaryInlinePrimitive:.
> Fix overflow slot access in genGetNumSlotsOf:into: et al.
> Fix several slips in inline primitive generation: Object>>at:put: needs to
> include a store check.  Some register allocation code was wrong.  Some results
> needed converting to SmallIntegers and recording results as pushed on the sim
> stack.
> Change callPrimitiveBytecode to genCallPrimitiveBytecode in the Cogit.
> remove the misnomer genConvertIntegerToSmallIntegerInScratchReg:
> Type of AbstractInstruction opcode must be unsigned now that we have
> more than 128 opcodes (XCHGRR pushed things over the top).
> Lay the groundwork for 32-bit intra-zone jumps and calls on ARM by introducing
> CallFull and JumpFull (and rewrites thereof) that are expected to span the full
> address space, leaving Call/JumpLong to span merely the 16mb code zone.  On x86
> CallFull and JumpFull simply default to Call/JumpLong.
> Replace bytecode trapIfNotInstanceOf by jumpIfNotInstanceOfOrPop.
> Rewrote the JIT logic for traps to be able to write trap trampolines calls at
> the end of the cogMethod.
> Refactor the slot store and store check machinery to take an inFrame: argument
> and hence deal with the store check in genInnerPrimitiveAtPut: on ARM.
> Fix limitation with MoveRXbrR; can only do movb from
> %al through %dl, so swap with %eax around movb.
> Fix mistake with genGetNumBytesOf:into: by refactoring
> genGetFormatOf:into:baseHeaderIntoScratch: into
> genGetBits:ofFormatByteOf:into:baseHeaderIntoScratch:
> and hence fetching and subtracting only odd bits of format.
> Correct the in-line primitive SmallInteger comparisons; CmpXR is confusing ;-)
> Fix var op var unsafe byte at:.  Result must be converted to SmallInteger.
> Correct the generated Slang for the new register allocation code by adding a
> read-before-written pass to C generation that initializes variables
> read-before-written with 0 (the C equivalent of nil).
> fix a bug where sometimes register allocation was marking ReceiverResultReg as
> dead whereas it was still alive.
> Added some abstraction over register allocation. This is now used in inline
> primitives.

More information about the Vm-dev mailing list