*参照元 [#jf6b6ac2]
#backlinks

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

-FIXME: これは何?
--説明
-u32 型変数の指定されたビット位置にビットをセット、つまり 1 にする。


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


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


**参考 [#m6f17b58]


*実装 [#d0a29139]
 /**
  * set_bit - Atomically set a bit in memory
  * @nr: the bit to set
  * @addr: the address to start counting from
  *
  * This function is atomic and may not be reordered.  See __set_bit()
  * if you do not require the atomic guarantees.
  *
  * Note: there are no guarantees that this function will not be reordered
  * on non x86 architectures, so if you are writing portable code,
  * make sure not to rely on its reordering guarantees.
  *
  * Note that @nr may be almost arbitrarily large; this function is not
  * restricted to acting on a single-word quantity.
  */
 static __always_inline void
 set_bit(unsigned int nr, volatile unsigned long *addr)
 {
-
--[[linux-2.6.33/__always_inline]]

 	if (IS_IMMEDIATE(nr)) {
 		asm volatile(LOCK_PREFIX "orb %1,%0"
 			: CONST_MASK_ADDR(nr, addr)
 			: "iq" ((u8)CONST_MASK(nr))
 			: "memory");
-
--[[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 "bts %1,%0"
 			: BITOP_ADDR(addr) : "Ir" (nr) : "memory");
-bts r/m32, imm8 命令は Bit Test and Set 命令のこと。
--32ビット変数の指定された位置のビットを
キャリーフラグ(CF)に格納し、ビットを 1にする命令。
--この関数ではテストの方の機能は使わない(=キャリーフラグは見ない)ようだ。
-
--[[linux-2.6.33/BITOP_ADDR()]]

 	}
 }


*コメント [#l451831e]

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