Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.782.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.782 Author: eem Time: 26 June 2014, 4:38:42.756 pm UUID: 0f40ec66-356f-4b59-9b04-c5904c7e9da1 Ancestors: VMMaker.oscog-eem.781
The method abort trampolines shouldn't pop anything, especially now we have the pushLinkreg: arg to manage the LinkReg more easily.
=============== Diff against VMMaker.oscog-eem.781 ===============
Item was changed: ----- Method: Cogit>>genMethodAbortTrampoline (in category 'initialization') ----- genMethodAbortTrampoline "Generate the abort for a method. This abort performs either a call of ceSICMiss: to handle a single-in-line cache miss or a call of ceStackOverflow: to handle a stack overflow. It distinguishes the two by testing ResultReceiverReg. If the register is zero then this is a stack-overflow because a) the receiver has already been pushed and so can be set to zero before calling the abort, and b) the receiver must always contain an object (and hence be non-zero) on SIC miss." | jumpSICMiss | <var: #jumpSICMiss type: #'AbstractInstruction *'> opcodeIndex := 0. self CmpCq: 0 R: ReceiverResultReg. jumpSICMiss := self JumpNonZero: 0. - "on machines with a link register, pop the stack if the ReceiverResultReg = 0, - i.e. if coming through the stack check abort; frame build has already pushed it." - backEnd hasLinkRegister ifTrue: - [self AddCq: BytesPerWord R: SPReg].
self compileTrampolineFor: #ceStackOverflow: numArgs: 1 arg: SendNumArgsReg arg: nil arg: nil arg: nil saveRegs: false pushLinkReg: true resultReg: nil. jumpSICMiss jmpTarget: self Label. ^self genTrampolineFor: #ceSICMiss: called: 'ceMethodAbort' numArgs: 1 arg: ReceiverResultReg arg: nil arg: nil arg: nil saveRegs: false pushLinkReg: true resultReg: nil appendOpcodes: true!
Item was changed: ----- Method: StackToRegisterMappingCogit>>genMethodAbortTrampolineFor: (in category 'initialization') ----- genMethodAbortTrampolineFor: numArgs "Generate the abort for a method. This abort performs either a call of ceSICMiss: to handle a single-in-line cache miss or a call of ceStackOverflow: to handle a stack overflow. It distinguishes the two by testing ResultReceiverReg. If the register is zero then this is a stack-overflow because a) the receiver has already been pushed and so can be set to zero before calling the abort, and b) the receiver must always contain an object (and hence be non-zero) on SIC miss." | jumpSICMiss | <var: #jumpSICMiss type: #'AbstractInstruction *'> opcodeIndex := 0. self CmpCq: 0 R: ReceiverResultReg. jumpSICMiss := self JumpNonZero: 0. - "on machines with a link register, pop the stack if the ReceiverResultReg = 0, - i.e. if coming through the stack check abort; frame build has already pushed it." - backEnd hasLinkRegister ifTrue: - [self AddCq: BytesPerWord R: SPReg].
self compileTrampolineFor: #ceStackOverflow: numArgs: 1 arg: SendNumArgsReg arg: nil arg: nil arg: nil saveRegs: false pushLinkReg: true resultReg: nil. jumpSICMiss jmpTarget: self Label. backEnd genPushRegisterArgsForAbortMissNumArgs: numArgs. ^self genTrampolineFor: #ceSICMiss: called: (self trampolineName: 'ceMethodAbort' numArgs: (numArgs <= self numRegArgs ifTrue: [numArgs] ifFalse: [-1])) numArgs: 1 arg: ReceiverResultReg arg: nil arg: nil arg: nil saveRegs: false pushLinkReg: true resultReg: nil appendOpcodes: true!
vm-dev@lists.squeakfoundation.org