linux-2.6.33/set_bit()(x86)
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*参照元 [#jf6b6ac2]
#backlinks
*説明 [#wbd09bbd]
-パス: [[linux-2.6.33/arch/x86/include/bitops.h]]
-u32 型変数の指定されたビット位置にビットをセット、つまり...
**引数 [#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. Se...
* if you do not require the atomic guarantees.
*
* Note: there are no guarantees that this function will...
* on non x86 architectures, so if you are writing porta...
* make sure not to rely on its reordering guarantees.
*
* Note that @nr may be almost arbitrarily large; this f...
* 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]
終了行:
*参照元 [#jf6b6ac2]
#backlinks
*説明 [#wbd09bbd]
-パス: [[linux-2.6.33/arch/x86/include/bitops.h]]
-u32 型変数の指定されたビット位置にビットをセット、つまり...
**引数 [#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. Se...
* if you do not require the atomic guarantees.
*
* Note: there are no guarantees that this function will...
* on non x86 architectures, so if you are writing porta...
* make sure not to rely on its reordering guarantees.
*
* Note that @nr may be almost arbitrarily large; this f...
* 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]
ページ名: