summaryrefslogtreecommitdiff
blob: fc1dafe83d15869a3b481dfb2e64aa82294fd71d (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
32
33
34
--- src/include/storage/s_lock.h	2005-01-01 07:03:42.000000000 +0900
+++ src/include/storage/s_lock.h	2005-08-17 23:09:19.000000000 +0900
@@ -239,6 +239,31 @@
 #endif	 /* __s390__ || __s390x__ */
 
 
+#if defined(__sh__)
+#define HAS_TEST_AND_SET
+
+typedef unsigned char slock_t;
+
+#define TAS(lock) tas(lock)
+
+static __inline__ int
+tas(volatile slock_t *lock)
+{
+	register int _res = 1;
+
+	__asm__ __volatile__(
+		"tas.b	@%1\n\t"
+		"movt	%0\n\t"
+		"xor	#1,%0"
+:		"=z"(_res)
+:		"r"(lock)
+:		"t","memory");
+	return _res;
+}
+
+#endif	 /* __sh__ */
+
+
 #if defined(__sparc__)
 #define HAS_TEST_AND_SET