Function Parameters vs. Prologue (fastcall + O1 + -fschedule-insns2)
Geyslan Gregório Bem
geyslan@gmail.com
Tue Jun 18 14:24:00 GMT 2013
Hi,
I'm curious about what is causing this reordering (prologue with the
function parameters):
# gcc structs.c -o structs -m32 -O1 -fschedule-insns2
(gdb) disas main
Dump of assembler code for function main:
0x0804868c <+0>: push %ebp
0x0804868d <+1>: mov $0x3,%edx
0x08048692 <+6>: mov %esp,%ebp
0x08048694 <+8>: mov $0x2,%ecx
0x08048699 <+13>: and $0xfffffff0,%esp
0x0804869c <+16>: call 0x804845c <funcao>
The code:
__attribute__((fastcall)) void funcao(int i, int a) {
...
int main() {
int i, a;
i = 2;
i = 3;
funcao(i, a);
...
When I remove one of them (fastcall or schedule-insns2), the binary is
generated in logic order:
(gdb) disas main
Dump of assembler code for function main:
0x08048340 <+0>: push %ebp
0x08048341 <+1>: mov %esp,%ebp
0x08048343 <+3>: and $0xfffffff0,%esp
0x08048346 <+6>: sub $0x10,%esp
0x08048349 <+9>: movl $0x3,0x4(%esp)
0x08048351 <+17>: movl $0x2,(%esp)
0x08048358 <+24>: call 0x8048450 <funcao>
... or
(gdb) disas main
Dump of assembler code for function main:
0x0804868c <+0>: push %ebp
0x0804868d <+1>: mov %esp,%ebp
0x0804868f <+3>: and $0xfffffff0,%esp
0x08048692 <+6>: mov $0x3,%edx
0x08048697 <+11>: mov $0x2,%ecx
0x0804869c <+16>: call 0x804845c <funcao>
Someone knows something about the combined use of the fastcall
attribute and schedule-insns2 option? Is there an issue?
Regards.
Geyslan Gregório Bem
http://hackingbits.com
@geyslangb
br.linkedin.com/in/geyslan
More information about the Gcc-help
mailing list