mips: flush the cache in perf/bigcode.c

MIPS needs to flush the cache after memcpy in perf/bigcode.c.
Otherwise, the executed code will likely be wrong.

This fixes issues with bigcode test on some MIPS platforms.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13550 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/perf/bigcode.c b/perf/bigcode.c
index c368798..628cd01 100644
--- a/perf/bigcode.c
+++ b/perf/bigcode.c
@@ -10,6 +10,10 @@
 #include <stdio.h>
 #include <string.h>
 #include <assert.h>
+#if defined(__mips__)
+#include <asm/cachectl.h>
+#include <sys/syscall.h>
+#endif
 #include "tests/sys_mman.h"
 
 #define FN_SIZE   996      // Must be big enough to hold the compiled f()
@@ -58,7 +62,11 @@
    for (i = 0; i < n_fns; i++) {
       memcpy(&a[FN_SIZE*i], f, FN_SIZE);
    }
-   
+
+#if defined(__mips__)
+   syscall(__NR_cacheflush, a, FN_SIZE * n_fns, ICACHE);
+#endif
+
    for (h = 0; h < n_reps; h += 1) {
       for (i = 0; i < n_fns; i += 4) {
          int(*f1)(int,int) = (void*)&a[FN_SIZE*(i+0)];