代码是:
static inline unsigned long __xchg(unsigned long x, volatile void * ptr, int size)
{
switch (size) {
case 1:
__asm__ __volatile__("xchgb %b0,%1"
:"=q" (x)
:"m" (*__xg(ptr)), "" (x)
:"memory");
break;
case 2:
__asm__ __volatile__("xchgw %w0,%1"
:"=r" (x)
:"m" (*__xg(ptr)), "" (x)
:"memory");
break;
case 4:
__asm__ __volatile__("xchgl %0,%1"
:"=r" (x)
:"m" (*__xg(ptr)), "" (x)
:"memory");
break;
}
return x;
}
"=q"
的含义是什么?
如何理解"" (x)
的语义?
谢谢。
答案 0 :(得分:2)
"" (x)
更多的是优化而不是任何东西 - 它向GCC发出信号,x
被用作源操作数,但""
表示GCC不应该尝试将其置于指令。
对于"=q"
,它指的是可以访问其最低字节的任何寄存器(32位模式下的al/bl/cl/dl
或64位模式下的任何寄存器)。
“+ q”(x)通常用于像这样更新的操作数。