[Vm-dev] VM Maker: VMMaker.oscog-cb.2105.mcz
bera.clement at gmail.com
Thu Jan 19 14:06:24 UTC 2017
On Thu, Jan 19, 2017 at 2:31 PM, Ronie Salgado <roniesalg at gmail.com> wrote:
> Hi Clement,
> Something is fishy in debugStackPointers in the SistaVM. It fails multiple
>> assertion. I believe it's related tobranchIfInstanceOf bytecodes
> I think that the problem is in stackDeltaForPrimitive:in:. An unary
> inline primitive has a stack delta of zero (Consumes one value and produce
> another value: -1 + 1 = 0). A binary inline primitive has a stack delta of
> -1 (Consumes 2 value, produce one value: -2 + 1 = -1) . A ternary inline
> primitive has a stack delta of -2. (Consume three values, produce one
> value: -3 + 1 = -2).
> I think that this is the correct definition for the method:
> stackDeltaForPrimitive: primitiveIndex in: method
> "Answer the stack delta for the callPrimitive: bytecode (see my class
> There is no delta for non-inlined primitives (its implicitly 0 - method
> Inlined primitives are grouped by the thousand by argument count, 32 args
> max ;-)."
> | prim primSet |
> ^primitiveIndex < 32678
> ifTrue: 
> ifFalse: [
> primSet := (primitiveIndex - 32768) >> 13 bitAnd: 3.
> prim := (primitiveIndex - 32768) bitAnd: 8191.
> 1 - (prim // 1000)
Currently the StackDepthFinder implements both callPrimitive: and
callInlinePrimitive:, the dispatch being done in the instructionStream
based on the higher bit.
I think there are problems for your set because your set index is non zero,
but my set index is 0 and StackDepthFinder>>#callInlinePrimitive: compute,
as far as I understand it, the correct value.
Maybe we change the InstructionStream to call only callPrimitive, or we
change callInlinedPrimitive code to make this work with Lowcode.
> Best regards,
> 2017-01-19 8:19 GMT-03:00 <commits at source.squeak.org>:
>> ClementBera uploaded a new version of VMMaker to project VM Maker:
>> ==================== Summary ====================
>> Name: VMMaker.oscog-cb.2105
>> Author: cb
>> Time: 19 January 2017, 12:19:42.246677 pm
>> UUID: 1f5ef635-cb7b-48c2-be74-4345d39c620f
>> Ancestors: VMMaker.oscog-cb.2104
>> Set deadCode to true in trap bytecode to avoid generating merge machne
>> code that is never reached.
>> Something is fishy in debugStackPointers in the SistaVM. It fails
>> multiple assertion. I believe it's related tobranchIfInstanceOf bytecodes
>> =============== Diff against VMMaker.oscog-cb.2104 ===============
>> Item was changed:
>> ----- Method: SistaCogit>>genUnconditionalTrapBytecode (in category
>> 'bytecode generators') -----
>> "SistaV1: * 217 Trap"
>> self ssFlushTo: simStackPtr.
>> self CallRT: ceTrapTrampoline.
>> self annotateBytecode: self Label.
>> + deadCode := true.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Vm-dev