[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