[Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 92160e: CogVM source as per Name: VMMaker.oscog-eem.2995

Eliot Miranda noreply at github.com
Mon Jul 26 02:37:29 UTC 2021


  Branch: refs/heads/Cog
  Home:   https://github.com/OpenSmalltalk/opensmalltalk-vm
  Commit: 92160efb63029b4a5a8a31ecc74017d42a46a02f
      https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/92160efb63029b4a5a8a31ecc74017d42a46a02f
  Author: Eliot Miranda <eliot.miranda at gmail.com>
  Date:   2021-07-25 (Sun, 25 Jul 2021)

  Changed paths:
    M platforms/Cross/vm/sq.h
    M platforms/Cross/vm/sqNamedPrims.c
    M platforms/Mac OS/vm/sqMacUnixExternalPrims.c
    M platforms/iOS/vm/OSX/sqMacUnixExternalPrims.m
    M platforms/minheadless/common/sqExternalPrimitives.c
    M platforms/unix/vm/sqUnixExternalPrims.c
    M platforms/win32/vm/sqWin32ExternalPrims.c
    M spur64src/vm/cogit.h
    M spur64src/vm/cogitARMv8.c
    M spur64src/vm/cogitX64SysV.c
    M spur64src/vm/cogitX64WIN64.c
    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/cogitARMv8.c
    M spurlowcode64src/vm/cogitX64SysV.c
    M spurlowcode64src/vm/cogitX64WIN64.c
    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/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/cogitARMv8.c
    M spursista64src/vm/cogitX64SysV.c
    M spursista64src/vm/cogitX64WIN64.c
    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/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/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/ADPCMCodecPlugin/ADPCMCodecPlugin.c
    M src/plugins/AioPlugin/AioPlugin.c
    M src/plugins/AsynchFilePlugin/AsynchFilePlugin.c
    M src/plugins/B2DPlugin/B2DPlugin.c
    M src/plugins/B3DAcceleratorPlugin/B3DAcceleratorPlugin.c
    M src/plugins/BMPReadWriterPlugin/BMPReadWriterPlugin.c
    M src/plugins/BitBltPlugin/BitBltPlugin.c
    M src/plugins/BochsIA32Plugin/BochsIA32Plugin.c
    M src/plugins/BochsX64Plugin/BochsX64Plugin.c
    M src/plugins/CameraPlugin/CameraPlugin.c
    M src/plugins/ClipboardExtendedPlugin/ClipboardExtendedPlugin.c
    M src/plugins/CroquetPlugin/CroquetPlugin.c
    M src/plugins/DESPlugin/DESPlugin.c
    M src/plugins/DSAPrims/DSAPrims.c
    M src/plugins/DropPlugin/DropPlugin.c
    M src/plugins/FFTPlugin/FFTPlugin.c
    M src/plugins/FileAttributesPlugin/FileAttributesPlugin.c
    M src/plugins/FileCopyPlugin/FileCopyPlugin.c
    M src/plugins/FilePlugin/FilePlugin.c
    M src/plugins/Float64ArrayPlugin/Float64ArrayPlugin.c
    M src/plugins/FloatArrayPlugin/FloatArrayPlugin.c
    M src/plugins/FloatMathPlugin/FloatMathPlugin.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/IA32ABI/IA32ABI.c
    M src/plugins/ImmX11Plugin/ImmX11Plugin.c
    M src/plugins/InternetConfigPlugin/InternetConfigPlugin.c
    M src/plugins/JPEGReadWriter2Plugin/JPEGReadWriter2Plugin.c
    M src/plugins/JPEGReaderPlugin/JPEGReaderPlugin.c
    M src/plugins/JoystickTabletPlugin/JoystickTabletPlugin.c
    M src/plugins/Klatt/Klatt.c
    M src/plugins/LargeIntegers/LargeIntegers.c
    M src/plugins/LocalePlugin/LocalePlugin.c
    M src/plugins/MD5Plugin/MD5Plugin.c
    M src/plugins/MIDIPlugin/MIDIPlugin.c
    M src/plugins/MacMenubarPlugin/MacMenubarPlugin.c
    M src/plugins/Matrix2x3Plugin/Matrix2x3Plugin.c
    M src/plugins/MiscPrimitivePlugin/MiscPrimitivePlugin.c
    M src/plugins/Mpeg3Plugin/Mpeg3Plugin.c
    M src/plugins/QuicktimePlugin/QuicktimePlugin.c
    M src/plugins/RePlugin/RePlugin.c
    M src/plugins/SHA2Plugin/SHA2Plugin.c
    M src/plugins/ScratchPlugin/ScratchPlugin.c
    M src/plugins/SecurityPlugin/SecurityPlugin.c
    M src/plugins/SerialPlugin/SerialPlugin.c
    M src/plugins/SocketPlugin/SocketPlugin.c
    M src/plugins/SoundCodecPrims/SoundCodecPrims.c
    M src/plugins/SoundGenerationPlugin/SoundGenerationPlugin.c
    M src/plugins/SoundPlugin/SoundPlugin.c
    M src/plugins/Squeak3D/Squeak3D.c
    M src/plugins/SqueakFFIPrims/ARM32FFIPlugin.c
    M src/plugins/SqueakFFIPrims/ARM64FFIPlugin.c
    M src/plugins/SqueakFFIPrims/IA32FFIPlugin.c
    M src/plugins/SqueakFFIPrims/X64SysVFFIPlugin.c
    M src/plugins/SqueakFFIPrims/X64Win64FFIPlugin.c
    M src/plugins/SqueakSSL/SqueakSSL.c
    M src/plugins/StarSqueakPlugin/StarSqueakPlugin.c
    M src/plugins/UUIDPlugin/UUIDPlugin.c
    M src/plugins/UnicodePlugin/UnicodePlugin.c
    M src/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.c
    M src/plugins/VMProfileLinuxSupportPlugin/VMProfileLinuxSupportPlugin.c
    M src/plugins/VMProfileMacSupportPlugin/VMProfileMacSupportPlugin.c
    M src/plugins/WeDoPlugin/WeDoPlugin.c
    M src/plugins/Win32OSProcessPlugin/Win32OSProcessPlugin.c
    M src/plugins/XDisplayControlPlugin/XDisplayControlPlugin.c
    M src/plugins/ZipPlugin/ZipPlugin.c
    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/gcc3x-cointerp.c
    M stacksrc/vm/gcc3x-interp.c
    M stacksrc/vm/interp.c

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

Cog: Implement calling named primitives on the Smalltalk stack if the
primitive's export:flags: pragma so specifies.  Spur only.

A named primitive can now export itself with metadata thusly:
	<export: true flags: #FastCPrimitiveFlag>
Most of the LargeIntegersPlugin primitives now do this along with all the
MiscPrimitivePlugin primitives.

On Spur arrange that these primitives are invoked on the Smalltalk stack,
using the standard stackPointer/argumentCount/primErrorCode primitive
convention. [A future extension may be to get Slang to implement a
conventional C function taking all operands as parameters; this can be
invoked with less overhead, being able to avoid setting
stackPointer/argumentCount/primErrorCode].  This depends on a platforms
change where ioLoadFunction:From:AccessorDepthInto: is replaced with
ioLoadFunction:From:MetadataInto:.

Discard the old support for rebinding external primtiives in machine code
(externalPrimCallOffsets et al).  Instead make sure that any and all contexts
for external primitives are divorced and have bytecode PCs whenever a module
is unloaded.  Unloading is essentially a development time operation so it
being slow is not an issue.  Getting rid of the rebinding support that allowed
external primitive cog methods to revert to invoking primtiiveExternalCall on
unload, simplifies supporting multiple plugin calling conventions.  This also
eliminates the truly horrible postCompilationHook.

Extend the support used to flush methods when setting/unsetting the
"do mixed arithmetic" control (VM parameter 75) to provide both that
toggle and the flush external primitives functionality.
1. Refactor the divorce fncitonality to take a criterion;
   divorceMachineCodeFramesWithMachineCodePrimitiveMethod becomes
   divorceAllFramesSuchThat:, and can take isMachineCodeFrameWithCogMethod: &
   isMachineCodeFrameForExternalPrimitiveMethod: as criteria.
2. Refactor and simplify the Cogit unlinking API.
   unlinkSendsToMachineCodePrimitiveMethodsAndFreeIf: becomes
   unlinkSendsToMethodsSuchThat:AndFreeIf:, and can use e.g.
   cogMethodHasMachineCodePrim: and cogMethodHasExternalPrim: as criteria.
   Type mapFor:performUntil:arg:;s arg parameter as CogMethod *; it almost
   always is.

Refactor primitiveExternalCall into linkExternalCall:ifFail:, which allows
CoInterpreter>>#functionPointerForCompiledMethod:primitiveIndex:primitivePropertyFlagsInto:
to link an external method to find its metadata, and arranges (should arrange)
that the Cogit will always be compiling a call direct to the target primitive
method.

CogARMv8Compiler: fix a bug in concretizePrefetchAw that produced a read
rather than a prefetch.

Simplify the module listing & unloading primitives.

This feels like a significant change.  Review and/or hard testing appreciated.




More information about the Vm-dev mailing list