#include #include #include "../libsys/utils.h" uint32_t _test_uncached_cachemiss_bug(uint32_t* pMem) { uint32_t result; pMem[0] = 0x12345678; pMem[1] = 0xFFFFFFFF; DCACHE_invalidate_all(); __asm__ ( "move $s0, %[pMem]\n" "lw $a0, 32($s0)\n" "or $s1, $a0, $0\n" "or $a2, $0, $0\n" "addiu $a2, 1\n" "sw $a2, 32($s0)\n" // "lw $a1, 0(%[pMem])\n" "lw $a0, 32($s0)\n" "lw $a2, 4(%[pMem])\n" "lw $a1, 0(%[pMem])\n" "nop\n" "sw $s1, 8($s0)\n" "or %[result], $a0, $0\n" : [result] "=r" (result) : [pMem] "r" (pMem) : "a0", "a1", "a2", "s0", "s1" ); return result; } uint32_t test_uncached_cachemiss_bug() { uint32_t buf[256], res; res = _test_uncached_cachemiss_bug(buf); return res; }