Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.3252.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.3252 Author: eem Time: 5 September 2022, 12:02:57.424605 pm UUID: 5066f56e-737f-44de-a9a8-91e1670f9fc0 Ancestors: VMMaker.oscog-nice.3251
Integrate a couple of fixes/clean-ups from the incremental GC branch.
=============== Diff against VMMaker.oscog-nice.3251 ===============
Item was changed: ----- Method: SpurMemoryManager>>addToFreeTree:bytes: (in category 'free space') ----- addToFreeTree: freeChunk bytes: chunkBytes "Add freeChunk to the large free chunk tree. For the benefit of sortedFreeObject:, answer the treeNode it is added to, if it is added to the next list of a freeTreeNode, otherwise answer 0." | childBytes parent child | + self initFreeTreeChunk: freeChunk bytes: chunkBytes. - self assert: (self isFreeObject: freeChunk). - self assert: chunkBytes = (self bytesInBody: freeChunk). - self assert: chunkBytes >= (self numFreeLists * self allocationUnit). - self - storePointer: self freeChunkNextIndex ofFreeChunk: freeChunk withValue: 0; - storePointer: self freeChunkPrevIndex ofFreeChunk: freeChunk withValue: 0; - storePointer: self freeChunkParentIndex ofFreeChunk: freeChunk withValue: 0; - storePointer: self freeChunkSmallerIndex ofFreeChunk: freeChunk withValue: 0; - storePointer: self freeChunkLargerIndex ofFreeChunk: freeChunk withValue: 0. "Large chunk list organized as a tree, each node of which is a list of chunks of the same size. Beneath the node are smaller and larger blocks." parent := 0. child := freeLists at: 0. [child ~= 0] whileTrue: [childBytes := self bytesInBody: child. "check for overlap; could write this as self oop: (self objectAfter: freeChunk) isLessThanOrEqualTo: child... but that relies on headers being correct, etc. So keep it clumsy..." self assert: ((self oop: freeChunk + chunkBytes - self baseHeaderSize isLessThanOrEqualTo: child) or: [self oop: freeChunk isGreaterThanOrEqualTo: child + childBytes - self baseHeaderSize]). childBytes = chunkBytes ifTrue: "size match; add to list at node." [self setNextFreeChunkOf: freeChunk withValue: (self fetchPointer: self freeChunkNextIndex ofFreeChunk: child) isLilliputianSize: false. self setNextFreeChunkOf: child withValue: freeChunk isLilliputianSize: false. ^child]. "walk down the tree" parent := child. child := self fetchPointer: (childBytes > chunkBytes ifTrue: [self freeChunkSmallerIndex] ifFalse: [self freeChunkLargerIndex]) ofFreeChunk: child]. parent = 0 ifTrue: [self assert: (freeLists at: 0) = 0. freeLists at: 0 put: freeChunk. freeListsMask := freeListsMask bitOr: 1. ^0]. self assert: (freeListsMask anyMask: 1). "insert in tree" self storePointer: self freeChunkParentIndex ofFreeChunk: freeChunk withValue: parent. self storePointer: (childBytes > chunkBytes ifTrue: [self freeChunkSmallerIndex] ifFalse: [self freeChunkLargerIndex]) ofFreeChunk: parent withValue: freeChunk. ^0!
Item was changed: ----- Method: SpurMemoryManager>>indexOf:in: (in category 'debug support') ----- indexOf: anElement in: anObject <api> | fmt numSlots | fmt := self formatOf: anObject.
fmt <= self lastPointerFormat ifTrue: [numSlots := self numSlotsOf: anObject. 0 to: numSlots do: [:i| anElement = (self fetchPointer: i ofMaybeForwardedObject: anObject) ifTrue: [^i]]. -1].
fmt >= self firstByteFormat ifTrue: [fmt >= self firstCompiledMethodFormat ifTrue: [^self primitiveFailFor: PrimErrUnsupported]. numSlots := self numBytesOfBytes: anObject. 0 to: numSlots do: + [:i| anElement = (self fetchByte: i ofObject: anObject) ifTrue: [^i]]. - [:i| (self fetchByte: i ofObject: anObject) ifTrue: [^i]]. -1].
fmt >= self firstShortFormat ifTrue: [numSlots := self num16BitUnitsOf: anObject. 0 to: numSlots do: [:i| anElement = (self fetchUnsignedShort16: i ofObject: anObject) ifTrue: [^i]]. -1].
fmt = self sixtyFourBitIndexableFormat ifTrue: [numSlots := self num64BitUnitsOf: anObject. 0 to: numSlots do: [:i| anElement = (self fetchLong64: i ofObject: anObject) ifTrue: [^i]]. -1].
fmt >= self firstLongFormat ifTrue: [numSlots := self num32BitUnitsOf: anObject. 0 to: numSlots do: [:i| anElement = (self fetchLong32: i ofObject: anObject) ifTrue: [^i]]. -1].
^-1!
Item was added: + ----- Method: SpurMemoryManager>>initFreeTreeChunk:bytes: (in category 'free space') ----- + initFreeTreeChunk: freeChunk bytes: chunkBytes + + self assert: (self isFreeObject: freeChunk). + self assert: chunkBytes = (self bytesInBody: freeChunk). + self assert: chunkBytes >= (self numFreeLists * self allocationUnit). + self + storePointer: self freeChunkNextIndex ofFreeChunk: freeChunk withValue: 0; + storePointer: self freeChunkPrevIndex ofFreeChunk: freeChunk withValue: 0; + storePointer: self freeChunkParentIndex ofFreeChunk: freeChunk withValue: 0; + storePointer: self freeChunkSmallerIndex ofFreeChunk: freeChunk withValue: 0; + storePointer: self freeChunkLargerIndex ofFreeChunk: freeChunk withValue: 0. + !
vm-dev@lists.squeakfoundation.org