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

Clément Bera bera.clement at gmail.com
Wed Aug 17 14:27:05 UTC 2016


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/vm-dev/attachments/20160817/5c71952c/attachment.htm


More information about the Vm-dev mailing list