我想对我的x86 IA32 Intel CPU的缓存进行一些测试。
提到下面的文档,由于汇编编码不好和新的缓存概念,我无法进行缓存测试。
我想启用缓存,invalidate,writeback,writethrough和cache disable。
你能帮我解决一下内联C汇编代码吗?
我遇到了一些asm指令,clflush,wbinvd ...不确定何时使用以及如何使用。
另外,我如何验证缓存启用/禁用/无效/写回功能。
看到这篇文章,但似乎是x86 64bit。许多汇编指令不匹配。
enable/disable cache on intel 64bit machine: CD bit always set?
int cache_test(int opt) {
unsigned int cr0;
switch(opt) {
case 0:
__asm__ volatile(
"pushl %%eax\n\t"
"movl %%cr0,%%eax\n\t"
"orl $0x60000000,%%eax\n\t"
"movl %%eax,%%cr0\n\t"
"movl %%cr0, %0\n\t"
"wbinvd\n\t"
"popl %%eax"
: "=r"(cr0)
:
:);
printf("printf: disable cache cr0 0x%x\n", cr0);
break;
case 1:
__asm__ volatile(
"pushl %%eax\n\t"
"movl %%cr0,%%eax\n\t"
"andl $0x9fffffff,%%eax\n\t"
"movl %%eax,%%cr0\n\t"
"movl %%cr0, %0\n\t"
"popl %%eax"
: "=r"(cr0)
:
:);
printf("printf: enable cache; cr0 0x%x\n", cr0);
break;
case 2:
__asm__ volatile(
"pushl %%eax\n\t"
"movl %%cr0, %%eax\n\t"
"movl %%eax, %0\n\t"
"popl %%eax"
: "=r"(cr0)
:
:);
printf("printf: XENMEM_show_cache_status cro value is 0x%x\n", cr0);
return (long)cr0;
}
return cr0;
}
将代码移植到32位IA CPU。可以启用和禁用缓存吗?
感谢您的帮助。