47 lines
		
	
	
		
			992 B
		
	
	
	
		
			ArmAsm
		
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			992 B
		
	
	
	
		
			ArmAsm
		
	
	
    .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
 |