update atomic.h in lab6
This commit is contained in:
parent
d4c8e547d6
commit
6a1b22578e
@ -53,5 +53,29 @@ test_bit(int nr, volatile void *addr) {
|
||||
return oldbit != 0;
|
||||
}
|
||||
|
||||
/* *
|
||||
* test_and_set_bit - Atomically set a bit and return its old value
|
||||
* @nr: the bit to set
|
||||
* @addr: the address to count from
|
||||
* */
|
||||
static inline bool
|
||||
test_and_set_bit(int nr, volatile void *addr) {
|
||||
int oldbit;
|
||||
asm volatile ("btsl %2, %1; sbbl %0, %0" : "=r" (oldbit), "=m" (*(volatile long *)addr) : "Ir" (nr) : "memory");
|
||||
return oldbit != 0;
|
||||
}
|
||||
|
||||
/* *
|
||||
* test_and_clear_bit - Atomically clear a bit and return its old value
|
||||
* @nr: the bit to clear
|
||||
* @addr: the address to count from
|
||||
* */
|
||||
static inline bool
|
||||
test_and_clear_bit(int nr, volatile void *addr) {
|
||||
int oldbit;
|
||||
asm volatile ("btrl %2, %1; sbbl %0, %0" : "=r" (oldbit), "=m" (*(volatile long *)addr) : "Ir" (nr) : "memory");
|
||||
return oldbit != 0;
|
||||
}
|
||||
|
||||
#endif /* !__LIBS_ATOMIC_H__ */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user