-mregparm on gcc doesnt work correctly?



Hi,

I have some expermentals with -mregparm option of gcc. I compile my
code (16bit, if that matters) 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

.



Relevant Pages

  • Re: Finding the callstack programmatically
    ... try to compile it (with gcc -c) and link it with my program and if I call ... >> function call stack in the SIGSEGV handler? ...
    (comp.unix.programmer)
  • Re: one simple question
    ... but if you use gcc -S something.s something.c ... >> I compile a test C file. ... >> beginning of the assembly code. ... > the stack pointer... ...
    (freebsd-questions)
  • Re: Why is so much space allocated on the stack?
    ... I have some c code that I compile with gcc in cygwin and the stack for ... Why does the stack increase by 40? ... gcc tries to ...
    (comp.lang.asm.x86)
  • Re: -mregparm on gcc doesnt work correctly?
    ... I have some expermentals with -mregparm option of gcc. ... I compile my ... So I expect that the first 2 param of a function is transferred in EAX ... and from the 3rd params onward the params are put in stack. ...
    (comp.lang.asm.x86)
  • Re: how to make gcc know #inlcude ?
    ... Mopelee wrote: ... I have used param -I of GCC to tell the *.h file of framework at eg. ...
    (comp.lang.c)