summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2004-07-24 11:39:17 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2004-07-24 11:39:17 +0000
commit9da3385a50dc0f359e6f46cade1a30678fce0a50 (patch)
tree31db42ec16b028626349471db713873ff1c69280
parent3d2c829c692a383ad7859a044d57a76acd196e32 (diff)
downloadrockbox-9da3385a50dc0f359e6f46cade1a30678fce0a50.zip
rockbox-9da3385a50dc0f359e6f46cade1a30678fce0a50.tar.gz
rockbox-9da3385a50dc0f359e6f46cade1a30678fce0a50.tar.bz2
rockbox-9da3385a50dc0f359e6f46cade1a30678fce0a50.tar.xz
gcc 3.4 has a different constraint syntax
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@4933 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/export/system.h13
1 files changed, 10 insertions, 3 deletions
diff --git a/firmware/export/system.h b/firmware/export/system.h
index cfb771d..0d601e3 100644
--- a/firmware/export/system.h
+++ b/firmware/export/system.h
@@ -49,25 +49,32 @@ extern void system_init(void);
#define nop \
asm volatile ("nop")
+/* gcc 3.4 changed the format of the constraints */
+#if (__GNUC__ >= 3) && (__GNUC_MINOR__ > 3)
+#define I_CONSTRAINT "I08"
+#else
+#define I_CONSTRAINT "I"
+#endif
+
#define or_b(mask, address) \
asm \
("or.b\t%0,@(r0,gbr)" \
: \
- : /* %0 */ "I"((char)(mask)), \
+ : /* %0 */ I_CONSTRAINT((char)(mask)), \
/* %1 */ "z"(address-GBR))
#define and_b(mask, address) \
asm \
("and.b\t%0,@(r0,gbr)" \
: \
- : /* %0 */ "I"((char)(mask)), \
+ : /* %0 */ I_CONSTRAINT((char)(mask)), \
/* %1 */ "z"(address-GBR))
#define xor_b(mask, address) \
asm \
("xor.b\t%0,@(r0,gbr)" \
: \
- : /* %0 */ "I"((char)(mask)), \
+ : /* %0 */ I_CONSTRAINT((char)(mask)), \
/* %1 */ "z"(address-GBR))
#ifndef SIMULATOR