bitops.h
来自「小型操作系统,以VC为开发环境,需要boachs调试」· C头文件 代码 · 共 81 行
H
81 行
/***************************************************************************
** 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 + =
减小字号Ctrl + -
显示快捷键?