参照元†
- 指定されたビット位置の値をテストする。
- ビット位置が定数(定数マクロ、enmu 値など)の場合に使用する。
- unsigned int nr
- const volatile unsigned long *addr
- 評価対象の unsigned long 値のポインタ
返り値†
- int
- ビットがセットされている場合 0 以外、ビットがセットされていない場合 0
static __always_inline int constant_test_bit(unsigned int nr, const volatile unsigned long *addr)
{
return ((1UL << (nr % BITS_PER_LONG)) &
(((unsigned long *)addr)[nr / BITS_PER_LONG])) != 0;
- 一見遅そうな処理だが、
(1UL << (nr % BITS_PER_LONG)) と nr / BITS_PER_LONG は
コンパイル時に定数に変換される。たぶん。
- BITS_PER_LONG ビット以上の位置を指定した際の動作も考慮しているようだが、
相棒の variable_test_bit() は考慮していない。片手落ち??
}
コメント†