为什么clflush需要+ m常数

时间:2016-03-25 19:28:26

标签: linux x86 kernel cpu-cache

我发现in Linux kernel, the clflush function已实现为

asm volatile("clflush %0" : "+m" (*(volatile char __force *)__p));

我不太明白为什么在这里使用+ m?

根据我的理解,不应该将其实现为

asm volatile ("clflush (%0)" :: "r"(p));

1 个答案:

答案 0 :(得分:2)

这两种形式的指令都有效,因为它们都指的是同一个地址。但是,通过使用+m作为约束,它确保使用代码完成的任何优化(因为函数是内联的)不会假定保存在指针__p中的数据。换句话说,它可以防止无效优化。