[pypy-svn] r74497 - in pypy/branch/blackhole-improvement/pypy/jit: codewriter metainterp

arigo at codespeak.net arigo at codespeak.net
Wed May 12 10:46:38 CEST 2010


Author: arigo
Date: Wed May 12 10:46:36 2010
New Revision: 74497

Modified:
   pypy/branch/blackhole-improvement/pypy/jit/codewriter/jtransform.py
   pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py
   pypy/branch/blackhole-improvement/pypy/jit/metainterp/resoperation.py
Log:
builtin calls.


Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/jtransform.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/jtransform.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/jtransform.py	Wed May 12 10:46:36 2010
@@ -256,6 +256,11 @@
                                                called_from=self.graph)
         return self.rewrite_call(op, 'G_inline_call', [jitcode])
 
+    def handle_builtin_call(self, op):
+        oopspec_name, args = support.decode_builtin_call(op)
+        op1 = self._prepare_builtin_call(op, oopspec_name, args)
+        return self.handle_residual_call(op1)
+
     handle_residual_indirect_call = handle_residual_call
 
     def handle_regular_indirect_call(self, op):
@@ -267,15 +272,18 @@
             lst.append(jitcode)
         return self.handle_residual_call(op, [IndirectCallTargets(lst)])
 
-    def _do_builtin_call(self, op, oopspec_name=None, args=None, extra=None):
-        if oopspec_name is None: oopspec_name = op.opname
-        if args is None: args = op.args
+    def _prepare_builtin_call(self, op, oopspec_name, args, extra=None):
         argtypes = [v.concretetype for v in args]
         resulttype = op.result.concretetype
         c_func, TP = support.builtin_func_for_spec(self.cpu.rtyper,
                                                    oopspec_name, argtypes,
                                                    resulttype, extra)
-        op1 = SpaceOperation('direct_call', [c_func] + args, op.result)
+        return SpaceOperation('direct_call', [c_func] + args, op.result)
+
+    def _do_builtin_call(self, op, oopspec_name=None, args=None, extra=None):
+        if oopspec_name is None: oopspec_name = op.opname
+        if args is None: args = op.args
+        op1 = self._prepare_builtin_call(op, oopspec_name, args, extra)
         return self.rewrite_op_direct_call(op1)
 
     rewrite_op_int_floordiv_ovf_zer = _do_builtin_call

Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py	Wed May 12 10:46:36 2010
@@ -247,8 +247,16 @@
         if not switchcase:
             self.pc = target
 
+    for _opimpl in ['int_is_zero', 'ptr_iszero', 'ptr_nonzero']:
+        exec py.code.Source('''
+            @arguments("label", "box")
+            def opimpl_goto_if_not_%s(self, target, box):
+                condbox = self.execute(rop.%s, box)
+                self.opimpl_goto_if_not(target, condbox)
+        ''' % (_opimpl, _opimpl.upper())).compile()
+
     for _opimpl in ['int_lt', 'int_le', 'int_eq', 'int_ne', 'int_gt', 'int_ge',
-                    ]:
+                    'ptr_eq', 'ptr_ne']:
         exec py.code.Source('''
             @arguments("label", "box", "box")
             def opimpl_goto_if_not_%s(self, target, b1, b2):

Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/resoperation.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/resoperation.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/resoperation.py	Wed May 12 10:46:36 2010
@@ -183,8 +183,10 @@
     #
     'SAME_AS/1',      # gets a Const or a Box, turns it into another Box
     #
-    'OOIS/2b',
-    'OOISNOT/2b',
+    'PTR_ISZERO/1b',
+    'PTR_NONZERO/1b',
+    'PTR_EQ/2b',
+    'PTR_NE/2b',
     #
     'ARRAYLEN_GC/1d',
     'STRLEN/1',



More information about the Pypy-commit mailing list