[Vm-dev] VM Maker: VMMaker.oscog-eem.2239.mcz

commits at source.squeak.org commits at source.squeak.org
Fri Jun 9 22:28:33 UTC 2017


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

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

Name: VMMaker.oscog-eem.2239
Author: eem
Time: 9 June 2017, 3:27:37.066085 pm
UUID: 1ce7aaee-c3f3-4e1e-b79b-18b2b0557940
Ancestors: VMMaker.oscog-cb.2238

Simulator:
Fix a bad bug with the simulation of the remembered set in 64-bits; they type for rememberedSet was ending up as int *.  It must be int * on 32-bits but long long * on 64-bits.

Add indexInRememberedSet: and an accessor for rememberedSet.

Fix some spelling errors.

=============== Diff against VMMaker.oscog-cb.2238 ===============

Item was changed:
  ----- Method: CArray>>coerceTo:sim: (in category 'converting') -----
  coerceTo: cTypeString sim: interpreterSimulator
  
  	^cTypeString caseOf: {
  		['int']				-> [self ptrAddress].
  		['float *']			-> [self asSingleFloatAccessor].
  		['double *']			-> [self asDoubleFloatAccessor].
+ 		['sqInt *']			-> [self shallowCopy unitSize: interpreter bytesPerOop; yourself].
  		['unsigned int *']	-> [self shallowCopy unitSize: 4; yourself].
  		['int *']				-> [self shallowCopy unitSize: 4; yourself].
  		['char *']			-> [self shallowCopy unitSize: 1; yourself].
  		['unsigned char *']	-> [self shallowCopy unitSize: 1; yourself].
+ 		['unsigned']		-> [self ptrAddress].
- 		['unsigned']			-> [self ptrAddress].
  		['sqInt']				-> [self ptrAddress].
  		['usqInt']			-> [self ptrAddress] }!

Item was changed:
  ----- Method: Integer>>coerceTo:sim: (in category '*VMMaker-interpreter simulator') -----
  coerceTo: cTypeString sim: interpreter
  
  	| unitSize |
  	cTypeString last = $* ifTrue:  "C pointer"
  		[unitSize := cTypeString caseOf: {
  		['char *'] -> [1].
  		['short *'] -> [2].
  		['int *'] -> [4].
+ 		['long long *'] -> [8].
  		['float *'] -> [^CFloatArray basicNew interpreter: interpreter address: self unitSize: 4; yourself].
  		['double *'] -> [^CFloatArray basicNew interpreter: interpreter address: self unitSize: 8; yourself].
  		['unsigned *'] -> [4].
  		['unsigned int *'] -> [4].
  		['unsigned char *'] -> [1].
  		['signed char *'] -> [1].
  		['unsigned short *'] -> [2].
+ 		['unsigned long long *'] -> [8].
  		['oop *'] -> [interpreter bytesPerOop].
  		}
  		otherwise: [interpreter wordSize].
  		^CArray basicNew
  			interpreter: interpreter address: self unitSize: unitSize;
  			yourself].
  	^self  "C number (int, char, float, etc)"!

Item was added:
+ ----- Method: SpurGenerationScavenger>>indexInRememberedSet: (in category 'store check') -----
+ indexInRememberedSet: objOop
+ 	<doNotGenerate>
+ 	0 to: rememberedSetSize - 1 do:
+ 		[:i|
+ 		(rememberedSet at: i) = objOop ifTrue:
+ 			[^i]].
+ 	^nil!

Item was changed:
  ----- Method: SpurGenerationScavenger>>initializeRememberedSet (in category 'initialization') -----
  initializeRememberedSet
  	| obj |
  	obj := manager rememberedSetObj.
+ 	obj = manager nilObject
+ 		ifTrue:
+ 			[obj := manager allocatePinnedSlots: 1024.
+ 			 manager rememberedSetObj: obj]
+ 		ifFalse: "The Spur32to64BitBootstrap failed to set the type of rememberedSetObj to 64-bit indexability.
+ 				 This is unimportant except for simulation; rememberedSet is declared as sqInt *, but in to have
+ 				 firstIndexableField: below answer a suitable type the format must be wordIndexableFormat."
+ 			[manager setFormatOf: obj to: manager wordIndexableFormat].
+ 	self assert: (manager formatOf: obj) = manager wordIndexableFormat.
+ 	self assert: (manager isPinned: obj).
- 	obj = manager nilObject ifTrue:
- 		[obj := manager allocatePinnedSlots: 1024.
- 		 manager rememberedSetObj: obj].
  	rememberedSet := manager firstIndexableField: obj.
  	rememberedSetSize := 0.
  	rememberedSetLimit := manager numSlotsOf: obj.
  	self setRememberedSetRedZone!

Item was changed:
  ----- Method: SpurGenerationScavenger>>relocateRememberedSet (in category 'remembered set') -----
  relocateRememberedSet
+ 	"For SpurPlanningCompactor"
- 	"For SpurPanningCompactor"
  	rememberedSet := manager firstIndexableField: manager rememberedSetObj!

Item was added:
+ ----- Method: SpurGenerationScavengerSimulator>>rememberedSet (in category 'accessing') -----
+ rememberedSet
+ 	^rememberedSet!

Item was changed:
  ----- Method: SpurMemoryManager>>relocateObjStackForPlanningCompactor: (in category 'compaction') -----
  relocateObjStackForPlanningCompactor: objStack
+ 	"Relocate all objStack pages that comprise objStack."
- 	"Relocate all objStack pages that cmprise objStack."
  	| stackOrNil freeList next relocated result |
  	objStack = nilObj ifTrue:
  		[^objStack].
  	stackOrNil := objStack.
  	freeList := self fetchPointer: ObjStackFreex ofObject: objStack.
  	[self assert: (self numSlotsOfAny: stackOrNil) = ObjStackPageSlots.
  	 "There are four fixed slots in an obj stack, and a Topx of 0 indicates empty, so
  	   if there were 5 slots in an oop stack, full would be 2, and the last 0-rel index is 4.
  	   Hence the last index is topx + fixed slots - 1, or topx + ObjStackNextx"
  	 next := self fetchPointer: ObjStackNextx ofObject: stackOrNil.
  	 relocated := compactor
  					relocateObjectsInHeapEntity: stackOrNil
  					from: ObjStackFreex
  					to: ObjStackNextx + (self rawHashBitsOf: stackOrNil).
  	 stackOrNil = objStack ifTrue:
  		[result := relocated].
  	 self setHashBitsOf: stackOrNil to: 0.
  	 next ~= 0]
  		whileTrue:
  			[stackOrNil := next].
  	[freeList ~= 0] whileTrue:
  		[self assert: (self numSlotsOfAny: freeList) = ObjStackPageSlots.
  		 next := self fetchPointer: ObjStackFreex ofObject: freeList.
  		 compactor
  			relocateObjectsInHeapEntity: freeList
  			from: ObjStackFreex
  			to: ObjStackFreex.
  		 freeList := next].
  	^relocated!

Item was changed:
  ----- Method: SpurPlanningCompactor>>updatePointersInManagerHeapEntities (in category 'compaction') -----
  updatePointersInManagerHeapEntities
  	"The special non-pointer objects containing pointers, which are the objStacks and the rememberedSet,
+ 	 must be updated manually since they will not be recognized as containing pointers in the normal sweep."
- 	 must be updated manually sicme they will not be recognized as containing pointers in the normal sweep."
  	manager relocateObjStacksForPlanningCompactor.
  	(scavenger rememberedSetSize > 0
  	 and: [self isMobile: firstFieldOfRememberedSet]) ifTrue:
  		[firstFieldOfRememberedSet := manager fetchPointer: 0 ofObject: firstFieldOfRememberedSet].
  	self relocateObjectsInHeapEntity: manager rememberedSetObj from: 1 to: scavenger rememberedSetSize - 1
  	"Note that we /must not/ set the rememberedSetObj here since it is a slot in the hiddenRootsObj
  	 and will be updated normally in updatePointersInInitialImmobileObjects.  So do not do
  	(self isMobile: manager rememberedSetObj) ifTrue:
  		[manager rememberedSetObj: (manager fetchPointer: 0 ofObject: manager rememberedSetObj)]"!



More information about the Vm-dev mailing list