4 * This file is licensed under the terms of the GNU General Public License
5 * version 2. This program is licensed "as is" without any warranty of any
6 * kind, whether express or implied.
9 #ifndef __ASM_OPENRISC_BITOPS_ATOMIC_H
10 #define __ASM_OPENRISC_BITOPS_ATOMIC_H
12 static inline void set_bit(int nr, volatile unsigned long *addr)
14 unsigned long mask = BIT_MASK(nr);
15 unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr);
19 "1: l.lwa %0,0(%1) \n"
29 static inline void clear_bit(int nr, volatile unsigned long *addr)
31 unsigned long mask = BIT_MASK(nr);
32 unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr);
36 "1: l.lwa %0,0(%1) \n"
46 static inline void change_bit(int nr, volatile unsigned long *addr)
48 unsigned long mask = BIT_MASK(nr);
49 unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr);
53 "1: l.lwa %0,0(%1) \n"
63 static inline int test_and_set_bit(int nr, volatile unsigned long *addr)
65 unsigned long mask = BIT_MASK(nr);
66 unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr);
71 "1: l.lwa %0,0(%2) \n"
76 : "=&r"(old), "=&r"(tmp)
80 return (old & mask) != 0;
83 static inline int test_and_clear_bit(int nr, volatile unsigned long *addr)
85 unsigned long mask = BIT_MASK(nr);
86 unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr);
91 "1: l.lwa %0,0(%2) \n"
96 : "=&r"(old), "=&r"(tmp)
100 return (old & mask) != 0;
103 static inline int test_and_change_bit(int nr, volatile unsigned long *addr)
105 unsigned long mask = BIT_MASK(nr);
106 unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr);
110 __asm__ __volatile__(
111 "1: l.lwa %0,0(%2) \n"
116 : "=&r"(old), "=&r"(tmp)
120 return (old & mask) != 0;
123 #endif /* __ASM_OPENRISC_BITOPS_ATOMIC_H */