]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
ARM: Flush instruction cache in assembler backend.
authorMike Pall <mike>
Thu, 26 May 2011 16:04:01 +0000 (18:04 +0200)
committerMike Pall <mike>
Thu, 26 May 2011 16:04:01 +0000 (18:04 +0200)
src/lj_asm.c

index e028ab4fafbcc3c49e48734e12875fa30dafe439..640b6e15827d8d4eae1bf2b64cf4875b17c4b4e2 100644 (file)
@@ -852,6 +852,19 @@ static uint32_t ir_khash(IRIns *ir)
   return hashrot(lo, hi);
 }
 
+/* Flush instruction cache. */
+static void asm_cache_flush(MCode *start, MCode *end)
+{
+  VG_INVALIDATE(start, (char *)end-(char *)start);
+#if !LJ_TARGET_X86ORX64
+#if defined(__GNUC__)
+  __clear_cache(start, end);
+#else
+#error "Missing builtin to flush instruction cache"
+#endif
+#endif
+}
+
 /* -- Allocations --------------------------------------------------------- */
 
 static void asm_gencall(ASMState *as, const CCallInfo *ci, IRRef *args);
@@ -1620,7 +1633,7 @@ void lj_asm_trace(jit_State *J, GCtrace *T)
   if (!as->loopref)
     asm_tail_fixup(as, T->link);  /* Note: this may change as->mctop! */
   T->szmcode = (MSize)((char *)as->mctop - (char *)as->mcp);
-  VG_INVALIDATE(T->mcode, T->szmcode);
+  asm_cache_flush(T->mcode, as->mctop);
 }
 
 #undef IR