[Vm-dev] [OpenSmalltalk/opensmalltalk-vm] a63c4f: CogVM source as per VMMaker.oscog-eem.1930

GitHub noreply at github.com
Thu Sep 1 16:04:49 UTC 2016

  Branch: refs/heads/Cog
  Home:   https://github.com/OpenSmalltalk/opensmalltalk-vm
  Commit: a63c4f1099a06b3805eb7baedcdc55334f96bc9a
  Author: Eliot Miranda <eliot.miranda at gmail.com>
  Date:   2016-09-01 (Thu, 01 Sep 2016)

  Changed paths:
    M nsspur64src/vm/cogit.h
    M nsspur64src/vm/cogitX64.c
    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/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/cogitX64.c
    M spur64src/vm/cointerp.c
    M spur64src/vm/cointerp.h
    M spur64src/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/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/cointerp.c
    M spursrc/vm/cointerp.h
    M spursrc/vm/gcc3x-cointerp.c
    M spursrc/vm/interp.h
    M spurstack64src/vm/gcc3x-interp.c
    M spurstack64src/vm/interp.c
    M spurstacksrc/vm/gcc3x-interp.c
    M spurstacksrc/vm/interp.c
    M spurstacksrc/vm/interp.h
    M src/vm/cogit.h
    M src/vm/cogitARMv5.c
    M src/vm/cogitIA32.c
    M src/vm/cogitMIPSEL.c
    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:
  CogVM source as per VMMaker.oscog-eem.1930

Implement compacting CPICs on method zone reclamation rather than freeing CPICs
that have one or more freed entries.  This for more stable analysis in the
Sista VM.
Make MaxCPICCases a constant (class var) rather thnan a variable.

Cogit SistaV1/FullBlocks:

When a loop is taken enough time to trigger jit compilation, it needs in the
SistaV1 bytecode set to check if the activation is a full block and call the
correct JIT compiler method if this is the case.

SistaV1 bytecode set needs to define its primitive error code bytecode
(long temporary store bytecode)

Now that the trampoline for context inst var store can be called on single
contexts, we need to update the trampoline to work with single contexts

Comment the register saving convention for  the context inst var access
trampolines in the JIT.

Added immutability check in maybe context object store in jitted code.

Added an annotation for inst var store in the SistaV1 bytecode set to tip the
JIT if the mutated object may be a context or not.

StackSpur VM are now generated with dual bytecode set support.

Quick fix on the push nil functions for the sista bytecode set.

Added support from error code while scanning block bodies.

This commit makes a difference between the usage of the sistaV1 bytecode set and
the Sista VM. It is now possible to compile the VM with the SistaV1 bytecode set
but without the SistaVM option. This way, one can use and stabilize:
- directed super sends
- full block closures
without using unsafe operations and traps. I believe we'll migrate to the sista
runtime in multiple steps, and the first step is to use those features and have
images compatible with those features without runtime optimizations.

The SistaV1 bytecode set allows to use directed super send and full block
closures. Enabling the bytecode set enables those features.
(SistaV1BytecodeSet option)

The SistaVM option, combined with SistaCogit, enables the profiling counters,
the unsafe operations and traps. If disabled, the bytecodes from the SistaV1
bytecode set corresponding to traps or unsafe operations are considered unknown

All unsafe operations and traps related JIT code is now in SistaCogit.
Those bytecodes are considered as unknown bytecodes in superclasses.

I've also changed some flag logic, as the flag marking optimized method is
bit 16 (previously upper literal bit) and not the flag bit.

More information about the Vm-dev mailing list