VM Maker: Cog-eem.83.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

VM Maker: Cog-eem.83.mcz

commits-2
 
Eliot Miranda uploaded a new version of Cog to project VM Maker:
http://source.squeak.org/VMMaker/Cog-eem.83.mcz

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

Name: Cog-eem.83
Author: eem
Time: 10 September 2013, 5:46:13.794 pm
UUID: fa54c636-dc1b-4884-b8e7-73745b128318
Ancestors: Cog-eem.82

Add a sane scavenging-aware setGCParameters to the bootstrap.
Hence add support for float literals in installable methods.
Print ...done, when done transforming.

=============== Diff against Cog-eem.82 ===============

Item was added:
+ ----- Method: SpurBootstrap class>>SmalltalkImagePROTOTYPEsetGCParameters (in category 'method prototypes') -----
+ SmalltalkImagePROTOTYPEsetGCParameters
+ "Adjust the VM's default GC parameters to avoid too much tenuring.
+ Maybe this should be left to the VM?"
+
+ | proportion edenSize survivorSize averageObjectSize numObjects |
+ proportion := 0.9. "tenure when 90% of pastSpace is full"
+ edenSize := SmalltalkImage current vmParameterAt: 44.
+ survivorSize := edenSize / 5.0. "David's paper uses 140Kb eden + 2 x 28kb survivor spaces; Spur does the same :-)"
+ averageObjectSize := 8 * self wordSize. "a good approximation"
+ numObjects := (proportion * survivorSize / averageObjectSize) rounded.
+ SmalltalkImage current vmParameterAt: 6 put: numObjects  "tenure when more than this many objects survive the GC"!

Item was added:
+ ----- Method: SpurBootstrap class>>SystemDictionaryPROTOTYPEsetGCParameters (in category 'method prototypes') -----
+ SystemDictionaryPROTOTYPEsetGCParameters
+ "Adjust the VM's default GC parameters to avoid too much tenuring.
+ Maybe this should be left to the VM?"
+
+ | proportion edenSize survivorSize averageObjectSize numObjects |
+ proportion := 0.9. "tenure when 90% of pastSpace is full"
+ edenSize := SmalltalkImage current vmParameterAt: 44.
+ survivorSize := edenSize / 5.0. "David's paper uses 140Kb eden + 2 x 28kb survivor spaces; Spur does the same :-)"
+ averageObjectSize := 8 * self wordSize. "a good approximation"
+ numObjects := (proportion * survivorSize / averageObjectSize) rounded.
+ SmalltalkImage current vmParameterAt: 6 put: numObjects  "tenure when more than this many objects survive the GC"!

Item was changed:
  ----- Method: SpurBootstrap>>bootstrapImage (in category 'bootstrap image') -----
  bootstrapImage
+ Transcript cr; nextPutAll: 'transforming image...'; flush.
- Transcript cr; nextPutAll: 'transforming image'; flush.
  self cloneNilTrueAndFalse.
  self buildClassMap.
  self allocateClassTable.
  self cloneObjects.
  self fillInObjects.
+ self fillInClassTable.
+ Transcript nextPutAll: 'done.'; flush.!
- self fillInClassTable!

Item was changed:
  ----- Method: SpurBootstrap>>findLiteral: (in category 'bootstrap methods') -----
  findLiteral: aLiteral
  | symbolOop smalltalk array |
  aLiteral isString ifTrue:
  [^self stringFor: aLiteral].
+ aLiteral isFloat ifTrue:
+ [^oldInterpreter floatObjectOf: aLiteral].
  self assert: aLiteral isVariableBinding.
  symbolOop := self findSymbol: aLiteral key.
  smalltalk := oldHeap splObj: 8.
  array := oldHeap fetchPointer: 1 ofObject: smalltalk.
  self assert: (oldHeap isArray: array).
  0 to: (oldHeap fetchWordLengthOf: array) - 1 do:
  [:i| | bindingOrNil |
  bindingOrNil := oldHeap fetchPointer: i ofObject: array.
  (bindingOrNil ~= oldHeap nilObject
  and: [symbolOop = (oldHeap fetchPointer: KeyIndex ofObject: bindingOrNil)
  and: [aLiteral key == #Smalltalk
  ifTrue:
  [(oldHeap fetchPointer: ValueIndex ofObject: bindingOrNil) = smalltalk]
  ifFalse:
  [oldInterpreter
  classNameOf: (oldHeap fetchPointer: ValueIndex ofObject: bindingOrNil)
  Is: aLiteral key]]]) ifTrue:
  [^bindingOrNil]].
  self error: 'couldn''t find literal ', aLiteral printString!