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)]"! |
Free forum by Nabble | Edit this page |