Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog.seperateMarking-eem.3223.mcz
==================== Summary ====================
Name: VMMaker.oscog.seperateMarking-eem.3223 Author: eem Time: 26 July 2022, 4:23:03.599542 pm UUID: 683d584f-0293-49e3-8fc7-b045d8d09a88 Ancestors: VMMaker.oscog.seperateMarking-WoC.3222
Nuke the older named primitiveNewPinnedInOldSpace & primitiveNewWithArgUninitialized. Categorize all the instantiation primitives under "instantiation primitives".
=============== Diff against VMMaker.oscog.seperateMarking-WoC.3222 ===============
Item was changed: SystemOrganization addCategory: #'VMMaker-Building'! SystemOrganization addCategory: #'VMMaker-Interpreter'! SystemOrganization addCategory: #'VMMaker-InterpreterSimulation'! SystemOrganization addCategory: #'VMMaker-JIT'! SystemOrganization addCategory: #'VMMaker-JITSimulation'! SystemOrganization addCategory: #'VMMaker-Multithreading'! SystemOrganization addCategory: #'VMMaker-Plugins'! SystemOrganization addCategory: #'VMMaker-Plugins-FFI'! SystemOrganization addCategory: #'VMMaker-Plugins-IOS'! SystemOrganization addCategory: #'VMMaker-PostProcessing'! SystemOrganization addCategory: #'VMMaker-SmartSyntaxPlugins'! SystemOrganization addCategory: #'VMMaker-SpurMemoryManager'! SystemOrganization addCategory: #'VMMaker-SpurMemoryManagerSimulation'! + SystemOrganization addCategory: #'VMMaker-V3MemoryManager'! SystemOrganization addCategory: #'VMMaker-Support'! SystemOrganization addCategory: #'VMMaker-Tests'! SystemOrganization addCategory: #'VMMaker-Translation to C'! SystemOrganization addCategory: #'VMMaker-Utilities'! - SystemOrganization addCategory: #'VMMaker-V3MemoryManager'!
Item was changed: + ----- Method: InterpreterPrimitives>>primitiveClone (in category 'instantiation primitives') ----- - ----- Method: InterpreterPrimitives>>primitiveClone (in category 'object access primitives') ----- primitiveClone "Return a shallow copy of the receiver."
| rcvr newCopy | rcvr := self stackTop. (objectMemory isImmediate: rcvr) ifTrue: [newCopy := rcvr] ifFalse: [(argumentCount = 0 or: [(objectMemory isForwarded: rcvr) not]) ifTrue: [newCopy := objectMemory cloneObject: rcvr] ifFalse: [newCopy := 0]. newCopy = 0 ifTrue: "not enough memory most likely" [^self primitiveFail]]. self pop: argumentCount + 1 thenPush: newCopy!
Item was changed: + ----- Method: InterpreterPrimitives>>primitiveNew (in category 'instantiation primitives') ----- - ----- Method: InterpreterPrimitives>>primitiveNew (in category 'object access primitives') ----- primitiveNew NewspeakVM ifTrue: "For the mirror prims check that the class obj is actually a valid class." [(argumentCount < 1 or: [self objCouldBeClassObj: self stackTop]) ifFalse: [^self primitiveFailFor: PrimErrBadArgument]]. objectMemory hasSpurMemoryManagerAPI ifTrue: ["Allocate a new fixed-size instance. Fail if the allocation would leave less than lowSpaceThreshold bytes free. This *will not* cause a GC :-)" (objectMemory instantiateClass: self stackTop) ifNotNil: [:obj| self pop: argumentCount + 1 thenPush: obj] ifNil: [self primitiveFailFor: ((objectMemory isFixedSizePointerFormat: (objectMemory instSpecOfClass: self stackTop)) ifTrue: [PrimErrNoMemory] ifFalse: [PrimErrBadReceiver])]] ifFalse: ["Allocate a new fixed-size instance. Fail if the allocation would leave less than lowSpaceThreshold bytes free. May cause a GC." | spaceOkay | "The following may cause GC!! Use var for result to permit inlining." spaceOkay := objectMemory sufficientSpaceToInstantiate: self stackTop indexableSize: 0. spaceOkay ifTrue: [self pop: argumentCount + 1 thenPush: (objectMemory instantiateClass: self stackTop indexableSize: 0)] ifFalse: [self primitiveFailFor: PrimErrNoMemory]]!
Item was changed: + ----- Method: InterpreterPrimitives>>primitiveNewMethod (in category 'instantiation primitives') ----- - ----- Method: InterpreterPrimitives>>primitiveNewMethod (in category 'compiled methods') ----- primitiveNewMethod | header bytecodeCount class size theMethod literalCount | header := self stackTop. bytecodeCount := self stackValue: 1. ((objectMemory isIntegerObject: header) and: [(objectMemory isIntegerObject: bytecodeCount) and: [(bytecodeCount := objectMemory integerValueOf: bytecodeCount) >= 0]]) ifFalse: [self primitiveFailFor: PrimErrBadArgument. ^self]. class := self stackValue: 2. literalCount := objectMemory literalCountOfMethodHeader: header. size := literalCount + LiteralStart * objectMemory bytesPerOop + bytecodeCount. objectMemory hasSpurMemoryManagerAPI ifTrue: [theMethod := objectMemory instantiateCompiledMethodClass: class indexableSize: size. theMethod ifNil: [self primitiveFailFor: ((objectMemory isCompiledMethodFormat: (objectMemory instSpecOfClass: class)) ifTrue: [PrimErrNoMemory] ifFalse: [PrimErrBadReceiver]). ^self]] ifFalse: [theMethod := objectMemory instantiateClass: class indexableSize: size]. objectMemory storePointerUnchecked: HeaderIndex ofObject: theMethod withValue: header. 1 to: literalCount do: [:i | objectMemory storePointerUnchecked: i ofObject: theMethod withValue: objectMemory nilObject]. self pop: 3 thenPush: theMethod!
Item was removed: - ----- Method: InterpreterPrimitives>>primitiveNewPinnedInOldSpace (in category 'object access primitives') ----- - primitiveNewPinnedInOldSpace - NewspeakVM ifTrue: "For the mirror prims check that the class obj is actually a valid class." - [(argumentCount < 1 - or: [self objCouldBeClassObj: self stackTop]) ifFalse: - [^self primitiveFailFor: PrimErrBadArgument]]. - objectMemory hasSpurMemoryManagerAPI - ifTrue: - ["Allocate a new fixed-size instance. Fail if the allocation would leave - less than lowSpaceThreshold bytes free. This *will not* cause a GC :-)" - (objectMemory instantiateClass: self stackTop) - ifNotNil: [:obj| self pop: argumentCount + 1 thenPush: obj] - ifNil: [self primitiveFailFor: ((objectMemory isFixedSizePointerFormat: (objectMemory instSpecOfClass: self stackTop)) - ifTrue: [PrimErrNoMemory] - ifFalse: [PrimErrBadReceiver])]] - ifFalse: - ["Allocate a new fixed-size instance. Fail if the allocation would leave - less than lowSpaceThreshold bytes free. May cause a GC." - | spaceOkay | - "The following may cause GC!! Use var for result to permit inlining." - spaceOkay := objectMemory - sufficientSpaceToInstantiate: self stackTop - indexableSize: 0. - spaceOkay - ifTrue: - [self - pop: argumentCount + 1 - thenPush: (objectMemory - instantiateClass: self stackTop - indexableSize: 0)] - ifFalse: [self primitiveFailFor: PrimErrNoMemory]]!
Item was changed: + ----- Method: InterpreterPrimitives>>primitiveNewWithArg (in category 'instantiation primitives') ----- - ----- Method: InterpreterPrimitives>>primitiveNewWithArg (in category 'object access primitives') ----- primitiveNewWithArg "Allocate a new indexable instance. Fail if the allocation would leave less than lowSpaceThreshold bytes free. May cause a GC." | size spaceOkay instSpec | NewspeakVM ifTrue: "For the mirror prims check that the class obj is actually a valid class." [(argumentCount < 2 or: [self addressCouldBeClassObj: (self stackValue: 1)]) ifFalse: [^self primitiveFailFor: PrimErrBadArgument]]. size := self positiveMachineIntegerValueOf: self stackTop. self successful ifFalse:"positiveMachineIntegerValueOf: succeeds only for non-negative integers." [^self primitiveFailFor: PrimErrBadArgument]. objectMemory hasSpurMemoryManagerAPI ifTrue: [(objectMemory instantiateClass: (self stackValue: 1) indexableSize: size) ifNotNil: [:obj| self pop: argumentCount + 1 thenPush: obj] ifNil: [instSpec := objectMemory instSpecOfClass: (self stackValue: 1). self primitiveFailFor: (((objectMemory isIndexableFormat: instSpec) and: [(objectMemory isCompiledMethodFormat: instSpec) not]) ifTrue: [PrimErrNoMemory] ifFalse: [PrimErrBadReceiver])]] ifFalse: [spaceOkay := objectMemory sufficientSpaceToInstantiate: (self stackValue: 1) indexableSize: size. spaceOkay ifTrue: [self pop: argumentCount + 1 thenPush: (objectMemory instantiateClass: (self stackValue: 1) indexableSize: size)] ifFalse: [self primitiveFailFor: PrimErrNoMemory]]!
Item was removed: - ----- Method: InterpreterPrimitives>>primitiveNewWithArgUninitialized (in category 'object access primitives') ----- - primitiveNewWithArgUninitialized - "Allocate a new indexable instance. Fail if the allocation would leave less than lowSpaceThreshold bytes free. May cause a GC." - | size spaceOkay instSpec | - NewspeakVM ifTrue: "For the mirror prims check that the class obj is actually a valid class." - [(argumentCount < 2 - or: [self addressCouldBeClassObj: (self stackValue: 1)]) ifFalse: - [^self primitiveFailFor: PrimErrBadArgument]]. - size := self positiveMachineIntegerValueOf: self stackTop. - self successful ifFalse:"positiveMachineIntegerValueOf: succeeds only for non-negative integers." - [^self primitiveFailFor: PrimErrBadArgument]. - objectMemory hasSpurMemoryManagerAPI - ifTrue: - [(objectMemory instantiateUninitializedClass: (self stackValue: 1) indexableSize: size) - ifNotNil: [:obj| self pop: argumentCount + 1 thenPush: obj] - ifNil: [instSpec := objectMemory instSpecOfClass: (self stackValue: 1). - self primitiveFailFor: (((objectMemory isIndexableFormat: instSpec) - and: [(objectMemory isCompiledMethodFormat: instSpec) not]) - ifTrue: [PrimErrNoMemory] - ifFalse: [PrimErrBadReceiver])]] - ifFalse: - [spaceOkay := objectMemory sufficientSpaceToInstantiate: (self stackValue: 1) indexableSize: size. - spaceOkay - ifTrue: - [self - pop: argumentCount + 1 - thenPush: (objectMemory instantiateClass: (self stackValue: 1) indexableSize: size)] - ifFalse: - [self primitiveFailFor: PrimErrNoMemory]]!
Item was changed: + ----- Method: InterpreterPrimitives>>primitivePinnedNew (in category 'instantiation primitives') ----- - ----- Method: InterpreterPrimitives>>primitivePinnedNew (in category 'object access primitives') ----- primitivePinnedNew NewspeakVM ifTrue: "For the mirror prims check that the class obj is actually a valid class." [(argumentCount < 1 or: [self objCouldBeClassObj: self stackTop]) ifFalse: [^self primitiveFailFor: PrimErrBadArgument]]. objectMemory hasSpurMemoryManagerAPI ifTrue: ["Allocate a new fixed-size instance. Fail if the allocation would leave less than lowSpaceThreshold bytes free. This *will not* cause a GC :-)" (objectMemory inOldSpaceInstantiatePinnedClass: self stackTop) ifNotNil: [:obj| self pop: argumentCount + 1 thenPush: obj] ifNil: [self primitiveFailFor: ((objectMemory isFixedSizePointerFormat: (objectMemory instSpecOfClass: self stackTop)) ifTrue: [PrimErrNoMemory] ifFalse: [PrimErrBadReceiver])]] ifFalse: [self primitiveFailFor: PrimErrUnsupported]!
Item was changed: + ----- Method: InterpreterPrimitives>>primitivePinnedNewWithArg (in category 'instantiation primitives') ----- - ----- Method: InterpreterPrimitives>>primitivePinnedNewWithArg (in category 'object access primitives') ----- primitivePinnedNewWithArg "Allocate a new pinned indexable instance. Fail if the allocation would leave less than lowSpaceThreshold bytes free." | size instSpec | NewspeakVM ifTrue: "For the mirror prims check that the class obj is actually a valid class." [(argumentCount < 2 or: [self addressCouldBeClassObj: (self stackValue: 1)]) ifFalse: [^self primitiveFailFor: PrimErrBadArgument]]. size := self positiveMachineIntegerValueOf: self stackTop. self successful ifFalse:"positiveMachineIntegerValueOf: succeeds only for non-negative integers." [^self primitiveFailFor: PrimErrBadArgument]. objectMemory hasSpurMemoryManagerAPI ifTrue: [(objectMemory inOldSpaceInstantiatePinnedClass: (self stackValue: 1) indexableSize: size) ifNotNil: [:obj| self pop: argumentCount + 1 thenPush: obj] ifNil: [instSpec := objectMemory instSpecOfClass: (self stackValue: 1). self primitiveFailFor: (((objectMemory isIndexableFormat: instSpec) and: [(objectMemory isCompiledMethodFormat: instSpec) not]) ifTrue: [PrimErrNoMemory] ifFalse: [PrimErrBadReceiver])]] ifFalse: [self primitiveFailFor: PrimErrUnsupported]!
Item was changed: + ----- Method: InterpreterPrimitives>>primitiveUninitializedNewWithArg (in category 'instantiation primitives') ----- - ----- Method: InterpreterPrimitives>>primitiveUninitializedNewWithArg (in category 'object access primitives') ----- primitiveUninitializedNewWithArg "Allocate a new indexable instance. Fail if the allocation would leave less than lowSpaceThreshold bytes free. May cause a GC." | size instSpec | NewspeakVM ifTrue: "For the mirror prims check that the class obj is actually a valid class." [(argumentCount < 2 or: [self addressCouldBeClassObj: (self stackValue: 1)]) ifFalse: [^self primitiveFailFor: PrimErrBadArgument]]. size := self positiveMachineIntegerValueOf: self stackTop. self successful ifFalse:"positiveMachineIntegerValueOf: succeeds only for non-negative integers." [^self primitiveFailFor: PrimErrBadArgument]. objectMemory hasSpurMemoryManagerAPI ifTrue: [(objectMemory instantiateUninitializedClass: (self stackValue: 1) indexableSize: size) ifNotNil: [:obj| self pop: argumentCount + 1 thenPush: obj] ifNil: [instSpec := objectMemory instSpecOfClass: (self stackValue: 1). self primitiveFailFor: (((objectMemory isIndexableFormat: instSpec) and: [(objectMemory isCompiledMethodFormat: instSpec) not]) ifTrue: [PrimErrNoMemory] ifFalse: [PrimErrBadReceiver])]] ifFalse: [self primitiveFailFor: PrimErrUnsupported]!
vm-dev@lists.squeakfoundation.org