clflush 实施:为什么 "Flushes cache line containing m8" 中是 m8?

clflush implementation: Why's m8 in "Flushes cache line containing m8"?

Intel 文档中的 clflush 描述说 "Flushes cache line containing m8."。此外,m8 表示来自 Intel 文档的 "a byte from memory"。

我很困惑为什么只有m8,只有一个字节。因为对于32位或者64位的系统,我们应该有32位或者64位的地址,也就是4或者8字节。 我一定是误会了什么。谁能帮帮我?

非常感谢!

如果它采用更宽的操作数,那么它可以跨越两个缓存行。

如果它可以选择性地刷新两个缓存行,微码实现会更复杂,所以他们选择只影响给定的地址,而不是地址范围。

clflush 总是只刷新一个缓存行:包含您使用的有效地址引用的字节的那一行。 m8 只是最简单的描述方式。

如果它仍然只刷新一个缓存行,那将是愚蠢的,并且将其称为 m64 操作数没有意义。他们本可以让它需要一个 8B 对齐的地址,但硬件屏蔽掉地址的低 n 位以确定哪个缓存行是微不足道的。