mirror of
				https://github.com/qemu/qemu.git
				synced 2025-10-31 04:06:46 +00:00 
			
		
		
		
	 b345e14053
			
		
	
	
		b345e14053
		
	
	
	
	
		
			
			The Exclusive Instructions provide a general-purpose mechanism for atomic updates of memory-based synchronization variables that can be used for exclusion algorithms. Use cmpxchg-based implementation that is sufficient for the typical use of exclusive access in atomic operations. Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
		
			
				
	
	
		
			49 lines
		
	
	
		
			656 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			656 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| #include "macros.inc"
 | |
| 
 | |
| test_suite exclusive
 | |
| 
 | |
| #if XCHAL_HAVE_EXCLUSIVE
 | |
| 
 | |
| test exclusive_nowrite
 | |
|     movi    a2, 0x29
 | |
|     wsr     a2, atomctl
 | |
|     clrex
 | |
|     movi    a2, 1f
 | |
|     movi    a3, 1
 | |
|     s32ex   a3, a2
 | |
|     getex   a3
 | |
|     assert  eqi, a3, 0
 | |
|     l32i    a3, a2, 0
 | |
|     assert  eqi, a3, 3
 | |
| 
 | |
| .data
 | |
| .align 4
 | |
| 1:
 | |
|     .word   3
 | |
| .text
 | |
| test_end
 | |
| 
 | |
| test exclusive_write
 | |
|     movi    a2, 0x29
 | |
|     wsr     a2, atomctl
 | |
|     movi    a2, 1f
 | |
|     l32ex   a3, a2
 | |
|     assert  eqi, a3, 3
 | |
|     movi    a3, 2
 | |
|     s32ex   a3, a2
 | |
|     getex   a3
 | |
|     assert  eqi, a3, 1
 | |
|     l32i    a3, a2, 0
 | |
|     assert  eqi, a3, 2
 | |
| 
 | |
| .data
 | |
| .align 4
 | |
| 1:
 | |
|     .word   3
 | |
| .text
 | |
| test_end
 | |
| 
 | |
| #endif
 | |
| 
 | |
| test_suite_end
 |