Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.3198.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.3198 Author: eem Time: 21 June 2022, 4:56:02.230689 pm UUID: 10ccdad4-5851-42c4-9d31-841e6eafc085 Ancestors: VMMaker.oscog-eem.3197
Implement the missing Spur32BitMemoryManager>>instantiateUninitializedClass:indexableSize:. Nuke an unused temp in the 64-bit dual. No need to support instantiating pointer classes with zero indexable fields here.
=============== Diff against VMMaker.oscog-eem.3197 ===============
Item was added: + ----- Method: Spur32BitMemoryManager>>instantiateUninitializedClass:indexableSize: (in category 'instantiation') ----- + instantiateUninitializedClass: classObj indexableSize: nElements + <api> + <var: #nElements type: #usqInt> + "Allocate an instance of a variable class, excepting CompiledMethod." + | instSpec classFormat numSlots classIndex newObj | + classFormat := self formatOfClass: classObj. + instSpec := self instSpecOfClassFormat: classFormat. + classIndex := self rawHashBitsOf: classObj. + self assert: (self isPureBitsFormat: instSpec). + instSpec caseOf: { + [self sixtyFourBitIndexableFormat] -> + [nElements > (self maxSlotsForAlloc / 2) ifTrue: + [coInterpreter primitiveFailFor: PrimErrUnsupported. + ^nil]. + numSlots := nElements * 2]. + [self firstLongFormat] -> + [(classIndex = ClassFloatCompactIndex and: [nElements ~= 2]) ifTrue: + [coInterpreter primitiveFailFor: PrimErrBadReceiver. + ^nil]. + numSlots := nElements]. + [self firstShortFormat] -> + [numSlots := nElements + 1 // 2. + instSpec := instSpec + (nElements bitAnd: 1)]. + [self firstByteFormat] -> + [numSlots := nElements + 3 // 4. + instSpec := instSpec + (4 - nElements bitAnd: 3)] } + otherwise: "not bits indexable" + [coInterpreter primitiveFailFor: PrimErrBadReceiver. + ^nil]. + classIndex = 0 ifTrue: + [classIndex := self ensureBehaviorHash: classObj. + classIndex < 0 ifTrue: + [coInterpreter primitiveFailFor: classIndex negated. + ^nil]]. + numSlots > self maxSlotsForNewSpaceAlloc + ifTrue: + [numSlots > self maxSlotsForAlloc ifTrue: + [coInterpreter primitiveFailFor: PrimErrUnsupported. + ^nil]. + newObj := self allocateSlotsInOldSpace: numSlots format: instSpec classIndex: classIndex] + ifFalse: + [newObj := self allocateSlots: numSlots format: instSpec classIndex: classIndex]. + ^newObj!
Item was changed: ----- Method: Spur64BitMemoryManager>>instantiateUninitializedClass:indexableSize: (in category 'instantiation') ----- instantiateUninitializedClass: classObj indexableSize: nElements <api> <var: #nElements type: #usqInt> "Allocate an instance of a variable class, excepting CompiledMethod." + | instSpec classFormat numSlots classIndex newObj | - | instSpec classFormat numSlots classIndex newObj fillValue | classFormat := self formatOfClass: classObj. instSpec := self instSpecOfClassFormat: classFormat. classIndex := self rawHashBitsOf: classObj. - fillValue := 0. self assert: (self isPureBitsFormat: instSpec). instSpec caseOf: { [self sixtyFourBitIndexableFormat] -> [numSlots := nElements]. [self firstLongFormat] -> [(classIndex = ClassFloatCompactIndex and: [nElements ~= 2]) ifTrue: [coInterpreter primitiveFailFor: PrimErrBadReceiver. ^nil]. numSlots := nElements + 1 // 2. instSpec := instSpec + (nElements bitAnd: 1)]. [self firstShortFormat] -> [numSlots := nElements + 3 // 4. instSpec := instSpec + (4 - nElements bitAnd: 3)]. [self firstByteFormat] -> [numSlots := nElements + 7 // 8. instSpec := instSpec + (8 - nElements bitAnd: 7)] } + otherwise: "not bits indexable" + [coInterpreter primitiveFailFor: PrimErrBadReceiver. + ^nil]. - otherwise: "non-indexable" - ["Some Squeak images include funky fixed subclasses of abstract variable - superclasses. e.g. DirectoryEntry as a subclass of ArrayedCollection. - The (Threaded)FFIPlugin expects to be able to instantiate ExternalData via - this method. - Hence allow fixed classes to be instantiated here iff nElements = 0." - (nElements ~= 0 or: [instSpec > self lastPointerFormat]) ifTrue: - [^nil]. - numSlots := self fixedFieldsOfClassFormat: classFormat. - fillValue := nilObj]. classIndex = 0 ifTrue: [classIndex := self ensureBehaviorHash: classObj. classIndex < 0 ifTrue: [coInterpreter primitiveFailFor: classIndex negated. ^nil]]. numSlots > self maxSlotsForNewSpaceAlloc ifTrue: [numSlots > self maxSlotsForAlloc ifTrue: [coInterpreter primitiveFailFor: PrimErrUnsupported. ^nil]. newObj := self allocateSlotsInOldSpace: numSlots format: instSpec classIndex: classIndex] ifFalse: [newObj := self allocateSlots: numSlots format: instSpec classIndex: classIndex]. ^newObj!
vm-dev@lists.squeakfoundation.org