At Fri, 11 Apr 2008 09:47:13 +0200, Paolo Bonzini wrote:
%esi is almost used for IP but use %eax for fetching the next byte, jmp also seems to use %eax so right before it is spilled and the destination address is brought into %eax.
Sounds more like the static register assignments get ignored.
It does not really get ignored, but the compiler performs more aggressive live range splitting (because it uses SSA in 4.x so live range splitting comes from free -- sometimes even if you don't want it...). OTOH the optimizer is better, which is why sends are faster.
GCC 3.x should be in the same ballpark as 2.95.
Hmm, so simple increment assigns a new value and the range is splitted there?
BTW, I got a report that says the result from gcc 3.3 was comparable with 4.1.
Now, I still have a feeling that there is some difference between the compiler in http://squeakvm.org/win32/release/Squeak-Win32-Tools-1.2.zip and 2.95.2 I compiled on my Linux as there seems some unexplained discrepancy. Can anybody with dual boot machine do some more testing? (If the machine is green and white cute one, that would be really interesting.)
-- Yoshiki
vm-dev@lists.squeakfoundation.org