This source file includes following definitions.
- set_bit
- clear_bit
- change_bit
- test_bit
1 #ifndef _I386_BITOPS_H
2 #define _I386_BITOPS_H
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 struct __dummy { unsigned long a[100]; };
20 #define ADDR (*(struct __dummy *) addr)
21
22 extern __inline__ int set_bit(int nr, void * addr)
23 {
24 int oldbit;
25
26 __asm__ __volatile__("btsl %2,%1\n\tsbbl %0,%0"
27 :"=r" (oldbit),"=m" (ADDR)
28 :"r" (nr));
29 return oldbit;
30 }
31
32 extern __inline__ int clear_bit(int nr, void * addr)
33 {
34 int oldbit;
35
36 __asm__ __volatile__("btrl %2,%1\n\tsbbl %0,%0"
37 :"=r" (oldbit),"=m" (ADDR)
38 :"r" (nr));
39 return oldbit;
40 }
41
42 extern __inline__ int change_bit(int nr, void * addr)
43 {
44 int oldbit;
45
46 __asm__ __volatile__("btcl %2,%1\n\tsbbl %0,%0"
47 :"=r" (oldbit),"=m" (ADDR)
48 :"r" (nr));
49 return oldbit;
50 }
51
52
53
54
55
56 extern __inline__ int test_bit(int nr, void * addr)
57 {
58 int oldbit;
59
60 __asm__ __volatile__("btl %2,%1\n\tsbbl %0,%0"
61 :"=r" (oldbit)
62 :"m" (ADDR),"r" (nr));
63 return oldbit;
64 }
65
66 #endif