summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2007-08-01 18:57:48 +0000
committerJens Arnold <amiconn@rockbox.org>2007-08-01 18:57:48 +0000
commit39357e9235aba8527aab5edf6aaf5cbfe2891eb0 (patch)
tree589248b9959c06699162ad4eed5e6ee1c27f48a4
parent291c9f8a4e6416c25bf2221d2af722eb523a36f6 (diff)
downloadrockbox-39357e9235aba8527aab5edf6aaf5cbfe2891eb0.zip
rockbox-39357e9235aba8527aab5edf6aaf5cbfe2891eb0.tar.gz
rockbox-39357e9235aba8527aab5edf6aaf5cbfe2891eb0.tar.bz2
rockbox-39357e9235aba8527aab5edf6aaf5cbfe2891eb0.tar.xz
Atomic mutexes on SH1.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14121 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/export/thread.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/firmware/export/thread.h b/firmware/export/thread.h
index 81c7c23..2915d23 100644
--- a/firmware/export/thread.h
+++ b/firmware/export/thread.h
@@ -169,6 +169,20 @@ struct core_entry {
); \
old; \
})
+#elif CONFIG_CPU == SH7034
+#define test_and_set(x_, v_) \
+({ \
+ uint32_t old; \
+ asm volatile ( \
+ "tas.b @%[x] \r\n" \
+ "mov #-1, %[old] \r\n" \
+ "negc %[old], %[old] \r\n" \
+ : [old]"=r"(old) \
+ : [v]"M"((uint32_t)v_), /* Value of v_ must be 1 */ \
+ [x]"r"((uint8_t *)x_) \
+ ); \
+ old; \
+ })
#else
/* default for no asm version */
#define test_and_set(x_, v_) \