[Vm-dev] VM Maker: VMMaker.oscog-cb.1919.mcz

Eliot Miranda eliot.miranda at gmail.com
Wed Aug 17 20:14:23 UTC 2016


On Wed, Aug 17, 2016 at 12:50 PM, Fabio Niephaus <lists at fniephaus.com>
wrote:

> On Wed, Aug 17, 2016 at 4:41 PM Eliot Miranda <eliot.miranda at gmail.com>
> wrote:
>
>> I will generate and commit sources today.  If possible we should use the
>> resulting VMs in the 5.1 release.  We have until early next week to test
>> then harshly and see if they stand up to abuse ;-)
>>
>
> So, shall we give this one a try then?
> https://bintray.com/opensmalltalk/vm/cog/201608171728#files
>

That would be the one!


>
>
> Fabio
>
>
>>
>> _,,,^..^,,,_ (phone)
>>
>> On Aug 17, 2016, at 7:27 AM, Clément Bera <bera.clement at gmail.com> wrote:
>>
>> With that commit the VM is stable again.
>>
>> On Wed, Aug 17, 2016 at 4:11 PM, <commits at source.squeak.org> wrote:
>>
>>>
>>> ClementBera uploaded a new version of VMMaker to project VM Maker:
>>> http://source.squeak.org/VMMaker/VMMaker.oscog-cb.1919.mcz
>>>
>>> ==================== Summary ====================
>>>
>>> Name: VMMaker.oscog-cb.1919
>>> Author: cb
>>> Time: 17 August 2016, 4:10:53.445475 pm
>>> UUID: 00a8dd2a-bc8d-4552-b400-be781c8aabec
>>> Ancestors: VMMaker.oscog-cb.1918
>>>
>>> fixed bug in scanner related to twoPath methods
>>>
>>> =============== Diff against VMMaker.oscog-cb.1918 ===============
>>>
>>> Item was changed:
>>>   ----- Method: StackToRegisterMappingCogit>>compileFrameBuild (in
>>> category 'compile abstract instructions') -----
>>>   compileFrameBuild
>>>         "Build a frame for a CogMethod activation.  See CoInterpreter
>>> class>>initializeFrameIndices.
>>>          Override to push the register receiver and register arguments,
>>> if any."
>>>         self cppIf: IMMUTABILITY ifTrue:
>>>                 [useTwoPaths ifTrue:
>>>                         [self compileTwoPathFrameBuild.
>>>                         ^self]].
>>>         needsFrame ifFalse:
>>>                 [useTwoPaths ifTrue:
>>>                         [self compileTwoPathFramelessInit].
>>>                  self initSimStackForFramelessMethod: initialPC.
>>>                  ^self].
>>> +       self deny: useTwoPaths.
>>>         self genPushRegisterArgs.
>>>         super compileFrameBuild.
>>>         self initSimStackForFramefulMethod: initialPC!
>>>
>>> Item was changed:
>>>   ----- Method: StackToRegisterMappingCogit>>scanMethod (in category
>>> 'compile abstract instructions') -----
>>>   scanMethod
>>>         "Scan the method (and all embedded blocks) to determine
>>>                 - what the last bytecode is; extra bytes at the end of a
>>> method are used to encode things like source pointers or temp names
>>>                 - if the method needs a frame or not
>>>                 - what are the targets of any backward branches.
>>>                 - how many blocks it creates
>>>          Answer the block count or on error a negative error code"
>>>         | latestContinuation nExts descriptor pc numBlocks distance
>>> targetPC framelessStackDelta seenInstVarStore |
>>>         <var: #descriptor type: #'BytecodeDescriptor *'>
>>>         needsFrame := useTwoPaths := seenInstVarStore := false.
>>>         self maybeInitNumFixups.
>>>         self maybeInitNumCounters.
>>>         prevBCDescriptor := nil.
>>>         NewspeakVM ifTrue:
>>>                 [numIRCs := 0].
>>>         (primitiveIndex > 0
>>>          and: [coInterpreter isQuickPrimitiveIndex: primitiveIndex])
>>> ifTrue:
>>>                 [^0].
>>>         pc := latestContinuation := initialPC.
>>>         numBlocks := framelessStackDelta := nExts := extA := extB := 0.
>>>         [pc <= endPC] whileTrue:
>>>                 [byte0 := (objectMemory fetchByte: pc ofObject:
>>> methodObj) + bytecodeSetOffset.
>>>                  descriptor := self generatorAt: byte0.
>>>                  descriptor isExtension ifTrue:
>>>                         [descriptor opcode = Nop ifTrue: "unknown
>>> bytecode tag; see Cogit class>>#generatorTableFrom:"
>>>                                 [^EncounteredUnknownBytecode].
>>>                          self loadSubsequentBytesForDescriptor:
>>> descriptor at: pc.
>>>                          self perform: descriptor generator].
>>>                  (descriptor isReturn
>>>                   and: [pc >= latestContinuation]) ifTrue:
>>>                         [endPC := pc].
>>>
>>>                   needsFrame ifFalse:
>>>                         [(descriptor needsFrameFunction isNil
>>>                           or: [self perform: descriptor
>>> needsFrameFunction with: framelessStackDelta])
>>>                                         ifTrue:
>>>                                                 ["With immutability we
>>> win simply by avoiding a frame build if the receiver is young and not
>>> immutable."
>>>                                                  self cppIf: IMMUTABILITY
>>>                                                         ifTrue:
>>> [descriptor is1ByteInstVarStore
>>>
>>> ifTrue: [useTwoPaths := true]
>>>
>>> ifFalse: [needsFrame := true. useTwoPaths := false]]
>>> +                                                       ifFalse:
>>> [needsFrame := true. useTwoPaths := false]]
>>> -                                                       ifFalse:
>>> [needsFrame := true]]
>>>                                         ifFalse:
>>>                                                 [framelessStackDelta :=
>>> framelessStackDelta + descriptor stackDelta.
>>>                                                  "Without immutability
>>> we win if there are two or more stores and the receiver is new."
>>>                                                  self cppIf: IMMUTABILITY
>>>                                                         ifTrue: []
>>>                                                         ifFalse:
>>>
>>> [descriptor is1ByteInstVarStore ifTrue:
>>>
>>> [seenInstVarStore
>>>
>>>         ifTrue: [useTwoPaths := true]
>>>
>>>         ifFalse: [seenInstVarStore := true]]]]].
>>>
>>>                  descriptor isBranch ifTrue:
>>>                         [distance := self spanFor: descriptor at: pc
>>> exts: nExts in: methodObj.
>>>                          targetPC := pc + descriptor numBytes + distance.
>>>                          (self isBackwardBranch: descriptor at: pc exts:
>>> nExts in: methodObj)
>>>                                 ifTrue: [self initializeFixupAt:
>>> targetPC - initialPC]
>>>                                 ifFalse:
>>>                                         [latestContinuation :=
>>> latestContinuation max: targetPC.
>>>                                          self maybeCountFixup.
>>>                                          self maybeCountCounter]].
>>>                  descriptor isBlockCreation ifTrue:
>>>                         [numBlocks := numBlocks + 1.
>>>                          distance := self spanFor: descriptor at: pc
>>> exts: nExts in: methodObj.
>>>                          targetPC := pc + descriptor numBytes + distance.
>>>                          latestContinuation := latestContinuation max:
>>> targetPC.
>>>                          self maybeCountFixup].
>>>
>>>                  NewspeakVM ifTrue:
>>>                         [descriptor hasIRC ifTrue:
>>>                                 [numIRCs := numIRCs + 1]].
>>>                  pc := pc + descriptor numBytes.
>>>                  descriptor isExtension
>>>                         ifTrue: [nExts := nExts + 1]
>>>                         ifFalse: [nExts := extA := extB := 0].
>>>                  prevBCDescriptor := descriptor].
>>>         ^numBlocks!
>>>
>>>
>>


-- 
_,,,^..^,,,_
best, Eliot
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20160817/7faa7a54/attachment.htm


More information about the Vm-dev mailing list