*参照元 [#m6a517d3]
#backlinks

*説明 [#da92c6d2]
-パス: [[linux-2.6.33/arch/x86/include/bitops.h]]

-u32 型変数の指定されたビット位置のビットをクリア、つまり 0 にする。


**引数 [#vb9362cc]
-int nr
--ビット位置
-void *addr
--ビットをセットしたい u32 型変数へのポインタ


**返り値 [#p14fe353]
-なし


**参考 [#b5e6fcef]


*実装 [#x32b530e]
 /**
  * clear_bit - Clears a bit in memory
  * @nr: Bit to clear
  * @addr: Address to start counting from
  *
  * clear_bit() is atomic and may not be reordered.  However, it does
  * not contain a memory barrier, so if it is used for locking purposes,
  * you should call smp_mb__before_clear_bit() and/or smp_mb__after_clear_bit()
  * in order to ensure changes are visible on other processors.
  */
 static __always_inline void
 clear_bit(int nr, volatile unsigned long *addr)
 {
-
--[[linux-2.6.33/__always_inline]]

 	if (IS_IMMEDIATE(nr)) {
 		asm volatile(LOCK_PREFIX "andb %1,%0"
 			: CONST_MASK_ADDR(nr, addr)
 			: "iq" ((u8)~CONST_MASK(nr)));
-
--[[linux-2.6.33/IS_IMMEDIATE()]]
-
--[[linux-2.6.33/LOCK_PREFIX]]
-
--[[linux-2.6.33/CONST_MASK_ADDR()]]
-
--[[linux-2.6.33/CONST_MASK()]]

 	} else {
 		asm volatile(LOCK_PREFIX "btr %1,%0"
 			: BITOP_ADDR(addr)
 			: "Ir" (nr));
-btr r/m32, imm8 命令は Bit Test and Reset 命令のこと。
--32ビット変数の指定された位置のビットを
キャリーフラグ(CF)に格納し、ビットを 0 にする命令。
--この関数ではテストの方の機能は使わない(=キャリーフラグは見ない)ようだ。
-
--[[linux-2.6.33/BITOP_ADDR()]]

 	}
 }

*コメント [#xa6303a6]

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