[vm] Large Frame size

Rob Withers reefedjib at yahoo.com
Wed Oct 24 00:24:22 UTC 2007


----- Original Message ----- 
From: "Hans-Martin Mosner" <hmm at heeg.de>
To: "The general-purpose Squeak developers list" 
<squeak-dev at lists.squeakfoundation.org>
Sent: Tuesday, October 23, 2007 1:50 PM
Subject: Re: [vm] Large Frame size


> Rob Withers schrieb:
>> I have a need for a larger frame size.  I am defining internal temps
>> for some changes I am making with macro transformations, and I ran
>> into the limit of the frame size when compiling some method in the
>> image.   So what would be a good frame size for the large frame?
>> Could someone guide me as to what I would need to change in the vm to
>> support this?  Will I need to use the SystemTracer to get an image
>> prepared for using them and avoiding problems with the old large frame
>> size going away?
>>
> An easier solution might be to modify the compiler to stuff some temps
> into an Array and generate code to access that Array where you would
> normally generate temp var accesses. That way, you don't have to change
> the VM, and the cost would only be paid for the very few methods
> exceeding Squeak's large frame size.

That's a very interesting idea.  When/Where could I initialize the array?

I dug deeper and found some interesting things.  It is not just the internal 
temps that I am defining that is creating the need for more frame size.  I 
am also increasing the depth of the stack needed, as code that once was 
macroed, is now a first class message send, and so are pushing args onto the 
stack.   This seems to get worse with nested calls for some reason.

For example, in the GeniePlugin, the method 
#primSameClassAbsoluteStrokeDistanceMyPoints:otherPoints:myVectors:otherVectors:mySquaredLengths:otherSquaredLengths:myAngles:otherAngles:maxSizeAndReferenceFlag:rowBase:rowInsertRemove:rowInsertRemoveCount: 
normally generates nTemps: 50  and stackDepth: 6, exactly the large frame 
size.  With the code changing the macro transforms on, it generates: nTemps: 
50  stackDepth: 15.  Finally with the macro temps turned on it generates 
nTemps: 63  stackDepth: 15.  This seems to be due to nested #to:do: calls 
with #ifTrue:ifFalse:, both of which I am transforming.

So, even without using macro temps, I am still looking at a frame size of 
65, exceeding the large frame size of 56.  The max is 78.  I think I'll work 
on defining a frame size of 80, as a nice round number.

Will I need to use the SystemTracer to make this change, or will it create 
the right size contexts when I run an image file?

Cheers,
Rob 




More information about the Squeak-dev mailing list