[pypy-commit] pypy ppc-jit-backend: Add cashe flushing
hager
noreply at buildbot.pypy.org
Mon Dec 5 17:24:40 CET 2011
Author: hager <sven.hager at uni-duesseldorf.de>
Branch: ppc-jit-backend
Changeset: r50171:22a892ccc25e
Date: 2011-12-05 17:24 +0100
http://bitbucket.org/pypy/pypy/changeset/22a892ccc25e/
Log: Add cashe flushing
diff --git a/pypy/jit/backend/ppc/ppcgen/codebuilder.py b/pypy/jit/backend/ppc/ppcgen/codebuilder.py
--- a/pypy/jit/backend/ppc/ppcgen/codebuilder.py
+++ b/pypy/jit/backend/ppc/ppcgen/codebuilder.py
@@ -18,7 +18,7 @@
compute_vars_longevity)
from pypy.jit.backend.llsupport import symbolic
from pypy.jit.backend.model import CompiledLoopToken
-from pypy.rpython.lltypesystem import lltype, rffi, rstr
+from pypy.rpython.lltypesystem import lltype, rffi, rstr, llmemory
from pypy.jit.metainterp.resoperation import rop
from pypy.jit.metainterp.history import (BoxInt, ConstInt, ConstPtr,
ConstFloat, Box, INT, REF, FLOAT)
@@ -26,6 +26,8 @@
from pypy.tool.udir import udir
from pypy.rlib.objectmodel import we_are_translated
+from pypy.translator.tool.cbuild import ExternalCompilationInfo
+
A = Form("frD", "frA", "frB", "XO3", "Rc")
A1 = Form("frD", "frB", "XO3", "Rc")
A2 = Form("frD", "frA", "frC", "XO3", "Rc")
@@ -918,6 +920,20 @@
def high(w):
return (w >> 16) & 0x0000FFFF
+# XXX check this
+if we_are_translated():
+ eci = ExternalCompilationInfo(includes = ['asm_ppc.h'])
+
+ flush_icache = rffi.llexternal(
+ "LL_flush_icache",
+ [lltype.Signed, lltype.Signed],
+ lltype.Void,
+ compilation_info=eci,
+ _nowrapper=True,
+ sandboxsafe=True)
+else:
+ def flush_icache(x, y): pass
+
class GuardToken(object):
def __init__(self, descr, failargs, faillocs, offset,
save_exc=False, is_invalidate=False):
@@ -1039,8 +1055,14 @@
def currpos(self):
return self.get_rel_pos()
+ def flush_cache(self, addr):
+ startaddr = rffi.cast(lltype.Signed, addr)
+ size = rffi.cast(lltype.Signed, self.get_relative_pos())
+ flush_icache(startaddr, size)
+
def copy_to_raw_memory(self, addr):
self._copy_to_raw_memory(addr)
+ self.flush_cache(addr)
def cmp_op(self, block, a, b, imm=False, signed=True):
if IS_PPC_32:
More information about the pypy-commit
mailing list