[Vm-dev] VM Maker: VMMaker.oscog-eem.555.mcz
commits at source.squeak.org
commits at source.squeak.org
Wed Dec 11 01:25:22 UTC 2013
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.555.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.555
Author: eem
Time: 10 December 2013, 5:22:57.71 pm
UUID: 9b99d897-eecb-4b11-97c9-7f7a75c7d8b0
Ancestors: VMMaker.oscog-eem.554
Rescue compilation of the "classic" VMs by making sure the relevant
forwarding code is considered dead code.
=============== Diff against VMMaker.oscog-eem.554 ===============
Item was added:
+ ----- Method: CoInterpreter>>actuallyFollowNecessaryForwardingInMethod: (in category 'lazy become') -----
+ actuallyFollowNecessaryForwardingInMethod: methodObj
+ "To avoid any chance of a forwarded object during super sends we follow the
+ methodClassAssociation. The forwarded object send fault only copes with
+ normal sends to instances."
+ | cogMethod header |
+ <var: #cogMethod type: #'CogMethod *'>
+ super actuallyFollowNecessaryForwardingInMethod: methodObj.
+ header := self rawHeaderOf: methodObj.
+ (self isCogMethodReference: header) ifTrue:
+ [cogMethod := self cCoerceSimple: header to: #'CogMethod *'.
+ cogMethod cmUsesMethodClass ifTrue:
+ [cogit followForwardedLiteralsIn: cogMethod]]!
Item was removed:
- ----- Method: CoInterpreter>>followNecessaryForwardingInMethod: (in category 'lazy become') -----
- followNecessaryForwardingInMethod: methodObj
- "To avoid any chance of a forwarded object during super sends we follow the
- methodClassAssociation. The forwarded object send fault only copes with
- normal sends to instances."
- | cogMethod header |
- <var: #cogMethod type: #'CogMethod *'>
- super followNecessaryForwardingInMethod: methodObj.
- header := self rawHeaderOf: methodObj.
- (self isCogMethodReference: header) ifTrue:
- [cogMethod := self cCoerceSimple: header to: #'CogMethod *'.
- cogMethod cmUsesMethodClass ifTrue:
- [cogit followForwardedLiteralsIn: cogMethod]]!
Item was added:
+ ----- Method: StackInterpreter>>actuallyFollowNecessaryForwardingInMethod: (in category 'lazy become') -----
+ actuallyFollowNecessaryForwardingInMethod: methodObj
+ "To avoid any chance of a forwarded object during super sends we follow the
+ methodClassAssociation. The forwarded object send fault only copes with
+ normal sends to instances."
+ | assoc classObj |
+ <option: #SpurObjectMemory>
+ <inline: true>
+ assoc := self methodClassAssociationOf: methodObj.
+ (objectMemory isForwarded: assoc) ifTrue:
+ [assoc := objectMemory followForwarded: assoc.
+ self setMethodClassAssociationOf: methodObj to: assoc].
+ classObj := objectMemory fetchPointer: ValueIndex ofObject: assoc.
+ (objectMemory isForwarded: classObj) ifTrue:
+ [classObj := objectMemory followForwarded: assoc.
+ objectMemory storePointer: ValueIndex ofObject: assoc withValue: classObj]!
Item was changed:
----- Method: StackInterpreter>>followNecessaryForwardingInMethod: (in category 'lazy become') -----
followNecessaryForwardingInMethod: methodObj
"To avoid any chance of a forwarded object during super sends we follow the
methodClassAssociation. The forwarded object send fault only copes with
normal sends to instances."
+ <inline: false>
+ objectMemory hasSpurMemoryManagerAPI ifTrue:
+ [self actuallyFollowNecessaryForwardingInMethod: methodObj]!
- | assoc classObj |
- assoc := self methodClassAssociationOf: methodObj.
- (objectMemory isForwarded: assoc) ifTrue:
- [assoc := objectMemory followForwarded: assoc.
- self setMethodClassAssociationOf: methodObj to: assoc].
- classObj := objectMemory fetchPointer: ValueIndex ofObject: assoc.
- (objectMemory isForwarded: classObj) ifTrue:
- [classObj := objectMemory followForwarded: assoc.
- objectMemory storePointer: ValueIndex ofObject: assoc withValue: classObj]!
Item was changed:
----- Method: StackInterpreter>>handleSpecialSelectorSendFaultFor: (in category 'message sending') -----
handleSpecialSelectorSendFaultFor: obj
<inline: true>
+ <option: #SpurObjectMemory>
^self handleSpecialSelectorSendFaultFor: obj fp: localFP sp: localSP!
Item was changed:
----- Method: StackToRegisterMappingCogit>>genPushRegisterArgsForNumArgs: (in category 'compile abstract instructions') -----
genPushRegisterArgsForNumArgs: numArgs
"Ensure that the register args are pushed before the retpc for arity <= self numRegArgs."
"This won't be as clumsy on a RISC. But putting the receiver and
args above the return address means the CoInterpreter has a
single machine-code frame format which saves us a lot of work."
numArgs <= self numRegArgs ifTrue:
+ [self assert: self numRegArgs <= 2.
+ false "these two variants show the same performance on Intel Core i7, but the second one may be shorter."
+ ifTrue:
+ [self MoveMw: 0 r: SPReg R: TempReg. "Save return address"
+ numArgs > 0 ifTrue:
+ [self PushR: Arg0Reg.
+ numArgs > 1 ifTrue:
+ [self PushR: Arg1Reg]].
+ self PushR: TempReg.
+ self MoveR: ReceiverResultReg Mw: BytesPerWord * (1 + numArgs) r: SPReg]
+ ifFalse:
+ [self MoveMw: 0 r: SPReg R: TempReg. "Save return address"
+ self MoveR: ReceiverResultReg Mw: 0 r: SPReg.
+ numArgs > 0 ifTrue:
+ [self PushR: Arg0Reg.
+ numArgs > 1 ifTrue:
+ [self PushR: Arg1Reg]].
+ self PushR: TempReg]] "Restore return address"!
- [self MoveMw: 0 r: SPReg R: TempReg. "Save return address"
- self MoveR: ReceiverResultReg Mw: 0 r: SPReg.
- self assert: self numRegArgs <= 2.
- numArgs > 0 ifTrue:
- [self PushR: Arg0Reg.
- numArgs > 1 ifTrue:
- [self PushR: Arg1Reg]].
- self PushR: TempReg] "Restore return address"!
More information about the Vm-dev
mailing list