mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-10-30 22:51:41 +01:00 
			
		
		
		
	
		
			
	
	
		
			33 lines
		
	
	
		
			904 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
		
		
			
		
	
	
			33 lines
		
	
	
		
			904 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
|   | /* | ||
|  | This little bit of code is executed in-place by one CPU, but copied to a different memory region | ||
|  | by the other CPU. Make sure it stays position-independent. | ||
|  | */ | ||
|  |     .text | ||
|  |     .align  4
 | ||
|  |     .global test_fastbus_cp
 | ||
|  |     .type   test_fastbus_cp,@function
 | ||
|  | //Args: | ||
|  | //a2 - fifo addr | ||
|  | //a3 - buf addr | ||
|  | //a4 - len | ||
|  | //a5 - ptr to int to use | ||
|  | test_fastbus_cp: | ||
|  | 	entry a1,64 | ||
|  | back: | ||
|  | 	beqi a4, 0, out		//check if loop done | ||
|  | 	s32i a4, a5, 0		//store value, for shits and/or giggles | ||
|  | 	memw				//make sure write happens | ||
|  | 	l32i a4, a5, 0		//load value again, to thwart any prediction in the pipeline | ||
|  | 	bbsi a4, 0, pred	//Random jump to check predictive reads. Both branches should do the same. | ||
|  | 	l32i a6, a2, 0		//read from fifo 1 | ||
|  | 	j predout | ||
|  | pred: | ||
|  | 	l32i a6, a2, 0		//read from fifo 2 | ||
|  | predout: | ||
|  | 	s8i a6, a3, 0		//store result | ||
|  | 	addi a3, a3, 1		//inc ptr | ||
|  | 	addi a4, a4, -1		//next | ||
|  | 	j back				//loop again | ||
|  | out: | ||
|  | 	retw				//and we are done |