*参照元 [#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]