x86: Implement change_bit with immediate operand as "lock xorb"
Impact: Minor optimization. Implement change_bit with immediate bit count as "lock xorb". This is similar to "lock orb" and "lock andb" for set_bit and clear_bit functions. Signed-off-by: Uros Bizjak <ubizjak@gmail.com> Signed-off-by: H. Peter Anvin <hpa@zytor.com>
This commit is contained in:
parent
a376f30a95
commit
838e8bb71d
@ -168,7 +168,15 @@ static inline void __change_bit(int nr, volatile unsigned long *addr)
|
|||||||
*/
|
*/
|
||||||
static inline void change_bit(int nr, volatile unsigned long *addr)
|
static inline void change_bit(int nr, volatile unsigned long *addr)
|
||||||
{
|
{
|
||||||
asm volatile(LOCK_PREFIX "btc %1,%0" : ADDR : "Ir" (nr));
|
if (IS_IMMEDIATE(nr)) {
|
||||||
|
asm volatile(LOCK_PREFIX "xorb %1,%0"
|
||||||
|
: CONST_MASK_ADDR(nr, addr)
|
||||||
|
: "iq" ((u8)CONST_MASK(nr)));
|
||||||
|
} else {
|
||||||
|
asm volatile(LOCK_PREFIX "btc %1,%0"
|
||||||
|
: BITOP_ADDR(addr)
|
||||||
|
: "Ir" (nr));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user