1
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)
的語義?
謝謝。
謝謝。但是,我不明白爲什麼「海灣合作委員會不應該試圖把它放在教學中」? – lxgeek
由於'x'既用作目的地*也用於*源(因爲'xchg'交換了兩個值),所以有必要確保在覆蓋前使用原始值。該值只在該指令中指定一次,但其行爲就像指定了兩次一樣。再次,這是一個優化黑客。 –