<div dir="ltr">Hi Levente,<div><br></div><div>    I&#39;m optimistic that these VMs will fix the stability problems you&#39;ve been having with VMs later than VM.r3397.  I had destabilised Slang in getting the 64-bit VM to generate and finally understood what I&#39;d done late last year.  Slang is now much more stable and so let me ask you to test and see if the instabilities you&#39;ve experienced are addressed or not.  As they say, I&#39;m all ears.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Feb 15, 2016 at 11:39 AM, Eliot Miranda <span dir="ltr">&lt;<a href="mailto:eliot.miranda@gmail.com" target="_blank">eliot.miranda@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Hi All,</div><div><br></div><div>    first of all, apologies for the long wait for new VMs.  I know there are bugs that these VMs address and that it&#39;s been 5 months since VMs were last made is something I regret.  The wait was due to my developing the 64-bit Spur Cog JIT VM which required surgery not just to the Cogit but also to Slang.  I beg your forgiveness.</div><div><br></div><div>   Secondly, the Mac VMs are much changed, using John McIntosh&#39;s Cocoa support libraries.  The old Carbon UI VMs are history.  That means that Cog supports building on contemporary Mac OS releases.  These VMs were built on 10.9; I like the 3D look much more than the 10.10 one ;-).  The VMs are also signed, so installing them should be easier.</div><div><br></div><div>  Thirdly, these VMs include 64-bit JIT support.  There is an updated squeak trunk image at <a href="http://www.mirandabanda.org/files/Cog/SpurImages" target="_blank">http://www.mirandabanda.org/files/Cog/SpurImages</a> for you to try.  As yet the 64-bit Vms do not include an FFI plugin.  I hope to rectify this soon.</div><div><br></div><div>   Finally I have included Pharo Mac VMs, not to displace the official Pharo VMs, but to test my build process.  I hope that in very few months the svn repository will be moed to githup and that Esteban and I will build official VMs from the same repository.</div><div><br></div><div><br></div><div><br></div><div>The VMs are here: <a href="http://www.mirandabanda.org/files/Cog/VM/VM.r3602" target="_blank">http://www.mirandabanda.org/files/Cog/VM/VM.r3602</a><br></div><div><br></div><div>CogVM binaries as per VMMaker.oscog-eem.1679/r3602</div><div><br></div><div>Include 64-bit Spur VMs for Mac OS X x64 and Linux x64. N.B. As yet these VMs</div><div>lack FFI support.</div><div><br></div><div>Move all Mac OS X VMs to the Cocoa libraries.  Minimum supported version should</div><div>be 10.6.x.  The Mac OS X VMs are signed and so should install properly without</div><div>having to disable the launch security checks.</div><div><br></div><div><br></div><div>Bug Fixes and Improvements:</div><div><br></div><div>General:</div><div>Add vmParameter 20 to answer the utc microseconds at startup.</div><div><br></div><div><br></div><div>CoInterpreter:</div><div>Remove the atCache from the CoInterpreter.  It&#39;s of little benefit given the</div><div>Cogit.</div><div><br></div><div>ceSend: et al need to add looked up methods to the method cache, otherwise</div><div>methods only found through machine code sends will not be jitted.</div><div><br></div><div>Fix slip in maybeSelectorOfMethod: which will improve back traces</div><div>including methods containing pragmas (including primitives).</div><div><br></div><div>Modify secret primtiive 161, primitiveSetIdentityHash so that with 0 args it</div><div>answers whether an object has an identity hash.  This is vacuously true for V3,</div><div>but is meaningful in Spur.</div><div><br></div><div><br></div><div>Cogit:</div><div>Fix /horrible/ bug with primitive error codes and fixups.  The adjustment of the</div><div>initialPC to skip the primitive and error code, if any, was done after</div><div>generating fixups for backward branches, and hence these branches were bogus.</div><div>Object&gt;&gt;shallowCopy in Spur is subject to this, but amazingly enough it has not</div><div>surfaced before now.  Fix this by adjusting the initialPC before scanMethod</div><div>scans for fixups.</div><div><br></div><div>Fix bug in Spur machine-code at:put: on 32-bit bits objects; method failed to</div><div>fail for negative values.</div><div><br></div><div>Fill unused portions of methods with the stop instruction, not nop.</div><div><br></div><div>Explicitly initialize the code zone with stops. Explicitly clear the</div><div>reclaimed portion of the method zone after a compaction.</div><div><br></div><div>Include the reclaimed portion of the method zone in the I-cache flush</div><div>after a compaction: no point in leaving it in cache since it isn&#39;t a</div><div>valid call/jump target.</div><div><br></div><div><br></div><div>Spur:</div><div>Maintain the survivor count on scavenge.</div><div><br></div><div>Fix start up of images containing &gt;= 16 segments.  The old code assumed</div><div>numSegments &lt; 16 and failed to grow the segment records, resulting in objects</div><div>in segments greater than 15 to not be swizzled, and a resulting crash.</div><div><br></div><div>Spur Cogit: Support CompiledMethod indexing in genPrimitiveAt[Put].  Hence fix</div><div>the regression in at:[put:] whereby in Spur one could access the literals part</div><div>of a method as bytes.</div><div>Add a machine-code primitive for objectAt: to provide fast literal and header</div><div>access on Spur.</div><div><br></div><div>Add 16-bit indexability to Spur.  Generate slimmer code for</div><div>positive32BitValueOf: on 64-bit Spur.</div><div><br></div><div>Fix a bug with out-of-place two-way become, which got the hash copy the wrong</div><div>way round.  By default, the hash stays with the reference in two-way become.</div><div><br></div><div>Fix what appears to be a compiler bug with in-place two-way-become by treating</div><div>the headers to be swapped so that remembered flags are swapped and hash bits</div><div>are swapped if required. This fixes a bug with in-place two-way become of</div><div>objects that are the same size on the heap.  One object&#39;s contents would not</div><div>be updated correctly.</div><div><br></div><div>Implement ephemeron queue primitive.  Add an image flag that controls the</div><div>finalization support (StackInterpreter instVar newFinalization).  If unset,</div><div>finalization is as currently expected; WeakArray finalizes all WeakArrays in</div><div>its registries on each finalization (which does not scale!).  If set, then both</div><div>fired ephemerons and bereaved weak arrays are added to the finalization queue</div><div>and the finalization semaphore is signalled.  In this regime the image is</div><div>expected to send mourn to each element of the queue, and weak arrays will send</div><div>themselves finalize in mourn, side-stepping the finalizeValues steps and</div><div>rendering WeakArray&#39;s FinalizationDependents and WeakRegistry obsolete.</div><div>The bit is set via</div><div>    Smalltalk vmParameterAt: 48</div><div>              put: ((Smalltalk vmParameterAt: 48) bitOr: 64).</div><div><br></div><div><br></div><div>Slang:</div><div>Fix bad regression in type inference from VMMaker.oscog-eem.1587.</div><div>returnTypeForSend:in: can only default return types to sqInt for unknown</div><div>selectors.  The rewrite in VMMaker.oscog-eem.1587 inadvertently defaulted the</div><div>return type of known methods whose return type was yet to be determined to</div><div>sqInt.  The fix is to only default to sqInt if there is no known method for the</div><div>given selector.  This fixes, for instance, the weird flipping of the type of</div><div>32-bit Spur&#39;s headerWhileForwardingOf:,which should always be #sqLong.</div><div><br></div><div>Fix bad bug in type inferrence.  Avoid computing variable and return types</div><div>prematurely i.e. don&#39;t derive types from as-yet-untyped methods.</div><div><br></div><div>Fix baaaad bug in node:typeCompatibleWith:inliningInto:in: which was looking</div><div>up the type of the formal parameter in inlining in the target method, not the</div><div>method being inlined!</div><div><br></div><div><br></div><div>Newspeak:</div><div>Fix bug in MNU for cogged dynamic super sends - should start looking for</div><div>#doesNotUnderstand: in the superclass not the receiver class. Unify MNU</div><div>lookup between absent and present receiver sends as a result.</div><div><br></div><div>Further fix outer send MNU by not confusing lkupClass and lkupClassTag.</div><div>Push setting lkupClassTag down to clarify it is for new cache entries.</div><div><br></div><div><br></div><div>Plugins:</div><div>Fix the FilePlugin&#39;s unnecessary fullGC on Spur.</div><div>Include the file sync prim in the FilePrims plugin.</div><div><br></div><div>ThreadedFFIPlugin:</div><div>- ExternalAddress now are taken correctly (nor as ByteArray or Alien, because</div><div>  they are different beasts).  </div><div>- allow pushing of pointers to any type (into a ByteArray, an ExternalAddress</div><div>  or an Alien), to allow passing parameters style int*, float*, etc.</div><div>- allow reading in memory to allow read chunks of ByteArray</div><div><br></div><div>Added ThreadedFFIPlugin&gt;&gt;#primitiveLoadSymbolFromModule (copy and adapt from</div><div>IA32ABIPlugin).</div><div><br></div><div>Fix coercion problems on FFI plugin (IA32 &amp; ARM)</div><div>- character were not correctly mapped back</div><div>- floats were not being well checked</div><div>- external addressed needs to be treated as aliens for the purpose of coercing</div><div>  them as pointers (bad regression by Eliot)</div><div><br></div><div>Alien Plugins:</div><div>Fix missing primitive failure for Alien typeAt: 0 [put:].</div><div>Add word accessors to Alien.</div><div><br></div><div><div dir="ltr"><div><span style="font-size:small;border-collapse:separate"><div>_,,,^..^,,,_<br></div><div>best, Eliot</div></span></div></div></div>
</div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div><span style="font-size:small;border-collapse:separate"><div>_,,,^..^,,,_<br></div><div>best, Eliot</div></span></div></div></div>
</div>