34 lines
		
	
	
		
			420 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			420 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
;; Core of the spinlock implementation
 | 
						|
;;
 | 
						|
;; Copyright (C) 2004 Axis Communications AB.
 | 
						|
;;
 | 
						|
;; Author: Mikael Starvik
 | 
						|
 | 
						|
 | 
						|
	.global cris_spin_lock
 | 
						|
	.global cris_spin_trylock
 | 
						|
 | 
						|
	.text
 | 
						|
 | 
						|
cris_spin_lock:
 | 
						|
	clearf	p
 | 
						|
1:	test.b	[$r10]
 | 
						|
	beq	1b
 | 
						|
	clearf	p
 | 
						|
	ax
 | 
						|
	clear.b [$r10]
 | 
						|
	bcs     1b
 | 
						|
	clearf	p
 | 
						|
	ret
 | 
						|
	nop
 | 
						|
 | 
						|
cris_spin_trylock:
 | 
						|
	clearf	p
 | 
						|
1:	move.b	[$r10], $r11
 | 
						|
	ax
 | 
						|
	clear.b [$r10]
 | 
						|
        bcs	1b
 | 
						|
        clearf	p
 | 
						|
	ret
 | 
						|
	movu.b	$r11,$r10
 |