diff options
| author | Jens Arnold <amiconn@rockbox.org> | 2007-08-01 18:57:48 +0000 |
|---|---|---|
| committer | Jens Arnold <amiconn@rockbox.org> | 2007-08-01 18:57:48 +0000 |
| commit | 39357e9235aba8527aab5edf6aaf5cbfe2891eb0 (patch) | |
| tree | 589248b9959c06699162ad4eed5e6ee1c27f48a4 | |
| parent | 291c9f8a4e6416c25bf2221d2af722eb523a36f6 (diff) | |
| download | rockbox-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.h | 14 |
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_) \ |