- 论坛徽章:
- 0
|
在 linux-2.6.34.14/arch/arm/include/asm/system.h 看到如下代码段:
(这是查找 atomic_dec_not_zero 在 ARM 实现时碰到的)
此函数原型为(前面的数字是文件中的行号):- 353 /*
- 354 * cmpxchg only support 32-bits operands on ARMv6.
- 355 */
- 356
- 357 static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old,
- 358 unsigned long new, int size)
复制代码 跟下边代码有关的变量定义有:
unsigned long oldval, res;
该函数中的代码段如下:- 389 case 4:
- 390 do {
- 391 asm volatile("@ __cmpxchg4\n"
- 392 " ldrex %1, [%2]\n"
- 393 " mov %0, #0\n"
- 394 " teq %1, %3\n"
- 395 " strexeq %0, %4, [%2]\n"
- 396 : "=&r" (res), "=&r" (oldval)
- 397 : "r" (ptr), "Ir" (old), "r" (new)
- 398 : "memory", "cc");
- 399 } while (res);
复制代码 就上边第 391 行- asm volatile("@ __cmpxchg4\n"
复制代码 这一行中 "@" 的作用是什么呢?
Thanks !
|
|