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