有人可以解释以下声明吗?
static inline void cpu_write_dtlb(uint32_t vpn, unsigned attr)
{
asm volatile ("wdtlb %1, %0; dsync\n" :: "r" (vpn), "r" (attr));
}
答案 0 :(得分:2)
如果您的问题与语法有关,那就是GCC内联汇编语言语法。
特别是%0
和%1
被GCC存储"r"
自变量的寄存器代替。
volatile
关键字具有以下作用:
GCC的优化器有时会确定不需要输出变量,因此有时会丢弃asm语句。同样,如果优化器认为代码将始终返回相同的结果(即,其输入值在两次调用之间均未更改),则可以将代码移出循环。使用
volatile
限定词将禁用这些优化。没有输出操作数的asm
语句(包括asm goto语句)是隐式volatile
。
有关此扩展语法的详细信息,请参见Extended Asm - Assembler Instructions with C Expression Operands的GCC文档。