*参照元 [#rd168395] *参照元 [#nb5dee56] #backlinks *説明 [#yea7af67] *説明 [#m87eed35] -パス: [[linux-2.6.33/arch/x86/include/asm/bitops.h]] -unsigned long 値の指定されたビット位置に ビットが立っているかどうかテストする。 **引数 [#p7b325ae] **引数 [#mf22d14f] -int nr --ビット位置 -const volatile unsigned long *addr --評価対象の unsigned long 値のポインタ **返り値 [#fb855be0] **返り値 [#zc3bfd47] -int --ビットがセットされている場合 0 以外、ビットがセットされていない場合 0 **参考 [#jf6e96ce] **参考 [#e19ce620] *実装 [#i1f88f02] *実装 [#q79ccbb2] #if 0 /* Fool kernel-doc since it doesn't do macros yet */ /** * test_bit - Determine whether a bit is set * @nr: bit number to test * @addr: Address to start counting from */ static int test_bit(int nr, const volatile unsigned long *addr); #endif #define test_bit(nr, addr) \ (__builtin_constant_p((nr)) \ ? constant_test_bit((nr), (addr)) \ : variable_test_bit((nr), (addr))) -nr が定数ならば、定数用のテスト関数(constant_test_bit)を呼び、 そうでなければ汎用のテスト関数(variable_test_bit)を呼ぶ。 --[[linux-2.6.33/__builtin_constant_p()]] --[[linux-2.6.33/constant_test_bit()(x86)]] --[[linux-2.6.33/variable_test_bit()(x86)]] -__builtin_constant_p() は GCC の組み込み関数で、 渡された引数(この場合は nr)が定数ならば 1、そうでなければ 0 を返す。 -この最適化を有効にしないと決して 1 を返さない。 *コメント [#x23f856c] *コメント [#t4594893]