[Vm-dev] VM Maker: VMMaker.oscog-eem.813.mcz
commits at source.squeak.org
commits at source.squeak.org
Thu Jul 10 02:33:08 UTC 2014
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.813.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.813
Author: eem
Time: 9 July 2014, 7:30:25.276 pm
UUID: 0d763517-77f2-44e3-a5d3-317d784734c8
Ancestors: VMMaker.oscog-eem.812
Fix comment for ceImplciitReceiverTrampoline.
Correct expr -4 to expr - 4.
=============== Diff against VMMaker.oscog-eem.812 ===============
Item was changed:
----- Method: CogARMCompiler>>inlineCacheTagAt: (in category 'inline cacheing') -----
inlineCacheTagAt: callSiteReturnAddress
"Answer the inline cache tag for the return address of a send."
+ ^self literalBeforeFollowingAddress: callSiteReturnAddress - 4!
- ^self literalBeforeFollowingAddress: callSiteReturnAddress -4 !
Item was changed:
----- Method: Cogit>>generateNewspeakRuntime (in category 'initialization') -----
generateNewspeakRuntime
<option: #NewspeakVM>
| jumpMiss jumpItsTheReceiverStupid retpcReg |
<var: #jumpMiss type: #'AbstractInstruction *'>
<var: #jumpItsTheReceiverStupid type: #'AbstractInstruction *'>
"Generate the non-send runtime support for Newspeak, explicit outer and implicit receiver.
The dynamic frequency of explicit outer is so low we merely call an interpreter routine."
ceExplicitReceiverTrampoline := self genTrampolineFor: #ceExplicitReceiverAt:
called: 'ceExplicitReceiverTrampoline'
arg: SendNumArgsReg
result: ReceiverResultReg.
"Cached push implicit receiver implementation. Caller looks like
+ mov selector, SendNumArgsReg
- mov selector, ClassReg
call ceImplicitReceiver
br continue
Lclass: .word
Lmixin:: .word
continue:
If class tag matches class of receiver then mixin contains either 0 or the implicit receiver.
If 0, answer the actual receiver, otherwise the mixin.
Generate the class fetch and cache probe inline for speed.
Smashes Arg1Reg, RegClass and caller-saved regs."
opcodeIndex := 0.
self MoveMw: FoxMFReceiver r: FPReg R: ReceiverResultReg.
objectRepresentation
genGetInlineCacheClassTagFrom: ReceiverResultReg
into: ClassReg
forEntry: false.
backEnd hasLinkRegister
ifTrue: [retpcReg := LinkReg]
ifFalse: [self MoveMw: 0 r: SPReg R: (retpcReg := TempReg)].
self MoveMw: 0 r: SPReg R: retpcReg.
self MoveMw: backEnd jumpShortByteSize r: retpcReg R: Arg1Reg.
self CmpR: ClassReg R: Arg1Reg.
jumpMiss := self JumpNonZero: 0.
self MoveMw: backEnd jumpShortByteSize + BytesPerOop r: retpcReg R: ClassReg.
self CmpCq: 0 R: ClassReg.
jumpItsTheReceiverStupid := self JumpZero: 0.
self MoveR: ClassReg R: ReceiverResultReg.
jumpItsTheReceiverStupid jmpTarget: (self RetN: 0).
jumpMiss jmpTarget: self Label.
ceImplicitReceiverTrampoline := self
genTrampolineFor: #ceImplicitReceiverFor:receiver:
called: 'ceImplicitReceiverTrampoline'
numArgs: 2
arg: SendNumArgsReg
arg: ReceiverResultReg
arg: nil
arg: nil
saveRegs: false
pushLinkReg: true
resultReg: ReceiverResultReg
appendOpcodes: true!
More information about the Vm-dev
mailing list