[OpenSmalltalk/opensmalltalk-vm] 671bcf: CogVM source as per VMMaker.oscog-eem.2796

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[OpenSmalltalk/opensmalltalk-vm] 671bcf: CogVM source as per VMMaker.oscog-eem.2796

Eliot Miranda-3
 
  Branch: refs/heads/Cog
  Home:   https://github.com/OpenSmalltalk/opensmalltalk-vm
  Commit: 671bcff621d1ba87cf868a7f1a0c24fdbcfd020f
      https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/671bcff621d1ba87cf868a7f1a0c24fdbcfd020f
  Author: Eliot Miranda <[hidden email]>
  Date:   2020-08-29 (Sat, 29 Aug 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/plugins/IA32ABI/x64win64abicc.c
    M scripts/revertIfEssentiallyUnchanged
    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/cointerp.c
    M spurlowcode64src/vm/cointerp.h
    M spurlowcode64src/vm/gcc3x-cointerp.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/cointerp.c
    M spursista64src/vm/cointerp.h
    M spursista64src/vm/gcc3x-cointerp.c
    M spursistasrc/vm/cointerp.c
    M spursistasrc/vm/cointerp.h
    M spursistasrc/vm/gcc3x-cointerp.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/B2DPlugin/B2DPlugin.c
    M src/plugins/FilePlugin/FilePlugin.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/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.2796

Interpreter: Fix a few storePointer:...withValue: objectMemory nilObject's to
be storePointerUnchecked:.

ThreadedARM64Plugin: Implement support for Homogenous Float Arrays (HVAs,
structs with up to four float fields, or up to four double fields).  These are
passed and returned in floating-point argument registers, on call if sufficient
are available.  To implement this the ThreadedARM64Plugin uses a union of a
struct containing four doubles, and a struct containing eight floats.  All
float/double/HVA returns are handled by a call that expects a struct of four
doubles.  Hence Slang changes are needed (see below) to allow the struct to be
conveniently defined with local methods.

This fixes about five test cases in the FFI tests.

Mark all methods required to be inlined to be in the same function as the
alloca as inline: #always.  Hence their code will only occur inlined, not
a second time in an unused function.

Tidy up, pulling the unaligned accessor macros out of the preamble and
explicitly into methods, whether Slang has a chance to generate code
correctly given their presence.

Also make sure that all references to a type spec are typed as
unsigned int/unsigned int *, including the callout state's ffiArgSpec.

Fix a warning by typing InterpreterProxy>>characterObjectOf:'s argument
as int to agree with sqVirtualMachine.h.

Slang: Fix several issues with inlining and type inferrence to support the
above ThreadedARM64Plugin fixes.

Distinguish macros from struct accessors; previously isStructSend: could be confused.
Make sure that structTargetKindForDeclaration: answers #pointer only for types
endign with a *; previously it could be confused by e.g. a struct containing
pointers.
Make isTypePointerToStruct: more robust, answering false for anything that
isn't a string and then analysing the string.
emitCCodeAsFieldReferenceOn:level:generator: must also check for
shouldGenerateAsInterpreterProxySend:. tryToInlineMethodsIn: must push the
current method's declarations onto the scope stack to allow proper type
inferrence while inlining.  Since these changes now allow e.g. a structure
method to be inlined, extend node:typeCompatibleWith:inliningInto:in: to inline
such arguments; it needs to take the address of the argument to derive the
lined pointer to the actual argument.