有人可以解释以下代码语句吗?

时间:2019-08-01 10:40:38

标签: c volatile

有人可以解释以下声明吗?

static inline void cpu_write_dtlb(uint32_t vpn, unsigned attr)
{
    asm volatile ("wdtlb  %1, %0; dsync\n" :: "r" (vpn), "r" (attr));
}

1 个答案:

答案 0 :(得分:2)

如果您的问题与语法有关,那就是GCC内联汇编语言语法。 特别是%0%1被GCC存储"r"自变量的寄存器代替。

volatile关键字具有以下作用:

  

GCC的优化器有时会确定不需要输出变量,因此有时会丢弃asm语句。同样,如果优化器认为代码将始终返回相同的结果(即,其输入值在两次调用之间均未更改),则可以将代码移出循环。使用volatile限定词将禁用这些优化。没有输出操作数的asm语句(包括asm goto语句)是隐式volatile

有关此扩展语法的详细信息,请参见Extended Asm - Assembler Instructions with C Expression Operands的GCC文档。