Eric W. Biederman wrote:
Steve for a feel of my worries try compiling that code with gcc-3.3. If what I saw earlier today is right it won't work because someone has decided that aggressive inlining is bad thing...
Hmm... I assume you mean gcc-3.2.2 unless you have a pre-release. I have gcc3.2 on a RH machine, it seems to work on my code, although I had to delete a couple of asm's and fiddle with raminit.c: went back to "register int i asm ("ecx");". Otherwise gcc3.2 was more efficient (-181 lines), and it uses the %ebp differently. As a result, checking for "push" or "esp" is not effective to determine spill cases, you have to look for %ebp which it does tmp storage with mov's.
Interesting that gcc3.2 seems to ignore the -fomit-frame-pointer since there is a "leave" at the end. Not sure why.
Note the reason for the push of the %ebp in gcc2.95 is that 2.95 uses it for temp storage (hadn't noticed this before) if you set -fomit-frame-pointer, and so it push/pops it on entry and leaving.
-Steve