clear_bit在这里定义,http://elixir.free-electrons.com/linux/v3.4/source/arch/alpha/include/asm/bitops.h#L60为
static inline void
clear_bit(unsigned long nr, volatile void * addr)
{
unsigned long temp;
int *m = ((int *) addr) + (nr >> 5);
__asm__ __volatile__(
"1: ldl_l %0,%3\n"
" bic %0,%2,%0\n"
" stl_c %0,%1\n"
" beq %0,2f\n"
".subsection 2\n"
"2: br 1b\n"
".previous"
:"=&r" (temp), "=m" (*m)
:"Ir" (1UL << (nr & 31)), "m" (*m));
}
这显然使用了一些AT&amp; T汇编语法。 ldl加载了很长时间。 bic清除了一点。 stl_c存储长。 beq是一个分支。
但是&#34; 2之后发生了什么:&#34;?什么是&#34; br?&#34;什么是
:"=%r" (temp), "=m" (*m)
:"Ir" (1UL << (nr & 31)), "m" (*m));