[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