summaryrefslogtreecommitdiff
path: root/libpthread/nptl/sysdeps/arc/pthread_spin_trylock.S
blob: 25f5421a23d8f6a48bcf1863266bc44fd565592c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/*
 * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
 *
 * Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
 */

#include <sysdep.h>

#define _ERRNO_H 1
#include <bits/errno.h>

; int pthread_spin_trylock(pthread_spinlock_t *lock)
; Return EBUSY is already locked, 0 if not

ENTRY(pthread_spin_trylock)
	mov_s	r1, 1
	ex	r1, [r0]
	tst	r1, r1
	mov.z	r0, 0
	j.d	[blink]
	mov.nz	r0, EBUSY

;	slightly faster, but difficult to follow
;	mov_s	r1, r0
;	mov_s	r0, 1
;	ex	r0, [r1]
;	tst	r0, r0
;	j.d	[blink]
;	mov.nz	r0, EBUSY

END(pthread_spin_trylock)