Branch: refs/heads/Cog Home: https://github.com/OpenSmalltalk/opensmalltalk-vm Commit: f6d5541e6b37d1a82b1364f6d577031d6ad2a2ac https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/f6d5541e6b37d1a82b1364f6d577031d6ad2a2ac Author: Eliot Miranda <[hidden email]> Date: 2019-09-10 (Tue, 10 Sep 2019) Changed paths: M nsspur64src/vm/cogit.h M nsspur64src/vm/cogitX64SysV.c M nsspur64src/vm/cogitX64WIN64.c M nsspur64src/vm/cogmethod.h M nsspur64src/vm/cointerp.c M nsspur64src/vm/cointerp.h M nsspur64src/vm/gcc3x-cointerp.c M nsspursrc/vm/cogit.h M nsspursrc/vm/cogitARMv5.c M nsspursrc/vm/cogitIA32.c M nsspursrc/vm/cogitMIPSEL.c M nsspursrc/vm/cogmethod.h M nsspursrc/vm/cointerp.c M nsspursrc/vm/cointerp.h M nsspursrc/vm/gcc3x-cointerp.c M nsspurstack64src/vm/gcc3x-interp.c M nsspurstack64src/vm/interp.c M nsspurstacksrc/vm/gcc3x-interp.c M nsspurstacksrc/vm/interp.c M spur64src/vm/cogit.h M spur64src/vm/cogitX64SysV.c M spur64src/vm/cogitX64WIN64.c M spur64src/vm/cogmethod.h M spur64src/vm/cointerp.c M spur64src/vm/cointerp.h M spur64src/vm/cointerpmt.c M spur64src/vm/cointerpmt.h M spur64src/vm/gcc3x-cointerp.c M spur64src/vm/gcc3x-cointerpmt.c M spurlowcode64src/vm/cogit.h M spurlowcode64src/vm/cogitX64SysV.c M spurlowcode64src/vm/cogitX64WIN64.c M spurlowcode64src/vm/cogmethod.h M spurlowcode64src/vm/cointerp.c M spurlowcode64src/vm/cointerp.h M spurlowcode64src/vm/gcc3x-cointerp.c M spurlowcodesrc/vm/cogit.h M spurlowcodesrc/vm/cogitARMv5.c M spurlowcodesrc/vm/cogitIA32.c M spurlowcodesrc/vm/cogitMIPSEL.c M spurlowcodesrc/vm/cogmethod.h M spurlowcodesrc/vm/cointerp.c M spurlowcodesrc/vm/cointerp.h M spurlowcodesrc/vm/gcc3x-cointerp.c M spurlowcodestack64src/vm/gcc3x-interp.c M spurlowcodestack64src/vm/interp.c M spurlowcodestacksrc/vm/gcc3x-interp.c M spurlowcodestacksrc/vm/interp.c M spursista64src/vm/cogit.h M spursista64src/vm/cogitX64SysV.c M spursista64src/vm/cogitX64WIN64.c M spursista64src/vm/cogmethod.h M spursista64src/vm/cointerp.c M spursista64src/vm/cointerp.h M spursista64src/vm/gcc3x-cointerp.c M spursistasrc/vm/cogit.h M spursistasrc/vm/cogitARMv5.c M spursistasrc/vm/cogitIA32.c M spursistasrc/vm/cogitMIPSEL.c M spursistasrc/vm/cogmethod.h M spursistasrc/vm/cointerp.c M spursistasrc/vm/cointerp.h M spursistasrc/vm/gcc3x-cointerp.c M spursrc/vm/cogit.h M spursrc/vm/cogitARMv5.c M spursrc/vm/cogitIA32.c M spursrc/vm/cogitMIPSEL.c M spursrc/vm/cogmethod.h M spursrc/vm/cointerp.c M spursrc/vm/cointerp.h M spursrc/vm/cointerpmt.c M spursrc/vm/cointerpmt.h M spursrc/vm/gcc3x-cointerp.c M spursrc/vm/gcc3x-cointerpmt.c M spurstack64src/vm/gcc3x-interp.c M spurstack64src/vm/interp.c M spurstacksrc/vm/gcc3x-interp.c M spurstacksrc/vm/interp.c M src/vm/cogit.h M src/vm/cogitARMv5.c M src/vm/cogitIA32.c M src/vm/cogitMIPSEL.c M src/vm/cogmethod.h M src/vm/cointerp.c M src/vm/cointerp.h M src/vm/cointerpmt.c M src/vm/cointerpmt.h M src/vm/gcc3x-cointerp.c M src/vm/gcc3x-cointerpmt.c M stacksrc/vm/gcc3x-interp.c M stacksrc/vm/interp.c Log Message: ----------- Cog VM Source VMMaker.oscog-eem.2558 Reimplement Spur JIT access to literals and literal variables in #==, #~~ and push/pop/store literal variable. Instead of having a run-time read barrier in JITTED code, add a flag to CogMethod recordiong if a method references a movable (becommable) literal, and scanning all so flagged methods post-become to follow becommed literals. Thank you Clément for a lovely day's programming!! This reduces code size by about 2.2%. Performance increase yet to be assessed, but it should be better than 2.2% (less code, but more compact code means more methods in the method zone and a more compact working set). Doing so means we don't have to add all methods to young referrers if OldBecameNew. Instead we need add only those with movable literals which after scanning end up with a new literal. This scheme works well for 64-bits where sdelecftors are not directly referenced; instead ithe inline cache (because it is only 32-bits) contains the literal index of the selector. Add control of mixed mode arithmetic primitives, controlled by a VM flag (vmParameterAt: 48 [put:]; and perhaps by vmParameterAt: 75 [put:]). If the flag is set (unset by default), arithmetic primitives given both integral and float primitives will fail instead of coercing and completing. See Smallissimo blog post Provide primitiveHighBit (number 575). In the JIT add a new RTL OpCode ClzRR to allow very fast computation of high bit. Slang: Fix an initialization bug for classes referred to in option: pragmas but not included. Make sure that all such classes are included in InitializationOptions as false before initializing. Fix checkGenerateSurrogate:bytesPerWord: when checking for a new method. The existing code assumed no new methods were being adeed and so errored when the cmHasMovableLiteral accessors were generated and checked for. |
Free forum by Nabble | Edit this page |