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
 |