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