VM Maker: VMMaker.oscog-eem.506.mcz

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

VM Maker: VMMaker.oscog-eem.506.mcz

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

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

Name: VMMaker.oscog-eem.506
Author: eem
Time: 11 November 2013, 9:44:02.213 am
UUID: d08a5441-9507-473d-9dad-412d7702ae96
Ancestors: VMMaker.oscog-eem.505

Allow more wriggle room in the scavengeThreshold
(eden bytes / 16 instead of eden bytes / 64).

Declare freeListsMask unsigned so that <= bit comparisons work.

Do a better job of dead code removal, accepting constant
comparisons.

Make SpurMemMgr>>objectAfter:/Before: <api>.

Nuke a duplicate declareCAsOop:in:.

Fix type decl for Spur64BitMemMgr>>rawNumSlotsOf:

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

Item was changed:
  ----- Method: CCodeGenerator>>generateIfFalse:on:indent: (in category 'C translation') -----
  generateIfFalse: msgNode on: aStream indent: level
  "Generate the C code for this message onto the given stream."
 
+ (self nilOrBooleanConstantReceiverOf: msgNode receiver)
- (self nilOrBooleanConstantReceiverOf: msgNode)
  ifNil:
  [aStream nextPutAll: 'if (!!'.
  msgNode receiver isLeaf ifFalse: [aStream nextPut: $(]. "grrrrr"
  msgNode receiver emitCCodeAsExpressionOn: aStream level: level + 1 generator: self.
  msgNode receiver isLeaf ifFalse: [aStream nextPut: $)]. "grrrrr"
  aStream nextPutAll: ') {'; cr.
  msgNode args last emitCCodeOn: aStream level: level + 1 generator: self.
  aStream tab: level.
  aStream nextPut: $}]
  ifNotNil:
  [:const |
  const ifFalse:
  [msgNode args first emitCCodeOn: aStream level: level generator: self]]!

Item was changed:
  ----- Method: CCodeGenerator>>generateIfFalseAsArgument:on:indent: (in category 'C translation') -----
  generateIfFalseAsArgument: msgNode on: aStream indent: level
  "Generate the C code for this message onto the given stream."
 
+ (self nilOrBooleanConstantReceiverOf: msgNode receiver)
- (self nilOrBooleanConstantReceiverOf: msgNode)
  ifNil:
  [aStream nextPutAll: '(!!('.
  msgNode receiver emitCCodeAsArgumentOn: aStream level: 0 generator: self.
  aStream nextPut: $); crtab: level + 1; nextPut: $?; space.
  msgNode args last emitCCodeAsArgumentOn: aStream level: level + 2 generator: self.
  aStream crtab: level + 1; nextPutAll: ': 0)']
  ifNotNil:
  [:const|
  const ifFalse:
  [msgNode args first emitCCodeAsArgumentOn: aStream level: level generator: self]]!

Item was changed:
  ----- Method: CCodeGenerator>>generateIfFalseIfTrue:on:indent: (in category 'C translation') -----
  generateIfFalseIfTrue: msgNode on: aStream indent: level
  "Generate the C code for this message onto the given stream."
 
+ (self nilOrBooleanConstantReceiverOf: msgNode receiver)
- (self nilOrBooleanConstantReceiverOf: msgNode)
  ifNil:
  [aStream nextPutAll: 'if ('.
  msgNode receiver emitCCodeAsExpressionOn: aStream level: level generator: self.
  aStream nextPutAll: ') {'; cr.
  msgNode args last emitCCodeOn: aStream level: level + 1 generator: self.
+ aStream tab: level; nextPut: $}; crtab: level; nextPutAll: 'else {'; cr.
- aStream tab: level; nextPut: $}; cr; tab: level; nextPutAll: 'else {'; cr.
  msgNode args first emitCCodeOn: aStream level: level + 1 generator: self.
  aStream tab: level; nextPut: $}]
  ifNotNil:
  [:const |
  (const ifTrue: [msgNode args last] ifFalse: [msgNode args first])
  emitCCodeOn: aStream level: level generator: self]!

Item was changed:
  ----- Method: CCodeGenerator>>generateIfFalseIfTrueAsArgument:on:indent: (in category 'C translation') -----
  generateIfFalseIfTrueAsArgument: msgNode on: aStream indent: level
  "Generate the C code for this message onto the given stream."
 
+ (self nilOrBooleanConstantReceiverOf: msgNode receiver)
- (self nilOrBooleanConstantReceiverOf: msgNode)
  ifNil:
  [aStream nextPut: $(.
  msgNode receiver emitCCodeAsArgumentOn: aStream level: level generator: self.
  aStream crtab: level + 1; nextPut: $?; space.
  msgNode args last emitCCodeAsArgumentOn: aStream level: level + 2 generator: self.
  aStream crtab: level + 1; nextPut: $:; space.
  msgNode args first emitCCodeAsArgumentOn: aStream level: level + 2 generator: self.
  aStream nextPut: $)]
  ifNotNil:
  [:const|
  (const
  ifTrue: [msgNode args last]
  ifFalse: [msgNode args first])
  emitCCodeAsArgumentOn: aStream level: level generator: self]!

Item was changed:
  ----- Method: CCodeGenerator>>generateIfTrue:on:indent: (in category 'C translation') -----
  generateIfTrue: msgNode on: aStream indent: level
  "Generate the C code for this message onto the given stream."
 
+ (self nilOrBooleanConstantReceiverOf: msgNode receiver)
- (self nilOrBooleanConstantReceiverOf: msgNode)
  ifNil:
  [aStream nextPutAll: 'if ('.
  msgNode receiver emitCCodeAsExpressionOn: aStream level: level generator: self.
  aStream nextPutAll: ') {'; cr.
  msgNode args first emitCCodeOn: aStream level: level + 1 generator: self.
+ aStream tab: level.
- level timesRepeat: [ aStream tab ].
  aStream nextPut: $}]
  ifNotNil:
  [:const |
  const ifTrue:
  [msgNode args first emitCCodeOn: aStream level: level generator: self]]!

Item was changed:
  ----- Method: CCodeGenerator>>generateIfTrueAsArgument:on:indent: (in category 'C translation') -----
  generateIfTrueAsArgument: msgNode on: aStream indent: level
  "Generate the C code for this message onto the given stream."
 
+ (self nilOrBooleanConstantReceiverOf: msgNode receiver)
- (self nilOrBooleanConstantReceiverOf: msgNode)
  ifNil:
  [aStream nextPut: $(.
  msgNode receiver emitCCodeAsArgumentOn: aStream level: level generator: self.
  aStream crtab: level + 1; nextPut: $?; space.
  msgNode args first emitCCodeAsArgumentOn: aStream level: level + 2 generator: self.
  aStream crtab: level + 1; nextPutAll: ': 0)']
  ifNotNil:
  [:const|
  const ifTrue:
  [msgNode args first emitCCodeAsArgumentOn: aStream level: level generator: self]]!

Item was changed:
  ----- Method: CCodeGenerator>>generateIfTrueIfFalse:on:indent: (in category 'C translation') -----
  generateIfTrueIfFalse: msgNode on: aStream indent: level
  "Generate the C code for this message onto the given stream."
 
+ (self nilOrBooleanConstantReceiverOf: msgNode receiver)
- (self nilOrBooleanConstantReceiverOf: msgNode)
  ifNil:
  [aStream nextPutAll: 'if ('.
  msgNode receiver emitCCodeAsExpressionOn: aStream level: level generator: self.
  aStream nextPutAll: ') {'; cr.
  msgNode args first emitCCodeOn: aStream level: level + 1 generator: self.
+ aStream tab: level; nextPut: $}; crtab: level; nextPutAll: 'else {'; cr.
- aStream tab: level; nextPut: $}; cr; tab: level; nextPutAll: 'else {'; cr.
  msgNode args last emitCCodeOn: aStream level: level + 1 generator: self.
  aStream tab: level; nextPut: $}]
  ifNotNil:
  [:const |
  (const ifTrue: [msgNode args first] ifFalse: [msgNode args last])
  emitCCodeOn: aStream level: level generator: self]!

Item was changed:
  ----- Method: CCodeGenerator>>generateIfTrueIfFalseAsArgument:on:indent: (in category 'C translation') -----
  generateIfTrueIfFalseAsArgument: msgNode on: aStream indent: level
  "Generate the C code for this message onto the given stream."
 
+ (self nilOrBooleanConstantReceiverOf: msgNode receiver)
- (self nilOrBooleanConstantReceiverOf: msgNode)
  ifNil:
  [aStream nextPut: $(.
  msgNode receiver emitCCodeAsExpressionOn: aStream level: level generator: self.
  aStream crtab: level + 1; nextPut: $?; space.
  msgNode args first emitCCodeAsArgumentOn: aStream level: level + 2 generator: self.
  aStream crtab: level + 1; nextPut: $:; space.
  msgNode args last emitCCodeAsArgumentOn: aStream level: level + 2 generator: self.
  aStream nextPut: $)]
  ifNotNil:
  [:const|
  (const ifTrue: [msgNode args first] ifFalse: [msgNode args last])
  emitCCodeAsArgumentOn: aStream level: level generator: self]!

Item was changed:
  ----- Method: CCodeGenerator>>nilOrBooleanConstantReceiverOf: (in category 'utilities') -----
  nilOrBooleanConstantReceiverOf: aNode
  "Answer nil or the boolean constant that is the receiver of the given message send.
  Used to suppress conditional code when the condition is a translation-time constant."
 
- | rcvr |
  generateDeadCode ifTrue:[^nil].
+ (aNode isConstant
+ and: [#(true false) includes: aNode value]) ifTrue:
+ [^aNode value].
+ aNode isSend ifTrue:
+ [((#(or: and:) includes: aNode selector)
+ and: [aNode args last isStmtList
+ and: [aNode args last statements size = 1]]) ifTrue:
+ [(self nilOrBooleanConstantReceiverOf: aNode receiver) ifNotNil:
+ [:rcvr|
+ (self nilOrBooleanConstantReceiverOf: aNode args last statements first) ifNotNil:
+ [:arg|
+ ^rcvr perform: aNode selector with: [arg]]]].
+ ((#(= ~= < > <= >=) includes: aNode selector)
+  and: [(aNode receiver isConstant and: [aNode receiver value isInteger])
+  and: [(aNode args first isConstant and: [aNode args first value isInteger])]]) ifTrue:
+ [^aNode receiver value perform: aNode selector with: aNode args first value]].
- rcvr := aNode isSend ifTrue: [aNode receiver] ifFalse: [aNode].
- (rcvr isConstant
- and: [#(true false) includes: rcvr value]) ifTrue:
- [^rcvr value].
- (rcvr isSend
- and: [(#(or: and:) includes: rcvr selector)
- and: [rcvr args last isStmtList
- and: [rcvr args last statements size = 1]]]) ifTrue:
- [(self nilOrBooleanConstantReceiverOf: rcvr receiver) ifNotNil:
- [:rcvrRcvr|
- (self nilOrBooleanConstantReceiverOf: rcvr args last statements first) ifNotNil:
- [:rcvrArg|
- ^rcvrRcvr perform: rcvr selector with: rcvrArg]]].
  ^nil
  !

Item was removed:
- ----- Method: CogVMSimulator>>objectBefore: (in category 'testing') -----
- objectBefore: addr
- | prev |
- objectMemory allObjectsDo:
- [:oop|
- "look here if debugging prev obj overlapping this one"
- oop >= addr ifTrue: [^prev].
- prev := oop].
- ^0!

Item was removed:
- ----- Method: InterpreterSimulator>>objectBefore: (in category 'testing') -----
- objectBefore: addr
- | oop prev |
- oop := self firstObject.
- [oop < endOfMemory] whileTrue:
- [prev := oop.  "look here if debugging prev obj overlapping this one"
- oop := self objectAfter: oop.
- oop >= addr ifTrue: [^ prev]].
- ^0!

Item was removed:
- ----- Method: NewspeakInterpreterSimulator>>objectBefore: (in category 'testing') -----
- objectBefore: addr
- | oop prev |
- oop := self firstObject.
- [oop < endOfMemory] whileTrue:
- [prev := oop.  "look here if debugging prev obj overlapping this one"
- oop := self objectAfter: oop.
- oop >= addr ifTrue: [^ prev]].
- ^0!

Item was removed:
- ----- Method: ObjectMemory class>>declareCAsOop:in: (in category 'translation') -----
- declareCAsOop: arrayOfVariableNames in: aCCodeGenerator
- "Declare the variables in arrayOfVariableNames with type representing position in object memory."
-
- arrayOfVariableNames
- do: [:varName | aCCodeGenerator var: varName type: 'usqInt']!

Item was changed:
  ----- Method: Spur64BitMemoryManager>>rawNumSlotsOf: (in category 'object access') -----
  rawNumSlotsOf: objOop
+ <returnTypeC: #usqInt>
+ <inline: true>
- <returnTypeC: #usqLong>
  ^(self longAt: objOop) asUnsignedLong >> self numSlotsFullShift!

Item was changed:
  ----- Method: SpurMemoryManager class>>declareCVarsIn: (in category 'translation') -----
  declareCVarsIn: aCCodeGenerator
  self declareCAsOop: #( memory freeStart scavengeThreshold newSpaceLimit pastSpaceStart
  lowSpaceThreshold freeOldSpaceStart endOfMemory sortedFreeChunks)
  in: aCCodeGenerator.
  self declareCAsUSqLong: (self allInstVarNames select: [:ivn| ivn endsWith: 'Usecs'])
  in: aCCodeGenerator.
  aCCodeGenerator
+ var: #freeListsMask type: #usqInt;
  var: #freeLists type: #'sqInt *';
  var: #classTableBitmap type: #'unsigned char *';
  var: #highestObjects type: #SpurCircularBuffer;
  var: #unscannedEphemerons type: #SpurContiguousObjStack.
  aCCodeGenerator
  var: #remapBuffer
  declareC: 'sqInt remapBuffer[RemapBufferSize + 1 /* ', (RemapBufferSize + 1) printString, ' */]'.
  aCCodeGenerator
  var: #extraRoots
  declareC: 'sqInt *extraRoots[ExtraRootsSize + 1 /* ', (ExtraRootsSize + 1) printString, ' */]'.!

Item was changed:
  ----- Method: SpurMemoryManager>>objectAfter: (in category 'object enumeration') -----
  objectAfter: objOop
+ <api>
  "Object parsing.
  1. all objects have at least a word following the header, for a forwarding pointer.
  2. objects with an overflow size have a preceeing word with a saturated slotSize.  If the word following
     an object doesn't have a saturated size field it must be a single-header object.  If the word following
    does have a saturated slotSize it must be the overflow size word."
  <inline: false>
  objOop < newSpaceLimit ifTrue:
  [(self isInEden: objOop) ifTrue:
  [^self objectAfter: objOop limit: freeStart].
  (self isInSurvivorSpace: objOop) ifTrue:
  [^self objectAfter: objOop limit: pastSpaceStart].
  ^self objectAfter: objOop limit: scavenger futureSurvivorStart].
  ^self objectAfter: objOop limit: freeOldSpaceStart!

Item was changed:
  ----- Method: SpurMemoryManager>>objectBefore: (in category 'object enumeration') -----
  objectBefore: objOop
+ <api>
  | prev |
  prev := nil.
  objOop < newSpaceLimit ifTrue:
  [self allNewSpaceObjectsDo:
  [:o|
  o >= objOop ifTrue:
  [^prev].
  prev := o].
  ^prev].
  self allOldSpaceObjectsDo:
  [:o|
  o >= objOop ifTrue:
  [^prev].
  prev := o].
  ^prev!

Item was removed:
- ----- Method: StackInterpreterSimulator>>objectBefore: (in category 'testing') -----
- objectBefore: addr
- | prev |
- objectMemory allObjectsDo:
- [:oop|
- "look here if debugging prev obj overlapping this one"
- oop >= addr ifTrue: [^prev].
- prev := oop].
- ^0!