[Vm-dev] [OpenSmalltalk/opensmalltalk-vm] 5df7f5: CogVM source as per VMMaker.oscog-eem.2079

GitHub noreply at github.com
Mon Jan 9 21:04:03 UTC 2017

  Branch: refs/heads/Cog
  Home:   https://github.com/OpenSmalltalk/opensmalltalk-vm
  Commit: 5df7f5af3bbea09bd56817795ac15d050ae2337e
  Author: Eliot Miranda <eliot.miranda at gmail.com>
  Date:   2017-01-09 (Mon, 09 Jan 2017)

  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 spursista64src/vm/cogit.h
    M spursista64src/vm/cogitX64.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/gcc3x-cointerp.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/plugins/ADPCMCodecPlugin/ADPCMCodecPlugin.c
    M src/plugins/B2DPlugin/B2DPlugin.c
    M src/plugins/B3DAcceleratorPlugin/B3DAcceleratorPlugin.c
    M src/plugins/BitBltPlugin/BitBltPlugin.c
    M src/plugins/CroquetPlugin/CroquetPlugin.c
    M src/plugins/DSAPrims/DSAPrims.c
    M src/plugins/FilePlugin/FilePlugin.c
    M src/plugins/GeniePlugin/GeniePlugin.c
    M src/plugins/IA32ABI/IA32ABI.c
    M src/plugins/JPEGReaderPlugin/JPEGReaderPlugin.c
    M src/plugins/LargeIntegers/LargeIntegers.c
    M src/plugins/ScratchPlugin/ScratchPlugin.c
    M src/plugins/SoundGenerationPlugin/SoundGenerationPlugin.c
    M src/plugins/Squeak3D/Squeak3D.c
    M src/plugins/SqueakFFIPrims/ARM32FFIPlugin.c
    M src/plugins/SqueakFFIPrims/IA32FFIPlugin.c
    M src/plugins/SqueakFFIPrims/X64SysVFFIPlugin.c
    M src/plugins/SqueakFFIPrims/X64Win64FFIPlugin.c
    M src/plugins/StarSqueakPlugin/StarSqueakPlugin.c
    M src/plugins/UnicodePlugin/UnicodePlugin.c
    M src/plugins/VMProfileLinuxSupportPlugin/VMProfileLinuxSupportPlugin.c
    M src/plugins/VMProfileMacSupportPlugin/VMProfileMacSupportPlugin.c
    M src/plugins/Win32OSProcessPlugin/Win32OSProcessPlugin.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/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.2079

Add support for constant reduction of const ifTrue: [bool] ifFalse: [statements]
=> bool to reduce isVanillaBlockClosure: to true if not using SistaV1BytecodeSet,
and hence rescue C compilation of the non-Sista sources (ensureMethodIsCoggeds:
needs this).

Fix code generation for bitInvert64, fixing recently generated 64-bit sources.

Fix indenting for not.

To make code more readable when implementing SpurPlanningCompactor, markedBitShift
was made a macro.  That caused Slang to generate a bogus version of
nullHeaderForMachineCodeMethod because it could no longer infer the type of the
shift operand for the marked bit, and so generated 1UL << 55 instead of
1ULL << 55.  Consequently nullHeaderForMachineCodeMethod answered 0 (!!).
Add TParseNode>>constantNumbericValueIfAtAllPossibleOrNilIn: that provides a value
for defines and methods answerinf constants as well as explicit constants and use
it in generateShiftLeft:on:indent:, hence fixing nullHeaderForMachineCodeMethod.

Fix inlining bugs due to an overcomplex and inaccurate completion check.
- inlineableFunctionCall:in: & inlineableSend:in: must see if a method wants to be  inlined, so that completeness can be computed properly.
- fix slips in tryToInlineMethodsIn: exiting too soon and always setting complete
  in a macro.
- refactor checkForCompleteness:in: to checkForCompletenessIn: and simplify,
  setting complete if no incomplete send is found, rather than assuming
  completeness and then looking for inlineability, which is wrong.

Have collectInlineList: set inline to false (rather than nil) if using
  asSpecified or asSpecifiedOrQuick.

Fix pruneUnreachableMethods: to not delete <api> methods.

Add cppIf:ifTrue: to statementsListsForInliningIn:'s filtering out.

SmartSyntaxPlugin Slang:
Avoid generating unreachable code when failing.  Avoid an unnecessary test for
failed if returning an expression which can't fail.  And don't generate the return
guard if there's nothing to guard.

Clean up primitiveHasSocketAccess to be smart syntax.

Fixed a bug where Cog would compiled compiledBlock like a compiledMethod, leading
to very strange crashes. Refactor ensureMethodIsCogged: & ensureBlockIsCogged:
numCopied: into ensureMethodIsCogged:maybeClosure: to reduce duplication.  At the
same time streamline ensureMethodIsCogged:maybeClosure: to avoid multiple calls on
the Cogit.

Correct generateCogMethod/FullBlock which might write one byte too far.
Indeed, (padIfPossibleWithStopsFrom: startAddress to: endAddress) is inclusive
(it will write a byte into endAddress).  So it must be called with
(self padIfPossibleWithStopsFrom: startAddress to: startAddress + size - 1).

Added identityHash in-line primitive

Bytecode Set/Lowcode
ExtB 00000000 1xxxxxxx constant decoding bug fix.
Add some missing entries in the IA32 concretize instruction the dispatch table.

Fix the NumTrampolines issue with the IMMUTABLE command line define.

Move the attemptToShrink from fullGC to globalGarbageCollect so that it is
included in lemming debugging.

Make checkHeapFreeSpaceIntegrity check totalFreeOldSpace and hence catch
SpurPlannngCompactor not freeing a free object at the end of an already compacted

Fix the free space leak checker invocations for the allocateSlots*InOldSpace:...
One cannot invoke the leak checker until the allocated object's header has been
filled in.

Refactor scavengeInProgress into gcPhaseInProgress so that SpurPlanningCompactor
can identify sliding compaction.  Refactor shouldRemapObj:/remapObj: to
double-dispatch through the compactor so that SpurPlanningCompactor can use its
implicit forwarding test isMobile: to decide if a forwasrding pointer should be

Move globalGarbageCollect's segmentManager prepareForGlobalSweep send to
immediately before compactor compact.

Rename excludeUnmarkedNewSpaceObjs to excludeUnmarkedObjs throughout the leak
checker; indeed any unmarked obj should be excluded immediately after the mark

Add printMethodImplementorsOf: for debugging.
Extract the printing in printOopsFrom:to: into printEntity:, which is useful on
its own for debugging.

Fix access to 64 bits int from 32 bit VM in primitiveFFIIntegerAtPut

More information about the Vm-dev mailing list