[Vm-dev] VM Maker: VMMaker.oscog-eem.140.mcz
commits at source.squeak.org
commits at source.squeak.org
Sat Dec 10 00:17:07 UTC 2011
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.140.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.140
Author: eem
Time: 9 December 2011, 4:15:07.432 pm
UUID: 2487009c-2c13-4609-b89e-77f0e195f433
Ancestors: VMMaker.oscog-eem.139
Stop the backward jump compilation variables being localised to
interpret. If this happens the unoptimized debug VM can behave
very differently to the optimized VMs.
Use definedAsMacro in tryToInlineMethodsIn: instead of accessing
properties directly (i.e. as other senders of definedAsMacro).
=============== Diff against VMMaker.oscog-eem.139 ===============
Item was changed:
----- Method: CoInterpreter>>longUnconditionalJump (in category 'jump bytecodes') -----
longUnconditionalJump
| offset switched |
offset := (((currentBytecode bitAnd: 7) - 4) * 256) + self fetchByte.
localIP := localIP + offset.
"backward jump means we're in a loop.
- check for possible interrupts.
- check for long-running loops and JIT if appropriate."
offset < 0 ifTrue:
[localSP < stackLimit ifTrue:
[self externalizeIPandSP.
switched := self checkForEventsMayContextSwitch: true.
self returnToExecutive: true postContextSwitch: switched.
self browserPluginReturnIfNeeded.
self internalizeIPandSP].
method = lastBackwardJumpMethod
ifTrue:
[(backwardJumpCount := backwardJumpCount - 1) <= 0 ifTrue:
[(self methodWithHeaderShouldBeCogged: (self headerOf: method))
ifTrue:
[self externalizeFPandSP.
+ self resetBackwardJumpVariables. "only to force variables to be global"
self attemptToSwitchToMachineCode: (self oopForPointer: localIP) - offset - method - BaseHeaderSize - 1]
ifFalse: "don't ask if one should compile a second time..."
[backwardJumpCount := 1 bitShift: BytesPerWord * 8 - 2]]]
ifFalse:
[lastBackwardJumpMethod := method.
backwardJumpCount := minBackwardJumpCountForCompile]].
self fetchNextBytecode!
Item was added:
+ ----- Method: CoInterpreter>>resetBackwardJumpVariables (in category 'jump bytecodes') -----
+ resetBackwardJumpVariables
+ "Reference these variables from outside interpret to avoid them being localised to interpret.
+ Oh the hacks we commit for Slang..."
+ <cmacro: '() /* nada */'>
+ <inline: #false>
+ lastBackwardJumpMethod := lastBackwardJumpMethod.
+ backwardJumpCount := backwardJumpCount!
Item was changed:
----- Method: TMethod>>tryToInlineMethodsIn: (in category 'inlining') -----
tryToInlineMethodsIn: aCodeGen
"Expand any (complete) inline methods called by this method. Set the complete bit when all inlining has been done. Return true if something was inlined."
| stmtLists didSomething newStatements sendsToInline |
+ self definedAsMacro ifTrue:
- (properties includesKey: #cmacro:) ifTrue:
[complete := true.
^false].
didSomething := false.
sendsToInline := Dictionary new: 100.
parseTree
nodesDo:
[ :n |
(self inlineableFunctionCall: n in: aCodeGen) ifTrue:
[sendsToInline at: n put: (self inlineFunctionCall: n in: aCodeGen)]]
unless: "Don't inline the arguments to asserts to keep the asserts readable"
[:n| n isSend and: [#(cCode:inSmalltalk: assert:) includes: n selector]].
sendsToInline isEmpty ifFalse:
[didSomething := true.
parseTree := parseTree replaceNodesIn: sendsToInline].
didSomething ifTrue:
[writtenToGlobalVarsCache := nil.
^didSomething].
stmtLists := self statementsListsForInlining.
stmtLists do:
[ :stmtList |
newStatements := OrderedCollection new: 100.
stmtList statements do:
[ :stmt |
(self inlineCodeOrNilForStatement: stmt in: aCodeGen)
ifNil: [newStatements addLast: stmt]
ifNotNil: [:inlinedStmts|
didSomething := true.
newStatements addAllLast: inlinedStmts]].
stmtList setStatements: newStatements asArray].
didSomething ifTrue:
[writtenToGlobalVarsCache := nil.
^didSomething].
complete ifFalse:
[self checkForCompleteness: stmtLists in: aCodeGen.
complete ifTrue: [ didSomething := true ]]. "marking a method complete is progress"
^didSomething!
More information about the Vm-dev
mailing list