关于gcc 嵌入式汇编的一个问题
在内核2.6.5版本中,自旋锁spin_lock的实现代码如下(非抢占内核情况)spin_lock(lock)
{
preempt_disable();
__asm__ __volatile__(
"1:\t"
"lock ; decb %0\n\t"
"js 2f\n"
".subsection 1\n\t"
".ifndef .text.lock.\n\t"
".text.lock.:\n\t"
".endif\n\t"
"2:\t" \
"rep;nop\n\t" \
"cmpb $0,%0\n\t" \
"jle 2b\n\t" \
"jmp 1b\n" \
".previous\n\t"
:"=m" (lock->lock) : : "memory";
}
我的问题是:
"lock ; decb %0\n\t"
"js 2f\n"
这里的js 2f实现了没有获取锁时的“自旋”如果能获取到自旋锁(SF == 0 )该函数就应当立即退出,这里是如何实现的?我没有找到ret 指令(是不是与后面紧跟的
".subsection 1\n\t"
".ifndef .text.lock.\n\t"
".text.lock.:\n\t"
".endif\n\t" 有关?)。 gcc会为spin_lock生成ret的 gcc会为spin_lock生成ret的
qtdszws 发表于 2010-04-29 10:22 http://linux.chinaunix.net/bbs/images/common/back.gif
这个在GCC manual上有说明吗?我没找到。。。
页:
[1]