linux-2.6.33/clear_bit()(x86)
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*参照元 [#m6a517d3]
#backlinks
*説明 [#da92c6d2]
-パス: [[linux-2.6.33/arch/x86/include/bitops.h]]
-u32 型変数の指定されたビット位置のビットをクリア、つまり...
**引数 [#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. Howe...
* not contain a memory barrier, so if it is used for lo...
* you should call smp_mb__before_clear_bit() and/or smp...
* in order to ensure changes are visible on other proce...
*/
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]
終了行:
*参照元 [#m6a517d3]
#backlinks
*説明 [#da92c6d2]
-パス: [[linux-2.6.33/arch/x86/include/bitops.h]]
-u32 型変数の指定されたビット位置のビットをクリア、つまり...
**引数 [#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. Howe...
* not contain a memory barrier, so if it is used for lo...
* you should call smp_mb__before_clear_bit() and/or smp...
* in order to ensure changes are visible on other proce...
*/
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]
ページ名: