[Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 0e4173: CogVM source as per VMMaker.oscog-eem.2823

Eliot Miranda noreply at github.com
Fri Sep 25 21:45:55 UTC 2020


  Branch: refs/heads/Cog
  Home:   https://github.com/OpenSmalltalk/opensmalltalk-vm
  Commit: 0e41737dbd5cdda9eb48392c8528f014e54768f9
      https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/0e41737dbd5cdda9eb48392c8528f014e54768f9
  Author: Eliot Miranda <eliot.miranda at gmail.com>
  Date:   2020-09-25 (Fri, 25 Sep 2020)

  Changed paths:
    M nsspur64src/vm/cogit.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/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 platforms/Cross/vm/sqVirtualMachine.c
    M platforms/Cross/vm/sqVirtualMachine.h
    M platforms/Mac OS/vm/sqMacUnixCommandLineInterface.c
    M platforms/iOS/vm/OSX/sqSqueakOSXApplication.h
    M platforms/iOS/vm/OSX/sqSqueakOSXApplication.m
    M platforms/unix/vm/sqUnixMain.c
    M platforms/win32/vm/sqWin32Main.c
    M spur64src/vm/cogit.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/cointerp.c
    M spurlowcode64src/vm/cointerp.h
    M spurlowcode64src/vm/gcc3x-cointerp.c
    M spurlowcodesrc/vm/cogit.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/cointerp.c
    M spursista64src/vm/cointerp.h
    M spursista64src/vm/gcc3x-cointerp.c
    M spursistasrc/vm/cogit.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/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 spurstack64src/vm/validImage.c
    M spurstacksrc/vm/gcc3x-interp.c
    M spurstacksrc/vm/interp.c
    M spurstacksrc/vm/validImage.c
    M src/plugins/AsynchFilePlugin/AsynchFilePlugin.c
    M src/plugins/BitBltPlugin/BitBltPlugin.c
    M src/plugins/BochsIA32Plugin/BochsIA32Plugin.c
    M src/plugins/BochsX64Plugin/BochsX64Plugin.c
    M src/plugins/ClipboardExtendedPlugin/ClipboardExtendedPlugin.c
    M src/plugins/GdbARMPlugin/GdbARMPlugin.c
    M src/plugins/GdbARMv8Plugin/GdbARMv8Plugin.c
    M src/plugins/GeniePlugin/GeniePlugin.c
    M src/plugins/HostWindowPlugin/HostWindowPlugin.c
    M src/plugins/ImmX11Plugin/ImmX11Plugin.c
    M src/plugins/InternetConfigPlugin/InternetConfigPlugin.c
    M src/plugins/JPEGReadWriter2Plugin/JPEGReadWriter2Plugin.c
    M src/plugins/JoystickTabletPlugin/JoystickTabletPlugin.c
    M src/plugins/LargeIntegers/LargeIntegers.c
    M src/plugins/LocalePlugin/LocalePlugin.c
    M src/plugins/MIDIPlugin/MIDIPlugin.c
    M src/plugins/MacMenubarPlugin/MacMenubarPlugin.c
    M src/plugins/Mpeg3Plugin/Mpeg3Plugin.c
    M src/plugins/QuicktimePlugin/QuicktimePlugin.c
    M src/plugins/SerialPlugin/SerialPlugin.c
    M src/plugins/SocketPlugin/SocketPlugin.c
    M src/plugins/SoundPlugin/SoundPlugin.c

  Log Message:
  -----------
  CogVM source as per VMMaker.oscog-eem.2823

Spur:
Use bridges to use a single loop for allObjectsDo: et al.   Hence save lots of
space by avoiding three copies of the inner loop for several object enumeration
operations.  e.g. on MacOS X x86_64 saves over 1% of the VM executable.

Install a bridge from freeStart (end of eden) to newSpaceStart and from
pastSpaceStart (end of past space) to start of eden as required.  Either or
both of partSpace and eden may be empty.  pastSpace may be completely full, or
just one 64-bit word shy of eden.  If one word shy use a "slim bridge", a bridge
that fits in a single word.  Slim bridge is a pun, a return to my youth:
https://www.wwt.org.uk/wetland-centres/slimbridge#

Note that slim bridges (shums would be a better name) could be the solution to
object alignment; by preceding objects with suitable shims, the shims could both
record what an object's alignment is, and be used to pad old space to bring an
object into alignment.

Allow sufficientSpaceAfterGC: (invoked from checkForEventsMayContextSwitch:) to
attempt to shrink if there is lots of free space.  sufficientSpaceAfterGC:
invokes fullGC only if the heap has grown by the growth rarion since the last
fullGC, and (before this change) only fullGC would attempt to shrink.  So memory
would never shrink if some large amout of space became available, since the heap
would not grow again, and fullGC would never be called.  Hence the free space
would remain in the system.  So this is needed to shrink when possible.

Have growOldSpaceByAtLeast: set the needGC flag if growth is either disallowed
or fails.  This will cause the VM to invoke sufficientSpaceAfterGC: in a context
of continuous growth that halts before, say, the growth ratio is reached.

SocketPlugin:
Make sure that all senders of socketValueOf: check for failure (e.g.
primitiveSocketReceiveDataAvailable: primitiveSocketRemotePort:
primitiveSocketSendDone: did not).

Make the four send/receive primitives that take bits array arguments accept
any of Spur's native bits types, byte, double byte, quad byte or octa byte.

Add the bytesPerElement: function to InterpreterProxy/sqVirtualMachine to allow
these primitives to determine the element size.

Slang: Have the SmartSyntaxPlugins use the methodReturnFoo: protocol
where they can.




More information about the Vm-dev mailing list