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) ? \
__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) ? \
#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