This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Ways to fill the stack


On Mon, Feb 11, 2013 at 2:02 AM,  <sztfg@yandex.ru> wrote:
>
> For this case:
...
> with gcc -c -march=native -O2 sample.c -o sample.o
> I got this:
...

> As you can see, mov %r8,(%rsp) produse 4 bytes: 4c 89 04 24 and mov %rdi,0x8(%rsp) produces 5 bytes: 48 89 7c 24 08
> push %r8 produces only 2 byte 41 50 and push %rax (or %rcx %rdx ...) produces one byte
> You can check other instruction length, for example movq %rax, (%rsp) etc.

If your main interest is code size, you should compile with -Os.  By
default GCC optimizes for runtime performance.  When I try -Os GCC
builds the array separately and copies it in using rep movsl.

Still, you may be right that in this case it would be slightly more
efficient to construct the local arrays using push instructions.
Unfortunately I suspect that implementing that in GCC's framework
would be fairly complex.  Currently GCC builds all variables like
arrays, that can not be placed in registers on the stack, and
initializes them on the stack.  Changing the initialization to use
push instructions would require reworking those initializations.  I
doubt cases would arise very often in real program.  However, I'm
certainly not opposed to it if somebody wants to work on it.

Ian


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]