.file "cpu-ppc.linux.S" .section ".text" .align 2 .globl flush_icache .type flush_icache, @function flush_icache: add 4,4,3 # end += ptr #ifdef _ARCH_PPC64 clrrdi 3,3,5 # ptr &= ~0x1f #else clrrwi 3,3,5 # ptr &= ~0x1f #endif sub 4,4,3 # end -= aligned_ptr addi 4,4,0x1f # end += 0x1f #ifdef _ARCH_PPC64 srdi. 4,4,5 # end >>= 5, set cr #else srwi. 4,4,5 # end >>= 5, set cr #endif beqlr # Loop over the buffer by cache line and flush the data cache. mr 5,3 mtctr 4 loop1: dcbst 0,5 addi 5,5,0x20 bdnz loop1 # Synchronize to ensure the cache line flushes are complete. sync # Loop over the buffer by cache line and flush the instruction cache. mr 5,3 mtctr 4 loop2: icbi 0,5 addi 5,5,0x20 bdnz loop2 # Clear instruction pipeline to force reloading of instructions. isync blr .size flush_icache,.-flush_icache .section .note.GNU-stack,"",@progbits