https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67288

Jiu Fu Guo <guojiufu at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|REOPENED                    |RESOLVED
         Resolution|---                         |FIXED
                 CC|                            |guojiufu at gcc dot gnu.org

--- Comment #22 from Jiu Fu Guo <guojiufu at gcc dot gnu.org> ---
 (In reply to Segher Boessenkool from comment #4)
> It's not fixed.  On trunk we get:
> 
> ===
> flush_dcache_range:
>         rlwinm 3,3,0,0,27
>         addi 4,4,15
>         subf 4,3,4
>         srwi. 9,4,4
>         beq 0,.L1
>         slwi 9,9,4
>         addi 9,9,-16
>         srwi 9,9,4
>         addi 9,9,1
>         mtctr 9
>         .p2align 4,,15
> .L3:
>         dcbf 0, 3
>         addi 3,3,16
>         bdnz .L3
>         sync
> .L1:
>         blr
> ===
> 
> (-m32, edited a bit).
> 
> The slwi/addi/srwi/addi is unnecessary.

With the latest trunk (which contains
https://gcc.gnu.org/g:8a15faa730f99100f6f3ed12663563356ec5a2c0)
The asm code is:

        .cfi_startproc
        rldicr %r3,%r3,0,59
        addi %r9,%r4,15
        subf %r9,%r3,%r9
        srwi %r9,%r9,4
        cmpwi %cr0,%r9,0
        beqlr %cr0
        rldicl %r9,%r9,0,32
        mtctr %r9
        .p2align 4,,15
.L3:
        dcbf 0, %r3
        addi %r3,%r3,16
        bdnz .L3
        sync
        blr

Reply via email to