mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-04 00:51:42 +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
							 |