diff --git a/tests/cputest/tests/access-cache.c b/tests/cputest/tests/access-cache.c new file mode 100644 index 00000000..175f694b --- /dev/null +++ b/tests/cputest/tests/access-cache.c @@ -0,0 +1,11 @@ +#include "trap.h" + +int main() { + int round = 30; + static char arr[4 * 1024 * 1024]; + for (int i = 0; i < round; i++) + arr[i * 64] = i; + for (int i = 0; i < round; i++) + nemu_assert(arr[i * 64] == (char)i); + return 0; +} diff --git a/tests/cputest/tests/cache-flush.c b/tests/cputest/tests/cache-flush.c index 404c16c4..07a9617f 100644 --- a/tests/cputest/tests/cache-flush.c +++ b/tests/cputest/tests/cache-flush.c @@ -1,5 +1,4 @@ -#include -#include +#include "trap.h" #define KB 1024 @@ -16,41 +15,29 @@ int fast_rand(void) { return g_seed; } -#define _STR(x) #x -#define MFC0(dst, src, sel) \ - asm volatile("mfc0 %0, $"_STR(src)", %1\n\t":"=r"(dst):"i"(sel)) -#define MTC0(dst, src, sel) \ - asm volatile("mtc0 %0, $"_STR(dst)", %1\n\t"::"r"(src),"i"(sel)) - -#define NOP() \ - asm volatile("nop") - -#define cp0_count 9 - -uint32_t inline GetCount(int sel){ - uint32_t tick = 0; - if(sel == 0) - MFC0(tick, cp0_count, 0); - else if(sel == 1) - MFC0(tick, cp0_count, 1); - else - _halt(1); - return tick; -} - int main() { fast_srand(0x12345678); unsigned int steps = 1024; - static char arr[4 * 1024 * 1024]; + static uint32_t arr[4 * MB]; int lengthMod; - int sizes[] = { 10 * KB }; + int sizes[] = { 4 * MB }; int s; for (int j = 0; j < 10; j++) { for (s = 0; s < sizeof(sizes)/sizeof(int); s++) { lengthMod = sizes[s] - 1; for (unsigned int i = 0; i < steps; i++) { - arr[fast_rand() & lengthMod] += 10; + arr[fast_rand() & lengthMod] = fast_rand(); + } + } + } + + fast_srand(0x12345678); + for (int j = 0; j < 10; j++) { + for (s = 0; s < sizeof(sizes)/sizeof(int); s++) { + lengthMod = sizes[s] - 1; + for (unsigned int i = 0; i < steps; i++) { + nemu_assert(arr[fast_rand() & lengthMod] == fast_rand()); } } }