http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49781

--- Comment #4 from Uros Bizjak <ubizjak at gmail dot com> 2011-08-03 10:24:17 
UTC ---
(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:

    .file    "pr49781.c"
    .text
    .p2align 4,,15
    .globl    foo
    .type    foo, @function
foo:
.LFB0:
    .cfi_startproc
    testl    %edi, %edi
    jle    .L9
    subl    $1, %edi
    leaq    4+heap(%rip), %rdx
    xorl    %eax, %eax
    mov    %edi, %ecx
    addq    $1, %rcx
    .p2align 4,,10
    .p2align 3
.L4:
    movl    %eax, (%rdx,%rax,4)
    addq    $1, %rax
    cmpq    %rcx, %rax
    jne    .L4
    movl    %edi, %ecx
.L3:
    leaq    2288+heap(%rip), %rax
    movl    $571, %edx
    jmp    .L6
    .p2align 4,,10
    .p2align 3
.L10:
    leaq    heap(%rip), %rcx
    movslq    %edi, %rsi
    subl    $1, %edi
    movl    (%rcx,%rsi,4), %ecx
.L6:
    movl    4+heap(%rip), %esi
    movl    %ecx, 4+heap(%rip)
    movl    %ecx, -4(%rax)
    movl    %esi, (%rax)
    movl    %edx, %esi
    subq    $8, %rax
    subl    $2, %edx
    cmpl    $1, %edi
    jg    .L10
    movl    %edi, heap_len(%rip)
    movl    %esi, heap_max(%rip)
    ret
.L9:
    movl    heap(%rip), %ecx
    movl    $-1, %edi
    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 20110801 (experimental) [trunk revision
176998]"
    .section    .note.GNU-stack,"",@progbits

Reply via email to