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