关于gcc 嵌入式汇编的一个问题
在内核2.6.5版本中,自旋锁spin_lock的实现代码如下(非抢占内核情况)
spin_lock(lock)
{
preempt_disable();
__asm__ __volatile__(
"1:t"
"lock ; decb %0nt"
"js 2fn"
".subsection 1nt"
".ifndef .text.lock.nt"
".text.lock.:nt"
".endifnt"
"2:t"
"rep;nopnt"
"cmpb $0,%0nt"
"jle 2bnt"
"jmp 1bn"
".previousnt"
:"=m" (lock->lock) : : "memory";
}
我的问题是:
"lock ; decb %0nt"
"js 2fn"
这里的js 2f实现了没有获取锁时的“自旋”如果能获取到自旋锁(SF == 0 )该函数就应当立即退出,这里是如何实现的?我没有找到ret 指令(是不是与后面紧跟的
".subsection 1nt"
".ifndef .text.lock.nt"
".text.lock.:nt"
".endifnt" 有关?)。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这个在GCC manual上有说明吗?我没找到。。。
gcc会为spin_lock生成ret的