On Thu, Sep 3, 2009 at 11:49 PM, Felix Zielcke<fziel...@z-51.de> wrote: > Am Donnerstag, den 03.09.2009, 17:36 +0200 schrieb Robert Millan: >> On Wed, Sep 02, 2009 at 12:20:19PM +0800, Bean wrote: >> > >> > Hi, >> > >> > Oh, I was wrong previously, gcc does respect __attribute__ >> > ((__regparm__ (3))) flag (I forget to add -Os so it still uses stack >> > to store value). And the bug is still there ! Try this test program: >> >> Thanks Bean. I have opened an entry in GCC bugzilla, and submitted your >> test program in it: >> >> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41246 >> >> Hopefully they'll fix it in later versions, and hopefully people will >> upgrade soon. In the meantime, we're stuck with it. >> > > Is there any reason why we fallback to regparm 1 and not to regparm 2? > According to the output of the testcase in the above bug report 2 seems > to work too?
Hi, If the first parameter is 64-bit, it will use two registers, so the second parameter is %ecx, which conflicts with local environment pointer. To see it in action, change parameter int aa to long long aa in the test program and compile it with -mregparm=2. -- Bean gitgrub home: http://github.com/grub/grub/ my fork page: http://github.com/bean123/grub/ _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org http://lists.gnu.org/mailman/listinfo/grub-devel