VM Maker: VMMaker.oscog-eem.2791.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

VM Maker: VMMaker.oscog-eem.2791.mcz

commits-2
 
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2791.mcz

==================== Summary ====================

Name: VMMaker.oscog-eem.2791
Author: eem
Time: 19 August 2020, 6:21:04.014485 pm
UUID: 04cdce33-b4a9-4acb-982e-ed9393a1783b
Ancestors: VMMaker.oscog-eem.2790

Looking at class indentityHash distributions in my current VMMaker image it is clear that setting the classTableIndex to point at the start of the last used page is not a good strategy, and leads to far too sparse a class table.  So change the policy and set the classTableIndex to the first unused slot (unless bootstrapping).

=============== Diff against VMMaker.oscog-eem.2790 ===============

Item was changed:
  ----- Method: SpurMemoryManager>>setHiddenRootsObj: (in category 'class table') -----
  setHiddenRootsObj: anOop
  hiddenRootsObj := anOop.
  self cCode: [self assert: self validClassTableRootPages]
  inSmalltalk: [numClassTablePages ifNotNil:
  [self assert: self validClassTableRootPages]].
  classTableFirstPage := self fetchPointer: 0 ofObject: hiddenRootsObj.
  self assert: (self numSlotsOf: classTableFirstPage) - 1 = self classTableMinorIndexMask.
  "Hack fix.  A bug in markAndTraceClassOf: caused the class of the first class table page
  to be changed from its pun.  This can be restored manually, but we do it here too."
  self flag: 'remove at some stage'.
  (self classIndexOf: classTableFirstPage) ~= self arrayClassIndexPun ifTrue:
  [self setClassIndexOf: classTableFirstPage to: self arrayClassIndexPun].
- "Set classTableIndex to the start of the last used page (excepting first page).
- Set numClassTablePages to the number of used pages."
  numClassTablePages := self classTableRootSlots.
+ self bootstrapping ifTrue:
+ ["Set classTableIndex to the start of the last used page (excepting first page).
+  Set numClassTablePages to the number of used pages."
+ 2 to: numClassTablePages - 1 do:
+ [:i|
+ (self fetchPointer: i ofObject: hiddenRootsObj) = nilObj ifTrue:
+ [numClassTablePages := i.
+ classTableIndex := (i - 1 max: 1) << self classTableMajorIndexShift.
+ ^self]].
+ "no unused pages; set it to the start of the second page."
+ classTableIndex := 1 << self classTableMajorIndexShift.
+ ^self].
+ "If loading an image, set the classTableIndex to the first unused slot in the class table after the first page.
+ Set numClassTablePages to the number of used pages.
+ Set classTableIndex to point at the first unused entry. First set it to the max as a sentinel."
+ classTableIndex := numClassTablePages << self classTableMajorIndexShift.
+ 1 to: numClassTablePages - 1 do:
+ [:i| | page j |
+ (page := self fetchPointer: i ofObject: hiddenRootsObj) = nilObj
+ ifFalse:
+ [classTableIndex >> self classTableMajorIndexShift > i ifTrue:
+ [j := 0.
+ [j < self classTablePageSize] whileTrue:
+ [(self fetchPointer: j ofObject: page) = nilObj ifTrue:
+ [classTableIndex := i << self classTableMajorIndexShift + j.
+ j := self classTablePageSize].
+ j := j + 1]]]
+ ifTrue:
+ [classTableIndex >> self classTableMajorIndexShift > i ifTrue:
+ [classTableIndex := (i - 1 max: 1) << self classTableMajorIndexShift].
+ numClassTablePages := i.
+ self assert: (self classOrNilAtIndex: classTableIndex) = nilObj.
+ ^self]].
+ "no unused slots; set it to the start of the second page."
+ classTableIndex >> self classTableMajorIndexShift >= numClassTablePages ifTrue:
+ [classTableIndex := 1 << self classTableMajorIndexShift].
+ self assert: (self classOrNilAtIndex: classTableIndex) = nilObj!
- 2 to: numClassTablePages - 1 do:
- [:i|
- (self fetchPointer: i ofObject: hiddenRootsObj) = nilObj ifTrue:
- [numClassTablePages := i.
- classTableIndex := (numClassTablePages - 1 max: 1) << self classTableMajorIndexShift.
- ^self]].
- "no unused pages; set it to the start of the second page."
- classTableIndex := 1 << self classTableMajorIndexShift!