Skip to content

Commit

Permalink
- Using masks everywhere
Browse files Browse the repository at this point in the history
 - Fixing tests
  • Loading branch information
tesonep committed May 3, 2022
1 parent 8e2eb70 commit ca911e6
Show file tree
Hide file tree
Showing 8 changed files with 76 additions and 48 deletions.
14 changes: 9 additions & 5 deletions smalltalksrc/VMMaker/SpurMemoryManager.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -1979,7 +1979,7 @@ SpurMemoryManager >> allocateMemoryOfSize: memoryBytes newSpaceSize: newSpaceByt
will be set to sane values."
<doNotGenerate>
| vmMemoryConf |
| vmMemoryConf newSpaceActualBytes |
self assert: (memoryBytes \\ self allocationUnit = 0 and: [
newSpaceBytes \\ self allocationUnit = 0 and: [
Expand All @@ -2001,17 +2001,21 @@ SpurMemoryManager >> allocateMemoryOfSize: memoryBytes newSpaceSize: newSpaceByt
initialPermSpaceSize: permSpaceSize;
allocateHeap.
freeStart := newSpaceBytes + memoryMap newSpaceStart.
newSpaceActualBytes := memoryMap newSpaceEnd - memoryMap newSpaceStart.
scavengeThreshold := memoryMap newSpaceStart.
self assert: newSpaceActualBytes >= newSpaceBytes.
freeStart := newSpaceActualBytes + memoryMap newSpaceStart.
scavengeThreshold := memoryMap newSpaceStart.
scavenger := SpurGenerationScavenger simulatorClass new.
scavenger manager: self.
scavenger rememberedSet: newSpaceRememberedSet.
scavenger
newSpaceStart: memoryMap newSpaceStart
newSpaceBytes: newSpaceBytes
survivorBytes: newSpaceBytes // self scavengerDenominator.
newSpaceBytes: newSpaceActualBytes
survivorBytes: newSpaceActualBytes // self scavengerDenominator.
compactor := self class compactorClass simulatorClass new
manager: self;
Expand Down
43 changes: 36 additions & 7 deletions smalltalksrc/VMMaker/VMMemoryMap.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,8 @@ VMMemoryMap >> allocateNewObjectsSpace [
ifFalse: [
self logError: 'Could not allocate newSpace in the expected place (%p), got %p' _: self newSpaceStart _: memoryMapConfiguration newSpaceInitialAddress.
self error: 'Error allocating' ].

self newSpaceMask: (self newSpaceStart bitAnd: self spaceMaskToUse).

self newSpaceEnd: self newSpaceStart + newSpaceSizeToAllocate.
]
Expand Down Expand Up @@ -174,6 +176,9 @@ VMMemoryMap >> allocatePermObjectsSpace [
self error: 'Error allocating' ].

self permSpaceEnd: self permSpaceStart + minSize.

self permSpaceMask: (self permSpaceStart bitAnd: self spaceMaskToUse).

objectMemory setPermSpaceFreeStart: self permSpaceStart
]

Expand Down Expand Up @@ -264,7 +269,7 @@ VMMemoryMap >> doCheckMemoryMap [
self assert: (self isYoungObject: self newSpaceEnd - memoryMapConfiguration confWordSize).
self assert: (self isOldObject: self newSpaceStart) not.
self assert: (self isOldObject: self newSpaceEnd - memoryMapConfiguration confWordSize) not.
self assert: (self isYoungObject: self newSpaceEnd) not.
self assert: (self isYoungObject: self newSpaceEnd).
self assert: (self isYoungObject: self oldSpaceStart) not.
self assert: (self isYoungObject: self oldSpaceEnd) not.
self assert: (self isOldObject: self oldSpaceStart).
Expand Down Expand Up @@ -394,6 +399,7 @@ VMMemoryMap >> initializeMemoryMap [
minPermSpaceSize := 0.
permSpaceStart := 0.
permSpaceEnd := 0.
permSpaceMask := -1.

self simulationOnly: [
memoryMapConfiguration := (VMMemoryMapConfiguration forWordsize:
Expand All @@ -419,20 +425,19 @@ VMMemoryMap >> isOldObject: anOop [

{ #category : #'testing objects' }
VMMemoryMap >> isPermanentObject: anOop [

<api>
self flag:#todo.
"^ anOop allMask: oldSpaceMask "
^ permSpaceStart <= anOop and: [ anOop < permSpaceEnd ]

^ anOop allMask: permSpaceMask

]

{ #category : #'testing objects' }
VMMemoryMap >> isYoungObject: anOop [

<api>
self flag:#todo.
"^ anOop allMask: oldSpaceMask "
^ newSpaceStart <= anOop and: [ anOop < newSpaceEnd ]

^ (anOop bitAnd: spaceMaskToUse) = newSpaceMask
]

{ #category : #accessing }
Expand Down Expand Up @@ -481,6 +486,18 @@ VMMemoryMap >> newSpaceEnd: anObject [
newSpaceEnd := anObject
]

{ #category : #accessing }
VMMemoryMap >> newSpaceMask [

^ newSpaceMask
]

{ #category : #accessing }
VMMemoryMap >> newSpaceMask: anObject [

newSpaceMask := anObject
]

{ #category : #accessing }
VMMemoryMap >> newSpaceStart [

Expand Down Expand Up @@ -540,6 +557,18 @@ VMMemoryMap >> permSpaceEnd: anInteger [
permSpaceEnd := anInteger
]

{ #category : #accessing }
VMMemoryMap >> permSpaceMask [

^ permSpaceMask
]

{ #category : #accessing }
VMMemoryMap >> permSpaceMask: anObject [

permSpaceMask := anObject
]

{ #category : #accessing }
VMMemoryMap >> permSpaceSize [

Expand Down
5 changes: 2 additions & 3 deletions smalltalksrc/VMMaker/VMStructType.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -364,9 +364,8 @@ VMStructType >> printStateOn: aStream [
{ #category : #'translation support' }
VMStructType >> simulationOnly: aBlock [

"Evaluate piece of code only during simulation.
This should get translated as a NOP"
<inline: #always>
<doNotGenerate>

self
cCode: [ ]
inSmalltalk: aBlock
Expand Down
6 changes: 2 additions & 4 deletions smalltalksrc/VMMakerTests/VMImageReadingTest.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,9 @@ VMImageReadingTest >> loadImage [
interpreterClass: self interpreterClass;
objectMemoryClass: self memoryClass;
initializationOptions: self initializationOptions;
wordSize: self wordSize;
initialCodeSize: self initialCodeSize;
primitiveTraceLogSize: self primitiveTraceLogSize.
wordSize: self wordSize.

environmentBuilder build.
environmentBuilder doBuildSimulator.

interpreter := environmentBuilder interpreter.
memory := environmentBuilder objectMemory.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,9 @@ VMPermanentSpaceImageReadingTest >> loadImage [
#ImageReader. imageReaderClass name.
#ImageWriter. imageWriterClass name.
#ISA. isa };
wordSize: self wordSize;
initialCodeSize: 4*1024;
primitiveTraceLogSize: self primitiveTraceLogSize.
wordSize: self wordSize.

environmentBuilder build.
environmentBuilder doBuildSimulator.

interpreter := environmentBuilder interpreter.
memory := environmentBuilder objectMemory.
Expand All @@ -53,11 +51,11 @@ VMPermanentSpaceImageReadingTest >> setUp [
]

{ #category : #tests }
VMPermanentSpaceImageReadingTest >> testLoadingImageCreatesPermSpace [
VMPermanentSpaceImageReadingTest >> testLoadingImageHasEmptyPermSpaceWhenImageDoesNotHave [

self saveImage.
self loadImage.

self deny: memory getMemoryMap permSpaceStart equals: 0.
self deny: memory permSpaceFreeStart equals: 0.
self assert: memory getMemoryMap permSpaceStart equals: 0.
self assert: memory permSpaceFreeStart equals: 0.
]
8 changes: 0 additions & 8 deletions smalltalksrc/VMMakerTests/VMPrimitiveTest.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -523,14 +523,6 @@ VMPrimitiveTest >> testPrimitiveAsCharacter [
self assert: interpreter stackTop equals: (memory characterObjectOf: 65).
]

{ #category : #'tests - primitiveAsCharacter' }
VMPrimitiveTest >> testPrimitiveAsCharacterCompilesWithNoArg [

interpreter primitiveAsCharacter.

self deny: interpreter failed.
]

{ #category : #'tests - primitiveAsCharacter' }
VMPrimitiveTest >> testPrimitiveAsCharacterFailsForOutOfRangeArg [

Expand Down
33 changes: 21 additions & 12 deletions smalltalksrc/VMMakerTests/VMSimulatedEnvironmentBuilder.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,7 @@ Class {
{ #category : #building }
VMSimulatedEnvironmentBuilder >> build [

objectMemory := objectMemoryClass simulatorClass new.

interpreterClass
initializeWithOptions: initializationOptions
objectMemoryClass: objectMemory class.

interpreter := interpreterClass basicNew
objectMemory: objectMemory;
basicInitialize.

self doBuildSimulator.
self doBuild
]

Expand All @@ -44,7 +35,7 @@ VMSimulatedEnvironmentBuilder >> doBuild [
| memoryManager edenSize |

"Check #scavengerDenominator in SpurMemoryManager"
edenSize := 2 * 1024 + interpreter interpreterAllocationReserveBytes.
edenSize := (2 * 1024) + interpreter interpreterAllocationReserveBytes.
newSpaceSize := self roundToPageSize: (edenSize * 7 / 5).
stackSpaceSize := 9 * 4096.
methodCacheSize := 4096 * wordSize.
Expand All @@ -71,11 +62,14 @@ VMSimulatedEnvironmentBuilder >> doBuild [
primitiveTraceLogSize: (self roundToPageSize: primitiveTraceLogSize)
rumpCStackSize: self rumpCStackSize
permSpaceSize: permSpaceSize.

"Set the allocated newSpaceSize"
newSpaceSize := objectMemory getMemoryMap newSpaceEnd - objectMemory getMemoryMap newSpaceStart.

objectMemory initializePostBootstrap.
objectMemory setHeapSizeAtPreviousGC.

self assert: objectMemory objectMemory scavenger eden size > interpreter interpreterAllocationReserveBytes.
self assert: objectMemory objectMemory scavenger eden size >= interpreter interpreterAllocationReserveBytes.
self assert: objectMemory objectMemory scavengeThreshold + interpreter interpreterAllocationReserveBytes <= objectMemory objectMemory scavenger eden limit.

objectMemory segmentManager collapseSegmentsPostSwizzle.
Expand All @@ -87,6 +81,21 @@ VMSimulatedEnvironmentBuilder >> doBuild [

]

{ #category : #building }
VMSimulatedEnvironmentBuilder >> doBuildSimulator [

objectMemory := objectMemoryClass simulatorClass new.

interpreterClass
initializeWithOptions: initializationOptions
objectMemoryClass: objectMemory class.

interpreter := interpreterClass basicNew
objectMemory: objectMemory;
basicInitialize.

]

{ #category : #accessing }
VMSimulatedEnvironmentBuilder >> initialCodeSize: anInteger [
initialCodeSize := anInteger
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,7 @@ VMSpurNewSpaceStructureTest >> testNewMemoryEdenEndIsAtTheStartOfOldSpace [
VMSpurNewSpaceStructureTest >> testNewMemoryEdenIsRestOfNewSpace [

self
assert: memory scavenger eden size
equals: environmentBuilder newSpaceSize - memory scavenger pastSpace size - memory scavenger futureSpace size
assert: memory scavenger eden size > (environmentBuilder newSpaceSize - memory scavenger pastSpace size - memory scavenger futureSpace size - interpreter interpreterAllocationReserveBytes)
]

{ #category : #'tests-1-memory-initialization' }
Expand Down

0 comments on commit ca911e6

Please sign in to comment.