[Vm-dev] VM Maker: VMMaker.oscog-eem.1696.mcz

Eliot Miranda eliot.miranda at gmail.com
Wed Feb 24 04:36:41 UTC 2016





_,,,^..^,,,_ (phone)
> On Feb 23, 2016, at 6:48 PM, Nicolas Cellier <nicolas.cellier.aka.nice at gmail.com> wrote:
> 
> 
> 
> 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...

Pardonnez moi!  Je suis desole!


>> 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/20160223/02c64c31/attachment-0001.htm


More information about the Vm-dev mailing list