Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog.seperateMarking-eem.3331.mcz
==================== Summary ====================
Name: VMMaker.oscog.seperateMarking-eem.3331 Author: eem Time: 13 June 2023, 2:14:31.520579 pm UUID: 57915ee2-2e9f-47a4-9568-bda0f6497ffd Ancestors: VMMaker.oscog.seperateMarking-WoC.3330
Merge VMMaker.oscog-eem.3330. Ensure the missing method for TempVectReadBarrier == false is present (followForwardingPointersOfReceiverAndTemporariesInStackZone). Enable the TempVectReadBarrier == false regime. We really want to avoid that if at all possible.
=============== Diff against VMMaker.oscog.seperateMarking-WoC.3330 ===============
Item was changed: ----- Method: CCodeGenerator>>createAndWriteCallGraph (in category 'call graph') ----- createAndWriteCallGraph
+ | vmm cg | - | vmm cg cogCg callGraph cogCallGraph sharedKeys graph | vmm := (VMMaker forPlatform: 'Cross') + interpreterClass: StackInterpreter; - interpreterClass: CoInterpreter; options: #(ObjectMemory Spur64BitCoMemoryManager + TempVectReadBarrier false). - TempVectReadBarrier true - Cogit StackToRegisterMappingCogit - gcClass SpurIncrementalGarbageCollector). cg := [vmm buildCodeGeneratorForInterpreter] on: Notification do: [:ex| ex tag == #getVMMaker ifTrue: [ex resume: vmm] ifFalse: [ex pass]].
cg vmClass preGenerationHook: cg. cg inferTypesForImplicitlyTypedVariablesAndMethods. cg prepareMethods. - - cogCg := (VMMaker forPlatform: 'Cross') - interpreterClass: CoInterpreter; - options: #(ObjectMemory Spur64BitCoMemoryManager - ISA ARMv8 - TempVectReadBarrier true - MULTIPLEBYTECODESETS true) , {#Cogit. #StackToRegisterMappingCogit}; - buildCodeGeneratorForCogit. - - cogCg vmClass preGenerationHook: cogCg. - cogCg inferTypesForImplicitlyTypedVariablesAndMethods. - cogCg retainMethods: { #compactCogCompiledCode }. - cogCg prepareMethods.
+ cg writeCallGraphCSV: cg buildCallGraphForGC! - callGraph := cg buildForwardCallGraph. - cogCallGraph := cogCg buildForwardCallGraph. - - - graph := Dictionary new. - sharedKeys := callGraph keys intersection: cogCallGraph keys. - - callGraph keysAndValuesDo: [:key :value | (sharedKeys includes: key) ifFalse: [graph at: key put: value]]. - cogCallGraph keysAndValuesDo: [:key :value | (sharedKeys includes: key) ifFalse: [graph at: key put: value]]. - - sharedKeys do: [:ea | graph at: ea put: ((callGraph at: ea) , (cogCallGraph at: ea))]. - - self halt. - - cg writeCallGraphCSV: graph!
Item was removed: - ----- Method: CoInterpreter>>followForwardingPointersInStackZone (in category 'object memory support') ----- - followForwardingPointersInStackZone - "Spur's become: is lazy, turning the becommed object into a forwarding object to the other. - The read-barrier is minimised by arranging that forwarding pointers will fail a method cache - probe, since notionally objects' internals are accessed only via sending messages to them, - the exception is primitives that access the internals of the non-receiver argument(s). - - To avoid a read barrier on bytecode, literal and inst var fetch and non-local return, we scan - the receivers (including the stacked receiver for non-local return) and method references - in the stack zone and follow any forwarded ones. This is of course way cheaper than - scanning all of memory as in the old become. - - Override to handle machine code frames" - | theIPPtr | - <inline: false> - - stackPage ifNil: "the system must be snapshotting; nothing to do..." - [self assert: (stackPages mostRecentlyUsedPage isNil or: [stackPages mostRecentlyUsedPage isFree]). - self cCode: [] inSmalltalk: [self assert: stackPages allPagesFree]. - ^self]. - - self externalWriteBackHeadFramePointers. - - 0 to: numStackPages - 1 do: - [:i| | thePage theSP theFP callerFP oop offset | - thePage := stackPages stackPageAt: i. - thePage isFree ifFalse: - [self assert: (self ifCurrentStackPageHasValidHeadPointers: thePage). - theFP := thePage headFP. - "Skip the instruction pointer on top of stack of inactive pages." - theIPPtr := thePage = stackPage ifFalse: [thePage headSP asUnsignedInteger]. - [self assert: (thePage addressIsInPage: theFP). - self assert: (theIPPtr isNil or: [thePage addressIsInPage: theIPPtr asVoidPointer]). - (self isMachineCodeFrame: theFP) - ifTrue: - [oop := stackPages longAt: theFP + FoxMFReceiver. - (objectMemory isOopForwarded: oop) ifTrue: - [stackPages - longAt: theFP + FoxMFReceiver - put: (objectMemory followForwarded: oop)]. - self assert: (objectMemory isForwarded: (self mframeHomeMethod: theFP) methodObject) not] - ifFalse: - [oop := stackPages longAt: theFP + FoxIFReceiver. - (objectMemory isOopForwarded: oop) ifTrue: - [stackPages - longAt: theFP + FoxIFReceiver - put: (objectMemory followForwarded: oop)]. - oop := self iframeMethod: theFP. - (objectMemory isForwarded: oop) ifTrue: - [| newOop | - newOop := objectMemory followForwarded: oop. - offset := newOop - oop. - (theIPPtr notNil - and: [(stackPages longAt: theIPPtr) > oop]) ifTrue: - [stackPages - longAt: theIPPtr - put: (stackPages longAt: theIPPtr) + offset]. - stackPages - longAt: theFP + FoxIFSavedIP - put: (stackPages longAt: theFP + FoxIFSavedIP) + offset. - stackPages - longAt: theFP + FoxMethod - put: (oop := newOop)]]. - ((self frameHasContext: theFP) - and: [(objectMemory isForwarded: (self frameContext: theFP))]) ifTrue: - [stackPages - longAt: theFP + FoxThisContext - put: (objectMemory followForwarded: (self frameContext: theFP))]. - offset := self frameStackedReceiverOffset: theFP. - oop := stackPages longAt: theFP + offset. - (objectMemory isOopForwarded: oop) ifTrue: - [stackPages - longAt: theFP + offset - put: (objectMemory followForwarded: oop)]. - (callerFP := self frameCallerFP: theFP) ~= 0] whileTrue: - [theIPPtr := (theFP + FoxCallerSavedIP) asUnsignedInteger. - theFP := callerFP]. - "And finally follow the saved context and the caller context." - theSP := thePage baseAddress - objectMemory wordSize. - [theSP <= thePage baseAddress] whileTrue: - [oop := stackPages longAt: theSP. - (objectMemory isForwarded: oop) ifTrue: - [stackPages longAt: theSP put: (objectMemory followForwarded: oop)]. - theSP := theSP + objectMemory wordSize]]]!
Item was changed: ----- Method: CoInterpreter>>followForwardingPointersOfReceiverAndTemporariesInStackZone (in category 'object memory support') ----- followForwardingPointersOfReceiverAndTemporariesInStackZone "A more thorough version of followForwardingPointersInStackZone that also follows all temporaries (but not stack contents after the temps). + This allows removal of the TempVectReadBarrier in the IGC" - This would allow removal of the TempVectReadBarrier" - <option: #VMBenchmarks> - | theIPPtr | <inline: false>
stackPage ifNil: "the system must be snapshotting; nothing to do..." [self assert: (stackPages mostRecentlyUsedPage isNil or: [stackPages mostRecentlyUsedPage isFree]). self cCode: [] inSmalltalk: [self assert: stackPages allPagesFree]. ^self].
self externalWriteBackHeadFramePointers.
0 to: numStackPages - 1 do: + [:i| | thePage theFP theIPPtr theSP callerFP oop offset frameRcvrOffset methodHeader | - [:i| | thePage theSP theFP callerFP oop offset frameRcvrOffset methodHeader | thePage := stackPages stackPageAt: i. thePage isFree ifFalse: [self assert: (self ifCurrentStackPageHasValidHeadPointers: thePage). theFP := thePage headFP. "Skip the instruction pointer on top of stack of inactive pages." theIPPtr := thePage = stackPage ifFalse: [thePage headSP asUnsignedInteger]. [self assert: (thePage addressIsInPage: theFP). self assert: (theIPPtr isNil or: [thePage addressIsInPage: theIPPtr asVoidPointer]). (self isMachineCodeFrame: theFP) ifTrue: [oop := stackPages longAt: theFP + FoxMFReceiver. (objectMemory isOopForwarded: oop) ifTrue: [stackPages longAt: theFP + FoxMFReceiver put: (objectMemory followForwarded: oop)]. self assert: (objectMemory isForwarded: (self mframeHomeMethod: theFP) methodObject) not. frameRcvrOffset := theFP + FoxMFReceiver. methodHeader := (self mframeHomeMethod: theFP) methodHeader] ifFalse: [oop := stackPages longAt: theFP + FoxIFReceiver. (objectMemory isOopForwarded: oop) ifTrue: [stackPages longAt: theFP + FoxIFReceiver put: (objectMemory followForwarded: oop)]. oop := self iframeMethod: theFP. (objectMemory isForwarded: oop) ifTrue: [| newOop | newOop := objectMemory followForwarded: oop. offset := newOop - oop. (theIPPtr notNil and: [(stackPages longAt: theIPPtr) > oop]) ifTrue: [stackPages longAt: theIPPtr put: (stackPages longAt: theIPPtr) + offset]. stackPages longAt: theFP + FoxIFSavedIP put: (stackPages longAt: theFP + FoxIFSavedIP) + offset. stackPages longAt: theFP + FoxMethod put: (oop := newOop)]. frameRcvrOffset := theFP + FoxIFReceiver. methodHeader := objectMemory methodHeaderOf: oop]. theSP := frameRcvrOffset - ((self temporaryCountOfMethodHeader: methodHeader) * objectMemory wordSize). [theSP <= frameRcvrOffset] whileTrue: [oop := stackPages longAt: theSP. (objectMemory isOopForwarded: oop) ifTrue: [oop := objectMemory followForwarded: oop. stackPages longAt: theSP put: oop]. theSP := theSP + objectMemory wordSize].
((self frameHasContext: theFP) and: [(objectMemory isForwarded: (self frameContext: theFP))]) ifTrue: [stackPages longAt: theFP + FoxThisContext put: (objectMemory followForwarded: (self frameContext: theFP))]. offset := self frameStackedReceiverOffset: theFP. oop := stackPages longAt: theFP + offset. (objectMemory isOopForwarded: oop) ifTrue: [stackPages longAt: theFP + offset put: (objectMemory followForwarded: oop)]. (callerFP := self frameCallerFP: theFP) ~= 0] whileTrue: [theIPPtr := (theFP + FoxCallerSavedIP) asUnsignedInteger. theFP := callerFP]. "And finally follow the saved context and the caller context." theSP := thePage baseAddress - objectMemory wordSize. [theSP <= thePage baseAddress] whileTrue: [oop := stackPages longAt: theSP. (objectMemory isForwarded: oop) ifTrue: [stackPages longAt: theSP put: (objectMemory followForwarded: oop)]. theSP := theSP + objectMemory wordSize]]]!
Item was added: + ----- Method: CoInterpreter>>followForwardingPointersOfReceiversInStackZone (in category 'object memory support') ----- + followForwardingPointersOfReceiversInStackZone + "Spur's become: is lazy, turning the becommed object into a forwarding object to the other. + The read-barrier is minimised by arranging that forwarding pointers will fail a method cache + probe, since notionally objects' internals are accessed only via sending messages to them, + the exception is primitives that access the internals of the non-receiver argument(s). + + To avoid a read barrier on bytecode, literal and inst var fetch and non-local return, we scan + the receivers (including the stacked receiver for non-local return) and method references + in the stack zone and follow any forwarded ones. This is of course way cheaper than + scanning all of memory as in the old become. + + Override to handle machine code frames" + <inline: false> + + stackPage ifNil: "the system must be snapshotting; nothing to do..." + [self assert: (stackPages mostRecentlyUsedPage isNil or: [stackPages mostRecentlyUsedPage isFree]). + self cCode: [] inSmalltalk: [self assert: stackPages allPagesFree]. + ^self]. + + self externalWriteBackHeadFramePointers. + + 0 to: numStackPages - 1 do: + [:i| | thePage theFP theIPPtr theSP callerFP oop offset | + thePage := stackPages stackPageAt: i. + thePage isFree ifFalse: + [self assert: (self ifCurrentStackPageHasValidHeadPointers: thePage). + theFP := thePage headFP. + "Skip the instruction pointer on top of stack of inactive pages." + theIPPtr := thePage = stackPage ifFalse: [thePage headSP asUnsignedInteger]. + [self assert: (thePage addressIsInPage: theFP). + self assert: (theIPPtr isNil or: [thePage addressIsInPage: theIPPtr asVoidPointer]). + (self isMachineCodeFrame: theFP) + ifTrue: + [oop := stackPages longAt: theFP + FoxMFReceiver. + (objectMemory isOopForwarded: oop) ifTrue: + [stackPages + longAt: theFP + FoxMFReceiver + put: (objectMemory followForwarded: oop)]. + self assert: (objectMemory isForwarded: (self mframeHomeMethod: theFP) methodObject) not] + ifFalse: + [oop := stackPages longAt: theFP + FoxIFReceiver. + (objectMemory isOopForwarded: oop) ifTrue: + [stackPages + longAt: theFP + FoxIFReceiver + put: (objectMemory followForwarded: oop)]. + oop := self iframeMethod: theFP. + (objectMemory isForwarded: oop) ifTrue: + [| newOop | + newOop := objectMemory followForwarded: oop. + offset := newOop - oop. + (theIPPtr notNil + and: [(stackPages longAt: theIPPtr) > oop]) ifTrue: + [stackPages + longAt: theIPPtr + put: (stackPages longAt: theIPPtr) + offset]. + stackPages + longAt: theFP + FoxIFSavedIP + put: (stackPages longAt: theFP + FoxIFSavedIP) + offset. + stackPages + longAt: theFP + FoxMethod + put: (oop := newOop)]]. + ((self frameHasContext: theFP) + and: [(objectMemory isForwarded: (self frameContext: theFP))]) ifTrue: + [stackPages + longAt: theFP + FoxThisContext + put: (objectMemory followForwarded: (self frameContext: theFP))]. + offset := self frameStackedReceiverOffset: theFP. + oop := stackPages longAt: theFP + offset. + (objectMemory isOopForwarded: oop) ifTrue: + [stackPages + longAt: theFP + offset + put: (objectMemory followForwarded: oop)]. + (callerFP := self frameCallerFP: theFP) ~= 0] whileTrue: + [theIPPtr := (theFP + FoxCallerSavedIP) asUnsignedInteger. + theFP := callerFP]. + "And finally follow the saved context and the caller context." + theSP := thePage baseAddress - objectMemory wordSize. + [theSP <= thePage baseAddress] whileTrue: + [oop := stackPages longAt: theSP. + (objectMemory isForwarded: oop) ifTrue: + [stackPages longAt: theSP put: (objectMemory followForwarded: oop)]. + theSP := theSP + objectMemory wordSize]]]!
Item was changed: ----- Method: CoInterpreterPrimitives>>primitiveBenchmarkFollowForwardersInStackZone (in category 'benchmark primitives') ----- primitiveBenchmarkFollowForwardersInStackZone <option: #VMBenchmarks> <export: true> self primitiveReturnTimeTakenFor: + [self followForwardingPointersOfReceiversInStackZone]! - [self followForwardingPointersInStackZone]!
Item was removed: - ----- Method: StackInterpreter>>followForwardingPointersInStackZone (in category 'object memory support') ----- - followForwardingPointersInStackZone - "Spur's become: is lazy, turning the becommed object into a forwarding object to the other. - The read-barrier is minimised by arranging that forwarding pointers will fail a method cache - probe, since notionally objects' internals are accessed only via sending messages to them, - the exception is primitives that access the internals of the non-receiver argument(s). - - To avoid a read barrier on bytecode, literal and inst var fetch and non-local return, we scan - the receivers (including the stacked receiver for non-local return) and method references - in the stack zone and follow any forwarded ones. This is of course way cheaper than - scanning all of memory as in the old become." - | theIPPtr | - <inline: false> - - stackPage ifNil: "the system must be snapshotting; nothing to do..." - [self assert: (stackPages mostRecentlyUsedPage isNil or: [stackPages mostRecentlyUsedPage isFree]). - self cCode: [] inSmalltalk: [self assert: stackPages allPagesFree]. - ^self]. - - self externalWriteBackHeadFramePointers. - - 0 to: numStackPages - 1 do: - [:i| | thePage theFP callerFP offset oop | - thePage := stackPages stackPageAt: i. - thePage isFree ifFalse: - [self assert: (self ifCurrentStackPageHasValidHeadPointers: thePage). - theFP := thePage headFP. - "Skip the instruction pointer on top of stack of inactive pages." - theIPPtr := thePage = stackPage ifFalse: [thePage headSP asUnsignedInteger]. - [self assert: (thePage addressIsInPage: theFP). - self assert: (theIPPtr isNil or: [thePage addressIsInPage: theIPPtr asVoidPointer]). - oop := stackPages longAt: theFP + FoxReceiver. - (objectMemory isOopForwarded: oop) ifTrue: - [stackPages - longAt: theFP + FoxReceiver - put: (objectMemory followForwarded: oop)]. - ((self frameHasContext: theFP) - and: [(objectMemory isForwarded: (self frameContext: theFP))]) ifTrue: - [stackPages - longAt: theFP + FoxThisContext - put: (objectMemory followForwarded: (self frameContext: theFP))]. - oop := self frameMethod: theFP. - (objectMemory isForwarded: oop) ifTrue: - [| newOop delta | - newOop := objectMemory followForwarded: oop. - theIPPtr ifNotNil: - [self assert: (stackPages longAt: theIPPtr) > (self frameMethod: theFP). - delta := newOop - oop. - stackPages - longAt: theIPPtr - put: (stackPages longAt: theIPPtr) + delta]. - stackPages - longAt: theFP + FoxMethod - put: (oop := newOop)]. - offset := self frameStackedReceiverOffset: theFP. - oop := stackPages longAt: theFP + offset. - (objectMemory isOopForwarded: oop) ifTrue: - [stackPages - longAt: theFP + offset - put: (objectMemory followForwarded: oop)]. - (callerFP := self frameCallerFP: theFP) ~= 0] whileTrue: - [theIPPtr := (theFP + FoxCallerSavedIP) asUnsignedInteger. - theFP := callerFP]. - "And finally follow the caller context." - self assert: theFP = thePage baseFP. - oop := self frameCallerContext: theFP. - (objectMemory isForwarded: oop) ifTrue: - [self frameCallerContext: theFP put: (objectMemory followForwarded: oop)]]]!
Item was added: + ----- Method: StackInterpreter>>followForwardingPointersOfReceiversInStackZone (in category 'object memory support') ----- + followForwardingPointersOfReceiversInStackZone + "Spur's become: is lazy, turning the becommed object into a forwarding object to the other. + The read-barrier is minimised by arranging that forwarding pointers will fail a method cache + probe, since notionally objects' internals are accessed only via sending messages to them, + the exception is primitives that access the internals of the non-receiver argument(s). + + To avoid a read barrier on bytecode, literal and inst var fetch and non-local return, we scan + the receivers (including the stacked receiver for non-local return) and method references + in the stack zone and follow any forwarded ones. This is of course way cheaper than + scanning all of memory as in the old become." + | theIPPtr | + <inline: false> + + stackPage ifNil: "the system must be snapshotting; nothing to do..." + [self assert: (stackPages mostRecentlyUsedPage isNil or: [stackPages mostRecentlyUsedPage isFree]). + self cCode: [] inSmalltalk: [self assert: stackPages allPagesFree]. + ^self]. + + self externalWriteBackHeadFramePointers. + + 0 to: numStackPages - 1 do: + [:i| | thePage theFP callerFP offset oop | + thePage := stackPages stackPageAt: i. + thePage isFree ifFalse: + [self assert: (self ifCurrentStackPageHasValidHeadPointers: thePage). + theFP := thePage headFP. + "Skip the instruction pointer on top of stack of inactive pages." + theIPPtr := thePage = stackPage ifFalse: [thePage headSP asUnsignedInteger]. + [self assert: (thePage addressIsInPage: theFP). + self assert: (theIPPtr isNil or: [thePage addressIsInPage: theIPPtr asVoidPointer]). + oop := stackPages longAt: theFP + FoxReceiver. + (objectMemory isOopForwarded: oop) ifTrue: + [stackPages + longAt: theFP + FoxReceiver + put: (objectMemory followForwarded: oop)]. + ((self frameHasContext: theFP) + and: [(objectMemory isForwarded: (self frameContext: theFP))]) ifTrue: + [stackPages + longAt: theFP + FoxThisContext + put: (objectMemory followForwarded: (self frameContext: theFP))]. + oop := self frameMethod: theFP. + (objectMemory isForwarded: oop) ifTrue: + [| newOop delta | + newOop := objectMemory followForwarded: oop. + theIPPtr ifNotNil: + [self assert: (stackPages longAt: theIPPtr) > (self frameMethod: theFP). + delta := newOop - oop. + stackPages + longAt: theIPPtr + put: (stackPages longAt: theIPPtr) + delta]. + stackPages + longAt: theFP + FoxMethod + put: (oop := newOop)]. + offset := self frameStackedReceiverOffset: theFP. + oop := stackPages longAt: theFP + offset. + (objectMemory isOopForwarded: oop) ifTrue: + [stackPages + longAt: theFP + offset + put: (objectMemory followForwarded: oop)]. + (callerFP := self frameCallerFP: theFP) ~= 0] whileTrue: + [theIPPtr := (theFP + FoxCallerSavedIP) asUnsignedInteger. + theFP := callerFP]. + "And finally follow the caller context." + self assert: theFP = thePage baseFP. + oop := self frameCallerContext: theFP. + (objectMemory isForwarded: oop) ifTrue: + [self frameCallerContext: theFP put: (objectMemory followForwarded: oop)]]]!
Item was changed: ----- Method: StackInterpreter>>spurPostBecomeAction: (in category 'object memory support') ----- spurPostBecomeAction: theBecomeEffectsFlags "Insulate the stack zone from the effects of a become. All receivers must be unfollowed for two reasons: 1. inst var access is direct with no read barrier 2. super sends (always to the receiver) have no class check and so don't trap for forwarded receivers. This is an issue for primitives that assume their receiver is valid and don't validate. Super sends require an explicit check to ensure receivers in super sends are unforwarded. e.g. super doSomethingWith: (self become: other) forwards the receiver self pushed on the stack. So we could avoid following non-pointer receivers. But this is too tricky, Instead, we always follow receivers. Methods must be unfollowed since bytecode access is direct with no read barrier. But this only needs to be done if the becomeEffectsFlags indicate that a CompiledMethod was becommed. The scheduler state must be followed, but only if the becomeEffectsFlags indicate that a pointer object was becommed." <option: #SpurObjectMemory> <inline: false> "For VM profiling" self flushAtCache. theBecomeEffectsFlags ~= 0 ifTrue: [(theBecomeEffectsFlags anyMask: BecameActiveClassFlag) ifTrue: [self flushBecommedClassesInMethodCache]. (theBecomeEffectsFlags anyMask: BecamePointerObjectFlag) ifTrue: [self followForwardingPointersInScheduler. self followForwardingPointersInSpecialObjectsArray]. (theBecomeEffectsFlags anyMask: BecamePointerObjectFlag + BecameCompiledMethodFlag) ifTrue: [self followForwardingPointersInProfileState. (theBecomeEffectsFlags anyMask: BecameCompiledMethodFlag) ifTrue: [self followForwardedMethodsInMethodCache. self followMethodNewMethodAndInstructionPointer]]]. "There are two scans of the stack zone post become, and three cases to consider. There is no way of naming an indirection vector in a context/stack frame, so if the GC is not incremental (if incremental compaction is not done), indirection vectors should never be forwarded. Yes, one could forward explicitly via thisContext, but we copnsider that shooting onesself in the foot. If the GC is incremental then indirection vectors can be forwarded. To cope with this we can either have an explicit read barrier (TempVectReadBarrier) or we can follow temporary variables as well as the receiver. Performance measurements indicate that following tempoiraries as well as the method and receiver won't increase the time spent in become very much. So we implement both and will decide what's better when we can do real performance tests." objectMemory gc isIncremental ifTrue: [TempVectReadBarrier + ifTrue: [self followForwardingPointersOfReceiversInStackZone] + ifFalse: [self followForwardingPointersOfReceiverAndTemporariesInStackZone]] - ifTrue: [self followForwardingPointersInStackZone] - ifFalse: [self followReceiverAndTemporaryForwardingPointersInStackZone]] ifFalse: + [self followForwardingPointersOfReceiversInStackZone]! - [self followForwardingPointersInStackZone]!
Item was changed: ----- Method: VMMaker class>>generateSqueakSpur2PhaseIncrementalStack64VM (in category 'configurations') ----- generateSqueakSpur2PhaseIncrementalStack64VM "No primitives since we can use those from the Cog VM" ^VMMaker generate: StackInterpreter with: #(ObjectMemory Spur64BitMemoryManager gcClass SpurIncremental2PhaseGarbageCollector FailImbalancedPrimitives false MULTIPLEBYTECODESETS true + TempVectReadBarrier false - TempVectReadBarrier true bytecodeTableInitializer initializeBytecodeTableForSqueakV3PlusClosuresSistaV1Hybrid) to: self sourceTree, '/src/spur64.stack' platformDir: self sourceTree, '/platforms' including: #()!
Item was changed: ----- Method: VMMaker class>>generateSqueakSpurIncrementalCog64VM (in category 'configurations') ----- generateSqueakSpurIncrementalCog64VM "No primitives since we can use those for the Cog VM" ^VMMaker generate: CoInterpreter and: StackToRegisterMappingCogit with: #(ObjectMemory Spur64BitCoMemoryManager MULTIPLEBYTECODESETS true + TempVectReadBarrier false - TempVectReadBarrier true - gcClass SpurIncrementalGarbageCollector bytecodeTableInitializer initializeBytecodeTableForSqueakV3PlusClosuresSistaV1Hybrid) to: self sourceTree, '/src/spur64.cog' platformDir: self sourceTree, '/platforms' including:#()!
Item was changed: ----- Method: VMMaker class>>generateSqueakSpurIncrementalStack64VM (in category 'configurations') ----- generateSqueakSpurIncrementalStack64VM "No primitives since we can use those from the Cog VM" ^VMMaker generate: StackInterpreter with: #(ObjectMemory Spur64BitMemoryManager FailImbalancedPrimitives false MULTIPLEBYTECODESETS true + TempVectReadBarrier false - TempVectReadBarrier true gcClass SpurIncrementalGarbageCollector bytecodeTableInitializer initializeBytecodeTableForSqueakV3PlusClosuresSistaV1Hybrid) to: self sourceTree, '/src/spur64.stack' platformDir: self sourceTree, '/platforms' including: #()!
vm-dev@lists.squeakfoundation.org