<div dir="ltr"><div>... at <a href="http://www.mirandabanda.org/files/Cog/VM/VM.r3692">http://www.mirandabanda.org/files/Cog/VM/VM.r3692</a></div><div><br></div><div>These include stack ARM VMs for Spur and V3.</div><div><br></div><div>CogVM binaries as per VMMaker.oscog-eem.1855/r3692</div><div><br></div><div>General:</div><div>Fix a bad bug in primitiveVoidVMStateForMethod. One might think that the heap</div><div>scan is unnecessary if the method does not have a cog method.  But it could be</div><div>the case that the code zone has recently been reclaimed and so not having a cog</div><div>method is no indication that it didn&#39;t have a cog method some time in the recent</div><div>past, and that there are indeed still contexts with machine code pcs out there.</div><div><br></div><div>Correct slip in primitiveMethodXray, the flags were not set in each caseOf:</div><div>branch (thanks to -Wunused-value).</div><div><br></div><div>Change overflow tests in precondition rather than postcondition for small</div><div>integer multiplication.  Because integer overflow is undefined behaviour, and</div><div>because we can&#39;t rely on undefined behaviour, the compiler has a license to</div><div>eliminate the post-condition as dead code (at least since iso c89 acception).</div><div>Post-condition currently works because we use -fwrapv compiler flag, but</div><div>relying on specific compiler flags is bad practice in the long term. </div><div><br></div><div>Fix regression in signed 32bit long access (introduced beginning of April).</div><div>One symptom is:</div><div>  (Alien newGC: 4)</div><div><span class="" style="white-space:pre">        </span>signedLongAt: 1 put: -16r7287E552;</div><div><span class="" style="white-space:pre">        </span>signedLongAt: 1</div><div><br></div><div>Fix positive32BitIntegerFor: for Spur64 which worked only because the constant</div><div>was generated ULL.</div><div><br></div><div>Spur:</div><div>Fix primitiveIsPinned.</div><div><br></div><div>V3:</div><div>Fix missing comparison operation in genPrimitiveIdentical on V3. This should</div><div>fix Character = problem encounterd in Cuis.</div><div><br></div><div>Debugging: Add printContextReferencesTo: &amp; printActivationsOf: and have them</div><div>print the pcs of the contexts they find.</div><div><br></div><div><br></div><div>Cogit:</div><div>Reorder annotation constants to simplify isPCMappedAnnotation:.</div><div><br></div><div>Sista Cogit:</div><div>Added a primitive to answer all the methods present in the machine code zone.</div><div><br></div><div>allMachineCodeMethods</div><div><span class="" style="white-space:pre">        </span>&lt;primitive: &#39;primitiveAllMethodsCompiledToMachineCode&#39; module:&#39;&#39;&gt;</div><div><span class="" style="white-space:pre">        </span>^#()</div><div><br></div><div>Fix regression in VMMaker.oscog-eem.1823 when merging the two map enumerators</div><div>into one that affects Sista.  The merged enumerator must extend</div><div>IsSendAnnotations with the AnnotationExtension.</div><div><br></div><div><br></div><div>Plugins:</div><div>Regenerate plugins using the recently revised type inferrence code.</div><div><br></div><div><br></div><div>Slang:</div><div>Extend type inference capabilities from the AST.  Unify type inference used to</div><div>#inferReturnTypeFromReturnsIn: with that based on AST.  Now that type inference</div><div>is a bit more thorough, release type restrictions in #isFunctional in order to</div><div>obtain much more aggressive inlining.  With those, a gain of 10% is possible</div><div>on the LargeIntegersPlugin dominated bench:</div><div><br></div><div>Use a type inference that better fits C rules (C99 standard section 6.3):</div><div>- in (float op int), int is promoted to double not float</div><div>- in (unsigned short op short) both operands are promoted to #int due to int</div><div>  promotion rules.</div><div><br></div><div>Use minimum generality for generated integer constants:</div><div>- use int if variable fits in int</div><div>- else unsigned int</div><div>- else long long (long would be enough for 64bits versions, but long long works</div><div>  for both 32 and 64)</div><div>- else unsigned long long</div><div>This is to avoid spurious unsigned promotion due to improved type inference.</div><div><br></div><div><br></div><div>Mac OS X: Fix argument processing, so that e.g. </div><div><span class="" style="white-space:pre">        </span>myvm -breaksel aSelector my.image</div><div>works (but -headless still fails).</div><div><br></div><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>