http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49781
--- Comment #5 from Uros Bizjak <ubizjak at gmail dot com> 2011-08-03 10:27:35
UTC ---
(In reply to comment #4)
> (In reply to comment #0)
>
> > Many lea insns can be combined with the load/store insn followed.
>
> I have a patch that generates addr32 prefix. The result:
Er, wrong one (that was -m64). This one is -mx32:
.file "pr49781.c"
.text
.p2align 4,,15
.globl foo
.type foo, @function
foo:
.LFB0:
.cfi_startproc
xorl %eax, %eax
testl %edi, %edi
leal 4+heap(%rip), %edx
jle .L10
.p2align 4,,10
.p2align 3
.L7:
movl %eax, (%edx,%eax,4)
addl $1, %eax
cmpl %edi, %eax
jne .L7
leal -1(%rdi), %eax
movl %eax, %ecx
.L3:
movl $573, %esi
leal 2296+heap(%rip), %r10d
leal 2292+heap(%rip), %r9d
leal heap(%rip), %r11d
jmp .L5
.p2align 4,,10
.p2align 3
.L11:
movl (%r11d,%eax,4), %ecx
subl $1, %eax
.L5:
movl 4+heap(%rip), %r8d
movl %eax, %edx
subl $2, %esi
subl %edi, %edx
movl %ecx, 4+heap(%rip)
sall $3, %edx
cmpl $1, %eax
movl %r8d, (%r10d,%edx)
movl %ecx, (%r9d,%edx)
jg .L11
movl %eax, heap_len(%rip)
movl %esi, heap_max(%rip)
ret
.L10:
movl heap(%rip), %ecx
xorl %edi, %edi
movl $-1, %eax
jmp .L3
.cfi_endproc
.LFE0:
.size foo, .-foo
.section .text.startup,"ax",@progbits
.p2align 4,,15
.globl main
.type main, @function
main:
.LFB1:
.cfi_startproc
subq $8, %rsp
.cfi_def_cfa_offset 16
movl $286, %edi
call foo@PLT
xorl %eax, %eax
addq $8, %rsp
.cfi_def_cfa_offset 8
ret
.cfi_endproc
.LFE1:
.size main, .-main
.local heap_len
.comm heap_len,4,4
.local heap_max
.comm heap_max,4,4
.local heap
.comm heap,2292,32
.ident "GCC: (GNU) 4.7.0 20110803 (experimental) [trunk revision
177229]"
.section .note.GNU-stack,"",@progbits