]> rtime.felk.cvut.cz Git - sysless.git/commitdiff
MSP430 definition of atomic bit operation updated.
authorPavel Pisa <pisa@cmp.felk.cvut.cz>
Sun, 29 May 2011 19:22:54 +0000 (21:22 +0200)
committerPavel Pisa <pisa@cmp.felk.cvut.cz>
Sun, 29 May 2011 19:22:54 +0000 (21:22 +0200)
The use of "+m" constrain solves problem with bung
of warnings generated during compilation.

Signed-off-by: Pavel Pisa <pisa@cmp.felk.cvut.cz>
arch/msp430/generic/defines/cpu_def.h
arch/msp430/generic/libs/Makefile.omk
arch/msp430/generic/libs/generic_bit_op_table_0_15.c [new file with mode: 0644]

index 1265ee9271713187fe37419a5ebccf6e67226c55..5e0f180e22c9f56c9fa535799a43007f2b0ed549 100644 (file)
@@ -5,8 +5,8 @@
   cpu_def.h - low level CPU support for C programs
               atomic bit operations, interrupts and exceptions
  
-  Copyright (C) 2001 by Pavel Pisa pisa@cmp.felk.cvut.cz
-            (C) 2002 by PiKRON Ltd. http://www.pikron.com
+  Copyright (C) 2001-2011 by Pavel Pisa pisa@cmp.felk.cvut.cz
+            (C) 2002-2011 by PiKRON Ltd. http://www.pikron.com
 
   Functions names and concept inspired by Linux kernel
 
 
 /* atomic access routines */
 
-extern unsigned int __generic_bit_op_table_0_15[16];
+extern const unsigned int __generic_bit_op_table_0_15[16];
 
 #define __constant_set_bit(nr,v) \
-       ({ __asm__ __volatile__ ("bis.w %1,%0" : "=m" (*(v)) : "i" (1<<(nr)),"0"(*(v))); })
+       ({ __asm__ __volatile__ ("bis.w %1,%0" : "+m" (*(v)) : "i" (1<<(nr))); })
 
 #define __generic_set_bit(nr,v) \
-       ({ __asm__ __volatile__ ("bis.w %1,%0" : "=m" (*(v)) : "g" (__generic_bit_op_table_0_15[(nr)]),"0"(*(v))); })
+       ({ __asm__ __volatile__ ("bis.w %1,%0" : "+m" (*(v)) : "g" (__generic_bit_op_table_0_15[(nr)])); })
 
 #define set_bit(nr,v) \
        (__builtin_constant_p(nr) ? \
@@ -31,10 +31,10 @@ extern unsigned int __generic_bit_op_table_0_15[16];
           __generic_set_bit(nr, v))
 
 #define __constant_clear_bit(nr,v) \
-       ({ __asm__ __volatile__ ("bic.w %1,%0" : "=m" (*(v)) : "i" (1<<(nr)),"0"(*(v))); })
+       ({ __asm__ __volatile__ ("bic.w %1,%0" : "+m" (*(v)) : "i" (1<<(nr))); })
 
 #define __generic_clear_bit(nr,v) \
-       ({ __asm__ __volatile__ ("bic.w %1,%0" : "=m" (*(v)) : "g" (__generic_bit_op_table_0_15[(nr)]),"0"(*(v))); })
+       ({ __asm__ __volatile__ ("bic.w %1,%0" : "+m" (*(v)) : "g" (__generic_bit_op_table_0_15[(nr)])); })
 
 #define clear_bit(nr,v) \
        (__builtin_constant_p(nr) ? \
@@ -43,16 +43,16 @@ extern unsigned int __generic_bit_op_table_0_15[16];
 
 
 #define atomic_clear_mask_w(mask, v) \
-       __asm__ __volatile__ ("bic.w %1,%0" : "=m" (*(v)) : "ig" (mask),"0"(*(v)))
+       __asm__ __volatile__ ("bic.w %1,%0" : "+m" (*(v)) : "ig" (mask))
 
 #define atomic_set_mask_w(mask, v) \
-       __asm__ __volatile__ ("bis.w %1,%0" : "=m" (*(v)) : "ig" (mask),"0"(*(v)))
+       __asm__ __volatile__ ("bis.w %1,%0" : "+m" (*(v)) : "ig" (mask))
 
 #define atomic_clear_mask_b(mask, v) \
-       __asm__ __volatile__ ("bic.b %1,%0" : "=m" (*(v)) : "ig" (mask),"0"(*(v)))
+       __asm__ __volatile__ ("bic.b %1,%0" : "+m" (*(v)) : "ig" (mask))
 
 #define atomic_set_mask_b(mask, v) \
-       __asm__ __volatile__ ("bis.b %1,%0" : "=m" (*(v)) : "ig" (mask),"0"(*(v)))
+       __asm__ __volatile__ ("bis.b %1,%0" : "+m" (*(v)) : "ig" (mask))
 
 #define atomic_clear_mask atomic_clear_mask_w
 #define atomic_set_mask atomic_set_mask_w
index f4d525db5df8d69cb39aff0fd45e4e97ecc7609b..ad898260895a9252dbcf3aca27e72fea1685e769 100644 (file)
@@ -2,4 +2,4 @@
 
 include_HEADERS = stdio.h unistd.h malloc.h
 
-lib_obj_SOURCES = system_stub.c
+lib_obj_SOURCES = system_stub.c generic_bit_op_table_0_15.c
diff --git a/arch/msp430/generic/libs/generic_bit_op_table_0_15.c b/arch/msp430/generic/libs/generic_bit_op_table_0_15.c
new file mode 100644 (file)
index 0000000..a404810
--- /dev/null
@@ -0,0 +1,8 @@
+#include <cpu_def.h>
+
+const unsigned int __generic_bit_op_table_0_15[16] = {
+  0x0001, 0x0002, 0x0004, 0x0008,
+  0x0010, 0x0020, 0x0040, 0x0080,
+  0x0100, 0x0200, 0x0400, 0x0800,
+  0x1000, 0x2000, 0x4000, 0x8000,
+};