[pypy-commit] pypy better-jit-hooks: improve a bit how to get to items
fijal
noreply at buildbot.pypy.org
Sun Jan 8 19:29:02 CET 2012
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: better-jit-hooks
Changeset: r51138:f4129eca042d
Date: 2012-01-08 20:28 +0200
http://bitbucket.org/pypy/pypy/changeset/f4129eca042d/
Log: improve a bit how to get to items
diff --git a/pypy/jit/metainterp/test/test_jitportal.py b/pypy/jit/metainterp/test/test_jitportal.py
--- a/pypy/jit/metainterp/test/test_jitportal.py
+++ b/pypy/jit/metainterp/test/test_jitportal.py
@@ -5,6 +5,7 @@
from pypy.jit.codewriter.policy import JitPolicy
from pypy.jit.metainterp.jitprof import ABORT_FORCE_QUASIIMMUT
from pypy.jit.metainterp.resoperation import rop
+from pypy.rpython.annlowlevel import hlstr
class TestJitPortal(LLJitMixin):
def test_abort_quasi_immut(self):
@@ -130,7 +131,9 @@
[jit_hooks.boxint_new(3),
jit_hooks.boxint_new(4)],
jit_hooks.boxint_new(1))
- return jit_hooks.resop_opnum(op)
+ assert hlstr(jit_hooks.resop_getopname(op)) == 'int_add'
+ assert jit_hooks.resop_getopnum(op) == rop.INT_ADD
+ box = jit_hooks.resop_getarg(op, 0)
+ assert jit_hooks.box_getint(box) == 3
- res = self.meta_interp(main, [])
- assert res == rop.INT_ADD
+ self.meta_interp(main, [])
diff --git a/pypy/rlib/jit_hooks.py b/pypy/rlib/jit_hooks.py
--- a/pypy/rlib/jit_hooks.py
+++ b/pypy/rlib/jit_hooks.py
@@ -4,26 +4,28 @@
from pypy.rpython.lltypesystem import llmemory, lltype
from pypy.rpython.lltypesystem import rclass
from pypy.rpython.annlowlevel import cast_instance_to_base_ptr,\
- cast_base_ptr_to_instance
+ cast_base_ptr_to_instance, llstr, hlstr
from pypy.rlib.objectmodel import specialize
-def register_helper(helper, s_result):
-
- class Entry(ExtRegistryEntry):
- _about_ = helper
+def register_helper(s_result):
+ def wrapper(helper):
+ class Entry(ExtRegistryEntry):
+ _about_ = helper
- def compute_result_annotation(self, *args):
- return s_result
+ def compute_result_annotation(self, *args):
+ return s_result
- def specialize_call(self, hop):
- from pypy.rpython.lltypesystem import lltype
+ def specialize_call(self, hop):
+ from pypy.rpython.lltypesystem import lltype
- c_func = hop.inputconst(lltype.Void, helper)
- c_name = hop.inputconst(lltype.Void, 'access_helper')
- args_v = [hop.inputarg(arg, arg=i)
- for i, arg in enumerate(hop.args_r)]
- return hop.genop('jit_marker', [c_name, c_func] + args_v,
- resulttype=hop.r_result)
+ c_func = hop.inputconst(lltype.Void, helper)
+ c_name = hop.inputconst(lltype.Void, 'access_helper')
+ args_v = [hop.inputarg(arg, arg=i)
+ for i, arg in enumerate(hop.args_r)]
+ return hop.genop('jit_marker', [c_name, c_func] + args_v,
+ resulttype=hop.r_result)
+ return helper
+ return wrapper
def _cast_to_box(llref):
from pypy.jit.metainterp.history import AbstractValue
@@ -42,6 +44,7 @@
return lltype.cast_opaque_ptr(llmemory.GCREF,
cast_instance_to_base_ptr(obj))
+ at register_helper(annmodel.SomePtr(llmemory.GCREF))
def resop_new(no, llargs, llres):
from pypy.jit.metainterp.history import ResOperation
@@ -49,15 +52,23 @@
res = _cast_to_box(llres)
return _cast_to_gcref(ResOperation(no, args, res))
-register_helper(resop_new, annmodel.SomePtr(llmemory.GCREF))
-
+ at register_helper(annmodel.SomePtr(llmemory.GCREF))
def boxint_new(no):
from pypy.jit.metainterp.history import BoxInt
return _cast_to_gcref(BoxInt(no))
-register_helper(boxint_new, annmodel.SomePtr(llmemory.GCREF))
-
-def resop_opnum(llop):
+ at register_helper(annmodel.SomeInteger())
+def resop_getopnum(llop):
return _cast_to_resop(llop).getopnum()
-register_helper(resop_opnum, annmodel.SomeInteger())
+ at register_helper(annmodel.SomeString(can_be_None=True))
+def resop_getopname(llop):
+ return llstr(_cast_to_resop(llop).getopname())
+
+ at register_helper(annmodel.SomePtr(llmemory.GCREF))
+def resop_getarg(llop, no):
+ return _cast_to_gcref(_cast_to_resop(llop).getarg(no))
+
+ at register_helper(annmodel.SomeInteger())
+def box_getint(llbox):
+ return _cast_to_box(llbox).getint()
More information about the pypy-commit
mailing list