-mregparm option of gcc doesnt work as expected?
Posted: Sun Mar 30, 2008 10:11 pm
Hi,
I have some expermentals with -mregparm option of gcc. I compile my code like this
gcc -mregparm=2 ...
So I expect that the first 2 param of a function is transferred in EAX and EDX, and from the 3rd params onward the params are put in stack. So for example calling "function(x,y,z,v)" should put "z" and "v" in stack.
But by disassembling my gcc-generated code, I surprised to see that it uses ECX for the 3rd param, and only from 4th param it uses stack. So in the above example, only "v" is in stack, but not "z" as expected (z is in ECX!!). How is that possible??
Is there any way to force gcc to use only use stack for the 3rd params onward, as it seems "-mregparm=2" didnt do what they promised?
So confused!!
I am using gcc 4.1.2 on Linux Ubuntu 7.10
Thanks,
J
I have some expermentals with -mregparm option of gcc. I compile my code like this
gcc -mregparm=2 ...
So I expect that the first 2 param of a function is transferred in EAX and EDX, and from the 3rd params onward the params are put in stack. So for example calling "function(x,y,z,v)" should put "z" and "v" in stack.
But by disassembling my gcc-generated code, I surprised to see that it uses ECX for the 3rd param, and only from 4th param it uses stack. So in the above example, only "v" is in stack, but not "z" as expected (z is in ECX!!). How is that possible??
Is there any way to force gcc to use only use stack for the 3rd params onward, as it seems "-mregparm=2" didnt do what they promised?
So confused!!
I am using gcc 4.1.2 on Linux Ubuntu 7.10
Thanks,
J