[Vm-dev] VM Maker: VMMaker.oscog-eem.1696.mcz
Nicolas Cellier
nicolas.cellier.aka.nice at gmail.com
Wed Feb 24 02:48:16 UTC 2016
2016-02-24 1:35 GMT+01:00 <commits at source.squeak.org>:
>
> Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
> http://source.squeak.org/VMMaker/VMMaker.oscog-eem.1696.mcz
>
> ==================== Summary ====================
>
> Name: VMMaker.oscog-eem.1696
> Author: eem
> Time: 23 February 2016, 4:35:02.71435 pm
> UUID: 4db47df6-c329-44ca-a255-7483a9cac28f
> Ancestors: VMMaker.oscog-tfel.1695
>
> Fix serious bug in jitted perform: primitive. Thanks to Stéphane Ducasse
> for finding and to Levente Uzoni for diagnosing
Rendons à Stéphane Rollandin ce qui n'est pas à César...
> the bug. If the argument count is one greater than the max number of
> register aerguments (2 in Spur, hence perform:with:with:) then the code to
> remove the receiver and arguments from the stack forgot to remove the
> receiver and selector.
>
> =============== Diff against VMMaker.oscog-tfel.1695 ===============
>
> Item was changed:
> ----- Method: StackToRegisterMappingCogit>>adjustArgumentsForPerform:
> (in category 'primitive generators') -----
> adjustArgumentsForPerform: numArgs
> "Generate code to adjust the possibly stacked arguments immediately
> before jumping to a method looked up by a perform primitive."
> self assert: self numRegArgs <= 2.
> self assert: numArgs >= 1.
> numArgs <= self numRegArgs ifTrue:
> [numArgs = 2 ifTrue:
> [self MoveR: Arg1Reg R: Arg0Reg].
> ^self].
>
> + "If the arity is one more than the max numRegArgs, the receiver
> and all arguments have to be removed from the stack."
> self numRegArgs + 1 = numArgs ifTrue:
> [backEnd hasLinkRegister
> ifTrue:
> + [self numRegArgs = 2
> + ifTrue:
> + [self MoveMw: 0 r: SPReg
> R: Arg1Reg.
> + self MoveMw: objectMemory
> wordSize r: SPReg R: Arg0Reg]
> + ifFalse:
> + [self MoveMw: 0 r: SPReg
> R: Arg0Reg].
> + self AddCq: numArgs + 1 * objectMemory
> wordSize R: SPReg]
> - [self numRegArgs = 2 ifTrue:
> - [self PopR: Arg1Reg].
> - self PopR: Arg0Reg]
> ifFalse:
> + [self MoveMw: 0 r: SPReg R: TempReg. "save
> retpc"
> + self numRegArgs = 2
> + ifTrue:
> + [self MoveMw: objectMemory
> wordSize r: SPReg R: Arg1Reg.
> + self MoveMw: objectMemory
> wordSize * 2 r: SPReg R: Arg0Reg]
> + ifFalse:
> + [self MoveMw: objectMemory
> wordSize r: SPReg R: Arg0Reg].
> + self AddCq: numArgs + 1 * objectMemory
> wordSize R: SPReg.
> + self MoveR: TempReg Mw: 0 r: SPReg
> "Overwrite pushed receiver; ReceiverResultReg already contains receiver."].
> - [self PopR: TempReg. "save retpc"
> - self numRegArgs = 2 ifTrue:
> - [self PopR: Arg1Reg].
> - self MoveMw: 0 r: SPReg R: Arg0Reg.
> - self MoveR: TempReg Mw: 0 r: SPReg].
> ^self].
>
> "e.g. Receiver Receiver
> Selector/Arg0 => Arg1
> Arg1 Arg2
> Arg2 sp-> Arg3
> sp-> Arg3"
> super adjustArgumentsForPerform: numArgs!
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20160224/bf0dc7bf/attachment.htm
More information about the Vm-dev
mailing list