我试图在清理 D 缓存之前和之后查看缓存寄存器的内容和 c7 中脏位的状态。这个链接:
https://developer.arm.com/docs/ddi0198/latest/programmers-model/register-descriptions/cache-operations-register-c7说“如果缓存包含任何脏行,则第 30 位设置为 0。如果缓存不包含脏行,第 30 位设置为 1。” 我有一个变量 c7Value 初始化为 15(随机数)
"tc_loop: \n"
"MRC p15, 0, %[c7Value], c7, c10, 3 \n" //Read value of c7 after cleaning
"BNE tc_loop \n"
:[c7Value] "=r"(c7Value)
);
当我在上述循环之后打印 c7Value 的值时,该值为零。我认为只有第 30 位会被设置为 0,如果它发现任何缓存线脏。
另外,有没有办法只读取 c7 的内容而不清理它?
其他寄存器如 c1 可以读为:"MRC p15, 0, R1, c1, C0, 0",但是没有指令可以读取 c7。
因此,有人可以告诉我如何打印缓存内容和/或读取 c7 的内容(检查脏状态)吗?