[Bug target/60638] New: Frame pointer vs push/pop
hjl.tools at gmail dot com
gcc-bugzilla@gcc.gnu.org
Mon Mar 24 17:55:00 GMT 2014
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60638
Bug ID: 60638
Summary: Frame pointer vs push/pop
Product: gcc
Version: 4.9.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: hjl.tools at gmail dot com
CC: kirill.yukhin at intel dot com, ubizjak at gmail dot com
Target: i686
GCC 4.9 disables -maccumulate-outgoing-args for -mtune=generic.
For 32-bit, given
extern int InputMove(char*, int, int, int, int);
int OutputGood(char* text, int ply, int wtm)
{
int new_move;
new_move=InputMove(text,ply,wtm,1,0);
return ((((new_move)>>12)&7));
}
-m32 -O2 -mtune=generic generates:
.p2align 4,,15
.globl OutputGood
.type OutputGood, @function
OutputGood:
.LFB0:
.cfi_startproc
subl $24, %esp
.cfi_def_cfa_offset 28
pushl $0
.cfi_def_cfa_offset 32
pushl $1
.cfi_def_cfa_offset 36
pushl 44(%esp)
.cfi_def_cfa_offset 40
pushl 44(%esp)
.cfi_def_cfa_offset 44
pushl 44(%esp)
.cfi_def_cfa_offset 48
call InputMove
sarl $12, %eax
addl $44, %esp
.cfi_def_cfa_offset 4
andl $7, %eax
ret
.cfi_endproc
.LFE0:
.size OutputGood, .-OutputGood
-m32 -O2 -mtune=generic -maccumulate-outgoing-args generates
.type OutputGood, @function
OutputGood:
.LFB0:
.cfi_startproc
subl $44, %esp
.cfi_def_cfa_offset 48
movl 56(%esp), %eax
movl $0, 16(%esp)
movl $1, 12(%esp)
movl %eax, 8(%esp)
movl 52(%esp), %eax
movl %eax, 4(%esp)
movl 48(%esp), %eax
movl %eax, (%esp)
call InputMove
sarl $12, %eax
addl $44, %esp
.cfi_def_cfa_offset 4
andl $7, %eax
ret
.cfi_endproc
.LFE0:
.size OutputGood, .-OutputGood
-m32 -O2 -mtune=generic -fno-omit-frame-pointer generates:
.type OutputGood, @function
OutputGood:
.LFB0:
.cfi_startproc
pushl %ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl %esp, %ebp
.cfi_def_cfa_register 5
subl $20, %esp
pushl $0
pushl $1
pushl 16(%ebp)
pushl 12(%ebp)
pushl 8(%ebp)
call InputMove
sarl $12, %eax
leave
.cfi_restore 5
.cfi_def_cfa 4, 4
andl $7, %eax
ret
.cfi_endproc
.LFE0:
.size OutputGood, .-OutputGood
push/pop generates the largest unwind info. Should we disable
-fomit-frame-pointer if -maccumulate-outgoing-args is also disabled
for 32-bit?
More information about the Gcc-bugs
mailing list