From a8cadd8181e53320109d2af61f0c7edea262d325 Mon Sep 17 00:00:00 2001 From: Jens Arnold Date: Sat, 2 Jul 2005 12:18:10 +0000 Subject: Iriver: atomic I/O port manipulation macros, to avoid interference between normal and interrupt code. Todo: all other places that do port manipulation on ports which may also be changed from an intterupt should use that as well. It even decreases binary size a bit. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@6985 a1c6a512-1295-4272-9138-f99709370657 --- firmware/export/system.h | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) (limited to 'firmware/export') diff --git a/firmware/export/system.h b/firmware/export/system.h index e98c362a8c..56fee6bdab 100644 --- a/firmware/export/system.h +++ b/firmware/export/system.h @@ -81,25 +81,48 @@ enum { #if CONFIG_CPU == SH7034 #define or_b(mask, address) \ - asm \ - ("or.b\t%0,@(r0,gbr)" \ - : \ + asm \ + ("or.b %0,@(r0,gbr)" \ + : \ : /* %0 */ I_CONSTRAINT((char)(mask)), \ /* %1 */ "z"(address-GBR)) #define and_b(mask, address) \ asm \ - ("and.b\t%0,@(r0,gbr)" \ + ("and.b %0,@(r0,gbr)" \ : \ - : /* %0 */ I_CONSTRAINT((char)(mask)), \ + : /* %0 */ I_CONSTRAINT((char)(mask)), \ /* %1 */ "z"(address-GBR)) #define xor_b(mask, address) \ asm \ - ("xor.b\t%0,@(r0,gbr)" \ + ("xor.b %0,@(r0,gbr)" \ : \ - : /* %0 */ I_CONSTRAINT((char)(mask)), \ + : /* %0 */ I_CONSTRAINT((char)(mask)), \ /* %1 */ "z"(address-GBR)) + +#elif CONFIG_CPU == MCF5249 +#define or_l(mask, address) \ + asm \ + ("or.l %0,(%1)" \ + : \ + : /* %0 */ "d"(mask), \ + /* %1 */ "a"(address)) + +#define and_l(mask, address) \ + asm \ + ("and.l %0,(%1)" \ + : \ + : /* %0 */ "d"(mask), \ + /* %1 */ "a"(address)) + +#define eor_l(mask, address) \ + asm \ + ("eor.l %0,(%1)" \ + : \ + : /* %0 */ "d"(mask), \ + /* %1 */ "a"(address)) + #endif #ifndef SIMULATOR -- cgit v1.2.3