- 追加された行はこの色です。
- 削除された行はこの色です。
*参照元 [#c1e38487]
#backlinks
*説明 [#i184d0b9]
-パス: [[linux-2.6.33/arch/x86/include/asm/bitops.h]]
-指定されたビット位置の値をテストする。
--ビット位置が定数(定数マクロ、enmu 値など)の場合に使用する。
--ビット位置が定数(定数マクロ、enum 値など)の場合に使用する。
**引数 [#l0ae78c7]
-unsigned int nr
--ビット位置
-const volatile unsigned long *addr
--評価対象の unsigned long 値のポインタ
**返り値 [#r08214c7]
-int
--ビットがセットされている場合 0 以外、ビットがセットされていない場合 0
**参考 [#i868a0e2]
*実装 [#r12e3cfd]
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() は考慮していない。片手落ち??
--[[linux-2.6.33/variable_test_bit()(x86)]]
}
*コメント [#mddc2dcd]