谷歌之春 发表于 2010-04-28 22:07

关于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" 有关?)。

qtdszws 发表于 2010-04-29 10:22

gcc会为spin_lock生成ret的

谷歌之春 发表于 2010-04-29 22:46

gcc会为spin_lock生成ret的
qtdszws 发表于 2010-04-29 10:22 http://linux.chinaunix.net/bbs/images/common/back.gif


    这个在GCC manual上有说明吗?我没找到。。。
页: [1]
查看完整版本: 关于gcc 嵌入式汇编的一个问题