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

commits at source.squeak.org commits at source.squeak.org
Mon Nov 11 19:00:26 UTC 2013


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

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

Name: VMMaker.oscog-eem.505
Author: eem
Time: 10 November 2013, 3:12:21.149 pm
UUID: 88ffddab-2c49-4887-8487-faab5b6c10cc
Ancestors: VMMaker.oscog-eem.504

Reduce duplication in the enumeration routines by implementing the
allFooObjects routines in terms of the allFooEntities routines.

Add an assert to the enumerators checking that each header word is
non-null.

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

Item was changed:
  ----- Method: SpurMemoryManager>>allExistingOldSpaceObjectsDo: (in category 'object enumeration') -----
  allExistingOldSpaceObjectsDo: aBlock
  	"Enumerate all old space objects, excluding any objects created
  	 during the execution of allExistingOldSpaceObjectsDo:."
  	<inline: true>
  	| oldSpaceLimit prevObj prevPrevObj objOop |
  	prevPrevObj := prevObj := nil.
  	objOop := self firstObject.
  	oldSpaceLimit := freeOldSpaceStart.
  	[self assert: objOop \\ self allocationUnit = 0.
  	 objOop < oldSpaceLimit] whileTrue:
+ 		[self assert: (self longLongAt: objOop) ~= 0.
+ 		 (self isEnumerableObject: objOop) ifTrue:
- 		[(self isEnumerableObject: objOop) ifTrue:
  			[aBlock value: objOop].
  		 prevPrevObj := prevObj.
  		 prevObj := objOop.
  		 objOop := self objectAfter: objOop limit: freeOldSpaceStart].
  	self touch: prevPrevObj.
  	self touch: prevObj!

Item was changed:
  ----- Method: SpurMemoryManager>>allNewSpaceEntitiesDo: (in category 'object enumeration') -----
  allNewSpaceEntitiesDo: aBlock
+ 	"Enumerate all new space objects, including free objects."
- 	"Enumerate all new space objects, including free objects,
- 	 excluding any objects created during the ennumeration."
  	<inline: true>
  	| prevObj prevPrevObj objOop limit |
  	prevPrevObj := prevObj := nil.
  	"After a scavenge eden is empty, futureSpace is empty, and all newSpace objects are
  	  in pastSpace.  Objects are allocated in eden.  So enumerate only eden and pastSpace."
  	objOop := self objectStartingAt: scavenger eden start.
  	[objOop < freeStart] whileTrue:
  		[aBlock value: objOop.
  		 prevPrevObj := prevObj.
  		 prevObj := objOop.
  		 objOop := self objectAfter: objOop limit: freeStart].
  	objOop := self objectStartingAt: scavenger pastSpace start.
  	limit := pastSpaceStart.
  	[objOop < limit] whileTrue:
  		[aBlock value: objOop.
  		 prevPrevObj := prevObj.
  		 prevObj := objOop.
  		 objOop := self objectAfter: objOop limit: limit].
  	self touch: prevPrevObj.
  	self touch: prevObj!

Item was changed:
  ----- Method: SpurMemoryManager>>allNewSpaceObjectsDo: (in category 'object enumeration') -----
  allNewSpaceObjectsDo: aBlock
+ 	"Enumerate all new space objects, excluding free objects."
- 	"Enumerate all new space objects, excluding any objects created
- 	 during the execution of allNewSpaceObjectsDo:."
  	<inline: true>
+ 	self allNewSpaceEntitiesDo:
+ 		[:objOop|
+ 		 (self isEnumerableObject: objOop) ifTrue:
+ 			[aBlock value: objOop]]!
- 	| prevObj prevPrevObj objOop limit |
- 	prevPrevObj := prevObj := nil.
- 	"After a scavenge eden is empty, futureSpace is empty, and all newSpace objects are
- 	  in pastSpace.  Objects are allocated in eden.  So enumerate only eden and pastSpace."
- 	objOop := self objectStartingAt: scavenger eden start.
- 	[objOop < freeStart] whileTrue:
- 		[(self isEnumerableObject: objOop) ifTrue:
- 			[aBlock value: objOop].
- 		 prevPrevObj := prevObj.
- 		 prevObj := objOop.
- 		 objOop := self objectAfter: objOop limit: freeStart].
- 	objOop := self objectStartingAt: scavenger pastSpace start.
- 	limit := pastSpaceStart.
- 	[objOop < limit] whileTrue:
- 		[(self isEnumerableObject: objOop) ifTrue:
- 			[aBlock value: objOop].
- 		 prevPrevObj := prevObj.
- 		 prevObj := objOop.
- 		 objOop := self objectAfter: objOop limit: limit].
- 	self touch: prevPrevObj.
- 	self touch: prevObj!

Item was changed:
  ----- Method: SpurMemoryManager>>allOldSpaceEntitiesDo: (in category 'object enumeration') -----
  allOldSpaceEntitiesDo: aBlock
  	<inline: true>
+ 	self allOldSpaceEntitiesFrom: self firstObject do: aBlock!
- 	| prevObj prevPrevObj objOop |
- 	prevPrevObj := prevObj := nil.
- 	objOop := self firstObject.
- 	[self assert: objOop \\ self allocationUnit = 0.
- 	 objOop < freeOldSpaceStart] whileTrue:
- 		[aBlock value: objOop.
- 		 prevPrevObj := prevObj.
- 		 prevObj := objOop.
- 		 objOop := self objectAfter: objOop limit: freeOldSpaceStart].
- 	self touch: prevPrevObj.
- 	self touch: prevObj!

Item was changed:
  ----- Method: SpurMemoryManager>>allOldSpaceEntitiesForCoalescingDo: (in category 'object enumeration') -----
  allOldSpaceEntitiesForCoalescingDo: aBlock
  	<inline: true>
  	| prevObj prevPrevObj objOop rawNumSlots rawNumSlotsAfter |
  	prevPrevObj := prevObj := nil.
  	objOop := self firstObject.
  	[self assert: objOop \\ self allocationUnit = 0.
  	 objOop < freeOldSpaceStart] whileTrue:
+ 		[self assert: (self longLongAt: objOop) ~= 0.
+ 		 rawNumSlots := self rawNumSlotsOf: objOop.
- 		[rawNumSlots := self rawNumSlotsOf: objOop.
  		 aBlock value: objOop.
  		 "If the number of slot changes coalescing changed an object from a single to a double header."
  		 rawNumSlotsAfter := self rawNumSlotsOf: objOop.
  		 (rawNumSlotsAfter ~= rawNumSlots
  		  and: [rawNumSlotsAfter = self numSlotsMask]) ifTrue:
  			[objOop := objOop + self baseHeaderSize.
  			 self assert: (self objectAfter: prevObj limit: freeOldSpaceStart) = objOop].
  		 prevPrevObj := prevObj.
  		 prevObj := objOop.
  		 objOop := self objectAfter: objOop limit: freeOldSpaceStart].
  	self touch: prevPrevObj.
  	self touch: prevObj!

Item was changed:
  ----- Method: SpurMemoryManager>>allOldSpaceEntitiesFrom:do: (in category 'object enumeration') -----
  allOldSpaceEntitiesFrom: initialObject do: aBlock
  	<inline: true>
  	| prevObj prevPrevObj objOop |
  	prevPrevObj := prevObj := nil.
  	objOop := initialObject.
  	[self assert: objOop \\ self allocationUnit = 0.
  	 objOop < freeOldSpaceStart] whileTrue:
+ 		[self assert: (self longLongAt: objOop) ~= 0.
+ 		 aBlock value: objOop.
- 		[aBlock value: objOop.
  		 prevPrevObj := prevObj.
  		 prevObj := objOop.
  		 objOop := self objectAfter: objOop limit: freeOldSpaceStart].
  	self touch: prevPrevObj.
  	self touch: prevObj!

Item was changed:
  ----- Method: SpurMemoryManager>>allOldSpaceObjectsFrom:do: (in category 'object enumeration') -----
  allOldSpaceObjectsFrom: initialObject do: aBlock
  	"Enumerate all objects (i.e. exclude bridges, forwarders and free chunks)
  	 in oldSpace starting at initialObject."
  	<inline: true>
+ 	self allOldSpaceEntitiesFrom: initialObject
+ 		do: [:objOop|
+ 			 (self isEnumerableObject: objOop) ifTrue:
+ 				[aBlock value: objOop]]!
- 	| prevObj prevPrevObj objOop |
- 	prevPrevObj := prevObj := nil.
- 	objOop := initialObject.
- 	[self assert: objOop \\ self allocationUnit = 0.
- 	 objOop < freeOldSpaceStart] whileTrue:
- 		[(self isEnumerableObject: objOop) ifTrue:
- 			[aBlock value: objOop].
- 		 prevPrevObj := prevObj.
- 		 prevObj := objOop.
- 		 objOop := self objectAfter: objOop limit: freeOldSpaceStart].
- 	self touch: prevPrevObj.
- 	self touch: prevObj!



More information about the Vm-dev mailing list