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

Fabio Niephaus lists at fniephaus.com
Wed Aug 17 19:50:19 UTC 2016


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

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!
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160817/135f32a4/attachment.htm


More information about the Squeak-dev mailing list