Author: Richard Plangger <[email protected]>
Branch: s390x-backend
Changeset: r82638:ae5c221a741c
Date: 2016-03-01 17:25 +0100
http://bitbucket.org/pypy/pypy/changeset/ae5c221a741c/
Log: translating the interpreter and feeding it with hypothesis, it
compiles but does not correctly enter the dispatch loop
diff --git a/rpython/jit/backend/llsupport/tl/interp.py
b/rpython/jit/backend/llsupport/tl/interp.py
--- a/rpython/jit/backend/llsupport/tl/interp.py
+++ b/rpython/jit/backend/llsupport/tl/interp.py
@@ -2,6 +2,7 @@
from rpython.rlib.objectmodel import specialize, always_inline
from rpython.jit.backend.llsupport.tl import code
from rpython.jit.backend.llsupport.tl.stack import Stack
+from rpython.rlib import rstring
class W_Root(object):
pass
@@ -48,14 +49,28 @@
return W_ListObject(val)
raise NotImplementedError("cannot handle: " + str(val))
+def _read_all_from_file(file):
+ with open(file, 'rb') as fd:
+ return fd.read()
+
+_read_bytecode_from_file = _read_all_from_file
+
+def _read_consts_from_file(file):
+ consts = []
+ bytestring = _read_all_from_file(file)
+ for line in bytestring.splitlines():
+ consts.append(rstring.replace(line, "\\n", "\n"))
+ return consts
+
def entry_point(argv):
- bytecode = argv[0]
+ bytecode = _read_bytecode_from_file(argv[0])
+ consts = _read_consts_from_file(argv[1])
+ print(bytecode)
+ print(consts)
pc = 0
end = len(bytecode)
stack = Stack(16)
space = Space()
- consts = ["hello"] * 100
- consts[0] = "world"
while pc < end:
pc = dispatch_once(space, pc, bytecode, consts, stack)
return 0
@@ -106,5 +121,6 @@
del w_lst.items[w_idx.value]
# index error, just crash the machine!!
else:
+ print("opcode %d is not implemented" % opcode)
raise NotImplementedError
return i + 1
diff --git a/rpython/jit/backend/llsupport/tl/test/zrpy_gc_hypo_test.py
b/rpython/jit/backend/llsupport/tl/test/zrpy_gc_hypo_test.py
--- a/rpython/jit/backend/llsupport/tl/test/zrpy_gc_hypo_test.py
+++ b/rpython/jit/backend/llsupport/tl/test/zrpy_gc_hypo_test.py
@@ -1,19 +1,35 @@
-from rpython.jit.backend.detect_cpu import getcpuclass
-from rpython.jit.tool.oparser import parse
-from rpython.jit.metainterp.history import JitCellToken, NoStats
-from rpython.jit.metainterp.history import BasicFinalDescr, BasicFailDescr
-from rpython.jit.metainterp.gc import get_description
+import py
+from hypothesis import given
+from rpython.tool.udir import udir
from rpython.jit.metainterp.optimize import SpeculativeError
from rpython.annotator.listdef import s_list_of_strings
-from rpython.rtyper.lltypesystem import lltype, llmemory, rffi
-from rpython.rtyper.rclass import getclassrepr, getinstancerepr
-from rpython.translator.unsimplify import call_initial_function
from rpython.translator.translator import TranslationContext
from rpython.translator.c import genc
from rpython.jit.backend.llsupport.tl import interp
+from rpython.jit.backend.llsupport.tl.test import code_strategies as st
+
+def persist(type, contents):
+ dir = udir.ensure(type)
+ print "written", type, "to", dir
+ with open(dir.strpath, 'wb') as fd:
+ fd.write(contents)
+ return dir.strpath
+
+def persist_constants(consts):
+ contents = ""
+ for string in consts:
+ contents += string.replace("\n", "\\n") + "\n"
+ return persist('constants', contents)
+
+def persist_bytecode(bc):
+ return persist('bytecode', bc)
class GCHypothesis(object):
- def setup_class(self):
+ builder = None
+ def setup_method(self, name):
+ if self.builder:
+ return
+
t = TranslationContext()
t.config.translation.gc = "incminimark"
t.config.translation.gcremovetypeptr = True
@@ -22,12 +38,23 @@
rtyper = t.buildrtyper()
rtyper.specialize()
- cbuilder = genc.CStandaloneBuilder(t, f, t.config)
+ cbuilder = genc.CStandaloneBuilder(t, interp.entry_point, t.config)
cbuilder.generate_source(defines=cbuilder.DEBUG_DEFINES)
cbuilder.compile()
+ # prevent from rebuilding the c object!
+ self.builder = cbuilder
- import pdb; pdb.set_trace()
+ def execute(self, bytecode, consts):
+ exe = self.builder.executable_name
+ bc_file = persist_bytecode(bytecode)
+ consts_file = persist_constants(consts)
+ args = [bc_file, consts_file]
+ env = {}
+ res = self.builder.translator.platform.execute(exe, args, env=env)
+ return res.returncode, res.out, res.err
-
- def test_void(self):
- pass
+ @given(st.single_bytecode())
+ def test_execute_single_bytecode(self, program):
+ clazz, bytecode, consts, stack = program
+ result, out, err = self.execute(bytecode, consts)
+ assert result == 0
diff --git a/rpython/jit/backend/x86/test/test_zrpy_gc_hypo.py
b/rpython/jit/backend/x86/test/test_zrpy_gc_hypo.py
new file mode 100644
--- /dev/null
+++ b/rpython/jit/backend/x86/test/test_zrpy_gc_hypo.py
@@ -0,0 +1,6 @@
+from rpython.jit.backend.llsupport.tl.test.zrpy_gc_hypo_test import
GCHypothesis
+
+class TestGCHypothesis(GCHypothesis):
+ # runs ../../llsupport/tl/test/zrpy_gc_hypo_test.py
+ gcrootfinder = "shadowstack"
+ gc = "incminimark"
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit