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

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS