📄 bitops.h
字号:
/***************************************************************************
** File name : const.h
** Author : x.cheng
** Create date :
**
** Comments:
** Bit operations.
**
** Revisions:
** $Log: bitops.h,v $
** Revision 1.1 2005/08/18 06:32:50 x.cheng
** add into repositories
**
**
***************************************************************************/
#ifndef __BITOPS_H__
#define __BITOPS_H__
#include <const.h>
#define ADDR ( *(volatile long *)addr )
//! Determine whether a bit is set.
//static inline int test_bit(int nr, volatile void * addr)
static inline int iTestBit(int nr, volatile void * addr)
{
int oldbit;
__asm__ __volatile__ (
"btl %2, %1\n"
"sbbl %0, %0\n"
:"=r"(oldbit)
: "m"(ADDR), "Ir"(nr) );
return( oldbit );
}
//! Atomically set a bit in memory.
static inline void set_bit(int nr, volatile void * addr)
{
__asm__ __volatile__ (
"lock ; btsl %1, %0"
:"=m"(ADDR)
: "Ir"(nr) );
}
//! Atomically clear a bit in memory.
static inline void clear_bit(int nr, volatile void * addr)
{
__asm__ __volatile__ (
"lock ; btrl %1, %0"
: "=m"(ADDR)
: "Ir"(nr) );
}
//! Toggle a bit in memory (complement).
static inline void change_bit( int nr, volatile void *addr )
{
__asm__ __volatile__ (
"lock ; btcl %1, %0"
: "=m"(ADDR)
: "Ir"(nr) );
}
//! Set a bit and return its old value.
static inline int test_and_set_bit( int nr, volatile void *addr )
{
int oldbit;
__asm__ __volatile__ (
"lock\n"
"btsl %2, %1\n"
"sbbl %0, %0"
: "=r"(oldbit), "=m"(ADDR)
: "Ir"(nr)
: "memory" );
return oldbit;
}
#endif /* end of __BITOPS_H__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -