[Vm-dev] [OpenSmalltalk/opensmalltalk-vm] f6d554: Cog VM Source VMMaker.oscog-eem.2558

Eliot Miranda noreply at github.com
Wed Sep 11 01:25:18 UTC 2019


  Branch: refs/heads/Cog
  Home:   https://github.com/OpenSmalltalk/opensmalltalk-vm
  Commit: f6d5541e6b37d1a82b1364f6d577031d6ad2a2ac
      https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/f6d5541e6b37d1a82b1364f6d577031d6ad2a2ac
  Author: Eliot Miranda <eliot.miranda at gmail.com>
  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.




More information about the Vm-dev mailing list